Files
selfcare/proxy_c/main.c
2025-03-03 11:40:37 +08:00

199 lines
3.7 KiB
C

#include "rest_proxy.h"
#include "selfcare_proxy.h"
#include "log.h"
int sys_timer10ms;
static int proxy_run_mode = 0;
// ÔËÐÐģʽ
#define RUN_MODE_WITH_ALPOOCS 1 /* alpo_ocs<--restful-->restproxy<--udp-->pps */
#define RUN_MODE_WITH_ERSTFUL 2 /* user<------restful-->restproxy<--udp-->ocs */
#define RUN_MODE_WITH_CRM 4 /* user<--CRM--restful-->restproxy<--udp-->ocs, recharge card/tariff in CRM */
extern int dba_main(int argc, char **argv);
extern int smcli_client_thread(void *param);
extern int pstn_client_thread(void *param);
extern void _selfcare_udp_process();
extern void _selfcare_res_fsm(void);
int get_proxy_run_mode()
{
return proxy_run_mode;
}
int fsm_debug()
{
char buf[MAX_BUFFER];
if(cli_read_cmd(buf) == 0)
return 0;
if(strncasecmp(buf, "log off", 7) == 0)
{
g_log_env.log_flag = 0x00;
}
else if(strncasecmp(buf, "log all", 7) == 0)
{
g_log_env.log_flag = 0xff;
}
return 1;
}
int init_comm(const int log_flag, const char *log_file)
{
if(log_flag)
{
strcpy(g_log_env.log_file, log_file);
}
else
{
strcpy(g_log_env.log_file, "./log/log");
}
int ret = rest_proxy_open_log(0);
return ret;
}
int init_modes(int run_mode, int argc, char **argv)
{
int ret = SUCCESS;
pthread_t tid;
pthread_create(&tid, NULL, (void *)debug_monitor, NULL);
if(run_mode == RUN_MODE_WITH_ALPOOCS)
{
/* ³õʼ»¯rest proxy. alpo_ocs<-----restful_http-->rest_proxy<------udp----->pps */
ret = rest_proxy_init();
if(ret != SUCCESS)
{
return ret;;
}
}
if(run_mode == RUN_MODE_WITH_ERSTFUL || run_mode == RUN_MODE_WITH_CRM )
{
pthread_create(&tid, NULL, (void *)smcli_client_thread, NULL);
pthread_create(&tid, NULL, (void *)pstn_client_thread, NULL);
if(run_mode == RUN_MODE_WITH_CRM)
{
dba_main(0, NULL);
}
#if 1//def ENABLE_CRM_REST_AND_Z1
/* ³õʼ»¯selfcare proxy. self_care<-----restful_http----->rest_proxy<-----udp---->ocs */
ret = selfcare_proxy_init(argc, argv);
if(ret != SUCCESS)
{
return ret;;
}
#endif
}
return ret;
}
void run_modes_fsm(int run_mode)
{
if(run_mode == RUN_MODE_WITH_ALPOOCS)
{
rest_proxy_fsm_main();
}
fsm_debug();
}
int main(int argc, char **argv)
{
int ret;
int err_flag = 0;
char log_file[128]= {0};
int run_mode = RUN_MODE_WITH_ALPOOCS;
int log_flag = 0;
int daemon_flag = 0;
struct termios prev_termio;
while ((ret = getopt(argc, argv, "a:d:f:r:e")) != -1)
{
switch (ret)
{
case 'd':
daemon_flag = 1;
break;
case 'f':
if(optarg != NULL)
{
log_flag = 1;
strcpy(log_file, optarg);
}
break;
case 'r':
if(optarg != NULL)
{
run_mode = atoi(optarg) ;//== RUN_MODE_WITH_ERSTFUL ? RUN_MODE_WITH_ERSTFUL : RUN_MODE_WITH_ALPOOCS;
}
break;
case '?':
err_flag = 1;
break;
}
}
if (err_flag)
{
printf("Usage: %s -c restproxy [-f /va/log/sgs_log_file.txt] [-d] [-r 1(with alpo ocs))|2(with selfcare)]\n", argv[0]);
exit(1);
}
proxy_run_mode = run_mode;
if(daemon_flag)
{
sysDaemonInit();
}
SetTermSignal(&prev_termio, Terminate);
SigactionSystem();
SetFSMTimer();
ret = init_comm(log_flag, log_file);
if(ret != 0)
{
goto INITFAIL;
}
ret = init_modes(run_mode, argc, argv);
if(ret != 0)
{
goto INITFAIL;
}
sys_timer10ms = 1;
while(1)
{
if(sys_timer10ms)
{
run_modes_fsm(run_mode);
}
if(0)
{
_selfcare_udp_process();
_selfcare_res_fsm();
}
usleep(5000);
}
INITFAIL:
rest_proxy_uninit();
selfcare_proxy_uninit();
return 0;
}