use of org.jdiameter.api.AvpSet in project jain-slee.diameter by RestComm.
the class AvpUtilities method getAvpsAsGrouped.
public static byte[][] getAvpsAsGrouped(int avpCode, long vendorId, AvpSet set) {
try {
AvpSet avpSet = set.getAvps(avpCode, vendorId);
byte[][] values = new byte[avpSet.size()][];
int i = 0;
for (Avp avp : avpSet) {
values[i++] = avp.getRawData();
}
return values;
} catch (Exception e) {
if (logger.isDebugEnabled()) {
logger.debug("Failed to obtain AVP with code " + avpCode + " and Vendor-Id " + vendorId + " as type Grouped.", e);
}
return new byte[0][];
}
}
use of org.jdiameter.api.AvpSet in project jain-slee.diameter by RestComm.
the class AvpUtilities method getAvpsAsCustom.
public static Object[] getAvpsAsCustom(int avpCode, long vendorId, AvpSet set, Class clazz) {
try {
AvpSet avpSet = set.getAvps(avpCode, vendorId);
Object array = Array.newInstance(clazz, avpSet.size());
int i = 0;
AvpRepresentation rep = AvpDictionary.INSTANCE.getAvp(avpCode, vendorId);
Constructor c = clazz.getConstructor(int.class, long.class, int.class, int.class, byte[].class);
for (Avp avp : avpSet) {
Array.set(array, i++, c.newInstance(rep.getCode(), rep.getVendorId(), rep.getRuleMandatoryAsInt(), rep.getRuleProtectedAsInt(), avp.getRawData()));
}
return (Object[]) array;
} catch (Exception e) {
if (logger.isDebugEnabled()) {
logger.debug("Failed to obtain AVP with code " + avpCode + " and Vendor-Id " + vendorId + " as type Custom (Class '" + clazz.getName() + "').", e);
}
return (Object[]) Array.newInstance(clazz, 0);
}
}
use of org.jdiameter.api.AvpSet in project jain-slee.diameter by RestComm.
the class AvpUtilities method addAvpInternal.
private static void addAvpInternal(DiameterAvp avp, AvpSet set) {
int avpCode = avp.getCode();
if (avp.getType() == DiameterAvpType.GROUPED) {
AvpSet groupedAvp = null;
if (avpCode == Avp.VENDOR_SPECIFIC_APPLICATION_ID) {
// This AVP SHOULD be placed as close to the Diameter header as possible.
Avp firstAvp = set.size() > 0 ? set.getAvpByIndex(0) : null;
int index = (firstAvp != null && firstAvp.getCode() == Avp.SESSION_ID) ? 1 : 0;
groupedAvp = set.insertGroupedAvp(index, avpCode, avp.getVendorId(), avp.getMandatoryRule() != DiameterAvp.FLAG_RULE_MUSTNOT, avp.getProtectedRule() == DiameterAvp.FLAG_RULE_MUST);
} else {
groupedAvp = set.addGroupedAvp(avpCode, avp.getVendorId(), avp.getMandatoryRule() != DiameterAvp.FLAG_RULE_MUSTNOT, avp.getProtectedRule() == DiameterAvp.FLAG_RULE_MUST);
}
for (DiameterAvp subAvp : ((GroupedAvp) avp).getExtensionAvps()) {
addAvpInternal(subAvp, groupedAvp);
}
} else {
switch(avpCode) {
case Avp.SESSION_ID:
// (...) All messages pertaining to a specific session MUST include only one Session-Id AVP (...)
set.removeAvp(avpCode);
// (...) the Session-Id SHOULD appear immediately following the Diameter Header
set.insertAvp(0, avpCode, avp.byteArrayValue(), avp.getVendorId(), avp.getMandatoryRule() != DiameterAvp.FLAG_RULE_MUSTNOT, avp.getProtectedRule() == DiameterAvp.FLAG_RULE_MUST);
break;
case Avp.ORIGIN_HOST:
case Avp.ORIGIN_REALM:
case Avp.DESTINATION_HOST:
case Avp.DESTINATION_REALM:
case Avp.VENDOR_SPECIFIC_APPLICATION_ID:
// This AVP SHOULD be placed as close to the Diameter header as possible.
Avp firstAvp = set.size() > 0 ? set.getAvpByIndex(0) : null;
int index = (firstAvp != null && firstAvp.getCode() == Avp.SESSION_ID) ? 1 : 0;
set.insertAvp(index, avpCode, avp.byteArrayValue(), avp.getVendorId(), avp.getMandatoryRule() != DiameterAvp.FLAG_RULE_MUSTNOT, avp.getProtectedRule() == DiameterAvp.FLAG_RULE_MUST);
break;
default:
set.addAvp(avpCode, avp.byteArrayValue(), avp.getVendorId(), avp.getMandatoryRule() != DiameterAvp.FLAG_RULE_MUSTNOT, avp.getProtectedRule() == DiameterAvp.FLAG_RULE_MUST);
break;
}
}
}
use of org.jdiameter.api.AvpSet in project jain-slee.diameter by RestComm.
the class AvpUtilities method getAvpsAsTime.
public static Date[] getAvpsAsTime(int avpCode, long vendorId, AvpSet set) {
try {
AvpSet avpSet = set.getAvps(avpCode, vendorId);
Date[] values = new Date[avpSet.size()];
int i = 0;
for (Avp avp : avpSet) {
values[i++] = avp.getTime();
}
return values;
} catch (AvpDataException e) {
if (logger.isDebugEnabled()) {
logger.debug("Failed to obtain AVP with code " + avpCode + " and Vendor-Id " + vendorId + " as type Float64.", e);
}
return new Date[0];
}
}
use of org.jdiameter.api.AvpSet in project jain-slee.diameter by RestComm.
the class AvpUtilities method getAvpsAsDiameterIdentity.
public static DiameterIdentity[] getAvpsAsDiameterIdentity(int avpCode, AvpSet set) {
try {
AvpSet avpSet = set.getAvps(avpCode);
DiameterIdentity[] values = new DiameterIdentity[avpSet.size()];
int i = 0;
for (Avp avp : avpSet) {
values[i++] = new DiameterIdentity(avp.getDiameterIdentity());
}
return values;
} catch (AvpDataException e) {
if (logger.isDebugEnabled()) {
logger.debug("Failed to obtain AVP with code " + avpCode + " as type DiameterIdentity.", e);
}
return new DiameterIdentity[0];
}
}
Aggregations