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; } }
/** * Accepts a connection. Wrapper to return a CustomSocket instance. * * @throws SocketException * * @return Socket */ public function accept() { return new self(parent::accept()); }