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 package gov.nist.javax.sip.header;
30 
31 import javax.sip.InvalidArgumentException;
32 import javax.sip.header.SubscriptionStateHeader;
33 import java.text.ParseException;
34 
35 /**
36  *SubscriptionState header
37  *
38  * @version 1.2 $Revision: 1.7 $ $Date: 2009/07/17 18:57:39 $
39  *
40  * @author Olivier Deruelle <br/>
41  *
42  *
43  */
44 public class SubscriptionState
45     extends ParametersHeader
46     implements SubscriptionStateHeader {
47 
48     /**
49      * Comment for <code>serialVersionUID</code>
50      */
51     private static final long serialVersionUID = -6673833053927258745L;
52     protected int expires;
53     protected int retryAfter;
54     protected String reasonCode;
55     protected String state;
56 
57     /** Creates a new instance of SubscriptionState */
SubscriptionState()58     public SubscriptionState() {
59         super(SIPHeaderNames.SUBSCRIPTION_STATE);
60         expires = -1;
61         retryAfter = -1;
62     }
63 
64     /**
65     * Sets the relative expires value of the SubscriptionStateHeader. The
66     * expires value MUST be greater than zero and MUST be less than 2**31.
67     *
68     * @param expires - the new expires value of this SubscriptionStateHeader.
69     * @throws InvalidArgumentException if supplied value is less than zero.
70     */
setExpires(int expires)71     public void setExpires(int expires) throws InvalidArgumentException {
72         if (expires < 0)
73             throw new InvalidArgumentException(
74                 "JAIN-SIP "
75                     + "Exception, SubscriptionState, setExpires(), the expires parameter is  < 0");
76         this.expires = expires;
77     }
78 
79     /**
80      * Gets the expires value of the SubscriptionStateHeader. This expires value is
81      * relative time.
82      *
83      * @return the expires value of the SubscriptionStateHeader.
84      */
getExpires()85     public int getExpires() {
86         return expires;
87     }
88 
89     /**
90      * Sets the retry after value of the SubscriptionStateHeader. The retry after value
91      * MUST be greater than zero and MUST be less than 2**31.
92      *
93      * @param retryAfter - the new retry after value of this SubscriptionStateHeader
94      * @throws InvalidArgumentException if supplied value is less than zero.
95      */
setRetryAfter(int retryAfter)96     public void setRetryAfter(int retryAfter) throws InvalidArgumentException {
97         if (retryAfter <= 0)
98             throw new InvalidArgumentException(
99                 "JAIN-SIP "
100                     + "Exception, SubscriptionState, setRetryAfter(), the retryAfter parameter is <=0");
101         this.retryAfter = retryAfter;
102     }
103 
104     /**
105      * Gets the retry after value of the SubscriptionStateHeader. This retry after
106      * value is relative time.
107      *
108      * @return the retry after value of the SubscriptionStateHeader.
109      */
getRetryAfter()110     public int getRetryAfter() {
111         return retryAfter;
112     }
113 
114     /**
115      * Gets the reason code of SubscriptionStateHeader.
116      *
117      * @return the comment of this SubscriptionStateHeader, return null if no reason code
118      * is available.
119      */
getReasonCode()120     public String getReasonCode() {
121         return reasonCode;
122     }
123 
124     /**
125      * Sets the reason code value of the SubscriptionStateHeader.
126      *
127      * @param reasonCode - the new reason code string value of the SubscriptionStateHeader.
128      * @throws ParseException which signals that an error has been reached
129      * unexpectedly while parsing the reason code.
130      */
setReasonCode(String reasonCode)131     public void setReasonCode(String reasonCode) throws ParseException {
132         if (reasonCode == null)
133             throw new NullPointerException(
134                 "JAIN-SIP "
135                     + "Exception, SubscriptionState, setReasonCode(), the reasonCode parameter is null");
136         this.reasonCode = reasonCode;
137     }
138 
139     /**
140      * Gets the state of SubscriptionStateHeader.
141      *
142      * @return the state of this SubscriptionStateHeader.
143      */
getState()144     public String getState() {
145         return state;
146     }
147 
148     /**
149      * Sets the state value of the SubscriptionStateHeader.
150      *
151      * @param state - the new state string value of the SubscriptionStateHeader.
152      * @throws ParseException which signals that an error has been reached
153      * unexpectedly while parsing the state.
154      */
setState(String state)155     public void setState(String state) throws ParseException {
156         if (state == null)
157             throw new NullPointerException(
158                 "JAIN-SIP "
159                     + "Exception, SubscriptionState, setState(), the state parameter is null");
160         this.state = state;
161     }
162 
163     /** Just the encoded body of the header.
164      * @return the string encoded header body.
165      */
encodeBody()166     public String encodeBody() {
167         return encodeBody(new StringBuffer()).toString();
168     }
169 
encodeBody(StringBuffer buffer)170     protected StringBuffer encodeBody(StringBuffer buffer) {
171         if (state != null)
172             buffer.append(state);
173         if (reasonCode != null)
174             buffer.append(";reason=").append(reasonCode);
175         if (expires != -1)
176             buffer.append(";expires=").append(expires);
177         if (retryAfter != -1)
178             buffer.append(";retry-after=").append(retryAfter);
179 
180         if (!parameters.isEmpty()) {
181             buffer.append(SEMICOLON);
182             parameters.encode(buffer);
183         }
184         return buffer;
185     }
186 }
187 
188