diff options
Diffstat (limited to 'signet/protocol/PacketMaker.cpp')
| -rw-r--r-- | signet/protocol/PacketMaker.cpp | 54 |
1 files changed, 41 insertions, 13 deletions
diff --git a/signet/protocol/PacketMaker.cpp b/signet/protocol/PacketMaker.cpp index 3c398ffe..5ede3996 100644 --- a/signet/protocol/PacketMaker.cpp +++ b/signet/protocol/PacketMaker.cpp @@ -18,55 +18,82 @@ // Header include #include "PacketMaker.h" +// Protocol includes +#include "ProgressMeter.h" + // Qt includes #include <QtCore/QtEndian> #include <QtCore/QBuffer> #include <QtCore/QIODevice> -bool readFromBuffer(char* dest, QIODevice* src, const int size) +bool readFromBuffer(char* dest, QIODevice* src, const int size, Signet::Protocol::ProgressMeter* progressMeter = 0) { int totalRead = 0; + if (progressMeter) + progressMeter->setExpectedSize(size); while ((totalRead < size) && src->waitForReadyRead(30000)) { int read = src->read(dest + totalRead, size - totalRead); if (read < 0) + { + if (progressMeter) + progressMeter->failure(); return false; + } totalRead += read; + if (progressMeter) + progressMeter->setValue(totalRead); } + if (progressMeter) + progressMeter->success(); return true; } void Signet::Protocol::PacketMaker::rawData(QIODevice* device, const QByteArray& data, const QStringList& receivers) { - Packet packet(Packet::RawData); - packet.addReceivers(receivers); + Packet packet(Packet::RawData, receivers); packet.write(data); packet.dump(device); } void Signet::Protocol::PacketMaker::deny(QIODevice* device, const QStringList& receivers) { - Packet packet(Packet::Denial); - packet.addReceivers(receivers); + Packet packet(Packet::Denial, receivers); packet.dump(device); } void Signet::Protocol::PacketMaker::accept(QIODevice* device, const QStringList& receivers) { - Packet packet(Packet::Acceptance); - packet.addReceivers(receivers); + Packet packet(Packet::Acceptance, receivers); packet.dump(device); } void Signet::Protocol::PacketMaker::challenge(QIODevice* device, const QByteArray& id, const QStringList& receivers) { - Packet packet(Packet::Challenge); - packet.addReceivers(receivers); + Packet packet(Packet::ChallengeRequest, receivers); packet.write(id); packet.dump(device); } -Signet::Protocol::Packet Signet::Protocol::PacketMaker::unwrap(QIODevice* device) +void Signet::Protocol::PacketMaker::makeConnection(QIODevice* device, const QStringList& receivers) +{ + Packet packet(Packet::ConnectRequest, receivers); + packet.dump(device); +} + +void Signet::Protocol::PacketMaker::dropConnection(QIODevice* device, const QStringList& receivers) +{ + Packet packet(Packet::DisconnectRequest, receivers); + packet.dump(device); +} + +void Signet::Protocol::PacketMaker::unknownReceiver(QIODevice* device) +{ + Packet packet(Packet::UnknownReceiver); + packet.dump(device); +} + +Signet::Protocol::Packet Signet::Protocol::PacketMaker::unwrap(QIODevice* device, ProgressMeter* progressMeter) { union { @@ -75,10 +102,10 @@ Signet::Protocol::Packet Signet::Protocol::PacketMaker::unwrap(QIODevice* device qint16 packetType; qint8 sectionType; }; + QStringList receivers; if (!readFromBuffer(raw, device, 2)) return Packet(); packetType = qFromBigEndian(packetType); - Packet packet(packetType); if (!readFromBuffer(raw, device, 1)) return Packet(); while (sectionType == Packet::Receiver) @@ -93,7 +120,7 @@ Signet::Protocol::Packet Signet::Protocol::PacketMaker::unwrap(QIODevice* device delete [] buffer; return Packet(); } - packet.addReceiver(QString::fromUtf8(buffer)); + receivers << QString::fromUtf8(buffer); delete [] buffer; if (!readFromBuffer(raw, device, 1)) return Packet(); @@ -102,11 +129,12 @@ Signet::Protocol::Packet Signet::Protocol::PacketMaker::unwrap(QIODevice* device return Packet(); char* buffer = new char[sectionSize]; sectionSize = qFromBigEndian(sectionSize); - if (!readFromBuffer(buffer, device, sectionSize)) + if (!readFromBuffer(buffer, device, sectionSize, progressMeter)) { delete [] buffer; return Packet(); } + Packet packet(packetType, receivers); packet.write(QByteArray(buffer, sectionSize)); delete [] buffer; return packet; |
