/**
  * Sending back a response to mongrel2 webserver.
  *
  * @param Request $request
  * @param Response $response
  */
 private function sendResponseToMongrel(Request $request, Response $response)
 {
     $response->prepare($request);
     // Map back our Symfony Response to a MongrelResponse.
     $mongrelResponse = new MongrelResponse($request->attributes->get('mongrel2_uuid'), [$request->attributes->get('mongrel2_listener')]);
     $mongrelResponse->setContent($response->getContent());
     $headers = $response->headers->all();
     foreach ($response->headers->getCookies() as $cookie) {
         $headers['Set-Cookie'][] = $cookie;
     }
     $mongrelResponse->setHeaders($headers);
     $mongrelResponse->setHttpVersion($response->getProtocolVersion());
     $mongrelResponse->setStatusCode($response->getStatusCode());
     $mongrelResponse->setReasonPhrase(Response::$statusTexts[$response->getStatusCode()]);
     $this->handler->sendResponse($mongrelResponse);
 }
Exemple #2
0
 public function transformResponseToMessage(Response $response)
 {
     $listeners = $this->netstringEncoder->encode(implode(' ', $response->getListeners()));
     $content = $response->getContent();
     $headers = $response->getHeaders();
     // Ensure content-length is set, otherwise Mongrel2 will ignore our request.
     if (!isset($headers['content-length'][0])) {
         $headers['content-length'][] = strlen($content);
     }
     $headersString = '';
     foreach ($headers as $name => $values) {
         $name = implode('-', array_map('ucfirst', explode('-', $name)));
         foreach ($values as $value) {
             $headersString .= sprintf("%s %s\r\n", $name . ':', $value);
         }
     }
     // Building our own HTTP Response.
     $message = sprintf("%s %s HTTP/%s %d %s\r\n%s\r\n%s\r\n", $response->getUuid(), $listeners, $response->getHttpVersion(), $response->getStatusCode(), $response->getReasonPhrase(), $headersString, $content);
     return $message;
 }
Exemple #3
0
<?php

use h4cc\Mongrel2\Handler;
use h4cc\Mongrel2\Transport;
use h4cc\Mongrel2\Response;
require_once __DIR__ . '/../vendor/autoload.php';
$recv = 'tcp://127.0.0.1:9997';
$send = 'tcp://127.0.0.1:9996';
$handler = new Handler(new Transport($recv, $send));
while (true) {
    $request = $handler->receiveRequest();
    $response = new Response($request->getUuid(), [$request->getListener()]);
    $response->setContent('<pre>
Request: ' . print_r($request, true) . '
Response:' . print_r($response, true) . '
    </pre>');
    $handler->sendResponse($response);
}