@@ -32,7 +32,7 @@ impl Clone for MockStream {
|
|||||||
impl MockStream {
|
impl MockStream {
|
||||||
fn new() -> MockStream {
|
fn new() -> MockStream {
|
||||||
let head = b"HTTP/1.1 200 OK\r\nServer: Mock\r\n\r\n";
|
let head = b"HTTP/1.1 200 OK\r\nServer: Mock\r\n\r\n";
|
||||||
let mut res = Vec::from_slice(head);
|
let mut res = head.to_vec();
|
||||||
res.push_all(README);
|
res.push_all(README);
|
||||||
MockStream {
|
MockStream {
|
||||||
read: MemReader::new(res),
|
read: MemReader::new(res),
|
||||||
|
|||||||
@@ -59,15 +59,15 @@ impl Clone for Box<NetworkStream + Send> {
|
|||||||
|
|
||||||
impl Reader for Box<NetworkStream + Send> {
|
impl Reader for Box<NetworkStream + Send> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn read(&mut self, buf: &mut [u8]) -> IoResult<uint> { self.read(buf) }
|
fn read(&mut self, buf: &mut [u8]) -> IoResult<uint> { (**self).read(buf) }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Writer for Box<NetworkStream + Send> {
|
impl Writer for Box<NetworkStream + Send> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn write(&mut self, msg: &[u8]) -> IoResult<()> { self.write(msg) }
|
fn write(&mut self, msg: &[u8]) -> IoResult<()> { (**self).write(msg) }
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn flush(&mut self) -> IoResult<()> { self.flush() }
|
fn flush(&mut self) -> IoResult<()> { (**self).flush() }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A `NetworkListener` for `HttpStream`s.
|
/// A `NetworkListener` for `HttpStream`s.
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
//! HTTP Server
|
//! HTTP Server
|
||||||
use std::io::{Listener, IoResult, EndOfFile};
|
use std::io::{Listener, IoResult, EndOfFile};
|
||||||
use std::io::net::ip::{IpAddr, Port, SocketAddr};
|
use std::io::net::ip::{IpAddr, Port, SocketAddr};
|
||||||
|
use std::task::TaskBuilder;
|
||||||
|
|
||||||
use intertwine::{Intertwine, Intertwined};
|
use intertwine::{Intertwine, Intertwined};
|
||||||
use macceptor::MoveAcceptor;
|
use macceptor::MoveAcceptor;
|
||||||
@@ -58,6 +59,7 @@ impl<L: NetworkListener<S, A>, S: NetworkStream, A: NetworkAcceptor<S>> Server<L
|
|||||||
let mut acceptors = Vec::new();
|
let mut acceptors = Vec::new();
|
||||||
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);
|
||||||
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.to_string().as_slice(), port));
|
||||||
|
|
||||||
sockets.push(try_io!(listener.socket_name()));
|
sockets.push(try_io!(listener.socket_name()));
|
||||||
@@ -71,7 +73,7 @@ impl<L: NetworkListener<S, A>, S: NetworkStream, A: NetworkAcceptor<S>> Server<L
|
|||||||
.map(|acceptor| acceptor.move_incoming())
|
.map(|acceptor| acceptor.move_incoming())
|
||||||
.intertwine();
|
.intertwine();
|
||||||
|
|
||||||
spawn(proc() {
|
TaskBuilder::new().named("hyper acceptor").spawn(proc() {
|
||||||
handler.handle(Incoming { from: connections });
|
handler.handle(Incoming { from: connections });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ impl Request {
|
|||||||
/// immediately useful.
|
/// immediately useful.
|
||||||
pub fn new<S: NetworkStream>(mut stream: S) -> HttpResult<Request> {
|
pub fn new<S: NetworkStream>(mut stream: S) -> HttpResult<Request> {
|
||||||
let remote_addr = try_io!(stream.peer_name());
|
let remote_addr = try_io!(stream.peer_name());
|
||||||
|
debug!("remote addr = {}", remote_addr);
|
||||||
let mut stream = BufferedReader::new(stream.abstract());
|
let mut stream = BufferedReader::new(stream.abstract());
|
||||||
let (method, uri, version) = try!(read_request_line(&mut stream));
|
let (method, uri, version) = try!(read_request_line(&mut stream));
|
||||||
let headers = try!(Headers::from_raw(&mut stream));
|
let headers = try!(Headers::from_raw(&mut stream));
|
||||||
|
|||||||
Reference in New Issue
Block a user