static char sccsid
[] = "@(#)df2.c 4.3 (Berkeley) 2/24/88";
* df2opn(ph, flds, dev) dial remote machine
* file descriptor - succeeded
char dcname
[20], dnname
[20], phone
[MAXPH
+2], c
= 0;
int nw
, lt
, pid
, st
, status
;
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
);
fixline(dnf
, dev
->D_speed
);
sprintf(phone
, "\02%s", ph
);
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%s\n", CNULL
);
/* open line - will return on carrier */
/* RT needs a sleep here because it returns immediately from open */
if (read(dnf
, &c
, 1) != 1 || c
!= 'A')
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
);
* df2cls() close the DF02/DF03 call unit