/* * File : PEPeerManager * 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 org.gudy.azureus2.core3.peer; /** * @author parg * @author MjrTom * 2005/Oct/08: pieceAdded => addPiece to simplify new piece-picking, getAvgAvail * */ import java.util.*; //import org.gudy.azureus2.core3.disk.*; //import org.gudy.azureus2.core3.peer.impl.PEPeerTransport; import org.gudy.azureus2.core3.peer.util.PeerIdentityDataID; //import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerResponse; import org.gudy.azureus2.core3.util.DirectByteBuffer; import org.gudy.azureus2.core3.util.IndentWriter; import org.gudy.azureus2.plugins.peers.PeerDescriptor; //import com.aelitis.azureus.core.networkmanager.LimitedRateGroup; //import com.aelitis.azureus.core.peermanager.peerdb.PeerExchangerItem; //import com.aelitis.azureus.core.peermanager.piecepicker.PiecePicker; public interface PEPeerManager { // public DiskManager getDiskManager(); // public PiecePicker getPiecePicker(); // // public PEPeerManagerAdapter getAdapter(); public void start(); public void stopAll(); public byte[] getHash(); public String getDisplayName(); public PeerIdentityDataID getPeerIdentityDataID(); public byte[] getPeerId(); public int[] getAvailability(); public int getAvailability(int pieceNumber); public float getAvgAvail(); public float getMinAvailability(); public long getAvailWentBadTime(); public boolean hasDownloadablePiece(); /** Often better to use getPiece(pieceNumber) */ public PEPiece[] getPieces(); /** @return PEPiece or null if piece not currently active */ public PEPiece getPiece(int pieceNumber); public PEPeerManagerStats getStats(); // public void // processTrackerResponse( // TRTrackerAnnouncerResponse response ); public int getNbPeers(); public int getNbSeeds(); public int getPieceLength(int pieceNumber); public long getRemaining(); public long getHiddenBytes(); public long getETA(); public String getElapsedTime(); // Time Started in ms public long getTimeStarted(); public long getTimeStartedSeeding(); public void addListener( PEPeerManagerListener l ); public void removeListener( PEPeerManagerListener l ); public void addPiece(PEPiece piece, int pieceNumber); public boolean needsMD5CheckOnCompletion(int pieceNumber); public boolean isSeeding(); public boolean isSuperSeedMode(); public boolean canToggleSuperSeedMode(); public void setSuperSeedMode( boolean on ); public boolean seedPieceRecheck(); public int getNbRemoteConnectionsExcludingUDP(); public long getLastRemoteConnectionTime(); public int getMaxNewConnectionsAllowed(); public boolean hasPotentialConnections(); /** * Data bytes received. * @param l */ public void dataBytesReceived( PEPeer peer, int l ); /** * Data bytes sent. * @param l */ public void dataBytesSent( PEPeer peer, int l ); /** * Protocol bytes sent. * @param length */ public void protocolBytesSent( PEPeer peer, int length ); /** * Protocol bytes received. * @param length */ public void protocolBytesReceived( PEPeer peer, int length ); public void discarded( PEPeer peer, int l ); public PEPeerStats createPeerStats( PEPeer owner ); public List<PEPeer> getPeers(); public List<PEPeer> getPeers( String address ); public PeerDescriptor[] getPendingPeers(); public PeerDescriptor[] getPendingPeers( String address ); public void addPeer( PEPeer peer ); /** * Add a new peer, using the default internal PEPeer implementation * (like for peers given in announce reply), using the given address * and port. * @param ip_address of peer to inject * @param tcp_port of peer to inject * @param udp_port of peer to inject (0 if unknown) * @param use_crypto use encrypted transport */ public void addPeer( String ip_address, int tcp_port, int udp_port, boolean use_crypto, Map user_data ); public void removePeer( PEPeer peer ); public void removePeer( PEPeer peer, String reason ); public void peerAdded(PEPeer pc); public void peerRemoved(PEPeer pc); // public DiskManagerReadRequest // createDiskManagerRequest( // int pieceNumber, // int offset, // int length ); // // public void // requestCanceled( // DiskManagerReadRequest item ); public boolean requestExists( String peer_ip, int piece_number, int offset, int length ); // public boolean // validatePieceReply( // PEPeerTransport originator, // int pieceNumber, // int offset, // DirectByteBuffer data ); public void writeBlock( int pieceNumber, int offset, DirectByteBuffer data, PEPeer sender, boolean cancel); // public void writeBlockAndCancelOutstanding(int pieceNumber, int offset, DirectByteBuffer data,PEPeer sender); public boolean isWritten( int piece_number, int offset ); /** * Are we in end-game mode? * @return true if in end game mode, false if not */ public boolean isInEndGameMode(); // /** // * Notify the manager that the given peer connection has been closed. // * @param peer closed // */ // public void peerConnectionClosed( PEPeerTransport peer, boolean connect_failed, boolean network_failed ); // // // // /** // * Register a peer connection for peer exchange handling. // * NOTE: Creation could fail if the peer is not eligible for peer exchange (like if it's remote port is unknown). // * @param base_peer exchaning with // * @return peer database connection item, or null if creation failed // */ // public PeerExchangerItem createPeerExchangeConnection( PEPeerTransport base_peer ); // // // /** // * Notify that the given peer connection represents our own client. // * @param self peer // */ // public void peerVerifiedAsSelf( PEPeerTransport self ); // // // /** // * Get the limited rate group used for upload limiting. // * @return upload limit group // */ // public LimitedRateGroup getUploadLimitedRateGroup(); // // /** // * Get the limited rate group used for download limiting. // * @return download limit group // */ // public LimitedRateGroup getDownloadLimitedRateGroup(); public int getUploadRateLimitBytesPerSecond(); public int getDownloadRateLimitBytesPerSecond(); /** To retreive arbitrary objects against this object. */ public Object getData (String key); /** To store arbitrary objects against this object. */ public void setData (String key, Object value); /** * Get the average completion percentage of connected peers. * @return average percent complete in thousand notation */ public int getAverageCompletionInThousandNotation(); // /** // * Locate an existing transport via peer id byte identity. // * @param peer_id to look for // * @return transport with matching identity, or null if no match is found // */ // public PEPeerTransport getTransportFromIdentity( byte[] peer_id ); // // /** // * Locate an existing transport via [IP] Address. // * @param peer String to look for // * @return PEPeerTransport with matching address String, or null if no match is found // */ // public PEPeerTransport getTransportFromAddress(String peer); public boolean getPreferUDP(); public void setPreferUDP( boolean prefer ); // public void // addRateLimiter( // LimitedRateGroup group, // boolean upload ); // // public void // removeRateLimiter( // LimitedRateGroup group, // boolean upload ); public boolean isPeerSourceEnabled( String peer_source ); public int getPartitionID(); public void generateEvidence( IndentWriter writer ); }