[SCM] kdeconnect packaging branch, master, updated. debian/0.9g-1-1183-g9d69498
Maximiliano Curia
maxy at moszumanska.debian.org
Fri Oct 14 14:26:59 UTC 2016
Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/kdeconnect.git;a=commitdiff;h=7d4143b
The following commit has been merged in the master branch:
commit 7d4143b944fa3ccd57dc3bea300bcf53e5d7dd15
Author: Albert Vaca <albertvaka at gmail.com>
Date: Sat Sep 14 17:30:12 2013 +0200
First and untested implementation of payload transfer in LAN backend
Encryption not implemented yet for transfers, but should be easy to do
---
kded/backends/lan/CMakeLists.txt | 3 +-
.../lan/downloadjob.cpp} | 29 ++++----
.../lan/{landevicelink.h => downloadjob.h} | 40 +++++------
kded/backends/lan/landevicelink.cpp | 27 +++++++
kded/backends/lan/landevicelink.h | 1 +
kded/backends/lan/uploadjob.cpp | 82 ++++++++++++++++++++++
kded/backends/lan/{landevicelink.h => uploadjob.h} | 41 +++++------
kded/networkpackage.h | 1 +
8 files changed, 169 insertions(+), 55 deletions(-)
diff --git a/kded/backends/lan/CMakeLists.txt b/kded/backends/lan/CMakeLists.txt
index 599675a..5b5cda3 100644
--- a/kded/backends/lan/CMakeLists.txt
+++ b/kded/backends/lan/CMakeLists.txt
@@ -4,7 +4,8 @@ set(kded_kdeconnect_SRCS
backends/lan/lanlinkprovider.cpp
backends/lan/landevicelink.cpp
- #landevicelinktransfer.cpp
+ backends/lan/uploadjob.cpp
+ backends/lan/downloadjob.cpp
PARENT_SCOPE
)
diff --git a/kded/plugins/battery/batterydbusinterface.cpp b/kded/backends/lan/downloadjob.cpp
similarity index 65%
copy from kded/plugins/battery/batterydbusinterface.cpp
copy to kded/backends/lan/downloadjob.cpp
index 4efdd37..3451796 100644
--- a/kded/plugins/battery/batterydbusinterface.cpp
+++ b/kded/backends/lan/downloadjob.cpp
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright 2013 Albert Vaca <albertvaka at gmail.com>
*
* This program is free software; you can redistribute it and/or
@@ -18,26 +18,27 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "batterydbusinterface.h"
+#include "downloadjob.h"
-#include <QDebug>
-
-BatteryDbusInterface::BatteryDbusInterface(QObject *parent)
- : QDBusAbstractAdaptor(parent)
+DownloadJob::DownloadJob(QHostAddress address, QVariantMap transferInfo): KJob()
{
+ mPort = transferInfo["port"].toInt();
+ mSocket = new QTcpSocket(this);
+ mAddress = address;
}
-BatteryDbusInterface::~BatteryDbusInterface()
+void DownloadJob::start()
{
- qDebug() << "Destroying BatteryDbusInterface";
+ mSocket->connectToHost(mAddress, mPort, QIODevice::ReadOnly);
+ connect(mSocket, SIGNAL(disconnected()), this, SLOT(disconnected()));
}
-void BatteryDbusInterface::updateValues(bool isCharging, int currentCharge)
+void DownloadJob::disconnected()
{
- mIsCharging = isCharging;
- mCharge = currentCharge;
-
- Q_EMIT chargingChange();
+ emitResult();
}
-
+QIODevice* DownloadJob::getPayload()
+{
+ return mSocket;
+}
diff --git a/kded/backends/lan/landevicelink.h b/kded/backends/lan/downloadjob.h
similarity index 70%
copy from kded/backends/lan/landevicelink.h
copy to kded/backends/lan/downloadjob.h
index 1f909bc..4cf2879 100644
--- a/kded/backends/lan/landevicelink.h
+++ b/kded/backends/lan/downloadjob.h
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright 2013 Albert Vaca <albertvaka at gmail.com>
*
* This program is free software; you can redistribute it and/or
@@ -18,34 +18,34 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef LANDEVICELINK_H
-#define LANDEVICELINK_H
+#ifndef DOWNLOADJOB_H
+#define DOWNLOADJOB_H
-#include <QObject>
-#include <QString>
-#include <QTcpSocket>
-
-#include "../devicelink.h"
+#include <KJob>
-class AvahiTcpLinkProvider;
+#include <QIODevice>
+#include <QVariantMap>
+#include <QHostAddress>
+#include <QTcpSocket>
-class LanDeviceLink
- : public DeviceLink
+class DownloadJob
+ : public KJob
{
Q_OBJECT
-
public:
- LanDeviceLink(const QString& d, LinkProvider* a, QTcpSocket* socket);
-
- bool sendPackage(NetworkPackage& np);
- bool sendPackageEncrypted(QCA::PublicKey& key, NetworkPackage& np);
-
-private Q_SLOTS:
- void dataReceived();
+ DownloadJob(QHostAddress address, QVariantMap transferInfo);
+ virtual void start();
+ QIODevice* getPayload();
private:
+ QIODevice* mOutput;
QTcpSocket* mSocket;
+ QHostAddress mAddress;
+ qint16 mPort;
+
+private Q_SLOTS:
+ void disconnected();
};
-#endif // UDPDEVICELINK_H
+#endif // UPLOADJOB_H
diff --git a/kded/backends/lan/landevicelink.cpp b/kded/backends/lan/landevicelink.cpp
index 3688d16..ac764d8 100644
--- a/kded/backends/lan/landevicelink.cpp
+++ b/kded/backends/lan/landevicelink.cpp
@@ -26,6 +26,8 @@
#include <netdb.h>
#include "../linkprovider.h"
+#include "uploadjob.h"
+#include "downloadjob.h"
LanDeviceLink::LanDeviceLink(const QString& d, LinkProvider* a, QTcpSocket* socket)
: DeviceLink(d, a)
@@ -53,13 +55,26 @@ LanDeviceLink::LanDeviceLink(const QString& d, LinkProvider* a, QTcpSocket* sock
bool LanDeviceLink::sendPackageEncrypted(QCA::PublicKey& key, NetworkPackage& np)
{
+ if (np.hasPayload()) {
+ UploadJob* job = new UploadJob(np.payload());
+ job->start();
+ np.setPayloadTransferInfo(job->getTransferInfo());
+ }
+
np.encrypt(key);
+
int written = mSocket->write(np.serialize());
return (written != -1);
}
bool LanDeviceLink::sendPackage(NetworkPackage& np)
{
+ if (np.hasPayload()) {
+ UploadJob* job = new UploadJob(np.payload());
+ job->start();
+ np.setPayloadTransferInfo(job->getTransferInfo());
+ }
+
int written = mSocket->write(np.serialize());
return (written != -1);
}
@@ -85,6 +100,13 @@ void LanDeviceLink::dataReceived()
NetworkPackage decrypted(QString::null);
np.decrypt(mPrivateKey, &decrypted);
+
+ if (np.hasPayloadTransferInfo()) {
+ DownloadJob* job = new DownloadJob(mSocket->peerAddress(), np.payloadTransferInfo());
+ job->start();
+ np.setPayload(job->getPayload());
+ }
+
Q_EMIT receivedPackage(decrypted);
} else {
@@ -95,3 +117,8 @@ void LanDeviceLink::dataReceived()
}
}
+
+void LanDeviceLink::readyRead()
+{
+
+}
diff --git a/kded/backends/lan/landevicelink.h b/kded/backends/lan/landevicelink.h
index 1f909bc..f40f259 100644
--- a/kded/backends/lan/landevicelink.h
+++ b/kded/backends/lan/landevicelink.h
@@ -42,6 +42,7 @@ public:
private Q_SLOTS:
void dataReceived();
+ void readyRead();
private:
QTcpSocket* mSocket;
diff --git a/kded/backends/lan/uploadjob.cpp b/kded/backends/lan/uploadjob.cpp
new file mode 100644
index 0000000..0aab1cb
--- /dev/null
+++ b/kded/backends/lan/uploadjob.cpp
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2013 Albert Vaca <albertvaka at gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License or (at your option) version 3 or any later version
+ * accepted by the membership of KDE e.V. (or its successor approved
+ * by the membership of KDE e.V.), which shall act as a proxy
+ * defined in Section 14 of version 3 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <qalgorithms.h>
+
+#include "uploadjob.h"
+
+UploadJob::UploadJob(QIODevice* source): KJob()
+{
+ mInput = source;
+ mServer = new QTcpServer(this);
+ mSocket = 0;
+}
+
+void UploadJob::start()
+{
+ mPort = 1739;
+ while(!mServer->listen(QHostAddress::Any, mPort)) {
+ mPort++;
+ if (mPort > 1764) { //No ports available?
+ mPort = 0;
+ return;
+ }
+ }
+ connect(mServer, SIGNAL(newConnection()), this, SLOT(newConnection()));
+}
+
+void UploadJob::newConnection()
+{
+
+ if (mSocket || !mServer->hasPendingConnections()) return;
+
+ mSocket = mServer->nextPendingConnection();
+
+ connect(mInput, SIGNAL(readyRead()), this, SLOT(readyRead()));
+ connect(mInput, SIGNAL(aboutToClose()), this, SLOT(aboutToClose()));
+
+ if (!mInput->open(QIODevice::ReadOnly)) {
+ return; //TODO: Handle error, clean up...
+ }
+
+}
+
+void UploadJob::readyRead()
+{
+ qint64 bytes = qMax(mInput->bytesAvailable(), (qint64)4096);
+ mSocket->write(mInput->read(bytes));
+}
+
+void UploadJob::aboutToClose()
+{
+ mSocket->close();
+ mSocket->disconnectFromHost();
+ emitResult();
+}
+
+QVariantMap UploadJob::getTransferInfo()
+{
+ QVariantMap ret;
+
+ ret["port"] = mPort;
+
+ return ret;
+}
+
diff --git a/kded/backends/lan/landevicelink.h b/kded/backends/lan/uploadjob.h
similarity index 70%
copy from kded/backends/lan/landevicelink.h
copy to kded/backends/lan/uploadjob.h
index 1f909bc..a0a6474 100644
--- a/kded/backends/lan/landevicelink.h
+++ b/kded/backends/lan/uploadjob.h
@@ -1,4 +1,4 @@
-/**
+/*
* Copyright 2013 Albert Vaca <albertvaka at gmail.com>
*
* This program is free software; you can redistribute it and/or
@@ -18,34 +18,35 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef LANDEVICELINK_H
-#define LANDEVICELINK_H
+#ifndef UPLOADJOB_H
+#define UPLOADJOB_H
-#include <QObject>
-#include <QString>
-#include <QTcpSocket>
-
-#include "../devicelink.h"
+#include <KJob>
-class AvahiTcpLinkProvider;
+#include <QIODevice>
+#include <QVariantMap>
+#include <QTcpServer>
+#include <QTcpSocket>
-class LanDeviceLink
- : public DeviceLink
+class UploadJob
+ : public KJob
{
Q_OBJECT
-
public:
- LanDeviceLink(const QString& d, LinkProvider* a, QTcpSocket* socket);
-
- bool sendPackage(NetworkPackage& np);
- bool sendPackageEncrypted(QCA::PublicKey& key, NetworkPackage& np);
-
-private Q_SLOTS:
- void dataReceived();
+ UploadJob(QIODevice* source);
+ virtual void start();
+ QVariantMap getTransferInfo();
private:
+ QIODevice* mInput;
+ QTcpServer* mServer;
QTcpSocket* mSocket;
+ qint16 mPort;
+private Q_SLOTS:
+ void readyRead();
+ void newConnection();
+ void aboutToClose();
};
-#endif // UDPDEVICELINK_H
+#endif // UPLOADJOB_H
diff --git a/kded/networkpackage.h b/kded/networkpackage.h
index 3cc0abe..2f1f627 100644
--- a/kded/networkpackage.h
+++ b/kded/networkpackage.h
@@ -68,6 +68,7 @@ public:
template<typename T> void set(const QString& key, const T& value) { mBody[key] = QVariant(value); }
bool has(const QString& key) const { return mBody.contains(key); }
+ //TODO: Change to a shared pointer
QIODevice* payload() const { return mPayload; }
void setPayload(QIODevice* device) { mPayload = device; }
bool hasPayload() const { return (mPayload != 0); }
--
kdeconnect packaging
More information about the pkg-kde-commits
mailing list