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

📄 loadconfig.cpp

📁 linux下开发的四国军旗源代码,包括客户端和服务器端
💻 CPP
字号:
//###################################################
//#Created: LIP
//#Description:	The load config file code for JunQi(four country)
//#OS :		linux.
//#My QQ number: 13066543
//#My e_mail: lip94101@btamail.net.cn
//###################################################
#include <string.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "cli_loadconfig.h"

extern char user_name_str[32];
extern char user_passwd_str[16];
extern char glb_svr_ip[16];
extern int  glb_svr_port;
extern char glb_self_ip[16];
extern int  glb_self_port;

char MarkerStr[MAX_MARKER_STR_NUM][32] = {
    "Config",
    "CONFIG",
    "config"
};

char KeyWordStr[MAX_KEYWORD_STR_NUM][32] = {
	"SvrIP",
	"SvrPort",
	"UserName",
	"UserPass",
	"SelfIP",
	"SelfPort"
};

char SymBolChr[4]={
	'[',			//left bracket
	']',			//right bracket
	'=',			//evaluate
	'#'				//remark
};

int CheckKeyStr(char *ihead,char *itail)
{
	int iType;
	char tmpKey[32];
	iType=-1;
	if(ihead!=NULL && itail!=NULL){
		while((*ihead ==' '||*ihead==9) && ihead<itail) ihead++;
		while((*itail ==' '||*itail==9) && itail>ihead) itail--;
		if(ihead<itail && itail-ihead<32-1){
			memset(tmpKey,'\0',32);
			strncpy(tmpKey,ihead,itail-ihead+1);
			for(int i=0;i<MAX_KEYWORD_STR_NUM;i++){
				if(!strcmp(tmpKey,KeyWordStr[i])){
					iType = i;
					break;
				}
			}
		}
	}
	return iType;
}
int CheckLineType(char *lineBuf)
{
	char *itailReturn,*iheadReturn,*iremarkReturn,*ievaluateReturn;//查找字符的指针
	int iLineType,iKeyStrType;
	iLineType = -1;
	
	iremarkReturn=strchr(lineBuf,SymBolChr[REMARK_FLAG]);
	if(iremarkReturn == lineBuf){
		iLineType =REMARK_LINE;
	}
	else{
		iheadReturn=strchr(lineBuf,SymBolChr[LEFT_BRACKET_FLAG]);
		itailReturn=strchr(lineBuf,SymBolChr[RIGHT_BRACKET_FLAG]);
		if((iheadReturn < itailReturn) && 
			((iremarkReturn >itailReturn)||(iremarkReturn==NULL))){
			iLineType = MARKER_LINE;
		}
		else if(((iheadReturn==NULL) && (itailReturn==NULL))
			||(iheadReturn>iremarkReturn && itailReturn >iremarkReturn)){
			ievaluateReturn=strchr(lineBuf,SymBolChr[EVALUATE_FLAG]);
			if((iremarkReturn==NULL || ievaluateReturn<iremarkReturn)
				&& ievaluateReturn!=NULL){
				iKeyStrType=CheckKeyStr(lineBuf,ievaluateReturn-1);
				if(iKeyStrType==-1){
					iLineType = NOKEY_EVALUATE_LINE;
				}
				else{
					iLineType = KEYWORD_EVALUATE_LINE;
				}
			}
		}
	}
	
	return iLineType;
}
int GetMarker(char *lineBuf)
{
	char *iheadReturn,*itailReturn,*iremarkReturn;
	char tmpMarkerKey[32];
	int iMarker;
	iMarker = -1;
	
	iremarkReturn=strchr(lineBuf,SymBolChr[REMARK_FLAG]);
	iheadReturn=strchr(lineBuf,SymBolChr[LEFT_BRACKET_FLAG]);
	itailReturn=strchr(lineBuf,SymBolChr[RIGHT_BRACKET_FLAG]);
	if((iheadReturn < itailReturn) && 
		((iremarkReturn >itailReturn)||(iremarkReturn==NULL))){
		iheadReturn++;
		itailReturn--;
		while((*iheadReturn==' '||*iheadReturn==9) && iheadReturn<itailReturn) iheadReturn++;
		while((*itailReturn==' '||*itailReturn==9) && itailReturn>iheadReturn) itailReturn--;
		if(iheadReturn<itailReturn && itailReturn-iheadReturn<32-1){
			memset(tmpMarkerKey,'\0',32);
			strncpy(tmpMarkerKey,iheadReturn,itailReturn-iheadReturn+1);
			for(int i=0;i<MAX_MARKER_STR_NUM;i++){
				if(!strcmp(tmpMarkerKey,MarkerStr[i])){
					iMarker = i;
					break;
				}
			}
		}
	}
	return iMarker;
}
int DoMS3_KE(char *lineBuf)
{
	int	iret;
	int	iKeyType;
	
	char myIP[32];
	char usr_str[32];
	int	myPort;

	char *ievaluate;
	ievaluate=strchr(lineBuf,SymBolChr[EVALUATE_FLAG]);
	
	if(ievaluate>0){
		iKeyType=CheckKeyStr(lineBuf,ievaluate-1);
		iret=0;
		switch(iKeyType){
		case KEYWORD_STR1:
			sscanf(ievaluate+1,"%s",myIP);
			memset(glb_svr_ip,0,sizeof(glb_svr_ip));
			strncpy(glb_svr_ip,myIP,16);
			printf("LoadData the Svr_IP is %s\n",myIP);
			break;
		case KEYWORD_STR2:
			sscanf(ievaluate+1,"%d",&myPort);
			glb_svr_port = 0;
			glb_svr_port = myPort;
			printf("LoadData the svr_port is %d\n",myPort);
			break;
		case KEYWORD_STR3:
			sscanf(ievaluate+1,"%s",usr_str);
			memset(user_name_str,0,sizeof(user_name_str));
			strncpy(user_name_str,usr_str,32);
			printf("LoadData the user name is %s\n",usr_str);
			break;
		case KEYWORD_STR4:
			sscanf(ievaluate+1,"%s",usr_str);
			memset(user_passwd_str,0,sizeof(user_passwd_str));
			strncpy(user_passwd_str,usr_str,16);
			printf("LoadData the user passwd is %s\n",usr_str);
			break;
		case KEYWORD_STR5:
			sscanf(ievaluate+1,"%s",myIP);
			memset(glb_self_ip,0,sizeof(glb_self_ip));
			strncpy(glb_self_ip,myIP,16);
			printf("LoadData the Self_IP is %s\n",myIP);
			break;
		case KEYWORD_STR6:
			sscanf(ievaluate+1,"%d",&myPort);
			glb_self_port = 0;
			glb_self_port = myPort;
			printf("LoadData the Self_port is %d\n",myPort);
			break;
		default:
			break;
		}
	}
	else {
		iret=-1;
	}
	return iret;
}

