[libpri-commits] dvossel: branch dvossel/aoc_send r1565 - /team/dvossel/aoc_send/
SVN commits to the libpri project
libpri-commits at lists.digium.com
Mon Mar 22 14:38:37 CDT 2010
Author: dvossel
Date: Mon Mar 22 14:38:33 2010
New Revision: 1565
URL: http://svnview.digium.com/svn/libpri?view=rev&rev=1565
Log:
support for AOC request on call setup
Modified:
team/dvossel/aoc_send/libpri.h
team/dvossel/aoc_send/pri_aoc.c
team/dvossel/aoc_send/pri_facility.c
team/dvossel/aoc_send/pri_internal.h
team/dvossel/aoc_send/q931.c
Modified: team/dvossel/aoc_send/libpri.h
URL: http://svnview.digium.com/svn/libpri/team/dvossel/aoc_send/libpri.h?view=diff&rev=1565&r1=1564&r2=1565
==============================================================================
--- team/dvossel/aoc_send/libpri.h (original)
+++ team/dvossel/aoc_send/libpri.h Mon Mar 22 14:38:33 2010
@@ -1483,6 +1483,9 @@
(and maybe some timers) */
void pri_enslave(struct pri *master, struct pri *slave);
+/* Request AOC on call setup */
+int pri_sr_set_aoc_charging_request(struct pri_sr *sr, int charging_request);
+
/* Send AOC-Request message */
int pri_aoc_charging_request_send(struct pri *ctrl, q931_call *c, const struct pri_subcmd_aoc_request *aoc_request);
Modified: team/dvossel/aoc_send/pri_aoc.c
URL: http://svnview.digium.com/svn/libpri/team/dvossel/aoc_send/pri_aoc.c?view=diff&rev=1565&r1=1564&r2=1565
==============================================================================
--- team/dvossel/aoc_send/pri_aoc.c (original)
+++ team/dvossel/aoc_send/pri_aoc.c Mon Mar 22 14:38:33 2010
@@ -1002,6 +1002,32 @@
return pos;
}
+/*!
+ * \internal
+ * \brief Send the ETSI AOC Request invoke message.
+ *
+ * \param ctrl D channel controller for diagnostic messages or global options.
+ * \param call Call leg from which to encode AOC.
+ * \param aoc_request, the aoc charging request payload data to encode.
+ *
+ * \retval 0 on success.
+ * \retval -1 on error.
+ */
+static int aoc_charging_request_encode(struct pri *ctrl, q931_call *call, const struct pri_subcmd_aoc_request *aoc_request)
+{
+ unsigned char buffer[255];
+ unsigned char *end = 0;
+
+ end = enc_etsi_aoc_request(ctrl, buffer, buffer + sizeof(buffer), aoc_request);
+
+ if (!end) {
+ return -1;
+ }
+
+ /* in the case of an AOC request message, we queue this on a SETUP message and
+ * do not have to send it ourselves in this function */
+ return pri_call_apdu_queue(call, Q931_FACILITY, buffer, end - buffer, NULL);
+}
/*!
* \internal
@@ -1089,39 +1115,6 @@
return 0;
}
-/*!
- * \internal
- * \brief Send the ETSI AOC Request invoke message.
- *
- * \param ctrl D channel controller for diagnostic messages or global options.
- * \param call Call leg from which to encode AOC.
- * \param aoc_request, the aoc charging request payload data to encode.
- *
- * \retval 0 on success.
- * \retval -1 on error.
- */
-static int aoc_charging_request_encode(struct pri *ctrl, q931_call *call, const struct pri_subcmd_aoc_request *aoc_request)
-{
- unsigned char buffer[255];
- unsigned char *end = 0;
-
- end = enc_etsi_aoc_request(ctrl, buffer, buffer + sizeof(buffer), aoc_request);
-
- if (!end) {
- return -1;
- }
-
- /* Remember that if we queue a facility IE for a facility message we
- * have to explicitly send the facility message ourselves */
- if (pri_call_apdu_queue(call, Q931_FACILITY, buffer, end - buffer, NULL)
- || q931_facility(call->pri, call)) {
- pri_message(ctrl, "Could not schedule aoc charging request facility message for call %d\n", call->cr);
- return -1;
- }
-
- return 0;
-}
-
int pri_aoc_charging_request_send(struct pri *ctrl, q931_call *call, const struct pri_subcmd_aoc_request *aoc_request)
{
if (!ctrl || !call)
@@ -1174,5 +1167,27 @@
return 0;
}
+
+int pri_sr_set_aoc_charging_request(struct pri_sr *sr, int charging_request)
+{
+
+ switch(charging_request) {
+ case PRI_AOC_REQUEST_S:
+ sr->aoc_charging_request_s = 1;
+ break;
+ case PRI_AOC_REQUEST_D:
+ sr->aoc_charging_request_d = 1;
+ break;
+ case PRI_AOC_REQUEST_E:
+ sr->aoc_charging_request_e = 1;
+ break;
+ default:
+ /* not a valid request type */
+ return -1;
+ }
+
+ return 0;
+
+}
/* ------------------------------------------------------------------- */
/* end pri_aoc.c */
Modified: team/dvossel/aoc_send/pri_facility.c
URL: http://svnview.digium.com/svn/libpri/team/dvossel/aoc_send/pri_facility.c?view=diff&rev=1565&r1=1564&r2=1565
==============================================================================
--- team/dvossel/aoc_send/pri_facility.c (original)
+++ team/dvossel/aoc_send/pri_facility.c Mon Mar 22 14:38:33 2010
@@ -3157,6 +3157,22 @@
switch (ctrl->switchtype) {
case PRI_SWITCH_EUROISDN_E1:
case PRI_SWITCH_EUROISDN_T1:
+ {
+ struct pri_subcmd_aoc_request aoc_request;
+ /* ETSI requires a separate facility for each request */
+ if (call->aoc_charging_request_s) {
+ aoc_request.charging_request = PRI_AOC_REQUEST_S;
+ pri_aoc_charging_request_send(ctrl, call, &aoc_request);
+ }
+ if (call->aoc_charging_request_d) {
+ aoc_request.charging_request = PRI_AOC_REQUEST_D;
+ pri_aoc_charging_request_send(ctrl, call, &aoc_request);
+ }
+ if (call->aoc_charging_request_e) {
+ aoc_request.charging_request = PRI_AOC_REQUEST_E;
+ pri_aoc_charging_request_send(ctrl, call, &aoc_request);
+ }
+ }
if (PTMP_MODE(ctrl)) {
/* PTMP mode */
break;
Modified: team/dvossel/aoc_send/pri_internal.h
URL: http://svnview.digium.com/svn/libpri/team/dvossel/aoc_send/pri_internal.h?view=diff&rev=1565&r1=1564&r2=1565
==============================================================================
--- team/dvossel/aoc_send/pri_internal.h (original)
+++ team/dvossel/aoc_send/pri_internal.h Mon Mar 22 14:38:33 2010
@@ -363,6 +363,9 @@
const char *keypad_digits;
int transferable;
int reversecharge;
+ int aoc_charging_request_s;
+ int aoc_charging_request_d;
+ int aoc_charging_request_e;
};
/* Internal switch types */
@@ -631,6 +634,12 @@
/*! TRUE if outgoing call was already redirected. */
unsigned char initially_redirected;
} cc;
+
+ /* AOC charge requesting on Setup */
+ int aoc_charging_request_s;
+ int aoc_charging_request_d;
+ int aoc_charging_request_e;
+
};
enum CC_STATES {
Modified: team/dvossel/aoc_send/q931.c
URL: http://svnview.digium.com/svn/libpri/team/dvossel/aoc_send/q931.c?view=diff&rev=1565&r1=1564&r2=1565
==============================================================================
--- team/dvossel/aoc_send/q931.c (original)
+++ team/dvossel/aoc_send/q931.c Mon Mar 22 14:38:33 2010
@@ -5009,6 +5009,10 @@
c->reversecharge = req->reversecharge;
+ c->aoc_charging_request_s = req->aoc_charging_request_s;
+ c->aoc_charging_request_d = req->aoc_charging_request_d;
+ c->aoc_charging_request_e = req->aoc_charging_request_e;
+
pri_call_add_standard_apdus(ctrl, c);
/* Save the initial cc-parties. */
More information about the libpri-commits
mailing list