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

📄 scrapit.c

📁 radius协议源码÷The Radius Stack will connect to a Radius Server. This stack implementation is built upo
💻 C
字号:
#include "scrapi.h"#include <netdb.h>#include <stdio.h>#include <unistd.h>#include <strings.h>#ifndef	TRUE#define	TRUE		(0 == 0)#endif	/* TRUE */#ifndef	FALSE#define	FALSE		(0 != 0)#endif	/* FALSE */#define	SYS_ERROR		(-1)#define	FAILED(x)		((x) == SYS_ERROR)#define	SAP(x)			((struct sockaddr *) (x))#define	ARRAYSIZE(x,type)	(sizeof(x) / sizeof(type))#define	MAXARGS			10#define	MAXTOKEN		128#define	MAXLINE			(MAXARGS * MAXTOKEN)struct cmdinfo {	char *command;	void (*function)(int,char *[]);	int argc;};typedef struct cmdinfo cmdinfo;static char *program;staticintparse_address(char *str,struct sockaddr *s,int family){	char *cp;	unsigned short port;	cp = index(str,'/');	if (cp != NULL) {		if (sscanf(cp + 1,"%hu",&port) != 1)			return(FALSE);		*cp = '\0';		if (!scrapi_sockaddr_parse(s,str,htons(port)))			return(FALSE);	}	else {		if (sscanf(str,"%hu",&port) != 1)			return(FALSE);		scrapi_sockaddr_any(s,family);		scrapi_sockaddr_set_port(s,htons(port));	}	return(TRUE);}staticintparse_flow(char *argv[],struct sockaddr *dst,int *proto,	struct sockaddr *src){	struct protoent *pe;	if (!parse_address(argv[1],dst,AF_INET)) {		fprintf(stderr,"%s: Bad destination parameter\n",program);		return(FALSE);	}	pe = getprotobyname(argv[2]);	if (pe == NULL) {		if (sscanf(argv[2],"%d",proto) != 1) {			fprintf(stderr,"%s: Bad protocol parameter\n",				program);			return(FALSE);		}	}	else		*proto = pe->p_proto;	if (!parse_address(argv[3],src,dst->sa_family)) {		fprintf(stderr,"%s: Bad source parameter\n",program);		return(FALSE);	}	return(TRUE);}staticvoidhelp(int argc,char *argv[]){	printf("Commands:\n");	printf("    close destination protocol source\n");	printf("    help\n");	printf("    quit\n");	printf("    receiver destination protocol source reservation service style\n");	printf("    sender destination protocol source bw ttl\n");	printf("    status destination protocol source\n");#ifdef	ISI_TEST	printf("    translation form\n");#endif	ISI_TEST	printf("Parameters:\n");	printf("    destination or source ::= <address/port> | <port> | <0>\n");	printf("    protocol ::= <name> | <number>\n");	printf("    reservation ::= <on> | <off>\n");	printf("    service ::= <cl> | <gs>\n");	printf("    style ::= <shared> | <distinct>\n");	printf("    bw ::= <number>\n");	printf("    ttl ::= <number>\n");#ifdef	ISI_TEST	printf("    form ::= <fl> | <gpi> | <none>\n");#endif	ISI_TEST}staticvoidquit(int argc,char *argv[]){	scrapi_close(NULL,0,0);	exit(0);}staticvoidclose_flow(int argc,char *argv[]){	struct SOCKADDR dst,src;	int proto;	if (!parse_flow(argv,SAP(&dst),&proto,SAP(&src)))		return;	if (scrapi_close(SAP(&dst),proto,SAP(&src)))		return;	scrapi_perror(SAP(&dst),proto,SAP(&src),program);}staticvoidsender(int argc,char *argv[]){	struct SOCKADDR dst,src;	int proto,ttl;	double bw;	if (!parse_flow(argv,SAP(&dst),&proto,SAP(&src)))		return;	if (sscanf(argv[4],"%lg",&bw) != 1) {		fprintf(stderr,"%s: Bad bandwidth parameter\n",program);		return;	}	if (sscanf(argv[5],"%d",&ttl) != 1) {		fprintf(stderr,"%s: Bad ttl parameter\n",program);		return;	}	if (scrapi_sender(SAP(&dst),proto,SAP(&src),bw,ttl,0))		return;	scrapi_perror(SAP(&dst),proto,SAP(&src),program);}staticvoidreceiver(int argc,char *argv[]){	struct SOCKADDR dst,src;	int proto,reserve;	scrapi_service service;	scrapi_style style;	if (!parse_flow(argv,SAP(&dst),&proto,SAP(&src)))		return;	if (strcmp(argv[4],"on") == 0)		reserve = TRUE;	else if (strcmp(argv[4],"off") == 0)		reserve = FALSE;	else {		fprintf(stderr,"%s: Bad reserve parameter\n",program);		return;	}	if (strcmp(argv[5],"cl") == 0)		service = scrapi_service_cl;	else if (strcmp(argv[5],"gs") == 0)		service = scrapi_service_gs;	else {		fprintf(stderr,"%s: Bad service parameter\n",program);		return;	}	if (strcmp(argv[6],"shared") == 0)		style = scrapi_style_shared;	else if (strcmp(argv[6],"distinct") == 0)		style = scrapi_style_distinct;	else {		fprintf(stderr,"%s: Bad style parameter\n",program);		return;	}	if (scrapi_receiver(SAP(&dst),proto,SAP(&src),			reserve,service,style,0))		return;	scrapi_perror(SAP(&dst),proto,SAP(&src),program);}staticvoidstatus(int argc,char *argv[]){	struct SOCKADDR dst,src;	int proto;	if (!parse_flow(argv,SAP(&dst),&proto,SAP(&src)))		return;	switch (scrapi_get_status(SAP(&dst),proto,SAP(&src))) {		case scrapi_status_red:			printf("status is red\n");			break;		case scrapi_status_yellow:			printf("status is yellow\n");			break;		case scrapi_status_green:			printf("status is green\n");			break;	}}#ifdef	ISI_TESTstaticvoidtranslation(int argc,char *argv[]){	extern void scrapi_internal_use_flow_labels(int);	extern void scrapi_internal_use_gpi(int);	if (strcmp(argv[1],"fl") == 0) {		scrapi_internal_use_flow_labels(TRUE);		scrapi_internal_use_gpi(FALSE);	}	else if (strcmp(argv[1],"gpi") == 0) {		scrapi_internal_use_flow_labels(FALSE);		scrapi_internal_use_gpi(TRUE);	}	else if (strcmp(argv[1],"none") == 0) {		scrapi_internal_use_flow_labels(FALSE);		scrapi_internal_use_gpi(FALSE);	}	else		fprintf(stderr,"%s: Bad translation parameter\n",program);}#endif	ISI_TESTstaticcmdinfo table[]= {	{ "close",		close_flow,		4 }, 	{ "help",		help,			1 }, 	{ "quit",		quit,			1 },	{ "receiver",		receiver,		7 },	{ "sender",		sender,			6 },	{ "status",		status,			4 },#ifdef	ISI_TEST	{ "translation",	translation,		2 },#endif	ISI_TEST};staticvoidprompt(){	printf("%s> ",program);	fflush(stdout);}intmain(int argc,char *argv[]){	int i,n,found,nargc;	fd_set set;	cmdinfo *c;	char *cp,buffer[MAXLINE],args[MAXARGS][MAXTOKEN],*nargv[MAXARGS];	cp = rindex(argv[0],'/');	if (cp == NULL)		program = argv[0];	else		program = cp + 1;	if (!scrapi_dispatch()) {		fprintf(stderr,"%s: No RSVP daemon\n",program);		quit(0,NULL);	}	scrapi_debug(stdout);	prompt();	for (i = 0;i < MAXARGS; i++)		nargv[i] = args[i];	while (TRUE) {		scrapi_poll_list(&set);		FD_SET(fileno(stdin),&set);		n = select(FD_SETSIZE,&set,NULL,NULL,NULL);		if (FAILED(n))			quit(0,NULL);		scrapi_dispatch();		if (!FD_ISSET(fileno(stdin),&set))			continue;		if (fgets(buffer,MAXLINE,stdin) == NULL)			quit(0,NULL);		nargc = sscanf(buffer,"%s %s %s %s %s %s %s %s %s %s",			nargv[0],nargv[1],nargv[2],nargv[3],nargv[4],			nargv[5],nargv[6],nargv[7],nargv[8],nargv[9]);		if (FAILED(nargc)) {			prompt();			continue;		}		found = FALSE;		for (i = 0;i < ARRAYSIZE(table,cmdinfo); i++) {			c = &table[i];			if (strcmp(nargv[0],c->command) == 0) {				found = TRUE;				if (nargc == c->argc) {					(*c->function)(nargc,nargv);					break;				}			}		}		if (i == ARRAYSIZE(table,cmdinfo)) {			if (found)				fprintf(stderr,					"%s: Wrong number of parameters\n",					program);			else				fprintf(stderr,"%s: Unknown command\n",					program);		}		prompt();	}}

⌨️ 快捷键说明

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