@@ -264,8 +264,9 @@ struct AnnouncePacketData<'a> {
264264}
265265
266266impl < ' 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 {
269270 let payload = OnionAnnounceRequestPayload {
270271 ping_id : ping_id. unwrap_or_else ( initial_ping_id) ,
271272 search_pk : self . search_pk ,
@@ -278,6 +279,14 @@ impl<'a> AnnouncePacketData<'a> {
278279 & payload
279280 )
280281 }
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+ }
281290}
282291
283292/// Onion client state.
@@ -474,7 +483,7 @@ impl OnionClient {
474483 friend_pk : announce_data. friend_pk ,
475484 } ) ;
476485
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) ;
478487 let onion_request = path. create_onion_request ( node. saddr , InnerOnionRequest :: InnerOnionAnnounceRequest ( inner_announce_request) ) ;
479488
480489 futures. push ( send_to ( & self . dht . tx , ( Packet :: OnionRequest0 ( onion_request) , path. nodes [ 0 ] . saddr ) ) ) ;
@@ -658,7 +667,10 @@ impl OnionClient {
658667 friend_pk,
659668 } ) ;
660669
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+ } ;
662674 let onion_request = path. create_onion_request ( node. saddr , InnerOnionRequest :: InnerOnionAnnounceRequest ( inner_announce_request) ) ;
663675
664676 packets. push ( ( Packet :: OnionRequest0 ( onion_request) , path. nodes [ 0 ] . saddr ) ) ;
@@ -2006,7 +2018,8 @@ mod tests {
20062018 pk : node_pk,
20072019 saddr,
20082020 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 ] ) ) ,
20102023 data_pk : None ,
20112024 unsuccessful_pings : 0 ,
20122025 added_time : now,
0 commit comments