def _pack_pid(val) -> bytes: data = bytes([TAG_PID_EXT]) + \ _pack_atom(val.node_name_) + \ util.to_u32(val.id_) + \ util.to_u32(val.serial_) + \ bytes([val.creation_]) return data
def _send_name(self): """ Create and send first welcome packet. """ pkt = b'n' + \ bytes([dist_protocol.DIST_VSN, dist_protocol.DIST_VSN]) + \ util.to_u32(self._get_node().node_opts_.dflags_) + \ bytes(self.node_name_, "latin-1") LOG.info("send_name %s (name=%s)", pkt, self.node_name_) self._send_packet2(pkt)
def _pack_tuple(val, encode_hook): if len(val) < 256: data = bytes([TAG_SMALL_TUPLE_EXT, len(val)]) else: data = bytes([TAG_LARGE_TUPLE_EXT]) + util.to_u32(len(val)) for item in val: data += term_to_binary_2(item, encode_hook) return data
def _pack_list(lst, tail, encode_hook): if len(lst) == 0: return bytes([TAG_NIL_EXT]) data = b'' for item in lst: data += term_to_binary_2(item, encode_hook) tail = term_to_binary_2(tail, encode_hook) return bytes([TAG_LIST_EXT]) + util.to_u32(len(lst)) + data + tail
def _pack_str(val): str_bytes = bytes(val, "utf8") len_str_bytes = len(str_bytes) len_val = len(val) if _can_be_a_bytestring(val) and len_str_bytes <= 65535: # same length as byte length header = bytes([TAG_STRING_EXT]) + util.to_u16(len_str_bytes) return header + str_bytes else: # contains unicode characters! must be encoded as a list of ints header = bytes([TAG_LIST_EXT]) + util.to_u32(len_val) elements = [_pack_int(ord(ch)) for ch in val] return header + b''.join(elements) + bytes([TAG_NIL_EXT])
def _send_challenge_reply(self, challenge: int): digest = self.make_digest(challenge, self._get_node().get_cookie()) self.my_challenge_ = int(random.random() * 0x7fffffff) pkt = b'r' + util.to_u32(self.my_challenge_) + digest return self._send_packet2(pkt)
def _pack_binary(data, last_byte_bits): if last_byte_bits == 8: return bytes([TAG_BINARY_EXT]) + util.to_u32(len(data)) + data return bytes([TAG_BIT_BINARY_EXT]) + util.to_u32(len(data)) + \ bytes([last_byte_bits]) + data
def _pack_dict(val: dict, encode_hook) -> bytes: data = bytes([TAG_MAP_EXT]) + util.to_u32(len(val)) for k in val.keys(): data += term_to_binary_2(k, encode_hook) data += term_to_binary_2(val[k], encode_hook) return data