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

📄 rcfile.c

📁 一款基于GTK的internet phone 程序。程序分为服务器端和客户端两部分。服务器端维护用户的IP
💻 C
字号:
#include "phone.h"#define HOMEENV "HOME"#define USERENV "USER"#define RCNAME ".phonerc"struct alias *aliaslist=0;static int inleft;static unsigned char inbuff[256],*inpoint;static int infile;static void initread(int f){	inleft=0;	infile=f;}static int ci(void){	if(!inleft)	{		inleft=read(infile,inbuff,sizeof(inbuff));		inpoint=inbuff;	}	if(inleft<=0) return -1;	--inleft;	return *inpoint++;}int getline(char *put,int len){int n;int ch;	n=0;	while(len>1)	{		ch=ci();		if(ch<0) break;		++n;		if(ch=='\n') break;		*put++=ch;		--len;	}	*put=0;	return n;}void addalias(char *from,char *to){struct alias *analias;	analias=malloc(sizeof(struct alias));	if(!analias)	{		printf("Failed to allocate memory for an alias...\n");		nomem(1123);	}	analias->next=aliaslist;	strcpy(analias->from,from);	strcpy(analias->to,to);	aliaslist=analias;}void listaliases(void){struct alias *analias;	analias=aliaslist;	while(analias)	{		printf("%s -> %s\n",analias->from,analias->to);		analias=analias->next;	}}char *findalias(char *s){struct alias *analias;	analias=aliaslist;	while(analias)	{		if(!strcmp(analias->from,s)) break;		analias=analias->next;	}	if(!analias) return 0;	return analias->to;}int hexdigit(char c){	if(c>='0' && c<='9') return c-'0';	if(c>='a' && c<='f') return c-'a'+10;	if(c>='A' && c<='F') return c-'A'+10;	return -1;}void getkey(char *s){int n;int i;unsigned char temp[KEYSIZE+1];	memset(temp,0,KEYSIZE);	while((n=hexdigit(*s++))>=0)	{		temp[KEYSIZE]=n<<4;		for(i=0;i<KEYSIZE;++i)			temp[i]=(temp[i]<<4) | (temp[i+1]>>4);	}	memcpy(mykey,temp,KEYSIZE);}void scanrcfile(char *rcname){char *s;char name[256];char directive[64];char data1[MAXNAMESIZE];char data2[MAXNAMESIZE];int f;	if(!rcname)	{		s=getenv(HOMEENV);		if(!s)		{			printf("Could not get %s environment variable\n",HOMEENV);			return;		}		sprintf(name,"%s/%s",s,RCNAME);	} else	{		strncpy(name,rcname,sizeof(name)-1);		name[sizeof(name)-1]=0;	}	if(s=getenv(USERENV))	{		strncpy(username,s,sizeof(username)-1);		username[sizeof(username)-1]=0;	} else	{		sprintf(username,"nobody-%d",rand()&0xffff);	}	f=open(name,O_RDONLY);	if(f<0)	{		printf("Could not open rcfile %s\n",name);		return;	}	initread(f);	while(getline(name,sizeof(name)))	{		s=name;		token(directive,sizeof(directive),&s);		if(!strcmp(directive,"user"))		{			token(username,sizeof(username),&s);		} else if(!strcmp(directive,"pass"))		{			token(data1,sizeof(data1),&s);			getkey(data1);		} else if(!strcmp(directive,"alias"))		{			token(data1,sizeof(data1),&s);			token(data2,sizeof(data2),&s);			addalias(data1,data2);		}	}	close(f);}

⌨️ 快捷键说明

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