Skip to content

Commit 344d4b0

Browse files
committed
test: add test case to the change flow for the route
1 parent 8835656 commit 344d4b0

File tree

5 files changed

+326
-78
lines changed

5 files changed

+326
-78
lines changed

network/src/protocols/hole_punching/component/connection_request.rs

+5-41
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use crate::{
1515
SupportProtocols,
1616
hole_punching::{
1717
ADDRS_COUNT_LIMIT, HolePunching, MAX_TTL, PENETRATED_INTERVAL,
18+
component::{forword_request, init_delivered},
1819
status::{Status, StatusCode},
1920
},
2021
},
@@ -92,7 +93,7 @@ impl<'a> ConnectionRequestProcess<'a> {
9293
} else if ttl == 0u8 {
9394
StatusCode::ReachedMaxTTL.into()
9495
} else {
95-
self.forward_message(self_peer_id, ttl, &to_peer_id).await
96+
self.forward_message(self_peer_id, &to_peer_id).await
9697
}
9798
}
9899

@@ -125,34 +126,7 @@ impl<'a> ConnectionRequestProcess<'a> {
125126
packed::AddressVec::new_builder().extend(iter).build()
126127
}
127128
};
128-
let message = self.message.to_entity();
129-
let new_route = packed::BytesVec::new_builder()
130-
.extend(
131-
message
132-
.route()
133-
.into_iter()
134-
.take(self.message.route().len() - 1),
135-
)
136-
.build();
137-
let sync_route = packed::BytesVec::new_builder()
138-
.extend(
139-
message
140-
.route()
141-
.into_iter()
142-
.chain(vec![to_peer_id.as_bytes().pack()].into_iter())
143-
.collect::<Vec<_>>()
144-
.into_iter()
145-
.rev()
146-
.take(self.message.route().len()),
147-
)
148-
.build();
149-
let content = packed::ConnectionRequestDelivered::new_builder()
150-
.from(message.from())
151-
.to(message.to())
152-
.route(new_route)
153-
.sync_route(sync_route)
154-
.listen_addrs(listen_addrs)
155-
.build();
129+
let content = init_delivered(self.message, listen_addrs);
156130
let new_message = packed::HolePunchingMessage::new_builder()
157131
.set(content)
158132
.build()
@@ -208,18 +182,8 @@ impl<'a> ConnectionRequestProcess<'a> {
208182
Status::ok()
209183
}
210184

211-
async fn forward_message(&self, self_peer_id: &PeerId, ttl: u8, to_peer_id: &PeerId) -> Status {
212-
let message = self.message.to_entity();
213-
let new_route = message
214-
.route()
215-
.as_builder()
216-
.push(self_peer_id.as_bytes().pack())
217-
.build();
218-
let content = message
219-
.as_builder()
220-
.ttl((ttl - 1).into())
221-
.route(new_route)
222-
.build();
185+
async fn forward_message(&self, self_peer_id: &PeerId, to_peer_id: &PeerId) -> Status {
186+
let content = forword_request(self.message, self_peer_id);
223187
let new_message = packed::HolePunchingMessage::new_builder()
224188
.set(content)
225189
.build()

network/src/protocols/hole_punching/component/connection_request_delivered.rs

+4-21
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use crate::{
1717
SupportProtocols,
1818
hole_punching::{
1919
ADDRS_COUNT_LIMIT, HolePunching,
20-
component::try_nat_traversal,
20+
component::{forward_delivered, init_sync, try_nat_traversal},
2121
status::{Status, StatusCode},
2222
},
2323
},
@@ -76,11 +76,7 @@ impl<'a> ConnectionRequestDeliveredProcess<'a> {
7676

7777
match target_sid {
7878
Some(next_peer) => {
79-
let message = self.message.to_entity();
80-
let new_route = packed::BytesVec::new_builder()
81-
.extend(message.route().into_iter().take(route.len() - 1))
82-
.build();
83-
let content = message.as_builder().route(new_route).build();
79+
let content = forward_delivered(self.message);
8480
let new_message = packed::HolePunchingMessage::new_builder()
8581
.set(content)
8682
.build()
@@ -147,20 +143,7 @@ impl<'a> ConnectionRequestDeliveredProcess<'a> {
147143
}
148144

149145
async fn respond_sync(&self, from_peer_id: PeerId) -> Status {
150-
let message = self.message.to_entity();
151-
let new_route = packed::BytesVec::new_builder()
152-
.extend(
153-
message
154-
.sync_route()
155-
.into_iter()
156-
.take(self.message.sync_route().len() - 1),
157-
)
158-
.build();
159-
let content = packed::ConnectionSync::new_builder()
160-
.from(message.from())
161-
.to(message.to())
162-
.route(new_route)
163-
.build();
146+
let content = init_sync(self.message);
164147
let new_message = packed::HolePunchingMessage::new_builder()
165148
.set(content)
166149
.build()
@@ -232,7 +215,7 @@ impl<'a> ConnectionRequestDeliveredProcess<'a> {
232215
}
233216

234217
runtime::spawn(async move {
235-
tokio::time::sleep(std::time::Duration::from_millis(ttl / 2)).await;
218+
runtime::delay_for(std::time::Duration::from_millis(ttl / 2)).await;
236219
if let Ok(((stream, addr), _)) = select_ok(tasks).await {
237220
debug!("NAT traversal success, addr: {:?}", addr);
238221
let _ignore = control

network/src/protocols/hole_punching/component/connection_sync.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use crate::{
1616
SupportProtocols,
1717
hole_punching::{
1818
HolePunching,
19-
component::try_nat_traversal,
19+
component::{forword_sync, try_nat_traversal},
2020
status::{Status, StatusCode},
2121
},
2222
},
@@ -68,11 +68,7 @@ impl<'a> ConnectionSyncProcess<'a> {
6868

6969
match target_sid {
7070
Some(next_peer) => {
71-
let message = self.message.to_entity();
72-
let new_route = packed::BytesVec::new_builder()
73-
.extend(message.route().into_iter().take(route.len() - 1))
74-
.build();
75-
let content = message.as_builder().route(new_route).build();
71+
let content = forword_sync(self.message);
7672
let new_message = packed::HolePunchingMessage::new_builder()
7773
.set(content)
7874
.build()

0 commit comments

Comments
 (0)