📄 server.c
字号:
#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#include <unistd.h>#include <netdb.h>#include <sys/stat.h>#include <arpa/inet.h>#include <sys/time.h>#include <sys/resource.h>#include <mysql.h>#include <public.h>#include <sys/epoll.h>#include "pthread.h"#include "server.h"//#include <syslog.h>#define MAXEPOLLSIZE 10000#define THREAD_MAX 10#define SERVER_IP "192.168.1.200"#define SERVER_PORT 9000typedef struct { char ip4[128]; int port; int fd;}LISTEN_INFO;static LISTEN_INFO s_listen;static unsigned int s_thread_para[THREAD_MAX][8];static pthread_t s_tid[THREAD_MAX];static MYSQL s_mysql[THREAD_MAX];pthread_mutex_t s_mutex[THREAD_MAX];static int init_thread_pool(void);static int init_mysql_conn_pool(void);static int init_listen4(char *ip4,int port,int max_link);int vercmp(char * s1,char * s2){ int i; if (strlen(s1)<strlen(s2)) return (-1); else if(strlen(s1)>strlen(s2)) return (1); else { for(i=0;i<strlen(s1);i++) { if((*s1)<(*s2)) { return (-1); } else if((*s1)>(*s2)){ return (1); } s1++; s2++; } return (0); }}int query_conf_file(char * buf , const char * conf_filename , const char * section_str){ FILE * conf_file; char tpstr[300]=""; char section[30]=""; conf_file=fopen(conf_filename,"r"); if(NULL!=conf_file) { while(fgets(tpstr,sizeof(tpstr),conf_file)) { sscanf(tpstr,"%s %s",section,buf); if(0==strcmp(section_str,section)) break; } fclose(conf_file); return (0); }else { lprintf(logd,ERROR,"open file %s fault!",conf_filename); } return (-1);}int do_db_write_work(MYSQL *p_mysql,char * sqlstr){ int res; res=mysql_query(p_mysql,sqlstr); if (res) { lprintf(logd,ERROR,"database operate error with sql:%s\n",sqlstr); return (-1); } return (0);}int query_soft_ver(char * buf){ return query_conf_file(buf ,"lfsys.conf","soft_ver");}int query_soft_path(char * buf){ return query_conf_file(buf,"lfsys.conf","soft_path");}int set_curr_client_soft_ver(MYSQL *p_mysql,char * ver,char * client_id){ char sqlstr[250]=""; sprintf(sqlstr,"update edi_client set curr_client_soft_ver=%s where id=%s",ver,client_id); return do_db_write_work(p_mysql,sqlstr);}int query_mat_ver(MYSQL * p_mysql,char * buf, char * build_id){ MYSQL_RES * result; MYSQL_ROW row; char sqlstr[250]=""; sprintf(sqlstr,"select mat_ver from edi_build where id=%s",build_id); if(0!=mysql_real_query(p_mysql,sqlstr,strlen(sqlstr))) { lprintf(logd,ERROR,"Error in query:%s\n",mysql_error(p_mysql)); return (-1); } result=mysql_store_result(p_mysql); if (1!=(mysql_num_rows(result))) { lprintf(logd,ERROR,"query error,result number not unique!"); return (-1); } row=(mysql_fetch_row)(result); sprintf(buf,"%s",row[0]); mysql_free_result(result); return (0);}int query_mat_path(MYSQL *p_mysql,char * buf , char * build_id){ MYSQL_RES * result; MYSQL_ROW row; char sqlstr[250]=""; sprintf(sqlstr,"select mat_path from edi_build where id=%s",build_id); if(0!=mysql_real_query(p_mysql,sqlstr,strlen(sqlstr))) { lprintf(logd,ERROR,"Error in query:%s\n",mysql_error(p_mysql)); return (-1); } result=mysql_store_result(p_mysql); if (1!=(mysql_num_rows(result))) { lprintf(logd,ERROR,"query error,result number not unique!"); return (-1); } row=(mysql_fetch_row)(result); sprintf(buf,"%s", row[0]); mysql_free_result(result); return (0);}int set_curr_client_mat_ver(MYSQL * p_mysql,char * ver,char * client_id){ char sqlstr[250]=""; sprintf(sqlstr,"update edi_client set curr_client_mat_ver=%s where id=%s",ver,client_id); return do_db_write_work(p_mysql,sqlstr);}int query_client_refuse_list_ver(MYSQL *p_mysql,char * buf , char * client_id){ MYSQL_RES * result; MYSQL_ROW row; char sqlstr[250]=""; sprintf(sqlstr,"select refuse_list_ver from edi_client where id=%s",client_id); if(0!=mysql_real_query(p_mysql,sqlstr,strlen(sqlstr))) { lprintf(logd,ERROR,"Error in query:%s\n",mysql_error(p_mysql)); return (-1); } result=mysql_store_result(p_mysql); if (1!=(mysql_num_rows(result))) { printf("query error!"); return (-1); } row=(mysql_fetch_row)(result); sprintf(buf,"%s", row[0]); mysql_free_result(result); return 0;}int query_client_refuse_list(MYSQL *p_mysql,char * buf , char * client_id){ MYSQL_RES * result; MYSQL_ROW row; char sqlstr[250]=""; sprintf(sqlstr,"select refuse_list from edi_client where id=%s",client_id); if(0!=mysql_real_query(p_mysql,sqlstr,strlen(sqlstr))) { lprintf(logd,ERROR,"Error in query:%s\n",mysql_error(p_mysql)); return (-1); } result=mysql_store_result(p_mysql); if (1!=(mysql_num_rows(result))) { lprintf(logd,ERROR,"query error,result not unique!"); return (-1); } row=(mysql_fetch_row)(result); sprintf(buf,"%s", row[0]); mysql_free_result(result); return (0);}int set_curr_client_refuse_list_ver(MYSQL *p_mysql,char * ver,char * client_id){ char sqlstr[250]=""; sprintf(sqlstr,"update edi_client set curr_client_refuse_list_ver=%s where id=%s",ver,client_id); return do_db_write_work(p_mysql,sqlstr);}int query_client_cmd_shell_ver(MYSQL *p_mysql,char * buf,char * client_id){ MYSQL_RES * result; MYSQL_ROW row; char sqlstr[250]=""; sprintf(sqlstr,"select client_cmd_shell_ver from edi_client where id=%s",client_id); if(0!=mysql_real_query(p_mysql,sqlstr,strlen(sqlstr))) { lprintf(logd,ERROR,"Error in query:%s\n",mysql_error(p_mysql)); return (-1); } result=mysql_store_result(p_mysql); if (1!=(mysql_num_rows(result))) { lprintf(logd,ERROR,"query error,result not unique!"); return (-1); } row=(mysql_fetch_row)(result); sprintf(buf,"%s",row[0]); mysql_free_result(result); return (0);}int query_client_cmd_shell_path(MYSQL *p_mysql,char * buf,char * client_id){ MYSQL_RES * result; MYSQL_ROW row; int rownum; char sqlstr[250]=""; sprintf(sqlstr,"select client_cmd_shell_path from edi_client where id=%s",client_id); if(0!=mysql_real_query(p_mysql,sqlstr,strlen(sqlstr))) { lprintf(logd,ERROR,"Error in query:%s\n",mysql_error(p_mysql)); return (-1); } result=mysql_store_result(p_mysql); rownum=mysql_num_rows(result); if (1!=rownum) { lprintf(logd,ERROR,"query error,result not unique!"); return (-1); } row=(mysql_fetch_row)(result); sprintf(buf,"%s",row[0]); mysql_free_result(result); return (0);}int set_curr_client_cmd_shell_ver(MYSQL *p_mysql,char * ver,char * client_id){ char sqlstr[250]=""; sprintf(sqlstr,"update edi_client set curr_client_cmd_shell_ver=%s where id=%s",ver,client_id); return do_db_write_work(p_mysql,sqlstr);}int set_client_online_ip_port_and_time(MYSQL *p_mysql,char * client_id,char * ip,int port){ char sqlstr[250]=""; sprintf(sqlstr,"update edi_client set ip=%s,port=%d,time=now() where id=%s",ip,port,client_id); return do_db_write_work(p_mysql,sqlstr);}int do_check_soft_ver(const msg_client * msg,struct MSG_SERVER * p_to_client_msg,int * need_sendto_client){ char ver_in_client[50] = "",client_id[12] = ""; char ver_in_server[50] = ""; char soft_path[255] = ""; sprintf( ver_in_client,"%s",msg->ver ); sprintf( client_id,"%s",msg->head.terminal_id ); if (0 != (query_soft_ver(ver_in_server))) { lprintf(logd,ERROR,"client:'%s' query soft ver fault !\n",client_id); return (-1); } if (-1!=vercmp(ver_in_client,ver_in_server)) { lprintf( logd,INFO,"client:'%s' not need update software !\n",client_id ); return (-1); } if (0!=(query_soft_path(soft_path))) { lprintf(logd,ERROR,"client:'%s' query software path fault !\n",client_id); return (-1); } memcpy(&p_to_client_msg->head,&msg->head,sizeof(struct MSG_HEAD)); sprintf(p_to_client_msg->ver,"%s",ver_in_server); p_to_client_msg->need_upt_soft=1; sprintf(p_to_client_msg->path,"%s",soft_path); *need_sendto_client=1; return (0); }int do_check_mat_ver(MYSQL * p_mysql,const msg_client * msg,struct MSG_SERVER * p_to_client_msg,int * need_sendto_client){ char ver_in_client[50]="",client_id[12]="",client_build_id[12]=""; char ver_in_server[50]=""; char mat_path[255]=""; sprintf(ver_in_client,"%s",msg->ver); sprintf(client_id,"%s",msg->head.terminal_id); sprintf(client_build_id,"%s",msg->head.build_id); if (0!=(query_mat_ver(p_mysql,ver_in_server,client_build_id))) { lprintf(logd,ERROR,"client:'%s' query mat ver fault !"); return (-1); } if (-1!=vercmp(ver_in_client,ver_in_server)) {#ifdef DEBUG lprintf(logd,DEBUG,"client:'%s' not need update mat !");#endif return (-1); } if(0!=(query_mat_path(p_mysql,mat_path,client_build_id))) { lprintf(logd,ERROR,"client:'%s' query mat path fault !"); return (-1); } memcpy(&p_to_client_msg->head,&msg->head,sizeof(struct MSG_HEAD)); p_to_client_msg->need_upt_mat=1; sprintf(p_to_client_msg->path,"%s",mat_path); *need_sendto_client=1; return 0; }int do_check_refuse_list(MYSQL *p_mysql,const msg_client * msg,struct MSG_SERVER * p_to_client_msg,int * need_sendto_client)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -