📄 trtrackerdhtannouncerimpl.java
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: TRTrackerDHTAnnouncerImpl.java
package org.gudy.azureus2.core3.tracker.client.impl.dht;
import java.net.URL;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.logging.LogEvent;
import org.gudy.azureus2.core3.logging.Logger;
import org.gudy.azureus2.core3.torrent.TOTorrent;
import org.gudy.azureus2.core3.torrent.TOTorrentException;
import org.gudy.azureus2.core3.tracker.client.*;
import org.gudy.azureus2.core3.tracker.client.impl.*;
import org.gudy.azureus2.core3.util.*;
import org.gudy.azureus2.plugins.clientid.ClientIDException;
import org.gudy.azureus2.plugins.download.DownloadAnnounceResult;
import org.gudy.azureus2.plugins.download.DownloadAnnounceResultPeer;
import org.gudy.azureus2.pluginsimpl.local.clientid.ClientIDManagerImpl;
public class TRTrackerDHTAnnouncerImpl extends TRTrackerAnnouncerImpl
{
private TOTorrent torrent;
private HashWrapper torrent_hash;
private byte data_peer_id[];
private String tracker_status_str;
private long last_update_time;
private int state;
private TRTrackerAnnouncerResponseImpl last_response;
private boolean manual;
public TRTrackerDHTAnnouncerImpl(TOTorrent _torrent, String _networks[], boolean _manual)
throws TRTrackerAnnouncerException
{
super(_torrent);
state = 1;
torrent = _torrent;
manual = _manual;
try
{
torrent_hash = torrent.getHashWrapper();
}
catch (TOTorrentException e)
{
Debug.printStackTrace(e);
}
try
{
data_peer_id = ClientIDManagerImpl.getSingleton().generatePeerID(torrent, false);
}
catch (ClientIDException e)
{
throw new TRTrackerAnnouncerException("TRTrackerAnnouncer: Peer ID generation fails", e);
}
last_response = new TRTrackerAnnouncerResponseImpl(torrent.getAnnounceURL(), torrent_hash, 0, 0L, "Initialising");
tracker_status_str = (new StringBuilder()).append(MessageText.getString("PeerManager.status.checking")).append("...").toString();
}
public void setAnnounceDataProvider(TRTrackerAnnouncerDataProvider trtrackerannouncerdataprovider)
{
}
public boolean isManual()
{
return manual;
}
public TOTorrent getTorrent()
{
return torrent;
}
public URL getTrackerUrl()
{
return torrent.getAnnounceURL();
}
public void setTrackerUrl(URL url)
{
Debug.out("setTrackerURL not supported for DHT");
}
public void resetTrackerUrl(boolean flag)
{
}
public void cloneFrom(TRTrackerAnnouncer other)
{
data_peer_id = other.getPeerId();
}
public void setIPOverride(String s)
{
}
public void clearIPOverride()
{
}
public int getPort()
{
return 0;
}
public byte[] getPeerId()
{
return data_peer_id;
}
public void setRefreshDelayOverrides(int i)
{
}
public int getTimeUntilNextUpdate()
{
long elapsed = (SystemTime.getCurrentTime() - last_update_time) / 1000L;
return (int)(last_response.getTimeToWait() - elapsed);
}
public int getLastUpdateTime()
{
return (int)(last_update_time / 1000L);
}
public void update(boolean force)
{
state = 2;
checkCache();
}
public void complete(boolean already_reported)
{
state = 3;
}
public void stop(boolean for_queue)
{
state = 4;
}
public void destroy()
{
}
public int getStatus()
{
return state;
}
public String getStatusString()
{
return tracker_status_str;
}
public TRTrackerAnnouncerResponse getLastResponse()
{
return last_response;
}
public void refreshListeners()
{
}
public void setAnnounceResult(DownloadAnnounceResult result)
{
String reason;
last_update_time = SystemTime.getCurrentTime();
if (result.getResponseType() != 2)
break MISSING_BLOCK_LABEL_101;
tracker_status_str = MessageText.getString("PeerManager.status.error");
reason = result.getError();
if (reason == null) goto _L2; else goto _L1
_L1:
new StringBuilder();
this;
JVM INSTR dup_x1 ;
tracker_status_str;
append();
" (";
append();
reason;
append();
")";
append();
toString();
tracker_status_str;
_L2:
TRTrackerAnnouncerResponseImpl response;
response = new TRTrackerAnnouncerResponseImpl(result.getURL(), torrent_hash, 0, result.getTimeToWait(), reason);
break MISSING_BLOCK_LABEL_322;
DownloadAnnounceResultPeer ext_peers[] = result.getPeers();
TRTrackerAnnouncerResponsePeerImpl peers[] = new TRTrackerAnnouncerResponsePeerImpl[ext_peers.length];
for (int i = 0; i < ext_peers.length; i++)
{
DownloadAnnounceResultPeer ext_peer = ext_peers[i];
if (Logger.isEnabled())
Logger.log(new LogEvent(torrent, LOGID, (new StringBuilder()).append("EXTERNAL PEER DHT: ip=").append(ext_peer.getAddress()).append(",port=").append(ext_peer.getPort()).append(",prot=").append(ext_peer.getProtocol()).toString()));
int http_port = 0;
byte az_version = 1;
peers[i] = new TRTrackerAnnouncerResponsePeerImpl(ext_peer.getSource(), ext_peer.getPeerID(), ext_peer.getAddress(), ext_peer.getPort(), ext_peer.getUDPPort(), http_port, ext_peer.getProtocol(), az_version, 0);
}
addToTrackerCache(peers);
tracker_status_str = MessageText.getString("PeerManager.status.ok");
response = new TRTrackerAnnouncerResponseImpl(result.getURL(), torrent_hash, 2, result.getTimeToWait(), peers);
last_response = response;
listeners.dispatch(1, response);
return;
}
protected void checkCache()
{
if (last_response.getStatus() != 2)
{
org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncerResponsePeer cached_peers[] = getPeersFromCache(100);
if (cached_peers.length > 0)
{
last_response.setPeers(cached_peers);
listeners.dispatch(1, last_response);
}
}
}
public void generateEvidence(IndentWriter writer)
{
writer.println((new StringBuilder()).append("DHT announce: ").append(last_response != null ? last_response.getString() : "null").toString());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -