setRequest($request); return; } /** * Try the handshake by trying different protocol implementation. * * @return void * @throws \Hoa\Websocket\Exception\BadProtocol */ protected function doHandshake() { $connection = $this->getConnection(); if (true === $connection->getSocket()->isSecured() && false === $connection->isEncrypted()) { $connection->enableEncryption(true, $connection::ENCRYPTION_TLS); } $buffer = $connection->read(2048); $request = $this->getRequest(); $request->parse($buffer); // Rfc6455. try { $rfc6455 = new Protocol\Rfc6455($connection); $rfc6455->doHandshake($request); $connection->getCurrentNode()->setProtocolImplementation($rfc6455); } catch (Exception\BadProtocol $e) { unset($rfc6455); // Hybi00. try { $hybi00 = new Protocol\Hybi00($connection); $hybi00->doHandshake($request); $connection->getCurrentNode()->setProtocolImplementation($hybi00); } catch (Exception\BadProtocol $e) { unset($hybi00); $connection->disconnect(); throw new Exception\BadProtocol('All protocol failed.', 1); } } return; } /** * Set request (mainly parser). * * @param \Hoa\Http\Request $request Request. * @return \Hoa\Http\Request */ public function setRequest(Http\Request $request) { $old = $this->_request; $this->_request = $request; return $old; } /** * Get request. * * @return \Hoa\Http\Request */ public function getRequest() { return $this->_request; } }