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 * Product of NIST/ITL Advanced Networking Technologies Division (ANTD). * 28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *******************************************************************************/ 29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpackage gov.nist.javax.sip.address; 30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.core.*; 31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.sip.address.*; 32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/* 34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * BUG Fix from Antonis Kadris. 35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/** 37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Address structure. Imbeds a URI and adds a display name. 38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *@author M. Ranganathan <br/> 40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *@version 1.2 $Revision: 1.11 $ $Date: 2009/07/17 18:57:21 $ 44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic final class AddressImpl 47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang extends NetObject 48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang implements javax.sip.address.Address { 49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang private static final long serialVersionUID = 429592779568617259L; 52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** Constant field. 54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final int NAME_ADDR = 1; 56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** constant field. 58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final int ADDRESS_SPEC = 2; 60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** Constant field. 62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static final int WILD_CARD = 3; 64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected int addressType; 66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** displayName field 68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected String displayName; 70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** address field 72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected GenericURI address; 74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** Match on the address only. 76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Dont care about the display name. 77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public boolean match(Object other) { 80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // TODO -- add the matcher; 81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (other == null) 82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return true; 83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (!(other instanceof Address)) 84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return false; 85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang else { 86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang AddressImpl that = (AddressImpl) other; 87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (that.getMatcher() != null) 88600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return that.getMatcher().match(this.encode()); 89600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang else if (that.displayName != null && this.displayName == null) 90600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return false; 91600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang else if (that.displayName == null) 92600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return address.match(that.address); 93600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang else 94600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return displayName.equalsIgnoreCase(that.displayName) 95600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang && address.match(that.address); 96600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 97600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 98600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 99600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 100600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** Get the host port portion of the address spec. 101600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *@return host:port in a HostPort structure. 102600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 103600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public HostPort getHostPort() { 104600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (!(address instanceof SipUri)) 105600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new RuntimeException("address is not a SipUri"); 106600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SipUri uri = (SipUri) address; 107600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return uri.getHostPort(); 108600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 109600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 110600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** Get the port from the imbedded URI. This assumes that a SIP URL 111600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * is encapsulated in this address object. 112600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 113600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *@return the port from the address. 114600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 115600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 116600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public int getPort() { 117600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (!(address instanceof SipUri)) 118600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new RuntimeException("address is not a SipUri"); 119600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SipUri uri = (SipUri) address; 120600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return uri.getHostPort().getPort(); 121600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 122600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 123600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** Get the user@host:port for the address field. This assumes 124600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * that the encapsulated object is a SipUri. 125600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 126600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 127600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *@return string containing user@host:port. 128600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 129600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String getUserAtHostPort() { 130600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (address instanceof SipUri) { 131600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SipUri uri = (SipUri) address; 132600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return uri.getUserAtHostPort(); 133600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else 134600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return address.toString(); 135600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 136600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 137600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** Get the host name from the address. 138600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 139600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *@return the host name. 140600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 141600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String getHost() { 142600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (!(address instanceof SipUri)) 143600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new RuntimeException("address is not a SipUri"); 144600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SipUri uri = (SipUri) address; 145600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return uri.getHostPort().getHost().getHostname(); 146600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 147600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 148600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** Remove a parameter from the address. 149600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 150600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *@param parameterName is the name of the parameter to remove. 151600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 152600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void removeParameter(String parameterName) { 153600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (!(address instanceof SipUri)) 154600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new RuntimeException("address is not a SipUri"); 155600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SipUri uri = (SipUri) address; 156600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang uri.removeParameter(parameterName); 157600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 158600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 159600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 160600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Encode the address as a string and return it. 161600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return String canonical encoded version of this address. 162600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 163600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String encode() { 164600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return encode(new StringBuffer()).toString(); 165600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 166600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 167600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public StringBuffer encode(StringBuffer buffer) { 168600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (this.addressType == WILD_CARD) { 169600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang buffer.append('*'); 170600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 171600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang else { 172600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (displayName != null) { 173600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang buffer.append(DOUBLE_QUOTE) 174600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang .append(displayName) 175600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang .append(DOUBLE_QUOTE) 176600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang .append(SP); 177600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 178600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (address != null) { 179600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (addressType == NAME_ADDR || displayName != null) 180600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang buffer.append(LESS_THAN); 181600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang address.encode(buffer); 182600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (addressType == NAME_ADDR || displayName != null) 183600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang buffer.append(GREATER_THAN); 184600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 185600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 186600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return buffer; 187600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 188600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 189600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public AddressImpl() { 190600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.addressType = NAME_ADDR; 191600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 192600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 193600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 194600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Get the address type; 195600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return int 196600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 197600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public int getAddressType() { 198600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return addressType; 199600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 200600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 201600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 202600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the address type. The address can be NAME_ADDR, ADDR_SPEC or 203600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * WILD_CARD 204600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 205600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param atype int to set 206600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 207600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 208600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setAddressType(int atype) { 209600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang addressType = atype; 210600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 211600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 212600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 213600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * get the display name 214600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 215600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return String 216600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 217600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 218600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public String getDisplayName() { 219600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return displayName; 220600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 221600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 222600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 223600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the displayName member 224600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 225600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param displayName String to set 226600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 227600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 228600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setDisplayName(String displayName) { 229600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.displayName = displayName; 230600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.addressType = NAME_ADDR; 231600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 232600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 233600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 234600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Set the address field 235600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 236600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param address SipUri to set 237600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 238600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 239600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setAddess(javax.sip.address.URI address) { 240600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.address = (GenericURI) address; 241600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 242600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 243600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 244600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * hashCode impelmentation 245600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 246600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 247600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public int hashCode() { 248600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return this.address.hashCode(); 249600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 250600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 251600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 252600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Compare two address specs for equality. 253600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 254600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param other Object to compare this this address 255600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 256600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return boolean 257600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 258600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 259600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public boolean equals(Object other) { 260600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 261600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (this==other) return true; 262600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 263600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (other instanceof Address) { 264600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang final Address o = (Address) other; 265600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 266600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Don't compare display name (?) 267600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return this.getURI().equals( o.getURI() ); 268600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 269600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return false; 270600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 271600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 272600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** return true if DisplayName exist. 273600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 274600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return boolean 275600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 276600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public boolean hasDisplayName() { 277600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return (displayName != null); 278600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 279600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 280600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** remove the displayName field 281600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 282600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void removeDisplayName() { 283600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang displayName = null; 284600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 285600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 286600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** Return true if the imbedded URI is a sip URI. 287600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 288600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return true if the imbedded URI is a SIP URI. 289600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 290600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 291600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public boolean isSIPAddress() { 292600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return address instanceof SipUri; 293600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 294600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 295600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** Returns the URI address of this Address. The type of URI can be 296600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * determined by the scheme. 297600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 298600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return address parmater of the Address object 299600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 300600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public URI getURI() { 301600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return this.address; 302600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 303600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 304600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** This determines if this address is a wildcard address. That is 305600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * <code>Address.getAddress.getUserInfo() == *;</code> 306600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 307600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return true if this name address is a wildcard, false otherwise. 308600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 309600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public boolean isWildcard() { 310600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return this.addressType == WILD_CARD; 311600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 312600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 313600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** Sets the URI address of this Address. The URI can be either a 314600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * TelURL or a SipURI. 315600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 316600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param address - the new URI address value of this NameAddress. 317600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 318600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setURI(URI address) { 319600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.address = (GenericURI) address; 320600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 321600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 322600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** Set the user name for the imbedded URI. 323600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 324600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *@param user -- user name to set for the imbedded URI. 325600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 326600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setUser(String user) { 327600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ((SipUri) this.address).setUser(user); 328600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 329600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 330600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** Mark this a wild card address type. 331600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Also set the SIP URI to a special wild card address. 332600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 333600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public void setWildCardFlag() { 334600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.addressType = WILD_CARD; 335600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.address = new SipUri(); 336600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ((SipUri)this.address).setUser("*"); 337600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 338600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 339600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public Object clone() { 340600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang AddressImpl retval = (AddressImpl) super.clone(); 341600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (this.address != null) 342600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang retval.address = (GenericURI) this.address.clone(); 343600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return retval; 344600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 345600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 346600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang} 347