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