diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/session/segment_buffer.rs | 59 |
1 files changed, 21 insertions, 38 deletions
diff --git a/src/session/segment_buffer.rs b/src/session/segment_buffer.rs index 5152e47..f0ca20e 100644 --- a/src/session/segment_buffer.rs +++ b/src/session/segment_buffer.rs @@ -93,7 +93,7 @@ impl Stream { } // let the peer send segments in its queue, update ack numbers, and pop segments that were sent - pub fn pop(&mut self) -> Option<Vec<u8>> { + pub fn pullup(&mut self) -> Option<Vec<u8>> { if self.segments.is_empty() { println!("No segment to send"); return None; @@ -151,20 +151,6 @@ impl Stream { ret } - pub fn pullup(&mut self) -> &[u8] { - let ret = self.pop(); - if ret.is_none() { - return &[]; - } - let ret = ret.unwrap(); - self.insert_sorted(Segment { - rel_seq: self.next_offset, - payload: ret, - }); - - self.segments.iter().next().unwrap().1.payload.as_slice() - } - fn insert_sorted(&mut self, s: Segment) { self.used_window_size += s.payload.len(); self.segments.insert(s.rel_seq.0, s); @@ -182,9 +168,8 @@ mod tests { assert_eq!(s.update(3, &[4, 5], 0), Description::Ok); assert_eq!(s.update(5, &[6], 0), Description::Ok); - assert_eq!(s.pullup(), &[1, 2, 3, 4, 5, 6]); - let expected_clear = vec![vec![1, 2, 3, 4, 5, 6]]; - assert_eq!(s.clear(), expected_clear); + assert_eq!(s.pullup().unwrap(), &[1, 2, 3, 4, 5, 6]); + assert_eq!(s.clear(), Vec::<Vec<u8>>::new()); } #[test] @@ -194,7 +179,6 @@ mod tests { assert_eq!(s.update(0, &[1, 2, 3], 0), Description::Ok); assert_eq!(s.update(3, &[4, 5], 0), Description::Ok); - assert_eq!(s.pullup(), &[1, 2, 3, 4, 5, 6]); let expected_clear = vec![vec![1, 2, 3, 4, 5, 6]]; assert_eq!(s.clear(), expected_clear); } @@ -218,7 +202,6 @@ mod tests { assert_eq!(s.update(0, &[1, 2, 3], 0), Description::Ok); assert_eq!(s.update(3, &[4, 5], 0), Description::Ok); - assert_eq!(s.pullup(), &[1, 2, 3, 4, 5]); let expected_clear = vec![vec![1, 2, 3, 4, 5]]; assert_eq!(s.clear(), expected_clear); } @@ -226,7 +209,7 @@ mod tests { #[test] fn pop_empty() { let mut s = Stream::new(10000, 100, 10000); - assert_eq!(s.pop(), None); + assert_eq!(s.pullup(), None); } #[test] @@ -235,12 +218,12 @@ mod tests { assert_eq!(s.update(0, &[1, 2], 0), Description::Ok); // miss 3 assert_eq!(s.update(3, &[4, 5], 0), Description::Ok); - assert_eq!(s.pop().unwrap(), &[1, 2]); - assert_eq!(s.pop(), None); - assert_eq!(s.pop(), None); + assert_eq!(s.pullup().unwrap(), &[1, 2]); + assert_eq!(s.pullup(), None); + assert_eq!(s.pullup(), None); assert_eq!(s.update(2, &[3], 0), Description::Ok); - assert_eq!(s.pop().unwrap(), &[3, 4, 5]); + assert_eq!(s.pullup().unwrap(), &[3, 4, 5]); } #[test] @@ -249,9 +232,9 @@ mod tests { // [3,4,5,6] -> [4,5,6] let mut s = Stream::new(10000, 100, 10000); assert_eq!(s.update(0, &[1, 2, 3], 0), Description::Ok); - assert_eq!(s.pop().unwrap(), &[1, 2, 3]); + assert_eq!(s.pullup().unwrap(), &[1, 2, 3]); assert_eq!(s.update(2, &[3, 4, 5, 6], 0), Description::Ok); - assert_eq!(s.pop().unwrap(), &[4, 5, 6]); + assert_eq!(s.pullup().unwrap(), &[4, 5, 6]); } #[test] @@ -260,9 +243,9 @@ mod tests { // [2,3,4] -> drop(description: old packet) let mut s = Stream::new(10000, 100, 10000); assert_eq!(s.update(0, &[1, 2, 3, 4, 5, 6], 0), Description::Ok); - assert_eq!(s.pop().unwrap(), &[1, 2, 3, 4, 5, 6]); + assert_eq!(s.pullup().unwrap(), &[1, 2, 3, 4, 5, 6]); assert_eq!(s.update(1, &[2, 3, 4], 0), Description::Ok); - assert_eq!(s.pop(), None); + assert_eq!(s.pullup(), None); } #[test] @@ -273,10 +256,10 @@ mod tests { let mut s = Stream::new(10000, 100, 10000); assert_eq!(s.update(1, &[2, 3, 4], 0), Description::Ok); assert_eq!(s.update(2, &[3, 4, 5], 0), Description::Ok); - assert!(s.pop().is_none()); + assert!(s.pullup().is_none()); assert_eq!(s.update(0, &[1], 0), Description::Ok); - assert_eq!(s.pop().unwrap(), &[1, 2, 3, 4, 5]); + assert_eq!(s.pullup().unwrap(), &[1, 2, 3, 4, 5]); } #[test] @@ -287,10 +270,10 @@ mod tests { let mut s = Stream::new(10000, 100, 10000); assert_eq!(s.update(1, &[2, 3, 4, 5], 0), Description::Ok); assert_eq!(s.update(2, &[3, 4, 5], 0), Description::Ok); - assert!(s.pop().is_none()); + assert!(s.pullup().is_none()); assert_eq!(s.update(0, &[1, 2, 3], 0), Description::Ok); - assert_eq!(s.pop().unwrap(), &[1, 2, 3, 4, 5]); + assert_eq!(s.pullup().unwrap(), &[1, 2, 3, 4, 5]); } #[test] @@ -301,10 +284,10 @@ mod tests { let mut s = Stream::new(10000, 100, 10000); assert_eq!(s.update(1, &[2], 0), Description::Ok); assert_eq!(s.update(2, &[3], 0), Description::Ok); - assert!(s.pop().is_none()); + assert!(s.pullup().is_none()); assert_eq!(s.update(0, &[1, 2, 3, 4], 0), Description::Ok); - assert_eq!(s.pop().unwrap(), &[1, 2, 3, 4]); + assert_eq!(s.pullup().unwrap(), &[1, 2, 3, 4]); } #[test] @@ -318,7 +301,7 @@ mod tests { assert_eq!(s.clear(), vec![vec![2, 3, 4, 5]]); assert_eq!(s.update(0, &[1], 0), Description::Ok); - assert_eq!(s.pop().unwrap(), &[1]); + assert_eq!(s.pullup().unwrap(), &[1]); } #[test] @@ -338,7 +321,7 @@ mod tests { assert_eq!(s.update(4, &[5, 6, 7, 8], 0), Description::Ok); assert_eq!(s.update(8, &[2, 3, 4, 5], 0), Description::WindowFull); - assert_eq!(s.pop().unwrap(), &[1, 2, 3, 4, 5, 6, 7, 8]); // pop will clear window size + assert_eq!(s.pullup().unwrap(), &[1, 2, 3, 4, 5, 6, 7, 8]); // pop will clear window size let v:Vec<_> = (1..=10).collect(); assert_eq!(s.update(8, v.as_slice(), 0), Description::Ok); @@ -353,7 +336,7 @@ mod tests { assert_eq!(s.update(5, &[6, 7, 8], 0), Description::Ok); // hole assert_eq!(s.update(8, &[2, 3, 4, 5], 0), Description::TooManyPacket); - assert_eq!(s.pop().unwrap(), &[1, 2, 3, 4]); // pop 1 + assert_eq!(s.pullup().unwrap(), &[1, 2, 3, 4]); // pop 1 assert_eq!(s.update(8, &[11], 0), Description::Ok); assert_eq!(s.update(9, &[12], 0), Description::TooManyPacket); |
