|
3 | 3 | namespace React\Http; |
4 | 4 |
|
5 | 5 | use Evenement\EventEmitter; |
6 | | -use React\Socket\ServerInterface; |
7 | | -use React\Socket\ConnectionInterface; |
8 | 6 | use Psr\Http\Message\RequestInterface; |
9 | 7 | use Psr\Http\Message\ResponseInterface; |
10 | | -use React\Promise\Promise; |
11 | | -use RingCentral\Psr7 as Psr7Implementation; |
12 | 8 | use Psr\Http\Message\ServerRequestInterface; |
13 | 9 | use React\Promise\CancellablePromiseInterface; |
| 10 | +use React\Promise\Promise; |
| 11 | +use React\Socket\ConnectionInterface; |
| 12 | +use React\Socket\ServerInterface; |
| 13 | +use React\Stream\ReadableStreamInterface; |
14 | 14 | use React\Stream\WritableStreamInterface; |
| 15 | +use RingCentral\Psr7 as Psr7Implementation; |
15 | 16 |
|
16 | 17 | /** |
17 | 18 | * The `Server` class is responsible for handling incoming connections and then |
@@ -378,19 +379,26 @@ public function handleResponse(ConnectionInterface $connection, ServerRequestInt |
378 | 379 |
|
379 | 380 | private function handleResponseBody(ResponseInterface $response, ConnectionInterface $connection) |
380 | 381 | { |
381 | | - if (!$response->getBody() instanceof HttpBodyStream) { |
382 | | - $connection->write(Psr7Implementation\str($response)); |
383 | | - return $connection->end(); |
| 382 | + $headers = "HTTP/" . $response->getProtocolVersion() . " " . $response->getStatusCode() . " " . $response->getReasonPhrase() . "\r\n"; |
| 383 | + foreach ($response->getHeaders() as $name => $values) { |
| 384 | + foreach ($values as $value) { |
| 385 | + $headers .= $name . ": " . $value . "\r\n"; |
| 386 | + } |
384 | 387 | } |
385 | 388 |
|
386 | 389 | $stream = $response->getBody(); |
387 | 390 |
|
| 391 | + if (!$stream instanceof ReadableStreamInterface) { |
| 392 | + $connection->write($headers . "\r\n" . $stream); |
| 393 | + return $connection->end(); |
| 394 | + } |
| 395 | + |
388 | 396 | // close response stream if connection is already closed |
389 | 397 | if (!$connection->isWritable()) { |
390 | 398 | return $stream->close(); |
391 | 399 | } |
392 | 400 |
|
393 | | - $connection->write(Psr7Implementation\str($response)); |
| 401 | + $connection->write($headers . "\r\n"); |
394 | 402 |
|
395 | 403 | if ($stream->isReadable()) { |
396 | 404 | if ($response->getHeaderLine('Transfer-Encoding') === 'chunked') { |
|
0 commit comments