You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bi...@apache.org on 2003/07/12 10:35:39 UTC

cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/modules/generators StaticInterceptor.java

billbarker    2003/07/12 01:35:39

  Modified:    src/share/org/apache/tomcat/modules/generators
                        StaticInterceptor.java
  Log:
  Add support to the "Default Servlet" for the HTTP/1.1 methods "OPTIONS" and "TRACE"
  
  Fix for Bug #21454 (which was technically INVALID, until the CoyoteConnetor allowed for HTTP/1.1 requests).
  
  Revision  Changes    Path
  1.27      +33 -1     jakarta-tomcat/src/share/org/apache/tomcat/modules/generators/StaticInterceptor.java
  
  Index: StaticInterceptor.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/modules/generators/StaticInterceptor.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- StaticInterceptor.java	26 Jul 2002 04:40:15 -0000	1.26
  +++ StaticInterceptor.java	12 Jul 2003 08:35:39 -0000	1.27
  @@ -174,6 +174,13 @@
   	String pathInfo=req.servletPath().toString();
   	if( pathInfo==null ) pathInfo="";
   
  +	if( debug > 0 ) log("Method: " + req.method());
  +	if(req.method().equalsIgnoreCase("OPTIONS") ||
  +           req.method().equalsIgnoreCase("TRACE")) {
  +	    req.setHandler(  ctx.getServletByName( "tomcat.fileHandler"));
  +	    return 0;
  +	}
  +	    
   	String absPath=FileUtil.safePath( ctx.getAbsolutePath(),
   					  pathInfo);
   
  @@ -409,12 +416,18 @@
       public void doService(Request req, Response res)
   	throws Exception
       {
  +	if(req.method().equalsIgnoreCase("OPTIONS")) {
  +	    doOptions(req, res);
  +	    return;
  +	} else if(req.method().equalsIgnoreCase("TRACE")) {
  +	    doTrace(req, res);
  +	    return;
  +	}
   	// if we are in include, with req==original request
   	// - just use the current sub-request
   	Request subReq=req;
   	if(req.getChild()!=null)
   	    subReq=req.getChild();
  -
   	Context ctx=subReq.getContext();
   	// Use "javax.servlet.include.servlet_path" for path if defined.
   	// ErrorHandler places the path here when invoking an error page.
  @@ -491,6 +504,25 @@
   	    MimeHeaders headers=res.getMimeHeaders();
   	    headers.setValue( name ).setTime( value );
   	}
  +    }
  +    void doOptions(Request req, Response res)
  +	    throws IOException {
  +	res.addHeader("Allow","HEAD, GET, POST, OPTIONS, TRACE");
  +    }
  +    void doTrace(Request req, Response res)
  +	throws IOException {
  +	String CRLF = "\r\n";
  +	res.setContentType("message/http");
  +	StringBuffer resp = new StringBuffer();
  +	Enumeration headers = req.getHeaderNames();
  +	while( headers.hasMoreElements() ) {
  +	    String hName = (String)headers.nextElement();
  +	    String hValue = (String)req.getHeader(hName);
  +	    resp.append(CRLF).append(hName).append(": ").append(hValue);
  +	}
  +	res.setContentLength(resp.length());
  +	Writer out = res.getBuffer();
  +	out.write(resp.toString());
       }
   
       /** All path checks that were part of DefaultServlet
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org