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

📄 sktdbg.c

📁 项目描述: slsnif is a serial port logging utility. It listens to the specified serial port and logs all
💻 C
📖 第 1 页 / 共 2 页
字号:
/* sktdbg.c: this program supports testing the Sockets library *   sktdbg {s|c} sktname */#include <stdio.h>#include "xtdio.h"#include "sockets.h"/* ------------------------------------------------------------------------- * Local Definitions: *//* #define ansi_escapes  -- experimental, doesn't work yet */#define BIGBUFSIZE		8192#define BUFSIZE			128#define PLAINPROMPT		0#define BYTESPROMPT		1#define DYNAMICPROMPT	2#define TIMEOUT			30L/* ------------------------------------------------------------------------- * Prototypes: */#ifdef __PROTOTYPE__void Taccept(char *buf);void Tclose(char *buf);void Tmenu(char *buf);void Tdebug(char *buf);void Tpeek(char *buf);void Ttest(char *buf);void Tfwinit(char *buf);void Tfput(char *buf);void Tgets(char *buf);void Tprintf(char *buf);void Tputs(char *buf);void Tshut(char *buf);void Tquit(char *buf);void Tread(char *buf);void Trmsrvr(char *buf);void Tscanf(char *buf);void Ttable(char *buf);void Twait(char *buf);void Twrite(char *buf);void Tisset(char *buf);#elseextern main();                                    /* sktdbg.c             */extern void Taccept();                            /* sktdbg.c             */extern void Tclose();                             /* sktdbg.c             */extern void Tmenu();                              /* sktdbg.c             */extern void Tdebug();                             /* sktdbg.c             */extern void Tpeek();                              /* sktdbg.c             */extern void Ttest();                              /* sktdbg.c             */extern void Tfwinit();                            /* sktdbg.c             */extern void Tfput();                              /* sktdbg.c             */extern void Tgets();                              /* sktdbg.c             */extern void Tputs();                              /* sktdbg.c             */extern void Tshut();                              /* sktdbg.c             */extern void Tquit();                              /* sktdbg.c             */extern void Tread();                              /* sktdbg.c             */extern void Twrite();                             /* sktdbg.c             */extern void Twait();                              /* sktdbg.c             */extern void Tscanf();                             /* sktdbg.c             */extern void Tprintf();                            /* sktdbg.c             */extern void Ttable();                             /* sktdbg.c             */extern void Trmsrvr();                            /* sktdbg.c             */extern void Tisset();                             /* sktdbg.c             */#endif/* ------------------------------------------------------------------------- * Global Data */#ifdef __PROTOTYPE__struct menu_str{	char *cmd;	void (*test)(char *);	} menu[]=#elsestruct menu_str{	char *cmd;	void (*test)();	} menu[]=#endif	{{"accept",Taccept},	{"close",Tclose},	{"fput",Tfput},	{"fwinit",Tfwinit},	{"get",Tgets},	{"isset",Tisset},	{"menu",Tmenu},	{"peek",Tpeek},	{"printf",Tprintf},	{"put",Tputs},	{"q",Tquit},	{"quit",Tquit},	{"read",Tread},	{"rmsrvr",Trmsrvr},	{"scanf",Tscanf},	{"shutdown",Tshut},	{"table",Ttable},	{"test",Ttest},	{"wait",Twait},	{"write",Twrite},	{"?",Tmenu}	};int nmenu      = sizeof(menu)/sizeof(struct menu_str);Socket *skt    = NULL;Socket *server = NULL;#ifdef ansi_escapesint pflag= DYNAMICPROMPT;#elseint pflag= BYTESPROMPT;#endif/* ------------------------------------------------------------------------- * Source Code: *//* main: */#ifdef __PROTOTYPE__int main(  int    argc,  char **argv)#else	/* __PROTOTYPE__ */int main(argc,argv)int    argc;char **argv;#endif	/* __PROTOTYPE__ */{char *b;char  buf[BUFSIZE];char  cmdbuf[BUFSIZE];int   icmd;int   fd;int   newcnt = 0;int   oldcnt = 0;Smask fdmask;Smask sktmask;rdcolor(); /* initialize ANSI escape sequences */if(argc < 3) { /* give usage */	static char *usage[]={	 XYELLOW,"sktdbg ",	 XCYAN,"sktname ",XGREEN,	 "{",XCYAN,"s",XGREEN,"|",XCYAN,"c",XGREEN,"}\n\n",	 XUWHITE,"Author:\n",XGREEN,"Dr. Charles E. Campbell\n\n",	 XUWHITE,"Explanation:\n",XGREEN,	 "This program is designed to test out the Sockets Library.\n",	 "The ",XCYAN,"sktname",XGREEN," is the name of the socket.\n",	 "It can be sktname@hostname or just sktname (current host is then used)\n",	 "The ",XCYAN,"s",XGREEN," yields a server/accept socket.\n",	 "The ",XCYAN,"c",XGREEN," yields a client socket.\n\n",	 "The Sockets Library was written by Dr. Charles E. Campbell, Jr. and\n",	 "Terry McRoberts of Goddard Space Flight Center, NASA\n",	 "",""};	char **u;	/* print out explanation */	for(u= usage; **u || **(u+1); ++u) rdcputs(*u,stdout);#ifdef vms	exit(1);#else	exit(0);#endif	}Sinit();	/* initialize sockets *//* open a socket of the appropriate type */skt= Sopenv(argv[1],argv[2],"SKTDBG");if(!skt) {	if(!strcmp(argv[2],"s")) {		error(XTDIO_WARNING,"unable to Sopen(%s,%s), removing <%s>\n", argv[1],argv[2],argv[1]);		Srmsrvr(argv[1]);		skt= Sopenv(argv[1],argv[2],"SKTDBG");		if(!skt) error(XTDIO_ERROR,"2nd try: unable to Sopen(%s,%s)\n",argv[1],argv[2]);		else     error(XTDIO_NOTE,"second try to Sopen(%s,%s) succeeded\n",argv[1],argv[2]);		}	else error(XTDIO_ERROR,"unable to Sopen(%s,%s)\n",argv[1],argv[2]);	}/* print out menu */fputc('\n',stdout);Tmenu("");/* command loop */while(1) {	/* get command from user */	switch(pflag) {	case PLAINPROMPT:		printf("%sEnter: %s",CYAN,GREEN);		break;	case BYTESPROMPT:		printf("%s(%s%4d%s bytes) Enter: %s",		  CYAN,GREEN,Stest(skt),		  CYAN,GREEN);		break;#ifdef ansi_escapes	case DYNAMICPROMPT:		/* set up Smaskwait */		Smaskset((Socket *) NULL);		fd= fileno(stdin);		Smaskfdset(fd);		fdmask= Smaskget();		Smaskset(skt);		sktmask= Smaskget();		printf("%s(%s%4d%s bytes) Enter: %s",		  CYAN,GREEN,Stest(skt),		  CYAN,GREEN);		fflush(stdout);		while(1) {			/* block until skt or keyboard sends something */			Smaskwait();			Smaskuse(fdmask);			if(Smasktest()) break;			Smaskuse(sktmask);			/* update screen */			newcnt= Stest(skt);			if(newcnt == oldcnt) continue;			oldcnt= newcnt;			printf("\033[20D%s(%s%4d%s bytes) Enter: %s",			  CYAN,GREEN,newcnt,			  CYAN,GREEN);			fflush(stdout);			sleep(1);			}		break;#endif	/* ansi_escapes */		}	/* get prompt from user */	fgets(buf,BUFSIZE,stdin);	srmtrblk(buf);	b= stpblk(buf);	if(!*b) continue;	/* get command from b */	sscanf(buf,"%s",cmdbuf);	b= stpnxt(buf,"%s%b");	/* point past command string */	/* handle option */	if(*b == '-') {		switch(b[1]) {		case 'p':	/* prompt mode control */#ifdef ansi_escapes			if(++pflag > DYNAMICPROMPT) pflag= PLAINPROMPT;#else			if(++pflag > BYTESPROMPT)   pflag= PLAINPROMPT;#endif			break;		default:			error(XTDIO_WARNING,"I don't know the <%s%s%s> command\n",			  MAGENTA,cmdbuf,GREEN);			break;			}		continue;		}	/* identify command */	for(icmd= 0; icmd < nmenu; ++icmd)	  if(!strcmp(menu[icmd].cmd,cmdbuf)) break;	if(icmd >= nmenu) {		error(XTDIO_WARNING,"I don't know the <%s%s%s> command\n",		  MAGENTA,cmdbuf,GREEN);		continue;		}	/* pass control to command */	(*menu[icmd].test)(b);	}}/* ------------------------------------------------------------------------- *//* Taccept: this function allows a server to accept a connection */#ifdef __PROTOTYPE__void Taccept(char *buf)#else	/* __PROTOTYPE__ */void Taccept(buf)char *buf;#endif	/* __PROTOTYPE__ */{/* If server is null, then the skt *is* a server.  Copy it over. * Otherwise, if there's a skt, close it before accepting */if(!server)  {	if(skt->type == PM_SERVER) {		server= skt;		skt   = NULL;		}	else {		error(XTDIO_WARNING,"cannot Saccept with a skt<%s>\n",Sprtskt(skt));		return;		}	}else if(skt) {	Sclose(skt);	skt= NULL;	}/* only wait up to TIMEOUT seconds */if(Stimeoutwait(server,TIMEOUT,0L) <= 0) {	error(XTDIO_WARNING,"accept timed out (waited %ld seconds)\n",TIMEOUT);	return;	}skt   = Saccept(server);printf("  %sSaccept%s => <%s%s%s>\n",  YELLOW,GREEN,MAGENTA,skt? Sprtskt(skt) : "null",GREEN);}/* ------------------------------------------------------------------------- *//* Tclose: this function closes the socket and, * for non-accept sockets, exits the program */#ifdef __PROTOTYPE__void Tclose(char *buf)#else	/* __PROTOTYPE__ */void Tclose(buf)char *buf;#endif	/* __PROTOTYPE__ */{switch(skt->type) {case PM_ACCEPT:	Sclose(skt);	skt   = server;	server= NULL;	printf("  %sSclose%s: closed accept Socket\n",YELLOW,GREEN);	printf("              server socket still available\n");	break;case PM_CLIENT:	Sclose(skt);	printf("  %sSclose%s: closed client Socket\n",YELLOW,GREEN);#ifdef vms	exit(1);#else	exit(0);#endifcase PM_SERVER:	Sclose(skt);	skt= server= NULL;	printf("  %sSclose%s: closed server Socket\n",YELLOW,GREEN);#ifdef vms	exit(1);#else	exit(0);#endif	}}/* ------------------------------------------------------------------------- *//* Tmenu: this function print out the commands */#ifdef __PROTOTYPE__void Tmenu(char *buf)#else	/* __PROTOTYPE__ */void Tmenu(buf)char *buf;#endif	/* __PROTOTYPE__ */{int i;printf("%sSocket Test Commands%s\n",UWHITE,GREEN);for(i= 0; i < nmenu; ++i) printf("  %s\n",menu[i].cmd);}/* ------------------------------------------------------------------------- *//* ------------------------------------------------------------------------- *//* Tpeek: this function does a Speek */#ifdef __PROTOTYPE__void Tpeek(char *buf)#else	/* __PROTOTYPE__ */void Tpeek(buf)char *buf;#endif	/* __PROTOTYPE__ */{static char locbuf[BIGBUFSIZE];int         buflen;buflen= Speek(skt,locbuf,BIGBUFSIZE);printf("  %sSpeek%s=> skt<%s> locbuf<%s> buflen=%d\n",  YELLOW,GREEN,Sprtskt(skt),sprt(locbuf),buflen);}/* ------------------------------------------------------------------------- *//* Ttest: this function does a STell */#ifdef __PROTOTYPE__void Ttest(char *buf)#else	/* __PROTOTYPE__ */void Ttest(buf)char *buf;#endif	/* __PROTOTYPE__ */{int  buflen;buflen= Stest(skt);buf[0]= '\0';printf("  %sStest%s => skt<%s> %d\n",YELLOW,GREEN,Sprtskt(skt),buflen);}/* ------------------------------------------------------------------------- *//* Tfwinit: sends a PM_FW to the PortMaster */#ifdef __PROTOTYPE__void Tfwinit(char *buf)#else	/* __PROTOTYPE__ */void Tfwinit(buf)char *buf;#endif	/* __PROTOTYPE__ */{int      trycnt;Socket  *pmskt;SKTEVENT mesg;

⌨️ 快捷键说明

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