@@ -143,8 +143,13 @@ pub enum ServiceRequest {
143
143
/// - A Predicate Query - Searches for peers closest to a random target that match a specified
144
144
/// predicate.
145
145
StartQuery ( QueryKind , oneshot:: Sender < Vec < Enr > > ) ,
146
- /// Find the ENR of a node given its multiaddr.
147
- FindEnr ( NodeContact , oneshot:: Sender < Result < Enr , RequestError > > ) ,
146
+ /// Send a FINDNODE request for nodes that fall within the given set of distances,
147
+ /// to the designated peer and wait for a response.
148
+ FindNodeDesignated (
149
+ NodeContact ,
150
+ Vec < u64 > ,
151
+ oneshot:: Sender < Result < Vec < Enr > , RequestError > > ,
152
+ ) ,
148
153
/// The TALK discv5 RPC function.
149
154
Talk (
150
155
NodeContact ,
@@ -233,8 +238,8 @@ pub struct Pong {
233
238
234
239
/// The kinds of responses we can send back to the discv5 layer.
235
240
pub enum CallbackResponse {
236
- /// A response to a requested ENR .
237
- Enr ( oneshot:: Sender < Result < Enr , RequestError > > ) ,
241
+ /// A response to a requested Nodes .
242
+ Nodes ( oneshot:: Sender < Result < Vec < Enr > , RequestError > > ) ,
238
243
/// A response from a TALK request
239
244
Talk ( oneshot:: Sender < Result < Vec < u8 > , RequestError > > ) ,
240
245
/// A response from a Pong request
@@ -349,8 +354,8 @@ impl Service {
349
354
}
350
355
}
351
356
}
352
- ServiceRequest :: FindEnr ( node_contact, callback) => {
353
- self . request_enr ( node_contact, Some ( callback) ) ;
357
+ ServiceRequest :: FindNodeDesignated ( node_contact, distance , callback) => {
358
+ self . request_find_node_designated_peer ( node_contact, distance , Some ( callback) ) ;
354
359
}
355
360
ServiceRequest :: Talk ( node_contact, protocol, request, callback) => {
356
361
self . talk_request( node_contact, protocol, request, callback) ;
@@ -587,7 +592,7 @@ impl Service {
587
592
if let Some ( enr) = to_request_enr {
588
593
match NodeContact :: try_from_enr ( enr, self . config . ip_mode ) {
589
594
Ok ( contact) => {
590
- self . request_enr ( contact, None ) ;
595
+ self . request_find_node_designated_peer ( contact, vec ! [ 0 ] , None ) ;
591
596
}
592
597
Err ( NonContactable { enr } ) => {
593
598
debug_unreachable ! ( "Stored ENR is not contactable. {}" , enr) ;
@@ -681,25 +686,9 @@ impl Service {
681
686
_ => unreachable ! ( ) ,
682
687
} ;
683
688
684
- // This could be an ENR request from the outer service. If so respond to the
685
- // callback and End.
686
- if let Some ( CallbackResponse :: Enr ( callback) ) = active_request. callback . take ( ) {
687
- // Currently only support requesting for ENR's. Verify this is the case.
688
- if !distances_requested. is_empty ( ) && distances_requested[ 0 ] != 0 {
689
- error ! ( "Retrieved a callback request that wasn't for a peer's ENR" ) ;
690
- return ;
691
- }
692
- // This must be for asking for an ENR
693
- if nodes. len ( ) > 1 {
694
- warn ! (
695
- "Peer returned more than one ENR for itself. {}" ,
696
- active_request. contact
697
- ) ;
698
- }
699
- let response = nodes
700
- . pop ( )
701
- . ok_or ( RequestError :: InvalidEnr ( "Peer did not return an ENR" ) ) ;
702
- if let Err ( e) = callback. send ( response) {
689
+ if let Some ( CallbackResponse :: Nodes ( callback) ) = active_request. callback . take ( )
690
+ {
691
+ if let Err ( e) = callback. send ( Ok ( nodes) ) {
703
692
warn ! ( "Failed to send response in callback {:?}" , e)
704
693
}
705
694
return ;
@@ -980,17 +969,18 @@ impl Service {
980
969
}
981
970
982
971
/// Request an external node's ENR.
983
- fn request_enr (
972
+ fn request_find_node_designated_peer (
984
973
& mut self ,
985
974
contact : NodeContact ,
986
- callback : Option < oneshot:: Sender < Result < Enr , RequestError > > > ,
975
+ distances : Vec < u64 > ,
976
+ callback : Option < oneshot:: Sender < Result < Vec < Enr > , RequestError > > > ,
987
977
) {
988
- let request_body = RequestBody :: FindNode { distances : vec ! [ 0 ] } ;
978
+ let request_body = RequestBody :: FindNode { distances } ;
989
979
let active_request = ActiveRequest {
990
980
contact,
991
981
request_body,
992
982
query_id : None ,
993
- callback : callback. map ( CallbackResponse :: Enr ) ,
983
+ callback : callback. map ( CallbackResponse :: Nodes ) ,
994
984
} ;
995
985
self . send_rpc_request ( active_request) ;
996
986
}
@@ -1412,10 +1402,10 @@ impl Service {
1412
1402
// If this is initiated by the user, return an error on the callback. All callbacks
1413
1403
// support a request error.
1414
1404
match active_request. callback {
1415
- Some ( CallbackResponse :: Enr ( callback) ) => {
1405
+ Some ( CallbackResponse :: Nodes ( callback) ) => {
1416
1406
callback
1417
1407
. send ( Err ( error) )
1418
- . unwrap_or_else ( |_| debug ! ( "Couldn't send TALK error response to user" ) ) ;
1408
+ . unwrap_or_else ( |_| debug ! ( "Couldn't send Nodes error response to user" ) ) ;
1419
1409
return ;
1420
1410
}
1421
1411
Some ( CallbackResponse :: Talk ( callback) ) => {
0 commit comments