diff --git a/channels/chan_brcm.c b/channels/chan_brcm.c index e587042daafc071f277cc8e895c83277cd1c7d17..76a2830fc994c9b5930680ca3db4a12a3da58afc 100644 --- a/channels/chan_brcm.c +++ b/channels/chan_brcm.c @@ -782,7 +782,13 @@ static int brcm_call(struct ast_channel *chan, const char *dest, int timeout) p = sub->parent; sub_peer = brcm_subchannel_get_peer(sub); - if (line_config[p->line_id].do_not_disturb) { + if (!line_config[p->line_id].enabled) { + ast_debug(1, "tel_line %d disabled!\n", p->line_id); + ast_channel_hangupcause_set(chan, AST_CAUSE_CALL_REJECTED); + ast_queue_control(chan, AST_CONTROL_BUSY); + } + + else if (line_config[p->line_id].do_not_disturb) { ast_debug(1, "Do not disturbed\n"); ast_channel_hangupcause_set(chan, AST_CAUSE_USER_BUSY); ast_queue_control(chan, AST_CONTROL_BUSY); @@ -2277,6 +2283,12 @@ static void *brcm_process_event(struct endpt_event *ev) { return NULL; } + // ignore events when the telline is not enabled + if (!line_config[ev->line].enabled) { + ast_debug(3, "Line %d disabled, ignore event %s!\n", ev->line, ev->name); + return NULL; + } + /* Get locks in correct order */ //ast_mutex_lock(&p->lock); pvt_lock(p, "brcm monitor events"); @@ -3133,6 +3145,7 @@ static int unload_module(void) static line_settings line_settings_create(void) { line_settings line_conf = (line_settings){ + .enabled = 1, .language = "", .cid_num = "", .cid_name = "", @@ -3161,7 +3174,9 @@ static line_settings line_settings_create(void) static void line_settings_load(line_settings *line_config, struct ast_variable *v) { while(v) { - if (!strcasecmp(v->name, "language")) { + if (!strcasecmp(v->name, "enabled")) { + line_config->enabled = ast_true(v->value)?1:0; + } else if (!strcasecmp(v->name, "language")) { ast_copy_string(line_config->language, v->value, sizeof(line_config->language)); } else if (!strcasecmp(v->name, "callerid")) { ast_callerid_split(v->value, line_config->cid_name, sizeof(line_config->cid_name), line_config->cid_num, sizeof(line_config->cid_num)); diff --git a/channels/chan_brcm.h b/channels/chan_brcm.h index aa5ff7c06b6248ff62f4d3fa252f3525f3bb048a..37776853b49445f42cb27c98a995fa8808fde3aa 100644 --- a/channels/chan_brcm.h +++ b/channels/chan_brcm.h @@ -194,6 +194,7 @@ static const DIALTONE_MAP dialtone_map[] = /* Struct for individual endpoint settings */ typedef struct { + int enabled; char language[MAX_LANGUAGE]; char cid_num[AST_MAX_EXTENSION]; char cid_name[AST_MAX_EXTENSION];