Skip to content

Commit 76840d9

Browse files
authored
Merge pull request #383 from tox-rs/friend_search_fix
Search requests should contain zero pind_id
2 parents 75ddfdf + 6bff3b8 commit 76840d9

File tree

1 file changed

+18
-5
lines changed
  • src/toxcore/onion/client

1 file changed

+18
-5
lines changed

src/toxcore/onion/client/mod.rs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,9 @@ struct AnnouncePacketData<'a> {
264264
}
265265

266266
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 {
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

Comments
 (0)