diff options
author | George Hazan <ghazan@miranda.im> | 2021-04-22 20:18:57 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2021-04-22 20:18:57 +0300 |
commit | 933b020956e5795dc58ca277293c4fa25f77751f (patch) | |
tree | 8f0843da81a1c283ce8a4cb29d9237aafdb538c6 /protocols | |
parent | 72656f183105508a65d952e8960bd2c2971ca1d5 (diff) |
fixes & debug info for web socket data
Diffstat (limited to 'protocols')
-rw-r--r-- | protocols/WhatsAppWeb/src/server.cpp | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/protocols/WhatsAppWeb/src/server.cpp b/protocols/WhatsAppWeb/src/server.cpp index a75ffda4d2..14abb5ec33 100644 --- a/protocols/WhatsAppWeb/src/server.cpp +++ b/protocols/WhatsAppWeb/src/server.cpp @@ -343,10 +343,11 @@ bool WhatsAppProto::ServerThreadWorker() } offset = 0; - debugLogA("Got packet: buffer = %d, opcode = %d, payloadSize = %d, final = %d, masked = %d", netbuf.length(), hdr.opCode, hdr.payloadSize, hdr.bIsFinal, hdr.bIsMasked); + debugLogA("Got packet: buffer = %d, opcode = %d, headerSize = %d, payloadSize = %d, final = %d, masked = %d", + netbuf.length(), hdr.opCode, hdr.headerSize, hdr.payloadSize, hdr.bIsFinal, hdr.bIsMasked); + // Netlib_Dump(m_hServerConn, netbuf.data(), netbuf.length(), false, 0); // read all payloads from the current buffer, one by one - size_t prevSize = 0; while (true) { MBinBuffer currPacket; currPacket.assign(netbuf.data() + hdr.headerSize, hdr.payloadSize); @@ -403,37 +404,28 @@ bool WhatsAppProto::ServerThreadWorker() bExit = true; // simply reconnect, don't exit break; - case 9: // ping - debugLogA("ping received"); - Netlib_Send(m_hServerConn, "?,,", 3, 0); - break; - default: Netlib_Dump(m_hServerConn, start, hdr.payloadSize, false, 0); } - if (hdr.bIsFinal) - netbuf.remove(hdr.headerSize + hdr.payloadSize); - + netbuf.remove(hdr.headerSize + hdr.payloadSize); + debugLogA("%d bytes removed from network buffer, %d bytes remain", hdr.headerSize + hdr.payloadSize, netbuf.length()); if (netbuf.length() == 0) break; // if we have not enough data for header, continue reading - if (!WebSocket_InitHeader(hdr, netbuf.data(), netbuf.length())) + if (!WebSocket_InitHeader(hdr, netbuf.data(), netbuf.length())) { + debugLogA("not enough data for header, continue reading"); break; + } // if we have not enough data for data, continue reading - if (hdr.headerSize + hdr.payloadSize > netbuf.length()) - break; - - debugLogA("Got inner packet: buffer = %d, opcode = %d, headerSize = %d, payloadSize = %d, final = %d, masked = %d", netbuf.length(), hdr.opCode, hdr.headerSize, hdr.payloadSize, hdr.bIsFinal, hdr.bIsMasked); - if (prevSize == netbuf.length()) { - netbuf.remove(prevSize); - debugLogA("dropping current packet, exiting"); + if (hdr.headerSize + hdr.payloadSize > netbuf.length()) { + debugLogA("not enough place for data (%d+%d > %d), continue reading", hdr.headerSize, hdr.payloadSize, netbuf.length()); break; } - prevSize = netbuf.length(); + debugLogA("Got inner packet: buffer = %d, opcode = %d, headerSize = %d, payloadSize = %d, final = %d, masked = %d", netbuf.length(), hdr.opCode, hdr.headerSize, hdr.payloadSize, hdr.bIsFinal, hdr.bIsMasked); } } |