Added subprotocol check for client, test fixes
This commit is contained in:
parent
0f4df7fed5
commit
9f405beccb
@ -14,8 +14,12 @@ class ResponseVerifier {
|
|||||||
$response->getHeader('Sec-WebSocket-Accept')
|
$response->getHeader('Sec-WebSocket-Accept')
|
||||||
, $request->getHeader('Sec-WebSocket-Key')
|
, $request->getHeader('Sec-WebSocket-Key')
|
||||||
);
|
);
|
||||||
|
$passes += (int)$this->verifySubProtocol(
|
||||||
|
$request->getHeader('Sec-WebSocket-Protocol')
|
||||||
|
, $response->getHeader('Sec-WebSocket-Protocol')
|
||||||
|
);
|
||||||
|
|
||||||
return (4 === $passes);
|
return (5 === $passes);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function verifyStatus($status) {
|
public function verifyStatus($status) {
|
||||||
@ -41,4 +45,8 @@ class ResponseVerifier {
|
|||||||
public function sign($key) {
|
public function sign($key) {
|
||||||
return base64_encode(sha1($key . NegotiatorInterface::GUID, true));
|
return base64_encode(sha1($key . NegotiatorInterface::GUID, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function verifySubProtocol(array $requestHeader, array $responseHeader) {
|
||||||
|
return 0 === count($responseHeader) || count(array_intersect($responseHeader, $requestHeader)) > 0;
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,11 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Ratchet\RFC6455\Test\Unit\Handshake;
|
namespace Ratchet\RFC6455\Test\Unit\Handshake;
|
||||||
|
|
||||||
use Ratchet\RFC6455\Handshake\RequestVerifier;
|
use Ratchet\RFC6455\Handshake\RequestVerifier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* covers Ratchet\WebSocket\Version\RFC6455\HandshakeVerifier
|
* @covers Ratchet\RFC6455\Handshake\RequestVerifier
|
||||||
*/
|
*/
|
||||||
class RequestVerifierTest extends \PHPUnit_Framework_TestCase {
|
class RequestVerifierTest extends \PHPUnit_Framework_TestCase {
|
||||||
/**
|
/**
|
||||||
|
34
tests/unit/Handshake/ResponseVerifierTest.php
Normal file
34
tests/unit/Handshake/ResponseVerifierTest.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
namespace Ratchet\RFC6455\Test\Unit\Handshake;
|
||||||
|
use Ratchet\RFC6455\Handshake\ResponseVerifier;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers Ratchet\WebSocket\Version\RFC6455\ResponseVerifier
|
||||||
|
*/
|
||||||
|
class ResponseVerifierTest extends \PHPUnit_Framework_TestCase {
|
||||||
|
/**
|
||||||
|
* @var ResponseVerifier
|
||||||
|
*/
|
||||||
|
protected $_v;
|
||||||
|
|
||||||
|
public function setUp() {
|
||||||
|
$this->_v = new ResponseVerifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function subProtocolsProvider() {
|
||||||
|
return [
|
||||||
|
[true, ['a'], ['a']]
|
||||||
|
, [true, ['b', 'a'], ['c', 'd', 'a']]
|
||||||
|
, [false, ['a', 'b', 'c'], ['d']]
|
||||||
|
, [true, [], []]
|
||||||
|
, [true, ['a', 'b'], []]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider subProtocolsProvider
|
||||||
|
*/
|
||||||
|
public function testVerifySubProtocol($expected, $response, $request) {
|
||||||
|
$this->assertEquals($expected, $this->_v->verifySubProtocol($response, $request));
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Ratchet\RFC6455\Test\Unit\Messaging\Protocol;
|
namespace Ratchet\RFC6455\Test\Unit\Messaging\Protocol;
|
||||||
|
|
||||||
use Ratchet\RFC6455\Messaging\Protocol\Frame;
|
use Ratchet\RFC6455\Messaging\Protocol\Frame;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @covers Ratchet\RFC6455\Messaging\Protocol\Frame
|
||||||
* @todo getMaskingKey, getPayloadStartingByte don't have tests yet
|
* @todo getMaskingKey, getPayloadStartingByte don't have tests yet
|
||||||
* @todo Could use some clean up in general, I had to rush to fix a bug for a deadline, sorry.
|
* @todo Could use some clean up in general, I had to rush to fix a bug for a deadline, sorry.
|
||||||
*/
|
*/
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Ratchet\RFC6455\Test\Unit\Messaging\Protocol;
|
namespace Ratchet\RFC6455\Test\Unit\Messaging\Protocol;
|
||||||
|
|
||||||
use Ratchet\RFC6455\Messaging\Protocol\Frame;
|
use Ratchet\RFC6455\Messaging\Protocol\Frame;
|
||||||
use Ratchet\RFC6455\Messaging\Protocol\Message;
|
use Ratchet\RFC6455\Messaging\Protocol\Message;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* covers Ratchet\WebSocket\Version\RFC6455\Message
|
* @covers Ratchet\RFC6455\Messaging\Protocol\Message
|
||||||
*/
|
*/
|
||||||
class MessageTest extends \PHPUnit_Framework_TestCase {
|
class MessageTest extends \PHPUnit_Framework_TestCase {
|
||||||
/** @var Message */
|
/** @var Message */
|
||||||
|
Loading…
Reference in New Issue
Block a user