Просмотр исходного кода

working on punch hole protocol

open-trade лет назад: 5
Родитель
Сommit
52ea29bb94
3 измененных файлов с 19 добавлено и 7 удалено
  1. 1 1
      Cargo.toml
  2. 1 1
      libs/hbb_common
  3. 17 5
      src/rendezvous_server.rs

+ 1 - 1
Cargo.toml

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

+ 1 - 1
libs/hbb_common

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

+ 17 - 5
src/rendezvous_server.rs

@@ -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
                 }