Start hooking up reset
This commit is contained in:
@@ -141,18 +141,8 @@ impl<T, P, B> Connection<T, P, B>
|
||||
try!(self.streams.recv_data(frame));
|
||||
}
|
||||
Some(Reset(frame)) => {
|
||||
unimplemented!();
|
||||
/*
|
||||
trace!("recv RST_STREAM; frame={:?}", frame);
|
||||
try!(self.streams.recv_reset(&frame));
|
||||
|
||||
let frame = Frame::Reset {
|
||||
id: frame.stream_id(),
|
||||
error: frame.reason(),
|
||||
};
|
||||
|
||||
return Ok(Some(frame).into());
|
||||
*/
|
||||
try!(self.streams.recv_reset(frame));
|
||||
}
|
||||
Some(PushPromise(frame)) => {
|
||||
trace!("recv PUSH_PROMISE; frame={:?}", frame);
|
||||
|
||||
@@ -197,6 +197,17 @@ impl<P, B> Recv<P, B>
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn recv_reset(&mut self, frame: frame::Reset, stream: &mut Stream<B>)
|
||||
-> Result<(), ConnectionError>
|
||||
{
|
||||
let err = ConnectionError::Proto(frame.reason());
|
||||
|
||||
// Notify the stream
|
||||
stream.state.recv_err(&err);
|
||||
stream.notify_recv();
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn recv_err(&mut self, err: &ConnectionError, stream: &mut Stream<B>) {
|
||||
// Receive an error
|
||||
stream.state.recv_err(err);
|
||||
|
||||
@@ -115,10 +115,11 @@ impl<P, B> Streams<P, B>
|
||||
pub fn recv_data(&mut self, frame: frame::Data)
|
||||
-> Result<(), ConnectionError>
|
||||
{
|
||||
let id = frame.stream_id();
|
||||
let mut me = self.inner.lock().unwrap();
|
||||
let me = &mut *me;
|
||||
|
||||
let id = frame.stream_id();
|
||||
|
||||
let mut stream = match me.store.find_mut(&id) {
|
||||
Some(stream) => stream,
|
||||
None => return Err(ProtocolError.into()),
|
||||
@@ -135,10 +136,26 @@ impl<P, B> Streams<P, B>
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn recv_reset(&mut self, _frame: &frame::Reset)
|
||||
pub fn recv_reset(&mut self, frame: frame::Reset)
|
||||
-> Result<(), ConnectionError>
|
||||
{
|
||||
unimplemented!();
|
||||
let mut me = self.inner.lock().unwrap();
|
||||
let me = &mut *me;
|
||||
|
||||
let id = frame.stream_id();
|
||||
|
||||
let mut stream = match me.store.find_mut(&id) {
|
||||
Some(stream) => stream,
|
||||
// TODO: should this be an error?
|
||||
None => return Ok(()),
|
||||
};
|
||||
|
||||
me.actions.recv.recv_reset(frame, &mut stream)?;
|
||||
|
||||
assert!(stream.state.is_closed());
|
||||
me.actions.dec_num_streams(id);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn recv_err(&mut self, err: &ConnectionError) {
|
||||
|
||||
Reference in New Issue
Block a user