diff --git a/toad/src/step/block.rs b/toad/src/step/block.rs index a85f2e6..a6a0c45 100644 --- a/toad/src/step/block.rs +++ b/toad/src/step/block.rs @@ -86,16 +86,8 @@ impl
Conversation
Pieces: Default
{
/// Create a new [`Conversation`] tracking a Blocked response to a sent request (param `msg`)
- pub fn expect_response(expires_at: Instant ) -> Self {
- Self { original: Some(msg),
- biggest_number_seen: None,
- pcs: Default::default(),
- expires_at }
- }
-
- /// Create a new [`Conversation`] tracking a received Blocked request
- pub fn request(expires_at: Instant Block , addr: SocketAddr, req: &Message ) {
- let exp = snap.time + Milliseconds(snap.config.exchange_lifetime_millis());
- self.get_or_create_endpoint(addr, |convs| {
- convs.insert((req.token, Role::Response, Direction::Inbound),
- Conversation::expect_response(exp, req.clone()))
- .unwrap();
- });
- }
-
- fn insert_request(&self,
+ fn insert(&self,
snap: &Snapshot ,
+ original: Option<&Message >,
(addr, token, role, dir): (SocketAddr, Token, Role, Direction)) {
let exp = snap.time + Milliseconds(snap.config.exchange_lifetime_millis());
self.get_or_create_endpoint(addr, |convs| {
- convs.insert((token, role, dir), Conversation::request(exp))
+ convs.insert((token, role, dir), Conversation::new(exp, original.cloned()))
.unwrap();
});
}
@@ -391,7 +375,7 @@ impl Step
},
| Some(block) => {
if !has_prev_pieces && block.num() == 0 && block.more() {
- self.insert_request(snap, k);
+ self.insert(snap, None, k);
self.map_mut(k, |conv| {
conv.have(snap.time, 0, req.clone().map(|r| r.into()).unwrap())
});
@@ -467,7 +451,7 @@ impl Step
},
| Some(block) => {
if !has_prev_pieces {
- // TODO: warn
+ log!(Block::poll_resp, effects, log::Level::Warn, "Response received for token {:?} but we've never seen a request using that token. Ignoring this response despite it having {:?}", rep.data().msg().token, block);
Some(Ok(rep))
} else {
self.map_mut(k, |conv| {
@@ -496,16 +480,48 @@ impl Step
}
}
+ fn before_message_sent(&self,
+ snap: &platform::Snapshot ,
+ effs: &mut P::Effects,
+ msg: &mut Addrd ,
effs: &mut P::Effects,
msg: &Addrd