1600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/*
2600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Conditions Of Use
3600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*
4600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* This software was developed by employees of the National Institute of
5600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Standards and Technology (NIST), an agency of the Federal Government.
6600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Pursuant to title 15 Untied States Code Section 105, works of NIST
7600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* employees are not subject to copyright protection in the United States
8600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* and are considered to be in the public domain.  As a result, a formal
9600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* license is not needed to use the software.
10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*
11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* This software is provided by NIST as a service and is expressly
12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* provided "AS IS."  NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* AND DATA ACCURACY.  NIST does not warrant or make any representations
16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* regarding the use of the software or the results thereof, including but
17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* not limited to the correctness, accuracy, reliability or usefulness of
18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* the software.
19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*
20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Permission to use this software is contingent upon your acceptance
21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* of the terms of this agreement
22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*
23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* .
24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*
25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*/
26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/*
27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Bug reports contributed by Joao Paulo, Stephen Jones,
28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * John Zeng and Alstair Cole.
29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/*******************************************************************************
32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang* Product of NIST/ITL Advanced Networking Technologies Division (ANTD).        *
33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang*******************************************************************************/
34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpackage gov.nist.javax.sip.header;
35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.core.NameValue;
37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.core.NameValueList;
38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.javax.sip.address.AddressImpl;
39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.sip.InvalidArgumentException;
41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.sip.header.ContactHeader;
42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.text.ParseException;
43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/**
45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Contact Item.
46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @see gov.nist.javax.sip.header.ContactList
48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author M. Ranganathan  <br/>
50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @version 1.2 $Revision: 1.13 $ $Date: 2009/10/18 13:46:31 $
51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @since 1.1
52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic final  class Contact
56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    extends AddressParametersHeader
57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    implements javax.sip.header.ContactHeader {
58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Comment for <code>serialVersionUID</code>
60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private static final long serialVersionUID = 1677294871695706288L;
62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public static final String ACTION = ParameterNames.ACTION;
63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public static final String PROXY = ParameterNames.PROXY;
64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public static final String REDIRECT = ParameterNames.REDIRECT;
65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public static final String EXPIRES = ParameterNames.EXPIRES;
66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public static final String Q = ParameterNames.Q;
67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    // This must be private or the toString will go for a loop!
69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private ContactList contactList;
70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** wildCardFlag field.
72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    protected boolean wildCardFlag;
74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Default constructor.
76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public Contact() {
78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        super(NAME);
79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Set a parameter.
82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    */
83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setParameter(String name, String value) throws ParseException {
84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        NameValue nv = parameters.getNameValue(name);
85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (nv != null) {
86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            nv.setValueAsObject(value);
87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        } else {
88600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            nv = new NameValue(name, value);
89600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            if (name.equalsIgnoreCase("methods"))
90600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                nv.setQuotedValue();
91600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            this.parameters.set(nv);
92600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
93600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
94600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
95600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
96600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Encode body of the header into a cannonical String.
97600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return string encoding of the header value.
98600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
99600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    protected String encodeBody() {
100600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return encodeBody(new StringBuffer()).toString();
101600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
102600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
103600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    protected StringBuffer encodeBody(StringBuffer buffer) {
104600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (wildCardFlag) {
105600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            buffer.append('*');
106600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
107600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        else {
108600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            // Bug report by Joao Paulo
109600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            if (address.getAddressType() == AddressImpl.NAME_ADDR) {
110600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                address.encode(buffer);
111600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            } else {
112600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                // Encoding in canonical form must have <> around address.
113600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                buffer.append('<');
114600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                address.encode(buffer);
115600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                buffer.append('>');
116600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            }
117600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            if (!parameters.isEmpty()) {
118600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                buffer.append(SEMICOLON);
119600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                parameters.encode(buffer);
120600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            }
121600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
122600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
123600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return buffer;
124600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
125600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
126600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** get the Contact list.
127600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return ContactList
128600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
129600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public ContactList getContactList() {
130600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return contactList;
131600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
132600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
133600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** get the WildCardFlag field
134600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return boolean
135600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
136600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public boolean getWildCardFlag() {
137600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return wildCardFlag;
138600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
139600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
140600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** get the address field.
141600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return Address
142600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
143600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public javax.sip.address.Address getAddress() {
144600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        // JAIN-SIP stores the wild card as an address!
145600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return address;
146600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
147600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
148600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** get the parameters List
149600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return NameValueList
150600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
151600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public NameValueList getContactParms() {
152600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return parameters;
153600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
154600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
155600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** get Expires parameter.
156600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the Expires parameter.
157600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
158600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public int getExpires() {
159600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return getParameterAsInt(EXPIRES);
160600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
161600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
162600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Set the expiry time in seconds.
163600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    *@param expiryDeltaSeconds exipry time.
164600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    */
165600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
166600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setExpires(int expiryDeltaSeconds) {
167600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        Integer deltaSeconds = Integer.valueOf(expiryDeltaSeconds);
168600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.parameters.set(EXPIRES, deltaSeconds);
169600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
170600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
171600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** get the Q-value
172600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return float
173600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
174600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public float getQValue() {
175600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return getParameterAsFloat(Q);
176600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
177600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
178600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** set the Contact List
179600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param cl ContactList to set
180600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
181600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setContactList(ContactList cl) {
182600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        contactList = cl;
183600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
184600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
185600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
186600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Set the wildCardFlag member
187600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param w boolean to set
188600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
189600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setWildCardFlag(boolean w) {
190600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.wildCardFlag = true;
191600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.address = new AddressImpl();
192600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.address.setWildCardFlag();
193600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
194600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
195600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
196600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Set the address member
197600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
198600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param address Address to set
199600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
200600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setAddress(javax.sip.address.Address address) {
201600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        // Canonical form must have <> around the address.
202600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (address == null)
203600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            throw new NullPointerException("null address");
204600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.address = (AddressImpl) address;
205600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.wildCardFlag = false;
206600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
207600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
208600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
209600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * set the Q-value parameter
210600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param qValue float to set
211600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
212600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setQValue(float qValue) throws InvalidArgumentException {
213600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (qValue != -1 && (qValue < 0 || qValue > 1))
214600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            throw new InvalidArgumentException(
215600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                "JAIN-SIP Exception, Contact, setQValue(), "
216600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    + "the qValue is not between 0 and 1");
217600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.parameters.set(Q, Float.valueOf(qValue));
218600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
219600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
220600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public Object clone() {
221600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        Contact retval = (Contact) super.clone();
222600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (this.contactList != null)
223600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            retval.contactList = (ContactList) this.contactList.clone();
224600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return retval;
225600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
226600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
227600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /* (non-Javadoc)
228600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @see javax.sip.header.ContactHeader#setWildCard()
229600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
230600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setWildCard() {
231600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang       this.setWildCardFlag(true);
232600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
233600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
234600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
235600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /* (non-Javadoc)
236600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @see javax.sip.header.ContactHeader#isWildCard()
237600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
238600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public boolean isWildCard() {
239600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
240600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return this.address.isWildcard();
241600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
242600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
243600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public boolean equals(Object other) {
244600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return (other instanceof ContactHeader) && super.equals(other);
245600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
246600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
247600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void removeSipInstanceParam() {
248600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (parameters != null)
249600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            parameters.delete(ParameterNames.SIP_INSTANCE);
250600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
251600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
252600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getSipInstanceParam() {
253600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return (String) parameters.getValue(ParameterNames.SIP_INSTANCE);
254600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
255600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
256600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setSipInstanceParam(String value) {
257600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.parameters.set(ParameterNames.SIP_INSTANCE, value);
258600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
259600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
260600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
261600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *remove the pub-gruu value from the parameter list if it exists.
262600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
263600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void removePubGruuParam() {
264600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (parameters != null)
265600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            parameters.delete(ParameterNames.PUB_GRUU);
266600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
267600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
268600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getPubGruuParam() {
269600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return (String) parameters.getValue(ParameterNames.PUB_GRUU);
270600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
271600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
272600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setPubGruuParam(String value)
273600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    {
274600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.parameters.set(ParameterNames.PUB_GRUU, value);
275600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
276600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
277600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
278600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *remove the pub-gruu value from the parameter list if it exists.
279600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
280600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void removeTempGruuParam() {
281600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (parameters != null)
282600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            parameters.delete(ParameterNames.TEMP_GRUU);
283600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
284600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
285600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getTempGruuParam() {
286600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return (String) parameters.getValue(ParameterNames.TEMP_GRUU);
287600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
288600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
289600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setTempGruuParam(String value)
290600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    {
291600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.parameters.set(ParameterNames.TEMP_GRUU, value);
292600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
293600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
294