def send(self, stream, pack=pack, len=len, adler32=adler32, encryptXTEA=encryptXTEA, sum=sum, map=map): if not stream or len(self.data) < 2: return length = sum(map(len, self.data)) self.data[0] = pack("<H", length) #data = "%s%s" % (pack("<H", le(self.data)), ''.join(self.data)) if stream.xtea: data = encryptXTEA(self.data, stream.xtea, length+2) else: data = ''.join(self.data) stream.transport.write(pack("<HI", len(data)+4, adler32(data) & 0xffffffff)+data) self.data = None
def sendto(self, list): if not list or not self.data: return # Noone to send to length = sum(map(len, self.data)) self.data[0] = pack("<H", length) #data = "%s%s" % (pack("<H", len(self.data)), ''.join(self.data)) for client in list: if not client: continue if client.xtea: data = encryptXTEA(self.data, client.xtea, length+2) else: data = ''.join(self.data) client.transport.write(pack("<HI", len(data)+4, adler32(data) & 0xffffffff)+data)
def sendPacket(self, format, *argc, **kwargs): import packet as p import otcrypto from struct import pack from zlib import adler32 packet = p.TibiaPacket() i = 0 for c in format: if c == "b": packet.uint8(argc[i]) elif c == "h": packet.uint16(argc[i]) elif c == "i": packet.uint32(argc[i]) elif c == "q": packet.uint64(argc[i]) elif c == "P": packet.uint16(argc[i].x) packet.uint16(argc[i].y) packet.uint8(argc[i].z) elif c == "s": packet.string(argc[i]) i += 1 if self.client.xtea: length = sum(map(len, packet.data)) packet.data[0] = bytes(str(length)) data = otcrypto.encryptXTEA(packet.data, self.client.xtea, length) else: packet.data[0] = b'' try: data = b''.join(packet.data) except: print((packet.data)) data = pack("<I", adler32(data) & 0xffffffff) + data if kwargs: return p.TibiaPacketReader(data) else: self.client.handlePacketData(data)
def sendto(self, list): if not list or not self.data: return # Noone to send to length = sum(map(len, self.data)) self.data[0] = pack("<H", length) #data = "%s%s" % (pack("<H", len(self.data)), ''.join(self.data)) for client in list: if not client: continue if client.xtea: data = encryptXTEA(self.data, client.xtea, length + 2) else: data = ''.join(self.data) client.transport.write( pack("<HI", len(data) + 4, adler32(data) & 0xffffffff) + data)
def sendPacket(self, format, *argc, **kwargs): import packet as p import otcrypto from struct import pack from zlib import adler32 packet = p.TibiaPacket() i = 0 for c in format: if c == "b": packet.uint8(argc[i]) elif c == "h": packet.uint16(argc[i]) elif c == "i": packet.uint32(argc[i]) elif c == "q": packet.uint64(argc[i]) elif c == "P": packet.uint16(argc[i].x) packet.uint16(argc[i].y) packet.uint8(argc[i].z) elif c == "s": packet.string(argc[i]) i += 1 if self.client.xtea: length = sum(map(len, packet.data)) packet.data[0] = length data = otcrypto.encryptXTEA(packet.data, self.client.xtea, length) else: data = ''.join(packet.data) self.client._packets.append(packet) self.client._data = pack("<HI", len(data)+4, adler32(data) & 0xffffffff)+data if kwargs: return p.TibiaPacketReader(packet.data[1:]) else: self.client.dataReceived(self.client._data[1:])
def sendPacket(self, format, *argc, **kwargs): import packet as p import otcrypto from struct import pack from zlib import adler32 packet = p.TibiaPacket() i = 0 for c in format: if c == "b": packet.uint8(argc[i]) elif c == "h": packet.uint16(argc[i]) elif c == "i": packet.uint32(argc[i]) elif c == "q": packet.uint64(argc[i]) elif c == "P": packet.uint16(argc[i].x) packet.uint16(argc[i].y) packet.uint8(argc[i].z) elif c == "s": packet.string(argc[i]) i += 1 if self.client.xtea: length = sum(map(len, packet.data)) packet.data[0] = length data = otcrypto.encryptXTEA(packet.data, self.client.xtea, length) else: data = ''.join(packet.data) self.client._packets.append(packet) self.client._data = pack("<HI", len(data) + 4, adler32(data) & 0xffffffff) + data if kwargs: return p.TibiaPacketReader(packet.data[1:]) else: self.client.dataReceived(self.client._data[1:])
def _send(self, stream, data, length, pack_length=pack_uint16, pack_header=pack_header, adler32=adler32, encryptXTEA=encryptXTEA): if not stream: return if stream.webSocket is True: stream.write_message(b''.join(data), True) else: data[0] = pack_length(length) length += 2 if stream.xtea: data = encryptXTEA(data, stream.xtea, length) else: data = b''.join(data) stream.transport.write(b''.join( (pack_header(len(data) + 4, adler32(data)), data)))
def send(self, stream, pack=pack, len=len, adler32=adler32, encryptXTEA=encryptXTEA, sum=sum, map=map): if not stream or len(self.data) < 2: return length = sum(map(len, self.data)) self.data[0] = pack("<H", length) #data = "%s%s" % (pack("<H", le(self.data)), ''.join(self.data)) if stream.xtea: data = encryptXTEA(self.data, stream.xtea, length + 2) else: data = ''.join(self.data) stream.transport.write( pack("<HI", len(data) + 4, adler32(data) & 0xffffffff) + data) self.data = None