diff --git a/src/java/org/apache/http/cookie/Cookie.java b/src/java/org/apache/http/cookie/Cookie.java
index f4eabc4cd..38e63e948 100644
--- a/src/java/org/apache/http/cookie/Cookie.java
+++ b/src/java/org/apache/http/cookie/Cookie.java
@@ -1,5 +1,5 @@
/*
- * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//httpclient/src/java/org/apache/commons/httpclient/Cookie.java,v 1.44 2004/06/05 16:49:20 olegk Exp $
+ * $HeadURL$
* $Revision$
* $Date$
*
@@ -56,84 +56,11 @@
*/
public class Cookie extends NameValuePair {
- // ----------------------------------------------------------- Constructors
-
/**
* Default constructor. Creates a blank cookie
*/
-
- public Cookie() {
- this(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 Cookie(String domain, String name, String value) {
- this(domain, name, value, null, null, false);
- }
-
- /**
- * 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 null 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 Cookie(String domain, String name, String value,
- String path, Date expires, boolean secure) {
-
+ public Cookie(final String name, final String value) {
super(name, value);
- if (name == null) {
- throw new IllegalArgumentException("Cookie name may not be null");
- }
- if (name.trim().equals("")) {
- throw new IllegalArgumentException("Cookie name may not be blank");
- }
- this.setPath(path);
- this.setDomain(domain);
- this.setExpiryDate(expires);
- this.setSecure(secure);
- }
-
- /**
- * Creates a cookie with the given name, value, domain attribute,
- * path attribute, maximum age 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 maxAge the number of seconds for which this cookie is valid.
- * maxAge is expected to be a non-negative number.
- * -1 signifies that the cookie should never expire.
- * @param secure if true this cookie can only be sent over secure
- * connections
- */
- public Cookie(String domain, String name, String value, String path,
- int maxAge, boolean secure) {
-
- this(domain, name, value, path, null, secure);
- if (maxAge < -1) {
- throw new IllegalArgumentException("Invalid max age: " + Integer.toString(maxAge));
- }
- if (maxAge >= 0) {
- setExpiryDate(new Date(System.currentTimeMillis() + maxAge * 1000L));
- }
}
/**
diff --git a/src/java/org/apache/http/cookie/CookieOrigin.java b/src/java/org/apache/http/cookie/CookieOrigin.java
index 5280583a1..1396fc1f6 100644
--- a/src/java/org/apache/http/cookie/CookieOrigin.java
+++ b/src/java/org/apache/http/cookie/CookieOrigin.java
@@ -60,9 +60,13 @@ public CookieOrigin(final String host, int port, final String path, boolean secu
throw new IllegalArgumentException(
"Path of origin may not be null.");
}
- this.host = host;
+ this.host = host.toLowerCase();
this.port = port;
- this.path = path;
+ if (!path.trim().equals("")) {
+ this.path = path;
+ } else {
+ this.path = "/";
+ }
this.secure = secure;
}
diff --git a/src/java/org/apache/http/cookie/impl/CookieSpecBase.java b/src/java/org/apache/http/cookie/impl/CookieSpecBase.java
new file mode 100644
index 000000000..b1fbcecd8
--- /dev/null
+++ b/src/java/org/apache/http/cookie/impl/CookieSpecBase.java
@@ -0,0 +1,128 @@
+/*
+ * $HeadURL$
+ * $Revision$
+ * $Date$
+ *
+ * ====================================================================
+ *
+ * Copyright 2002-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
+ * .
+ *
+ */
+
+package org.apache.http.cookie.impl;
+
+import java.util.Iterator;
+
+import org.apache.http.HeaderElement;
+import org.apache.http.NameValuePair;
+import org.apache.http.cookie.Cookie;
+import org.apache.http.cookie.CookieAttributeHandler;
+import org.apache.http.cookie.CookieOrigin;
+import org.apache.http.cookie.MalformedCookieException;
+
+/**
+ * Cookie management functions shared by all specification.
+ *
+ * @author Oleg Kalnichevski
+ *
+ * @since 2.0
+ */
+public abstract class CookieSpecBase extends AbstractCookieSpec {
+
+ protected static String getDefaultPath(final CookieOrigin origin) {
+ String defaultPath = origin.getPath();
+ int lastSlashIndex = defaultPath.lastIndexOf('/');
+ if (lastSlashIndex >= 0) {
+ if (lastSlashIndex == 0) {
+ //Do not remove the very first slash
+ lastSlashIndex = 1;
+ }
+ defaultPath = defaultPath.substring(0, lastSlashIndex);
+ }
+ return defaultPath;
+ }
+
+ protected static String getDefaultDomain(final CookieOrigin origin) {
+ return origin.getHost();
+ }
+
+ protected Cookie[] parse(final HeaderElement[] elems, final CookieOrigin origin)
+ throws MalformedCookieException {
+ Cookie[] cookies = new Cookie[elems.length];
+ for (int i = 0; i < elems.length; i++) {
+ HeaderElement headerelement = elems[i];
+
+ String name = headerelement.getName();
+ String value = headerelement.getValue();
+ if (name == null || name.equals("")) {
+ throw new MalformedCookieException("Cookie name may not be empty");
+ }
+
+ Cookie cookie = new Cookie(name, value);
+ cookie.setPath(getDefaultPath(origin));
+ cookie.setDomain(getDefaultDomain(origin));
+
+ // cycle through the parameters
+ NameValuePair[] attribs = headerelement.getParameters();
+ for (int j = attribs.length - 1; j >= 0; j--) {
+ NameValuePair attrib = attribs[j];
+ String s = attrib.getName().toLowerCase();
+ CookieAttributeHandler handler = findAttribHandler(s);
+ if (handler != null) {
+ handler.parse(cookie, attrib.getValue());
+ }
+ }
+ cookies[i] = cookie;
+ }
+ return cookies;
+ }
+
+ public void validate(final Cookie cookie, final CookieOrigin origin)
+ throws MalformedCookieException {
+ if (cookie == null) {
+ throw new IllegalArgumentException("Cookie may not be null");
+ }
+ if (origin == null) {
+ throw new IllegalArgumentException("Cookie origin may not be null");
+ }
+ for (Iterator i = getAttribHandlerIterator(); i.hasNext();) {
+ CookieAttributeHandler handler = (CookieAttributeHandler) i.next();
+ handler.validate(cookie, origin);
+ }
+ }
+
+ public boolean match(final Cookie cookie, final CookieOrigin origin) {
+ if (cookie == null) {
+ throw new IllegalArgumentException("Cookie may not be null");
+ }
+ if (origin == null) {
+ throw new IllegalArgumentException("Cookie origin may not be null");
+ }
+ for (Iterator i = getAttribHandlerIterator(); i.hasNext();) {
+ CookieAttributeHandler handler = (CookieAttributeHandler) i.next();
+ if (!handler.match(cookie, origin)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+}