[SCM] kdeconnect packaging branch, master, updated. debian/0.9g-1-1183-g9d69498

Maximiliano Curia maxy at moszumanska.debian.org
Fri Oct 14 14:26:42 UTC 2016


Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/kdeconnect.git;a=commitdiff;h=fc3e2ef

The following commit has been merged in the master branch:
commit fc3e2eff1db3fe0183a72090603ea98cdba7493a
Author: Albert Vaca <albertvaka at gmail.com>
Date:   Thu Aug 8 04:11:20 2013 +0200

    Dynamic tcp port change when bind fails
---
 daemon/linkproviders/broadcasttcplinkprovider.cpp | 33 +++++++++++++++--------
 daemon/linkproviders/broadcasttcplinkprovider.h   |  8 +++++-
 2 files changed, 29 insertions(+), 12 deletions(-)

diff --git a/daemon/linkproviders/broadcasttcplinkprovider.cpp b/daemon/linkproviders/broadcasttcplinkprovider.cpp
index 780b825..5d6a6d3 100644
--- a/daemon/linkproviders/broadcasttcplinkprovider.cpp
+++ b/daemon/linkproviders/broadcasttcplinkprovider.cpp
@@ -40,7 +40,9 @@ BroadcastTcpLinkProvider::BroadcastTcpLinkProvider()
 void BroadcastTcpLinkProvider::onStart()
 {
     mUdpServer->bind(QHostAddress::Broadcast, port, QUdpSocket::ShareAddress);
-    mTcpServer->listen(QHostAddress::Any, port);
+
+    tcpPort = port;
+    while (!mTcpServer->listen(QHostAddress::Any, tcpPort)) tcpPort++;
 
     onNetworkChange(QNetworkSession::Connected);
 }
@@ -52,10 +54,12 @@ void BroadcastTcpLinkProvider::onStop()
 }
 
 //I'm in a new network, let's be polite and introduce myself
-void BroadcastTcpLinkProvider::onNetworkChange(QNetworkSession::State state) {
+void BroadcastTcpLinkProvider::onNetworkChange(QNetworkSession::State state)
+{
     qDebug() << "onNetworkChange" << state;
     NetworkPackage np("");
     NetworkPackage::createIdentityPackage(&np);
+    np.set("tcpPort",tcpPort);
     QUdpSocket().writeDatagram(np.serialize(),QHostAddress("255.255.255.255"), port);
 }
 
@@ -79,7 +83,7 @@ void BroadcastTcpLinkProvider::newUdpConnection()
             NetworkPackage::createIdentityPackage(&np2);
 
             if (np->get<QString>("deviceId") == np2.get<QString>("deviceId")) {
-                qDebug() << "I can't fuck myself!";
+                qDebug() << "Ignoring my own broadcast";
                 return;
             }
 
@@ -91,18 +95,21 @@ void BroadcastTcpLinkProvider::newUdpConnection()
                 links.remove(id);
             }
 
-            QTcpSocket* socket = new QTcpSocket(this);
+            int tcpPort = np->get<int>("tcpPort",port);
 
-            qDebug() << "Received Udp presentation from" << sender << "asking for a tcp connection...";
+            qDebug() << "Received Udp presentation from" << sender << "asking for a tcp connection on port " << tcpPort;
 
-            receivedIdentityPackages[socket] = np;
+            QTcpSocket* socket = new QTcpSocket(this);
+            receivedIdentityPackages[socket].np = np;
+            receivedIdentityPackages[socket].sender = sender;
             connect(socket, SIGNAL(connected()), this, SLOT(connected()));
             connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(connectError()));
-            socket->connectToHost(sender, port);
-
+            socket->connectToHost(sender, tcpPort);
 
         } else {
+
             delete np;
+
         }
     }
 
@@ -116,7 +123,10 @@ void BroadcastTcpLinkProvider::connectError()
     disconnect(socket, SIGNAL(connected()), this, SLOT(connected()));
 
     qDebug() << "Fallback (1), try reverse connection";
-    onNetworkChange(QNetworkSession::Connected);
+    NetworkPackage np("");
+    NetworkPackage::createIdentityPackage(&np);
+    np.set("tcpPort",tcpPort);
+    QUdpSocket().writeDatagram(np.serialize(), receivedIdentityPackages[socket].sender, port);
 
 }
 
@@ -128,7 +138,7 @@ void BroadcastTcpLinkProvider::connected()
     disconnect(socket, SIGNAL(connected()), this, SLOT(connected()));
     disconnect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(connectError()));
 
-    NetworkPackage* np = receivedIdentityPackages[socket];
+    NetworkPackage* np = receivedIdentityPackages[socket].np;
     const QString& id = np->get<QString>("deviceId");
     qDebug() << "Connected" << socket->isWritable();
 
@@ -143,13 +153,14 @@ void BroadcastTcpLinkProvider::connected()
 
     bool success = dl->sendPackage(np2);
 
+    //TODO: Use reverse connection too to preffer connecting a unstable device (a phone) to a stable device (a computer)
     if (success) {
         qDebug() << "Handshaking done (i'm the existing device)";
         emit onNewDeviceLink(*np, dl);
     } else {
         //I think this will never happen
         qDebug() << "Fallback (2), try reverse connection";
-        onNetworkChange(QNetworkSession::Connected);
+        QUdpSocket().writeDatagram(np2.serialize(), receivedIdentityPackages[socket].sender, port);
         delete dl;
     }
 
diff --git a/daemon/linkproviders/broadcasttcplinkprovider.h b/daemon/linkproviders/broadcasttcplinkprovider.h
index 437a2b7..b72b7a2 100644
--- a/daemon/linkproviders/broadcasttcplinkprovider.h
+++ b/daemon/linkproviders/broadcasttcplinkprovider.h
@@ -58,9 +58,15 @@ private:
     QTcpServer* mTcpServer;
     QUdpSocket* mUdpServer;
     const static quint16 port = 1714;
+    quint16 tcpPort;
 
     QMap<QString, DeviceLink*> links;
-    QMap<QTcpSocket*, NetworkPackage*> receivedIdentityPackages;
+
+    struct PendingConnect {
+        NetworkPackage* np;
+        QHostAddress sender;
+    };
+    QMap<QTcpSocket*, PendingConnect> receivedIdentityPackages;
 
 };
 

-- 
kdeconnect packaging



More information about the pkg-kde-commits mailing list