Home | History | Annotate | Download | only in header
      1 /*
      2 * Conditions Of Use
      3 *
      4 * This software was developed by employees of the National Institute of
      5 * Standards and Technology (NIST), an agency of the Federal Government.
      6 * Pursuant to title 15 Untied States Code Section 105, works of NIST
      7 * employees are not subject to copyright protection in the United States
      8 * and are considered to be in the public domain.  As a result, a formal
      9 * license is not needed to use the software.
     10 *
     11 * This software is provided by NIST as a service and is expressly
     12 * provided "AS IS."  NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
     13 * OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
     14 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
     15 * AND DATA ACCURACY.  NIST does not warrant or make any representations
     16 * regarding the use of the software or the results thereof, including but
     17 * not limited to the correctness, accuracy, reliability or usefulness of
     18 * the software.
     19 *
     20 * Permission to use this software is contingent upon your acceptance
     21 * of the terms of this agreement
     22 *
     23 * .
     24 *
     25 */
     26 /*******************************************************************************
     27 * Product of NIST/ITL Advanced Networking Technologies Division (ANTD).        *
     28 *******************************************************************************/
     29 
     30 package gov.nist.javax.sip.header;
     31 
     32 import javax.sip.*;
     33 import java.text.ParseException;
     34 import javax.sip.header.*;
     35 
     36 /**
     37  * Retry-After SIP Header.
     38  *
     39  * @version 1.2 $Revision: 1.9 $ $Date: 2009/11/04 17:35:55 $
     40  *
     41  * @author M. Ranganathan   <br/>
     42  * @author Olivier Deruelle <br/>
     43  *
     44  *
     45  */
     46 public class RetryAfter extends ParametersHeader implements RetryAfterHeader {
     47 
     48     /**
     49      * Comment for <code>serialVersionUID</code>
     50      */
     51     private static final long serialVersionUID = -1029458515616146140L;
     52 
     53     /** constant DURATION parameter.
     54      */
     55     public static final String DURATION = ParameterNames.DURATION;
     56 
     57     /** duration field
     58      */
     59     protected Integer retryAfter = new Integer(0);
     60 
     61     /** comment field
     62      */
     63     protected String comment;
     64 
     65     /** Default constructor
     66      */
     67     public RetryAfter() {
     68         super(NAME);
     69     }
     70 
     71     /** Encode body of this into cannonical form.
     72      * @return encoded body
     73      */
     74     public String encodeBody() {
     75         StringBuffer s = new StringBuffer();
     76 
     77         if (retryAfter != null)
     78             s.append(retryAfter);
     79 
     80         if (comment != null)
     81             s.append(SP + LPAREN + comment + RPAREN);
     82 
     83         if (!parameters.isEmpty()) {
     84             s.append(SEMICOLON + parameters.encode());
     85         }
     86 
     87         return s.toString();
     88     }
     89 
     90     /** Boolean function
     91      * @return true if comment exist, false otherwise
     92      */
     93     public boolean hasComment() {
     94         return comment != null;
     95     }
     96 
     97     /** remove comment field
     98      */
     99     public void removeComment() {
    100         comment = null;
    101     }
    102 
    103     /** remove duration field
    104      */
    105     public void removeDuration() {
    106         super.removeParameter(DURATION);
    107     }
    108 
    109     /**
    110      * Sets the retry after value of the RetryAfterHeader.
    111      * The retry after value MUST be greater than zero and
    112      * MUST be less than 2**31.
    113      *
    114      * @param retryAfter - the new retry after value of this RetryAfterHeader
    115      * @throws InvalidArgumentException if supplied value is less than zero.
    116      *
    117      */
    118 
    119     public void setRetryAfter(int retryAfter) throws InvalidArgumentException {
    120         if (retryAfter < 0)
    121             throw new InvalidArgumentException(
    122                 "invalid parameter " + retryAfter);
    123         this.retryAfter = Integer.valueOf(retryAfter);
    124     }
    125 
    126     /**
    127      * Gets the retry after value of the RetryAfterHeader. This retry after
    128      * value is relative time.
    129      *
    130      * @return the retry after value of the RetryAfterHeader.
    131      *
    132      */
    133 
    134     public int getRetryAfter() {
    135         return retryAfter.intValue();
    136     }
    137 
    138     /**
    139      * Gets the comment of RetryAfterHeader.
    140      *
    141      * @return the comment of this RetryAfterHeader, return null if no comment
    142      * is available.
    143      */
    144 
    145     public String getComment() {
    146         return comment;
    147     }
    148 
    149     /**
    150      * Sets the comment value of the RetryAfterHeader.
    151      *
    152      * @param comment - the new comment string value of the RetryAfterHeader.
    153      * @throws ParseException which signals that an error has been reached
    154      * unexpectedly while parsing the comment.
    155      */
    156 
    157     public void setComment(String comment) throws ParseException {
    158         if (comment == null)
    159             throw new NullPointerException("the comment parameter is null");
    160         this.comment = comment;
    161     }
    162 
    163     /**
    164      * Sets the duration value of the RetryAfterHeader. The retry after value
    165      * MUST be greater than zero and MUST be less than 2**31.
    166      *
    167      * @param duration - the new duration value of this RetryAfterHeader
    168      * @throws InvalidArgumentException if supplied value is less than zero.
    169      *
    170      */
    171 
    172     public void setDuration(int duration) throws InvalidArgumentException {
    173         if (duration < 0)
    174             throw new InvalidArgumentException("the duration parameter is <0");
    175         this.setParameter(DURATION, duration);
    176     }
    177 
    178     /**
    179      * Gets the duration value of the RetryAfterHeader. This duration value
    180      * is relative time.
    181      *
    182      * @return the duration value of the RetryAfterHeader, return zero if not
    183      * set.
    184      *
    185      */
    186 
    187     public int getDuration() {
    188       if (this.getParameter(DURATION) == null) return -1;
    189       else return super.getParameterAsInt(DURATION);
    190     }
    191 }
    192