package com.limegroup.bittorrent; import java.io.File; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; import org.limewire.bittorrent.TorrentIpPort; import org.limewire.bittorrent.TorrentManagerSettings; import org.limewire.core.settings.BittorrentSettings; import org.limewire.core.settings.ConnectionSettings; import org.limewire.core.settings.DownloadSettings; import org.limewire.core.settings.UploadSettings; import org.limewire.io.InvalidDataException; import org.limewire.io.UnresolvedIpPort; import org.limewire.io.UnresolvedIpPortImpl; import org.limewire.libtorrent.LibTorrentAlert; import org.limewire.libtorrent.LibTorrentIpPort; import org.limewire.logging.Log; import org.limewire.logging.LogFactory; /** * Implements the TorrentSetting interface with limewire specific settings. */ class LimeWireTorrentSettings implements TorrentManagerSettings { private static final Log LOG = LogFactory.getLog(LimeWireTorrentSettings.class); @Override public int getMaxDownloadBandwidth() { if (!DownloadSettings.LIMIT_MAX_DOWNLOAD_SPEED.getValue()) { return 0; } return DownloadSettings.MAX_DOWNLOAD_SPEED.getValue(); } @Override public int getMaxUploadBandwidth() { if (!UploadSettings.LIMIT_MAX_UPLOAD_SPEED.getValue()) { return 0; } return UploadSettings.MAX_UPLOAD_SPEED.getValue(); } @Override public boolean isTorrentsEnabled() { return BittorrentSettings.LIBTORRENT_ENABLED.getValue(); } @Override public boolean isReportingLibraryLoadFailture() { return BittorrentSettings.LIBTORRENT_REPORT_LIBRARY_LOAD_FAILURE.getValue(); } @Override public int getListenStartPort() { return BittorrentSettings.LIBTORRENT_LISTEN_START_PORT.getValue(); } @Override public int getListenEndPort() { return BittorrentSettings.LIBTORRENT_LISTEN_END_PORT.getValue(); } @Override public float getSeedRatioLimit() { if (BittorrentSettings.UPLOAD_TORRENTS_FOREVER.getValue()) { return Float.MAX_VALUE; } return BittorrentSettings.LIBTORRENT_SEED_RATIO_LIMIT.getValue(); } @Override public int getSeedTimeLimit() { if (BittorrentSettings.UPLOAD_TORRENTS_FOREVER.getValue()) { return Integer.MAX_VALUE; } return BittorrentSettings.LIBTORRENT_SEED_TIME_LIMIT.getValue(); } @Override public float getSeedTimeRatioLimit() { return BittorrentSettings.LIBTORRENT_SEED_TIME_RATIO_LIMIT.getValue(); } @Override public int getActiveDownloadsLimit() { return BittorrentSettings.LIBTORRENT_ACTIVE_DOWNLOADS_LIMIT.getValue(); } @Override public int getActiveLimit() { return BittorrentSettings.LIBTORRENT_ACTIVE_LIMIT.getValue(); } @Override public int getActiveSeedsLimit() { return BittorrentSettings.LIBTORRENT_ACTIVE_SEEDS_LIMIT.getValue(); } @Override public int getAlertMask() { return LibTorrentAlert.storage_notification | LibTorrentAlert.progress_notification | LibTorrentAlert.status_notification; } @Override public File getDHTStateFile() { return BittorrentSettings.LIBTORRENT_DHT_STATE.get(); } @Override public List<TorrentIpPort> getBootStrapDHTRouters() { String[] routerStrings = BittorrentSettings.TORRENT_BOOTSTRAP_DHT_ROUTERS.get(); List<TorrentIpPort> dhtRouters = new ArrayList<TorrentIpPort>(); if (routerStrings != null) { for (int i = 0; i < routerStrings.length; i++) { String router = routerStrings[i]; try { UnresolvedIpPort unresolvedIpPort = new UnresolvedIpPortImpl(router); unresolvedIpPort.resolve(); dhtRouters.add(new LibTorrentIpPort(unresolvedIpPort.getAddress(), unresolvedIpPort.getPort())); } catch (UnknownHostException e) { LOG.debugf(e, "Address not valid: {0}", router); } catch (InvalidDataException e) { LOG.debugf(e, "Router not valid: {0}", router); } } } return dhtRouters; } @Override public String getListenInterface() { if (ConnectionSettings.CUSTOM_NETWORK_INTERFACE.getValue()) { return ConnectionSettings.CUSTOM_INETADRESS.get(); } return null; } }