diff --git a/src/Ratchet/Component/WebSocket/Version/Hixie76.php b/src/Ratchet/Component/WebSocket/Version/Hixie76.php index c4f081e..e2034d8 100644 --- a/src/Ratchet/Component/WebSocket/Version/Hixie76.php +++ b/src/Ratchet/Component/WebSocket/Version/Hixie76.php @@ -34,7 +34,10 @@ class Hixie76 implements VersionInterface { , 'Sec-WebSocket-Location' => 'ws://' . $request->getHeader('Host') . $request->getPath() ); - return new \Guzzle\Http\Message\Response('101', $headers, $body); + $response = new \Guzzle\Http\Message\Response('101', $headers, $body); + $response->setStatus('101', 'WebSocket Protocol Handshake'); + + return $response; } public function newMessage() { diff --git a/src/Ratchet/Component/WebSocket/Version/RFC6455.php b/src/Ratchet/Component/WebSocket/Version/RFC6455.php index 6734198..9d3c82d 100644 --- a/src/Ratchet/Component/WebSocket/Version/RFC6455.php +++ b/src/Ratchet/Component/WebSocket/Version/RFC6455.php @@ -40,13 +40,9 @@ class RFC6455 implements VersionInterface { , 'Connection' => 'Upgrade' , 'Sec-WebSocket-Accept' => $this->sign($request->getHeader('Sec-WebSocket-Key')) ); - - - $response = new \Guzzle\Http\Message\Response(101, $headers); - return $response; - - - } + + return new \Guzzle\Http\Message\Response('101', $headers); + } /** * @return RFC6455\Message @@ -81,8 +77,8 @@ class RFC6455 implements VersionInterface { switch($type) { case 'text': // first byte indicates FIN, Text-Frame (10000001): - $frameHead[0] = 129; - break; + $frameHead[0] = 129; + break; case 'close': // first byte indicates FIN, Close Frame(10001000): @@ -100,7 +96,7 @@ class RFC6455 implements VersionInterface { break; } - // set mask and payload length (using 1, 3 or 9 bytes) + // set mask and payload length (using 1, 3 or 9 bytes) if($payloadLength > 65535) { $payloadLengthBin = str_split(sprintf('%064b', $payloadLength), 8); $frameHead[1] = ($masked === true) ? 255 : 127; @@ -131,13 +127,13 @@ class RFC6455 implements VersionInterface { $mask[$i] = chr(rand(0, 255)); } - $frameHead = array_merge($frameHead, $mask); - } + $frameHead = array_merge($frameHead, $mask); + } $frame = implode('', $frameHead); // append payload to frame: $framePayload = array(); - for($i = 0; $i < $payloadLength; $i++) { + for($i = 0; $i < $payloadLength; $i++) { $frame .= ($masked === true) ? $payload[$i] ^ $mask[$i % 4] : $payload[$i]; } diff --git a/src/Ratchet/Component/WebSocket/WebSocketComponent.php b/src/Ratchet/Component/WebSocket/WebSocketComponent.php index 192894c..b4775a0 100644 --- a/src/Ratchet/Component/WebSocket/WebSocketComponent.php +++ b/src/Ratchet/Component/WebSocket/WebSocketComponent.php @@ -78,28 +78,22 @@ class WebSocketComponent implements MessageComponentInterface { $response = $from->WebSocket->version->handshake($from->WebSocket->headers); $from->WebSocket->handshake = true; - - - - // This block is to be moved/changed later - + + // This block is to be moved/changed later $agreed_protocols = array(); - $requested_protocols = $from->WebSocket->headers->getTokenizedHeader('Sec-WebSocket-Protocol', ','); - - foreach ($this->accepted_subprotocols as $sub_protocol) { - if (false !== $requested_protocols->hasValue($sub_protocol)) { + + foreach ($this->accepted_subprotocols as $sub_protocol) { + if (null !== $requested_protocols && false !== $requested_protocols->hasValue($sub_protocol)) { $agreed_protocols[] = $sub_protocol; } } - + if (count($agreed_protocols) > 0) { - - // $response['Sec-WebSocket-Protocol'] = implode(',', $agreed_protocols); $response->setHeader('Sec-WebSocket-Protocol', implode(',', $agreed_protocols)); } $header = (string)$response; - + $comp = $this->_factory->newComposite(); $comp->enqueue($this->_factory->newCommand('SendMessage', $from)->setMessage($header)); $comp->enqueue($this->prepareCommand($this->_decorating->onOpen($from, $msg))); // Need to send headers/handshake to application, let it have the cookies, etc @@ -176,7 +170,7 @@ class WebSocketComponent implements MessageComponentInterface { $hash = md5($command->getMessage()) . '-' . spl_object_hash($version); if (!isset($cache[$hash])) { - $cache[$hash] = $version->frame($command->getMessage(), $this->_mask_payload); + $cache[$hash] = $version->frame($command->getMessage(), $this->_mask_payload); } return $command->setMessage($cache[$hash]);