diff --git a/src/main/java/org/peergos/protocol/http/HttpProtocol.java b/src/main/java/org/peergos/protocol/http/HttpProtocol.java index f04a669b..dcc2af7e 100644 --- a/src/main/java/org/peergos/protocol/http/HttpProtocol.java +++ b/src/main/java/org/peergos/protocol/http/HttpProtocol.java @@ -45,8 +45,7 @@ public void onMessage(@NotNull Stream stream, FullHttpResponse msg) { CompletableFuture req = queue.poll(); if (req != null) req.complete(msg.copy()); - else - msg.release(); + msg.release(); } public CompletableFuture send(FullHttpRequest req) { @@ -58,21 +57,21 @@ public CompletableFuture send(FullHttpRequest req) { } } - public static class ResponseWriter extends SimpleChannelInboundHandler { - private final Consumer replyProcessor; + public static class ResponseWriter extends SimpleChannelInboundHandler { + private final Consumer replyProcessor; - public ResponseWriter(Consumer replyProcessor) { + public ResponseWriter(Consumer replyProcessor) { this.replyProcessor = replyProcessor; } @Override - protected void channelRead0(ChannelHandlerContext channelHandlerContext, HttpObject reply) { + protected void channelRead0(ChannelHandlerContext channelHandlerContext, HttpContent reply) { replyProcessor.accept(reply); } } public interface HttpRequestProcessor { - void handle(Stream stream, HttpRequest msg, Consumer replyHandler); + void handle(Stream stream, HttpRequest msg, Consumer replyHandler); } public static class Receiver implements ProtocolMessageHandler, HttpController { @@ -82,11 +81,8 @@ public Receiver(HttpRequestProcessor requestHandler) { this.requestHandler = requestHandler; } - private void sendReply(HttpObject reply, Stream p2pstream) { - if (reply instanceof HttpContent) - p2pstream.writeAndFlush(((HttpContent) reply).retain()); - else - p2pstream.writeAndFlush(reply); + private void sendReply(HttpContent reply, Stream p2pstream) { + p2pstream.writeAndFlush(reply.copy()); } @Override @@ -102,7 +98,7 @@ public CompletableFuture send(FullHttpRequest req) { private static final NioEventLoopGroup pool = new NioEventLoopGroup(); public static void proxyRequest(HttpRequest msg, SocketAddress proxyTarget, - Consumer replyHandler) { + Consumer replyHandler) { Bootstrap b = new Bootstrap() .group(pool) .channel(NioSocketChannel.class) diff --git a/src/test/java/org/peergos/HttpProxyTest.java b/src/test/java/org/peergos/HttpProxyTest.java index ac21a75a..3650d5c1 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[1024*1024]; + byte[] httpReply = new byte[577*1024]; new Random(42).nextBytes(httpReply); HttpServer localhostServer = HttpServer.create(proxyTarget, 20); localhostServer.createContext("/", ex -> {