103928aee4356845252ac6b662d5c72c29903813eJake Slack// 203928aee4356845252ac6b662d5c72c29903813eJake Slack// ======================================================================== 303928aee4356845252ac6b662d5c72c29903813eJake Slack// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. 403928aee4356845252ac6b662d5c72c29903813eJake Slack// ------------------------------------------------------------------------ 503928aee4356845252ac6b662d5c72c29903813eJake Slack// All rights reserved. This program and the accompanying materials 603928aee4356845252ac6b662d5c72c29903813eJake Slack// are made available under the terms of the Eclipse Public License v1.0 703928aee4356845252ac6b662d5c72c29903813eJake Slack// and Apache License v2.0 which accompanies this distribution. 803928aee4356845252ac6b662d5c72c29903813eJake Slack// 903928aee4356845252ac6b662d5c72c29903813eJake Slack// The Eclipse Public License is available at 1003928aee4356845252ac6b662d5c72c29903813eJake Slack// http://www.eclipse.org/legal/epl-v10.html 1103928aee4356845252ac6b662d5c72c29903813eJake Slack// 1203928aee4356845252ac6b662d5c72c29903813eJake Slack// The Apache License v2.0 is available at 1303928aee4356845252ac6b662d5c72c29903813eJake Slack// http://www.opensource.org/licenses/apache2.0.php 1403928aee4356845252ac6b662d5c72c29903813eJake Slack// 1503928aee4356845252ac6b662d5c72c29903813eJake Slack// You may elect to redistribute this code under either of these licenses. 1603928aee4356845252ac6b662d5c72c29903813eJake Slack// ======================================================================== 1703928aee4356845252ac6b662d5c72c29903813eJake Slack// 1803928aee4356845252ac6b662d5c72c29903813eJake Slack 1903928aee4356845252ac6b662d5c72c29903813eJake Slackpackage org.eclipse.jetty.server; 2003928aee4356845252ac6b662d5c72c29903813eJake Slack 2103928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.io.BufferedReader; 2203928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.io.ByteArrayOutputStream; 2303928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.io.File; 2403928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.io.IOException; 2503928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.io.InputStream; 2603928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.io.InputStreamReader; 2703928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.io.UnsupportedEncodingException; 2803928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.net.InetAddress; 2903928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.nio.ByteBuffer; 3003928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.security.Principal; 3103928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.util.Collection; 3203928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.util.Collections; 3303928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.util.Enumeration; 3403928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.util.EventListener; 3503928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.util.HashMap; 3603928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.util.Iterator; 3703928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.util.List; 3803928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.util.Locale; 3903928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.util.Map; 4003928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.util.Map.Entry; 4103928aee4356845252ac6b662d5c72c29903813eJake Slack 4203928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.AsyncContext; 4303928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.AsyncEvent; 4403928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.AsyncListener; 4503928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.DispatcherType; 4603928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.MultipartConfigElement; 4703928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.RequestDispatcher; 4803928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.ServletContext; 4903928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.ServletException; 5003928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.ServletInputStream; 5103928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.ServletRequest; 5203928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.ServletRequestAttributeEvent; 5303928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.ServletRequestAttributeListener; 5403928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.ServletRequestEvent; 5503928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.ServletRequestListener; 5603928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.ServletResponse; 5703928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.http.Cookie; 5803928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.http.HttpServletRequest; 5903928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.http.HttpServletResponse; 6003928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.http.HttpSession; 6103928aee4356845252ac6b662d5c72c29903813eJake Slackimport javax.servlet.http.Part; 6203928aee4356845252ac6b662d5c72c29903813eJake Slack 6303928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.continuation.Continuation; 6403928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.continuation.ContinuationListener; 6503928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.http.HttpCookie; 6603928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.http.HttpFields; 6703928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.http.HttpHeaders; 6803928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.http.HttpMethods; 6903928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.http.HttpParser; 7003928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.http.HttpStatus; 7103928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.http.HttpURI; 7203928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.http.HttpVersions; 7303928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.http.MimeTypes; 7403928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.io.Buffer; 7503928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.io.BufferUtil; 7603928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.io.ByteArrayBuffer; 7703928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.io.EndPoint; 7803928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.io.nio.DirectNIOBuffer; 7903928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.io.nio.IndirectNIOBuffer; 8003928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.io.nio.NIOBuffer; 8103928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.server.handler.ContextHandler; 8203928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.server.handler.ContextHandler.Context; 8303928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.util.Attributes; 8403928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.util.AttributesMap; 8503928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.util.IO; 8603928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.util.LazyList; 8703928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.util.MultiException; 8803928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.util.MultiMap; 8903928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.util.MultiPartInputStream; 9003928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.util.StringUtil; 9103928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.util.URIUtil; 9203928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.util.UrlEncoded; 9303928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.util.log.Log; 9403928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.util.log.Logger; 9503928aee4356845252ac6b662d5c72c29903813eJake Slack 9603928aee4356845252ac6b662d5c72c29903813eJake Slack/* ------------------------------------------------------------ */ 9703928aee4356845252ac6b662d5c72c29903813eJake Slack/** 9803928aee4356845252ac6b662d5c72c29903813eJake Slack * Jetty Request. 9903928aee4356845252ac6b662d5c72c29903813eJake Slack * <p> 10003928aee4356845252ac6b662d5c72c29903813eJake Slack * Implements {@link javax.servlet.http.HttpServletRequest} from the <code>javax.servlet.http</code> package. 10103928aee4356845252ac6b662d5c72c29903813eJake Slack * </p> 10203928aee4356845252ac6b662d5c72c29903813eJake Slack * <p> 10303928aee4356845252ac6b662d5c72c29903813eJake Slack * The standard interface of mostly getters, is extended with setters so that the request is mutable by the handlers that it is passed to. This allows the 10403928aee4356845252ac6b662d5c72c29903813eJake Slack * request object to be as lightweight as possible and not actually implement any significant behavior. For example 10503928aee4356845252ac6b662d5c72c29903813eJake Slack * <ul> 10603928aee4356845252ac6b662d5c72c29903813eJake Slack * 10703928aee4356845252ac6b662d5c72c29903813eJake Slack * <li>The {@link Request#getContextPath()} method will return null, until the request has been passed to a {@link ContextHandler} which matches the 10803928aee4356845252ac6b662d5c72c29903813eJake Slack * {@link Request#getPathInfo()} with a context path and calls {@link Request#setContextPath(String)} as a result.</li> 10903928aee4356845252ac6b662d5c72c29903813eJake Slack * 11003928aee4356845252ac6b662d5c72c29903813eJake Slack * <li>the HTTP session methods will all return null sessions until such time as a request has been passed to a 11103928aee4356845252ac6b662d5c72c29903813eJake Slack * {@link org.eclipse.jetty.server.session.SessionHandler} which checks for session cookies and enables the ability to create new sessions.</li> 11203928aee4356845252ac6b662d5c72c29903813eJake Slack * 11303928aee4356845252ac6b662d5c72c29903813eJake Slack * <li>The {@link Request#getServletPath()} method will return null until the request has been passed to a <code>org.eclipse.jetty.servlet.ServletHandler</code> 11403928aee4356845252ac6b662d5c72c29903813eJake Slack * and the pathInfo matched against the servlet URL patterns and {@link Request#setServletPath(String)} called as a result.</li> 11503928aee4356845252ac6b662d5c72c29903813eJake Slack * </ul> 11603928aee4356845252ac6b662d5c72c29903813eJake Slack * 11703928aee4356845252ac6b662d5c72c29903813eJake Slack * A request instance is created for each {@link AbstractHttpConnection} accepted by the server and recycled for each HTTP request received via that connection. 11803928aee4356845252ac6b662d5c72c29903813eJake Slack * An effort is made to avoid reparsing headers and cookies that are likely to be the same for requests from the same connection. 11903928aee4356845252ac6b662d5c72c29903813eJake Slack * 12003928aee4356845252ac6b662d5c72c29903813eJake Slack * <p> 12103928aee4356845252ac6b662d5c72c29903813eJake Slack * The form content that a request can process is limited to protect from Denial of Service attacks. The size in bytes is limited by 12203928aee4356845252ac6b662d5c72c29903813eJake Slack * {@link ContextHandler#getMaxFormContentSize()} or if there is no context then the "org.eclipse.jetty.server.Request.maxFormContentSize" {@link Server} 12303928aee4356845252ac6b662d5c72c29903813eJake Slack * attribute. The number of parameters keys is limited by {@link ContextHandler#getMaxFormKeys()} or if there is no context then the 12403928aee4356845252ac6b662d5c72c29903813eJake Slack * "org.eclipse.jetty.server.Request.maxFormKeys" {@link Server} attribute. 12503928aee4356845252ac6b662d5c72c29903813eJake Slack * 12603928aee4356845252ac6b662d5c72c29903813eJake Slack * 12703928aee4356845252ac6b662d5c72c29903813eJake Slack */ 12803928aee4356845252ac6b662d5c72c29903813eJake Slackpublic class Request implements HttpServletRequest 12903928aee4356845252ac6b662d5c72c29903813eJake Slack{ 13003928aee4356845252ac6b662d5c72c29903813eJake Slack public static final String __MULTIPART_CONFIG_ELEMENT = "org.eclipse.multipartConfig"; 13103928aee4356845252ac6b662d5c72c29903813eJake Slack public static final String __MULTIPART_INPUT_STREAM = "org.eclipse.multiPartInputStream"; 13203928aee4356845252ac6b662d5c72c29903813eJake Slack public static final String __MULTIPART_CONTEXT = "org.eclipse.multiPartContext"; 13303928aee4356845252ac6b662d5c72c29903813eJake Slack private static final Logger LOG = Log.getLogger(Request.class); 13403928aee4356845252ac6b662d5c72c29903813eJake Slack 13503928aee4356845252ac6b662d5c72c29903813eJake Slack private static final String __ASYNC_FWD = "org.eclipse.asyncfwd"; 13603928aee4356845252ac6b662d5c72c29903813eJake Slack private static final Collection __defaultLocale = Collections.singleton(Locale.getDefault()); 13703928aee4356845252ac6b662d5c72c29903813eJake Slack private static final int __NONE = 0, _STREAM = 1, __READER = 2; 13803928aee4356845252ac6b662d5c72c29903813eJake Slack 13903928aee4356845252ac6b662d5c72c29903813eJake Slack public static class MultiPartCleanerListener implements ServletRequestListener 14003928aee4356845252ac6b662d5c72c29903813eJake Slack { 14103928aee4356845252ac6b662d5c72c29903813eJake Slack 14203928aee4356845252ac6b662d5c72c29903813eJake Slack @Override 14303928aee4356845252ac6b662d5c72c29903813eJake Slack public void requestDestroyed(ServletRequestEvent sre) 14403928aee4356845252ac6b662d5c72c29903813eJake Slack { 14503928aee4356845252ac6b662d5c72c29903813eJake Slack //Clean up any tmp files created by MultiPartInputStream 14603928aee4356845252ac6b662d5c72c29903813eJake Slack MultiPartInputStream mpis = (MultiPartInputStream)sre.getServletRequest().getAttribute(__MULTIPART_INPUT_STREAM); 14703928aee4356845252ac6b662d5c72c29903813eJake Slack if (mpis != null) 14803928aee4356845252ac6b662d5c72c29903813eJake Slack { 14903928aee4356845252ac6b662d5c72c29903813eJake Slack ContextHandler.Context context = (ContextHandler.Context)sre.getServletRequest().getAttribute(__MULTIPART_CONTEXT); 15003928aee4356845252ac6b662d5c72c29903813eJake Slack 15103928aee4356845252ac6b662d5c72c29903813eJake Slack //Only do the cleanup if we are exiting from the context in which a servlet parsed the multipart files 15203928aee4356845252ac6b662d5c72c29903813eJake Slack if (context == sre.getServletContext()) 15303928aee4356845252ac6b662d5c72c29903813eJake Slack { 15403928aee4356845252ac6b662d5c72c29903813eJake Slack try 15503928aee4356845252ac6b662d5c72c29903813eJake Slack { 15603928aee4356845252ac6b662d5c72c29903813eJake Slack mpis.deleteParts(); 15703928aee4356845252ac6b662d5c72c29903813eJake Slack } 15803928aee4356845252ac6b662d5c72c29903813eJake Slack catch (MultiException e) 15903928aee4356845252ac6b662d5c72c29903813eJake Slack { 16003928aee4356845252ac6b662d5c72c29903813eJake Slack sre.getServletContext().log("Errors deleting multipart tmp files", e); 16103928aee4356845252ac6b662d5c72c29903813eJake Slack } 16203928aee4356845252ac6b662d5c72c29903813eJake Slack } 16303928aee4356845252ac6b662d5c72c29903813eJake Slack } 16403928aee4356845252ac6b662d5c72c29903813eJake Slack } 16503928aee4356845252ac6b662d5c72c29903813eJake Slack 16603928aee4356845252ac6b662d5c72c29903813eJake Slack @Override 16703928aee4356845252ac6b662d5c72c29903813eJake Slack public void requestInitialized(ServletRequestEvent sre) 16803928aee4356845252ac6b662d5c72c29903813eJake Slack { 16903928aee4356845252ac6b662d5c72c29903813eJake Slack //nothing to do, multipart config set up by ServletHolder.handle() 17003928aee4356845252ac6b662d5c72c29903813eJake Slack } 17103928aee4356845252ac6b662d5c72c29903813eJake Slack 17203928aee4356845252ac6b662d5c72c29903813eJake Slack } 17303928aee4356845252ac6b662d5c72c29903813eJake Slack 17403928aee4356845252ac6b662d5c72c29903813eJake Slack 17503928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 17603928aee4356845252ac6b662d5c72c29903813eJake Slack public static Request getRequest(HttpServletRequest request) 17703928aee4356845252ac6b662d5c72c29903813eJake Slack { 17803928aee4356845252ac6b662d5c72c29903813eJake Slack if (request instanceof Request) 17903928aee4356845252ac6b662d5c72c29903813eJake Slack return (Request)request; 18003928aee4356845252ac6b662d5c72c29903813eJake Slack 18103928aee4356845252ac6b662d5c72c29903813eJake Slack return AbstractHttpConnection.getCurrentConnection().getRequest(); 18203928aee4356845252ac6b662d5c72c29903813eJake Slack } 18303928aee4356845252ac6b662d5c72c29903813eJake Slack protected final AsyncContinuation _async = new AsyncContinuation(); 18403928aee4356845252ac6b662d5c72c29903813eJake Slack private boolean _asyncSupported = true; 18503928aee4356845252ac6b662d5c72c29903813eJake Slack private volatile Attributes _attributes; 18603928aee4356845252ac6b662d5c72c29903813eJake Slack private Authentication _authentication; 18703928aee4356845252ac6b662d5c72c29903813eJake Slack private MultiMap<String> _baseParameters; 18803928aee4356845252ac6b662d5c72c29903813eJake Slack private String _characterEncoding; 18903928aee4356845252ac6b662d5c72c29903813eJake Slack protected AbstractHttpConnection _connection; 19003928aee4356845252ac6b662d5c72c29903813eJake Slack private ContextHandler.Context _context; 19103928aee4356845252ac6b662d5c72c29903813eJake Slack private boolean _newContext; 19203928aee4356845252ac6b662d5c72c29903813eJake Slack private String _contextPath; 19303928aee4356845252ac6b662d5c72c29903813eJake Slack private CookieCutter _cookies; 19403928aee4356845252ac6b662d5c72c29903813eJake Slack private boolean _cookiesExtracted = false; 19503928aee4356845252ac6b662d5c72c29903813eJake Slack private DispatcherType _dispatcherType; 19603928aee4356845252ac6b662d5c72c29903813eJake Slack private boolean _dns = false; 19703928aee4356845252ac6b662d5c72c29903813eJake Slack private EndPoint _endp; 19803928aee4356845252ac6b662d5c72c29903813eJake Slack private boolean _handled = false; 19903928aee4356845252ac6b662d5c72c29903813eJake Slack private int _inputState = __NONE; 20003928aee4356845252ac6b662d5c72c29903813eJake Slack private String _method; 20103928aee4356845252ac6b662d5c72c29903813eJake Slack private MultiMap<String> _parameters; 20203928aee4356845252ac6b662d5c72c29903813eJake Slack private boolean _paramsExtracted; 20303928aee4356845252ac6b662d5c72c29903813eJake Slack private String _pathInfo; 20403928aee4356845252ac6b662d5c72c29903813eJake Slack private int _port; 20503928aee4356845252ac6b662d5c72c29903813eJake Slack private String _protocol = HttpVersions.HTTP_1_1; 20603928aee4356845252ac6b662d5c72c29903813eJake Slack private String _queryEncoding; 20703928aee4356845252ac6b662d5c72c29903813eJake Slack private String _queryString; 20803928aee4356845252ac6b662d5c72c29903813eJake Slack private BufferedReader _reader; 20903928aee4356845252ac6b662d5c72c29903813eJake Slack private String _readerEncoding; 21003928aee4356845252ac6b662d5c72c29903813eJake Slack private String _remoteAddr; 21103928aee4356845252ac6b662d5c72c29903813eJake Slack private String _remoteHost; 21203928aee4356845252ac6b662d5c72c29903813eJake Slack private Object _requestAttributeListeners; 21303928aee4356845252ac6b662d5c72c29903813eJake Slack private String _requestedSessionId; 21403928aee4356845252ac6b662d5c72c29903813eJake Slack private boolean _requestedSessionIdFromCookie = false; 21503928aee4356845252ac6b662d5c72c29903813eJake Slack private String _requestURI; 21603928aee4356845252ac6b662d5c72c29903813eJake Slack private Map<Object, HttpSession> _savedNewSessions; 21703928aee4356845252ac6b662d5c72c29903813eJake Slack private String _scheme = URIUtil.HTTP; 21803928aee4356845252ac6b662d5c72c29903813eJake Slack private UserIdentity.Scope _scope; 21903928aee4356845252ac6b662d5c72c29903813eJake Slack private String _serverName; 22003928aee4356845252ac6b662d5c72c29903813eJake Slack private String _servletPath; 22103928aee4356845252ac6b662d5c72c29903813eJake Slack private HttpSession _session; 22203928aee4356845252ac6b662d5c72c29903813eJake Slack private SessionManager _sessionManager; 22303928aee4356845252ac6b662d5c72c29903813eJake Slack private long _timeStamp; 22403928aee4356845252ac6b662d5c72c29903813eJake Slack private long _dispatchTime; 22503928aee4356845252ac6b662d5c72c29903813eJake Slack 22603928aee4356845252ac6b662d5c72c29903813eJake Slack private Buffer _timeStampBuffer; 22703928aee4356845252ac6b662d5c72c29903813eJake Slack private HttpURI _uri; 22803928aee4356845252ac6b662d5c72c29903813eJake Slack 22903928aee4356845252ac6b662d5c72c29903813eJake Slack private MultiPartInputStream _multiPartInputStream; //if the request is a multi-part mime 23003928aee4356845252ac6b662d5c72c29903813eJake Slack 23103928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 23203928aee4356845252ac6b662d5c72c29903813eJake Slack public Request() 23303928aee4356845252ac6b662d5c72c29903813eJake Slack { 23403928aee4356845252ac6b662d5c72c29903813eJake Slack } 23503928aee4356845252ac6b662d5c72c29903813eJake Slack 23603928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 23703928aee4356845252ac6b662d5c72c29903813eJake Slack public Request(AbstractHttpConnection connection) 23803928aee4356845252ac6b662d5c72c29903813eJake Slack { 23903928aee4356845252ac6b662d5c72c29903813eJake Slack setConnection(connection); 24003928aee4356845252ac6b662d5c72c29903813eJake Slack } 24103928aee4356845252ac6b662d5c72c29903813eJake Slack 24203928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 24303928aee4356845252ac6b662d5c72c29903813eJake Slack public void addEventListener(final EventListener listener) 24403928aee4356845252ac6b662d5c72c29903813eJake Slack { 24503928aee4356845252ac6b662d5c72c29903813eJake Slack if (listener instanceof ServletRequestAttributeListener) 24603928aee4356845252ac6b662d5c72c29903813eJake Slack _requestAttributeListeners = LazyList.add(_requestAttributeListeners,listener); 24703928aee4356845252ac6b662d5c72c29903813eJake Slack if (listener instanceof ContinuationListener) 24803928aee4356845252ac6b662d5c72c29903813eJake Slack throw new IllegalArgumentException(listener.getClass().toString()); 24903928aee4356845252ac6b662d5c72c29903813eJake Slack if (listener instanceof AsyncListener) 25003928aee4356845252ac6b662d5c72c29903813eJake Slack throw new IllegalArgumentException(listener.getClass().toString()); 25103928aee4356845252ac6b662d5c72c29903813eJake Slack } 25203928aee4356845252ac6b662d5c72c29903813eJake Slack 25303928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 25403928aee4356845252ac6b662d5c72c29903813eJake Slack /** 25503928aee4356845252ac6b662d5c72c29903813eJake Slack * Extract Parameters from query string and/or form _content. 25603928aee4356845252ac6b662d5c72c29903813eJake Slack */ 25703928aee4356845252ac6b662d5c72c29903813eJake Slack public void extractParameters() 25803928aee4356845252ac6b662d5c72c29903813eJake Slack { 25903928aee4356845252ac6b662d5c72c29903813eJake Slack if (_baseParameters == null) 26003928aee4356845252ac6b662d5c72c29903813eJake Slack _baseParameters = new MultiMap(16); 26103928aee4356845252ac6b662d5c72c29903813eJake Slack 26203928aee4356845252ac6b662d5c72c29903813eJake Slack if (_paramsExtracted) 26303928aee4356845252ac6b662d5c72c29903813eJake Slack { 26403928aee4356845252ac6b662d5c72c29903813eJake Slack if (_parameters == null) 26503928aee4356845252ac6b662d5c72c29903813eJake Slack _parameters = _baseParameters; 26603928aee4356845252ac6b662d5c72c29903813eJake Slack return; 26703928aee4356845252ac6b662d5c72c29903813eJake Slack } 26803928aee4356845252ac6b662d5c72c29903813eJake Slack 26903928aee4356845252ac6b662d5c72c29903813eJake Slack _paramsExtracted = true; 27003928aee4356845252ac6b662d5c72c29903813eJake Slack 27103928aee4356845252ac6b662d5c72c29903813eJake Slack try 27203928aee4356845252ac6b662d5c72c29903813eJake Slack { 27303928aee4356845252ac6b662d5c72c29903813eJake Slack // Handle query string 27403928aee4356845252ac6b662d5c72c29903813eJake Slack if (_uri != null && _uri.hasQuery()) 27503928aee4356845252ac6b662d5c72c29903813eJake Slack { 27603928aee4356845252ac6b662d5c72c29903813eJake Slack if (_queryEncoding == null) 27703928aee4356845252ac6b662d5c72c29903813eJake Slack _uri.decodeQueryTo(_baseParameters); 27803928aee4356845252ac6b662d5c72c29903813eJake Slack else 27903928aee4356845252ac6b662d5c72c29903813eJake Slack { 28003928aee4356845252ac6b662d5c72c29903813eJake Slack try 28103928aee4356845252ac6b662d5c72c29903813eJake Slack { 28203928aee4356845252ac6b662d5c72c29903813eJake Slack _uri.decodeQueryTo(_baseParameters,_queryEncoding); 28303928aee4356845252ac6b662d5c72c29903813eJake Slack } 28403928aee4356845252ac6b662d5c72c29903813eJake Slack catch (UnsupportedEncodingException e) 28503928aee4356845252ac6b662d5c72c29903813eJake Slack { 28603928aee4356845252ac6b662d5c72c29903813eJake Slack if (LOG.isDebugEnabled()) 28703928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.warn(e); 28803928aee4356845252ac6b662d5c72c29903813eJake Slack else 28903928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.warn(e.toString()); 29003928aee4356845252ac6b662d5c72c29903813eJake Slack } 29103928aee4356845252ac6b662d5c72c29903813eJake Slack } 29203928aee4356845252ac6b662d5c72c29903813eJake Slack } 29303928aee4356845252ac6b662d5c72c29903813eJake Slack 29403928aee4356845252ac6b662d5c72c29903813eJake Slack // handle any _content. 29503928aee4356845252ac6b662d5c72c29903813eJake Slack String encoding = getCharacterEncoding(); 29603928aee4356845252ac6b662d5c72c29903813eJake Slack String content_type = getContentType(); 29703928aee4356845252ac6b662d5c72c29903813eJake Slack if (content_type != null && content_type.length() > 0) 29803928aee4356845252ac6b662d5c72c29903813eJake Slack { 29903928aee4356845252ac6b662d5c72c29903813eJake Slack content_type = HttpFields.valueParameters(content_type,null); 30003928aee4356845252ac6b662d5c72c29903813eJake Slack 30103928aee4356845252ac6b662d5c72c29903813eJake Slack if (MimeTypes.FORM_ENCODED.equalsIgnoreCase(content_type) && _inputState == __NONE 30203928aee4356845252ac6b662d5c72c29903813eJake Slack && (HttpMethods.POST.equals(getMethod()) || HttpMethods.PUT.equals(getMethod()))) 30303928aee4356845252ac6b662d5c72c29903813eJake Slack { 30403928aee4356845252ac6b662d5c72c29903813eJake Slack int content_length = getContentLength(); 30503928aee4356845252ac6b662d5c72c29903813eJake Slack if (content_length != 0) 30603928aee4356845252ac6b662d5c72c29903813eJake Slack { 30703928aee4356845252ac6b662d5c72c29903813eJake Slack try 30803928aee4356845252ac6b662d5c72c29903813eJake Slack { 30903928aee4356845252ac6b662d5c72c29903813eJake Slack int maxFormContentSize = -1; 31003928aee4356845252ac6b662d5c72c29903813eJake Slack int maxFormKeys = -1; 31103928aee4356845252ac6b662d5c72c29903813eJake Slack 31203928aee4356845252ac6b662d5c72c29903813eJake Slack if (_context != null) 31303928aee4356845252ac6b662d5c72c29903813eJake Slack { 31403928aee4356845252ac6b662d5c72c29903813eJake Slack maxFormContentSize = _context.getContextHandler().getMaxFormContentSize(); 31503928aee4356845252ac6b662d5c72c29903813eJake Slack maxFormKeys = _context.getContextHandler().getMaxFormKeys(); 31603928aee4356845252ac6b662d5c72c29903813eJake Slack } 31703928aee4356845252ac6b662d5c72c29903813eJake Slack 31803928aee4356845252ac6b662d5c72c29903813eJake Slack if (maxFormContentSize < 0) 31903928aee4356845252ac6b662d5c72c29903813eJake Slack { 32003928aee4356845252ac6b662d5c72c29903813eJake Slack Object obj = _connection.getConnector().getServer().getAttribute("org.eclipse.jetty.server.Request.maxFormContentSize"); 32103928aee4356845252ac6b662d5c72c29903813eJake Slack if (obj == null) 32203928aee4356845252ac6b662d5c72c29903813eJake Slack maxFormContentSize = 200000; 32303928aee4356845252ac6b662d5c72c29903813eJake Slack else if (obj instanceof Number) 32403928aee4356845252ac6b662d5c72c29903813eJake Slack { 32503928aee4356845252ac6b662d5c72c29903813eJake Slack Number size = (Number)obj; 32603928aee4356845252ac6b662d5c72c29903813eJake Slack maxFormContentSize = size.intValue(); 32703928aee4356845252ac6b662d5c72c29903813eJake Slack } 32803928aee4356845252ac6b662d5c72c29903813eJake Slack else if (obj instanceof String) 32903928aee4356845252ac6b662d5c72c29903813eJake Slack { 33003928aee4356845252ac6b662d5c72c29903813eJake Slack maxFormContentSize = Integer.valueOf((String)obj); 33103928aee4356845252ac6b662d5c72c29903813eJake Slack } 33203928aee4356845252ac6b662d5c72c29903813eJake Slack } 33303928aee4356845252ac6b662d5c72c29903813eJake Slack 33403928aee4356845252ac6b662d5c72c29903813eJake Slack if (maxFormKeys < 0) 33503928aee4356845252ac6b662d5c72c29903813eJake Slack { 33603928aee4356845252ac6b662d5c72c29903813eJake Slack Object obj = _connection.getConnector().getServer().getAttribute("org.eclipse.jetty.server.Request.maxFormKeys"); 33703928aee4356845252ac6b662d5c72c29903813eJake Slack if (obj == null) 33803928aee4356845252ac6b662d5c72c29903813eJake Slack maxFormKeys = 1000; 33903928aee4356845252ac6b662d5c72c29903813eJake Slack else if (obj instanceof Number) 34003928aee4356845252ac6b662d5c72c29903813eJake Slack { 34103928aee4356845252ac6b662d5c72c29903813eJake Slack Number keys = (Number)obj; 34203928aee4356845252ac6b662d5c72c29903813eJake Slack maxFormKeys = keys.intValue(); 34303928aee4356845252ac6b662d5c72c29903813eJake Slack } 34403928aee4356845252ac6b662d5c72c29903813eJake Slack else if (obj instanceof String) 34503928aee4356845252ac6b662d5c72c29903813eJake Slack { 34603928aee4356845252ac6b662d5c72c29903813eJake Slack maxFormKeys = Integer.valueOf((String)obj); 34703928aee4356845252ac6b662d5c72c29903813eJake Slack } 34803928aee4356845252ac6b662d5c72c29903813eJake Slack } 34903928aee4356845252ac6b662d5c72c29903813eJake Slack 35003928aee4356845252ac6b662d5c72c29903813eJake Slack if (content_length > maxFormContentSize && maxFormContentSize > 0) 35103928aee4356845252ac6b662d5c72c29903813eJake Slack { 35203928aee4356845252ac6b662d5c72c29903813eJake Slack throw new IllegalStateException("Form too large " + content_length + ">" + maxFormContentSize); 35303928aee4356845252ac6b662d5c72c29903813eJake Slack } 35403928aee4356845252ac6b662d5c72c29903813eJake Slack InputStream in = getInputStream(); 35503928aee4356845252ac6b662d5c72c29903813eJake Slack 35603928aee4356845252ac6b662d5c72c29903813eJake Slack // Add form params to query params 35703928aee4356845252ac6b662d5c72c29903813eJake Slack UrlEncoded.decodeTo(in,_baseParameters,encoding,content_length < 0?maxFormContentSize:-1,maxFormKeys); 35803928aee4356845252ac6b662d5c72c29903813eJake Slack } 35903928aee4356845252ac6b662d5c72c29903813eJake Slack catch (IOException e) 36003928aee4356845252ac6b662d5c72c29903813eJake Slack { 36103928aee4356845252ac6b662d5c72c29903813eJake Slack if (LOG.isDebugEnabled()) 36203928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.warn(e); 36303928aee4356845252ac6b662d5c72c29903813eJake Slack else 36403928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.warn(e.toString()); 36503928aee4356845252ac6b662d5c72c29903813eJake Slack } 36603928aee4356845252ac6b662d5c72c29903813eJake Slack } 36703928aee4356845252ac6b662d5c72c29903813eJake Slack } 36803928aee4356845252ac6b662d5c72c29903813eJake Slack 36903928aee4356845252ac6b662d5c72c29903813eJake Slack } 37003928aee4356845252ac6b662d5c72c29903813eJake Slack 37103928aee4356845252ac6b662d5c72c29903813eJake Slack if (_parameters == null) 37203928aee4356845252ac6b662d5c72c29903813eJake Slack _parameters = _baseParameters; 37303928aee4356845252ac6b662d5c72c29903813eJake Slack else if (_parameters != _baseParameters) 37403928aee4356845252ac6b662d5c72c29903813eJake Slack { 37503928aee4356845252ac6b662d5c72c29903813eJake Slack // Merge parameters (needed if parameters extracted after a forward). 37603928aee4356845252ac6b662d5c72c29903813eJake Slack Iterator iter = _baseParameters.entrySet().iterator(); 37703928aee4356845252ac6b662d5c72c29903813eJake Slack while (iter.hasNext()) 37803928aee4356845252ac6b662d5c72c29903813eJake Slack { 37903928aee4356845252ac6b662d5c72c29903813eJake Slack Map.Entry entry = (Map.Entry)iter.next(); 38003928aee4356845252ac6b662d5c72c29903813eJake Slack String name = (String)entry.getKey(); 38103928aee4356845252ac6b662d5c72c29903813eJake Slack Object values = entry.getValue(); 38203928aee4356845252ac6b662d5c72c29903813eJake Slack for (int i = 0; i < LazyList.size(values); i++) 38303928aee4356845252ac6b662d5c72c29903813eJake Slack _parameters.add(name,LazyList.get(values,i)); 38403928aee4356845252ac6b662d5c72c29903813eJake Slack } 38503928aee4356845252ac6b662d5c72c29903813eJake Slack } 38603928aee4356845252ac6b662d5c72c29903813eJake Slack 38703928aee4356845252ac6b662d5c72c29903813eJake Slack if (content_type != null && content_type.length()>0 && content_type.startsWith("multipart/form-data") && getAttribute(__MULTIPART_CONFIG_ELEMENT)!=null) 38803928aee4356845252ac6b662d5c72c29903813eJake Slack { 38903928aee4356845252ac6b662d5c72c29903813eJake Slack try 39003928aee4356845252ac6b662d5c72c29903813eJake Slack { 39103928aee4356845252ac6b662d5c72c29903813eJake Slack getParts(); 39203928aee4356845252ac6b662d5c72c29903813eJake Slack } 39303928aee4356845252ac6b662d5c72c29903813eJake Slack catch (IOException e) 39403928aee4356845252ac6b662d5c72c29903813eJake Slack { 39503928aee4356845252ac6b662d5c72c29903813eJake Slack if (LOG.isDebugEnabled()) 39603928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.warn(e); 39703928aee4356845252ac6b662d5c72c29903813eJake Slack else 39803928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.warn(e.toString()); 39903928aee4356845252ac6b662d5c72c29903813eJake Slack } 40003928aee4356845252ac6b662d5c72c29903813eJake Slack catch (ServletException e) 40103928aee4356845252ac6b662d5c72c29903813eJake Slack { 40203928aee4356845252ac6b662d5c72c29903813eJake Slack if (LOG.isDebugEnabled()) 40303928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.warn(e); 40403928aee4356845252ac6b662d5c72c29903813eJake Slack else 40503928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.warn(e.toString()); 40603928aee4356845252ac6b662d5c72c29903813eJake Slack } 40703928aee4356845252ac6b662d5c72c29903813eJake Slack } 40803928aee4356845252ac6b662d5c72c29903813eJake Slack } 40903928aee4356845252ac6b662d5c72c29903813eJake Slack finally 41003928aee4356845252ac6b662d5c72c29903813eJake Slack { 41103928aee4356845252ac6b662d5c72c29903813eJake Slack // ensure params always set (even if empty) after extraction 41203928aee4356845252ac6b662d5c72c29903813eJake Slack if (_parameters == null) 41303928aee4356845252ac6b662d5c72c29903813eJake Slack _parameters = _baseParameters; 41403928aee4356845252ac6b662d5c72c29903813eJake Slack } 41503928aee4356845252ac6b662d5c72c29903813eJake Slack } 41603928aee4356845252ac6b662d5c72c29903813eJake Slack 41703928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 41803928aee4356845252ac6b662d5c72c29903813eJake Slack public AsyncContext getAsyncContext() 41903928aee4356845252ac6b662d5c72c29903813eJake Slack { 42003928aee4356845252ac6b662d5c72c29903813eJake Slack if (_async.isInitial() && !_async.isAsyncStarted()) 42103928aee4356845252ac6b662d5c72c29903813eJake Slack throw new IllegalStateException(_async.getStatusString()); 42203928aee4356845252ac6b662d5c72c29903813eJake Slack return _async; 42303928aee4356845252ac6b662d5c72c29903813eJake Slack } 42403928aee4356845252ac6b662d5c72c29903813eJake Slack 42503928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 42603928aee4356845252ac6b662d5c72c29903813eJake Slack public AsyncContinuation getAsyncContinuation() 42703928aee4356845252ac6b662d5c72c29903813eJake Slack { 42803928aee4356845252ac6b662d5c72c29903813eJake Slack return _async; 42903928aee4356845252ac6b662d5c72c29903813eJake Slack } 43003928aee4356845252ac6b662d5c72c29903813eJake Slack 43103928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 43203928aee4356845252ac6b662d5c72c29903813eJake Slack /* 43303928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getAttribute(java.lang.String) 43403928aee4356845252ac6b662d5c72c29903813eJake Slack */ 43503928aee4356845252ac6b662d5c72c29903813eJake Slack public Object getAttribute(String name) 43603928aee4356845252ac6b662d5c72c29903813eJake Slack { 43703928aee4356845252ac6b662d5c72c29903813eJake Slack if ("org.eclipse.jetty.io.EndPoint.maxIdleTime".equalsIgnoreCase(name)) 43803928aee4356845252ac6b662d5c72c29903813eJake Slack return new Long(getConnection().getEndPoint().getMaxIdleTime()); 43903928aee4356845252ac6b662d5c72c29903813eJake Slack 44003928aee4356845252ac6b662d5c72c29903813eJake Slack Object attr = (_attributes == null)?null:_attributes.getAttribute(name); 44103928aee4356845252ac6b662d5c72c29903813eJake Slack if (attr == null && Continuation.ATTRIBUTE.equals(name)) 44203928aee4356845252ac6b662d5c72c29903813eJake Slack return _async; 44303928aee4356845252ac6b662d5c72c29903813eJake Slack return attr; 44403928aee4356845252ac6b662d5c72c29903813eJake Slack } 44503928aee4356845252ac6b662d5c72c29903813eJake Slack 44603928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 44703928aee4356845252ac6b662d5c72c29903813eJake Slack /* 44803928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getAttributeNames() 44903928aee4356845252ac6b662d5c72c29903813eJake Slack */ 45003928aee4356845252ac6b662d5c72c29903813eJake Slack public Enumeration getAttributeNames() 45103928aee4356845252ac6b662d5c72c29903813eJake Slack { 45203928aee4356845252ac6b662d5c72c29903813eJake Slack if (_attributes == null) 45303928aee4356845252ac6b662d5c72c29903813eJake Slack return Collections.enumeration(Collections.EMPTY_LIST); 45403928aee4356845252ac6b662d5c72c29903813eJake Slack 45503928aee4356845252ac6b662d5c72c29903813eJake Slack return AttributesMap.getAttributeNamesCopy(_attributes); 45603928aee4356845252ac6b662d5c72c29903813eJake Slack } 45703928aee4356845252ac6b662d5c72c29903813eJake Slack 45803928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 45903928aee4356845252ac6b662d5c72c29903813eJake Slack /* 46003928aee4356845252ac6b662d5c72c29903813eJake Slack */ 46103928aee4356845252ac6b662d5c72c29903813eJake Slack public Attributes getAttributes() 46203928aee4356845252ac6b662d5c72c29903813eJake Slack { 46303928aee4356845252ac6b662d5c72c29903813eJake Slack if (_attributes == null) 46403928aee4356845252ac6b662d5c72c29903813eJake Slack _attributes = new AttributesMap(); 46503928aee4356845252ac6b662d5c72c29903813eJake Slack return _attributes; 46603928aee4356845252ac6b662d5c72c29903813eJake Slack } 46703928aee4356845252ac6b662d5c72c29903813eJake Slack 46803928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 46903928aee4356845252ac6b662d5c72c29903813eJake Slack /** 47003928aee4356845252ac6b662d5c72c29903813eJake Slack * Get the authentication. 47103928aee4356845252ac6b662d5c72c29903813eJake Slack * 47203928aee4356845252ac6b662d5c72c29903813eJake Slack * @return the authentication 47303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 47403928aee4356845252ac6b662d5c72c29903813eJake Slack public Authentication getAuthentication() 47503928aee4356845252ac6b662d5c72c29903813eJake Slack { 47603928aee4356845252ac6b662d5c72c29903813eJake Slack return _authentication; 47703928aee4356845252ac6b662d5c72c29903813eJake Slack } 47803928aee4356845252ac6b662d5c72c29903813eJake Slack 47903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 48003928aee4356845252ac6b662d5c72c29903813eJake Slack /* 48103928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getAuthType() 48203928aee4356845252ac6b662d5c72c29903813eJake Slack */ 48303928aee4356845252ac6b662d5c72c29903813eJake Slack public String getAuthType() 48403928aee4356845252ac6b662d5c72c29903813eJake Slack { 48503928aee4356845252ac6b662d5c72c29903813eJake Slack if (_authentication instanceof Authentication.Deferred) 48603928aee4356845252ac6b662d5c72c29903813eJake Slack setAuthentication(((Authentication.Deferred)_authentication).authenticate(this)); 48703928aee4356845252ac6b662d5c72c29903813eJake Slack 48803928aee4356845252ac6b662d5c72c29903813eJake Slack if (_authentication instanceof Authentication.User) 48903928aee4356845252ac6b662d5c72c29903813eJake Slack return ((Authentication.User)_authentication).getAuthMethod(); 49003928aee4356845252ac6b662d5c72c29903813eJake Slack return null; 49103928aee4356845252ac6b662d5c72c29903813eJake Slack } 49203928aee4356845252ac6b662d5c72c29903813eJake Slack 49303928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 49403928aee4356845252ac6b662d5c72c29903813eJake Slack /* 49503928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getCharacterEncoding() 49603928aee4356845252ac6b662d5c72c29903813eJake Slack */ 49703928aee4356845252ac6b662d5c72c29903813eJake Slack public String getCharacterEncoding() 49803928aee4356845252ac6b662d5c72c29903813eJake Slack { 49903928aee4356845252ac6b662d5c72c29903813eJake Slack return _characterEncoding; 50003928aee4356845252ac6b662d5c72c29903813eJake Slack } 50103928aee4356845252ac6b662d5c72c29903813eJake Slack 50203928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 50303928aee4356845252ac6b662d5c72c29903813eJake Slack /** 50403928aee4356845252ac6b662d5c72c29903813eJake Slack * @return Returns the connection. 50503928aee4356845252ac6b662d5c72c29903813eJake Slack */ 50603928aee4356845252ac6b662d5c72c29903813eJake Slack public AbstractHttpConnection getConnection() 50703928aee4356845252ac6b662d5c72c29903813eJake Slack { 50803928aee4356845252ac6b662d5c72c29903813eJake Slack return _connection; 50903928aee4356845252ac6b662d5c72c29903813eJake Slack } 51003928aee4356845252ac6b662d5c72c29903813eJake Slack 51103928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 51203928aee4356845252ac6b662d5c72c29903813eJake Slack /* 51303928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getContentLength() 51403928aee4356845252ac6b662d5c72c29903813eJake Slack */ 51503928aee4356845252ac6b662d5c72c29903813eJake Slack public int getContentLength() 51603928aee4356845252ac6b662d5c72c29903813eJake Slack { 51703928aee4356845252ac6b662d5c72c29903813eJake Slack return (int)_connection.getRequestFields().getLongField(HttpHeaders.CONTENT_LENGTH_BUFFER); 51803928aee4356845252ac6b662d5c72c29903813eJake Slack } 51903928aee4356845252ac6b662d5c72c29903813eJake Slack 52003928aee4356845252ac6b662d5c72c29903813eJake Slack public long getContentRead() 52103928aee4356845252ac6b662d5c72c29903813eJake Slack { 52203928aee4356845252ac6b662d5c72c29903813eJake Slack if (_connection == null || _connection.getParser() == null) 52303928aee4356845252ac6b662d5c72c29903813eJake Slack return -1; 52403928aee4356845252ac6b662d5c72c29903813eJake Slack 52503928aee4356845252ac6b662d5c72c29903813eJake Slack return ((HttpParser)_connection.getParser()).getContentRead(); 52603928aee4356845252ac6b662d5c72c29903813eJake Slack } 52703928aee4356845252ac6b662d5c72c29903813eJake Slack 52803928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 52903928aee4356845252ac6b662d5c72c29903813eJake Slack /* 53003928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getContentType() 53103928aee4356845252ac6b662d5c72c29903813eJake Slack */ 53203928aee4356845252ac6b662d5c72c29903813eJake Slack public String getContentType() 53303928aee4356845252ac6b662d5c72c29903813eJake Slack { 53403928aee4356845252ac6b662d5c72c29903813eJake Slack return _connection.getRequestFields().getStringField(HttpHeaders.CONTENT_TYPE_BUFFER); 53503928aee4356845252ac6b662d5c72c29903813eJake Slack } 53603928aee4356845252ac6b662d5c72c29903813eJake Slack 53703928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 53803928aee4356845252ac6b662d5c72c29903813eJake Slack /** 53903928aee4356845252ac6b662d5c72c29903813eJake Slack * @return The current {@link Context context} used for this request, or <code>null</code> if {@link #setContext} has not yet been called. 54003928aee4356845252ac6b662d5c72c29903813eJake Slack */ 54103928aee4356845252ac6b662d5c72c29903813eJake Slack public Context getContext() 54203928aee4356845252ac6b662d5c72c29903813eJake Slack { 54303928aee4356845252ac6b662d5c72c29903813eJake Slack return _context; 54403928aee4356845252ac6b662d5c72c29903813eJake Slack } 54503928aee4356845252ac6b662d5c72c29903813eJake Slack 54603928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 54703928aee4356845252ac6b662d5c72c29903813eJake Slack /* 54803928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getContextPath() 54903928aee4356845252ac6b662d5c72c29903813eJake Slack */ 55003928aee4356845252ac6b662d5c72c29903813eJake Slack public String getContextPath() 55103928aee4356845252ac6b662d5c72c29903813eJake Slack { 55203928aee4356845252ac6b662d5c72c29903813eJake Slack return _contextPath; 55303928aee4356845252ac6b662d5c72c29903813eJake Slack } 55403928aee4356845252ac6b662d5c72c29903813eJake Slack 55503928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 55603928aee4356845252ac6b662d5c72c29903813eJake Slack /* 55703928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getCookies() 55803928aee4356845252ac6b662d5c72c29903813eJake Slack */ 55903928aee4356845252ac6b662d5c72c29903813eJake Slack public Cookie[] getCookies() 56003928aee4356845252ac6b662d5c72c29903813eJake Slack { 56103928aee4356845252ac6b662d5c72c29903813eJake Slack if (_cookiesExtracted) 56203928aee4356845252ac6b662d5c72c29903813eJake Slack return _cookies == null?null:_cookies.getCookies(); 56303928aee4356845252ac6b662d5c72c29903813eJake Slack 56403928aee4356845252ac6b662d5c72c29903813eJake Slack _cookiesExtracted = true; 56503928aee4356845252ac6b662d5c72c29903813eJake Slack 56603928aee4356845252ac6b662d5c72c29903813eJake Slack Enumeration enm = _connection.getRequestFields().getValues(HttpHeaders.COOKIE_BUFFER); 56703928aee4356845252ac6b662d5c72c29903813eJake Slack 56803928aee4356845252ac6b662d5c72c29903813eJake Slack // Handle no cookies 56903928aee4356845252ac6b662d5c72c29903813eJake Slack if (enm != null) 57003928aee4356845252ac6b662d5c72c29903813eJake Slack { 57103928aee4356845252ac6b662d5c72c29903813eJake Slack if (_cookies == null) 57203928aee4356845252ac6b662d5c72c29903813eJake Slack _cookies = new CookieCutter(); 57303928aee4356845252ac6b662d5c72c29903813eJake Slack 57403928aee4356845252ac6b662d5c72c29903813eJake Slack while (enm.hasMoreElements()) 57503928aee4356845252ac6b662d5c72c29903813eJake Slack { 57603928aee4356845252ac6b662d5c72c29903813eJake Slack String c = (String)enm.nextElement(); 57703928aee4356845252ac6b662d5c72c29903813eJake Slack _cookies.addCookieField(c); 57803928aee4356845252ac6b662d5c72c29903813eJake Slack } 57903928aee4356845252ac6b662d5c72c29903813eJake Slack } 58003928aee4356845252ac6b662d5c72c29903813eJake Slack 58103928aee4356845252ac6b662d5c72c29903813eJake Slack return _cookies == null?null:_cookies.getCookies(); 58203928aee4356845252ac6b662d5c72c29903813eJake Slack } 58303928aee4356845252ac6b662d5c72c29903813eJake Slack 58403928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 58503928aee4356845252ac6b662d5c72c29903813eJake Slack /* 58603928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getDateHeader(java.lang.String) 58703928aee4356845252ac6b662d5c72c29903813eJake Slack */ 58803928aee4356845252ac6b662d5c72c29903813eJake Slack public long getDateHeader(String name) 58903928aee4356845252ac6b662d5c72c29903813eJake Slack { 59003928aee4356845252ac6b662d5c72c29903813eJake Slack return _connection.getRequestFields().getDateField(name); 59103928aee4356845252ac6b662d5c72c29903813eJake Slack } 59203928aee4356845252ac6b662d5c72c29903813eJake Slack 59303928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 59403928aee4356845252ac6b662d5c72c29903813eJake Slack public DispatcherType getDispatcherType() 59503928aee4356845252ac6b662d5c72c29903813eJake Slack { 59603928aee4356845252ac6b662d5c72c29903813eJake Slack return _dispatcherType; 59703928aee4356845252ac6b662d5c72c29903813eJake Slack } 59803928aee4356845252ac6b662d5c72c29903813eJake Slack 59903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 60003928aee4356845252ac6b662d5c72c29903813eJake Slack /* 60103928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getHeader(java.lang.String) 60203928aee4356845252ac6b662d5c72c29903813eJake Slack */ 60303928aee4356845252ac6b662d5c72c29903813eJake Slack public String getHeader(String name) 60403928aee4356845252ac6b662d5c72c29903813eJake Slack { 60503928aee4356845252ac6b662d5c72c29903813eJake Slack return _connection.getRequestFields().getStringField(name); 60603928aee4356845252ac6b662d5c72c29903813eJake Slack } 60703928aee4356845252ac6b662d5c72c29903813eJake Slack 60803928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 60903928aee4356845252ac6b662d5c72c29903813eJake Slack /* 61003928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getHeaderNames() 61103928aee4356845252ac6b662d5c72c29903813eJake Slack */ 61203928aee4356845252ac6b662d5c72c29903813eJake Slack public Enumeration getHeaderNames() 61303928aee4356845252ac6b662d5c72c29903813eJake Slack { 61403928aee4356845252ac6b662d5c72c29903813eJake Slack return _connection.getRequestFields().getFieldNames(); 61503928aee4356845252ac6b662d5c72c29903813eJake Slack } 61603928aee4356845252ac6b662d5c72c29903813eJake Slack 61703928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 61803928aee4356845252ac6b662d5c72c29903813eJake Slack /* 61903928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getHeaders(java.lang.String) 62003928aee4356845252ac6b662d5c72c29903813eJake Slack */ 62103928aee4356845252ac6b662d5c72c29903813eJake Slack public Enumeration getHeaders(String name) 62203928aee4356845252ac6b662d5c72c29903813eJake Slack { 62303928aee4356845252ac6b662d5c72c29903813eJake Slack Enumeration e = _connection.getRequestFields().getValues(name); 62403928aee4356845252ac6b662d5c72c29903813eJake Slack if (e == null) 62503928aee4356845252ac6b662d5c72c29903813eJake Slack return Collections.enumeration(Collections.EMPTY_LIST); 62603928aee4356845252ac6b662d5c72c29903813eJake Slack return e; 62703928aee4356845252ac6b662d5c72c29903813eJake Slack } 62803928aee4356845252ac6b662d5c72c29903813eJake Slack 62903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 63003928aee4356845252ac6b662d5c72c29903813eJake Slack /** 63103928aee4356845252ac6b662d5c72c29903813eJake Slack * @return Returns the inputState. 63203928aee4356845252ac6b662d5c72c29903813eJake Slack */ 63303928aee4356845252ac6b662d5c72c29903813eJake Slack public int getInputState() 63403928aee4356845252ac6b662d5c72c29903813eJake Slack { 63503928aee4356845252ac6b662d5c72c29903813eJake Slack return _inputState; 63603928aee4356845252ac6b662d5c72c29903813eJake Slack } 63703928aee4356845252ac6b662d5c72c29903813eJake Slack 63803928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 63903928aee4356845252ac6b662d5c72c29903813eJake Slack /* 64003928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getInputStream() 64103928aee4356845252ac6b662d5c72c29903813eJake Slack */ 64203928aee4356845252ac6b662d5c72c29903813eJake Slack public ServletInputStream getInputStream() throws IOException 64303928aee4356845252ac6b662d5c72c29903813eJake Slack { 64403928aee4356845252ac6b662d5c72c29903813eJake Slack if (_inputState != __NONE && _inputState != _STREAM) 64503928aee4356845252ac6b662d5c72c29903813eJake Slack throw new IllegalStateException("READER"); 64603928aee4356845252ac6b662d5c72c29903813eJake Slack _inputState = _STREAM; 64703928aee4356845252ac6b662d5c72c29903813eJake Slack return _connection.getInputStream(); 64803928aee4356845252ac6b662d5c72c29903813eJake Slack } 64903928aee4356845252ac6b662d5c72c29903813eJake Slack 65003928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 65103928aee4356845252ac6b662d5c72c29903813eJake Slack /* 65203928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getIntHeader(java.lang.String) 65303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 65403928aee4356845252ac6b662d5c72c29903813eJake Slack public int getIntHeader(String name) 65503928aee4356845252ac6b662d5c72c29903813eJake Slack { 65603928aee4356845252ac6b662d5c72c29903813eJake Slack return (int)_connection.getRequestFields().getLongField(name); 65703928aee4356845252ac6b662d5c72c29903813eJake Slack } 65803928aee4356845252ac6b662d5c72c29903813eJake Slack 65903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 66003928aee4356845252ac6b662d5c72c29903813eJake Slack /* 66103928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getLocalAddr() 66203928aee4356845252ac6b662d5c72c29903813eJake Slack */ 66303928aee4356845252ac6b662d5c72c29903813eJake Slack public String getLocalAddr() 66403928aee4356845252ac6b662d5c72c29903813eJake Slack { 66503928aee4356845252ac6b662d5c72c29903813eJake Slack return _endp == null?null:_endp.getLocalAddr(); 66603928aee4356845252ac6b662d5c72c29903813eJake Slack } 66703928aee4356845252ac6b662d5c72c29903813eJake Slack 66803928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 66903928aee4356845252ac6b662d5c72c29903813eJake Slack /* 67003928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getLocale() 67103928aee4356845252ac6b662d5c72c29903813eJake Slack */ 67203928aee4356845252ac6b662d5c72c29903813eJake Slack public Locale getLocale() 67303928aee4356845252ac6b662d5c72c29903813eJake Slack { 67403928aee4356845252ac6b662d5c72c29903813eJake Slack Enumeration enm = _connection.getRequestFields().getValues(HttpHeaders.ACCEPT_LANGUAGE,HttpFields.__separators); 67503928aee4356845252ac6b662d5c72c29903813eJake Slack 67603928aee4356845252ac6b662d5c72c29903813eJake Slack // handle no locale 67703928aee4356845252ac6b662d5c72c29903813eJake Slack if (enm == null || !enm.hasMoreElements()) 67803928aee4356845252ac6b662d5c72c29903813eJake Slack return Locale.getDefault(); 67903928aee4356845252ac6b662d5c72c29903813eJake Slack 68003928aee4356845252ac6b662d5c72c29903813eJake Slack // sort the list in quality order 68103928aee4356845252ac6b662d5c72c29903813eJake Slack List acceptLanguage = HttpFields.qualityList(enm); 68203928aee4356845252ac6b662d5c72c29903813eJake Slack if (acceptLanguage.size() == 0) 68303928aee4356845252ac6b662d5c72c29903813eJake Slack return Locale.getDefault(); 68403928aee4356845252ac6b662d5c72c29903813eJake Slack 68503928aee4356845252ac6b662d5c72c29903813eJake Slack int size = acceptLanguage.size(); 68603928aee4356845252ac6b662d5c72c29903813eJake Slack 68703928aee4356845252ac6b662d5c72c29903813eJake Slack if (size > 0) 68803928aee4356845252ac6b662d5c72c29903813eJake Slack { 68903928aee4356845252ac6b662d5c72c29903813eJake Slack String language = (String)acceptLanguage.get(0); 69003928aee4356845252ac6b662d5c72c29903813eJake Slack language = HttpFields.valueParameters(language,null); 69103928aee4356845252ac6b662d5c72c29903813eJake Slack String country = ""; 69203928aee4356845252ac6b662d5c72c29903813eJake Slack int dash = language.indexOf('-'); 69303928aee4356845252ac6b662d5c72c29903813eJake Slack if (dash > -1) 69403928aee4356845252ac6b662d5c72c29903813eJake Slack { 69503928aee4356845252ac6b662d5c72c29903813eJake Slack country = language.substring(dash + 1).trim(); 69603928aee4356845252ac6b662d5c72c29903813eJake Slack language = language.substring(0,dash).trim(); 69703928aee4356845252ac6b662d5c72c29903813eJake Slack } 69803928aee4356845252ac6b662d5c72c29903813eJake Slack return new Locale(language,country); 69903928aee4356845252ac6b662d5c72c29903813eJake Slack } 70003928aee4356845252ac6b662d5c72c29903813eJake Slack 70103928aee4356845252ac6b662d5c72c29903813eJake Slack return Locale.getDefault(); 70203928aee4356845252ac6b662d5c72c29903813eJake Slack } 70303928aee4356845252ac6b662d5c72c29903813eJake Slack 70403928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 70503928aee4356845252ac6b662d5c72c29903813eJake Slack /* 70603928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getLocales() 70703928aee4356845252ac6b662d5c72c29903813eJake Slack */ 70803928aee4356845252ac6b662d5c72c29903813eJake Slack public Enumeration getLocales() 70903928aee4356845252ac6b662d5c72c29903813eJake Slack { 71003928aee4356845252ac6b662d5c72c29903813eJake Slack 71103928aee4356845252ac6b662d5c72c29903813eJake Slack Enumeration enm = _connection.getRequestFields().getValues(HttpHeaders.ACCEPT_LANGUAGE,HttpFields.__separators); 71203928aee4356845252ac6b662d5c72c29903813eJake Slack 71303928aee4356845252ac6b662d5c72c29903813eJake Slack // handle no locale 71403928aee4356845252ac6b662d5c72c29903813eJake Slack if (enm == null || !enm.hasMoreElements()) 71503928aee4356845252ac6b662d5c72c29903813eJake Slack return Collections.enumeration(__defaultLocale); 71603928aee4356845252ac6b662d5c72c29903813eJake Slack 71703928aee4356845252ac6b662d5c72c29903813eJake Slack // sort the list in quality order 71803928aee4356845252ac6b662d5c72c29903813eJake Slack List acceptLanguage = HttpFields.qualityList(enm); 71903928aee4356845252ac6b662d5c72c29903813eJake Slack 72003928aee4356845252ac6b662d5c72c29903813eJake Slack if (acceptLanguage.size() == 0) 72103928aee4356845252ac6b662d5c72c29903813eJake Slack return Collections.enumeration(__defaultLocale); 72203928aee4356845252ac6b662d5c72c29903813eJake Slack 72303928aee4356845252ac6b662d5c72c29903813eJake Slack Object langs = null; 72403928aee4356845252ac6b662d5c72c29903813eJake Slack int size = acceptLanguage.size(); 72503928aee4356845252ac6b662d5c72c29903813eJake Slack 72603928aee4356845252ac6b662d5c72c29903813eJake Slack // convert to locals 72703928aee4356845252ac6b662d5c72c29903813eJake Slack for (int i = 0; i < size; i++) 72803928aee4356845252ac6b662d5c72c29903813eJake Slack { 72903928aee4356845252ac6b662d5c72c29903813eJake Slack String language = (String)acceptLanguage.get(i); 73003928aee4356845252ac6b662d5c72c29903813eJake Slack language = HttpFields.valueParameters(language,null); 73103928aee4356845252ac6b662d5c72c29903813eJake Slack String country = ""; 73203928aee4356845252ac6b662d5c72c29903813eJake Slack int dash = language.indexOf('-'); 73303928aee4356845252ac6b662d5c72c29903813eJake Slack if (dash > -1) 73403928aee4356845252ac6b662d5c72c29903813eJake Slack { 73503928aee4356845252ac6b662d5c72c29903813eJake Slack country = language.substring(dash + 1).trim(); 73603928aee4356845252ac6b662d5c72c29903813eJake Slack language = language.substring(0,dash).trim(); 73703928aee4356845252ac6b662d5c72c29903813eJake Slack } 73803928aee4356845252ac6b662d5c72c29903813eJake Slack langs = LazyList.ensureSize(langs,size); 73903928aee4356845252ac6b662d5c72c29903813eJake Slack langs = LazyList.add(langs,new Locale(language,country)); 74003928aee4356845252ac6b662d5c72c29903813eJake Slack } 74103928aee4356845252ac6b662d5c72c29903813eJake Slack 74203928aee4356845252ac6b662d5c72c29903813eJake Slack if (LazyList.size(langs) == 0) 74303928aee4356845252ac6b662d5c72c29903813eJake Slack return Collections.enumeration(__defaultLocale); 74403928aee4356845252ac6b662d5c72c29903813eJake Slack 74503928aee4356845252ac6b662d5c72c29903813eJake Slack return Collections.enumeration(LazyList.getList(langs)); 74603928aee4356845252ac6b662d5c72c29903813eJake Slack } 74703928aee4356845252ac6b662d5c72c29903813eJake Slack 74803928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 74903928aee4356845252ac6b662d5c72c29903813eJake Slack /* 75003928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getLocalName() 75103928aee4356845252ac6b662d5c72c29903813eJake Slack */ 75203928aee4356845252ac6b662d5c72c29903813eJake Slack public String getLocalName() 75303928aee4356845252ac6b662d5c72c29903813eJake Slack { 75403928aee4356845252ac6b662d5c72c29903813eJake Slack if (_endp == null) 75503928aee4356845252ac6b662d5c72c29903813eJake Slack return null; 75603928aee4356845252ac6b662d5c72c29903813eJake Slack if (_dns) 75703928aee4356845252ac6b662d5c72c29903813eJake Slack return _endp.getLocalHost(); 75803928aee4356845252ac6b662d5c72c29903813eJake Slack 75903928aee4356845252ac6b662d5c72c29903813eJake Slack String local = _endp.getLocalAddr(); 76003928aee4356845252ac6b662d5c72c29903813eJake Slack if (local != null && local.indexOf(':') >= 0) 76103928aee4356845252ac6b662d5c72c29903813eJake Slack local = "[" + local + "]"; 76203928aee4356845252ac6b662d5c72c29903813eJake Slack return local; 76303928aee4356845252ac6b662d5c72c29903813eJake Slack } 76403928aee4356845252ac6b662d5c72c29903813eJake Slack 76503928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 76603928aee4356845252ac6b662d5c72c29903813eJake Slack /* 76703928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getLocalPort() 76803928aee4356845252ac6b662d5c72c29903813eJake Slack */ 76903928aee4356845252ac6b662d5c72c29903813eJake Slack public int getLocalPort() 77003928aee4356845252ac6b662d5c72c29903813eJake Slack { 77103928aee4356845252ac6b662d5c72c29903813eJake Slack return _endp == null?0:_endp.getLocalPort(); 77203928aee4356845252ac6b662d5c72c29903813eJake Slack } 77303928aee4356845252ac6b662d5c72c29903813eJake Slack 77403928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 77503928aee4356845252ac6b662d5c72c29903813eJake Slack /* 77603928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getMethod() 77703928aee4356845252ac6b662d5c72c29903813eJake Slack */ 77803928aee4356845252ac6b662d5c72c29903813eJake Slack public String getMethod() 77903928aee4356845252ac6b662d5c72c29903813eJake Slack { 78003928aee4356845252ac6b662d5c72c29903813eJake Slack return _method; 78103928aee4356845252ac6b662d5c72c29903813eJake Slack } 78203928aee4356845252ac6b662d5c72c29903813eJake Slack 78303928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 78403928aee4356845252ac6b662d5c72c29903813eJake Slack /* 78503928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getParameter(java.lang.String) 78603928aee4356845252ac6b662d5c72c29903813eJake Slack */ 78703928aee4356845252ac6b662d5c72c29903813eJake Slack public String getParameter(String name) 78803928aee4356845252ac6b662d5c72c29903813eJake Slack { 78903928aee4356845252ac6b662d5c72c29903813eJake Slack if (!_paramsExtracted) 79003928aee4356845252ac6b662d5c72c29903813eJake Slack extractParameters(); 79103928aee4356845252ac6b662d5c72c29903813eJake Slack return (String)_parameters.getValue(name,0); 79203928aee4356845252ac6b662d5c72c29903813eJake Slack } 79303928aee4356845252ac6b662d5c72c29903813eJake Slack 79403928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 79503928aee4356845252ac6b662d5c72c29903813eJake Slack /* 79603928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getParameterMap() 79703928aee4356845252ac6b662d5c72c29903813eJake Slack */ 79803928aee4356845252ac6b662d5c72c29903813eJake Slack public Map getParameterMap() 79903928aee4356845252ac6b662d5c72c29903813eJake Slack { 80003928aee4356845252ac6b662d5c72c29903813eJake Slack if (!_paramsExtracted) 80103928aee4356845252ac6b662d5c72c29903813eJake Slack extractParameters(); 80203928aee4356845252ac6b662d5c72c29903813eJake Slack 80303928aee4356845252ac6b662d5c72c29903813eJake Slack return Collections.unmodifiableMap(_parameters.toStringArrayMap()); 80403928aee4356845252ac6b662d5c72c29903813eJake Slack } 80503928aee4356845252ac6b662d5c72c29903813eJake Slack 80603928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 80703928aee4356845252ac6b662d5c72c29903813eJake Slack /* 80803928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getParameterNames() 80903928aee4356845252ac6b662d5c72c29903813eJake Slack */ 81003928aee4356845252ac6b662d5c72c29903813eJake Slack public Enumeration getParameterNames() 81103928aee4356845252ac6b662d5c72c29903813eJake Slack { 81203928aee4356845252ac6b662d5c72c29903813eJake Slack if (!_paramsExtracted) 81303928aee4356845252ac6b662d5c72c29903813eJake Slack extractParameters(); 81403928aee4356845252ac6b662d5c72c29903813eJake Slack return Collections.enumeration(_parameters.keySet()); 81503928aee4356845252ac6b662d5c72c29903813eJake Slack } 81603928aee4356845252ac6b662d5c72c29903813eJake Slack 81703928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 81803928aee4356845252ac6b662d5c72c29903813eJake Slack /** 81903928aee4356845252ac6b662d5c72c29903813eJake Slack * @return Returns the parameters. 82003928aee4356845252ac6b662d5c72c29903813eJake Slack */ 82103928aee4356845252ac6b662d5c72c29903813eJake Slack public MultiMap<String> getParameters() 82203928aee4356845252ac6b662d5c72c29903813eJake Slack { 82303928aee4356845252ac6b662d5c72c29903813eJake Slack return _parameters; 82403928aee4356845252ac6b662d5c72c29903813eJake Slack } 82503928aee4356845252ac6b662d5c72c29903813eJake Slack 82603928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 82703928aee4356845252ac6b662d5c72c29903813eJake Slack /* 82803928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getParameterValues(java.lang.String) 82903928aee4356845252ac6b662d5c72c29903813eJake Slack */ 83003928aee4356845252ac6b662d5c72c29903813eJake Slack public String[] getParameterValues(String name) 83103928aee4356845252ac6b662d5c72c29903813eJake Slack { 83203928aee4356845252ac6b662d5c72c29903813eJake Slack if (!_paramsExtracted) 83303928aee4356845252ac6b662d5c72c29903813eJake Slack extractParameters(); 83403928aee4356845252ac6b662d5c72c29903813eJake Slack List<Object> vals = _parameters.getValues(name); 83503928aee4356845252ac6b662d5c72c29903813eJake Slack if (vals == null) 83603928aee4356845252ac6b662d5c72c29903813eJake Slack return null; 83703928aee4356845252ac6b662d5c72c29903813eJake Slack return vals.toArray(new String[vals.size()]); 83803928aee4356845252ac6b662d5c72c29903813eJake Slack } 83903928aee4356845252ac6b662d5c72c29903813eJake Slack 84003928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 84103928aee4356845252ac6b662d5c72c29903813eJake Slack /* 84203928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getPathInfo() 84303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 84403928aee4356845252ac6b662d5c72c29903813eJake Slack public String getPathInfo() 84503928aee4356845252ac6b662d5c72c29903813eJake Slack { 84603928aee4356845252ac6b662d5c72c29903813eJake Slack return _pathInfo; 84703928aee4356845252ac6b662d5c72c29903813eJake Slack } 84803928aee4356845252ac6b662d5c72c29903813eJake Slack 84903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 85003928aee4356845252ac6b662d5c72c29903813eJake Slack /* 85103928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getPathTranslated() 85203928aee4356845252ac6b662d5c72c29903813eJake Slack */ 85303928aee4356845252ac6b662d5c72c29903813eJake Slack public String getPathTranslated() 85403928aee4356845252ac6b662d5c72c29903813eJake Slack { 85503928aee4356845252ac6b662d5c72c29903813eJake Slack if (_pathInfo == null || _context == null) 85603928aee4356845252ac6b662d5c72c29903813eJake Slack return null; 85703928aee4356845252ac6b662d5c72c29903813eJake Slack return _context.getRealPath(_pathInfo); 85803928aee4356845252ac6b662d5c72c29903813eJake Slack } 85903928aee4356845252ac6b662d5c72c29903813eJake Slack 86003928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 86103928aee4356845252ac6b662d5c72c29903813eJake Slack /* 86203928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getProtocol() 86303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 86403928aee4356845252ac6b662d5c72c29903813eJake Slack public String getProtocol() 86503928aee4356845252ac6b662d5c72c29903813eJake Slack { 86603928aee4356845252ac6b662d5c72c29903813eJake Slack return _protocol; 86703928aee4356845252ac6b662d5c72c29903813eJake Slack } 86803928aee4356845252ac6b662d5c72c29903813eJake Slack 86903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 87003928aee4356845252ac6b662d5c72c29903813eJake Slack public String getQueryEncoding() 87103928aee4356845252ac6b662d5c72c29903813eJake Slack { 87203928aee4356845252ac6b662d5c72c29903813eJake Slack return _queryEncoding; 87303928aee4356845252ac6b662d5c72c29903813eJake Slack } 87403928aee4356845252ac6b662d5c72c29903813eJake Slack 87503928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 87603928aee4356845252ac6b662d5c72c29903813eJake Slack /* 87703928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getQueryString() 87803928aee4356845252ac6b662d5c72c29903813eJake Slack */ 87903928aee4356845252ac6b662d5c72c29903813eJake Slack public String getQueryString() 88003928aee4356845252ac6b662d5c72c29903813eJake Slack { 88103928aee4356845252ac6b662d5c72c29903813eJake Slack if (_queryString == null && _uri != null) 88203928aee4356845252ac6b662d5c72c29903813eJake Slack { 88303928aee4356845252ac6b662d5c72c29903813eJake Slack if (_queryEncoding == null) 88403928aee4356845252ac6b662d5c72c29903813eJake Slack _queryString = _uri.getQuery(); 88503928aee4356845252ac6b662d5c72c29903813eJake Slack else 88603928aee4356845252ac6b662d5c72c29903813eJake Slack _queryString = _uri.getQuery(_queryEncoding); 88703928aee4356845252ac6b662d5c72c29903813eJake Slack } 88803928aee4356845252ac6b662d5c72c29903813eJake Slack return _queryString; 88903928aee4356845252ac6b662d5c72c29903813eJake Slack } 89003928aee4356845252ac6b662d5c72c29903813eJake Slack 89103928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 89203928aee4356845252ac6b662d5c72c29903813eJake Slack /* 89303928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getReader() 89403928aee4356845252ac6b662d5c72c29903813eJake Slack */ 89503928aee4356845252ac6b662d5c72c29903813eJake Slack public BufferedReader getReader() throws IOException 89603928aee4356845252ac6b662d5c72c29903813eJake Slack { 89703928aee4356845252ac6b662d5c72c29903813eJake Slack if (_inputState != __NONE && _inputState != __READER) 89803928aee4356845252ac6b662d5c72c29903813eJake Slack throw new IllegalStateException("STREAMED"); 89903928aee4356845252ac6b662d5c72c29903813eJake Slack 90003928aee4356845252ac6b662d5c72c29903813eJake Slack if (_inputState == __READER) 90103928aee4356845252ac6b662d5c72c29903813eJake Slack return _reader; 90203928aee4356845252ac6b662d5c72c29903813eJake Slack 90303928aee4356845252ac6b662d5c72c29903813eJake Slack String encoding = getCharacterEncoding(); 90403928aee4356845252ac6b662d5c72c29903813eJake Slack if (encoding == null) 90503928aee4356845252ac6b662d5c72c29903813eJake Slack encoding = StringUtil.__ISO_8859_1; 90603928aee4356845252ac6b662d5c72c29903813eJake Slack 90703928aee4356845252ac6b662d5c72c29903813eJake Slack if (_reader == null || !encoding.equalsIgnoreCase(_readerEncoding)) 90803928aee4356845252ac6b662d5c72c29903813eJake Slack { 90903928aee4356845252ac6b662d5c72c29903813eJake Slack final ServletInputStream in = getInputStream(); 91003928aee4356845252ac6b662d5c72c29903813eJake Slack _readerEncoding = encoding; 91103928aee4356845252ac6b662d5c72c29903813eJake Slack _reader = new BufferedReader(new InputStreamReader(in,encoding)) 91203928aee4356845252ac6b662d5c72c29903813eJake Slack { 91303928aee4356845252ac6b662d5c72c29903813eJake Slack @Override 91403928aee4356845252ac6b662d5c72c29903813eJake Slack public void close() throws IOException 91503928aee4356845252ac6b662d5c72c29903813eJake Slack { 91603928aee4356845252ac6b662d5c72c29903813eJake Slack in.close(); 91703928aee4356845252ac6b662d5c72c29903813eJake Slack } 91803928aee4356845252ac6b662d5c72c29903813eJake Slack }; 91903928aee4356845252ac6b662d5c72c29903813eJake Slack } 92003928aee4356845252ac6b662d5c72c29903813eJake Slack _inputState = __READER; 92103928aee4356845252ac6b662d5c72c29903813eJake Slack return _reader; 92203928aee4356845252ac6b662d5c72c29903813eJake Slack } 92303928aee4356845252ac6b662d5c72c29903813eJake Slack 92403928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 92503928aee4356845252ac6b662d5c72c29903813eJake Slack /* 92603928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getRealPath(java.lang.String) 92703928aee4356845252ac6b662d5c72c29903813eJake Slack */ 92803928aee4356845252ac6b662d5c72c29903813eJake Slack public String getRealPath(String path) 92903928aee4356845252ac6b662d5c72c29903813eJake Slack { 93003928aee4356845252ac6b662d5c72c29903813eJake Slack if (_context == null) 93103928aee4356845252ac6b662d5c72c29903813eJake Slack return null; 93203928aee4356845252ac6b662d5c72c29903813eJake Slack return _context.getRealPath(path); 93303928aee4356845252ac6b662d5c72c29903813eJake Slack } 93403928aee4356845252ac6b662d5c72c29903813eJake Slack 93503928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 93603928aee4356845252ac6b662d5c72c29903813eJake Slack /* 93703928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getRemoteAddr() 93803928aee4356845252ac6b662d5c72c29903813eJake Slack */ 93903928aee4356845252ac6b662d5c72c29903813eJake Slack public String getRemoteAddr() 94003928aee4356845252ac6b662d5c72c29903813eJake Slack { 94103928aee4356845252ac6b662d5c72c29903813eJake Slack if (_remoteAddr != null) 94203928aee4356845252ac6b662d5c72c29903813eJake Slack return _remoteAddr; 94303928aee4356845252ac6b662d5c72c29903813eJake Slack return _endp == null?null:_endp.getRemoteAddr(); 94403928aee4356845252ac6b662d5c72c29903813eJake Slack } 94503928aee4356845252ac6b662d5c72c29903813eJake Slack 94603928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 94703928aee4356845252ac6b662d5c72c29903813eJake Slack /* 94803928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getRemoteHost() 94903928aee4356845252ac6b662d5c72c29903813eJake Slack */ 95003928aee4356845252ac6b662d5c72c29903813eJake Slack public String getRemoteHost() 95103928aee4356845252ac6b662d5c72c29903813eJake Slack { 95203928aee4356845252ac6b662d5c72c29903813eJake Slack if (_dns) 95303928aee4356845252ac6b662d5c72c29903813eJake Slack { 95403928aee4356845252ac6b662d5c72c29903813eJake Slack if (_remoteHost != null) 95503928aee4356845252ac6b662d5c72c29903813eJake Slack { 95603928aee4356845252ac6b662d5c72c29903813eJake Slack return _remoteHost; 95703928aee4356845252ac6b662d5c72c29903813eJake Slack } 95803928aee4356845252ac6b662d5c72c29903813eJake Slack return _endp == null?null:_endp.getRemoteHost(); 95903928aee4356845252ac6b662d5c72c29903813eJake Slack } 96003928aee4356845252ac6b662d5c72c29903813eJake Slack return getRemoteAddr(); 96103928aee4356845252ac6b662d5c72c29903813eJake Slack } 96203928aee4356845252ac6b662d5c72c29903813eJake Slack 96303928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 96403928aee4356845252ac6b662d5c72c29903813eJake Slack /* 96503928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getRemotePort() 96603928aee4356845252ac6b662d5c72c29903813eJake Slack */ 96703928aee4356845252ac6b662d5c72c29903813eJake Slack public int getRemotePort() 96803928aee4356845252ac6b662d5c72c29903813eJake Slack { 96903928aee4356845252ac6b662d5c72c29903813eJake Slack return _endp == null?0:_endp.getRemotePort(); 97003928aee4356845252ac6b662d5c72c29903813eJake Slack } 97103928aee4356845252ac6b662d5c72c29903813eJake Slack 97203928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 97303928aee4356845252ac6b662d5c72c29903813eJake Slack /* 97403928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getRemoteUser() 97503928aee4356845252ac6b662d5c72c29903813eJake Slack */ 97603928aee4356845252ac6b662d5c72c29903813eJake Slack public String getRemoteUser() 97703928aee4356845252ac6b662d5c72c29903813eJake Slack { 97803928aee4356845252ac6b662d5c72c29903813eJake Slack Principal p = getUserPrincipal(); 97903928aee4356845252ac6b662d5c72c29903813eJake Slack if (p == null) 98003928aee4356845252ac6b662d5c72c29903813eJake Slack return null; 98103928aee4356845252ac6b662d5c72c29903813eJake Slack return p.getName(); 98203928aee4356845252ac6b662d5c72c29903813eJake Slack } 98303928aee4356845252ac6b662d5c72c29903813eJake Slack 98403928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 98503928aee4356845252ac6b662d5c72c29903813eJake Slack /* 98603928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getRequestDispatcher(java.lang.String) 98703928aee4356845252ac6b662d5c72c29903813eJake Slack */ 98803928aee4356845252ac6b662d5c72c29903813eJake Slack public RequestDispatcher getRequestDispatcher(String path) 98903928aee4356845252ac6b662d5c72c29903813eJake Slack { 99003928aee4356845252ac6b662d5c72c29903813eJake Slack if (path == null || _context == null) 99103928aee4356845252ac6b662d5c72c29903813eJake Slack return null; 99203928aee4356845252ac6b662d5c72c29903813eJake Slack 99303928aee4356845252ac6b662d5c72c29903813eJake Slack // handle relative path 99403928aee4356845252ac6b662d5c72c29903813eJake Slack if (!path.startsWith("/")) 99503928aee4356845252ac6b662d5c72c29903813eJake Slack { 99603928aee4356845252ac6b662d5c72c29903813eJake Slack String relTo = URIUtil.addPaths(_servletPath,_pathInfo); 99703928aee4356845252ac6b662d5c72c29903813eJake Slack int slash = relTo.lastIndexOf("/"); 99803928aee4356845252ac6b662d5c72c29903813eJake Slack if (slash > 1) 99903928aee4356845252ac6b662d5c72c29903813eJake Slack relTo = relTo.substring(0,slash + 1); 100003928aee4356845252ac6b662d5c72c29903813eJake Slack else 100103928aee4356845252ac6b662d5c72c29903813eJake Slack relTo = "/"; 100203928aee4356845252ac6b662d5c72c29903813eJake Slack path = URIUtil.addPaths(relTo,path); 100303928aee4356845252ac6b662d5c72c29903813eJake Slack } 100403928aee4356845252ac6b662d5c72c29903813eJake Slack 100503928aee4356845252ac6b662d5c72c29903813eJake Slack return _context.getRequestDispatcher(path); 100603928aee4356845252ac6b662d5c72c29903813eJake Slack } 100703928aee4356845252ac6b662d5c72c29903813eJake Slack 100803928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 100903928aee4356845252ac6b662d5c72c29903813eJake Slack /* 101003928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getRequestedSessionId() 101103928aee4356845252ac6b662d5c72c29903813eJake Slack */ 101203928aee4356845252ac6b662d5c72c29903813eJake Slack public String getRequestedSessionId() 101303928aee4356845252ac6b662d5c72c29903813eJake Slack { 101403928aee4356845252ac6b662d5c72c29903813eJake Slack return _requestedSessionId; 101503928aee4356845252ac6b662d5c72c29903813eJake Slack } 101603928aee4356845252ac6b662d5c72c29903813eJake Slack 101703928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 101803928aee4356845252ac6b662d5c72c29903813eJake Slack /* 101903928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getRequestURI() 102003928aee4356845252ac6b662d5c72c29903813eJake Slack */ 102103928aee4356845252ac6b662d5c72c29903813eJake Slack public String getRequestURI() 102203928aee4356845252ac6b662d5c72c29903813eJake Slack { 102303928aee4356845252ac6b662d5c72c29903813eJake Slack if (_requestURI == null && _uri != null) 102403928aee4356845252ac6b662d5c72c29903813eJake Slack _requestURI = _uri.getPathAndParam(); 102503928aee4356845252ac6b662d5c72c29903813eJake Slack return _requestURI; 102603928aee4356845252ac6b662d5c72c29903813eJake Slack } 102703928aee4356845252ac6b662d5c72c29903813eJake Slack 102803928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 102903928aee4356845252ac6b662d5c72c29903813eJake Slack /* 103003928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getRequestURL() 103103928aee4356845252ac6b662d5c72c29903813eJake Slack */ 103203928aee4356845252ac6b662d5c72c29903813eJake Slack public StringBuffer getRequestURL() 103303928aee4356845252ac6b662d5c72c29903813eJake Slack { 103403928aee4356845252ac6b662d5c72c29903813eJake Slack final StringBuffer url = new StringBuffer(48); 103503928aee4356845252ac6b662d5c72c29903813eJake Slack synchronized (url) 103603928aee4356845252ac6b662d5c72c29903813eJake Slack { 103703928aee4356845252ac6b662d5c72c29903813eJake Slack String scheme = getScheme(); 103803928aee4356845252ac6b662d5c72c29903813eJake Slack int port = getServerPort(); 103903928aee4356845252ac6b662d5c72c29903813eJake Slack 104003928aee4356845252ac6b662d5c72c29903813eJake Slack url.append(scheme); 104103928aee4356845252ac6b662d5c72c29903813eJake Slack url.append("://"); 104203928aee4356845252ac6b662d5c72c29903813eJake Slack url.append(getServerName()); 104303928aee4356845252ac6b662d5c72c29903813eJake Slack if (_port > 0 && ((scheme.equalsIgnoreCase(URIUtil.HTTP) && port != 80) || (scheme.equalsIgnoreCase(URIUtil.HTTPS) && port != 443))) 104403928aee4356845252ac6b662d5c72c29903813eJake Slack { 104503928aee4356845252ac6b662d5c72c29903813eJake Slack url.append(':'); 104603928aee4356845252ac6b662d5c72c29903813eJake Slack url.append(_port); 104703928aee4356845252ac6b662d5c72c29903813eJake Slack } 104803928aee4356845252ac6b662d5c72c29903813eJake Slack 104903928aee4356845252ac6b662d5c72c29903813eJake Slack url.append(getRequestURI()); 105003928aee4356845252ac6b662d5c72c29903813eJake Slack return url; 105103928aee4356845252ac6b662d5c72c29903813eJake Slack } 105203928aee4356845252ac6b662d5c72c29903813eJake Slack } 105303928aee4356845252ac6b662d5c72c29903813eJake Slack 105403928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 105503928aee4356845252ac6b662d5c72c29903813eJake Slack public Response getResponse() 105603928aee4356845252ac6b662d5c72c29903813eJake Slack { 105703928aee4356845252ac6b662d5c72c29903813eJake Slack return _connection._response; 105803928aee4356845252ac6b662d5c72c29903813eJake Slack } 105903928aee4356845252ac6b662d5c72c29903813eJake Slack 106003928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 106103928aee4356845252ac6b662d5c72c29903813eJake Slack /** 106203928aee4356845252ac6b662d5c72c29903813eJake Slack * Reconstructs the URL the client used to make the request. The returned URL contains a protocol, server name, port number, and, but it does not include a 106303928aee4356845252ac6b662d5c72c29903813eJake Slack * path. 106403928aee4356845252ac6b662d5c72c29903813eJake Slack * <p> 106503928aee4356845252ac6b662d5c72c29903813eJake Slack * Because this method returns a <code>StringBuffer</code>, not a string, you can modify the URL easily, for example, to append path and query parameters. 106603928aee4356845252ac6b662d5c72c29903813eJake Slack * 106703928aee4356845252ac6b662d5c72c29903813eJake Slack * This method is useful for creating redirect messages and for reporting errors. 106803928aee4356845252ac6b662d5c72c29903813eJake Slack * 106903928aee4356845252ac6b662d5c72c29903813eJake Slack * @return "scheme://host:port" 107003928aee4356845252ac6b662d5c72c29903813eJake Slack */ 107103928aee4356845252ac6b662d5c72c29903813eJake Slack public StringBuilder getRootURL() 107203928aee4356845252ac6b662d5c72c29903813eJake Slack { 107303928aee4356845252ac6b662d5c72c29903813eJake Slack StringBuilder url = new StringBuilder(48); 107403928aee4356845252ac6b662d5c72c29903813eJake Slack String scheme = getScheme(); 107503928aee4356845252ac6b662d5c72c29903813eJake Slack int port = getServerPort(); 107603928aee4356845252ac6b662d5c72c29903813eJake Slack 107703928aee4356845252ac6b662d5c72c29903813eJake Slack url.append(scheme); 107803928aee4356845252ac6b662d5c72c29903813eJake Slack url.append("://"); 107903928aee4356845252ac6b662d5c72c29903813eJake Slack url.append(getServerName()); 108003928aee4356845252ac6b662d5c72c29903813eJake Slack 108103928aee4356845252ac6b662d5c72c29903813eJake Slack if (port > 0 && ((scheme.equalsIgnoreCase("http") && port != 80) || (scheme.equalsIgnoreCase("https") && port != 443))) 108203928aee4356845252ac6b662d5c72c29903813eJake Slack { 108303928aee4356845252ac6b662d5c72c29903813eJake Slack url.append(':'); 108403928aee4356845252ac6b662d5c72c29903813eJake Slack url.append(port); 108503928aee4356845252ac6b662d5c72c29903813eJake Slack } 108603928aee4356845252ac6b662d5c72c29903813eJake Slack return url; 108703928aee4356845252ac6b662d5c72c29903813eJake Slack } 108803928aee4356845252ac6b662d5c72c29903813eJake Slack 108903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 109003928aee4356845252ac6b662d5c72c29903813eJake Slack /* 109103928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getScheme() 109203928aee4356845252ac6b662d5c72c29903813eJake Slack */ 109303928aee4356845252ac6b662d5c72c29903813eJake Slack public String getScheme() 109403928aee4356845252ac6b662d5c72c29903813eJake Slack { 109503928aee4356845252ac6b662d5c72c29903813eJake Slack return _scheme; 109603928aee4356845252ac6b662d5c72c29903813eJake Slack } 109703928aee4356845252ac6b662d5c72c29903813eJake Slack 109803928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 109903928aee4356845252ac6b662d5c72c29903813eJake Slack /* 110003928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getServerName() 110103928aee4356845252ac6b662d5c72c29903813eJake Slack */ 110203928aee4356845252ac6b662d5c72c29903813eJake Slack public String getServerName() 110303928aee4356845252ac6b662d5c72c29903813eJake Slack { 110403928aee4356845252ac6b662d5c72c29903813eJake Slack // Return already determined host 110503928aee4356845252ac6b662d5c72c29903813eJake Slack if (_serverName != null) 110603928aee4356845252ac6b662d5c72c29903813eJake Slack return _serverName; 110703928aee4356845252ac6b662d5c72c29903813eJake Slack 110803928aee4356845252ac6b662d5c72c29903813eJake Slack if (_uri == null) 110903928aee4356845252ac6b662d5c72c29903813eJake Slack throw new IllegalStateException("No uri"); 111003928aee4356845252ac6b662d5c72c29903813eJake Slack 111103928aee4356845252ac6b662d5c72c29903813eJake Slack // Return host from absolute URI 111203928aee4356845252ac6b662d5c72c29903813eJake Slack _serverName = _uri.getHost(); 111303928aee4356845252ac6b662d5c72c29903813eJake Slack _port = _uri.getPort(); 111403928aee4356845252ac6b662d5c72c29903813eJake Slack if (_serverName != null) 111503928aee4356845252ac6b662d5c72c29903813eJake Slack return _serverName; 111603928aee4356845252ac6b662d5c72c29903813eJake Slack 111703928aee4356845252ac6b662d5c72c29903813eJake Slack // Return host from header field 111803928aee4356845252ac6b662d5c72c29903813eJake Slack Buffer hostPort = _connection.getRequestFields().get(HttpHeaders.HOST_BUFFER); 111903928aee4356845252ac6b662d5c72c29903813eJake Slack if (hostPort != null) 112003928aee4356845252ac6b662d5c72c29903813eJake Slack { 112103928aee4356845252ac6b662d5c72c29903813eJake Slack loop: for (int i = hostPort.putIndex(); i-- > hostPort.getIndex();) 112203928aee4356845252ac6b662d5c72c29903813eJake Slack { 112303928aee4356845252ac6b662d5c72c29903813eJake Slack char ch = (char)(0xff & hostPort.peek(i)); 112403928aee4356845252ac6b662d5c72c29903813eJake Slack switch (ch) 112503928aee4356845252ac6b662d5c72c29903813eJake Slack { 112603928aee4356845252ac6b662d5c72c29903813eJake Slack case ']': 112703928aee4356845252ac6b662d5c72c29903813eJake Slack break loop; 112803928aee4356845252ac6b662d5c72c29903813eJake Slack 112903928aee4356845252ac6b662d5c72c29903813eJake Slack case ':': 113003928aee4356845252ac6b662d5c72c29903813eJake Slack _serverName = BufferUtil.to8859_1_String(hostPort.peek(hostPort.getIndex(),i - hostPort.getIndex())); 113103928aee4356845252ac6b662d5c72c29903813eJake Slack try 113203928aee4356845252ac6b662d5c72c29903813eJake Slack { 113303928aee4356845252ac6b662d5c72c29903813eJake Slack _port = BufferUtil.toInt(hostPort.peek(i + 1,hostPort.putIndex() - i - 1)); 113403928aee4356845252ac6b662d5c72c29903813eJake Slack } 113503928aee4356845252ac6b662d5c72c29903813eJake Slack catch (NumberFormatException e) 113603928aee4356845252ac6b662d5c72c29903813eJake Slack { 113703928aee4356845252ac6b662d5c72c29903813eJake Slack try 113803928aee4356845252ac6b662d5c72c29903813eJake Slack { 113903928aee4356845252ac6b662d5c72c29903813eJake Slack if (_connection != null) 114003928aee4356845252ac6b662d5c72c29903813eJake Slack _connection._generator.sendError(HttpStatus.BAD_REQUEST_400,"Bad Host header",null,true); 114103928aee4356845252ac6b662d5c72c29903813eJake Slack } 114203928aee4356845252ac6b662d5c72c29903813eJake Slack catch (IOException e1) 114303928aee4356845252ac6b662d5c72c29903813eJake Slack { 114403928aee4356845252ac6b662d5c72c29903813eJake Slack throw new RuntimeException(e1); 114503928aee4356845252ac6b662d5c72c29903813eJake Slack } 114603928aee4356845252ac6b662d5c72c29903813eJake Slack } 114703928aee4356845252ac6b662d5c72c29903813eJake Slack return _serverName; 114803928aee4356845252ac6b662d5c72c29903813eJake Slack } 114903928aee4356845252ac6b662d5c72c29903813eJake Slack } 115003928aee4356845252ac6b662d5c72c29903813eJake Slack if (_serverName == null || _port < 0) 115103928aee4356845252ac6b662d5c72c29903813eJake Slack { 115203928aee4356845252ac6b662d5c72c29903813eJake Slack _serverName = BufferUtil.to8859_1_String(hostPort); 115303928aee4356845252ac6b662d5c72c29903813eJake Slack _port = 0; 115403928aee4356845252ac6b662d5c72c29903813eJake Slack } 115503928aee4356845252ac6b662d5c72c29903813eJake Slack 115603928aee4356845252ac6b662d5c72c29903813eJake Slack return _serverName; 115703928aee4356845252ac6b662d5c72c29903813eJake Slack } 115803928aee4356845252ac6b662d5c72c29903813eJake Slack 115903928aee4356845252ac6b662d5c72c29903813eJake Slack // Return host from connection 116003928aee4356845252ac6b662d5c72c29903813eJake Slack if (_connection != null) 116103928aee4356845252ac6b662d5c72c29903813eJake Slack { 116203928aee4356845252ac6b662d5c72c29903813eJake Slack _serverName = getLocalName(); 116303928aee4356845252ac6b662d5c72c29903813eJake Slack _port = getLocalPort(); 116403928aee4356845252ac6b662d5c72c29903813eJake Slack if (_serverName != null && !StringUtil.ALL_INTERFACES.equals(_serverName)) 116503928aee4356845252ac6b662d5c72c29903813eJake Slack return _serverName; 116603928aee4356845252ac6b662d5c72c29903813eJake Slack } 116703928aee4356845252ac6b662d5c72c29903813eJake Slack 116803928aee4356845252ac6b662d5c72c29903813eJake Slack // Return the local host 116903928aee4356845252ac6b662d5c72c29903813eJake Slack try 117003928aee4356845252ac6b662d5c72c29903813eJake Slack { 117103928aee4356845252ac6b662d5c72c29903813eJake Slack _serverName = InetAddress.getLocalHost().getHostAddress(); 117203928aee4356845252ac6b662d5c72c29903813eJake Slack } 117303928aee4356845252ac6b662d5c72c29903813eJake Slack catch (java.net.UnknownHostException e) 117403928aee4356845252ac6b662d5c72c29903813eJake Slack { 117503928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.ignore(e); 117603928aee4356845252ac6b662d5c72c29903813eJake Slack } 117703928aee4356845252ac6b662d5c72c29903813eJake Slack return _serverName; 117803928aee4356845252ac6b662d5c72c29903813eJake Slack } 117903928aee4356845252ac6b662d5c72c29903813eJake Slack 118003928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 118103928aee4356845252ac6b662d5c72c29903813eJake Slack /* 118203928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getServerPort() 118303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 118403928aee4356845252ac6b662d5c72c29903813eJake Slack public int getServerPort() 118503928aee4356845252ac6b662d5c72c29903813eJake Slack { 118603928aee4356845252ac6b662d5c72c29903813eJake Slack if (_port <= 0) 118703928aee4356845252ac6b662d5c72c29903813eJake Slack { 118803928aee4356845252ac6b662d5c72c29903813eJake Slack if (_serverName == null) 118903928aee4356845252ac6b662d5c72c29903813eJake Slack getServerName(); 119003928aee4356845252ac6b662d5c72c29903813eJake Slack 119103928aee4356845252ac6b662d5c72c29903813eJake Slack if (_port <= 0) 119203928aee4356845252ac6b662d5c72c29903813eJake Slack { 119303928aee4356845252ac6b662d5c72c29903813eJake Slack if (_serverName != null && _uri != null) 119403928aee4356845252ac6b662d5c72c29903813eJake Slack _port = _uri.getPort(); 119503928aee4356845252ac6b662d5c72c29903813eJake Slack else 119603928aee4356845252ac6b662d5c72c29903813eJake Slack _port = _endp == null?0:_endp.getLocalPort(); 119703928aee4356845252ac6b662d5c72c29903813eJake Slack } 119803928aee4356845252ac6b662d5c72c29903813eJake Slack } 119903928aee4356845252ac6b662d5c72c29903813eJake Slack 120003928aee4356845252ac6b662d5c72c29903813eJake Slack if (_port <= 0) 120103928aee4356845252ac6b662d5c72c29903813eJake Slack { 120203928aee4356845252ac6b662d5c72c29903813eJake Slack if (getScheme().equalsIgnoreCase(URIUtil.HTTPS)) 120303928aee4356845252ac6b662d5c72c29903813eJake Slack return 443; 120403928aee4356845252ac6b662d5c72c29903813eJake Slack return 80; 120503928aee4356845252ac6b662d5c72c29903813eJake Slack } 120603928aee4356845252ac6b662d5c72c29903813eJake Slack return _port; 120703928aee4356845252ac6b662d5c72c29903813eJake Slack } 120803928aee4356845252ac6b662d5c72c29903813eJake Slack 120903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 121003928aee4356845252ac6b662d5c72c29903813eJake Slack public ServletContext getServletContext() 121103928aee4356845252ac6b662d5c72c29903813eJake Slack { 121203928aee4356845252ac6b662d5c72c29903813eJake Slack return _context; 121303928aee4356845252ac6b662d5c72c29903813eJake Slack } 121403928aee4356845252ac6b662d5c72c29903813eJake Slack 121503928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 121603928aee4356845252ac6b662d5c72c29903813eJake Slack /* 121703928aee4356845252ac6b662d5c72c29903813eJake Slack */ 121803928aee4356845252ac6b662d5c72c29903813eJake Slack public String getServletName() 121903928aee4356845252ac6b662d5c72c29903813eJake Slack { 122003928aee4356845252ac6b662d5c72c29903813eJake Slack if (_scope != null) 122103928aee4356845252ac6b662d5c72c29903813eJake Slack return _scope.getName(); 122203928aee4356845252ac6b662d5c72c29903813eJake Slack return null; 122303928aee4356845252ac6b662d5c72c29903813eJake Slack } 122403928aee4356845252ac6b662d5c72c29903813eJake Slack 122503928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 122603928aee4356845252ac6b662d5c72c29903813eJake Slack /* 122703928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getServletPath() 122803928aee4356845252ac6b662d5c72c29903813eJake Slack */ 122903928aee4356845252ac6b662d5c72c29903813eJake Slack public String getServletPath() 123003928aee4356845252ac6b662d5c72c29903813eJake Slack { 123103928aee4356845252ac6b662d5c72c29903813eJake Slack if (_servletPath == null) 123203928aee4356845252ac6b662d5c72c29903813eJake Slack _servletPath = ""; 123303928aee4356845252ac6b662d5c72c29903813eJake Slack return _servletPath; 123403928aee4356845252ac6b662d5c72c29903813eJake Slack } 123503928aee4356845252ac6b662d5c72c29903813eJake Slack 123603928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 123703928aee4356845252ac6b662d5c72c29903813eJake Slack public ServletResponse getServletResponse() 123803928aee4356845252ac6b662d5c72c29903813eJake Slack { 123903928aee4356845252ac6b662d5c72c29903813eJake Slack return _connection.getResponse(); 124003928aee4356845252ac6b662d5c72c29903813eJake Slack } 124103928aee4356845252ac6b662d5c72c29903813eJake Slack 124203928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 124303928aee4356845252ac6b662d5c72c29903813eJake Slack /* 124403928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getSession() 124503928aee4356845252ac6b662d5c72c29903813eJake Slack */ 124603928aee4356845252ac6b662d5c72c29903813eJake Slack public HttpSession getSession() 124703928aee4356845252ac6b662d5c72c29903813eJake Slack { 124803928aee4356845252ac6b662d5c72c29903813eJake Slack return getSession(true); 124903928aee4356845252ac6b662d5c72c29903813eJake Slack } 125003928aee4356845252ac6b662d5c72c29903813eJake Slack 125103928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 125203928aee4356845252ac6b662d5c72c29903813eJake Slack /* 125303928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getSession(boolean) 125403928aee4356845252ac6b662d5c72c29903813eJake Slack */ 125503928aee4356845252ac6b662d5c72c29903813eJake Slack public HttpSession getSession(boolean create) 125603928aee4356845252ac6b662d5c72c29903813eJake Slack { 125703928aee4356845252ac6b662d5c72c29903813eJake Slack if (_session != null) 125803928aee4356845252ac6b662d5c72c29903813eJake Slack { 125903928aee4356845252ac6b662d5c72c29903813eJake Slack if (_sessionManager != null && !_sessionManager.isValid(_session)) 126003928aee4356845252ac6b662d5c72c29903813eJake Slack _session = null; 126103928aee4356845252ac6b662d5c72c29903813eJake Slack else 126203928aee4356845252ac6b662d5c72c29903813eJake Slack return _session; 126303928aee4356845252ac6b662d5c72c29903813eJake Slack } 126403928aee4356845252ac6b662d5c72c29903813eJake Slack 126503928aee4356845252ac6b662d5c72c29903813eJake Slack if (!create) 126603928aee4356845252ac6b662d5c72c29903813eJake Slack return null; 126703928aee4356845252ac6b662d5c72c29903813eJake Slack 126803928aee4356845252ac6b662d5c72c29903813eJake Slack if (_sessionManager == null) 126903928aee4356845252ac6b662d5c72c29903813eJake Slack throw new IllegalStateException("No SessionManager"); 127003928aee4356845252ac6b662d5c72c29903813eJake Slack 127103928aee4356845252ac6b662d5c72c29903813eJake Slack _session = _sessionManager.newHttpSession(this); 127203928aee4356845252ac6b662d5c72c29903813eJake Slack HttpCookie cookie = _sessionManager.getSessionCookie(_session,getContextPath(),isSecure()); 127303928aee4356845252ac6b662d5c72c29903813eJake Slack if (cookie != null) 127403928aee4356845252ac6b662d5c72c29903813eJake Slack _connection.getResponse().addCookie(cookie); 127503928aee4356845252ac6b662d5c72c29903813eJake Slack 127603928aee4356845252ac6b662d5c72c29903813eJake Slack return _session; 127703928aee4356845252ac6b662d5c72c29903813eJake Slack } 127803928aee4356845252ac6b662d5c72c29903813eJake Slack 127903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 128003928aee4356845252ac6b662d5c72c29903813eJake Slack /** 128103928aee4356845252ac6b662d5c72c29903813eJake Slack * @return Returns the sessionManager. 128203928aee4356845252ac6b662d5c72c29903813eJake Slack */ 128303928aee4356845252ac6b662d5c72c29903813eJake Slack public SessionManager getSessionManager() 128403928aee4356845252ac6b662d5c72c29903813eJake Slack { 128503928aee4356845252ac6b662d5c72c29903813eJake Slack return _sessionManager; 128603928aee4356845252ac6b662d5c72c29903813eJake Slack } 128703928aee4356845252ac6b662d5c72c29903813eJake Slack 128803928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 128903928aee4356845252ac6b662d5c72c29903813eJake Slack /** 129003928aee4356845252ac6b662d5c72c29903813eJake Slack * Get Request TimeStamp 129103928aee4356845252ac6b662d5c72c29903813eJake Slack * 129203928aee4356845252ac6b662d5c72c29903813eJake Slack * @return The time that the request was received. 129303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 129403928aee4356845252ac6b662d5c72c29903813eJake Slack public long getTimeStamp() 129503928aee4356845252ac6b662d5c72c29903813eJake Slack { 129603928aee4356845252ac6b662d5c72c29903813eJake Slack return _timeStamp; 129703928aee4356845252ac6b662d5c72c29903813eJake Slack } 129803928aee4356845252ac6b662d5c72c29903813eJake Slack 129903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 130003928aee4356845252ac6b662d5c72c29903813eJake Slack /** 130103928aee4356845252ac6b662d5c72c29903813eJake Slack * Get Request TimeStamp 130203928aee4356845252ac6b662d5c72c29903813eJake Slack * 130303928aee4356845252ac6b662d5c72c29903813eJake Slack * @return The time that the request was received. 130403928aee4356845252ac6b662d5c72c29903813eJake Slack */ 130503928aee4356845252ac6b662d5c72c29903813eJake Slack public Buffer getTimeStampBuffer() 130603928aee4356845252ac6b662d5c72c29903813eJake Slack { 130703928aee4356845252ac6b662d5c72c29903813eJake Slack if (_timeStampBuffer == null && _timeStamp > 0) 130803928aee4356845252ac6b662d5c72c29903813eJake Slack _timeStampBuffer = HttpFields.__dateCache.formatBuffer(_timeStamp); 130903928aee4356845252ac6b662d5c72c29903813eJake Slack return _timeStampBuffer; 131003928aee4356845252ac6b662d5c72c29903813eJake Slack } 131103928aee4356845252ac6b662d5c72c29903813eJake Slack 131203928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 131303928aee4356845252ac6b662d5c72c29903813eJake Slack /** 131403928aee4356845252ac6b662d5c72c29903813eJake Slack * @return Returns the uri. 131503928aee4356845252ac6b662d5c72c29903813eJake Slack */ 131603928aee4356845252ac6b662d5c72c29903813eJake Slack public HttpURI getUri() 131703928aee4356845252ac6b662d5c72c29903813eJake Slack { 131803928aee4356845252ac6b662d5c72c29903813eJake Slack return _uri; 131903928aee4356845252ac6b662d5c72c29903813eJake Slack } 132003928aee4356845252ac6b662d5c72c29903813eJake Slack 132103928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 132203928aee4356845252ac6b662d5c72c29903813eJake Slack public UserIdentity getUserIdentity() 132303928aee4356845252ac6b662d5c72c29903813eJake Slack { 132403928aee4356845252ac6b662d5c72c29903813eJake Slack if (_authentication instanceof Authentication.Deferred) 132503928aee4356845252ac6b662d5c72c29903813eJake Slack setAuthentication(((Authentication.Deferred)_authentication).authenticate(this)); 132603928aee4356845252ac6b662d5c72c29903813eJake Slack 132703928aee4356845252ac6b662d5c72c29903813eJake Slack if (_authentication instanceof Authentication.User) 132803928aee4356845252ac6b662d5c72c29903813eJake Slack return ((Authentication.User)_authentication).getUserIdentity(); 132903928aee4356845252ac6b662d5c72c29903813eJake Slack return null; 133003928aee4356845252ac6b662d5c72c29903813eJake Slack } 133103928aee4356845252ac6b662d5c72c29903813eJake Slack 133203928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 133303928aee4356845252ac6b662d5c72c29903813eJake Slack /** 133403928aee4356845252ac6b662d5c72c29903813eJake Slack * @return The resolved user Identity, which may be null if the {@link Authentication} is not {@link Authentication.User} (eg. 133503928aee4356845252ac6b662d5c72c29903813eJake Slack * {@link Authentication.Deferred}). 133603928aee4356845252ac6b662d5c72c29903813eJake Slack */ 133703928aee4356845252ac6b662d5c72c29903813eJake Slack public UserIdentity getResolvedUserIdentity() 133803928aee4356845252ac6b662d5c72c29903813eJake Slack { 133903928aee4356845252ac6b662d5c72c29903813eJake Slack if (_authentication instanceof Authentication.User) 134003928aee4356845252ac6b662d5c72c29903813eJake Slack return ((Authentication.User)_authentication).getUserIdentity(); 134103928aee4356845252ac6b662d5c72c29903813eJake Slack return null; 134203928aee4356845252ac6b662d5c72c29903813eJake Slack } 134303928aee4356845252ac6b662d5c72c29903813eJake Slack 134403928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 134503928aee4356845252ac6b662d5c72c29903813eJake Slack public UserIdentity.Scope getUserIdentityScope() 134603928aee4356845252ac6b662d5c72c29903813eJake Slack { 134703928aee4356845252ac6b662d5c72c29903813eJake Slack return _scope; 134803928aee4356845252ac6b662d5c72c29903813eJake Slack } 134903928aee4356845252ac6b662d5c72c29903813eJake Slack 135003928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 135103928aee4356845252ac6b662d5c72c29903813eJake Slack /* 135203928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#getUserPrincipal() 135303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 135403928aee4356845252ac6b662d5c72c29903813eJake Slack public Principal getUserPrincipal() 135503928aee4356845252ac6b662d5c72c29903813eJake Slack { 135603928aee4356845252ac6b662d5c72c29903813eJake Slack if (_authentication instanceof Authentication.Deferred) 135703928aee4356845252ac6b662d5c72c29903813eJake Slack setAuthentication(((Authentication.Deferred)_authentication).authenticate(this)); 135803928aee4356845252ac6b662d5c72c29903813eJake Slack 135903928aee4356845252ac6b662d5c72c29903813eJake Slack if (_authentication instanceof Authentication.User) 136003928aee4356845252ac6b662d5c72c29903813eJake Slack { 136103928aee4356845252ac6b662d5c72c29903813eJake Slack UserIdentity user = ((Authentication.User)_authentication).getUserIdentity(); 136203928aee4356845252ac6b662d5c72c29903813eJake Slack return user.getUserPrincipal(); 136303928aee4356845252ac6b662d5c72c29903813eJake Slack } 136403928aee4356845252ac6b662d5c72c29903813eJake Slack 136503928aee4356845252ac6b662d5c72c29903813eJake Slack return null; 136603928aee4356845252ac6b662d5c72c29903813eJake Slack } 136703928aee4356845252ac6b662d5c72c29903813eJake Slack 136803928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 136903928aee4356845252ac6b662d5c72c29903813eJake Slack /** 137003928aee4356845252ac6b662d5c72c29903813eJake Slack * Get timestamp of the request dispatch 137103928aee4356845252ac6b662d5c72c29903813eJake Slack * 137203928aee4356845252ac6b662d5c72c29903813eJake Slack * @return timestamp 137303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 137403928aee4356845252ac6b662d5c72c29903813eJake Slack public long getDispatchTime() 137503928aee4356845252ac6b662d5c72c29903813eJake Slack { 137603928aee4356845252ac6b662d5c72c29903813eJake Slack return _dispatchTime; 137703928aee4356845252ac6b662d5c72c29903813eJake Slack } 137803928aee4356845252ac6b662d5c72c29903813eJake Slack 137903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 138003928aee4356845252ac6b662d5c72c29903813eJake Slack public boolean isHandled() 138103928aee4356845252ac6b662d5c72c29903813eJake Slack { 138203928aee4356845252ac6b662d5c72c29903813eJake Slack return _handled; 138303928aee4356845252ac6b662d5c72c29903813eJake Slack } 138403928aee4356845252ac6b662d5c72c29903813eJake Slack 138503928aee4356845252ac6b662d5c72c29903813eJake Slack public boolean isAsyncStarted() 138603928aee4356845252ac6b662d5c72c29903813eJake Slack { 138703928aee4356845252ac6b662d5c72c29903813eJake Slack return _async.isAsyncStarted(); 138803928aee4356845252ac6b662d5c72c29903813eJake Slack } 138903928aee4356845252ac6b662d5c72c29903813eJake Slack 139003928aee4356845252ac6b662d5c72c29903813eJake Slack 139103928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 139203928aee4356845252ac6b662d5c72c29903813eJake Slack public boolean isAsyncSupported() 139303928aee4356845252ac6b662d5c72c29903813eJake Slack { 139403928aee4356845252ac6b662d5c72c29903813eJake Slack return _asyncSupported; 139503928aee4356845252ac6b662d5c72c29903813eJake Slack } 139603928aee4356845252ac6b662d5c72c29903813eJake Slack 139703928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 139803928aee4356845252ac6b662d5c72c29903813eJake Slack /* 139903928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromCookie() 140003928aee4356845252ac6b662d5c72c29903813eJake Slack */ 140103928aee4356845252ac6b662d5c72c29903813eJake Slack public boolean isRequestedSessionIdFromCookie() 140203928aee4356845252ac6b662d5c72c29903813eJake Slack { 140303928aee4356845252ac6b662d5c72c29903813eJake Slack return _requestedSessionId != null && _requestedSessionIdFromCookie; 140403928aee4356845252ac6b662d5c72c29903813eJake Slack } 140503928aee4356845252ac6b662d5c72c29903813eJake Slack 140603928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 140703928aee4356845252ac6b662d5c72c29903813eJake Slack /* 140803928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromUrl() 140903928aee4356845252ac6b662d5c72c29903813eJake Slack */ 141003928aee4356845252ac6b662d5c72c29903813eJake Slack public boolean isRequestedSessionIdFromUrl() 141103928aee4356845252ac6b662d5c72c29903813eJake Slack { 141203928aee4356845252ac6b662d5c72c29903813eJake Slack return _requestedSessionId != null && !_requestedSessionIdFromCookie; 141303928aee4356845252ac6b662d5c72c29903813eJake Slack } 141403928aee4356845252ac6b662d5c72c29903813eJake Slack 141503928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 141603928aee4356845252ac6b662d5c72c29903813eJake Slack /* 141703928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromURL() 141803928aee4356845252ac6b662d5c72c29903813eJake Slack */ 141903928aee4356845252ac6b662d5c72c29903813eJake Slack public boolean isRequestedSessionIdFromURL() 142003928aee4356845252ac6b662d5c72c29903813eJake Slack { 142103928aee4356845252ac6b662d5c72c29903813eJake Slack return _requestedSessionId != null && !_requestedSessionIdFromCookie; 142203928aee4356845252ac6b662d5c72c29903813eJake Slack } 142303928aee4356845252ac6b662d5c72c29903813eJake Slack 142403928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 142503928aee4356845252ac6b662d5c72c29903813eJake Slack /* 142603928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdValid() 142703928aee4356845252ac6b662d5c72c29903813eJake Slack */ 142803928aee4356845252ac6b662d5c72c29903813eJake Slack public boolean isRequestedSessionIdValid() 142903928aee4356845252ac6b662d5c72c29903813eJake Slack { 143003928aee4356845252ac6b662d5c72c29903813eJake Slack if (_requestedSessionId == null) 143103928aee4356845252ac6b662d5c72c29903813eJake Slack return false; 143203928aee4356845252ac6b662d5c72c29903813eJake Slack 143303928aee4356845252ac6b662d5c72c29903813eJake Slack HttpSession session = getSession(false); 143403928aee4356845252ac6b662d5c72c29903813eJake Slack return (session != null && _sessionManager.getSessionIdManager().getClusterId(_requestedSessionId).equals(_sessionManager.getClusterId(session))); 143503928aee4356845252ac6b662d5c72c29903813eJake Slack } 143603928aee4356845252ac6b662d5c72c29903813eJake Slack 143703928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 143803928aee4356845252ac6b662d5c72c29903813eJake Slack /* 143903928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#isSecure() 144003928aee4356845252ac6b662d5c72c29903813eJake Slack */ 144103928aee4356845252ac6b662d5c72c29903813eJake Slack public boolean isSecure() 144203928aee4356845252ac6b662d5c72c29903813eJake Slack { 144303928aee4356845252ac6b662d5c72c29903813eJake Slack return _connection.isConfidential(this); 144403928aee4356845252ac6b662d5c72c29903813eJake Slack } 144503928aee4356845252ac6b662d5c72c29903813eJake Slack 144603928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 144703928aee4356845252ac6b662d5c72c29903813eJake Slack /* 144803928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.http.HttpServletRequest#isUserInRole(java.lang.String) 144903928aee4356845252ac6b662d5c72c29903813eJake Slack */ 145003928aee4356845252ac6b662d5c72c29903813eJake Slack public boolean isUserInRole(String role) 145103928aee4356845252ac6b662d5c72c29903813eJake Slack { 145203928aee4356845252ac6b662d5c72c29903813eJake Slack if (_authentication instanceof Authentication.Deferred) 145303928aee4356845252ac6b662d5c72c29903813eJake Slack setAuthentication(((Authentication.Deferred)_authentication).authenticate(this)); 145403928aee4356845252ac6b662d5c72c29903813eJake Slack 145503928aee4356845252ac6b662d5c72c29903813eJake Slack if (_authentication instanceof Authentication.User) 145603928aee4356845252ac6b662d5c72c29903813eJake Slack return ((Authentication.User)_authentication).isUserInRole(_scope,role); 145703928aee4356845252ac6b662d5c72c29903813eJake Slack return false; 145803928aee4356845252ac6b662d5c72c29903813eJake Slack } 145903928aee4356845252ac6b662d5c72c29903813eJake Slack 146003928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 146103928aee4356845252ac6b662d5c72c29903813eJake Slack public HttpSession recoverNewSession(Object key) 146203928aee4356845252ac6b662d5c72c29903813eJake Slack { 146303928aee4356845252ac6b662d5c72c29903813eJake Slack if (_savedNewSessions == null) 146403928aee4356845252ac6b662d5c72c29903813eJake Slack return null; 146503928aee4356845252ac6b662d5c72c29903813eJake Slack return _savedNewSessions.get(key); 146603928aee4356845252ac6b662d5c72c29903813eJake Slack } 146703928aee4356845252ac6b662d5c72c29903813eJake Slack 146803928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 146903928aee4356845252ac6b662d5c72c29903813eJake Slack protected void recycle() 147003928aee4356845252ac6b662d5c72c29903813eJake Slack { 147103928aee4356845252ac6b662d5c72c29903813eJake Slack if (_inputState == __READER) 147203928aee4356845252ac6b662d5c72c29903813eJake Slack { 147303928aee4356845252ac6b662d5c72c29903813eJake Slack try 147403928aee4356845252ac6b662d5c72c29903813eJake Slack { 147503928aee4356845252ac6b662d5c72c29903813eJake Slack int r = _reader.read(); 147603928aee4356845252ac6b662d5c72c29903813eJake Slack while (r != -1) 147703928aee4356845252ac6b662d5c72c29903813eJake Slack r = _reader.read(); 147803928aee4356845252ac6b662d5c72c29903813eJake Slack } 147903928aee4356845252ac6b662d5c72c29903813eJake Slack catch (Exception e) 148003928aee4356845252ac6b662d5c72c29903813eJake Slack { 148103928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.ignore(e); 148203928aee4356845252ac6b662d5c72c29903813eJake Slack _reader = null; 148303928aee4356845252ac6b662d5c72c29903813eJake Slack } 148403928aee4356845252ac6b662d5c72c29903813eJake Slack } 148503928aee4356845252ac6b662d5c72c29903813eJake Slack 148603928aee4356845252ac6b662d5c72c29903813eJake Slack setAuthentication(Authentication.NOT_CHECKED); 148703928aee4356845252ac6b662d5c72c29903813eJake Slack _async.recycle(); 148803928aee4356845252ac6b662d5c72c29903813eJake Slack _asyncSupported = true; 148903928aee4356845252ac6b662d5c72c29903813eJake Slack _handled = false; 149003928aee4356845252ac6b662d5c72c29903813eJake Slack if (_context != null) 149103928aee4356845252ac6b662d5c72c29903813eJake Slack throw new IllegalStateException("Request in context!"); 149203928aee4356845252ac6b662d5c72c29903813eJake Slack if (_attributes != null) 149303928aee4356845252ac6b662d5c72c29903813eJake Slack _attributes.clearAttributes(); 149403928aee4356845252ac6b662d5c72c29903813eJake Slack _characterEncoding = null; 149503928aee4356845252ac6b662d5c72c29903813eJake Slack _contextPath = null; 149603928aee4356845252ac6b662d5c72c29903813eJake Slack if (_cookies != null) 149703928aee4356845252ac6b662d5c72c29903813eJake Slack _cookies.reset(); 149803928aee4356845252ac6b662d5c72c29903813eJake Slack _cookiesExtracted = false; 149903928aee4356845252ac6b662d5c72c29903813eJake Slack _context = null; 150003928aee4356845252ac6b662d5c72c29903813eJake Slack _serverName = null; 150103928aee4356845252ac6b662d5c72c29903813eJake Slack _method = null; 150203928aee4356845252ac6b662d5c72c29903813eJake Slack _pathInfo = null; 150303928aee4356845252ac6b662d5c72c29903813eJake Slack _port = 0; 150403928aee4356845252ac6b662d5c72c29903813eJake Slack _protocol = HttpVersions.HTTP_1_1; 150503928aee4356845252ac6b662d5c72c29903813eJake Slack _queryEncoding = null; 150603928aee4356845252ac6b662d5c72c29903813eJake Slack _queryString = null; 150703928aee4356845252ac6b662d5c72c29903813eJake Slack _requestedSessionId = null; 150803928aee4356845252ac6b662d5c72c29903813eJake Slack _requestedSessionIdFromCookie = false; 150903928aee4356845252ac6b662d5c72c29903813eJake Slack _session = null; 151003928aee4356845252ac6b662d5c72c29903813eJake Slack _sessionManager = null; 151103928aee4356845252ac6b662d5c72c29903813eJake Slack _requestURI = null; 151203928aee4356845252ac6b662d5c72c29903813eJake Slack _scope = null; 151303928aee4356845252ac6b662d5c72c29903813eJake Slack _scheme = URIUtil.HTTP; 151403928aee4356845252ac6b662d5c72c29903813eJake Slack _servletPath = null; 151503928aee4356845252ac6b662d5c72c29903813eJake Slack _timeStamp = 0; 151603928aee4356845252ac6b662d5c72c29903813eJake Slack _timeStampBuffer = null; 151703928aee4356845252ac6b662d5c72c29903813eJake Slack _uri = null; 151803928aee4356845252ac6b662d5c72c29903813eJake Slack if (_baseParameters != null) 151903928aee4356845252ac6b662d5c72c29903813eJake Slack _baseParameters.clear(); 152003928aee4356845252ac6b662d5c72c29903813eJake Slack _parameters = null; 152103928aee4356845252ac6b662d5c72c29903813eJake Slack _paramsExtracted = false; 152203928aee4356845252ac6b662d5c72c29903813eJake Slack _inputState = __NONE; 152303928aee4356845252ac6b662d5c72c29903813eJake Slack 152403928aee4356845252ac6b662d5c72c29903813eJake Slack if (_savedNewSessions != null) 152503928aee4356845252ac6b662d5c72c29903813eJake Slack _savedNewSessions.clear(); 152603928aee4356845252ac6b662d5c72c29903813eJake Slack _savedNewSessions=null; 152703928aee4356845252ac6b662d5c72c29903813eJake Slack _multiPartInputStream = null; 152803928aee4356845252ac6b662d5c72c29903813eJake Slack } 152903928aee4356845252ac6b662d5c72c29903813eJake Slack 153003928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 153103928aee4356845252ac6b662d5c72c29903813eJake Slack /* 153203928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#removeAttribute(java.lang.String) 153303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 153403928aee4356845252ac6b662d5c72c29903813eJake Slack public void removeAttribute(String name) 153503928aee4356845252ac6b662d5c72c29903813eJake Slack { 153603928aee4356845252ac6b662d5c72c29903813eJake Slack Object old_value = _attributes == null?null:_attributes.getAttribute(name); 153703928aee4356845252ac6b662d5c72c29903813eJake Slack 153803928aee4356845252ac6b662d5c72c29903813eJake Slack if (_attributes != null) 153903928aee4356845252ac6b662d5c72c29903813eJake Slack _attributes.removeAttribute(name); 154003928aee4356845252ac6b662d5c72c29903813eJake Slack 154103928aee4356845252ac6b662d5c72c29903813eJake Slack if (old_value != null) 154203928aee4356845252ac6b662d5c72c29903813eJake Slack { 154303928aee4356845252ac6b662d5c72c29903813eJake Slack if (_requestAttributeListeners != null) 154403928aee4356845252ac6b662d5c72c29903813eJake Slack { 154503928aee4356845252ac6b662d5c72c29903813eJake Slack final ServletRequestAttributeEvent event = new ServletRequestAttributeEvent(_context,this,name,old_value); 154603928aee4356845252ac6b662d5c72c29903813eJake Slack final int size = LazyList.size(_requestAttributeListeners); 154703928aee4356845252ac6b662d5c72c29903813eJake Slack for (int i = 0; i < size; i++) 154803928aee4356845252ac6b662d5c72c29903813eJake Slack { 154903928aee4356845252ac6b662d5c72c29903813eJake Slack final EventListener listener = (ServletRequestAttributeListener)LazyList.get(_requestAttributeListeners,i); 155003928aee4356845252ac6b662d5c72c29903813eJake Slack if (listener instanceof ServletRequestAttributeListener) 155103928aee4356845252ac6b662d5c72c29903813eJake Slack { 155203928aee4356845252ac6b662d5c72c29903813eJake Slack final ServletRequestAttributeListener l = (ServletRequestAttributeListener)listener; 155303928aee4356845252ac6b662d5c72c29903813eJake Slack l.attributeRemoved(event); 155403928aee4356845252ac6b662d5c72c29903813eJake Slack } 155503928aee4356845252ac6b662d5c72c29903813eJake Slack } 155603928aee4356845252ac6b662d5c72c29903813eJake Slack } 155703928aee4356845252ac6b662d5c72c29903813eJake Slack } 155803928aee4356845252ac6b662d5c72c29903813eJake Slack } 155903928aee4356845252ac6b662d5c72c29903813eJake Slack 156003928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 156103928aee4356845252ac6b662d5c72c29903813eJake Slack public void removeEventListener(final EventListener listener) 156203928aee4356845252ac6b662d5c72c29903813eJake Slack { 156303928aee4356845252ac6b662d5c72c29903813eJake Slack _requestAttributeListeners = LazyList.remove(_requestAttributeListeners,listener); 156403928aee4356845252ac6b662d5c72c29903813eJake Slack } 156503928aee4356845252ac6b662d5c72c29903813eJake Slack 156603928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 156703928aee4356845252ac6b662d5c72c29903813eJake Slack public void saveNewSession(Object key, HttpSession session) 156803928aee4356845252ac6b662d5c72c29903813eJake Slack { 156903928aee4356845252ac6b662d5c72c29903813eJake Slack if (_savedNewSessions == null) 157003928aee4356845252ac6b662d5c72c29903813eJake Slack _savedNewSessions = new HashMap<Object, HttpSession>(); 157103928aee4356845252ac6b662d5c72c29903813eJake Slack _savedNewSessions.put(key,session); 157203928aee4356845252ac6b662d5c72c29903813eJake Slack } 157303928aee4356845252ac6b662d5c72c29903813eJake Slack 157403928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 157503928aee4356845252ac6b662d5c72c29903813eJake Slack public void setAsyncSupported(boolean supported) 157603928aee4356845252ac6b662d5c72c29903813eJake Slack { 157703928aee4356845252ac6b662d5c72c29903813eJake Slack _asyncSupported = supported; 157803928aee4356845252ac6b662d5c72c29903813eJake Slack } 157903928aee4356845252ac6b662d5c72c29903813eJake Slack 158003928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 158103928aee4356845252ac6b662d5c72c29903813eJake Slack /* 158203928aee4356845252ac6b662d5c72c29903813eJake Slack * Set a request attribute. if the attribute name is "org.eclipse.jetty.server.server.Request.queryEncoding" then the value is also passed in a call to 158303928aee4356845252ac6b662d5c72c29903813eJake Slack * {@link #setQueryEncoding}. <p> if the attribute name is "org.eclipse.jetty.server.server.ResponseBuffer", then the response buffer is flushed with @{link 158403928aee4356845252ac6b662d5c72c29903813eJake Slack * #flushResponseBuffer} <p> if the attribute name is "org.eclipse.jetty.io.EndPoint.maxIdleTime", then the value is passed to the associated {@link 158503928aee4356845252ac6b662d5c72c29903813eJake Slack * EndPoint#setMaxIdleTime}. 158603928aee4356845252ac6b662d5c72c29903813eJake Slack * 158703928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#setAttribute(java.lang.String, java.lang.Object) 158803928aee4356845252ac6b662d5c72c29903813eJake Slack */ 158903928aee4356845252ac6b662d5c72c29903813eJake Slack public void setAttribute(String name, Object value) 159003928aee4356845252ac6b662d5c72c29903813eJake Slack { 159103928aee4356845252ac6b662d5c72c29903813eJake Slack Object old_value = _attributes == null?null:_attributes.getAttribute(name); 159203928aee4356845252ac6b662d5c72c29903813eJake Slack 159303928aee4356845252ac6b662d5c72c29903813eJake Slack if (name.startsWith("org.eclipse.jetty.")) 159403928aee4356845252ac6b662d5c72c29903813eJake Slack { 159503928aee4356845252ac6b662d5c72c29903813eJake Slack if ("org.eclipse.jetty.server.Request.queryEncoding".equals(name)) 159603928aee4356845252ac6b662d5c72c29903813eJake Slack setQueryEncoding(value == null?null:value.toString()); 159703928aee4356845252ac6b662d5c72c29903813eJake Slack else if ("org.eclipse.jetty.server.sendContent".equals(name)) 159803928aee4356845252ac6b662d5c72c29903813eJake Slack { 159903928aee4356845252ac6b662d5c72c29903813eJake Slack try 160003928aee4356845252ac6b662d5c72c29903813eJake Slack { 160103928aee4356845252ac6b662d5c72c29903813eJake Slack ((AbstractHttpConnection.Output)getServletResponse().getOutputStream()).sendContent(value); 160203928aee4356845252ac6b662d5c72c29903813eJake Slack } 160303928aee4356845252ac6b662d5c72c29903813eJake Slack catch (IOException e) 160403928aee4356845252ac6b662d5c72c29903813eJake Slack { 160503928aee4356845252ac6b662d5c72c29903813eJake Slack throw new RuntimeException(e); 160603928aee4356845252ac6b662d5c72c29903813eJake Slack } 160703928aee4356845252ac6b662d5c72c29903813eJake Slack } 160803928aee4356845252ac6b662d5c72c29903813eJake Slack else if ("org.eclipse.jetty.server.ResponseBuffer".equals(name)) 160903928aee4356845252ac6b662d5c72c29903813eJake Slack { 161003928aee4356845252ac6b662d5c72c29903813eJake Slack try 161103928aee4356845252ac6b662d5c72c29903813eJake Slack { 161203928aee4356845252ac6b662d5c72c29903813eJake Slack final ByteBuffer byteBuffer = (ByteBuffer)value; 161303928aee4356845252ac6b662d5c72c29903813eJake Slack synchronized (byteBuffer) 161403928aee4356845252ac6b662d5c72c29903813eJake Slack { 161503928aee4356845252ac6b662d5c72c29903813eJake Slack NIOBuffer buffer = byteBuffer.isDirect()?new DirectNIOBuffer(byteBuffer,true):new IndirectNIOBuffer(byteBuffer,true); 161603928aee4356845252ac6b662d5c72c29903813eJake Slack ((AbstractHttpConnection.Output)getServletResponse().getOutputStream()).sendResponse(buffer); 161703928aee4356845252ac6b662d5c72c29903813eJake Slack } 161803928aee4356845252ac6b662d5c72c29903813eJake Slack } 161903928aee4356845252ac6b662d5c72c29903813eJake Slack catch (IOException e) 162003928aee4356845252ac6b662d5c72c29903813eJake Slack { 162103928aee4356845252ac6b662d5c72c29903813eJake Slack throw new RuntimeException(e); 162203928aee4356845252ac6b662d5c72c29903813eJake Slack } 162303928aee4356845252ac6b662d5c72c29903813eJake Slack } 162403928aee4356845252ac6b662d5c72c29903813eJake Slack else if ("org.eclipse.jetty.io.EndPoint.maxIdleTime".equalsIgnoreCase(name)) 162503928aee4356845252ac6b662d5c72c29903813eJake Slack { 162603928aee4356845252ac6b662d5c72c29903813eJake Slack try 162703928aee4356845252ac6b662d5c72c29903813eJake Slack { 162803928aee4356845252ac6b662d5c72c29903813eJake Slack getConnection().getEndPoint().setMaxIdleTime(Integer.valueOf(value.toString())); 162903928aee4356845252ac6b662d5c72c29903813eJake Slack } 163003928aee4356845252ac6b662d5c72c29903813eJake Slack catch (IOException e) 163103928aee4356845252ac6b662d5c72c29903813eJake Slack { 163203928aee4356845252ac6b662d5c72c29903813eJake Slack throw new RuntimeException(e); 163303928aee4356845252ac6b662d5c72c29903813eJake Slack } 163403928aee4356845252ac6b662d5c72c29903813eJake Slack } 163503928aee4356845252ac6b662d5c72c29903813eJake Slack } 163603928aee4356845252ac6b662d5c72c29903813eJake Slack 163703928aee4356845252ac6b662d5c72c29903813eJake Slack if (_attributes == null) 163803928aee4356845252ac6b662d5c72c29903813eJake Slack _attributes = new AttributesMap(); 163903928aee4356845252ac6b662d5c72c29903813eJake Slack _attributes.setAttribute(name,value); 164003928aee4356845252ac6b662d5c72c29903813eJake Slack 164103928aee4356845252ac6b662d5c72c29903813eJake Slack if (_requestAttributeListeners != null) 164203928aee4356845252ac6b662d5c72c29903813eJake Slack { 164303928aee4356845252ac6b662d5c72c29903813eJake Slack final ServletRequestAttributeEvent event = new ServletRequestAttributeEvent(_context,this,name,old_value == null?value:old_value); 164403928aee4356845252ac6b662d5c72c29903813eJake Slack final int size = LazyList.size(_requestAttributeListeners); 164503928aee4356845252ac6b662d5c72c29903813eJake Slack for (int i = 0; i < size; i++) 164603928aee4356845252ac6b662d5c72c29903813eJake Slack { 164703928aee4356845252ac6b662d5c72c29903813eJake Slack final EventListener listener = (ServletRequestAttributeListener)LazyList.get(_requestAttributeListeners,i); 164803928aee4356845252ac6b662d5c72c29903813eJake Slack if (listener instanceof ServletRequestAttributeListener) 164903928aee4356845252ac6b662d5c72c29903813eJake Slack { 165003928aee4356845252ac6b662d5c72c29903813eJake Slack final ServletRequestAttributeListener l = (ServletRequestAttributeListener)listener; 165103928aee4356845252ac6b662d5c72c29903813eJake Slack 165203928aee4356845252ac6b662d5c72c29903813eJake Slack if (old_value == null) 165303928aee4356845252ac6b662d5c72c29903813eJake Slack l.attributeAdded(event); 165403928aee4356845252ac6b662d5c72c29903813eJake Slack else if (value == null) 165503928aee4356845252ac6b662d5c72c29903813eJake Slack l.attributeRemoved(event); 165603928aee4356845252ac6b662d5c72c29903813eJake Slack else 165703928aee4356845252ac6b662d5c72c29903813eJake Slack l.attributeReplaced(event); 165803928aee4356845252ac6b662d5c72c29903813eJake Slack } 165903928aee4356845252ac6b662d5c72c29903813eJake Slack } 166003928aee4356845252ac6b662d5c72c29903813eJake Slack } 166103928aee4356845252ac6b662d5c72c29903813eJake Slack } 166203928aee4356845252ac6b662d5c72c29903813eJake Slack 166303928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 166403928aee4356845252ac6b662d5c72c29903813eJake Slack /* 166503928aee4356845252ac6b662d5c72c29903813eJake Slack */ 166603928aee4356845252ac6b662d5c72c29903813eJake Slack public void setAttributes(Attributes attributes) 166703928aee4356845252ac6b662d5c72c29903813eJake Slack { 166803928aee4356845252ac6b662d5c72c29903813eJake Slack _attributes = attributes; 166903928aee4356845252ac6b662d5c72c29903813eJake Slack } 167003928aee4356845252ac6b662d5c72c29903813eJake Slack 167103928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 167203928aee4356845252ac6b662d5c72c29903813eJake Slack 167303928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 167403928aee4356845252ac6b662d5c72c29903813eJake Slack /** 167503928aee4356845252ac6b662d5c72c29903813eJake Slack * Set the authentication. 167603928aee4356845252ac6b662d5c72c29903813eJake Slack * 167703928aee4356845252ac6b662d5c72c29903813eJake Slack * @param authentication 167803928aee4356845252ac6b662d5c72c29903813eJake Slack * the authentication to set 167903928aee4356845252ac6b662d5c72c29903813eJake Slack */ 168003928aee4356845252ac6b662d5c72c29903813eJake Slack public void setAuthentication(Authentication authentication) 168103928aee4356845252ac6b662d5c72c29903813eJake Slack { 168203928aee4356845252ac6b662d5c72c29903813eJake Slack _authentication = authentication; 168303928aee4356845252ac6b662d5c72c29903813eJake Slack } 168403928aee4356845252ac6b662d5c72c29903813eJake Slack 168503928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 168603928aee4356845252ac6b662d5c72c29903813eJake Slack /* 168703928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#setCharacterEncoding(java.lang.String) 168803928aee4356845252ac6b662d5c72c29903813eJake Slack */ 168903928aee4356845252ac6b662d5c72c29903813eJake Slack public void setCharacterEncoding(String encoding) throws UnsupportedEncodingException 169003928aee4356845252ac6b662d5c72c29903813eJake Slack { 169103928aee4356845252ac6b662d5c72c29903813eJake Slack if (_inputState != __NONE) 169203928aee4356845252ac6b662d5c72c29903813eJake Slack return; 169303928aee4356845252ac6b662d5c72c29903813eJake Slack 169403928aee4356845252ac6b662d5c72c29903813eJake Slack _characterEncoding = encoding; 169503928aee4356845252ac6b662d5c72c29903813eJake Slack 169603928aee4356845252ac6b662d5c72c29903813eJake Slack // check encoding is supported 169703928aee4356845252ac6b662d5c72c29903813eJake Slack if (!StringUtil.isUTF8(encoding)) 169803928aee4356845252ac6b662d5c72c29903813eJake Slack // noinspection ResultOfMethodCallIgnored 169903928aee4356845252ac6b662d5c72c29903813eJake Slack "".getBytes(encoding); 170003928aee4356845252ac6b662d5c72c29903813eJake Slack } 170103928aee4356845252ac6b662d5c72c29903813eJake Slack 170203928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 170303928aee4356845252ac6b662d5c72c29903813eJake Slack /* 170403928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#setCharacterEncoding(java.lang.String) 170503928aee4356845252ac6b662d5c72c29903813eJake Slack */ 170603928aee4356845252ac6b662d5c72c29903813eJake Slack public void setCharacterEncodingUnchecked(String encoding) 170703928aee4356845252ac6b662d5c72c29903813eJake Slack { 170803928aee4356845252ac6b662d5c72c29903813eJake Slack _characterEncoding = encoding; 170903928aee4356845252ac6b662d5c72c29903813eJake Slack } 171003928aee4356845252ac6b662d5c72c29903813eJake Slack 171103928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 171203928aee4356845252ac6b662d5c72c29903813eJake Slack // final so we can safely call this from constructor 171303928aee4356845252ac6b662d5c72c29903813eJake Slack protected final void setConnection(AbstractHttpConnection connection) 171403928aee4356845252ac6b662d5c72c29903813eJake Slack { 171503928aee4356845252ac6b662d5c72c29903813eJake Slack _connection = connection; 171603928aee4356845252ac6b662d5c72c29903813eJake Slack _async.setConnection(connection); 171703928aee4356845252ac6b662d5c72c29903813eJake Slack _endp = connection.getEndPoint(); 171803928aee4356845252ac6b662d5c72c29903813eJake Slack _dns = connection.getResolveNames(); 171903928aee4356845252ac6b662d5c72c29903813eJake Slack } 172003928aee4356845252ac6b662d5c72c29903813eJake Slack 172103928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 172203928aee4356845252ac6b662d5c72c29903813eJake Slack /* 172303928aee4356845252ac6b662d5c72c29903813eJake Slack * @see javax.servlet.ServletRequest#getContentType() 172403928aee4356845252ac6b662d5c72c29903813eJake Slack */ 172503928aee4356845252ac6b662d5c72c29903813eJake Slack public void setContentType(String contentType) 172603928aee4356845252ac6b662d5c72c29903813eJake Slack { 172703928aee4356845252ac6b662d5c72c29903813eJake Slack _connection.getRequestFields().put(HttpHeaders.CONTENT_TYPE_BUFFER,contentType); 172803928aee4356845252ac6b662d5c72c29903813eJake Slack 172903928aee4356845252ac6b662d5c72c29903813eJake Slack } 173003928aee4356845252ac6b662d5c72c29903813eJake Slack 173103928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 173203928aee4356845252ac6b662d5c72c29903813eJake Slack /** 173303928aee4356845252ac6b662d5c72c29903813eJake Slack * Set request context 173403928aee4356845252ac6b662d5c72c29903813eJake Slack * 173503928aee4356845252ac6b662d5c72c29903813eJake Slack * @param context 173603928aee4356845252ac6b662d5c72c29903813eJake Slack * context object 173703928aee4356845252ac6b662d5c72c29903813eJake Slack */ 173803928aee4356845252ac6b662d5c72c29903813eJake Slack public void setContext(Context context) 173903928aee4356845252ac6b662d5c72c29903813eJake Slack { 174003928aee4356845252ac6b662d5c72c29903813eJake Slack _newContext = _context != context; 174103928aee4356845252ac6b662d5c72c29903813eJake Slack _context = context; 174203928aee4356845252ac6b662d5c72c29903813eJake Slack } 174303928aee4356845252ac6b662d5c72c29903813eJake Slack 174403928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 174503928aee4356845252ac6b662d5c72c29903813eJake Slack /** 174603928aee4356845252ac6b662d5c72c29903813eJake Slack * @return True if this is the first call of {@link #takeNewContext()} since the last 174703928aee4356845252ac6b662d5c72c29903813eJake Slack * {@link #setContext(org.eclipse.jetty.server.handler.ContextHandler.Context)} call. 174803928aee4356845252ac6b662d5c72c29903813eJake Slack */ 174903928aee4356845252ac6b662d5c72c29903813eJake Slack public boolean takeNewContext() 175003928aee4356845252ac6b662d5c72c29903813eJake Slack { 175103928aee4356845252ac6b662d5c72c29903813eJake Slack boolean nc = _newContext; 175203928aee4356845252ac6b662d5c72c29903813eJake Slack _newContext = false; 175303928aee4356845252ac6b662d5c72c29903813eJake Slack return nc; 175403928aee4356845252ac6b662d5c72c29903813eJake Slack } 175503928aee4356845252ac6b662d5c72c29903813eJake Slack 175603928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 175703928aee4356845252ac6b662d5c72c29903813eJake Slack /** 175803928aee4356845252ac6b662d5c72c29903813eJake Slack * Sets the "context path" for this request 175903928aee4356845252ac6b662d5c72c29903813eJake Slack * 176003928aee4356845252ac6b662d5c72c29903813eJake Slack * @see HttpServletRequest#getContextPath() 176103928aee4356845252ac6b662d5c72c29903813eJake Slack */ 176203928aee4356845252ac6b662d5c72c29903813eJake Slack public void setContextPath(String contextPath) 176303928aee4356845252ac6b662d5c72c29903813eJake Slack { 176403928aee4356845252ac6b662d5c72c29903813eJake Slack _contextPath = contextPath; 176503928aee4356845252ac6b662d5c72c29903813eJake Slack } 176603928aee4356845252ac6b662d5c72c29903813eJake Slack 176703928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 176803928aee4356845252ac6b662d5c72c29903813eJake Slack /** 176903928aee4356845252ac6b662d5c72c29903813eJake Slack * @param cookies 177003928aee4356845252ac6b662d5c72c29903813eJake Slack * The cookies to set. 177103928aee4356845252ac6b662d5c72c29903813eJake Slack */ 177203928aee4356845252ac6b662d5c72c29903813eJake Slack public void setCookies(Cookie[] cookies) 177303928aee4356845252ac6b662d5c72c29903813eJake Slack { 177403928aee4356845252ac6b662d5c72c29903813eJake Slack if (_cookies == null) 177503928aee4356845252ac6b662d5c72c29903813eJake Slack _cookies = new CookieCutter(); 177603928aee4356845252ac6b662d5c72c29903813eJake Slack _cookies.setCookies(cookies); 177703928aee4356845252ac6b662d5c72c29903813eJake Slack } 177803928aee4356845252ac6b662d5c72c29903813eJake Slack 177903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 178003928aee4356845252ac6b662d5c72c29903813eJake Slack public void setDispatcherType(DispatcherType type) 178103928aee4356845252ac6b662d5c72c29903813eJake Slack { 178203928aee4356845252ac6b662d5c72c29903813eJake Slack _dispatcherType = type; 178303928aee4356845252ac6b662d5c72c29903813eJake Slack } 178403928aee4356845252ac6b662d5c72c29903813eJake Slack 178503928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 178603928aee4356845252ac6b662d5c72c29903813eJake Slack public void setHandled(boolean h) 178703928aee4356845252ac6b662d5c72c29903813eJake Slack { 178803928aee4356845252ac6b662d5c72c29903813eJake Slack _handled = h; 178903928aee4356845252ac6b662d5c72c29903813eJake Slack } 179003928aee4356845252ac6b662d5c72c29903813eJake Slack 179103928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 179203928aee4356845252ac6b662d5c72c29903813eJake Slack /** 179303928aee4356845252ac6b662d5c72c29903813eJake Slack * @param method 179403928aee4356845252ac6b662d5c72c29903813eJake Slack * The method to set. 179503928aee4356845252ac6b662d5c72c29903813eJake Slack */ 179603928aee4356845252ac6b662d5c72c29903813eJake Slack public void setMethod(String method) 179703928aee4356845252ac6b662d5c72c29903813eJake Slack { 179803928aee4356845252ac6b662d5c72c29903813eJake Slack _method = method; 179903928aee4356845252ac6b662d5c72c29903813eJake Slack } 180003928aee4356845252ac6b662d5c72c29903813eJake Slack 180103928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 180203928aee4356845252ac6b662d5c72c29903813eJake Slack /** 180303928aee4356845252ac6b662d5c72c29903813eJake Slack * @param parameters 180403928aee4356845252ac6b662d5c72c29903813eJake Slack * The parameters to set. 180503928aee4356845252ac6b662d5c72c29903813eJake Slack */ 180603928aee4356845252ac6b662d5c72c29903813eJake Slack public void setParameters(MultiMap<String> parameters) 180703928aee4356845252ac6b662d5c72c29903813eJake Slack { 180803928aee4356845252ac6b662d5c72c29903813eJake Slack _parameters = (parameters == null)?_baseParameters:parameters; 180903928aee4356845252ac6b662d5c72c29903813eJake Slack if (_paramsExtracted && _parameters == null) 181003928aee4356845252ac6b662d5c72c29903813eJake Slack throw new IllegalStateException(); 181103928aee4356845252ac6b662d5c72c29903813eJake Slack } 181203928aee4356845252ac6b662d5c72c29903813eJake Slack 181303928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 181403928aee4356845252ac6b662d5c72c29903813eJake Slack /** 181503928aee4356845252ac6b662d5c72c29903813eJake Slack * @param pathInfo 181603928aee4356845252ac6b662d5c72c29903813eJake Slack * The pathInfo to set. 181703928aee4356845252ac6b662d5c72c29903813eJake Slack */ 181803928aee4356845252ac6b662d5c72c29903813eJake Slack public void setPathInfo(String pathInfo) 181903928aee4356845252ac6b662d5c72c29903813eJake Slack { 182003928aee4356845252ac6b662d5c72c29903813eJake Slack _pathInfo = pathInfo; 182103928aee4356845252ac6b662d5c72c29903813eJake Slack } 182203928aee4356845252ac6b662d5c72c29903813eJake Slack 182303928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 182403928aee4356845252ac6b662d5c72c29903813eJake Slack /** 182503928aee4356845252ac6b662d5c72c29903813eJake Slack * @param protocol 182603928aee4356845252ac6b662d5c72c29903813eJake Slack * The protocol to set. 182703928aee4356845252ac6b662d5c72c29903813eJake Slack */ 182803928aee4356845252ac6b662d5c72c29903813eJake Slack public void setProtocol(String protocol) 182903928aee4356845252ac6b662d5c72c29903813eJake Slack { 183003928aee4356845252ac6b662d5c72c29903813eJake Slack _protocol = protocol; 183103928aee4356845252ac6b662d5c72c29903813eJake Slack } 183203928aee4356845252ac6b662d5c72c29903813eJake Slack 183303928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 183403928aee4356845252ac6b662d5c72c29903813eJake Slack /** 183503928aee4356845252ac6b662d5c72c29903813eJake Slack * Set the character encoding used for the query string. This call will effect the return of getQueryString and getParamaters. It must be called before any 183603928aee4356845252ac6b662d5c72c29903813eJake Slack * geParameter methods. 183703928aee4356845252ac6b662d5c72c29903813eJake Slack * 183803928aee4356845252ac6b662d5c72c29903813eJake Slack * The request attribute "org.eclipse.jetty.server.server.Request.queryEncoding" may be set as an alternate method of calling setQueryEncoding. 183903928aee4356845252ac6b662d5c72c29903813eJake Slack * 184003928aee4356845252ac6b662d5c72c29903813eJake Slack * @param queryEncoding 184103928aee4356845252ac6b662d5c72c29903813eJake Slack */ 184203928aee4356845252ac6b662d5c72c29903813eJake Slack public void setQueryEncoding(String queryEncoding) 184303928aee4356845252ac6b662d5c72c29903813eJake Slack { 184403928aee4356845252ac6b662d5c72c29903813eJake Slack _queryEncoding = queryEncoding; 184503928aee4356845252ac6b662d5c72c29903813eJake Slack _queryString = null; 184603928aee4356845252ac6b662d5c72c29903813eJake Slack } 184703928aee4356845252ac6b662d5c72c29903813eJake Slack 184803928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 184903928aee4356845252ac6b662d5c72c29903813eJake Slack /** 185003928aee4356845252ac6b662d5c72c29903813eJake Slack * @param queryString 185103928aee4356845252ac6b662d5c72c29903813eJake Slack * The queryString to set. 185203928aee4356845252ac6b662d5c72c29903813eJake Slack */ 185303928aee4356845252ac6b662d5c72c29903813eJake Slack public void setQueryString(String queryString) 185403928aee4356845252ac6b662d5c72c29903813eJake Slack { 185503928aee4356845252ac6b662d5c72c29903813eJake Slack _queryString = queryString; 185603928aee4356845252ac6b662d5c72c29903813eJake Slack _queryEncoding = null; //assume utf-8 185703928aee4356845252ac6b662d5c72c29903813eJake Slack } 185803928aee4356845252ac6b662d5c72c29903813eJake Slack 185903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 186003928aee4356845252ac6b662d5c72c29903813eJake Slack /** 186103928aee4356845252ac6b662d5c72c29903813eJake Slack * @param addr 186203928aee4356845252ac6b662d5c72c29903813eJake Slack * The address to set. 186303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 186403928aee4356845252ac6b662d5c72c29903813eJake Slack public void setRemoteAddr(String addr) 186503928aee4356845252ac6b662d5c72c29903813eJake Slack { 186603928aee4356845252ac6b662d5c72c29903813eJake Slack _remoteAddr = addr; 186703928aee4356845252ac6b662d5c72c29903813eJake Slack } 186803928aee4356845252ac6b662d5c72c29903813eJake Slack 186903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 187003928aee4356845252ac6b662d5c72c29903813eJake Slack /** 187103928aee4356845252ac6b662d5c72c29903813eJake Slack * @param host 187203928aee4356845252ac6b662d5c72c29903813eJake Slack * The host to set. 187303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 187403928aee4356845252ac6b662d5c72c29903813eJake Slack public void setRemoteHost(String host) 187503928aee4356845252ac6b662d5c72c29903813eJake Slack { 187603928aee4356845252ac6b662d5c72c29903813eJake Slack _remoteHost = host; 187703928aee4356845252ac6b662d5c72c29903813eJake Slack } 187803928aee4356845252ac6b662d5c72c29903813eJake Slack 187903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 188003928aee4356845252ac6b662d5c72c29903813eJake Slack /** 188103928aee4356845252ac6b662d5c72c29903813eJake Slack * @param requestedSessionId 188203928aee4356845252ac6b662d5c72c29903813eJake Slack * The requestedSessionId to set. 188303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 188403928aee4356845252ac6b662d5c72c29903813eJake Slack public void setRequestedSessionId(String requestedSessionId) 188503928aee4356845252ac6b662d5c72c29903813eJake Slack { 188603928aee4356845252ac6b662d5c72c29903813eJake Slack _requestedSessionId = requestedSessionId; 188703928aee4356845252ac6b662d5c72c29903813eJake Slack } 188803928aee4356845252ac6b662d5c72c29903813eJake Slack 188903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 189003928aee4356845252ac6b662d5c72c29903813eJake Slack /** 189103928aee4356845252ac6b662d5c72c29903813eJake Slack * @param requestedSessionIdCookie 189203928aee4356845252ac6b662d5c72c29903813eJake Slack * The requestedSessionIdCookie to set. 189303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 189403928aee4356845252ac6b662d5c72c29903813eJake Slack public void setRequestedSessionIdFromCookie(boolean requestedSessionIdCookie) 189503928aee4356845252ac6b662d5c72c29903813eJake Slack { 189603928aee4356845252ac6b662d5c72c29903813eJake Slack _requestedSessionIdFromCookie = requestedSessionIdCookie; 189703928aee4356845252ac6b662d5c72c29903813eJake Slack } 189803928aee4356845252ac6b662d5c72c29903813eJake Slack 189903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 190003928aee4356845252ac6b662d5c72c29903813eJake Slack /** 190103928aee4356845252ac6b662d5c72c29903813eJake Slack * @param requestURI 190203928aee4356845252ac6b662d5c72c29903813eJake Slack * The requestURI to set. 190303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 190403928aee4356845252ac6b662d5c72c29903813eJake Slack public void setRequestURI(String requestURI) 190503928aee4356845252ac6b662d5c72c29903813eJake Slack { 190603928aee4356845252ac6b662d5c72c29903813eJake Slack _requestURI = requestURI; 190703928aee4356845252ac6b662d5c72c29903813eJake Slack } 190803928aee4356845252ac6b662d5c72c29903813eJake Slack 190903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 191003928aee4356845252ac6b662d5c72c29903813eJake Slack /** 191103928aee4356845252ac6b662d5c72c29903813eJake Slack * @param scheme 191203928aee4356845252ac6b662d5c72c29903813eJake Slack * The scheme to set. 191303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 191403928aee4356845252ac6b662d5c72c29903813eJake Slack public void setScheme(String scheme) 191503928aee4356845252ac6b662d5c72c29903813eJake Slack { 191603928aee4356845252ac6b662d5c72c29903813eJake Slack _scheme = scheme; 191703928aee4356845252ac6b662d5c72c29903813eJake Slack } 191803928aee4356845252ac6b662d5c72c29903813eJake Slack 191903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 192003928aee4356845252ac6b662d5c72c29903813eJake Slack /** 192103928aee4356845252ac6b662d5c72c29903813eJake Slack * @param host 192203928aee4356845252ac6b662d5c72c29903813eJake Slack * The host to set. 192303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 192403928aee4356845252ac6b662d5c72c29903813eJake Slack public void setServerName(String host) 192503928aee4356845252ac6b662d5c72c29903813eJake Slack { 192603928aee4356845252ac6b662d5c72c29903813eJake Slack _serverName = host; 192703928aee4356845252ac6b662d5c72c29903813eJake Slack } 192803928aee4356845252ac6b662d5c72c29903813eJake Slack 192903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 193003928aee4356845252ac6b662d5c72c29903813eJake Slack /** 193103928aee4356845252ac6b662d5c72c29903813eJake Slack * @param port 193203928aee4356845252ac6b662d5c72c29903813eJake Slack * The port to set. 193303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 193403928aee4356845252ac6b662d5c72c29903813eJake Slack public void setServerPort(int port) 193503928aee4356845252ac6b662d5c72c29903813eJake Slack { 193603928aee4356845252ac6b662d5c72c29903813eJake Slack _port = port; 193703928aee4356845252ac6b662d5c72c29903813eJake Slack } 193803928aee4356845252ac6b662d5c72c29903813eJake Slack 193903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 194003928aee4356845252ac6b662d5c72c29903813eJake Slack /** 194103928aee4356845252ac6b662d5c72c29903813eJake Slack * @param servletPath 194203928aee4356845252ac6b662d5c72c29903813eJake Slack * The servletPath to set. 194303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 194403928aee4356845252ac6b662d5c72c29903813eJake Slack public void setServletPath(String servletPath) 194503928aee4356845252ac6b662d5c72c29903813eJake Slack { 194603928aee4356845252ac6b662d5c72c29903813eJake Slack _servletPath = servletPath; 194703928aee4356845252ac6b662d5c72c29903813eJake Slack } 194803928aee4356845252ac6b662d5c72c29903813eJake Slack 194903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 195003928aee4356845252ac6b662d5c72c29903813eJake Slack /** 195103928aee4356845252ac6b662d5c72c29903813eJake Slack * @param session 195203928aee4356845252ac6b662d5c72c29903813eJake Slack * The session to set. 195303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 195403928aee4356845252ac6b662d5c72c29903813eJake Slack public void setSession(HttpSession session) 195503928aee4356845252ac6b662d5c72c29903813eJake Slack { 195603928aee4356845252ac6b662d5c72c29903813eJake Slack _session = session; 195703928aee4356845252ac6b662d5c72c29903813eJake Slack } 195803928aee4356845252ac6b662d5c72c29903813eJake Slack 195903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 196003928aee4356845252ac6b662d5c72c29903813eJake Slack /** 196103928aee4356845252ac6b662d5c72c29903813eJake Slack * @param sessionManager 196203928aee4356845252ac6b662d5c72c29903813eJake Slack * The sessionManager to set. 196303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 196403928aee4356845252ac6b662d5c72c29903813eJake Slack public void setSessionManager(SessionManager sessionManager) 196503928aee4356845252ac6b662d5c72c29903813eJake Slack { 196603928aee4356845252ac6b662d5c72c29903813eJake Slack _sessionManager = sessionManager; 196703928aee4356845252ac6b662d5c72c29903813eJake Slack } 196803928aee4356845252ac6b662d5c72c29903813eJake Slack 196903928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 197003928aee4356845252ac6b662d5c72c29903813eJake Slack public void setTimeStamp(long ts) 197103928aee4356845252ac6b662d5c72c29903813eJake Slack { 197203928aee4356845252ac6b662d5c72c29903813eJake Slack _timeStamp = ts; 197303928aee4356845252ac6b662d5c72c29903813eJake Slack } 197403928aee4356845252ac6b662d5c72c29903813eJake Slack 197503928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 197603928aee4356845252ac6b662d5c72c29903813eJake Slack /** 197703928aee4356845252ac6b662d5c72c29903813eJake Slack * @param uri 197803928aee4356845252ac6b662d5c72c29903813eJake Slack * The uri to set. 197903928aee4356845252ac6b662d5c72c29903813eJake Slack */ 198003928aee4356845252ac6b662d5c72c29903813eJake Slack public void setUri(HttpURI uri) 198103928aee4356845252ac6b662d5c72c29903813eJake Slack { 198203928aee4356845252ac6b662d5c72c29903813eJake Slack _uri = uri; 198303928aee4356845252ac6b662d5c72c29903813eJake Slack } 198403928aee4356845252ac6b662d5c72c29903813eJake Slack 198503928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 198603928aee4356845252ac6b662d5c72c29903813eJake Slack public void setUserIdentityScope(UserIdentity.Scope scope) 198703928aee4356845252ac6b662d5c72c29903813eJake Slack { 198803928aee4356845252ac6b662d5c72c29903813eJake Slack _scope = scope; 198903928aee4356845252ac6b662d5c72c29903813eJake Slack } 199003928aee4356845252ac6b662d5c72c29903813eJake Slack 199103928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 199203928aee4356845252ac6b662d5c72c29903813eJake Slack /** 199303928aee4356845252ac6b662d5c72c29903813eJake Slack * Set timetstamp of request dispatch 199403928aee4356845252ac6b662d5c72c29903813eJake Slack * 199503928aee4356845252ac6b662d5c72c29903813eJake Slack * @param value 199603928aee4356845252ac6b662d5c72c29903813eJake Slack * timestamp 199703928aee4356845252ac6b662d5c72c29903813eJake Slack */ 199803928aee4356845252ac6b662d5c72c29903813eJake Slack public void setDispatchTime(long value) 199903928aee4356845252ac6b662d5c72c29903813eJake Slack { 200003928aee4356845252ac6b662d5c72c29903813eJake Slack _dispatchTime = value; 200103928aee4356845252ac6b662d5c72c29903813eJake Slack } 200203928aee4356845252ac6b662d5c72c29903813eJake Slack 200303928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 200403928aee4356845252ac6b662d5c72c29903813eJake Slack public AsyncContext startAsync() throws IllegalStateException 200503928aee4356845252ac6b662d5c72c29903813eJake Slack { 200603928aee4356845252ac6b662d5c72c29903813eJake Slack if (!_asyncSupported) 200703928aee4356845252ac6b662d5c72c29903813eJake Slack throw new IllegalStateException("!asyncSupported"); 200803928aee4356845252ac6b662d5c72c29903813eJake Slack _async.startAsync(); 200903928aee4356845252ac6b662d5c72c29903813eJake Slack return _async; 201003928aee4356845252ac6b662d5c72c29903813eJake Slack } 201103928aee4356845252ac6b662d5c72c29903813eJake Slack 201203928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 201303928aee4356845252ac6b662d5c72c29903813eJake Slack public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse) throws IllegalStateException 201403928aee4356845252ac6b662d5c72c29903813eJake Slack { 201503928aee4356845252ac6b662d5c72c29903813eJake Slack if (!_asyncSupported) 201603928aee4356845252ac6b662d5c72c29903813eJake Slack throw new IllegalStateException("!asyncSupported"); 201703928aee4356845252ac6b662d5c72c29903813eJake Slack _async.startAsync(_context,servletRequest,servletResponse); 201803928aee4356845252ac6b662d5c72c29903813eJake Slack return _async; 201903928aee4356845252ac6b662d5c72c29903813eJake Slack } 202003928aee4356845252ac6b662d5c72c29903813eJake Slack 202103928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 202203928aee4356845252ac6b662d5c72c29903813eJake Slack @Override 202303928aee4356845252ac6b662d5c72c29903813eJake Slack public String toString() 202403928aee4356845252ac6b662d5c72c29903813eJake Slack { 202503928aee4356845252ac6b662d5c72c29903813eJake Slack return (_handled?"[":"(") + getMethod() + " " + _uri + (_handled?"]@":")@") + hashCode() + " " + super.toString(); 202603928aee4356845252ac6b662d5c72c29903813eJake Slack } 202703928aee4356845252ac6b662d5c72c29903813eJake Slack 202803928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 202903928aee4356845252ac6b662d5c72c29903813eJake Slack public boolean authenticate(HttpServletResponse response) throws IOException, ServletException 203003928aee4356845252ac6b662d5c72c29903813eJake Slack { 203103928aee4356845252ac6b662d5c72c29903813eJake Slack if (_authentication instanceof Authentication.Deferred) 203203928aee4356845252ac6b662d5c72c29903813eJake Slack { 203303928aee4356845252ac6b662d5c72c29903813eJake Slack setAuthentication(((Authentication.Deferred)_authentication).authenticate(this,response)); 203403928aee4356845252ac6b662d5c72c29903813eJake Slack return !(_authentication instanceof Authentication.ResponseSent); 203503928aee4356845252ac6b662d5c72c29903813eJake Slack } 203603928aee4356845252ac6b662d5c72c29903813eJake Slack response.sendError(HttpStatus.UNAUTHORIZED_401); 203703928aee4356845252ac6b662d5c72c29903813eJake Slack return false; 203803928aee4356845252ac6b662d5c72c29903813eJake Slack } 203903928aee4356845252ac6b662d5c72c29903813eJake Slack 204003928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 204103928aee4356845252ac6b662d5c72c29903813eJake Slack public Part getPart(String name) throws IOException, ServletException 204203928aee4356845252ac6b662d5c72c29903813eJake Slack { 204303928aee4356845252ac6b662d5c72c29903813eJake Slack getParts(); 204403928aee4356845252ac6b662d5c72c29903813eJake Slack return _multiPartInputStream.getPart(name); 204503928aee4356845252ac6b662d5c72c29903813eJake Slack } 204603928aee4356845252ac6b662d5c72c29903813eJake Slack 204703928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 204803928aee4356845252ac6b662d5c72c29903813eJake Slack public Collection<Part> getParts() throws IOException, ServletException 204903928aee4356845252ac6b662d5c72c29903813eJake Slack { 205003928aee4356845252ac6b662d5c72c29903813eJake Slack if (getContentType() == null || !getContentType().startsWith("multipart/form-data")) 205103928aee4356845252ac6b662d5c72c29903813eJake Slack throw new ServletException("Content-Type != multipart/form-data"); 205203928aee4356845252ac6b662d5c72c29903813eJake Slack 205303928aee4356845252ac6b662d5c72c29903813eJake Slack if (_multiPartInputStream == null) 205403928aee4356845252ac6b662d5c72c29903813eJake Slack _multiPartInputStream = (MultiPartInputStream)getAttribute(__MULTIPART_INPUT_STREAM); 205503928aee4356845252ac6b662d5c72c29903813eJake Slack 205603928aee4356845252ac6b662d5c72c29903813eJake Slack if (_multiPartInputStream == null) 205703928aee4356845252ac6b662d5c72c29903813eJake Slack { 205803928aee4356845252ac6b662d5c72c29903813eJake Slack MultipartConfigElement config = (MultipartConfigElement)getAttribute(__MULTIPART_CONFIG_ELEMENT); 205903928aee4356845252ac6b662d5c72c29903813eJake Slack 206003928aee4356845252ac6b662d5c72c29903813eJake Slack if (config == null) 206103928aee4356845252ac6b662d5c72c29903813eJake Slack throw new IllegalStateException("No multipart config for servlet"); 206203928aee4356845252ac6b662d5c72c29903813eJake Slack 206303928aee4356845252ac6b662d5c72c29903813eJake Slack _multiPartInputStream = new MultiPartInputStream(getInputStream(), 206403928aee4356845252ac6b662d5c72c29903813eJake Slack getContentType(), config, 206503928aee4356845252ac6b662d5c72c29903813eJake Slack (_context != null?(File)_context.getAttribute("javax.servlet.context.tempdir"):null)); 206603928aee4356845252ac6b662d5c72c29903813eJake Slack 206703928aee4356845252ac6b662d5c72c29903813eJake Slack setAttribute(__MULTIPART_INPUT_STREAM, _multiPartInputStream); 206803928aee4356845252ac6b662d5c72c29903813eJake Slack setAttribute(__MULTIPART_CONTEXT, _context); 206903928aee4356845252ac6b662d5c72c29903813eJake Slack Collection<Part> parts = _multiPartInputStream.getParts(); //causes parsing 207003928aee4356845252ac6b662d5c72c29903813eJake Slack for (Part p:parts) 207103928aee4356845252ac6b662d5c72c29903813eJake Slack { 207203928aee4356845252ac6b662d5c72c29903813eJake Slack MultiPartInputStream.MultiPart mp = (MultiPartInputStream.MultiPart)p; 207303928aee4356845252ac6b662d5c72c29903813eJake Slack if (mp.getContentDispositionFilename() == null) 207403928aee4356845252ac6b662d5c72c29903813eJake Slack { 207503928aee4356845252ac6b662d5c72c29903813eJake Slack //Servlet Spec 3.0 pg 23, parts without filenames must be put into init params 207603928aee4356845252ac6b662d5c72c29903813eJake Slack String charset = null; 207703928aee4356845252ac6b662d5c72c29903813eJake Slack if (mp.getContentType() != null) 207803928aee4356845252ac6b662d5c72c29903813eJake Slack charset = MimeTypes.getCharsetFromContentType(new ByteArrayBuffer(mp.getContentType())); 207903928aee4356845252ac6b662d5c72c29903813eJake Slack 208003928aee4356845252ac6b662d5c72c29903813eJake Slack ByteArrayOutputStream os = null; 208103928aee4356845252ac6b662d5c72c29903813eJake Slack InputStream is = mp.getInputStream(); //get the bytes regardless of being in memory or in temp file 208203928aee4356845252ac6b662d5c72c29903813eJake Slack try 208303928aee4356845252ac6b662d5c72c29903813eJake Slack { 208403928aee4356845252ac6b662d5c72c29903813eJake Slack os = new ByteArrayOutputStream(); 208503928aee4356845252ac6b662d5c72c29903813eJake Slack IO.copy(is, os); 208603928aee4356845252ac6b662d5c72c29903813eJake Slack String content=new String(os.toByteArray(),charset==null?StringUtil.__UTF8:charset); 208703928aee4356845252ac6b662d5c72c29903813eJake Slack getParameter(""); //cause params to be evaluated 208803928aee4356845252ac6b662d5c72c29903813eJake Slack getParameters().add(mp.getName(), content); 208903928aee4356845252ac6b662d5c72c29903813eJake Slack } 209003928aee4356845252ac6b662d5c72c29903813eJake Slack finally 209103928aee4356845252ac6b662d5c72c29903813eJake Slack { 209203928aee4356845252ac6b662d5c72c29903813eJake Slack IO.close(os); 209303928aee4356845252ac6b662d5c72c29903813eJake Slack IO.close(is); 209403928aee4356845252ac6b662d5c72c29903813eJake Slack } 209503928aee4356845252ac6b662d5c72c29903813eJake Slack } 209603928aee4356845252ac6b662d5c72c29903813eJake Slack } 209703928aee4356845252ac6b662d5c72c29903813eJake Slack } 209803928aee4356845252ac6b662d5c72c29903813eJake Slack 209903928aee4356845252ac6b662d5c72c29903813eJake Slack return _multiPartInputStream.getParts(); 210003928aee4356845252ac6b662d5c72c29903813eJake Slack } 210103928aee4356845252ac6b662d5c72c29903813eJake Slack 210203928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 210303928aee4356845252ac6b662d5c72c29903813eJake Slack public void login(String username, String password) throws ServletException 210403928aee4356845252ac6b662d5c72c29903813eJake Slack { 210503928aee4356845252ac6b662d5c72c29903813eJake Slack if (_authentication instanceof Authentication.Deferred) 210603928aee4356845252ac6b662d5c72c29903813eJake Slack { 210703928aee4356845252ac6b662d5c72c29903813eJake Slack _authentication=((Authentication.Deferred)_authentication).login(username,password,this); 210803928aee4356845252ac6b662d5c72c29903813eJake Slack if (_authentication == null) 210903928aee4356845252ac6b662d5c72c29903813eJake Slack throw new ServletException(); 211003928aee4356845252ac6b662d5c72c29903813eJake Slack } 211103928aee4356845252ac6b662d5c72c29903813eJake Slack else 211203928aee4356845252ac6b662d5c72c29903813eJake Slack { 211303928aee4356845252ac6b662d5c72c29903813eJake Slack throw new ServletException("Authenticated as "+_authentication); 211403928aee4356845252ac6b662d5c72c29903813eJake Slack } 211503928aee4356845252ac6b662d5c72c29903813eJake Slack } 211603928aee4356845252ac6b662d5c72c29903813eJake Slack 211703928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 211803928aee4356845252ac6b662d5c72c29903813eJake Slack public void logout() throws ServletException 211903928aee4356845252ac6b662d5c72c29903813eJake Slack { 212003928aee4356845252ac6b662d5c72c29903813eJake Slack if (_authentication instanceof Authentication.User) 212103928aee4356845252ac6b662d5c72c29903813eJake Slack ((Authentication.User)_authentication).logout(); 212203928aee4356845252ac6b662d5c72c29903813eJake Slack _authentication=Authentication.UNAUTHENTICATED; 212303928aee4356845252ac6b662d5c72c29903813eJake Slack } 212403928aee4356845252ac6b662d5c72c29903813eJake Slack 212503928aee4356845252ac6b662d5c72c29903813eJake Slack /* ------------------------------------------------------------ */ 212603928aee4356845252ac6b662d5c72c29903813eJake Slack /** 212703928aee4356845252ac6b662d5c72c29903813eJake Slack * Merge in a new query string. The query string is merged with the existing parameters and {@link #setParameters(MultiMap)} and 212803928aee4356845252ac6b662d5c72c29903813eJake Slack * {@link #setQueryString(String)} are called with the result. The merge is according to the rules of the servlet dispatch forward method. 212903928aee4356845252ac6b662d5c72c29903813eJake Slack * 213003928aee4356845252ac6b662d5c72c29903813eJake Slack * @param query 213103928aee4356845252ac6b662d5c72c29903813eJake Slack * The query string to merge into the request. 213203928aee4356845252ac6b662d5c72c29903813eJake Slack */ 213303928aee4356845252ac6b662d5c72c29903813eJake Slack public void mergeQueryString(String query) 213403928aee4356845252ac6b662d5c72c29903813eJake Slack { 213503928aee4356845252ac6b662d5c72c29903813eJake Slack // extract parameters from dispatch query 213603928aee4356845252ac6b662d5c72c29903813eJake Slack MultiMap<String> parameters = new MultiMap<String>(); 213703928aee4356845252ac6b662d5c72c29903813eJake Slack UrlEncoded.decodeTo(query,parameters, StringUtil.__UTF8); //have to assume UTF-8 because we can't know otherwise 213803928aee4356845252ac6b662d5c72c29903813eJake Slack 213903928aee4356845252ac6b662d5c72c29903813eJake Slack boolean merge_old_query = false; 214003928aee4356845252ac6b662d5c72c29903813eJake Slack 214103928aee4356845252ac6b662d5c72c29903813eJake Slack // Have we evaluated parameters 214203928aee4356845252ac6b662d5c72c29903813eJake Slack if (!_paramsExtracted) 214303928aee4356845252ac6b662d5c72c29903813eJake Slack extractParameters(); 214403928aee4356845252ac6b662d5c72c29903813eJake Slack 214503928aee4356845252ac6b662d5c72c29903813eJake Slack // Are there any existing parameters? 214603928aee4356845252ac6b662d5c72c29903813eJake Slack if (_parameters != null && _parameters.size() > 0) 214703928aee4356845252ac6b662d5c72c29903813eJake Slack { 214803928aee4356845252ac6b662d5c72c29903813eJake Slack // Merge parameters; new parameters of the same name take precedence. 214903928aee4356845252ac6b662d5c72c29903813eJake Slack Iterator<Entry<String, Object>> iter = _parameters.entrySet().iterator(); 215003928aee4356845252ac6b662d5c72c29903813eJake Slack while (iter.hasNext()) 215103928aee4356845252ac6b662d5c72c29903813eJake Slack { 215203928aee4356845252ac6b662d5c72c29903813eJake Slack Map.Entry<String, Object> entry = iter.next(); 215303928aee4356845252ac6b662d5c72c29903813eJake Slack String name = entry.getKey(); 215403928aee4356845252ac6b662d5c72c29903813eJake Slack 215503928aee4356845252ac6b662d5c72c29903813eJake Slack // If the names match, we will need to remake the query string 215603928aee4356845252ac6b662d5c72c29903813eJake Slack if (parameters.containsKey(name)) 215703928aee4356845252ac6b662d5c72c29903813eJake Slack merge_old_query = true; 215803928aee4356845252ac6b662d5c72c29903813eJake Slack 215903928aee4356845252ac6b662d5c72c29903813eJake Slack // Add the old values to the new parameter map 216003928aee4356845252ac6b662d5c72c29903813eJake Slack Object values = entry.getValue(); 216103928aee4356845252ac6b662d5c72c29903813eJake Slack for (int i = 0; i < LazyList.size(values); i++) 216203928aee4356845252ac6b662d5c72c29903813eJake Slack parameters.add(name,LazyList.get(values,i)); 216303928aee4356845252ac6b662d5c72c29903813eJake Slack } 216403928aee4356845252ac6b662d5c72c29903813eJake Slack } 216503928aee4356845252ac6b662d5c72c29903813eJake Slack 216603928aee4356845252ac6b662d5c72c29903813eJake Slack if (_queryString != null && _queryString.length() > 0) 216703928aee4356845252ac6b662d5c72c29903813eJake Slack { 216803928aee4356845252ac6b662d5c72c29903813eJake Slack if (merge_old_query) 216903928aee4356845252ac6b662d5c72c29903813eJake Slack { 217003928aee4356845252ac6b662d5c72c29903813eJake Slack StringBuilder overridden_query_string = new StringBuilder(); 217103928aee4356845252ac6b662d5c72c29903813eJake Slack MultiMap<String> overridden_old_query = new MultiMap<String>(); 217203928aee4356845252ac6b662d5c72c29903813eJake Slack UrlEncoded.decodeTo(_queryString,overridden_old_query,getQueryEncoding());//decode using any queryencoding set for the request 217303928aee4356845252ac6b662d5c72c29903813eJake Slack 217403928aee4356845252ac6b662d5c72c29903813eJake Slack 217503928aee4356845252ac6b662d5c72c29903813eJake Slack MultiMap<String> overridden_new_query = new MultiMap<String>(); 217603928aee4356845252ac6b662d5c72c29903813eJake Slack UrlEncoded.decodeTo(query,overridden_new_query,StringUtil.__UTF8); //have to assume utf8 as we cannot know otherwise 217703928aee4356845252ac6b662d5c72c29903813eJake Slack 217803928aee4356845252ac6b662d5c72c29903813eJake Slack Iterator<Entry<String, Object>> iter = overridden_old_query.entrySet().iterator(); 217903928aee4356845252ac6b662d5c72c29903813eJake Slack while (iter.hasNext()) 218003928aee4356845252ac6b662d5c72c29903813eJake Slack { 218103928aee4356845252ac6b662d5c72c29903813eJake Slack Map.Entry<String, Object> entry = iter.next(); 218203928aee4356845252ac6b662d5c72c29903813eJake Slack String name = entry.getKey(); 218303928aee4356845252ac6b662d5c72c29903813eJake Slack if (!overridden_new_query.containsKey(name)) 218403928aee4356845252ac6b662d5c72c29903813eJake Slack { 218503928aee4356845252ac6b662d5c72c29903813eJake Slack Object values = entry.getValue(); 218603928aee4356845252ac6b662d5c72c29903813eJake Slack for (int i = 0; i < LazyList.size(values); i++) 218703928aee4356845252ac6b662d5c72c29903813eJake Slack { 2188806b0b93225bdf4a36d560351642126100e1950eNeil Fuller overridden_query_string.append("&").append(name).append("=").append(LazyList.<String>get(values,i)); 218903928aee4356845252ac6b662d5c72c29903813eJake Slack } 219003928aee4356845252ac6b662d5c72c29903813eJake Slack } 219103928aee4356845252ac6b662d5c72c29903813eJake Slack } 219203928aee4356845252ac6b662d5c72c29903813eJake Slack 219303928aee4356845252ac6b662d5c72c29903813eJake Slack query = query + overridden_query_string; 219403928aee4356845252ac6b662d5c72c29903813eJake Slack } 219503928aee4356845252ac6b662d5c72c29903813eJake Slack else 219603928aee4356845252ac6b662d5c72c29903813eJake Slack { 219703928aee4356845252ac6b662d5c72c29903813eJake Slack query = query + "&" + _queryString; 219803928aee4356845252ac6b662d5c72c29903813eJake Slack } 219903928aee4356845252ac6b662d5c72c29903813eJake Slack } 220003928aee4356845252ac6b662d5c72c29903813eJake Slack 220103928aee4356845252ac6b662d5c72c29903813eJake Slack setParameters(parameters); 220203928aee4356845252ac6b662d5c72c29903813eJake Slack setQueryString(query); 220303928aee4356845252ac6b662d5c72c29903813eJake Slack } 220403928aee4356845252ac6b662d5c72c29903813eJake Slack} 2205