|
|
@@ -60,16 +60,27 @@ impl RendezvousServer {
|
|
60
|
60
|
);
|
|
61
|
61
|
}
|
|
62
|
62
|
}
|
|
63
|
|
- Some(Message_oneof_union::peek_peer(pp)) => {
|
|
64
|
|
- if let Some(peer) = self.peer_map.get(&pp.hbb_addr) {
|
|
|
63
|
+ Some(Message_oneof_union::punch_hole_request(ph)) => {
|
|
|
64
|
+ // punch hole request from A, forward to B
|
|
|
65
|
+ if let Some(peer) = self.peer_map.get(&ph.hbb_addr) {
|
|
65
|
66
|
let mut msg_out = Message::new();
|
|
66
|
|
- msg_out.set_peek_peer_response(PeekPeerResponse {
|
|
|
67
|
+ msg_out.set_punch_hole(PunchHole {
|
|
67
|
68
|
socket_addr: V4AddrMangle::encode(&peer.socket_addr),
|
|
68
|
69
|
..Default::default()
|
|
69
|
70
|
});
|
|
70
|
71
|
send_to(&msg_out, addr, socket).await?;
|
|
71
|
72
|
}
|
|
72
|
73
|
}
|
|
|
74
|
+ Some(Message_oneof_union::punch_hole_sent(phs)) => {
|
|
|
75
|
+ // punch hole sent from B, tell A that B ready
|
|
|
76
|
+ let addr_a = V4AddrMangle::decode(&phs.socket_addr);
|
|
|
77
|
+ let mut msg_out = Message::new();
|
|
|
78
|
+ msg_out.set_punch_hole_response(PunchHoleResponse {
|
|
|
79
|
+ socket_addr: V4AddrMangle::encode(&addr_v4),
|
|
|
80
|
+ ..Default::default()
|
|
|
81
|
+ });
|
|
|
82
|
+ send_to(&msg_out, SocketAddr::V4(addr_a), socket).await?;
|
|
|
83
|
+ }
|
|
73
|
84
|
_ => {}
|
|
74
|
85
|
}
|
|
75
|
86
|
}
|
|
|
@@ -86,6 +97,7 @@ pub async fn send_to(msg: &Message, addr: SocketAddr, socket: &mut FramedSocket)
|
|
86
|
97
|
Ok(())
|
|
87
|
98
|
}
|
|
88
|
99
|
|
|
|
100
|
+#[inline]
|
|
89
|
101
|
pub async fn sleep(sec: f32) {
|
|
90
|
102
|
delay_for(Duration::from_secs_f32(sec)).await;
|
|
91
|
103
|
}
|
|
|
@@ -110,7 +122,7 @@ mod tests {
|
|
110
|
122
|
..Default::default()
|
|
111
|
123
|
});
|
|
112
|
124
|
send_to(&msg_out, to_addr, &mut socket).await;
|
|
113
|
|
- msg_out.set_peek_peer(PeekPeer {
|
|
|
125
|
+ msg_out.set_punch_hole_request(PunchHoleRequest {
|
|
114
|
126
|
hbb_addr: "123".to_string(),
|
|
115
|
127
|
..Default::default()
|
|
116
|
128
|
});
|
|
|
@@ -122,7 +134,7 @@ mod tests {
|
|
122
|
134
|
assert_eq!(
|
|
123
|
135
|
local_addr,
|
|
124
|
136
|
SocketAddr::V4(V4AddrMangle::decode(
|
|
125
|
|
- &msg_in.get_peek_peer_response().socket_addr[..]
|
|
|
137
|
+ &msg_in.get_punch_hole_response().socket_addr[..]
|
|
126
|
138
|
))
|
|
127
|
139
|
);
|
|
128
|
140
|
}
|