summaryrefslogtreecommitdiff
path: root/channels/sig_pri.c
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2010-05-04 21:10:58 +0000
committerRichard Mudgett <rmudgett@digium.com>2010-05-04 21:10:58 +0000
commit159f0d4b243ed0513e3ec2302a750bf15ecd47e0 (patch)
tree9a24c9ea35fc7210f8aa5df2524c56a634703ed5 /channels/sig_pri.c
parent9db934a869f2cc64c1a9ec827d35a93feafd9757 (diff)
The inalarm flag is not passed up from the sig_analog and sig_pri submodules.
The CLI "dahdi show channel" command was not correctly reporting the InAlarm status. The inalarm flag is now consistently passed between chan_dahdi and submodules. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@261007 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/sig_pri.c')
-rw-r--r--channels/sig_pri.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/channels/sig_pri.c b/channels/sig_pri.c
index 82410a301..887f4c40c 100644
--- a/channels/sig_pri.c
+++ b/channels/sig_pri.c
@@ -128,17 +128,27 @@ static void sig_pri_handle_dchan_exception(struct sig_pri_pri *pri, int index)
pri->calls->handle_dchan_exception(pri, index);
}
-static void sig_pri_set_dialing(struct sig_pri_chan *p, int flag)
+static void sig_pri_set_dialing(struct sig_pri_chan *p, int is_dialing)
{
- if (p->calls->set_dialing)
- p->calls->set_dialing(p->chan_pvt, flag);
+ if (p->calls->set_dialing) {
+ p->calls->set_dialing(p->chan_pvt, is_dialing);
+ }
}
-static void sig_pri_set_digital(struct sig_pri_chan *p, int flag)
+static void sig_pri_set_digital(struct sig_pri_chan *p, int is_digital)
{
- p->digital = flag;
- if (p->calls->set_digital)
- p->calls->set_digital(p->chan_pvt, flag);
+ p->digital = is_digital;
+ if (p->calls->set_digital) {
+ p->calls->set_digital(p->chan_pvt, is_digital);
+ }
+}
+
+static void sig_pri_set_alarm(struct sig_pri_chan *p, int in_alarm)
+{
+ p->inalarm = in_alarm;
+ if (p->calls->set_alarm) {
+ p->calls->set_alarm(p->chan_pvt, in_alarm);
+ }
}
static const char *sig_pri_get_orig_dialstring(struct sig_pri_chan *p)
@@ -2830,7 +2840,7 @@ static void *pri_dchannel(void *vpri)
/* Take the channels from inalarm condition */
for (i = 0; i < pri->numchans; i++) {
if (pri->pvts[i]) {
- pri->pvts[i]->inalarm = 0;
+ sig_pri_set_alarm(pri->pvts[i], 0);
}
}
sig_pri_span_devstate_changed(pri);
@@ -2861,7 +2871,7 @@ static void *pri_dchannel(void *vpri)
if (p->owner)
ast_softhangup_nolock(p->owner, AST_SOFTHANGUP_DEV);
}
- p->inalarm = 1;
+ sig_pri_set_alarm(p, 1);
}
}
sig_pri_span_devstate_changed(pri);
@@ -4854,8 +4864,8 @@ int sig_pri_start_pri(struct sig_pri_pri *pri)
void sig_pri_chan_alarm_notify(struct sig_pri_chan *p, int noalarm)
{
+ sig_pri_set_alarm(p, !noalarm);
if (!noalarm) {
- p->inalarm = 1;
if (!p->pri || !p->pri->pri || (pri_get_timer(p->pri->pri, PRI_TIMER_T309) < 0)) {
/* T309 is not enabled : hangup calls when alarm occurs */
if (p->call) {
@@ -4873,8 +4883,6 @@ void sig_pri_chan_alarm_notify(struct sig_pri_chan *p, int noalarm)
if (p->owner)
ast_softhangup_nolock(p->owner, AST_SOFTHANGUP_DEV);
}
- } else {
- p->inalarm = 0;
}
}