summaryrefslogtreecommitdiffstats
path: root/signet/protocol/Packet.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'signet/protocol/Packet.cpp')
-rw-r--r--signet/protocol/Packet.cpp91
1 files changed, 36 insertions, 55 deletions
diff --git a/signet/protocol/Packet.cpp b/signet/protocol/Packet.cpp
index e4d5eef5..74c785e6 100644
--- a/signet/protocol/Packet.cpp
+++ b/signet/protocol/Packet.cpp
@@ -23,59 +23,19 @@
#include <QtCore/QBuffer>
#include <QtCore/QIODevice>
-Signet::Protocol::Packet::Packet(const Type type) :
+Signet::Protocol::Packet::Packet(const qint16 type) :
m_type(type)
{
}
-bool Signet::Protocol::Packet::determineType()
+qint16 Signet::Protocol::Packet::type() const
{
- QByteArray temp = m_rawData;
- QBuffer buffer(&temp);
- int size = m_rawData.size();
- union
- {
- char packetType_raw[2];
- qint16 packetType;
- };
- union
- {
- char dataSize_raw[8];
- qint64 dataSize;
- };
- if ((m_type == Invalid) && (10 <= size))
- {
- buffer.read(packetType_raw, 2);
- buffer.read(dataSize_raw, 8);
- packetType = qFromBigEndian(packetType);
- dataSize = qFromBigEndian(dataSize);
- switch (packetType)
- {
- case RawData:
- m_type = RawData;
- break;
- case Acceptance:
- m_type = Acceptance;
- break;
- case Denial:
- m_type = Denial;
- break;
- case Challenge:
- m_type = Challenge;
- break;
- default:
- m_type = Invalid;
- break;
- }
- }
- if (m_type == Invalid)
- return false;
- // TODO: verify the size
+ return m_type;
}
-qint16 Signet::Protocol::Packet::type() const
+QStringList Signet::Protocol::Packet::receivers() const
{
- return m_type;
+ return m_receivers;
}
bool Signet::Protocol::Packet::isValid() const
@@ -83,6 +43,16 @@ bool Signet::Protocol::Packet::isValid() const
return m_type == Invalid;
}
+void Signet::Protocol::Packet::addReceiver(const QString& receiver)
+{
+ m_receivers << receiver;
+}
+
+void Signet::Protocol::Packet::addReceivers(const QStringList& receivers)
+{
+ m_receivers << receivers;
+}
+
void Signet::Protocol::Packet::write(const QByteArray& data)
{
if ((m_type == RawData) || (m_type == Invalid))
@@ -103,16 +73,27 @@ void Signet::Protocol::Packet::dump(QIODevice* device) const
}
union
{
- char header[10];
- struct
- {
- qint16 type;
- qint64 size;
- }headerParts;
+ char raw[4];
+ qint16 type;
+ qint32 size;
};
- QByteArray data = m_rawData;
- headerParts.type = qToBigEndian(m_type);
- headerParts.size = qToBigEndian(m_rawData.size());
- data.prepend(header);
+ QByteArray data;
+ QBuffer buffer(&data);
+ type = qToBigEndian(m_type);
+ buffer.write(raw, 2);
+ foreach (const QString& receiver, m_receivers)
+ {
+ QByteArray utf8Data = receiver.toUtf8();
+ size = receiver.size();
+ size = qToBigEndian(size);
+ buffer.putChar('\0');
+ buffer.write(raw, 4);
+ buffer.write(utf8Data.constData(), utf8Data.size());
+ }
+ size = m_rawData.size();
+ size = qToBigEndian(size);
+ buffer.putChar('\x1');
+ buffer.write(raw, 4);
+ buffer.write(m_rawData);
device->write(data);
}