Separating protocol parsing, message handling
This commit is contained in:
		
							parent
							
								
									8884b40f00
								
							
						
					
					
						commit
						b685f6c928
					
				| @ -4,6 +4,7 @@ use Ratchet\AbstractConnectionDecorator; | |||||||
| use Ratchet\RFC6455\Version\DataInterface; | use Ratchet\RFC6455\Version\DataInterface; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  |  * @deprecated | ||||||
|  * {@inheritdoc} |  * {@inheritdoc} | ||||||
|  * @property \StdClass $WebSocket |  * @property \StdClass $WebSocket | ||||||
|  */ |  */ | ||||||
| @ -1,48 +1,43 @@ | |||||||
| <?php | <?php | ||||||
| namespace Ratchet\RFC6455\Version; | namespace Ratchet\RFC6455\Handshake; | ||||||
| use Ratchet\ConnectionInterface; |  | ||||||
| use Ratchet\MessageInterface; |  | ||||||
| use Ratchet\WebSocket\Version\RFC6455\HandshakeVerifier; |  | ||||||
| use Ratchet\WebSocket\Version\RFC6455\Message; |  | ||||||
| use Ratchet\WebSocket\Version\RFC6455\Frame; |  | ||||||
| use Ratchet\WebSocket\Version\RFC6455\Connection; |  | ||||||
| use Ratchet\WebSocket\Encoding\ValidatorInterface; |  | ||||||
| use Ratchet\WebSocket\Encoding\Validator; |  | ||||||
| use Guzzle\Http\Message\RequestInterface; | use Guzzle\Http\Message\RequestInterface; | ||||||
| use Guzzle\Http\Message\Response; | use Guzzle\Http\Message\Response; | ||||||
| 
 | 
 | ||||||
|  | // TODO remove all these
 | ||||||
