@@ -71,13 +71,13 @@ def __init__(
7171 server_max_window_bits : Optional [int ] = None ,
7272 ) -> None :
7373 self .client_no_context_takeover = client_no_context_takeover
74- if client_max_window_bits is None :
75- client_max_window_bits = self .DEFAULT_CLIENT_MAX_WINDOW_BITS
76- self .client_max_window_bits = client_max_window_bits
7774 self .server_no_context_takeover = server_no_context_takeover
78- if server_max_window_bits is None :
79- server_max_window_bits = self .DEFAULT_SERVER_MAX_WINDOW_BITS
80- self .server_max_window_bits = server_max_window_bits
75+ self ._client_max_window_bits = self .DEFAULT_CLIENT_MAX_WINDOW_BITS
76+ self ._server_max_window_bits = self .DEFAULT_SERVER_MAX_WINDOW_BITS
77+ if client_max_window_bits is not None :
78+ self .client_max_window_bits = client_max_window_bits
79+ if server_max_window_bits is not None :
80+ self .server_max_window_bits = server_max_window_bits
8181
8282 self ._compressor : Optional [zlib ._Compress ] = None # noqa
8383 self ._decompressor : Optional [zlib ._Decompress ] = None # noqa
@@ -90,6 +90,26 @@ def __init__(
9090
9191 self ._enabled = False
9292
93+ @property
94+ def client_max_window_bits (self ) -> int :
95+ return self ._client_max_window_bits
96+
97+ @client_max_window_bits .setter
98+ def client_max_window_bits (self , value : int ) -> None :
99+ if value < 9 or value > 15 :
100+ raise ValueError ("Window size must be between 9 and 15 inclusive" )
101+ self ._client_max_window_bits = value
102+
103+ @property
104+ def server_max_window_bits (self ) -> int :
105+ return self ._server_max_window_bits
106+
107+ @server_max_window_bits .setter
108+ def server_max_window_bits (self , value : int ) -> None :
109+ if value < 9 or value > 15 :
110+ raise ValueError ("Window size must be between 9 and 15 inclusive" )
111+ self ._server_max_window_bits = value
112+
93113 def _compressible_opcode (self , opcode : Opcode ) -> bool :
94114 return opcode in (Opcode .TEXT , Opcode .BINARY , Opcode .CONTINUATION )
95115
@@ -146,25 +166,27 @@ def _parse_params(self, params: str) -> Tuple[Optional[int], Optional[int]]:
146166
147167 return client_max_window_bits , server_max_window_bits
148168
149- def accept (self , offer : str ) -> Union [bool , str ]:
169+ def accept (self , offer : str ) -> Union [bool , None , str ]:
150170 client_max_window_bits , server_max_window_bits = self ._parse_params (offer )
151171
152- self ._enabled = True
153-
154172 parameters = []
155173
156174 if self .client_no_context_takeover :
157175 parameters .append ("client_no_context_takeover" )
158- if client_max_window_bits is not None :
159- parameters .append ("client_max_window_bits=%d" % client_max_window_bits )
160- self .client_max_window_bits = client_max_window_bits
161176 if self .server_no_context_takeover :
162177 parameters .append ("server_no_context_takeover" )
163- if server_max_window_bits is not None :
164- parameters .append ("server_max_window_bits=%d" % server_max_window_bits )
165- self .server_max_window_bits = server_max_window_bits
166-
167- return "; " .join (parameters )
178+ try :
179+ if client_max_window_bits is not None :
180+ parameters .append ("client_max_window_bits=%d" % client_max_window_bits )
181+ self .client_max_window_bits = client_max_window_bits
182+ if server_max_window_bits is not None :
183+ parameters .append ("server_max_window_bits=%d" % server_max_window_bits )
184+ self .server_max_window_bits = server_max_window_bits
185+ except ValueError :
186+ return None
187+ else :
188+ self ._enabled = True
189+ return "; " .join (parameters )
168190
169191 def frame_inbound_header (
170192 self ,
0 commit comments