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

Maximiliano Curia maxy at moszumanska.debian.org
Fri Oct 14 14:29:24 UTC 2016


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

The following commit has been merged in the master branch:
commit 03926cc3bfce04b3acc7a582abd8d2264f21cff2
Author: Albert Vaca <albertvaka at gmail.com>
Date:   Wed Dec 2 11:04:35 2015 -0800

    WIPx4
---
 core/backends/devicelink.h                  |  4 +--
 core/backends/lan/landevicelink.cpp         | 45 +++++++++++++++++------------
 core/backends/lan/landevicelink.h           |  5 ++--
 core/backends/lan/lanlinkprovider.cpp       | 29 ++++++++++++-------
 core/backends/lan/lanlinkprovider.h         |  3 +-
 core/backends/lan/lanpairinghandler.cpp     |  8 +++--
 core/backends/lan/server.cpp                |  2 ++
 core/backends/loopback/loopbackdevicelink.h |  4 +--
 core/daemon.h                               |  2 +-
 core/device.cpp                             | 21 ++++++--------
 daemon/kdeconnectd.cpp                      |  2 +-
 11 files changed, 73 insertions(+), 52 deletions(-)

diff --git a/core/backends/devicelink.h b/core/backends/devicelink.h
index 1de4185..b9de66a 100644
--- a/core/backends/devicelink.h
+++ b/core/backends/devicelink.h
@@ -52,8 +52,8 @@ public:
     virtual bool sendPackageEncrypted(NetworkPackage& np) = 0;
 
     //user actions
-    virtual void requestPairing() = 0;
-    virtual void unpair() = 0;
+    virtual void userRequestsPair() = 0;
+    virtual void userRequestsUnpair() = 0;
 
     ConnectionStarted connectionSource() const { return mConnectionSource; }
 
diff --git a/core/backends/lan/landevicelink.cpp b/core/backends/lan/landevicelink.cpp
index 2d3470d..44f2817 100644
--- a/core/backends/lan/landevicelink.cpp
+++ b/core/backends/lan/landevicelink.cpp
@@ -35,7 +35,7 @@ LanDeviceLink::LanDeviceLink(const QString& deviceId, LinkProvider* parent, QSsl
             this, SLOT(dataReceived()));
 
     //We take ownership of the socket.
