def handle_packet(inst, mtype, pbuf_bytes, data_bytes): if mtype not in mtype_to_types: print("Unknown packet type {}!".format(debug.msg_type_str_local(mtype))) return chr(pb2.RESP_ERROR) + chr(pb2.ERR_UNKNOWN) pbuf_type, handler = mtype_to_types[mtype] pkt = pbuf_type() pkt.ParseFromString(pbuf_bytes) msg = handler(pkt, inst, data_bytes) if isinstance(msg, int): return pb2.RESP_ERROR, None, struct.pack('B', msg) return msg
def recv_packet(sock): header_bytes = recv_exact(sock, HEADER_SIZE) if len(header_bytes) == 0: return None header = struct.unpack(HEADER_FMT, header_bytes) print("{} (pbuflen {}, datalen {})".format( debug.msg_type_str_local(header[0]), header[1], header[2])) pbuf_bytes = recv_exact(sock, header[1]) data_bytes = recv_exact(sock, header[2]) return header[0], pbuf_bytes, data_bytes