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

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

?? telnet.c

?? linux 下 telnet源碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
	}
    }
    if (count)
	ring_consumed(&netiring, count);
    return returnValue||count;
}

static int bol = 1, local = 0;

    int
rlogin_susp()
{
    if (local) {
	local = 0;
	bol = 1;
	command(0, "z\n", 2);
	return(1);
    }
    return(0);
}

    static int
telsnd()
{
    int tcc;
    int count;
    int returnValue = 0;
    unsigned char *tbp;

    tcc = 0;
    count = 0;
    while (NETROOM() > 2) {
	register int sc;
	register int c;

	if (tcc == 0) {
	    if (count) {
		ring_consumed(&ttyiring, count);
		returnValue = 1;
		count = 0;
	    }
	    tbp = ttyiring.consume;
	    tcc = ring_full_consecutive(&ttyiring);
	    if (tcc == 0) {
		break;
	    }
	}
	c = *tbp++ & 0xff, sc = strip(c), tcc--; count++;
	if (rlogin != _POSIX_VDISABLE) {
		if (bol) {
			bol = 0;
			if (sc == rlogin) {
				local = 1;
				continue;
			}
		} else if (local) {
			local = 0;
			if (sc == '.' || c == termEofChar) {
				bol = 1;
				command(0, "close\n", 6);
				continue;
			}
			if (sc == termSuspChar) {
				bol = 1;
				command(0, "z\n", 2);
				continue;
			}
			if (sc == escape) {
				command(0, (char *)tbp, tcc);
				bol = 1;
				count += tcc;
				tcc = 0;
				flushline = 1;
				break;
			}
			if (sc != rlogin) {
				++tcc;
				--tbp;
				--count;
				c = sc = rlogin;
			}
		}
		if ((sc == '\n') || (sc == '\r'))
			bol = 1;
	} else if (sc == escape) {
	    /*
	     * Double escape is a pass through of a single escape character.
	     */
	    if (tcc && strip(*tbp) == escape) {
		tbp++;
		tcc--;
		count++;
		bol = 0;
	    } else {
		command(0, (char *)tbp, tcc);
		bol = 1;
		count += tcc;
		tcc = 0;
		flushline = 1;
		break;
	    }
	} else
	    bol = 0;
#ifdef	KLUDGELINEMODE
	if (kludgelinemode && (globalmode&MODE_EDIT) && (sc == echoc)) {
	    if (tcc > 0 && strip(*tbp) == echoc) {
		tcc--; tbp++; count++;
	    } else {
		dontlecho = !dontlecho;
		settimer(echotoggle);
		setconnmode(0);
		flushline = 1;
		break;
	    }
	}
#endif
	if (MODE_LOCAL_CHARS(globalmode)) {
	    if (TerminalSpecialChars(sc) == 0) {
		bol = 1;
		break;
	    }
	}
	if (my_want_state_is_wont(TELOPT_BINARY)) {
	    switch (c) {
	    case '\n':
		    /*
		     * If we are in CRMOD mode (\r ==> \n)
		     * on our local machine, then probably
		     * a newline (unix) is CRLF (TELNET).
		     */
		if (MODE_LOCAL_CHARS(globalmode)) {
		    NETADD('\r');
		}
		NETADD('\n');
		bol = flushline = 1;
		break;
	    case '\r':
		if (!crlf) {
		    NET2ADD('\r', '\0');
		} else {
		    NET2ADD('\r', '\n');
		}
		bol = flushline = 1;
		break;
	    case IAC:
		NET2ADD(IAC, IAC);
		break;
	    default:
		NETADD(c);
		break;
	    }
	} else if (c == IAC) {
	    NET2ADD(IAC, IAC);
	} else {
	    NETADD(c);
	}
    }
    if (count)
	ring_consumed(&ttyiring, count);
    return returnValue||count;		/* Non-zero if we did anything */
}

/*
 * Scheduler()
 *
 * Try to do something.
 *
 * If we do something useful, return 1; else return 0.
 *
 */


    int
