diff --git a/src/channels/chan_voicemngr.c b/src/channels/chan_voicemngr.c index 1250bda0d543533a8750e3e49ba9fbb203a7754d..722e646cc31d54e22aec6b568235a414a12bf03f 100644 --- a/src/channels/chan_voicemngr.c +++ b/src/channels/chan_voicemngr.c @@ -118,7 +118,7 @@ static int chan_voicemngr_signal_ringing_callerid_pending(struct chan_voicemngr_ static int chan_voicemngr_stop_ringing_callerid_pending(struct chan_voicemngr_pvt *p); static int chan_voicemngr_signal_callwaiting(const struct chan_voicemngr_pvt *p); static int chan_voicemngr_stop_callwaiting(const struct chan_voicemngr_pvt *p); -static int chan_voicemngr_signal_callerid(struct ast_channel *chan, struct chan_voicemngr_subchannel *sub); +static int chan_voicemngr_signal_callerid(struct ast_channel *chan, struct chan_voicemngr_subchannel *sub, int callwt); static struct chan_voicemngr_subchannel *chan_voicemngr_get_idle_subchannel(const struct chan_voicemngr_pvt *p); static struct chan_voicemngr_subchannel* chan_voicemngr_get_active_subchannel(const struct chan_voicemngr_pvt *p); static int chan_voicemngr_get_sip_client_id(struct chan_voicemngr_subchannel *sub); @@ -735,7 +735,7 @@ static void chan_voicemngr_modify_codec(struct chan_voicemngr_subchannel *sub) { } - ast_debug(4, "sub->owner Channel %s, ast_channel_codec_get(): %s\n",ast_channel_name(sub->owner), ast_channel_codec_get(sub->owner)); + ast_log(LOG_NOTICE, "Sync local codec to :%s, and ptime to %d \n", ast_channel_codec_get(sub->owner), ast_channel_ptime_get(sub->owner)); ao2_ref(bridged_chan, -1); } else { ast_channel_unlock(sub->owner); @@ -1256,7 +1256,8 @@ static int chan_voicemngr_call(struct ast_channel *chan, const char *dest, int t is_call_waiting_enabled(p->context)) { // call waiting enabled ast_debug(1, "Call waiting\n"); sub->channel_state = CALLWAITING; - chan_voicemngr_signal_callwaiting(p); + p->tech->signal_callerid(chan, sub, 1); + chan_voicemngr_send_ubus_event("CALLWAITING",p->line_id); int cwtimeout_ms = cwtimeout * 1000; int cwBeep_ms = cwBeep * 1000; sub->cw_timer_id = ast_sched_add(sched, cwtimeout_ms, cwtimeout_cb, sub); @@ -1298,7 +1299,7 @@ static int chan_voicemngr_call(struct ast_channel *chan, const char *dest, int t p->tech->signal_ringing(p); } else { p->tech->signal_ringing_callerid_pending(p); - p->tech->signal_callerid(chan, sub); + p->tech->signal_callerid(chan, sub, 0); } if (has_call_in_sip_client(p->context)) { @@ -1661,8 +1662,6 @@ static int chan_voicemngr_write(struct ast_channel *ast, struct ast_frame *frame if (sip_client_id >= 0 && sip_client_id < MAX_SIP_CLIENTS) { line_stats[sip_client_id].rxpkts++; line_stats[sip_client_id].rxbytes += ap->rtp_size; - } else { - ast_debug(9, "Wrong sip client id: %d\n", sip_client_id); } /* set rtp payload type sent to voicemngr */ @@ -1699,8 +1698,6 @@ static int chan_voicemngr_write(struct ast_channel *ast, struct ast_frame *frame if (sip_client_id >= 0 && sip_client_id < MAX_SIP_CLIENTS) { line_stats[sip_client_id].rxpkts++; line_stats[sip_client_id].rxbytes += ap->rtp_size; - } else { - ast_debug(9, "Wrong sip client id: %d\n", sip_client_id); } /* set rtp payload type sent to voicemngr */ @@ -3419,7 +3416,7 @@ static void chan_voicemngr_process_event(struct endpt_event *ev) endpt_connection(sub_peer->parent->line_id, sub_peer->call_id, "destroy"); usleep(500000); p->tech->signal_ringing_callerid_pending(p); - p->tech->signal_callerid(sub_peer->owner, sub_peer); + p->tech->signal_callerid(sub_peer->owner, sub_peer, 0); sub->channel_state = RINGING; ast_queue_control(peer_owner, AST_CONTROL_RINGING); chan_voicemngr_send_ubus_event("RINGING",p->line_id); @@ -5071,7 +5068,7 @@ static int chan_voicemngr_stop_ringing_callerid_pending(struct chan_voicemngr_pv * 'O' in number or name => not available * 'P' in number or name => presentation not allowed */ -static int chan_voicemngr_signal_callerid(struct ast_channel *chan, struct chan_voicemngr_subchannel *sub) +static int chan_voicemngr_signal_callerid(struct ast_channel *chan, struct chan_voicemngr_subchannel *sub, int callwt) { if (channel_config[sub->parent->line_id].ringsignal) { CLID_STRING clid_string; @@ -5138,7 +5135,10 @@ static int chan_voicemngr_signal_callerid(struct ast_channel *chan, struct chan_ clid_string.number_name[str_length++] = '\0'; ast_debug(2, "CLIP info: caller number [%s], caller name [%s], final string [%s]\n", number, name, (char *)&clid_string); - endpt_signal(sub->parent->line_id, "callid", "on", (char *)&clid_string); + if (callwt) + endpt_signal(sub->parent->line_id, "callwt", "on", (char *)&clid_string); + else + endpt_signal(sub->parent->line_id, "callid", "on", (char *)&clid_string); return 0; } diff --git a/src/channels/chan_voicemngr.h b/src/channels/chan_voicemngr.h index eb4aecbe7798c3206049a9ef129408fee215538a..a61cfb99361e14cf1df3b5618499fdb92401f9d1 100644 --- a/src/channels/chan_voicemngr.h +++ b/src/channels/chan_voicemngr.h @@ -176,7 +176,7 @@ struct chan_voicemngr_subchannel { struct chan_voicemngr_channel_tech { int (* signal_ringing)(struct chan_voicemngr_pvt *p); int (* signal_ringing_callerid_pending)(struct chan_voicemngr_pvt *p); - int (* signal_callerid)(struct ast_channel *chan, struct chan_voicemngr_subchannel *s); + int (* signal_callerid)(struct ast_channel *chan, struct chan_voicemngr_subchannel *s, int callwt); int (* stop_ringing)(struct chan_voicemngr_pvt *p); int (* stop_ringing_callerid_pending)(struct chan_voicemngr_pvt *p); int (* release)(struct chan_voicemngr_pvt *p);