diff --git a/core/src/main/groovy/com/muwire/core/Core.groovy b/core/src/main/groovy/com/muwire/core/Core.groovy index d1dacd64..c2751623 100644 --- a/core/src/main/groovy/com/muwire/core/Core.groovy +++ b/core/src/main/groovy/com/muwire/core/Core.groovy @@ -192,15 +192,15 @@ public class Core { log.info("initializing upload manager") UploadManager uploadManager = new UploadManager(eventBus, fileManager) + log.info("initializing connection establisher") + connectionEstablisher = new ConnectionEstablisher(eventBus, i2pConnector, props, connectionManager, hostCache) log.info("initializing acceptor") I2PAcceptor i2pAcceptor = new I2PAcceptor(socketManager) connectionAcceptor = new ConnectionAcceptor(eventBus, connectionManager, props, - i2pAcceptor, hostCache, trustService, searchManager, uploadManager) + i2pAcceptor, hostCache, trustService, searchManager, uploadManager, connectionEstablisher) - connectionEstablisher = new ConnectionEstablisher(eventBus, i2pConnector, props, connectionManager, hostCache) - log.info("initializing hasher service") hasherService = new HasherService(new FileHasher(), eventBus, fileManager) eventBus.register(FileSharedEvent.class, hasherService) diff --git a/core/src/main/groovy/com/muwire/core/connection/ConnectionAcceptor.groovy b/core/src/main/groovy/com/muwire/core/connection/ConnectionAcceptor.groovy index 0454a49f..020eb1f4 100644 --- a/core/src/main/groovy/com/muwire/core/connection/ConnectionAcceptor.groovy +++ b/core/src/main/groovy/com/muwire/core/connection/ConnectionAcceptor.groovy @@ -34,13 +34,15 @@ class ConnectionAcceptor { final TrustService trustService final SearchManager searchManager final UploadManager uploadManager + final ConnectionEstablisher establisher final ExecutorService acceptorThread final ExecutorService handshakerThreads ConnectionAcceptor(EventBus eventBus, UltrapeerConnectionManager manager, MuWireSettings settings, I2PAcceptor acceptor, HostCache hostCache, - TrustService trustService, SearchManager searchManager, UploadManager uploadManager) { + TrustService trustService, SearchManager searchManager, UploadManager uploadManager, + ConnectionEstablisher establisher) { this.eventBus = eventBus this.manager = manager this.settings = settings @@ -49,7 +51,8 @@ class ConnectionAcceptor { this.trustService = trustService this.searchManager = searchManager this.uploadManager = uploadManager - + this.establisher = establisher + acceptorThread = Executors.newSingleThreadExecutor { r -> def rv = new Thread(r) rv.setDaemon(true) @@ -140,7 +143,9 @@ class ConnectionAcceptor { } private void handleIncoming(Endpoint e, boolean leaf) { - boolean accept = !manager.isConnected(e.destination) && (leaf ? manager.hasLeafSlots() : manager.hasPeerSlots()) + boolean accept = !manager.isConnected(e.destination) && + !establisher.inProgress.contains(e.destination) && + (leaf ? manager.hasLeafSlots() : manager.hasPeerSlots()) if (accept) { log.info("accepting connection, leaf:$leaf") e.outputStream.write("OK".bytes)