Scheduler(block)
    int	block;			/* should we block in the select ? */
{
		/* One wants to be a bit careful about setting returnValue
		 * to one, since a one implies we did some useful work,
		 * and therefore probably won't be called to block next
		 * time (TN3270 mode only).
		 */
    int returnValue;
    int netin, netout, netex, ttyin, ttyout;

    /* Decide which rings should be processed */

    netout = ring_full_count(&netoring) &&
	    (flushline ||
		(my_want_state_is_wont(TELOPT_LINEMODE)
#ifdef	KLUDGELINEMODE
			&& (!kludgelinemode || my_want_state_is_do(TELOPT_SGA))
#endif
		) ||
			my_want_state_is_will(TELOPT_BINARY));
    ttyout = ring_full_count(&ttyoring);

#if	defined(TN3270)
    ttyin = ring_empty_count(&ttyiring) && (shell_active == 0);
#else	/* defined(TN3270) */
    ttyin = ring_empty_count(&ttyiring);
#endif	/* defined(TN3270) */

#if	defined(TN3270)
    netin = ring_empty_count(&netiring);
#   else /* !defined(TN3270) */
    netin = !ISend && ring_empty_count(&netiring);
#   endif /* !defined(TN3270) */

    netex = !SYNCHing;

    /* If we have seen a signal recently, reset things */
#   if defined(TN3270) && defined(unix)
    if (HaveInput) {
	HaveInput = 0;
	(void) signal(SIGIO, inputAvailable);
    }
#endif	/* defined(TN3270) && defined(unix) */

    /* Call to system code to process rings */

    returnValue = process_rings(netin, netout, netex, ttyin, ttyout, !block);

    /* Now, look at the input rings, looking for work to do. */

    if (ring_full_count(&ttyiring)) {
#   if defined(TN3270)
	if (In3270) {
	    int c;

	    c = DataFromTerminal(ttyiring.consume,
					ring_full_consecutive(&ttyiring));
	    if (c) {
		returnValue = 1;
		ring_consumed(&ttyiring, c);
	    }
	} else {
#   endif /* defined(TN3270) */
	    returnValue |= telsnd();
#   if defined(TN3270)
	}
#   endif /* defined(TN3270) */
    }

    if (ring_full_count(&netiring)) {
#	if !defined(TN3270)
	returnValue |= telrcv();
#	else /* !defined(TN3270) */
	returnValue = Push3270();
#	endif /* !defined(TN3270) */
    }
    return returnValue;
}

/*
 * Select from tty and network...
 */
    void
telnet(user)
    char *user;
{
    sys_telnet_init();

#if	defined(AUTHENTICATION) || defined(ENCRYPTION)
    {
	static char local_host[256] = { 0 };

	if (!local_host[0]) {
		gethostname(local_host, sizeof(local_host));
		local_host[sizeof(local_host)-1] = 0;
	}
	auth_encrypt_init(local_host, hostname, "TELNET", 0);
	auth_encrypt_user(user);
    }
#endif	/* defined(AUTHENTICATION) || defined(ENCRYPTION)  */
#   if !defined(TN3270)
    if (telnetport) {
#if	defined(AUTHENTICATION)
	if (autologin)
		send_will(TELOPT_AUTHENTICATION, 1);
#endif
#ifdef	ENCRYPTION
	send_do(TELOPT_ENCRYPT, 1);
	send_will(TELOPT_ENCRYPT, 1);
#endif	/* ENCRYPTION */
	send_do(TELOPT_SGA, 1);
	send_will(TELOPT_TTYPE, 1);
	send_will(TELOPT_NAWS, 1);
	send_will(TELOPT_TSPEED, 1);
	send_will(TELOPT_LFLOW, 1);
	send_will(TELOPT_LINEMODE, 1);
	send_will(TELOPT_NEW_ENVIRON, 1);
	send_do(TELOPT_STATUS, 1);
	if (env_getvalue((unsigned char *)"DISPLAY"))
	    send_will(TELOPT_XDISPLOC, 1);
	if (eight)
	    tel_enter_binary(eight);
    }
#   endif /* !defined(TN3270) */

#   if !defined(TN3270)
    for (;;) {
	int schedValue;

	while ((schedValue = Scheduler(0)) != 0) {
	    if (schedValue == -1) {
		setcommandmode();
		return;
	    }
	}

	if (Scheduler(1) == -1) {
	    setcommandmode();
	    return;
	}
    }
#   else /* !defined(TN3270) */
    for (;;) {
	int schedValue;

	while (!In3270 && !shell_active) {
	    if (Scheduler(1) == -1) {
		setcommandmode();
		return;
	    }
	}

	while ((schedValue = Scheduler(0)) != 0) {
	    if (schedValue == -1) {
		setcommandmode();
		return;
	    }
	}
		/* If there is data waiting to go out to terminal, don't
		 * schedule any more data for the terminal.
		 */
	if (ring_full_count(&ttyoring)) {
	    schedValue = 1;
	} else {
	    if (shell_active) {
		if (shell_continue() == 0) {
		    ConnectScreen();
		}
	    } else if (In3270) {
		schedValue = DoTerminalOutput();
	    }
	}
	if (schedValue && (shell_active == 0)) {
	    if (Scheduler(1) == -1) {
		setcommandmode();
		return;
	    }
	}
    }
#   endif /* !defined(TN3270) */
}

