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:
parent
5ef5a78cd2
commit
bc24029963
@ -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;
|
||||
}
|
||||
|
@ -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",
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user