001: /*
002: * Request.java
003: *
004: *
005: * Copyright (c) 2003 Rimfaxe ApS (www.rimfaxe.com).
006: * All rights reserved.
007: *
008: * This package is written by Lars Andersen <lars@rimfaxe.com>
009: * and licensed by Rimfaxe ApS.
010: *
011: * Redistribution and use in source and binary forms, with or without
012: * modification, are permitted provided that the following conditions
013: * are met:
014: *
015: * 1. Redistributions of source code must retain the above copyright
016: * notice, this list of conditions and the following disclaimer.
017: *
018: * 2. Redistributions in binary form must reproduce the above copyright
019: * notice, this list of conditions and the following disclaimer in
020: * the documentation and/or other materials provided with the
021: * distribution.
022: *
023: * 3. The end-user documentation included with the redistribution, if
024: * any, must include the following acknowlegement:
025: * "This product includes software developed by Rimfaxe ApS
026: (www.rimfaxe.com)"
027: * Alternately, this acknowlegement may appear in the software itself,
028: * if and wherever such third-party acknowlegements normally appear.
029: *
030: * 4. The names "Rimfaxe", "Rimfaxe Software", "Lars Andersen" and
031: * "Rimfaxe WebServer" must not be used to endorse or promote products
032: * derived from this software without prior written permission. For written
033: * permission, please contact info@rimfaxe.com
034: *
035: * 5. Products derived from this software may not be called "Rimfaxe"
036: * nor may "Rimfaxe" appear in their names without prior written
037: * permission of the Rimfaxe ApS.
038: *
039: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
040: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
041: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
042: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
043: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
044: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
045: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
046: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
047: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
048: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
049: * SUCH DAMAGE.
050: *
051: */
052:
053: package com.rimfaxe.http;
054:
055: import java.util.*;
056:
057: /**
058: *
059: * @author lars
060: */
061: public class Request {
062: Hashtable headers = new Hashtable();
063:
064: String uri = "/";
065: String querystring = "";
066: String body;
067:
068: String method = "POST";
069:
070: com.rimfaxe.balancer.VirtualHost virtualhost;
071: com.rimfaxe.balancer.RealServer realhost;
072:
073: String host = "";
074: Vector cookielist = new Vector();
075:
076: /** Creates a new instance of Request */
077: public Request() {
078: }
079:
080: public void setRequestBody(String body) {
081: this .body = body;
082: }
083:
084: public void setQuerystring(String query) {
085: this .querystring = query;
086: }
087:
088: public void setURI(String uri) {
089: this .uri = uri;
090: }
091:
092: public void setMethod(String m) {
093: this .method = m;
094: }
095:
096: public void setVirtualHost(com.rimfaxe.balancer.VirtualHost host) {
097: this .virtualhost = host;
098: }
099:
100: public void setRealHost(com.rimfaxe.balancer.RealServer host) {
101: this .realhost = host;
102: }
103:
104: public void addHeader(String header, String val) {
105: //com.rimfaxe.util.Log.log("Request Header ["+header+"] ["+val+"]");
106: if (header.equalsIgnoreCase("cookie")) {
107: com.rimfaxe.util.RimfaxeStringTokenizer tkz = new com.rimfaxe.util.RimfaxeStringTokenizer(
108: val, "; ", false);
109: while (tkz.hasMoreTokens()) {
110: String tmp = tkz.nextToken();
111: //System.out.println("Add Cookie : "+tmp);
112: Cookie cookie = new Cookie(tmp);
113: cookielist.addElement(cookie);
114: }
115: }
116: if (header.equalsIgnoreCase("rimfaxe_loadbalancer_uri")) {
117: this .uri = val;
118: }
119: if (header.equalsIgnoreCase("host")) {
120: this .host = val;
121: }
122: headers.put(header, val);
123: }
124:
125: public Vector getCookies() {
126: return this .cookielist;
127: }
128:
129: public Cookie getCookie(String name)
130: {
131: Cookie c = null;
132: Enumeration enum = cookielist.elements();
133: while ( (c==null) && (enum.hasMoreElements()) )
134: {
135: Cookie cookie = (Cookie) enum.nextElement();
136: if (cookie.getName().equalsIgnoreCase(name))
137: c = cookie;
138: }
139: return c;
140: }
141:
142: public com.rimfaxe.balancer.VirtualHost getVirtualHost() {
143: return this .virtualhost;
144: }
145:
146: public com.rimfaxe.balancer.RealServer getRealHost() {
147: return this .realhost;
148: }
149:
150: public String getURI() {
151: return this .uri;
152: }
153:
154: public String getHost() {
155: return this .host;
156: }
157:
158: public String getRequestBody() {
159: return this .body;
160: }
161:
162: public String getMethod() {
163: return this .method;
164: }
165:
166: public String getHeader(String header) {
167: return (String) headers.get(header);
168: }
169:
170: public Enumeration getHeaderKeys() {
171: return headers.keys();
172: }
173:
174: public String toString()
175: {
176: StringBuffer buf = new StringBuffer();
177: buf.append("com.rimfaxe.http.Request\n\n");
178: buf.append("Real Host = "+realhost+"\n");
179: buf.append("Virtual Host = "+virtualhost+"\n");
180: buf.append("URI = "+uri+"\n");
181: buf.append("Query String = "+querystring+"\n");
182: buf.append("\n\nHeaders:\n\n");
183: Enumeration enum = getHeaderKeys();
184: while (enum.hasMoreElements())
185: {
186: String header = (String) enum.nextElement();
187: buf.append("["+header+"] ["+getHeader(header)+"]\n");
188: }
189: buf.append("\n\nRequest Body (POST parameters): \n\n"+body+"\n\n");
190: return ""+buf;
191: }
192: }
|