Skip to content

Commit dbf6879

Browse files
Add Discv5Event::SessionEstablished to surface ENRs (sigp#123)
* Add 'Discv5Event::SessionEstablished' to surface ENRs * Replace Enr with NodeContact in SessionEstablished event * Replace NodeContact with (Enr, SocketAddr) in SessionEstablished
1 parent 6fa9bf6 commit dbf6879

File tree

5 files changed

+21
-7
lines changed

5 files changed

+21
-7
lines changed

examples/find_nodes.rs

+1
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ async fn main() {
193193
Discv5Event::Discovered(enr) => info!("Enr discovered {}", enr),
194194
Discv5Event::EnrAdded { enr, replaced: _ } => info!("Enr added {}", enr),
195195
Discv5Event::NodeInserted { node_id, replaced: _ } => info!("Node inserted {}", node_id),
196+
Discv5Event::SessionEstablished(enr, _) => info!("Session established {}", enr),
196197
Discv5Event::SocketUpdated(addr) => info!("Socket updated {}", addr),
197198
Discv5Event::TalkRequest(_) => info!("Talk request received"),
198199
};

src/discv5.rs

+2
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ pub enum Discv5Event {
6161
node_id: NodeId,
6262
replaced: Option<NodeId>,
6363
},
64+
/// A new session has been established with a node.
65+
SessionEstablished(Enr, SocketAddr),
6466
/// Our local ENR IP address has been updated.
6567
SocketUpdated(SocketAddr),
6668
/// A node has initiated a talk request.

src/handler/mod.rs

+14-4
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,9 @@ pub enum HandlerOut {
108108
/// A session has been established with a node.
109109
///
110110
/// A session is only considered established once we have received a signed ENR from the
111-
/// node and received messages from it's `SocketAddr` matching it's ENR fields.
112-
Established(Enr, ConnectionDirection),
111+
/// node and either the observed `SocketAddr` matches the one declared in the ENR or the
112+
/// ENR declares no `SocketAddr`.
113+
Established(Enr, SocketAddr, ConnectionDirection),
113114

114115
/// A Request has been received from a node on the network.
115116
Request(NodeAddress, Box<Request>),
@@ -691,7 +692,11 @@ impl Handler {
691692

692693
// Notify the application that the session has been established
693694
self.service_send
694-
.send(HandlerOut::Established(enr, connection_direction))
695+
.send(HandlerOut::Established(
696+
enr,
697+
node_address.socket_addr,
698+
connection_direction,
699+
))
695700
.await
696701
.unwrap_or_else(|e| warn!("Error with sending channel: {}", e));
697702
}
@@ -778,7 +783,11 @@ impl Handler {
778783
// This occurs when a node established a connection with us.
779784
if let Err(e) = self
780785
.service_send
781-
.send(HandlerOut::Established(enr, ConnectionDirection::Incoming))
786+
.send(HandlerOut::Established(
787+
enr,
788+
node_address.socket_addr,
789+
ConnectionDirection::Incoming,
790+
))
782791
.await
783792
{
784793
warn!("Failed to inform of established session {}", e)
@@ -943,6 +952,7 @@ impl Handler {
943952
.service_send
944953
.send(HandlerOut::Established(
945954
enr,
955+
node_address.socket_addr,
946956
ConnectionDirection::Outgoing,
947957
))
948958
.await

src/handler/tests.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ async fn multiple_messages() {
169169
let sender = async move {
170170
loop {
171171
match sender_handler_recv.recv().await {
172-
Some(HandlerOut::Established(_, _)) => {
172+
Some(HandlerOut::Established(_, _, _)) => {
173173
// now the session is established, send the rest of the messages
174174
for _ in 0..messages_to_send - 1 {
175175
let _ = sender_handler.send(HandlerIn::Request(

src/service.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -341,8 +341,9 @@ impl Service {
341341
}
342342
Some(event) = self.handler_recv.recv() => {
343343
match event {
344-
HandlerOut::Established(enr, direction) => {
345-
self.inject_session_established(enr,direction);
344+
HandlerOut::Established(enr, socket_addr, direction) => {
345+
self.send_event(Discv5Event::SessionEstablished(enr.clone(), socket_addr));
346+
self.inject_session_established(enr, direction);
346347
}
347348
HandlerOut::Request(node_address, request) => {
348349
self.handle_rpc_request(node_address, *request);

0 commit comments

Comments
 (0)