rust/hedgewars-server/src/protocol.rs
changeset 15998 14fe5bfe9862
parent 15989 fb389df02e3e
child 15999 d73e6cb37f83
equal deleted inserted replaced
15997:7c8697fa019f 15998:14fe5bfe9862
    85                     return Some(message);
    85                     return Some(message);
    86                 }
    86                 }
    87                 Err(nom::Err::Incomplete(_)) => {}
    87                 Err(nom::Err::Incomplete(_)) => {}
    88                 Err(nom::Err::Failure(e) | nom::Err::Error(e)) => {
    88                 Err(nom::Err::Failure(e) | nom::Err::Error(e)) => {
    89                     debug!("Invalid message: {:?}", e);
    89                     debug!("Invalid message: {:?}", e);
       
    90                     trace!("Buffer content: {:?}", String::from_utf8_lossy(&self.buffer[..]));
    90                     self.recover();
    91                     self.recover();
    91                 }
    92                 }
    92             }
    93             }
    93         }
    94         }
    94         None
    95         None
    99         stream: &mut R,
   100         stream: &mut R,
   100     ) -> Result<HwProtocolMessage> {
   101     ) -> Result<HwProtocolMessage> {
   101         use ProtocolError::*;
   102         use ProtocolError::*;
   102 
   103 
   103         loop {
   104         loop {
   104             if !self.buffer.has_remaining() {
   105             if self.buffer.capacity() < 1024 {
       
   106                 self.buffer.reserve(1024 - self.buffer.capacity());
       
   107             }
       
   108 
       
   109             if !self.buffer.has_remaining() || self.is_recovering {
   105                 //todo!("ensure the buffer doesn't grow indefinitely")
   110                 //todo!("ensure the buffer doesn't grow indefinitely")
   106                 match timeout(self.read_timeout, stream.read_buf(&mut self.buffer)).await {
   111                 match timeout(self.read_timeout, stream.read_buf(&mut self.buffer)).await {
   107                     Err(_) => return Err(Timeout),
   112                     Err(_) => return Err(Timeout),
   108                     Ok(Err(e)) => return Err(Network(Box::new(e))),
   113                     Ok(Err(e)) => return Err(Network(Box::new(e))),
   109                     Ok(Ok(0)) => return Err(Eof),
   114                     Ok(Ok(0)) => return Err(Eof),