예제 #1
0
        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());
        }
예제 #2
0
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);
    }

}