Example #1
0
 public function handshake(AbstractSocket $socket)
 {
     $data = $socket->recv();
     $headers = $this->headers($data);
     $version = '';
     // check HyBi/IETF version
     if (isset($headers['version'])) {
         # HyBi-07 report version 7
         # HyBi-08 - HyBi-12 report version 8
         # HyBi-13 reports version 13
         if (in_array($headers['version'], ['7', '8', '13'])) {
             $version = 'hybi-' . $headers['version'];
         } else {
             new SocketException('Unsupported protocol version: ' . $headers['version']);
         }
         $key = $headers['sec-key'];
         # Generate the hash value for the accept header
         $accept = $key . self::GUID;
         $accept = sha1($accept);
         $accept = pack('H*', $accept);
         $accept = base64_encode($accept);
         $response = str_replace('{key}', $accept, self::HANDSHAKE_HYBI);
         $socket->write($response . "\r\n");
         return true;
     } else {
         $socket->write('Protocol not implemented');
         return false;
     }
 }
Example #2
0
 /**
  * Accepts a connection. Wrapper to return a CustomSocket instance.
  *
  * @throws SocketException
  *
  * @return Socket
  */
 public function accept()
 {
     return new self(parent::accept());
 }