[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