[svn-commits] rmudgett: branch rmudgett/call_waiting r1522 - /team/rmudgett/call_waiting/
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Tue Mar 9 14:00:21 CST 2010
Author: rmudgett
Date: Tue Mar 9 14:00:17 2010
New Revision: 1522
URL: http://svnview.digium.com/svn/libpri?view=rev&rev=1522
Log:
Send CONNECT ACKNOWLEDGE to the winning call.
Modified:
team/rmudgett/call_waiting/q931.c
Modified: team/rmudgett/call_waiting/q931.c
URL: http://svnview.digium.com/svn/libpri/team/rmudgett/call_waiting/q931.c?view=diff&rev=1522&r1=1521&r2=1522
==============================================================================
--- team/rmudgett/call_waiting/q931.c (original)
+++ team/rmudgett/call_waiting/q931.c Tue Mar 9 14:00:17 2010
@@ -5100,39 +5100,6 @@
return res;
}
-static int connect_ack_ies[] = { -1 };
-static int connect_ack_w_chan_id_ies[] = { Q931_CHANNEL_IDENT, -1 };
-static int gr303_connect_ack_ies[] = { Q931_CHANNEL_IDENT, -1 };
-
-int q931_connect_acknowledge(struct pri *ctrl, q931_call *call, int channel)
-{
- int *use_ies;
-
- UPDATE_OURCALLSTATE(ctrl, call, Q931_CALL_STATE_ACTIVE);
- call->peercallstate = Q931_CALL_STATE_ACTIVE;
- if (channel) {
- call->ds1no = (channel & 0xff00) >> 8;
- call->ds1explicit = (channel & 0x10000) >> 16;
- call->channelno = channel & 0xff;
- call->chanflags &= ~FLAG_PREFERRED;
- call->chanflags |= FLAG_EXCLUSIVE;
- }
- use_ies = NULL;
- if (ctrl->subchannel && !ctrl->bri) {
- if (ctrl->localtype == PRI_CPE) {
- use_ies = gr303_connect_ack_ies;
- }
- } else if (channel) {
- use_ies = connect_ack_w_chan_id_ies;
- } else {
- use_ies = connect_ack_ies;
- }
- if (use_ies) {
- return send_message(ctrl, call, Q931_CONNECT_ACKNOWLEDGE, use_ies);
- }
- return 0;
-}
-
/*!
* \internal
* \brief Find the winning subcall if it exists or current call if not outboundbroadcast.
@@ -5157,6 +5124,49 @@
}
}
return call;
+}
+
+static int connect_ack_ies[] = { -1 };
+static int connect_ack_w_chan_id_ies[] = { Q931_CHANNEL_IDENT, -1 };
+static int gr303_connect_ack_ies[] = { Q931_CHANNEL_IDENT, -1 };
+
+int q931_connect_acknowledge(struct pri *ctrl, q931_call *call, int channel)
+{
+ int *use_ies;
+ struct q931_call *winner;
+
+ winner = q931_find_winning_call(call);
+ if (!winner) {
+ return -1;
+ }
+
+ if (winner != call) {
+ UPDATE_OURCALLSTATE(ctrl, call, Q931_CALL_STATE_ACTIVE);
+ call->peercallstate = Q931_CALL_STATE_ACTIVE;
+ }
+ UPDATE_OURCALLSTATE(ctrl, winner, Q931_CALL_STATE_ACTIVE);
+ winner->peercallstate = Q931_CALL_STATE_ACTIVE;
+ if (channel) {
+ winner->ds1no = (channel & 0xff00) >> 8;
+ winner->ds1explicit = (channel & 0x10000) >> 16;
+ winner->channelno = channel & 0xff;
+ winner->chanflags &= ~FLAG_PREFERRED;
+ winner->chanflags |= FLAG_EXCLUSIVE;
+ }
+ use_ies = NULL;
+ if (ctrl->subchannel && !ctrl->bri) {
+ if (ctrl->localtype == PRI_CPE) {
+ use_ies = gr303_connect_ack_ies;
+ }
+ } else if (channel) {
+ use_ies = connect_ack_w_chan_id_ies;
+ } else {
+ use_ies = connect_ack_ies;
+ }
+ if (use_ies) {
+ return send_message(ctrl, winner, Q931_CONNECT_ACKNOWLEDGE, use_ies);
+ }
+ return 0;
}
/*!
More information about the svn-commits
mailing list