BitTorrent library and client with DHT, magnet links, encryption and more

Overview

Bt Tweet

A full-featured BitTorrent implementation in Java 8
peer exchange | magnet links | DHT | encryption | LSD | private trackers | extended protocol | partial downloads | port forwarding

Bt CLI

Linux build Linux build Maven Central JavaDoc Coverage

  • HOME – website with documentation and tutorials
  • RELEASE NOTES – list of features, bugfixes and improments for each version
  • UPGRADE INSTRUCTIONS – version migration guide
  • FORUM – Google group for support and feedback
  • TROUBLESHOOTING - solutions for some common problems
  • LICENSE – licensed under Apache License 2.0

Runnable apps and demos

Media

Support the author

Donate

Prerequisites

Currently, all peer connections are established via encryption negotation protocol (also called MSE handshake). If you're using Oracle JDK (pre 8u152), in order to be able to connect to peers you must install Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy. The reason for this requirement is that the MSE RC4 cipher uses 160 bit keys, while default Java installation allows at most 128 bit keys.

Usage

Most recent version available in Maven Central is 1.9.

Declare the following dependencies in your project’s pom.xml:

<dependency>
    <groupId>com.github.atomashpolskiy</groupId>
    <artifactId>bt-core</artifactId>
    <version>${bt-version}</version>
</dependency>
<dependency>
    <groupId>com.github.atomashpolskiy</groupId>
    <artifactId>bt-http-tracker-client</artifactId>
    <version>${bt-version}</version>
</dependency>
<dependency>
    <groupId>com.github.atomashpolskiy</groupId>
    <artifactId>bt-dht</artifactId>
    <version>${bt-version}</version>
</dependency>
<dependency>
    <groupId>com.github.atomashpolskiy</groupId>
    <artifactId>bt-upnp</artifactId>
    <version>${bt-version}</version>
</dependency>

Building from source

git clone https://github.com/atomashpolskiy/bt.git
cd bt
mvn clean install -DskipTests

Code sample

// enable multithreaded verification of torrent data
Config config = new Config() {
    @Override
    public int getNumOfHashingThreads() {
        return Runtime.getRuntime().availableProcessors() * 2;
    }
};

// enable bootstrapping from public routers
Module dhtModule = new DHTModule(new DHTConfig() {
    @Override
    public boolean shouldUseRouterBootstrap() {
        return true;
    }
});

// get download directory
Path targetDirectory = Paths.get(System.getProperty("user.home"), "Downloads");

// create file system based backend for torrent data
Storage storage = new FileSystemStorage(targetDirectory);

// create client with a private runtime
BtClient client = Bt.client()
        .config(config)
        .storage(storage)
        .magnet("magnet:?xt=urn:btih:af0d9aa01a9ae123a73802cfa58ccaf355eb19f1")
        .autoLoadModules()
        .module(dhtModule)
        .stopWhenDownloaded()
        .build();

// launch
client.startAsync().join();

What makes Bt stand out from the crowd

Flexibility

Being built around the Guice DI, Bt provides many options for tailoring the system for your specific needs. If something is a part of Bt, then it can be modified or substituted for your custom code.

Custom backends

Bt is shipped with a standard file-system based backend (i.e. you can download the torrent file to a storage device). However, the backend details are abstracted from the message-level code. This means that you can use your own backend by providing a storage unit implementation.

Protocol extensions

One notable customization scenario is extending the standard BitTorrent protocol with your own messages. BitTorrent's BEP-10 provides a native support for protocol extensions, and implementation of this standard is already included in Bt. Contribute your own Messages, byte manipulating MessageHandlers, message consumers and producers; supply any additional info in ExtendedHandshake.

Test infrastructure

To allow you test the changes that you've made to the core, Bt ships with a specialized framework for integration tests. Create an arbitrary-sized swarm of peers inside a simple JUnit test, set the number of seeders and leechers and start a real torrent session on your localhost. E.g. create one seeder and many leechers to stress test the network overhead; use a really large file and multiple peers to stress test your newest laptop's expensive SSD storage; or just launch the whole swarm in no-files mode and test your protocol extensions.

Parallel downloads

Bt has out-of-the-box support for multiple simultaneous torrent sessions with minimal system overhead.

Partial downloads

Bt has an API for selecting only a subset of torrent files to download. See the bt.TorrentClientBuilder.fileSelector(TorrentFileSelector) client builder method. File selection works for both .torrent file-based and magnet link downloads.

Java 8 CompletableFuture

Client API leverages the asynchronous java.util.concurrent.CompletableFuture to provide the most natural way for co-ordinating multiple torrent sessions. E.g. use CompletableFuture.allOf(client1.startAsync(...), client2.startAsync(...), ...).join(). Or create a more sophisticated processing pipeline.

And much more...

Troubleshooting

Can't connect to peers, everything else seems to work

If you're using an Oracle JDK, make sure that you have installed Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy.

Other BitTorrent clients can't connect to a Bt client / No incoming connections when seeding

a) If you're behind a firewall and/or a NAT (e.g. a router), make sure they are configured to allow incoming TCP and UDP connections on the ports used by Bt. Default Bt ports are 6891 and 49001 for BitTorrent and DHT respectively. NAT must additionally be configured to forward all incoming traffic on these ports to the host, that Bt is running on.

b) Many popular BitTorrent clients use UPnP and NAT-PMP to automatically configure port forwarding on NATs. Since 1.8 Bt does this as well, so make sure to include bt-upnp module in the list of dependencies.

There are exceptions in the build log (but the build completes successfully)

This is perfectly fine. Some of the tests verify that the exceptions are thrown in certain cases, hence the exception messages.

Can't run the CLI on Windows XP (java.io.IOException: Cannot run program "/bin/stty")

CLI GUI indeed does not work on Windows XP. Run in headless mode by using -H flag.

Can't connect to peers on Windows 7/8/10

There seem to be some issues with dual-stack networking in Windows JDK (e.g. see this question on SO), with Java trying to use IPv6 address, when it's not really available in the system. The simplest solution is to force Java to use IPv4 by setting java.net.preferIPv4Stack property to true.

Support and feedback

Any thoughts, ideas, criticism, etc. are welcome, as well as votes for new features and BEPs to be added. You have the following options to share your ideas, receive help or report bugs:

List of supported BEPs

Comments
  • Use generic java.nio.files interfaces in FileSystemStorage

    Use generic java.nio.files interfaces in FileSystemStorage

    The API as shown now still uses the outdated java.io.File API. Since this is a Java-8 only library, it should support the more recent java.nio package for better client write-to-disk performances.

    enhancement 
    opened by ogregoire 39
  • Failed to get peers from torrent and response from trackers

    Failed to get peers from torrent and response from trackers

    26139 [bt.peer.peer-collector] WARN bt.peer.ScheduledPeerSource - Peer collection finished with exception in peer source: TrackerPeerSource {UdpTracker{trackerUrl=http://9.rarbg.me:2790/announce}} java.util.concurrent.ExecutionException: bt.BtException: Failed to get peers for torrent at java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.util.concurrent.FutureTask.get(FutureTask.java:192) at bt.peer.ScheduledPeerSource.schedulePeerCollection(ScheduledPeerSource.java:72) at bt.peer.ScheduledPeerSource.update(ScheduledPeerSource.java:60) at bt.peer.PeerRegistry.queryPeerSource(PeerRegistry.java:189) at bt.peer.PeerRegistry.queryTracker(PeerRegistry.java:167) at bt.peer.PeerRegistry.lambda$queryTrackers$5(PeerRegistry.java:155) at java.util.ArrayList.forEach(ArrayList.java:1257) at bt.peer.PeerRegistry.queryTrackers(PeerRegistry.java:153) at bt.peer.PeerRegistry.lambda$collectAndVisitPeers$3(PeerRegistry.java:133) at java.util.concurrent.ConcurrentHashMap$KeySetView.forEach(ConcurrentHashMap.java:4649) at java.util.Collections$UnmodifiableCollection.forEach(Collections.java:1080) at bt.peer.PeerRegistry.collectAndVisitPeers(PeerRegistry.java:106) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: bt.BtException: Failed to get peers for torrent at bt.peer.TrackerPeerSource.collectPeers(TrackerPeerSource.java:62) at bt.peer.ScheduledPeerSource.lambda$schedulePeerCollection$0(ScheduledPeerSource.java:81) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) ... 3 more Caused by: bt.BtException: Failed to receive response from the tracker at bt.tracker.udp.UdpMessageWorker.sendMessage(UdpMessageWorker.java:101) at bt.tracker.udp.UdpMessageWorker.sendMessage(UdpMessageWorker.java:103) at bt.tracker.udp.UdpMessageWorker.createSession(UdpMessageWorker.java:88) at bt.tracker.udp.UdpMessageWorker.getSession(UdpMessageWorker.java:82) at bt.tracker.udp.UdpMessageWorker.sendMessage(UdpMessageWorker.java:77) at bt.tracker.udp.UdpTracker$1.announceEvent(UdpTracker.java:142) at bt.tracker.udp.UdpTracker$1.query(UdpTracker.java:122) at bt.peer.TrackerPeerSource.collectPeers(TrackerPeerSource.java:54) ... 6 more Caused by: java.util.concurrent.TimeoutException at java.util.concurrent.CompletableFuture.timedGet(CompletableFuture.java:1771) at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1915) at bt.tracker.udp.UdpMessageWorker.sendMessage(UdpMessageWorker.java:96) ... 13 more Hi,this is the issue I am having right now,I am on jdk1.8.0_201 and I made sure that JCE unlimited is enabled.I also know that this issue has been posted before but I didnt find a resolution,my ports are blocked.I used the sample code: ` public class torrent {

    public static void main(String[] args) throws NoSuchAlgorithmException, UnknownHostException {
    	
    	Security.setProperty("policy", "unlimited");
    	String ciph = "test";
    	int test = Cipher.getMaxAllowedKeyLength(ciph);
    	System.out.println(test);
    	System.setProperty("java.net.preferIPv4Stack" , "true");
    	
    Config config = new Config() {
        @Override
        public int getNumOfHashingThreads() {
            return Runtime.getRuntime().availableProcessors() * 4;
        }
    };
    Duration dur = Duration.ofSeconds(60);
    config.setPeerConnectionTimeout(dur);
    config.setPeerConnectionRetryCount(3);
    
    Module dhtModule = new DHTModule(new DHTConfig() {
        @Override
        public boolean shouldUseRouterBootstrap() {
            return true;
        }
    });
    
    // get download directory
    java.nio.file.Path targetDirectory = new File("C:\\Users\\wcwra\\eclipse-workspace\\").toPath();
    
    // create file system based backend for torrent data
    Storage storage = new FileSystemStorage(targetDirectory);
    
    // create client with a private runtime
    BtClient client = Bt.client()
            .config(config)
            .storage(storage)
            .magnet("magnet:?xt=urn:btih:0a1eff95abb86f80e5de7790526d6c5307f7ebeb&dn=Clip_Studio_Paint_EX_1.8.2.fix&tr=udp%3a%2f%2f9.rarbg.to%3a2750%2fannounce&tr=udp%3a%2f%2ftracker.internetwarriors.net%3a1337%2fannounce&tr=udp%3a%2f%2ftracker.leechers-paradise.org%3a6969%2fannounce&tr=udp%3a%2f%2fpublic.popcorn-tracker.org%3a6969%2fannounce&tr=udp%3a%2f%2ftracker.pirateparty.gr%3a6969%2fannounce&tr=udp%3a%2f%2fcoppersurfer.tk%3a6969%2fannounce&tr=udp%3a%2f%2ftracker.coppersurfer.tk%3a6969%2fannounce&tr=udp%3a%2f%2ftracker.zer0day.to%3a1337%2fannounce&tr=udp%3a%2f%2ftracker.opentrackr.org%3a80%2fannounce&tr=udp%3a%2f%2f9.rarbg.com%3a2710%2fannounce&tr=udp%3a%2f%2f9.rarbg.me%3a2790%2fannounce")
            .autoLoadModules()
            .module(new HttpTrackerModule())
            .module(new PeerExchangeModule())
            .stopWhenDownloaded()
            .build();
    
    client.startAsync();
    
    }
    

    } ` Other torrent clients like qBittorent work fine.This error appear on all peers.On the Http ones,I get error:Failed to establish connection with peer......Reason: java.net.BindException (Cannot assign requested address: connect)

    opened by konkart 25
  • Support for BEP-5: DHT Protocol

    Support for BEP-5: DHT Protocol

    I am a newbie coder. I was planning to implement BitTorrent protocol. It's like some magic for me. But I decided to checkout libraries first, and many of the libraries said in docs that they don't have DHT support and ones which did were messy.

    But to check out the performance, I am gonna try out all of them, of course including bt. I was just wondering if you have plans to implement the BPE-5, the DHT, so that I can use it in the future. Or, if I have some confidence, I think I will look into your code and think about implementing DHT and contributing to bt, though it's not an easy task for a developer like me..

    feature BEP 
    opened by karuppiah7890 16
  • How do I initially seed a file/folder?

    How do I initially seed a file/folder?

    I've gone through the examples but I'm lost. What I want to do is create a torrent for a file/folder and start seeding it.

    I create a torrent using an external tool after which I want to start seeding it so other machines can download it. Could you please point me in the right direction regarding this? Thanks

    opened by asadsm 13
  • AccessDeniedException keeps getting thrown inside SpringBoot request

    AccessDeniedException keeps getting thrown inside SpringBoot request

    I'm sending torrent links from an external third party into my server. Springboot takes the request and downloads the torrent. However, BT keeps crashing with an AccessDeniedException without any further context. It says that Files.delete is throwing the exception which makes sense as it's the only method that can crash with such an error.

    Here's my code: https://hasteb.in/aradumew.java

    The error thrown is: https://hasteb.in/tameyiqu.sql

    Am I doing something wrong?

    The other issue on this repo says that the error has been made more verbose but that release hasn't appeared on maven in a very long time and it's not even a solution to the issue.

    This stackoverflow thread mentions File.delete can cause this crash if something tries to reopen the file after it's marked to be deleted. https://stackoverflow.com/a/31608180/4327834

    opened by SwissCheese5 11
  • Accessing the underlying StorageUnit for a Storage to get the downloaded bytes.

    Accessing the underlying StorageUnit for a Storage to get the downloaded bytes.

    Initially my question was how to get an instance of the FileSystemStorageUnit class but just noticed that this is package private to bt.data.file. Anyways, FileSystemStorageUnit is a StorageUnit which is available to use anywhere.

    I want to access the underlying StorageUnit of a Storage. The FileSystemStorage#getUnit method requires two params, a Torrent and a TorrentFile. As I'm only starting out with this library (which I'm absolutely loving, btw), I have no idea where to get (or create) the params required for getUnit.

    Also, I feel that I should mention why I'm trying to do this. The goal is to stream media files when download is still in progress. I'm assuming that I can get the downloaded bytes from StorageUnit::readBlock.

    opened by devsh0 10
  • [BUG]a dead lock case

    [BUG]a dead lock case

    Describe the bug A dead lock occured. And then cause download blocked.

    Dead lock reason: cleaner thread acquired connectionLock then try acquiring EventBus Lock collector thread acquired EventBus Lock then try acquiring connectionLock

    stack of ConnectionPool Cleaner thread

    "6891.bt.net.pool.cleaner" #480 daemon prio=5 os_prio=0 tid=0x000000000af38800 nid=0xd9fb waiting for monitor entry [0x00007f56e4ef2000]
       java.lang.Thread.State: BLOCKED (on object monitor)
            at bt.event.EventBus.firePeerDisconnected(EventBus.java:76)
            - waiting to lock <0x00000001330a6c18> (a bt.event.EventBus)
            at bt.net.PeerConnectionPool.purgeConnection(PeerConnectionPool.java:263)
            at bt.net.PeerConnectionPool.access$200(PeerConnectionPool.java:48)
            at bt.net.PeerConnectionPool$Cleaner.lambda$run$0(PeerConnectionPool.java:239)
            at bt.net.PeerConnectionPool$Cleaner$$Lambda$796/158316397.accept(Unknown Source)
            at bt.net.Connections$$Lambda$797/128473136.accept(Unknown Source)
            at java.util.concurrent.ConcurrentHashMap$ValuesView.forEach(ConcurrentHashMap.java:4707)
            at bt.net.Connections.visitConnections(PeerConnectionPool.java:332)
            at bt.net.PeerConnectionPool$Cleaner.run(PeerConnectionPool.java:237)
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
            at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
            at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
            at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at java.lang.Thread.run(Thread.java:748)
    

    stack of peer-collector thread

    "6891.bt.peer.peer-collector" #482 daemon prio=5 os_prio=0 tid=0x0000000008379800 nid=0xd9fd waiting on condition [0x00007f56e4e6f000]
       java.lang.Thread.State: WAITING (parking)
            at sun.misc.Unsafe.park(Native Method)
            - parking to wait for  <0x00000001330a7e08> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
            at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
            at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
            at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
            at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
            at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
            at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
            at bt.net.PeerConnectionPool.getConnection(PeerConnectionPool.java:87)
            at bt.net.ConnectionSource.getExistingOrPendingConnection(ConnectionSource.java:169)
            at bt.net.ConnectionSource.getConnectionAsync(ConnectionSource.java:89)
            at bt.torrent.messaging.TorrentWorker.onPeerDiscovered(TorrentWorker.java:415)
            - locked <0x000000012f000ba8> (a bt.torrent.messaging.TorrentWorker)
            at bt.torrent.messaging.TorrentWorker.lambda$new$0(TorrentWorker.java:108)
            at bt.torrent.messaging.TorrentWorker$$Lambda$698/90086491.accept(Unknown Source)
            at bt.event.EventBus.lambda$addListener$3(EventBus.java:246)
            at bt.event.EventBus$$Lambda$599/292545143.accept(Unknown Source)
            at bt.event.EventBus.doFireEvent(EventBus.java:180)
            at bt.event.EventBus.fireEvent(EventBus.java:163)
            at bt.event.EventBus.firePeerDiscovered(EventBus.java:61)
            - locked <0x00000001330a6c18> (a bt.event.EventBus)
            at bt.peer.PeerRegistry.addPeer(PeerRegistry.java:214)
            at bt.peer.PeerRegistry.queryPeerSource(PeerRegistry.java:194)
            at bt.peer.PeerRegistry.lambda$null$2(PeerRegistry.java:137)
            at bt.peer.PeerRegistry$$Lambda$727/1689179593.accept(Unknown Source)
            at java.lang.Iterable.forEach(Iterable.java:75)
            at bt.peer.PeerRegistry.lambda$collectAndVisitPeers$3(PeerRegistry.java:136)
            at bt.peer.PeerRegistry$$Lambda$681/315981216.accept(Unknown Source)
            at java.util.concurrent.ConcurrentHashMap$KeySetView.forEach(ConcurrentHashMap.java:4649)
            at java.util.Collections$UnmodifiableCollection.forEach(Collections.java:1080)
            at bt.peer.PeerRegistry.collectAndVisitPeers(PeerRegistry.java:104)
            at bt.peer.PeerRegistry$$Lambda$679/1839725766.run(Unknown Source)
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
            at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
            at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
            at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at java.lang.Thread.run(Thread.java:748)
    
    bug 
    opened by a8156268 9
  • Cant download anything - nat?

    Cant download anything - nat?

    Im having issues downloading anything with version 1.7 or 1.8 snapshot

    My internet connection is double nated - so incomming connections will not work. Shouldnt it be still be possible to download a well seeded torrent?

    opened by faljse 9
  • UPNP for automatic port forwarding

    UPNP for automatic port forwarding

    Hi, I'm willing to try to implement UPNP for bt. Is there any previous research about preferred libraries and implementation approach? Is there anything against https://github.com/4thline/cling in particular?

    feature 
    opened by OlegAndreych 9
  • NPE in SocketChannelHandler

    NPE in SocketChannelHandler

    Fixed NPE in 'SocketChannelHandler.flush()'

    Don't invoke outboundBuffer.unlock(); because that behaviour used in DefaultChannelPipeline#encode

    https://github.com/atomashpolskiy/bt/blob/a37ca29f3585d0b34a2fbeb532a92368432dae9c/bt-core/src/main/java/bt/net/pipeline/DefaultChannelPipeline.java#L121-L136

    opened by ckovorodkin 9
  • Can't connect to peers

    Can't connect to peers

    I used the instance code, even the magnet link is the same (I tried to use my own), but nothing happens

    public static void main(String[] args) {
            Config config = new Config() {
                @Override
                public int getNumOfHashingThreads() {
                    return Runtime.getRuntime().availableProcessors() * 2;
                }
            };
    
            // enable bootstrapping from public routers
            Module dhtModule = new DHTModule(new DHTConfig() {
                @Override
                public boolean shouldUseRouterBootstrap() {
                    return true;
                }
            });
    
            // get download directory
            Path targetDirectory = new File("~/Downloads").toPath();
    
            // create file system based backend for torrent data
            Storage storage = new FileSystemStorage(targetDirectory);
    
            // create client with a private runtime
            BtClient client = Bt.client()
                    .config(config)
                    .storage(storage)
                    .magnet("magnet:?xt=urn:btih:af0d9aa01a9ae123a73802cfa58ccaf355eb19f1")
                    .autoLoadModules()
                    .module(dhtModule)
                    .stopWhenDownloaded()
                    .build();
    
            // launch
            client.startAsync().join();
        }
    

    The conclusion showed 3 lines and it all ended

    309 [main] INFO bt.runtime.BtRuntimeBuilder - Auto-loading module bt.tracker.http.HttpTrackerModule with default configuration 309 [main] INFO bt.runtime.BtRuntimeBuilder - Auto-loading module bt.peerexchange.PeerExchangeModule with default configuration 318 [main] INFO bt.runtime.BtRuntimeBuilder - Overriding auto-loaded module bt.dht.DHTModule 2482 [bt.net.pool.incoming-acceptor] INFO bt.net.PeerConnectionPool - Opening server channel for incoming connections @ /192.168.1.34:6891

    What do I need to do to get it to work?

    opened by k1ll1n 9
Netflix, Inc. 23.1k Jan 5, 2023
Resilience4j is a fault tolerance library designed for Java8 and functional programming

Fault tolerance library designed for functional programming Table of Contents 1. Introduction 2. Documentation 3. Overview 4. Resilience patterns 5. S

Resilience4j 8.5k Jan 2, 2023
Ribbon is a Inter Process Communication (remote procedure calls) library with built in software load balancers. The primary usage model involves REST calls with various serialization scheme support.

Ribbon Ribbon is a client side IPC library that is battle-tested in cloud. It provides the following features Load balancing Fault tolerance Multiple

Netflix, Inc. 4.4k Jan 4, 2023
Fault tolerance and resilience patterns for the JVM

Failsafe Failsafe is a lightweight, zero-dependency library for handling failures in Java 8+, with a concise API for handling everyday use cases and t

Jonathan Halterman 3.9k Dec 29, 2022
Fibers, Channels and Actors for the JVM

Quasar Fibers, Channels and Actors for the JVM Getting started Add the following Maven/Gradle dependencies: Feature Artifact Core (required) co.parall

Parallel Universe 4.5k Dec 25, 2022
Build highly concurrent, distributed, and resilient message-driven applications on the JVM

Akka We believe that writing correct concurrent & distributed, resilient and elastic applications is too hard. Most of the time it's because we are us

Akka Project 12.6k Jan 3, 2023
Distributed Stream and Batch Processing

What is Jet Jet is an open-source, in-memory, distributed batch and stream processing engine. You can use it to process large volumes of real-time eve

hazelcast 1k Dec 31, 2022
a blockchain network simulator aimed at researching consensus algorithms for performance and security

Just Another Blockchain Simulator JABS - Just Another Blockchain Simulator. JABS is a blockchain network simulator aimed at researching consensus algo

null 49 Jan 1, 2023
Simple and lightweight sip server to create voice robots, based on vert.x

Overview Lightweight SIP application built on vert.x. It's intended to be used as addon for full-featured PBX to implement programmable voice scenario

Ivoice Technology 7 May 15, 2022
Apache Mesos is a cluster manager that provides efficient resource isolation and sharing across distributed applications, or frameworks

Apache Mesos is a cluster manager that provides efficient resource isolation and sharing across distributed applications, or frameworks. It can run Hadoop, Jenkins, Spark, Aurora, and other frameworks on a dynamically shared pool of nodes.

The Apache Software Foundation 5k Dec 31, 2022
OctoLinker — Links together, what belongs together

What is OctoLinker? OctoLinker is a browser extension for GitHub, that turns language-specific statements like include require or import into links. I

OctoLinker 5.1k Jan 6, 2023
Takin is an Java-based, open-source system designed to measure online or test environmental performance test for full-links, Especially for microservices

Takin is an Java-based, open-source system designed to measure online environmental performance test for full-links, Especially for microservices. Through Takin, middlewares and applications can identify real online traffic and test traffic, ensure that they enter the right databases.

ShulieTech 1.2k Dec 21, 2022
A platform that links service providers with clients using Angular & Springboot

Bricoly : Engineer Your Life The Way It Should Be... ?? Description This project's aims to connect people who are able to grant services with clients

Yasser Douslimi 9 May 28, 2022
Multi-platform transparent client-side encryption of your files in the cloud

Supporting Cryptomator Cryptomator is provided free of charge as an open-source project despite the high development effort and is therefore dependent

Cryptomator 8.7k Jan 5, 2023
JSON Web Token (JWT) implementation for Java with support for signatures (JWS), encryption (JWE) and web keys (JWK).

Nimbus JOSE+JWT Nimbus JOSE+JWT is a popular open source (Apache 2.0) Java library which implements the Javascript Object Signing and Encryption (JOSE

Connect2ID 35 Jul 1, 2022
A command-line tool to securely encrypt passwords and notes using AES encryption.

Treasury A command-line tool to securely encrypt passwords and notes using AES encryption. Installation Usage Technology Built solely in Java Picocli

Kai 4 Oct 17, 2022
Java Project based on Java and Encryption using Cryptography algorithms

Symmetric-Encryption-Cryptography-in-Java Java Project based on Java and Encryption using Cryptography algorithms Project Aim Develop Java program to

Muhammad Asad 6 Feb 3, 2022
Simple and extensible storage service implementation with optional encryption.

Simple and extensible storage service implementation with optional encryption. About Hole Hole is a simple data storage made with a soul for those who

d1s utils 3 Aug 13, 2022