/**
* {@inheritdoc}
*/
public function createResponse(Application $application, Request $request, Socket $socket) : Response
{
if (!$request->hasHeader('Sec-WebSocket-Key')) {
$sink = new MemorySink('No WebSocket key header provided.');
return new BasicResponse(Response::BAD_REQUEST, ['Connection' => 'close', 'Content-Length' => $sink->getLength()], $sink);
}
$headers = ['Connection' => 'upgrade', 'Upgrade' => 'websocket', 'Sec-WebSocket-Accept' => $this->responseKey(trim($request->getHeader('Sec-WebSocket-Key')))];
if ($application instanceof SubProtocol) {
$protocol = $application->selectSubProtocol(array_map('trim', explode(',', $request->getHeader('Sec-WebSocket-Protocol'))));
if (strlen($protocol)) {
$headers['Sec-WebSocket-Protocol'] = $protocol;
}
}
/*
$extensions = $application->selectExtensions(
array_map('trim', explode(',', $request->getHeader('Sec-WebSocket-Extensions')))
);
if (!empty($extensions)) {
$headers['Sec-WebSocket-Extensions'] = $extensions;
}
*/
$response = new BasicResponse(Response::SWITCHING_PROTOCOLS, $headers);
$connection = $this->createConnection($response, $socket, false);
return new WebSocketResponse($application, $connection, $response);
}