diff --git a/jetty-unixsocket/pom.xml b/jetty-unixsocket/pom.xml
index 0f03fc2b48c..fc6fc7f75a8 100644
--- a/jetty-unixsocket/pom.xml
+++ b/jetty-unixsocket/pom.xml
@@ -32,7 +32,7 @@
com.github.jnr
jnr-unixsocket
- 0.15
+ 0.18
org.eclipse.jetty.toolchain
diff --git a/jetty-unixsocket/src/test/java/org/eclipse/jetty/unixsocket/UnixSocketClient.java b/jetty-unixsocket/src/test/java/org/eclipse/jetty/unixsocket/UnixSocketClient.java
index f0744827146..e2a908e4541 100644
--- a/jetty-unixsocket/src/test/java/org/eclipse/jetty/unixsocket/UnixSocketClient.java
+++ b/jetty-unixsocket/src/test/java/org/eclipse/jetty/unixsocket/UnixSocketClient.java
@@ -19,11 +19,15 @@
package org.eclipse.jetty.unixsocket;
import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.nio.CharBuffer;
import java.nio.channels.Channels;
+import java.nio.charset.StandardCharsets;
import java.util.Date;
+import org.eclipse.jetty.toolchain.test.IO;
+
import jnr.unixsocket.UnixSocketAddress;
import jnr.unixsocket.UnixSocketChannel;
@@ -32,25 +36,51 @@ public class UnixSocketClient
public static void main(String[] args) throws Exception
{
java.io.File path = new java.io.File("/tmp/jetty.sock");
- String data = "GET / HTTP/1.1\r\nHost: unixsock\r\n\r\n";
- UnixSocketAddress address = new UnixSocketAddress(path);
- UnixSocketChannel channel = UnixSocketChannel.open(address);
- System.out.println("connected to " + channel.getRemoteSocketAddress());
-
- PrintWriter w = new PrintWriter(Channels.newOutputStream(channel));
- InputStreamReader r = new InputStreamReader(Channels.newInputStream(channel));
+ java.io.File content = new java.io.File("/tmp/data.txt");
+ String method = "GET";
+ int content_length = 0;
+ String body = null;
+ if (content.exists())
+ {
+ method = "POST";
+ body = IO.readToString(content);
+ content_length = body.length();
+ }
+ String data = method+" / HTTP/1.1\r\n"
+ + "Host: unixsock\r\n"
+ + "Content-Length: "+content_length+"\r\n"
+ + "Connection: close\r\n"
+ + "\r\n";
+ if (body!=null)
+ data += body;
+
while (true)
{
+ UnixSocketAddress address = new UnixSocketAddress(path);
+ UnixSocketChannel channel = UnixSocketChannel.open(address);
+ System.out.println("connected to " + channel.getRemoteSocketAddress());
+
+ PrintWriter w = new PrintWriter(new OutputStreamWriter(Channels.newOutputStream(channel),StandardCharsets.ISO_8859_1));
+ InputStreamReader r = new InputStreamReader(Channels.newInputStream(channel));
+
w.print(data);
w.flush();
CharBuffer result = CharBuffer.allocate(4096);
- r.read(result);
- result.flip();
- System.out.println("read from server: " + result.toString());
-
- Thread.sleep(1000);
+ String total="";
+ int l = 0;
+ while (l>=0)
+ {
+ if (l>0)
+ {
+ result.flip();
+ total += result.toString();
+ }
+ result.clear();
+ l = r.read(result);
+ }
+ System.out.println("read from server: " + total);
}
}
}
diff --git a/jetty-unixsocket/src/test/java/org/eclipse/jetty/unixsocket/UnixSocketProxyServer.java b/jetty-unixsocket/src/test/java/org/eclipse/jetty/unixsocket/UnixSocketProxyServer.java
new file mode 100644
index 00000000000..f90d7d6a36f
--- /dev/null
+++ b/jetty-unixsocket/src/test/java/org/eclipse/jetty/unixsocket/UnixSocketProxyServer.java
@@ -0,0 +1,90 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
+// ------------------------------------------------------------------------
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v1.0
+// and Apache License v2.0 which accompanies this distribution.
+//
+// The Eclipse Public License is available at
+// http://www.eclipse.org/legal/epl-v10.html
+//
+// The Apache License v2.0 is available at
+// http://www.opensource.org/licenses/apache2.0.php
+//
+// You may elect to redistribute this code under either of these licenses.
+// ========================================================================
+//
+
+package org.eclipse.jetty.unixsocket;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Date;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.jetty.server.HttpConnectionFactory;
+import org.eclipse.jetty.server.ProxyConnectionFactory;
+import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.handler.AbstractHandler;
+
+public class UnixSocketProxyServer
+{
+ public static void main (String... args) throws Exception
+ {
+ Server server = new Server();
+
+ HttpConnectionFactory http = new HttpConnectionFactory();
+ ProxyConnectionFactory proxy = new ProxyConnectionFactory(http.getProtocol());
+ UnixSocketConnector connector = new UnixSocketConnector(server,proxy,http);
+ server.addConnector(connector);
+
+ Path socket = Paths.get(connector.getUnixSocket());
+ if (Files.exists(socket))
+ Files.delete(socket);
+
+ server.setHandler(new AbstractHandler.ErrorDispatchHandler()
+ {
+ @Override
+ protected void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
+ throws IOException, ServletException
+ {
+ int l = 0;
+ if (request.getContentLength()!=0)
+ {
+ InputStream in = request.getInputStream();
+ byte[] buffer = new byte[4096];
+ int r = 0;
+ while (r>=0)
+ {
+ l += r;
+ r = in.read(buffer);
+ }
+ }
+ baseRequest.setHandled(true);
+ response.setStatus(200);
+ response.getWriter().write("Hello World "+new Date() + "\r\n");
+ response.getWriter().write("remote="+request.getRemoteAddr()+":"+request.getRemotePort()+"\r\n");
+ response.getWriter().write("local ="+request.getLocalAddr()+":"+request.getLocalPort()+"\r\n");
+ response.getWriter().write("read ="+l+"\r\n");
+ }
+ });
+
+ server.start();
+
+ while (true)
+ {
+ Thread.sleep(5000);
+ connector.dumpStdErr();
+ }
+
+ // server.join();
+ }
+}
diff --git a/jetty-unixsocket/src/test/java/org/eclipse/jetty/unixsocket/UnixSocketServer.java b/jetty-unixsocket/src/test/java/org/eclipse/jetty/unixsocket/UnixSocketServer.java
index 529a4bedae0..6eb7466de6e 100644
--- a/jetty-unixsocket/src/test/java/org/eclipse/jetty/unixsocket/UnixSocketServer.java
+++ b/jetty-unixsocket/src/test/java/org/eclipse/jetty/unixsocket/UnixSocketServer.java
@@ -19,6 +19,11 @@
package org.eclipse.jetty.unixsocket;
import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@@ -37,26 +42,50 @@ public class UnixSocketServer
Server server = new Server();
HttpConnectionFactory http = new HttpConnectionFactory();
- ProxyConnectionFactory proxy = new ProxyConnectionFactory(http.getProtocol());
- UnixSocketConnector connector = new UnixSocketConnector(server,proxy,http);
+ UnixSocketConnector connector = new UnixSocketConnector(server,http);
server.addConnector(connector);
+ Path socket = Paths.get(connector.getUnixSocket());
+ if (Files.exists(socket))
+ Files.delete(socket);
+
server.setHandler(new AbstractHandler.ErrorDispatchHandler()
{
@Override
protected void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
+ int l = 0;
+ if (request.getContentLength()!=0)
+ {
+ InputStream in = request.getInputStream();
+ byte[] buffer = new byte[4096];
+ int r = 0;
+ while (r>=0)
+ {
+ l += r;
+ r = in.read(buffer);
+ }
+ }
baseRequest.setHandled(true);
response.setStatus(200);
- response.getWriter().write("Hello World\r\n");
+ response.getWriter().write("Hello World "+new Date() + "\r\n");
response.getWriter().write("remote="+request.getRemoteAddr()+":"+request.getRemotePort()+"\r\n");
response.getWriter().write("local ="+request.getLocalAddr()+":"+request.getLocalPort()+"\r\n");
+ response.getWriter().write("read ="+l+"\r\n");
}
-
});
server.start();
- server.join();
+
+ while (true)
+ {
+ Thread.sleep(5000);
+ System.err.println();
+ System.err.println("==============================");
+ connector.dumpStdErr();
+ }
+
+ // server.join();
}
}
diff --git a/jetty-unixsocket/src/test/resources/jetty-logging.properties b/jetty-unixsocket/src/test/resources/jetty-logging.properties
index a825af95f35..3d27302e798 100644
--- a/jetty-unixsocket/src/test/resources/jetty-logging.properties
+++ b/jetty-unixsocket/src/test/resources/jetty-logging.properties
@@ -2,6 +2,6 @@ org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog
#org.eclipse.jetty.LEVEL=DEBUG
#org.eclipse.jetty.client.LEVEL=DEBUG
#org.eclipse.jetty.proxy.LEVEL=DEBUG
-org.eclipse.jetty.unixsocket.LEVEL=DEBUG
-org.eclipse.jetty.io.LEVEL=DEBUG
-org.eclipse.jetty.server.ProxyConnectionFactory.LEVEL=DEBUG
\ No newline at end of file
+#org.eclipse.jetty.unixsocket.LEVEL=DEBUG
+#org.eclipse.jetty.io.LEVEL=DEBUG
+#org.eclipse.jetty.server.ProxyConnectionFactory.LEVEL=DEBUG
\ No newline at end of file