亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? utils.c

?? 早期freebsd實現(xiàn)
?? C
字號:
/* * Copyright (c) 1988, 1992 The University of Utah and the Center *	for Software Science (CSS). * Copyright (c) 1992, 1993 *	The Regents of the University of California.  All rights reserved. * * This code is derived from software contributed to Berkeley by * the Center for Software Science of the University of Utah Computer * Science Department.  CSS requests users of this software to return * to css-dist@cs.utah.edu any improvements that they make and grant * CSS redistribution rights. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * *	@(#)utils.c	8.2 (Berkeley) 2/22/94 * * Utah $Hdr: utils.c 3.1 92/07/06$ * Author: Jeff Forys, University of Utah CSS */#ifndef lintstatic char sccsid[] = "@(#)utils.c	8.2 (Berkeley) 2/22/94";#endif /* not lint */#include <sys/param.h>#include <sys/time.h>#include <fcntl.h>#include <signal.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <syslog.h>#include <time.h>#include <unistd.h>#include "defs.h"/***  DispPkt -- Display the contents of an RMPCONN packet.****	Parameters:**		rconn - packet to be displayed.**		direct - direction packet is going (DIR_*).****	Returns:**		Nothing.****	Side Effects:**		None.*/voidDispPkt(rconn, direct)	RMPCONN *rconn;	int direct;{	static char BootFmt[] = "\t\tRetCode:%u SeqNo:%lx SessID:%x Vers:%u";	static char ReadFmt[] = "\t\tRetCode:%u Offset:%lx SessID:%x\n";	struct tm *tmp;	register struct rmp_packet *rmp;	int i, omask;	u_int t;	/*	 *  Since we will be working with RmpConns as well as DbgFp, we	 *  must block signals that can affect either.	 */	omask = sigblock(sigmask(SIGHUP)|sigmask(SIGUSR1)|sigmask(SIGUSR2));	if (DbgFp == NULL) {			/* sanity */		(void) sigsetmask(omask);		return;	}	/* display direction packet is going using '>>>' or '<<<' */	fputs((direct==DIR_RCVD)?"<<< ":(direct==DIR_SENT)?">>> ":"", DbgFp);	/* display packet timestamp */	tmp = localtime((time_t *)&rconn->tstamp.tv_sec);	fprintf(DbgFp, "%02d:%02d:%02d.%06ld   ", tmp->tm_hour, tmp->tm_min,	        tmp->tm_sec, rconn->tstamp.tv_usec);	/* display src or dst addr and information about network interface */	fprintf(DbgFp, "Addr: %s   Intf: %s\n", EnetStr(rconn), IntfName);	rmp = &rconn->rmp;	/* display IEEE 802.2 Logical Link Control header */	(void) fprintf(DbgFp, "\t802.2 LLC: DSAP:%x SSAP:%x CTRL:%x\n",	               rmp->hp_llc.dsap, rmp->hp_llc.ssap, rmp->hp_llc.cntrl);	/* display HP extensions to 802.2 Logical Link Control header */	(void) fprintf(DbgFp, "\tHP Ext:    DXSAP:%x SXSAP:%x\n",	               rmp->hp_llc.dxsap, rmp->hp_llc.sxsap);	/*	 *  Display information about RMP packet using type field to	 *  determine what kind of packet this is.	 */	switch(rmp->r_type) {		case RMP_BOOT_REQ:		/* boot request */			(void) fprintf(DbgFp, "\tBoot Request:");			GETWORD(rmp->r_brq.rmp_seqno, t);			if (rmp->r_brq.rmp_session == RMP_PROBESID) {				if (WORDZE(rmp->r_brq.rmp_seqno))					fputs(" (Send Server ID)", DbgFp);				else					fprintf(DbgFp," (Send Filename #%u)",t);			}			(void) fputc('\n', DbgFp);			(void) fprintf(DbgFp, BootFmt, rmp->r_brq.rmp_retcode,			        t, rmp->r_brq.rmp_session,			        rmp->r_brq.rmp_version);			(void) fprintf(DbgFp, "\n\t\tMachine Type: ");			for (i = 0; i < RMP_MACHLEN; i++)				(void) fputc(rmp->r_brq.rmp_machtype[i], DbgFp);			DspFlnm(rmp->r_brq.rmp_flnmsize, &rmp->r_brq.rmp_flnm);			break;		case RMP_BOOT_REPL:		/* boot reply */			fprintf(DbgFp, "\tBoot Reply:\n");			GETWORD(rmp->r_brpl.rmp_seqno, t);			(void) fprintf(DbgFp, BootFmt, rmp->r_brpl.rmp_retcode,			        t, rmp->r_brpl.rmp_session,			        rmp->r_brpl.rmp_version);			DspFlnm(rmp->r_brpl.rmp_flnmsize,&rmp->r_brpl.rmp_flnm);			break;		case RMP_READ_REQ:		/* read request */			(void) fprintf(DbgFp, "\tRead Request:\n");			GETWORD(rmp->r_rrq.rmp_offset, t);			(void) fprintf(DbgFp, ReadFmt, rmp->r_rrq.rmp_retcode,			        t, rmp->r_rrq.rmp_session);			(void) fprintf(DbgFp, "\t\tNoOfBytes: %u\n",			        rmp->r_rrq.rmp_size);			break;		case RMP_READ_REPL:		/* read reply */			(void) fprintf(DbgFp, "\tRead Reply:\n");			GETWORD(rmp->r_rrpl.rmp_offset, t);			(void) fprintf(DbgFp, ReadFmt, rmp->r_rrpl.rmp_retcode,			        t, rmp->r_rrpl.rmp_session);			(void) fprintf(DbgFp, "\t\tNoOfBytesSent: %d\n",			        rconn->rmplen - RMPREADSIZE(0));			break;		case RMP_BOOT_DONE:		/* boot complete */			(void) fprintf(DbgFp, "\tBoot Complete:\n");			(void) fprintf(DbgFp, "\t\tRetCode:%u SessID:%x\n",			        rmp->r_done.rmp_retcode,			        rmp->r_done.rmp_session);			break;		default:			/* ??? */			(void) fprintf(DbgFp, "\tUnknown Type:(%d)\n",				rmp->r_type);	}	(void) fputc('\n', DbgFp);	(void) fflush(DbgFp);	(void) sigsetmask(omask);		/* reset old signal mask */}/***  GetEtherAddr -- convert an RMP (Ethernet) address into a string.****	An RMP BOOT packet has been received.  Look at the type field**	and process Boot Requests, Read Requests, and Boot Complete**	packets.  Any other type will be dropped with a warning msg.****	Parameters:**		addr - array of RMP_ADDRLEN bytes.****	Returns:**		Pointer to static string representation of `addr'.****	Side Effects:**		None.****	Warnings:**		- The return value points to a static buffer; it must**		  be copied if it's to be saved.**		- For speed, we assume a u_char consists of 8 bits.*/char *GetEtherAddr(addr)	u_char *addr;{	static char Hex[] = "0123456789abcdef";	static char etherstr[RMP_ADDRLEN*3];	register int i;	register char *cp1, *cp2;	/*	 *  For each byte in `addr', convert it to "<hexchar><hexchar>:".	 *  The last byte does not get a trailing `:' appended.	 */	i = 0;	cp1 = (char *)addr;	cp2 = etherstr;	for(;;) {		*cp2++ = Hex[*cp1 >> 4 & 0xf];		*cp2++ = Hex[*cp1++ & 0xf];		if (++i == RMP_ADDRLEN)			break;		*cp2++ = ':';	}	*cp2 = '\0';	return(etherstr);}/***  DispFlnm -- Print a string of bytes to DbgFp (often, a file name).****	Parameters:**		size - number of bytes to print.**		flnm - address of first byte.****	Returns:**		Nothing.****	Side Effects:**		- Characters are sent to `DbgFp'.*/voidDspFlnm(size, flnm)	register u_int size;	register char *flnm;{	register int i;	(void) fprintf(DbgFp, "\n\t\tFile Name (%d): <", size);	for (i = 0; i < size; i++)		(void) fputc(*flnm++, DbgFp);	(void) fputs(">\n", DbgFp);}/***  NewClient -- allocate memory for a new CLIENT.****	Parameters:**		addr - RMP (Ethernet) address of new client.****	Returns:**		Ptr to new CLIENT or NULL if we ran out of memory.****	Side Effects:**		- Memory will be malloc'd for the new CLIENT.**		- If malloc() fails, a log message will be generated.*/CLIENT *NewClient(addr)	u_char *addr;{	CLIENT *ctmp;	if ((ctmp = (CLIENT *) malloc(sizeof(CLIENT))) == NULL) {		syslog(LOG_ERR, "NewClient: out of memory (%s)",		       GetEtherAddr(addr));		return(NULL);	}	bzero(ctmp, sizeof(CLIENT));	bcopy(addr, &ctmp->addr[0], RMP_ADDRLEN);	return(ctmp);}/***  FreeClient -- free linked list of Clients.****	Parameters:**		None.****	Returns:**		Nothing.****	Side Effects:**		- All malloc'd memory associated with the linked list of**		  CLIENTS will be free'd; `Clients' will be set to NULL.****	Warnings:**		- This routine must be called with SIGHUP blocked.*/voidFreeClients(){	register CLIENT *ctmp;	while (Clients != NULL) {		ctmp = Clients;		Clients = Clients->next;		FreeClient(ctmp);	}}/***  NewStr -- allocate memory for a character array.****	Parameters:**		str - null terminated character array.****	Returns:**		Ptr to new character array or NULL if we ran out of memory.****	Side Effects:**		- Memory will be malloc'd for the new character array.**		- If malloc() fails, a log message will be generated.*/char *NewStr(str)	char *str;{	char *stmp;	if ((stmp = (char *)malloc((unsigned) (strlen(str)+1))) == NULL) {		syslog(LOG_ERR, "NewStr: out of memory (%s)", str);		return(NULL);	}	(void) strcpy(stmp, str);	return(stmp);}/***  To save time, NewConn and FreeConn maintain a cache of one RMPCONN**  in `LastFree' (defined below).*/static RMPCONN *LastFree = NULL;/***  NewConn -- allocate memory for a new RMPCONN connection.****	Parameters:**		rconn - initialization template for new connection.****	Returns:**		Ptr to new RMPCONN or NULL if we ran out of memory.****	Side Effects:**		- Memory may be malloc'd for the new RMPCONN (if not cached).**		- If malloc() fails, a log message will be generated.*/RMPCONN *NewConn(rconn)	RMPCONN *rconn;{	RMPCONN *rtmp;	if (LastFree == NULL) {		/* nothing cached; make a new one */		if ((rtmp = (RMPCONN *) malloc(sizeof(RMPCONN))) == NULL) {			syslog(LOG_ERR, "NewConn: out of memory (%s)",			       EnetStr(rconn));			return(NULL);		}	} else {			/* use the cached RMPCONN */		rtmp = LastFree;		LastFree = NULL;	}	/*	 *  Copy template into `rtmp', init file descriptor to `-1' and	 *  set ptr to next elem NULL.	 */	bcopy((char *)rconn, (char *)rtmp, sizeof(RMPCONN));	rtmp->bootfd = -1;	rtmp->next = NULL;	return(rtmp);}/***  FreeConn -- Free memory associated with an RMPCONN connection.****	Parameters:**		rtmp - ptr to RMPCONN to be free'd.****	Returns:**		Nothing.****	Side Effects:**		- Memory associated with `rtmp' may be free'd (or cached).**		- File desc associated with `rtmp->bootfd' will be closed.*/voidFreeConn(rtmp)	register RMPCONN *rtmp;{	/*	 *  If the file descriptor is in use, close the file.	 */	if (rtmp->bootfd >= 0) {		(void) close(rtmp->bootfd);		rtmp->bootfd = -1;	}	if (LastFree == NULL)		/* cache for next time */		rtmp = LastFree;	else				/* already one cached; free this one */		free((char *)rtmp);}/***  FreeConns -- free linked list of RMPCONN connections.****	Parameters:**		None.****	Returns:**		Nothing.****	Side Effects:**		- All malloc'd memory associated with the linked list of**		  connections will be free'd; `RmpConns' will be set to NULL.**		- If LastFree is != NULL, it too will be free'd & NULL'd.****	Warnings:**		- This routine must be called with SIGHUP blocked.*/voidFreeConns(){	register RMPCONN *rtmp;	while (RmpConns != NULL) {		rtmp = RmpConns;		RmpConns = RmpConns->next;		FreeConn(rtmp);	}	if (LastFree != NULL) {		free((char *)LastFree);		LastFree = NULL;	}}/***  AddConn -- Add a connection to the linked list of connections.****	Parameters:**		rconn - connection to be added.****	Returns:**		Nothing.****	Side Effects:**		- RmpConn will point to new connection.****	Warnings:**		- This routine must be called with SIGHUP blocked.*/voidAddConn(rconn)	register RMPCONN *rconn;{	if (RmpConns != NULL)		rconn->next = RmpConns;	RmpConns = rconn;}/***  FindConn -- Find a connection in the linked list of connections.****	We use the RMP (Ethernet) address as the basis for determining**	if this is the same connection.  According to the Remote Maint**	Protocol, we can only have one connection with any machine.****	Parameters:**		rconn - connection to be found.****	Returns:**		Matching connection from linked list or NULL if not found.****	Side Effects:**		None.****	Warnings:**		- This routine must be called with SIGHUP blocked.*/RMPCONN *FindConn(rconn)	register RMPCONN *rconn;{	register RMPCONN *rtmp;	for (rtmp = RmpConns; rtmp != NULL; rtmp = rtmp->next)		if (bcmp((char *)&rconn->rmp.hp_hdr.saddr[0],		         (char *)&rtmp->rmp.hp_hdr.saddr[0], RMP_ADDRLEN) == 0)			break;	return(rtmp);}/***  RemoveConn -- Remove a connection from the linked list of connections.****	Parameters:**		rconn - connection to be removed.****	Returns:**		Nothing.****	Side Effects:**		- If found, an RMPCONN will cease to exist and it will**		  be removed from the linked list.****	Warnings:**		- This routine must be called with SIGHUP blocked.*/voidRemoveConn(rconn)	register RMPCONN *rconn;{	register RMPCONN *thisrconn, *lastrconn;	if (RmpConns == rconn) {		/* easy case */		RmpConns = RmpConns->next;		FreeConn(rconn);	} else {				/* must traverse linked list */		lastrconn = RmpConns;			/* set back ptr */		thisrconn = lastrconn->next;		/* set current ptr */		while (thisrconn != NULL) {			if (rconn == thisrconn) {		/* found it */				lastrconn->next = thisrconn->next;				FreeConn(thisrconn);				break;			}			lastrconn = thisrconn;			thisrconn = thisrconn->next;		}	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级视频在线观看| 国产精品久久久久影院亚瑟 | 精品国产污污免费网站入口| 色婷婷av久久久久久久| 91最新地址在线播放| av日韩在线网站| 成人av综合一区| 成人av在线资源网站| 成人av网在线| 成人激情av网| 91丨九色丨尤物| 91免费视频观看| 91视频xxxx| 欧美日韩一区二区在线观看视频| 欧美亚洲一区二区在线观看| 欧美午夜精品电影| 欧美日韩视频在线观看一区二区三区| 欧美性大战久久久| 欧美剧在线免费观看网站| 51午夜精品国产| 欧美精品一区二| 中文字幕第一页久久| 亚洲色图视频网站| 亚洲一区二区3| 蜜桃免费网站一区二区三区| 国产在线精品一区在线观看麻豆| 国产精品中文字幕日韩精品| 成人小视频在线观看| 色琪琪一区二区三区亚洲区| 欧美日韩夫妻久久| 日韩美一区二区三区| 久久久久成人黄色影片| 亚洲天堂av老司机| 亚洲18影院在线观看| 久久爱另类一区二区小说| 风间由美一区二区av101 | 日韩一区二区三区免费看 | 中国色在线观看另类| 亚洲色图视频网站| 日本不卡在线视频| 丁香婷婷综合网| 欧美在线观看18| 日韩免费福利电影在线观看| 国产精品毛片大码女人| 亚洲不卡在线观看| 国模大尺度一区二区三区| www.亚洲人| 91精品国产一区二区三区蜜臀| 26uuu国产在线精品一区二区| 亚洲欧美福利一区二区| 美女视频黄免费的久久| 成人av动漫在线| 91精品国产综合久久久久久久久久| 久久久精品2019中文字幕之3| 亚洲欧美偷拍三级| 黄色小说综合网站| 欧洲视频一区二区| 久久久久久久久岛国免费| 亚洲最大成人综合| 国产精品一区二区久久精品爱涩| 欧美性视频一区二区三区| 久久久精品免费观看| 午夜久久久影院| 成人av在线资源| 欧美xxx久久| 亚洲一区二区三区不卡国产欧美 | 日韩一级完整毛片| 亚洲人成网站精品片在线观看| 美腿丝袜亚洲综合| 91久久香蕉国产日韩欧美9色| 亚洲男人天堂一区| 蜜桃久久精品一区二区| 在线免费观看成人短视频| 国产片一区二区三区| 性感美女极品91精品| av在线这里只有精品| 亚洲精品一区二区三区福利 | 日韩精品免费专区| 94-欧美-setu| 国产欧美一二三区| 久久精品国产第一区二区三区| 91成人免费在线| 中文字幕日韩精品一区| 狠狠色丁香婷综合久久| 欧美日本精品一区二区三区| 亚洲人xxxx| 成人国产免费视频| 久久一区二区视频| 久久国产综合精品| 91精品国产综合久久久久| 一个色在线综合| 91麻豆精品秘密| 中文字幕免费一区| 国产激情精品久久久第一区二区| 在线成人av网站| 一区二区欧美在线观看| 92国产精品观看| 一区在线观看视频| 成人av影院在线| 国产欧美一区在线| 国产福利一区二区三区| 精品国产一区二区三区四区四 | 蜜桃视频一区二区| 欧美一级理论性理论a| 婷婷中文字幕综合| 欧美日韩国产综合一区二区三区| 亚洲日本电影在线| 91麻豆swag| 一区二区三区在线视频观看 | 日韩一级精品视频在线观看| 天天综合色天天综合| 欧美麻豆精品久久久久久| 亚洲国产精品久久人人爱| 欧美系列在线观看| 亚洲超碰97人人做人人爱| 欧美日本一区二区| 青草国产精品久久久久久| 日韩欧美激情一区| 国产一区91精品张津瑜| 久久久久久麻豆| 播五月开心婷婷综合| 亚洲色图欧洲色图婷婷| 91黄色小视频| 亚洲h精品动漫在线观看| 欧美精品一二三四| 久久精品国产在热久久| 国产亚洲精品7777| av午夜一区麻豆| 国产成人av电影在线观看| 国产亚洲欧美激情| 97久久超碰国产精品| 伊人婷婷欧美激情| 91麻豆精品国产91久久久久| 久久精品国产一区二区三 | 亚洲成a人片综合在线| 欧美精品黑人性xxxx| 久久精品国产一区二区三区免费看| 久久综合久久鬼色中文字| 99久久综合国产精品| 亚洲一区二区三区中文字幕在线 | 亚洲国产综合视频在线观看| 日韩一区二区在线观看视频播放| 国产一区二区在线观看免费| 国产精品国产精品国产专区不片| 在线视频中文字幕一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产日韩精品久久久| 在线观看亚洲一区| 狠狠色综合色综合网络| 亚洲欧美综合色| 欧美一区二区三区小说| 国产成人久久精品77777最新版本| 亚洲美女少妇撒尿| 欧美α欧美αv大片| 97国产精品videossex| 奇米777欧美一区二区| 国产精品网站在线播放| 欧美丰满少妇xxxxx高潮对白 | 欧美mv日韩mv亚洲| 99精品视频在线播放观看| 免费高清在线一区| 亚洲欧洲av另类| xf在线a精品一区二区视频网站| 色天天综合久久久久综合片| 韩国一区二区视频| 亚洲一区电影777| 欧美国产成人在线| 欧美一区二区女人| 97超碰欧美中文字幕| 韩国av一区二区三区在线观看| 一区二区三区在线高清| 久久精品人人做人人爽97| 欧美美女网站色| 91麻豆123| 懂色一区二区三区免费观看 | 91福利社在线观看| 国产成人啪免费观看软件| 天天操天天干天天综合网| 国产精品久久久久久久第一福利| 日韩欧美激情一区| 欧美日韩一区二区在线观看| 99热在这里有精品免费| 国精品**一区二区三区在线蜜桃| 亚洲国产精品久久人人爱| 中文字幕在线一区二区三区| 久久久久青草大香线综合精品| 欧美精品少妇一区二区三区| 日本高清不卡在线观看| 成人性生交大片免费看中文网站| 激情图区综合网| 免费高清视频精品| 五月综合激情婷婷六月色窝| 亚洲黄色录像片| 中文字幕一区视频| 日本一区二区三区电影| 精品国产乱码91久久久久久网站| 91精品国产免费| 欧美人狂配大交3d怪物一区| 欧美亚洲免费在线一区| 91黄色免费观看|