/* * Conditions Of Use * * This software was developed by employees of the National Institute of * Standards and Technology (NIST), an agency of the Federal Government. * Pursuant to title 15 Untied States Code Section 105, works of NIST * employees are not subject to copyright protection in the United States * and are considered to be in the public domain. As a result, a formal * license is not needed to use the software. * * This software is provided by NIST as a service and is expressly * provided "AS IS." NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED * OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT * AND DATA ACCURACY. NIST does not warrant or make any representations * regarding the use of the software or the results thereof, including but * not limited to the correctness, accuracy, reliability or usefulness of * the software. * * Permission to use this software is contingent upon your acceptance * of the terms of this agreement * * . * */ /******************************************************************************* * Product of NIST/ITL Advanced Networking Technologies Division (ANTD). * *******************************************************************************/ package gov.nist.javax.sip.address; import gov.nist.core.*; import javax.sip.address.*; /* * BUG Fix from Antonis Kadris. */ /** * Address structure. Imbeds a URI and adds a display name. * *@author M. Ranganathan
* * * *@version 1.2 $Revision: 1.11 $ $Date: 2009/07/17 18:57:21 $ * */ public final class AddressImpl extends NetObject implements javax.sip.address.Address { private static final long serialVersionUID = 429592779568617259L; /** Constant field. */ public static final int NAME_ADDR = 1; /** constant field. */ public static final int ADDRESS_SPEC = 2; /** Constant field. */ public static final int WILD_CARD = 3; protected int addressType; /** displayName field */ protected String displayName; /** address field */ protected GenericURI address; /** Match on the address only. * Dont care about the display name. */ public boolean match(Object other) { // TODO -- add the matcher; if (other == null) return true; if (!(other instanceof Address)) return false; else { AddressImpl that = (AddressImpl) other; if (that.getMatcher() != null) return that.getMatcher().match(this.encode()); else if (that.displayName != null && this.displayName == null) return false; else if (that.displayName == null) return address.match(that.address); else return displayName.equalsIgnoreCase(that.displayName) && address.match(that.address); } } /** Get the host port portion of the address spec. *@return host:port in a HostPort structure. */ public HostPort getHostPort() { if (!(address instanceof SipUri)) throw new RuntimeException("address is not a SipUri"); SipUri uri = (SipUri) address; return uri.getHostPort(); } /** Get the port from the imbedded URI. This assumes that a SIP URL * is encapsulated in this address object. * *@return the port from the address. * */ public int getPort() { if (!(address instanceof SipUri)) throw new RuntimeException("address is not a SipUri"); SipUri uri = (SipUri) address; return uri.getHostPort().getPort(); } /** Get the user@host:port for the address field. This assumes * that the encapsulated object is a SipUri. * * *@return string containing user@host:port. */ public String getUserAtHostPort() { if (address instanceof SipUri) { SipUri uri = (SipUri) address; return uri.getUserAtHostPort(); } else return address.toString(); } /** Get the host name from the address. * *@return the host name. */ public String getHost() { if (!(address instanceof SipUri)) throw new RuntimeException("address is not a SipUri"); SipUri uri = (SipUri) address; return uri.getHostPort().getHost().getHostname(); } /** Remove a parameter from the address. * *@param parameterName is the name of the parameter to remove. */ public void removeParameter(String parameterName) { if (!(address instanceof SipUri)) throw new RuntimeException("address is not a SipUri"); SipUri uri = (SipUri) address; uri.removeParameter(parameterName); } /** * Encode the address as a string and return it. * @return String canonical encoded version of this address. */ public String encode() { return encode(new StringBuffer()).toString(); } public StringBuffer encode(StringBuffer buffer) { if (this.addressType == WILD_CARD) { buffer.append('*'); } else { if (displayName != null) { buffer.append(DOUBLE_QUOTE) .append(displayName) .append(DOUBLE_QUOTE) .append(SP); } if (address != null) { if (addressType == NAME_ADDR || displayName != null) buffer.append(LESS_THAN); address.encode(buffer); if (addressType == NAME_ADDR || displayName != null) buffer.append(GREATER_THAN); } } return buffer; } public AddressImpl() { this.addressType = NAME_ADDR; } /** * Get the address type; * @return int */ public int getAddressType() { return addressType; } /** * Set the address type. The address can be NAME_ADDR, ADDR_SPEC or * WILD_CARD * * @param atype int to set * */ public void setAddressType(int atype) { addressType = atype; } /** * get the display name * * @return String * */ public String getDisplayName() { return displayName; } /** * Set the displayName member * * @param displayName String to set * */ public void setDisplayName(String displayName) { this.displayName = displayName; this.addressType = NAME_ADDR; } /** * Set the address field * * @param address SipUri to set * */ public void setAddess(javax.sip.address.URI address) { this.address = (GenericURI) address; } /** * hashCode impelmentation * */ public int hashCode() { return this.address.hashCode(); } /** * Compare two address specs for equality. * * @param other Object to compare this this address * * @return boolean * */ public boolean equals(Object other) { if (this==other) return true; if (other instanceof Address) { final Address o = (Address) other; // Don't compare display name (?) return this.getURI().equals( o.getURI() ); } return false; } /** return true if DisplayName exist. * * @return boolean */ public boolean hasDisplayName() { return (displayName != null); } /** remove the displayName field */ public void removeDisplayName() { displayName = null; } /** Return true if the imbedded URI is a sip URI. * * @return true if the imbedded URI is a SIP URI. * */ public boolean isSIPAddress() { return address instanceof SipUri; } /** Returns the URI address of this Address. The type of URI can be * determined by the scheme. * * @return address parmater of the Address object */ public URI getURI() { return this.address; } /** This determines if this address is a wildcard address. That is * Address.getAddress.getUserInfo() == *; * * @return true if this name address is a wildcard, false otherwise. */ public boolean isWildcard() { return this.addressType == WILD_CARD; } /** Sets the URI address of this Address. The URI can be either a * TelURL or a SipURI. * * @param address - the new URI address value of this NameAddress. */ public void setURI(URI address) { this.address = (GenericURI) address; } /** Set the user name for the imbedded URI. * *@param user -- user name to set for the imbedded URI. */ public void setUser(String user) { ((SipUri) this.address).setUser(user); } /** Mark this a wild card address type. * Also set the SIP URI to a special wild card address. */ public void setWildCardFlag() { this.addressType = WILD_CARD; this.address = new SipUri(); ((SipUri)this.address).setUser("*"); } public Object clone() { AddressImpl retval = (AddressImpl) super.clone(); if (this.address != null) retval.address = (GenericURI) this.address.clone(); return retval; } }