static char sccsid
[] = "@(#)dn.c 4.2 (Berkeley) %G%";
* dnopn(ph, flds, dev) dial remote machine
* file descriptor - succeeded
char dcname
[20], dnname
[20], phone
[MAXPH
+2], c
= 0;
sprintf(dnname
, "/dev/%s", dev
->D_calldev
);
logent(dnname
, "CAN'T OPEN");
DEBUG(4, "%s Open timed out\n", dnname
);
signal(SIGALRM
, alarmtr
);
if (dnf
< 0 && errno
== EACCES
) {
logent(dnname
, "CAN'T OPEN");
sprintf(dcname
, "/dev/%s", dev
->D_line
);
sprintf(phone
, "%s%s", ph
, ACULAST
);
DEBUG(4, "dc - %s, ", dcname
);
DEBUG(4, "acu - %s\n", dnname
);
logent("DIALUP DN write", "TIMEOUT");
signal(SIGALRM
, alarmtr
);
timelim
= 5 * strlen(phone
);
alarm(timelim
< 30 ? 30 : timelim
);
if ((pid
= fork()) == 0) {
ioctl(dnf
, TIOCFLUSH
, &zero
);
nw
= write(dnf
, phone
, lt
= strlen(phone
));
logent("DIALUP ACU write", _FAILED
);
DEBUG(4, "ACU write ok\n", CNULL
);
/* open line - will return on carrier */
/* RT needs a sleep here because it returns immediately from open */
if (dcf
< 0 && errno
== EACCES
)
logent(dcname
, "CAN'T OPEN");
DEBUG(4, "dcf is %d\n", dcf
);
logent("DIALUP LINE open", _FAILED
);
while ((nw
= wait(<
)) != pid
&& nw
!= -1)
ioctl(dcf
, TCGETA
, &ttbuf
);
if(!(ttbuf
.c_cflag
& HUPCL
)) {
ioctl(dcf
, TCSETA
, &ttbuf
);
fixline(dcf
, dev
->D_speed
);
DEBUG(4, "Fork Stat %o\n", lt
);
* dncls() close dn type call unit