aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2008-07-22 21:23:41 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2008-07-22 21:23:41 +0000
commitf2d02adf53a0cfb33c3f37ba067d4d72acb89a7e (patch)
tree28f2a338751d7840d50be7603fe885206f96b7b5 /channels
parent23a6631c9dbf21a021bef681a16ff0e627023ebe (diff)
Merged revisions 132721 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ................ r132721 | kpfleming | 2008-07-22 16:21:56 -0500 (Tue, 22 Jul 2008) | 14 lines Merged revisions 132712 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r132712 | kpfleming | 2008-07-22 16:17:23 -0500 (Tue, 22 Jul 2008) | 6 lines ensure that if any alarms exist at channel creation time, they are handled identically to if they occurred later, so that later alarm clearing will work properly and 'make sense' (closes issue #12160) Reported by: tzafrir ........ ................ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@132729 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_dahdi.c40
1 files changed, 17 insertions, 23 deletions
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c
index 03f8fd102..8b45740c0 100644
--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -4251,6 +4251,17 @@ static void dahdi_handle_dtmfup(struct ast_channel *ast, int index, struct ast_f
dahdi_confmute(p, 0);
}
+static void handle_alarms(struct dahdi_pvt *p, int alarms)
+{
+ const char *alarm_str = alarm2str(alarms);
+
+ ast_log(LOG_WARNING, "Detected alarm on channel %d: %s\n", p->channel, alarm_str);
+ manager_event(EVENT_FLAG_SYSTEM, "Alarm",
+ "Alarm: %s\r\n"
+ "Channel: %d\r\n",
+ alarm_str, p->channel);
+}
+
static struct ast_frame *dahdi_handle_event(struct ast_channel *ast)
{
int res, x;
@@ -4400,11 +4411,7 @@ static struct ast_frame *dahdi_handle_event(struct ast_channel *ast)
#endif
p->inalarm = 1;
res = get_alarms(p);
- ast_log(LOG_WARNING, "Detected alarm on channel %d: %s\n", p->channel, alarm2str(res));
- manager_event(EVENT_FLAG_SYSTEM, "Alarm",
- "Alarm: %s\r\n"
- "Channel: %d\r\n",
- alarm2str(res), p->channel);
+ handle_alarms(p, res);
#ifdef HAVE_PRI
if (!p->pri || !p->pri->pri || pri_get_timer(p->pri->pri, PRI_TIMER_T309) < 0) {
/* fall through intentionally */
@@ -7340,11 +7347,7 @@ static void *mwi_thread(void *data)
case DAHDI_EVENT_ALARM:
mtd->pvt->inalarm = 1;
res = get_alarms(mtd->pvt);
- ast_log(LOG_WARNING, "Detected alarm on channel %d: %s\n", mtd->pvt->channel, alarm2str(res));
- manager_event(EVENT_FLAG_SYSTEM, "Alarm",
- "Alarm: %s\r\n"
- "Channel: %d\r\n",
- alarm2str(res), mtd->pvt->channel);
+ handle_alarms(mtd->pvt, res);
break; /* What to do on channel alarm ???? -- fall thru intentionally?? */
default:
ast_log(LOG_NOTICE, "Got event %d (%s)... Passing along to ss_thread\n", res, event2str(res));
@@ -7558,11 +7561,7 @@ static int handle_init_event(struct dahdi_pvt *i, int event)
case DAHDI_EVENT_ALARM:
i->inalarm = 1;
res = get_alarms(i);
- ast_log(LOG_WARNING, "Detected alarm on channel %d: %s\n", i->channel, alarm2str(res));
- manager_event(EVENT_FLAG_SYSTEM, "Alarm",
- "Alarm: %s\r\n"
- "Channel: %d\r\n",
- alarm2str(res), i->channel);
+ handle_alarms(i, res);
/* fall thru intentionally */
case DAHDI_EVENT_ONHOOK:
if (i->radio)
@@ -8555,16 +8554,11 @@ static struct dahdi_pvt *mkintf(int channel, const struct dahdi_chan_conf *conf,
/* the dchannel is down so put the channel in alarm */
if (tmp->pri && !pri_is_up(tmp->pri))
tmp->inalarm = 1;
- else
- tmp->inalarm = 0;
#endif
- memset(&si, 0, sizeof(si));
- if (ioctl(tmp->subs[SUB_REAL].zfd,DAHDI_SPANSTAT,&si) == -1) {
- ast_log(LOG_ERROR, "Unable to get span status: %s\n", strerror(errno));
- destroy_dahdi_pvt(&tmp);
- return NULL;
+ if ((res = get_alarms(tmp)) != DAHDI_ALARM_NONE) {
+ tmp->inalarm = 1;
+ handle_alarms(tmp, res);
}
- if (si.alarms) tmp->inalarm = 1;
}
tmp->polarityonanswerdelay = conf->chan.polarityonanswerdelay;