blob: 691c027699a1f637430366e0f912642e34627775 [file] [log] [blame]
/*
* Copyright 1999-2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/***************************************************************************
* Description: Base http request object. *
* Author: Keving Seguin [seguin@apache.org] *
* Version: $Revision$ *
***************************************************************************/
package org.apache.tomcat.util.http;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Iterator;
import org.apache.tomcat.util.buf.MessageBytes;
/**
* A general-purpose object for representing an HTTP
* request.
*/
public class BaseRequest {
// scheme constants
public static final String SCHEME_HTTP = "http";
public static final String SCHEME_HTTPS = "https";
// request attributes
MessageBytes method = MessageBytes.newInstance();
MessageBytes protocol = MessageBytes.newInstance();
MessageBytes requestURI = MessageBytes.newInstance();
MessageBytes remoteAddr = MessageBytes.newInstance();
MessageBytes remoteHost = MessageBytes.newInstance();
MessageBytes serverName = MessageBytes.newInstance();
int serverPort = 80;
MessageBytes remoteUser = MessageBytes.newInstance();
MessageBytes authType = MessageBytes.newInstance();
MessageBytes queryString = MessageBytes.newInstance();
MessageBytes authorization = MessageBytes.newInstance();
String scheme = SCHEME_HTTP;
boolean secure = false;
int contentLength = 0;
MessageBytes contentType = MessageBytes.newInstance();
MimeHeaders headers = new MimeHeaders();
Cookies cookies = new Cookies();
HashMap attributes = new HashMap();
MessageBytes tomcatInstanceId = MessageBytes.newInstance();
/**
* Recycles this object and readies it further use.
*/
public void recycle() {
method.recycle();
protocol.recycle();
requestURI.recycle();
remoteAddr.recycle();
remoteHost.recycle();
serverName.recycle();
serverPort = 80;
remoteUser.recycle();
authType.recycle();
queryString.recycle();
authorization.recycle();
scheme = SCHEME_HTTP;
secure = false;
contentLength = 0;
contentType.recycle();
headers.recycle();
cookies.recycle();
attributes.clear();
tomcatInstanceId.recycle();
}
/**
* Get the method.
* @return the method
*/
public MessageBytes method() {
return method;
}
/**
* Get the protocol
* @return the protocol
*/
public MessageBytes protocol() {
return protocol;
}
/**
* Get the request uri
* @return the request uri
*/
public MessageBytes requestURI() {
return requestURI;
}
/**
* Get the remote address
* @return the remote address
*/
public MessageBytes remoteAddr() {
return remoteAddr;
}
/**
* Get the remote host
* @return the remote host
*/
public MessageBytes remoteHost() {
return remoteHost;
}
/**
* Get the server name
* @return the server name
*/
public MessageBytes serverName() {
return serverName;
}
/**
* Get the server port
* @return the server port
*/
public int getServerPort() {
return serverPort;
}
/**
* Set the server port
* @param i the server port
*/
public void setServerPort(int i) {
serverPort = i;
}
/**
* Get the remote user
* @return the remote user
*/
public MessageBytes remoteUser() {
return remoteUser;
}
/**
* Get the auth type
* @return the auth type
*/
public MessageBytes authType() {
return authType;
}
/**
* Get the query string
* @return the query string
*/
public MessageBytes queryString() {
return queryString;
}
/**
* Get the authorization credentials
* @return the authorization credentials
*/
public MessageBytes authorization() {
return authorization;
}
/**
* Get the scheme
* @return the scheme
*/
public String getScheme() {
return scheme;
}
/**
* Set the scheme.
* @param s the scheme
*/
public void setScheme(String s) {
scheme = s;
}
/**
* Get whether the request is secure or not.
* @return <code>true</code> if the request is secure.
*/
public boolean getSecure() {
return secure;
}
/**
* Set whether the request is secure or not.
* @param b <code>true</code> if the request is secure.
*/
public void setSecure(boolean b) {
secure = b;
}
/**
* Get the content length
* @return the content length
*/
public int getContentLength() {
return contentLength;
}
/**
* Set the content length
* @param i the content length
*/
public void setContentLength(int i) {
contentLength = i;
}
/**
* Get the content type
* @return the content type
*/
public MessageBytes contentType() {
return contentType;
}
/**
* Get this request's headers
* @return request headers
*/
public MimeHeaders headers() {
return headers;
}
/**
* Get cookies.
* @return request cookies.
*/
public Cookies cookies() {
return cookies;
}
/**
* Set an attribute on the request
* @param name attribute name
* @param value attribute value
*/
public void setAttribute(String name, Object value) {
if (name == null || value == null) {
return;
}
attributes.put(name, value);
}
/**
* Get an attribute on the request
* @param name attribute name
* @return attribute value
*/
public Object getAttribute(String name) {
if (name == null) {
return null;
}
return attributes.get(name);
}
/**
* Get iterator over attribute names
* @return iterator over attribute names
*/
public Iterator getAttributeNames() {
return attributes.keySet().iterator();
}
/**
* Get the host id ( or jvmRoute )
* @return the jvm route
*/
public MessageBytes instanceId() {
return tomcatInstanceId;
}
// backward compat - jvmRoute is the id of this tomcat instance,
// used by a load balancer on the server side to implement sticky
// sessions, and on the tomcat side to format the session ids.
public MessageBytes jvmRoute() {
return tomcatInstanceId;
}
private Object notes[]=new Object[16];
public final Object getNote(int id) {
return notes[id];
}
public final void setNote(int id, Object cr) {
notes[id]=cr;
}
/**
* ** SLOW ** for debugging only!
*/
public String toString() {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
pw.println("=== BaseRequest ===");
pw.println("method = " + method.toString());
pw.println("protocol = " + protocol.toString());
pw.println("requestURI = " + requestURI.toString());
pw.println("remoteAddr = " + remoteAddr.toString());
pw.println("remoteHost = " + remoteHost.toString());
pw.println("serverName = " + serverName.toString());
pw.println("serverPort = " + serverPort);
pw.println("remoteUser = " + remoteUser.toString());
pw.println("authType = " + authType.toString());
pw.println("queryString = " + queryString.toString());
pw.println("scheme = " + scheme.toString());
pw.println("secure = " + secure);
pw.println("contentLength = " + contentLength);
pw.println("contentType = " + contentType);
pw.println("attributes = " + attributes.toString());
pw.println("headers = " + headers.toString());
pw.println("cookies = " + cookies.toString());
pw.println("jvmRoute = " + tomcatInstanceId.toString());
return sw.toString();
}
}