1/* 2 * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/impl/cookie/BasicClientCookie.java $ 3 * $Revision: 659191 $ 4 * $Date: 2008-05-22 11:26:53 -0700 (Thu, 22 May 2008) $ 5 * 6 * ==================================================================== 7 * Licensed to the Apache Software Foundation (ASF) under one 8 * or more contributor license agreements. See the NOTICE file 9 * distributed with this work for additional information 10 * regarding copyright ownership. The ASF licenses this file 11 * to you under the Apache License, Version 2.0 (the 12 * "License"); you may not use this file except in compliance 13 * with the License. You may obtain a copy of the License at 14 * 15 * http://www.apache.org/licenses/LICENSE-2.0 16 * 17 * Unless required by applicable law or agreed to in writing, 18 * software distributed under the License is distributed on an 19 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 20 * KIND, either express or implied. See the License for the 21 * specific language governing permissions and limitations 22 * under the License. 23 * ==================================================================== 24 * 25 * This software consists of voluntary contributions made by many 26 * individuals on behalf of the Apache Software Foundation. For more 27 * information on the Apache Software Foundation, please see 28 * <http://www.apache.org/>. 29 * 30 */ 31 32package org.apache.http.impl.cookie; 33 34import java.util.Date; 35import java.util.HashMap; 36import java.util.Locale; 37import java.util.Map; 38 39import org.apache.http.cookie.ClientCookie; 40import org.apache.http.cookie.SetCookie; 41 42/** 43 * HTTP "magic-cookie" represents a piece of state information 44 * that the HTTP agent and the target server can exchange to maintain 45 * a session. 46 * 47 * @author B.C. Holmes 48 * @author <a href="mailto:jericho@thinkfree.com">Park, Sung-Gu</a> 49 * @author <a href="mailto:dsale@us.britannica.com">Doug Sale</a> 50 * @author Rod Waldhoff 51 * @author dIon Gillard 52 * @author Sean C. Sullivan 53 * @author <a href="mailto:JEvans@Cyveillance.com">John Evans</a> 54 * @author Marc A. Saegesser 55 * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a> 56 * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a> 57 * 58 * @version $Revision: 659191 $ 59 * 60 * @deprecated Please use {@link java.net.URL#openConnection} instead. 61 * Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a> 62 * for further details. 63 */ 64@Deprecated 65public class BasicClientCookie implements SetCookie, ClientCookie, Cloneable { 66 67 /** 68 * Default Constructor taking a name and a value. The value may be null. 69 * 70 * @param name The name. 71 * @param value The value. 72 */ 73 public BasicClientCookie(final String name, final String value) { 74 super(); 75 if (name == null) { 76 throw new IllegalArgumentException("Name may not be null"); 77 } 78 this.name = name; 79 this.attribs = new HashMap<String, String>(); 80 this.value = value; 81 } 82 83 /** 84 * Returns the name. 85 * 86 * @return String name The name 87 */ 88 public String getName() { 89 return this.name; 90 } 91 92 /** 93 * Returns the value. 94 * 95 * @return String value The current value. 96 */ 97 public String getValue() { 98 return this.value; 99 } 100 101 /** 102 * Sets the value 103 * 104 * @param value 105 */ 106 public void setValue(final String value) { 107 this.value = value; 108 } 109 110 /** 111 * Returns the comment describing the purpose of this cookie, or 112 * <tt>null</tt> if no such comment has been defined. 113 * 114 * @return comment 115 * 116 * @see #setComment(String) 117 */ 118 public String getComment() { 119 return cookieComment; 120 } 121 122 /** 123 * If a user agent (web browser) presents this cookie to a user, the 124 * cookie's purpose will be described using this comment. 125 * 126 * @param comment 127 * 128 * @see #getComment() 129 */ 130 public void setComment(String comment) { 131 cookieComment = comment; 132 } 133 134 135 /** 136 * Returns null. Cookies prior to RFC2965 do not set this attribute 137 */ 138 public String getCommentURL() { 139 return null; 140 } 141 142 143 /** 144 * Returns the expiration {@link Date} of the cookie, or <tt>null</tt> 145 * if none exists. 146 * <p><strong>Note:</strong> the object returned by this method is 147 * considered immutable. Changing it (e.g. using setTime()) could result 148 * in undefined behaviour. Do so at your peril. </p> 149 * @return Expiration {@link Date}, or <tt>null</tt>. 150 * 151 * @see #setExpiryDate(java.util.Date) 152 * 153 */ 154 public Date getExpiryDate() { 155 return cookieExpiryDate; 156 } 157 158 /** 159 * Sets expiration date. 160 * <p><strong>Note:</strong> the object returned by this method is considered 161 * immutable. Changing it (e.g. using setTime()) could result in undefined 162 * behaviour. Do so at your peril.</p> 163 * 164 * @param expiryDate the {@link Date} after which this cookie is no longer valid. 165 * 166 * @see #getExpiryDate 167 * 168 */ 169 public void setExpiryDate (Date expiryDate) { 170 cookieExpiryDate = expiryDate; 171 } 172 173 174 /** 175 * Returns <tt>false</tt> if the cookie should be discarded at the end 176 * of the "session"; <tt>true</tt> otherwise. 177 * 178 * @return <tt>false</tt> if the cookie should be discarded at the end 179 * of the "session"; <tt>true</tt> otherwise 180 */ 181 public boolean isPersistent() { 182 return (null != cookieExpiryDate); 183 } 184 185 186 /** 187 * Returns domain attribute of the cookie. 188 * 189 * @return the value of the domain attribute 190 * 191 * @see #setDomain(java.lang.String) 192 */ 193 public String getDomain() { 194 return cookieDomain; 195 } 196 197 /** 198 * Sets the domain attribute. 199 * 200 * @param domain The value of the domain attribute 201 * 202 * @see #getDomain 203 */ 204 public void setDomain(String domain) { 205 if (domain != null) { 206 cookieDomain = domain.toLowerCase(Locale.ENGLISH); 207 } else { 208 cookieDomain = null; 209 } 210 } 211 212 213 /** 214 * Returns the path attribute of the cookie 215 * 216 * @return The value of the path attribute. 217 * 218 * @see #setPath(java.lang.String) 219 */ 220 public String getPath() { 221 return cookiePath; 222 } 223 224 /** 225 * Sets the path attribute. 226 * 227 * @param path The value of the path attribute 228 * 229 * @see #getPath 230 * 231 */ 232 public void setPath(String path) { 233 cookiePath = path; 234 } 235 236 /** 237 * @return <code>true</code> if this cookie should only be sent over secure connections. 238 * @see #setSecure(boolean) 239 */ 240 public boolean isSecure() { 241 return isSecure; 242 } 243 244 /** 245 * Sets the secure attribute of the cookie. 246 * <p> 247 * When <tt>true</tt> the cookie should only be sent 248 * using a secure protocol (https). This should only be set when 249 * the cookie's originating server used a secure protocol to set the 250 * cookie's value. 251 * 252 * @param secure The value of the secure attribute 253 * 254 * @see #isSecure() 255 */ 256 public void setSecure (boolean secure) { 257 isSecure = secure; 258 } 259 260 261 /** 262 * Returns null. Cookies prior to RFC2965 do not set this attribute 263 */ 264 public int[] getPorts() { 265 return null; 266 } 267 268 269 /** 270 * Returns the version of the cookie specification to which this 271 * cookie conforms. 272 * 273 * @return the version of the cookie. 274 * 275 * @see #setVersion(int) 276 * 277 */ 278 public int getVersion() { 279 return cookieVersion; 280 } 281 282 /** 283 * Sets the version of the cookie specification to which this 284 * cookie conforms. 285 * 286 * @param version the version of the cookie. 287 * 288 * @see #getVersion 289 */ 290 public void setVersion(int version) { 291 cookieVersion = version; 292 } 293 294 /** 295 * Returns true if this cookie has expired. 296 * @param date Current time 297 * 298 * @return <tt>true</tt> if the cookie has expired. 299 */ 300 public boolean isExpired(final Date date) { 301 if (date == null) { 302 throw new IllegalArgumentException("Date may not be null"); 303 } 304 return (cookieExpiryDate != null 305 && cookieExpiryDate.getTime() <= date.getTime()); 306 } 307 308 public void setAttribute(final String name, final String value) { 309 this.attribs.put(name, value); 310 } 311 312 public String getAttribute(final String name) { 313 return this.attribs.get(name); 314 } 315 316 public boolean containsAttribute(final String name) { 317 return this.attribs.get(name) != null; 318 } 319 320 @Override 321 public Object clone() throws CloneNotSupportedException { 322 BasicClientCookie clone = (BasicClientCookie) super.clone(); 323 clone.attribs = new HashMap<String, String>(this.attribs); 324 return clone; 325 } 326 327 @Override 328 public String toString() { 329 StringBuilder buffer = new StringBuilder(); 330 buffer.append("[version: "); 331 buffer.append(Integer.toString(this.cookieVersion)); 332 buffer.append("]"); 333 buffer.append("[name: "); 334 buffer.append(this.name); 335 buffer.append("]"); 336 buffer.append("[value: "); 337 buffer.append(this.value); 338 buffer.append("]"); 339 buffer.append("[domain: "); 340 buffer.append(this.cookieDomain); 341 buffer.append("]"); 342 buffer.append("[path: "); 343 buffer.append(this.cookiePath); 344 buffer.append("]"); 345 buffer.append("[expiry: "); 346 buffer.append(this.cookieExpiryDate); 347 buffer.append("]"); 348 return buffer.toString(); 349 } 350 351 // ----------------------------------------------------- Instance Variables 352 353 /** Cookie name */ 354 private final String name; 355 356 /** Cookie attributes as specified by the origin server */ 357 private Map<String, String> attribs; 358 359 /** Cookie value */ 360 private String value; 361 362 /** Comment attribute. */ 363 private String cookieComment; 364 365 /** Domain attribute. */ 366 private String cookieDomain; 367 368 /** Expiration {@link Date}. */ 369 private Date cookieExpiryDate; 370 371 /** Path attribute. */ 372 private String cookiePath; 373 374 /** My secure flag. */ 375 private boolean isSecure; 376 377 /** The version of the cookie specification I was created from. */ 378 private int cookieVersion; 379 380} 381 382