convert IPv4-mapped addresses to IPv4 addresses
authorAaron Wyatt <dev@psi-borg.org>
Mon, 2 Sep 2019 11:35:55 +0000 (13:35 +0200)
committerIOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>
Mon, 2 Sep 2019 11:35:55 +0000 (13:35 +0200)
Forwarded: no
Last-Update: 2019-09-02

Other clients hang at "Waiting for Peer..." when attempting to connect to
jacktrip running as a server. This is because of a change to the way that
QHostAddress works in Qt5, resulting in the return of an IPv4-mapped address
instead of an IPv4 address. The attached a patch fixes this (restoring the
behaviour shown by Qt4).
Last-Update: 2019-09-02
Gbp-Pq: Name convert_IPv4.patch

src/JackTrip.cpp

index 0ae9f39087bdb98ae49c0162b4950e151eb834aa..8f149e7fda0f2afc8d3f2ea0751bd7c00cb27bb5 100644 (file)
@@ -450,7 +450,16 @@ int JackTrip::serverStart(bool timeout, int udpTimeout)
   UdpSockTemp.readDatagram(buf, 1, &peerHostAddress, &peer_port);
   UdpSockTemp.close(); // close the socket
 
-  mPeerAddress = peerHostAddress.toString();
+  // Convert any IPv4-mapped address to an actual IPv4 address
+  // (Due to a change in the way that QHostAddress works in Qt5)
+  bool couldConvert;
+  QHostAddress ipv4Address(peerHostAddress.toIPv4Address(&couldConvert));
+  if (couldConvert) {
+    mPeerAddress = ipv4Address.toString();
+  } else {
+    mPeerAddress = peerHostAddress.toString();
+  }
+
   cout << "Client Connection Received from IP : " 
        << qPrintable(mPeerAddress) << endl;
   cout << gPrintSeparator << endl;