use of com.biglybt.core.logging.LogEvent in project BiglyBT by BiglySoftware.
the class PiecePickerImpl method leaveEndGameMode.
protected void leaveEndGameMode() {
synchronized (endGameModeChunkLock) {
if (endGameMode) {
if (Logger.isEnabled()) {
Logger.log(new LogEvent(diskManager.getTorrent(), LOGID, "Leaving end-game mode: " + peerControl.getDisplayName()));
}
endGameMode = false;
endGameModeChunks.clear();
endGameModeChunkMap.clear();
timeEndGameModeEntered = 0;
}
}
}
use of com.biglybt.core.logging.LogEvent in project BiglyBT by BiglySoftware.
the class AEProxyConnectionImpl method failed.
@Override
public void failed(Throwable reason) {
try {
if (Logger.isEnabled()) {
if (reason instanceof EOFException) {
Logger.log(new LogEvent(LOGID, "AEProxyProcessor: " + getName() + ": connection closed"));
} else {
String message = Debug.getNestedExceptionMessage(reason);
message = message.toLowerCase(Locale.US);
if ((reason instanceof AsynchronousCloseException) || message.contains("closed") || message.contains("aborted") || message.contains("disconnected") || message.contains("timeout") || message.contains("timed") || message.contains("refused") || message.contains("unreachable") || message.contains("reset") || message.contains("no route") || // address family not supported
message.contains("family") || message.contains("key is invalid") || message.contains("dns lookup")) {
// boring
Logger.log(new LogEvent(LOGID, "AEProxyProcessor: " + getName() + " failed: " + message));
} else {
Logger.log(new LogEvent(LOGID, "AEProxyProcessor: " + getName() + " failed", reason));
}
}
}
close();
} catch (Throwable e) {
Debug.printStackTrace(e);
}
}
use of com.biglybt.core.logging.LogEvent in project BiglyBT by BiglySoftware.
the class AEProxyImpl method checkTimeouts.
protected void checkTimeouts() {
long now = SystemTime.getCurrentTime();
if (now - last_debug > DEBUG_PERIOD) {
last_debug = now;
try {
this_mon.enter();
Iterator it = processors.iterator();
while (it.hasNext()) {
AEProxyConnectionImpl processor = (AEProxyConnectionImpl) it.next();
if (Logger.isEnabled())
Logger.log(new LogEvent(LOGID, "AEProxy: active processor: " + processor.getStateString()));
}
} finally {
this_mon.exit();
}
}
if (connect_timeout <= 0 && read_timeout <= 0) {
return;
}
List closes = new ArrayList();
try {
this_mon.enter();
Iterator it = processors.iterator();
while (it.hasNext()) {
AEProxyConnectionImpl processor = (AEProxyConnectionImpl) it.next();
long diff = now - processor.getTimeStamp();
if (connect_timeout > 0 && diff >= connect_timeout && !processor.isConnected()) {
closes.add(processor);
} else if (read_timeout > 0 && diff >= read_timeout && processor.isConnected()) {
closes.add(processor);
}
}
} finally {
this_mon.exit();
}
for (int i = 0; i < closes.size(); i++) {
((AEProxyConnectionImpl) closes.get(i)).failed(new SocketTimeoutException("timeout"));
}
}
use of com.biglybt.core.logging.LogEvent in project BiglyBT by BiglySoftware.
the class PeerNATTraverser method create.
public void create(PeerNATInitiator initiator, InetSocketAddress target, PeerNATTraversalAdapter adapter) {
boolean bad = false;
synchronized (initiators) {
if (negative_result_bloom.contains(target.toString().getBytes())) {
bad = true;
failed_negative_bloom++;
} else {
if (AERunStateHandler.isDHTSleeping()) {
bad = true;
} else {
LinkedList requests = (LinkedList) initiators.get(initiator);
if (requests == null) {
// we get here when download stopped at same time
// Debug.out( "initiator not found" );
bad = true;
} else {
PeerNATTraversal traversal = new PeerNATTraversal(initiator, target, adapter);
requests.addLast(traversal);
pending_requests.addLast(traversal);
if (Logger.isEnabled()) {
Logger.log(new LogEvent(LOGID, "created NAT traversal for " + initiator.getDisplayName() + "/" + target));
}
}
}
}
}
if (bad) {
adapter.failed();
}
}
use of com.biglybt.core.logging.LogEvent in project BiglyBT by BiglySoftware.
the class TRTrackerAnnouncerMuxer method split.
protected void split(boolean first_time) throws TRTrackerAnnouncerException {
String[] networks = f_provider == null ? null : f_provider.getNetworks();
boolean force_recreate = false;
if (!first_time) {
if (current_networks != networks) {
if (current_networks == null || networks == null) {
force_recreate = true;
} else {
if (networks.length != current_networks.length) {
force_recreate = true;
} else {
for (String net1 : current_networks) {
boolean match = false;
for (String net2 : networks) {
if (net1 == net2) {
match = true;
}
}
if (!match) {
force_recreate = true;
break;
}
}
}
}
}
}
current_networks = networks;
TRTrackerAnnouncerHelper to_activate = null;
synchronized (this) {
if (stopped || destroyed) {
return;
}
TOTorrent torrent = getTorrent();
TOTorrentAnnounceURLSet[] sets = torrent.getAnnounceURLGroup().getAnnounceURLSets();
if (sets.length == 0) {
sets = new TOTorrentAnnounceURLSet[] { torrent.getAnnounceURLGroup().createAnnounceURLSet(new URL[] { torrent.getAnnounceURL() }) };
} else {
boolean found_decentralised = false;
boolean modified = false;
for (int i = 0; i < sets.length; i++) {
TOTorrentAnnounceURLSet set = sets[i];
URL[] urls = set.getAnnounceURLs().clone();
for (int j = 0; j < urls.length; j++) {
URL u = urls[j];
if (u != null && TorrentUtils.isDecentralised(u)) {
if (found_decentralised) {
modified = true;
urls[j] = null;
} else {
found_decentralised = true;
}
}
}
}
if (modified) {
List<TOTorrentAnnounceURLSet> s_list = new ArrayList<>();
for (TOTorrentAnnounceURLSet set : sets) {
URL[] urls = set.getAnnounceURLs();
List<URL> u_list = new ArrayList<>(urls.length);
for (URL u : urls) {
if (u != null) {
u_list.add(u);
}
}
if (u_list.size() > 0) {
s_list.add(torrent.getAnnounceURLGroup().createAnnounceURLSet(u_list.toArray(new URL[u_list.size()])));
}
}
sets = s_list.toArray(new TOTorrentAnnounceURLSet[s_list.size()]);
}
}
List<TOTorrentAnnounceURLSet[]> new_sets = new ArrayList<>();
if (is_manual || sets.length < 2) {
new_sets.add(sets);
} else {
List<TOTorrentAnnounceURLSet> list = new ArrayList<>(Arrays.asList(sets));
while (list.size() > 0) {
TOTorrentAnnounceURLSet set1 = list.remove(0);
boolean done = false;
URL[] urls1 = set1.getAnnounceURLs();
if (urls1.length == 1) {
URL url1 = urls1[0];
String prot1 = url1.getProtocol().toLowerCase();
String host1 = url1.getHost();
for (int i = 0; i < list.size(); i++) {
TOTorrentAnnounceURLSet set2 = list.get(i);
URL[] urls2 = set2.getAnnounceURLs();
if (urls2.length == 1) {
URL url2 = urls2[0];
String prot2 = url2.getProtocol().toLowerCase();
String host2 = url2.getHost();
if (host1.equals(host2)) {
if ((prot1.equals("udp") && prot2.startsWith("http")) || (prot2.equals("udp") && prot1.startsWith("http"))) {
list.remove(i);
new_sets.add(new TOTorrentAnnounceURLSet[] { set1, set2 });
done = true;
}
}
}
}
}
if (!done) {
new_sets.add(new TOTorrentAnnounceURLSet[] { set1 });
}
}
}
// work out the difference
Iterator<TOTorrentAnnounceURLSet[]> ns_it = new_sets.iterator();
// need to copy list as we modify it and returned list ain't thread safe
List<TRTrackerAnnouncerHelper> existing_announcers = new ArrayList<>(announcers.getList());
List<TRTrackerAnnouncerHelper> new_announcers = new ArrayList<>();
if (!force_recreate) {
while (ns_it.hasNext()) {
TOTorrentAnnounceURLSet[] ns = ns_it.next();
Iterator<TRTrackerAnnouncerHelper> a_it = existing_announcers.iterator();
while (a_it.hasNext()) {
TRTrackerAnnouncerHelper a = a_it.next();
TOTorrentAnnounceURLSet[] os = a.getAnnounceSets();
if (same(ns, os)) {
ns_it.remove();
a_it.remove();
new_announcers.add(a);
break;
}
}
}
}
// first remove dht ones from the equation
TRTrackerAnnouncerHelper existing_dht_announcer = null;
TOTorrentAnnounceURLSet[] new_dht_set = null;
ns_it = new_sets.iterator();
while (ns_it.hasNext()) {
TOTorrentAnnounceURLSet[] x = ns_it.next();
if (TorrentUtils.isDecentralised(x[0].getAnnounceURLs()[0])) {
new_dht_set = x;
ns_it.remove();
break;
}
}
Iterator<TRTrackerAnnouncerHelper> an_it = existing_announcers.iterator();
while (an_it.hasNext()) {
TRTrackerAnnouncerHelper a = an_it.next();
TOTorrentAnnounceURLSet[] x = a.getAnnounceSets();
if (TorrentUtils.isDecentralised(x[0].getAnnounceURLs()[0])) {
existing_dht_announcer = a;
an_it.remove();
break;
}
}
if (existing_dht_announcer != null && new_dht_set != null) {
new_announcers.add(existing_dht_announcer);
} else if (existing_dht_announcer != null) {
activated.remove(existing_dht_announcer);
existing_dht_announcer.destroy();
} else if (new_dht_set != null) {
TRTrackerAnnouncerHelper a = create(torrent, networks, new_dht_set);
new_announcers.add(a);
}
// create any new ones required
ns_it = new_sets.iterator();
while (ns_it.hasNext()) {
TOTorrentAnnounceURLSet[] s = ns_it.next();
TRTrackerAnnouncerHelper a = create(torrent, networks, s);
new_announcers.add(a);
}
// finally fix up the announcer list to represent the new state
Iterator<TRTrackerAnnouncerHelper> a_it = announcers.iterator();
while (a_it.hasNext()) {
TRTrackerAnnouncerHelper a = a_it.next();
if (!new_announcers.contains(a)) {
a_it.remove();
try {
if (activated.contains(a) && torrent.getPrivate() && a instanceof TRTrackerBTAnnouncerImpl) {
URL url = a.getTrackerURL();
if (url != null) {
forceStop((TRTrackerBTAnnouncerImpl) a, networks, url);
}
}
} finally {
if (Logger.isEnabled()) {
Logger.log(new LogEvent(getTorrent(), LOGID, "Deactivating " + getString(a.getAnnounceSets())));
}
activated.remove(a);
a.destroy();
}
}
}
a_it = new_announcers.iterator();
while (a_it.hasNext()) {
TRTrackerAnnouncerHelper a = a_it.next();
if (!announcers.contains(a)) {
announcers.add(a);
}
}
if (!is_manual && announcers.size() > 0) {
if (activated.size() == 0) {
TRTrackerAnnouncerHelper a = announcers.get(0);
if (Logger.isEnabled()) {
Logger.log(new LogEvent(getTorrent(), LOGID, "Activating " + getString(a.getAnnounceSets())));
}
activated.add(a);
last_activation_time = SystemTime.getMonotonousTime();
if (provider != null) {
to_activate = a;
}
}
setupActivationCheck(ACT_CHECK_INIT_DELAY);
}
}
if (to_activate != null) {
if (complete) {
to_activate.complete(true);
} else {
to_activate.update(false);
}
}
}
Aggregations