Check the response headers more thoroughly

This commit is contained in:
JCash 2020-10-12 09:45:05 +02:00
parent 40ba1b334c
commit 5b0a9960a8

View File

@ -191,7 +191,8 @@ Result VerifyHeaders(WebsocketConnection* conn)
r = strstr(r, "\r\n") + 2; r = strstr(r, "\r\n") + 2;
bool upgraded = false; bool connection = false;
bool upgrade = false;
bool valid_key = false; bool valid_key = false;
const char* protocol = ""; const char* protocol = "";
@ -212,8 +213,11 @@ Result VerifyHeaders(WebsocketConnection* conn)
*r = 0; *r = 0;
r += 2; r += 2;
// Page 18 in https://tools.ietf.org/html/rfc6455#section-11.3.3
if (dmStriCmp(key, "Connection") == 0 && dmStriCmp(value, "Upgrade") == 0) if (dmStriCmp(key, "Connection") == 0 && dmStriCmp(value, "Upgrade") == 0)
upgraded = true; connection = true;
else if (dmStriCmp(key, "Upgrade") == 0 && dmStriCmp(value, "websocket") == 0)
upgrade = true;
else if (dmStriCmp(key, "Sec-WebSocket-Accept") == 0) else if (dmStriCmp(key, "Sec-WebSocket-Accept") == 0)
{ {
uint8_t client_key[32 + 40]; uint8_t client_key[32 + 40];
@ -255,16 +259,19 @@ Result VerifyHeaders(WebsocketConnection* conn)
conn->m_Buffer[size] = 0; conn->m_Buffer[size] = 0;
conn->m_HasHandshakeData = conn->m_BufferSize != 0 ? 1 : 0; conn->m_HasHandshakeData = conn->m_BufferSize != 0 ? 1 : 0;
if (!upgraded) if (!connection)
dmLogError("Failed to find the Connection keyword in the response headers");
if (!upgrade)
dmLogError("Failed to find the Upgrade keyword in the response headers"); dmLogError("Failed to find the Upgrade keyword in the response headers");
if (!valid_key) if (!valid_key)
dmLogError("Failed to find valid key in the response headers"); dmLogError("Failed to find valid key in the response headers");
if (!(upgraded && valid_key)) { bool ok = connection && upgrade && valid_key;
if (!ok) {
dmLogError("Response:\n\"%s\"\n", conn->m_Buffer); dmLogError("Response:\n\"%s\"\n", conn->m_Buffer);
} }
return (upgraded && valid_key) ? RESULT_OK : RESULT_HANDSHAKE_FAILED; return ok ? RESULT_OK : RESULT_HANDSHAKE_FAILED;
} }
#endif #endif