Injects the network connector as a dependency into http_loader::load

servo/servo#6727
This commit is contained in:
Sam Gibson 2015-08-02 11:44:13 +10:00
parent 610ef40105
commit c8c36f4490

View file

@ -21,7 +21,7 @@ use hyper::header::StrictTransportSecurity;
use hyper::header::{AcceptEncoding, Accept, ContentLength, ContentType, Host, Location, qitem, Quality, QualityItem};
use hyper::method::Method;
use hyper::mime::{Mime, TopLevel, SubLevel};
use hyper::net::{HttpConnector, HttpsConnector, Openssl};
use hyper::net::{HttpStream, HttpConnector, HttpsConnector, Openssl, NetworkConnector, NetworkStream};
use hyper::status::{StatusCode, StatusClass};
use ipc_channel::ipc::{self, IpcSender};
use log;
@ -100,7 +100,21 @@ fn load_for_consumer(load_data: LoadData,
resource_mgr_chan: IpcSender<ControlMsg>,
devtools_chan: Option<Sender<DevtoolsControlMsg>>,
hsts_list: Arc<Mutex<HSTSList>>) {
match load(load_data, resource_mgr_chan, devtools_chan, hsts_list) {
let connector = {
// TODO: Is this still necessary? The type system is making it really hard to support both
// connectors. SSL is working, so it's not clear to me if the original rationale still
// stands
// if opts::get().nossl {
// &HttpConnector
let mut context = SslContext::new(SslMethod::Sslv23).unwrap();
context.set_verify(SSL_VERIFY_PEER, None);
context.set_CA_file(&resources_dir_path().join("certs")).unwrap();
&HttpsConnector::new(Openssl { context: Arc::new(context) })
};
match load(load_data, resource_mgr_chan, devtools_chan, hsts_list, connector) {
Err(LoadError::UnsupportedScheme(url)) => {
let s = format!("{} request, but we don't support that scheme", &*url.scheme);
send_error(url, s, start_chan)
@ -133,10 +147,14 @@ enum LoadError {
MaxRedirects(Url)
}
fn load(mut load_data: LoadData,
fn load<C, S>(mut load_data: LoadData,
resource_mgr_chan: IpcSender<ControlMsg>,
devtools_chan: Option<Sender<DevtoolsControlMsg>>,
hsts_list: Arc<Mutex<HSTSList>>) -> Result<(Box<Read>, Metadata), LoadError> {
hsts_list: Arc<Mutex<HSTSList>>,
connector: &C) -> Result<(Box<Read>, Metadata), LoadError> where
C: NetworkConnector<Stream=S>,
S: Into<Box<NetworkStream + Send>> {
// FIXME: At the time of writing this FIXME, servo didn't have any central
// location for configuration. If you're reading this and such a
// repository DOES exist, please update this constant to use it.
@ -183,20 +201,11 @@ fn load(mut load_data: LoadData,
info!("requesting {}", url.serialize());
// TODO - Is no ssl still needed?
let ssl_err_string = "Some(OpenSslErrors([UnknownError { library: \"SSL routines\", \
function: \"SSL3_GET_SERVER_CERTIFICATE\", \
reason: \"certificate verify failed\" }]))";
let req = if opts::get().nossl {
Request::with_connector(load_data.method.clone(), url.clone(), &HttpConnector)
} else {
let mut context = SslContext::new(SslMethod::Sslv23).unwrap();
context.set_verify(SSL_VERIFY_PEER, None);
context.set_CA_file(&resources_dir_path().join("certs")).unwrap();
Request::with_connector(load_data.method.clone(), url.clone(),
&HttpsConnector::new(Openssl { context: Arc::new(context) }))
};
let req = Request::with_connector(load_data.method.clone(), url.clone(), connector);
let mut req = match req {
Ok(req) => req,