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