node: Upgrade dependencies

Fixes issue with improperly closed connections.
This commit is contained in:
cloudhead 2024-02-23 12:44:30 +01:00
parent d16ae3edc9
commit b0fbbeed6b
No known key found for this signature in database
3 changed files with 25 additions and 29 deletions

8
Cargo.lock generated
View File

@ -1604,9 +1604,9 @@ dependencies = [
[[package]]
name = "io-reactor"
version = "0.3.0"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2457e8fb1b1f298809fcd93cd15d485f52ef565f7ad47970583c7a80ae6c7e78"
checksum = "bd2eb3f6ef3b908c8144cd1d1a3069ecfdb60cbc795a303fd2d17b96c1c67c77"
dependencies = [
"amplify",
"crossbeam-channel",
@ -1838,9 +1838,9 @@ dependencies = [
[[package]]
name = "netservices"
version = "0.5.0"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e227ff39744a414d32b9b473266c1739a950b89cd03694a58b624f4bde926c10"
checksum = "dcd7e1d8a6763072326ece5a4329c6a924d7e8889a301334169e46613c5ef7a4"
dependencies = [
"amplify",
"cyphernet",

View File

@ -19,12 +19,12 @@ colored = { version = "2.1.0" }
crossbeam-channel = { version = "0.5.6" }
cyphernet = { version = "0.4.1", features = ["tor", "dns", "ed25519", "p2p-ed25519"] }
fastrand = { version = "2.0.0" }
io-reactor = { version = "0.3.0", features = ["popol"] }
io-reactor = { version = "0.5.0", features = ["popol"] }
lexopt = { version = "0.3.0" }
libc = { version = "0.2.137" }
log = { version = "0.4.17", features = ["std"] }
localtime = { version = "1.2.0" }
netservices = { version = "0.5.0", features = ["io-reactor", "socket2"] }
netservices = { version = "0.7.0", features = ["io-reactor", "socket2"] }
nonempty = { version = "0.9.0", features = ["serialize"] }
once_cell = { version = "1.13" }
qcheck = { version = "1", default-features = false, optional = true }

View File

@ -18,7 +18,7 @@ use localtime::LocalTime;
use netservices::resource::{ListenerEvent, NetAccept, NetTransport, SessionEvent};
use netservices::session::{ProtocolArtifact, Socks5Session};
use netservices::{NetConnection, NetProtocol, NetReader, NetWriter};
use reactor::{ResourceId, Timestamp};
use reactor::{ResourceId, ResourceType, Timestamp};
use radicle::collections::RandomMap;
use radicle::node::NodeId;
@ -456,20 +456,26 @@ where
) {
match event {
ListenerEvent::Accepted(connection) => {
let addr = connection.remote_addr();
let Ok(addr) = connection.remote_addr() else {
log::warn!(target: "wire", "Accepted connection doesn't have remote address; dropping..");
drop(connection);
return;
};
let addr: NetAddr<HostName> = addr.into();
let fd = connection.as_raw_fd();
log::debug!(target: "wire", "Accepting inbound connection from {addr} (fd={fd})..");
// If the service doesn't want to accept this connection,
// we drop the connection here, which disconnects the socket.
if !self.service.accepted(NetAddr::from(addr.clone()).into()) {
if !self.service.accepted(addr.clone().into()) {
log::debug!(target: "wire", "Rejecting inbound connection from {addr} (fd={fd})..");
drop(connection);
return;
}
let session = accept::<G>(connection, self.signer.clone());
let session = accept::<G>(addr.clone(), connection, self.signer.clone());
let transport = match NetTransport::with_session(session, Link::Inbound) {
Ok(transport) => transport,
Err(err) => {
@ -478,13 +484,7 @@ where
}
};
self.inbound.insert(
fd,
Inbound {
id: None,
addr: addr.into(),
},
);
self.inbound.insert(fd, Inbound { id: None, addr });
self.actions
.push_back(reactor::Action::RegisterTransport(transport))
}
@ -494,7 +494,11 @@ where
}
}
fn handle_registered(&mut self, fd: RawFd, id: ResourceId) {
fn handle_registered(&mut self, fd: RawFd, id: ResourceId, typ: ResourceType) {
if typ == ResourceType::Listener {
// Not interested in listener resource registration.
return;
}
if let Some(outbound) = self.outbound.get_mut(&fd) {
log::debug!(target: "wire", "Outbound peer resource registered for {} with id={id} (fd={fd})", outbound.nid);
outbound.id = Some(id);
@ -837,10 +841,7 @@ where
}
}
Io::Wakeup(d) => {
self.actions.push_back(reactor::Action::SetTimer(
// TODO: Remove this when `io-reactor` can handle `0` duration timeouts.
d.max(localtime::LocalDuration::from_millis(1)).into(),
));
self.actions.push_back(reactor::Action::SetTimer(d.into()));
}
Io::Fetch {
rid,
@ -924,16 +925,11 @@ pub fn dial<G: Signer + Ecdh<Pk = NodeId>>(
/// Accept a new connection.
pub fn accept<G: Signer + Ecdh<Pk = NodeId>>(
remote_addr: NetAddr<HostName>,
connection: net::TcpStream,
signer: G,
) -> WireSession<G> {
session::<G>(
connection.remote_addr().into(),
None,
connection,
signer,
false,
)
session::<G>(remote_addr, None, connection, signer, false)
}
/// Create a new [`WireSession`].