1.1 restoration
[mir.git] / source / mir / session / HTTPAdapters.java
index 835ed2d..08c8221 100755 (executable)
  */
 package mir.session;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.Vector;
+import java.util.*;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
-import org.apache.commons.fileupload.FileItem;
-
 import mir.util.HTTPParsedRequest;
+import org.apache.commons.fileupload.FileItem;
 
 public class HTTPAdapters {
   public static class HTTPRequestAdapter implements Request {
     private HttpServletRequest request;
+    private String cachedHostName = null;
 
     public HTTPRequestAdapter(HttpServletRequest aRequest) {
       request = aRequest;
@@ -51,6 +51,22 @@ public class HTTPAdapters {
       if (aHeaderName.equals("ip"))
         return request.getRemoteAddr();
 
+      if (aHeaderName.equals("hostname")) {
+        if (aHeaderName.equals("hostname")) {
+          if (cachedHostName==null) {
+            try {
+              cachedHostName = InetAddress.getByName(request.getRemoteAddr()).getHostName();
+            }
+            catch (UnknownHostException e) {
+              cachedHostName = request.getRemoteAddr();
+            }
+          }
+
+          return cachedHostName;
+        }
+
+      }
+
       return request.getHeader(aHeaderName);
     };
 
@@ -58,8 +74,22 @@ public class HTTPAdapters {
       return request.getParameter(aName);
     };
 
+    public List getPrefixedParameterNames(String aPrefix) {
+      List result = new ArrayList();
+
+      Enumeration enumeration = request.getParameterNames();
+      while (enumeration.hasMoreElements()) {
+        String name = (String) enumeration.nextElement();
+        if (name.startsWith(aPrefix)) {
+          result.add(name);
+        }
+      }
+
+      return result;
+    };
+
     public List getUploadedFiles() {
-      return new Vector();
+      return Collections.EMPTY_LIST;
     };
 
     public List getParameters(String aName) {
@@ -73,6 +103,7 @@ public class HTTPAdapters {
 
   public static class HTTPParsedRequestAdapter implements Request {
     private HTTPParsedRequest request;
+    private String cachedHostName = null;
 
     public HTTPParsedRequestAdapter(HTTPParsedRequest aRequest) {
       request = aRequest;
@@ -82,8 +113,21 @@ public class HTTPAdapters {
       if (aHeaderName.equals("ip"))
         return request.getRequest().getRemoteAddr();
 
+      if (aHeaderName.equals("hostname")) {
+        if (cachedHostName==null) {
+          try {
+            cachedHostName = InetAddress.getByName(request.getRequest().getRemoteAddr()).getHostName();
+          }
+          catch (UnknownHostException e) {
+            cachedHostName = request.getRequest().getRemoteAddr();
+          }
+        }
+
+        return cachedHostName;
+      }
+
       return request.getHeader(aHeaderName);
-    };
+    }
 
     public String getParameter(String aName) {
       return request.getParameter(aName);
@@ -93,8 +137,23 @@ public class HTTPAdapters {
       return request.getParameterList(aName);
     };
 
+    public List getPrefixedParameterNames(String aPrefix) {
+      List result = new ArrayList();
+
+      Iterator i = request.getParameterNames().iterator();
+
+      while (i.hasNext()) {
+        String name = (String) i.next();
+        if (name.startsWith(aPrefix)) {
+          result.add(name);
+        }
+      }
+
+      return result;
+    };
+
     public List getUploadedFiles() {
-      List result = new Vector();
+      List result = new ArrayList();
       List files = request.getFiles();
 
       for (int i=0; i<files.size(); i++) {
@@ -124,10 +183,21 @@ public class HTTPAdapters {
     }
 
     public void setAttribute(String aName, Object aNewValue) {
-      if (aNewValue==null)
-        deleteAttribute(aName);
-      else
-        session.setAttribute(aName, aNewValue);
+      if (aName.equals("$httpsessiontimeout")) {
+        if (aNewValue instanceof Number) {
+          try {
+            session.setMaxInactiveInterval( ( (Number) aNewValue).intValue());
+          }
+          catch (Throwable t) {
+          }
+        }
+      }
+      else {
+        if (aNewValue == null)
+          deleteAttribute(aName);
+        else
+          session.setAttribute(aName, aNewValue);
+      }
     }
 
     public void terminate() {