-    //When the link provider distroys us,
+    //When the link provider destroys us,
     //the socket (and the reader) will be
     //destroyed as well
     connect(socket, SIGNAL(disconnected()),
@@ -57,7 +57,7 @@ bool LanDeviceLink::sendPackageEncrypted(NetworkPackage& np)
 
     int written = mSocketLineReader->write(np.serialize());
 
-    //TODO: Actually detect if a package is received or not, now we keep TCP
+    //Actually we can't detect if a package is received or not. We keep TCP
     //"ESTABLISHED" connections that look legit (return true when we use them),
     //but that are actually broken (until keepalive detects that they are down).
     return (written != -1);
@@ -86,33 +86,36 @@ UploadJob* LanDeviceLink::sendPayload(NetworkPackage& np)
 
 void LanDeviceLink::dataReceived()
 {
-
     if (mSocketLineReader->bytesAvailable() == 0) return;
+    //qCDebug(KDECONNECT_CORE) << "LanDeviceLink dataReceived" << package;
 
-    const QByteArray package = mSocketLineReader->readLine();
+    const QByteArray serializedPackage = mSocketLineReader->readLine();
+    NetworkPackage package(QString::null);
+    NetworkPackage::unserialize(serializedPackage, &package);
 
-    //qCDebug(KDECONNECT_CORE) << "LanDeviceLink dataReceived" << package;
+    if (package.type() == PACKAGE_TYPE_PAIR) {
+        //TODO: Handle pair/unpair requests and forward them (to the pairing handler?)
+        //qobject_cast<LanLinkProvider*>(provider())->incomingPairRequest(deviceId());
+    }
 
-    NetworkPackage unserialized(QString::null);
-    NetworkPackage::unserialize(package, &unserialized);
-    if (unserialized.isEncrypted()) {
-        //mPrivateKey should always be set when device link is added to device, no null-checking done here
-        // TODO : Check this with old device since package through ssl in unencrypted
-        unserialized.decrypt(mPrivateKey, &unserialized);
+    if (!package.isEncrypted()) {
+        qWarning() << "Received plain-text package from paired link, ignoring!";
     }
 
-    if (unserialized.hasPayloadTransferInfo()) {
+    package.decrypt(mPrivateKey, &package);
+
+    if (package.hasPayloadTransferInfo()) {
         //qCDebug(KDECONNECT_CORE) << "HasPayloadTransferInfo";
-        QVariantMap transferInfo = unserialized.payloadTransferInfo();
+        QVariantMap transferInfo = package.payloadTransferInfo();
         //FIXME: The next two lines shouldn't be needed! Why are they here?
         transferInfo.insert("useSsl", true);
         transferInfo.insert("deviceId", deviceId());
         DownloadJob* job = new DownloadJob(mSocketLineReader->peerAddress(), transferInfo);
         job->start();
-        unserialized.setPayload(job->getPayload(), unserialized.payloadSize());
+        package.setPayload(job->getPayload(), package.payloadSize());
     }
 
-    Q_EMIT receivedPackage(unserialized);
+    Q_EMIT receivedPackage(package);
 
     if (mSocketLineReader->bytesAvailable() > 0) {
         QMetaObject::invokeMethod(this, "dataReceived", Qt::QueuedConnection);
@@ -120,12 +123,18 @@ void LanDeviceLink::dataReceived()
 
 }
 
-void LanDeviceLink::requestPairing()
+void LanDeviceLink::userRequestsPair()
 {
-    qobject_cast<LanLinkProvider*>(provider())->requestPairing(deviceId());
+    qobject_cast<LanLinkProvider*>(provider())->userRequestsPair(deviceId());
 }
 
-void LanDeviceLink::unpair()
+void LanDeviceLink::userRequestsUnpair()
 {
     setPairStatus(NotPaired);
 }
+
+void LanDeviceLink::storeTrustedDeviceInformation()
+{
+    Q_ASSERT(!m_certificate.isNull());
+    Q_ASSERT(!m_publicKey.isNull());
+}
diff --git a/core/backends/lan/landevicelink.h b/core/backends/lan/landevicelink.h
index 5bc7a8f..48c379e 100644
--- a/core/backends/lan/landevicelink.h
+++ b/core/backends/lan/landevicelink.h
@@ -43,9 +43,10 @@ public:
     bool sendPackageEncrypted(NetworkPackage& np) override;
     UploadJob* sendPayload(NetworkPackage& np);
 
-    virtual void unpair() override;
+    virtual void userRequestsPair() override;
+    virtual void userRequestsUnpair() override;
 
-    void requestPairing();
+    void storeTrustedDeviceInformation();
 
 private Q_SLOTS:
     void dataReceived();
diff --git a/core/backends/lan/lanlinkprovider.cpp b/core/backends/lan/lanlinkprovider.cpp
index 2ec250c..118ed95 100644
--- a/core/backends/lan/lanlinkprovider.cpp
+++ b/core/backends/lan/lanlinkprovider.cpp
@@ -78,6 +78,8 @@ void LanLinkProvider::onStart()
     bool success = mUdpServer->bind(bindAddress, port, QUdpSocket::ShareAddress);
     Q_ASSERT(success);
 
+    qDebug() << "onStart";
+
     mTcpPort = port;
     while (!mServer->listen(bindAddress, mTcpPort)) {
         mTcpPort++;
@@ -93,6 +95,7 @@ void LanLinkProvider::onStart()
 
 void LanLinkProvider::onStop()
 {
+    qDebug() << "onStop";
     mUdpServer->close();
     mServer->close();
 }
@@ -129,7 +132,9 @@ void LanLinkProvider::newUdpConnection() //udpBroadcastReceived
         NetworkPackage* receivedPackage = new NetworkPackage("");
         bool success = NetworkPackage::unserialize(datagram, receivedPackage);
 
-        //qCDebug(KDECONNECT_CORE) << "Datagram " << datagram.data() ;
+        //qDebug() << "udp connection from " << receivedPackage->;
+
+        qCDebug(KDECONNECT_CORE) << "Datagram " << datagram.data() ;
 
         if (!success || receivedPackage->type() != PACKAGE_TYPE_IDENTITY) {
             delete receivedPackage;
@@ -442,24 +447,28 @@ void LanLinkProvider::addLink(const QString& deviceId, QSslSocket* socket, Netwo
         mLinks.erase(oldLinkIterator);
     }
 
-    mLinks[deviceLink->deviceId()] = deviceLink;
-    LanPairingHandler* ph = mPairingHandlers.value(deviceLink->deviceId());
-    if (ph) {
-        ph->setDeviceLink(deviceLink);
-    }
-
+    mLinks[deviceId] = deviceLink;
+    refreshPairingHandler(deviceId);
     Q_EMIT onConnectionReceived(*receivedPackage, deviceLink);
 
 }
 
-void LanLinkProvider::requestPairing(const QString& deviceId)
+void LanLinkProvider::userRequestsPair(const QString& deviceId)
 {
     LanPairingHandler* ph = mPairingHandlers.value(deviceId);
     if (!ph) {
-        new LanPairingHandler(deviceId);
-        ph->setDeviceLink(mLinks[deviceId]);
+        ph = new LanPairingHandler(deviceId);
         mPairingHandlers[deviceId] = ph;
+        refreshPairingHandler(deviceId);
     }
 
     ph->requestPairing();
 }
+
+void LanLinkProvider::refreshPairingHandler(const QString& deviceId) {
+    LanPairingHandler* ph = mPairingHandlers.value(deviceId);
+    if (ph) {
+        ph->setDeviceLink(mLinks[deviceId]);
+
+    }
+}
diff --git a/core/backends/lan/lanlinkprovider.h b/core/backends/lan/lanlinkprovider.h
index 28149e4..aff0d19 100644
--- a/core/backends/lan/lanlinkprovider.h
+++ b/core/backends/lan/lanlinkprovider.h
@@ -44,7 +44,7 @@ public:
     QString name() override { return "LanLinkProvider"; }
     int priority() override { return PRIORITY_HIGH; }
 
-    void requestPairing(const QString &deviceId);
+    void userRequestsPair(const QString &deviceId);
 
 public Q_SLOTS:
     virtual void onNetworkChange() override;
@@ -65,6 +65,7 @@ private:
     static void configureSocket(QSslSocket* socket);
     void onNetworkConfigurationChanged(const QNetworkConfiguration &config);
     void addLink(const QString& deviceId, QSslSocket* socket, NetworkPackage* receivedPackage, DeviceLink::ConnectionStarted connectionOrigin);
+    void refreshPairingHandler(const QString &deviceId);
 
     Server* mServer;
     QUdpSocket* mUdpServer;
diff --git a/core/backends/lan/lanpairinghandler.cpp b/core/backends/lan/lanpairinghandler.cpp
index d28456c..d531c4e 100644
--- a/core/backends/lan/lanpairinghandler.cpp
+++ b/core/backends/lan/lanpairinghandler.cpp
@@ -97,7 +97,7 @@ void LanPairingHandler::packageReceived(const NetworkPackage& np)
                 return;
             }
 
-            Daemon::instance()->requestPairing(this);
+            Daemon::instance()->askPairingConfirmation(this);
             setInternalPairStatus(RequestedByPeer);
         }
 
@@ -117,10 +117,10 @@ bool LanPairingHandler::requestPairing()
 {
     switch (m_status) {
         case Paired:
-            Q_EMIT pairingError(i18n(deviceLink()->name().append(" : Already paired").toLatin1().data()));
+            Q_EMIT pairingError(i18n("%1: Already paired", deviceLink()->name()));
             return false;
         case Requested:
-            Q_EMIT pairingError(i18n(deviceLink()->name().append(" : Pairing already requested for this device").toLatin1().data()));
+            Q_EMIT pairingError(i18n("%1: Pairing already requested for this device", deviceLink()->name()));
             return false;
         case RequestedByPeer:
             qCDebug(KDECONNECT_CORE) << deviceLink()->name() << " : Pairing already started by the other end, accepting their request.";
@@ -189,4 +189,6 @@ void LanPairingHandler::setInternalPairStatus(LanPairingHandler::InternalPairSta
     } else {
         deviceLink()->setPairStatus(DeviceLink::NotPaired);
     }
+    qobject_cast<LanDeviceLink*>(deviceLink())->storeTrustedDeviceInformation();
+    //TODO: Tell link to store certificate and key
 }
diff --git a/core/backends/lan/server.cpp b/core/backends/lan/server.cpp
index 4a80191..5992f89 100644
--- a/core/backends/lan/server.cpp
+++ b/core/backends/lan/server.cpp
@@ -34,6 +34,7 @@ Server::Server(QObject * parent)
 }
 
 void Server::incomingConnection(qintptr socketDescriptor) {
+    qDebug() << "incomingConnection";
     QSslSocket *serverSocket = new QSslSocket(parent());
     if (serverSocket->setSocketDescriptor(socketDescriptor)) {
         pendingConnections.append(serverSocket);
@@ -45,6 +46,7 @@ void Server::incomingConnection(qintptr socketDescriptor) {
 }
 
 QSslSocket* Server::nextPendingConnection() {
+    qDebug() << "nextPendingConnection (emtpy:" << pendingConnections.isEmpty() << ")";
     if (pendingConnections.isEmpty()) {
         return Q_NULLPTR;
     } else {
diff --git a/core/backends/loopback/loopbackdevicelink.h b/core/backends/loopback/loopbackdevicelink.h
index b1e4e83..3bba578 100644
--- a/core/backends/loopback/loopbackdevicelink.h
+++ b/core/backends/loopback/loopbackdevicelink.h
@@ -36,8 +36,8 @@ public:
     virtual bool sendPackage(NetworkPackage& np) override;
     virtual bool sendPackageEncrypted(NetworkPackage& np) override;
 
-    virtual void requestPairing() override {}
-    virtual void unpair() override {}
+    virtual void userRequestsPair() override { setPairStatus(Paired); }
+    virtual void userRequestsUnpair() override { setPairStatus(NotPaired); }
 };
 
 #endif
diff --git a/core/daemon.h b/core/daemon.h
index 908c1e3..6cc43af 100644
--- a/core/daemon.h
+++ b/core/daemon.h
@@ -53,7 +53,7 @@ public:
 
     QList<Device*> devicesList() const;
 
-    virtual void requestPairing(PairingHandler *d) = 0;
+    virtual void askPairingConfirmation(PairingHandler *d) = 0;
     virtual void reportError(const QString &title, const QString &description) = 0;
     virtual QNetworkAccessManager* networkAccessManager();
 
diff --git a/core/device.cpp b/core/device.cpp
index 95aed48..b99ccef 100644
--- a/core/device.cpp
+++ b/core/device.cpp
@@ -195,14 +195,14 @@ void Device::requestPair()
     }
 
     Q_FOREACH(DeviceLink* dl, m_deviceLinks) {
-        dl->requestPairing();
+        dl->userRequestsPair();
     }
 }
 
 void Device::unpair()
 {
     Q_FOREACH(DeviceLink* dl, m_deviceLinks) {
-        dl->unpair();
+        dl->userRequestsUnpair();
     }
     KdeConnectConfig::instance()->removeTrustedDevice(id());
 }
@@ -214,7 +214,7 @@ void Device::pairStatusChanged(DeviceLink::PairStatus status)
 
         Q_FOREACH(DeviceLink* dl, m_deviceLinks) {
             if (dl != sender()) {
-                dl->unpair();
+                dl->setPairStatus(DeviceLink::NotPaired);
             }
         }
     } else {
@@ -294,15 +294,12 @@ void Device::removeLink(DeviceLink* link)
 
 bool Device::sendPackage(NetworkPackage& np)
 {
-    if (np.type() != PACKAGE_TYPE_PAIR && isTrusted()) {
-        Q_FOREACH(DeviceLink* dl, m_deviceLinks) {
-            if (dl->sendPackageEncrypted(np)) return true;
-        }
-    } else {
-        //Maybe we could block here any package that is not an identity or a pairing package to prevent sending non encrypted data
-        Q_FOREACH(DeviceLink* dl, m_deviceLinks) {
-            if (dl->sendPackage(np)) return true;
-        }
+    Q_ASSERT(np.type() != PACKAGE_TYPE_PAIR);
+    Q_ASSERT(isTrusted());
+
+    //Maybe we could block here any package that is not an identity or a pairing package to prevent sending non encrypted data
+    Q_FOREACH(DeviceLink* dl, m_deviceLinks) {
+        if (dl->sendPackage(np)) return true;
     }
 
     return false;
diff --git a/daemon/kdeconnectd.cpp b/daemon/kdeconnectd.cpp
index d612c40..6dc939b 100644
--- a/daemon/kdeconnectd.cpp
+++ b/daemon/kdeconnectd.cpp
@@ -89,7 +89,7 @@ public:
         , m_nam(Q_NULLPTR)
     {}
 
-    void requestPairing(PairingHandler* d) Q_DECL_OVERRIDE
+    void askPairingConfirmation(PairingHandler* d) Q_DECL_OVERRIDE
     {
         KNotification* notification = new KNotification("pairingRequest");
         notification->setIconName(QStringLiteral("dialog-information"));

-- 
kdeconnect packaging



More information about the pkg-kde-commits mailing list