def decode_hixie(buf): end = buf.find(s2b('\xff')) return { 'payload': b64decode(buf[1:end]), 'hlen': 1, 'masked': False, 'length': end - 1, 'left': len(buf) - (end + 1) }
def decode_hixie(buf): end = buf.find(s2b("\xff")) return { "payload": b64decode(buf[1:end]), "hlen": 1, "masked": False, "length": end - 1, "left": len(buf) - (end + 1), }
def decode_hybi(buf, base64=False): """ Decode HyBi style WebSocket packets. Returns: {'fin' : 0_or_1, 'opcode' : number, 'masked' : boolean, 'hlen' : header_bytes_number, 'length' : payload_bytes_number, 'payload' : decoded_buffer, 'left' : bytes_left_number, 'close_code' : number, 'close_reason' : string} """ f = { 'fin': 0, 'opcode': 0, 'masked': False, 'hlen': 2, 'length': 0, 'payload': None, 'left': 0, 'close_code': 1000, 'close_reason': '' } blen = len(buf) f['left'] = blen if blen < f['hlen']: return f # Incomplete frame header b1, b2 = unpack_from(">BB", buf) f['opcode'] = b1 & 0x0f f['fin'] = (b1 & 0x80) >> 7 f['masked'] = (b2 & 0x80) >> 7 f['length'] = b2 & 0x7f if f['length'] == 126: f['hlen'] = 4 if blen < f['hlen']: return f # Incomplete frame header (f['length'], ) = unpack_from('>xxH', buf) elif f['length'] == 127: f['hlen'] = 10 if blen < f['hlen']: return f # Incomplete frame header (f['length'], ) = unpack_from('>xxQ', buf) full_len = f['hlen'] + f['masked'] * 4 + f['length'] if blen < full_len: # Incomplete frame return f # Incomplete frame header # Number of bytes that are part of the next frame(s) f['left'] = blen - full_len # Process 1 frame if f['masked']: # unmask payload f['payload'] = WebSocketServer.unmask(buf, f['hlen'], f['length']) else: print("Unmasked frame: %s" % repr(buf)) f['payload'] = buf[(f['hlen'] + f['masked'] * 4):full_len] if base64 and f['opcode'] in [1, 2]: try: f['payload'] = b64decode(f['payload']) except: print("Exception while b64decoding buffer: %s" % repr(buf)) raise if f['opcode'] == 0x08: if f['length'] >= 2: f['close_code'] = unpack_from(">H", f['payload'])[0] if f['length'] > 3: f['close_reason'] = f['payload'][2:] return f
def decode_hybi(buf, base64=False): """ Decode HyBi style WebSocket packets. Returns: {'fin' : 0_or_1, 'opcode' : number, 'masked' : boolean, 'hlen' : header_bytes_number, 'length' : payload_bytes_number, 'payload' : decoded_buffer, 'left' : bytes_left_number, 'close_code' : number, 'close_reason' : string} """ f = { "fin": 0, "opcode": 0, "masked": False, "hlen": 2, "length": 0, "payload": None, "left": 0, "close_code": 1000, "close_reason": "", } blen = len(buf) f["left"] = blen if blen < f["hlen"]: return f # Incomplete frame header b1, b2 = unpack_from(">BB", buf) f["opcode"] = b1 & 0x0F f["fin"] = (b1 & 0x80) >> 7 f["masked"] = (b2 & 0x80) >> 7 f["length"] = b2 & 0x7F if f["length"] == 126: f["hlen"] = 4 if blen < f["hlen"]: return f # Incomplete frame header (f["length"],) = unpack_from(">xxH", buf) elif f["length"] == 127: f["hlen"] = 10 if blen < f["hlen"]: return f # Incomplete frame header (f["length"],) = unpack_from(">xxQ", buf) full_len = f["hlen"] + f["masked"] * 4 + f["length"] if blen < full_len: # Incomplete frame return f # Incomplete frame header # Number of bytes that are part of the next frame(s) f["left"] = blen - full_len # Process 1 frame if f["masked"]: # unmask payload f["payload"] = WebSocketServer.unmask(buf, f["hlen"], f["length"]) else: print("Unmasked frame: %s" % repr(buf)) f["payload"] = buf[(f["hlen"] + f["masked"] * 4) : full_len] if base64 and f["opcode"] in [1, 2]: try: f["payload"] = b64decode(f["payload"]) except: print("Exception while b64decoding buffer: %s" % repr(buf)) raise if f["opcode"] == 0x08: if f["length"] >= 2: f["close_code"] = unpack_from(">H", f["payload"])[0] if f["length"] > 3: f["close_reason"] = f["payload"][2:] return f