From 4170822f05bf645fc4e3663cec08ef56430a3e32 Mon Sep 17 00:00:00 2001 From: Matt Bonneau Date: Mon, 25 Apr 2016 18:37:51 -0400 Subject: [PATCH 01/12] Unmask close frame before echoing to client Fixes #420 --- src/Ratchet/WebSocket/Version/RFC6455.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Ratchet/WebSocket/Version/RFC6455.php b/src/Ratchet/WebSocket/Version/RFC6455.php index 23e166c..fe37acb 100644 --- a/src/Ratchet/WebSocket/Version/RFC6455.php +++ b/src/Ratchet/WebSocket/Version/RFC6455.php @@ -154,6 +154,8 @@ class RFC6455 implements VersionInterface { return $from->close($frame::CLOSE_BAD_PAYLOAD); } + $frame->unMaskPayload(); + return $from->close($frame); break; case $frame::OP_PING: From ecbbdbe0294dc3b3e9cf0da0674469fc5815fc2e Mon Sep 17 00:00:00 2001 From: Yurist-85 Date: Thu, 12 May 2016 17:26:37 +0700 Subject: [PATCH 02/12] Session serialize method implementation. PhpHandler:serialize: Simply reverse behaviour of 'PhpHandler:unserialize' method. --- src/Ratchet/Session/Serialize/PhpHandler.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Ratchet/Session/Serialize/PhpHandler.php b/src/Ratchet/Session/Serialize/PhpHandler.php index 8fb5308..cbf46c8 100644 --- a/src/Ratchet/Session/Serialize/PhpHandler.php +++ b/src/Ratchet/Session/Serialize/PhpHandler.php @@ -3,10 +3,21 @@ namespace Ratchet\Session\Serialize; class PhpHandler implements HandlerInterface { /** + * Simply reverse behaviour of unserialize method. * {@inheritdoc} */ function serialize(array $data) { - throw new \RuntimeException("Serialize PhpHandler:serialize code not written yet, write me!"); + $preSerialized = []; + $serialized = ''; + + if (count($data)) { + foreach ($data as $bucket => $bucketData) { + $preSerialized[] = $bucket . '|' . serialize($bucketData); + } + $serialized = implode('',$preSerialized); + } + + return $serialized; } /** From 1028c03235f607d0f55c37efdeab061c5305c3b4 Mon Sep 17 00:00:00 2001 From: Yurist-85 Date: Thu, 12 May 2016 17:41:32 +0700 Subject: [PATCH 03/12] Create array in old manner (PHP 5.3) --- src/Ratchet/Session/Serialize/PhpHandler.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ratchet/Session/Serialize/PhpHandler.php b/src/Ratchet/Session/Serialize/PhpHandler.php index cbf46c8..3420094 100644 --- a/src/Ratchet/Session/Serialize/PhpHandler.php +++ b/src/Ratchet/Session/Serialize/PhpHandler.php @@ -7,7 +7,7 @@ class PhpHandler implements HandlerInterface { * {@inheritdoc} */ function serialize(array $data) { - $preSerialized = []; + $preSerialized = array(); $serialized = ''; if (count($data)) { From f5e8a1834187745a50b9b5d88d21c8adb1d6baaf Mon Sep 17 00:00:00 2001 From: Chris Boden Date: Wed, 25 May 2016 08:44:41 -0400 Subject: [PATCH 04/12] Added unit tests for serialize, formatting --- src/Ratchet/Session/Serialize/PhpHandler.php | 6 +++--- tests/unit/Session/Serialize/PhpHandlerTest.php | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Ratchet/Session/Serialize/PhpHandler.php b/src/Ratchet/Session/Serialize/PhpHandler.php index 3420094..b1df356 100644 --- a/src/Ratchet/Session/Serialize/PhpHandler.php +++ b/src/Ratchet/Session/Serialize/PhpHandler.php @@ -9,14 +9,14 @@ class PhpHandler implements HandlerInterface { function serialize(array $data) { $preSerialized = array(); $serialized = ''; - + if (count($data)) { foreach ($data as $bucket => $bucketData) { $preSerialized[] = $bucket . '|' . serialize($bucketData); } - $serialized = implode('',$preSerialized); + $serialized = implode('', $preSerialized); } - + return $serialized; } diff --git a/tests/unit/Session/Serialize/PhpHandlerTest.php b/tests/unit/Session/Serialize/PhpHandlerTest.php index 4dddee9..4acf5bc 100644 --- a/tests/unit/Session/Serialize/PhpHandlerTest.php +++ b/tests/unit/Session/Serialize/PhpHandlerTest.php @@ -33,4 +33,11 @@ class PhpHandlerTest extends \PHPUnit_Framework_TestCase { public function testUnserialize($in, $expected) { $this->assertEquals($expected, $this->_handler->unserialize($in)); } + + /** + * @dataProvider serializedProvider + */ + public function testSerialize($serialized, $original) { + $this->assertEquals($serialized, $this->_handler->serialize($original)); + } } From b5ccecad9390db85d2c8df7cbeb047292fbbf4b8 Mon Sep 17 00:00:00 2001 From: Chris Boden Date: Wed, 25 May 2016 08:55:03 -0400 Subject: [PATCH 05/12] v0.3.5 prep --- CHANGELOG.md | 5 +++++ src/Ratchet/ConnectionInterface.php | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ee7f13..5d7073b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,11 @@ CHANGELOG --- +* 0.3.5 (2016-05-25) + + * BF: Unmask responding close frame + * Added write handler for PHP session serializer + * 0.3.4 (2015-12-23) * BF: Edge case where version check wasn't run on message coalesce diff --git a/src/Ratchet/ConnectionInterface.php b/src/Ratchet/ConnectionInterface.php index 5c07a2d..882774e 100644 --- a/src/Ratchet/ConnectionInterface.php +++ b/src/Ratchet/ConnectionInterface.php @@ -5,7 +5,7 @@ namespace Ratchet; * The version of Ratchet being used * @var string */ -const VERSION = 'Ratchet/0.3.4'; +const VERSION = 'Ratchet/0.3.5'; /** * A proxy object representing a connection to the application From 5eb1dfa98db73f7b6c40abf705c19ba472f9f369 Mon Sep 17 00:00:00 2001 From: samizdam Date: Thu, 10 Nov 2016 21:05:00 +0300 Subject: [PATCH 06/12] Use 403 status code on MethodNotAllowedException. --- src/Ratchet/Http/Router.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ratchet/Http/Router.php b/src/Ratchet/Http/Router.php index bfc8193..2cfc5bf 100644 --- a/src/Ratchet/Http/Router.php +++ b/src/Ratchet/Http/Router.php @@ -34,7 +34,7 @@ class Router implements HttpServerInterface { try { $route = $this->_matcher->match($request->getPath()); } catch (MethodNotAllowedException $nae) { - return $this->close($conn, 403); + return $this->close($conn, 405); } catch (ResourceNotFoundException $nfe) { return $this->close($conn, 404); } From 7215ffe9e630978b73fe5d9f9bba47b29b14334b Mon Sep 17 00:00:00 2001 From: samizdam Date: Thu, 17 Nov 2016 19:42:22 +0300 Subject: [PATCH 07/12] Send additional headers on close connection in Router. --- src/Ratchet/Http/Router.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Ratchet/Http/Router.php b/src/Ratchet/Http/Router.php index 2cfc5bf..e4aa790 100644 --- a/src/Ratchet/Http/Router.php +++ b/src/Ratchet/Http/Router.php @@ -34,7 +34,7 @@ class Router implements HttpServerInterface { try { $route = $this->_matcher->match($request->getPath()); } catch (MethodNotAllowedException $nae) { - return $this->close($conn, 405); + return $this->close($conn, 405, array('Allow' => $nae->getAllowedMethods())); } catch (ResourceNotFoundException $nfe) { return $this->close($conn, 404); } @@ -91,13 +91,15 @@ class Router implements HttpServerInterface { /** * Close a connection with an HTTP response * @param \Ratchet\ConnectionInterface $conn - * @param int $code HTTP status code + * @param int $code HTTP status code + * @param array $additionalHeaders * @return null */ - protected function close(ConnectionInterface $conn, $code = 400) { - $response = new Response($code, array( + protected function close(ConnectionInterface $conn, $code = 400, array $additionalHeaders = array()) { + $headers = array_merge(array( 'X-Powered-By' => \Ratchet\VERSION - )); + ), $additionalHeaders); + $response = new Response($code, $headers); $conn->send((string)$response); $conn->close(); From 56c07ce4b8310d8df1244350f93fdc21b32e4e6f Mon Sep 17 00:00:00 2001 From: samizdam Date: Fri, 25 Nov 2016 20:59:11 +0300 Subject: [PATCH 08/12] Factory new Request Url from url, instead path only: keep original request host, scheme, etc. --- src/Ratchet/Http/Router.php | 2 +- tests/unit/Http/RouterTest.php | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Ratchet/Http/Router.php b/src/Ratchet/Http/Router.php index bfc8193..ae52e0a 100644 --- a/src/Ratchet/Http/Router.php +++ b/src/Ratchet/Http/Router.php @@ -55,7 +55,7 @@ class Router implements HttpServerInterface { } $parameters = array_merge($parameters, $request->getQuery()->getAll()); - $url = Url::factory($request->getPath()); + $url = Url::factory($request->getUrl()); $url->setQuery($parameters); $request->setUrl($url); diff --git a/tests/unit/Http/RouterTest.php b/tests/unit/Http/RouterTest.php index 5a1128e..2b07cf7 100644 --- a/tests/unit/Http/RouterTest.php +++ b/tests/unit/Http/RouterTest.php @@ -127,6 +127,7 @@ class RouterTest extends \PHPUnit_Framework_TestCase { ); $conn = $this->getMock('Ratchet\Mock\Connection'); + /**@var $request \Guzzle\Http\Message\Request */ $request = $this->getMock('Guzzle\Http\Message\Request', array('getPath'), array('GET', ''), '', false); $request->setHeaderFactory($this->getMock('Guzzle\Http\Message\Header\HeaderFactoryInterface')); @@ -136,5 +137,7 @@ class RouterTest extends \PHPUnit_Framework_TestCase { $router->onOpen($conn, $request); $this->assertEquals(array('foo' => 'nope', 'baz' => 'qux', 'hello' => 'world'), $request->getQuery()->getAll()); + $this->assertEquals('ws', $request->getScheme()); + $this->assertEquals('doesnt.matter', $request->getHost()); } } From 64bc5822c80ce6c16d5033fa63eb10c997cd30f9 Mon Sep 17 00:00:00 2001 From: Chris Boden Date: Fri, 30 Dec 2016 13:26:04 -0500 Subject: [PATCH 09/12] Set GET required in Symfony Route --- src/Ratchet/App.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ratchet/App.php b/src/Ratchet/App.php index b7d0e55..c52a2c7 100644 --- a/src/Ratchet/App.php +++ b/src/Ratchet/App.php @@ -132,7 +132,7 @@ class App { } } - $this->routes->add('rr-' . ++$this->_routeCounter, new Route($path, array('_controller' => $decorated), array('Origin' => $this->httpHost), array(), $httpHost)); + $this->routes->add('rr-' . ++$this->_routeCounter, new Route($path, array('_controller' => $decorated), array('Origin' => $this->httpHost), array(), $httpHost, array(), array('GET'))); return $decorated; } From afe63e26d67d73d720a33f2efaf190f576b02f86 Mon Sep 17 00:00:00 2001 From: Chris Boden Date: Fri, 30 Dec 2016 13:40:50 -0500 Subject: [PATCH 10/12] 0.3.6 prep fixes #470 fixes #471 fixes #472 --- CHANGELOG.md | 4 ++++ src/Ratchet/ConnectionInterface.php | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d7073b..03c62c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ CHANGELOG --- +* 0.3.6 (2015-12-30) + * BF: Keep host and scheme in HTTP request object attatched to connection + * BF: Return correct HTTP response (405) when non-GET request made + * 0.3.5 (2016-05-25) * BF: Unmask responding close frame diff --git a/src/Ratchet/ConnectionInterface.php b/src/Ratchet/ConnectionInterface.php index 882774e..1b3839c 100644 --- a/src/Ratchet/ConnectionInterface.php +++ b/src/Ratchet/ConnectionInterface.php @@ -5,7 +5,7 @@ namespace Ratchet; * The version of Ratchet being used * @var string */ -const VERSION = 'Ratchet/0.3.5'; +const VERSION = 'Ratchet/0.3.6'; /** * A proxy object representing a connection to the application From 84df35d2a6576985b9e81b564d3c25809f8d647e Mon Sep 17 00:00:00 2001 From: Chris Boden Date: Fri, 6 Jan 2017 09:36:36 -0500 Subject: [PATCH 11/12] Release --- CHANGELOG.md | 2 +- LICENSE | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03c62c4..2bf1597 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ CHANGELOG --- -* 0.3.6 (2015-12-30) +* 0.3.6 (2017-01-06) * BF: Keep host and scheme in HTTP request object attatched to connection * BF: Return correct HTTP response (405) when non-GET request made diff --git a/LICENSE b/LICENSE index 7f8c128..24abba1 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2011-2016 Chris Boden +Copyright (c) 2011-2017 Chris Boden Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From a672b8601bc6df25597c4a28dfc3607bd5e69676 Mon Sep 17 00:00:00 2001 From: Alex Mokrenko Date: Thu, 9 Feb 2017 22:11:06 +0300 Subject: [PATCH 12/12] Update .travis.yml --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index f0b9273..3f632e3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,8 @@ php: - 5.4 - 5.5 - 5.6 - - 7 + - 7.0 + - 7.1 - hhvm before_script: