package com.limegroup.gnutella.downloader.serial.conversion; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.ObjectStreamClass; import java.io.ObjectStreamField; import java.io.Serializable; import java.net.URI; import java.net.URISyntaxException; import java.util.List; import java.util.Map; import org.limewire.util.GenericsUtils; import com.limegroup.gnutella.URN; public class SerialBTMetaInfo implements Serializable { private static final long serialVersionUID = -2693983731217045071L; private static final ObjectStreamField[] serialPersistentFields = ObjectStreamClass.NO_FIELDS; private List<byte[]> hashes; private SerialTorrentFileSystem fileSystem; private byte[] infoHash; private URN infoHashURN; private SerialOldURI[] trackers; private SerialDiskManagerData diskManagerData; private int pieceLength; private boolean isPrivate; private float historicRatio; // keys used between read/write object. static enum SerialKeys { HASHES, PIECE_LENGTH, FILE_SYSTEM, INFO_HASH, TRACKERS, RATIO, FOLDER_DATA, PRIVATE; } private void writeObject(ObjectOutputStream out) {}; /** * Overrides serialization method to initialize the VerifyingFolder */ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { Object read = in.readObject(); Map<SerialKeys, Serializable> toRead; toRead = GenericsUtils.scanForMap(read, SerialKeys.class, Serializable.class, GenericsUtils.ScanMode.EXCEPTION); hashes = GenericsUtils.scanForList(toRead.get(SerialKeys.HASHES), byte[].class, GenericsUtils.ScanMode.EXCEPTION); Integer pieceLength = (Integer)toRead.get(SerialKeys.PIECE_LENGTH); fileSystem = (SerialTorrentFileSystem) toRead.get(SerialKeys.FILE_SYSTEM); infoHash = (byte []) toRead.get(SerialKeys.INFO_HASH); infoHashURN = URN.createSHA1UrnFromBytes(infoHash); trackers = (SerialOldURI[]) toRead.get(SerialKeys.TRACKERS); Float ratio = (Float)toRead.get(SerialKeys.RATIO); diskManagerData = (SerialDiskManagerData)toRead.get(SerialKeys.FOLDER_DATA); historicRatio = ratio.floatValue(); this.pieceLength = pieceLength.intValue(); if (toRead.containsKey(SerialKeys.PRIVATE)) isPrivate = true; } public List<byte[]> getHashes() { return hashes; } public SerialTorrentFileSystem getFileSystem() { return fileSystem; } public byte[] getInfoHash() { return infoHash; } public URN getInfoHashURN() { return infoHashURN; } public URI[] getTrackers() throws URISyntaxException { URI [] uris = new URI[trackers.length]; for(int i = 0; i < trackers.length; i++) { uris[i] = trackers[i].toURI(); } return uris; } public SerialDiskManagerData getDiskManagerData() { return diskManagerData; } public int getPieceLength() { return pieceLength; } public boolean isPrivate() { return isPrivate; } public float getHistoricRatio() { return historicRatio; } }