Search in sources :

Example 11 with Avp

use of org.jdiameter.api.Avp in project jain-slee.diameter by RestComm.

the class AvpUtilities method getAvpsAsFloat64.

public static double[] getAvpsAsFloat64(int avpCode, long vendorId, AvpSet set) {
    try {
        AvpSet avpSet = set.getAvps(avpCode, vendorId);
        double[] values = new double[avpSet.size()];
        int i = 0;
        for (Avp avp : avpSet) {
            values[i++] = avp.getFloat32();
        }
        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 double[0];
    }
}
Also used : AvpDataException(org.jdiameter.api.AvpDataException) AvpSet(org.jdiameter.api.AvpSet) Avp(org.jdiameter.api.Avp)

Example 12 with Avp

use of org.jdiameter.api.Avp in project jain-slee.diameter by RestComm.

the class AvpUtilities method getAvpsAsFloat64.

public static double[] getAvpsAsFloat64(int avpCode, AvpSet set) {
    try {
        AvpSet avpSet = set.getAvps(avpCode);
        double[] values = new double[avpSet.size()];
        int i = 0;
        for (Avp avp : avpSet) {
            values[i++] = avp.getFloat32();
        }
        return values;
    } catch (AvpDataException e) {
        if (logger.isDebugEnabled()) {
            logger.debug("Failed to obtain AVP with code " + avpCode + " as type Float64.", e);
        }
        return new double[0];
    }
}
Also used : AvpDataException(org.jdiameter.api.AvpDataException) AvpSet(org.jdiameter.api.AvpSet) Avp(org.jdiameter.api.Avp)

Example 13 with Avp

use of org.jdiameter.api.Avp 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][];
    }
}
Also used : AvpSet(org.jdiameter.api.AvpSet) Avp(org.jdiameter.api.Avp) URISyntaxException(java.net.URISyntaxException) ParseException(org.jdiameter.client.api.parser.ParseException) InvocationTargetException(java.lang.reflect.InvocationTargetException) AvpDataException(org.jdiameter.api.AvpDataException)

Example 14 with Avp

use of org.jdiameter.api.Avp 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);
    }
}
Also used : Constructor(java.lang.reflect.Constructor) AvpSet(org.jdiameter.api.AvpSet) Avp(org.jdiameter.api.Avp) AvpRepresentation(org.mobicents.diameter.dictionary.AvpRepresentation) URISyntaxException(java.net.URISyntaxException) ParseException(org.jdiameter.client.api.parser.ParseException) InvocationTargetException(java.lang.reflect.InvocationTargetException) AvpDataException(org.jdiameter.api.AvpDataException)

Example 15 with Avp

use of org.jdiameter.api.Avp 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;
        }
    }
}
Also used : AvpSet(org.jdiameter.api.AvpSet) Avp(org.jdiameter.api.Avp)

Aggregations

Avp (org.jdiameter.api.Avp)37 AvpSet (org.jdiameter.api.AvpSet)30 AvpDataException (org.jdiameter.api.AvpDataException)28 InvocationTargetException (java.lang.reflect.InvocationTargetException)6 DiameterAvp (net.java.slee.resource.diameter.base.events.avp.DiameterAvp)6 URISyntaxException (java.net.URISyntaxException)5 ParseException (org.jdiameter.client.api.parser.ParseException)5 AvpRepresentation (org.mobicents.diameter.dictionary.AvpRepresentation)5 ArrayList (java.util.ArrayList)4 FailedAvp (net.java.slee.resource.diameter.base.events.avp.FailedAvp)4 ProxyInfoAvp (net.java.slee.resource.diameter.base.events.avp.ProxyInfoAvp)4 VendorSpecificApplicationIdAvp (net.java.slee.resource.diameter.base.events.avp.VendorSpecificApplicationIdAvp)4 Constructor (java.lang.reflect.Constructor)3 Date (java.util.Date)2 AvpRepresentation (org.jdiameter.api.validation.AvpRepresentation)2 NoSuchAvpException (net.java.slee.resource.diameter.base.NoSuchAvpException)1 DiameterHeader (net.java.slee.resource.diameter.base.events.DiameterHeader)1 AvpNotAllowedException (net.java.slee.resource.diameter.base.events.avp.AvpNotAllowedException)1 ExperimentalResultAvp (net.java.slee.resource.diameter.base.events.avp.ExperimentalResultAvp)1 GroupedAvp (net.java.slee.resource.diameter.base.events.avp.GroupedAvp)1