#if	0	/* XXX - this not being in is a bug */
/*
 * nextitem()
 *
 *	Return the address of the next "item" in the TELNET data
 * stream.  This will be the address of the next character if
 * the current address is a user data character, or it will
 * be the address of the character following the TELNET command
 * if the current address is a TELNET IAC ("I Am a Command")
 * character.
 */

    static char *
nextitem(current)
    char *current;
{
    if ((*current&0xff) != IAC) {
	return current+1;
    }
    switch (*(current+1)&0xff) {
    case DO:
    case DONT:
    case WILL:
    case WONT:
	return current+3;
    case SB:		/* loop forever looking for the SE */
	{
	    register char *look = current+2;

	    for (;;) {
		if ((*look++&0xff) == IAC) {
		    if ((*look++&0xff) == SE) {
			return look;
		    }
		}
	    }
	}
    default:
	return current+2;
    }
}
#endif	/* 0 */

/*
 * netclear()
 *
 *	We are about to do a TELNET SYNCH operation.  Clear
 * the path to the network.
 *
 *	Things are a bit tricky since we may have sent the first
 * byte or so of a previous TELNET command into the network.
 * So, we have to scan the network buffer from the beginning
 * until we are up to where we want to be.
 *
 *	A side effect of what we do, just to keep things
 * simple, is to clear the urgent data pointer.  The principal
 * caller should be setting the urgent data pointer AFTER calling
 * us in any case.
 */

    static void
netclear()
{
#if	0	/* XXX */
    register char *thisitem, *next;
    char *good;
#define	wewant(p)	((nfrontp > p) && ((*p&0xff) == IAC) && \
				((*(p+1)&0xff) != EC) && ((*(p+1)&0xff) != EL))

    thisitem = netobuf;

    while ((next = nextitem(thisitem)) <= netobuf.send) {
	thisitem = next;
    }

    /* Now, thisitem is first before/at boundary. */

    good = netobuf;	/* where the good bytes go */

    while (netoring.add > thisitem) {
	if (wewant(thisitem)) {
	    int length;

	    next = thisitem;
	    do {
		next = nextitem(next);
	    } while (wewant(next) && (nfrontp > next));
	    length = next-thisitem;
	    memmove(good, thisitem, length);
	    good += length;
	    thisitem = next;
	} else {
	    thisitem = nextitem(thisitem);
	}
    }

#endif	/* 0 */
}

/*
 * These routines add various telnet commands to the data stream.
 */

    static void
doflush()
{
    NET2ADD(IAC, DO);
    NETADD(TELOPT_TM);
    flushline = 1;
    flushout = 1;
    (void) ttyflush(1);			/* Flush/drop output */
    /* do printoption AFTER flush, otherwise the output gets tossed... */
    printoption("SENT", DO, TELOPT_TM);
}

    void
xmitAO()
{
    NET2ADD(IAC, AO);
    printoption("SENT", IAC, AO);
    if (autoflush) {
	doflush();
    }
}


    void
xmitEL()
{
    NET2ADD(IAC, EL);
    printoption("SENT", IAC, EL);
}

    void
xmitEC()
{
    NET2ADD(IAC, EC);
    printoption("SENT", IAC, EC);
}


    int
dosynch()
{
    netclear();			/* clear the path to the network */
    NETADD(IAC);
    setneturg();
    NETADD(DM);
    printoption("SENT", IAC, DM);
    return 1;
}

int want_status_response = 0;

    int
get_status()
{
    unsigned char tmp[16];
    register unsigned char *cp;

    if (my_want_state_is_dont(TELOPT_STATUS)) {
	printf("Remote side does not support STATUS option\n");
	return 0;
    }
    cp = tmp;

    *cp++ = IAC;
    *cp++ = SB;
    *cp++ = TELOPT_STATUS;
    *cp++ = TELQUAL_SEND;
    *cp++ = IAC;
    *cp++ = SE;
    if (NETROOM() >= cp - tmp) {
	ring_supply_data(&netoring, tmp, cp-tmp);
	printsub('>', tmp+2, cp - tmp - 2);
    }
    ++want_status_response;
    return 1;
}

    void
intp()
{
    NET2ADD(IAC, IP);
    printoption("SENT", IAC, IP);
    flushline = 1;
    if (autoflush) {
	doflush();
    }
    if (autosynch) {
	dosynch();
    }
}

    void
