Пример #1
0
 private function sendHandshakeResponse()
 {
     try {
         $challengeHeader = $this->getHandshakeRequest()->getHeader('Sec-Websocket-Key', null);
         if (!$challengeHeader) {
             throw new Exception("No Sec-WebSocket-Key received!");
         }
         // Check for newer handshake
         $challenge = $challengeHeader->getFieldValue();
         // Build response
         $response = new Response();
         $response->setStatusCode(101);
         $response->setReasonPhrase("WebSocket Protocol Handshake");
         $headers = new Headers();
         $response->setHeaders($headers);
         $headers->addHeaderLine("Upgrade", "WebSocket");
         $headers->addHeaderLine("Connection", "Upgrade");
         $headers->addHeaderLine("Sec-WebSocket-Accept", self::calcHybiResponse($challenge));
         $this->setResponse($response);
         $handshakeRequest = new Handshake($this->getHandshakeRequest(), $this->getHandshakeResponse());
         $this->emit("handshake", array($handshakeRequest));
         if ($handshakeRequest->isAborted()) {
             $this->close();
         } else {
             $this->_socket->write($response->toString());
             $this->logger->debug("Got an HYBI style request, sent HYBY handshake response");
             $this->connected = true;
             $this->emit("connect");
         }
     } catch (Exception $e) {
         $this->logger->err("Connection error, message: " . $e->getMessage());
         $this->close();
     }
 }
Пример #2
0
 public function testResponseCanRenderStatusLine()
 {
     $response = new Response();
     $response->setVersion(1.1);
     $response->setStatusCode(Response::STATUS_CODE_404);
     $this->assertEquals('HTTP/1.1 404 Not Found', $response->renderStatusLine());
     $response->setReasonPhrase('Foo Bar');
     $this->assertEquals('HTTP/1.1 404 Foo Bar', $response->renderStatusLine());
 }
Пример #3
0
 private function sendHandshakeResponse()
 {
     // Last 8 bytes of the client's handshake are used for key calculation later
     $l8b = $this->request->getContent();
     // Check for 2-key based handshake (Hixie protocol draft)
     $key1 = $this->getHandshakeRequest()->getHeader('Sec-Websocket-Key1')->getFieldValue();
     $key2 = $this->getHandshakeRequest()->getHeader('Sec-Websocket-Key2')->getFieldValue();
     // Origin checking (TODO)
     $originHeader = $this->getHandshakeRequest()->getHeader('Origin', null);
     $host = $this->getHandshakeRequest()->getHeader('Host')->getFieldValue();
     $location = $this->getHandshakeRequest()->getUriString();
     // Build response
     $response = new Response();
     $response->setStatusCode(101);
     $response->setReasonPhrase("WebSocket Protocol Handshake");
     $headers = new Headers();
     $response->setHeaders($headers);
     $headers->addHeaderLine("Upgrade", "WebSocket");
     $headers->addHeaderLine("Connection", "Upgrade");
     if ($originHeader) {
         $headers->addHeaderLine("Sec-WebSocket-Origin", $originHeader->getFieldValue());
     }
     $headers->addHeaderLine("Sec-WebSocket-Location", "ws://{$host}{$location}");
     // Build HIXIE response
     $response->setContent(self::calcHixieResponse($key1, $key2, $l8b));
     $this->setResponse($response);
     $handshakeRequest = new Handshake($this->getHandshakeRequest(), $this->getHandshakeResponse());
     $this->emit("handshake", [$handshakeRequest]);
     if ($handshakeRequest->isAborted()) {
         $this->close();
     } else {
         $this->socket->write($response->toString());
         $this->logger->debug("Got an HYBI style request, sent HYBY handshake response");
         $this->emit("connect");
     }
 }
Пример #4
0
 /**
  * {@inheritDoc}
  */
 public function prepareResponse(HttpResponse $response)
 {
     $response->setStatusCode($this->getCode());
     $response->setReasonPhrase($this->getMessage());
 }
Пример #5
0
 /**
  * Retrieve response by version and name
  *
  * @param string $version version
  * @param string $name    name
  * @param boolean $validity    validity
  *
  * @throws RuntimeException
  * @return \Zend\Http\Response
  */
 protected function getResponse($version, $name, $validity = true)
 {
     // 	    $file = realpath(
     // 	            \VUFIND_PHPUNIT_MODULE_PATH . self::FIXTURE_DIRECTORY . 'responses/' .
     // 	            ($validity ? 'valid' : 'invalid') . '/' . $version . '/' . $name
     // 	    );
     $file = realpath(\VUFIND_PHPUNIT_MODULE_PATH . self::FIXTURE_DIRECTORY . 'responses/' . $version . '/' . $name);
     if (!$file) {
         throw new RuntimeException(sprintf('Unable to resolve fixture file: %s', $name));
     }
     $content = file_get_contents($file);
     $response = new Response();
     $response->setContent($content);
     $response->setStatusCode(Response::STATUS_CODE_200);
     $response->setReasonPhrase('OK');
     return $response;
 }
Пример #6
0
 /**
  * withStatus
  *
  * @param int    $statusCode
  * @param string $reasonPhrase
  *
  * @return $this
  */
 public function withStatus($statusCode, $reasonPhrase = '')
 {
     parent::setStatusCode($statusCode);
     parent::setReasonPhrase($reasonPhrase);
     return $this;
 }
 /**
  * Convert a PSR-7 response to ZF2 response
  *
  * @param  ResponseInterface $response
  * @return HttpResponse
  */
 private function convertToZfResponse(ResponseInterface $response)
 {
     $zfResponse = new HttpResponse();
     $zfResponse->setStatusCode($response->getStatusCode());
     $zfResponse->setReasonPhrase($response->getReasonPhrase());
     $zfResponse->setContent((string) $response->getBody());
     foreach ($response->getHeaders() as $name => $values) {
         $zfResponse->getHeaders()->addHeaderLine($name, implode(", ", $values));
     }
     return $zfResponse;
 }