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); } }
bool LoopbackDeviceLink::sendPackage(NetworkPackage& input) { NetworkPackage output(QString::null); NetworkPackage::unserialize(input.serialize(), &output); //LoopbackDeviceLink does not need deviceTransferInfo if (input.hasPayload()) { bool b = input.payload()->open(QIODevice::ReadOnly); Q_ASSERT(b); output.setPayload(input.payload(), input.payloadSize()); } Q_EMIT receivedPackage(output); return true; }