working on punch hole protocol

This commit is contained in:
open-trade 2020-03-09 13:55:12 +08:00
parent d5e55b33d5
commit 52ea29bb94
3 changed files with 19 additions and 7 deletions

View File

@ -17,5 +17,5 @@ simple-error = "0.2"
hbb_common = { path = "libs/hbb_common" } hbb_common = { path = "libs/hbb_common" }
[workspace] [workspace]
members = ['libs/hbb_common'] members = ["libs/hbb_common"]

@ -1 +1 @@
Subproject commit 938076d06af0efa532ce2372a051ae69f2136720 Subproject commit a9536bcc127a9d8057a9b7ffbe486506a7b963de

View File

@ -60,16 +60,27 @@ impl RendezvousServer {
); );
} }
} }
Some(Message_oneof_union::peek_peer(pp)) => { Some(Message_oneof_union::punch_hole_request(ph)) => {
if let Some(peer) = self.peer_map.get(&pp.hbb_addr) { // punch hole request from A, forward to B
if let Some(peer) = self.peer_map.get(&ph.hbb_addr) {
let mut msg_out = Message::new(); let mut msg_out = Message::new();
msg_out.set_peek_peer_response(PeekPeerResponse { msg_out.set_punch_hole(PunchHole {
socket_addr: V4AddrMangle::encode(&peer.socket_addr), socket_addr: V4AddrMangle::encode(&peer.socket_addr),
..Default::default() ..Default::default()
}); });
send_to(&msg_out, addr, socket).await?; send_to(&msg_out, addr, socket).await?;
} }
} }
Some(Message_oneof_union::punch_hole_sent(phs)) => {
// punch hole sent from B, tell A that B ready
let addr_a = V4AddrMangle::decode(&phs.socket_addr);
let mut msg_out = Message::new();
msg_out.set_punch_hole_response(PunchHoleResponse {
socket_addr: V4AddrMangle::encode(&addr_v4),
..Default::default()
});
send_to(&msg_out, SocketAddr::V4(addr_a), socket).await?;
}
_ => {} _ => {}
} }
} }
@ -86,6 +97,7 @@ pub async fn send_to(msg: &Message, addr: SocketAddr, socket: &mut FramedSocket)
Ok(()) Ok(())
} }
#[inline]
pub async fn sleep(sec: f32) { pub async fn sleep(sec: f32) {
delay_for(Duration::from_secs_f32(sec)).await; delay_for(Duration::from_secs_f32(sec)).await;
} }
@ -110,7 +122,7 @@ mod tests {
..Default::default() ..Default::default()
}); });
send_to(&msg_out, to_addr, &mut socket).await; send_to(&msg_out, to_addr, &mut socket).await;
msg_out.set_peek_peer(PeekPeer { msg_out.set_punch_hole_request(PunchHoleRequest {
hbb_addr: "123".to_string(), hbb_addr: "123".to_string(),
..Default::default() ..Default::default()
}); });
@ -122,7 +134,7 @@ mod tests {
assert_eq!( assert_eq!(
local_addr, local_addr,
SocketAddr::V4(V4AddrMangle::decode( SocketAddr::V4(V4AddrMangle::decode(
&msg_in.get_peek_peer_response().socket_addr[..] &msg_in.get_punch_hole_response().socket_addr[..]
)) ))
); );
} }