/*
* File : TOTorrentFactory.java
* Created : 5 Oct. 2003
* By : Parg
*
* Azureus - a Java Bittorrent client
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details ( see the LICENSE file ).
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.frostwire.torrent;
import java.io.File;
import java.io.InputStream;
import java.net.URI;
import java.util.Map;
public class TOTorrentFactory {
public static final long TO_DEFAULT_FIXED_PIECE_SIZE = 256 * 1024;
public static final long TO_DEFAULT_VARIABLE_PIECE_SIZE_MIN = 32 * 1024;
public static final long TO_DEFAULT_VARIABLE_PIECE_SIZE_MAX = 2 * 1024 * 1024;
public static final long TO_DEFAULT_VARIABLE_PIECE_NUM_LOWER = 1024;
public static final long TO_DEFAULT_VARIABLE_PIECE_NUM_UPPER = 2048;
public static final long[] STANDARD_PIECE_SIZES = { 32 * 1024, 48 * 1024, 64 * 1024, 96 * 1024, 128 * 1024, 192 * 1024, 256 * 1024, 384 * 1024, 512 * 1024, 768 * 1024, 1024 * 1024, 1536 * 1024, 2 * 1024 * 1024, 3 * 1024 * 1024, 4 * 1024 * 1024 };
// deserialisation methods
/**
* WARNING - take care if you use this that the data you're creating the torrent from doesn't contain
* unwanted attributes in it (e.g. "torrent filename"). You should almost definitely be using
* TorrentUtils.deserialiseFromBEncodedInputStream
* @param is
* @return
* @throws TOTorrentException
*/
public static TOTorrent deserialiseFromBEncodedInputStream(InputStream is) throws TOTorrentException {
return new TOTorrentDeserialiseImpl(is);
}
public static TOTorrent deserialiseFromBEncodedByteArray(byte[] bytes) throws TOTorrentException {
return new TOTorrentDeserialiseImpl(bytes);
}
public static TOTorrent deserialiseFromMap(Map<String, Object> data) throws TOTorrentException {
return new TOTorrentDeserialiseImpl(data);
}
// construction methods: fixed piece size
public static TOTorrentCreator createFromFileOrDirWithFixedPieceLength(File file, URI announce_url)
throws TOTorrentException {
return (createFromFileOrDirWithFixedPieceLength(file, announce_url, false, TO_DEFAULT_FIXED_PIECE_SIZE));
}
public static TOTorrentCreator createFromFileOrDirWithFixedPieceLength(File file, URI announce_url, boolean add_hashes)
throws TOTorrentException {
return (createFromFileOrDirWithFixedPieceLength(file, announce_url, add_hashes, TO_DEFAULT_FIXED_PIECE_SIZE));
}
public static TOTorrentCreator createFromFileOrDirWithFixedPieceLength(File file, URI announce_url, long piece_length)
throws TOTorrentException {
return (createFromFileOrDirWithFixedPieceLength(file, announce_url, false, piece_length));
}
public static TOTorrentCreator createFromFileOrDirWithFixedPieceLength(File file, URI announce_url, boolean add_hashes, long piece_length)
throws TOTorrentException {
return (new TOTorrentCreatorImpl(file, announce_url, add_hashes, piece_length));
}
// construction methods: variable piece size
public static TOTorrentCreator createFromFileOrDirWithComputedPieceLength(File file, URI announce_url)
throws TOTorrentException {
return (createFromFileOrDirWithComputedPieceLength(file, announce_url, false));
}
public static TOTorrentCreator createFromFileOrDirWithComputedPieceLength(File file, URI announce_url, boolean add_hashes)
throws TOTorrentException {
return (createFromFileOrDirWithComputedPieceLength(file, announce_url, add_hashes, TO_DEFAULT_VARIABLE_PIECE_SIZE_MIN, TO_DEFAULT_VARIABLE_PIECE_SIZE_MAX, TO_DEFAULT_VARIABLE_PIECE_NUM_LOWER, TO_DEFAULT_VARIABLE_PIECE_NUM_UPPER));
}
public static TOTorrentCreator createFromFileOrDirWithComputedPieceLength(File file, URI announce_url, long piece_min_size, long piece_max_size, long piece_num_lower, long piece_num_upper)
throws TOTorrentException {
return (createFromFileOrDirWithComputedPieceLength(file, announce_url, false, piece_min_size, piece_max_size, piece_num_lower, piece_num_upper));
}
public static TOTorrentCreator createFromFileOrDirWithComputedPieceLength(File file, URI announce_url, boolean add_hashes, long piece_min_size, long piece_max_size, long piece_num_lower, long piece_num_upper)
throws TOTorrentException {
return new TOTorrentCreatorImpl(file, announce_url, add_hashes, 0, piece_min_size, piece_max_size, piece_num_lower, piece_num_upper, null);
}
public static long getComputedPieceSize(long data_size) {
return (TOTorrentCreateImpl.getComputedPieceSize(data_size, TO_DEFAULT_VARIABLE_PIECE_SIZE_MIN, TO_DEFAULT_VARIABLE_PIECE_SIZE_MAX, TO_DEFAULT_VARIABLE_PIECE_NUM_LOWER, TO_DEFAULT_VARIABLE_PIECE_NUM_UPPER));
}
public static long getPieceCount(long total_size, long piece_size) {
return (TOTorrentCreateImpl.getPieceCount(total_size, piece_size));
}
}