Merge pull request #32 from ahtsiu/fix_continuation_frames
fixed bug in handling continuation frames.
This commit is contained in:
+11
-3
@@ -162,6 +162,7 @@ class _RealWebSocket : public easywsclient::WebSocket
|
|||||||
|
|
||||||
std::vector<uint8_t> rxbuf;
|
std::vector<uint8_t> rxbuf;
|
||||||
std::vector<uint8_t> txbuf;
|
std::vector<uint8_t> txbuf;
|
||||||
|
std::vector<uint8_t> receivedData;
|
||||||
|
|
||||||
socket_t sockfd;
|
socket_t sockfd;
|
||||||
readyStateValues readyState;
|
readyStateValues readyState;
|
||||||
@@ -292,10 +293,17 @@ class _RealWebSocket : public easywsclient::WebSocket
|
|||||||
|
|
||||||
// We got a whole message, now do something with it:
|
// We got a whole message, now do something with it:
|
||||||
if (false) { }
|
if (false) { }
|
||||||
else if (ws.opcode == wsheader_type::TEXT_FRAME && ws.fin) {
|
else if (ws.opcode == wsheader_type::TEXT_FRAME
|
||||||
|
|| ws.opcode == wsheader_type::CONTINUATION
|
||||||
|
) {
|
||||||
if (ws.mask) { for (size_t i = 0; i != ws.N; ++i) { rxbuf[i+ws.header_size] ^= ws.masking_key[i&0x3]; } }
|
if (ws.mask) { for (size_t i = 0; i != ws.N; ++i) { rxbuf[i+ws.header_size] ^= ws.masking_key[i&0x3]; } }
|
||||||
std::string data(rxbuf.begin()+ws.header_size, rxbuf.begin()+ws.header_size+(size_t)ws.N);
|
receivedData.insert(receivedData.end(), rxbuf.begin()+ws.header_size, rxbuf.begin()+ws.header_size+(size_t)ws.N);// just feed
|
||||||
callable((const std::string) data);
|
if (ws.fin) {
|
||||||
|
std::string data(receivedData.begin(), receivedData.end());
|
||||||
|
callable((const std::string) data);
|
||||||
|
receivedData.erase(receivedData.begin(), receivedData.end());
|
||||||
|
std::vector<uint8_t> ().swap(receivedData);// free memory
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (ws.opcode == wsheader_type::PING) {
|
else if (ws.opcode == wsheader_type::PING) {
|
||||||
if (ws.mask) { for (size_t i = 0; i != ws.N; ++i) { rxbuf[i+ws.header_size] ^= ws.masking_key[i&0x3]; } }
|
if (ws.mask) { for (size_t i = 0; i != ws.N; ++i) { rxbuf[i+ws.header_size] ^= ws.masking_key[i&0x3]; } }
|
||||||
|
|||||||
Reference in New Issue
Block a user