Example #1
0
    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
Example #2
0
    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)
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
    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:])
Example #6
0
    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:])
Example #7
0
    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)))
Example #8
0
    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