node: Take session reference when writing messages
This ensures that we have an existing session when sending messages. It also will allow us to check the session's state.
This commit is contained in:
parent
feedf345a3
commit
0f81f8a7aa
|
|
@ -519,7 +519,7 @@ where
|
||||||
session::FetchResult::Ready(fetch) => {
|
session::FetchResult::Ready(fetch) => {
|
||||||
debug!(target: "service", "Fetch initiated for {rid} with {seed}..");
|
debug!(target: "service", "Fetch initiated for {rid} with {seed}..");
|
||||||
|
|
||||||
self.reactor.write(session.id, fetch);
|
self.reactor.write(&session, fetch);
|
||||||
}
|
}
|
||||||
session::FetchResult::AlreadyFetching(other) => {
|
session::FetchResult::AlreadyFetching(other) => {
|
||||||
if other == rid {
|
if other == rid {
|
||||||
|
|
@ -642,7 +642,7 @@ where
|
||||||
|
|
||||||
if let Some(peer) = self.sessions.get_mut(&remote) {
|
if let Some(peer) = self.sessions.get_mut(&remote) {
|
||||||
self.reactor.write_all(
|
self.reactor.write_all(
|
||||||
remote,
|
peer,
|
||||||
gossip::handshake(
|
gossip::handshake(
|
||||||
self.clock.as_millis(),
|
self.clock.as_millis(),
|
||||||
&self.storage,
|
&self.storage,
|
||||||
|
|
@ -969,9 +969,11 @@ where
|
||||||
);
|
);
|
||||||
return Err(session::Error::Misbehavior);
|
return Err(session::Error::Misbehavior);
|
||||||
}
|
}
|
||||||
|
*initialized = true;
|
||||||
|
|
||||||
if peer.link.is_inbound() {
|
if peer.link.is_inbound() {
|
||||||
self.reactor.write_all(
|
self.reactor.write_all(
|
||||||
peer.id,
|
peer,
|
||||||
gossip::handshake(
|
gossip::handshake(
|
||||||
self.clock.as_millis(),
|
self.clock.as_millis(),
|
||||||
&self.storage,
|
&self.storage,
|
||||||
|
|
@ -981,7 +983,6 @@ where
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
*initialized = true;
|
|
||||||
// Nb. we don't set the peer timestamp here, since it is going to be
|
// Nb. we don't set the peer timestamp here, since it is going to be
|
||||||
// set after the first message is received only. Setting it here would
|
// set after the first message is received only. Setting it here would
|
||||||
// mean that messages received right after the handshake could be ignored.
|
// mean that messages received right after the handshake could be ignored.
|
||||||
|
|
@ -1015,7 +1016,7 @@ where
|
||||||
// Don't send announcements authored by the remote, back to the remote.
|
// Don't send announcements authored by the remote, back to the remote.
|
||||||
.filter(|ann| &ann.node != remote)
|
.filter(|ann| &ann.node != remote)
|
||||||
{
|
{
|
||||||
self.reactor.write(peer.id, ann.into());
|
self.reactor.write(peer, ann.into());
|
||||||
}
|
}
|
||||||
peer.subscribe = Some(subscribe);
|
peer.subscribe = Some(subscribe);
|
||||||
}
|
}
|
||||||
|
|
@ -1025,7 +1026,7 @@ where
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
self.reactor.write(
|
self.reactor.write(
|
||||||
peer.id,
|
&peer,
|
||||||
Message::Pong {
|
Message::Pong {
|
||||||
zeroes: ZeroBytes::new(ponglen),
|
zeroes: ZeroBytes::new(ponglen),
|
||||||
},
|
},
|
||||||
|
|
@ -1045,7 +1046,7 @@ where
|
||||||
|
|
||||||
*protocol = Protocol::Fetch { rid };
|
*protocol = Protocol::Fetch { rid };
|
||||||
// Accept the request and instruct the transport to handover the socket to the worker.
|
// Accept the request and instruct the transport to handover the socket to the worker.
|
||||||
self.reactor.write(*remote, Message::FetchOk { rid });
|
self.reactor.write(peer, Message::FetchOk { rid });
|
||||||
self.reactor
|
self.reactor
|
||||||
.fetch(*remote, rid, Namespaces::default(), false);
|
.fetch(*remote, rid, Namespaces::default(), false);
|
||||||
}
|
}
|
||||||
|
|
@ -1201,8 +1202,8 @@ where
|
||||||
fn announce_inventory(&mut self, inventory: Vec<Id>) -> Result<(), storage::Error> {
|
fn announce_inventory(&mut self, inventory: Vec<Id>) -> Result<(), storage::Error> {
|
||||||
let time = self.time();
|
let time = self.time();
|
||||||
let inv = Message::inventory(gossip::inventory(time, inventory), &self.signer);
|
let inv = Message::inventory(gossip::inventory(time, inventory), &self.signer);
|
||||||
for id in self.sessions.negotiated().map(|(id, _)| id) {
|
for (_, sess) in self.sessions.negotiated() {
|
||||||
self.reactor.write(*id, inv.clone());
|
self.reactor.write(sess, inv.clone());
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -61,13 +61,13 @@ impl Reactor {
|
||||||
self.io.push_back(Io::Disconnect(id, reason));
|
self.io.push_back(Io::Disconnect(id, reason));
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn write(&mut self, remote: NodeId, msg: Message) {
|
pub fn write(&mut self, remote: &Session, msg: Message) {
|
||||||
debug!(target: "service", "Write {:?} to {}", &msg, remote);
|
debug!(target: "service", "Write {:?} to {}", &msg, remote);
|
||||||
|
|
||||||
self.io.push_back(Io::Write(remote, vec![msg]));
|
self.io.push_back(Io::Write(remote.id, vec![msg]));
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn write_all(&mut self, remote: NodeId, msgs: impl IntoIterator<Item = Message>) {
|
pub fn write_all(&mut self, remote: &Session, msgs: impl IntoIterator<Item = Message>) {
|
||||||
let msgs = msgs.into_iter().collect::<Vec<_>>();
|
let msgs = msgs.into_iter().collect::<Vec<_>>();
|
||||||
for (ix, msg) in msgs.iter().enumerate() {
|
for (ix, msg) in msgs.iter().enumerate() {
|
||||||
debug!(
|
debug!(
|
||||||
|
|
@ -79,7 +79,7 @@ impl Reactor {
|
||||||
msgs.len()
|
msgs.len()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
self.io.push_back(Io::Write(remote, msgs));
|
self.io.push_back(Io::Write(remote.id, msgs));
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn wakeup(&mut self, after: LocalDuration) {
|
pub fn wakeup(&mut self, after: LocalDuration) {
|
||||||
|
|
@ -103,7 +103,7 @@ impl Reactor {
|
||||||
) {
|
) {
|
||||||
let msg = msg.into();
|
let msg = msg.into();
|
||||||
for peer in peers {
|
for peer in peers {
|
||||||
self.write(peer.id, msg.clone());
|
self.write(peer, msg.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -259,7 +259,7 @@ impl Session {
|
||||||
let msg = message::Ping::new(&mut self.rng);
|
let msg = message::Ping::new(&mut self.rng);
|
||||||
*ping = PingState::AwaitingResponse(msg.ponglen);
|
*ping = PingState::AwaitingResponse(msg.ponglen);
|
||||||
|
|
||||||
reactor.write(self.id, Message::Ping(msg));
|
reactor.write(self, Message::Ping(msg));
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue