home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1999 November / PCONLINE_11_99.ISO / filesbbs / OS2 / APCHSSL2.ZIP / OS2HTTPD / jserv / com / bitmechanic / gsp / GspRequest.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-02-03  |  9.6 KB  |  462 lines

  1. package com.bitmechanic.gsp;
  2.  
  3. import com.bitmechanic.util.EnumerationStack;
  4. import java.io.BufferedOutputStream;
  5. import java.io.BufferedReader;
  6. import java.io.File;
  7. import java.io.FileOutputStream;
  8. import java.io.FilterOutputStream;
  9. import java.io.IOException;
  10. import java.io.InputStream;
  11. import java.util.Enumeration;
  12. import java.util.Hashtable;
  13. import java.util.Vector;
  14. import javax.servlet.ServletContext;
  15. import javax.servlet.ServletInputStream;
  16. import javax.servlet.http.Cookie;
  17. import javax.servlet.http.HttpServletRequest;
  18. import javax.servlet.http.HttpSession;
  19.  
  20. public class GspRequest implements HttpServletRequest {
  21.    private HttpServletRequest request;
  22.    private GspServlet servlet;
  23.    private Hashtable parameters;
  24.    private Form form;
  25.    private String docRoot;
  26.    private String relativePath;
  27.    private String username;
  28.    private Application app;
  29.    private Vector uploadedFiles;
  30.    private long req_time;
  31.    private static final int SEEK_NAME = 1;
  32.    private static final int READ_NAME = 2;
  33.    private static final int SEEK_VALUE = 3;
  34.    private static final int READ_VALUE = 4;
  35.    private static final int READ_FILE = 5;
  36.    private static final int SEEK_BOUNDARY = 6;
  37.    private static final int READ_BOUNDARY = 7;
  38.  
  39.    public GspRequest(GspServlet var1, HttpServletRequest var2, Application var3, String var4, String var5, String var6, long var7) throws IOException {
  40.       this.request = var2;
  41.       this.servlet = var1;
  42.       this.docRoot = var4;
  43.       this.relativePath = var5;
  44.       this.username = var6;
  45.       this.app = var3;
  46.       this.req_time = var7;
  47.       String var9 = this.request.getHeader("content-type");
  48.       if (var9 != null && var9.startsWith("multipart/form-data")) {
  49.          Hashtable var10 = this.parseFileUpload(var9);
  50.          this.setOverrideParameters(var10);
  51.          this.form = new Form(this, var10);
  52.       } else {
  53.          this.form = new Form(this);
  54.       }
  55.    }
  56.  
  57.    public Form getForm() {
  58.       return this.form;
  59.    }
  60.  
  61.    public String getRelativePath() {
  62.       return this.relativePath;
  63.    }
  64.  
  65.    public String getDocumentRoot() {
  66.       return this.docRoot;
  67.    }
  68.  
  69.    public long getRequestTime() {
  70.       return this.req_time;
  71.    }
  72.  
  73.    public String getUsername() {
  74.       return this.username;
  75.    }
  76.  
  77.    public void setOverrideParameters(Hashtable var1) {
  78.       this.parameters = var1;
  79.    }
  80.  
  81.    public Hashtable getOverrideParameters() {
  82.       return this.parameters;
  83.    }
  84.  
  85.    public ServletContext getServletContext() {
  86.       return this.servlet.getServletConfig().getServletContext();
  87.    }
  88.  
  89.    public Object getAttribute(String var1) {
  90.       return this.request.getAttribute(var1);
  91.    }
  92.  
  93.    public int getContentLength() {
  94.       return this.request.getContentLength();
  95.    }
  96.  
  97.    public String getContentType() {
  98.       return this.request.getContentType();
  99.    }
  100.  
  101.    public ServletInputStream getInputStream() throws IOException {
  102.       return this.request.getInputStream();
  103.    }
  104.  
  105.    /** @deprecated */
  106.    public String getParameter(String var1) {
  107.       if (this.parameters != null && this.parameters.containsKey(var1)) {
  108.          Object var2 = this.parameters.get(var1);
  109.          if (var2 == null) {
  110.             return null;
  111.          } else if (var2 instanceof String) {
  112.             return (String)var2;
  113.          } else {
  114.             return var2 instanceof String[] && ((String[])var2).length > 0 ? ((String[])var2)[0] : null;
  115.          }
  116.       } else {
  117.          return this.request.getParameter(var1);
  118.       }
  119.    }
  120.  
  121.    public Enumeration getParameterNames() {
  122.       if (this.parameters != null) {
  123.          EnumerationStack var1 = new EnumerationStack(this.parameters.keys());
  124.          var1.push(this.request.getParameterNames());
  125.          return var1;
  126.       } else {
  127.          return this.request.getParameterNames();
  128.       }
  129.    }
  130.  
  131.    public String getParameterValue(String var1) {
  132.       if (this.parameters != null && this.parameters.containsKey(var1)) {
  133.          Object var3 = this.parameters.get(var1);
  134.          if (var3 == null) {
  135.             return null;
  136.          } else if (var3 instanceof String) {
  137.             return (String)var3;
  138.          } else {
  139.             return var3 instanceof String[] && ((String[])var3).length > 0 ? ((String[])var3)[0] : null;
  140.          }
  141.       } else {
  142.          String[] var2 = this.request.getParameterValues(var1);
  143.          return var2 != null && var2.length >= 1 ? var2[0] : null;
  144.       }
  145.    }
  146.  
  147.    public String[] getParameterValues(String var1) {
  148.       if (this.parameters != null && this.parameters.containsKey(var1)) {
  149.          Object var2 = this.parameters.get(var1);
  150.          if (var2 == null) {
  151.             return null;
  152.          } else if (var2 instanceof String) {
  153.             String[] var3 = new String[]{(String)var2};
  154.             return var3;
  155.          } else {
  156.             return var2 instanceof String[] && ((String[])var2).length > 0 ? (String[])var2 : null;
  157.          }
  158.       } else {
  159.          return this.request.getParameterValues(var1);
  160.       }
  161.    }
  162.  
  163.    public String getProtocol() {
  164.       return this.request.getProtocol();
  165.    }
  166.  
  167.    public BufferedReader getReader() throws IOException {
  168.       return this.request.getReader();
  169.    }
  170.  
  171.    public String getRealPath(String var1) {
  172.       return this.request.getRealPath(var1);
  173.    }
  174.  
  175.    public String getRemoteAddr() {
  176.       return this.request.getRemoteAddr();
  177.    }
  178.  
  179.    public String getRemoteHost() {
  180.       return this.request.getRemoteHost();
  181.    }
  182.  
  183.    public String getScheme() {
  184.       return this.request.getScheme();
  185.    }
  186.  
  187.    public String getServerName() {
  188.       return this.request.getServerName();
  189.    }
  190.  
  191.    public int getServerPort() {
  192.       return this.request.getServerPort();
  193.    }
  194.  
  195.    public String getCharacterEncoding() {
  196.       return this.request.getCharacterEncoding();
  197.    }
  198.  
  199.    public String getAuthType() {
  200.       return this.request.getAuthType();
  201.    }
  202.  
  203.    public Cookie[] getCookies() {
  204.       return this.request.getCookies();
  205.    }
  206.  
  207.    public long getDateHeader(String var1) {
  208.       return this.request.getDateHeader(var1);
  209.    }
  210.  
  211.    public String getHeader(String var1) {
  212.       return this.request.getHeader(var1);
  213.    }
  214.  
  215.    public Enumeration getHeaderNames() {
  216.       return this.request.getHeaderNames();
  217.    }
  218.  
  219.    public int getIntHeader(String var1) {
  220.       return this.request.getIntHeader(var1);
  221.    }
  222.  
  223.    public String getMethod() {
  224.       return this.request.getMethod();
  225.    }
  226.  
  227.    public String getPathInfo() {
  228.       return this.request.getPathInfo();
  229.    }
  230.  
  231.    public String getPathTranslated() {
  232.       return this.request.getPathTranslated();
  233.    }
  234.  
  235.    public String getQueryString() {
  236.       return this.request.getQueryString();
  237.    }
  238.  
  239.    public String getRemoteUser() {
  240.       return this.request.getRemoteUser();
  241.    }
  242.  
  243.    public String getRequestedSessionId() {
  244.       return this.request.getRequestedSessionId();
  245.    }
  246.  
  247.    public String getRequestURI() {
  248.       return this.request.getRequestURI();
  249.    }
  250.  
  251.    public String getServletPath() {
  252.       return this.request.getServletPath();
  253.    }
  254.  
  255.    public HttpSession getSession(boolean var1) {
  256.       HttpSession var2 = this.request.getSession(var1);
  257.       if (var2 != null) {
  258.          this.app.registerSession(var2, this);
  259.       }
  260.  
  261.       return var2;
  262.    }
  263.  
  264.    public boolean isRequestedSessionIdFromCookie() {
  265.       return this.request.isRequestedSessionIdFromCookie();
  266.    }
  267.  
  268.    public boolean isRequestedSessionIdFromUrl() {
  269.       return this.request.isRequestedSessionIdFromUrl();
  270.    }
  271.  
  272.    public boolean isRequestedSessionIdValid() {
  273.       return this.request.isRequestedSessionIdValid();
  274.    }
  275.  
  276.    public Vector getUploadedFiles() {
  277.       return this.uploadedFiles;
  278.    }
  279.  
  280.    private Hashtable parseFileUpload(String var1) throws IOException {
  281.       Hashtable var2 = new Hashtable();
  282.       int var3 = var1.indexOf("boundary=") + 9;
  283.       if (var3 == -1) {
  284.          return var2;
  285.       } else {
  286.          String var4 = var1.substring(var3);
  287.          String var5 = "\r\n" + var4;
  288.          String var6 = "\r\n--" + var4;
  289.          byte var7 = 6;
  290.          byte var8 = 6;
  291.          byte[] var9 = new byte[var6.length() + 1];
  292.          ServletInputStream var10 = this.request.getInputStream();
  293.          int var11 = 0;
  294.          long var12 = 0L;
  295.          int var14 = this.getContentLength();
  296.          String var15 = null;
  297.          StringBuffer var16 = new StringBuffer();
  298.          String var17 = null;
  299.          String var18 = null;
  300.          String var19 = this.servlet.getUploadDir();
  301.          int var20 = 0;
  302.          int var21 = 0;
  303.          int var22 = 0;
  304.          long var23 = this.servlet.getMaxFileSize();
  305.          BufferedOutputStream var25 = null;
  306.  
  307.          while(var12 < (long)var14) {
  308.             var11 = ((InputStream)var10).read();
  309.             ++var12;
  310.             switch (var7) {
  311.                case 1:
  312.                   String var26 = this.readLine(var10, var12, var14);
  313.                   var12 += (long)var26.length();
  314.                   int var27 = var26.indexOf("name=\"");
  315.                   int var28 = -1;
  316.                   if (var27 != -1) {
  317.                      var28 = var26.indexOf(34, var27 + 6);
  318.                   }
  319.  
  320.                   if (var27 != -1 && var28 != -1) {
  321.                      var15 = var26.substring(var27 + 6, var28);
  322.                      if (var26.indexOf("filename=\"") != -1) {
  323.                         int var29 = var26.indexOf("filename=\"") + 10;
  324.                         int var30 = var26.indexOf("\"", var29);
  325.                         if (var30 != -1) {
  326.                            var18 = var26.substring(var29, var30);
  327.                         } else {
  328.                            var18 = "";
  329.                         }
  330.  
  331.                         var7 = 5;
  332.                         var26 = this.readLine(var10, var12, var14);
  333.                         var12 += (long)var26.length();
  334.                         ++var21;
  335.                         var17 = var19 + File.separator + var4.substring(var4.length() - 5) + var21 + ".tmp";
  336.                         var20 = 0;
  337.                         var25 = new BufferedOutputStream(new FileOutputStream(var17));
  338.                         if (this.uploadedFiles == null) {
  339.                            this.uploadedFiles = new Vector();
  340.                         }
  341.  
  342.                         this.uploadedFiles.addElement(var17);
  343.                      } else {
  344.                         var7 = 4;
  345.                         var16.setLength(0);
  346.                      }
  347.  
  348.                      var12 += 2L;
  349.                      ((InputStream)var10).skip(2L);
  350.                   }
  351.                case 2:
  352.                case 3:
  353.                default:
  354.                   break;
  355.                case 4:
  356.                   if (var11 == 13) {
  357.                      var8 = var7;
  358.                      var7 = 7;
  359.                      var22 = 1;
  360.                      var9[0] = (byte)var11;
  361.                   } else {
  362.                      var16.append((char)var11);
  363.                   }
  364.                   break;
  365.                case 5:
  366.                   if (var11 == 13) {
  367.                      var8 = var7;
  368.                      var7 = 7;
  369.                      var22 = 1;
  370.                      var9[0] = (byte)var11;
  371.                   } else {
  372.                      ++var20;
  373.                      if ((long)var20 < var23) {
  374.                         var25.write(var11);
  375.                      } else {
  376.                         var7 = 6;
  377.                         this.servlet.log("GspServlet: attempt to upload file exceeding max allowable size.  max size = " + var23 + " -- CONTENT_LENGTH = " + var14);
  378.                         ((FilterOutputStream)var25).close();
  379.                      }
  380.                   }
  381.                   break;
  382.                case 6:
  383.                   if (var11 == 45) {
  384.                      var8 = var7;
  385.                      var7 = 7;
  386.                      var22 = 3;
  387.                      var9[0] = (byte)var11;
  388.                   }
  389.                   break;
  390.                case 7:
  391.                   if (var22 < var6.length() && var11 == var6.charAt(var22) || var22 < var5.length() && var11 == var5.charAt(var22)) {
  392.                      if (var11 == var6.charAt(var22) && var6.length() == var22 + 1 || var5.length() == var22 + 1 && var11 == var5.charAt(var22)) {
  393.                         if (var8 == 4) {
  394.                            this.addVal(var2, var15.toString(), var16.toString());
  395.                         } else if (var8 == 5) {
  396.                            ((FilterOutputStream)var25).close();
  397.                            this.addVal(var2, var15.toString(), var17);
  398.                            this.addVal(var2, var15 + "-client", var18);
  399.                         }
  400.  
  401.                         ((InputStream)var10).skip(2L);
  402.                         var12 += 2L;
  403.                         var7 = 1;
  404.                      } else {
  405.                         var9[var22] = (byte)var11;
  406.                         ++var22;
  407.                      }
  408.                   } else {
  409.                      var9[var22] = (byte)var11;
  410.                      ++var22;
  411.                      if (var8 == 4) {
  412.                         var16.append(new String(var9, 0, var22));
  413.                      } else {
  414.                         var25.write(var9, 0, var22);
  415.                      }
  416.  
  417.                      var22 = 0;
  418.                      var7 = var8;
  419.                   }
  420.             }
  421.          }
  422.  
  423.          return var2;
  424.       }
  425.    }
  426.  
  427.    private String readLine(InputStream var1, long var2, int var4) throws IOException {
  428.       if (var2 >= (long)var4) {
  429.          return "";
  430.       } else {
  431.          StringBuffer var5 = new StringBuffer(128);
  432.          int var6 = var1.read();
  433.          var5.append((char)var6);
  434.          int var7 = 0;
  435.  
  436.          while(var2 < (long)var4 && var6 != 10 && var7 != 13) {
  437.             var7 = var6;
  438.             var6 = var1.read();
  439.             var5.append((char)var6);
  440.          }
  441.  
  442.          return var5.toString();
  443.       }
  444.    }
  445.  
  446.    private void addVal(Hashtable var1, String var2, String var3) {
  447.       String[] var4 = (String[])var1.get(var2);
  448.       if (var4 == null) {
  449.          var1.put(var2, new String[]{var3});
  450.       } else {
  451.          String[] var5 = new String[var4.length + 1];
  452.  
  453.          for(int var6 = 0; var6 < var4.length; ++var6) {
  454.             var5[var6] = var4[var6];
  455.          }
  456.  
  457.          var5[var4.length] = var3;
  458.          var1.put(var2, var5);
  459.       }
  460.    }
  461. }
  462.