summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
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 dd7d9b49d..2b6a664ac 100644
--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -4232,6 +4232,17 @@ static void dahdi_handle_dtmfup(struct ast_channel *ast, int index, struct ast_f
}
}
+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;
@@ -4381,11 +4392,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 */
@@ -7344,11 +7351,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));
@@ -7724,11 +7727,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)
@@ -8714,16 +8713,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;