void testSslJobs() { const QString aFile = QFINDTESTDATA("sendfiletest.cpp"); const QString destFile = QDir::tempPath() + "/kdeconnect-test-sentfile"; QFile(destFile).remove(); const QString deviceId = KdeConnectConfig::instance()->deviceId() , deviceName = "testdevice" , deviceType = KdeConnectConfig::instance()->deviceType(); KdeConnectConfig* kcc = KdeConnectConfig::instance(); kcc->addTrustedDevice(deviceId, deviceName, deviceType); kcc->setDeviceProperty(deviceId, QString("certificate"), QString::fromLatin1(kcc->certificate().toPem())); // Using same certificate from kcc, instead of generating QSharedPointer<QFile> f(new QFile(aFile)); UploadJob* uj = new UploadJob(f, deviceId); QSignalSpy spyUpload(uj, &KJob::result); uj->start(); auto info = uj->transferInfo(); info.insert("deviceId", deviceId); info.insert("size", aFile.size()); DownloadJob* dj = new DownloadJob(QHostAddress::LocalHost, info); QVERIFY(dj->getPayload()->open(QIODevice::ReadOnly)); FileTransferJob* ft = new FileTransferJob(dj->getPayload(), uj->transferInfo()["size"].toInt(), QUrl::fromLocalFile(destFile)); QSignalSpy spyDownload(dj, &KJob::result); QSignalSpy spyTransfer(ft, &KJob::result); ft->start(); dj->start(); QVERIFY(spyTransfer.count() || spyTransfer.wait(1000000000)); if (ft->error()) qWarning() << "fterror" << ft->errorString(); QCOMPARE(ft->error(), 0); QCOMPARE(spyDownload.count(), 1); QCOMPARE(spyUpload.count(), 1); QFile resultFile(destFile), originFile(aFile); QVERIFY(resultFile.open(QIODevice::ReadOnly)); QVERIFY(originFile.open(QIODevice::ReadOnly)); const QByteArray resultContents = resultFile.readAll(), originContents = originFile.readAll(); QCOMPARE(resultContents.size(), originContents.size()); QCOMPARE(resultFile.readAll(), originFile.readAll()); }
void LanDeviceLink::dataReceived() { if (mSocketLineReader->bytesAvailable() == 0) return; QByteArray package = mSocketLineReader->readLine(); //kDebug(kdeconnect_kded()) << "LanDeviceLink dataReceived" << package; 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 NetworkPackage decrypted(QString::null); unserialized.decrypt(mPrivateKey, &decrypted); if (decrypted.hasPayloadTransferInfo()) { kDebug(kdeconnect_kded()) << "HasPayloadTransferInfo"; DownloadJob* job = new DownloadJob(mSocketLineReader->peerAddress(), decrypted.payloadTransferInfo()); job->start(); decrypted.setPayload(job->getPayload(), decrypted.payloadSize()); } Q_EMIT receivedPackage(decrypted); } else { if (unserialized.hasPayloadTransferInfo()) { qWarning() << "Ignoring unencrypted payload"; } Q_EMIT receivedPackage(unserialized); } if (mSocketLineReader->bytesAvailable() > 0) { QMetaObject::invokeMethod(this, "dataReceived", Qt::QueuedConnection); } }