Search in sources :

Example 66 with LogEvent

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;
        }
    }
}
Also used : LogEvent(com.biglybt.core.logging.LogEvent)

Example 67 with LogEvent

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);
    }
}
Also used : AsynchronousCloseException(java.nio.channels.AsynchronousCloseException) LogEvent(com.biglybt.core.logging.LogEvent) EOFException(java.io.EOFException)

Example 68 with LogEvent

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"));
    }
}
Also used : SocketTimeoutException(java.net.SocketTimeoutException) LogEvent(com.biglybt.core.logging.LogEvent) Iterator(java.util.Iterator) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List)

Example 69 with LogEvent

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();
    }
}
Also used : LogEvent(com.biglybt.core.logging.LogEvent)

Example 70 with LogEvent

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);
        }
    }
}
Also used : LogEvent(com.biglybt.core.logging.LogEvent) URL(java.net.URL) TRTrackerBTAnnouncerImpl(com.biglybt.core.tracker.client.impl.bt.TRTrackerBTAnnouncerImpl) TOTorrent(com.biglybt.core.torrent.TOTorrent) TOTorrentAnnounceURLSet(com.biglybt.core.torrent.TOTorrentAnnounceURLSet)

Aggregations

LogEvent (com.biglybt.core.logging.LogEvent)172 LogAlert (com.biglybt.core.logging.LogAlert)20 IOException (java.io.IOException)14 File (java.io.File)11 URL (java.net.URL)11 ArrayList (java.util.ArrayList)9 InetSocketAddress (java.net.InetSocketAddress)8 InputStream (java.io.InputStream)7 UnsupportedEncodingException (java.io.UnsupportedEncodingException)7 ZipInputStream (java.util.zip.ZipInputStream)7 CacheFileManagerException (com.biglybt.core.diskmanager.cache.CacheFileManagerException)6 TOTorrent (com.biglybt.core.torrent.TOTorrent)6 TOTorrentException (com.biglybt.core.torrent.TOTorrentException)6 ResourceDownloader (com.biglybt.pif.utils.resourcedownloader.ResourceDownloader)6 UIFunctions (com.biglybt.ui.UIFunctions)6 SocketChannel (java.nio.channels.SocketChannel)6 Iterator (java.util.Iterator)6 ConnectionEndpoint (com.biglybt.core.networkmanager.ConnectionEndpoint)5 ClientIDException (com.biglybt.pif.clientid.ClientIDException)5 ParameterListener (com.biglybt.core.config.ParameterListener)4