Skip to content

Commit 92c0b4b

Browse files
committed
Compact compatibility between py2 and py3
1 parent 1bb34f4 commit 92c0b4b

File tree

1 file changed

+16
-22
lines changed

1 file changed

+16
-22
lines changed

websocket.py

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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('\nupgrade[\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

Comments
 (0)