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

Maximiliano Curia maxy at moszumanska.debian.org
Fri Oct 14 14:28:44 UTC 2016


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

The following commit has been merged in the master branch:
commit 8b0f06e484718fbd590f5c8f97a788dbbfd4b4c3
Author: Vineet Garg <grg.vineet at gmail.com>
Date:   Wed Jul 8 00:22:10 2015 +0530

    Code cleanup, fixed socket deletelater issue
---
 core/backends/lan/downloadjob.cpp     | 19 +++++-----
 core/backends/lan/landevicelink.cpp   | 40 ++++++++++-----------
 core/backends/lan/landevicelink.h     |  2 ++
 core/backends/lan/lanlinkprovider.cpp | 65 ++++++++++++++++-------------------
 core/backends/lan/lanlinkprovider.h   |  2 +-
 core/backends/lan/server.cpp          | 10 ------
 core/backends/lan/server.h            |  3 --
 core/backends/lan/uploadjob.cpp       | 10 +++---
 core/backends/lan/uploadjob.h         |  2 +-
 9 files changed, 68 insertions(+), 85 deletions(-)

diff --git a/core/backends/lan/downloadjob.cpp b/core/backends/lan/downloadjob.cpp
index 96b0b0b..bef28e0 100644
--- a/core/backends/lan/downloadjob.cpp
+++ b/core/backends/lan/downloadjob.cpp
@@ -28,13 +28,16 @@ DownloadJob::DownloadJob(QHostAddress address, QVariantMap transferInfo): KJob()
     mSocket = QSharedPointer<QSslSocket>(new QSslSocket);
     useSsl = transferInfo.value("useSsl", false).toBool();
 
-    // Setting socket property, but useful only when payload is sent using ssl
-    mSocket->setLocalCertificate(KdeConnectConfig::instance()->certificate());
-    mSocket->setPrivateKey(KdeConnectConfig::instance()->privateKeyPath());
-    mSocket->setProtocol(QSsl::TlsV1_2);
-    mSocket->setPeerVerifyName(transferInfo.value("deviceId").toString());
-    mSocket->setPeerVerifyMode(QSslSocket::VerifyPeer);
-    mSocket->addCaCertificate(QSslCertificate(KdeConnectConfig::instance()->getTrustedDevice(transferInfo.value("deviceId").toString()).certificate.toLatin1()));
+    // Setting ssl related properties for socket when using ssl
+    if (useSsl) {
+        mSocket->setLocalCertificate(KdeConnectConfig::instance()->certificate());
+        mSocket->setPrivateKey(KdeConnectConfig::instance()->privateKeyPath());
+        mSocket->setProtocol(QSsl::TlsV1_2);
+        mSocket->setPeerVerifyName(transferInfo.value("deviceId").toString());
+        mSocket->setPeerVerifyMode(QSslSocket::VerifyPeer);
+        mSocket->addCaCertificate(QSslCertificate(KdeConnectConfig::instance()->getTrustedDevice(
+                transferInfo.value("deviceId").toString()).certificate.toLatin1()));
+    }
 }
 
 void DownloadJob::start()
@@ -42,7 +45,7 @@ void DownloadJob::start()
     //kDebug(kdeconnect_kded()) << "DownloadJob Start";
     if (useSsl) {
         qDebug() << "Connecting to host encrypted";
-        // Cannot use read only, might be due to ssl handshake
+        // Cannot use read only, might be due to ssl handshake, getting QIODevice::ReadOnly error and no connection
         mSocket->connectToHostEncrypted(mAddress.toString(), mPort, QIODevice::ReadWrite);
         mSocket->waitForEncrypted();
     } else {
diff --git a/core/backends/lan/landevicelink.cpp b/core/backends/lan/landevicelink.cpp
index a1f0544..5a6884d 100644
--- a/core/backends/lan/landevicelink.cpp
+++ b/core/backends/lan/landevicelink.cpp
@@ -57,14 +57,7 @@ void LanDeviceLink::setOnSsl(bool value) {
 bool LanDeviceLink::sendPackageEncrypted(QCA::PublicKey& key, NetworkPackage& np)
 {
     if (np.hasPayload()) {
-        QVariantMap sslInfo;
-        if (onSsl) {
-            sslInfo.insert("useSsl", true);
-            sslInfo.insert("deviceId", deviceId());
-        }
-        UploadJob* job = new UploadJob(np.payload(), sslInfo);
-        job->start();
-        np.setPayloadTransferInfo(job->getTransferInfo());
+        np.setPayloadTransferInfo(sendPayload(np)->getTransferInfo());
     }
 
     if (!onSsl) {
@@ -82,20 +75,25 @@ bool LanDeviceLink::sendPackageEncrypted(QCA::PublicKey& key, NetworkPackage& np
 bool LanDeviceLink::sendPackage(NetworkPackage& np)
 {
     if (np.hasPayload()) {
-        QVariantMap sslInfo;
-        if (onSsl) {
-            sslInfo.insert("useSsl", true);
-            sslInfo.insert("deviceId", deviceId());
-        }
-        UploadJob* job = new UploadJob(np.payload(), sslInfo);
-        job->start();
-        np.setPayloadTransferInfo(job->getTransferInfo());
+        np.setPayloadTransferInfo(sendPayload(np)->getTransferInfo());
     }
 
     int written = mSocketLineReader->write(np.serialize());
     return (written != -1);
 }
 
+UploadJob* LanDeviceLink::sendPayload(NetworkPackage& np)
+{
+    QVariantMap transferInfo;
+    if (onSsl) {
+        transferInfo.insert("useSsl", true);
+        transferInfo.insert("deviceId", deviceId());
+    }
+    UploadJob* job = new UploadJob(np.payload(), transferInfo);
+    job->start();
+    return job;
+}
+
 void LanDeviceLink::dataReceived()
 {
 
@@ -116,15 +114,13 @@ void LanDeviceLink::dataReceived()
 
     if (unserialized.hasPayloadTransferInfo()) {
 //        qCDebug(KDECONNECT_CORE) << "HasPayloadTransferInfo";
-        // FIXME : Directly setting these values to payloadTransferInfo now working
-        QVariantMap sslInfo = unserialized.payloadTransferInfo();
+        QVariantMap transferInfo = unserialized.payloadTransferInfo();
         if (onSsl) {
-            sslInfo.insert("useSsl", true);
-            sslInfo.insert("deviceId", deviceId());
+            transferInfo.insert("useSsl", true);
+            transferInfo.insert("deviceId", deviceId());
         }
-        DownloadJob* job = new DownloadJob(mSocketLineReader->peerAddress(), sslInfo);
+        DownloadJob* job = new DownloadJob(mSocketLineReader->peerAddress(), transferInfo);
         job->start();
-        qCDebug(KDECONNECT_CORE) << "Checking payload status " << job->getPayload().isNull();
         unserialized.setPayload(job->getPayload(), unserialized.payloadSize());
     }
 
diff --git a/core/backends/lan/landevicelink.h b/core/backends/lan/landevicelink.h
index ed40c47..d4507ec 100644
--- a/core/backends/lan/landevicelink.h
+++ b/core/backends/lan/landevicelink.h
@@ -26,6 +26,7 @@
 #include <QSslSocket>
 
 #include "../devicelink.h"
+#include "uploadjob.h"
 
 class SocketLineReader;
 
@@ -40,6 +41,7 @@ public:
     void setOnSsl(bool value);
     bool sendPackage(NetworkPackage& np);
     bool sendPackageEncrypted(QCA::PublicKey& key, NetworkPackage& np);
+    UploadJob* sendPayload(NetworkPackage&);
 
 private Q_SLOTS:
     void dataReceived();
diff --git a/core/backends/lan/lanlinkprovider.cpp b/core/backends/lan/lanlinkprovider.cpp
index 6f0b33e..3ccf680 100644
--- a/core/backends/lan/lanlinkprovider.cpp
+++ b/core/backends/lan/lanlinkprovider.cpp
@@ -121,7 +121,7 @@ void LanLinkProvider::newUdpConnection()
         NetworkPackage* receivedPackage = new NetworkPackage("");
         bool success = NetworkPackage::unserialize(datagram, receivedPackage);
 
-        qCDebug(KDECONNECT_CORE) << "Datagram " << datagram.data() ;
+        //qCDebug(KDECONNECT_CORE) << "Datagram " << datagram.data() ;
 
         if (!success || receivedPackage->type() != PACKAGE_TYPE_IDENTITY) {
             delete receivedPackage;
@@ -182,6 +182,9 @@ void LanLinkProvider::connected()
 
     configureSocket(socket);
 
+    // If socket disconnects due to any reason after connection, link on ssl faliure
+    connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater()));
+
     NetworkPackage* receivedPackage = receivedIdentityPackages[socket].np;
     const QString& deviceId = receivedPackage->get<QString>("deviceId");
     //qCDebug(KDECONNECT_CORE) << "Connected" << socket->isWritable();
@@ -221,12 +224,9 @@ void LanLinkProvider::connected()
             connect(socket, SIGNAL(encrypted()), this, SLOT(encrypted()));
 
             socket->startServerEncryption();
-            return; // Return statement prevents from deleting received pacakage, needed in slot "encrypted"
+            return; // Return statement prevents from deleting received package, needed in slot "encrypted"
         } else {
-            LanDeviceLink* deviceLink = new LanDeviceLink(deviceId, this, socket);
-            connect(deviceLink, SIGNAL(destroyed(QObject*)),
-                    this, SLOT(deviceLinkDestroyed(QObject*)));
-            addLink(deviceLink, receivedPackage);
+            addLink(deviceId, socket, receivedPackage);
         }
 
     } else {
@@ -246,6 +246,7 @@ void LanLinkProvider::encrypted() {
     qCDebug(KDECONNECT_CORE) << "Socket encrypted";
     
     QSslSocket* socket = qobject_cast<QSslSocket*>(sender());
+    if (!socket) return;
     disconnect(socket, SIGNAL(encrypted()), this, SLOT(encrypted()));
     disconnect(socket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(sslErrors(QList<QSslError>)));
 
@@ -255,9 +256,7 @@ void LanLinkProvider::encrypted() {
 
     receivedPackage->set("certificate", socket->peerCertificate().toPem());
 
-    LanDeviceLink* deviceLink = new LanDeviceLink(deviceId, this, socket);
-    deviceLink->setOnSsl(true);
-    addLink(deviceLink, receivedPackage);
+    addLink(deviceId, socket, receivedPackage);
 
     // Copied from connected slot, now delete received package
     delete receivedPackage;
@@ -267,24 +266,19 @@ void LanLinkProvider::encrypted() {
 
 void LanLinkProvider::sslErrors(QList<QSslError> errors)
 {
-    // This should be called when using verifyPeer, as Host name would not match
-    // Ignore that error, if there is any other, close socket and disconnect connection
-    // Unpair too ?
-
-    // TODO : If certificate mismatch, unpair it
-    // TODO : Socket is closed itself when there are errors in ssl, to check if it is deleted of not
-
     QSslSocket* socket = qobject_cast<QSslSocket*>(sender());
+    if (!socket) return;
     disconnect(socket, SIGNAL(encrypted()), this, SLOT(encrypted()));
     disconnect(socket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(sslErrors(QList<QSslError>)));
 
+    foreach(QSslError error, errors) {
+        qCDebug(KDECONNECT_CORE) << "SSL Error :" << error.errorString();
+        //TODO: Check for varius error here
+    }
+
     delete receivedIdentityPackages[socket].np;
     receivedIdentityPackages.remove(socket);
-
-// This delete caused error due to use of delete later slot
-//         delete socket;
-
-
+    // Socket disconnects itself on ssl error and will be deleted by deleteLater slot, no need to delete manually
 }
 
 
@@ -297,7 +291,7 @@ void LanLinkProvider::newConnection(QSslSocket* socket)
     configureSocket(socket);
     //This socket is still managed by us (and child of the QTcpServer), if
     //it disconnects before we manage to pass it to a LanDeviceLink, it's
-    //our responsability to delete it. We do so with this connection.
+    //our responsibility to delete it. We do so with this connection.
 
     connect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater()));
     connect(socket, SIGNAL(readyRead()), this, SLOT(dataReceived()));
@@ -326,11 +320,8 @@ void LanLinkProvider::dataReceived()
     const QString& deviceId = np->get<QString>("deviceId");
     //qCDebug(KDECONNECT_CORE) << "Handshaking done (i'm the new device)";
 
-    //This socket will now be owned by the LanDeviceLink, forget about it
-    disconnect(socket, SIGNAL(readyRead()),
-               this, SLOT(dataReceived()));
-    disconnect(socket, SIGNAL(disconnected()),
-               socket, SLOT(deleteLater()));
+    //This socket will now be owned by the LanDeviceLink or we don't want more data to be received, forget about it
+    disconnect(socket, SIGNAL(readyRead()), this, SLOT(dataReceived()));
 
 
     if (NetworkPackage::ProtocolVersion <= np->get<int>("protocolVersion")) {
@@ -339,7 +330,7 @@ void LanLinkProvider::dataReceived()
 
         bool isDeviceTrusted = KdeConnectConfig::instance()->trustedDevices().contains(deviceId);
 
-        socket->setPeerVerifyName(np->get<QString>("deviceId"));
+        socket->setPeerVerifyName(deviceId);
 
         if (isDeviceTrusted) {
             qDebug() << "Device trusted";
@@ -358,10 +349,7 @@ void LanLinkProvider::dataReceived()
         socket->startClientEncryption();
 
     } else {
-        LanDeviceLink* deviceLink = new LanDeviceLink(deviceId, this, socket);
-        connect(deviceLink, SIGNAL(destroyed(QObject*)),
-                this, SLOT(deviceLinkDestroyed(QObject*)));
-        addLink(deviceLink, np);
+        addLink(deviceId, socket, np);
     }
 
 }
@@ -408,10 +396,17 @@ void LanLinkProvider::configureSocket(QSslSocket* socket)
 
 }
 
-void LanLinkProvider::addLink(LanDeviceLink* deviceLink, NetworkPackage* receivedPackage) {
+void LanLinkProvider::addLink(QString deviceId, QSslSocket* socket, NetworkPackage* receivedPackage) {
 
-    connect(deviceLink, SIGNAL(destroyed(QObject*)),
-            this, SLOT(deviceLinkDestroyed(QObject*)));
+    LanDeviceLink* deviceLink = new LanDeviceLink(deviceId, this, socket);
+    connect(deviceLink, SIGNAL(destroyed(QObject*)), this, SLOT(deviceLinkDestroyed(QObject*)));
+
+    // Socket disconnection will now be handled by LanDeviceLink
+    disconnect(socket, SIGNAL(disconnected()), socket, SLOT(deleteLater()));
+
+    if (socket->isEncrypted()) {
+        deviceLink->setOnSsl(true);
+    }
 
     //We kill any possible link from this same device
     QMap< QString, DeviceLink* >::iterator oldLinkIterator = mLinks.find(deviceLink->deviceId());
diff --git a/core/backends/lan/lanlinkprovider.h b/core/backends/lan/lanlinkprovider.h
index 530a3dd..d5dce06 100644
--- a/core/backends/lan/lanlinkprovider.h
+++ b/core/backends/lan/lanlinkprovider.h
@@ -43,7 +43,7 @@ public:
 
     QString name() { return "LanLinkProvider"; }
     int priority() { return PRIORITY_HIGH; }
-    void addLink(LanDeviceLink* deviceLink, NetworkPackage* receivedPackage);
+    void addLink(QString, QSslSocket*, NetworkPackage*);
 
 public Q_SLOTS:
     virtual void onNetworkChange();
diff --git a/core/backends/lan/server.cpp b/core/backends/lan/server.cpp
index ca6c17f..ea59193 100644
--- a/core/backends/lan/server.cpp
+++ b/core/backends/lan/server.cpp
@@ -34,21 +34,11 @@ Server::Server(QObject * parent)
 }
 
 void Server::incomingConnection(qintptr socketDescriptor) {
-    qDebug() << "Incoming connection";
     QSslSocket *serverSocket = new QSslSocket;
     if (serverSocket->setSocketDescriptor(socketDescriptor)) {
-        qDebug() << "Setting socket descriptor";
-        connect(serverSocket, SIGNAL(disconnected()), this, SLOT(disconnected()));
         Q_EMIT newConnection(serverSocket);
-        qDebug()  << "Signal emiited";
     } else {
-	    qDebug() << "Delete socket";
         delete serverSocket;
     }
 }
 
-
-void Server::disconnected() {
-    QSslSocket* socket = qobject_cast<QSslSocket*>(sender());
-    qDebug() << socket->errorString();
-}
diff --git a/core/backends/lan/server.h b/core/backends/lan/server.h
index 2a1a603..f43534f 100644
--- a/core/backends/lan/server.h
+++ b/core/backends/lan/server.h
@@ -38,9 +38,6 @@ public:
 protected:
     virtual void incomingConnection(qintptr socketDescriptor);
 
-public Q_SLOTS:
-    void disconnected();
-
 Q_SIGNALS:
     void newConnection(QSslSocket*);
 };
diff --git a/core/backends/lan/uploadjob.cpp b/core/backends/lan/uploadjob.cpp
index 6accc7f..a402c25 100644
--- a/core/backends/lan/uploadjob.cpp
+++ b/core/backends/lan/uploadjob.cpp
@@ -25,7 +25,7 @@
 #include "uploadjob.h"
 #include "core_debug.h"
 
-UploadJob::UploadJob(const QSharedPointer<QIODevice>& source, QVariantMap sslInfo): KJob()
+UploadJob::UploadJob(const QSharedPointer<QIODevice>& source, QVariantMap transferInfo): KJob()
 {
     mInput = source;
     mServer = new Server(this);
@@ -33,7 +33,7 @@ UploadJob::UploadJob(const QSharedPointer<QIODevice>& source, QVariantMap sslInf
     mPort = 0;
 
     // We will use this info if link is on ssl, to send encrypted payload
-    this->sslInfo = sslInfo;
+    this->transferInfo = transferInfo;
 
     connect(mInput.data(), SIGNAL(readyRead()), this, SLOT(readyRead()));
     connect(mInput.data(), SIGNAL(aboutToClose()), this, SLOT(aboutToClose()));
@@ -62,12 +62,12 @@ void UploadJob::newConnection(QSslSocket* socket)
 
     mSocket = socket;
 
-    if (sslInfo.value("useSsl", false).toBool()) {
+    if (transferInfo.value("useSsl", false).toBool()) {
         mSocket->setLocalCertificate(KdeConnectConfig::instance()->certificate());
         mSocket->setPrivateKey(KdeConnectConfig::instance()->privateKeyPath());
         mSocket->setProtocol(QSsl::TlsV1_2);
-        mSocket->setPeerVerifyName(sslInfo.value("deviceId").toString());
-        mSocket->addCaCertificate(QSslCertificate(KdeConnectConfig::instance()->getTrustedDevice(sslInfo.value("deviceId").toString()).certificate.toLatin1()));
+        mSocket->setPeerVerifyName(transferInfo.value("deviceId").toString());
+        mSocket->addCaCertificate(QSslCertificate(KdeConnectConfig::instance()->getTrustedDevice(transferInfo.value("deviceId").toString()).certificate.toLatin1()));
         mSocket->startServerEncryption();
         mSocket->waitForEncrypted();
     }
diff --git a/core/backends/lan/uploadjob.h b/core/backends/lan/uploadjob.h
index e7fd833..056e4e2 100644
--- a/core/backends/lan/uploadjob.h
+++ b/core/backends/lan/uploadjob.h
@@ -43,7 +43,7 @@ private:
     Server* mServer;
     QSslSocket* mSocket;
     quint16 mPort;
-    QVariantMap sslInfo;
+    QVariantMap transferInfo;
 
 private Q_SLOTS:
     void readyRead();

-- 
kdeconnect packaging



More information about the pkg-kde-commits mailing list