1600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
2600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/*******************************************************************************
3600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Product of NIST/ITL Advanced Networking Technologies Division (ANTD).        *
4600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*******************************************************************************/
5600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
6600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpackage gov.nist.javax.sip.header.extensions;
7600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
8600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.javax.sip.header.ParametersHeader;
9600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.text.ParseException;
11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.sip.InvalidArgumentException;
13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.sip.header.ExtensionHeader;
14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/**
16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * ReferredBy SIP Header.
17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @version JAIN-SIP-1.1 $Revision: 1.5 $ $Date: 2009/10/18 13:46:36 $
19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author Peter Musgrave.
21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic final class SessionExpires
24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    extends ParametersHeader implements ExtensionHeader, SessionExpiresHeader {
25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    // TODO: Need a unique UID
27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private static final long serialVersionUID = 8765762413224043300L;
28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    // TODO: When the MinSEHeader is added to javax - move this there...pmusgrave
30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public static final String NAME = "Session-Expires";
31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public int expires;
33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public static final String REFRESHER = "refresher";
35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** default Constructor.
36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public SessionExpires() {
38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        super(NAME);
39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Gets the expires value of the SessionExpiresHeader. This expires value is
43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * relative time.
44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the expires value of the ExpiresHeader.
48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @since JAIN SIP v1.1
50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public int getExpires() {
53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return expires;
54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Sets the relative expires value of the SessionExpiresHeader.
58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * The expires value MUST be greater than zero and MUST be
59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * less than 2**31.
60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param expires - the new expires value
62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @throws InvalidArgumentException if supplied value is less than zero.
64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @since JAIN SIP v1.1
66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setExpires(int expires) throws InvalidArgumentException {
69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (expires < 0)
70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            throw new InvalidArgumentException("bad argument " + expires);
71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.expires = expires;
72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setValue(String value) throws ParseException {
75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        // not implemented.
76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        throw new ParseException(value,0);
77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Encode the header content into a String.
82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return String
83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    protected String encodeBody() {
85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        String retval = Integer.toString(expires);
87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
88600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (!parameters.isEmpty()) {
89600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            retval += SEMICOLON + parameters.encode();
90600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
91600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return retval;
92600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
93600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
94600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getRefresher() {
95600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang       return parameters.getParameter(REFRESHER);
96600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
97600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
98600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setRefresher(String refresher) {
99600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.parameters.set(REFRESHER,refresher);
100600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
101600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
102600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
103600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
104600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
105