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 2006/05/04 13:45:19 UTC
svn commit: r399679 - in
/jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src:
java/org/apache/commons/httpclient/cookie/
test/org/apache/commons/httpclient/cookie/
Author: olegk
Date: Thu May 4 04:45:16 2006
New Revision: 399679
URL: http://svn.apache.org/viewcvs?rev=399679&view=rev
Log:
Improved compliance with the section 3.3.4 of the RFC 2965
Modified:
jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/Cookie2.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/TestCookieRFC2965Spec.java
Modified: 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=399679&r1=399678&r2=399679&view=diff
==============================================================================
--- jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/Cookie2.java (original)
+++ jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/Cookie2.java Thu May 4 04:45:16 2006
@@ -187,54 +187,8 @@
}
/**
- * 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>
+ * <tt>Set-Cookie2</tt> response header.
*
* @param value <tt>true</tt> if port attribute is specified in response
* header.
@@ -285,13 +239,7 @@
/**
* 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>
+ * <tt>Set-Cookie2</tt> response header.
*
* @param value <tt>true</tt> if version attribute is specified in response
* header.
@@ -336,12 +284,6 @@
* 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
Modified: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/RFC2965Spec.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/RFC2965Spec.java?rev=399679&r1=399678&r2=399679&view=diff
==============================================================================
--- jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/RFC2965Spec.java (original)
+++ jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/java/org/apache/commons/httpclient/cookie/RFC2965Spec.java Thu May 4 04:45:16 2006
@@ -434,8 +434,9 @@
if (cookie instanceof Cookie2) {
/* format cookie2 cookie */
Cookie2 cookie2 = (Cookie2) cookie;
+ int version = cookie2.getVersion();
final StringBuffer buffer = new StringBuffer();
- this.formatter.format(buffer, new NameValuePair("$Version", "1"));
+ this.formatter.format(buffer, new NameValuePair("$Version", Integer.toString(version)));
buffer.append("; ");
doFormatCookie2(cookie2, buffer);
return buffer.toString();
@@ -452,7 +453,7 @@
* @param cookies an array of {@link org.apache.commons.httpclient.Cookie}s to be formatted
* @return a string suitable for sending in a Cookie header.
*/
- public String formatCookies(Cookie[] cookies) {
+ public String formatCookies(final Cookie[] cookies) {
LOG.trace("enter RFC2965Spec.formatCookieHeader(Cookie[])");
if (cookies == null) {
@@ -460,20 +461,28 @@
}
// check if cookies array contains a set-cookie (old style) cookie
boolean hasOldStyleCookie = false;
+ int version = -1;
for (int i = 0; i < cookies.length; i++) {
- if (!(cookies[i] instanceof Cookie2)) {
+ Cookie cookie = cookies[i];
+ if (!(cookie instanceof Cookie2)) {
hasOldStyleCookie = true;
break;
}
+ if (cookie.getVersion() > version) {
+ version = cookie.getVersion();
+ }
+ }
+ if (version < 0) {
+ version = 0;
}
- if (hasOldStyleCookie) {
+ if (hasOldStyleCookie || version < 1) {
// delegate old-style cookie formatting to rfc2109Spec
return this.rfc2109.formatCookies(cookies);
}
/* format cookie2 cookies */
final StringBuffer buffer = new StringBuffer();
// format cookie version
- this.formatter.format(buffer, new NameValuePair("$Version", "1"));
+ this.formatter.format(buffer, new NameValuePair("$Version", Integer.toString(version)));
for (int i = 0; i < cookies.length; i++) {
buffer.append("; ");
Cookie2 cookie = (Cookie2) cookies[i];
@@ -1063,7 +1072,7 @@
if (version < 0) {
throw new MalformedCookieException("Invalid cookie version.");
}
- cookie2.setVersion(Integer.parseInt(value));
+ cookie2.setVersion(version);
cookie2.setVersionAttributeSpecified(true);
}
}
Modified: jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/test/org/apache/commons/httpclient/cookie/TestCookieRFC2965Spec.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/test/org/apache/commons/httpclient/cookie/TestCookieRFC2965Spec.java?rev=399679&r1=399678&r2=399679&view=diff
==============================================================================
--- jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/test/org/apache/commons/httpclient/cookie/TestCookieRFC2965Spec.java (original)
+++ jakarta/commons/proper/httpclient/branches/COOKIE_2_BRANCH/src/test/org/apache/commons/httpclient/cookie/TestCookieRFC2965Spec.java Thu May 4 04:45:16 2006
@@ -646,13 +646,6 @@
cookieParse(cookiespec, "www.domain.com", 8000, "/", false, header);
fail("MalformedCookieException should have been thrown");
} catch (MalformedCookieException e) {}
-
- // version attribute must be 1 with Set-Cookie2 header
- header = new Header("Set-Cookie2", "name=value; version=0");
- try {
- cookieParse(cookiespec, "www.domain.com", 8000, "/", false, header);
- fail("MalformedCookieException should have been thrown");
- } catch (MalformedCookieException e) {}
}
// ------------------------------------------------------- Test Cookie Matching
@@ -763,30 +756,42 @@
*/
public void testRFC2965CookieFormatting() throws Exception {
CookieSpec cookiespec = new RFC2965Spec();
- Cookie2 cookie = new Cookie2(".domain.com", "name",
+ Cookie2 cookie1 = new Cookie2(".domain.com", "name1",
"value", "/", null, false, new int[] {80,8080});
- cookie.setVersion(1);
+ cookie1.setVersion(1);
// domain, path, port specified
- cookie.setDomainAttributeSpecified(true);
- cookie.setPathAttributeSpecified(true);
- cookie.setPortAttributeSpecified(true);
- assertEquals("$Version=\"1\"; name=\"value\"; $Domain=\".domain.com\"; $Path=\"/\"; $Port=\"80,8080\"",
- cookiespec.formatCookie(cookie));
-
+ cookie1.setDomainAttributeSpecified(true);
+ cookie1.setPathAttributeSpecified(true);
+ cookie1.setPortAttributeSpecified(true);
+ assertEquals("$Version=\"1\"; name1=\"value\"; $Domain=\".domain.com\"; $Path=\"/\"; $Port=\"80,8080\"",
+ cookiespec.formatCookie(cookie1));
+
+ Cookie2 cookie2 = new Cookie2(".domain.com", "name2",
+ "value", "/a/", null, false, new int[] {80,8080});
+ cookie2.setVersion(2);
// domain, path specified but port unspecified
- cookie.setDomainAttributeSpecified(true);
- cookie.setPathAttributeSpecified(true);
- cookie.setPortAttributeSpecified(false);
- assertEquals("$Version=\"1\"; name=\"value\"; $Domain=\".domain.com\"; $Path=\"/\"",
- cookiespec.formatCookie(cookie));
-
+ cookie2.setDomainAttributeSpecified(true);
+ cookie2.setPathAttributeSpecified(true);
+ cookie2.setPortAttributeSpecified(false);
+ assertEquals("$Version=\"2\"; name2=\"value\"; $Domain=\".domain.com\"; $Path=\"/a/\"",
+ cookiespec.formatCookie(cookie2));
+
+ Cookie2 cookie3 = new Cookie2(".domain.com", "name3",
+ "value", "/a/b/", null, false, new int[] {80,8080});
+ cookie3.setVersion(1);
// path specified, port specified but blank, domain unspecified
- cookie.setDomainAttributeSpecified(false);
- cookie.setPathAttributeSpecified(true);
- cookie.setPortAttributeSpecified(true);
- cookie.setPortAttributeBlank(true);
- assertEquals("$Version=\"1\"; name=\"value\"; $Path=\"/\"; $Port=\"\"",
- cookiespec.formatCookie(cookie));
+ cookie3.setDomainAttributeSpecified(false);
+ cookie3.setPathAttributeSpecified(true);
+ cookie3.setPortAttributeSpecified(true);
+ cookie3.setPortAttributeBlank(true);
+ assertEquals("$Version=\"1\"; name3=\"value\"; $Path=\"/a/b/\"; $Port=\"\"",
+ cookiespec.formatCookie(cookie3));
+
+ assertEquals("$Version=\"2\"; " +
+ "name3=\"value\"; $Path=\"/a/b/\"; $Port=\"\"; " +
+ "name2=\"value\"; $Domain=\".domain.com\"; $Path=\"/a/\"; " +
+ "name1=\"value\"; $Domain=\".domain.com\"; $Path=\"/\"; $Port=\"80,8080\"",
+ cookiespec.formatCookies(new Cookie[] {cookie3, cookie2, cookie1}));
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org