sendbrk()
{
    NET2ADD(IAC, BREAK);
    printoption("SENT", IAC, BREAK);
    flushline = 1;
    if (autoflush) {
	doflush();
    }
    if (autosynch) {
	dosynch();
    }
}

    void
sendabort()
{
    NET2ADD(IAC, ABORT);
    printoption("SENT", IAC, ABORT);
    flushline = 1;
    if (autoflush) {
	doflush();
    }
    if (autosynch) {
	dosynch();
    }
}

    void
sendsusp()
{
    NET2ADD(IAC, SUSP);
    printoption("SENT", IAC, SUSP);
    flushline = 1;
    if (autoflush) {
	doflush();
    }
    if (autosynch) {
	dosynch();
    }
}

    void
sendeof()
{
    NET2ADD(IAC, xEOF);
    printoption("SENT", IAC, xEOF);
}

    void
sendayt()
{
    NET2ADD(IAC, AYT);
    printoption("SENT", IAC, AYT);
}

/*
 * Send a window size update to the remote system.
 */

    void
sendnaws()
{
    long rows, cols;
    unsigned char tmp[16];
    register unsigned char *cp;

    if (my_state_is_wont(TELOPT_NAWS))
	return;

#define	PUTSHORT(cp, x) { if ((*cp++ = ((x)>>8)&0xff) == IAC) *cp++ = IAC; \
			    if ((*cp++ = ((x))&0xff) == IAC) *cp++ = IAC; }

    if (TerminalWindowSize(&rows, &cols) == 0) {	/* Failed */
	return;
    }

    cp = tmp;

    *cp++ = IAC;
    *cp++ = SB;
    *cp++ = TELOPT_NAWS;
    PUTSHORT(cp, cols);
    PUTSHORT(cp, rows);
    *cp++ = IAC;
    *cp++ = SE;
    if (NETROOM() >= cp - tmp) {
	ring_supply_data(&netoring, tmp, cp-tmp);
	printsub('>', tmp+2, cp - tmp - 2);
    }
}

    void
tel_enter_binary(rw)
    int rw;
{
    if (rw&1)
	send_do(TELOPT_BINARY, 1);
    if (rw&2)
	send_will(TELOPT_BINARY, 1);
}

    void
