From 87803e512414efcd19983a9ae381f46c45ce5301 Mon Sep 17 00:00:00 2001
From: David Rowe <david@ctrlaltstudio.com>
Date: Sun, 5 Sep 2021 22:55:24 +1200
Subject: [PATCH] Use client WebSocket address as WebRTC address

---
 domain-server/src/NodeConnectionData.cpp | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/domain-server/src/NodeConnectionData.cpp b/domain-server/src/NodeConnectionData.cpp
index 6e0c8427ba..d7d813e3df 100644
--- a/domain-server/src/NodeConnectionData.cpp
+++ b/domain-server/src/NodeConnectionData.cpp
@@ -17,7 +17,7 @@
 NodeConnectionData NodeConnectionData::fromDataStream(QDataStream& dataStream, const SockAddr& senderSockAddr,
                                                       bool isConnectRequest) {
     NodeConnectionData newHeader;
-    
+
     if (isConnectRequest) {
         dataStream >> newHeader.connectUUID;
 
@@ -58,16 +58,21 @@ NodeConnectionData NodeConnectionData::fromDataStream(QDataStream& dataStream, c
     newHeader.publicSockAddr.setType(publicSocketType);
     newHeader.localSockAddr.setType(localSocketType);
 
-    // For WebRTC connections, the user client doesn't know the WebRTC data channel ID that the domain server is using as its
-    // SockAddr port, so set the port values here.
+    // For WebRTC connections, the user client's signaling channel WebSocket address is used instead of the actual data 
+    // channel's address.
     if (senderSockAddr.getType() == SocketType::WebRTC) {
         if (newHeader.publicSockAddr.getType() != SocketType::WebRTC
             || newHeader.localSockAddr.getType() != SocketType::WebRTC) {
             qDebug() << "Inconsistent WebRTC socket types!";
         }
 
-        newHeader.publicSockAddr.setPort(senderSockAddr.getPort());  // We don't know whether it's a public or local connection
-        newHeader.localSockAddr.setPort(senderSockAddr.getPort());   // so set both ports.
+        // We don't know whether it's a public or local connection so set both the same.
+        auto address = senderSockAddr.getAddress();
+        auto port = senderSockAddr.getPort();
+        newHeader.publicSockAddr.setAddress(address);
+        newHeader.publicSockAddr.setPort(port);
+        newHeader.localSockAddr.setAddress(address);
+        newHeader.localSockAddr.setPort(port);
     }
 
     newHeader.senderSockAddr = senderSockAddr;