diff options
-rw-r--r-- | channels/chan_dahdi.c | 34 | ||||
-rw-r--r-- | configs/chan_dahdi.conf.sample | 20 |
2 files changed, 38 insertions, 16 deletions
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index 53df3f792..23386364e 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -634,6 +634,7 @@ static struct dahdi_pvt { unsigned int transfertobusy:1; /*!< allow flash-transfers to busy channels */ unsigned int mwimonitor_neon:1; /*!< monitor this FXO port for neon type MWI indication from other end */ unsigned int mwimonitor_fsk:1; /*!< monitor this FXO port for fsk MWI indication from other end */ + unsigned int mwimonitor_rpas:1; /*!< monitor this FXO port for rpas precursor to fsk MWI indication */ unsigned int mwimonitoractive:1; /*!< an MWI monitor thread is currently active */ unsigned int mwisendactive:1; /*!< a MWI message sending thread is active */ /* Channel state or unavilability flags */ @@ -7507,12 +7508,18 @@ static void *ss_thread(void *data) if (flags & CID_MSGWAITING) { ast_log(LOG_NOTICE, "MWI: Channel %d message waiting!\n", p->channel); notify_message(p->mailbox, 1); - ast_hangup(chan); + /* If generated using Ring Pulse Alert, then ring has been answered as a call and needs to be hungup */ + if (p->mwimonitor_rpas) { + ast_hangup(chan); + } return NULL; } else if (flags & CID_NOMSGWAITING) { ast_log(LOG_NOTICE, "MWI: Channel %d no message waiting!\n", p->channel); notify_message(p->mailbox, 0); - ast_hangup(chan); + /* If generated using Ring Pulse Alert, then ring has been answered as a call and needs to be hungup */ + if (p->mwimonitor_rpas) { + ast_hangup(chan); + } return NULL; } @@ -8849,6 +8856,7 @@ static struct dahdi_pvt *mkintf(int channel, const struct dahdi_chan_conf *conf, if (chan_sig & __DAHDI_SIG_FXS) { tmp->mwimonitor_fsk = conf->chan.mwimonitor_fsk; tmp->mwimonitor_neon = conf->chan.mwimonitor_neon; + tmp->mwimonitor_rpas = conf->chan.mwimonitor_rpas; } tmp->sig = chan_sig; tmp->outsigmod = conf->chan.outsigmod; @@ -14103,16 +14111,22 @@ static int process_dahdi(struct dahdi_chan_conf *confp, const char *cat, struct } else if (!strcasecmp(v->name, "transfertobusy")) { confp->chan.transfertobusy = ast_true(v->value); } else if (!strcasecmp(v->name, "mwimonitor")) { - if (!strcasecmp(v->value, "neon")) { + confp->chan.mwimonitor_neon = 0; + confp->chan.mwimonitor_fsk = 0; + confp->chan.mwimonitor_rpas = 0; + if (strcasestr(v->value, "fsk")) { + confp->chan.mwimonitor_fsk = 1; + } + if (strcasestr(v->value, "rpas")) { + confp->chan.mwimonitor_rpas = 1; + } + if (strcasestr(v->value, "neon")) { confp->chan.mwimonitor_neon = 1; - confp->chan.mwimonitor_fsk = 0; - } else { - confp->chan.mwimonitor_neon = 0; - if (!strcasecmp(v->value, "fsk")) - confp->chan.mwimonitor_fsk = 1; - else - confp->chan.mwimonitor_fsk = ast_true(v->value) ? 1 : 0; } + /* If set to true or yes, assume that simple fsk is desired */ + if (ast_true(v->value)) { + confp->chan.mwimonitor_fsk = 1; + } } else if (!strcasecmp(v->name, "cid_rxgain")) { if (sscanf(v->value, "%f", &confp->chan.cid_rxgain) != 1) { ast_log(LOG_WARNING, "Invalid cid_rxgain: %s at line %d.\n", v->value, v->lineno); diff --git a/configs/chan_dahdi.conf.sample b/configs/chan_dahdi.conf.sample index 85087c504..ce2a3054e 100644 --- a/configs/chan_dahdi.conf.sample +++ b/configs/chan_dahdi.conf.sample @@ -369,12 +369,20 @@ usecallerid=yes ;waitfordialtone=yes ; ; The following option enables receiving MWI on FXO lines. The default -; value is no. When this is enabled, and MWI notification indicates on or off, -; the script specified by the mwimonitornotify option is executed. Also, an -; internal Asterisk MWI event will be generated so that any other part of -; Asterisk that cares about MWI state changes will get notified, just as if -; the state change came from app_voicemail. The energy level that must be seen -; before starting the MWI detection process can be set with 'mwilevel'. +; value is no. +; The mwimonitor can take the following values +; no - No mwimonitoring occurs. (default) +; yes - The same as specifying fsk +; fsk - the FXO line is monitored for MWI FSK spills +; fsk,rpas - the FXO line is monitored for MWI FSK spills preceded +; by a ring pulse alert signal. +; neon - The fxo line is monitored for the presence of NEON pulses +; indicating MWI. +; When detected, an internal Asterisk MWI event is generated so that any other +; part of Asterisk that cares about MWI state changes is notified, just as if +; the state change came from app_voicemail. +; For FSK MWI Spills, the energy level that must be seen before starting the +; MWI detection process can be set with 'mwilevel'. ; ;mwimonitor=no ;mwilevel=512 |