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 {