mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2026-10-09 16:52:52 +07:00
Ignore a subprotocol the WebSocket client did not offer
A SubProtocolSelector could return a value outside the client's Sec-WebSocket-Protocol list, and the server sent it back as is. The server now treats such a value as no selection.
This commit is contained in:
@@ -24061,6 +24061,18 @@ protected:
|
||||
}
|
||||
return "";
|
||||
});
|
||||
|
||||
server_->WebSocket(
|
||||
"/ws-subprotocol-unoffered",
|
||||
[](const Request &, ws::WebSocket &ws) {
|
||||
std::string msg;
|
||||
while (ws.read(msg)) {
|
||||
ws.send(msg);
|
||||
}
|
||||
},
|
||||
[](const std::vector<std::string> &) -> std::string {
|
||||
return "admin";
|
||||
});
|
||||
}
|
||||
|
||||
void start_server() {
|
||||
@@ -24403,6 +24415,18 @@ TEST_F(WebSocketIntegrationTest, SubProtocolNoMatch) {
|
||||
client.close();
|
||||
}
|
||||
|
||||
TEST_F(WebSocketIntegrationTest, SubProtocolSelectorReturnsUnoffered) {
|
||||
Headers headers = {{"Sec-WebSocket-Protocol", "chat"}};
|
||||
ws::WebSocketClient client("ws://localhost:" + std::to_string(port_) +
|
||||
"/ws-subprotocol-unoffered",
|
||||
headers);
|
||||
ASSERT_TRUE(client.connect());
|
||||
|
||||
EXPECT_TRUE(client.subprotocol().empty());
|
||||
|
||||
client.close();
|
||||
}
|
||||
|
||||
TEST_F(WebSocketIntegrationTest, SubProtocolNotRequested) {
|
||||
// Connect without requesting any subprotocol
|
||||
ws::WebSocketClient client("ws://localhost:" + std::to_string(port_) +
|
||||
|
||||
Reference in New Issue
Block a user