235 lines
5.2 KiB
C
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);
|
|
}
|
|
}
|