aboutsummaryrefslogtreecommitdiffstats
path: root/components/net
diff options
context:
space:
mode:
authorBastien Orivel <eijebong@bananium.fr>2018-03-14 23:49:40 +0100
committerBastien Orivel <eijebong@bananium.fr>2018-03-15 02:05:00 +0100
commitf48d0928d5ebad6ca3d0f419fdbc2a8522477148 (patch)
tree00fec34717d191648d9baccf24b0567c9c373cb4 /components/net
parent84ce43284cd074fec9fafc7dd23bb3d2a1013d43 (diff)
downloadservo-f48d0928d5ebad6ca3d0f419fdbc2a8522477148.tar.gz
servo-f48d0928d5ebad6ca3d0f419fdbc2a8522477148.zip
Update servo-websocket to 0.21
Diffstat (limited to 'components/net')
-rw-r--r--components/net/Cargo.toml2
-rw-r--r--components/net/websocket_loader.rs51
2 files changed, 34 insertions, 19 deletions
diff --git a/components/net/Cargo.toml b/components/net/Cargo.toml
index 27807663744..b9f24ebac34 100644
--- a/components/net/Cargo.toml
+++ b/components/net/Cargo.toml
@@ -35,7 +35,7 @@ serde = "1.0"
serde_json = "1.0"
servo_config = {path = "../config"}
servo_url = {path = "../url"}
-servo-websocket = "0.20"
+servo-websocket = { version = "0.21", default-features = false, features = ["sync"] }
threadpool = "1.0"
time = "0.1.17"
unicase = "1.4.0"
diff --git a/components/net/websocket_loader.rs b/components/net/websocket_loader.rs
index d369300ecd2..77140631e7a 100644
--- a/components/net/websocket_loader.rs
+++ b/components/net/websocket_loader.rs
@@ -26,11 +26,12 @@ use std::sync::{Arc, Mutex};
use std::sync::atomic::{AtomicBool, Ordering};
use std::thread;
use url::Position;
-use websocket::{Message, Receiver as WSReceiver, Sender as WSSender};
+use websocket::Message;
use websocket::header::{Origin, WebSocketAccept, WebSocketKey, WebSocketProtocol, WebSocketVersion};
-use websocket::message::Type as MessageType;
-use websocket::receiver::Receiver;
-use websocket::sender::Sender;
+use websocket::message::OwnedMessage;
+use websocket::receiver::{Reader as WsReader, Receiver as WsReceiver};
+use websocket::sender::{Sender as WsSender, Writer as WsWriter};
+use websocket::ws::dataframe::DataFrame;
pub fn init(
req_init: RequestInit,
@@ -60,7 +61,7 @@ pub fn init(
let ws_sender_incoming = ws_sender.clone();
thread::spawn(move || {
for message in receiver.incoming_messages() {
- let message: Message = match message {
+ let message = match message {
Ok(m) => m,
Err(e) => {
debug!("Error receiving incoming WebSocket message: {:?}", e);
@@ -68,21 +69,25 @@ pub fn init(
break;
}
};
- let message = match message.opcode {
- MessageType::Text => MessageData::Text(String::from_utf8_lossy(&message.payload).into_owned()),
- MessageType::Binary => MessageData::Binary(message.payload.into_owned()),
- MessageType::Ping => {
- let pong = Message::pong(message.payload);
+ let message = match message {
+ OwnedMessage::Text(_) => {
+ MessageData::Text(String::from_utf8_lossy(&message.take_payload()).into_owned())
+ },
+ OwnedMessage::Binary(_) => MessageData::Binary(message.take_payload()),
+ OwnedMessage::Ping(_) => {
+ let pong = Message::pong(message.take_payload());
ws_sender_incoming.lock().unwrap().send_message(&pong).unwrap();
continue;
},
- MessageType::Pong => continue,
- MessageType::Close => {
+ OwnedMessage::Pong(_) => continue,
+ OwnedMessage::Close(ref msg) => {
if !initiated_close_incoming.fetch_or(true, Ordering::SeqCst) {
ws_sender_incoming.lock().unwrap().send_message(&message).unwrap();
}
- let code = message.cd_status_code;
- let reason = String::from_utf8_lossy(&message.payload).into_owned();
+ let (code, reason) = match *msg {
+ None => (None, "".into()),
+ Some(ref data) => (Some(data.status_code), data.reason.clone())
+ };
let _ = resource_event_sender.send(WebSocketNetworkEvent::Close(code, reason));
break;
},
@@ -148,7 +153,7 @@ fn obtain_a_websocket_connection(url: &ServoUrl) -> Result<Stream, NetworkError>
fn establish_a_websocket_connection(
req_init: RequestInit,
http_state: &HttpState
-) -> Result<(Option<String>, Sender<Stream>, Receiver<Stream>), NetworkError>
+) -> Result<(Option<String>, WsWriter<HttpStream>, WsReader<HttpStream>), NetworkError>
{
let protocols = match req_init.mode {
RequestMode::WebSocket { protocols } => protocols.clone(),
@@ -255,9 +260,19 @@ fn establish_a_websocket_connection(
None
};
- let sender = Sender::new(response.writer, true);
- let receiver = Receiver::new(response.reader, false);
- Ok((protocol_in_use, sender, receiver))
+ let sender = WsSender::new(true);
+ let writer = WsWriter {
+ stream: response.writer,
+ sender
+ };
+
+ let receiver = WsReceiver::new(false);
+ let reader = WsReader {
+ stream: response.reader,
+ receiver,
+ };
+
+ Ok((protocol_in_use, writer, reader))
}
struct Response {