aboutsummaryrefslogtreecommitdiffstats
path: root/components/net/websocket_loader.rs
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2017-03-31 15:49:24 +0200
committerAnthony Ramine <n.oxyde@gmail.com>2017-03-31 16:18:47 +0200
commit19a2516e105f6ac6c4e3d6027c150bd7c06ad89d (patch)
tree04ae0add40c56e0955823d687f0e2404e4a95b35 /components/net/websocket_loader.rs
parent6a795f4795f936789a3f34ad87a367e52cf1bf97 (diff)
downloadservo-19a2516e105f6ac6c4e3d6027c150bd7c06ad89d.tar.gz
servo-19a2516e105f6ac6c4e3d6027c150bd7c06ad89d.zip
Disable wss support
None of the existing websocket libraries are currently able to cope with openssl 0.9 and be featureful, so we are disabling wss for now to land openssl 0.9.
Diffstat (limited to 'components/net/websocket_loader.rs')
-rw-r--r--components/net/websocket_loader.rs62
1 files changed, 24 insertions, 38 deletions
diff --git a/components/net/websocket_loader.rs b/components/net/websocket_loader.rs
index 87cd83d5437..ae40026614c 100644
--- a/components/net/websocket_loader.rs
+++ b/components/net/websocket_loader.rs
@@ -11,14 +11,13 @@ use hyper::header::{Accept, CacheControl, CacheDirective, Connection, Connection
use hyper::header::{Headers, Host, SetCookie, Pragma, Protocol, ProtocolName, Upgrade};
use hyper::http::h1::{LINE_ENDING, parse_response};
use hyper::method::Method;
-use hyper::net::{HttpStream, HttpsStream};
+use hyper::net::HttpStream;
use hyper::status::StatusCode;
use hyper::version::HttpVersion;
use net_traits::{CookieSource, MessageData, NetworkError, WebSocketCommunicate, WebSocketConnectData};
use net_traits::{WebSocketDomAction, WebSocketNetworkEvent};
use net_traits::hosts::replace_host;
use net_traits::request::Type;
-use openssl::ssl::{SslContext, SslStream};
use servo_url::ServoUrl;
use std::ascii::AsciiExt;
use std::io::{self, Write};
@@ -35,14 +34,12 @@ use websocket::sender::Sender;
pub fn init(connect: WebSocketCommunicate,
connect_data: WebSocketConnectData,
- cookie_jar: Arc<RwLock<CookieStorage>>,
- ssl_context: Arc<SslContext>) {
+ cookie_jar: Arc<RwLock<CookieStorage>>) {
thread::Builder::new().name(format!("WebSocket connection to {}", connect_data.resource_url)).spawn(move || {
let channel = establish_a_websocket_connection(&connect_data.resource_url,
connect_data.origin,
connect_data.protocols,
- cookie_jar,
- ssl_context);
+ cookie_jar);
let (ws_sender, mut receiver) = match channel {
Ok((protocol_in_use, sender, receiver)) => {
let _ = connect.event_sender.send(WebSocketNetworkEvent::ConnectionEstablished { protocol_in_use });
@@ -117,11 +114,10 @@ pub fn init(connect: WebSocketCommunicate,
}).expect("Thread spawning failed");
}
-type Stream = HttpsStream<SslStream<HttpStream>>;
+type Stream = HttpStream;
// https://fetch.spec.whatwg.org/#concept-websocket-connection-obtain
-fn obtain_a_websocket_connection(url: &ServoUrl, ssl_context: Arc<SslContext>)
- -> Result<Stream, NetworkError> {
+fn obtain_a_websocket_connection(url: &ServoUrl) -> Result<Stream, NetworkError> {
// Step 1.
let host = url.host_str().unwrap();
@@ -137,27 +133,23 @@ fn obtain_a_websocket_connection(url: &ServoUrl, ssl_context: Arc<SslContext>)
_ => panic!("URL's scheme should be ws or wss"),
};
+ if secure {
+ return Err(NetworkError::Internal("WSS is disabled for now.".into()));
+ }
+
// Steps 4-5.
let host = replace_host(host);
let tcp_stream = TcpStream::connect((&*host, port)).map_err(|e| {
NetworkError::Internal(format!("Could not connect to host: {}", e))
})?;
- let http_stream = HttpStream(tcp_stream);
- if !secure {
- return Ok(HttpsStream::Http(http_stream));
- }
- let ssl_stream = SslStream::connect(&*ssl_context, http_stream).map_err(|e| {
- NetworkError::from_ssl_error(url, &e)
- })?;
- Ok(HttpsStream::Https(ssl_stream))
+ Ok(HttpStream(tcp_stream))
}
// https://fetch.spec.whatwg.org/#concept-websocket-establish
fn establish_a_websocket_connection(resource_url: &ServoUrl,
origin: String,
protocols: Vec<String>,
- cookie_jar: Arc<RwLock<CookieStorage>>,
- ssl_context: Arc<SslContext>)
+ cookie_jar: Arc<RwLock<CookieStorage>>)
-> Result<(Option<String>,
Sender<Stream>,
Receiver<Stream>),
@@ -192,7 +184,7 @@ fn establish_a_websocket_connection(resource_url: &ServoUrl,
// TODO: handle permessage-deflate extension.
// Step 11 and network error check from step 12.
- let response = fetch(resource_url, origin, headers, cookie_jar, ssl_context)?;
+ let response = fetch(resource_url, origin, headers, cookie_jar)?;
// Step 12, the status code check.
if response.status != StatusCode::SwitchingProtocols {
@@ -279,8 +271,7 @@ struct Response {
fn fetch(url: &ServoUrl,
origin: String,
mut headers: Headers,
- cookie_jar: Arc<RwLock<CookieStorage>>,
- ssl_context: Arc<SslContext>)
+ cookie_jar: Arc<RwLock<CookieStorage>>)
-> Result<Response, NetworkError> {
// Step 1.
// TODO: handle request's window.
@@ -324,15 +315,14 @@ fn fetch(url: &ServoUrl,
}
// Step 8.
- main_fetch(url, origin, headers, cookie_jar, ssl_context)
+ main_fetch(url, origin, headers, cookie_jar)
}
// https://fetch.spec.whatwg.org/#concept-main-fetch
fn main_fetch(url: &ServoUrl,
origin: String,
mut headers: Headers,
- cookie_jar: Arc<RwLock<CookieStorage>>,
- ssl_context: Arc<SslContext>)
+ cookie_jar: Arc<RwLock<CookieStorage>>)
-> Result<Response, NetworkError> {
// Step 1.
let mut response = None;
@@ -375,7 +365,7 @@ fn main_fetch(url: &ServoUrl,
// doesn't need to be filtered at all.
// Step 12.2.
- basic_fetch(url, origin, &mut headers, cookie_jar, ssl_context)
+ basic_fetch(url, origin, &mut headers, cookie_jar)
});
// Step 13.
@@ -413,19 +403,17 @@ fn main_fetch(url: &ServoUrl,
fn basic_fetch(url: &ServoUrl,
origin: String,
headers: &mut Headers,
- cookie_jar: Arc<RwLock<CookieStorage>>,
- ssl_context: Arc<SslContext>)
+ cookie_jar: Arc<RwLock<CookieStorage>>)
-> Result<Response, NetworkError> {
// In the case of a WebSocket request, HTTP fetch is always used.
- http_fetch(url, origin, headers, cookie_jar, ssl_context)
+ http_fetch(url, origin, headers, cookie_jar)
}
// https://fetch.spec.whatwg.org/#concept-http-fetch
fn http_fetch(url: &ServoUrl,
origin: String,
headers: &mut Headers,
- cookie_jar: Arc<RwLock<CookieStorage>>,
- ssl_context: Arc<SslContext>)
+ cookie_jar: Arc<RwLock<CookieStorage>>)
-> Result<Response, NetworkError> {
// Step 1.
// Not applicable: with step 3 being useless here, this one is too.
@@ -446,7 +434,7 @@ fn http_fetch(url: &ServoUrl,
// Not applicable: request's redirect mode is "error".
// Step 4.3.
- let response = http_network_or_cache_fetch(url, origin, headers, cookie_jar, ssl_context);
+ let response = http_network_or_cache_fetch(url, origin, headers, cookie_jar);
// Step 4.4.
// Not applicable: CORS flag is unset.
@@ -475,8 +463,7 @@ fn http_fetch(url: &ServoUrl,
fn http_network_or_cache_fetch(url: &ServoUrl,
origin: String,
headers: &mut Headers,
- cookie_jar: Arc<RwLock<CookieStorage>>,
- ssl_context: Arc<SslContext>)
+ cookie_jar: Arc<RwLock<CookieStorage>>)
-> Result<Response, NetworkError> {
// Steps 1-3.
// Not applicable: we don't even have a request yet, and there is no body
@@ -552,7 +539,7 @@ fn http_network_or_cache_fetch(url: &ServoUrl,
// Not applicable: cache mode is "no-store".
// Step 22.2.
- let forward_response = http_network_fetch(url, headers, cookie_jar, ssl_context);
+ let forward_response = http_network_fetch(url, headers, cookie_jar);
// Step 22.3.
// Not applicable: request's method is not unsafe.
@@ -581,15 +568,14 @@ fn http_network_or_cache_fetch(url: &ServoUrl,
// https://fetch.spec.whatwg.org/#concept-http-network-fetch
fn http_network_fetch(url: &ServoUrl,
headers: &Headers,
- cookie_jar: Arc<RwLock<CookieStorage>>,
- ssl_context: Arc<SslContext>)
+ cookie_jar: Arc<RwLock<CookieStorage>>)
-> Result<Response, NetworkError> {
// Step 1.
// Not applicable: credentials flag is set.
// Steps 2-3.
// Request's mode is "websocket".
- let connection = obtain_a_websocket_connection(url, ssl_context)?;
+ let connection = obtain_a_websocket_connection(url)?;
// Step 4.
// Not applicable: request’s body is null.