예제 #1
0
    def dataReceived(this, data):
        packet = "" + data
        if packet.startswith("<policy-file-request/>"):
            this.transport.write(
                "<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" /></cross-domain-policy>"
            )
            this.transport.loseConnection()
            return

        elif packet.startswith("change_avatar_"):
            key = packet.replace("change_avatar_", "")
            if this.server.clientAvatarKeys.has_key(key):
                player = this.server.avatarKeys[key]
                this.transport.write(player.Username + " - " + player.playerID)
            else:
                this.transport.write("error")

        if packet == None or len(packet) < 2:
            return

        this.recvd += data
        while not this.recvd == "":
            dataLength = len(this.recvd)
            if dataLength > 1:
                p = ByteArray(this.recvd)
                sizeBytes = p.readByte()
                length = p.readUnsignedByte(
                ) if sizeBytes == 1 else p.readUnsignedShort(
                ) if sizeBytes == 2 else (
                    (p.readUnsignedByte() & 0xFF) << 16) | (
                        (p.readUnsignedByte() & 0xFF) << 8
                    ) | (p.readUnsignedByte() & 0xFF) if sizeBytes == 3 else 0

                if length == 0:
                    return

                length += 1
                dataLength -= (sizeBytes + 1)
                if dataLength == length:
                    this.parseString(this.recvd[sizeBytes + 1:])
                    this.recvd = ""

                elif dataLength < length:
                    break
                else:
                    this.parseString(this.recvd[sizeBytes + 1:][:length])
                    this.recvd = this.recvd[length + sizeBytes + 1:]
            else:
                break
예제 #2
0
    def open(self, filename):
        source = open(filename, 'rb').read()

        data = zlib.decompress(source)

        reader = ByteArray(data)

        magicCode = reader.readUnsignedInt()

        if magicCode != self.magicCode:
            raise Exception('Magic code invalid!')

        numFiles = reader.readUnsignedShort()

        lengths = []

        for _ in range(numFiles):
            length = reader.readUnsignedInt()

            lengths.append(length)

        names = []

        for _ in range(numFiles):
            lengthBytes = reader.readUnsignedShort()

            name = reader.readMultiByte(lengthBytes)

            names.append(name)

        for i in range(numFiles):
            data = reader.readBytes(lengths[x])

            with open(self.unpackDir + names[x], 'wb') as file:
                print('Writing {0} to disk!'.format(names[i]))
                file.write(data)
    def dataReceived(this, packet):
        data = "" + packet
        if packet.startswith("<policy-file-request/>"):
            this.transport.write(
                "<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" /></cross-domain-policy>"
            )
            this.transport.loseConnection()
            return

        if packet == None or len(packet) < 2:
            return

        this.recvd += packet
        while not this.recvd == "":
            dataLength = len(this.recvd)
            if dataLength > 1:
                p = ByteArray(this.recvd)
                sizeBytes = p.readByte()
                length = p.readUnsignedByte(
                ) if sizeBytes == 1 else p.readUnsignedShort(
                ) if sizeBytes == 2 else (
                    (p.readUnsignedByte() & 0xFF) << 16) | (
                        (p.readUnsignedByte() & 0xFF) << 8
                    ) | (p.readUnsignedByte() & 0xFF) if sizeBytes == 3 else 0

                if length == 0:
                    return

                length += 1
                dataLength -= (sizeBytes + 1)
                if dataLength == length:
                    this.parseString(this.recvd[sizeBytes + 1:])
                    this.recvd = ""

                elif dataLength < length:
                    break
                else:
                    this.parseString(this.recvd[sizeBytes + 1:][:length])
                    this.recvd = this.recvd[length + sizeBytes + 1:]
            else:
                break