コード例 #1
0
//------------------------------------------------------------------------------
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);
         }
      }

   }
}
コード例 #2
0
ファイル: dljob.cpp プロジェクト: robmcmullen/smewt
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;
}
コード例 #3
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);
               }
            }
         }
      }
   }


}
コード例 #4
0
ファイル: dljob.cpp プロジェクト: robmcmullen/smewt
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;
}
コード例 #5
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());
        }
コード例 #6
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);
    }

}