📄 trtrackerbtannouncerimpl.java
字号:
}
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 + -