347 lines
9.3 KiB
Java
347 lines
9.3 KiB
Java
/*
|
|
* 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 <br/>
|
|
*
|
|
*
|
|
*
|
|
*@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
|
|
* <code>Address.getAddress.getUserInfo() == *;</code>
|
|
*
|
|
* @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;
|
|
}
|
|
|
|
}
|