You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@locus.apache.org on 2000/11/30 23:43:57 UTC
cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/util/http Cookies.java ServerCookie.java
costin 00/11/30 14:43:56
Modified: . changes3.3
src/facade22/org/apache/tomcat/facade CookieFacade.java
HttpServletRequestFacade.java
HttpServletResponseFacade.java
src/share/org/apache/tomcat/core Request.java
src/share/org/apache/tomcat/helper CookieTools.java
src/share/org/apache/tomcat/modules/session SessionId.java
src/share/org/apache/tomcat/util/http Cookies.java
ServerCookie.java
Removed: src/share/org/apache/tomcat/util ServerCookie.java
Log:
Removed the old ServerCookie and 1/2 of CookieTools.
Revision Changes Path
1.2 +22 -3 jakarta-tomcat/changes3.3
Index: changes3.3
===================================================================
RCS file: /home/cvs/jakarta-tomcat/changes3.3,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- changes3.3 2000/11/30 08:19:10 1.1
+++ changes3.3 2000/11/30 22:43:43 1.2
@@ -134,8 +134,6 @@
- better integration for form login with apache
-- This is the living To-Do list for Tomcat 3.3
-
- Optimize error handling. For example, we can use int IDs for error
messages ( needs enhancements in StringManager )
- Cache the error page handler ( instead of doing a second mapping
@@ -153,5 +151,26 @@
- Merge HTTP1.1 code from catalina
- Merge JMX code from catalina
+
+- Merge JNDI code from catalina
+
+- Experiment and implement "sendFile" for chunks of static JSP, cache the
+static region as byte[] on the server ( integrated mode )
+
+- Fix mod_jk for Apache2.0 !!!
+
+- Add callbacks to mod_jk, integrate authentication ( user Apache's user db)
+
+- Experiment with mixed applications, integrate the session and auth
+representation of mod_perl and php
+
+- Implement the profiling web app ( that allows you to get a profile of a
+servlet container, how expensive is each API call )
+
+- Expose more internals via /admin ( number of threads, memory, etc)
+
+- Experiment with Apache2.0 config ( and IIS ? ), try to integrate
+
+- Make sure the request parsed by Apache is not parsed again.
-- Merge JNDI code from catalina
\ No newline at end of file
+- Interceptor == Module == SAF ( will this ever happen ?)
1.4 +1 -0 jakarta-tomcat/src/facade22/org/apache/tomcat/facade/CookieFacade.java
Index: CookieFacade.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/facade22/org/apache/tomcat/facade/CookieFacade.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- CookieFacade.java 2000/10/27 20:50:49 1.3
+++ CookieFacade.java 2000/11/30 22:43:46 1.4
@@ -61,6 +61,7 @@
package org.apache.tomcat.facade;
import org.apache.tomcat.util.*;
+import org.apache.tomcat.util.http.*;
import org.apache.tomcat.helper.RequestUtil;
import org.apache.tomcat.core.*;
import org.apache.tomcat.facade.*;
1.10 +1 -0 jakarta-tomcat/src/facade22/org/apache/tomcat/facade/HttpServletRequestFacade.java
Index: HttpServletRequestFacade.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/facade22/org/apache/tomcat/facade/HttpServletRequestFacade.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- HttpServletRequestFacade.java 2000/11/30 04:58:36 1.9
+++ HttpServletRequestFacade.java 2000/11/30 22:43:46 1.10
@@ -61,6 +61,7 @@
package org.apache.tomcat.facade;
import org.apache.tomcat.util.*;
+import org.apache.tomcat.util.http.*;
import org.apache.tomcat.helper.RequestUtil;
import org.apache.tomcat.core.*;
import org.apache.tomcat.facade.*;
1.12 +3 -13 jakarta-tomcat/src/facade22/org/apache/tomcat/facade/HttpServletResponseFacade.java
Index: HttpServletResponseFacade.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/facade22/org/apache/tomcat/facade/HttpServletResponseFacade.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- HttpServletResponseFacade.java 2000/11/30 07:59:03 1.11
+++ HttpServletResponseFacade.java 2000/11/30 22:43:46 1.12
@@ -61,6 +61,7 @@
package org.apache.tomcat.facade;
import org.apache.tomcat.util.*;
+import org.apache.tomcat.util.http.*;
import org.apache.tomcat.core.*;
import org.apache.tomcat.helper.*;
import java.io.*;
@@ -113,19 +114,8 @@
// frequent operation ( for example sc can be reused )
ServerCookie sc=new ServerCookie();
cookie2serverCookie( cookie, sc);
- addHeader( CookieTools.getCookieHeaderName(cookie.getVersion()),
- CookieTools.getCookieHeaderValue(sc));
- // This shouldn't be done - if the user asks for a specific
- // version, only that version should be set !!!
-// if( cookie.getVersion() == 1 ) {
-// // sc is not reused
-// sc.setVersion(0);
-// addHeader( CookieTools.getCookieHeaderName(sc.getVersion()),
-// CookieTools.getCookieHeaderValue(sc));
-// }
- // Is it needed ? ( result of refactoring, that's how the code
- // worked)
- //response.addUserCookie(cookie);
+ addHeader( sc.getCookieHeaderName(),
+ sc.getCookieHeaderValue());
}
public boolean containsHeader(String name) {
1.76 +1 -0 jakarta-tomcat/src/share/org/apache/tomcat/core/Request.java
Index: Request.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Request.java,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -r1.75 -r1.76
--- Request.java 2000/11/30 07:59:04 1.75
+++ Request.java 2000/11/30 22:43:48 1.76
@@ -61,6 +61,7 @@
package org.apache.tomcat.core;
import org.apache.tomcat.util.*;
+import org.apache.tomcat.util.http.*;
import org.apache.tomcat.helper.*;
import org.apache.tomcat.session.ServerSession;
import java.io.IOException;
1.7 +109 -108 jakarta-tomcat/src/share/org/apache/tomcat/helper/CookieTools.java
Index: CookieTools.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/helper/CookieTools.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- CookieTools.java 2000/11/20 02:09:01 1.6
+++ CookieTools.java 2000/11/30 22:43:50 1.7
@@ -59,6 +59,7 @@
package org.apache.tomcat.helper;
import org.apache.tomcat.util.*;
+import org.apache.tomcat.util.http.*;
import org.apache.tomcat.core.*;
import org.apache.tomcat.session.*;
import java.text.*;
@@ -157,114 +158,114 @@
}
- /** Return the header name to set the cookie, based on cookie
- * version
- */
- public static String getCookieHeaderName(int version) {
- if (version == 1) {
- return "Set-Cookie2";
- } else {
- return "Set-Cookie";
- }
- }
-
- /** Return the header value used to set this cookie
- * @deprecated Use StringBuffer version
- */
- public static String getCookieHeaderValue(ServerCookie cookie) {
- StringBuffer buf = new StringBuffer();
- getCookieHeaderValue( cookie, buf );
- return buf.toString();
- }
-
- /** Return the header value used to set this cookie
- */
- public static void getCookieHeaderValue(ServerCookie cookie,
- StringBuffer buf) {
- int version = cookie.getVersion();
-
- // this part is the same for all cookies
-
- buf.append(cookie.getName());
- buf.append("=");
- maybeQuote(version, buf, cookie.getValue().toString());
-
- // add version 1 specific information
- if (version == 1) {
- // Version=1 ... required
- buf.append ("; Version=1");
-
- // Comment=comment
- if (cookie.getComment() != null) {
- buf.append ("; Comment=");
- maybeQuote (version, buf, cookie.getComment().toString());
- }
- }
-
- // add domain information, if present
-
- if (!cookie.getDomain().isNull()) {
- buf.append("; Domain=");
- maybeQuote (version, buf, cookie.getDomain().toString());
- }
-
- // Max-Age=secs/Discard ... or use old "Expires" format
- if (cookie.getMaxAge() >= 0) {
- if (version == 0) {
- buf.append ("; Expires=");
- DateTool.oldCookieFormat.format(new Date( System.currentTimeMillis() + cookie.getMaxAge() *1000L) ,buf,
- new FieldPosition(0));
-
- } else {
- buf.append ("; Max-Age=");
- buf.append (cookie.getMaxAge());
- }
- } else if (version == 1)
- buf.append ("; Discard");
-
- // Path=path
- if (! cookie.getPath().isNull()) {
- buf.append ("; Path=");
- maybeQuote (version, buf, cookie.getPath().toString());
- }
-
- // Secure
- if (cookie.getSecure()) {
- buf.append ("; Secure");
- }
- }
-
- public static void maybeQuote (int version, StringBuffer buf,
- String value)
- {
- if (version == 0 || isToken (value))
- buf.append (value);
- else {
- buf.append ('"');
- buf.append (value);
- buf.append ('"');
- }
- }
-
- //
- // from RFC 2068, token special case characters
- //
- private static final String tspecials = "()<>@,;:\\\"/[]?={} \t";
-
- /*
- * Return true iff the string counts as an HTTP/1.1 "token".
- */
- private static boolean isToken (String value) {
- int len = value.length ();
-
- for (int i = 0; i < len; i++) {
- char c = value.charAt (i);
-
- if (c < 0x20 || c >= 0x7f || tspecials.indexOf (c) != -1)
- return false;
- }
- return true;
- }
+// /** Return the header name to set the cookie, based on cookie
+// * version
+// */
+// public static String getCookieHeaderName(int version) {
+// if (version == 1) {
+// return "Set-Cookie2";
+// } else {
+// return "Set-Cookie";
+// }
+// }
+
+// /** Return the header value used to set this cookie
+// * @deprecated Use StringBuffer version
+// */
+// public static String getCookieHeaderValue(ServerCookie cookie) {
+// StringBuffer buf = new StringBuffer();
+// getCookieHeaderValue( cookie, buf );
+// return buf.toString();
+// }
+
+// /** Return the header value used to set this cookie
+// */
+// public static void getCookieHeaderValue(ServerCookie cookie,
+// StringBuffer buf) {
+// int version = cookie.getVersion();
+
+// // this part is the same for all cookies
+
+// buf.append(cookie.getName());
+// buf.append("=");
+// maybeQuote(version, buf, cookie.getValue().toString());
+
+// // add version 1 specific information
+// if (version == 1) {
+// // Version=1 ... required
+// buf.append ("; Version=1");
+
+// // Comment=comment
+// if (cookie.getComment() != null) {
+// buf.append ("; Comment=");
+// maybeQuote (version, buf, cookie.getComment().toString());
+// }
+// }
+
+// // add domain information, if present
+
+// if (!cookie.getDomain().isNull()) {
+// buf.append("; Domain=");
+// maybeQuote (version, buf, cookie.getDomain().toString());
+// }
+
+// // Max-Age=secs/Discard ... or use old "Expires" format
+// if (cookie.getMaxAge() >= 0) {
+// if (version == 0) {
+// buf.append ("; Expires=");
+// DateTool.oldCookieFormat.format(new Date( System.currentTimeMillis() + cookie.getMaxAge() *1000L) ,buf,
+// new FieldPosition(0));
+
+// } else {
+// buf.append ("; Max-Age=");
+// buf.append (cookie.getMaxAge());
+// }
+// } else if (version == 1)
+// buf.append ("; Discard");
+
+// // Path=path
+// if (! cookie.getPath().isNull()) {
+// buf.append ("; Path=");
+// maybeQuote (version, buf, cookie.getPath().toString());
+// }
+
+// // Secure
+// if (cookie.getSecure()) {
+// buf.append ("; Secure");
+// }
+// }
+
+// public static void maybeQuote (int version, StringBuffer buf,
+// String value)
+// {
+// if (version == 0 || isToken (value))
+// buf.append (value);
+// else {
+// buf.append ('"');
+// buf.append (value);
+// buf.append ('"');
+// }
+// }
+
+// //
+// // from RFC 2068, token special case characters
+// //
+// private static final String tspecials = "()<>@,;:\\\"/[]?={} \t";
+
+// /*
+// * Return true iff the string counts as an HTTP/1.1 "token".
+// */
+// private static boolean isToken (String value) {
+// int len = value.length ();
+
+// for (int i = 0; i < len; i++) {
+// char c = value.charAt (i);
+
+// if (c < 0x20 || c >= 0x7f || tspecials.indexOf (c) != -1)
+// return false;
+// }
+// return true;
+// }
}
1.3 +2 -1 jakarta-tomcat/src/share/org/apache/tomcat/modules/session/SessionId.java
Index: SessionId.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/modules/session/SessionId.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SessionId.java 2000/11/22 00:09:59 1.2
+++ SessionId.java 2000/11/30 22:43:53 1.3
@@ -61,6 +61,7 @@
import org.apache.tomcat.core.*;
import org.apache.tomcat.util.*;
+import org.apache.tomcat.util.http.*;
import org.apache.tomcat.helper.*;
import org.apache.tomcat.session.ServerSessionManager;
import org.apache.tomcat.session.ServerSession;
@@ -245,7 +246,7 @@
buf.append( "JSESSIONID=" ).append( reqSessionId );
buf.append( ";Version=1" );
buf.append( ";Path=" );
- CookieTools.maybeQuote( 1 , buf, sessionPath ); // XXX ugly
+ ServerCookie.maybeQuote( 1 , buf, sessionPath ); // XXX ugly
buf.append( ";Discard" );
// discard results from: cookie.setMaxAge(-1);
1.2 +23 -14 jakarta-tomcat/src/share/org/apache/tomcat/util/http/Cookies.java
Index: Cookies.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/http/Cookies.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Cookies.java 2000/11/30 17:42:49 1.1
+++ Cookies.java 2000/11/30 22:43:55 1.2
@@ -62,7 +62,6 @@
import org.apache.tomcat.util.collections.*;
import org.apache.tomcat.util.MessageBytes;
import org.apache.tomcat.util.MimeHeaders;
-import org.apache.tomcat.util.ServerCookie;
import org.apache.tomcat.util.DateTool;
import java.io.*;
@@ -71,6 +70,7 @@
/**
* A collection of cookies - reusable and tuned for server side performance.
+ * Based on RFC2965 ( and 2109 )
*
* @author Costin Manolache
*/
@@ -139,19 +139,22 @@
// process each "cookie" header
int pos=0;
while( pos>=0 ) {
+ // Cookie2: version ? not needed
pos=headers.findHeader( "Cookie", pos );
// no more cookie headers headers
if( pos<0 ) break;
MessageBytes cookieValue=headers.getValue( pos );
if( cookieValue==null || cookieValue.isNull() ) continue;
- if( cookieValue.getType() == MessageBytes.T_BYTES ) {
- processCookieHeader( cookieValue.getBytes(),
- cookieValue.getOffset(),
- cookieValue.getLength());
- } else {
- processCookieHeader( cookieValue.toString() );
- }
+
+ // Uncomment to test the new parsing code
+ // if( cookieValue.getType() == MessageBytes.T_BYTES ) {
+ // processCookieHeader( cookieValue.getBytes(),
+ // cookieValue.getOffset(),
+ // cookieValue.getLength());
+ // } else {
+ processCookieHeader( cookieValue.toString() );
+ // }
}
}
@@ -167,14 +170,19 @@
int startName=skipSpaces(bytes, pos, end);
if( pos>=end )
return; // only spaces
-
+
+ // Version should be the first token
boolean isSpecial=false;
if(bytes[pos]=='$') { pos++; isSpecial=true; }
-
+
int endName= findDelim1( bytes, startName, end); // " =;,"
- if(endName >= end )
- return; // invalid
-
+ if(endName >= end ) {
+ // it's a name-only cookie ( valid in RFC2109 )
+ // XXX todo
+ return;
+ }
+ // XXX it's a , or a ; ?
+
// current = "=" or " "
pos= skipSpaces( bytes, endName, end );
if(endName >= end )
@@ -198,6 +206,7 @@
pos++;
int startValue=skipSpaces( bytes, pos, end);
int endValue=startValue;
+ // XXX quote is valid only in version=1 cookies
if( bytes[pos]== '\'' || bytes[pos]=='"' ) {
startValue++;
endValue=indexOf( bytes, startValue, end, bytes[startValue] );
@@ -212,7 +221,7 @@
sc.getValue().setBytes( bytes, startValue, endValue );
continue;
}
- // special - Path, Version, Domain
+ // special - Path, Version, Domain, Port
// XXX TODO
}
}
1.2 +17 -2 jakarta-tomcat/src/share/org/apache/tomcat/util/http/ServerCookie.java
Index: ServerCookie.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/http/ServerCookie.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ServerCookie.java 2000/11/30 17:42:49 1.1
+++ ServerCookie.java 2000/11/30 22:43:55 1.2
@@ -79,11 +79,13 @@
private int maxAge = -1; // ;Max-Age=VALUE
// ;Discard ... implied by maxAge < 0
+ // RFC2109: maxAge=0 will end a session
private MessageBytes path=new MessageBytes(); // ;Path=VALUE .
private boolean secure; // ;Secure
private int version = 0; // ;Version=1
-
+ //XXX CommentURL, Port -> use notes ?
+
public ServerCookie() {
}
@@ -200,10 +202,19 @@
* version
*/
public String getCookieHeaderName() {
+ return getCookieHeaderName(version);
+ }
+
+ /** Return the header name to set the cookie, based on cookie
+ * version
+ */
+ public static String getCookieHeaderName(int version) {
if (version == 1) {
+ // RFC2965
return "Set-Cookie2";
} else {
- return "Set-Cookie";
+ // Old Netscape
+ return "Set-Cookie";
}
}
@@ -226,6 +237,7 @@
buf.append("=");
maybeQuote(version, buf, cookie.getValue().toString());
+ // XXX Netscape cookie: "; "
// add version 1 specific information
if (version == 1) {
// Version=1 ... required
@@ -248,7 +260,10 @@
// Max-Age=secs/Discard ... or use old "Expires" format
if (cookie.getMaxAge() >= 0) {
if (version == 0) {
+ // XXX XXX XXX We need to send both, for
+ // interoperatibility (long word )
buf.append (";Expires=");
+ // Wdy, DD-Mon-YY HH:MM:SS GMT ( Expires netscape format )
DateTool.oldCookieFormat.
format(new Date( System.currentTimeMillis() +
cookie.getMaxAge() *1000L) ,buf,