• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  * Bug reports contributed by Joao Paulo, Stephen Jones,
28  * John Zeng and Alstair Cole.
29  *
30  */
31 /*******************************************************************************
32 * Product of NIST/ITL Advanced Networking Technologies Division (ANTD).        *
33 *******************************************************************************/
34 package gov.nist.javax.sip.header;
35 
36 import gov.nist.core.NameValue;
37 import gov.nist.core.NameValueList;
38 import gov.nist.javax.sip.address.AddressImpl;
39 
40 import javax.sip.InvalidArgumentException;
41 import javax.sip.header.ContactHeader;
42 import java.text.ParseException;
43 
44 /**
45  * Contact Item.
46  *
47  * @see gov.nist.javax.sip.header.ContactList
48  *
49  * @author M. Ranganathan  <br/>
50  * @version 1.2 $Revision: 1.13 $ $Date: 2009/10/18 13:46:31 $
51  * @since 1.1
52  *
53  *
54  */
55 public final  class Contact
56     extends AddressParametersHeader
57     implements javax.sip.header.ContactHeader {
58     /**
59      * Comment for <code>serialVersionUID</code>
60      */
61     private static final long serialVersionUID = 1677294871695706288L;
62     public static final String ACTION = ParameterNames.ACTION;
63     public static final String PROXY = ParameterNames.PROXY;
64     public static final String REDIRECT = ParameterNames.REDIRECT;
65     public static final String EXPIRES = ParameterNames.EXPIRES;
66     public static final String Q = ParameterNames.Q;
67 
68     // This must be private or the toString will go for a loop!
69     private ContactList contactList;
70 
71     /** wildCardFlag field.
72      */
73     protected boolean wildCardFlag;
74 
75     /** Default constructor.
76      */
Contact()77     public Contact() {
78         super(NAME);
79     }
80 
81     /** Set a parameter.
82     */
setParameter(String name, String value)83     public void setParameter(String name, String value) throws ParseException {
84         NameValue nv = parameters.getNameValue(name);
85         if (nv != null) {
86             nv.setValueAsObject(value);
87         } else {
88             nv = new NameValue(name, value);
89             if (name.equalsIgnoreCase("methods"))
90                 nv.setQuotedValue();
91             this.parameters.set(nv);
92         }
93     }
94 
95     /**
96      * Encode body of the header into a cannonical String.
97      * @return string encoding of the header value.
98      */
encodeBody()99     protected String encodeBody() {
100         return encodeBody(new StringBuffer()).toString();
101     }
102 
encodeBody(StringBuffer buffer)103     protected StringBuffer encodeBody(StringBuffer buffer) {
104         if (wildCardFlag) {
105             buffer.append('*');
106         }
107         else {
108             // Bug report by Joao Paulo
109             if (address.getAddressType() == AddressImpl.NAME_ADDR) {
110                 address.encode(buffer);
111             } else {
112                 // Encoding in canonical form must have <> around address.
113                 buffer.append('<');
114                 address.encode(buffer);
115                 buffer.append('>');
116             }
117             if (!parameters.isEmpty()) {
118                 buffer.append(SEMICOLON);
119                 parameters.encode(buffer);
120             }
121         }
122 
123         return buffer;
124     }
125 
126     /** get the Contact list.
127      * @return ContactList
128      */
getContactList()129     public ContactList getContactList() {
130         return contactList;
131     }
132 
133     /** get the WildCardFlag field
134      * @return boolean
135      */
getWildCardFlag()136     public boolean getWildCardFlag() {
137         return wildCardFlag;
138     }
139 
140     /** get the address field.
141      * @return Address
142      */
getAddress()143     public javax.sip.address.Address getAddress() {
144         // JAIN-SIP stores the wild card as an address!
145         return address;
146     }
147 
148     /** get the parameters List
149      * @return NameValueList
150      */
getContactParms()151     public NameValueList getContactParms() {
152         return parameters;
153     }
154 
155     /** get Expires parameter.
156      * @return the Expires parameter.
157      */
getExpires()158     public int getExpires() {
159         return getParameterAsInt(EXPIRES);
160     }
161 
162     /** Set the expiry time in seconds.
163     *@param expiryDeltaSeconds exipry time.
164     */
165 
setExpires(int expiryDeltaSeconds)166     public void setExpires(int expiryDeltaSeconds) {
167         Integer deltaSeconds = Integer.valueOf(expiryDeltaSeconds);
168         this.parameters.set(EXPIRES, deltaSeconds);
169     }
170 
171     /** get the Q-value
172      * @return float
173      */
getQValue()174     public float getQValue() {
175         return getParameterAsFloat(Q);
176     }
177 
178     /** set the Contact List
179      * @param cl ContactList to set
180      */
setContactList(ContactList cl)181     public void setContactList(ContactList cl) {
182         contactList = cl;
183     }
184 
185     /**
186      * Set the wildCardFlag member
187      * @param w boolean to set
188      */
setWildCardFlag(boolean w)189     public void setWildCardFlag(boolean w) {
190         this.wildCardFlag = true;
191         this.address = new AddressImpl();
192         this.address.setWildCardFlag();
193     }
194 
195     /**
196      * Set the address member
197      *
198      * @param address Address to set
199      */
setAddress(javax.sip.address.Address address)200     public void setAddress(javax.sip.address.Address address) {
201         // Canonical form must have <> around the address.
202         if (address == null)
203             throw new NullPointerException("null address");
204         this.address = (AddressImpl) address;
205         this.wildCardFlag = false;
206     }
207 
208     /**
209      * set the Q-value parameter
210      * @param qValue float to set
211      */
setQValue(float qValue)212     public void setQValue(float qValue) throws InvalidArgumentException {
213         if (qValue != -1 && (qValue < 0 || qValue > 1))
214             throw new InvalidArgumentException(
215                 "JAIN-SIP Exception, Contact, setQValue(), "
216                     + "the qValue is not between 0 and 1");
217         this.parameters.set(Q, Float.valueOf(qValue));
218     }
219 
clone()220     public Object clone() {
221         Contact retval = (Contact) super.clone();
222         if (this.contactList != null)
223             retval.contactList = (ContactList) this.contactList.clone();
224         return retval;
225     }
226 
227     /* (non-Javadoc)
228      * @see javax.sip.header.ContactHeader#setWildCard()
229      */
setWildCard()230     public void setWildCard() {
231        this.setWildCardFlag(true);
232 
233     }
234 
235     /* (non-Javadoc)
236      * @see javax.sip.header.ContactHeader#isWildCard()
237      */
isWildCard()238     public boolean isWildCard() {
239 
240         return this.address.isWildcard();
241     }
242 
equals(Object other)243     public boolean equals(Object other) {
244         return (other instanceof ContactHeader) && super.equals(other);
245     }
246 
removeSipInstanceParam()247     public void removeSipInstanceParam() {
248         if (parameters != null)
249             parameters.delete(ParameterNames.SIP_INSTANCE);
250     }
251 
getSipInstanceParam()252     public String getSipInstanceParam() {
253         return (String) parameters.getValue(ParameterNames.SIP_INSTANCE);
254     }
255 
setSipInstanceParam(String value)256     public void setSipInstanceParam(String value) {
257         this.parameters.set(ParameterNames.SIP_INSTANCE, value);
258     }
259 
260     /**
261      *remove the pub-gruu value from the parameter list if it exists.
262      */
removePubGruuParam()263     public void removePubGruuParam() {
264         if (parameters != null)
265             parameters.delete(ParameterNames.PUB_GRUU);
266     }
267 
getPubGruuParam()268     public String getPubGruuParam() {
269         return (String) parameters.getValue(ParameterNames.PUB_GRUU);
270     }
271 
setPubGruuParam(String value)272     public void setPubGruuParam(String value)
273     {
274         this.parameters.set(ParameterNames.PUB_GRUU, value);
275     }
276 
277     /**
278      *remove the pub-gruu value from the parameter list if it exists.
279      */
removeTempGruuParam()280     public void removeTempGruuParam() {
281         if (parameters != null)
282             parameters.delete(ParameterNames.TEMP_GRUU);
283     }
284 
getTempGruuParam()285     public String getTempGruuParam() {
286         return (String) parameters.getValue(ParameterNames.TEMP_GRUU);
287     }
288 
setTempGruuParam(String value)289     public void setTempGruuParam(String value)
290     {
291         this.parameters.set(ParameterNames.TEMP_GRUU, value);
292     }
293 }
294