mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Have a clear error for when the I/O closes and when some protocol is violated. this should help find the rootcause of a bug.
If its Closed it looks like the TCP connection got dropped/cut off (e.g. OS, Wifi). If its Violated we for sure know the cause is the messages send/recv in a wrong way
This commit is contained in:
parent
831cd9c5db
commit
4fed9dab83
@ -11,13 +11,21 @@ pub enum InitProtocolError {
|
||||
/// When you return closed you must stay closed!
|
||||
#[derive(Debug, PartialEq)]
|
||||
pub enum ProtocolError {
|
||||
/// Closed indicates the underlying I/O got closed
|
||||
/// e.g. the TCP, UDP or MPSC connection is dropped by the OS
|
||||
Closed,
|
||||
/// Violated indicates the veloren_network_protocol was violated
|
||||
/// the underlying I/O connection is still valid, but the remote side
|
||||
/// send WRONG (e.g. Invalid, or wrong order) data on the protocol layer.
|
||||
Violated,
|
||||
}
|
||||
|
||||
impl From<ProtocolError> for InitProtocolError {
|
||||
fn from(err: ProtocolError) -> Self {
|
||||
match err {
|
||||
ProtocolError::Closed => InitProtocolError::Closed,
|
||||
// not possible as the Init has raw access to the I/O
|
||||
ProtocolError::Violated => InitProtocolError::Closed,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -46,6 +54,7 @@ impl core::fmt::Display for ProtocolError {
|
||||
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
|
||||
match self {
|
||||
ProtocolError::Closed => write!(f, "Channel closed"),
|
||||
ProtocolError::Violated => write!(f, "Channel protocol violated"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -142,7 +142,7 @@ where
|
||||
}
|
||||
Ok(e)
|
||||
},
|
||||
MpscMsg::InitFrame(_) => Err(ProtocolError::Closed),
|
||||
MpscMsg::InitFrame(_) => Err(ProtocolError::Violated),
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -164,7 +164,7 @@ where
|
||||
{
|
||||
async fn recv(&mut self) -> Result<InitFrame, ProtocolError> {
|
||||
match self.sink.recv().await? {
|
||||
MpscMsg::Event(_) => Err(ProtocolError::Closed),
|
||||
MpscMsg::Event(_) => Err(ProtocolError::Violated),
|
||||
MpscMsg::InitFrame(f) => Ok(f),
|
||||
}
|
||||
}
|
||||
|
@ -266,7 +266,7 @@ where
|
||||
?mid,
|
||||
"protocol violation by remote side: send Data before Header"
|
||||
);
|
||||
break 'outer Err(ProtocolError::Closed);
|
||||
break 'outer Err(ProtocolError::Violated);
|
||||
},
|
||||
};
|
||||
m.data.extend_from_slice(&data);
|
||||
@ -321,7 +321,7 @@ where
|
||||
return Ok(frame);
|
||||
}
|
||||
}
|
||||
Err(ProtocolError::Closed)
|
||||
Err(ProtocolError::Violated)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user