diff --git a/src/Ratchet/Http/NoOpHttpServerController.php b/src/Ratchet/Http/NoOpHttpServerController.php new file mode 100644 index 0000000..4f72e66 --- /dev/null +++ b/src/Ratchet/Http/NoOpHttpServerController.php @@ -0,0 +1,18 @@ +_matcher = $matcher; + $this->_noopController = new NoOpHttpServerController; } /** @@ -28,6 +31,8 @@ class Router implements HttpServerInterface { throw new \UnexpectedValueException('$request can not be null'); } + $conn->controller = $this->_noopController; + $uri = $request->getUri(); $context = $this->_matcher->getContext(); @@ -67,14 +72,14 @@ class Router implements HttpServerInterface { /** * {@inheritdoc} */ - function onMessage(ConnectionInterface $from, $msg) { + public function onMessage(ConnectionInterface $from, $msg) { $from->controller->onMessage($from, $msg); } /** * {@inheritdoc} */ - function onClose(ConnectionInterface $conn) { + public function onClose(ConnectionInterface $conn) { if (isset($conn->controller)) { $conn->controller->onClose($conn); } @@ -83,7 +88,7 @@ class Router implements HttpServerInterface { /** * {@inheritdoc} */ - function onError(ConnectionInterface $conn, \Exception $e) { + public function onError(ConnectionInterface $conn, \Exception $e) { if (isset($conn->controller)) { $conn->controller->onError($conn, $e); } diff --git a/tests/unit/Http/RouterTest.php b/tests/unit/Http/RouterTest.php index e924aa1..1ca4cbc 100644 --- a/tests/unit/Http/RouterTest.php +++ b/tests/unit/Http/RouterTest.php @@ -3,6 +3,10 @@ namespace Ratchet\Http; use Ratchet\WebSocket\WsServerInterface; use Symfony\Component\Routing\Exception\ResourceNotFoundException; use Symfony\Component\Routing\Matcher\UrlMatcherInterface; +use Symfony\Component\Routing\RequestContext; +use Symfony\Component\Routing\RouteCollection; +use Symfony\Component\Routing\Matcher\UrlMatcher; + /** * @covers Ratchet\Http\Router @@ -142,4 +146,20 @@ class RouterTest extends \PHPUnit_Framework_TestCase { $this->assertEquals('ws', $request->getUri()->getScheme()); $this->assertEquals('doesnt.matter', $request->getUri()->getHost()); } + + public function testImpatientClientOverflow() { + $this->_conn->expects($this->once())->method('close'); + + $header = "GET /nope HTTP/1.1 +Upgrade: websocket +Connection: upgrade +Host: localhost +Origin: http://localhost +Sec-WebSocket-Version: 13\r\n\r\n"; + + $app = new HttpServer(new Router(new UrlMatcher(new RouteCollection, new RequestContext))); + $app->onOpen($this->_conn); + $app->onMessage($this->_conn, $header); + $app->onMessage($this->_conn, 'Silly body'); + } }