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

📄 gwconsole.cpp

📁 SMS gateway. SMS protocol for CHINA mobile, unicom, lingtong. Using mysql to exchange message.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/**********************************************************************  FileName            : GWconsole.cpp  Description         : 网关控制台模块  Version             : 1.0  Date                : 2003年6月17日  Author              : 刘荣辉  Other               : ***********************************************************************/#include "GateWay.h"#define COMMAND_LIST "Input your Command as follows:\					\necho       : To test the connection\					\nlist       : To list out commands that can be used\					\ngwconfig   : To reload the Gateway's configuration from ini file\					\nupconfig   : To reload the Gateway's configuration from ini file\					\ndnconfig   : To reload DnNode's information from database\					\nupalive    : To list out alive UpNodes\					\ndnalive    : To list out alive DnNodes\					\ncheckQ %d  : To check queues of a Node, whose NodeID is %d\					\ncheckallQ  : To check queues of all Nodes\					\nSTOP       : To terminate Proxy Gateway\					\nquit       : To quit this Administrator's console."void * CGateWay::Console(void * pGateway){	char sSysEvent[SYS_EVENT_LEN];	int RetCode;    TCPsocket AdminSock;	char Command[256];	int Login;	char Message[1024];	struct sockaddr_in clientip;	int  mysock,iplen;	int BadCommand;	CGateWay *Gateway = (CGateWay *)pGateway;    int threadid = pthread_self();    pthread_detach(threadid);    sprintf(sSysEvent,"LOG: Console[%d] for Gateway is started.",threadid);    Gateway->WrSystemLog->WriteLog(sSysEvent,SYSTEMLOG);    //写系统日志	while(1)	{		//打开监听管理命令监听端口		AdminSock.SetTimeOut(180);	//远程管理连接连续3分钟不发送命令,则自动关闭连接		RetCode=AdminSock.Make_Listen_Sock(Gateway->GWIp, Gateway->AdminPort);		if(RetCode<=0)		{			AdminSock.Close_sock();			printf("Error[%d]: Console Failed to Listen at [%s : %d].\n",RetCode,Gateway->GWIp, Gateway->AdminPort);			Gateway->WrSystemLog->WriteLog(sSysEvent,SYSTEMLOG);    //写系统日志			return (void *)NULL;		}		#ifdef DEBUG		printf("\n AdminUser=[%s], AdminPass=[%s], Socket=[%d]\n",Gateway->AdminUser,Gateway->AdminPass, AdminSock.sock);		#endif		iplen=sizeof(clientip);				for(;;)	//接收管理连接,接受执行命令		{			sprintf(sSysEvent,"LOG: Console for Gateway is Listening at [%s : %d] for new connection...",Gateway->GWIp, Gateway->AdminPort);			Gateway->WrSystemLog->WriteLog(sSysEvent,SYSTEMLOG);    //写系统日志			mysock=accept(AdminSock.sock,(struct sockaddr *)&clientip,(socklen_t *)&iplen);			if(Gateway->ToExit)	//检查系统退出标志			{				close(mysock);				goto ConsoleEnd;			}			if(mysock<0)			{				close(mysock);				AdminSock.Close_sock();				break;	//重新建立新的管理连接监听套接字			}			sprintf(sSysEvent,"LOG: Console Got connection from [%s].\n",(char *)inet_ntoa(clientip.sin_addr));			Gateway->WrSystemLog->WriteLog(sSysEvent,SYSTEMLOG);    //写系统日志						//设置socket的最大阻塞时间,3分钟没有收到任何信息便断开连接?????			//或设置socket为非阻塞,在程序中计时????			Login=0;			for(int i=0;i<3;i++)	//三次机会输入登录信息			{				memset(Command,0,sizeof(Command));				memset(Message,0,sizeof(Message));				strcpy(Message,"Input your login authentication: ");				if(write(mysock,Message,strlen(Message))!=(int)strlen(Message))				{					 printf("SysAdmin: Connection Lost when Writing to Sock!\n");					 break;				}				RetCode=read(mysock, Command ,sizeof(Command));				if(RetCode<=0)				{					close(mysock);					printf("SysAdmin: Connection Lost When reading on Sock.\n");					break;				}				printf("\n SysAdmin: Got Command=[%s].\n",Command);				if(strcmp(Command,Gateway->AdminPass)==0)				{					Login=1;					break;				}				//else printf("\n SysAdmin: Bad Login! \n");			}			if(Login)			{				strcpy(Message, "Logined successfully!\n");				strcat(Message, COMMAND_LIST);				if(write(mysock,Message,strlen(Message))!=(int)strlen(Message))				{					 printf("SysAdmin: Connection Lost when Writing to Sock!\n");					 close(mysock);					 continue;				}				sprintf(sSysEvent,"LOG: Console Got good Login.\n");				Gateway->WrSystemLog->WriteLog(sSysEvent,SYSTEMLOG);    //写系统日志			}			else	//登录失败			{				strcpy(Message,"Logined Failed! Connection is Lost!");				write(mysock,Message,strlen(Message));				close(mysock);				sprintf(sSysEvent,"LOG: Console Got bad Login from [%s].\n",(char *)inet_ntoa(clientip.sin_addr));				Gateway->WrSystemLog->WriteLog(sSysEvent,SYSTEMLOG);    //写系统日志				continue;			}			BadCommand = 0;			while(1)	//不断接收命令			{				memset(Command,0,sizeof(Command));				RetCode=read(mysock, Command ,sizeof(Command));				if(RetCode<=0)				{					close(mysock);					printf("SysAdmin: Connection Lost When reading on Sock.\n");					break;				}				sprintf(sSysEvent,"LOG: Console Got Command=[%s].\n",Command);				Gateway->WrSystemLog->WriteLog(sSysEvent,SYSTEMLOG);    //写系统日志								//===================返回连接存活回应信息===================				if(strcmp(Command,"echo")==0)				{					//memset(Message,0,sizeof(Message));					strcpy(Message,"echo! Connection is ok!");					if(write(mysock,Message,strlen(Message))!=(int)strlen(Message))					{						 printf("SysAdmin: Connection Lost when Writing to Sock!\n");						 close(mysock);						 break;					}				}				//======================返回命令列表======================				else if(strcmp(Command,"list")==0)				{					//memset(Message,0,sizeof(Message));					strcpy(Message,COMMAND_LIST);					if(write(mysock,Message,strlen(Message))!=(int)strlen(Message))					{						 printf("SysAdmin: Connection Lost when Writing to Sock!\n");						 close(mysock);						 break;					}				}				/*/==================安全地停止网关系统的运行==================				else if(strcmp(Command,"STOP")==0)				{					close(mysock);					pthread_kill(Gateway->MainThr, SIGINT);					goto ConsoleEnd;					break;				}*/				//=================从文件中重新装载网关的配置===============				else if(strcmp(Command,"gwconfig")==0)				{					Gateway->GetParam();					strcpy(Message,"Gateway's configuration is reloaded from ini file!");					if(write(mysock,Message,strlen(Message))!=(int)strlen(Message))					{						 printf("SysAdmin: Connection Lost when Writing to Sock!\n");						 close(mysock);						 break;					}				}				//===============从文件中重新装载所有上节点的配置=============				else if(strcmp(Command,"upconfig")==0)				{					for(int i=0; i<UPNODE_NUM; i++)					{						RetCode = Gateway->UpNode[i].GetParam(Gateway->UpNode_IniFile[i]);						if(RetCode)						{						   sprintf(Message,"Error[%d]: Failed to load Parameters of UpNode[%s].",RetCode,Gateway->UpNode[i].NodeCode);						   Gateway->WrSystemLog->WriteLog(sSysEvent,SYSTEMLOG);						}						else							strcpy(Message,"UpNodes' configuration is reloaded from ini file!");					}					if(write(mysock,Message,strlen(Message))!=(int)strlen(Message))					{						 printf("SysAdmin: Connection Lost when Writing to Sock!\n");						 close(mysock);						 break;					}				}				//===============从数据库中重新装载所有下节点的信息============				else if(strcmp(Command,"dnconfig")==0)				{					Gateway->DnNodeNum = Gateway->MyDB->GetDnNodeInfo(Gateway->CP_Array,MAX_DNNODE);					if(Gateway->DnNodeNum > MAX_DNNODE)					{						 Gateway->DnNodeNum = MAX_DNNODE;						 sprintf(sSysEvent,"Warning: DownNode records in Database is [%d],while MAX_DNNODE=[%d].",RetCode,MAX_DNNODE);						 Gateway->WrSystemLog->WriteLog(sSysEvent,SYSTEMLOG); 					}					//修改Code_CP_Map中的下节点对象信息					for(int Num=0;Num<Gateway->DnNodeNum;Num++)					{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -