[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=b6b5257

The following commit has been merged in the master branch:
commit b6b5257ba4fe0f3473fd10a5938a5b432b5eb64a
Author: Vineet Garg <grg.vineet at gmail.com>
Date:   Mon Jul 6 03:19:58 2015 +0530

    Added ssl support in download job
---
 core/backends/lan/downloadjob.cpp   | 24 +++++++++++++++++++++---
 core/backends/lan/downloadjob.h     |  4 +++-
 core/backends/lan/landevicelink.cpp | 34 +++++++++++++++++-----------------
 3 files changed, 41 insertions(+), 21 deletions(-)

diff --git a/core/backends/lan/downloadjob.cpp b/core/backends/lan/downloadjob.cpp
index bba2e98..96b0b0b 100644
--- a/core/backends/lan/downloadjob.cpp
+++ b/core/backends/lan/downloadjob.cpp
@@ -18,22 +18,40 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <kdeconnectconfig.h>
 #include "downloadjob.h"
 
 DownloadJob::DownloadJob(QHostAddress address, QVariantMap transferInfo): KJob()
 {
     mAddress = address;
     mPort = transferInfo["port"].toInt();
-    mSocket = QSharedPointer<QTcpSocket>(new QTcpSocket);
+    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()));
 }
 
 void DownloadJob::start()
 {
     //kDebug(kdeconnect_kded()) << "DownloadJob Start";
-    mSocket->connectToHost(mAddress, mPort, QIODevice::ReadOnly);
+    if (useSsl) {
+        qDebug() << "Connecting to host encrypted";
+        // Cannot use read only, might be due to ssl handshake
+        mSocket->connectToHostEncrypted(mAddress.toString(), mPort, QIODevice::ReadWrite);
+        mSocket->waitForEncrypted();
+    } else {
+        qDebug() << "Connectiong to host unencrypted";
+        mSocket->connectToHost(mAddress, mPort, QIODevice::ReadOnly);
+        mSocket->waitForConnected();
+    }
     connect(mSocket.data(), SIGNAL(disconnected()),
             this, SLOT(disconnected()));
-    //TODO: Implement payload encryption somehow (create an intermediate iodevice to encrypt the payload here?)
 }
 
 void DownloadJob::disconnected()
diff --git a/core/backends/lan/downloadjob.h b/core/backends/lan/downloadjob.h
index eeeab07..549a19e 100644
--- a/core/backends/lan/downloadjob.h
+++ b/core/backends/lan/downloadjob.h
@@ -28,6 +28,7 @@
 #include <QHostAddress>
 #include <QTcpSocket>
 #include <QSharedPointer>
+#include <QSslSocket>
 
 class DownloadJob
     : public KJob
@@ -39,9 +40,10 @@ public:
     QSharedPointer<QIODevice> getPayload();
 
 private:
+    bool useSsl;
     QHostAddress mAddress;
     qint16 mPort;
-    QSharedPointer<QTcpSocket> mSocket;
+    QSharedPointer<QSslSocket> mSocket;
 
 
 private Q_SLOTS:
diff --git a/core/backends/lan/landevicelink.cpp b/core/backends/lan/landevicelink.cpp
index f145382..a1f0544 100644
--- a/core/backends/lan/landevicelink.cpp
+++ b/core/backends/lan/landevicelink.cpp
@@ -109,27 +109,27 @@ void LanDeviceLink::dataReceived()
     NetworkPackage::unserialize(package, &unserialized);
     if (unserialized.isEncrypted()) {
         //mPrivateKey should always be set when device link is added to device, no null-checking done here
-        NetworkPackage decrypted(QString::null);
-        unserialized.decrypt(mPrivateKey, &decrypted);
-
-        if (decrypted.hasPayloadTransferInfo()) {
-            qCDebug(KDECONNECT_CORE) << "HasPayloadTransferInfo";
-            DownloadJob* job = new DownloadJob(mSocketLineReader->peerAddress(), decrypted.payloadTransferInfo());
-            job->start();
-            decrypted.setPayload(job->getPayload(), decrypted.payloadSize());
-        }
-
-        Q_EMIT receivedPackage(decrypted);
+        // TODO : Check this with old device since package thorough ssl in unencrypted
+        unserialized.decrypt(mPrivateKey, &unserialized);
+        qDebug() << "Serialized " << unserialized.serialize();
+    }
 
-    } else {
-        if (unserialized.hasPayloadTransferInfo()) {
-            qWarning() << "Ignoring unencrypted payload";
+    if (unserialized.hasPayloadTransferInfo()) {
+//        qCDebug(KDECONNECT_CORE) << "HasPayloadTransferInfo";
+        // FIXME : Directly setting these values to payloadTransferInfo now working
+        QVariantMap sslInfo = unserialized.payloadTransferInfo();
+        if (onSsl) {
+            sslInfo.insert("useSsl", true);
+            sslInfo.insert("deviceId", deviceId());
         }
-
-        Q_EMIT receivedPackage(unserialized);
-
+        DownloadJob* job = new DownloadJob(mSocketLineReader->peerAddress(), sslInfo);
+        job->start();
+        qCDebug(KDECONNECT_CORE) << "Checking payload status " << job->getPayload().isNull();
+        unserialized.setPayload(job->getPayload(), unserialized.payloadSize());
     }
 
+    Q_EMIT receivedPackage(unserialized);
+
     if (mSocketLineReader->bytesAvailable() > 0) {
         QMetaObject::invokeMethod(this, "dataReceived", Qt::QueuedConnection);
     }

-- 
kdeconnect packaging



More information about the pkg-kde-commits mailing list