summaryrefslogtreecommitdiffstats
path: root/signet/protocol/PacketMaker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'signet/protocol/PacketMaker.cpp')
-rw-r--r--signet/protocol/PacketMaker.cpp54
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;