def _process_ws_ping(self, payload): log("_process_ws_ping(%r)", payload) item = encode_hybi_header(OPCODE_PONG, len(payload)) + memoryview_to_bytes(payload) items = (item, ) with self._write_lock: self.raw_write(items)
def make_wschunk_header(self, packet_type, proto_flags, level, index, payload_size): header = Protocol.make_xpra_header(self, packet_type, proto_flags, level, index, payload_size) log("make_wschunk_header(%s)", (packet_type, proto_flags, level, index, payload_size)) return encode_hybi_header(OPCODE_BINARY, payload_size + len(header)) + header
def rt(opcode, payload, has_mask=False, fin=True): h = encode_hybi_header(opcode, len(payload), has_mask, fin) packet = h + payload ropcode, rpayload, rlen, rfin = decode_hybi(packet) assert opcode == ropcode assert rpayload == payload assert rlen > len(payload) assert fin == rfin
def make_wsframe_header(self, packet_type, items): payload_len = sum(len(item) for item in items) log("make_wsframe_header(%s, %i items) %i bytes", packet_type, len(items), payload_len) header = encode_hybi_header(OPCODE_BINARY, payload_len, self.ws_mask) if self.ws_mask: from xpra.codecs.xor.cyxor import hybi_mask #@UnresolvedImport mask = os.urandom(4) #now mask all the items: for i, item in enumerate(items): items[i] = hybi_mask(mask, item) return header+mask return header
def test_invalid_decode(self): for l in (0, 10, 125, 126, 65535, 65536): for has_mask in (True, False): payload = b"\0" * l h = encode_hybi_header(0, len(payload), has_mask, True) if has_mask: packet = h + b"9" * 4 + payload else: packet = h + payload v = decode_hybi(packet) assert v v = decode_hybi(packet[:-1]) assert v is None v = decode_hybi(packet[:int(has_mask) * 4]) assert v is None, "got %s" % (v, ) if l > 0: for i in range(5): v = decode_hybi(packet[:int(has_mask) * 4 + i]) assert v is None, "got %s" % (v, )