diff --git a/src/WebSocketsClient.cpp b/src/WebSocketsClient.cpp index 9ed5d5c..dc9e022 100644 --- a/src/WebSocketsClient.cpp +++ b/src/WebSocketsClient.cpp @@ -317,28 +317,30 @@ void WebSocketsClient::handleHeader(WSclient_t * client) { if(headerLine.startsWith("HTTP/1.")) { // "HTTP/1.1 101 Switching Protocols" client->cCode = headerLine.substring(9, headerLine.indexOf(' ', 9)).toInt(); - } else if(headerLine == "Connection: Upgrade") { - client->cIsUpgrade = true; - } else if(headerLine.startsWith("Upgrade: ")) { - // 9 = lenght of "Upgrade: " - String low = headerLine.substring(9); - low.toLowerCase(); - if(low == "websocket") { - client->cIsWebsocket = true; + } else if(headerLine.indexOf(':')) { + String headerName = headerLine.substring(0, headerLine.indexOf(':')); + String headerValue = headerLine.substring(headerLine.indexOf(':') + 2); + + if(headerName.equalsIgnoreCase("Connection")) { + if(headerValue.indexOf("Upgrade") >= 0) { + client->cIsUpgrade = true; + } + } else if(headerName.equalsIgnoreCase("Upgrade")) { + if(headerValue.equalsIgnoreCase("websocket")) { + client->cIsWebsocket = true; + } + } else if(headerName.equalsIgnoreCase("Sec-WebSocket-Accept")) { + client->cAccept = headerValue; + client->cAccept.trim(); // see rfc6455 + } else if(headerName.equalsIgnoreCase("Sec-WebSocket-Protocol")) { + client->cProtocol = headerValue; + } else if(headerName.equalsIgnoreCase("Sec-WebSocket-Extensions")) { + client->cExtensions = headerValue; + } else if(headerName.equalsIgnoreCase("Sec-WebSocket-Version")) { + client->cVersion = headerValue.toInt(); } - } else if(headerLine.startsWith("Sec-WebSocket-Accept: ")) { - // 22 = lenght of "Sec-WebSocket-Accept: " - client->cAccept = headerLine.substring(22); - client->cAccept.trim(); // see rfc6455 - } else if(headerLine.startsWith("Sec-WebSocket-Protocol: ")) { - // 24 = lenght of "Sec-WebSocket-Protocol: " - client->cProtocol = headerLine.substring(24); - } else if(headerLine.startsWith("Sec-WebSocket-Extensions: ")) { - // 26 = lenght of "Sec-WebSocket-Extensions: " - client->cExtensions = headerLine.substring(26); - } else if(headerLine.startsWith("Sec-WebSocket-Version: ")) { - // 23 = lenght of "Sec-WebSocket-Version: " - client->cVersion = headerLine.substring(23).toInt(); + } else { + DEBUG_WEBSOCKETS("[WS-Client][handleHeader] Header error (%s)\n", headerLine.c_str()); } } else { diff --git a/src/WebSocketsServer.cpp b/src/WebSocketsServer.cpp index b88217d..75affd7 100644 --- a/src/WebSocketsServer.cpp +++ b/src/WebSocketsServer.cpp @@ -402,31 +402,30 @@ void WebSocketsServer::handleHeader(WSclient_t * client) { if(headerLine.startsWith("GET ")) { // cut URL out client->cUrl = headerLine.substring(4, headerLine.indexOf(' ', 4)); - } else if(headerLine.startsWith("Connection: ")) { - // 12 = lenght of "Connection: " - if(headerLine.indexOf("Upgrade", 12)) { - client->cIsUpgrade = true; + } else if(headerLine.indexOf(':')) { + String headerName = headerLine.substring(0, headerLine.indexOf(':')); + String headerValue = headerLine.substring(headerLine.indexOf(':') + 2); + + if(headerName.equalsIgnoreCase("Connection")) { + if(headerValue.indexOf("Upgrade") >= 0) { + client->cIsUpgrade = true; + } + } else if(headerName.equalsIgnoreCase("Upgrade")) { + if(headerValue.equalsIgnoreCase("websocket")) { + client->cIsWebsocket = true; + } + } else if(headerName.equalsIgnoreCase("Sec-WebSocket-Version")) { + client->cVersion = headerValue.toInt(); + } else if(headerName.equalsIgnoreCase("Sec-WebSocket-Key")) { + client->cKey = headerValue; + client->cKey.trim(); // see rfc6455 + } else if(headerName.equalsIgnoreCase("Sec-WebSocket-Protocol")) { + client->cProtocol = headerValue; + } else if(headerName.equalsIgnoreCase("Sec-WebSocket-Extensions")) { + client->cExtensions = headerValue; } - } else if(headerLine.startsWith("Upgrade: ")) { - // 9 = lenght of "Upgrade: " - String low = headerLine.substring(9); - low.toLowerCase(); - if(low == "websocket") { - client->cIsWebsocket = true; - } - } else if(headerLine.startsWith("Sec-WebSocket-Version: ")) { - // 23 = lenght of "Sec-WebSocket-Version: " - client->cVersion = headerLine.substring(23).toInt(); - } else if(headerLine.startsWith("Sec-WebSocket-Key: ")) { - // 19 = lenght of "Sec-WebSocket-Key: " - client->cKey = headerLine.substring(19); - client->cKey.trim(); // see rfc6455 - } else if(headerLine.startsWith("Sec-WebSocket-Protocol: ")) { - // 24 = lenght of "Sec-WebSocket-Protocol: " - client->cProtocol = headerLine.substring(24); - } else if(headerLine.startsWith("Sec-WebSocket-Extensions: ")) { - // 26 = lenght of "Sec-WebSocket-Extensions: " - client->cExtensions = headerLine.substring(26); + } else { + DEBUG_WEBSOCKETS("[WS-Client][handleHeader] Header error (%s)\n", headerLine.c_str()); } } else {