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

📄 trtrackerbtannouncerimpl.java

📁 java 文件下载器。可自定义
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
	}

	public URL constructUrl(String evt, URL _url)
		throws Exception
	{
		StringBuffer request;
		boolean stopped;
		String ip;
		String tracker_network;
		boolean normal_network_ok;
		String normal_explicit;
label0:
		{
			String url = _url.toString();
			request = new StringBuffer(url);
			if (url.indexOf('?') != -1)
				request.append('&');
			else
				request.append('?');
			request.append(info_hash);
			request.append(tracker_peer_id_str);
			String port_details = announce_data_provider.getCryptoLevel() != 1 ? TRTrackerUtils.getPortsForURL() : TRTrackerUtils.getPortsForURLFullCrypto();
			request.append(port_details);
			request.append("&uploaded=").append(announce_data_provider.getTotalSent());
			request.append("&downloaded=").append(announce_data_provider.getTotalReceived());
			request.append("&left=").append(announce_data_provider.getRemaining());
			request.append("&corrupt=").append(announce_data_provider.getFailedHashCheck());
			if (tracker_id.length() > 0)
				request.append("&trackerid=").append(tracker_id);
			if (evt.length() != 0)
				request.append("&event=").append(evt);
			stopped = evt.equals("stopped");
			if (stopped)
			{
				request.append("&numwant=0");
				if (stopped_for_queue)
					request.append("&azq=1");
			} else
			{
				int numwant = Math.min(calculateNumWant(), userMaxNumwant);
				request.append("&numwant=").append(numwant);
			}
			request.append("&no_peer_id=1");
			request.append("&compact=1");
			String explicit_ips = COConfigurationManager.getStringParameter("Override Ip", "");
			ip = null;
			tracker_network = AENetworkClassifier.categoriseAddress(_url.getHost());
			boolean network_ok = false;
			normal_network_ok = false;
			if (peer_networks == null)
			{
				network_ok = true;
				normal_network_ok = true;
			} else
			{
				for (int i = 0; i < peer_networks.length; i++)
				{
					if (peer_networks[i] == "Public")
						normal_network_ok = true;
					if (peer_networks[i] == tracker_network)
						network_ok = true;
				}

			}
			if (!network_ok)
				throw new Exception((new StringBuilder()).append("Network not enabled for url '").append(_url).append("'").toString());
			normal_explicit = null;
			if (explicit_ips.length() <= 0)
				break label0;
			StringTokenizer tok = new StringTokenizer(explicit_ips, ";");
			String this_address;
			String cat;
			do
			{
				do
				{
					if (!tok.hasMoreTokens())
						break label0;
					this_address = tok.nextToken().trim();
				} while (this_address.length() <= 0);
				cat = AENetworkClassifier.categoriseAddress(this_address);
				if (cat == "Public")
					normal_explicit = this_address;
			} while (tracker_network != cat);
			ip = this_address;
		}
		if (ip == null)
			if (normal_network_ok && normal_explicit != null)
				ip = normal_explicit;
			else
			if (ip_override != null)
				ip = ip_override;
		if (ip != null)
		{
			if (tracker_network == "Public")
				try
				{
					ip = PRHelpers.DNSToIPAddress(ip);
				}
				catch (UnknownHostException e)
				{
					if (Logger.isEnabled())
						Logger.log(new LogEvent(torrent, LOGID, 3, (new StringBuilder()).append("IP Override host resolution of '").append(ip).append("' fails, using unresolved address").toString()));
				}
			request.append("&ip=").append(ip);
		}
		if (COConfigurationManager.getBooleanParameter("Tracker Key Enable Client", true))
			request.append("&key=").append(key_id);
		String ext = announce_data_provider.getExtensions();
		if (ext != null)
		{
			for (; ext.startsWith("&"); ext = ext.substring(1));
			request.append("&");
			request.append(ext);
		}
		request.append("&azver=3");
		if (az_tracker && !stopped)
		{
			int up = announce_data_provider.getUploadSpeedKBSec(evt.equals("started"));
			if (up > 0)
				request.append((new StringBuilder()).append("&azup=").append(up).toString());
			String as = NetworkAdmin.getSingleton().getCurrentASN().getAS();
			if (as.length() > 0)
				request.append((new StringBuilder()).append("&azas=").append(URLEncoder.encode(as, "UTF8")).toString());
			com.aelitis.azureus.core.dht.netcoords.DHTNetworkPosition best_position = DHTNetworkPositionManager.getBestLocalPosition();
			if (best_position != null)
				try
				{
					byte bytes[] = DHTNetworkPositionManager.serialisePosition(best_position);
					request.append((new StringBuilder()).append("&aznp=").append(Base32.encode(bytes)).toString());
				}
				catch (Throwable e)
				{
					Debug.printStackTrace(e);
				}
		}
		return new URL(request.toString());
	}

	protected int calculateNumWant()
	{
		if (!announce_data_provider.isPeerSourceEnabled("Tracker"))
			return 0;
		int MAX_PEERS = 100;
		int maxAllowed = announce_data_provider.getMaxNewConnectionsAllowed();
		if (maxAllowed < 0 || maxAllowed > MAX_PEERS)
			maxAllowed = MAX_PEERS;
		return maxAllowed;
	}

	public byte[] getPeerId()
	{
		return data_peer_id;
	}

	public void setAnnounceDataProvider(TRTrackerAnnouncerDataProvider _provider)
	{
		this_mon.enter();
		announce_data_provider = _provider;
		this_mon.exit();
		break MISSING_BLOCK_LABEL_32;
		Exception exception;
		exception;
		this_mon.exit();
		throw exception;
	}

	public TOTorrent getTorrent()
	{
		return torrent;
	}

	public URL getTrackerUrl()
	{
		return lastUsedUrl;
	}

	public void setTrackerUrl(URL new_url)
	{
		try
		{
			new_url = new URL(new_url.toString().replaceAll(" ", ""));
			List list = new ArrayList(1);
			list.add(new_url);
			trackerUrlLists.clear();
			trackerUrlLists.add(list);
			informURLChange(lastUsedUrl, new_url, true);
		}
		catch (Throwable e)
		{
			Debug.printStackTrace(e);
		}
	}

	public void resetTrackerUrl(boolean shuffle)
	{
		String old_list = trackerURLListToString();
		constructTrackerUrlLists(shuffle);
		if (trackerUrlLists.size() == 0)
			return;
		if (!old_list.equals(trackerURLListToString()))
		{
			URL first_url = (URL)((List)trackerUrlLists.get(0)).get(0);
			informURLChange(lastUsedUrl, first_url, true);
		}
	}

	public void refreshListeners()
	{
		informURLRefresh();
	}

	public void setIPOverride(String override)
	{
		ip_override = override;
	}

	public void clearIPOverride()
	{
		ip_override = null;
	}

	private void constructTrackerUrlLists(boolean shuffle)
	{
		try
		{
			trackerUrlLists = new ArrayList(1);
			TOTorrentAnnounceURLSet announce_sets[] = torrent.getAnnounceURLGroup().getAnnounceURLSets();
			if (announce_sets.length == 0)
			{
				URL url = torrent.getAnnounceURL();
				List list = new ArrayList();
				list.add(url);
				trackerUrlLists.add(list);
			} else
			{
				for (int i = 0; i < announce_sets.length; i++)
				{
					URL urls[] = announce_sets[i].getAnnounceURLs();
					List random_urls = new ArrayList();
					for (int j = 0; j < urls.length; j++)
					{
						URL url = urls[j];
						int pos = shuffle ? (int)(Math.random() * (double)(random_urls.size() + 1)) : j;
						random_urls.add(pos, url);
					}

					trackerUrlLists.add(random_urls);
				}

			}
		}
		catch (Exception e)
		{
			Debug.printStackTrace(e);
		}
	}

	protected String trackerURLListToString()
	{
		String trackerUrlListString = "[";
		for (int i = 0; i < trackerUrlLists.size(); i++)
		{
			List group = (List)trackerUrlLists.get(i);
			trackerUrlListString = (new StringBuilder()).append(trackerUrlListString).append(i != 0 ? "," : "").append("[").toString();
			for (int j = 0; j < group.size(); j++)
			{
				URL u = (URL)group.get(j);
				trackerUrlListString = (new StringBuilder()).append(trackerUrlListString).append(j != 0 ? "," : "").append(u.toString()).toString();
			}

			trackerUrlListString = (new StringBuilder()).append(trackerUrlListString).append("]").toString();
		}

		trackerUrlListString = (new StringBuilder()).append(trackerUrlListString).append("]").toString();
		return trackerUrlListString;
	}

	protected TRTrackerAnnouncerResponseImpl decodeTrackerResponse(URL url, byte data[])
	{
		String failure_reason;
		if (data == null)
		{
			failure_reason = "no response";
			break MISSING_BLOCK_LABEL_4251;
		}
		Map metaData;
		metaData = BDecoder.decode(data);
		Object o = metaData.get("az_ps");
		if (o instanceof List)
		{
			List peer_sources = (List)o;
			List x = new ArrayList();
			for (int i = 0; i < peer_sources.size(); i++)
			{
				Object o1 = peer_sources.get(i);
				if (o1 instanceof byte[])
					x.add(new String((byte[])(byte[])o1));
			}

			String y[] = new String[x.size()];
			x.toArray(y);
			announce_data_provider.setPeerSources(y);
		}
		String warning_message;
		boolean log_it;
		byte b_warning_message[] = (byte[])(byte[])metaData.get("warning message");
		if (b_warning_message == null || !COConfigurationManager.getBooleanParameter("Tracker Client Show Warnings"))
			break MISSING_BLOCK_LABEL_344;
		warning_message = new String(b_warning_message);
		if (warning_message.equals(last_tracker_message))
			break MISSING_BLOCK_LABEL_344;
		last_tracker_message = warning_message;
		log_it = false;
		class_mon.enter();
		String last_warning_message = (String)tracker_report_map.get(url.getHost());
		if (last_warning_message == null || !warning_message.equals(last_warning_message))
		{
			log_it = true;
			tracker_report_map.put(url.getHost(), warning_message);
		}
		class_mon.exit();
		break MISSING_BLOCK_LABEL_289;
		Exception exception;
		exception;
		class_mon.exit();
		throw exception;
		if (log_it)
			Logger.logTextResource(new LogAlert(torrent, false, 1, "TrackerClient.announce.warningmessage"), new String[] {
				announce_data_provider.getName(), warning_message
			});
		break MISSING_BLOCK_LABEL_344;
		Throwable e;
		e;
		Debug.printStackTrace(e);
		long time_to_wait;
		byte failure_reason_bytes[];
		try
		{
			time_to_wait = ((Long)metaData.get("interval")).longValue();
			Long raw_min_interval = (Long)metaData.get("min interval");
			if (Logger.isEnabled())
				Logger.log(new LogEvent(torrent, LOGID, 0, (new StringBuilder()).append("Received from announce: 'interval' = ").append(time_to_wait).append("; 'min interval' = ").append(raw_min_interval).toString()));
			if (time_to_wait < 0L || time_to_wait > 0xffffffffL)
				time_to_wait = 0xffffffffL;
			if (raw_min_interval != null)
			{
				min_interval = raw_min_interval.longValue();
				if (min_interval < 1L)
				{
					if (Logger.isEnabled())
						Logger.log(new LogEvent(torrent, LOGID, 0, (new StringBuilder()).append("Tracker being silly and returning a 'min interval' of less than 1 second (").append(min_interval).append(")").toString()));
					min_interval = 0L;
				} else
				if (min_interval > time_to_wait)
				{
					if (Logger.isEnabled())
						Logger.log(new LogEvent(torrent, LOGID, 0, (new StringBuilder()).append("Tracker being silly and returning a 'min interval' (").append(min_interval).append(") greater than recommended announce 'interval'").append(" (").append(time_to_wait).append(")").toString()));
					min_interval = 0L;
				}
			}
			if (userMinInterval != 0)
			{
				time_to_wait = Math.max(userMinInterval, time_to_wait);
				min_interval = Math.max(min_interval, userMinInterval);
				if (Logger.isEnabled())
					Logger.log(new LogEvent(torrent, LOGID, 0, (new StringBuilder()).append("Overriding with user settings: 'interval' = ").append(time_to_wait).append("; 'min interval' = ").append(min_interval).toString()));
			}
			if (time_to_wait > 30L)
				time_to_wait -= 10L;
			break MISSING_BLOCK_LABEL_863;
		}
		catch (Exception e)
		{
			failure_reason_bytes = (byte[])(byte[])metaData.get("failure reason");
		}
		if (failure_reason_bytes != null)
			break MISSING_BLOCK_LABEL_830;
		if (Logger.isEnabled())
			Logger.log(new LogEvent(torrent, LOGID, 1, (new StringBuilder()).append("Problems with Tracker, will retry in ").append(getErrorRetryInterval()).append("ms").toString()));
		return new TRTrackerAnnouncerResponseImpl(url, torrent_hash, 0, getErrorRetryInterval(), "Unknown cause");
		failure_reason = new String(failure_reason_bytes, "UTF8");
		return new TRTrackerAnnouncerResponseImpl(url, torrent_hash, 1, getErrorRetryInterval(), failure_reason);
		TRTrackerAnnouncerResponseImpl resp;
		Long incomplete_l = (Long)metaData.get("incomplete");
		Long complete_l = (Long)metaData.get("complete");
		if ((incomplete_l != null || complete_l != null) && Logger.isEnabled())
			Logger.log(new LogEvent(torrent, LOGID, (new StringBuilder()).append("ANNOUNCE SCRAPE1: seeds=").append(complete_l).append(" peers=").append(incomplete_l).toString()));
		byte trackerid[] = (byte[])(byte[])metaData.get("tracker id");
		if (trackerid != null)
			tracker_id = new String(trackerid);

⌨️ 快捷键说明

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