int	LoadConfig(char *filename)
{
	FILE *file;
	char lineBuf[256];
	int ilinecount;
	int iError;
	int	iLineType;
	int	iCurMarker;
	
	file = fopen(filename,"r");
	
	if(file ==NULL){
		printf("LoadConfig error!! file not found!\n");
		return -1;
	}
	ilinecount=0;
	iError=0;
	iCurMarker=-1;

	for(;!feof(file) && iError==0;) {
		memset(lineBuf,'\0',256);
		fgets((char *)lineBuf,256,file);
		ilinecount++;
		iLineType=CheckLineType(lineBuf);
		switch(iLineType){
		case	REMARK_LINE:
			break;
		case	MARKER_LINE:
			iCurMarker=GetMarker(lineBuf);
			break;
		case	KEYWORD_EVALUATE_LINE:
			switch(iCurMarker){
			case MARKER_STR1:
			case MARKER_STR2:
			case MARKER_STR3:
				if(DoMS3_KE(lineBuf)<0) iError=1;
				break;
			default:
				break;
			}
			break;
		case NOKEY_EVALUATE_LINE:
			break;
		default:
			break;
		}
	}//end of for,the file eof or error
	fclose(file);

	if(iError) return -1*iError;
	else
		return 0;
}
/*
int WriteBackConfig(char *filename)
{
	FILE *file;
	int ilinecount;
	char	trueStr[]="TRUE";
	char	falseStr[]="FALSE";
	file = fopen(filename,"w");
	
	if(file ==NULL){
		printf("WriteBackConfig error!! file not found!\n");
		return -1;
	}
	fprintf(file,"[Config]\n");
	fprintf(file,"OpenCAIP = %s		#This the Openca server IP.\n",pData->openca_IP);
	fprintf(file,"OutNetIP = %s		#This the OutNetIP IP.\n",pData->out_listen_IP);
	fprintf(file,"InNetIP = %s		#This the OutNetIP IP.\n",pData->in_listen_IP);
	fprintf(file,"FarManagerPort = %d			#This the FarManagerPort server port.\n",pData->FarManagerPort);
	fprintf(file,"RTP_MinPort = %d			#This the RTP_MinPort.\n",pData->RTP_MinPort);
	fprintf(file,"RTP_MaxPort = %d			#This the RTP_MaxPort.\n",pData->RTP_MaxPort);
	fprintf(file,"\n");

	fprintf(file,"[Flag]\n");
	fprintf(file,"LogLevel = %d			#The LogLevel.\n",pData->LogLevel);
	fprintf(file,"LogPath = %s			#This LogPath.\n",pData->LogPath);
	fprintf(file,"LogFileSize = %d			#The LogFileSize.\n",pData->LogFileSize);
	fprintf(file,"\n");
	fclose(file);
}
*/

/*
void main()
{
	LoadConfig("/home/oscvmna/config/config.txt");
}
*/

⌨️ 快捷键说明

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