Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
642b1a2e
提交
642b1a2e
authored
7月 05, 2012
作者:
kapil
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
adding code for sending termination service change and respective CLI
command
上级
de70e3c0
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
517 行增加
和
175 行删除
+517
-175
media_gateway_cli.c
src/mod/endpoints/mod_media_gateway/media_gateway_cli.c
+22
-0
media_gateway_cmd_handler.c
...d/endpoints/mod_media_gateway/media_gateway_cmd_handler.c
+110
-4
media_gateway_stack.h
src/mod/endpoints/mod_media_gateway/media_gateway_stack.h
+19
-1
media_gateway_stack_alarms.c
.../endpoints/mod_media_gateway/media_gateway_stack_alarms.c
+3
-0
media_gateway_utils.c
src/mod/endpoints/mod_media_gateway/media_gateway_utils.c
+363
-170
没有找到文件。
src/mod/endpoints/mod_media_gateway/media_gateway_cli.c
浏览文件 @
642b1a2e
...
@@ -94,6 +94,28 @@ switch_status_t mg_process_cli_cmd(const char *cmd, switch_stream_handle_t *stre
...
@@ -94,6 +94,28 @@ switch_status_t mg_process_cli_cmd(const char *cmd, switch_stream_handle_t *stre
}
else
{
}
else
{
stream
->
write_function
(
stream
,
"-ERR No such profile
\n
"
);
stream
->
write_function
(
stream
,
"-ERR No such profile
\n
"
);
}
}
/**********************************************************************************/
}
else
if
(
!
strcmp
(
argv
[
2
],
"send"
))
{
/**********************************************************************************/
/* mg profile <profile-name> send sc <term-id> <method> <reason>*/
printf
(
"count = %d
\n
"
,
argc
);
if
(
argc
<
7
){
goto
usage
;
}
if
(
zstr
(
argv
[
3
])
||
zstr
(
argv
[
4
])
||
zstr
(
argv
[
5
])
||
zstr
(
argv
[
6
])){
goto
usage
;
}
if
(
profile
)
{
printf
(
"Input to Send Service Change command : "
"Profile Name[%s], term-id[%s] method[%s] reason[%s]
\n
"
,
profile
->
name
,
argv
[
4
],
argv
[
5
],
argv
[
6
]);
megaco_profile_release
(
profile
);
mg_send_service_change
(
profile
->
idx
,
argv
[
4
],
atoi
(
argv
[
5
]),
atoi
(
argv
[
6
]));
}
else
{
stream
->
write_function
(
stream
,
"-ERR No such profile
\n
"
);
}
/**********************************************************************************/
/**********************************************************************************/
}
else
{
}
else
{
/**********************************************************************************/
/**********************************************************************************/
...
...
src/mod/endpoints/mod_media_gateway/media_gateway_cmd_handler.c
浏览文件 @
642b1a2e
...
@@ -9,6 +9,15 @@
...
@@ -9,6 +9,15 @@
#include "mod_media_gateway.h"
#include "mod_media_gateway.h"
#include "media_gateway_stack.h"
#include "media_gateway_stack.h"
U32
outgoing_txn_id
;
/*****************************************************************************************************************************/
const
char
*
mg_service_change_reason
[]
=
{
"
\"
NOT USED
\"
"
,
"
\"
900 ServiceRestored
\"
"
,
"
\"
905 Termination taken out of service
\"
"
,
0
};
/*****************************************************************************************************************************/
/*****************************************************************************************************************************/
...
@@ -134,7 +143,7 @@ switch_status_t mg_send_add_rsp(SuId suId, MgMgcoCommand *req)
...
@@ -134,7 +143,7 @@ switch_status_t mg_send_add_rsp(SuId suId, MgMgcoCommand *req)
#else
#else
termId
=
&
(
cmd
.
u
.
mgCmdRsp
[
0
]
->
u
.
add
.
termId
);
termId
=
&
(
cmd
.
u
.
mgCmdRsp
[
0
]
->
u
.
add
.
termId
);
#endif
#endif
mg_fill_mgco_termid
(
termId
,
(
CONSTANT
U8
*
)
"term1"
,
&
req
->
u
.
mgCmdRsp
[
0
]
->
memCp
);
/*mg_fill_mgco_termid(termId, (char*)"term1",&req->u.mgCmdRsp[0]->memCp);*/
/* We will always send one command at a time..*/
/* We will always send one command at a time..*/
cmd
.
cmdStatus
.
pres
=
PRSNT_NODEF
;
cmd
.
cmdStatus
.
pres
=
PRSNT_NODEF
;
...
@@ -197,7 +206,7 @@ switch_status_t mg_send_end_of_axn(SuId suId, MgMgcoTransId* transId, MgMgcoCont
...
@@ -197,7 +206,7 @@ switch_status_t mg_send_end_of_axn(SuId suId, MgMgcoTransId* transId, MgMgcoCont
switch_status_t
mg_build_mgco_err_request
(
MgMgcoInd
**
errcmd
,
U32
trans_id
,
MgMgcoContextId
*
ctxt_id
,
U32
err
,
MgStr
*
errTxt
)
switch_status_t
mg_build_mgco_err_request
(
MgMgcoInd
**
errcmd
,
U32
trans_id
,
MgMgcoContextId
*
ctxt_id
,
U32
err
,
MgStr
*
errTxt
)
{
{
MgMgcoInd
*
mgErr
;
MgMgcoInd
*
mgErr
=
NULL
;
S16
ret
;
S16
ret
;
mgErr
=
NULLP
;
mgErr
=
NULLP
;
...
@@ -584,6 +593,8 @@ switch_status_t mg_send_heartbeat_audit_rsp( SuId suId, MgMgcoCommand *auditReq)
...
@@ -584,6 +593,8 @@ switch_status_t mg_send_heartbeat_audit_rsp( SuId suId, MgMgcoCommand *auditReq)
}
}
/*****************************************************************************************************************************/
/*****************************************************************************************************************************/
#if 0
/* Kapil - Not using any more */
switch_status_t handle_media_audit( SuId suId, MgMgcoCommand *auditReq)
switch_status_t handle_media_audit( SuId suId, MgMgcoCommand *auditReq)
{
{
switch_status_t ret;
switch_status_t ret;
...
@@ -788,7 +799,10 @@ switch_status_t handle_pkg_audit( SuId suId, MgMgcoCommand *auditReq)
...
@@ -788,7 +799,10 @@ switch_status_t handle_pkg_audit( SuId suId, MgMgcoCommand *auditReq)
}
}
#endif
/*****************************************************************************************************************************/
/*****************************************************************************************************************************/
#if 0
/* Kapil - Not using any more */
switch_status_t mg_send_audit_rsp(SuId suId, MgMgcoCommand *req)
switch_status_t mg_send_audit_rsp(SuId suId, MgMgcoCommand *req)
{
{
MgMgcoCommand cmd;
MgMgcoCommand cmd;
...
@@ -858,6 +872,7 @@ switch_status_t mg_send_audit_rsp(SuId suId, MgMgcoCommand *req)
...
@@ -858,6 +872,7 @@ switch_status_t mg_send_audit_rsp(SuId suId, MgMgcoCommand *req)
return
ret
;
return
ret
;
}
}
#endif
/*****************************************************************************************************************************/
/*****************************************************************************************************************************/
switch_status_t
mg_send_modify_rsp
(
SuId
suId
,
MgMgcoCommand
*
req
)
switch_status_t
mg_send_modify_rsp
(
SuId
suId
,
MgMgcoCommand
*
req
)
...
@@ -897,7 +912,7 @@ switch_status_t mg_send_modify_rsp(SuId suId, MgMgcoCommand *req)
...
@@ -897,7 +912,7 @@ switch_status_t mg_send_modify_rsp(SuId suId, MgMgcoCommand *req)
#else
#else
termId
=
&
(
cmd
.
u
.
mgCmdRsp
[
0
]
->
u
.
mod
.
termId
);
termId
=
&
(
cmd
.
u
.
mgCmdRsp
[
0
]
->
u
.
mod
.
termId
);
#endif
#endif
mg_fill_mgco_termid
(
termId
,
(
CONSTANT
U8
*
)
"term1"
,
&
req
->
u
.
mgCmdRsp
[
0
]
->
memCp
);
/*mg_fill_mgco_termid(termId, (char*)"term1",&req->u.mgCmdRsp[0]->memCp);*/
/* We will always send one command at a time..*/
/* We will always send one command at a time..*/
cmd
.
cmdStatus
.
pres
=
PRSNT_NODEF
;
cmd
.
cmdStatus
.
pres
=
PRSNT_NODEF
;
...
@@ -958,7 +973,7 @@ switch_status_t mg_send_subtract_rsp(SuId suId, MgMgcoCommand *req)
...
@@ -958,7 +973,7 @@ switch_status_t mg_send_subtract_rsp(SuId suId, MgMgcoCommand *req)
#else
#else
termId
=
&
(
cmd
.
u
.
mgCmdRsp
[
0
]
->
u
.
sub
.
termId
);
termId
=
&
(
cmd
.
u
.
mgCmdRsp
[
0
]
->
u
.
sub
.
termId
);
#endif
#endif
mg_fill_mgco_termid
(
termId
,
(
CONSTANT
U8
*
)
"term1"
,
&
req
->
u
.
mgCmdRsp
[
0
]
->
memCp
);
/*mg_fill_mgco_termid(termId, (char *)"term1",&req->u.mgCmdRsp[0]->memCp);*/
/* We will always send one command at a time..*/
/* We will always send one command at a time..*/
cmd
.
cmdStatus
.
pres
=
PRSNT_NODEF
;
cmd
.
cmdStatus
.
pres
=
PRSNT_NODEF
;
...
@@ -979,3 +994,94 @@ switch_status_t mg_send_subtract_rsp(SuId suId, MgMgcoCommand *req)
...
@@ -979,3 +994,94 @@ switch_status_t mg_send_subtract_rsp(SuId suId, MgMgcoCommand *req)
return
ret
;
return
ret
;
}
}
/*****************************************************************************************************************************/
U32
get_txn_id
(){
outgoing_txn_id
++
;
return
outgoing_txn_id
;
}
/*****************************************************************************************************************************/
/* Note : API to send Service Change */
/* INPUT :
* method - Service change method type (can be MGT_SVCCHGMETH_RESTART/MGT_SVCCHGMETH_FORCED (please refer to sng_ss7/cm/mgt.h for more values))
* MgServiceChangeReason_e - Service Change reason
* SuId - Service User ID for MG SAP - it will be same like mg_profile_t->idx (refer to media_gateway_xml.c->mg_sap_id)
* term_name - String format defined termination name
*/
switch_status_t
mg_send_service_change
(
SuId
suId
,
const
char
*
term_name
,
uint8_t
method
,
MgServiceChangeReason_e
reason
)
{
MgMgcoSvcChgPar
srvPar
;
MgMgcoTermId
*
termId
;
switch_status_t
ret
;
MgMgcoCommand
request
;
MgMgcoSvcChgReq
*
svc
;
MG_ZERO
(
&
srvPar
,
sizeof
(
MgMgcoSvcChgPar
));
MG_ZERO
(
&
request
,
sizeof
(
request
));
if
(
SWITCH_STATUS_FALSE
==
(
ret
=
mg_create_mgco_command
(
&
request
,
CH_CMD_TYPE_REQ
,
MGT_SVCCHG
))){
goto
err
;
}
/*fill txn id */
request
.
transId
.
pres
=
PRSNT_NODEF
;
request
.
transId
.
val
=
get_txn_id
();
request
.
contextId
.
type
.
pres
=
PRSNT_NODEF
;
request
.
contextId
.
type
.
val
=
MGT_CXTID_NULL
;
#if 0
/* TODO - fill of below fields */
#ifdef GCP_MGCO
#ifdef GCP_VER_2_1
MgMgcoSegNum segNum;
MgMgcoSegCmpl segCmpl;
#endif
#endif /* GCP_MGCO */
#endif
request
.
cmdStatus
.
pres
=
PRSNT_NODEF
;
request
.
cmdStatus
.
val
=
CH_CMD_STATUS_END_OF_TXN
;
request
.
cmdType
.
pres
=
PRSNT_NODEF
;
request
.
cmdType
.
val
=
CH_CMD_TYPE_REQ
;
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
]))){
return
ret
;
}
/*mgUtlCpyMgMgcoSvcChgPar(&svc->parm, &srvPar, &request.u.mgCmdReq[0]->memCp);*/
printf
(
"reason[%p = %s], len[%d]
\n
"
,
svc
->
parm
.
reason
.
val
,
svc
->
parm
.
reason
.
val
,
svc
->
parm
.
reason
.
len
);
if
(
mgUtlGrowList
((
void
***
)
&
svc
->
termIdLst
.
terms
,
sizeof
(
MgMgcoTermIdLst
),
&
svc
->
termIdLst
.
num
,
&
request
.
u
.
mgCmdReq
[
0
]
->
memCp
)
!=
ROK
)
{
switch_log_printf
(
SWITCH_CHANNEL_LOG_CLEAN
,
SWITCH_LOG_ERROR
,
"Grow List failed
\n
"
);
return
SWITCH_STATUS_FALSE
;
}
#ifdef GCP_VER_2_1
termId
=
svc
->
termIdLst
.
terms
[
0
];
#else
termId
=
&
(
svc
->
termId
);
#endif
mg_fill_mgco_termid
(
termId
,
(
char
*
)
term_name
,
strlen
(
term_name
),
&
request
.
u
.
mgCmdReq
[
0
]
->
memCp
);
printf
(
"reason[%p = %s], len[%d]
\n
"
,
svc
->
parm
.
reason
.
val
,
svc
->
parm
.
reason
.
val
,
svc
->
parm
.
reason
.
len
);
sng_mgco_send_cmd
(
suId
,
&
request
);
return
SWITCH_STATUS_SUCCESS
;
err
:
mgUtlDelMgMgcoSvcChgPar
(
&
srvPar
);
return
ret
;
}
/*****************************************************************************************************************************/
src/mod/endpoints/mod_media_gateway/media_gateway_stack.h
浏览文件 @
642b1a2e
...
@@ -60,6 +60,13 @@ typedef struct _mgPackage
...
@@ -60,6 +60,13 @@ typedef struct _mgPackage
extern
MgPackage_t
mg_pkg_list
[];
extern
MgPackage_t
mg_pkg_list
[];
/* Service change Reason */
typedef
enum
{
MG_SVC_REASON_NOTUSED
=
0
,
MG_SVC_REASON_900_RESTORED
=
1
,
MG_SVC_REASON_905_TERM_OOS
=
2
,
MG_SVC_REASON_LAST
=
4
}
MgServiceChangeReason_e
;
#define MG_TXN_INVALID 0
#define MG_TXN_INVALID 0
...
@@ -74,6 +81,12 @@ extern MgPackage_t mg_pkg_list[];
...
@@ -74,6 +81,12 @@ extern MgPackage_t mg_pkg_list[];
MG_SET_PRES((tkn).pres); \
MG_SET_PRES((tkn).pres); \
(tkn).val = _val;
(tkn).val = _val;
#define MG_SET_TKN_VAL_PRES(_tkn, _val, _pres) \
{ \
(_tkn)->val = _val; \
(_tkn)->pres = _pres; \
}
#define MG_MEM_COPY(_dst, _src, _len) \
#define MG_MEM_COPY(_dst, _src, _len) \
cmMemcpy((U8*) (_dst), (const U8*) (_src), _len)
cmMemcpy((U8*) (_dst), (const U8*) (_src), _len)
...
@@ -126,7 +139,7 @@ switch_status_t mg_stack_alloc_mem( Ptr* _memPtr, Size _memSize );
...
@@ -126,7 +139,7 @@ switch_status_t mg_stack_alloc_mem( Ptr* _memPtr, Size _memSize );
MgMgcoMediaDesc
*
get_default_media_desc
(
void
);
MgMgcoMediaDesc
*
get_default_media_desc
(
void
);
switch_status_t
handle_media_audit
(
SuId
suId
,
MgMgcoCommand
*
auditReq
);
switch_status_t
handle_media_audit
(
SuId
suId
,
MgMgcoCommand
*
auditReq
);
switch_status_t
mg_send_add_rsp
(
SuId
suId
,
MgMgcoCommand
*
req
);
switch_status_t
mg_send_add_rsp
(
SuId
suId
,
MgMgcoCommand
*
req
);
S16
mg_fill_mgco_termid
(
MgMgcoTermId
*
termId
,
CONSTANT
U8
*
str
,
CmMemListCp
*
memCp
);
S16
mg_fill_mgco_termid
(
MgMgcoTermId
*
termId
,
char
*
term_str
,
int
term_len
,
CmMemListCp
*
memCp
);
void
mg_util_set_txn_string
(
MgStr
*
errTxt
,
U32
*
txnId
);
void
mg_util_set_txn_string
(
MgStr
*
errTxt
,
U32
*
txnId
);
switch_status_t
mg_build_mgco_err_request
(
MgMgcoInd
**
errcmd
,
U32
trans_id
,
MgMgcoContextId
*
ctxt_id
,
U32
err
,
MgStr
*
errTxt
);
switch_status_t
mg_build_mgco_err_request
(
MgMgcoInd
**
errcmd
,
U32
trans_id
,
MgMgcoContextId
*
ctxt_id
,
U32
err
,
MgStr
*
errTxt
);
switch_status_t
mg_send_audit_rsp
(
SuId
suId
,
MgMgcoCommand
*
req
);
switch_status_t
mg_send_audit_rsp
(
SuId
suId
,
MgMgcoCommand
*
req
);
...
@@ -139,6 +152,11 @@ MgMgcoTermIdLst *mg_get_term_id_list(MgMgcoCommand *cmd);
...
@@ -139,6 +152,11 @@ MgMgcoTermIdLst *mg_get_term_id_list(MgMgcoCommand *cmd);
switch_status_t
handle_pkg_audit
(
SuId
suId
,
MgMgcoCommand
*
auditReq
);
switch_status_t
handle_pkg_audit
(
SuId
suId
,
MgMgcoCommand
*
auditReq
);
switch_status_t
mg_build_pkg_desc
(
MgMgcoPkgsDesc
*
pkg
);
switch_status_t
mg_build_pkg_desc
(
MgMgcoPkgsDesc
*
pkg
);
switch_status_t
mg_send_heartbeat_audit_rsp
(
SuId
suId
,
MgMgcoCommand
*
auditReq
);
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
);
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
);
switch_status_t
mg_create_mgco_command
(
MgMgcoCommand
*
cmd
,
uint8_t
apiType
,
uint8_t
cmdType
);
...
...
src/mod/endpoints/mod_media_gateway/media_gateway_stack_alarms.c
浏览文件 @
642b1a2e
...
@@ -208,6 +208,9 @@ void handle_mg_alarm(Pst *pst, MgMngmt *usta)
...
@@ -208,6 +208,9 @@ void handle_mg_alarm(Pst *pst, MgMngmt *usta)
case
LMG_EVENT_PEER_ENABLED
:
case
LMG_EVENT_PEER_ENABLED
:
{
{
len
=
len
+
sprintf
(
prBuf
+
len
,
"gateway enabled"
);
len
=
len
+
sprintf
(
prBuf
+
len
,
"gateway enabled"
);
/* gateway enabled now we can send termination service change */
/*TODO - probably we cannt immediate send Service change - we have to find proper place */
/*mg_send_service_change(0x01, "A01", MGT_SVCCHGMETH_RESTART,MG_SVC_REASON_900_RESTORED );*/
break
;
break
;
}
}
case
LMG_EVENT_PEER_DISCOVERED
:
case
LMG_EVENT_PEER_DISCOVERED
:
...
...
src/mod/endpoints/mod_media_gateway/media_gateway_utils.c
浏览文件 @
642b1a2e
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论