ServerCookiepublic class ServerCookie extends Object implements SerializableServer-side cookie representation.
Allows recycling and uses MessageBytes as low-level
representation ( and thus the byte-> char conversion can be delayed
until we know the charset ).
Tomcat.core uses this recyclable object to represent cookies,
and the facade will convert it to the external representation. |
Fields Summary |
---|
private static com.sun.org.apache.commons.logging.Log | log | private static final String | NULL_VALUEThe string sent as the value of the cookie in the Set-Cookie header
for a Cookie whose value is null. | private static final String | ANCIENT_DATE | private org.apache.tomcat.util.buf.MessageBytes | name | private org.apache.tomcat.util.buf.MessageBytes | value | private org.apache.tomcat.util.buf.MessageBytes | comment | private org.apache.tomcat.util.buf.MessageBytes | domain | private int | maxAge | private org.apache.tomcat.util.buf.MessageBytes | path | private boolean | secure | private int | version | private static final String | tspecials | static final int | dbg |
Constructors Summary |
---|
public ServerCookie() // ;Version=1
//XXX CommentURL, Port -> use notes ?
|
Methods Summary |
---|
public static void | appendCookieValue(java.lang.StringBuffer buf, int version, java.lang.String name, java.lang.String value, java.lang.String path, java.lang.String domain, java.lang.String comment, int maxAge, boolean isSecure)
appendCookieValue(buf, version, name, value, path, domain, comment,
maxAge, isSecure, false);
| public static void | appendCookieValue(java.lang.StringBuffer buf, int version, java.lang.String name, java.lang.String value, java.lang.String path, java.lang.String domain, java.lang.String comment, int maxAge, boolean isSecure, boolean encode)
// this part is the same for all cookies
if (encode) {
try {
buf.append(URLEncoder.encode(name, "UTF-8"));
buf.append("=");
/* PWC 6392327
maybeQuote(version, buf, URLEncoder.encode(value, "UTF-8"));
*/
// START PWC 6392327
if (value != null) {
maybeQuote(version, buf,
URLEncoder.encode(value, "UTF-8"));
} else {
maybeQuote(version, buf,
URLEncoder.encode(ServerCookie.NULL_VALUE,
"UTF-8"));
}
// END PWC 6392327
} catch (UnsupportedEncodingException e) {
buf.append(URLEncoder.encode(name));
buf.append("=");
/* PWC 6392327
maybeQuote(version, buf, URLEncoder.encode(value));
*/
// START PWC 6392327
if (value != null) {
maybeQuote(version, buf,
URLEncoder.encode(value));
} else {
maybeQuote(version, buf,
URLEncoder.encode(ServerCookie.NULL_VALUE));
}
// END PWC 6392327
}
} else {
buf.append( name );
buf.append("=");
/* PWC 6392327
maybeQuote(version, buf, value);
*/
// START PWC 6392327
if (value != null) {
maybeQuote(version, buf, value);
} else {
maybeQuote(version, buf, ServerCookie.NULL_VALUE);
}
// END PWC 6392327
}
// XXX Netscape cookie: "; "
// add version 1 specific information
if (version == 1) {
// Version=1 ... required
buf.append ("; Version=1");
// Comment=comment
if (comment!=null) {
buf.append ("; Comment=");
if (encode) {
try {
maybeQuote(version, buf,
URLEncoder.encode(comment, "UTF-8"));
} catch(UnsupportedEncodingException e) {
maybeQuote(version, buf,
URLEncoder.encode(comment));
}
} else {
maybeQuote (version, buf, comment);
}
}
}
// add domain information, if present
if (domain!=null) {
buf.append("; Domain=");
maybeQuote (version, buf, domain);
}
// Max-Age=secs/Discard ... or use old "Expires" format
if (maxAge >= 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 )
// To expire we need to set the time back in future
// ( pfrieden@dChain.com )
if (maxAge == 0)
buf.append( ANCIENT_DATE );
else
DateTool.formatOldCookie
(new Date( System.currentTimeMillis() +
maxAge *1000L), buf,
new FieldPosition(0));
} else {
buf.append ("; Max-Age=");
buf.append (maxAge);
}
}
// Path=path
if (path!=null) {
buf.append ("; Path=");
maybeQuote (version, buf, path);
}
// Secure
if (isSecure) {
buf.append ("; Secure");
}
| public static void | appendEncodedCookieValue(java.lang.StringBuffer buf, int version, java.lang.String name, java.lang.String value, java.lang.String path, java.lang.String domain, java.lang.String comment, int maxAge, boolean isSecure)
appendCookieValue(buf, version, name, value, path, domain, comment,
maxAge, isSecure, true);
| public static boolean | checkName(java.lang.String name)
if (!isToken(name)
|| name.equalsIgnoreCase("Comment") // rfc2019
|| name.equalsIgnoreCase("Discard") // 2019++
|| name.equalsIgnoreCase("Domain")
|| name.equalsIgnoreCase("Expires") // (old cookies)
|| name.equalsIgnoreCase("Max-Age") // rfc2019
|| name.equalsIgnoreCase("Path")
|| name.equalsIgnoreCase("Secure")
|| name.equalsIgnoreCase("Version")
) {
return false;
}
return true;
| private static java.lang.String | escapeDoubleQuotes(java.lang.String s)Escapes any double quotes in the given string.
if (s == null || s.length() == 0 || s.indexOf('"") == -1) {
return s;
}
StringBuffer b = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '"")
b.append('\\").append('"");
else
b.append(c);
}
return b.toString();
| public org.apache.tomcat.util.buf.MessageBytes | getComment()
return comment;
| public java.lang.String | getCookieHeaderName()Return the header name to set the cookie, based on cookie
version
return getCookieHeaderName(version);
| public static java.lang.String | getCookieHeaderName(int version)Return the header name to set the cookie, based on cookie
version
if( dbg>0 ) log( (version==1) ? "Set-Cookie2" : "Set-Cookie");
if (version == 1) {
// RFC2109
return "Set-Cookie";
// XXX RFC2965 is not standard yet, and Set-Cookie2
// is not supported by Netscape 4, 6, IE 3, 5 .
// It is supported by Lynx, and there is hope
// return "Set-Cookie2";
} else {
// Old Netscape
return "Set-Cookie";
}
| public org.apache.tomcat.util.buf.MessageBytes | getDomain()
return domain;
| public int | getMaxAge()
return maxAge;
| public org.apache.tomcat.util.buf.MessageBytes | getName()
return name;
| public org.apache.tomcat.util.buf.MessageBytes | getPath()
return path;
| public boolean | getSecure()
return secure;
| public org.apache.tomcat.util.buf.MessageBytes | getValue()
return value;
| public int | getVersion()
return version;
| public static boolean | isToken(java.lang.String value)
/*
* Tests a string and returns true if the string counts as a
* reserved token in the Java language.
*
* @param value the <code>String</code> to be tested
*
* @return <code>true</code> if the <code>String</code> is
* a reserved token; <code>false</code>
* if it is not
*/
if( value==null) return true;
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;
| public static void | log(java.lang.String s)
if (log.isDebugEnabled())
log.debug("ServerCookie: " + s);
| public static void | maybeQuote(int version, java.lang.StringBuffer buf, java.lang.String value)
// special case - a \n or \r shouldn't happen in any case
if (isToken(value)) {
buf.append(value);
} else {
buf.append('"");
buf.append(escapeDoubleQuotes(value));
buf.append('"");
}
| public void | recycle()
path.recycle();
name.recycle();
value.recycle();
comment.recycle();
maxAge=-1;
path.recycle();
domain.recycle();
version=0;
secure=false;
| public void | setMaxAge(int expiry)
maxAge = expiry;
| public void | setSecure(boolean flag)
secure = flag;
| public void | setVersion(int v)
version = v;
| public java.lang.String | toString()
return "Cookie " + getName() + "=" + getValue() + " ; "
+ getVersion() + " " + getPath() + " " + getDomain();
|
|