diff --git a/.gitignore b/.gitignore
index cdfed9175..c5a2c135e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,6 +17,7 @@
# Maven #
#########
target
+\$\{env.JBOSS_HOME\}
# OS generated files #
######################
diff --git a/core/jdiameter/api/src/main/java/org/jdiameter/api/AvpSet.java b/core/jdiameter/api/src/main/java/org/jdiameter/api/AvpSet.java
index a2af490a8..44b5a3570 100644
--- a/core/jdiameter/api/src/main/java/org/jdiameter/api/AvpSet.java
+++ b/core/jdiameter/api/src/main/java/org/jdiameter/api/AvpSet.java
@@ -53,6 +53,8 @@
* Serializable interface allows use this class in SLEE Event objects
*
* @author erick.svenson@yahoo.com
+ * @author Grzegorz Figiel [ProIDS]
+ *
* @version 1.5.1 Final
*/
public interface AvpSet extends Iterable, Serializable, Wrapper {
@@ -94,6 +96,21 @@ public interface AvpSet extends Iterable, Serializable, Wrapper {
*/
AvpSet getAvps(int avpCode, long vendorId);
+ /**
+ * Get position of the first instance of the AVP
+ * @param avpCode code of the Avp
+ * @return index (position) of the first occurrence of the Avp. -1 in case Avp is not found
+ */
+ int getAvpIndex(int avpCode);
+
+ /**
+ * Get position of the first instance of the AVP
+ * @param avpCode code of the Avp
+ * @param vendorId vendorId of the Avp
+ * @return index (position) of the first occurrence of the Avp. -1 in case Avp is not found
+ */
+ int getAvpIndex(int avpCode, long vendorId);
+
/**
* Remove AVPs with avpCode
* @param avpCode code of Avp
diff --git a/core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/parser/AvpSetImpl.java b/core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/parser/AvpSetImpl.java
index 800fe3f5c..767e71b7c 100644
--- a/core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/parser/AvpSetImpl.java
+++ b/core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/parser/AvpSetImpl.java
@@ -68,6 +68,7 @@
* @author erick.svenson@yahoo.com
* @author Alexandre Mendonca
* @author Bartosz Baranowski
+ * @author Grzegorz Figiel [ProIDS]
*/
class AvpSetImpl implements AvpSet {
@@ -132,6 +133,26 @@ public AvpSet getAvps(int avpCode, long vendorId) {
return result;
}
+ @Override
+ public int getAvpIndex(int avpCode) {
+ for (Avp avp : this.avps) {
+ if (avp.getCode() == avpCode) {
+ return this.avps.indexOf(avp);
+ }
+ }
+ return -1;
+ }
+
+ @Override
+ public int getAvpIndex(int avpCode, long vendorId) {
+ for (Avp avp : this.avps) {
+ if (avp.getCode() == avpCode && avp.getVendorId() == vendorId) {
+ return this.avps.indexOf(avp);
+ }
+ }
+ return -1;
+ }
+
@Override
public AvpSet removeAvp(int avpCode) {
return removeAvp(avpCode, 0);
@@ -219,7 +240,7 @@ public Avp insertAvp(int index, int avpCode, long value, boolean mFlag, boolean
public Avp insertAvp(int index, int avpCode, long value, long vndId, boolean mFlag, boolean pFlag, boolean asUnsigned) {
int flags = ((vndId != 0 ? 0x80 : 0) | (mFlag ? 0x40 : 0) | (pFlag ? 0x20 : 0));
Avp res = new AvpImpl(avpCode, flags, vndId, asUnsigned ? parser.intU32ToBytes(value) : parser.int64ToBytes(value));
- this.avps.add(res);
+ this.avps.add(index, res);
return res;
}