Merge pull request #101 from hyperium/to-socket-addr
update using ToSocketAddr
This commit is contained in:
@@ -8,7 +8,7 @@ extern crate test;
|
|||||||
use std::fmt::{mod, Show};
|
use std::fmt::{mod, Show};
|
||||||
use std::from_str::from_str;
|
use std::from_str::from_str;
|
||||||
use std::io::{IoResult, MemReader};
|
use std::io::{IoResult, MemReader};
|
||||||
use std::io::net::ip::SocketAddr;
|
use std::io::net::ip::{SocketAddr, ToSocketAddr};
|
||||||
use std::os;
|
use std::os;
|
||||||
use std::path::BytesContainer;
|
use std::path::BytesContainer;
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ impl net::NetworkStream for MockStream {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl net::NetworkConnector for MockStream {
|
impl net::NetworkConnector for MockStream {
|
||||||
fn connect(_host: &str, _port: u16, _scheme: &str) -> IoResult<MockStream> {
|
fn connect<To: ToSocketAddr>(_addr: To, _scheme: &str) -> IoResult<MockStream> {
|
||||||
Ok(MockStream::new())
|
Ok(MockStream::new())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ impl Request<Fresh> {
|
|||||||
};
|
};
|
||||||
debug!("port={}", port);
|
debug!("port={}", port);
|
||||||
|
|
||||||
let stream: S = try_io!(NetworkConnector::connect(host.as_slice(), port, url.scheme.as_slice()));
|
let stream: S = try_io!(NetworkConnector::connect((host[], port), url.scheme.as_slice()));
|
||||||
let stream = ThroughWriter(BufferedWriter::new(box stream as Box<NetworkStream + Send>));
|
let stream = ThroughWriter(BufferedWriter::new(box stream as Box<NetworkStream + Send>));
|
||||||
|
|
||||||
let mut headers = Headers::new();
|
let mut headers = Headers::new();
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
use std::io::IoResult;
|
use std::io::IoResult;
|
||||||
use std::io::net::ip::SocketAddr;
|
use std::io::net::ip::{SocketAddr, ToSocketAddr};
|
||||||
|
|
||||||
use net::{NetworkStream, NetworkConnector};
|
use net::{NetworkStream, NetworkConnector};
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ impl NetworkStream for MockStream {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl NetworkConnector for MockStream {
|
impl NetworkConnector for MockStream {
|
||||||
fn connect(_host: &str, _port: u16, _scheme: &str) -> IoResult<MockStream> {
|
fn connect<To: ToSocketAddr>(_addr: To, _scheme: &str) -> IoResult<MockStream> {
|
||||||
Ok(MockStream)
|
Ok(MockStream)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
20
src/net.rs
20
src/net.rs
@@ -5,7 +5,7 @@ use std::fmt;
|
|||||||
use std::intrinsics::TypeId;
|
use std::intrinsics::TypeId;
|
||||||
use std::io::{IoResult, IoError, ConnectionAborted, InvalidInput, OtherIoError,
|
use std::io::{IoResult, IoError, ConnectionAborted, InvalidInput, OtherIoError,
|
||||||
Stream, Listener, Acceptor};
|
Stream, Listener, Acceptor};
|
||||||
use std::io::net::ip::{SocketAddr, Port};
|
use std::io::net::ip::{SocketAddr, ToSocketAddr};
|
||||||
use std::io::net::tcp::{TcpStream, TcpListener, TcpAcceptor};
|
use std::io::net::tcp::{TcpStream, TcpListener, TcpAcceptor};
|
||||||
use std::mem::{mod, transmute, transmute_copy};
|
use std::mem::{mod, transmute, transmute_copy};
|
||||||
use std::raw::{mod, TraitObject};
|
use std::raw::{mod, TraitObject};
|
||||||
@@ -28,7 +28,7 @@ pub trait NetworkListener<S: NetworkStream, A: NetworkAcceptor<S>>: Listener<S,
|
|||||||
///
|
///
|
||||||
/// Note: This does not start listening for connections. You must call
|
/// Note: This does not start listening for connections. You must call
|
||||||
/// `listen()` to do that.
|
/// `listen()` to do that.
|
||||||
fn bind(host: &str, port: Port) -> IoResult<Self>;
|
fn bind<To: ToSocketAddr>(addr: To) -> IoResult<Self>;
|
||||||
|
|
||||||
/// Get the address this Listener ended up listening on.
|
/// Get the address this Listener ended up listening on.
|
||||||
fn socket_name(&mut self) -> IoResult<SocketAddr>;
|
fn socket_name(&mut self) -> IoResult<SocketAddr>;
|
||||||
@@ -53,7 +53,7 @@ pub trait NetworkStream: Stream + Any + Clone + Send {
|
|||||||
/// A connector creates a NetworkStream.
|
/// A connector creates a NetworkStream.
|
||||||
pub trait NetworkConnector: NetworkStream {
|
pub trait NetworkConnector: NetworkStream {
|
||||||
/// Connect to a remote address.
|
/// Connect to a remote address.
|
||||||
fn connect(host: &str, Port, scheme: &str) -> IoResult<Self>;
|
fn connect<To: ToSocketAddr>(addr: To, scheme: &str) -> IoResult<Self>;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Show for Box<NetworkStream + Send> {
|
impl fmt::Show for Box<NetworkStream + Send> {
|
||||||
@@ -136,9 +136,9 @@ impl Listener<HttpStream, HttpAcceptor> for HttpListener {
|
|||||||
|
|
||||||
impl NetworkListener<HttpStream, HttpAcceptor> for HttpListener {
|
impl NetworkListener<HttpStream, HttpAcceptor> for HttpListener {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn bind(host: &str, port: Port) -> IoResult<HttpListener> {
|
fn bind<To: ToSocketAddr>(addr: To) -> IoResult<HttpListener> {
|
||||||
Ok(HttpListener {
|
Ok(HttpListener {
|
||||||
inner: try!(TcpListener::bind(host, port))
|
inner: try!(TcpListener::bind(addr))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,21 +219,21 @@ impl NetworkStream for HttpStream {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl NetworkConnector for HttpStream {
|
impl NetworkConnector for HttpStream {
|
||||||
fn connect(host: &str, port: Port, scheme: &str) -> IoResult<HttpStream> {
|
fn connect<To: ToSocketAddr>(addr: To, scheme: &str) -> IoResult<HttpStream> {
|
||||||
match scheme {
|
match scheme {
|
||||||
"http" => {
|
"http" => {
|
||||||
debug!("http scheme");
|
debug!("http scheme");
|
||||||
Ok(Http(try!(TcpStream::connect(host, port))))
|
Ok(Http(try!(TcpStream::connect(addr))))
|
||||||
},
|
},
|
||||||
"https" => {
|
"https" => {
|
||||||
debug!("https scheme");
|
debug!("https scheme");
|
||||||
let mut stream = try!(TcpStream::connect(host, port));
|
let mut stream = try!(TcpStream::connect(addr));
|
||||||
// we can't access the tcp stream once it's wrapped in an
|
// we can't access the tcp stream once it's wrapped in an
|
||||||
// SslStream, so grab the ip address now, just in case.
|
// SslStream, so grab the ip address now, just in case.
|
||||||
let addr = try!(stream.peer_name());
|
let peer_addr = try!(stream.peer_name());
|
||||||
let context = try!(SslContext::new(Sslv23).map_err(lift_ssl_error));
|
let context = try!(SslContext::new(Sslv23).map_err(lift_ssl_error));
|
||||||
let stream = try!(SslStream::new(&context, stream).map_err(lift_ssl_error));
|
let stream = try!(SslStream::new(&context, stream).map_err(lift_ssl_error));
|
||||||
Ok(Https(Arc::new(Mutex::new(stream)), addr))
|
Ok(Https(Arc::new(Mutex::new(stream)), peer_addr))
|
||||||
},
|
},
|
||||||
_ => {
|
_ => {
|
||||||
Err(IoError {
|
Err(IoError {
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ impl<L: NetworkListener<S, A>, S: NetworkStream, A: NetworkAcceptor<S>> Server<L
|
|||||||
let mut sockets = Vec::new();
|
let mut sockets = Vec::new();
|
||||||
for (ip, port) in self.pairs.into_iter() {
|
for (ip, port) in self.pairs.into_iter() {
|
||||||
debug!("binding to {}:{}", ip, port);
|
debug!("binding to {}:{}", ip, port);
|
||||||
let mut listener: L = try_io!(NetworkListener::<S, A>::bind(ip.to_string().as_slice(), port));
|
let mut listener: L = try_io!(NetworkListener::<S, A>::bind((ip, port)));
|
||||||
|
|
||||||
sockets.push(try_io!(listener.socket_name()));
|
sockets.push(try_io!(listener.socket_name()));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user