o Fix two unlikely descriptor leaks.

o Output the correct device for "show modem"
  while in -direct mode.
o Cosmetic:  Moan a bit more when we can't open
  the [modem] device.
o Call OpenModem() in a more "natural" way.
o Add some LogDEBUG in OpenModem().
This commit is contained in:
Brian Somers 1997-09-16 23:15:16 +00:00
parent 5ef5a78cd2
commit bc24029963
4 changed files with 73 additions and 41 deletions

View File

@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: command.c,v 1.79 1997/09/09 23:23:24 brian Exp $
* $Id: command.c,v 1.80 1997/09/09 23:56:29 brian Exp $
*
*/
#include <sys/types.h>
@ -161,8 +161,7 @@ DialCommand(struct cmdtab const * cmdlist, int argc, char **argv)
do {
if (VarTerm)
fprintf(VarTerm, "Dial attempt %u of %d\n", ++tries, VarDialTries);
modem = OpenModem(mode);
if (modem < 0) {
if (OpenModem(mode) < 0) {
if (VarTerm)
fprintf(VarTerm, "Failed to open modem.\n");
break;
@ -747,8 +746,7 @@ TerminalCommand(struct cmdtab const * list, int argc, char **argv)
}
if (!IsInteractive())
return (1);
modem = OpenModem(mode);
if (modem < 0) {
if (OpenModem(mode) < 0) {
if (VarTerm)
fprintf(VarTerm, "Failed to open modem.\n");
return (1);
@ -814,7 +812,7 @@ SetModemSpeed(struct cmdtab const * list, int argc, char **argv)
int speed;
if (argc > 0) {
if (strcmp(*argv, "sync") == 0) {
if (strcasecmp(*argv, "sync") == 0) {
VarSpeed = 0;
return 0;
}

View File

@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: main.c,v 1.76 1997/08/31 22:59:39 brian Exp $
* $Id: main.c,v 1.77 1997/09/04 00:38:19 brian Exp $
*
* TODO:
* o Add commands for traffic summary, version display, etc.
@ -708,12 +708,14 @@ DoLoop()
if (mode & MODE_DIRECT) {
LogPrintf(LogDEBUG, "Opening modem\n");
modem = OpenModem(mode);
if (OpenModem(mode) < 0)
return;
LogPrintf(LogPHASE, "Packet mode enabled\n");
PacketMode();
} else if (mode & MODE_DEDICATED) {
if (modem < 0)
modem = OpenModem(mode);
while (OpenModem(mode) < 0)
sleep(VarReconnectTimer);
}
fflush(VarTerm);
@ -766,8 +768,7 @@ DoLoop()
*/
if (dial_up && RedialTimer.state != TIMER_RUNNING) {
LogPrintf(LogDEBUG, "going to dial: modem = %d\n", modem);
modem = OpenModem(mode);
if (modem < 0) {
if (OpenModem(mode) < 0) {
tries++;
if (!(mode & MODE_DDIAL) && VarDialTries)
LogPrintf(LogCHAT, "Failed to open modem (attempt %u of %d)\n",

View File

@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: modem.c,v 1.50 1997/08/31 22:59:41 brian Exp $
* $Id: modem.c,v 1.51 1997/09/10 02:20:30 brian Exp $
*
* TODO:
*/
@ -312,15 +312,14 @@ ModemTimeout()
DownConnection();
}
}
} else {
if (!Online) {
time(&uptime);
LogPrintf(LogPHASE, "Connected!\n");
mbits = TIOCM_CD;
connect_count++;
} else if (uptime == 0) {
time(&uptime);
}
} else if (!Online) {
/* mbits was set to zero in OpenModem() */
time(&uptime);
LogPrintf(LogPHASE, "Connected!\n");
mbits = TIOCM_CD;
connect_count++;
} else if (uptime == 0) {
time(&uptime);
}
}
@ -331,6 +330,7 @@ StartModemTimer()
ModemTimer.state = TIMER_STOPPED;
ModemTimer.load = SECTICKS;
ModemTimer.func = ModemTimeout;
LogPrintf(LogDEBUG, "ModemTimer using ModemTimeout() - %p\n", ModemTimeout);
StartTimer(&ModemTimer);
}
@ -438,18 +438,25 @@ OpenModem(int mode)
char *host, *cp, *port;
int res;
mbits = 0;
if (mode & MODE_DIRECT) {
if (modem >= 0)
LogPrintf(LogDEBUG, "OpenModem: Modem is already open!\n");
/* We're going back into "term" mode */
else if (mode & MODE_DIRECT) {
if (isatty(0)) {
modem = open(ctermid(NULL), O_RDWR | O_NONBLOCK);
char *dev;
modem = open(dev = ctermid(NULL), O_RDWR | O_NONBLOCK);
if (modem < 0) {
LogPrintf(LogPHASE, "Open Failed %s\n", ctermid(NULL));
return (modem);
LogPrintf(LogERROR, "OpenModem(direct) failed: %s: %s\n",
dev, strerror(errno));
return (-1);
}
} else
LogPrintf(LogDEBUG, "OpenModem(direct): Modem is a tty\n");
} else {
/* must be a tcp connection */
LogPrintf(LogDEBUG, "OpenModem(direct): Modem is not a tty\n");
return modem = dup(1);
} else if (modem < 0) {
}
} else {
if (strncmp(VarDevice, "/dev/", 5) == 0) {
if ((res = uu_lock(VarBaseDevice)) != UU_LOCK_OK) {
if (res == UU_LOCK_INUSE)
@ -461,10 +468,12 @@ OpenModem(int mode)
}
modem = open(VarDevice, O_RDWR | O_NONBLOCK);
if (modem < 0) {
LogPrintf(LogPHASE, "Open Failed %s\n", VarDevice);
LogPrintf(LogERROR, "OpenModem failed: %s: %s\n", VarDevice,
strerror(errno));
(void) uu_unlock(VarBaseDevice);
return (modem);
return (-1);
}
LogPrintf(LogDEBUG, "OpenModem: Modem is %s\n", VarDevice);
} else {
/* XXX: PPP over TCP */
cp = index(VarDevice, ':');
@ -477,12 +486,18 @@ OpenModem(int mode)
*cp = ':'; /* Don't destroy VarDevice */
if (modem < 0)
return (-1);
LogPrintf(LogDEBUG, "OpenModem: Modem is socket %s\n", VarDevice);
} else {
*cp = ':'; /* Don't destroy VarDevice */
LogPrintf(LogERROR, "Invalid host:port: \"%s\"\n", VarDevice);
return (-1);
}
} else
} else {
LogPrintf(LogERROR,
"Device (%s) must be in /dev or be a host:port pair\n",
VarDevice);
return (-1);
}
}
}
@ -491,6 +506,7 @@ OpenModem(int mode)
* for further operation. In this implementation, we assume that modem is
* configuted to use CTS/RTS flow control.
*/
mbits = 0;
dev_is_modem = isatty(modem) || DEV_IS_SYNC;
if (DEV_IS_SYNC)
sleep(1);
@ -527,13 +543,21 @@ OpenModem(int mode)
rstio.c_iflag, rstio.c_oflag, rstio.c_cflag);
if (!(mode & MODE_DIRECT))
if (ioctl(modem, TIOCMGET, &mbits))
return (-1);
if (ioctl(modem, TIOCMGET, &mbits)) {
LogPrintf(LogERROR, "OpenModem: Cannot get modem status: %s\n",
strerror(errno));
close(modem);
return (modem = -1);
}
LogPrintf(LogDEBUG, "OpenModem: modem control = %o\n", mbits);
oldflag = fcntl(modem, F_GETFL, 0);
if (oldflag < 0)
return (-1);
if (oldflag < 0) {
LogPrintf(LogERROR, "OpenModem: Cannot get modem flags: %s\n",
strerror(errno));
close(modem);
return (modem = -1);
}
(void) fcntl(modem, F_SETFL, oldflag & ~O_NONBLOCK);
}
StartModemTimer();
@ -606,6 +630,7 @@ HangupModem(int flag)
modem = -1; /* Mark as modem has closed */
return;
}
if (modem >= 0 && Online) {
mbits &= ~TIOCM_DTR;
#ifdef __bsdi__ /* not a POSIX way */
@ -630,7 +655,7 @@ HangupModem(int flag)
/*
* ModemTimeout() may call DownConection() to close the modem resulting
* in modem == 0.
* in modem == -1.
*/
if (modem >= 0) {
char ScriptBuffer[200];
@ -806,15 +831,23 @@ DialModem()
int
ShowModemStatus()
{
char *dev;
#ifdef TIOCOUTQ
int nb;
#endif
if (!VarTerm)
return 1;
fprintf(VarTerm, "device: %s speed: ", VarDevice);
if (mode & MODE_DIRECT)
if (isatty(0))
dev = ctermid(NULL);
else
dev = "network";
else
dev = VarDevice;
fprintf(VarTerm, "device: %s speed: ", dev);
if (DEV_IS_SYNC)
fprintf(VarTerm, "sync\n");
else

View File

@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Id: vars.c,v 1.26 1997/09/04 00:38:21 brian Exp $
* $Id: vars.c,v 1.27 1997/09/07 01:00:06 brian Exp $
*
*/
#include "fsm.h"
@ -29,8 +29,8 @@
#include "auth.h"
#include "defs.h"
char VarVersion[] = "PPP Version 1.1";
char VarLocalVersion[] = "$Date: 1997/09/04 00:38:21 $";
char VarVersion[] = "PPP Version 1.2";
char VarLocalVersion[] = "$Date: 1997/09/07 01:00:06 $";
/*
* Order of conf option is important. See vars.h.