/*
* Mobicents, Communications Middleware
*
* Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors. All third-party contributions are
* distributed under license by Red Hat Middleware LLC.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
*
* Boston, MA 02110-1301 USA
*/
package org.mobicents.slee.resource.diameter.base.events;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import net.java.slee.resource.diameter.base.events.DiameterCommand;
import net.java.slee.resource.diameter.base.events.DiameterHeader;
import net.java.slee.resource.diameter.base.events.DiameterMessage;
import net.java.slee.resource.diameter.base.events.avp.Address;
import net.java.slee.resource.diameter.base.events.avp.AvpNotAllowedException;
import net.java.slee.resource.diameter.base.events.avp.AvpUtilities;
import net.java.slee.resource.diameter.base.events.avp.DiameterAvp;
import net.java.slee.resource.diameter.base.events.avp.DiameterAvpType;
import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity;
import net.java.slee.resource.diameter.base.events.avp.DiameterURI;
import net.java.slee.resource.diameter.base.events.avp.FailedAvp;
import net.java.slee.resource.diameter.base.events.avp.ProxyInfoAvp;
import net.java.slee.resource.diameter.base.events.avp.RedirectHostUsageType;
import net.java.slee.resource.diameter.base.events.avp.VendorSpecificApplicationIdAvp;
import org.apache.log4j.Logger;
import org.jdiameter.api.Avp;
import org.jdiameter.api.AvpDataException;
import org.jdiameter.api.AvpSet;
import org.jdiameter.api.Message;
import org.mobicents.diameter.dictionary.AvpDictionary;
import org.mobicents.diameter.dictionary.AvpRepresentation;
import org.mobicents.slee.resource.diameter.base.events.avp.DiameterAvpImpl;
import org.mobicents.slee.resource.diameter.base.events.avp.FailedAvpImpl;
import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl;
import org.mobicents.slee.resource.diameter.base.events.avp.ProxyInfoAvpImpl;
import org.mobicents.slee.resource.diameter.base.events.avp.VendorSpecificApplicationIdAvpImpl;
/**
* Super class for all diameter messages <br>
* <br>
* Super project: mobicents <br>
* 13:25:46 2008-05-08 <br>
*
* @author <a href="mailto:baranowb@gmail.com"> Bartosz Baranowski </a>
* @author <a href="mailto:brainslog@gmail.com"> Alexandre Mendonca </a>
* @author Erick Svenson
*/
public abstract class DiameterMessageImpl implements DiameterMessage {
private Logger log = Logger.getLogger(DiameterMessageImpl.class);
protected Message message = null;
/**
* Constructor taking a jDiameter {@link Message} as argument.
*
* @param message the jDiameter Message object to create the DiameterMessage from
*/
public DiameterMessageImpl(Message message)
{
this.message = message;
}
// Begin of DiameterMessage Implementation
/**
* This method returns long name of this message type - Like
* Device-Watchdog-Request
*
* @return
*/
public abstract String getLongName();
/**
* This method return short name of this message type - for instance DWR,DWA
* for DeviceWatchdog message
*
* @return
*/
public abstract String getShortName();
public DiameterHeader getHeader()
{
return new DiameterHeaderImpl(this.message);
}
public DiameterCommand getCommand()
{
return new DiameterCommandImpl(this.message.getCommandCode(), this.message.getApplicationId(), getShortName(), getLongName(), this.message.isRequest(), this.message.isProxiable());
}
public DiameterAvp[] getAvps()
{
DiameterAvp[] avps = new DiameterAvp[0];
try {
avps = getAvpsInternal(message.getAvps());
}
catch (Exception e) {
log.error("Failed to obtain/decode AVP/data.", e);
}
return avps;
}
public DiameterAvp[] getExtensionAvps() {
return getAvps();
}
public void setExtensionAvps(DiameterAvp... avps) throws AvpNotAllowedException {
for (DiameterAvp a : avps) {
this.addAvp(a);
}
}
public Object clone() {
// TODO
return null;
}
// AVP Getters and Setters
public boolean hasSessionId() {
return hasAvp(Avp.SESSION_ID);
}
public String getSessionId() {
return getAvpAsUTF8String(Avp.SESSION_ID);
}
public void setSessionId(String sessionId) {
addAvp(Avp.SESSION_ID, sessionId);
}
public boolean hasOriginHost() {
return hasAvp(Avp.ORIGIN_HOST);
}
public DiameterIdentity getOriginHost() {
return getAvpAsDiameterIdentity(Avp.ORIGIN_HOST);
}
public void setOriginHost(DiameterIdentity originHost) {
addAvp(Avp.ORIGIN_HOST, originHost);
}
public boolean hasOriginRealm() {
return hasAvp(Avp.ORIGIN_REALM);
}
public DiameterIdentity getOriginRealm() {
return getAvpAsDiameterIdentity(Avp.ORIGIN_REALM);
}
public void setOriginRealm(DiameterIdentity originRealm) {
addAvp(Avp.ORIGIN_REALM, originRealm);
}
public boolean hasDestinationHost() {
return hasAvp(Avp.DESTINATION_HOST);
}
public DiameterIdentity getDestinationHost() {
return getAvpAsDiameterIdentity(Avp.DESTINATION_HOST);
}
public void setDestinationHost(DiameterIdentity destinationHost) {
addAvp(Avp.DESTINATION_HOST, destinationHost);
}
public boolean hasDestinationRealm() {
return hasAvp(Avp.DESTINATION_REALM);
}
public DiameterIdentity getDestinationRealm() {
return getAvpAsDiameterIdentity(Avp.DESTINATION_REALM);
}
public void setDestinationRealm(DiameterIdentity destinationRealm) {
addAvp(Avp.DESTINATION_REALM, destinationRealm);
}
public boolean hasAcctApplicationId() {
return hasAvp(Avp.ACCT_APPLICATION_ID);
}
public long getAcctApplicationId() {
return getAvpAsUnsigned32(Avp.ACCT_APPLICATION_ID);
}
public void setAcctApplicationId(long acctApplicationId) {
addAvp(Avp.ACCT_APPLICATION_ID, acctApplicationId);
}
public boolean hasAuthApplicationId() {
return hasAvp(Avp.AUTH_APPLICATION_ID);
}
public long getAuthApplicationId() {
return getAvpAsUnsigned32(Avp.AUTH_APPLICATION_ID);
}
public void setAuthApplicationId(long authApplicationId) {
addAvp(Avp.AUTH_APPLICATION_ID, authApplicationId);
}
public boolean hasErrorMessage() {
return hasAvp(Avp.ERROR_MESSAGE);
}
public String getErrorMessage() {
return getAvpAsUTF8String(Avp.ERROR_MESSAGE);
}
public void setErrorMessage(String errorMessage) {
addAvp(Avp.ERROR_MESSAGE, errorMessage);
}
public boolean hasErrorReportingHost() {
return hasAvp(Avp.ERROR_REPORTING_HOST);
}
public DiameterIdentity getErrorReportingHost() {
return getAvpAsDiameterIdentity(Avp.ERROR_REPORTING_HOST);
}
public void setErrorReportingHost(DiameterIdentity errorReportingHost) {
addAvp(Avp.ERROR_REPORTING_HOST, errorReportingHost);
}
public boolean hasEventTimestamp() {
return hasAvp(Avp.EVENT_TIMESTAMP);
}
public Date getEventTimestamp() {
return getAvpAsTime(Avp.EVENT_TIMESTAMP);
}
public void setEventTimestamp(Date eventTimestamp) {
addAvp(Avp.EVENT_TIMESTAMP, eventTimestamp);
}
public boolean hasOriginStateId() {
return hasAvp(Avp.ORIGIN_STATE_ID);
}
public long getOriginStateId() {
return getAvpAsUnsigned32(Avp.ORIGIN_STATE_ID);
}
public void setOriginStateId(long originStateId) {
addAvp(Avp.ORIGIN_STATE_ID, originStateId);
}
public boolean hasResultCode() {
return hasAvp(Avp.RESULT_CODE);
}
public long getResultCode() {
return getAvpAsUnsigned32(Avp.RESULT_CODE);
}
public void setResultCode(long resultCode) {
addAvp(Avp.RESULT_CODE, resultCode);
}
public boolean hasFailedAvp() {
return hasAvp(Avp.FAILED_AVP);
}
public FailedAvp[] getFailedAvps() {
return (FailedAvp[]) getAvpsAsCustom(Avp.FAILED_AVP, FailedAvpImpl.class);
}
public FailedAvp getFailedAvp() {
return (FailedAvp) getAvpAsCustom(Avp.FAILED_AVP, FailedAvpImpl.class);
}
public void setFailedAvp(FailedAvp failedAvp) {
addAvp(Avp.FAILED_AVP, failedAvp.getExtensionAvps());
}
public void setFailedAvps(FailedAvp[] failedAvps) {
for (FailedAvp f : failedAvps) {
setFailedAvp(f);
}
}
public boolean hasUserName() {
return hasAvp(Avp.USER_NAME);
}
public String getUserName() {
return getAvpAsUTF8String(Avp.USER_NAME);
}
public void setUserName(String userName) {
addAvp(Avp.USER_NAME, userName);
}
public boolean hasProxyInfo() {
return hasAvp(Avp.PROXY_INFO);
}
public void setProxyInfo(ProxyInfoAvp proxyInfo)
{
addAvp(Avp.PROXY_INFO, proxyInfo.byteArrayValue());
}
public ProxyInfoAvp[] getProxyInfos() {
return (ProxyInfoAvp[]) getAvpsAsCustom(Avp.PROXY_INFO, ProxyInfoAvpImpl.class);
}
public void setProxyInfos(ProxyInfoAvp[] proxyInfos) {
for (ProxyInfoAvp p : proxyInfos) {
setProxyInfo(p);
}
}
public boolean hasRedirectHostUsage() {
return hasAvp(Avp.REDIRECT_HOST_USAGE);
}
public void setRedirectHostUsage(RedirectHostUsageType redirectHostUsage) {
addAvp(Avp.REDIRECT_HOST_USAGE, (long)redirectHostUsage.getValue());
}
public RedirectHostUsageType getRedirectHostUsage() {
return (RedirectHostUsageType) getAvpAsEnumerated(Avp.REDIRECT_HOST_USAGE, RedirectHostUsageType.class);
}
public boolean hasRedirectMaxCacheTime() {
return hasAvp(Avp.REDIRECT_MAX_CACHE_TIME);
}
public void setRedirectMaxCacheTime(long redirectMaxCacheTime) {
addAvp(Avp.REDIRECT_MAX_CACHE_TIME, redirectMaxCacheTime);
}
public long getRedirectMaxCacheTime() {
return getAvpAsUnsigned32(Avp.REDIRECT_MAX_CACHE_TIME);
}
public boolean hasRedirectHosts() {
return hasAvp(Avp.REDIRECT_HOST);
}
public DiameterURI[] getRedirectHosts() {
return getAvpsAsDiameterURI(Avp.REDIRECT_HOST);
}
public void setRedirectHost(DiameterURI redirectHost) {
addAvp(Avp.REDIRECT_HOST, redirectHost.toString());
}
public void setRedirectHosts(DiameterURI[] redirectHosts) {
for (DiameterURI uri : redirectHosts) {
setRedirectHost(uri);
}
}
public boolean hasRouteRecords() {
return hasAvp(Avp.ROUTE_RECORD);
}
public DiameterIdentity[] getRouteRecords() {
return getAvpsAsDiameterIdentity(Avp.ROUTE_RECORD);
}
public void setRouteRecord(DiameterIdentity routeRecord) {
addAvp(Avp.ROUTE_RECORD, routeRecord);
}
public void setRouteRecords(DiameterIdentity[] routeRecords) {
for (DiameterIdentity routeRecord : routeRecords) {
setRouteRecord(routeRecord);
}
}
public boolean hasVendorSpecificApplicationId() {
return hasAvp(Avp.VENDOR_SPECIFIC_APPLICATION_ID);
}
public VendorSpecificApplicationIdAvp getVendorSpecificApplicationId() {
return (VendorSpecificApplicationIdAvp) getAvpAsCustom( Avp.VENDOR_SPECIFIC_APPLICATION_ID, VendorSpecificApplicationIdAvpImpl.class );
}
public void setVendorSpecificApplicationId(VendorSpecificApplicationIdAvp vsaid)
{
addAvp(Avp.VENDOR_SPECIFIC_APPLICATION_ID, vsaid.byteArrayValue());
}
public Message getGenericData() {
return message;
}
@Override
public String toString() {
DiameterHeader header = this.getHeader();
String toString = "\r\n" + "+----------------------------------- HEADER ----------------------------------+\r\n" + "| Version................." + header.getVersion() + "\r\n"
+ "| Message-Length.........." + header.getMessageLength() + "\r\n" + "| Command-Flags..........." + "R[" + header.isRequest() + "] P[" + header.isProxiable() + "] " + "E["
+ header.isError() + "] T[" + header.isPotentiallyRetransmitted() + "]" + "\r\n" + "| Command-Code............" + this.getHeader().getCommandCode() + "\r\n"
+ "| Application-Id.........." + this.getHeader().getApplicationId() + "\r\n" + "| Hop-By-Hop Identifier..." + this.getHeader().getHopByHopId() + "\r\n" + "| End-To-End Identifier..."
+ this.getHeader().getEndToEndId() + "\r\n" + "+------------------------------------ AVPs -----------------------------------+\r\n";
for (Avp avp : this.getGenericData().getAvps()) {
toString += printAvp(avp, "");
}
toString += "+-----------------------------------------------------------------------------+\r\n";
return toString;
}
// ===== AVP Management =====
private DiameterAvp[] getAvpsInternal(AvpSet set) throws Exception {
List<DiameterAvp> acc = new ArrayList<DiameterAvp>();
for (Avp a : set) {
AvpRepresentation avpRep = AvpDictionary.INSTANCE.getAvp(a.getCode(), a.getVendorId());
if (avpRep == null) {
//log.error("Avp with code: " + a.getCode() + " VendorId: " + a.getVendorId() + " is not listed in dictionary, skipping!");
continue;
} else if (avpRep.getType().equals("Grouped")) {
GroupedAvpImpl gAVP = new GroupedAvpImpl(a.getCode(), a.getVendorId(), a.isMandatory() ? 1 : 0, a.isEncrypted() ? 1 : 0, a.getRaw());
gAVP.setExtensionAvps(getAvpsInternal(a.getGrouped()));
// This is a grouped AVP... let's make it like that.
acc.add(gAVP);
} else {
acc.add(new DiameterAvpImpl(a.getCode(), a.getVendorId(), a.isMandatory() ? 1 : 0, a.isEncrypted() ? 1 : 0, a.getRaw(), null));
}
}
return acc.toArray(new DiameterAvp[0]);
}
private String printAvp(Avp avp, String indent) {
Object avpValue = null;
String avpString = "";
boolean isGrouped = false;
try {
String avpType = AvpDictionary.INSTANCE.getAvp(avp.getCode(), avp.getVendorId()).getType();
if ("Integer32".equals(avpType) || "AppId".equals(avpType)) {
avpValue = avp.getInteger32();
} else if ("Unsigned32".equals(avpType) || "VendorId".equals(avpType)) {
avpValue = avp.getUnsigned32();
} else if ("Float64".equals(avpType)) {
avpValue = avp.getFloat64();
} else if ("Integer64".equals(avpType)) {
avpValue = avp.getInteger64();
} else if ("Time".equals(avpType)) {
avpValue = avp.getTime();
} else if ("Unsigned64".equals(avpType)) {
avpValue = avp.getUnsigned64();
} else if ("Grouped".equals(avpType)) {
avpValue = "<Grouped>";
isGrouped = true;
} else {
avpValue = avp.getOctetString().replaceAll("\r", "").replaceAll("\n", "");
}
} catch (Exception ignore) {
try {
avpValue = avp.getOctetString().replaceAll("\r", "").replaceAll("\n", "");
} catch (AvpDataException e) {
avpValue = avp.toString();
}
}
avpString += "| " + indent + "AVP: Code[" + avp.getCode() + "] VendorID[" + avp.getVendorId() + "] Value[" + avpValue + "] Flags[M=" + avp.isMandatory() + ";E=" + avp.isEncrypted() + ";V="
+ avp.isVendorId() + "]\r\n";
if (isGrouped) {
try {
for (Avp subAvp : avp.getGrouped()) {
avpString += printAvp(subAvp, indent + " ");
}
} catch (AvpDataException e) {
// Failed to ungroup... ignore then...
}
}
return avpString;
}
protected void reportAvpFetchError(String msg, long code) {
log.error("Failed to fetch avp, code: " + code + ". Message: " + msg);
}
// AVP Utilities Proxy Methods
protected Date getAvpAsTime(int code)
{
return AvpUtilities.getAvpAsTime(code, message.getAvps());
}
protected Date getAvpAsTime(int code, long vendorId)
{
return AvpUtilities.getAvpAsTime(code, vendorId, message.getAvps());
}
protected Date[] getAvpsAsTime(int code)
{
return AvpUtilities.getAvpsAsTime(code, message.getAvps());
}
protected Date[] getAvpsAsTime(int code, long vendorId)
{
return AvpUtilities.getAvpsAsTime(code, vendorId, message.getAvps());
}
protected void setAvpAsTime(int code, long vendorId, Date value, boolean isMandatory, boolean isProtected)
{
AvpUtilities.setAvpAsTime(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
}
protected float getAvpAsFloat32(int code)
{
return AvpUtilities.getAvpAsFloat32(code, message.getAvps());
}
protected float getAvpAsFloat32(int code, long vendorId)
{
return AvpUtilities.getAvpAsFloat32(code, vendorId, message.getAvps());
}
protected float[] getAvpsAsFloat32(int code)
{
return AvpUtilities.getAvpsAsFloat32(code, message.getAvps());
}
protected float[] getAvpsAsFloat32(int code, long vendorId)
{
return AvpUtilities.getAvpsAsFloat32(code, vendorId, message.getAvps());
}
protected void setAvpAsFloat32(int code, long vendorId, float value, boolean isMandatory, boolean isProtected)
{
AvpUtilities.setAvpAsFloat32(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
}
protected double getAvpAsFloat64(int code)
{
return AvpUtilities.getAvpAsFloat64(code, message.getAvps());
}
protected double getAvpAsFloat64(int code, long vendorId)
{
return AvpUtilities.getAvpAsFloat64(code, vendorId, message.getAvps());
}
protected double[] getAvpsAsFloat64(int code)
{
return AvpUtilities.getAvpsAsFloat64(code, message.getAvps());
}
protected double[] getAvpsAsFloat64(int code, long vendorId)
{
return AvpUtilities.getAvpsAsFloat64(code, vendorId, message.getAvps());
}
protected void setAvpAsFloat64(int code, long vendorId, float value, boolean isMandatory, boolean isProtected)
{
AvpUtilities.setAvpAsFloat64(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
}
protected byte[] getAvpAsGrouped(int code)
{
return AvpUtilities.getAvpAsGrouped(code, message.getAvps());
}
protected byte[] getAvpAsGrouped(int code, long vendorId)
{
return AvpUtilities.getAvpAsGrouped(code, vendorId, message.getAvps());
}
protected byte[][] getAvpsAsGrouped(int code)
{
return AvpUtilities.getAvpsAsGrouped(code, message.getAvps());
}
protected byte[][] getAvpsAsGrouped(int code, long vendorId)
{
return AvpUtilities.getAvpsAsGrouped(code, vendorId, message.getAvps());
}
protected AvpSet setAvpAsGrouped(int code, long vendorId, DiameterAvp[] childs, boolean isMandatory, boolean isProtected)
{
return AvpUtilities.setAvpAsGrouped(message, code, vendorId, message.getAvps(), isMandatory, isProtected, childs);
}
protected int getAvpAsInteger32(int code)
{
return AvpUtilities.getAvpAsInteger32(code, message.getAvps());
}
protected int getAvpAsInteger32(int code, long vendorId)
{
return AvpUtilities.getAvpAsInteger32(code, vendorId, message.getAvps());
}
protected int[] getAvpsAsInteger32(int code)
{
return AvpUtilities.getAvpsAsInteger32(code, message.getAvps());
}
protected int[] getAvpsAsInteger32(int code, long vendorId)
{
return AvpUtilities.getAvpsAsInteger32(code, vendorId, message.getAvps());
}
protected void setAvpAsInteger32(int code, long vendorId, int value, boolean isMandatory, boolean isProtected)
{
AvpUtilities.setAvpAsInteger32(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
}
protected long getAvpAsInteger64(int code)
{
return AvpUtilities.getAvpAsInteger64(code, message.getAvps());
}
protected long getAvpAsInteger64(int code, long vendorId)
{
return AvpUtilities.getAvpAsInteger64(code, vendorId, message.getAvps());
}
protected long[] getAvpsAsInteger64(int code)
{
return AvpUtilities.getAvpsAsInteger64(code, message.getAvps());
}
protected long[] getAvpsAsInteger64(int code, long vendorId)
{
return AvpUtilities.getAvpsAsInteger64(code, vendorId, message.getAvps());
}
protected void setAvpAsInteger64(int code, long vendorId, long value, boolean isMandatory, boolean isProtected)
{
AvpUtilities.setAvpAsInteger64(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
}
protected long getAvpAsUnsigned32(int code)
{
return AvpUtilities.getAvpAsUnsigned32(code, message.getAvps());
}
protected long getAvpAsUnsigned32(int code, long vendorId)
{
return AvpUtilities.getAvpAsUnsigned32(code, vendorId, message.getAvps());
}
protected long[] getAvpsAsUnsigned32(int code)
{
return AvpUtilities.getAvpsAsUnsigned32(code, message.getAvps());
}
protected long[] getAvpsAsUnsigned32(int code, long vendorId)
{
return AvpUtilities.getAvpsAsUnsigned32(code, vendorId, message.getAvps());
}
protected void setAvpAsUnsigned32(int code, long vendorId, long value, boolean isMandatory, boolean isProtected)
{
AvpUtilities.setAvpAsUnsigned32(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
}
protected long getAvpAsUnsigned64(int code)
{
return AvpUtilities.getAvpAsUnsigned64(code, message.getAvps());
}
protected long getAvpAsUnsigned64(int code, long vendorId)
{
return AvpUtilities.getAvpAsUnsigned64(code, vendorId, message.getAvps());
}
protected long[] getAvpsAsUnsigned64(int code)
{
return AvpUtilities.getAvpsAsUnsigned64(code, message.getAvps());
}
protected long[] getAvpsAsUnsigned64(int code, long vendorId)
{
return AvpUtilities.getAvpsAsUnsigned64(code, vendorId, message.getAvps());
}
protected void setAvpAsUnsigned64(int code, long vendorId, long value, boolean isMandatory, boolean isProtected)
{
AvpUtilities.setAvpAsUnsigned64(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
}
protected String getAvpAsUTF8String(int code)
{
return AvpUtilities.getAvpAsUTF8String(code, message.getAvps());
}
protected String getAvpAsUTF8String(int code, long vendorId)
{
return AvpUtilities.getAvpAsUTF8String(code, vendorId, message.getAvps());
}
protected String[] getAvpsAsUTF8String(int code)
{
return AvpUtilities.getAvpsAsUTF8String(code, message.getAvps());
}
protected String[] getAvpsAsUTF8String(int code, long vendorId)
{
return AvpUtilities.getAvpsAsUTF8String(code, vendorId, message.getAvps());
}
protected void setAvpAsUTF8String(int code, long vendorId, String value, boolean isMandatory, boolean isProtected)
{
AvpUtilities.setAvpAsUTF8String(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
}
protected String getAvpAsOctetString(int code)
{
return AvpUtilities.getAvpAsOctetString(code, message.getAvps());
}
protected String getAvpAsOctetString(int code, long vendorId)
{
return AvpUtilities.getAvpAsOctetString(code, vendorId, message.getAvps());
}
protected String[] getAvpsAsOctetString(int code)
{
return AvpUtilities.getAvpsAsOctetString(code, message.getAvps());
}
protected String[] getAvpsAsOctetString(int code, long vendorId)
{
return AvpUtilities.getAvpsAsOctetString(code, vendorId, message.getAvps());
}
protected void setAvpAsOctetString(int code, long vendorId, String value, boolean isMandatory, boolean isProtected)
{
AvpUtilities.setAvpAsOctetString(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
}
protected byte[] getAvpAsRaw(int code)
{
return AvpUtilities.getAvpAsRaw(code, message.getAvps());
}
protected byte[] getAvpAsRaw(int code, long vendorId)
{
return AvpUtilities.getAvpAsRaw(code, vendorId, message.getAvps());
}
protected byte[][] getAvpsAsRaw(int code)
{
return AvpUtilities.getAvpsAsRaw(code, message.getAvps());
}
protected byte[][] getAvpsAsRaw(int code, long vendorId)
{
return AvpUtilities.getAvpsAsRaw(code, vendorId, message.getAvps());
}
protected void setAvpAsRaw(int code, long vendorId, byte[] value, boolean isMandatory, boolean isProtected)
{
AvpUtilities.setAvpAsRaw(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
}
protected Object getAvpAsCustom(int code, Class clazz)
{
return AvpUtilities.getAvpAsCustom(code, message.getAvps(), clazz);
}
protected Object getAvpAsCustom(int code, long vendorId, Class clazz)
{
return AvpUtilities.getAvpAsCustom(code, vendorId, message.getAvps(), clazz);
}
protected Object[] getAvpsAsCustom(int code, Class clazz)
{
return AvpUtilities.getAvpsAsCustom(code, message.getAvps(), clazz);
}
protected Object[] getAvpsAsCustom(int code, long vendorId, Class clazz)
{
return AvpUtilities.getAvpsAsCustom(code, vendorId, message.getAvps(), clazz);
}
protected DiameterIdentity getAvpAsDiameterIdentity(int code)
{
return AvpUtilities.getAvpAsDiameterIdentity(code, message.getAvps());
}
protected DiameterIdentity getAvpAsDiameterIdentity(int code, long vendorId)
{
return AvpUtilities.getAvpAsDiameterIdentity(code, vendorId, message.getAvps());
}
protected DiameterIdentity[] getAvpsAsDiameterIdentity(int code)
{
return AvpUtilities.getAvpsAsDiameterIdentity(code, message.getAvps());
}
protected DiameterIdentity[] getAvpsAsDiameterIdentity(int code, long vendorId)
{
return AvpUtilities.getAvpsAsDiameterIdentity(code, vendorId, message.getAvps());
}
protected DiameterURI getAvpAsDiameterURI(int code)
{
return AvpUtilities.getAvpAsDiameterURI(code, message.getAvps());
}
protected DiameterURI getAvpAsDiameterURI(int code, long vendorId)
{
return AvpUtilities.getAvpAsDiameterURI(code, vendorId, message.getAvps());
}
protected DiameterURI[] getAvpsAsDiameterURI(int code)
{
return AvpUtilities.getAvpsAsDiameterURI(code, message.getAvps());
}
protected DiameterURI[] getAvpsAsDiameterURI(int code, long vendorId)
{
return AvpUtilities.getAvpsAsDiameterURI(code, vendorId, message.getAvps());
}
protected Address getAvpAsAddress(int code)
{
return AvpUtilities.getAvpAsAddress(code, message.getAvps());
}
protected Address getAvpAsAddress(int code, long vendorId)
{
return AvpUtilities.getAvpAsAddress(code, vendorId, message.getAvps());
}
protected Address[] getAvpsAsAddress(int code)
{
return AvpUtilities.getAvpsAsAddress(code, message.getAvps());
}
protected Address[] getAvpsAsAddress(int code, long vendorId)
{
return AvpUtilities.getAvpsAsAddress(code, vendorId, message.getAvps());
}
protected Object getAvpAsEnumerated(int code, Class clazz)
{
return AvpUtilities.getAvpAsEnumerated(code, message.getAvps(), clazz);
}
protected Object getAvpAsEnumerated(int code, long vendorId, Class clazz)
{
return AvpUtilities.getAvpAsEnumerated(code, vendorId, message.getAvps(), clazz);
}
protected Object[] getAvpsAsEnumerated(int code, Class clazz)
{
return AvpUtilities.getAvpsAsEnumerated(code, message.getAvps(), clazz);
}
protected Object[] getAvpsAsEnumerated(int code, long vendorId, Class clazz)
{
return AvpUtilities.getAvpsAsEnumerated(code, vendorId, message.getAvps(), clazz);
}
protected void addAvp(String avpName, Object avp)
{
AvpUtilities.addAvp(message, avpName, message.getAvps(), avp);
}
protected void addAvp(int avpCode, Object avp)
{
AvpUtilities.addAvp(message, avpCode, 0L, message.getAvps(), avp);
}
protected void addAvp(int avpCode, long vendorId, Object avp)
{
AvpUtilities.addAvp(message, avpCode, vendorId, message.getAvps(), avp);
}
protected boolean hasAvp(int code)
{
return AvpUtilities.hasAvp(code, 0L, message.getAvps());
}
protected boolean hasAvp(int code, long vendorId)
{
return AvpUtilities.hasAvp(code, vendorId, message.getAvps());
}
protected Object getAvp(int avpCode)
{
return getAvp(avpCode, 0L);
}
protected Object getAvp(String avpName)
{
AvpRepresentation avpRep = AvpDictionary.INSTANCE.getAvp(avpName);
if(avpRep != null) {
return getAvp(avpRep.getCode(), avpRep.getVendorId());
}
return null;
}
protected Object getAvp(int avpCode, long vendorId)
{
AvpRepresentation avpRep = AvpDictionary.INSTANCE.getAvp(avpCode, vendorId);
if(avpRep != null)
{
int avpType = AvpRepresentation.Type.valueOf(avpRep.getType()).ordinal();
switch (avpType)
{
case DiameterAvpType._ADDRESS:
case DiameterAvpType._DIAMETER_IDENTITY:
case DiameterAvpType._DIAMETER_URI:
case DiameterAvpType._IP_FILTER_RULE:
case DiameterAvpType._OCTET_STRING:
case DiameterAvpType._QOS_FILTER_RULE:
{
return getAvpAsOctetString(avpCode, vendorId);
}
case DiameterAvpType._ENUMERATED:
case DiameterAvpType._INTEGER_32:
{
return getAvpAsInteger32(avpCode, vendorId);
}
case DiameterAvpType._FLOAT_32:
{
return getAvpAsFloat32(avpCode, vendorId);
}
case DiameterAvpType._FLOAT_64:
{
return getAvpAsFloat64(avpCode, vendorId);
}
case DiameterAvpType._GROUPED:
{
return getAvpAsGrouped(avpCode, vendorId);
}
case DiameterAvpType._INTEGER_64:
{
return getAvpAsInteger64(avpCode, vendorId);
}
case DiameterAvpType._TIME:
{
return getAvpAsTime(avpCode, vendorId);
}
case DiameterAvpType._UNSIGNED_32:
{
return getAvpAsUnsigned32(avpCode, vendorId);
}
case DiameterAvpType._UNSIGNED_64:
{
return getAvpAsUnsigned64(avpCode, vendorId);
}
case DiameterAvpType._UTF8_STRING:
{
return getAvpAsUTF8String(avpCode, vendorId);
}
default:
{
return getAvpAsRaw(avpCode, vendorId);
}
}
}
return null;
}
public void addAvp(DiameterAvp avp) {
AvpUtilities.addAvp(avp, message.getAvps());
}
//some hack
private transient Object data = null;
public void setData(Object d) {
this.data = d;
}
public Object removeData() {
Object o = this.data;
this.data = null;
return o;
}
public Object getData() {
return this.data;
}
}