/*******************************************************************/
/* mg <mg-profile> show alltermstatus */
handle_all_term_status_cli_cmd(stream, profile);
+ /*******************************************************************/
}else if(!strcasecmp(argv[3], "termstatus")){
/*******************************************************************/
/* mg <mg-profile> show termstatus <term-id> */
goto usage;
}
handle_term_status_cli_cmd(stream, profile, argv[4]);
+ /*******************************************************************/
+ }else if(!strcasecmp(argv[3], "stackmem")){
+ /*******************************************************************/
+ sng_mg_reg_info_show();
+ /*******************************************************************/
+#ifdef LEAK_TEST
+ }else if(!strcasecmp(argv[3], "leak-report")){
+ /*******************************************************************/
+ mgPrntLeakReport();
+ /*******************************************************************/
+#endif
} else {
/*******************************************************************/
stream->write_function(stream, "-ERR No such profile\n");
stream->write_function(stream, "mg profile <profile-name> show activecalls \n");
stream->write_function(stream, "mg profile <profile-name> show termstatus <term-id> \n");
stream->write_function(stream, "mg profile <profile-name> show alltermstatus \n");
+ stream->write_function(stream, "mg profile <profile-name> show stackmem \n");
stream->write_function(stream, "Usage: Logging \n");
stream->write_function(stream, "mg logging enable \n");
return SWITCH_STATUS_FALSE;
}
- switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_ERROR,"descriptors[%d] found in-coming megaco request \n", desc->dl.num.val);
+ //switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_ERROR,"descriptors[%d] found in-coming megaco request \n", desc->dl.num.val);
if(NOTPRSNT == desc->dl.num.pres){
switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_ERROR,"No descriptor found in-coming megaco request \n");
for (descId = 0; descId < desc->dl.num.val; descId++) {
- switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_ERROR,"descriptors[%d] type in-coming megaco request \n", desc->dl.descs[descId]->type.val);
+ //switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_ERROR,"descriptors[%d] type in-coming megaco request \n", desc->dl.descs[descId]->type.val);
switch (desc->dl.descs[descId]->type.val) {
case MGT_MEDIADESC:
{
case MGT_LCLCTL_MODE:
{
/* Mode Property */
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE,"MGT_LCLCTL_MODE - Mode value [%d]\n", lclParm->u.mode.val);
+ //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE,"MGT_LCLCTL_MODE - Mode value [%d]\n", lclParm->u.mode.val);
break;
}
case MGT_LCLCTL_RESVAL:
{
/* Reserve Value */
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE,"MGT_LCLCTL_RESVAL: Reserve Value[%d] \n", lclParm->u.resVal.val);
+ //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE,"MGT_LCLCTL_RESVAL: Reserve Value[%d] \n", lclParm->u.resVal.val);
break;
}
case MGT_LCLCTL_RESGRP:
{
/* Reserve group */
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE,"MGT_LCLCTL_RESGRP: Reserve Group[%d]\n", lclParm->u.resGrp.val);
+ //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE,"MGT_LCLCTL_RESGRP: Reserve Group[%d]\n", lclParm->u.resGrp.val);
break;
}
case MGT_LCLCTL_PROPPARM:
{
/* Properties (of a termination) */
/* Matt - See how we can apply this to a termination */
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE,"MGT_LCLCTL_PROPPARM: \n");
+ //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE,"MGT_LCLCTL_PROPPARM: \n");
break;
}
default:
*/
switch_status_t handle_mg_add_cmd(megaco_profile_t* mg_profile, MgMgcoCommand *inc_cmd, MgMgcoContextId* new_ctxtId)
{
- switch_status_t ret;
+ switch_status_t ret;
MgMgcoContextId *ctxtId;
MgStr errTxt;
MgMgcoInd *mgErr;
MgMgcoLocalDesc *local = NULL;
/*CmSdpInfoSet *psdp = NULL;*/
-
/* TODO - Kapil dummy line , will need to add with proper code */
inc_med_desc = &cmd->dl.descs[0]->u.media;
}else{
/* ADD request is for RTP term we need to create termination */
+
/* Grow the list of reply parameters */
if (mgUtlGrowList((void ***)&rsp.u.mgCmdRsp[0]->u.add.termIdLst.terms, sizeof(MgMgcoTermId),
&rsp.u.mgCmdRsp[0]->u.add.termIdLst.num, &rsp.u.mgCmdRsp[0]->memCp) != ROK)
out_termId = rsp.u.mgCmdRsp[0]->u.add.termIdLst.terms[rsp.u.mgCmdRsp[0]->u.add.termIdLst.num.val-1];
mg_fill_mgco_termid(out_termId, (char*)term->name, strlen((char*)term->name), &rsp.u.mgCmdRsp[0]->memCp);
+
}
if(is_rtp){
return SWITCH_STATUS_FALSE;
}
+
/* copy media descriptor */
desc = rsp.u.mgCmdRsp[0]->u.add.audit.parms[rsp.u.mgCmdRsp[0]->u.add.audit.num.val-1];
desc->type.pres = PRSNT_NODEF;
}
}
+
/* only for RTP */
if(SWITCH_STATUS_FALSE == mg_build_sdp(&desc->u.media, inc_med_desc, mg_profile, term, &rsp.u.mgCmdRsp[0]->memCp)) {
if(term->mg_error_code && (*term->mg_error_code == MGT_MGCP_RSP_CODE_INCONSISTENT_LCL_OPT)){
}
}
}
+
#if 0
if(is_rtp){
mg_build_sdp(desc, inc_med_desc, mg_profile, term, &rsp.u.mgCmdRsp[0]->memCp);
ret = sng_mgco_send_cmd( mg_profile->idx, &rsp);
return ret;
-
}
/* sample resp code -- end */
/*************************************************************************************************************************/
mg_build_mgco_err_request(&mgErr, txn_id, ctxtId, err_code, &errTxt)) {
sng_mgco_send_err(mg_profile->idx, mgErr);
}
- mg_free_cmd(inc_cmd);
switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_ERROR," ADD Request failed..releasing context/termination(if allocated) \n");
if(mg_ctxt){
megaco_release_context(mg_ctxt);
mg_build_mgco_err_request(&mgErr, txn_id, ctxtId, err_code, &errTxt)) {
sng_mgco_send_err(mg_profile->idx, mgErr);
}
- mg_free_cmd(inc_cmd);
switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_ERROR," Modify Request failed..releasing context/termination \n");
if(mg_ctxt){
mg_build_mgco_err_request(&mgErr, txn_id, ctxtId, err_code, &errTxt)) {
sng_mgco_send_err(mg_profile->idx, mgErr);
}
- mg_free_cmd(inc_cmd);
return SWITCH_STATUS_FALSE;
}
sng_mgco_send_err(mg_profile->idx, mgErr);
}
- /* deallocate the msg */
- mg_free_cmd(auditReq);
return SWITCH_STATUS_FALSE;
}
svc = &request.u.mgCmdReq[0]->cmd.u.svc;
- if(SWITCH_STATUS_FALSE == (ret = mg_fill_svc_change(&svc->parm, method, mg_service_change_reason[reason]))){
+ if(SWITCH_STATUS_FALSE == (ret = mg_fill_svc_change(&svc->parm, method, mg_service_change_reason[reason], &request.u.mgCmdReq[0]->memCp))){
return ret;
}
switch_status_t mg_build_pkg_desc(MgMgcoPkgsDesc* pkg);
switch_status_t mg_send_heartbeat_audit_rsp( SuId suId, MgMgcoCommand *auditReq);
void mg_get_time_stamp(MgMgcoTimeStamp *timeStamp);
-switch_status_t mg_fill_svc_change(MgMgcoSvcChgPar *srvPar, uint8_t method, const char *reason);
+switch_status_t mg_fill_svc_change(MgMgcoSvcChgPar *srvPar, uint8_t method, const char *reason,CmMemListCp *memCp);
void mg_fill_null_context(MgMgcoContextId* ctxt);
switch_status_t mg_send_service_change(SuId suId, const char* term_name, uint8_t method, MgServiceChangeReason_e reason,uint8_t wild);
switch_status_t mg_create_mgco_command(MgMgcoCommand *cmd, uint8_t apiType, uint8_t cmdType);
case LMG_EVENT_PEER_ENABLED:
{
len = len + sprintf(prBuf+len, "gateway enabled");
+
/* gateway enabled now we can send termination service change for all terminations */
mgco_init_ins_service_change( usta->t.usta.alarmInfo.sapId );
break;
{
Mem sMem;
- sMem.region = 0;
- sMem.pool = 0;
+ sMem.region = S_REG;
+ sMem.pool = S_POOL;
if ( _memSize <= 0 )
{
termId->name.pres.pres = PRSNT_NODEF;
termId->name.lcl.pres = PRSNT_NODEF;
termId->name.lcl.len = term_len;
- /*MG_GETMEM(termId->name.lcl.val, termId->name.lcl.len , memCp, ret);*/
- ret = mg_stack_alloc_mem((Ptr*)&termId->name.lcl.val,term_len);
+ MG_GETMEM(termId->name.lcl.val, termId->name.lcl.len , memCp, ret);
+ //ret = mg_stack_alloc_mem((Ptr*)&termId->name.lcl.val,term_len);
if( ret != ROK)
RETVALUE(ret);
}
/*****************************************************************************************************************************/
-switch_status_t mg_fill_svc_change(MgMgcoSvcChgPar *srvPar, uint8_t method, const char *reason)
+switch_status_t mg_fill_svc_change(MgMgcoSvcChgPar *srvPar, uint8_t method, const char *reason, CmMemListCp *memCp)
{
+ S16 ret = ROK;
MG_SET_TKN_VAL_PRES(&srvPar->pres, 0, PRSNT_NODEF);
MG_SET_TKN_VAL_PRES(&srvPar->meth.pres, 0, PRSNT_NODEF);
MG_SET_TKN_VAL_PRES(&srvPar->meth.type, method, PRSNT_NODEF);
srvPar->reason.pres = PRSNT_NODEF;
srvPar->reason.len = cmStrlen((const U8 *)reason);
- mg_stack_alloc_mem((Ptr*)&srvPar->reason.val, srvPar->reason.len);
+ MG_GETMEM(srvPar->reason.val, srvPar->reason.len , memCp, ret);
if (NULL == srvPar->reason.val)
{
switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_ERROR, "failed, memory alloc\n");
int count;
int err_code;
megaco_profile_t* mg_profile;
+ char prnt_buf[128];
memset(&out_ctxt,0,sizeof(out_ctxt));
+ memset(&prnt_buf,0,sizeof(prnt_buf));
inc_context = &cmd->contextId;
memcpy(&out_ctxt, inc_context,sizeof(MgMgcoContextId));
/*get mg profile associated with SuId */
if(NULL == (mg_profile = megaco_get_profile_by_suId(suId))){
- goto error1;
+ goto done;
}
/* first thing - restart ito timer */
(MGT_TERMID_OTHER == termId->type.val) &&
(MGT_AUDITVAL != cmd->u.mgCmdInd[0]->cmd.type.val)){
if(SWITCH_STATUS_FALSE == mg_stack_termination_is_in_service(mg_profile, (char*)termId->name.lcl.val, termId->name.lcl.len)){
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Termination[%s] not in service \n", (char*)termId->name.lcl.val);
+ snprintf(prnt_buf,termId->name.lcl.len,"%s",(char*)termId->name.lcl.val);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Termination[%s] not in service \n",(strlen(prnt_buf))?prnt_buf:"NULL");
mg_util_set_term_string(&errTxt, termId);
err_code = MGT_MGCO_RSP_CODE_UNKNOWN_TERM_ID;
goto error;
/*mgAccEvntPrntMgMgcoCommand(cmd, stdout);*/
-
switch(cmd->cmdType.val)
{
case CH_CMD_TYPE_IND:
/* END OF TXN received - means last command in txn to process.
* Send response to peer */
- if(CH_CMD_TYPE_IND == cmd->cmdType.val){
+ if(CH_CMD_TYPE_IND == cmd->cmdType.val){
/*if(CH_CMD_STATUS_END_OF_TXN == cmd->cmdStatus.val)*/
mg_send_end_of_axn(suId, &cmd->transId, &out_ctxt, &cmd->peerId);
}
- return;
+ goto done;
ctxt_error:
err_code = MGT_MGCO_RSP_CODE_UNKNOWN_CTXT;
if(CH_CMD_STATUS_END_OF_TXN == cmd->cmdStatus.val){
mg_send_end_of_axn(suId, &cmd->transId, &out_ctxt, &cmd->peerId);
}
-error1:
- mg_free_cmd(cmd);
- return;
+done:
+ if(CH_CMD_TYPE_IND == cmd->cmdType.val){
+ mg_free_cmd(cmd->u.mgCmdReq[0]);
+ }else if(CH_CMD_TYPE_CFM == cmd->cmdType.val){
+ mg_free_cmd(cmd->u.mgCmdCfm[0]);
+ }
+ return;
}
/*****************************************************************************************************************************/
/*dump information*/
mgAccEvntPrntMgMgcoInd(txn_sta_ind, stdout);
+
+ mg_free_cmd(txn_sta_ind);
}
/*****************************************************************************************************************************/