Closed joecabezas closed 4 years ago
@joecabezas Wrap the following lines inside a network type check: https://github.com/Links2004/arduinoWebSockets/blob/c038f100d68b8e5d0a96f25dd1609ff28592b02f/src/WebSocketsClient.cpp#L709-L717
Like that:
#if(WEBSOCKETS_NETWORK_TYPE != NETWORK_ESP8266_ASYNC)
} else if(clientIsConnected(client) && client->isSocketIO && client->cSessionId.length() > 0) {
if(_client.tcp->available()) {
// read not needed data
DEBUG_WEBSOCKETS("[WS-Client][handleHeader] still data in buffer (%d), clean up.\n", _client.tcp->available());
while(_client.tcp->available() > 0) {
_client.tcp->read();
}
}
sendHeader(client);
#endif
I run into this issue as well. Thanks for the fix! I feel like we should make a pull request for this fix.
Correct it please) I spent a lot of time until I found it.
I have struggled with this for days as it was not sending the upgrade request to the SocketIO server as shown below
`[WS-Client][sendHeader] sending header... [WS-Client][sendHeader] handshake GET /socket.io/?EIO=3&transport=polling HTTP/1.1 Host: 192.168.0.100:3000 Connection: keep-alive Origin: file:// User-Agent: arduino-WebSocket-Client
[write] n: zu t: 157 [WS-Client][sendHeader] sending header... Done (14829us). [WS-Client][handleHeader] RX: HTTP/1.1 200 OK [WS-Client][handleHeader] RX: Content-Type: text/plain; charset=UTF-8 [WS-Client][handleHeader] RX: Content-Length: 103 [WS-Client][handleHeader] RX: Access-Control-Allow-Credentials: true [WS-Client][handleHeader] RX: Access-Control-Allow-Origin: file:// [WS-Client][handleHeader] RX: Set-Cookie: io=R5J2Ie8Ow4P8_WDPAABt; Path=/; HttpOnly; SameSite=Strict [WS-Client][handleHeader] RX: Date: Thu, 14 May 2020 09:57:54 GMT [WS-Client][handleHeader] RX: Connection: keep-alive [WS-Client][handleHeader] Header read fin. [WS-Client][handleHeader] Client settings: [WS-Client][handleHeader] - cURL: /socket.io/?EIO=3 [WS-Client][handleHeader] - cKey: Cp8Nv8IlbQwQgiQQbqB8jg== [WS-Client][handleHeader] Server header: [WS-Client][handleHeader] - cCode: 200 [WS-Client][handleHeader] - cIsUpgrade: 0 [WS-Client][handleHeader] - cIsWebsocket: 1 [WS-Client][handleHeader] - cAccept: [WS-Client][handleHeader] - cProtocol: arduino [WS-Client][handleHeader] - cExtensions: [WS-Client][handleHeader] - cVersion: 0 [WS-Client][handleHeader] - cSessionId: R5J2Ie8Ow4P8_WDPAABt [WS-Client][handleHeader] no Websocket connection close. [write] n: zu t: 27 [WS-Client] client disconnected. [IOc] Disconnected! [wsIOc] Disconnected! [WS-Server][0] Disconnect client [WS-Client] asyncConnect... [WS-Client] connected to 192.168.0.100:3000. [WS-Client][sendHeader] sending header... [WS-Client][sendHeader] handshake GET /socket.io/?EIO=3&transport=polling HTTP/1.1 Host: 192.168.0.100:3000 Connection: keep-alive Origin: file:// User-Agent: arduino-WebSocket-Client
[write] n: zu t: 157 [WS-Client][sendHeader] sending header... Done (14771us). [WS-Client][handleHeader] RX: HTTP/1.1 200 OK [WS-Client][handleHeader] RX: Content-Type: text/plain; charset=UTF-8 [WS-Client][handleHeader] RX: Content-Length: 103 [WS-Client][handleHeader] RX: Access-Control-Allow-Credentials: true [WS-Client][handleHeader] RX: Access-Control-Allow-Origin: file:// [WS-Client][handleHeader] RX: Set-Cookie: io=5qWpOzM8qksSY5IZAABu; Path=/; HttpOnly; SameSite=Strict [WS-Client][handleHeader] RX: Date: Thu, 14 May 2020 09:57:55 GMT [WS-Client][handleHeader] RX: Connection: keep-alive [WS-Client][handleHeader] Header read fin. [WS-Client][handleHeader] Client settings: [WS-Client][handleHeader] - cURL: /socket.io/?EIO=3 [WS-Client][handleHeader] - cKey: F+WMaIhmW34p7wqNtEfQWw== [WS-Client][handleHeader] Server header: [WS-Client][handleHeader] - cCode: 200 [WS-Client][handleHeader] - cIsUpgrade: 0 [WS-Client][handleHeader] - cIsWebsocket: 0 [WS-Client][handleHeader] - cAccept: [WS-Client][handleHeader] - cProtocol: arduino [WS-Client][handleHeader] - cExtensions: [WS-Client][handleHeader] - cVersion: 0 [WS-Client][handleHeader] - cSessionId: 5qWpOzM8qksSY5IZAABu [WS-Client][handleHeader] no Websocket connection close. [write] n: zu t: 27 [WS-Client] client disconnected. [IOc] Disconnected! [wsIOc] Disconnected! [WS-Server][0] Disconnect client [WS-Client] asyncConnect...`
I had to change the condition suggested `#if(WEBSOCKETS_NETWORK_TYPE != NETWORK_ESP8266_ASYNC) } else if(clientIsConnected(client) && client->isSocketIO && client->cSessionId.length() > 0) {
if(_client.tcp->available()) {
// read not needed data
DEBUG_WEBSOCKETS("[WS-Client][handleHeader] still data in buffer (%d), clean up.\n", _client.tcp->available());
while(_client.tcp->available() > 0) {
_client.tcp->read();
}
}
sendHeader(client);
To the one below to connect to the SocketIO
` } else if(clientIsConnected(client) && client->isSocketIO && client->cSessionId.length() > 0) {
if(_client.tcp->available()) {
// read not needed data
DEBUG_WEBSOCKETS("[WS-Client][handleHeader] still data in buffer (%d), clean up.\n", _client.tcp->available());
while(_client.tcp->available() > 0) {
_client.tcp->read();
}
}
sendHeader(client);
}`
My new log
`[WS-Client] asyncConnect... [WS-Client] connected to 192.168.0.100:3000. [WS-Client][sendHeader] sending header... [WS-Client][sendHeader] handshake GET /socket.io/?EIO=3&transport=polling HTTP/1.1 Host: 192.168.0.100:3000 Connection: keep-alive Origin: file:// User-Agent: arduino-WebSocket-Client
[write] n: zu t: 157 [WS-Client][sendHeader] sending header... Done (14818us). [WS-Client][handleHeader] RX: HTTP/1.1 200 OK [WS-Client][handleHeader] RX: Content-Type: text/plain; charset=UTF-8 [WS-Client][handleHeader] RX: Content-Length: 103 [WS-Client][handleHeader] RX: Access-Control-Allow-Credentials: true [WS-Client][handleHeader] RX: Access-Control-Allow-Origin: file:// [WS-Client][handleHeader] RX: Set-Cookie: io=U50dVxBukIkqorr2AACU; Path=/; HttpOnly; SameSite=Strict [WS-Client][handleHeader] RX: Date: Thu, 14 May 2020 10:04:12 GMT [WS-Client][handleHeader] RX: Connection: keep-alive [WS-Client][handleHeader] Header read fin. [WS-Client][handleHeader] Client settings: [WS-Client][handleHeader] - cURL: /socket.io/?EIO=3 [WS-Client][handleHeader] - cKey: DlcAFBKWzYSrfO8SBwoTUQ== [WS-Client][handleHeader] Server header: [WS-Client][handleHeader] - cCode: 200 [WS-Client][handleHeader] - cIsUpgrade: 0 [WS-Client][handleHeader] - cIsWebsocket: 1 [WS-Client][handleHeader] - cAccept: [WS-Client][handleHeader] - cProtocol: arduino [WS-Client][handleHeader] - cExtensions: [WS-Client][handleHeader] - cVersion: 0 [WS-Client][handleHeader] - cSessionId: U50dVxBukIkqorr2AACU [WS-Client][sendHeader] sending header... [WS-Client][sendHeader] handshake GET /socket.io/?EIO=3&transport=websocket&sid=U50dVxBukIkqorr2AACU HTTP/1.1 Host: 192.168.0.100:3000 Connection: Upgrade Upgrade: websocket Sec-WebSocket-Version: 13 Sec-WebSocket-Key: rElpwim5ZdE4rFYAn6waIA== Sec-WebSocket-Protocol: arduino Origin: file:// User-Agent: arduino-WebSocket-Client
[write] n: zu t: 306 [WS-Client][sendHeader] sending header... Done (31834us). [WS-Client][handleHeader] RX: 96:0{"sid":"U50dVxBukIkqorr2AACU","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000}2:40HTTP/1.1 101 Switching Protocols [WS-Client][handleHeader] RX: Upgrade: websocket [WS-Client][handleHeader] RX: Connection: Upgrade [WS-Client][handleHeader] RX: Sec-WebSocket-Accept: lPma1hCVK7kegvLM8r3TJ3egMlk= [WS-Client][handleHeader] RX: Sec-WebSocket-Protocol: arduino [WS-Client][handleHeader] Header read fin. [WS-Client][handleHeader] Client settings: [WS-Client][handleHeader] - cURL: /socket.io/?EIO=3 [WS-Client][handleHeader] - cKey: rElpwim5ZdE4rFYAn6waIA== [WS-Client][handleHeader] Server header: [WS-Client][handleHeader] - cCode: 200 [WS-Client][handleHeader] - cIsUpgrade: 1 [WS-Client][handleHeader] - cIsWebsocket: 1 [WS-Client][handleHeader] - cAccept: lPma1hCVK7kegvLM8r3TJ3egMlk= [WS-Client][handleHeader] - cProtocol: arduino [WS-Client][handleHeader] - cExtensions: [WS-Client][handleHeader] - cVersion: 0 [WS-Client][handleHeader] - cSessionId: U50dVxBukIkqorr2AACU [WS-Client][handleHeader] Websocket connection init done. [WS][0][headerDone] Header Handling Done. [WS][0][handleWebsocketWaitFor] size: 2 cWsRXsize: 0 [wsIOc] Connected to url: /socket.io/?EIO=3 [WS][0][sendFrame] ------- send message frame ------- [WS][0][sendFrame] fin: 1 opCode: 1 mask: 1 length: 1 headerToPayload: 1 [WS][0][sendFrame] text: 5 [write] n: zu t: 7 [WS][0][sendFrame] sending Frame Done (2382us). [IOc] Connected to url: /socket.io/?EIO=3 [write] n: zu t: 6 [write] n: zu t: 2 [write] n: zu t: 85 ["login",{"room":"room-value","address":"address-value","username":"username-value"}] [WS][0][handleWebsocketWaitFor][readCb] size: 2 ok: 1 [WS][0][handleWebsocket] ------- read massage frame ------- [WS][0][handleWebsocket] fin: 1 rsv1: 0 rsv2: 0 rsv3 0 opCode: 1 [WS][0][handleWebsocket] mask: 0 payloadLen: 78 [WS][0][handleWebsocket] text: 42["login","{\"username\":\"username-value\",\"status\":0,\"msg\":\"Error\"}"] [wsIOc] get event (76): ["login","{\"username\":\"username-value\",\"status\":0,\"msg\":\"Error\"}"] [IOc] get event: ["login","{\"username\":\"username-value\",\"status\":0,\"msg\":\"Error\"}"] [WS][0][handleWebsocketWaitFor] size: 2 cWsRXsize: 0 [write] n: zu t: 6 [write] n: zu t: 2 [write] n: zu t: 85 ["login",{"room":"room-value","address":"address-value","username":"username-value"}] [WS][0][handleWebsocketWaitFor][readCb] size: 2 ok: 1 [WS][0][handleWebsocket] ------- read massage frame ------- [WS][0][handleWebsocket] fin: 1 rsv1: 0 rsv2: 0 rsv3 0 opCode: 1 [WS][0][handleWebsocket] mask: 0 payloadLen: 78 [WS][0][handleWebsocket] text: 42["login","{\"username\":\"username-value\",\"status\":0,\"msg\":\"Error\"}"] [wsIOc] get event (76): ["login","{\"username\":\"username-value\",\"status\":0,\"msg\":\"Error\"}"] [IOc] get event: ["login","{\"username\":\"username-value\",\"status\":0,\"msg\":\"Error\"}"]`
Hope this can help someone in the same situation like me
I tried to compile enabling ASYNC, but it failed
I enabled it by doing in my compiler settings (platformio)
Here is the full output of building:
I even dont see
available
in source code forAsyncTCPbuffer
https://github.com/me-no-dev/ESPAsyncTCP/blob/master/src/ESPAsyncTCPbuffer.hwhat I am missing?