def send_packet(self, name, *data): """Sends a packet to the remote.""" if self.closed: return self.log_packet("# send", name) data = b"".join(data) # Prepend ident key = (self.protocol_version, self.protocol_mode, self.send_direction, name) try: ident = packets.packet_idents[key] except KeyError: raise ProtocolError("No ID known for packet: %s" % (key, )) data = Buffer.pack_varint(ident) + data if self.compression_enabled: # Compress data and prepend uncompressed data length if len(data) >= self.compression_threshold: data = Buffer.pack_varint(len(data)) + zlib.compress(data) else: data = Buffer.pack_varint(0) + data # Prepend packet length max_bits = 32 if self.protocol_mode == "play" else 21 data = self.buff_type.pack_varint(len(data), max_bits=max_bits) + data # Encrypt data = self.cipher.encrypt(data) # Send self.transport.write(data)
def test_pack_varint(): for value, data in varint_vectors: assert Buffer.pack_varint(value) == data