⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trtrackerdhtannouncerimpl.java

📁 java 文件下载器。可自定义
💻 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 + -