Home » apache-tomcat-6.0.26-src » org.apache » tomcat » util » [javadoc | source]

    1   /*
    2    * $Header: /u/cvs/Projects/EnhydraOrg/enhydra3x/Enhydra/modules/Tomcat/src/share/org/apache/tomcat/util/CookieTools.java,v 1.2.2.1 2000/05/02 18:40:38 peterj Exp $
    3    * $Revision: 1.2.2.1 $
    4    * $Date: 2000/05/02 18:40:38 $
    5    *
    6    * ====================================================================
    7    *
    8    * The Apache Software License, Version 1.1
    9    *
   10    * Copyright (c) 1999 The Apache Software Foundation.  All rights
   11    * reserved.
   12    *
   13    * Redistribution and use in source and binary forms, with or without
   14    * modification, are permitted provided that the following conditions
   15    * are met:
   16    *
   17    * 1. Redistributions of source code must retain the above copyright
   18    *    notice, this list of conditions and the following disclaimer.
   19    *
   20    * 2. Redistributions in binary form must reproduce the above copyright
   21    *    notice, this list of conditions and the following disclaimer in
   22    *    the documentation and/or other materials provided with the
   23    *    distribution.
   24    *
   25    * 3. The end-user documentation included with the redistribution, if
   26    *    any, must include the following acknowlegement:
   27    *       "This product includes software developed by the
   28    *        Apache Software Foundation (http://www.apache.org/)."
   29    *    Alternately, this acknowlegement may appear in the software itself,
   30    *    if and wherever such third-party acknowlegements normally appear.
   31    *
   32    * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
   33    *    Foundation" must not be used to endorse or promote products derived
   34    *    from this software without prior written permission. For written
   35    *    permission, please contact apache@apache.org.
   36    *
   37    * 5. Products derived from this software may not be called "Apache"
   38    *    nor may "Apache" appear in their names without prior written
   39    *    permission of the Apache Group.
   40    *
   41    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   42    * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   43    * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   44    * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   45    * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   46    * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   47    * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   48    * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   49    * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   50    * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   51    * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   52    * SUCH DAMAGE.
   53    * ====================================================================
   54    *
   55    * This software consists of voluntary contributions made by many
   56    * individuals on behalf of the Apache Software Foundation.  For more
   57    * information on the Apache Software Foundation, please see
   58    * <http://www.apache.org/>.
   59    *
   60    * [Additional notices, if required by prior licensing conditions]
   61    *
   62    */
   63   
   64   
   65   package org.apache.tomcat.util;
   66   import java.text;
   67   import java.util;
   68   
   69   import javax.servlet.http.Cookie;
   70   
   71   /**
   72    *
   73    *
   74    * @author Original Author Unknown
   75    * @author duncan@eng.sun.com
   76    */
   77   
   78   public class CookieTools {
   79   
   80       public static String getCookieHeaderName(Cookie cookie) {
   81           int version = cookie.getVersion();
   82   
   83           if (version == 1) {
   84   	    return "Set-Cookie2";
   85           } else {
   86               return "Set-Cookie";
   87           }
   88       }
   89   
   90       public static String getCookieHeaderValue(Cookie cookie) {
   91           StringBuffer buf = new StringBuffer();
   92           int version = cookie.getVersion();
   93   
   94           // this part is the same for all cookies
   95   
   96           buf.append(cookie.getName());
   97           buf.append("=");
   98           maybeQuote(version, buf, cookie.getValue());
   99   
  100    	// add version 1 specific information
  101   	if (version == 1) {
  102   	    // Version=1 ... required
  103   	    buf.append (";Version=1");
  104   
  105   	    // Comment=comment
  106   	    if (cookie.getComment() != null) {
  107   		buf.append (";Comment=");
  108   		maybeQuote (version, buf, cookie.getComment());
  109   	    }
  110   	}
  111   
  112   	// add domain information, if present
  113   
  114   	if (cookie.getDomain() != null) {
  115   	    buf.append(";Domain=");
  116   	    maybeQuote (version, buf, cookie.getDomain());
  117   	}
  118   
  119   	// Max-Age=secs/Discard ... or use old "Expires" format
  120   	if (cookie.getMaxAge() >= 0) {
  121   	    if (version == 0) {
  122   		buf.append (";Expires=");
  123   		new OldCookieExpiry (cookie.getMaxAge()).append (buf);
  124   	    } else {
  125   		buf.append (";Max-Age=");
  126   		buf.append (cookie.getMaxAge());
  127   	    }
  128   	} else if (version == 1)
  129   	  buf.append (";Discard");
  130   
  131   	// Path=path
  132   	if (cookie.getPath() != null) {
  133   	    buf.append (";Path=");
  134   	    maybeQuote (version, buf, cookie.getPath());
  135   	}
  136   
  137   	// Secure
  138   	if (cookie.getSecure()) {
  139   	  buf.append (";Secure");
  140   	}
  141   
  142   	return buf.toString();
  143       }
  144   
  145       static void maybeQuote (int version, StringBuffer buf,
  146                                       String value)
  147       {
  148   	if (version == 0 || isToken (value))
  149   	  buf.append (value);
  150   	else {
  151   	    buf.append ('"');
  152   	    buf.append (value);
  153   	    buf.append ('"');
  154   	}
  155       }
  156   
  157           //
  158       // from RFC 2068, token special case characters
  159       //
  160       private static final String tspecials = "()<>@,;:\\\"/[]?={} \t";
  161   
  162       /*
  163        * Return true iff the string counts as an HTTP/1.1 "token".
  164        */
  165       private static boolean isToken (String value) {
  166   	int len = value.length ();
  167   
  168   	for (int i = 0; i < len; i++) {
  169   	    char c = value.charAt (i);
  170   
  171   	    if (c < 0x20 || c >= 0x7f || tspecials.indexOf (c) != -1)
  172   	      return false;
  173   	}
  174   	return true;
  175       }
  176   
  177   
  178   
  179           /*
  180        * The original Netscape cookie spec had a funky string format
  181        * for dates ... RFC 1123 GMT format, but dashes in two places
  182        * where spaces would normally live.  RFC 2109 simplified that,
  183        * deleting date parsing entirely.
  184        */
  185       static class OldCookieExpiry extends HttpDate {
  186   	OldCookieExpiry (long maxAge)  {
  187   	    super();
  188   	    setTime(getCurrentTime() + maxAge * 1000);
  189   	}
  190   	// Wdy, DD-Mon-YYYY HH:MM:SS GMT
  191   	void append (StringBuffer buf) {
  192   	    String pattern = "EEE, dd-MMM-yyyyy HH:mm:ss z";
  193   	    Locale loc = Locale.US;
  194   	    SimpleDateFormat df = new SimpleDateFormat(pattern, loc);
  195   	    String str = df.format(calendar.getTime());
  196   	    buf.append(str);
  197   	}
  198       }
  199   }

Home » apache-tomcat-6.0.26-src » org.apache » tomcat » util » [javadoc | source]