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

235 lines
5.2 KiB
C

#include "common.h"
#include "rest_proxy.h"
#define DEBUG_PORT 4865
static int sockfd = 0;
static int client_fd = -1;
extern int init_socket(unsigned int local_addr, short local_port, char stype, int noblock_flag);
extern int setnodelay(int fd);
extern int printf_stat(FILE *fd);
extern int reset_data_sn();
extern void rest_proxy_print_stat();
extern int dba_verify_vc_with_pwd(const char *vc_pwd, char card_info[][1024], char *enc_password);
extern int dba_db_sql_query_only_execute_real(const char *sql, char result[][1024], int MAX_ROWS, int MAX_FIELDS );
extern void crm_set_notificaton_flag(int flag);
extern void crm_set_test_mode_flag(int flag);
char cli_cmd[128];
int cli_cmd_len = 0;
int cli_read_cmd(char *buf)
{
int len = cli_cmd_len;
if(len>0)
strcpy(buf, cli_cmd);
cli_cmd_len = 0;
return len;
}
int cli_send_debug(char *buf)
{
if(buf != NULL)
send(client_fd,buf,strlen(buf),MSG_NOSIGNAL);
return 1;
}
int save_cli_cmd(char *cmd)
{
strcpy(cli_cmd, cmd);
cli_cmd_len = strlen(cmd);
return 1;
}
#ifdef TEST_RESTPROXY
extern int g_pps_sendquery_to_restproxy_num;
extern int g_pps_sendtopup_to_restproxy_num;
extern int g_pps_sendtrans_to_restproxy_num;
#endif
int recv_command()
{
int i = 0;
socklen_t server_addr_len = 0;
int nbytes/*, len*/;
struct sockaddr_in sin;
char buf[128],cmd;
FILE *fp = NULL;
// len = sizeof(struct sockaddr);
nbytes = recvfrom(client_fd, buf, 128, 0,(struct sockaddr *) &sin, &server_addr_len);
if(nbytes == 0)
{
client_fd = -1;
return 0;
}
if(nbytes < 0)
return 0;
if(toupper(buf[0]) == 'Q')
{
close(client_fd);
client_fd = -1;
return 0;
}
save_cli_cmd(buf);
// send(client_fd,">",1,MSG_NOSIGNAL);
// return 1;
for(i = 0; i < nbytes; ++i)
{
if(buf[i] == '\r' && buf[i+1] == '\n')
{
buf[i] = '\0';
}
}
if(strncasecmp(buf, "test query", 10) == 0)
{
send(client_fd, ">test query OK!\n", 16, MSG_NOSIGNAL);
#ifdef TEST_RESTPROXY
if(!g_pps_sendquery_to_restproxy_num)
g_pps_sendquery_to_restproxy_num = atoi(&buf[11]);
#endif
goto END;
}
if(strncasecmp(buf, "test topup", 10) == 0)
{
send(client_fd, ">test topup OK!\n", 16, MSG_NOSIGNAL);
#ifdef TEST_RESTPROXY
if(!g_pps_sendtopup_to_restproxy_num)
g_pps_sendtopup_to_restproxy_num = atoi(&buf[11]);
#endif
goto END;
}
if(strncasecmp(buf, "test transfer", 13) == 0)
{
send(client_fd, ">test transfer OK!\n", 19, MSG_NOSIGNAL);
#ifdef TEST_RESTPROXY
if(!g_pps_sendtrans_to_restproxy_num)
g_pps_sendtrans_to_restproxy_num = atoi(&buf[14]);
#endif
goto END;
}
if(strncasecmp(buf, "emu enable=", 11) == 0)
{
int ivalue = atoi(&buf[11]);
if(ivalue == 0)
send(client_fd, ">Disable Emulator, OK!\n", 23, MSG_NOSIGNAL);
else
send(client_fd, ">Enable Emulator, OK!\n", 22, MSG_NOSIGNAL);
rest_conf_set_emulator_flag(ivalue);
goto END;
}
if(strncasecmp(buf, "get stat", 8) == 0)
{
rest_proxy_print_stat();
send(client_fd, ">get stat OK!\n", 15, MSG_NOSIGNAL);
goto END;
}
if(strncasecmp(buf, "test card=", 10) == 0)
{
dba_verify_vc_with_pwd(&buf[10], NULL, NULL);
send(client_fd, ">get stat OK!\n", 15, MSG_NOSIGNAL);
goto END;
}
if(strncasecmp(buf, "test query", 10) == 0)
{
char sql[4096]="select * from tb_sms_info limt 1";
char result[30][1024];
dba_db_sql_query_only_execute_real(sql, result, 1, 30);
send(client_fd, ">test tariff query OK!\n", 15, MSG_NOSIGNAL);
goto END;
}
if(strncasecmp(buf, "enable notification", 19) == 0)
{
crm_set_notificaton_flag(1);
goto END;
}
if(strncasecmp(buf, "disable notification", 20) == 0)
{
crm_set_notificaton_flag(0);
goto END;
}
if(strncasecmp(buf, "test mode=", 10) == 0)
{
crm_set_test_mode_flag((int)(buf[10]));
send(client_fd, ">set test mode OK!\n", 15, MSG_NOSIGNAL);
goto END;
}
if(nbytes>0)
{
cmd = toupper(buf[0]);
switch(cmd)
{
case 'P':
fp = fopen("stat.txt","w");
// printf_stat(fp);
send(client_fd,">OK!\n",4,MSG_NOSIGNAL);
fclose(fp);
break;
case 'S':
send(client_fd,">OK!\n",4,MSG_NOSIGNAL);
// reset_data_sn();
break;
case 'Q':
close(client_fd);
client_fd = -1;
break;
/*
default:
send(client_fd,">UNK CMD!\n",15,MSG_NOSIGNAL);
send(client_fd,">",6,MSG_NOSIGNAL);
break;
*/
}
send(client_fd,">",1,MSG_NOSIGNAL);
}
END:
return nbytes;
}
int debug_init()
{
sockfd = init_socket(0, DEBUG_PORT,1,1);
listen(sockfd, 2);
return 1;
}
void debug_monitor(void *arg)
{
prctl(PR_SET_NAME, "debug_monitor");
socklen_t clilen;
struct sockaddr_in cliaddr;
debug_init();
while(1)
{
if(client_fd<0)
{
client_fd = accept(sockfd,(struct sockaddr *)&cliaddr,&clilen);
if(client_fd>0)
{
setnodelay(client_fd);
send(client_fd, ">", 1, MSG_NOSIGNAL);
}
}
else
{
recv_command();
}
usleep(10000);
}
}