diff options
Diffstat (limited to 'channels/chan_zap.c')
-rw-r--r-- | channels/chan_zap.c | 63 |
1 files changed, 47 insertions, 16 deletions
diff --git a/channels/chan_zap.c b/channels/chan_zap.c index 55a71d7f2..be49297d8 100644 --- a/channels/chan_zap.c +++ b/channels/chan_zap.c @@ -461,6 +461,7 @@ static struct zt_pvt { unsigned int ignoredtmf:1; unsigned int immediate:1; /*!< Answer before getting digits? */ unsigned int inalarm:1; + unsigned int unknown_alarm:1; unsigned int mate:1; /*!< flag to say its in MATE mode */ unsigned int outgoing:1; unsigned int overlapdial:1; @@ -3832,11 +3833,22 @@ static struct ast_frame *zt_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); + do { + const char *alarm_str = alarm2str(res); + + /* hack alert! Zaptel 1.4 now exposes FXO battery as an alarm, but asterisk 1.4 + * doesn't know what to do with it. Don't confuse users with log messages. */ + if (!strcasecmp(alarm_str, "No Alarm") || !strcasecmp(alarm_str, "Unknown Alarm")) { + p->unknown_alarm = 1; + break; + } + + 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); + } while (0); #ifdef HAVE_LIBPRI if (!p->pri || !p->pri->pri || pri_get_timer(p->pri->pri, PRI_TIMER_T309) < 0) { /* fall through intentionally */ @@ -4167,9 +4179,13 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast) if (p->bearer) p->bearer->inalarm = 0; #endif - ast_log(LOG_NOTICE, "Alarm cleared on channel %d\n", p->channel); - manager_event(EVENT_FLAG_SYSTEM, "AlarmClear", - "Channel: %d\r\n", p->channel); + if (!p->unknown_alarm) { + ast_log(LOG_NOTICE, "Alarm cleared on channel %d\n", p->channel); + manager_event(EVENT_FLAG_SYSTEM, "AlarmClear", + "Channel: %d\r\n", p->channel); + } else { + p->unknown_alarm = 0; + } break; case ZT_EVENT_WINKFLASH: if (p->inalarm) break; @@ -6675,18 +6691,33 @@ static int handle_init_event(struct zt_pvt *i, int event) break; case ZT_EVENT_NOALARM: i->inalarm = 0; - ast_log(LOG_NOTICE, "Alarm cleared on channel %d\n", i->channel); - manager_event(EVENT_FLAG_SYSTEM, "AlarmClear", - "Channel: %d\r\n", i->channel); + if (!i->unknown_alarm) { + ast_log(LOG_NOTICE, "Alarm cleared on channel %d\n", i->channel); + manager_event(EVENT_FLAG_SYSTEM, "AlarmClear", + "Channel: %d\r\n", i->channel); + } else { + i->unknown_alarm = 0; + } break; case ZT_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); + do { + const char *alarm_str = alarm2str(res); + + /* hack alert! Zaptel 1.4 now exposes FXO battery as an alarm, but asterisk 1.4 + * doesn't know what to do with it. Don't confuse users with log messages. */ + if (!strcasecmp(alarm_str, "No Alarm") || !strcasecmp(alarm_str, "Unknown Alarm")) { + i->unknown_alarm = 1; + break; + } + + ast_log(LOG_WARNING, "Detected alarm on channel %d: %s\n", i->channel, alarm_str); + manager_event(EVENT_FLAG_SYSTEM, "Alarm", + "Alarm: %s\r\n" + "Channel: %d\r\n", + alarm_str, i->channel); + } while (0); /* fall thru intentionally */ case ZT_EVENT_ONHOOK: if (i->radio) |