From 6140c94a339294d5841446bbeea4055082521f2f Mon Sep 17 00:00:00 2001 From: Chris Boden Date: Sun, 31 Mar 2013 11:50:39 -0400 Subject: [PATCH] Cleanup --- CHANGELOG.md | 4 + src/Ratchet/WebSocket/Version/Hixie76.php | 2 +- src/Ratchet/WebSocket/WsServer.php | 92 +++++++++++------------ 3 files changed, 51 insertions(+), 47 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a662e9e..e5c3691 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ CHANGELOG --- +* 0.2.5 (2013-??-??) + + * Fixed Hixie-76 handshake bug + * 0.2.4 (2013-03-09) * Support for Symfony 2.2 and Guzzle 2.3 diff --git a/src/Ratchet/WebSocket/Version/Hixie76.php b/src/Ratchet/WebSocket/Version/Hixie76.php index 4043519..ab34925 100644 --- a/src/Ratchet/WebSocket/Version/Hixie76.php +++ b/src/Ratchet/WebSocket/Version/Hixie76.php @@ -39,7 +39,7 @@ class Hixie76 implements VersionInterface { * @throws \UnderflowException If there hasn't been enough data received */ public function handshake(RequestInterface $request) { - $body = substr($request->getBody(), 0, 8); + $body = substr($request->getBody(), 0, 8); if (8 !== strlen($body)) { throw new \UnderflowException("Not enough data received to issue challenge response"); } diff --git a/src/Ratchet/WebSocket/WsServer.php b/src/Ratchet/WebSocket/WsServer.php index 344e520..281f16c 100644 --- a/src/Ratchet/WebSocket/WsServer.php +++ b/src/Ratchet/WebSocket/WsServer.php @@ -88,54 +88,54 @@ class WsServer implements MessageComponentInterface { * {@inheritdoc} */ public function onMessage(ConnectionInterface $from, $msg) { - if (true !== $from->WebSocket->established) { - if (isset($from->WebSocket->request)) { - $from->WebSocket->request->getBody()->write($msg); - } else { - try { - if (null === ($request = $this->reqParser->onMessage($from, $msg))) { - return; - } - } catch (\OverflowException $oe) { - return $this->close($from, 413); - } - - if (!$this->versioner->isVersionEnabled($request)) { - return $this->close($from); - } - - $from->WebSocket->request = $request; - $from->WebSocket->version = $this->versioner->getVersion($request); - } - - try { - $response = $from->WebSocket->version->handshake($from->WebSocket->request); - } catch (\UnderflowException $e) { - return; - } - $response->setHeader('X-Powered-By', \Ratchet\VERSION); - - // This needs to be refactored later on, incorporated with routing - if ('' !== ($agreedSubProtocols = $this->getSubProtocolString($from->WebSocket->request->getTokenizedHeader('Sec-WebSocket-Protocol', ',')))) { - $response->setHeader('Sec-WebSocket-Protocol', $agreedSubProtocols); - } - - $from->send((string)$response); - - if (101 != $response->getStatusCode()) { - return $from->close(); - } - - $upgraded = $from->WebSocket->version->upgradeConnection($from, $this->_decorating); - - $this->connections->attach($from, $upgraded); - - $upgraded->WebSocket->established = true; - - return $this->_decorating->onOpen($upgraded); + if (true === $from->WebSocket->established) { + return $from->WebSocket->version->onMessage($this->connections[$from], $msg); } - $from->WebSocket->version->onMessage($this->connections[$from], $msg); + if (isset($from->WebSocket->request)) { + $from->WebSocket->request->getBody()->write($msg); + } else { + try { + if (null === ($request = $this->reqParser->onMessage($from, $msg))) { + return; + } + } catch (\OverflowException $oe) { + return $this->close($from, 413); + } + + if (!$this->versioner->isVersionEnabled($request)) { + return $this->close($from); + } + + $from->WebSocket->request = $request; + $from->WebSocket->version = $this->versioner->getVersion($request); + } + + try { + $response = $from->WebSocket->version->handshake($from->WebSocket->request); + } catch (\UnderflowException $e) { + return; + } + + // This needs to be refactored later on, incorporated with routing + if ('' !== ($agreedSubProtocols = $this->getSubProtocolString($from->WebSocket->request->getTokenizedHeader('Sec-WebSocket-Protocol', ',')))) { + $response->setHeader('Sec-WebSocket-Protocol', $agreedSubProtocols); + } + + $response->setHeader('X-Powered-By', \Ratchet\VERSION); + $from->send((string)$response); + + if (101 != $response->getStatusCode()) { + return $from->close(); + } + + $upgraded = $from->WebSocket->version->upgradeConnection($from, $this->_decorating); + + $this->connections->attach($from, $upgraded); + + $upgraded->WebSocket->established = true; + + return $this->_decorating->onOpen($upgraded); } /**