]> granicus.if.org Git - esp-idf/commitdiff
tcp_tansport: websocket layer modifies in-buffer data (for masked transports). This...
authorDavid Cermak <cermak@espressif.com>
Tue, 16 Jul 2019 07:47:18 +0000 (09:47 +0200)
committerDavid Cermak <cermak@espressif.com>
Tue, 16 Jul 2019 07:47:18 +0000 (09:47 +0200)
Closes https://github.com/espressif/esp-idf/issues/3774

components/tcp_transport/transport_ws.c

index 599457b895be3c80908d8be8df0deb4472a610ec..12aaa3d232e329cb064bb6e5b3d1361ef075c04e 100644 (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)