Fixup version check for permessage-deflate
This commit is contained in:
parent
b84ef8b9ce
commit
bc16757a61
@ -26,15 +26,17 @@ class ClientNegotiator {
|
|||||||
, 'User-Agent' => "Ratchet"
|
, 'User-Agent' => "Ratchet"
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// https://bugs.php.net/bug.php?id=73373
|
|
||||||
if ($perMessageDeflateOptions === null) {
|
if ($perMessageDeflateOptions === null) {
|
||||||
$perMessageDeflateOptions = PermessageDeflateOptions::createDisabled();
|
$perMessageDeflateOptions = PermessageDeflateOptions::createDisabled();
|
||||||
}
|
}
|
||||||
if (
|
|
||||||
version_compare(PHP_VERSION, '7.0.15', '<')
|
// https://bugs.php.net/bug.php?id=73373
|
||||||
|| version_compare(PHP_VERSION, '7.1.0', '=')
|
// https://bugs.php.net/bug.php?id=74240 - need >=7.1.4 or >=7.0.18
|
||||||
|| !function_exists('deflate_add')
|
$supported = version_compare(PHP_VERSION, '7.0.18', '>=') && !version_compare(PHP_VERSION, '7.1.4', '<');
|
||||||
) {
|
if (!$supported) {
|
||||||
|
if ($perMessageDeflateOptions->getDeflate()) {
|
||||||
|
trigger_error('permessage-deflate is being disabled because it is not support by your PHP version.', E_USER_NOTICE);
|
||||||
|
}
|
||||||
$perMessageDeflateOptions = PermessageDeflateOptions::createDisabled();
|
$perMessageDeflateOptions = PermessageDeflateOptions::createDisabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,10 +22,15 @@ class ServerNegotiator implements NegotiatorInterface {
|
|||||||
public function __construct(RequestVerifier $requestVerifier, $enablePerMessageDeflate = false) {
|
public function __construct(RequestVerifier $requestVerifier, $enablePerMessageDeflate = false) {
|
||||||
$this->verifier = $requestVerifier;
|
$this->verifier = $requestVerifier;
|
||||||
|
|
||||||
if ($enablePerMessageDeflate && (version_compare(PHP_VERSION, '7.0.15', '<') || version_compare(PHP_VERSION, '7.1.0', '='))) {
|
// https://bugs.php.net/bug.php?id=73373
|
||||||
|
// https://bugs.php.net/bug.php?id=74240 - need >=7.1.4 or >=7.0.18
|
||||||
|
$supported = version_compare(PHP_VERSION, '7.0.18', '>=') && !version_compare(PHP_VERSION, '7.1.4', '<');
|
||||||
|
if ($enablePerMessageDeflate && !$supported) {
|
||||||
|
trigger_error('permessage-deflate is being disabled because it is not support by your PHP version.', E_USER_NOTICE);
|
||||||
$enablePerMessageDeflate = false;
|
$enablePerMessageDeflate = false;
|
||||||
}
|
}
|
||||||
if ($enablePerMessageDeflate && !function_exists('deflate_add')) {
|
if ($enablePerMessageDeflate && !function_exists('deflate_add')) {
|
||||||
|
trigger_error('permessage-deflate is being disabled because you do not have the zlib extension.', E_USER_NOTICE);
|
||||||
$enablePerMessageDeflate = false;
|
$enablePerMessageDeflate = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,10 +120,6 @@ class ServerNegotiator implements NegotiatorInterface {
|
|||||||
, 'X-Powered-By' => 'Ratchet'
|
, 'X-Powered-By' => 'Ratchet'
|
||||||
]));
|
]));
|
||||||
|
|
||||||
|
|
||||||
// $perMessageDeflate = array_filter($request->getHeader('Sec-WebSocket-Extensions'), function ($x) {
|
|
||||||
// return 'permessage-deflate' === substr($x, 0, strlen('permessage-deflate'));
|
|
||||||
// });
|
|
||||||
try {
|
try {
|
||||||
$perMessageDeflateRequest = PermessageDeflateOptions::fromRequestOrResponse($request)[0];
|
$perMessageDeflateRequest = PermessageDeflateOptions::fromRequestOrResponse($request)[0];
|
||||||
} catch (InvalidPermessageDeflateOptionsException $e) {
|
} catch (InvalidPermessageDeflateOptionsException $e) {
|
||||||
|
@ -124,8 +124,6 @@ class MessageBuffer {
|
|||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//echo "fin: " . json_encode($this->frameBuffer->isFinal()) . ", bCount: " . $this->messageBuffer->count() . ", Rsv1: " . json_encode($this->frameBuffer->getRsv1()) . "\n";
|
|
||||||
|
|
||||||
if ($this->messageBuffer->count() === 0 && $this->frameBuffer->getRsv1()) {
|
if ($this->messageBuffer->count() === 0 && $this->frameBuffer->getRsv1()) {
|
||||||
$this->compressedMessage = true;
|
$this->compressedMessage = true;
|
||||||
}
|
}
|
||||||
@ -338,16 +336,14 @@ class MessageBuffer {
|
|||||||
|
|
||||||
private function inflateFrame(Frame $frame) {
|
private function inflateFrame(Frame $frame) {
|
||||||
if ($this->inflator === null) {
|
if ($this->inflator === null) {
|
||||||
$options = [
|
|
||||||
'level' => -1,
|
|
||||||
'memory' => 8,
|
|
||||||
'window' => $this->getInflateWindowBits(),
|
|
||||||
'strategy' => ZLIB_DEFAULT_STRATEGY
|
|
||||||
];
|
|
||||||
//echo "inflate_init(RAW, " . json_encode($options) . ")\n";
|
|
||||||
$this->inflator = inflate_init(
|
$this->inflator = inflate_init(
|
||||||
ZLIB_ENCODING_RAW,
|
ZLIB_ENCODING_RAW,
|
||||||
$options
|
[
|
||||||
|
'level' => -1,
|
||||||
|
'memory' => 8,
|
||||||
|
'window' => $this->getInflateWindowBits(),
|
||||||
|
'strategy' => ZLIB_DEFAULT_STRATEGY
|
||||||
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -418,8 +414,6 @@ class MessageBuffer {
|
|||||||
$deflatedFrame->setRsv1();
|
$deflatedFrame->setRsv1();
|
||||||
}
|
}
|
||||||
|
|
||||||
gc_collect_cycles(); // memory runs away if we don't collect ??
|
|
||||||
|
|
||||||
return $deflatedFrame;
|
return $deflatedFrame;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,6 @@
|
|||||||
, "options": {"version": 18}
|
, "options": {"version": 18}
|
||||||
}]
|
}]
|
||||||
, "cases": ["*"]
|
, "cases": ["*"]
|
||||||
, "exclude-cases": ["6.4.*", "12.*","13.*"]
|
, "exclude-cases": []
|
||||||
, "exclude-agent-cases": {}
|
, "exclude-agent-cases": {}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,6 @@
|
|||||||
}
|
}
|
||||||
, "outdir": "./reports/clients"
|
, "outdir": "./reports/clients"
|
||||||
, "cases": ["*"]
|
, "cases": ["*"]
|
||||||
, "exclude-cases": ["6.4.*", "12.*", "13.*"]
|
, "exclude-cases": []
|
||||||
, "exclude-agent-cases": {}
|
, "exclude-agent-cases": {}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user