aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Hawke <paul.hawke@gmail.com>2013-10-21 19:14:26 -0700
committerPaul Hawke <paul.hawke@gmail.com>2013-10-21 19:14:26 -0700
commit12e45c1e4150d8a4405e3e68b2b8d9993b7e7add (patch)
tree60edab4e57d9a769cea2a4bc3ddaeaebc7933013
parent067912cc1a78d2adf9ca8cf0f2b52ac7f4904fda (diff)
parent7e4e4ae652c755faea626f1e2538d495f96e648e (diff)
downloadnanohttpd-12e45c1e4150d8a4405e3e68b2b8d9993b7e7add.tar.gz
Merge pull request #72 from synapticloop/master
Issue #69 added remote ip to session headers
-rw-r--r--core/src/main/java/fi/iki/elonen/NanoHTTPD.java17
-rw-r--r--core/src/test/java/fi/iki/elonen/HttpServerTest.java5
-rw-r--r--core/src/test/java/fi/iki/elonen/HttpSessionHeadersTest.java33
3 files changed, 53 insertions, 2 deletions
diff --git a/core/src/main/java/fi/iki/elonen/NanoHTTPD.java b/core/src/main/java/fi/iki/elonen/NanoHTTPD.java
index b0516b9..5ce08e7 100644
--- a/core/src/main/java/fi/iki/elonen/NanoHTTPD.java
+++ b/core/src/main/java/fi/iki/elonen/NanoHTTPD.java
@@ -154,7 +154,7 @@ public abstract class NanoHTTPD {
try {
outputStream = finalAccept.getOutputStream();
TempFileManager tempFileManager = tempFileManagerFactory.create();
- HTTPSession session = new HTTPSession(tempFileManager, inputStream, outputStream);
+ HTTPSession session = new HTTPSession(tempFileManager, inputStream, outputStream, finalAccept.getInetAddress());
while (!finalAccept.isClosed()) {
session.execute();
}
@@ -767,6 +767,17 @@ public abstract class NanoHTTPD {
this.outputStream = outputStream;
}
+ public HTTPSession(TempFileManager tempFileManager, InputStream inputStream, OutputStream outputStream, InetAddress inetAddress) {
+ this.tempFileManager = tempFileManager;
+ this.inputStream = inputStream;
+ this.outputStream = outputStream;
+ String remoteIp = inetAddress.isLoopbackAddress() || inetAddress.isAnyLocalAddress() ? "127.0.0.1" : inetAddress.getHostAddress().toString();
+ headers = new HashMap<String, String>();
+
+ headers.put("remote-addr", remoteIp);
+ headers.put("http-client-ip", remoteIp);
+ }
+
@Override
public void execute() throws IOException {
try {
@@ -799,7 +810,9 @@ public abstract class NanoHTTPD {
}
parms = new HashMap<String, String>();
- headers = new HashMap<String, String>();
+ if(null == headers) {
+ headers = new HashMap<String, String>();
+ }
// Create a BufferedReader for parsing the header.
BufferedReader hin = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(buf, 0, rlen)));
diff --git a/core/src/test/java/fi/iki/elonen/HttpServerTest.java b/core/src/test/java/fi/iki/elonen/HttpServerTest.java
index 996f083..d9b99b3 100644
--- a/core/src/test/java/fi/iki/elonen/HttpServerTest.java
+++ b/core/src/test/java/fi/iki/elonen/HttpServerTest.java
@@ -5,6 +5,7 @@ import org.junit.Before;
import org.junit.Test;
import java.io.*;
+import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -110,6 +111,10 @@ public class HttpServerTest {
return new HTTPSession(tempFileManager, inputStream, outputStream);
}
+ public HTTPSession createSession(TempFileManager tempFileManager, InputStream inputStream, OutputStream outputStream, InetAddress inetAddress) {
+ return new HTTPSession(tempFileManager, inputStream, outputStream, inetAddress);
+ }
+
@Override
public Response serve(String uri, Method method, Map<String, String> header, Map<String, String> parms, Map<String, String> files) {
this.uri = uri;
diff --git a/core/src/test/java/fi/iki/elonen/HttpSessionHeadersTest.java b/core/src/test/java/fi/iki/elonen/HttpSessionHeadersTest.java
new file mode 100644
index 0000000..75a0a49
--- /dev/null
+++ b/core/src/test/java/fi/iki/elonen/HttpSessionHeadersTest.java
@@ -0,0 +1,33 @@
+package fi.iki.elonen;
+
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.net.InetAddress;
+
+import static org.junit.Assert.assertEquals;
+
+public class HttpSessionHeadersTest extends HttpServerTest {
+ private static final String DUMMY_REQUEST_CONTENT = "dummy request content";
+ private static final TestTempFileManager TEST_TEMP_FILE_MANAGER = new TestTempFileManager();
+
+ @Override
+ public void setUp() {
+ super.setUp();
+ }
+
+ @Test
+ public void testHeadersRemoteIp() throws Exception {
+ ByteArrayInputStream inputStream = new ByteArrayInputStream(DUMMY_REQUEST_CONTENT.getBytes());
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ String[] ipAddresses = { "127.0.0.1", "192.168.1.1", "192.30.252.129" };
+ for(String ipAddress : ipAddresses) {
+ InetAddress inetAddress = InetAddress.getByName(ipAddress);
+ NanoHTTPD.HTTPSession session = testServer.createSession(TEST_TEMP_FILE_MANAGER, inputStream, outputStream, inetAddress);
+ assertEquals(ipAddress, session.getHeaders().get("remote-addr"));
+ assertEquals(ipAddress, session.getHeaders().get("http-client-ip"));
+ }
+ }
+
+}