All pastes #2073466 Raw Edit

Stuff

public text v1 · immutable
#2073466 ·published 2011-06-02 00:49 UTC
rendered paste body
diff --git a/mythtv/libs/libmythbase/msocketdevice.cpp b/mythtv/libs/libmythbase/msocketdevice.cpp
index 76afc03..5f7e7d8 100644
--- a/mythtv/libs/libmythbase/msocketdevice.cpp
+++ b/mythtv/libs/libmythbase/msocketdevice.cpp
@@ -42,6 +42,7 @@
 ****************************************************************************/

 #include "msocketdevice.h"
+#include "mythverbose.h"

 #include "qwindowdefs.h"
 #include <string.h>
@@ -189,7 +190,11 @@ MSocketDevice::MSocketDevice( Type type )
            this, type );
 #endif
     init();
-    //setSocket( createNewSocket(), type );
+
+    // For the time being, if it's of type Datagram create the socket now
+    // rather than later during connect (since there wont be one with udp)
+    if (type == Datagram)
+        setSocket( createNewSocket(), type );
 }

 /*!
@@ -549,7 +554,19 @@ quint16 MSocketDevice::port() const
 */
 QHostAddress MSocketDevice::address() const
 {
-    return a;
+
+    QString ipaddress;
+    if (a.toString().startsWith("0:0:0:0:0:FFFF:"))
+    {
+        Q_IPV6ADDR addr = a.toIPv6Address();
+         // addr contains 16 unsigned characters
+
+        ipaddress = QString("%1.%2.%3.%4").arg(addr[12]).arg(addr[13]).arg(addr[14]).arg(addr[15]);
+    }
+    else
+        ipaddress = a.toString();
+
+    return QHostAddress(ipaddress);
 }


diff --git a/mythtv/libs/libmythupnp/upnpdevice.cpp b/mythtv/libs/libmythupnp/upnpdevice.cpp
index d121dcb..6b49297 100644
--- a/mythtv/libs/libmythupnp/upnpdevice.cpp
+++ b/mythtv/libs/libmythupnp/upnpdevice.cpp
@@ -357,14 +357,14 @@ void UPnpDeviceDesc::GetValidXML(
     QString BaseAddr;
     QHostAddress addr(sBaseAddress);

+    BaseAddr = sBaseAddress;
+
 #if !defined(QT_NO_IPV6)
     // Basically if it appears to be an IPv6 IP surround the IP with [] otherwise don't bother
-    if (( addr.protocol() == QAbstractSocket::IPv6Protocol ) || (sBaseAddress.contains(":")))
+    if (sBaseAddress.contains(":"))
         BaseAddr = "[" + sBaseAddress + "]";
     else
 #endif
-    if ( addr.protocol() == QAbstractSocket::IPv4Protocol )
-        BaseAddr = sBaseAddress;

     os << "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
           "<root xmlns=\"urn:schemas-upnp-org:device-1-0\"  xmlns:mythtv=\"mythtv.org\">\n"
diff --git a/mythtv/libs/libmythupnp/upnptasksearch.cpp b/mythtv/libs/libmythupnp/upnptasksearch.cpp
index 20d6d8e..cb7c0d6 100644
--- a/mythtv/libs/libmythupnp/upnptasksearch.cpp
+++ b/mythtv/libs/libmythupnp/upnptasksearch.cpp
@@ -108,9 +108,15 @@ void UPnpSearchTask::SendMsg( MSocketDevice  *pSocket,
                                 it != m_addressList.end();
                               ++it )
     {
+        QString ipaddress = *it;
+
+        // If this looks like an IPv6 address, then enclose it in []'s
+        if (ipaddress.contains(":"))
+            ipaddress = "[" + ipaddress + "]";
+
         QString sHeader = QString ( "HTTP/1.1 200 OK\r\n"
-                                    "LOCATION: http://[%1]:%2/getDeviceDesc\r\n" )
-                            .arg( *it )
+                                    "LOCATION: http://%1:%2/getDeviceDesc\r\n" )
+                            .arg( ipaddress )
                             .arg( m_nServicePort);