//------------------------------------------------------------------------------ void Cache::_do_consume() { DownloadJob job; stack_nolock<DownloadJob>::node_t* pNode = _downloadJobs.popall(); while(_downloadJobs.pop(pNode, job)) { // process job: // is this a "file read job?" if (job.vFile == 0 ) { if (job.vMem) { _doRead(job.vMem, job.local_file); // read file and mark it "ready" if (job.onthread) { job.onthread(job.url, job.vMem, job.userdata); } _finishedJobs.push(job); } } else { if (job.vMem) { _doDownload(job.url, job.local_file, job.vFile, job.vMem); if (job.onthread) { job.onthread(job.url, job.vMem, job.userdata); } _finishedJobs.push(job); } } } }
int progress(void* data, double dltotal, double dlnow, double ultotal, double ulnow) { DownloadJob* dljob = (DownloadJob*)data; dljob->setMaximum((int)dltotal); dljob->emitUpdate((int)dlnow); return 0; }
void Cache::process() { DownloadJob job; stack_nolock<DownloadJob>::node_t* pNode = _finishedJobs.popall(); int cnt=0; while(_finishedJobs.pop(pNode, job)) { _queuedJobs.push(job); cnt++; } /*if (cnt>0) { std::cout << "new jobs: " << cnt << " ["; std::cout << "queued: " << _queuedJobs.size() << "]\n"; }*/ _curProcess += _increment; while (_curProcess>=_maxProcess) { _curProcess -= 1; if (_queuedJobs.size()>0) { job = _queuedJobs.front(); _queuedJobs.pop(); // process job: // is this a "file read job?" if (job.vFile == 0) { if (job.vMem) { if (job.onload) { job.onload(job.url, job.vMem, job.userdata); } } } else { if (job.vMem) { if (job.onload) { job.onload(job.url, job.vMem, job.userdata); } } } } } }
int progress(void* data, double dltotal, double dlnow, double ultotal, double ulnow) { DownloadJob* dljob = (DownloadJob*)data; dljob->setMaximum((int)dltotal); dljob->emitUpdate((int)dlnow); if (dlnow >= dltotal) { qDebug() << "Finished downloading:" << dljob->_local; } return 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()); }
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); } }