• 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   * Product of NIST/ITL Advanced Networking Technologies Division (ANTD).        *
28   *******************************************************************************/
29  package gov.nist.javax.sip.address;
30  import gov.nist.core.*;
31  import javax.sip.address.*;
32  
33  /*
34   * BUG Fix from Antonis Kadris.
35   */
36  /**
37   * Address structure. Imbeds a URI and adds a display name.
38   *
39   *@author M. Ranganathan   <br/>
40   *
41   *
42   *
43   *@version 1.2 $Revision: 1.11 $ $Date: 2009/07/17 18:57:21 $
44   *
45   */
46  public final class AddressImpl
47      extends NetObject
48      implements javax.sip.address.Address {
49  
50  
51      private static final long serialVersionUID = 429592779568617259L;
52  
53      /** Constant field.
54       */
55      public static final int NAME_ADDR = 1;
56  
57      /** constant field.
58       */
59      public static final int ADDRESS_SPEC = 2;
60  
61      /** Constant field.
62       */
63      public static final int WILD_CARD = 3;
64  
65      protected int addressType;
66  
67      /** displayName field
68       */
69      protected String displayName;
70  
71      /** address field
72       */
73      protected GenericURI address;
74  
75      /** Match on the address only.
76       * Dont care about the display name.
77       */
78  
match(Object other)79      public boolean match(Object other) {
80          // TODO -- add the matcher;
81          if (other == null)
82              return true;
83          if (!(other instanceof Address))
84              return false;
85          else {
86              AddressImpl that = (AddressImpl) other;
87              if (that.getMatcher() != null)
88                  return that.getMatcher().match(this.encode());
89              else if (that.displayName != null && this.displayName == null)
90                  return false;
91              else if (that.displayName == null)
92                  return address.match(that.address);
93              else
94                  return displayName.equalsIgnoreCase(that.displayName)
95                      && address.match(that.address);
96          }
97  
98      }
99  
100      /** Get the host port portion of the address spec.
101       *@return host:port in a HostPort structure.
102       */
getHostPort()103      public HostPort getHostPort() {
104          if (!(address instanceof SipUri))
105              throw new RuntimeException("address is not a SipUri");
106          SipUri uri = (SipUri) address;
107          return uri.getHostPort();
108      }
109  
110      /** Get the port from the imbedded URI. This assumes that a SIP URL
111       * is encapsulated in this address object.
112       *
113       *@return the port from the address.
114       *
115       */
getPort()116      public int getPort() {
117          if (!(address instanceof SipUri))
118              throw new RuntimeException("address is not a SipUri");
119          SipUri uri = (SipUri) address;
120          return uri.getHostPort().getPort();
121      }
122  
123      /** Get the user@host:port for the address field. This assumes
124       * that the encapsulated object is a SipUri.
125       *
126       *
127       *@return string containing user@host:port.
128       */
getUserAtHostPort()129      public String getUserAtHostPort() {
130          if (address instanceof SipUri) {
131              SipUri uri = (SipUri) address;
132              return uri.getUserAtHostPort();
133          } else
134              return address.toString();
135      }
136  
137      /** Get the host name from the address.
138       *
139       *@return the host name.
140       */
getHost()141      public String getHost() {
142          if (!(address instanceof SipUri))
143              throw new RuntimeException("address is not a SipUri");
144          SipUri uri = (SipUri) address;
145          return uri.getHostPort().getHost().getHostname();
146      }
147  
148      /** Remove a parameter from the address.
149       *
150       *@param parameterName is the name of the parameter to remove.
151       */
removeParameter(String parameterName)152      public void removeParameter(String parameterName) {
153          if (!(address instanceof SipUri))
154              throw new RuntimeException("address is not a SipUri");
155          SipUri uri = (SipUri) address;
156          uri.removeParameter(parameterName);
157      }
158  
159      /**
160       * Encode the address as a string and return it.
161       * @return String canonical encoded version of this address.
162       */
encode()163      public String encode() {
164          return encode(new StringBuffer()).toString();
165      }
166  
encode(StringBuffer buffer)167      public StringBuffer encode(StringBuffer buffer) {
168          if (this.addressType == WILD_CARD) {
169              buffer.append('*');
170          }
171          else {
172              if (displayName != null) {
173                  buffer.append(DOUBLE_QUOTE)
174                          .append(displayName)
175                          .append(DOUBLE_QUOTE)
176                          .append(SP);
177              }
178              if (address != null) {
179                  if (addressType == NAME_ADDR || displayName != null)
180                      buffer.append(LESS_THAN);
181                  address.encode(buffer);
182                  if (addressType == NAME_ADDR || displayName != null)
183                      buffer.append(GREATER_THAN);
184              }
185          }
186          return buffer;
187      }
188  
AddressImpl()189      public AddressImpl() {
190          this.addressType = NAME_ADDR;
191      }
192  
193      /**
194       * Get the address type;
195       * @return int
196       */
getAddressType()197      public int getAddressType() {
198          return addressType;
199      }
200  
201      /**
202       * Set the address type. The address can be NAME_ADDR, ADDR_SPEC or
203       * WILD_CARD
204       *
205       * @param atype int to set
206       *
207       */
setAddressType(int atype)208      public void setAddressType(int atype) {
209          addressType = atype;
210      }
211  
212      /**
213       * get the display name
214       *
215       * @return String
216       *
217       */
getDisplayName()218      public String getDisplayName() {
219          return displayName;
220      }
221  
222      /**
223       * Set the displayName member
224       *
225       * @param displayName String to set
226       *
227       */
setDisplayName(String displayName)228      public void setDisplayName(String displayName) {
229          this.displayName = displayName;
230          this.addressType = NAME_ADDR;
231      }
232  
233      /**
234       * Set the address field
235       *
236       * @param address SipUri to set
237       *
238       */
setAddess(javax.sip.address.URI address)239      public void setAddess(javax.sip.address.URI address) {
240          this.address = (GenericURI) address;
241      }
242  
243      /**
244       * hashCode impelmentation
245       *
246       */
hashCode()247      public int hashCode() {
248          return this.address.hashCode();
249      }
250  
251      /**
252       * Compare two address specs for equality.
253       *
254       * @param other Object to compare this this address
255       *
256       * @return boolean
257       *
258       */
equals(Object other)259      public boolean equals(Object other) {
260  
261          if (this==other) return true;
262  
263          if (other instanceof Address) {
264              final Address o = (Address) other;
265  
266              // Don't compare display name (?)
267              return this.getURI().equals( o.getURI() );
268          }
269          return false;
270      }
271  
272      /** return true if DisplayName exist.
273       *
274       * @return boolean
275       */
hasDisplayName()276      public boolean hasDisplayName() {
277          return (displayName != null);
278      }
279  
280      /** remove the displayName field
281       */
removeDisplayName()282      public void removeDisplayName() {
283          displayName = null;
284      }
285  
286      /** Return true if the imbedded URI is a sip URI.
287       *
288       * @return true if the imbedded URI is a SIP URI.
289       *
290       */
isSIPAddress()291      public boolean isSIPAddress() {
292          return address instanceof SipUri;
293      }
294  
295      /** Returns the URI address of this Address. The type of URI can be
296       * determined by the scheme.
297       *
298       * @return address parmater of the Address object
299       */
getURI()300      public URI getURI() {
301          return this.address;
302      }
303  
304      /** This determines if this address is a wildcard address. That is
305       * <code>Address.getAddress.getUserInfo() == *;</code>
306       *
307       * @return true if this name address is a wildcard, false otherwise.
308       */
isWildcard()309      public boolean isWildcard() {
310          return this.addressType == WILD_CARD;
311      }
312  
313      /** Sets the URI address of this Address. The URI can be either a
314       * TelURL or a SipURI.
315       *
316       * @param address - the new URI address value of this NameAddress.
317       */
setURI(URI address)318      public void setURI(URI address) {
319          this.address = (GenericURI) address;
320      }
321  
322      /** Set the user name for the imbedded URI.
323       *
324       *@param user -- user name to set for the imbedded URI.
325       */
setUser(String user)326      public void setUser(String user) {
327          ((SipUri) this.address).setUser(user);
328      }
329  
330      /** Mark this a wild card address type.
331       * Also set the SIP URI to a special wild card address.
332       */
setWildCardFlag()333      public void setWildCardFlag() {
334          this.addressType = WILD_CARD;
335          this.address = new SipUri();
336          ((SipUri)this.address).setUser("*");
337      }
338  
clone()339      public Object clone() {
340          AddressImpl retval = (AddressImpl) super.clone();
341          if (this.address != null)
342              retval.address = (GenericURI) this.address.clone();
343          return retval;
344      }
345  
346  }
347