chirino     2005/03/18 02:42:19

  Modified:    modules/core/src/java/org/openejb/server/httpd
                        HttpRequestImpl.java HttpServer.java
  Log:

  Implemented WSDL port address replacment.
  
  Revision  Changes    Path
  1.7       +41 -8     
openejb/modules/core/src/java/org/openejb/server/httpd/HttpRequestImpl.java
  
  Index: HttpRequestImpl.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/server/httpd/HttpRequestImpl.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- HttpRequestImpl.java      16 Mar 2005 02:24:15 -0000      1.6
  +++ HttpRequestImpl.java      18 Mar 2005 07:42:17 -0000      1.7
  @@ -44,15 +44,17 @@
    */
   package org.openejb.server.httpd;
   
  -import java.io.*;
  -import java.net.URL;
  -import java.net.URLDecoder;
  +import java.io.ByteArrayInputStream;
  +import java.io.DataInput;
  +import java.io.DataInputStream;
  +import java.io.IOException;
  +import java.io.InputStream;
   import java.net.URI;
   import java.net.URISyntaxException;
  +import java.net.URLDecoder;
   import java.util.HashMap;
  -import java.util.Iterator;
  -import java.util.StringTokenizer;
   import java.util.Map;
  +import java.util.StringTokenizer;
   
   /**
    * A class to take care of HTTP Requests.  It parses headers, content, form 
and url
  @@ -96,7 +98,12 @@
       private InputStream in;
       private int length;
       private String contentType;
  +    /** the address the request came in on */
  +    private final URI socketURI;
   
  +    public HttpRequestImpl(URI socketURI) {
  +        this.socketURI = socketURI;
  +    }
   
       /**
        * Gets a header based the header name passed in.
  @@ -262,7 +269,7 @@
           }
   
           try {
  -            uri = new URI(token);
  +            uri = new URI(socketURI.toString()+token);
           } catch (URISyntaxException e) {
               throw new IOException("Malformed URI :" + token + " Exception: " 
+ e.getMessage());
           }
  @@ -343,7 +350,33 @@
               value = value.trim();
               headers.put(name, value);
           }
  -
  +        
  +        // Update the URI to be what the client sees the the server as.
  +        String host = (String) headers.get("Host");
  +        if( host!=null ) {
  +            String hostName = uri.getHost();
  +            int port = uri.getPort();
  +            int idx = host.indexOf(":");
  +            if( idx >= 0 ) {
  +                hostName = host.substring(0, idx);
  +                try {
  +                    port = Integer.parseInt(host.substring(idx+1));
  +                }
  +                catch (NumberFormatException ignore) {
  +                }
  +            } else {
  +                hostName = host;
  +            }
  +            
  +            try {
  +                uri = new URI(uri.getScheme(),
  +                        uri.getUserInfo(), hostName, port,
  +                        uri.getPath(), uri.getQuery(),
  +                        uri.getFragment());                
  +            } catch (URISyntaxException ignore) {
  +            }            
  +        }
  +        
           //temp-debug-------------------------------------------
           //java.util.Iterator myKeys = headers.keySet().iterator();
           //String temp = null;
  
  
  
  1.6       +17 -18    
openejb/modules/core/src/java/org/openejb/server/httpd/HttpServer.java
  
  Index: HttpServer.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/server/httpd/HttpServer.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- HttpServer.java   16 Mar 2005 04:09:03 -0000      1.5
  +++ HttpServer.java   18 Mar 2005 07:42:17 -0000      1.6
  @@ -47,25 +47,21 @@
   import java.io.IOException;
   import java.io.InputStream;
   import java.io.OutputStream;
  -import java.io.PrintWriter;
   import java.net.Socket;
  -import java.net.URL;
   import java.net.URI;
   import java.util.Properties;
  +
   import javax.naming.Context;
  -import javax.naming.InitialContext;
   
  -import org.openejb.server.ServerService;
  -import org.openejb.server.ServiceException;
  -import org.openejb.server.SocketService;
  -import org.openejb.util.Logger;
  -import org.openejb.OpenEJBException;
  -import org.openejb.ContainerIndex;
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
  -import org.apache.geronimo.gbean.GBeanInfoBuilder;
  -import org.apache.geronimo.gbean.GBeanInfo;
   import org.apache.geronimo.gbean.GBeanLifecycle;
  +import org.openejb.ContainerIndex;
  +import org.openejb.OpenEJBException;
  +import org.openejb.server.ServerService;
  +import org.openejb.server.ServiceException;
  +import org.openejb.server.SocketService;
  +
   import sun.net.www.protocol.http.HttpURLConnection;
   
   /**
  @@ -98,9 +94,10 @@
            */
           OutputStream out = socket.getOutputStream();
   
  -
           try {
  -            processRequest(in, out);
  +            //TODO: if ssl change to https
  +            URI socketURI = new 
URI("http://"+socket.getLocalAddress().getHostName()+":"+socket.getLocalPort() 
);
  +            processRequest(socketURI, in, out);
           } catch (Throwable e) {
               log.error("Unexpected error", e);
           } finally {
  @@ -161,14 +158,15 @@
   
       /**
        * takes care of processing requests and creating the webadmin ejb's
  +     * @param socket 
        *
        * @param in  the input stream from the browser
        * @param out the output stream to the browser
        */
  -    private void processRequest(InputStream in, OutputStream out) {
  +    private void processRequest(URI socketURI, InputStream in, OutputStream 
out) {
           HttpResponseImpl response = null;
           try {
  -            response = process(in);
  +            response = process(socketURI, in);
   
           } catch (Throwable t) {
               response = HttpResponseImpl.createError(t.getMessage(), t);
  @@ -182,8 +180,9 @@
   
       }
   
  -    private HttpResponseImpl process(InputStream in) throws OpenEJBException 
{
  -        HttpRequestImpl req = new HttpRequestImpl();
  +    private HttpResponseImpl process(URI socketURI, InputStream in) throws 
OpenEJBException {
  +        
  +        HttpRequestImpl req = new HttpRequestImpl(socketURI);
           HttpResponseImpl res = new HttpResponseImpl();
   
           try {
  
  
  

Reply via email to