diff --git a/apps/i2ptunnel/java/build.xml b/apps/i2ptunnel/java/build.xml
index f50fadd3e..163de6696 100644
--- a/apps/i2ptunnel/java/build.xml
+++ b/apps/i2ptunnel/java/build.xml
@@ -141,6 +141,52 @@
splitindex="true"
windowtitle="I2PTunnel" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java
index 938a1ebcc..bafa0387c 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java
@@ -418,7 +418,7 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
}
}
- private static Map> readHeaders(InputStream in, StringBuilder command, String[] skipHeaders, I2PAppContext ctx) throws IOException {
+ protected static Map> readHeaders(InputStream in, StringBuilder command, String[] skipHeaders, I2PAppContext ctx) throws IOException {
HashMap> headers = new HashMap>();
StringBuilder buf = new StringBuilder(128);
diff --git a/apps/i2ptunnel/java/test/net/i2p/i2ptunnel/I2PTunnelHTTPServerTest.java b/apps/i2ptunnel/java/test/net/i2p/i2ptunnel/I2PTunnelHTTPServerTest.java
new file mode 100644
index 000000000..f35787e55
--- /dev/null
+++ b/apps/i2ptunnel/java/test/net/i2p/i2ptunnel/I2PTunnelHTTPServerTest.java
@@ -0,0 +1,45 @@
+package net.i2p.i2ptunnel;
+
+import java.io.BufferedWriter;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStreamWriter;
+import java.util.Map;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+public class I2PTunnelHTTPServerTest extends TestCase {
+
+ public InputStream fillInputStream(String headers) throws IOException {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(baos));
+ bw.write(headers);
+ bw.flush();
+ byte[] bytes = baos.toByteArray();
+ return new ByteArrayInputStream(bytes);
+ }
+
+ public void testSimpleHeader() throws IOException {
+ String headerString = "GET /blah HTTP/1.1\r\n";
+ headerString += "BLAH: something\r\n";
+ headerString += "\r\n";
+ InputStream in = fillInputStream(headerString);
+ Map> headers = I2PTunnelHTTPServer.readHeaders(in, new StringBuilder(128), new String[0], null);
+ assertEquals(headers.size(), 1); //One header
+ }
+
+ public void testDuplicateHeader() throws IOException {
+ String headerString = "GET /something HTTP/1.1\r\n";
+ headerString += "someHeader: blabla bla bloooo\r\n";
+ headerString += "someHeader: oh my, duplication!\r\n";
+ headerString += "\r\n";
+ InputStream in = fillInputStream(headerString);
+ Map> headers = I2PTunnelHTTPServer.readHeaders(in, new StringBuilder(128), new String[0], null);
+ assertEquals(headers.size(), 1);
+ assertEquals(headers.get("someHeader").size(), 2);
+ }
+
+}