From 1404a540b29bea6cf9b28bd9cc937c467aa49ef3 Mon Sep 17 00:00:00 2001 From: Kurt Pattyn Date: Sat, 10 Aug 2013 17:28:26 +0200 Subject: Changed parsing of connection header; connection header can contain multiple items. --- source/handshakerequest.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/source/handshakerequest.cpp b/source/handshakerequest.cpp index a87312e..e90e8e5 100644 --- a/source/handshakerequest.cpp +++ b/source/handshakerequest.cpp @@ -5,7 +5,6 @@ #include #include #include - #include "websocketprotocol.h" HandshakeRequest::HandshakeRequest(int port, bool isSecure) : @@ -146,7 +145,13 @@ QTextStream &HandshakeRequest::readFromStream(QTextStream &textStream) qStableSort(m_versions.begin(), m_versions.end(), qGreater()); //sort in descending order m_key = m_headers.value("Sec-WebSocket-Key", ""); QString upgrade = m_headers.value("Upgrade", ""); //must be equal to "websocket", case-insensitive - QString connection = m_headers.value("Connection", ""); //must be equal to "Upgrade", case-insensitive + QString connection = m_headers.value("Connection", ""); //must contain "Upgrade", case-insensitive + QStringList connectionLine = connection.split(",", QString::SkipEmptyParts); + QStringList connectionValues; + Q_FOREACH(QString connection, connectionLine) + { + connectionValues << connection.trimmed(); + } //optional headers m_origin = m_headers.value("Sec-WebSocket-Origin", ""); @@ -177,7 +182,8 @@ QTextStream &HandshakeRequest::readFromStream(QTextStream &textStream) (verb != "GET") || (httpProtocol != "HTTP/1.1") || (upgrade.toLower() != "websocket") || - (connection.toLower() != "upgrade")); + (!connectionValues.contains("upgrade", Qt::CaseInsensitive))); + //(connection.toLower() != "upgrade")); } return textStream; } -- cgit v1.2.1