diff --git a/channels/chan_brcm.c b/channels/chan_brcm.c index d508b9c6dd264bb9cfb6356cc8b4ede9a0a00148..c985f7119f2bb42bdf880c46f94ea221dcc2849d 100644 --- a/channels/chan_brcm.c +++ b/channels/chan_brcm.c @@ -623,6 +623,7 @@ static int brcm_indicate(struct ast_channel *ast, int condition, const void *dat case AST_CAUSE_NO_ANSWER: if (ast_channel_state(ast) != AST_STATE_UP) { endpt_signal(sub->parent->line_id, "congestion", "on", NULL); + strncpy(sub->parent->callStatus, "Disconnected", CALL_STATUS_MAX_LEN); break; } res = -1; @@ -634,6 +635,7 @@ static int brcm_indicate(struct ast_channel *ast, int condition, const void *dat if (ast_channel_state(ast) != AST_STATE_UP) { /* XXX We should play a busy tone here!! */ sub->channel_state = CALLENDED; + strncpy(sub->parent->callStatus, "Disconnected", CALL_STATUS_MAX_LEN); endpt_signal(sub->parent->line_id, "busy", "on", NULL); break; } @@ -1037,10 +1039,11 @@ static int brcm_answer(struct ast_channel *ast) struct brcm_pvt *pvt = sub->parent; ast_debug(1, "brcm_answer(%s)\n", ast_channel_name(ast)); - pvt_lock(pvt, "TELCHAN answer"); - strncpy(pvt->callStatus, "Connected", CALL_STATUS_MAX_LEN); + /*If the call is not in CALLENDED state set status to connected */ + if(sub->channel_state != CALLENDED) + strncpy(pvt->callStatus, "Connected", CALL_STATUS_MAX_LEN); /* For attended call transfer, if the transfer target has accepted the call initiated by * us as the tranferee, we can terminate the original call with the transferor */ if (sub->channel_state == TRANSFERING) {