mirror of
https://seed.radicle.dev/rad:z3gqcJUoA1n9HaHKufZs5FCSGazv5.git
synced 2026-11-11 22:20:41 +08:00
Identify remote peers by full SocketAddr
Wire inboxes were kept per IP address. However, there could be multiple peers connecting from the same IP (for instance, if it is an IP of a NAT).
This commit is contained in:
+11
-13
@@ -2,7 +2,7 @@ pub mod message;
|
||||
|
||||
use std::collections::{BTreeMap, HashMap};
|
||||
use std::convert::TryFrom;
|
||||
use std::net::IpAddr;
|
||||
use std::net;
|
||||
use std::ops::{Deref, DerefMut};
|
||||
use std::string::FromUtf8Error;
|
||||
use std::{io, mem};
|
||||
@@ -424,7 +424,7 @@ impl Decode for node::Features {
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Wire<R, S, T, G> {
|
||||
inboxes: HashMap<IpAddr, Decoder>,
|
||||
inboxes: HashMap<net::SocketAddr, Decoder>,
|
||||
inner: service::Service<R, S, T, G>,
|
||||
}
|
||||
|
||||
@@ -446,27 +446,25 @@ where
|
||||
{
|
||||
pub fn connected(
|
||||
&mut self,
|
||||
addr: std::net::SocketAddr,
|
||||
local_addr: &std::net::SocketAddr,
|
||||
addr: net::SocketAddr,
|
||||
local_addr: &net::SocketAddr,
|
||||
link: Link,
|
||||
) {
|
||||
self.inboxes.insert(addr.ip(), Decoder::new(256));
|
||||
self.inboxes.insert(addr, Decoder::new(256));
|
||||
self.inner.connected(addr, local_addr, link)
|
||||
}
|
||||
|
||||
pub fn disconnected(
|
||||
&mut self,
|
||||
addr: &std::net::SocketAddr,
|
||||
addr: &net::SocketAddr,
|
||||
reason: nakamoto::DisconnectReason<service::DisconnectReason>,
|
||||
) {
|
||||
self.inboxes.remove(&addr.ip());
|
||||
self.inboxes.remove(&addr);
|
||||
self.inner.disconnected(addr, &reason)
|
||||
}
|
||||
|
||||
pub fn received_bytes(&mut self, addr: &std::net::SocketAddr, bytes: &[u8]) {
|
||||
let peer_ip = addr.ip();
|
||||
|
||||
if let Some(inbox) = self.inboxes.get_mut(&peer_ip) {
|
||||
pub fn received_bytes(&mut self, addr: &net::SocketAddr, bytes: &[u8]) {
|
||||
if let Some(inbox) = self.inboxes.get_mut(addr) {
|
||||
inbox.input(bytes);
|
||||
|
||||
loop {
|
||||
@@ -476,14 +474,14 @@ where
|
||||
|
||||
Err(err) => {
|
||||
// TODO: Disconnect peer.
|
||||
log::error!("Invalid message received from {}: {}", peer_ip, err);
|
||||
log::error!("Invalid message received from {}: {}", addr, err);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log::debug!("Received message from unknown peer {}", peer_ip);
|
||||
log::debug!("Received message from unknown peer {}", addr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user