You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ol...@apache.org on 2005/08/29 16:28:43 UTC
svn commit: r264149 [1/3] - in
/jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src:
java/org/apache/commons/httpclient/
java/org/apache/commons/httpclient/cookie/
test/org/apache/commons/httpclient/cookie/
Author: olegk
Date: Mon Aug 29 07:28:21 2005
New Revision: 264149
URL: http://svn.apache.org/viewcvs?rev=264149&view=rev
Log:
Corrective patch by Samit Jain based on the initial feedback from other contributors
Added:
jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/Cookie2.java (with props)
jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookieAttributeHandler.java (with props)
jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/test/org/apache/commons/httpclient/cookie/TestCookie2.java (with props)
Modified:
jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/Cookie.java
jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/Header.java
jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/HttpMethodBase.java
jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookiePolicy.java
jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookieSpec.java
jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookieSpecBase.java
jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/IgnoreCookiesSpec.java
jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/RFC2109Spec.java
jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/RFC2965Spec.java
jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/test/org/apache/commons/httpclient/cookie/TestCookieAll.java
jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/test/org/apache/commons/httpclient/cookie/TestCookieRFC2965Spec.java
Modified: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/Cookie.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/Cookie.java?rev=264149&r1=264148&r2=264149&view=diff
==============================================================================
--- jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/Cookie.java (original)
+++ jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/Cookie.java Mon Aug 29 07:28:21 2005
@@ -63,17 +63,6 @@
*/
public class Cookie extends NameValuePair implements Serializable, Comparator {
- // string constants for cookie attributes
- public static final String DOMAIN = "domain";
- public static final String PATH = "path";
- public static final String PORT = "port";
- public static final String VERSION = "version";
- public static final String SECURE = "secure";
- public static final String MAXAGE = "max-age";
- public static final String COMMENT = "comment";
- public static final String COMMENTURL = "commenturl";
- public static final String DISCARD = "discard";
-
// ----------------------------------------------------------- Constructors
/**
@@ -156,32 +145,6 @@
}
/**
- * Creates a cookie with the given name, value, domain attribute,
- * path attribute, expiration attribute, secure attribute, and ports
- * attribute.
- *
- * @param name the cookie name
- * @param value the cookie value
- * @param domain the domain this cookie can be sent to
- * @param path the path prefix for which this cookie can be sent
- * @param expires the {@link Date} at which this cookie expires,
- * or <tt>null</tt> if the cookie expires at the end
- * of the session
- * @param secure if true this cookie can only be sent over secure
- * connections
- * @param ports the ports for which this cookie can be sent
- * @throws IllegalArgumentException If cookie name is null or blank,
- * cookie name contains a blank, or cookie name starts with character $
- *
- */
- public Cookie(String domain, String name, String value,
- String path, Date expires, boolean secure, int[] ports) {
-
- this(domain, name, value, path, expires, secure);
- this.setPorts(ports);
- }
-
- /**
* Returns the comment describing the purpose of this cookie, or
* <tt>null</tt> if no such comment has been defined.
*
@@ -205,50 +168,6 @@
cookieComment = comment;
}
- /**
- * If a user agent (web browser) presents this cookie to a user, the
- * cookie's purpose will be described by the information at this URL.
- *
- * @see #setCommentURL(String)
- */
- public String getCommentURL() {
- return cookieCommentURL;
- }
-
- /**
- * If a user agent (web browser) presents this cookie to a user, the
- * cookie's purpose will be described by the information at this URL.
- *
- * @param commentURL
- *
- * @see #getCommentURL()
- */
- public void setCommentURL(String commentURL) {
- this.cookieCommentURL = commentURL;
- }
-
- /**
- * Get the Port attribute. It restricts the ports to which a cookie
- * may be returned in a Cookie request header.
- *
- * @see #setPorts(int[])
- */
- public int[] getPorts() {
- return cookiePorts;
- }
-
- /**
- * Set the Port attribute. It restricts the ports to which a cookie
- * may be returned in a Cookie request header.
- *
- * @param ports
- *
- * @see #getPorts()
- */
- public void setPorts(int[] ports) {
- this.cookiePorts = ports;
- }
-
/**
* Returns the expiration {@link Date} of the cookie, or <tt>null</tt>
* if none exists.
@@ -279,15 +198,6 @@
cookieExpiryDate = expiryDate;
}
- /**
- * Set the Discard attribute.
- *
- * @see #isPersistent()
- *
- */
- public void setDiscard(boolean toDiscard) {
- discard = toDiscard;
- }
/**
* Returns <tt>false</tt> if the cookie should be discarded at the end
@@ -297,7 +207,7 @@
* of the "session"; <tt>true</tt> otherwise
*/
public boolean isPersistent() {
- return (null != cookieExpiryDate) && !discard;
+ return (null != cookieExpiryDate);
}
@@ -403,15 +313,13 @@
}
/**
- * Returns true if this cookie has expired. Also returns
- * true for a session cookie (discard=true).
+ * Returns true if this cookie has expired.
*
* @return <tt>true</tt> if the cookie has expired.
*/
public boolean isExpired() {
- return (cookieExpiryDate != null &&
- cookieExpiryDate.getTime() <= System.currentTimeMillis())
- || discard;
+ return (cookieExpiryDate != null
+ && cookieExpiryDate.getTime() <= System.currentTimeMillis());
}
/**
@@ -429,18 +337,11 @@
/**
* Indicates whether the cookie had a path specified in a
- * path attribute of the <tt>Set-Cookie</tt> header. This property
- * has two uses:
- * <ul>
- * <li>This value is important for generating the <tt>Cookie</tt>
- * header because some cookie specifications require that the
- * <tt>Cookie</tt> header should only include a path attribute if
- * the cookie's path was specified in the <tt>Set-Cookie</tt> header.
- * </li>
- * <li>This also ensures that if an attribute appears more than once in
- * a cookie response header, the first appearance of the attribute is used.
- * </li>
- * </ul>
+ * path attribute of the <tt>Set-Cookie</tt> header. This value
+ * is important for generating the <tt>Cookie</tt> header because
+ * some cookie specifications require that the <tt>Cookie</tt> header
+ * should only include a path attribute if the cookie's path
+ * was specified in the <tt>Set-Cookie</tt> header.
*
* @param value <tt>true</tt> if the cookie's path was explicitly
* set, <tt>false</tt> otherwise.
@@ -466,18 +367,12 @@
/**
* Indicates whether the cookie had a domain specified in a
- * domain attribute of the <tt>Set-Cookie</tt> header. This property
- * has two uses:
- * <ul>
- * <li>This value is important for generating the <tt>Cookie</tt> header
- * because some cookie specifications require that the <tt>Cookie</tt> header
+ * domain attribute of the <tt>Set-Cookie</tt> header. This value
+ * is important for generating the <tt>Cookie</tt> header because
+ * some cookie specifications require that the <tt>Cookie</tt> header
* should only include a domain attribute if the cookie's domain
* was specified in the <tt>Set-Cookie</tt> header.
- * </li>
- * <li>This also ensures that if an attribute appears more than once in
- * a cookie response header, the first appearance of the attribute is used.
- * </li>
- * </ul>
+ *
* @param value <tt>true</tt> if the cookie's domain was explicitly
* set, <tt>false</tt> otherwise.
*
@@ -501,82 +396,6 @@
}
/**
- * Indicates whether the cookie had a ports list specified in the
- * Port attribute of the <tt>Set-Cookie2</tt> header. This ensures
- * that if an attribute appears more than once in a cookie response
- * header, the first appearance of the attribute is used.
- *
- * @param value <tt>true</tt> if the cookie's ports were explicitly
- * set, <tt>false</tt> otherwise.
- *
- * @see #isPortAttributeSpecified
- */
- public void setPortAttributeSpecified(boolean value) {
- hasPortAttribute = value;
- }
-
- /**
- * Returns <tt>true</tt> if cookie's ports were set via the Port
- * attribute in the <tt>Set-Cookie2</tt> header.
- *
- * @return <tt>true</tt> if the cookie's ports were explicitly
- * set, <tt>false</tt> otherwise.
- *
- * @see #setPortAttributeSpecified
- */
- public boolean isPortAttributeSpecified() {
- return hasPortAttribute;
- }
-
- /**
- * Indicates whether the Port attribute in <tt>Set-Cookie2</tt> header
- * is blank.
- *
- * @param value
- *
- * @see #isPortAttributeBlank
- */
- public void setPortAttributeBlank(boolean value) {
- isPortAttributeBlank = value;
- }
-
- /**
- * Returns <tt>true</tt> if Port attribute in <tt>Set-Cookie2</tt> header
- * did not have any value.
- *
- * @return <tt>true</tt> if Port attribute in <tt>Set-Cookie2</tt> header
- * did not have any value.
- *
- * @see #setPortAttributeBlank
- */
- public boolean isPortAttributeBlank() {
- return isPortAttributeBlank;
- }
-
- /**
- * Returns the response header name this cookie was obtained from.
- * Currently must be either 'set-cookie' or set-cookie2'.
- *
- * @return response header name
- * @see #setHeaderName(String)
- */
- public String getHeaderName() {
- return headerName;
- }
-
- /**
- * Sets the header name of this cookie.
- *
- * @param headerName Currently must be either 'set-cookie' or
- * set-cookie2'.
- * @see #getHeaderName()
- */
- public void setHeaderName(String headerName) {
- this.headerName = headerName;
- }
-
-
- /**
* Returns a hash code in keeping with the
* {@link Object#hashCode} general hashCode contract.
* @return A hash code
@@ -679,72 +498,37 @@
// ----------------------------------------------------- Instance Variables
- /** Comment attribute. */
- private String cookieComment;
-
- /**
- * Comment URL attribute
- * Note: Required for RFC 2965 cookie specification.
- */
- private String cookieCommentURL;
-
- /** Domain attribute. */
- private String cookieDomain;
-
- /**
- * Port attribute.
- * Note: Required for RFC 2965 cookie specification.
- */
- private int[] cookiePorts;
-
- /** Expiration {@link Date}. */
- private Date cookieExpiryDate;
-
- /**
- * Discard attribute.
- * Note: Required for RFC 2965 cookie specification.
- */
- private boolean discard = false;
-
- /** Path attribute. */
- private String cookiePath;
+ /** Comment attribute. */
+ private String cookieComment;
- /** My secure flag. */
- private boolean isSecure;
+ /** Domain attribute. */
+ private String cookieDomain;
- /**
- * the name of the response header this cookie was obtained from.
- */
- private String headerName;
+ /** Expiration {@link Date}. */
+ private Date cookieExpiryDate;
- /**
- * Specifies if the set-cookie header included a Path attribute for this
- * cookie
- */
- private boolean hasPathAttribute = false;
+ /** Path attribute. */
+ private String cookiePath;
- /**
- * Specifies if the set-cookie header included a Domain attribute for this
- * cookie
- */
- private boolean hasDomainAttribute = false;
+ /** My secure flag. */
+ private boolean isSecure;
- /**
- * Specifies if the set-cookie2 header included a Port attribute for this
- * cookie
- */
- private boolean hasPortAttribute = false;
+ /**
+ * Specifies if the set-cookie header included a Path attribute for this
+ * cookie
+ */
+ private boolean hasPathAttribute = false;
- /**
- * Specifies if the set-cookie2 header's Port attribute did not have
- * any value.
- */
- private boolean isPortAttributeBlank = false;
+ /**
+ * Specifies if the set-cookie header included a Domain attribute for this
+ * cookie
+ */
+ private boolean hasDomainAttribute = false;
- /** The version of the cookie specification I was created from. */
- private int cookieVersion = -1;
+ /** The version of the cookie specification I was created from. */
+ private int cookieVersion = 0;
- // -------------------------------------------------------------- Constants
+ // -------------------------------------------------------------- Constants
/**
* Collator for Cookie comparisons. Could be replaced with references to
Modified: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/Header.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/Header.java?rev=264149&r1=264148&r2=264149&view=diff
==============================================================================
--- jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/Header.java (original)
+++ jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/Header.java Mon Aug 29 07:28:21 2005
@@ -46,10 +46,6 @@
*/
private boolean isAutogenerated = false;
- public static String SET_COOKIE_KEY = "set-cookie";
-
- public static String SET_COOKIE2_KEY = "set-cookie2";
-
/**
* Default constructor.
*/
Modified: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/HttpMethodBase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/HttpMethodBase.java?rev=264149&r1=264148&r2=264149&view=diff
==============================================================================
--- jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/HttpMethodBase.java (original)
+++ jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/HttpMethodBase.java Mon Aug 29 07:28:21 2005
@@ -1198,12 +1198,15 @@
}
}
- Header buildCookie2RequestHeader(CookieSpec spec) {
+ /**
+ * Builds Cookie2 request header.
+ * @param spec
+ */
+ protected Header buildCookie2RequestHeader(CookieSpec spec) {
ParameterFormatter formatter = new ParameterFormatter();
StringBuffer buffer = new StringBuffer();
- formatter.format(buffer,
- new NameValuePair("$Version",
- Integer.toString(spec.getCookieVersion())));
+ formatter.format(buffer, new NameValuePair("$Version",
+ Integer.toString(CookiePolicy.getCookieVersionBySpec(spec))));
Header header = new Header("Cookie2", buffer.toString(), true);
return header;
}
@@ -1512,7 +1515,6 @@
Header header = headers[i];
Cookie[] cookies = null;
try {
- System.out.println("(jain) Header[" + i + "]: " + headers[i]);
cookies = parser.parse(
host,
conn.getPort(),
@@ -1530,9 +1532,6 @@
for (int j = 0; j < cookies.length; j++) {
Cookie cookie = cookies[j];
try {
- System.out.println("(jain) Cookie [" + j + "]: " +
- cookies[j].getName() + " = " +
- cookies[j].getValue() + " has version " + cookies[j].getVersion());
parser.validate(
host,
conn.getPort(),
Added: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/Cookie2.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/Cookie2.java?rev=264149&view=auto
==============================================================================
--- jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/Cookie2.java (added)
+++ jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/Cookie2.java Mon Aug 29 07:28:21 2005
@@ -0,0 +1,367 @@
+/*
+ * $Header: /cvsroot/httpc-cookie2/httpc-cookie2/httpcookie2SVN-patch.082805-2100.diff,v 1.1 2005/08/29 05:01:58 sjain700 Exp $
+ * $Revision$
+ * $Date$
+ *
+ * ====================================================================
+ *
+ * Copyright 1999-2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.commons.httpclient.cookie;
+
+import java.util.Date;
+
+import org.apache.commons.httpclient.Cookie;
+
+/**
+ * <p>
+ * Cookie class for {@link org.apache.commons.httpclient.cookie.RFC2965Spec}
+ * cookie specification. It extends {@link Cookie} class and adds newer cookie
+ * attributes and functions required for this specification.
+ * </p>
+ *
+ * @author Samit Jain (jain.samit@gmail.com)
+ */
+public class Cookie2 extends Cookie {
+
+ // string constants for cookie attributes
+ public static final String DOMAIN = "domain";
+ public static final String PATH = "path";
+ public static final String PORT = "port";
+ public static final String VERSION = "version";
+ public static final String SECURE = "secure";
+ public static final String MAXAGE = "max-age";
+ public static final String COMMENT = "comment";
+ public static final String COMMENTURL = "commenturl";
+ public static final String DISCARD = "discard";
+
+ public static final String COOKIE_NAME_KEY = "cookieName";
+
+ /**
+ * Default constructor. Creates a blank cookie
+ */
+ public Cookie2() {
+ super(null, "noname", null, null, null, false);
+ }
+
+ /**
+ * Creates a cookie with the given name, value and domain attribute.
+ *
+ * @param name the cookie name
+ * @param value the cookie value
+ * @param domain the domain this cookie can be sent to
+ */
+ public Cookie2(String domain, String name, String value) {
+ super(domain, name, value);
+ }
+
+ /**
+ * Creates a cookie with the given name, value, domain attribute,
+ * path attribute, expiration attribute, and secure attribute
+ *
+ * @param name the cookie name
+ * @param value the cookie value
+ * @param domain the domain this cookie can be sent to
+ * @param path the path prefix for which this cookie can be sent
+ * @param expires the {@link Date} at which this cookie expires,
+ * or <tt>null</tt> if the cookie expires at the end
+ * of the session
+ * @param secure if true this cookie can only be sent over secure
+ * connections
+ * @throws IllegalArgumentException If cookie name is null or blank,
+ * cookie name contains a blank, or cookie name starts with character $
+ *
+ */
+ public Cookie2(String domain, String name, String value,
+ String path, Date expires, boolean secure) {
+ super(domain, name, value, path, expires, secure);
+ }
+
+ /**
+ * Creates a cookie with the given name, value, domain attribute,
+ * path attribute, expiration attribute, secure attribute, and ports
+ * attribute.
+ *
+ * @param name the cookie name
+ * @param value the cookie value
+ * @param domain the domain this cookie can be sent to
+ * @param path the path prefix for which this cookie can be sent
+ * @param expires the {@link Date} at which this cookie expires,
+ * or <tt>null</tt> if the cookie expires at the end
+ * of the session
+ * @param secure if true this cookie can only be sent over secure
+ * connections
+ * @param ports the ports for which this cookie can be sent
+ * @throws IllegalArgumentException If cookie name is null or blank,
+ * cookie name contains a blank, or cookie name starts with character $
+ *
+ */
+ public Cookie2(String domain, String name, String value,
+ String path, Date expires, boolean secure, int[] ports) {
+ super(domain, name, value, path, expires, secure);
+ setPorts(ports);
+ }
+
+ /**
+ * If a user agent (web browser) presents this cookie to a user, the
+ * cookie's purpose will be described by the information at this URL.
+ *
+ * @see #setCommentURL(String)
+ */
+ public String getCommentURL() {
+ return cookieCommentURL;
+ }
+
+ /**
+ * If a user agent (web browser) presents this cookie to a user, the
+ * cookie's purpose will be described by the information at this URL.
+ *
+ * @param commentURL
+ *
+ * @see #getCommentURL()
+ */
+ public void setCommentURL(String commentURL) {
+ this.cookieCommentURL = commentURL;
+ }
+
+ /**
+ * Get the Port attribute. It restricts the ports to which a cookie
+ * may be returned in a Cookie request header.
+ *
+ * @see #setPorts(int[])
+ */
+ public int[] getPorts() {
+ return cookiePorts;
+ }
+
+ /**
+ * Set the Port attribute. It restricts the ports to which a cookie
+ * may be returned in a Cookie request header.
+ *
+ * @param ports
+ *
+ * @see #getPorts()
+ */
+ public void setPorts(int[] ports) {
+ this.cookiePorts = ports;
+ }
+
+ /**
+ * Set the Discard attribute.
+ *
+ * Note: <tt>Discard</tt> attribute overrides <tt>Max-age</tt>.
+ *
+ * @see #isPersistent()
+ */
+ public void setDiscard(boolean toDiscard) {
+ discard = toDiscard;
+ }
+
+ /**
+ * Returns <tt>false</tt> if the cookie should be discarded at the end
+ * of the "session"; <tt>true</tt> otherwise.
+ *
+ * @return <tt>false</tt> if the cookie should be discarded at the end
+ * of the "session"; <tt>true</tt> otherwise
+ */
+ public boolean isPersistent() {
+ return (null != getExpiryDate()) && !discard;
+ }
+
+ /**
+ * Indicates whether the cookie had a domain attribute specified in the
+ * <tt>Set-Cookie2</tt> response header. This property
+ * has two uses:
+ * <ul>
+ * <li>This value is important for generating the <tt>Cookie</tt> request header
+ * because the specification requires that the <tt>Cookie</tt> header
+ * should only include a domain attribute if the domain was specified in the
+ * <tt>Set-Cookie2</tt> header.
+ * </li>
+ * <li>This also ensures that if domain attribute appears more than once in
+ * the <tt>Set-Cookie2</tt> header, only the first appearance of domain
+ * attribute is used.
+ * </li>
+ * </ul>
+ * @param value <tt>true</tt> if the cookie's domain is specified
+ * in response header.
+ *
+ * @see #isDomainAttributeSpecified
+ */
+ public void setDomainAttributeSpecified(boolean value) {
+ hasDomainAttribute = value;
+ }
+
+ /**
+ * @return <tt>true</tt> if cookie domain attribute was specified in the
+ * <tt>Set-Cookie2</tt> header.
+ *
+ * @see #setDomainAttributeSpecified
+ */
+ public boolean isDomainAttributeSpecified() {
+ return hasDomainAttribute;
+ }
+
+ /**
+ * Indicates whether the cookie had a port attribute specified in the
+ * <tt>Set-Cookie2</tt> response header. This property
+ * has two uses:
+ * <ul>
+ * <li>This value is important for generating the <tt>Cookie</tt> request header
+ * because the specification requires that the <tt>Cookie</tt> header
+ * should only include a port attribute if the port was specified in the
+ * <tt>Set-Cookie2</tt> header.
+ * </li>
+ * <li>This also ensures that if port attribute appears more than once in
+ * the <tt>Set-Cookie2</tt> header, only the first appearance of the port
+ * attribute is used.
+ * </li>
+ * </ul>
+ *
+ * @param value <tt>true</tt> if port attribute is specified in response
+ * header.
+ *
+ * @see #isPortAttributeSpecified
+ */
+ public void setPortAttributeSpecified(boolean value) {
+ hasPortAttribute = value;
+ }
+
+ /**
+ * @return <tt>true</tt> if cookie port attribute was specified in the
+ * <tt>Set-Cookie2</tt> header.
+ *
+ * @see #setPortAttributeSpecified
+ */
+ public boolean isPortAttributeSpecified() {
+ return hasPortAttribute;
+ }
+
+ /**
+ * Indicates whether the Port attribute in <tt>Set-Cookie2</tt> header
+ * contains no value (is of the form Port="").
+ * <p>
+ * This value is required for generating
+ * the <tt>Cookie</tt> request header because the specification requires that if
+ * <tt>Set-Cookie2</tt> header contains a blank value for port attribute,
+ * the <tt>Cookie</tt> header should also contain a port attribute with no value.
+ *
+ * @param value <tt>true</tt> if port attribute is specified as blank in response
+ * header.
+ *
+ * @see #isPortAttributeBlank
+ */
+ public void setPortAttributeBlank(boolean value) {
+ isPortAttributeBlank = value;
+ }
+
+ /**
+ * @return <tt>true</tt> if the port attribute in <tt>Set-Cookie2</tt> header
+ * had no value (was of the form Port="").
+ *
+ * @see #setPortAttributeBlank
+ */
+ public boolean isPortAttributeBlank() {
+ return isPortAttributeBlank;
+ }
+
+ /**
+ * Indicates whether the cookie had a version attribute specified in the
+ * <tt>Set-Cookie2</tt> response header. This property has two uses:
+ * <ul>
+ * <li>Only the first occurence of the version attribute in <tt>Set-Cookie2</tt>
+ * header is used, others ignored.</li>
+ * <li>Since version attribute is required for valid cookies, this property
+ * helps in checking this condition.</li>
+ * </ul>
+ *
+ * @param value <tt>true</tt> if version attribute is specified in response
+ * header.
+ * @see #isVersionAttributeSpecified()
+ */
+ public void setVersionAttributeSpecified(boolean value) {
+ hasVersionAttribute = value;
+ }
+
+ /**
+ * @return <tt>true</tt> if cookie version attribute was specified in the
+ * <tt>Set-Cookie2</tt> header.
+ *
+ * @see #setVersionAttributeSpecified
+ */
+ public boolean isVersionAttributeSpecified() {
+ return hasVersionAttribute;
+ }
+
+ /**
+ * Return a textual representation of the cookie.
+ *
+ * @return string.
+ */
+ public String toExternalForm() {
+ CookieSpec spec =
+ CookiePolicy.getCookieSpec(CookiePolicy.RFC_2965);
+ return spec.formatCookie(this);
+ }
+
+ /**
+ * Comment URL attribute
+ */
+ private String cookieCommentURL;
+
+ /**
+ * Port attribute.
+ */
+ private int[] cookiePorts;
+
+ /**
+ * Discard attribute.
+ */
+ private boolean discard = false;
+
+ /**
+ * Indicates if the set-cookie header included a Domain attribute for this
+ * cookie
+ */
+ private boolean hasDomainAttribute = false;
+
+ /**
+ * Indicates if the set-cookie2 header included a Port attribute for this
+ * cookie
+ */
+ private boolean hasPortAttribute = false;
+
+ /**
+ * Indicates if the set-cookie2 header's Port attribute did not have
+ * any value.
+ */
+ private boolean isPortAttributeBlank = false;
+
+ /**
+ * Indicates if the set-cookie2 header included a Version attribute
+ */
+ private boolean hasVersionAttribute = false;
+
+
+}
+
Propchange: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/Cookie2.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/Cookie2.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/Cookie2.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookieAttributeHandler.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookieAttributeHandler.java?rev=264149&view=auto
==============================================================================
--- jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookieAttributeHandler.java (added)
+++ jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookieAttributeHandler.java Mon Aug 29 07:28:21 2005
@@ -0,0 +1,57 @@
+package org.apache.commons.httpclient.cookie;
+
+import org.apache.commons.httpclient.Cookie;
+
+/**
+ * Ths interface represents a cookie attribute handler responsible
+ * for parsing, validating, matching and formatting a specific
+ * cookie attribute, such as path, domain, port, etc.
+ *
+ * Different cookie specifications can provide a specific
+ * implementation for this class based on their cookie handling
+ * rules.
+ *
+ * @author jain.samit@gmail.com (Samit Jain)
+ */
+public interface CookieAttributeHandler {
+
+ /**
+ * Parse the given cookie attribute value and update the corresponding
+ * {@link org.apache.commons.httpclient.Cookie} property.
+ *
+ * @param cookie {@link org.apache.commons.httpclient.Cookie} to be updated
+ * @param value cookie attribute value from the cookie response header
+ */
+ public void parse(Cookie cookie, String value)
+ throws MalformedCookieException;
+
+ /**
+ * Peforms cookie validation for the given attribute value.
+ *
+ * @param cookie {@link org.apache.commons.httpclient.Cookie} to validate
+ * @param value specific property of the host the cookie was received from.
+ * @throws MalformedCookieException if cookie validation fails for this attribute
+ */
+ public void validate(Cookie cookie, String value)
+ throws MalformedCookieException;
+
+ /**
+ * Matches the given value (property of the destination host where request is being
+ * submitted) with the corresponding cookie attribute.
+ *
+ * @param cookie {@link org.apache.commons.httpclient.Cookie} to match
+ * @param value specific property of the destination host
+ * @return <tt>true</tt> if the match is successful; <tt>false</tt> otherwise
+ */
+ public boolean match(Cookie cookie, String value);
+
+ /**
+ * Format the cookie attribute suitable for sending in a cookie request header and
+ * append it to the given buffer.
+ *
+ * @param buffer the string buffer to use for output
+ * @param cookie {@link org.apache.commons.httpclient.Cookie} to get the attribute
+ * from.
+ */
+ public void format(StringBuffer buffer, Cookie cookie);
+}
Propchange: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookieAttributeHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookieAttributeHandler.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookieAttributeHandler.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookiePolicy.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookiePolicy.java?rev=264149&r1=264148&r2=264149&view=diff
==============================================================================
--- jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookiePolicy.java (original)
+++ jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookiePolicy.java Mon Aug 29 07:28:21 2005
@@ -320,4 +320,11 @@
public static CookieSpec getCompatibilitySpec() {
return getSpecByPolicy(COMPATIBILITY);
}
+
+ public static int getCookieVersionBySpec(CookieSpec spec) {
+ if ((spec instanceof RFC2109Spec) ||
+ (spec instanceof RFC2965Spec))
+ return 1;
+ return 0;
+ }
}
Modified: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookieSpec.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookieSpec.java?rev=264149&r1=264148&r2=264149&view=diff
==============================================================================
--- jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookieSpec.java (original)
+++ jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookieSpec.java Mon Aug 29 07:28:21 2005
@@ -74,7 +74,7 @@
Cookie[] parse(String host, int port, String path, boolean secure,
final String header)
throws MalformedCookieException, IllegalArgumentException;
-
+ //TODO(jain): why is this method public
/**
* Parse the <tt>"Set-Cookie"</tt> Header into an array of Cookies.
*
@@ -103,7 +103,7 @@
*/
void parseAttribute(NameValuePair attribute, Cookie cookie)
throws MalformedCookieException, IllegalArgumentException;
-
+ //TODO(jain): why is this method public
/**
* Validate the cookie according to validation rules defined by the
* cookie specification.
@@ -223,12 +223,5 @@
* @throws IllegalArgumentException if an input parameter is illegal
*/
Header formatCookieHeader(Cookie cookie) throws IllegalArgumentException;
-
- /**
- * Gets the highest cookie version supported by this cookie specification.
- *
- * @return highest cookie version supported.
- */
- int getCookieVersion();
}
Modified: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookieSpecBase.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookieSpecBase.java?rev=264149&r1=264148&r2=264149&view=diff
==============================================================================
--- jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookieSpecBase.java (original)
+++ jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/CookieSpecBase.java Mon Aug 29 07:28:21 2005
@@ -204,8 +204,7 @@
/**
* Parse the <tt>"Set-Cookie"</tt> {@link Header} into an array of {@link
- * Cookie}s. Subclasses that need to support other cookie headers can
- * override this method.
+ * Cookie}s.
*
* <P>The syntax for the Set-Cookie response header is:
*
@@ -245,24 +244,7 @@
if (header == null) {
throw new IllegalArgumentException("Header may not be null.");
}
-
- Cookie[] cookies;
- // the default implementation only accepts Set-Cookie header
- if (header.getName().equalsIgnoreCase(Header.SET_COOKIE_KEY)) {
-
- cookies = parse(host, port, path, secure, header.getValue());
- // set header name of cookies so we can identify later whether cookie
- // came from set-cookie header
- for (int i = 0; i < cookies.length; i++) {
- cookies[i].setHeaderName(Header.SET_COOKIE_KEY);
- }
- }
- else {
- throw new MalformedCookieException("Header name is not valid. " +
- "Default implementation supports " +
- "only \"set-cookie\" header.");
- }
- return cookies;
+ return parse(host, port, path, secure, header.getValue());
}
@@ -358,15 +340,15 @@
}
- public Collection getValidDateFormats() {
- return this.datepatterns;
- }
-
- public void setValidDateFormats(final Collection datepatterns) {
- this.datepatterns = datepatterns;
- }
+ public Collection getValidDateFormats() {
+ return this.datepatterns;
+ }
+
+ public void setValidDateFormats(final Collection datepatterns) {
+ this.datepatterns = datepatterns;
+ }
- /**
+ /**
* Performs most common {@link Cookie} validation
*
* @param host the host from which the {@link Cookie} was received
@@ -590,7 +572,7 @@
*/
private static void addInPathOrder(List list, Cookie addCookie) {
int i = 0;
- // TODO (jain): better implementation of sorting cookies
+
for (i = 0; i < list.size(); i++) {
Cookie c = (Cookie) list.get(i);
if (addCookie.compare(addCookie, c) > 0) {
@@ -671,11 +653,6 @@
public Header formatCookieHeader(Cookie cookie) {
LOG.trace("enter CookieSpecBase.formatCookieHeader(Cookie)");
return new Header("Cookie", formatCookie(cookie));
- }
-
- public int getCookieVersion() {
- // default cookie version is 0
- return 0;
}
}
Modified: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/IgnoreCookiesSpec.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/IgnoreCookiesSpec.java?rev=264149&r1=264148&r2=264149&view=diff
==============================================================================
--- jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/IgnoreCookiesSpec.java (original)
+++ jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/IgnoreCookiesSpec.java Mon Aug 29 07:28:21 2005
@@ -149,8 +149,4 @@
return false;
}
- public int getCookieVersion() {
- return -1;
- }
-
}
Modified: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/RFC2109Spec.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/RFC2109Spec.java?rev=264149&r1=264148&r2=264149&view=diff
==============================================================================
--- jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/RFC2109Spec.java (original)
+++ jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/RFC2109Spec.java Mon Aug 29 07:28:21 2005
@@ -53,8 +53,14 @@
public class RFC2109Spec extends CookieSpecBase {
private final ParameterFormatter formatter;
-
- /** Default constructor */
+
+ /**
+ * Cookie Response Header name for cookies processed
+ * by this spec.
+ */
+ public static String SET_COOKIE_KEY = "set-cookie";
+
+ /** Default constructor */
public RFC2109Spec() {
super();
this.formatter = new ParameterFormatter();
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org