Actually get server working (maybe)

This commit is contained in:
Carl Lerche
2017-08-09 10:49:49 -07:00
parent 8f2b69c280
commit f39e983af0
4 changed files with 16 additions and 9 deletions

View File

@@ -36,7 +36,7 @@ pub fn main() {
.uri("https://http2.akamai.com/") .uri("https://http2.akamai.com/")
.body(()).unwrap(); .body(()).unwrap();
let stream = client.request(request, true); let stream = client.request(request, true).unwrap();
client.join(stream.and_then(|response| { client.join(stream.and_then(|response| {
println!("GOT RESPONSE: {:?}", response); println!("GOT RESPONSE: {:?}", response);
Ok(()) Ok(())

View File

@@ -35,8 +35,15 @@ pub fn main() {
println!("H2 connection bound"); println!("H2 connection bound");
conn.for_each(|(request, stream)| { conn.for_each(|(request, mut stream)| {
println!("GOT request: {:?}", request); println!("GOT request: {:?}", request);
let response = Response::builder()
.status(status::OK)
.body(()).unwrap();
stream.send_response(response, true).unwrap();
Ok(()) Ok(())
}) })

View File

@@ -132,18 +132,17 @@ impl<B> Recv<B> where B: Buf {
self.inc_num_streams(); self.inc_num_streams();
} }
// Push the frame onto the stream's recv buffer
stream.pending_recv.push_back(&mut self.buffer, frame.into());
stream.notify_recv();
// Only servers can receive a headers frame that initiates the stream. // Only servers can receive a headers frame that initiates the stream.
// This is verified in `Streams` before calling this function. // This is verified in `Streams` before calling this function.
if P::is_server() { if P::is_server() {
self.pending_accept.push(stream); self.pending_accept.push(stream);
Ok(())
} else {
// Push the frame onto the recv buffer
stream.pending_recv.push_back(&mut self.buffer, frame.into());
stream.notify_recv();
Ok(())
} }
Ok(())
} }
pub fn recv_eos(&mut self, stream: &mut Stream<B>) pub fn recv_eos(&mut self, stream: &mut Stream<B>)

View File

@@ -112,6 +112,7 @@ impl<T, B> futures::Stream for Server<T, B>
} }
if let Some(inner) = self.connection.next_incoming() { if let Some(inner) = self.connection.next_incoming() {
trace!("received incoming");
let (head, _) = inner.take_request()?.into_parts(); let (head, _) = inner.take_request()?.into_parts();
let body = Body { inner: inner.clone() }; let body = Body { inner: inner.clone() };