/** * Negotiate permessage-deflate WebSocket extensio if supported by the clientn. * * @param HttpRequest $request * @return PerMessageDeflate Or null when not supported by client / server or invalid window sizes are specified. */ protected function negotiatePerMessageDeflate(HttpRequest $request) { static $zlib; $extension = null; if ($zlib ?? ($zlib = \function_exists('inflate_init'))) { foreach ($request->getHeaderTokens('Sec-WebSocket-Extensions') as $ext) { if (\strtolower($ext->getValue()) === 'permessage-deflate') { $extension = $ext; break; } } } if ($extension === null) { return; } try { return PerMessageDeflate::fromHeaderToken($extension); } catch (\OutOfRangeException $e) { return; } }
/** * Get the HTTP host as forwarded by a proxy. * * @param HttpRequest $request * @return string Or null when no proxy header is found. */ public function getHost(HttpRequest $request) { foreach ($this->hostHeaders as $name) { if ($request->hasHeader($name)) { return $request->getHeaderTokens($name)[0]->getValue(); } } }