[asterisk-commits] dvossel: branch group/aoc r251396 - in /team/group/aoc: include/asterisk/ main/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Mar 8 16:09:40 CST 2010


Author: dvossel
Date: Mon Mar  8 16:09:36 2010
New Revision: 251396

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=251396
Log:
api to handle creation and iteration of unit entry list

Modified:
    team/group/aoc/include/asterisk/aoc.h
    team/group/aoc/main/aoc.c

Modified: team/group/aoc/include/asterisk/aoc.h
URL: http://svnview.digium.com/svn/asterisk/team/group/aoc/include/asterisk/aoc.h?view=diff&rev=251396&r1=251395&r2=251396
==============================================================================
--- team/group/aoc/include/asterisk/aoc.h (original)
+++ team/group/aoc/include/asterisk/aoc.h Mon Mar  8 16:09:36 2010
@@ -83,6 +83,11 @@
 	unsigned char data[0];
 };
 
+struct ast_aoc_unit_entry {
+	unsigned int amount;
+	unsigned int type; /* 1 - 16 */
+};
+
 /* Decoded AOC data */
 struct ast_aoc_decoded {
 	enum ast_aoc_type msg_type;
@@ -96,8 +101,8 @@
 	char currency_name[10+1];
 
 	/* unit information */
-	unsigned int unit_amount;
-	unsigned int unit_type; /* 1 - 16 */
+	int unit_count;
+	struct ast_aoc_unit_entry unit_list[32];
 
 	/* Billing Id */
 	enum ast_aoc_billing_id billing_id;
@@ -144,6 +149,8 @@
 
 /* \brief Sets the type of total for a AOC-D message
  *
+ * \note If this value is not set, the default for the message is TOTAL 
+ *
  * \param total type, TOTAL or SUBTOTAL
  *
  * \retval 0 success
@@ -174,7 +181,7 @@
  */
 int ast_aoc_add_unit_entry(struct ast_aoc_decoded *decoded,
 		const unsigned int amount,
-		unsigned int type);
+		const unsigned int type);
 
 /* \brief set the billing id for a AOC-D or AOC_E message
  *
@@ -215,6 +222,15 @@
 /* \brief get the currency amount for AOC-D and AOC-E messages*/
 unsigned int ast_aoc_get_currency_amount(struct ast_aoc_decoded *decoded);
 
+/* \brief get the number of unit entries for AOC-D and AOC-E messages*/
+unsigned int ast_aoc_get_unit_count(struct ast_aoc_decoded *decoded);
+
+/* \brief get a specific unit entry.
+ * \note This can be used in conjunction with ast_aoc_get_unit_count to create
+ *       a unit entry iterator.
+ */
+const struct ast_aoc_unit_entry *ast_aoc_get_unit_info(struct ast_aoc_decoded *decoded, unsigned int entry_number);
+
 /* \brief get the currency multiplier for AOC-D and AOC-E messages*/
 enum ast_aoc_currency_multiplier ast_aoc_get_currency_multiplier(struct ast_aoc_decoded *decoded);
 
@@ -229,6 +245,4 @@
 
 /* \brief get the charging association number for AOC-E messages*/
 const char *ast_aoc_get_association_number(struct ast_aoc_decoded *decoded);
-
-
 #endif

Modified: team/group/aoc/main/aoc.c
URL: http://svnview.digium.com/svn/asterisk/team/group/aoc/main/aoc.c?view=diff&rev=251396&r1=251395&r2=251396
==============================================================================
--- team/group/aoc/main/aoc.c (original)
+++ team/group/aoc/main/aoc.c Mon Mar  8 16:09:36 2010
@@ -34,14 +34,14 @@
 
 
 /* Encoded Payload Flags */
-#define AOC_ENCODED_TYPE_REQUEST (0 << 0)
-#define AOC_ENCODED_TYPE_D       (1 << 0)
-#define AOC_ENCODED_TYPE_E       (2 << 0)
+#define AOC_ENCODED_TYPE_REQUEST    (0 << 0)
+#define AOC_ENCODED_TYPE_D          (1 << 0)
+#define AOC_ENCODED_TYPE_E          (2 << 0)
 /* #define AOC_PAYLOAD_TYPE_S (3 << 0)  This is not yet supported, but reserve this for future use */
 
-#define AOC_ENCODED_REQUEST_S    (1 << 2)
-#define AOC_ENCODED_REQUEST_D    (1 << 3)
-#define AOC_ENCODED_REQUEST_E    (1 << 4)
+#define AOC_ENCODED_REQUEST_S       (1 << 2)
+#define AOC_ENCODED_REQUEST_D       (1 << 3)
+#define AOC_ENCODED_REQUEST_E       (1 << 4)
 
 #define AOC_ENCODED_CHARGE_NA       (0 << 5) | (0 << 6)
 #define AOC_ENCODED_CHARGE_FREE     (1 << 5) | (0 << 6)
@@ -89,8 +89,6 @@
 
 };
 
-
-
 struct ast_aoc_decoded *ast_aoc_create(const enum ast_aoc_type msg_type,
 		const enum ast_aoc_charge_type charge_type,
 		const enum ast_aoc_request requests)
@@ -194,19 +192,36 @@
 	return decoded->currency_name;
 }
 
-
-/* unit info */
 int ast_aoc_add_unit_entry(struct ast_aoc_decoded *decoded,
 		const unsigned int amount,
-		unsigned int type)
-{
-	decoded->unit_amount = amount;
-	decoded->unit_type = type;
-
-	return 0;
-}
-
-/* billing id */
+		const unsigned int type)
+{
+	if ((decoded->msg_type == AOC_REQUEST) ||
+		(decoded->unit_count >= ARRAY_LEN(decoded->unit_list))) {
+		return -1;
+	}
+
+	decoded->unit_list[decoded->unit_count].amount = amount;
+	decoded->unit_list[decoded->unit_count].type = type;
+	decoded->unit_count++;
+
+	return 0;
+}
+
+const struct ast_aoc_unit_entry *ast_aoc_get_unit_info(struct ast_aoc_decoded *decoded, unsigned int entry_number)
+{
+	if (entry_number >= decoded->unit_count) {
+		return NULL;
+	}
+
+	return (const struct ast_aoc_unit_entry *) &decoded->unit_list[entry_number];
+}
+
+unsigned int ast_aoc_get_unit_count(struct ast_aoc_decoded *decoded)
+{
+	return decoded->unit_count;
+}
+
 int ast_aoc_set_billing_id(struct ast_aoc_decoded *decoded, const enum ast_aoc_billing_id id)
 {
 	decoded->billing_id = id;
@@ -218,12 +233,12 @@
 	return decoded->billing_id;
 }
 
-/* charging association */
 int ast_aoc_set_association_id(struct ast_aoc_decoded *decoded, const int id)
 {
 	decoded->charging_association_id = id;
 	return 0;
 }
+
 int ast_aoc_get_association_id(struct ast_aoc_decoded *decoded)
 {
 	return decoded->charging_association_id;
@@ -238,8 +253,10 @@
 	ast_copy_string(decoded->charging_association_number,
 		num,
 		sizeof(decoded->charging_association_number));
-	return 0;
-}
+
+	return 0;
+}
+
 const char *ast_aoc_get_association_number(struct ast_aoc_decoded *decoded)
 {
 	return decoded->charging_association_number;




More information about the asterisk-commits mailing list