📄 cmdsock.c
字号:
#include <stdio.h>#include <string.h>#include <sys/types.h>#include <errno.h>#include <signal.h>#include <sys/wait.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <stdlib.h>#include "cmddef.h"#include "macpool.h"#include "socksystem.h"#include "pthread.h"#include "hardview.h"#include "jcrypt.h"#include "msg.h"#include "opepool.h"#include "opepipe.h"#include "global.h"#define RAND_NUM 32#define MAC_NUM 12#define SERVICE_NUM 6#define CHKSERVER { if(serverType==SERVEREXT) break; }void handleRequest(void *sock);void cmdsockhandle(int listensock){ int worksock; pthread_t mythread; worksock=acceptSock(listensock); if(worksock>0) { pthread_create(&mythread,NULL,(void*)&handleRequest,(void*)&worksock); usleep(300); } else usleep(500);}#define CMDOK { char cmdSt; cmdSt=cmdRECIEVE; writeSock(worksock,&cmdSt,1); }void handleRequest(void *sock){ int *tsock; int worksock; char checkstep=0; short checkFail=0; char cmdtype=0; unsigned char buf[RAND_NUM]; unsigned char rbuf[RAND_NUM/2]; short totalNum; pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL); tsock=(int*)sock; worksock=*tsock; while(1) { int cmdlen; cmdlen=readSock(worksock,&cmdtype,1); if(cmdlen<0) { closeSock(worksock); goto exitRequestLoop; } switch(cmdtype) { case cmdGAMERENAME: case cmdGAMEDELETE: { char filename[64]; char cmdBuf[128]; CMDOK; readSock(worksock,filename,64); if(cmdtype==cmdGAMERENAME) sprintf(cmdBuf,"rename /media/game/%s /media/game/%s.del /media/game/%s",filename,filename,filename); else { if(filename[0]=='*') sprintf(cmdBuf,"rm -f /media/game/hdb/*.del /media/game/hdc/*.del /media/game/hdd/*.del"); else sprintf(cmdBuf,"rm -f /media/game/%s",filename); } system(cmdBuf); } break; case cmdGAMEFTPOK: { char filename[64]; char cmdBuf[128]; CMDOK; readSock(worksock,filename,64); sprintf(cmdBuf,"autoftp.sh %s &",filename); system(cmdBuf); } break; case cmdCHKCRYPT: CHKSERVER readSock(worksock,buf,RAND_NUM); //加密验证 cryptCard("/dev/systemcard",buf,rbuf); writeSock(worksock,rbuf,RAND_NUM/2); checkstep++; break; case cmdGETNUM: { CHKSERVER { char ipaddr[16]; readSock(worksock,buf,MAC_NUM); buf[MAC_NUM]=0; getPeerIp(worksock,ipaddr); checkFail=addToPool(buf,ipaddr); if(checkFail!=0) { cmdHead cmdInfo; poolGetMIp(ipaddr,0); if(ipaddr[0]!=0) tellManage(ipaddr,8018); cmdInfo.cmdType=cmdTERMEVENT; cmdInfo.cmdLen=0; writePipe((char*)&cmdInfo,sizeof(cmdInfo)); } writeSock(worksock,(char*)&checkFail,2); } break; } case cmdREGMANAGE: { CHKSERVER CMDOK readSock(worksock,buf,16); addMIpToPool(buf); break; } case cmdCHKTERM: { CHKSERVER { int i; macPoolDef macPool; CMDOK for(i=0;i<totalNum;i++) { viewPool(&macPool,i); writeSock(worksock,(char*)&macPool, sizeof(macPool)); } } break; } case cmdMAINTERM: { CHKSERVER { short macID; CMDOK readSock(worksock,(char*)&macID,2); if(poolMaintain(macID)==1) { cmdHead cmdInfo; cmdInfo.cmdType=cmdTERMEVENT; cmdInfo.cmdLen=0; writePipe((char*)&cmdInfo,sizeof(cmdInfo)); checkFail=1; } else checkFail=0; writeSock(worksock,(char*)&checkFail,2); } break; } case cmdDELTERM: { CHKSERVER { short macID; char cmdBuf; CMDOK; readSock(worksock,(char*)&macID,2); if(delFromPool(macID)==0) checkFail=0; else { checkFail=1; cmdBuf=(char)cmdTERMEVENT; writePipe(&cmdBuf,1); } writeSock(worksock,(char*)&checkFail,2); } break; } case cmdCHKDISK: { diskVolume diskV; CMDOK readDisk(&diskV); writeSock(worksock,(char*)&diskV,sizeof(diskV)); break; } case cmdCHKSERVICE: { int readn; CMDOK readn=readService(buf); if(readn>7) readn=7; writeSock(worksock,buf,readn); break; } case cmdREBOOTSERVER: closeSock(worksock); system("reboot &"); goto exitRequestLoop; case cmdCLOSESERVER: closeSock(worksock); system("halt.sh &"); goto exitRequestLoop; case cmdOVER: closeSock(worksock); goto exitRequestLoop; default: cmdtype=cmdUNKNOWN; writeSock(worksock,&cmdtype,1); } }exitRequestLoop:#if DEBUG printf("exit work thread...\n\n\n");#endif pthread_cancel(pthread_self()); pthread_exit(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -