增加包长度上限
This commit is contained in:
@@ -170,7 +170,12 @@ impl PacketSenderInner {
|
|||||||
fn try_send(&self, buf: &[u8]) -> io::Result<()> {
|
fn try_send(&self, buf: &[u8]) -> io::Result<()> {
|
||||||
let len = buf.len();
|
let len = buf.len();
|
||||||
let mut buf_vec = Vec::with_capacity(buf.len() + 4);
|
let mut buf_vec = Vec::with_capacity(buf.len() + 4);
|
||||||
buf_vec.extend_from_slice(&[0, 0, (len >> 8) as u8, (len & 0xFF) as u8]);
|
buf_vec.extend_from_slice(&[
|
||||||
|
(len >> 24) as u8,
|
||||||
|
(len >> 16) as u8,
|
||||||
|
(len >> 8) as u8,
|
||||||
|
len as u8,
|
||||||
|
]);
|
||||||
buf_vec.extend_from_slice(buf);
|
buf_vec.extend_from_slice(buf);
|
||||||
match self.buffer.try_send(buf_vec) {
|
match self.buffer.try_send(buf_vec) {
|
||||||
Ok(_) => self.notify.notify(self.token, true),
|
Ok(_) => self.notify.notify(self.token, true),
|
||||||
|
|||||||
@@ -358,7 +358,11 @@ where
|
|||||||
if let Some((route_key, stream, buf, begin)) = map.get_mut(token) {
|
if let Some((route_key, stream, buf, begin)) = map.get_mut(token) {
|
||||||
loop {
|
loop {
|
||||||
let end = if *begin >= 4 {
|
let end = if *begin >= 4 {
|
||||||
4 + (((buf[2] as u16) << 8) | buf[3] as u16) as usize
|
let len = ((buf[0] as usize) << 24)
|
||||||
|
| ((buf[1] as usize) << 16)
|
||||||
|
| ((buf[2] as usize) << 8)
|
||||||
|
| buf[3] as usize;
|
||||||
|
4 + len
|
||||||
} else {
|
} else {
|
||||||
4
|
4
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -128,11 +128,10 @@ impl<B: AsRef<[u8]>> NetPacket<B> {
|
|||||||
"length overflow",
|
"length overflow",
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
// 不能大于udp最大载荷长度
|
if data_len < 12 {
|
||||||
if data_len < 12 || data_len > 65535 - 20 - 8 {
|
|
||||||
return Err(io::Error::new(
|
return Err(io::Error::new(
|
||||||
io::ErrorKind::InvalidData,
|
io::ErrorKind::InvalidData,
|
||||||
"length overflow",
|
"data_len too short",
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
Ok(NetPacket { data_len, buffer })
|
Ok(NetPacket { data_len, buffer })
|
||||||
|
|||||||
Reference in New Issue
Block a user