From owner-p4-projects@FreeBSD.ORG Thu Jul 21 11:39:33 2011 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 2B6641065673; Thu, 21 Jul 2011 11:39:33 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E25A91065670 for ; Thu, 21 Jul 2011 11:39:32 +0000 (UTC) (envelope-from cnicutar@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id B72918FC0A for ; Thu, 21 Jul 2011 11:39:32 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id p6LBdWAl056321 for ; Thu, 21 Jul 2011 11:39:32 GMT (envelope-from cnicutar@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id p6LBdWel056318 for perforce@freebsd.org; Thu, 21 Jul 2011 11:39:32 GMT (envelope-from cnicutar@freebsd.org) Date: Thu, 21 Jul 2011 11:39:32 GMT Message-Id: <201107211139.p6LBdWel056318@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to cnicutar@freebsd.org using -f From: Catalin Nicutar To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 196496 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Jul 2011 11:39:33 -0000 http://p4web.freebsd.org/@@196496?ac=10 Change 196496 by cnicutar@cnicutar_cronos on 2011/07/21 11:38:33 Add UTO support to telnet command mode. Affected files ... .. //depot/projects/soc2011/cnicutar_tcputo_8/src/contrib/telnet/telnet/commands.c#3 edit .. //depot/projects/soc2011/cnicutar_tcputo_8/src/contrib/telnet/telnet/externs.h#3 edit .. //depot/projects/soc2011/cnicutar_tcputo_8/src/contrib/telnet/telnet/main.c#3 edit Differences ... ==== //depot/projects/soc2011/cnicutar_tcputo_8/src/contrib/telnet/telnet/commands.c#3 (text+ko) ==== @@ -878,6 +878,7 @@ { "escape", "character to escape back to telnet command mode", NULL, &escape }, { "rlogin", "rlogin escape character", 0, &rlogin }, { "tracefile", "file to write trace information to", SetNetTrace, (cc_t *)NetTraceFile}, + { "timeout", "tcp timeout for this connection", set_timeout, NULL}, { " ", "", NULL, NULL }, { " ", "The following need 'localchars' to be toggled true", NULL, NULL }, { "flushoutput", "character to cause an Abort Output", NULL, termFlushCharp }, @@ -920,6 +921,21 @@ } } +void +set_timeout(char *s) +{ + if (s == NULL) { + uto = 0; + /* There is not way to "take it back". */ + return; + } + /* Setting the timeout if net is a valid descriptor. */ + uto = strtonum(s, 0, INT_MAX, NULL); + if (uto && net > 0 && setsockopt(net, IPPROTO_TCP, TCP_SNDUTO_TIMEOUT, + &uto, sizeof(uto))) + perror("setsockopt UTO"); +} + static int setcmd(int argc, char *argv[]) { @@ -977,7 +993,8 @@ return 0; } else if (ct->handler) { (*ct->handler)(argv[2]); - printf("%s set to \"%s\".\n", ct->name, (char *)ct->charp); + if (ct->charp) + printf("%s set to \"%s\".\n", ct->name, (char *)ct->charp); } else { if (strcmp("off", argv[2])) { value = special(argv[2]); @@ -1043,7 +1060,8 @@ return 0; } else if (ct->handler) { (*ct->handler)(0); - printf("%s reset to \"%s\".\n", ct->name, (char *)ct->charp); + if (ct->charp) + printf("%s reset to \"%s\".\n", ct->name, (char *)ct->charp); } else { *(ct->charp) = _POSIX_VDISABLE; printf("%s character is '%s'.\n", ct->name, control(*(ct->charp))); ==== //depot/projects/soc2011/cnicutar_tcputo_8/src/contrib/telnet/telnet/externs.h#3 (text+ko) ==== @@ -261,6 +261,7 @@ setcommandmode(void), set_escape_char(char *s), setneturg(void), + set_timeout(char *s), sys_telnet_init(void), telnet(char *), tel_enter_binary(int), ==== //depot/projects/soc2011/cnicutar_tcputo_8/src/contrib/telnet/telnet/main.c#3 (text+ko) ==== @@ -304,7 +304,10 @@ src_addr = optarg; break; case 't': - uto = strtonum(optarg, 0, INT_MAX, NULL); + set_timeout(optarg); + if (!uto) + fprintf(stderr, "Warning: timeout `%s'" + " ignored\n", optarg); break; case 'u': family = AF_UNIX;