tel_leave_binary(rw)
    int rw;
{
    if (rw&1)
	send_dont(TELOPT_BINARY, 1);
    if (rw&2)
	send_wont(TELOPT_BINARY, 1);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久夜色精品国产网站| 国产精品久久久久一区| 中文字幕高清不卡| 亚洲第一福利一区| 99久久精品国产毛片| 欧美成人女星排名| 一区二区三区在线免费观看 | 久久中文娱乐网| 无吗不卡中文字幕| a4yy欧美一区二区三区| 久久综合国产精品| 欧美aaa在线| 91麻豆精品国产91久久久久久 | 久久久精品一品道一区| 婷婷成人激情在线网| 色婷婷久久一区二区三区麻豆| 久久九九久精品国产免费直播| 美国精品在线观看| 欧美喷水一区二区| 亚洲国产中文字幕在线视频综合| 成人黄色电影在线 | 亚洲成人黄色小说| 在线日韩av片| 亚洲免费观看高清完整版在线 | 亚洲欧洲国产日韩| 国产成人a级片| 国产日韩亚洲欧美综合| 国产精品中文字幕一区二区三区| 日韩欧美的一区二区| 日本在线播放一区二区三区| 欧美麻豆精品久久久久久| 午夜精品福利一区二区三区av | 日本高清免费不卡视频| 亚洲美女视频在线观看| 91国偷自产一区二区三区观看| 亚洲欧美国产毛片在线| 国产99久久久久| 国产精品久久久久aaaa樱花| 成人黄色免费短视频| 亚洲日本在线天堂| 精品1区2区3区| 日本色综合中文字幕| 亚洲图片激情小说| 一道本成人在线| 亚洲一区二区三区四区在线 | av色综合久久天堂av综合| 国产精品美女一区二区| 91精品福利视频| 三级在线观看一区二区| 日韩欧美另类在线| 福利一区二区在线观看| 亚洲欧美色图小说| 欧美丰满少妇xxxxx高潮对白| 麻豆精品视频在线| 国产欧美日本一区二区三区| 在线观看亚洲成人| 免费成人深夜小野草| 欧美激情一区二区三区不卡 | 亚洲成人中文在线| 日韩免费视频一区| 不卡的av中国片| 亚洲成人高清在线| 久久久久久久久久看片| 99re8在线精品视频免费播放| 午夜精品一区二区三区三上悠亚| 精品福利视频一区二区三区| eeuss鲁片一区二区三区 | 欧美高清视频www夜色资源网| 理论电影国产精品| 亚洲精品日产精品乱码不卡| 欧美一二三区精品| 91玉足脚交白嫩脚丫在线播放| 日韩电影在线观看电影| 亚洲天堂网中文字| 久久综合九色综合欧美就去吻| 国产亚洲成av人在线观看导航| 色综合一区二区三区| 美女视频黄 久久| 一区二区三区视频在线看| 精品黑人一区二区三区久久 | 成人深夜在线观看| 石原莉奈在线亚洲三区| 亚洲欧美一区二区三区国产精品| 日韩精品一区二区三区中文不卡 | 日韩精品专区在线影院重磅| 91麻豆免费看| 成人妖精视频yjsp地址| 日本怡春院一区二区| 亚洲一区二区免费视频| 国产精品久久久久久久久久久免费看 | 欧美视频在线一区二区三区| 国产成人av影院| 美腿丝袜亚洲一区| 午夜久久电影网| 亚洲另类春色校园小说| 国产精品美女久久福利网站| 精品人在线二区三区| 欧美一区二区网站| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 欧美人伦禁忌dvd放荡欲情| 91在线国内视频| 成人黄色小视频| 盗摄精品av一区二区三区| 国产乱人伦精品一区二区在线观看 | 国产传媒一区在线| 久久丁香综合五月国产三级网站| 五月综合激情婷婷六月色窝| 亚洲电影第三页| 亚洲一区在线播放| 亚洲高清在线视频| 视频一区二区不卡| 蜜臀精品一区二区三区在线观看 | 蜜臀av性久久久久蜜臀av麻豆| 亚洲3atv精品一区二区三区| 亚洲综合无码一区二区| 亚洲第一在线综合网站| 亚洲成a人片综合在线| 亚洲第一福利一区| 丝袜美腿亚洲综合| 久久爱www久久做| 国产一区二区三区在线观看免费| 久久电影国产免费久久电影 | 国产午夜精品在线观看| 日本一区二区动态图| 国产精品久久久久永久免费观看 | 亚洲欧洲成人自拍| 亚洲三级电影全部在线观看高清| 亚洲精品成a人| 亚洲sss视频在线视频| 久久成人免费电影| 成人激情图片网| 在线视频国内自拍亚洲视频| 欧美一区二区三区喷汁尤物| 精品国产百合女同互慰| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 91视频com| 欧美一级久久久久久久大片| 久久青草欧美一区二区三区| 国产精品久久久久久久浪潮网站| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 一区二区三区四区蜜桃 | 日本丶国产丶欧美色综合| 欧美色国产精品| 亚洲精品一区二区三区影院| 国产精品全国免费观看高清 | 日韩女同互慰一区二区| 中文字幕欧美三区| 亚洲成av人在线观看| 国产一区二区久久| 在线视频综合导航| 精品国产在天天线2019| 亚洲欧洲av一区二区三区久久| 天天综合天天综合色| 国产成人亚洲综合色影视| 91豆麻精品91久久久久久| 精品久久久久99| 亚洲韩国精品一区| 国产成人精品一区二区三区四区 | 亚洲精品国产精华液| 麻豆91小视频| 色妹子一区二区| 精品国产伦一区二区三区观看体验| ㊣最新国产の精品bt伙计久久| 青青国产91久久久久久| 北条麻妃一区二区三区| 欧美不卡一二三| 亚洲成年人影院| av网站免费线看精品| 久久亚洲春色中文字幕久久久| 午夜久久久影院| 在线观看日韩精品| 中文字幕一区二区三区精华液 | 国产日产精品一区| 蜜臀av性久久久久蜜臀av麻豆| 91麻豆蜜桃一区二区三区| 久久久久国产精品人| 免费观看在线综合| 欧美片在线播放| 亚洲小少妇裸体bbw| aaa欧美色吧激情视频| 国产午夜亚洲精品羞羞网站| 老司机精品视频在线| 91.com视频| 丝袜亚洲精品中文字幕一区| 欧美日韩视频在线一区二区 | 日韩一区二区三区电影在线观看| 亚洲精品va在线观看| 99视频国产精品| 国产精品国产成人国产三级| 国产精品资源在线观看| 久久精品人人做| 丁香另类激情小说| 国产精品网站在线播放| 成人午夜免费视频| 国产精品视频线看| www.亚洲激情.com| 日韩理论在线观看| 欧美视频在线一区二区三区| 亚洲国产成人tv| 日韩视频一区二区在线观看|