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

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

?? state.c

?? 早期freebsd實現
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * Copyright (c) 1989, 1993 *	The Regents of the University of California.  All rights reserved. * * 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. */#ifndef lintstatic char sccsid[] = "@(#)state.c	8.2 (Berkeley) 12/15/93";#endif /* not lint */#include "telnetd.h"#if	defined(AUTHENTICATION)#include <libtelnet/auth.h>#endifunsigned char	doopt[] = { IAC, DO, '%', 'c', 0 };unsigned char	dont[] = { IAC, DONT, '%', 'c', 0 };unsigned char	will[] = { IAC, WILL, '%', 'c', 0 };unsigned char	wont[] = { IAC, WONT, '%', 'c', 0 };int	not42 = 1;/* * Buffer for sub-options, and macros * for suboptions buffer manipulations */unsigned char subbuffer[512], *subpointer= subbuffer, *subend= subbuffer;#define	SB_CLEAR()	subpointer = subbuffer#define	SB_TERM()	{ subend = subpointer; SB_CLEAR(); }#define	SB_ACCUM(c)	if (subpointer < (subbuffer+sizeof subbuffer)) { \				*subpointer++ = (c); \			}#define	SB_GET()	((*subpointer++)&0xff)#define	SB_EOF()	(subpointer >= subend)#define	SB_LEN()	(subend - subpointer)#ifdef	ENV_HACKunsigned char *subsave;#define SB_SAVE()	subsave = subpointer;#define	SB_RESTORE()	subpointer = subsave;#endif/* * State for recv fsm */#define	TS_DATA		0	/* base state */#define	TS_IAC		1	/* look for double IAC's */#define	TS_CR		2	/* CR-LF ->'s CR */#define	TS_SB		3	/* throw away begin's... */#define	TS_SE		4	/* ...end's (suboption negotiation) */#define	TS_WILL		5	/* will option negotiation */#define	TS_WONT		6	/* wont " */#define	TS_DO		7	/* do " */#define	TS_DONT		8	/* dont " */	voidtelrcv(){	register int c;	static int state = TS_DATA;#if	defined(CRAY2) && defined(UNICOS5)	char *opfrontp = pfrontp;#endif	while (ncc > 0) {		if ((&ptyobuf[BUFSIZ] - pfrontp) < 2)			break;		c = *netip++ & 0377, ncc--;#ifdef	ENCRYPTION		if (decrypt_input)			c = (*decrypt_input)(c);#endif	/* ENCRYPTION */		switch (state) {		case TS_CR:			state = TS_DATA;			/* Strip off \n or \0 after a \r */			if ((c == 0) || (c == '\n')) {				break;			}			/* FALL THROUGH */		case TS_DATA:			if (c == IAC) {				state = TS_IAC;				break;			}			/*			 * We now map \r\n ==> \r for pragmatic reasons.			 * Many client implementations send \r\n when			 * the user hits the CarriageReturn key.			 *			 * We USED to map \r\n ==> \n, since \r\n says			 * that we want to be in column 1 of the next			 * printable line, and \n is the standard			 * unix way of saying that (\r is only good			 * if CRMOD is set, which it normally is).			 */			if ((c == '\r') && his_state_is_wont(TELOPT_BINARY)) {				int nc = *netip;#ifdef	ENCRYPTION				if (decrypt_input)					nc = (*decrypt_input)(nc & 0xff);#endif	/* ENCRYPTION */#ifdef	LINEMODE				/*				 * If we are operating in linemode,				 * convert to local end-of-line.				 */				if (linemode && (ncc > 0) && (('\n' == nc) ||					 ((0 == nc) && tty_iscrnl())) ) {					netip++; ncc--;					c = '\n';				} else#endif				{#ifdef	ENCRYPTION					if (decrypt_input)						(void)(*decrypt_input)(-1);#endif	/* ENCRYPTION */					state = TS_CR;				}			}			*pfrontp++ = c;			break;		case TS_IAC:gotiac:			switch (c) {			/*			 * Send the process on the pty side an			 * interrupt.  Do this with a NULL or			 * interrupt char; depending on the tty mode.			 */			case IP:				DIAG(TD_OPTIONS,					printoption("td: recv IAC", c));				interrupt();				break;			case BREAK:				DIAG(TD_OPTIONS,					printoption("td: recv IAC", c));				sendbrk();				break;			/*			 * Are You There?			 */			case AYT:				DIAG(TD_OPTIONS,					printoption("td: recv IAC", c));				recv_ayt();				break;			/*			 * Abort Output			 */			case AO:			    {				DIAG(TD_OPTIONS,					printoption("td: recv IAC", c));				ptyflush();	/* half-hearted */				init_termbuf();				if (slctab[SLC_AO].sptr &&				    *slctab[SLC_AO].sptr != (cc_t)(_POSIX_VDISABLE)) {				    *pfrontp++ =					(unsigned char)*slctab[SLC_AO].sptr;				}				netclear();	/* clear buffer back */				*nfrontp++ = IAC;				*nfrontp++ = DM;				neturg = nfrontp-1; /* off by one XXX */				DIAG(TD_OPTIONS,					printoption("td: send IAC", DM));				break;			    }			/*			 * Erase Character and			 * Erase Line			 */			case EC:			case EL:			    {				cc_t ch;				DIAG(TD_OPTIONS,					printoption("td: recv IAC", c));				ptyflush();	/* half-hearted */				init_termbuf();				if (c == EC)					ch = *slctab[SLC_EC].sptr;				else					ch = *slctab[SLC_EL].sptr;				if (ch != (cc_t)(_POSIX_VDISABLE))					*pfrontp++ = (unsigned char)ch;				break;			    }			/*			 * Check for urgent data...			 */			case DM:				DIAG(TD_OPTIONS,					printoption("td: recv IAC", c));				SYNCHing = stilloob(net);				settimer(gotDM);				break;			/*			 * Begin option subnegotiation...			 */			case SB:				state = TS_SB;				SB_CLEAR();				continue;			case WILL:				state = TS_WILL;				continue;			case WONT:				state = TS_WONT;				continue;			case DO:				state = TS_DO;				continue;			case DONT:				state = TS_DONT;				continue;			case EOR:				if (his_state_is_will(TELOPT_EOR))					doeof();				break;			/*			 * Handle RFC 10xx Telnet linemode option additions			 * to command stream (EOF, SUSP, ABORT).			 */			case xEOF:				doeof();				break;			case SUSP:				sendsusp();				break;			case ABORT:				sendbrk();				break;			case IAC:				*pfrontp++ = c;				break;			}			state = TS_DATA;			break;		case TS_SB:			if (c == IAC) {				state = TS_SE;			} else {				SB_ACCUM(c);			}			break;		case TS_SE:			if (c != SE) {				if (c != IAC) {					/*					 * bad form of suboption negotiation.					 * handle it in such a way as to avoid					 * damage to local state.  Parse					 * suboption buffer found so far,					 * then treat remaining stream as					 * another command sequence.					 */					/* for DIAGNOSTICS */					SB_ACCUM(IAC);					SB_ACCUM(c);					subpointer -= 2;					SB_TERM();					suboption();					state = TS_IAC;					goto gotiac;				}				SB_ACCUM(c);				state = TS_SB;			} else {				/* for DIAGNOSTICS */				SB_ACCUM(IAC);				SB_ACCUM(SE);				subpointer -= 2;				SB_TERM();				suboption();	/* handle sub-option */				state = TS_DATA;			}			break;		case TS_WILL:			willoption(c);			state = TS_DATA;			continue;		case TS_WONT:			wontoption(c);			state = TS_DATA;			continue;		case TS_DO:			dooption(c);			state = TS_DATA;			continue;		case TS_DONT:			dontoption(c);			state = TS_DATA;			continue;		default:			syslog(LOG_ERR, "telnetd: panic state=%d\n", state);			printf("telnetd: panic state=%d\n", state);			exit(1);		}	}#if	defined(CRAY2) && defined(UNICOS5)	if (!linemode) {		char	xptyobuf[BUFSIZ+NETSLOP];		char	xbuf2[BUFSIZ];		register char *cp;		int n = pfrontp - opfrontp, oc;		bcopy(opfrontp, xptyobuf, n);		pfrontp = opfrontp;		pfrontp += term_input(xptyobuf, pfrontp, n, BUFSIZ+NETSLOP,					xbuf2, &oc, BUFSIZ);		for (cp = xbuf2; oc > 0; --oc)			if ((*nfrontp++ = *cp++) == IAC)				*nfrontp++ = IAC;	}#endif	/* defined(CRAY2) && defined(UNICOS5) */}  /* end of telrcv *//* * The will/wont/do/dont state machines are based on Dave Borman's * Telnet option processing state machine. * * These correspond to the following states: *	my_state = the last negotiated state *	want_state = what I want the state to go to *	want_resp = how many requests I have sent * All state defaults are negative, and resp defaults to 0. * * When initiating a request to change state to new_state: *  * if ((want_resp == 0 && new_state == my_state) || want_state == new_state) { *	do nothing; * } else { *	want_state = new_state; *	send new_state; *	want_resp++; * } * * When receiving new_state: * * if (want_resp) { *	want_resp--; *	if (want_resp && (new_state == my_state)) *		want_resp--; * } * if ((want_resp == 0) && (new_state != want_state)) { *	if (ok_to_switch_to new_state) *		want_state = new_state; *	else *		want_resp++; *	send want_state; * } * my_state = new_state; * * Note that new_state is implied in these functions by the function itself. * will and do imply positive new_state, wont and dont imply negative. * * Finally, there is one catch.  If we send a negative response to a * positive request, my_state will be the positive while want_state will * remain negative.  my_state will revert to negative when the negative * acknowlegment arrives from the peer.  Thus, my_state generally tells * us not only the last negotiated state, but also tells us what the peer * wants to be doing as well.  It is important to understand this difference * as we may wish to be processing data streams based on our desired state * (want_state) or based on what the peer thinks the state is (my_state). * * This all works fine because if the peer sends a positive request, the data * that we receive prior to negative acknowlegment will probably be affected * by the positive state, and we can process it as such (if we can; if we * can't then it really doesn't matter).  If it is that important, then the * peer probably should be buffering until this option state negotiation * is complete. * */	voidsend_do(option, init)	int option, init;{	if (init) {		if ((do_dont_resp[option] == 0 && his_state_is_will(option)) ||		    his_want_state_is_will(option))			return;		/*		 * Special case for TELOPT_TM:  We send a DO, but pretend		 * that we sent a DONT, so that we can send more DOs if		 * we want to.		 */		if (option == TELOPT_TM)			set_his_want_state_wont(option);		else			set_his_want_state_will(option);		do_dont_resp[option]++;	}	(void) sprintf(nfrontp, (char *)doopt, option);	nfrontp += sizeof (dont) - 2;	DIAG(TD_OPTIONS, printoption("td: send do", option));}#ifdef	AUTHENTICATIONextern void auth_request();#endif#ifdef	LINEMODEextern void doclientstat();#endif#ifdef	ENCRYPTIONextern void encrypt_send_support();#endif	/* ENCRYPTION */	voidwilloption(option)	int option;{	int changeok = 0;	void (*func)() = 0;	/*	 * process input from peer.	 */	DIAG(TD_OPTIONS, printoption("td: recv will", option));	if (do_dont_resp[option]) {		do_dont_resp[option]--;		if (do_dont_resp[option] && his_state_is_will(option))			do_dont_resp[option]--;	}	if (do_dont_resp[option] == 0) {	    if (his_want_state_is_wont(option)) {		switch (option) {		case TELOPT_BINARY:			init_termbuf();			tty_binaryin(1);			set_termbuf();			changeok++;			break;		case TELOPT_ECHO:			/*			 * See comments below for more info.			 */			not42 = 0;	/* looks like a 4.2 system */			break;		case TELOPT_TM:#if	defined(LINEMODE) && defined(KLUDGELINEMODE)			/*			 * This telnetd implementation does not really			 * support timing marks, it just uses them to			 * support the kludge linemode stuff.  If we			 * receive a will or wont TM in response to our			 * do TM request that may have been sent to			 * determine kludge linemode support, process			 * it, otherwise TM should get a negative			 * response back.			 */			/*			 * Handle the linemode kludge stuff.			 * If we are not currently supporting any			 * linemode at all, then we assume that this			 * is the client telling us to use kludge			 * linemode in response to our query.  Set the			 * linemode type that is to be supported, note			 * that the client wishes to use linemode, and			 * eat the will TM as though it never arrived.			 */			if (lmodetype < KLUDGE_LINEMODE) {				lmodetype = KLUDGE_LINEMODE;				clientstat(TELOPT_LINEMODE, WILL, 0);				send_wont(TELOPT_SGA, 1);			} else if (lmodetype == NO_AUTOKLUDGE) {				lmodetype = KLUDGE_OK;			}#endif	/* defined(LINEMODE) && defined(KLUDGELINEMODE) */			/*			 * We never respond to a WILL TM, and			 * we leave the state WONT.			 */			return;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡高清视频专区| 九色综合国产一区二区三区| 精品日韩一区二区| 欧美精品日韩综合在线| 日本高清不卡视频| 91日韩一区二区三区| 一本色道久久综合精品竹菊| 成人av在线一区二区三区| 成人av在线一区二区| 成人国产一区二区三区精品| 成人免费视频一区| 成人小视频在线| 色综合夜色一区| 在线观看视频欧美| 欧美老女人在线| 日韩一二三区不卡| 久久精品欧美一区二区三区麻豆| 亚洲精品一区二区三区99| 国产喂奶挤奶一区二区三区| 中文字幕av资源一区| 一区二区三区在线播| 亚洲电影在线免费观看| 青青草97国产精品免费观看 | yourporn久久国产精品| voyeur盗摄精品| 欧美日韩视频不卡| 欧美变态口味重另类| 亚洲国产精品精华液2区45| 亚洲乱码一区二区三区在线观看| 亚洲一二三四久久| 国产中文字幕一区| 欧美性一区二区| 91福利国产成人精品照片| 欧美一区二区三区视频| 国产视频一区二区三区在线观看 | 色综合色狠狠天天综合色| 欧美日韩一级黄| 国产性色一区二区| 亚洲成av人片观看| 福利视频网站一区二区三区| 欧美在线一二三| 久久久久久99久久久精品网站| 中文字幕一区二区三| 天天色天天爱天天射综合| 99精品黄色片免费大全| 91麻豆精品国产综合久久久久久| 国产日韩高清在线| 日韩高清电影一区| 一本久久a久久精品亚洲| 精品福利一二区| 五月婷婷久久丁香| 日韩一区二区三区观看| 国产精品国模大尺度视频| 最新国产の精品合集bt伙计| 一区二区三区欧美| 亚洲免费视频成人| 色婷婷亚洲综合| 婷婷丁香激情综合| 久久这里只有精品首页| k8久久久一区二区三区| 亚洲国产日日夜夜| 日韩一区二区精品葵司在线| 国产乱子伦视频一区二区三区| 国产精品久久毛片a| 欧美视频一区二区三区| 久草中文综合在线| 亚洲三级在线免费| 日韩一区二区视频在线观看| 国产高清视频一区| 亚洲制服丝袜一区| 久久综合狠狠综合久久激情| av不卡免费在线观看| 日本亚洲最大的色成网站www| 久久精品日韩一区二区三区| 在线观看亚洲a| 国产乱色国产精品免费视频| 亚洲午夜久久久久久久久电影网| 精品少妇一区二区三区在线播放 | 欧美xxxxx牲另类人与| youjizz国产精品| 五月天视频一区| 国产欧美日韩不卡| 欧美一区日韩一区| 91一区在线观看| 国产一区二区调教| 亚洲444eee在线观看| 亚洲国产激情av| 日韩一区二区三区三四区视频在线观看 | 国产成人在线网站| 亚洲第一电影网| 亚洲欧洲国产日韩| 2020日本不卡一区二区视频| 欧美三区免费完整视频在线观看| 国产成人在线视频网址| 蜜臀av性久久久久av蜜臀妖精| 国产精品久久久久aaaa| 欧美精品一区二区三区蜜桃视频 | 国产91丝袜在线观看| 麻豆一区二区99久久久久| 一级精品视频在线观看宜春院 | 亚洲欧洲一区二区三区| 久久久精品国产免费观看同学| 欧美日本国产一区| 欧美在线一二三| 色88888久久久久久影院野外| 国产98色在线|日韩| 国产精品一区二区不卡| 久久激情综合网| 青青草国产成人av片免费| 性感美女极品91精品| 一级精品视频在线观看宜春院| 中文字幕一区二区三区乱码在线| 国产午夜精品一区二区三区嫩草| ww久久中文字幕| 欧美精品一区二区三区一线天视频| 欧美一区二区三级| 91精品国产综合久久福利软件| 欧美日韩精品一区二区三区四区| 欧洲av在线精品| 欧美无砖砖区免费| 欧美性受xxxx| 欧美福利电影网| 欧美一级视频精品观看| 日韩女优av电影在线观看| 日韩免费观看高清完整版| 日韩欧美精品在线视频| 精品盗摄一区二区三区| 久久精品亚洲国产奇米99| 日本一区二区在线不卡| 中国av一区二区三区| 国产精品久久久久久久久免费相片| 一区二区三区日韩欧美| 亚洲成人第一页| 蜜桃久久久久久久| 国产精品一线二线三线精华| 国产成人亚洲综合a∨婷婷图片| 成人激情av网| 在线一区二区视频| 欧美高清hd18日本| 久久九九影视网| 亚洲日本欧美天堂| 日本伊人精品一区二区三区观看方式 | 日av在线不卡| 国产美女精品在线| 91在线视频网址| 欧美色偷偷大香| 精品国产精品网麻豆系列| 中文子幕无线码一区tr| 一区二区三区中文字幕电影| 日本不卡视频一二三区| 丁香激情综合国产| 欧美色网一区二区| 久久九九影视网| 亚洲一区二区在线免费看| 精品一区二区在线视频| 99久久综合狠狠综合久久| 67194成人在线观看| 欧美国产欧美亚州国产日韩mv天天看完整| 国产精品久线在线观看| 免费在线欧美视频| 91丝袜美腿高跟国产极品老师| 欧美精品v日韩精品v韩国精品v| 国产色一区二区| 亚洲图片自拍偷拍| 波多野结衣中文字幕一区| 欧美男男青年gay1069videost| 久久久www免费人成精品| 亚洲午夜免费电影| 成人免费毛片a| 欧美成人伊人久久综合网| 一区二区三区成人在线视频| 国产精品一区二区三区四区| 欧美日韩国产乱码电影| 中文字幕中文字幕在线一区 | 亚洲精品日产精品乱码不卡| 九九精品视频在线看| 在线免费视频一区二区| 中文字幕精品—区二区四季| 美女视频一区二区| 欧美日韩在线亚洲一区蜜芽| 中文字幕一区免费在线观看| 精彩视频一区二区| 69堂亚洲精品首页| 亚洲自拍偷拍麻豆| 99re在线视频这里只有精品| 国产亚洲欧美中文| 久久99久久精品| 日韩三级高清在线| 亚洲国产精品嫩草影院| 一本一道综合狠狠老| 国产精品成人一区二区艾草| 丰满少妇久久久久久久| 久久久久国产精品厨房| 久久99在线观看| 精品久久免费看| 另类小说一区二区三区| 日韩精品一区二区在线| 免费精品99久久国产综合精品| 欧美精品视频www在线观看| 亚洲bdsm女犯bdsm网站|