summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/websockets/qwebsocketprotocol_p.cpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/websockets/qwebsocketprotocol_p.cpp b/src/websockets/qwebsocketprotocol_p.cpp
index c00711b..09e717f 100644
--- a/src/websockets/qwebsocketprotocol_p.cpp
+++ b/src/websockets/qwebsocketprotocol_p.cpp
@@ -166,20 +166,21 @@ void mask(QByteArray *payload, quint32 maskingKey)
void mask(char *payload, quint64 size, quint32 maskingKey)
{
quint32 *payloadData = reinterpret_cast<quint32 *>(payload);
- const quint32 numIterations = static_cast<quint32>(size / sizeof(quint32));
- const quint32 remainder = size % sizeof(quint32);
- quint32 i;
- for (i = 0; i < numIterations; ++i)
+ quint32 numIterations = static_cast<quint32>(size / sizeof(quint32));
+ quint32 remainder = size % sizeof(quint32);
+ const quint32 offset = numIterations * sizeof(quint32);
+ //maskingKey = qToBigEndian<quint32>(maskingKey);
+ while (numIterations--)
{
- *(payloadData + i) ^= maskingKey;
+ *payloadData++ ^= maskingKey;
}
- if (remainder)
+ if (remainder) //remainder is < 4
{
- const quint32 offset = i * static_cast<quint32>(sizeof(quint32));
const char *mask = reinterpret_cast<const char *>(&maskingKey);
- for (quint32 i = 0; i < remainder; ++i)
+ payload += offset;
+ while (remainder--)
{
- *(payload + offset + i) ^= (mask[(i + offset) % 4]);
+ *payload++ ^= *mask++;
}
}
}