⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmdsock.c

📁 公关系统服务器后台程序
💻 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 + -