提交 df76709e authored 作者: kapil's avatar kapil

Adding code to bring up MEGACO stack

上级 32c5100e
ifndef ARCH
ARCH=$(shell uname -m)
endif
ifeq ($(ARCH),x86_64)
LOCAL_CFLAGS+=-DBIT_64 -DALIGN_64BIT
endif
BASE=../../../.. BASE=../../../..
LOCAL_OBJS=megaco.o megaco_cfg.o LOCAL_OBJS=megaco.o megaco_stack.o megaco_xml.o
LOCAL_LDFLAGS=-lsng_megaco LOCAL_LDFLAGS=-lsng_megaco
include $(BASE)/build/modmake.rules include $(BASE)/build/modmake.rules
...@@ -96,7 +96,12 @@ static switch_status_t config_profile(megaco_profile_t *profile, switch_bool_t r ...@@ -96,7 +96,12 @@ static switch_status_t config_profile(megaco_profile_t *profile, switch_bool_t r
} }
} }
status = SWITCH_STATUS_SUCCESS;
/* configure the MEGACO stack */
status = sng_mgco_cfg(profile->name);
/* we should break from here , profile name should be unique */
break;
} }
done: done:
...@@ -131,6 +136,12 @@ switch_status_t megaco_profile_start(const char *profilename) ...@@ -131,6 +136,12 @@ switch_status_t megaco_profile_start(const char *profilename)
goto fail; goto fail;
} }
/* start MEGACP stack */
if(SWITCH_STATUS_FALSE == sng_mgco_start(profilename)) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error starting MEGACO Stack for profile %s\n", profile->name);
goto fail;
}
switch_core_hash_insert_wrlock(megaco_globals.profile_hash, profile->name, profile, megaco_globals.profile_rwlock); switch_core_hash_insert_wrlock(megaco_globals.profile_hash, profile->name, profile, megaco_globals.profile_rwlock);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Started profile: %s\n", profile->name); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Started profile: %s\n", profile->name);
......
差异被折叠。
...@@ -51,12 +51,21 @@ typedef enum{ ...@@ -51,12 +51,21 @@ typedef enum{
SNG_MG_MEGACO, SNG_MG_MEGACO,
}sng_mg_protocol_types_e; }sng_mg_protocol_types_e;
#define PRNT_PROTOCOL_TYPE(_val)\
((_val == SNG_MG_MGCP)?"SNG_MG_MGCP":\
(_val == SNG_MG_MEGACO)?"SNG_MG_MEGACO":\
"SNG_MG_NONE")
typedef enum{ typedef enum{
SNG_MG_ENCODING_NONE, SNG_MG_ENCODING_NONE,
SNG_MG_ENCODING_TEXT,
SNG_MG_ENCODING_BINARY, SNG_MG_ENCODING_BINARY,
SNG_MG_ENCODING_TEXT,
}sng_mg_encoding_types_e; }sng_mg_encoding_types_e;
#define PRNT_ENCODING_TYPE(_val)\
((_val == SNG_MG_ENCODING_TEXT)?"SNG_MG_ENCODING_TEXT":\
(_val == SNG_MG_ENCODING_BINARY)?"SNG_MG_ENCODING_BINARY":\
"SNG_MG_ENCODING_NONE")
/* each profile is corresponds to each MG Instance */ /* each profile is corresponds to each MG Instance */
...@@ -95,4 +104,32 @@ void handle_mgco_audit_cfm(Pst *pst, SuId suId, MgMgtAudit* audit, Reason reason ...@@ -95,4 +104,32 @@ void handle_mgco_audit_cfm(Pst *pst, SuId suId, MgMgtAudit* audit, Reason reason
void handle_mg_alarm(Pst *pst, MgMngmt *sta); void handle_mg_alarm(Pst *pst, MgMngmt *sta);
void handle_tucl_alarm(Pst *pst, HiMngmt *sta); void handle_tucl_alarm(Pst *pst, HiMngmt *sta);
switch_status_t sng_mgco_init(sng_isup_event_interface_t* event);
switch_status_t sng_mgco_cfg(const char* profilename);
switch_status_t sng_mgco_start(const char* profilename);
switch_status_t sng_mgco_stack_shutdown(void);
/*****************************************************************************************************/
#define GET_MG_CFG_IDX(_profilename, _idx){\
for(idx=0; idx < MAX_MG_PROFILES; idx++){\
/* id zero is not acceptable */\
if(megaco_globals.g_mg_cfg.mgCfg[idx].id){\
if (strcmp(megaco_globals.g_mg_cfg.mgCfg[idx].name, profilename)) {\
continue;\
} else{\
break;\
}\
}\
}\
}
#define GET_TPT_ID(_id) megaco_globals.g_mg_cfg.mgTptProf[megaco_globals.g_mg_cfg.mgCfg[_id].transport_prof_id].id
#define GET_MU_SAP_ID(_id) megaco_globals.g_mg_cfg.mgCfg[_id].id
#define GET_TPT_TYPE(_id) megaco_globals.g_mg_cfg.mgTptProf[megaco_globals.g_mg_cfg.mgCfg[_id].transport_prof_id].transport_type
#define GET_ENCODING_TYPE(_id) megaco_globals.g_mg_cfg.mgPeer.peers[megaco_globals.g_mg_cfg.mgCfg[_id].peer_id].encoding_type
#endif /* _MEGACO_CFG_H_ */ #endif /* _MEGACO_CFG_H_ */
...@@ -214,6 +214,7 @@ switch_status_t sng_parse_mg_peer_profile(switch_xml_t mg_peer_profile) ...@@ -214,6 +214,7 @@ switch_status_t sng_parse_mg_peer_profile(switch_xml_t mg_peer_profile)
} }
} }
megaco_globals.g_mg_cfg.mgPeer.total_peer++;
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
/***********************************************************************************************************/ /***********************************************************************************************************/
...@@ -125,23 +125,20 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_megaco_load) ...@@ -125,23 +125,20 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_megaco_load)
sng_event.mg.sng_mgco_sta_ind = handle_mgco_sta_ind; sng_event.mg.sng_mgco_sta_ind = handle_mgco_sta_ind;
sng_event.mg.sng_mgco_cntrl_cfm = handle_mgco_cntrl_cfm; sng_event.mg.sng_mgco_cntrl_cfm = handle_mgco_cntrl_cfm;
sng_event.mg.sng_mgco_audit_cfm = handle_mgco_audit_cfm; sng_event.mg.sng_mgco_audit_cfm = handle_mgco_audit_cfm;
/* Alarm CB */ /* Alarm CB */
sng_event.sm.sng_mg_alarm = handle_mg_alarm; sng_event.sm.sng_mg_alarm = handle_mg_alarm;
sng_event.sm.sng_tucl_alarm = handle_tucl_alarm; sng_event.sm.sng_tucl_alarm = handle_tucl_alarm;
/* Log */ /* Log */
sng_event.sm.sng_log = handle_sng_log; sng_event.sm.sng_log = handle_sng_log;
/* initalize sng_mg library */ /* initualize MEGACO stack */
sng_isup_init_gen(&sng_event); return sng_mgco_init(&sng_event);
return SWITCH_STATUS_SUCCESS;
} }
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_megaco_shutdown) SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_megaco_shutdown)
{ {
/* TODO: Kapil: Insert stack global shutdown code here */ sng_mgco_stack_shutdown();
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#define MOD_MEGACO_H #define MOD_MEGACO_H
#include <switch.h> #include <switch.h>
#include "megaco_cfg.h" #include "megaco_stack.h"
struct megaco_globals { struct megaco_globals {
switch_memory_pool_t *pool; switch_memory_pool_t *pool;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论