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

📄 commands.c

📁 linux下c语言编写的telnet客户端程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    }    if (!connected && needconnect) {	printf("?Need to be connected first.\r\n");	printf("'send ?' for help\r\n");	return 0;    }    /* Now, do we have enough room? */    if (NETROOM() < count) {	printf("There is not enough room in the buffer TO the network\r\n");	printf("to process your request.  Nothing will be done.\r\n");	printf("('send synch' will throw away most data in the network\r\n");	printf("buffer, if this might help.)\r\n");	return 0;    }    /* OK, they are all OK, now go through again and actually send */    count = 0;    for (i = 1; i < argc; i++) {	if ((s = GETSEND(argv[i])) == 0) {	    fprintf(stderr, "Telnet 'send' error - argument disappeared!\r\n");	    (void) quit();	    /*NOTREACHED*/	}	if (s->handler) {	    count++;#if 0	/* XXX no command takes more than 1 arg */	    success += (*s->handler)((s->narg > 0) ? argv[i+1] : 0,				  (s->narg > 1) ? argv[i+2] : 0);#else	    success += (*s->handler)((s->narg > 0) ? argv[i+1] : NULL);#endif	    i += s->narg;	} else {	    NET2ADD(IAC, s->what);	    printoption("SENT", IAC, s->what);	}    }    return (count == success);}typedef	void (*tncmd_handler_t)	P((int, int));	static intsend_tncmd(tncmd_handler_t func, const char *cmd, const char *name);    static intsend_esc(const char *arg){   (void)arg;    NETADD(escape);    return 1;}    static intsend_docmd(const char *name){    return(send_tncmd(send_do, "do", name));}    static intsend_dontcmd(const char *name){    return(send_tncmd(send_dont, "dont", name));}    static intsend_willcmd(const char *name){    return(send_tncmd(send_will, "will", name));}    static intsend_wontcmd(const char *name){    return(send_tncmd(send_wont, "wont", name));}extern char *telopts[];    intsend_tncmd(tncmd_handler_t func, const char *cmd, const char *name){    char **cpp;    int val = 0;    if (isprefix(name, "help") || isprefix(name, "?")) {	int col, len;	printf("Usage: send %s <value|option>\r\n", cmd);	printf("\"value\" must be from 0 to 255\r\n");	printf("Valid options are:\r\n\t");	col = 8;	for (cpp = telopts; *cpp; cpp++) {	    len = strlen(*cpp) + 3;	    if (col + len > 65) {		printf("\r\n\t");		col = 8;	    }	    printf(" \"%s\"", *cpp);	    col += len;	}	printf("\r\n");	return 0;    }    cpp = (char **)genget(name, telopts, sizeof(char *));    if (Ambiguous(cpp)) {	fprintf(stderr,"'%s': ambiguous argument ('send %s ?' for help).\r\n",					name, cmd);	return 0;    }    if (cpp) {	val = cpp - telopts;    } else {	const char *cp = name;	while (*cp >= '0' && *cp <= '9') {	    val *= 10;	    val += *cp - '0';	    cp++;	}	if (*cp != 0) {	    fprintf(stderr, "'%s': unknown argument ('send %s ?' for help).\r\n",					name, cmd);	    return 0;	} else if (val < 0 || val > 255) {	    fprintf(stderr, "'%s': bad value ('send %s ?' for help).\r\n",					name, cmd);	    return 0;	}    }    if (!connected) {	printf("?Need to be connected first.\r\n");	return 0;    }    (*func)(val, 1);    return 1;}    static intsend_help(const char *arg){    struct sendlist *s;	/* pointer to current command */    (void)arg;    for (s = Sendlist; s->name; s++) {	if (s->help)	    printf("%-15s %s\r\n", s->name, s->help);    }    return(0);}/* * The following are the routines and data structures referred * to by the arguments to the "toggle" command. */    static intlclchars(int arg){    (void)arg;    donelclchars = 1;    return 1;}    static inttogdebug(int arg){    (void)arg;#ifndef	NOT43    if (net > 0 &&	(SetSockOpt(net, SOL_SOCKET, SO_DEBUG, debug)) < 0) {	    perror("setsockopt (SO_DEBUG)");    }#else	/* NOT43 */    if (debug) {	if (net > 0 && SetSockOpt(net, SOL_SOCKET, SO_DEBUG, 0, 0) < 0)	    perror("setsockopt (SO_DEBUG)");    } else	printf("Cannot turn off socket debugging\r\n");#endif	/* NOT43 */    return 1;}    static inttogcrlf(int arg){    (void)arg;    if (crlf) {	printf("Will send carriage returns as telnet <CR><LF>.\r\n");    } else {	printf("Will send carriage returns as telnet <CR><NUL>.\r\n");    }    return 1;}int binmode;    static inttogbinary(int val){    donebinarytoggle = 1;    if (val >= 0) {	binmode = val;    } else {	if (my_want_state_is_will(TELOPT_BINARY) &&				my_want_state_is_do(TELOPT_BINARY)) {	    binmode = 1;	} else if (my_want_state_is_wont(TELOPT_BINARY) &&				my_want_state_is_dont(TELOPT_BINARY)) {	    binmode = 0;	}	val = binmode ? 0 : 1;    }    if (val == 1) {	if (my_want_state_is_will(TELOPT_BINARY) &&					my_want_state_is_do(TELOPT_BINARY)) {	    printf("Already operating in binary mode with remote host.\r\n");	} else {	    printf("Negotiating binary mode with remote host.\r\n");	    tel_enter_binary(3);	}    } else {	if (my_want_state_is_wont(TELOPT_BINARY) &&					my_want_state_is_dont(TELOPT_BINARY)) {	    printf("Already in network ascii mode with remote host.\r\n");	} else {	    printf("Negotiating network ascii mode with remote host.\r\n");	    tel_leave_binary(3);	}    }    return 1;}    static inttogrbinary(int val){    donebinarytoggle = 1;    if (val == -1)	val = my_want_state_is_do(TELOPT_BINARY) ? 0 : 1;    if (val == 1) {	if (my_want_state_is_do(TELOPT_BINARY)) {	    printf("Already receiving in binary mode.\r\n");	} else {	    printf("Negotiating binary mode on input.\r\n");	    tel_enter_binary(1);	}    } else {	if (my_want_state_is_dont(TELOPT_BINARY)) {	    printf("Already receiving in network ascii mode.\r\n");	} else {	    printf("Negotiating network ascii mode on input.\r\n");	    tel_leave_binary(1);	}    }    return 1;}    static inttogxbinary(int val){    donebinarytoggle = 1;    if (val == -1)	val = my_want_state_is_will(TELOPT_BINARY) ? 0 : 1;    if (val == 1) {	if (my_want_state_is_will(TELOPT_BINARY)) {	    printf("Already transmitting in binary mode.\r\n");	} else {	    printf("Negotiating binary mode on output.\r\n");	    tel_enter_binary(2);	}    } else {	if (my_want_state_is_wont(TELOPT_BINARY)) {	    printf("Already transmitting in network ascii mode.\r\n");	} else {	    printf("Negotiating network ascii mode on output.\r\n");	    tel_leave_binary(2);	}    }    return 1;}static int togglehelp P((int));#if	defined(AUTHENTICATION)extern int auth_togdebug P((int));#endif#if    defined(ENCRYPTION)extern int EncryptAutoEnc P((int));extern int EncryptAutoDec P((int));extern int EncryptDebug P((int));extern int EncryptVerbose P((int));#endiftypedef int (*toggle_handler_t)	P((int));struct togglelist {    const char	*name;		/* name of toggle */    const char	*help;		/* help message */    toggle_handler_t handler;	/* routine to do actual setting */    int		*variable;    char	*actionexplanation;    int		needconnect;	/* Need to be connected */};static struct togglelist Togglelist[] = {    { "autoflush",	"flushing of output when sending interrupt characters",	    0,		&autoflush,		    "flush output when sending interrupt characters", 0 },    { "autosynch",	"automatic sending of interrupt characters in urgent mode",	    0,

⌨️ 快捷键说明

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