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)); |                     try!(self.streams.recv_data(frame)); | ||||||
|                 } |                 } | ||||||
|                 Some(Reset(frame)) => { |                 Some(Reset(frame)) => { | ||||||
|                     unimplemented!(); |  | ||||||
|                     /* |  | ||||||
|                     trace!("recv RST_STREAM; frame={:?}", frame); |                     trace!("recv RST_STREAM; frame={:?}", frame); | ||||||
|                     try!(self.streams.recv_reset(&frame)); |                     try!(self.streams.recv_reset(frame)); | ||||||
|  |  | ||||||
|                     let frame = Frame::Reset { |  | ||||||
|                         id: frame.stream_id(), |  | ||||||
|                         error: frame.reason(), |  | ||||||
|                     }; |  | ||||||
|  |  | ||||||
|                     return Ok(Some(frame).into()); |  | ||||||
|                     */ |  | ||||||
|                 } |                 } | ||||||
|                 Some(PushPromise(frame)) => { |                 Some(PushPromise(frame)) => { | ||||||
|                     trace!("recv PUSH_PROMISE; frame={:?}", frame); |                     trace!("recv PUSH_PROMISE; frame={:?}", frame); | ||||||
|   | |||||||
| @@ -197,6 +197,17 @@ impl<P, B> Recv<P, B> | |||||||
|         Ok(()) |         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>) { |     pub fn recv_err(&mut self, err: &ConnectionError, stream: &mut Stream<B>) { | ||||||
|         // Receive an error |         // Receive an error | ||||||
|         stream.state.recv_err(err); |         stream.state.recv_err(err); | ||||||
|   | |||||||
| @@ -115,10 +115,11 @@ impl<P, B> Streams<P, B> | |||||||
|     pub fn recv_data(&mut self, frame: frame::Data) |     pub fn recv_data(&mut self, frame: frame::Data) | ||||||
|         -> Result<(), ConnectionError> |         -> Result<(), ConnectionError> | ||||||
|     { |     { | ||||||
|         let id = frame.stream_id(); |  | ||||||
|         let mut me = self.inner.lock().unwrap(); |         let mut me = self.inner.lock().unwrap(); | ||||||
|         let me = &mut *me; |         let me = &mut *me; | ||||||
|  |  | ||||||
|  |         let id = frame.stream_id(); | ||||||
|  |  | ||||||
|         let mut stream = match me.store.find_mut(&id) { |         let mut stream = match me.store.find_mut(&id) { | ||||||
|             Some(stream) => stream, |             Some(stream) => stream, | ||||||
|             None => return Err(ProtocolError.into()), |             None => return Err(ProtocolError.into()), | ||||||
| @@ -135,10 +136,26 @@ impl<P, B> Streams<P, B> | |||||||
|         Ok(()) |         Ok(()) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     pub fn recv_reset(&mut self, _frame: &frame::Reset) |     pub fn recv_reset(&mut self, frame: frame::Reset) | ||||||
|         -> Result<(), ConnectionError> |         -> 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) { |     pub fn recv_err(&mut self, err: &ConnectionError) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user