/** * 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); }
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; }
<?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); }