diff options
-rw-r--r-- | channels/chan_dahdi.c | 40 |
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; |