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

📄 do_echo.c

📁 tcp/ip原理的第三卷
💻 C
字号:
/* do_echo.c - do_echo */

#include <sys/types.h>

#include <termios.h>
#include <stdio.h>

#include "telnet.h"

char		doecho;		/* nonzero, if remote ECHO	*/
extern u_char	option_cmd;

/*------------------------------------------------------------------------
 * do_echo - handle TELNET WILL/WON'T ECHO option
 *------------------------------------------------------------------------
 */
int
do_echo(rfp, tfp, c)
FILE    *rfp, *tfp;
int     c;
{
        struct termios  tio;
	static char	savec[2];
	int		ok, tfd = fileno(tfp);

	if (doecho) {
		if (option_cmd == TCWILL)
			return 0;	/* already doing ECHO		*/
	} else if (option_cmd == TCWONT)
		return 0;		/* already NOT doing ECHO	*/

        if (ok = tcgetattr(tfd, &tio) == 0) {
        	if (option_cmd == TCWILL) {
              	 	tio.c_lflag &= ~(ECHO | ICANON);
			/* VMIN & VTIME are overloaded with other chars,
			 * so save and restore them later.
			 */
			savec[0] = tio.c_cc[VMIN];
			savec[1] = tio.c_cc[VTIME];
			tio.c_cc[VMIN] = 1;
			tio.c_cc[VTIME] = 0;
		} else {
			tio.c_lflag |= (ECHO | ICANON);
			tio.c_cc[VMIN] = savec[0];
			tio.c_cc[VTIME] = savec[1];
		}
		ok &= tcsetattr(tfd, TCSADRAIN, &tio) == 0;
        }
	if (ok)
		doecho = !doecho;
        (void) putc(TCIAC, rfp);
        if (doecho)
                (void) putc(TCDO, rfp);
        else
                (void) putc(TCDONT, rfp);
	(void) putc((char)c, rfp);
	return 0;
}

⌨️ 快捷键说明

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