|  | use Ratchet\ConnectionInterface; | ||||||
|  | use Ratchet\MessageInterface; | ||||||
|  | use Ratchet\RFC6455\Encoding\ValidatorInterface; | ||||||
|  | use Ratchet\RFC6455\Message\Message; | ||||||
|  | use Ratchet\RFC6455\Message\Frame; | ||||||
|  | use Ratchet\RFC6455\Message\Connection; | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * The latest version of the WebSocket protocol |  * The latest version of the WebSocket protocol | ||||||
|  * @link http://tools.ietf.org/html/rfc6455 |  | ||||||
|  * @todo Unicode: return mb_convert_encoding(pack("N",$u), mb_internal_encoding(), 'UCS-4BE'); |  * @todo Unicode: return mb_convert_encoding(pack("N",$u), mb_internal_encoding(), 'UCS-4BE'); | ||||||
|  */ |  */ | ||||||
| class RFC6455 implements VersionInterface { | class Negotiator implements NegotiatorInterface { | ||||||
|     const GUID = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'; |     /** | ||||||
|  |      * @var \Ratchet\RFC6455\Handshake\RequestVerifier | ||||||
|  |      */ | ||||||
|  |     private $verifier; | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * @var RFC6455\HandshakeVerifier |      * @var \Ratchet\RFC6455\Encoding\ValidatorInterface | ||||||
|      */ |      */ | ||||||
|     protected $_verifier; |     private $validator; | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * A lookup of the valid close codes that can be sent in a frame |      * A lookup of the valid close codes that can be sent in a frame | ||||||
|      * @var array |      * @var array | ||||||
|  |      * @deprecated | ||||||
|      */ |      */ | ||||||
|     private $closeCodes = array(); |     private $closeCodes = array(); | ||||||
| 
 | 
 | ||||||
|     /** |     public function __construct(ValidatorInterface $validator) { | ||||||
|      * @var \Ratchet\WebSocket\Encoding\ValidatorInterface |         $this->verifier = new RequestVerifier; | ||||||
|      */ |  | ||||||
|     protected $validator; |  | ||||||
| 
 | 
 | ||||||
|     public function __construct(ValidatorInterface $validator = null) { |  | ||||||
|         $this->_verifier = new HandshakeVerifier; |  | ||||||
|         $this->setCloseCodes(); |         $this->setCloseCodes(); | ||||||
| 
 | 
 | ||||||
|         if (null === $validator) { |  | ||||||
|             $validator = new Validator; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         $this->validator = $validator; |         $this->validator = $validator; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -66,7 +61,7 @@ class RFC6455 implements VersionInterface { | |||||||
|      * {@inheritdoc} |      * {@inheritdoc} | ||||||
|      */ |      */ | ||||||
|     public function handshake(RequestInterface $request) { |     public function handshake(RequestInterface $request) { | ||||||
|         if (true !== $this->_verifier->verifyAll($request)) { |         if (true !== $this->verifier->verifyAll($request)) { | ||||||
|             return new Response(400); |             return new Response(400); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| @ -78,6 +73,7 @@ class RFC6455 implements VersionInterface { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  |      * @deprecated | ||||||
|      * @param  \Ratchet\ConnectionInterface $conn |      * @param  \Ratchet\ConnectionInterface $conn | ||||||
|      * @param  \Ratchet\MessageInterface    $coalescedCallback |      * @param  \Ratchet\MessageInterface    $coalescedCallback | ||||||
|      * @return \Ratchet\WebSocket\Version\RFC6455\Connection |      * @return \Ratchet\WebSocket\Version\RFC6455\Connection | ||||||
| @ -95,6 +91,7 @@ class RFC6455 implements VersionInterface { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  |      * @deprecated - The logic belons somewhere else | ||||||
|      * @param \Ratchet\WebSocket\Version\RFC6455\Connection $from |      * @param \Ratchet\WebSocket\Version\RFC6455\Connection $from | ||||||
|      * @param string                                        $data |      * @param string                                        $data | ||||||
|      */ |      */ | ||||||
| @ -121,6 +118,7 @@ class RFC6455 implements VersionInterface { | |||||||
|                 return $from->close($frame::CLOSE_PROTOCOL); |                 return $from->close($frame::CLOSE_PROTOCOL); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |             // This is server-side specific logic
 | ||||||
|             if (!$frame->isMasked()) { |             if (!$frame->isMasked()) { | ||||||
|                 return $from->close($frame::CLOSE_PROTOCOL); |                 return $from->close($frame::CLOSE_PROTOCOL); | ||||||
|             } |             } | ||||||
| @ -208,6 +206,7 @@ class RFC6455 implements VersionInterface { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  |      * @deprecated | ||||||
|      * @return RFC6455\Message |      * @return RFC6455\Message | ||||||
|      */ |      */ | ||||||
|     public function newMessage() { |     public function newMessage() { | ||||||
| @ -215,6 +214,7 @@ class RFC6455 implements VersionInterface { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  |      * @deprecated | ||||||
|      * @param string|null $payload |      * @param string|null $payload | ||||||
|      * @param bool|null   $final |      * @param bool|null   $final | ||||||
|      * @param int|null    $opcode |      * @param int|null    $opcode | ||||||
| @ -235,6 +235,7 @@ class RFC6455 implements VersionInterface { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  |      * @deprecated | ||||||
|      * Determine if a close code is valid |      * Determine if a close code is valid | ||||||
|      * @param int|string |      * @param int|string | ||||||
|      * @return bool |      * @return bool | ||||||
| @ -252,6 +253,7 @@ class RFC6455 implements VersionInterface { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  |      * @deprecated | ||||||
|      * Creates a private lookup of valid, private close codes |      * Creates a private lookup of valid, private close codes | ||||||
|      */ |      */ | ||||||
|     protected function setCloseCodes() { |     protected function setCloseCodes() { | ||||||
| @ -1,13 +1,16 @@ | |||||||
| <?php | <?php | ||||||
| namespace Ratchet\RFC6455\Version; | namespace Ratchet\RFC6455\Handshake; | ||||||
| use Ratchet\MessageInterface; | use Ratchet\MessageInterface; | ||||||
| use Ratchet\ConnectionInterface; | use Ratchet\ConnectionInterface; | ||||||
| use Guzzle\Http\Message\RequestInterface; | use Guzzle\Http\Message\RequestInterface; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * A standard interface for interacting with the various version of the WebSocket protocol |  * A standard interface for interacting with the various version of the WebSocket protocol | ||||||
|  |  * @todo Look in to extension support | ||||||
|  */ |  */ | ||||||
| interface VersionInterface extends MessageInterface { | interface NegotiatorInterface { | ||||||
|  |     const GUID = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'; | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * Given an HTTP header, determine if this version should handle the protocol |      * Given an HTTP header, determine if this version should handle the protocol | ||||||
|      * @param \Guzzle\Http\Message\RequestInterface $request |      * @param \Guzzle\Http\Message\RequestInterface $request | ||||||
| @ -31,27 +34,18 @@ interface VersionInterface extends MessageInterface { | |||||||
|     function handshake(RequestInterface $request); |     function handshake(RequestInterface $request); | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * @param  \Ratchet\ConnectionInterface $conn |      * Add supported protocols. If the request has any matching the response will include one | ||||||
|      * @param  \Ratchet\MessageInterface    $coalescedCallback |      * @param string $id | ||||||
|      * @return \Ratchet\ConnectionInterface |  | ||||||
|      */ |      */ | ||||||
|     function upgradeConnection(ConnectionInterface $conn, MessageInterface $coalescedCallback); |     function addSupportedSubProtocol($id); | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * @return MessageInterface |      * If enabled and support for a subprotocol has been added handshake | ||||||
|  |      *  will not upgrade if a match between request and supported subprotocols | ||||||
|  |      * @param boolean $enable | ||||||
|  |      * @todo Consider extending this interface and moving this there.  | ||||||
|  |      *       The spec does says the server can fail for this reason, but | ||||||
|  |              it is not a requirement. This is an implementation detail. | ||||||
|      */ |      */ | ||||||
|     //function newMessage();
 |     function setStrictSubProtocolCheck($enable); | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * @return FrameInterface |  | ||||||
|      */ |  | ||||||
|     //function newFrame();
 |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * @param string |  | ||||||
|      * @param bool |  | ||||||
|      * @return string |  | ||||||
|      * @todo Change to use other classes, this will be removed eventually |  | ||||||
|      */ |  | ||||||
|     //function frame($message, $mask = true);
 |  | ||||||
| } | } | ||||||
| @ -1,5 +1,5 @@ | |||||||
| <?php | <?php | ||||||
| namespace Ratchet\RFC6455\Version\RFC6455; | namespace Ratchet\RFC6455\Handshake; | ||||||
| use Guzzle\Http\Message\RequestInterface; | use Guzzle\Http\Message\RequestInterface; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
| @ -7,7 +7,7 @@ use Guzzle\Http\Message\RequestInterface; | |||||||
|  * Verification rules come from section 4.2.1 of the RFC6455 document |  * Verification rules come from section 4.2.1 of the RFC6455 document | ||||||
|  * @todo Currently just returning invalid - should consider returning appropriate HTTP status code error #s
 |  * @todo Currently just returning invalid - should consider returning appropriate HTTP status code error #s
 | ||||||
|  */ |  */ | ||||||
| class HandshakeVerifier { | class RequestVerifier { | ||||||
|     /** |     /** | ||||||
|      * Given an array of the headers this method will run through all verification methods |      * Given an array of the headers this method will run through all verification methods | ||||||
|      * @param \Guzzle\Http\Message\RequestInterface $request |      * @param \Guzzle\Http\Message\RequestInterface $request | ||||||
| @ -1,5 +1,5 @@ | |||||||
| <?php | <?php | ||||||
| namespace Ratchet\RFC6455\Version; | namespace Ratchet\RFC6455\Messaging\Protocol; | ||||||
| 
 | 
 | ||||||
| interface DataInterface { | interface DataInterface { | ||||||
|     /** |     /** | ||||||
| @ -1,6 +1,5 @@ | |||||||
| <?php | <?php | ||||||
| namespace Ratchet\RFC6455\Version\RFC6455; | namespace Ratchet\RFC6455\Messaging\Protocol; | ||||||
| use Ratchet\RFC6455\Version\FrameInterface; |  | ||||||
| 
 | 
 | ||||||
| class Frame implements FrameInterface { | class Frame implements FrameInterface { | ||||||
|     const OP_CONTINUE =  0; |     const OP_CONTINUE =  0; | ||||||
| @ -1,5 +1,5 @@ | |||||||
| <?php | <?php | ||||||
| namespace Ratchet\RFC6455\Version; | namespace Ratchet\RFC6455\Messaging\Protocol; | ||||||
| 
 | 
 | ||||||
| interface FrameInterface extends DataInterface { | interface FrameInterface extends DataInterface { | ||||||
|     /** |     /** | ||||||
| @ -1,7 +1,5 @@ | |||||||
| <?php | <?php | ||||||
| namespace Ratchet\RFC6455\Version\RFC6455; | namespace Ratchet\RFC6455\Messaging\Protocol; | ||||||
| use Ratchet\RFC6455\Version\MessageInterface; |  | ||||||
| use Ratchet\RFC6455\Version\FrameInterface; |  | ||||||
| 
 | 
 | ||||||
| class Message implements MessageInterface, \Countable { | class Message implements MessageInterface, \Countable { | ||||||
|     /** |     /** | ||||||
| @ -1,5 +1,5 @@ | |||||||
| <?php | <?php | ||||||
| namespace Ratchet\RFC6455\Version; | namespace Ratchet\RFC6455\Messaging\Protocol; | ||||||
| 
 | 
 | ||||||
| interface MessageInterface extends DataInterface { | interface MessageInterface extends DataInterface { | ||||||
|     /** |     /** | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Chris Boden
						Chris Boden