tcp_tansport: websocket layer modifies in-buffer data (for masked transports). This fix reverts the data back to original rather then making a copy.

Closes https://github.com/espressif/esp-idf/issues/3774
This commit is contained in:
David Cermak 2019-07-16 09:47:18 +02:00
parent 596209de69
commit 8fc02e860a

View File

@ -208,7 +208,17 @@ static int _ws_write(esp_transport_handle_t t, int opcode, int mask_flag, const
if (len == 0) {
return 0;
}
return esp_transport_write(ws->parent, buffer, len, timeout_ms);
int ret = esp_transport_write(ws->parent, buffer, len, timeout_ms);
// in case of masked transport we have to revert back to the original data, as ws layer
// does not create its own copy of data to be sent
if (mask_flag) {
mask = &ws_header[header_len-4];
for (i = 0; i < len; ++i) {
buffer[i] = (buffer[i] ^ mask[i % 4]);
}
}
return ret;
}
static int ws_write(esp_transport_handle_t t, const char *b, int len, int timeout_ms)