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

📄 trtrackerannouncerimpl.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:   TRTrackerAnnouncerImpl.java

package org.gudy.azureus2.core3.tracker.client.impl;

import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.util.*;
import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.logging.*;
import org.gudy.azureus2.core3.torrent.TOTorrent;
import org.gudy.azureus2.core3.tracker.client.*;
import org.gudy.azureus2.core3.util.*;

// Referenced classes of package org.gudy.azureus2.core3.tracker.client.impl:
//			TRTrackerAnnouncerResponsePeerImpl

public abstract class TRTrackerAnnouncerImpl
	implements TRTrackerAnnouncer
{

	public static final LogIDs LOGID;
	protected static final int LDT_TRACKER_RESPONSE = 1;
	protected static final int LDT_URL_CHANGED = 2;
	protected static final int LDT_URL_REFRESH = 3;
	protected ListenerManager listeners;
	private Map tracker_peer_cache;
	private AEMonitor tracker_peer_cache_mon;
	private TOTorrent torrent;

	protected TRTrackerAnnouncerImpl(TOTorrent _torrent)
	{
		listeners = ListenerManager.createManager("TrackerClient:ListenDispatcher", new ListenerManagerDispatcher() {

			final TRTrackerAnnouncerImpl this$0;

			public void dispatch(Object _listener, int type, Object value)
			{
				TRTrackerAnnouncerListener listener = (TRTrackerAnnouncerListener)_listener;
				if (type == 1)
					listener.receivedTrackerResponse((TRTrackerAnnouncerResponse)value);
				else
				if (type == 2)
				{
					Object x[] = (Object[])(Object[])value;
					URL old_url = (URL)x[0];
					URL new_url = (URL)x[1];
					boolean explicit = ((Boolean)x[2]).booleanValue();
					listener.urlChanged(TRTrackerAnnouncerImpl.this, old_url, new_url, explicit);
				} else
				{
					listener.urlRefresh();
				}
			}

			
			{
				this$0 = TRTrackerAnnouncerImpl.this;
				super();
			}
		});
		tracker_peer_cache = new LinkedHashMap();
		tracker_peer_cache_mon = new AEMonitor("TRTrackerClientClassic:PC");
		torrent = _torrent;
	}

	public Map getTrackerResponseCache()
	{
		return exportTrackerCache();
	}

	public void setTrackerResponseCache(Map map)
	{
		int num = importTrackerCache(map);
		if (Logger.isEnabled())
			Logger.log(new LogEvent(getTorrent(), LOGID, (new StringBuilder()).append("TRTrackerClient: imported ").append(num).append(" cached peers").toString()));
	}

	protected Map exportTrackerCache()
	{
		Map res;
		List peers;
		res = new LightHashMap(1);
		peers = new ArrayList();
		res.put("tracker_peers", peers);
		tracker_peer_cache_mon.enter();
		LightHashMap entry;
		for (Iterator it = tracker_peer_cache.values().iterator(); it.hasNext(); peers.add(entry))
		{
			TRTrackerAnnouncerResponsePeer peer = (TRTrackerAnnouncerResponsePeer)it.next();
			entry = new LightHashMap();
			entry.put("ip", peer.getAddress().getBytes());
			entry.put("src", peer.getSource().getBytes());
			entry.put("port", new Long(peer.getPort()));
			int udp_port = peer.getUDPPort();
			if (udp_port != 0)
				entry.put("udpport", new Long(udp_port));
			int http_port = peer.getHTTPPort();
			if (http_port != 0)
				entry.put("httpport", new Long(http_port));
			entry.put("prot", new Long(peer.getProtocol()));
			byte az_ver = peer.getAZVersion();
			if (az_ver != 1)
				entry.put("azver", new Long(az_ver));
			entry.compactify(0.9F);
		}

		if (Logger.isEnabled())
			Logger.log(new LogEvent(getTorrent(), LOGID, (new StringBuilder()).append("TRTrackerClient: exported ").append(tracker_peer_cache.size()).append(" cached peers").toString()));
		tracker_peer_cache_mon.exit();
		break MISSING_BLOCK_LABEL_353;
		Exception exception;
		exception;
		tracker_peer_cache_mon.exit();
		throw exception;
		return res;
	}

	protected byte[] getAnonymousPeerId(String my_ip, int my_port)
	{
		byte anon_peer_id[] = new byte[20];
		anon_peer_id[0] = 91;
		anon_peer_id[1] = 93;
		try
		{
			byte ip_bytes[] = my_ip.getBytes("UTF8");
			int ip_len = ip_bytes.length;
			if (ip_len > 18)
				ip_len = 18;
			System.arraycopy(ip_bytes, 0, anon_peer_id, 2, ip_len);
			int port_copy = my_port;
			for (int j = 2 + ip_len; j < 20; j++)
			{
				anon_peer_id[j] = (byte)(port_copy & 0xff);
				port_copy >>= 8;
			}

		}
		catch (UnsupportedEncodingException e)
		{
			Debug.printStackTrace(e);
		}
		return anon_peer_id;
	}

	protected int importTrackerCache(Map map)
	{
		if (!COConfigurationManager.getBooleanParameter("File.save.peers.enable"))
			return 0;
		if (map == null)
			return 0;
		List peers = (List)map.get("tracker_peers");
		if (peers == null)
			return 0;
		int j;
		tracker_peer_cache_mon.enter();
		for (int i = 0; i < peers.size(); i++)
		{
			Map peer = (Map)peers.get(i);
			byte src_bytes[] = (byte[])(byte[])peer.get("src");
			String peer_source = src_bytes != null ? new String(src_bytes) : "Tracker";
			String peer_ip_address = new String((byte[])(byte[])peer.get("ip"));
			int peer_tcp_port = ((Long)peer.get("port")).intValue();
			byte peer_peer_id[] = getAnonymousPeerId(peer_ip_address, peer_tcp_port);
			Long l_protocol = (Long)peer.get("prot");
			short protocol = l_protocol != null ? l_protocol.shortValue() : 1;
			Long l_udp_port = (Long)peer.get("udpport");
			int peer_udp_port = l_udp_port != null ? l_udp_port.intValue() : 0;
			Long l_http_port = (Long)peer.get("httpport");
			int peer_http_port = l_http_port != null ? l_http_port.intValue() : 0;
			Long l_az_ver = (Long)peer.get("azver");
			byte az_ver = l_az_ver != null ? l_az_ver.byteValue() : 1;
			TRTrackerAnnouncerResponsePeerImpl entry = new TRTrackerAnnouncerResponsePeerImpl(peer_source, peer_peer_id, peer_ip_address, peer_tcp_port, peer_udp_port, peer_http_port, protocol, az_ver, 0);
			tracker_peer_cache.put(entry.getKey(), entry);
		}

		j = tracker_peer_cache.size();
		tracker_peer_cache_mon.exit();
		return j;
		Exception exception;
		exception;
		tracker_peer_cache_mon.exit();
		throw exception;
		Throwable e;
		e;
		Debug.printStackTrace(e);
		return tracker_peer_cache.size();
	}

	protected void addToTrackerCache(TRTrackerAnnouncerResponsePeerImpl peers[])
	{
		int max;
		if (!COConfigurationManager.getBooleanParameter("File.save.peers.enable"))
			return;
		max = COConfigurationManager.getIntParameter("File.save.peers.max", 512);
		tracker_peer_cache_mon.enter();
		for (int i = 0; i < peers.length; i++)
		{
			TRTrackerAnnouncerResponsePeerImpl peer = peers[i];
			tracker_peer_cache.remove(peer.getKey());
			tracker_peer_cache.put(peer.getKey(), peer);
		}

		Iterator it = tracker_peer_cache.keySet().iterator();
		if (max > 0)
			for (; tracker_peer_cache.size() > max; it.remove())
				it.next();

		tracker_peer_cache_mon.exit();
		break MISSING_BLOCK_LABEL_146;
		Exception exception;
		exception;
		tracker_peer_cache_mon.exit();
		throw exception;
	}

	public void removeFromTrackerResponseCache(String ip, int tcp_port)
	{
		tracker_peer_cache_mon.enter();
		TRTrackerAnnouncerResponsePeerImpl peer = new TRTrackerAnnouncerResponsePeerImpl("", new byte[0], ip, tcp_port, 0, 0, (short)0, (byte)0, 0);
		if (tracker_peer_cache.remove(peer.getKey()) != null && Logger.isEnabled())
			Logger.log(new LogEvent(getTorrent(), LOGID, (new StringBuilder()).append("Explicit removal of peer cache for ").append(ip).append(":").append(tcp_port).toString()));
		tracker_peer_cache_mon.exit();
		break MISSING_BLOCK_LABEL_116;
		Exception exception;
		exception;
		tracker_peer_cache_mon.exit();
		throw exception;
	}

	public static Map mergeResponseCache(Map map1, Map map2)
	{
		if (map1 == null && map2 == null)
			return new HashMap();
		if (map1 == null)
			return map2;
		if (map2 == null)
			return map1;
		Map res = new HashMap();
		List peers = (List)map1.get("tracker_peers");
		if (peers == null)
			peers = new ArrayList();
		List p2 = (List)map2.get("tracker_peers");
		if (p2 != null)
		{
			if (Logger.isEnabled())
				Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("TRTrackerClient: merged peer sets: p1 = ").append(peers.size()).append(", p2 = ").append(p2.size()).toString()));
			for (int i = 0; i < p2.size(); i++)
				peers.add(p2.get(i));

		}
		res.put("tracker_peers", peers);
		return res;
	}

	protected TRTrackerAnnouncerResponsePeer[] getPeersFromCache(int num_want)
	{
		TRTrackerAnnouncerResponsePeerImpl atrtrackerannouncerresponsepeerimpl[];
		tracker_peer_cache_mon.enter();
		TRTrackerAnnouncerResponsePeerImpl res[];
		if (tracker_peer_cache.size() <= num_want)
		{
			res = new TRTrackerAnnouncerResponsePeerImpl[tracker_peer_cache.size()];
			tracker_peer_cache.values().toArray(res);
		} else
		{
			res = new TRTrackerAnnouncerResponsePeerImpl[num_want];
			Iterator it = tracker_peer_cache.keySet().iterator();
			for (int i = 0; i < num_want; i++)
			{
				String key = (String)it.next();
				res[i] = (TRTrackerAnnouncerResponsePeerImpl)tracker_peer_cache.get(key);
				it.remove();
			}

			for (int i = 0; i < num_want; i++)
				tracker_peer_cache.put(res[i].getKey(), res[i]);

		}
		if (Logger.isEnabled())
		{
			for (int i = 0; i < res.length; i++)
				Logger.log(new LogEvent(getTorrent(), LOGID, (new StringBuilder()).append("CACHED PEER: ").append(res[i].getString()).toString()));

			Logger.log(new LogEvent(getTorrent(), LOGID, (new StringBuilder()).append("TRTrackerClient: returned ").append(res.length).append(" cached peers").toString()));
		}
		atrtrackerannouncerresponsepeerimpl = res;
		tracker_peer_cache_mon.exit();
		return atrtrackerannouncerresponsepeerimpl;
		Exception exception;
		exception;
		tracker_peer_cache_mon.exit();
		throw exception;
	}

	public void addListener(TRTrackerAnnouncerListener l)
	{
		listeners.addListener(l);
	}

	public void removeListener(TRTrackerAnnouncerListener l)
	{
		listeners.removeListener(l);
	}

	static 
	{
		LOGID = LogIDs.TRACKER;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -