diff --git a/src/frame.rs b/src/frame.rs index 21faefc04..146c1be7e 100644 --- a/src/frame.rs +++ b/src/frame.rs @@ -28,7 +28,7 @@ impl Codec for Frame { pub struct StreamFrame { pub id: u64, pub fin: bool, - pub offset: Option, + pub offset: u64, pub len: Option, pub data: Vec, } @@ -37,7 +37,11 @@ impl BufLen for StreamFrame { fn buf_len(&self) -> usize { 1 + VarLen::new(self.id).buf_len() + - self.offset.map(VarLen::new).buf_len() + + if self.offset > 0 { + VarLen::new(self.offset).buf_len() + } else { + 0 + } + self.len.map(VarLen::new).buf_len() + self.data.len() } @@ -45,7 +49,7 @@ impl BufLen for StreamFrame { impl Codec for StreamFrame { fn encode(&self, buf: &mut T) { - let has_offset = if self.offset.is_some() { + let has_offset = if self.offset > 0 { 0x04 } else { 0 @@ -62,8 +66,8 @@ impl Codec for StreamFrame { }; buf.put_u8(0x10 | has_offset | has_len | is_fin); VarLen::new(self.id).encode(buf); - if let Some(offset) = self.offset { - VarLen::new(offset).encode(buf); + if self.offset > 0 { + VarLen::new(self.offset).encode(buf); } if let Some(len) = self.len { VarLen::new(len).encode(buf); diff --git a/src/lib.rs b/src/lib.rs index e5b056bdc..ae786de25 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -46,7 +46,7 @@ pub fn connect(server: &str, port: u16) { Frame::Stream(StreamFrame { id: 0, fin: false, - offset: None, + offset: 0, len: Some(handshake.len() as u64), data: handshake, }),