package javax.megaco.association;
import java.io.Serializable;
import javax.megaco.ExceptionInfoCode;
/**
* This class represents the remote transport address. This transport address is
* used by the stack to send messages to peer. It can be used to store and
* retrieve the remote transport type and the corresponding address. Only one of
* the transport addresses can be set for the remote entity. If the transport is
* SCTP, then multiple remote IP addresses can be set. If transport is TCP or
* UDP, then only one IPv4/IPv6 address or domain name can be set. In this case
* optional port id can also be specified.
*/
public class RemoteAddr implements Serializable {
private String[] ipAddr = null;
private TransportType tpt_type = null;
private String addrString = null;
private String AAL5Addr = null;
private String mtp3Addr = null;
private String domainName = null;
private int portId;
/**
* Constructs a new remote address object identifier.
*/
public RemoteAddr() {
}
/**
* Constructs a new remote address with IPv4/ IPv6 addresses. The list of
* address may be specified in case the transport type is M_SCTP_TPT. In
* case of IPv4 or IPv6 address, the transport type must be set to M_UDP_TPT
* or M_TCP_TPT.
*
* @param ipAddr
* @param tpt_type
* @throws IllegalArgumentException
*/
public RemoteAddr(java.lang.String[] ipAddr, TransportType tpt_type) throws IllegalArgumentException {
if (ipAddr == null || tpt_type == null) {
IllegalArgumentException invalidArgumentException = new IllegalArgumentException("IP Address or TransportType cannot be null for LocalAddr");
//invalidArgumentException.setInfoCode(ExceptionInfoCode.INV_LOCAL_ADDR);
throw invalidArgumentException;
}
// TODO : check for IP valid form
this.ipAddr = ipAddr;
this.tpt_type = tpt_type;
}
/**
* Constructs a new remote entity with domain name. The possible values for
* transport type could be M_SCTP_TPT, M_UDP_TPT, M_TCP_TPT, M_MTP3B_TPT,
* and M_ATM_TPT.
*
* @param addrString
* @param tpt_type
* @throws IllegalArgumentException
*/
public RemoteAddr(java.lang.String addrString, TransportType tpt_type) throws IllegalArgumentException {
if (addrString == null || tpt_type == null) {
IllegalArgumentException invalidArgumentException = new IllegalArgumentException("AddressString or TransportType cannot be null for LocalAddr");
//invalidArgumentException.setInfoCode(ExceptionInfoCode.INV_LOCAL_ADDR);
throw invalidArgumentException;
}
// TODO : check for validity
this.addrString = addrString;
this.tpt_type = tpt_type;
}
/**
* Constructs a new remote entity with ATM AAL type 5 Address, if the
* signalling is over ATM layer. The transport type in this case is set to
* M_ATM_TPT.
*
* @param aal5Addr
* @throws IllegalArgumentException
*/
public RemoteAddr(java.lang.String aal5Addr) throws IllegalArgumentException {
if (addrString == null) {
IllegalArgumentException invalidArgumentException = new IllegalArgumentException("aal5 AddressString cannot be null for LocalAddr");
//invalidArgumentException.setInfoCode(ExceptionInfoCode.INV_LOCAL_ADDR);
throw invalidArgumentException;
}
// TODO : check for validity
tpt_type = TransportType.ATM_TPT;
this.AAL5Addr = aal5Addr;
}
/**
* Sets the domain name for the remote address. The transport type in this
* case can be set to M_SCTP_TPT, M_UDP_TPT, M_TCP_TPT, and M_ATM_TPT. The
* underlying transport in this case would resolve the domain name to actual
* transport address.
*
* @param domainName
* @param tpt_type
* @throws IllegalArgumentException
*/
public void setDomainName(java.lang.String domainName, TransportType tpt_type) throws IllegalArgumentException {
if (domainName == null || tpt_type == null) {
IllegalArgumentException invalidArgumentException = new IllegalArgumentException("domainName or TransportType cannot be null for LocalAddr");
//invalidArgumentException.setInfoCode(ExceptionInfoCode.INV_LOCAL_ADDR);
throw invalidArgumentException;
}
if (tpt_type.getTransportType() == TransportType.MTP3B_TPT.getTransportType()) {
IllegalArgumentException invalidArgumentException = new IllegalArgumentException("Transport type can not be set to MTP3B_TPT");
//invalidArgumentException.setInfoCode(ExceptionInfoCode.INV_LOCAL_ADDR);
throw invalidArgumentException;
}
// TODO: Set the domainName as per tpt_type
this.domainName = domainName;
this.tpt_type = tpt_type;
}
/**
* Sets the IPv4/ IPv6 addresses for the remote address. In case the
* transport type is M_SCTP_TPT, the user can specify multiples of IP
* addresses. The other valid values for transport type are M_UDP_TPT and
* M_TCP_TPT.
*
* @param ipAddr
* @param tpt_type
* @throws IllegalArgumentException
*/
public void setIpAddr(java.lang.String[] ipAddr, TransportType tpt_type) throws IllegalArgumentException {
if (domainName == null || tpt_type == null) {
IllegalArgumentException invalidArgumentException = new IllegalArgumentException("ipAddr or TransportType cannot be null for LocalAddr");
//invalidArgumentException.setInfoCode(ExceptionInfoCode.INV_LOCAL_ADDR);
throw invalidArgumentException;
}
// TODO: Check for validity
this.ipAddr = ipAddr;
this.tpt_type = tpt_type;
}
/**
* Sets the remote port identity.
*
* @param portId
* @throws IllegalArgumentException
*/
public void setPortId(int portId) throws IllegalArgumentException {
if (portId < 1) {
IllegalArgumentException invalidArgumentException = new IllegalArgumentException("portId cannot be less than 1 for LocalAddr");
//invalidArgumentException.setInfoCode(ExceptionInfoCode.INV_LOCAL_ADDR);
throw invalidArgumentException;
}
this.portId = portId;
}
/**
* Sets the MTP-3 Address for the remote address. This is used if the
* underlying link is over SS7.
*
* @param mtpAddr
* @throws IllegalArgumentException
*/
public void setMtp3Addr(java.lang.String mtpAddr) throws IllegalArgumentException {
if (mtpAddr == null) {
IllegalArgumentException invalidArgumentException = new IllegalArgumentException("mtpAddr cannot be null for LocalAddr");
//invalidArgumentException.setInfoCode(ExceptionInfoCode.INV_LOCAL_ADDR);
throw invalidArgumentException;
}
this.tpt_type = TransportType.MTP3B_TPT;
this.addrString = mtpAddr;
}
/**
* Sets the AAL of type 5 address for the remote address when the remote
* transport is over ATM cells.
*
* @param aal5Addr
* @throws IllegalArgumentException
*/
public void setAAL5Addr(java.lang.String aal5Addr) throws IllegalArgumentException {
if (aal5Addr == null) {
IllegalArgumentException invalidArgumentException = new IllegalArgumentException("aal5Addr cannot be null for RemoteAddrd");
//invalidArgumentException.setInfoCode(ExceptionInfoCode.INV_LOCAL_ADDR);
throw invalidArgumentException;
}
// ??
this.tpt_type = TransportType.ATM_TPT;
this.AAL5Addr = aal5Addr;
}
public String[] getIpAddr() {
return ipAddr;
}
public int getTransportType() {
return tpt_type.getTransportType();
}
public String getAddrString() {
return addrString;
}
public String getAAL5Addr() {
return AAL5Addr;
}
public String getDomainName() {
return domainName;
}
public int getPortId() {
return portId;
}
public boolean isPortIdPresent() {
// ??
return this.portId > 0;
}
public String getMtp3Addr() {
return mtp3Addr;
}
}