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
         loop {
48
         loop {
49
             tokio::select! {
49
             tokio::select! {
50
                 Some((addr, id)) = rx.recv() => {
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
                 Some(Ok((bytes, addr))) = socket.next() => {
53
                 Some(Ok((bytes, addr))) = socket.next() => {
54
                     allow_err!(rs.handle_msg(&bytes, addr, &mut socket).await);
54
                     allow_err!(rs.handle_msg(&bytes, addr, &mut socket).await);
@@ -115,7 +115,8 @@ impl RendezvousServer {
115
                     }
115
                     }
116
                 }
116
                 }
117
                 Some(rendezvous_message::Union::punch_hole_request(ph)) => {
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
                 Some(rendezvous_message::Union::punch_hole_sent(phs)) => {
121
                 Some(rendezvous_message::Union::punch_hole_sent(phs)) => {
121
                     self.handle_hole_sent(&phs, addr, Some(socket)).await?;
122
                     self.handle_hole_sent(&phs, addr, Some(socket)).await?;
@@ -188,6 +189,7 @@ impl RendezvousServer {
188
         addr: SocketAddr,
189
         addr: SocketAddr,
189
         id: &str,
190
         id: &str,
190
         socket: &mut FramedSocket,
191
         socket: &mut FramedSocket,
192
+        is_tcp: bool,
191
     ) -> ResultType<()> {
193
     ) -> ResultType<()> {
192
         // punch hole request from A, forward to B,
194
         // punch hole request from A, forward to B,
193
         // check if in same intranet first,
195
         // check if in same intranet first,
@@ -201,7 +203,11 @@ impl RendezvousServer {
201
                     failure: punch_hole_response::Failure::OFFLINE.into(),
203
                     failure: punch_hole_response::Failure::OFFLINE.into(),
202
                     ..Default::default()
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
             let mut msg_out = RendezvousMessage::new();
212
             let mut msg_out = RendezvousMessage::new();
207
             let same_intranet = match peer.socket_addr {
213
             let same_intranet = match peer.socket_addr {
@@ -245,7 +251,11 @@ impl RendezvousServer {
245
                 failure: punch_hole_response::Failure::ID_NOT_EXIST.into(),
251
                 failure: punch_hole_response::Failure::ID_NOT_EXIST.into(),
246
                 ..Default::default()
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
         Ok(())
260
         Ok(())
251
     }
261
     }