8000 Handle header name case Insensitive · robokoding/arduinoWebSockets@afe1a2b · GitHub
[go: up one dir, main page]

Skip to content

Commit afe1a2b

Browse files
committed
Handle header name case Insensitive
see RFC2616 and Links2004#8
1 parent aebdc46 commit afe1a2b

File tree

2 files changed

+46
-45
lines changed

2 files changed

+46
-45
lines changed

src/WebSocketsClient.cpp

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -317,28 +317,30 @@ void WebSocketsClient::handleHeader(WSclient_t * client) {
317317
if(headerLine.startsWith("HTTP/1.")) {
318318
// "HTTP/1.1 101 Switching Protocols"
319319
client->cCode = headerLine.substring(9, headerLine.indexOf(' ', 9)).toInt();
320-
} else if(headerLine == "Connection: Upgrade") {
321-
client->cIsUpgrade = true;
322-
} else if(headerLine.startsWith("Upgrade: ")) {
323-
// 9 = lenght of "Upgrade: "
324-
String low = headerLine.substring(9);
325-
low.toLowerCase();
326-
if(low == "websocket") {
327-
client->cIsWebsocket = true;
320+
} else if(headerLine.indexOf(':')) {
321+
String headerName = headerLine.substring(0, headerLine.indexOf(':'));
322+
String headerValue = headerLine.substring(headerLine.indexOf(':') + 2);
323+
324+
if(headerName.equalsIgnoreCase("Connection")) {
325+
if(headerValue.indexOf("Upgrade") >= 0) {
326+
client->cIsUpgrade = true;
327+
}
328+
} else if(headerName.equalsIgnoreCase("Upgrade")) {
329+
if(headerValue.equalsIgnoreCase("websocket")) {
330+
client->cIsWebsocket = true;
331+
}
332+
} else if(headerName.equalsIgnoreCase("Sec-WebSocket-Accept")) {
333+
client->cAccept = headerValue;
334+
client->cAccept.trim(); // see rfc6455
335+
} else if(headerName.equalsIgnoreCase("Sec-WebSocket-Protocol")) {
336+
client->cProtocol = headerValue;
337+
} else if(headerName.equalsIgnoreCase("Sec-WebSocket-Extensions")) {
338+
client->cExtensions = headerValue;
339+
} else if(headerName.equalsIgnoreCase("Sec-WebSocket-Version")) {
340+
client->cVersion = headerValue.toInt();
328341
}
329-
} else if(headerLine.startsWith("Sec-WebSocket-Accept: ")) {
330-
// 22 = lenght of "Sec-WebSocket-Accept: "
331-
client->cAccept = headerLine.substring(22);
332-
client->cAccept.trim(); // see rfc6455
333-
} else if(headerLine.startsWith("Sec-WebSocket-Protocol: ")) {
334-
// 24 = lenght of "Sec-WebSocket-Protocol: "
335-
client->cProtocol = headerLine.substring(24);
336-
} else if(headerLine.startsWith("Sec-WebSocket-Extensions: ")) {
337-
// 26 = lenght of "Sec-WebSocket-Extensions: "
338-
client->cExtensions = headerLine.substring(26);
339-
} else if(headerLine.startsWith("Sec-WebSocket-Version: ")) {
340-
// 23 = lenght of "Sec-WebSocket-Version: "
341-
client->cVersion = headerLine.substring(23).toInt();
342+
} else {
343+
DEBUG_WEBSOCKETS("[WS-Client][handleHeader] Header error (%s)\n", headerLine.c_str());
342344
}
343345

344346
} else {

src/WebSocketsServer.cpp

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -402,31 +402,30 @@ void WebSocketsServer::handleHeader(WSclient_t * client) {
402402
if(headerLine.startsWith("GET ")) {
403403
// cut URL out
404404
client->cUrl = headerLine.substring(4, headerLine.indexOf(' ', 4));
405-
} else if(headerLine.startsWith("Connection: ")) {
406-
// 12 = lenght of "Connection: "
407-
if(headerLine.indexOf("Upgrade", 12)) {
408-
client->cIsUpgrade = true;
409-
}
410-
} else if(headerLine.startsWith("Upgrade: ")) {
411-
// 9 = lenght of "Upgrade: "
412-
String low = headerLine.substring(9);
413-
low.toLowerCase();
414-
if(low == "websocket") {
415-
client->cIsWebsocket = true;
405+
} else if(headerLine.indexOf(':')) {
406+
String headerName = headerLine.substring(0, headerLine.indexOf(':'));
407+
String headerValue = headerLine.substring(headerLine.indexOf(':') + 2);
408+
409+
if(headerName.equalsIgnoreCase("Connection")) {
410+
if(headerValue.indexOf("Upgrade") >= 0) {
411+
client->cIsUpgrade = true;
412+
}
413+
} else if(headerName.equalsIgnoreCase("Upgrade")) {
414+
if(headerValue.equalsIgnoreCase("websocket")) {
415+
client->cIsWebsocket = true;
416+
}
417+
} else if(headerName.equalsIgnoreCase("Sec-WebSocket-Version")) {
418+
client->cVersion = headerValue.toInt();
419+
} else if(headerName.equalsIgnoreCase("Sec-WebSocket-Key")) {
420+
client->cKey = headerValue;
421+
client->cKey.trim(); // see rfc6455
422+
} else if(headerName.equalsIgnoreCase("Sec-WebSocket-Protocol")) {
423+
client->cProtocol = headerValue;
424+
} else if(headerName.equalsIgnoreCase("Sec-WebSocket-Extensions")) {
425+
client->cExtensions = headerValue;
416426
}
417-
} else if(headerLine.startsWith("Sec-WebSocket-Version: ")) {
418-
// 23 = lenght of "Sec-WebSocket-Version: "
419-
client->cVersion = headerLine.substring(23).toInt();
420-
} else if(headerLine.startsWith("Sec-WebSocket-Key: ")) {
421-
// 19 = lenght of "Sec-WebSocket-Key: "
422-
client->cKey = headerLine.substring(19);
423-
client->cKey.trim(); // see rfc6455
424-
} else if(headerLine.startsWith("Sec-WebSocket-Protocol: ")) {
425-
// 24 = lenght of "Sec-WebSocket-Protocol: "
426-
client->cProtocol = headerLine.substring(24);
427-
} else if(headerLine.startsWith("Sec-WebSocket-Extensions: ")) {
428-
// 26 = lenght of "Sec-WebSocket-Extensions: "
429-
client->cExtensions = headerLine.substring(26);
427+
} else {
428+
DEBUG_WEBSOCKETS("[WS-Client][handleHeader] Header error (%s)\n", headerLine.c_str());
430429
}
431430

432431
} else {

0 commit comments

Comments
 (0)
0