summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/session/segment_buffer.rs59
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);