diff --git a/Version/Hixie76.php b/Version/Hixie76.php index 069263a..8b0e2c4 100644 --- a/Version/Hixie76.php +++ b/Version/Hixie76.php @@ -23,7 +23,7 @@ class Hixie76 implements VersionInterface { * {@inheritdoc} */ public function isProtocol(RequestInterface $request) { - return !(null === $request->getHeader('Sec-WebSocket-Key2', true)); + return !(null === $request->getHeader('Sec-WebSocket-Key2')); } /** @@ -44,13 +44,13 @@ class Hixie76 implements VersionInterface { throw new \UnderflowException("Not enough data received to issue challenge response"); } - $challenge = $this->sign($request->getHeader('Sec-WebSocket-Key1', true), $request->getHeader('Sec-WebSocket-Key2', true), $body); + $challenge = $this->sign((string)$request->getHeader('Sec-WebSocket-Key1'), (string)$request->getHeader('Sec-WebSocket-Key2'), $body); $headers = array( 'Upgrade' => 'WebSocket' , 'Connection' => 'Upgrade' - , 'Sec-WebSocket-Origin' => $request->getHeader('Origin', true) - , 'Sec-WebSocket-Location' => 'ws://' . $request->getHeader('Host', true) . $request->getPath() + , 'Sec-WebSocket-Origin' => (string)$request->getHeader('Origin') + , 'Sec-WebSocket-Location' => 'ws://' . (string)$request->getHeader('Host') . $request->getPath() ); $response = new Response(101, $headers, $challenge); diff --git a/Version/HyBi10.php b/Version/HyBi10.php index 5d89078..70329c6 100644 --- a/Version/HyBi10.php +++ b/Version/HyBi10.php @@ -4,7 +4,7 @@ use Guzzle\Http\Message\RequestInterface; class HyBi10 extends RFC6455 { public function isProtocol(RequestInterface $request) { - $version = $request->hasHeader('Sec-WebSocket-Version') ? (int)$request->getHeader('Sec-WebSocket-Version', true) : -1; + $version = (int)(string)$request->getHeader('Sec-WebSocket-Version'); return ($version >= 6 && $version < 13); } diff --git a/Version/RFC6455.php b/Version/RFC6455.php index 22a96a0..23e166c 100644 --- a/Version/RFC6455.php +++ b/Version/RFC6455.php @@ -50,7 +50,7 @@ class RFC6455 implements VersionInterface { * {@inheritdoc} */ public function isProtocol(RequestInterface $request) { - $version = $request->hasHeader('Sec-WebSocket-Version') ? (int)$request->getHeader('Sec-WebSocket-Version', true) : -1; + $version = (int)(string)$request->getHeader('Sec-WebSocket-Version'); return ($this->getVersionNumber() === $version); } @@ -73,7 +73,7 @@ class RFC6455 implements VersionInterface { return new Response(101, array( 'Upgrade' => 'websocket' , 'Connection' => 'Upgrade' - , 'Sec-WebSocket-Accept' => $this->sign($request->getHeader('Sec-WebSocket-Key', true)) + , 'Sec-WebSocket-Accept' => $this->sign((string)$request->getHeader('Sec-WebSocket-Key')) )); } @@ -268,4 +268,4 @@ class RFC6455 implements VersionInterface { $this->closeCodes[Frame::CLOSE_SRV_ERR] = true; //$this->closeCodes[Frame::CLOSE_TLS] = true; } -} \ No newline at end of file +} diff --git a/Version/RFC6455/HandshakeVerifier.php b/Version/RFC6455/HandshakeVerifier.php index ea17d08..41057cc 100644 --- a/Version/RFC6455/HandshakeVerifier.php +++ b/Version/RFC6455/HandshakeVerifier.php @@ -19,10 +19,10 @@ class HandshakeVerifier { $passes += (int)$this->verifyMethod($request->getMethod()); $passes += (int)$this->verifyHTTPVersion($request->getProtocolVersion()); $passes += (int)$this->verifyRequestURI($request->getPath()); - $passes += (int)$this->verifyHost($request->getHeader('Host', true)); - $passes += (int)$this->verifyUpgradeRequest($request->getHeader('Upgrade', true)); - $passes += (int)$this->verifyConnection($request->getHeader('Connection', true)); - $passes += (int)$this->verifyKey($request->getHeader('Sec-WebSocket-Key', true)); + $passes += (int)$this->verifyHost((string)$request->getHeader('Host')); + $passes += (int)$this->verifyUpgradeRequest((string)$request->getHeader('Upgrade')); + $passes += (int)$this->verifyConnection((string)$request->getHeader('Connection')); + $passes += (int)$this->verifyKey((string)$request->getHeader('Sec-WebSocket-Key')); //$passes += (int)$this->verifyVersion($headers['Sec-WebSocket-Version']); // Temporarily breaking functionality return (7 === $passes); diff --git a/WsServer.php b/WsServer.php index 0373a14..460e328 100644 --- a/WsServer.php +++ b/WsServer.php @@ -111,8 +111,10 @@ class WsServer implements HttpServerInterface { return; } - if ('' !== ($agreedSubProtocols = $this->getSubProtocolString($conn->WebSocket->request->getTokenizedHeader('Sec-WebSocket-Protocol', ',')))) { - $response->setHeader('Sec-WebSocket-Protocol', $agreedSubProtocols); + if (null !== ($subHeader = $conn->WebSocket->request->getHeader('Sec-WebSocket-Protocol'))) { + if ('' !== ($agreedSubProtocols = $this->getSubProtocolString($subHeader->normalize()))) { + $response->setHeader('Sec-WebSocket-Protocol', $agreedSubProtocols); + } } $response->setHeader('X-Powered-By', \Ratchet\VERSION);