@@ -264,8 +264,9 @@ struct AnnouncePacketData<'a> {
264
264
}
265
265
266
266
impl < ' a > AnnouncePacketData < ' a > {
267
- /// Create `InnerOnionAnnounceRequest`.
268
- pub fn request ( & self , node_pk : & PublicKey , ping_id : Option < sha256:: Digest > , request_id : u64 ) -> InnerOnionAnnounceRequest {
267
+ /// Create `InnerOnionAnnounceRequest`. The request is a search request if
268
+ /// pind_id is 0 and an announce request otherwise.
269
+ fn request ( & self , node_pk : & PublicKey , ping_id : Option < sha256:: Digest > , request_id : u64 ) -> InnerOnionAnnounceRequest {
269
270
let payload = OnionAnnounceRequestPayload {
270
271
ping_id : ping_id. unwrap_or_else ( initial_ping_id) ,
271
272
search_pk : self . search_pk ,
@@ -278,6 +279,14 @@ impl<'a> AnnouncePacketData<'a> {
278
279
& payload
279
280
)
280
281
}
282
+ /// Create `InnerOnionAnnounceRequest` for a search request.
283
+ pub fn search_request ( & self , node_pk : & PublicKey , request_id : u64 ) -> InnerOnionAnnounceRequest {
284
+ self . request ( node_pk, None , request_id)
285
+ }
286
+ /// Create `InnerOnionAnnounceRequest` for an announce request.
287
+ pub fn announce_request ( & self , node_pk : & PublicKey , ping_id : sha256:: Digest , request_id : u64 ) -> InnerOnionAnnounceRequest {
288
+ self . request ( node_pk, Some ( ping_id) , request_id)
289
+ }
281
290
}
282
291
283
292
/// Onion client state.
@@ -474,7 +483,7 @@ impl OnionClient {
474
483
friend_pk : announce_data. friend_pk ,
475
484
} ) ;
476
485
477
- let inner_announce_request = announce_packet_data. request ( & node. pk , None , request_id) ;
486
+ let inner_announce_request = announce_packet_data. search_request ( & node. pk , request_id) ;
478
487
let onion_request = path. create_onion_request ( node. saddr , InnerOnionRequest :: InnerOnionAnnounceRequest ( inner_announce_request) ) ;
479
488
480
489
futures. push ( send_to ( & self . dht . tx , ( Packet :: OnionRequest0 ( onion_request) , path. nodes [ 0 ] . saddr ) ) ) ;
@@ -658,7 +667,10 @@ impl OnionClient {
658
667
friend_pk,
659
668
} ) ;
660
669
661
- let inner_announce_request = announce_packet_data. request ( & node. pk , node. ping_id , request_id) ;
670
+ let inner_announce_request = match node. ping_id {
671
+ Some ( ping_id) if friend_pk. is_none ( ) => announce_packet_data. announce_request ( & node. pk , ping_id, request_id) ,
672
+ _ => announce_packet_data. search_request ( & node. pk , request_id)
673
+ } ;
662
674
let onion_request = path. create_onion_request ( node. saddr , InnerOnionRequest :: InnerOnionAnnounceRequest ( inner_announce_request) ) ;
663
675
664
676
packets. push ( ( Packet :: OnionRequest0 ( onion_request) , path. nodes [ 0 ] . saddr ) ) ;
@@ -2006,7 +2018,8 @@ mod tests {
2006
2018
pk : node_pk,
2007
2019
saddr,
2008
2020
path_id : path. id ( ) ,
2009
- ping_id : None ,
2021
+ // regardless of this ping_id search requests should contain 0
2022
+ ping_id : Some ( sha256:: hash ( & [ 1 , 2 , 3 ] ) ) ,
2010
2023
data_pk : None ,
2011
2024
unsuccessful_pings : 0 ,
2012
2025
added_time : now,
0 commit comments