| 488 | } |
| 489 | |
| 490 | Result HttpWebSocketHandshake::validateClientResponse(const HttpWebSocketClientHandshakeResponseView& response, |
| 491 | StringSpan expectedClientKey) |
| 492 | { |
| 493 | SC_TRY_MSG(response.statusCode == 101, "HttpWebSocketHandshake expected 101 Switching Protocols"); |
| 494 | SC_TRY_MSG(scHttpWebSocketEqualsIgnoreCase(scHttpWebSocketTrim(response.upgrade), "websocket"), |
| 495 | "HttpWebSocketHandshake response Upgrade header invalid"); |
| 496 | SC_TRY_MSG(headerContainsToken(response.connection, "Upgrade"), |
| 497 | "HttpWebSocketHandshake response Connection header invalid"); |
| 498 | |
| 499 | char acceptStorage[AcceptKeyLength] = {0}; |
| 500 | StringSpan expectedAccept; |
| 501 | SC_TRY(computeAccept(expectedClientKey, acceptStorage, expectedAccept)); |
| 502 | SC_TRY_MSG(scHttpWebSocketEqualsIgnoreCase(scHttpWebSocketTrim(response.secWebSocketAccept), expectedAccept), |
| 503 | "HttpWebSocketHandshake response Sec-WebSocket-Accept invalid"); |
| 504 | return Result(true); |
| 505 | } |
| 506 | |
| 507 | Result HttpWebSocketHandshake::validateClientResponse(const HttpAsyncClientResponse& response, |
| 508 | StringSpan expectedClientKey) |
nothing calls this directly
no test coverage detected