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

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

?? telopt.c

?? 支持Telnet功能的Modem通訊程序
?? C
字號:
#include <stdio.h>	/*stderr,(fprintf)*/#include <sys/time.h>	/*->ttybuf.h (timeval)*/#define TELCMDS /*to use strings defined in telnet.h*/#define TELOPTS#include <arpa/telnet.h>/*IAC,DO,DONT,...*/#include "defs.h"	/*->sockbuf.h (uchar,SOCKBUFR_SIZE,TTYBUFR_SIZE)*/#include "sockbuf.h"	/*->telopt.h (putSock1)*/#include "telopt.h"	/*TelOptReq,TelOptEnt*/#include "ttybuf.h"	/*(putTtyN)*/#include "atcmd.h"	/*atcmd*/#include "verbose.h"	/*VERB_TELOPT*//* telnet option negotiation module */static TelOptStates stTabMaster[] = {    /*[opt]		[local]		[remote]*/    { TELOPT_BINARY,	{TOR_BETTER},	{TOR_BETTER}	},/*0*/    { TELOPT_ECHO,	{TOR_MUSTNOT},	{TOR_BETTER}	},/*1*/    { TELOPT_SGA,	{TOR_BETTER},	{TOR_MUST}	},/*3*/    { TELOPT_TTYPE,	{TOR_NEUTRAL},	{TOR_MUSTNOT}	},/*24*/    { -1,		{TOR_MUSTNOT},	{TOR_MUSTNOT}	} /* default state */};TelOptStates *stTab[NTELOPTS]; /* telOptInit() makes it usable */static /*const*/ TelOptStates *defaultSt; /* used when unknown options come *//* must call before each telnet session begins */voidtelOptReset(void){    TelOptStates *tosp;    for (tosp = stTabMaster; tosp->opt >= 0; tosp++) {	tosp->local.state = 	tosp->remote.state = 0; /* all options are disabled initially */	tosp->local.pending = 	tosp->remote.pending = 0;    }    telOpt.binsend =    telOpt.binrecv =    telOpt.sgasend = 0;    telOpt.sentReqs = 0;}/* must call once before using this module */voidtelOptInit(void){    TelOptStates *tosp;    int i;    for (tosp = stTabMaster; tosp->opt >= 0; tosp++) ;    for (i = 0; i < NTELOPTS; i++) stTab[i] = tosp; /* default entry */    defaultSt = tosp;    for (tosp-- ; tosp >= stTabMaster; tosp--) {	stTab[tosp->opt] = tosp;    }    telOpt.stTab = stTab;}static const char *telcmdStr(int cmd){    static char str[16];#ifndef TELCMD_FIRST /*is this rule correct for all telnet.h?*/#define TELCMD_FIRST (256 - sizeof(telcmds)/sizeof(telcmds[0]))#endif    if (cmd >= TELCMD_FIRST) {	return telcmds[cmd - TELCMD_FIRST];    } else {	sprintf(str, "?(%d)", cmd);	return str;    }}static const char *teloptStr(int opt){    static char str[16];    if (opt < NTELOPTS) {	return telopts[opt];    } else {	sprintf(str, "?(%d)", opt);	return str;    }}voidtelOptPrintCmd(const char *str, int cmd){    verboseOut(VERB_TELOPT, "%s IAC %s\r\n", str, telcmdStr(cmd));}static voidprintCmdOpt(const char *str, int cmd, int opt){    verboseOut(VERB_TELOPT, "%s %s %s\r\n", str, telcmdStr(cmd), teloptStr(opt));}static voidsetReqs(void){    static TelOptReq tabP[]	= { TOR_BETTERNOT, TOR_BETTER, TOR_MUSTNOT, TOR_MUST };    static TelOptReq tabN[]	= { TOR_BETTER, TOR_BETTERNOT, TOR_MUST, TOR_MUSTNOT };    /* %Bn=m (binary mode control) */    stTab[TELOPT_BINARY]->local.req = tabP[atcmd.pb[1]];    stTab[TELOPT_BINARY]->remote.req = tabP[atcmd.pb[0]];    /* %Ln (linemode control) */    stTab[TELOPT_SGA]->remote.req = tabN[atcmd.pl];    stTab[TELOPT_ECHO]->remote.req = tabN[atcmd.pl];    /* %Tn (terminal-type response control) */    stTab[TELOPT_TTYPE]->local.req = atcmd.pt.wont? TOR_MUSTNOT : TOR_NEUTRAL;}/* tell the peer my option-state-to-be requests */voidtelOptSendReqs(void){    TelOptStates *tosp;    setReqs();    for (tosp = stTabMaster; tosp->opt >= 0; tosp++) {	switch (tosp->local.req) {	case TOR_MUSTNOT:	case TOR_BETTERNOT:	    if (tosp->local.state == 1) {		putOptCmd(WONT, tosp->opt);		printCmdOpt(">", WONT, tosp->opt);		tosp->local.pending = 1;	    }	    break;	case TOR_BETTER:	case TOR_MUST:	    if (tosp->local.state == 0) {		putOptCmd(WILL, tosp->opt);		printCmdOpt(">", WILL, tosp->opt);		tosp->local.pending = 1;	    }	    break;	default:;	}	    	switch (tosp->remote.req) {	case TOR_MUSTNOT:	case TOR_BETTERNOT:	    if (tosp->remote.state == 1) {		putOptCmd(DONT, tosp->opt);		printCmdOpt(">", DONT, tosp->opt);		tosp->remote.pending = 1;	    }	    break;	case TOR_BETTER:	case TOR_MUST:	    if (tosp->remote.state == 0) {		putOptCmd(DO, tosp->opt);		printCmdOpt(">", DO, tosp->opt);		tosp->remote.pending = 1;	    }	    break;	default:;	}	        }    telOpt.sentReqs = 1;}/* summarize option states into flags */static voidtelOptSummarize(void){    telOpt.binsend = stTab[TELOPT_BINARY]->local.state;    telOpt.binrecv = stTab[TELOPT_BINARY]->remote.state;    telOpt.sgasend = stTab[TELOPT_SGA]->remote.state;}/* telnet option request/response handling */inttelOptHandle(int cmd, int opt){    TelOptState *tostp;    TelOptStates *tosp;    int reqState;	/* cmd's requiring state */    int posiResCmd;	/* positive response command for cmd */    int negaResCmd;	/* negative response command for cmd */    TelOptReq mustNegate;	/* must negate if req is this */    TelOptReq betterNegate;	/* better negate if req is this */    TelOptReq betterAssert;	/* better assert if req is this */    TelOptReq mustAssert;	/* must assert if req is this */    printCmdOpt("<", cmd, opt);    tosp = (opt < NTELOPTS)? stTab[opt] : defaultSt;    switch (cmd) {    case WILL:	tostp = &tosp->remote;	reqState = 1;	mustNegate = TOR_MUSTNOT;	betterNegate = TOR_BETTERNOT;	betterAssert = TOR_BETTER;	mustAssert = TOR_MUST;	posiResCmd = DO;	negaResCmd = DONT;	break;    case WONT:	tostp = &tosp->remote;	reqState = 0;	mustNegate = TOR_MUST;	betterNegate = TOR_BETTER;	betterAssert = TOR_BETTERNOT;	mustAssert = TOR_MUSTNOT;	posiResCmd = DONT;	negaResCmd = DO;	break;    case DO:	tostp = &tosp->local;	reqState = 1;	mustNegate = TOR_MUSTNOT;	betterNegate = TOR_BETTERNOT;	betterAssert = TOR_BETTER;	mustAssert = TOR_MUST;	posiResCmd = WILL;	negaResCmd = WONT;	break;    case DONT:	tostp = &tosp->local;	reqState = 0;	mustNegate = TOR_MUST;	betterNegate = TOR_BETTER;	betterAssert = TOR_BETTERNOT;	mustAssert = TOR_MUSTNOT;	posiResCmd = WONT;	negaResCmd = WILL;	break;    default:	fprintf(stderr, "bug\r\n");	exit(1);    }    if (tostp->req == mustNegate || tostp->req == betterNegate) {	if (tostp->pending) {	    tostp->pending = 0;	    if (tostp->req == mustNegate)		return 1; /* requirment didn't meet */	    if (tostp->state == !reqState) { /* this may not happen */		tostp->state = reqState;		putOptCmd(posiResCmd, opt); /* positive response */		printCmdOpt(">", posiResCmd, opt);	    }	} else {	    putOptCmd(negaResCmd, opt); /* negative response */	    printCmdOpt(">", negaResCmd, opt);	}    } else /*if (tostp->req == betterAssert or mustAssert or TOR_NEUTRAL)*/ {	if (tostp->pending) {	    tostp->pending = 0;	    /* don't response because cmd is the response of my request */	} else {	    putOptCmd(posiResCmd, opt); /* positive response */	    printCmdOpt(">", posiResCmd, opt);	}	tostp->state = reqState; /* {en,dis}able option as requested */    }    telOptSummarize();    return 0;}/* send term-type subnego param */static voidttypeSBHandle(void){    putSock1(IAC);    putSock1(SB);    putSock1(TELOPT_TTYPE);    putSock1(TELQUAL_IS);    putSockN(atcmd.pt.str, atcmd.pt.len);    putSock1(IAC);    putSock1(SE);    verboseOut(VERB_TELOPT, "> SB %s IS %s SE\r\n",	     telopts[TELOPT_TTYPE], atcmd.pt.str);}/* telnet option subnegotiation request handling */inttelOptSBHandle(int opt){    verboseOut(VERB_TELOPT, "< SB %s SEND SE.\r\n", telopts[opt]);    switch (opt) {    case TELOPT_TTYPE:	ttypeSBHandle();	break;    default:	return 1;    }    return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产一级| 亚洲精品在线观看网站| 欧美日韩精品专区| 精品欧美一区二区三区精品久久| 日本一区二区三区电影| 久久精品视频一区二区| 亚洲欧洲日产国产综合网| 亚洲人成人一区二区在线观看| 一卡二卡三卡日韩欧美| 成人app网站| 欧美一区二区三区免费大片| 久久久无码精品亚洲日韩按摩| 亚洲精品日韩专区silk| 天天色 色综合| 99麻豆久久久国产精品免费优播| 欧美三级三级三级爽爽爽| 国产亚洲精品aa| 美女高潮久久久| 中文字幕制服丝袜成人av| 欧美精品粉嫩高潮一区二区| 国产成人精品免费一区二区| 国产精品国模大尺度视频| 欧美精品一区二区三区很污很色的| 国产午夜一区二区三区| 成人在线综合网| 麻豆精品在线视频| 国产欧美一区二区精品性色 | 日韩亚洲欧美中文三级| 麻豆免费精品视频| 日韩理论片中文av| 欧美高清视频一二三区 | 午夜电影久久久| 国产一区二区三区日韩| 在线影院国内精品| 国产日韩一级二级三级| 亚洲国产精品精华液网站| 国产传媒欧美日韩成人| 欧美一区二区三区免费大片| 国产精品国产a| 成人av在线观| 国产欧美日韩在线视频| 奇米影视一区二区三区小说| 91国在线观看| 亚洲一区二区三区不卡国产欧美| 国内外成人在线视频| 337p亚洲精品色噜噜狠狠| 亚洲伦在线观看| 欧美日韩中文字幕一区二区| 久久夜色精品国产噜噜av| 日本在线不卡视频| 精品免费国产二区三区| 国产一区二区三区四区五区入口 | 日韩欧美国产三级电影视频| 亚洲成人自拍一区| 欧美精品一区二区三区蜜桃视频| 另类成人小视频在线| 国产蜜臀av在线一区二区三区| 精品国精品自拍自在线| 国产成人免费在线视频| 日韩精品亚洲专区| 午夜不卡av免费| 伊人婷婷欧美激情| 亚洲欧美激情在线| 欧美精彩视频一区二区三区| 日韩欧美国产电影| 日韩三级视频在线观看| 欧美写真视频网站| 欧美日韩亚洲国产综合| 成人精品视频.| 国产乱码精品1区2区3区| 激情综合网av| 蜜桃久久av一区| 美女视频黄a大片欧美| 性久久久久久久| 日韩精品国产精品| 老司机精品视频导航| 日韩激情一二三区| 久久不见久久见中文字幕免费| 久久99国产精品免费| 亚洲成人tv网| 国产成人午夜精品5599| 99久久精品免费观看| 色狠狠一区二区| 欧美一区二区三区性视频| 国产亚洲欧洲一区高清在线观看| 国产亚洲精品bt天堂精选| 亚洲精品免费电影| 久久99深爱久久99精品| av成人老司机| 欧美视频精品在线观看| 久久久久久久综合| 亚洲欧美日韩国产综合在线| 日韩va亚洲va欧美va久久| 国产麻豆精品在线| 色综合久久中文字幕| 日韩一级免费一区| 一区二区在线看| 国产精品正在播放| 欧美日韩1234| 国产精品久久久久久久裸模| 亚洲h在线观看| 成人av影视在线观看| 欧美日韩一区三区| 亚洲天堂成人在线观看| 亚洲另类春色国产| 精品国产3级a| 极品少妇一区二区三区精品视频| 欧美熟乱第一页| 午夜精品久久久久久久久久| 在线观看免费亚洲| 午夜久久久影院| 91精品国产aⅴ一区二区| 日产精品久久久久久久性色| 欧美视频在线一区| 日韩av中文字幕一区二区三区| 欧美人与性动xxxx| caoporm超碰国产精品| 国产精品午夜在线| 91视频观看视频| 日韩电影免费在线| 欧美激情中文字幕| 91美女福利视频| 麻豆成人久久精品二区三区小说| 精品久久久久久久久久久久久久久久久| 免费精品视频在线| 中文字幕免费观看一区| 粉嫩一区二区三区在线看| 亚洲国产成人在线| 色呦呦一区二区三区| 精品一区二区三区av| 中文字幕av在线一区二区三区| 国产成人av电影| 亚洲一区二区免费视频| 欧美一区二区三区的| 黑人精品欧美一区二区蜜桃| 国产亚洲自拍一区| 欧美亚洲国产一区二区三区va| 亚洲成a人片在线不卡一二三区| 欧美精品久久久久久久多人混战 | 91精品在线免费观看| 美女www一区二区| 国产精品美女www爽爽爽| 在线观看av一区| 国产高清亚洲一区| 亚洲狠狠丁香婷婷综合久久久| 日韩视频免费观看高清完整版 | 国产精品一区二区黑丝| 亚洲黄色录像片| 玉足女爽爽91| 国产日韩欧美综合一区| 在线观看三级视频欧美| 国产一区二区三区av电影| 亚洲综合一区在线| 亚洲欧美在线高清| 久久亚洲欧美国产精品乐播| 欧美在线观看视频在线| 国内精品在线播放| 日本视频在线一区| 亚洲va国产天堂va久久en| 亚洲欧洲日产国码二区| 久久久久久久综合狠狠综合| 91精品国产综合久久精品性色| 91麻豆国产自产在线观看| 成人av网站在线观看| 成人黄色av电影| 97精品久久久午夜一区二区三区| 黄页网站大全一区二区| 视频一区视频二区在线观看| 亚洲综合色婷婷| 蜜臀久久久久久久| 麻豆91精品视频| 久草在线在线精品观看| 国内成+人亚洲+欧美+综合在线| 99国产精品久| 欧美制服丝袜第一页| 欧美影视一区在线| 欧美一区二区三区啪啪| 日韩一级欧美一级| 中文字幕精品一区二区精品绿巨人| 精品国产伦一区二区三区观看体验 | 日韩精品综合一本久道在线视频| 日韩一区二区在线播放| 欧美成人vps| 亚洲免费观看高清完整版在线观看 | 日韩一区在线播放| 日韩国产精品久久久| 国产成人精品亚洲日本在线桃色| 色哟哟日韩精品| 欧美mv日韩mv亚洲| 亚洲区小说区图片区qvod| 日本视频一区二区| 日韩久久精品一区| 亚洲视频香蕉人妖| 国产在线看一区| 欧洲人成人精品| 国产片一区二区三区| 日本中文字幕一区二区视频 | 中文字幕一区二区三区乱码在线| 亚洲成人免费观看| 色综合久久久久综合体|