From 410d60dd36fc43db41ae80c2b70ccafc5a5e97f3 Mon Sep 17 00:00:00 2001 From: kevodwyer Date: Tue, 11 Jul 2023 10:50:07 +0100 Subject: [PATCH] dial all addresses --- src/main/java/org/peergos/HttpProxyService.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/peergos/HttpProxyService.java b/src/main/java/org/peergos/HttpProxyService.java index 7f1ebd35..dbaaafba 100755 --- a/src/main/java/org/peergos/HttpProxyService.java +++ b/src/main/java/org/peergos/HttpProxyService.java @@ -37,7 +37,9 @@ public HttpProxyService(Host node, HttpProtocol.Binding p2pHttpBinding, Kademlia public ProxyResponse proxyRequest(Multihash targetNodeId, ProxyRequest request) throws IOException, ProxyException { AddressBook addressBook = node.getAddressBook(); - Optional targetAddressesOpt = addressBook.get(PeerId.fromBase58(targetNodeId.bareMultihash().toBase58())).join().stream().findFirst(); + PeerId peerId = PeerId.fromBase58(targetNodeId.bareMultihash().toBase58()); + Optional targetAddressesOpt = addressBook.get(peerId).join().stream().findFirst(); + Multiaddr[] allAddresses = null; if (targetAddressesOpt.isEmpty()) { List closestPeers = dht.findClosestPeers(targetNodeId, 20, node); Optional matching = closestPeers.stream().filter(p -> p.peerId.equals(targetNodeId)).findFirst(); @@ -45,13 +47,12 @@ public ProxyResponse proxyRequest(Multihash targetNodeId, ProxyRequest request) throw new ProxyException("Target not found: " + targetNodeId); } PeerAddresses peer = matching.get(); - Multiaddr[] addrs = peer.getPublicAddresses().stream().map(a -> Multiaddr.fromString(a.toString())).toArray(Multiaddr[]::new); - targetAddressesOpt = Optional.of(addrs[0]); + allAddresses = peer.getPublicAddresses().stream().map(a -> Multiaddr.fromString(a.toString())).toArray(Multiaddr[]::new); } - Multiaddr finalAddress = targetAddressesOpt.get().toString().contains("/ipfs/") ? targetAddressesOpt.get() - : new Multiaddr(targetAddressesOpt.get() + "/ipfs/" + targetNodeId); - - HttpProtocol.HttpController proxier = p2pHttpBinding.dial(node, finalAddress).getController().join(); + Multiaddr[] addressesToDial = targetAddressesOpt.isPresent() ? + Arrays.asList(targetAddressesOpt.get()).toArray(Multiaddr[]::new) + : allAddresses; + HttpProtocol.HttpController proxier = p2pHttpBinding.dial(node, peerId, addressesToDial).getController().join(); String urlParams = constructQueryParamString(request.queryParams); FullHttpRequest httpRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.valueOf(request.method.name()),