Skip to content

Commit 74b4274

Browse files
committed
Update for 0.7.0
Expose HTTPVersion, etc
1 parent 5df7d82 commit 74b4274

File tree

7 files changed

+46
-16
lines changed

7 files changed

+46
-16
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22

33
name = "websocket"
4-
version = "0.6.1"
4+
version = "0.7.0"
55
authors = ["cyderize <[email protected]>"]
66

77
description = "A WebSocket (RFC6455) library for Rust."

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Rust-WebSocket attempts to provide a framework for WebSocket connections (both c
1010
To add a library release version from [crates.io](https://crates.io/crates/websocket) to a Cargo project, add this to the 'dependencies' section of your Cargo.toml:
1111

1212
```INI
13-
websocket = "~0.6.1"
13+
websocket = "~0.7.0"
1414
```
1515

1616
To add the library's Git repository to a Cargo project, add this to your Cargo.toml:

src/lib.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
//! ```no_run
1414
//! use std::io::TcpListener;
1515
//! use std::io::{Listener, Acceptor};
16-
//! use websocket::WebSocketClient;
16+
//! use websocket::{WebSocketClient, WebSocketClientMode};
1717
//! use websocket::handshake::WebSocketResponse;
1818
//!
1919
//! let listener = TcpListener::bind("127.0.0.1:1234");
@@ -25,8 +25,7 @@
2525
//! // Spawn a new task for each connection to run in parallel
2626
//! spawn(proc() {
2727
//! // Get a WebSocketClient from this stream
28-
//! // The mask argument is false as messages sent by the server are always unmasked
29-
//! let mut client = WebSocketClient::new(stream, false);
28+
//! let mut client = WebSocketClient::new(stream, WebSocketClientMode::RemoteClient);
3029
//!
3130
//! // Read the handshake from the client
3231
//! let request = client.receive_handshake_request().unwrap();
@@ -60,7 +59,7 @@ extern crate url;
6059
extern crate sha1;
6160
extern crate serialize;
6261

63-
pub use self::ws::client::WebSocketClient;
62+
pub use self::ws::client::{WebSocketClient, WebSocketClientMode};
6463

6564
/// Structs for manipulation of HTTP headers. Used in conjunction with
6665
/// WebSocketRequest and WebSocketResponse.
@@ -74,6 +73,7 @@ pub mod headers {
7473
pub mod handshake {
7574
pub use ws::handshake::request::WebSocketRequest;
7675
pub use ws::handshake::response::WebSocketResponse;
76+
pub use ws::handshake::version::HttpVersion;
7777
}
7878

7979
/// Structs for WebSocket messages and the transmission of messages

src/ws/client.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use std::clone::Clone;
1212
///
1313
/// ```no_run
1414
/// use std::io::TcpStream;
15-
/// use websocket::WebSocketClient;
15+
/// use websocket::{WebSocketClient, WebSocketClientMode};
1616
/// use websocket::handshake::WebSocketRequest;
1717
///
1818
/// let request = WebSocketRequest::new("ws://127.0.0.1:1234", ["myProtocol"].as_slice()).unwrap();
@@ -21,7 +21,7 @@ use std::clone::Clone;
2121
/// // We can get the hostname from the request
2222
/// let stream = TcpStream::connect(request.host().unwrap().as_slice()).unwrap();
2323
///
24-
/// let mut client = WebSocketClient::new(stream, true);
24+
/// let mut client = WebSocketClient::new(stream, WebSocketClientMode::RemoteServer);
2525
/// let _ = client.send_handshake_request(&request);
2626
/// let response = client.receive_handshake_response().unwrap();
2727
///
@@ -47,10 +47,13 @@ impl<S: Stream + Clone> WebSocketClient<S> {
4747
/// endpoint (and therefore, the server is the local endpoint), set mask to false.
4848
///
4949
/// Nothing is sent to or read from the stream during the conversion.
50-
pub fn new(stream: S, mask: bool) -> WebSocketClient<S> {
50+
pub fn new(stream: S, mode: WebSocketClientMode) -> WebSocketClient<S> {
5151
WebSocketClient {
5252
stream: stream,
53-
mask: mask,
53+
mask: match mode {
54+
WebSocketClientMode::RemoteClient => { false }
55+
WebSocketClientMode::RemoteServer => { true }
56+
},
5457
}
5558
}
5659

@@ -104,4 +107,9 @@ impl<S: Stream + Clone> Clone for WebSocketClient<S> {
104107
mask: self.mask,
105108
}
106109
}
110+
}
111+
112+
pub enum WebSocketClientMode {
113+
RemoteClient,
114+
RemoteServer,
107115
}

src/ws/handshake/version.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,40 @@
1+
#[phase(plugin)]
2+
extern crate regex_macros;
3+
extern crate regex;
4+
15
use std::fmt::{Show, Formatter, Result};
26
use std::option::Option;
37

8+
/// Represents an HTTP version.
49
pub struct HttpVersion {
10+
/// The major HTTP version.
511
pub version_major: u8,
12+
/// The minor HTTP version if present.
613
pub version_minor: Option<u8>,
714
}
815

916
impl HttpVersion {
17+
/// Create a new HttpVersion from major and minor version numbers.
1018
pub fn new(version_major: u8, version_minor: Option<u8>) -> HttpVersion {
1119
HttpVersion {
1220
version_major: version_major,
1321
version_minor: version_minor,
1422
}
1523
}
24+
25+
/// Create a new HttpVersion from a string. Panics if unable to parse the string.
26+
pub fn parse(version: &str) -> HttpVersion {
27+
let re = regex!(r"(\d+)(?:\.(\d+))?");
28+
let captures = re.captures(version).unwrap();
29+
30+
let version_major: Option<u8> = from_str(captures.at(1));
31+
let version_minor: Option<u8> = from_str(captures.at(2));
32+
33+
HttpVersion {
34+
version_major: version_major.unwrap(),
35+
version_minor: version_minor,
36+
}
37+
}
1638
}
1739

1840
impl Show for HttpVersion {

src/ws/message/receive.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ use std::clone::Clone;
1313
///
1414
/// ```no_run
1515
/// use websocket::message::WebSocketMessage;
16-
/// # use websocket::WebSocketClient;
16+
/// # use websocket::{WebSocketClient, WebSocketClientMode};
1717
/// # use std::io::TcpStream;
1818
/// # #[allow(unused_must_use)]
1919
/// # fn foo() {
2020
/// # let stream = TcpStream::connect("127.0.0.1:1234").unwrap();
21-
/// # let mut client = WebSocketClient::new(stream, true);
21+
/// # let mut client = WebSocketClient::new(stream, WebSocketClientMode::RemoteServer);
2222
///
2323
/// let receiver = client.receiver();
2424
///

src/ws/message/send.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ use std::clone::Clone;
1313
///
1414
/// ```no_run
1515
/// use websocket::message::WebSocketMessage;
16-
/// # use websocket::WebSocketClient;
16+
/// # use websocket::{WebSocketClient, WebSocketClientMode};
1717
/// # use std::io::TcpStream;
1818
/// # #[allow(unused_must_use)]
1919
/// # fn foo() {
2020
/// # let stream = TcpStream::connect("127.0.0.1:1234").unwrap();
21-
/// # let mut client = WebSocketClient::new(stream, true);
21+
/// # let mut client = WebSocketClient::new(stream, WebSocketClientMode::RemoteServer);
2222
///
2323
/// let mut sender = client.sender(); // Get a sender
2424
/// let data = "My fancy message".to_string();
@@ -100,12 +100,12 @@ impl<S: Stream + Clone> WebSocketSender<S> {
100100
///
101101
/// ```no_run
102102
/// use websocket::message::WebSocketMessage;
103-
/// # use websocket::WebSocketClient;
103+
/// # use websocket::{WebSocketClient, WebSocketClientMode};
104104
/// # use std::io::TcpStream;
105105
/// # #[allow(unused_must_use)]
106106
/// # fn foo() {
107107
/// # let stream = TcpStream::connect("127.0.0.1:1234").unwrap();
108-
/// # let mut client = WebSocketClient::new(stream, true);
108+
/// # let mut client = WebSocketClient::new(stream, WebSocketClientMode::RemoteServer);
109109
/// # let mut sender = client.sender();
110110
/// // Get a WebSocketFragmentSerializer
111111
/// let mut fragment = sender.fragment();

0 commit comments

Comments
 (0)