diff options
-rw-r--r-- | channels/chan_dahdi.c | 32 | ||||
-rw-r--r-- | channels/sig_analog.c | 19 | ||||
-rw-r--r-- | channels/sig_analog.h | 4 |
3 files changed, 43 insertions, 12 deletions
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index 8b0d7697f..ade108dbe 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -784,7 +784,7 @@ struct dahdi_pvt { unsigned int dialing:1; /*! \brief TRUE if the transfer capability of the call is digital. */ unsigned int digital:1; - /*! \brief TRUE if Do-Not-Disturb is enabled. */ + /*! \brief TRUE if Do-Not-Disturb is enabled, present only for non sig_analog */ unsigned int dnd:1; /*! \brief XXX BOOLEAN Purpose??? */ unsigned int echobreak:1; @@ -8399,24 +8399,34 @@ static int dahdi_wink(struct dahdi_pvt *p, int idx) /*! \brief enable or disable the chan_dahdi Do-Not-Disturb mode for a DAHDI channel * \param dahdichan "Physical" DAHDI channel (e.g: DAHDI/5) - * \param on 1 to enable, 0 to disable + * \param on 1 to enable, 0 to disable, -1 return dnd value * * chan_dahdi has a DND (Do Not Disturb) mode for each dahdichan (physical * DAHDI channel). Use this to enable or disable it. * * \bug the use of the word "channel" for those dahdichans is really confusing. */ -static void dahdi_dnd(struct dahdi_pvt *dahdichan, int on) +static int dahdi_dnd(struct dahdi_pvt *dahdichan, int flag) { + if (analog_lib_handles(dahdichan->sig, dahdichan->radio, dahdichan->oprmode)) { + return analog_dnd(dahdichan->sig_pvt, flag); + } + + if (flag == -1) { + return dahdichan->dnd; + } + /* Do not disturb */ - dahdichan->dnd = on; + dahdichan->dnd = flag; ast_verb(3, "%s DND on channel %d\n", - on? "Enabled" : "Disabled", + flag? "Enabled" : "Disabled", dahdichan->channel); manager_event(EVENT_FLAG_SYSTEM, "DNDState", "Channel: DAHDI/%d\r\n" "Status: %s\r\n", dahdichan->channel, - on? "enabled" : "disabled"); + flag? "enabled" : "disabled"); + + return 0; } static void *analog_ss_thread(void *data) @@ -13864,7 +13874,7 @@ static char *dahdi_show_channel(struct ast_cli_entry *e, int cmd, struct ast_cli ast_cli(a->fd, "Default law: %s\n", tmp->law == DAHDI_LAW_MULAW ? "ulaw" : tmp->law == DAHDI_LAW_ALAW ? "alaw" : "unknown"); ast_cli(a->fd, "Fax Handled: %s\n", tmp->faxhandled ? "yes" : "no"); ast_cli(a->fd, "Pulse phone: %s\n", tmp->pulsedial ? "yes" : "no"); - ast_cli(a->fd, "DND: %s\n", tmp->dnd ? "yes" : "no"); + ast_cli(a->fd, "DND: %s\n", dahdi_dnd(tmp, -1) ? "yes" : "no"); ast_cli(a->fd, "Echo Cancellation:\n"); if (tmp->echocancel.head.tap_length) { @@ -14370,7 +14380,7 @@ static int action_dahdidndon(struct mansession *s, const struct message *m) astman_send_error(s, m, "No such channel"); return 0; } - p->dnd = 1; + dahdi_dnd(p, 1); astman_send_ack(s, m, "DND Enabled"); return 0; } @@ -14389,7 +14399,7 @@ static int action_dahdidndoff(struct mansession *s, const struct message *m) astman_send_error(s, m, "No such channel"); return 0; } - p->dnd = 0; + dahdi_dnd(p, 0); astman_send_ack(s, m, "DND Disabled"); return 0; } @@ -14514,7 +14524,7 @@ static int action_dahdishowchannels(struct mansession *s, const struct message * sig2str(tmp->sig), tmp->sig, tmp->context, - tmp->dnd ? "Enabled" : "Disabled", + dahdi_dnd(tmp, -1) ? "Enabled" : "Disabled", alarm2str(alm), idText); } else { astman_append(s, @@ -14529,7 +14539,7 @@ static int action_dahdishowchannels(struct mansession *s, const struct message * "\r\n", tmp->channel, sig2str(tmp->sig), tmp->sig, tmp->context, - tmp->dnd ? "Enabled" : "Disabled", + dahdi_dnd(tmp, -1) ? "Enabled" : "Disabled", alarm2str(alm), idText); } } diff --git a/channels/sig_analog.c b/channels/sig_analog.c index e822fc339..e8127100a 100644 --- a/channels/sig_analog.c +++ b/channels/sig_analog.c @@ -3477,3 +3477,22 @@ int analog_fixup(struct ast_channel *oldchan, struct ast_channel *newchan, void analog_update_conf(new_pvt); return 0; } + +int analog_dnd(struct analog_pvt *p, int flag) +{ + if (flag == -1) { + return p->dnd; + } + + p->dnd = flag; + + ast_verb(3, "%s DND on channel %d\n", + flag? "Enabled" : "Disabled", + p->channel); + manager_event(EVENT_FLAG_SYSTEM, "DNDState", + "Channel: DAHDI/%d\r\n" + "Status: %s\r\n", p->channel, + flag? "enabled" : "disabled"); + + return 0; +} diff --git a/channels/sig_analog.h b/channels/sig_analog.h index 1b9a14de1..522012b26 100644 --- a/channels/sig_analog.h +++ b/channels/sig_analog.h @@ -274,7 +274,7 @@ struct analog_pvt { unsigned int callwaiting:1; unsigned int dialednone:1; unsigned int dialing:1; /*!< TRUE if in the process of dialing digits or sending something */ - unsigned int dnd:1; + unsigned int dnd:1; /*!< TRUE if Do-Not-Disturb is enabled. */ unsigned int echobreak:1; unsigned int hidecallerid:1; unsigned int outgoing:1; @@ -350,4 +350,6 @@ int analog_ss_thread_start(struct analog_pvt *p, struct ast_channel *ast); int analog_fixup(struct ast_channel *oldchan, struct ast_channel *newchan, void *newp); +int analog_dnd(struct analog_pvt *p, int flag); + #endif /* _SIG_ANSLOG_H */ |