提交 b47c9d92 authored 作者: Kapil Gupta's avatar Kapil Gupta

adding echo cancel code based on tdmc package

上级 9537ed37
......@@ -493,6 +493,7 @@ switch_status_t megaco_context_is_term_present(mg_context_t *ctx, mg_termination
switch_status_t megaco_context_add_termination(mg_context_t *ctx, mg_termination_t *term)
{
mg_termination_t* tdm_term = NULL;
switch_status_t status = SWITCH_STATUS_SUCCESS;
switch_assert(ctx != NULL);
......@@ -531,7 +532,19 @@ switch_status_t megaco_context_add_termination(mg_context_t *ctx, mg_termination
switch_ivr_uuid_bridge(ctx->terminations[0]->uuid, ctx->terminations[1]->uuid);
ctx->terminations[0]->profile->mg_stats->total_num_of_call_recvd++;
if(MG_TERM_TDM == ctx->terminations[0]->type){
tdm_term = ctx->terminations[0];
}else{
tdm_term = ctx->terminations[1];
}
if(MG_EC_ENABLE == tdm_term->ec_type){
mg_term_set_ec(tdm_term,0x01);
}else if(MG_EC_DISABLE == tdm_term->ec_type){
mg_term_set_ec(tdm_term,0x00);
}
mg_set_term_ec_status(tdm_term, MG_EC_UNDEFINED);
ctx->terminations[0]->profile->mg_stats->total_num_of_call_recvd++;
}
return SWITCH_STATUS_SUCCESS;
......@@ -893,7 +906,10 @@ void mg_term_set_ec(mg_termination_t *term, int enable)
switch_core_session_rwunlock(session);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Sent echo_cancel event to [%s] to [%s]\n", term->uuid, enable ? "enable" : "disable");
}
}else{
mg_ec_types_t status = ((enable)?MG_EC_ENABLE:MG_EC_DISABLE);
mg_set_term_ec_status(term, status);
}
switch_event_destroy(&event);
}
......
......@@ -167,7 +167,9 @@ typedef enum {
(_reqId)->id.val = 0xFFFFFFFF;
switch_status_t mg_prc_descriptors(megaco_profile_t* mg_profile, MgMgcoCommand *inc_cmd, mg_termination_t* term, CmMemListCp *memCp);
void mg_set_term_ec_status(mg_termination_t* term, mg_ec_types_t status);
switch_status_t mg_prc_descriptors(megaco_profile_t* mg_profile, MgMgcoCommand *inc_cmd, mg_termination_t* term, CmMemListCp *memCp);
void handle_sng_log(uint8_t level, char *fmt, ...);
void handle_mgco_sta_ind(Pst *pst, SuId suId, MgMgtSta* msg);
void handle_mgco_txn_sta_ind(Pst *pst, SuId suId, MgMgcoInd* msg);
......
......@@ -2397,3 +2397,11 @@ void mg_apply_tdm_ec(mg_termination_t* term, mg_context_t *mg_ctxt)
}
}
/*****************************************************************************************************************************/
void mg_set_term_ec_status(mg_termination_t* term, mg_ec_types_t status)
{
if(NULL != term) {
term->ec_type = status;
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO,"Setting Term EC[%s]\n",mg_ec_types_tostr(term->ec_type));
}
}
/*****************************************************************************************************************************/
......@@ -132,6 +132,29 @@ typedef enum {
MG_T38_FAX_NOTIFY_INVALID,
} mg_t38_fax_notify_t;
typedef enum {
MG_EC_UNDEFINED = 0,
MG_EC_ENABLE,
MG_EC_DISABLE,
MG_EC_INVALID
} mg_ec_types_t;
static inline const char *mg_ec_types_tostr(mg_ec_types_t type) {
switch (type) {
case MG_EC_UNDEFINED:
return "UNDEFINED";
case MG_EC_ENABLE:
return "ENABLE";
case MG_EC_DISABLE:
return "DISABLE";
case MG_EC_INVALID:
return "INVALID";
default:
return "Invalid";
}
return NULL;
}
typedef enum {
MGM_AUDIO = 0,
......@@ -205,6 +228,7 @@ struct mg_termination_s {
int *mg_error_code; /* MEGACO error code */
uint32_t flags;
const char *tech; /* Endpoint controlling the TDM interface - only FreeTDM tested so far */
mg_ec_types_t ec_type;
union {
struct {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论