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

📄 trtrackerbtannouncerimpl.java

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

	protected void requestUpdate()
	{
		this_mon.enter();
		if (current_timer_event != null)
			current_timer_event.cancel();
		rd_last_override = SystemTime.getCurrentTime();
		if (!destroyed)
		{
			if (Logger.isEnabled())
				Logger.log(new LogEvent(torrent, LOGID, (new StringBuilder()).append("Forcing tracker announce now via ").append(Debug.getStackTrace(true, false, 0, 3)).toString()));
			current_timer_event = tracker_timer.addEvent(SystemTime.getCurrentTime(), timer_event_action);
		}
		this_mon.exit();
		break MISSING_BLOCK_LABEL_120;
		Exception exception;
		exception;
		this_mon.exit();
		throw exception;
	}

	protected long requestUpdateSupport()
	{
		boolean clear_progress = true;
		long l;
		this_mon.enter();
		if (!update_in_progress && announce_data_provider != null)
			break MISSING_BLOCK_LABEL_78;
		clear_progress = false;
		l = getErrorRetryInterval();
		this_mon.exit();
		this_mon.enter();
		if (clear_progress)
			update_in_progress = false;
		this_mon.exit();
		break MISSING_BLOCK_LABEL_76;
		Exception exception;
		exception;
		this_mon.exit();
		throw exception;
		return l;
		update_in_progress = true;
		this_mon.exit();
		break MISSING_BLOCK_LABEL_105;
		Exception exception1;
		exception1;
		this_mon.exit();
		throw exception1;
		TRTrackerAnnouncerResponseImpl response;
		String reason;
		last_update_time_secs = SystemTime.getCurrentTime() / 1000L;
		tracker_status_str = (new StringBuilder()).append(MessageText.getString("PeerManager.status.checking")).append("...").toString();
		response = null;
		if (stopped)
		{
			if (tracker_state == 1 && !manual_control)
				tracker_state = 4;
			else
			if (tracker_state != 4)
			{
				response = stopSupport();
				if (response.getStatus() == 2)
					tracker_state = 4;
				else
					tracker_state = 4;
			}
		} else
		if (tracker_state == 1)
		{
			response = startSupport();
			if (response.getStatus() == 2)
				tracker_state = 2;
		} else
		if (completed)
		{
			if (!complete_reported)
			{
				response = completeSupport();
				if (response.getStatus() != 0)
				{
					complete_reported = true;
					tracker_state = 3;
				}
			} else
			{
				tracker_state = 3;
				response = updateSupport();
			}
		} else
		{
			response = updateSupport();
		}
		if (response == null)
			break MISSING_BLOCK_LABEL_496;
		int rs = response.getStatus();
		if (rs == 0)
			tracker_status_str = MessageText.getString("PeerManager.status.offline");
		else
		if (rs == 1)
		{
			tracker_status_str = MessageText.getString("PeerManager.status.error");
			tracker_state = 1;
		} else
		if (announce_data_provider.isPeerSourceEnabled("Tracker"))
		{
			tracker_status_str = MessageText.getString("PeerManager.status.ok");
		} else
		{
			tracker_status_str = MessageText.getString("PeerManager.status.ps_disabled");
			response.setPeers(new TRTrackerAnnouncerResponsePeerImpl[0]);
		}
		reason = response.getAdditionalInfo();
		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:
		long l2;
		last_response = response;
		listeners.dispatch(1, response);
		l2 = response.getTimeToWait();
		this_mon.enter();
		if (clear_progress)
			update_in_progress = false;
		this_mon.exit();
		break MISSING_BLOCK_LABEL_493;
		Exception exception2;
		exception2;
		this_mon.exit();
		throw exception2;
		return l2;
		long l1;
		tracker_status_str = "";
		l1 = getErrorRetryInterval();
		this_mon.enter();
		if (clear_progress)
			update_in_progress = false;
		this_mon.exit();
		break MISSING_BLOCK_LABEL_546;
		Exception exception3;
		exception3;
		this_mon.exit();
		throw exception3;
		return l1;
		Throwable e;
		e;
		Debug.printStackTrace(e);
		l1 = getErrorRetryInterval();
		this_mon.enter();
		if (clear_progress)
			update_in_progress = false;
		this_mon.exit();
		break MISSING_BLOCK_LABEL_597;
		Exception exception4;
		exception4;
		this_mon.exit();
		throw exception4;
		return l1;
		Exception exception5;
		exception5;
		this_mon.enter();
		if (clear_progress)
			update_in_progress = false;
		this_mon.exit();
		break MISSING_BLOCK_LABEL_639;
		Exception exception6;
		exception6;
		this_mon.exit();
		throw exception6;
		throw exception5;
	}

	protected TRTrackerAnnouncerResponseImpl startSupport()
	{
		if (Logger.isEnabled())
			Logger.log(new LogEvent(torrent, LOGID, "Tracker Announcer is sending a start Request"));
		return update("started");
	}

	protected TRTrackerAnnouncerResponseImpl completeSupport()
	{
		if (Logger.isEnabled())
			Logger.log(new LogEvent(torrent, LOGID, "Tracker Announcer is sending a completed Request"));
		return update("completed");
	}

	protected TRTrackerAnnouncerResponseImpl stopSupport()
	{
		if (Logger.isEnabled())
			Logger.log(new LogEvent(torrent, LOGID, "Tracker Announcer is sending a stopped Request"));
		return update("stopped");
	}

	protected TRTrackerAnnouncerResponseImpl updateSupport()
	{
		if (Logger.isEnabled())
			Logger.log(new LogEvent(torrent, LOGID, "Tracker Announcer is sending an update Request"));
		return update("");
	}

	private TRTrackerAnnouncerResponseImpl update(String evt)
	{
		TRTrackerAnnouncerResponseImpl resp = update2(evt);
		TRTrackerAnnouncerResponsePeer peers[] = resp.getPeers();
		if (peers != null)
		{
			List p = new ArrayList();
			for (int i = 0; i < peers.length; i++)
			{
				TRTrackerAnnouncerResponsePeer peer = peers[i];
				if (peer_networks == null)
				{
					p.add(peer);
					continue;
				}
				String peer_address = peer.getAddress();
				String peer_network = AENetworkClassifier.categoriseAddress(peer_address);
				boolean added = false;
				int j = 0;
				do
				{
					if (j >= peer_networks.length)
						break;
					if (peer_networks[j] == peer_network)
					{
						p.add(peer);
						added = true;
						break;
					}
					j++;
				} while (true);
				if (!added && Logger.isEnabled())
					Logger.log(new LogEvent(torrent, LOGID, 1, (new StringBuilder()).append("Tracker Announcer dropped peer '").append(peer_address).append("' as incompatible ").append("with network selection").toString()));
			}

			peers = new TRTrackerAnnouncerResponsePeer[p.size()];
			p.toArray(peers);
			resp.setPeers(peers);
		}
		return resp;
	}

	private TRTrackerAnnouncerResponseImpl update2(String evt)
	{
		TRTrackerAnnouncerResponseImpl last_failure_resp;
		String skip_host;
		int i;
		last_failure_resp = null;
		skip_host = null;
		i = 0;
_L5:
		List urls;
		int j;
		if (i >= trackerUrlLists.size())
			break; /* Loop/switch isn't completed */
		urls = (List)trackerUrlLists.get(i);
		j = 0;
_L3:
		if (j >= urls.size()) goto _L2; else goto _L1
_L1:
		URL original_url;
		URL request_url;
		original_url = (URL)urls.get(j);
		if (skip_host != null && skip_host.equals(original_url.getHost()))
		{
			if (Logger.isEnabled())
				Logger.log(new LogEvent(torrent, LOGID, 1, (new StringBuilder()).append("Tracker Announcer is ignoring '").append(original_url).append("' as already received overloaded response from this host").toString()));
			continue; /* Loop/switch isn't completed */
		}
		lastUsedUrl = original_url;
		if (lastUsedUrl != lastAZTrackerCheckedURL)
			az_tracker = TRTrackerUtils.isAZTracker(lastUsedUrl);
		request_url = null;
		TRTrackerAnnouncerResponseImpl resp;
		int resp_status;
		request_url = constructUrl(evt, original_url);
		URL tracker_url[] = {
			original_url
		};
		byte result_bytes[] = updateOld(tracker_url, request_url);
		lastUsedUrl = tracker_url[0];
		resp = decodeTrackerResponse(lastUsedUrl, result_bytes);
		resp_status = resp.getStatus();
		if (resp_status != 2)
			break MISSING_BLOCK_LABEL_385;
		try
		{
			if (!original_url.toString().equals(lastUsedUrl.toString()))
			{
				if (Logger.isEnabled())
					Logger.log(new LogEvent(torrent, LOGID, (new StringBuilder()).append("announce url permanently redirected: old = ").append(original_url).append(", new = ").append(lastUsedUrl).toString()));
				TorrentUtils.replaceAnnounceURL(torrent, original_url, lastUsedUrl);
			}
		}
		catch (Throwable e)
		{
			Debug.printStackTrace(e);
		}
		urls.remove(j);
		urls.add(0, lastUsedUrl);
		trackerUrlLists.remove(i);
		trackerUrlLists.add(0, urls);
		informURLChange(original_url, lastUsedUrl, false);
		return resp;
		try
		{
			if (resp_status == 1)
			{
				last_failure_resp = resp;
				String reason = resp.getAdditionalInfo();
				if (reason != null && (reason.indexOf("too many seeds") != -1 || reason.indexOf("too many peers") != -1))
					skip_host = original_url.getHost();
			} else
			{
				announceFailCount++;
				last_failure_resp = resp;
			}
		}
		catch (MalformedURLException e)
		{
			announceFailCount++;
			Debug.printStackTrace(e);
			last_failure_resp = new TRTrackerAnnouncerResponseImpl(original_url, torrent_hash, 0, getErrorRetryInterval(), (new StringBuilder()).append("malformed URL '").append(request_url != null ? request_url.toString() : "<null>").append("'").toString());
		}
		catch (Throwable e)
		{
			announceFailCount++;
			last_failure_resp = new TRTrackerAnnouncerResponseImpl(original_url, torrent_hash, 0, getErrorRetryInterval(), e.getMessage() != null ? e.getMessage() : e.toString());
		}
		if (destroyed)
			break; /* Loop/switch isn't completed */
		j++;
		  goto _L3
_L2:
		i++;
		if (true) goto _L5; else goto _L4
_L4:
		if (last_failure_resp == null)
			last_failure_resp = new TRTrackerAnnouncerResponseImpl(null, torrent_hash, 0, getErrorRetryInterval(), "Reason Unknown");
		int num_want = calculateNumWant() * 4;
		TRTrackerAnnouncerResponsePeer cached_peers[] = getPeersFromCache(num_want);
		if (cached_peers.length > 0)
			last_failure_resp.setPeers(cached_peers);
		return last_failure_resp;
	}

	private byte[] updateOld(URL tracker_url[], URL reqUrl)
		throws Exception
	{
		int i;
		TorrentUtils.setTLSTorrentHash(torrent_hash);
		i = 0;
_L1:
		String failure_reason;
		if (i >= 2)
			break MISSING_BLOCK_LABEL_607;
		failure_reason = null;
		byte abyte0[];
		String protocol = reqUrl.getProtocol();
		if (Logger.isEnabled())
			Logger.log(new LogEvent(torrent, LOGID, (new StringBuilder()).append("Tracker Announcer is Requesting: ").append(reqUrl).toString()));
		ByteArrayOutputStream message = new ByteArrayOutputStream();
		URL udpAnnounceURL = null;
		boolean udp_probe = false;
		if (protocol.equalsIgnoreCase("udp") && udpAnnounceEnabled)
			udpAnnounceURL = reqUrl;
		else
		if (protocol.equalsIgnoreCase("http") && !az_tracker && announceCount % autoUDPprobeEvery == 0 && udpAnnounceEnabled && (!stopped && announceCount != 0 && (announceCount >= trackerUrlLists.size() || announceFailCount != announceCount) || TRTrackerUtils.isUDPProbeOK(reqUrl)))
		{
			udpAnnounceURL = new URL(reqUrl.toString().replaceFirst("^http", "udp"));
			udp_probe = true;
		}
		if (udpAnnounceURL != null)
		{
			failure_reason = announceUDP(reqUrl, message, udp_probe);
			if ((failure_reason != null || message.size() == 0) && udp_probe)
			{
				udpAnnounceURL = null;
				if (autoUDPprobeEvery < 16)

⌨️ 快捷键说明

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