@@ -146,15 +146,22 @@ def handle(self):
146146 elif self .valid_client :
147147 self .read_next_message ()
148148
149+ def read_bytes (self , num ):
150+ # python3 gives ordinal of byte directly
151+ bytes = self .rfile .read (num )
152+ if sys .version_info [0 ] < 3 :
153+ return map (ord , bytes )
154+ else :
155+ return bytes
149156
150157 def read_next_message (self ):
151158
152- b1 , b2 = self .rfile . read (2 )
159+ b1 , b2 = self .read_bytes (2 )
153160
154- fin = ord ( b1 ) & FIN
155- opcode = ord ( b1 ) & OPCODE
156- masked = ord ( b2 ) & MASKED
157- payload_length = ord ( b2 ) & PAYLOAD_LEN
161+ fin = b1 & FIN
162+ opcode = b1 & OPCODE
163+ masked = b2 & MASKED
164+ payload_length = b2 & PAYLOAD_LEN
158165
159166 if not b1 :
160167 print ("Client closed connection." )
@@ -174,25 +181,16 @@ def read_next_message(self):
174181 elif payload_length == 127 :
175182 payload_length = struct .unpack (">Q" , self .rfile .read (8 ))[0 ]
176183
177- # python3 gives ordinal of byte directly
178- if sys .version_info [0 ] < 3 :
179- masks = [ord (b ) for b in self .rfile .read (4 )]
180- else :
181- masks = [b for b in self .rfile .read (4 )]
182-
184+ masks = self .read_bytes (4 )
183185 decoded = ""
184- for char in self .rfile .read (payload_length ):
185- if isinstance (char , str ): # python2 fix
186- char = ord (char )
186+ for char in self .read_bytes (payload_length ):
187187 char ^= masks [len (decoded ) % 4 ]
188188 decoded += chr (char )
189189 self .server ._message_received_ (self , decoded )
190190
191-
192191 def send_message (self , message ):
193192 self .send_text (message )
194193
195-
196194 def send_text (self , message ):
197195 '''
198196 NOTES
@@ -239,7 +237,6 @@ def send_text(self, message):
239237
240238 self .request .send (header + payload )
241239
242-
243240 def handshake (self ):
244241 message = self .request .recv (1024 ).decode ().strip ()
245242 upgrade = re .search ('\n upgrade[\s]*:[\s]*websocket' , message .lower ())
@@ -257,24 +254,21 @@ def handshake(self):
257254 self .handshake_done = self .request .send (response .encode ())
258255 self .valid_client = True
259256 self .server ._new_client_ (self )
260-
261-
257+
262258 def make_handshake_response (self , key ):
263259 return \
264260 'HTTP/1.1 101 Switching Protocols\r \n ' \
265261 'Upgrade: websocket\r \n ' \
266262 'Connection: Upgrade\r \n ' \
267263 'Sec-WebSocket-Accept: %s\r \n ' \
268264 '\r \n ' % self .calculate_response_key (key )
269-
270-
265+
271266 def calculate_response_key (self , key ):
272267 GUID = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'
273268 hash = sha1 (key .encode () + GUID .encode ())
274269 response_key = b64encode (hash .digest ()).strip ()
275270 return response_key .decode ('ASCII' )
276271
277-
278272 def finish (self ):
279273 self .server ._client_left_ (self )
280274
0 commit comments