open-trade лет назад: 5
Родитель
Сommit
47e3601783
1 измененных файлов с 14 добавлено и 4 удалено
  1. 14 4
      src/rendezvous_server.rs

+ 14 - 4
src/rendezvous_server.rs

@@ -48,7 +48,7 @@ impl RendezvousServer {
48 48
         loop {
49 49
             tokio::select! {
50 50
                 Some((addr, id)) = rx.recv() => {
51
-                    allow_err!(rs.handle_punch_hole_request(addr, &id, &mut socket).await);
51
+                    allow_err!(rs.handle_punch_hole_request(addr, &id, &mut socket, true).await);
52 52
                 }
53 53
                 Some(Ok((bytes, addr))) = socket.next() => {
54 54
                     allow_err!(rs.handle_msg(&bytes, addr, &mut socket).await);
@@ -115,7 +115,8 @@ impl RendezvousServer {
115 115
                     }
116 116
                 }
117 117
                 Some(rendezvous_message::Union::punch_hole_request(ph)) => {
118
-                    self.handle_punch_hole_request(addr, &ph.id, socket).await?;
118
+                    self.handle_punch_hole_request(addr, &ph.id, socket, false)
119
+                        .await?;
119 120
                 }
120 121
                 Some(rendezvous_message::Union::punch_hole_sent(phs)) => {
121 122
                     self.handle_hole_sent(&phs, addr, Some(socket)).await?;
@@ -188,6 +189,7 @@ impl RendezvousServer {
188 189
         addr: SocketAddr,
189 190
         id: &str,
190 191
         socket: &mut FramedSocket,
192
+        is_tcp: bool,
191 193
     ) -> ResultType<()> {
192 194
         // punch hole request from A, forward to B,
193 195
         // check if in same intranet first,
@@ -201,7 +203,11 @@ impl RendezvousServer {
201 203
                     failure: punch_hole_response::Failure::OFFLINE.into(),
202 204
                     ..Default::default()
203 205
                 });
204
-                return socket.send(&msg_out, addr).await;
206
+                return if is_tcp {
207
+                    self.send_to_tcp(&msg_out, addr).await
208
+                } else {
209
+                    socket.send(&msg_out, addr).await
210
+                };
205 211
             }
206 212
             let mut msg_out = RendezvousMessage::new();
207 213
             let same_intranet = match peer.socket_addr {
@@ -245,7 +251,11 @@ impl RendezvousServer {
245 251
                 failure: punch_hole_response::Failure::ID_NOT_EXIST.into(),
246 252
                 ..Default::default()
247 253
             });
248
-            socket.send(&msg_out, addr).await?
254
+            return if is_tcp {
255
+                self.send_to_tcp(&msg_out, addr).await
256
+            } else {
257
+                socket.send(&msg_out, addr).await
258
+            };
249 259
         }
250 260
         Ok(())
251 261
     }