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
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