From 1cb14114c36eae7ee3017778d3d22a6bda502bac Mon Sep 17 00:00:00 2001 From: Matt Bonneau Date: Tue, 10 Mar 2020 09:26:05 -0400 Subject: [PATCH] Change how disabled/supported/enabled is handled for deflate --- src/Handshake/ClientNegotiator.php | 12 +++++++----- src/Handshake/PermessageDeflateOptions.php | 2 +- src/Handshake/ServerNegotiator.php | 6 ++---- tests/ab/clientRunner.php | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Handshake/ClientNegotiator.php b/src/Handshake/ClientNegotiator.php index c6e5b3f..c32a1cf 100644 --- a/src/Handshake/ClientNegotiator.php +++ b/src/Handshake/ClientNegotiator.php @@ -32,11 +32,13 @@ class ClientNegotiator { // 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 = PermessageDeflateOptions::permessageDeflateSupported(); - if (!$supported) { - if ($perMessageDeflateOptions->isEnabled()) { - trigger_error('permessage-deflate is being disabled because it is not support by your PHP version.', E_USER_NOTICE); - } + if ($perMessageDeflateOptions->isEnabled() && + !PermessageDeflateOptions::permessageDeflateSupported()) { + trigger_error('permessage-deflate is being disabled because it is not support by your PHP version.', E_USER_NOTICE); + $perMessageDeflateOptions = PermessageDeflateOptions::createDisabled(); + } + if ($perMessageDeflateOptions->isEnabled() && !function_exists('deflate_add')) { + trigger_error('permessage-deflate is being disabled because you do not have the zlib extension.', E_USER_NOTICE); $perMessageDeflateOptions = PermessageDeflateOptions::createDisabled(); } diff --git a/src/Handshake/PermessageDeflateOptions.php b/src/Handshake/PermessageDeflateOptions.php index 4dde2f1..7a56750 100644 --- a/src/Handshake/PermessageDeflateOptions.php +++ b/src/Handshake/PermessageDeflateOptions.php @@ -21,7 +21,7 @@ final class PermessageDeflateOptions private function __construct() { } - public static function createDefault() { + public static function createEnabled() { $new = new static(); $new->deflateEnabled = true; $new->client_max_window_bits = self::MAX_WINDOW_BITS; diff --git a/src/Handshake/ServerNegotiator.php b/src/Handshake/ServerNegotiator.php index 64cc415..e4ce79b 100644 --- a/src/Handshake/ServerNegotiator.php +++ b/src/Handshake/ServerNegotiator.php @@ -26,12 +26,10 @@ class ServerNegotiator implements NegotiatorInterface { // https://bugs.php.net/bug.php?id=74240 - need >=7.1.4 or >=7.0.18 $supported = PermessageDeflateOptions::permessageDeflateSupported(); if ($enablePerMessageDeflate && !$supported) { - trigger_error('permessage-deflate is being disabled because it is not support by your PHP version.', E_USER_NOTICE); - $enablePerMessageDeflate = false; + throw new \Exception('permessage-deflate is not supported by your PHP version (need >=7.1.4 or >=7.0.18).'); } 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; + throw new \Exception('permessage-deflate is not supported because you do not have the zlib extension.'); } $this->enablePerMessageDeflate = $enablePerMessageDeflate; diff --git a/tests/ab/clientRunner.php b/tests/ab/clientRunner.php index 9bd2873..1c28d74 100644 --- a/tests/ab/clientRunner.php +++ b/tests/ab/clientRunner.php @@ -107,7 +107,7 @@ function getTestCases() { return $deferred->promise(); } -$cn = new \Ratchet\RFC6455\Handshake\ClientNegotiator(PermessageDeflateOptions::createDefault()); +$cn = new \Ratchet\RFC6455\Handshake\ClientNegotiator(PermessageDeflateOptions::createEnabled()); function runTest($case) { @@ -120,7 +120,7 @@ function runTest($case) $deferred = new Deferred(); $connector->connect($testServer . ':9001')->then(function (ConnectionInterface $connection) use ($deferred, $casePath, $case) { - $cn = new ClientNegotiator(PermessageDeflateOptions::createDefault()); + $cn = new ClientNegotiator(PermessageDeflateOptions::createEnabled()); $cnRequest = $cn->generateRequest(new Uri('ws://127.0.0.1:9001' . $casePath)); $rawResponse = "";