From d21c902ad0769fe25e3572a58de43f51fade5136 Mon Sep 17 00:00:00 2001 From: ian Date: Tue, 11 Jul 2023 10:13:59 +0100 Subject: [PATCH] Fix large p2p http bodies This includes a fixed jvm-libp2p which fixes writing arrays larger than the yamux window size. --- pom.xml | 2 +- src/main/java/org/peergos/protocol/http/HttpProtocol.java | 8 ++++---- src/test/java/org/peergos/HttpProxyTest.java | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 68cf8686..52c28c23 100644 --- a/pom.xml +++ b/pom.xml @@ -134,7 +134,7 @@ com.github.peergos jvm-libp2p - 0.13.0 + 0.14.0 org.bouncycastle diff --git a/src/main/java/org/peergos/protocol/http/HttpProtocol.java b/src/main/java/org/peergos/protocol/http/HttpProtocol.java index f8bb562d..0381ae25 100644 --- a/src/main/java/org/peergos/protocol/http/HttpProtocol.java +++ b/src/main/java/org/peergos/protocol/http/HttpProtocol.java @@ -8,7 +8,6 @@ import io.netty.channel.nio.*; import io.netty.channel.socket.nio.*; import io.netty.handler.codec.http.*; -import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.logging.*; import org.jetbrains.annotations.*; @@ -17,6 +16,7 @@ import java.util.function.*; public class HttpProtocol extends ProtocolHandler { + private static final int MAX_BODY_SIZE = 2 * 1024 * 1024; // TODO remove this and make it fully streaming public static class Binding extends StrictProtocolBinding { public Binding(SocketAddress proxyTarget) { @@ -107,7 +107,7 @@ public static void proxyRequest(FullHttpRequest msg, protected void initChannel(Channel ch) throws Exception { ch.pipeline().addLast(new HttpRequestEncoder()); ch.pipeline().addLast(new HttpResponseDecoder()); - ch.pipeline().addLast(new HttpObjectAggregator(2*1024*1024)); + ch.pipeline().addLast(new HttpObjectAggregator(MAX_BODY_SIZE)); ch.pipeline().addLast(new ResponseWriter(replyHandler)); } }); @@ -142,7 +142,7 @@ protected CompletableFuture onStartInitiator(@NotNull Stream str Sender replyPropagator = new Sender(stream); stream.pushHandler(new HttpRequestEncoder()); stream.pushHandler(new HttpResponseDecoder()); - stream.pushHandler(new HttpObjectAggregator(1024*1024)); + stream.pushHandler(new HttpObjectAggregator(MAX_BODY_SIZE)); stream.pushHandler(replyPropagator); stream.pushHandler(new LoggingHandler(LogLevel.TRACE)); return CompletableFuture.completedFuture(replyPropagator); @@ -153,7 +153,7 @@ protected CompletableFuture onStartInitiator(@NotNull Stream str protected CompletableFuture onStartResponder(@NotNull Stream stream) { Receiver proxier = new Receiver(handler); stream.pushHandler(new HttpRequestDecoder()); - stream.pushHandler(new HttpObjectAggregator(2*1024*1024)); + stream.pushHandler(new HttpObjectAggregator(MAX_BODY_SIZE)); stream.pushHandler(proxier); stream.pushHandler(new HttpResponseEncoder()); return CompletableFuture.completedFuture(proxier); diff --git a/src/test/java/org/peergos/HttpProxyTest.java b/src/test/java/org/peergos/HttpProxyTest.java index 3650d5c1..ac21a75a 100644 --- a/src/test/java/org/peergos/HttpProxyTest.java +++ b/src/test/java/org/peergos/HttpProxyTest.java @@ -33,7 +33,7 @@ public void p2pProxyRequest() throws IOException { node2.start().join(); // start local server with fixed HTTP response - byte[] httpReply = new byte[577*1024]; + byte[] httpReply = new byte[1024*1024]; new Random(42).nextBytes(httpReply); HttpServer localhostServer = HttpServer.create(proxyTarget, 20); localhostServer.createContext("/", ex -> {