diff --git a/channels/chan_brcm.c b/channels/chan_brcm.c index 9e9ae5a4f831efa0fc518dee33f46d7fcf3b3ac4..a5c3970197c0532b3890a59a02d9a6c0dd0fbca2 100644 --- a/channels/chan_brcm.c +++ b/channels/chan_brcm.c @@ -791,7 +791,12 @@ static int brcm_call(struct ast_channel *chan, const char *dest, int timeout) p = sub->parent; sub_peer = brcm_subchannel_get_peer(sub); - if (brcm_in_call(p) && // a call is established + if (line_config[p->line_id].do_not_disturb) { + ast_debug(1, "Do not disturbed\n"); + ast_channel_hangupcause_set(chan, AST_CAUSE_CALL_REJECTED); + ast_queue_control(chan, AST_CAUSE_CALL_REJECTED); + } + else if (brcm_in_call(p) && // a call is established line_config[p->line_id].callwaiting && // call waiting active !sub_peer->cw_rejected) { // a previous call has not been rejected using R0 ast_debug(1, "Call waiting\n"); @@ -2673,6 +2678,7 @@ static void brcm_show_pvts(struct ast_cli_args *a) ast_cli(a->fd, "Ast JitterBuf impl : %s\n", global_jbconf.impl); ast_cli(a->fd, "Ast JitterBuf max : %ld\n", global_jbconf.max_size); ast_cli(a->fd, "Call waiting : %s\n", s->callwaiting ? "on" : "off"); + ast_cli(a->fd, "Do not disturb : %s\n", s->do_not_disturb ? "on" : "off"); ast_cli(a->fd, "CLIR : %s\n", s->clir ? "on" : "off"); ast_cli(a->fd, "Dialtone : "); @@ -3021,6 +3027,7 @@ static line_settings line_settings_create(void) .hangup_xfer = 0, .dialtone_timeoutmsec = 20000, .callwaiting = 1, + .do_not_disturb = 0, .clir = 0, }; return line_conf; @@ -3064,6 +3071,9 @@ static void line_settings_load(line_settings *line_config, struct ast_variable * else if (!strcasecmp(v->name, "callwaiting")) { line_config->callwaiting = ast_true(v->value)?1:0; } + else if (!strcasecmp(v->name, "do_not_disturb")) { + line_config->do_not_disturb = ast_true(v->value)?1:0; + } else if (!strcasecmp(v->name, "clir")) { line_config->clir = ast_true(v->value)?1:0; } diff --git a/channels/chan_brcm.h b/channels/chan_brcm.h index 1b77b097549649c69b94c550ce4910eca129deff..695cd4c7bd3e0c955c5eab6cb039a2d31ccc5940 100644 --- a/channels/chan_brcm.h +++ b/channels/chan_brcm.h @@ -206,6 +206,7 @@ typedef struct { int hangup_xfer; int dialtone_timeoutmsec; int callwaiting; + int do_not_disturb; int clir; } line_settings;