Handle header name case Insensitive

see RFC2616 and #8
This commit is contained in:
Markus Sattler
2015-07-26 11:08:02 +02:00
parent aebdc46337
commit afe1a2b9d3
2 changed files with 46 additions and 45 deletions

View File

@ -317,28 +317,30 @@ void WebSocketsClient::handleHeader(WSclient_t * client) {
if(headerLine.startsWith("HTTP/1.")) { if(headerLine.startsWith("HTTP/1.")) {
// "HTTP/1.1 101 Switching Protocols" // "HTTP/1.1 101 Switching Protocols"
client->cCode = headerLine.substring(9, headerLine.indexOf(' ', 9)).toInt(); client->cCode = headerLine.substring(9, headerLine.indexOf(' ', 9)).toInt();
} else if(headerLine == "Connection: Upgrade") { } else if(headerLine.indexOf(':')) {
client->cIsUpgrade = true; String headerName = headerLine.substring(0, headerLine.indexOf(':'));
} else if(headerLine.startsWith("Upgrade: ")) { String headerValue = headerLine.substring(headerLine.indexOf(':') + 2);
// 9 = lenght of "Upgrade: "
String low = headerLine.substring(9); if(headerName.equalsIgnoreCase("Connection")) {
low.toLowerCase(); if(headerValue.indexOf("Upgrade") >= 0) {
if(low == "websocket") { client->cIsUpgrade = true;
client->cIsWebsocket = 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: ")) { } else {
// 22 = lenght of "Sec-WebSocket-Accept: " DEBUG_WEBSOCKETS("[WS-Client][handleHeader] Header error (%s)\n", headerLine.c_str());
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 { } else {

View File

@ -402,31 +402,30 @@ void WebSocketsServer::handleHeader(WSclient_t * client) {
if(headerLine.startsWith("GET ")) { if(headerLine.startsWith("GET ")) {
// cut URL out // cut URL out
client->cUrl = headerLine.substring(4, headerLine.indexOf(' ', 4)); client->cUrl = headerLine.substring(4, headerLine.indexOf(' ', 4));
} else if(headerLine.startsWith("Connection: ")) { } else if(headerLine.indexOf(':')) {
// 12 = lenght of "Connection: " String headerName = headerLine.substring(0, headerLine.indexOf(':'));
if(headerLine.indexOf("Upgrade", 12)) { String headerValue = headerLine.substring(headerLine.indexOf(':') + 2);
client->cIsUpgrade = true;
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: ")) { } else {
// 9 = lenght of "Upgrade: " DEBUG_WEBSOCKETS("[WS-Client][handleHeader] Header error (%s)\n", headerLine.c_str());
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 { } else {