diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/HTTPResponseOutputStream.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/HTTPResponseOutputStream.java
index abc13194900df4f299c6ef7ff832cc7cb564c324..5198e23c1e05057b928f0ab75117d2e30237f31a 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/HTTPResponseOutputStream.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/HTTPResponseOutputStream.java
@@ -123,13 +123,17 @@ class HTTPResponseOutputStream extends FilterOutputStream {
                 } else {
                     for (int j = lastEnd+1; j < i; j++) {
                         if (_headerBuffer.getData()[j] == ':') {
-                            String key = new String(_headerBuffer.getData(), lastEnd+1, j-(lastEnd+1));
-                            String val = new String(_headerBuffer.getData(), j+2, i-(j+2));
+                            int keyLen = j-(lastEnd+1);
+                            int valLen = i-(j+2);
+                            if ( (keyLen <= 0) || (valLen <= 0) )
+                                throw new IOException("Invalid header @ " + j);
+                            String key = new String(_headerBuffer.getData(), lastEnd+1, keyLen);
+                            String val = new String(_headerBuffer.getData(), j+2, valLen);
                             
-                            if ("Connection".equals(key)) {
+                            if ("Connection".equalsIgnoreCase(key)) {
                                 out.write("Connection: close\n".getBytes());
                                 connectionSent = true;
-                            } else if ("Proxy-Connection".equals(key)) {
+                            } else if ("Proxy-Connection".equalsIgnoreCase(key)) {
                                 out.write("Proxy-Connection: close\n".getBytes());
                                 proxyConnectionSent = true;
                             } else {
@@ -185,6 +189,17 @@ class HTTPResponseOutputStream extends FilterOutputStream {
         String invalid2 = "HTTP/1.1 200 OK";
         String invalid3 = "HTTP 200 OK\r\n";
         String invalid4 = "HTTP 200 OK\r";
+        String invalid5 = "HTTP/1.1 200 OK\r\n" +
+                          "I am broken, and I smell\r\n" +
+                          "\r\n";
+        String invalid6 = "HTTP/1.1 200 OK\r\n" +
+                          ":I am broken, and I smell\r\n" +
+                          "\r\n";
+        String invalid7 = "HTTP/1.1 200 OK\n" +
+                          "I am broken, and I smell:\n" +
+                          ":asdf\n" +
+                          ":\n" +
+                          "\n";
         String large    = "HTTP/1.1 200 OK\n" +
                           "Last-modified: Tue, 25 Nov 2003 12:05:38 GMT\n" +
                           "Expires: Tue, 25 Nov 2003 12:05:38 GMT\n" +
@@ -192,20 +207,23 @@ class HTTPResponseOutputStream extends FilterOutputStream {
                           "\n" +
                           "hi ho, this is the body";
         /* */
-        test("Simple", simple);
-        test("Filtered", filtered);
-        test("Filtered windows", winfilter);
-        test("Minimal", minimal);
-        test("Windows", winmin);
-        test("Large", large);
-        test("Invalid (short headers)", invalid1);
-        test("Invalid (no headers)", invalid2);
-        test("Invalid (windows with short headers)", invalid3);
-        test("Invalid (windows no headers)", invalid4);
+        test("Simple", simple, true);
+        test("Filtered", filtered, true);
+        test("Filtered windows", winfilter, true);
+        test("Minimal", minimal, true);
+        test("Windows", winmin, true);
+        test("Large", large, true);
+        test("Invalid (short headers)", invalid1, true);
+        test("Invalid (no headers)", invalid2, true);
+        test("Invalid (windows with short headers)", invalid3, true);
+        test("Invalid (windows no headers)", invalid4, true);
+        test("Invalid (bad headers)", invalid5, true);
+        test("Invalid (bad headers2)", invalid6, false);
+        test("Invalid (bad headers3)", invalid7, false);
         /* */
     }
     
-    private static void test(String name, String orig) {
+    private static void test(String name, String orig, boolean shouldPass) {
         System.out.println("====Testing: " + name + "\n" + orig + "\n------------");
         try {
             ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
@@ -215,7 +233,10 @@ class HTTPResponseOutputStream extends FilterOutputStream {
             String received = new String(baos.toByteArray());
             System.out.println(received);
         } catch (Exception e) {
-            e.printStackTrace();
+            if (shouldPass)
+                e.printStackTrace();
+            else
+                System.out.println("Properly fails with " + e.getMessage());
         }
     }
 }
\ No newline at end of file
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java
index 6f74176ae8e4e264a8491052adf1e3056190876c..2d22b54bcd42ca4035f96c2aed1e01eb01cc3f0b 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java
@@ -194,9 +194,10 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
                 if (_log.shouldLog(Log.DEBUG))
                     _log.debug(getPrefix(requestId) + "Line=[" + line + "]");
                 
-                if (line.startsWith("Connection: ") || 
-                    line.startsWith("Keep-Alive: ") || 
-                    line.startsWith("Proxy-Connection: "))
+                String lowercaseLine = line.toLowerCase();
+                if (lowercaseLine.startsWith("connection: ") || 
+                    lowercaseLine.startsWith("keep-alive: ") || 
+                    lowercaseLine.startsWith("proxy-connection: "))
                     continue;
                 
                 if (method == null) { // first line (GET /base64/realaddr)
@@ -335,29 +336,29 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable
                     }
                     
                 } else {
-                    if (line.startsWith("Host: ") && !usingWWWProxy) {
+                    if (lowercaseLine.startsWith("host: ") && !usingWWWProxy) {
                         line = "Host: " + host;
                         if (_log.shouldLog(Log.INFO)) 
                             _log.info(getPrefix(requestId) + "Setting host = " + host);
-                    } else if (line.startsWith("User-Agent: ")) {
+                    } else if (lowercaseLine.startsWith("user-agent: ")) {
                         // always stripped, added back at the end
                         line = null;
                         continue;
-                    } else if (line.startsWith("Accept")) {
+                    } else if (lowercaseLine.startsWith("accept")) {
                         // strip the accept-blah headers, as they vary dramatically from
                         // browser to browser
                         line = null;
                         continue;
-                    } else if (line.startsWith("Referer: ")) {
+                    } else if (lowercaseLine.startsWith("referer: ")) {
                         // Shouldn't we be more specific, like accepting in-site referers ?
                         //line = "Referer: i2p";
                         line = null;
                         continue; // completely strip the line
-                    } else if (line.startsWith("Via: ")) {
+                    } else if (lowercaseLine.startsWith("via: ")) {
                         //line = "Via: i2p";
                         line = null;
                         continue; // completely strip the line
-                    } else if (line.startsWith("From: ")) {
+                    } else if (lowercaseLine.startsWith("from: ")) {
                         //line = "From: i2p";
                         line = null;
                         continue; // completely strip the line
diff --git a/history.txt b/history.txt
index d60b90408e8fa11f5e2145f37fd50cb5322c3262..94a385ec46d469959536d245d40589515cd8c7b2 100644
--- a/history.txt
+++ b/history.txt
@@ -1,4 +1,8 @@
-$Id: history.txt,v 1.170 2005/03/17 00:29:55 jrandom Exp $
+$Id: history.txt,v 1.171 2005/03/17 17:14:31 jrandom Exp $
+
+2005-03-18  jrandom
+    * Eepproxy Fix for corrupted HTTP headers (thanks nickster!)
+    * Fixed case sensitivity issues on the HTTP headers (thanks duck!)
 
 2005-03-17  jrandom
     * Update the old speed calculator and associated profile data points to 
diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java
index 5106f0782f57d739a7de3de88c9d5712419e6c7e..785810ec30d5342dc5c2aaadd4893e4cea9076b5 100644
--- a/router/java/src/net/i2p/router/RouterVersion.java
+++ b/router/java/src/net/i2p/router/RouterVersion.java
@@ -15,9 +15,9 @@ import net.i2p.CoreVersion;
  *
  */
 public class RouterVersion {
-    public final static String ID = "$Revision: 1.164 $ $Date: 2005/03/17 00:29:55 $";
+    public final static String ID = "$Revision: 1.165 $ $Date: 2005/03/17 17:12:53 $";
     public final static String VERSION = "0.5.0.2";
-    public final static long BUILD = 5;
+    public final static long BUILD = 6;
     public static void main(String args[]) {
         System.out.println("I2P Router version: " + VERSION);
         System.out.println("Router ID: " + RouterVersion.ID);