Extract close code and reason in decode_hybi.
Also, make it a bit more robust if no code and/or reason is given.
This commit is contained in:
parent
a339a4856a
commit
8c3fc55124
21
websocket.py
21
websocket.py
|
@ -177,7 +177,9 @@ Sec-WebSocket-Accept: %s\r
|
||||||
'mask' : 32_bit_number,
|
'mask' : 32_bit_number,
|
||||||
'length' : payload_bytes_number,
|
'length' : payload_bytes_number,
|
||||||
'payload' : decoded_buffer,
|
'payload' : decoded_buffer,
|
||||||
'left' : bytes_left_number}
|
'left' : bytes_left_number,
|
||||||
|
'close_code' : number,
|
||||||
|
'close_reason' : string}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
ret = {'fin' : 0,
|
ret = {'fin' : 0,
|
||||||
|
@ -185,7 +187,9 @@ Sec-WebSocket-Accept: %s\r
|
||||||
'mask' : 0,
|
'mask' : 0,
|
||||||
'length' : 0,
|
'length' : 0,
|
||||||
'payload' : None,
|
'payload' : None,
|
||||||
'left' : 0}
|
'left' : 0,
|
||||||
|
'close_code' : None,
|
||||||
|
'close_reason' : None}
|
||||||
|
|
||||||
blen = len(buf)
|
blen = len(buf)
|
||||||
ret['left'] = blen
|
ret['left'] = blen
|
||||||
|
@ -253,6 +257,13 @@ Sec-WebSocket-Accept: %s\r
|
||||||
print "Exception while b64decoding buffer:", repr(buf)
|
print "Exception while b64decoding buffer:", repr(buf)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
if ret['opcode'] == 0x08:
|
||||||
|
if ret['length'] >= 2:
|
||||||
|
ret['close_code'] = struct.unpack_from(
|
||||||
|
">H", ret['payload'])
|
||||||
|
if ret['length'] > 3:
|
||||||
|
ret['close_reason'] = ret['payload'][2:]
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -391,11 +402,9 @@ Sec-WebSocket-Accept: %s\r
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
if frame['opcode'] == 0x8: # connection close
|
if frame['opcode'] == 0x8: # connection close
|
||||||
code, reason = struct.unpack_from(
|
|
||||||
">H%ds" % (frame['length']-2),
|
|
||||||
frame['payload'])
|
|
||||||
closed = "Client closed, reason: %s - %s" % (
|
closed = "Client closed, reason: %s - %s" % (
|
||||||
code, reason)
|
frame['close_code'],
|
||||||
|
frame['close_reason'])
|
||||||
break
|
break
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in New Issue