Skip to content

Commit a8217fb

Browse files
committed
Allow a comma separated upgrade header
The upgrade header might be comma separated and FlashMQ shouldn't refuse to upgrade in such a case. This splits and trims the upgrade header first. In our case the header is actually send by accident. It used to be: Upgrade: websocket\r\n Upgrade: websocket\r\n But newer nginx proxies transform that into: Upgrade: websocket, websocket\r\n And hence a websocket connection could no longer be established.
1 parent 1d377aa commit a8217fb

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

utils.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -315,9 +315,18 @@ bool parseHttpHeader(CirBuf &buf, std::string &websocket_key, int &websocket_ver
315315
trim(value);
316316
std::string value_lower = str_tolower(value);
317317

318-
if (name == "upgrade" && value_lower == "websocket")
319-
upgradeHeaderSeen = true;
320-
else if (name == "connection" && strContains(value_lower, "upgrade"))
318+
if (name == "upgrade") {
319+
std::vector<std::string> protocols = splitToVector(value_lower, ',');
320+
for(std::string &prot : protocols)
321+
{
322+
trim(prot);
323+
324+
if (prot == "websocket")
325+
{
326+
upgradeHeaderSeen = true;
327+
}
328+
}
329+
} else if (name == "connection" && strContains(value_lower, "upgrade"))
321330
connectionHeaderSeen = true;
322331
else if (name == "sec-websocket-key")
323332
websocket_key = value;

0 commit comments

Comments
 (0)