@@ -96,8 +96,6 @@ def _process_websocket_frame(self, opcode, payload):
9696 return self .PONG , payload
9797 elif opcode == self .PONG : # pragma: no branch
9898 return None , None
99- else :
100- print (f"Warning: aiohttp_ws.py received unsupported opcode { opcode } with data { payload } " )
10199 return None , payload
102100
103101 @classmethod
@@ -191,39 +189,21 @@ async def close(self):
191189 await self .send (b"" , self .CLOSE )
192190
193191 async def _read_frame (self ):
194- header = await self .reader .read (2 )
192+ header = await self .reader .readexactly (2 )
195193 if len (header ) != 2 : # pragma: no cover
196194 # raise OSError(32, "Websocket connection closed")
197195 opcode = self .CLOSE
198196 payload = b""
199197 return opcode , payload
200198 fin , opcode , has_mask , length = self ._parse_frame_header (header )
201199 if length == 126 : # Magic number, length header is 2 bytes
202- length_data = await self .reader .read (2 )
203- if len (length_data ) != 2 :
204- print ("WARNING: aiohttp_ws.py failed to read 2-byte length, closing" )
205- return self .CLOSE , b""
206- (length ,) = struct .unpack ("!H" , length_data )
200+ (length ,) = struct .unpack ("!H" , await self .reader .readexactly (2 ))
207201 elif length == 127 : # Magic number, length header is 8 bytes
208- length_data = await self .reader .read (8 )
209- if len (length_data ) != 8 :
210- print ("WARNING: aiohttp_ws.py failed to read 8-byte length, closing" )
211- return self .CLOSE , b""
212- (length ,) = struct .unpack ("!Q" , length_data )
202+ (length ,) = struct .unpack ("!Q" , await self .reader .readexactly (8 ))
203+
213204 if has_mask : # pragma: no cover
214- mask = await self .reader .read (4 )
215- if len (mask ) != 4 :
216- print ("WARNING: aiohttp_ws.py failed to read mask, closing" )
217- return self .CLOSE , b""
218- payload = b""
219- remaining_length = length
220- while remaining_length > 0 :
221- chunk = await self .reader .read (remaining_length )
222- if not chunk : # Connection closed or error
223- print (f"WARNING: aiohttp_ws.py connection closed while reading payload, got { len (payload )} /{ length } bytes, closing" )
224- return self .CLOSE , b""
225- payload += chunk
226- remaining_length -= len (chunk )
205+ mask = await self .reader .readexactly (4 )
206+ payload = await self .reader .readexactly (length )
227207 if has_mask : # pragma: no cover
228208 payload = bytes (x ^ mask [i % 4 ] for i , x in enumerate (payload ))
229209 return opcode , payload
0 commit comments