use of org.jdiameter.api.AvpSet in project jain-slee.diameter by RestComm.
the class RxMessageFactoryImpl method addAvp.
protected void addAvp(DiameterAvp avp, AvpSet set) {
if (avp instanceof GroupedAvp) {
AvpSet avpSet = set.addGroupedAvp(avp.getCode(), avp.getVendorId(), avp.getMandatoryRule() != DiameterAvp.FLAG_RULE_MUSTNOT, avp.getProtectedRule() == DiameterAvp.FLAG_RULE_MUST);
DiameterAvp[] groupedAVPs = ((GroupedAvp) avp).getExtensionAvps();
for (DiameterAvp avpFromGroup : groupedAVPs) {
addAvp(avpFromGroup, avpSet);
}
} else if (avp != null) {
set.addAvp(avp.getCode(), avp.byteArrayValue(), avp.getVendorId(), avp.getMandatoryRule() != DiameterAvp.FLAG_RULE_MUSTNOT, avp.getProtectedRule() == DiameterAvp.FLAG_RULE_MUST);
}
}
use of org.jdiameter.api.AvpSet in project jain-slee.diameter by RestComm.
the class AvpFlagsTest method checkAvpFlags.
/**
* @param set
* the set to check
* @return an array of offending AVPs
*/
protected ArrayList<String> checkAvpFlags(AvpSet set) {
ArrayList<String> failedAvps = new ArrayList<String>();
for (Avp avp : set) {
// System.out.println(avp.getVendorId() + ":" + avp.getCode() + " V[" + avp.isVendorId() + "] M[" +
// avp.isMandatory() + "] P[" + avp.isEncrypted() + "]");
AvpRepresentation avpRep = validator.getAvp(avp.getCode(), avp.getVendorId());
// Mandatory must not be set if rule is MUST NOT or SHOULD NOT
if (avp.isMandatory() && (avpRep.getRuleMandatory().equals("mustnot") || avpRep.getRuleMandatory().equals("shouldnot"))) {
failedAvps.add("- Code[" + avp.getCode() + "], Vendor-Id[" + avp.getVendorId() + "], Flag[M / '" + avp.isMandatory() + "' vs '" + avpRep.getRuleMandatory() + "']");
}
// Protected must not be set if rule is MUST or MAY
if (avp.isEncrypted() && !(avpRep.getRuleProtected().equals("must") || avpRep.getRuleProtected().equals("may"))) {
failedAvps.add("- Code[" + avp.getCode() + "], Vendor-Id[" + avp.getVendorId() + "], Flag[P / '" + avp.isEncrypted() + "' vs '" + avpRep.getRuleProtected() + "']");
}
// Vendor must be set if rule is MUST or MAY
if (avp.isEncrypted() && !(avpRep.getRuleProtected().equals("must") || avpRep.getRuleProtected().equals("may"))) {
failedAvps.add("- Code[" + avp.getCode() + "], Vendor-Id[" + avp.getVendorId() + "], Flag[P / '" + avp.isEncrypted() + "' vs '" + avpRep.getRuleProtected() + "']");
}
AvpSet subAvps = null;
try {
subAvps = avp.getGrouped();
} catch (Exception e) {
}
if (subAvps != null) {
failedAvps.addAll(checkAvpFlags(subAvps));
}
}
return failedAvps;
}
use of org.jdiameter.api.AvpSet in project jain-slee.diameter by RestComm.
the class ExpectedAvp method testPresentAvps.
/* ammendonca: removal allowed is gone...
@Test
public void testOperationsAddWithValidatorOffAndRemovalAllowed() {
instance.configure(this.getClass().getClassLoader().getResourceAsStream(validatorOffFile));
instance.setEnabled(false);
// It has session id
AccountingRequestImpl request = (AccountingRequestImpl) baseFactory.createAccountingRequest(new DiameterAvpImpl[] { new DiameterAvpImpl(263, 0L, 0, 1,
"xxx".getBytes(), DiameterAvpType.UTF8_STRING) });
// <avp name="Session-Id" code="263" vendor="0" multiplicity="1" index="0"/>
AvpUtilities.setAvpAsUTF8String(request.getGenericData(), 263, request.getGenericData().getAvps(), "1346ferg5y");
// <avp name="Origin-Host" code="264" vendor="0" multiplicity="1" index="-1"/>
AvpUtilities.setAvpAsOctetString(request.getGenericData(), 264, request.getGenericData().getAvps(), clientURI);
// <avp name="Origin-Realm" code="296" vendor="0" multiplicity="1" index="-1"/>
AvpUtilities.setAvpAsOctetString(request.getGenericData(), 296, request.getGenericData().getAvps(), realmName);
AvpUtilities.setAvpAsOctetString(request.getGenericData(), 296, request.getGenericData().getAvps(), realmName);
// <avp name="Destination-Realm" code="283" vendor="0" multiplicity="1" index="-1"/>
// We don't add this one, make it fail
// <avp name="Destination-Host" code="293" vendor="0" multiplicity="0" index="-1" />
// AvpUtilities.setAvpAsOctetString(request.getGenericData(), 293, request.getGenericData().getAvps(), serverURI);
AvpUtilities.setAvpAsOctetString(request.getGenericData(), 293, request.getGenericData().getAvps(), serverHost);
// <avp name="Accounting-Record-Type" code="480" vendor="0" multiplicity="1" index="-1"/>
AvpUtilities.setAvpAsUnsigned32(request.getGenericData(), 480, request.getGenericData().getAvps(), 1);
String sessionId = AvpUtilities.getAvpAsUTF8String(263, request.getGenericData().getAvps());
Session localSession = null;
try {
localSession = stack.getSessionFactory().getNewSession(sessionId);
sendMessage(localSession, request);
// this should fail eve so, but just in case
fail("Should not send this message. Message MUST contain Destination-Realm AVP (283), and it is not present.");
}
catch (RouteException e) {
// We want to come here, since we lack Destination-Realm AVP (283).
}
catch (Exception e) {
e.printStackTrace();
fail("Message failed to be sent for wrong reason. Expected RouteException due to lack of Destination-Realm AVP (283), Received " + e);
}
// <avp name="Destination-Realm" code="283" vendor="0" multiplicity="1" index="-1"/>
AvpUtilities.setAvpAsOctetString(request.getGenericData(), 283, request.getGenericData().getAvps(), realmName);
// <avp name="Accounting-Record-Number" code="485" vendor="0" multiplicity="1" index="-1"/>
AvpUtilities.setAvpAsUnsigned32(request.getGenericData(), 485, request.getGenericData().getAvps(), 1);
// In here we send the message actually. It is OK!
try {
sendMessage(localSession, request);
}
catch (Exception e) {
fail("Failed to send message when it should succeed! Exception: " + e);
}
int expectedAcctApplicationIdAvps = request.hasAcctApplicationId() ? 1 : 0;
// Message should already come with Acct-Application-Id.. but still..
try {
// <avp name="Acct-Application-Id" code="259" vendor="0" multiplicity="0-1" index="-1"/>
AvpUtilities.setAvpAsUnsigned32(request.getGenericData(), 259, request.getGenericData().getAvps(), 1);
expectedAcctApplicationIdAvps++;
}
catch (AvpNotAllowedException e) {
if (e.getAvpCode() != 259 && e.getVendorId() != 0) {
fail("Message Validation failed with wrong AVP Code/Vendor-Id in Exception. Expected (259:0), Received (" + e.getAvpCode() + ":" + e.getVendorId()
+ ").");
}
else {
fail("Wrong AVP not allowed to be added, with Validator in OFF state. It's smart, but not what we want.");
}
}
// Again, in here we send the message actually. It is OK!
try {
sendMessage(localSession, request);
}
catch (Exception e) {
fail("Failed to send message when it should succeed! Exception: " + e);
}
// <!-- FORBBIDEN -->
// <avp name="Auth-Application-Id" code="258" vendor="0" multiplicity="0" index="-1"/>
try {
AvpUtilities.setAvpAsUnsigned32(request.getGenericData(), 258, request.getGenericData().getAvps(), 1);
// this should fail eve so, but just in case
}
catch (AvpNotAllowedException e) {
fail("Wrong AVP not allowed to be added, with Validator in OFF state. It's smart, but not what we want.");
}
catch (Exception e) {
fail("Failed to add AVP, when it should succeed, even being a not allowed AVP.");
}
// This is just in case
Map<ExpectedAvp, ExpectedAvp> expectedAvps = new HashMap<ExpectedAvp, ExpectedAvp>();
ExpectedAvp a = new ExpectedAvp();
a.code = 263;
a.count = 2;
expectedAvps.put(a, a);
a = new ExpectedAvp();
a.code = 264;
a.count = 2; // was 1 but request comes with one already...
expectedAvps.put(a, a);
a = new ExpectedAvp();
a.code = 296;
// cause its legal in this case.
a.count = 3; // was 2 but request comes with one already...
expectedAvps.put(a, a);
a = new ExpectedAvp();
a.code = 283;
a.count = 1;
expectedAvps.put(a, a);
a = new ExpectedAvp();
a.code = 480;
a.count = 1;
expectedAvps.put(a, a);
a = new ExpectedAvp();
a.code = 485;
a.count = 1;
expectedAvps.put(a, a);
a = new ExpectedAvp();
a.code = 259;
a.count = expectedAcctApplicationIdAvps;
expectedAvps.put(a, a);
// yes, its legal also. we dont check
a = new ExpectedAvp();
a.code = 258;
a.count = 1;
expectedAvps.put(a, a);
a = new ExpectedAvp();
a.code = 293;
a.count = 1;
expectedAvps.put(a, a);
testPresentAvps(request.getGenericData().getAvps(), expectedAvps);
}
*/
private void testPresentAvps(AvpSet set, Map<ExpectedAvp, ExpectedAvp> expected) {
for (ExpectedAvp e : expected.values()) {
AvpSet innerSet = set.removeAvp(e.code);
if (innerSet.size() != e.count) {
fail("Wrong count of avps, code: " + e.code + ", vendor:" + e.vendor + ". Expected: " + e.count + ", present: " + innerSet.size());
}
if (e.count > 0) {
Avp avp = innerSet.getAvpByIndex(0);
if (avp.getVendorId() != e.vendor) {
fail("Wrong vendor of avp, code: " + e.code + ". Expected: " + e.vendor + ", present: " + avp.getVendorId());
}
}
}
if (set.size() > 0) {
StringBuffer buf = new StringBuffer();
for (Avp a : set) {
buf.append("Code[").append(a.getCode()).append("] Vendor[").append("], ");
}
fail("Wrong count of avps, removed all expected, left overs: " + set.size() + " -- " + buf.toString());
}
}
use of org.jdiameter.api.AvpSet in project jain-slee.diameter by RestComm.
the class CreditControlMessageFactoryImpl method addAvp.
protected void addAvp(DiameterAvp avp, AvpSet set) {
// proper function?
if (avp instanceof GroupedAvp) {
AvpSet avpSet = set.addGroupedAvp(avp.getCode(), avp.getVendorId(), avp.getMandatoryRule() == 1, avp.getProtectedRule() == 1);
DiameterAvp[] groupedAVPs = ((GroupedAvp) avp).getExtensionAvps();
for (DiameterAvp avpFromGroup : groupedAVPs) {
addAvp(avpFromGroup, avpSet);
}
} else if (avp != null) {
set.addAvp(avp.getCode(), avp.byteArrayValue(), avp.getVendorId(), avp.getMandatoryRule() == 1, avp.getProtectedRule() == 1);
}
}
use of org.jdiameter.api.AvpSet in project jain-slee.diameter by RestComm.
the class AvpUtilities method setAvpAsGrouped.
/**
* Adds AVP to {@link AvpSet} as Grouped with the given code and given Vendor-Id plus defined mandatory and protected flags.
*
* @param parent the Message/Grouped AVP where AVP will be added to, for validation purposes. if null, no validation is performed.
* @param avpCode the code of the AVP
* @param vendorId the Vendor-Id of the AVP
* @param set the AvpSet to add AVP
* @param isMandatory the value for the mandatory bit
* @param isProtected the value for the protected bit
* @param childs the value of the AVP to add
*/
public static AvpSet setAvpAsGrouped(Object parent, int avpCode, long vendorId, AvpSet set, boolean isMandatory, boolean isProtected, DiameterAvp[] childs) {
performPreAddOperations(parent, avpCode, vendorId, set);
AvpSet grouped = set.addGroupedAvp(avpCode, vendorId, isMandatory, isProtected);
for (DiameterAvp child : childs) {
grouped.addAvp(child.getCode(), child.byteArrayValue(), child.getVendorId(), child.getMandatoryRule() != DiameterAvp.FLAG_RULE_MUSTNOT, child.getProtectedRule() == DiameterAvp.FLAG_RULE_MUST);
}
return grouped;
}
Aggregations