diff options
author | George Hazan <ghazan@miranda.im> | 2021-04-23 13:09:16 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2021-04-23 13:09:16 +0300 |
commit | b07aafea58d3af883587fdcadd817f5b1e6ed126 (patch) | |
tree | 9c19ca4e8caf6854f8b18b0300d9e553c3c94a43 /protocols | |
parent | 933b020956e5795dc58ca277293c4fa25f77751f (diff) |
old buggy websocket processing code removed
Diffstat (limited to 'protocols')
-rw-r--r-- | protocols/WhatsAppWeb/src/proto.h | 2 | ||||
-rw-r--r-- | protocols/WhatsAppWeb/src/server.cpp | 27 |
2 files changed, 13 insertions, 16 deletions
diff --git a/protocols/WhatsAppWeb/src/proto.h b/protocols/WhatsAppWeb/src/proto.h index acbdc00b4b..e184faba67 100644 --- a/protocols/WhatsAppWeb/src/proto.h +++ b/protocols/WhatsAppWeb/src/proto.h @@ -106,7 +106,7 @@ class WhatsAppProto : public PROTO<WhatsAppProto> mir_cs m_csPacketQueue; OBJLIST<WARequest> m_arPacketQueue; - bool WSReadPacket(int nBytes, const WSHeader &hdr, MBinBuffer &buf); + bool WSReadPacket(const WSHeader &hdr, MBinBuffer &buf); int WSSend(const CMStringA &str, WA_PKT_HANDLER = nullptr); void OnLoggedIn(void); diff --git a/protocols/WhatsAppWeb/src/server.cpp b/protocols/WhatsAppWeb/src/server.cpp index 14abb5ec33..6ee13e2653 100644 --- a/protocols/WhatsAppWeb/src/server.cpp +++ b/protocols/WhatsAppWeb/src/server.cpp @@ -249,9 +249,9 @@ void WhatsAppProto::OnStartSession(const JSONNode &root) ///////////////////////////////////////////////////////////////////////////////////////// // gateway worker thread -bool WhatsAppProto::WSReadPacket(int nBytes, const WSHeader &hdr, MBinBuffer &res) +bool WhatsAppProto::WSReadPacket(const WSHeader &hdr, MBinBuffer &res) { - size_t currPacketSize = nBytes - hdr.headerSize; + size_t currPacketSize = res.length() - hdr.headerSize; char buf[1024]; while (currPacketSize < hdr.payloadSize) { @@ -314,12 +314,11 @@ bool WhatsAppProto::ServerThreadWorker() WSSend(payload, &WhatsAppProto::OnRestoreSession1); bool bExit = false; - int offset = 0; MBinBuffer netbuf; while (!bExit && !m_bTerminated) { unsigned char buf[2048]; - int bufSize = Netlib_Recv(m_hServerConn, (char *)buf + offset, _countof(buf) - offset, MSG_NODUMP); + int bufSize = Netlib_Recv(m_hServerConn, (char *)buf, _countof(buf), MSG_NODUMP); if (bufSize == 0) { debugLogA("Gateway connection gracefully closed"); break; @@ -329,20 +328,17 @@ bool WhatsAppProto::ServerThreadWorker() break; } + netbuf.append(buf, bufSize); + WSHeader hdr; - if (!WebSocket_InitHeader(hdr, buf, bufSize)) { - offset += bufSize; + if (!WebSocket_InitHeader(hdr, netbuf.data(), netbuf.length())) continue; - } - // we have some additional data, not only opcode - if ((size_t)bufSize > hdr.headerSize) { - netbuf.append(buf, bufSize); - if (!WSReadPacket(bufSize, hdr, netbuf)) + // we lack some data, let's read them + if (netbuf.length() < hdr.headerSize + hdr.payloadSize) + if (!WSReadPacket(hdr, netbuf)) break; - } - offset = 0; 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); @@ -351,7 +347,7 @@ bool WhatsAppProto::ServerThreadWorker() while (true) { MBinBuffer currPacket; currPacket.assign(netbuf.data() + hdr.headerSize, hdr.payloadSize); - currPacket.append("", 1); + currPacket.append("", 1); // add 0 to use strchr safely const char *start = currPacket.data(); @@ -425,7 +421,8 @@ bool WhatsAppProto::ServerThreadWorker() 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); + 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); } } |