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

Merge pull request #249 from nsgundy/FixNoDirectConnectionWhenBothPeersOnLan

Fix no direct connection when both peers on LAN
RustDesk лет назад: 2
Родитель
Сommit
d8e3cb9e65
1 измененных файлов с 17 добавлено и 12 удалено
  1. 17 12
      src/rendezvous_server.rs

+ 17 - 12
src/rendezvous_server.rs

@@ -709,17 +709,14 @@ impl RendezvousServer {
709 709
                 }
710 710
                 ph.nat_type = NatType::SYMMETRIC.into(); // will force relay
711 711
             }
712
-            let same_intranet = !ws
713
-                && match peer_addr {
714
-                    SocketAddr::V4(a) => match addr {
715
-                        SocketAddr::V4(b) => a.ip() == b.ip(),
712
+            let same_intranet: bool = !ws
713
+                && (peer_is_lan && is_lan || {
714
+                    match (peer_addr, addr) {
715
+                        (SocketAddr::V4(a), SocketAddr::V4(b)) => a.ip() == b.ip(),
716
+                        (SocketAddr::V6(a), SocketAddr::V6(b)) => a.ip() == b.ip(),
716 717
                         _ => false,
717
-                    },
718
-                    SocketAddr::V6(a) => match addr {
719
-                        SocketAddr::V6(b) => a.ip() == b.ip(),
720
-                        _ => false,
721
-                    },
722
-                };
718
+                    }
719
+                });
723 720
             let socket_addr = AddrMangle::encode(addr).into();
724 721
             if same_intranet {
725 722
                 log::debug!(
@@ -1191,8 +1188,16 @@ impl RendezvousServer {
1191 1188
     #[inline]
1192 1189
     fn is_lan(&self, addr: SocketAddr) -> bool {
1193 1190
         if let Some(network) = &self.inner.mask {
1194
-            if let SocketAddr::V4(addr) = addr {
1195
-                return network.contains(*addr.ip());
1191
+            match addr {
1192
+                SocketAddr::V4(v4_socket_addr) => {
1193
+                    return network.contains(*v4_socket_addr.ip());
1194
+                }
1195
+                
1196
+                SocketAddr::V6(v6_socket_addr) => {
1197
+                    if let Some(v4_addr) = v6_socket_addr.ip().to_ipv4_mapped() {
1198
+                        return network.contains(v4_addr);
1199
+                    }
1200
+                }
1196 1201
             }
1197 1202
         }
1198 1203
         false