|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1983 Regents of the University of California. ! 3: * All rights reserved. The Berkeley software License Agreement ! 4: * specifies the terms and conditions for redistribution. ! 5: */ ! 6: ! 7: #ifndef lint ! 8: static char sccsid[] = "@(#)dn11.c 5.1 (Berkeley) 4/30/85"; ! 9: #endif not lint ! 10: ! 11: /* ! 12: * Routines for dialing up on DN-11 ! 13: */ ! 14: #include "tip.h" ! 15: ! 16: int dn_abort(), alarmtr(); ! 17: static jmp_buf jmpbuf; ! 18: static int child = -1, dn; ! 19: ! 20: dn_dialer(num, acu) ! 21: char *num, *acu; ! 22: { ! 23: extern errno; ! 24: char *p, *q, phone[40]; ! 25: int lt, nw, connected = 1; ! 26: register int timelim; ! 27: ! 28: if (boolean(value(VERBOSE))) ! 29: printf("\nstarting call..."); ! 30: if ((dn = open(acu, 1)) < 0) { ! 31: if (errno == EBUSY) ! 32: printf("line busy..."); ! 33: else ! 34: printf("acu open error..."); ! 35: return (0); ! 36: } ! 37: if (setjmp(jmpbuf)) { ! 38: kill(child, SIGKILL); ! 39: close(dn); ! 40: return (0); ! 41: } ! 42: signal(SIGALRM, alarmtr); ! 43: timelim = 5 * strlen(num); ! 44: alarm(timelim < 30 ? 30 : timelim); ! 45: if ((child = fork()) == 0) { ! 46: /* ! 47: * ignore this stuff for aborts ! 48: */ ! 49: signal(SIGALRM, SIG_IGN); ! 50: signal(SIGINT, SIG_IGN); ! 51: signal(SIGQUIT, SIG_IGN); ! 52: sleep(2); ! 53: nw = write(dn, num, lt = strlen(num)); ! 54: exit(nw != lt); ! 55: } ! 56: /* ! 57: * open line - will return on carrier ! 58: */ ! 59: if ((FD = open(DV, 2)) < 0) { ! 60: if (errno == EIO) ! 61: printf("lost carrier..."); ! 62: else ! 63: printf("dialup line open failed..."); ! 64: alarm(0); ! 65: kill(child, SIGKILL); ! 66: close(dn); ! 67: return (0); ! 68: } ! 69: alarm(0); ! 70: ioctl(dn, TIOCHPCL, 0); ! 71: signal(SIGALRM, SIG_DFL); ! 72: while ((nw = wait(<)) != child && nw != -1) ! 73: ; ! 74: fflush(stdout); ! 75: close(dn); ! 76: if (lt != 0) { ! 77: close(FD); ! 78: return (0); ! 79: } ! 80: return (1); ! 81: } ! 82: ! 83: alarmtr() ! 84: { ! 85: ! 86: alarm(0); ! 87: longjmp(jmpbuf, 1); ! 88: } ! 89: ! 90: /* ! 91: * Insurance, for some reason we don't seem to be ! 92: * hanging up... ! 93: */ ! 94: dn_disconnect() ! 95: { ! 96: ! 97: sleep(2); ! 98: if (FD > 0) ! 99: ioctl(FD, TIOCCDTR, 0); ! 100: close(FD); ! 101: } ! 102: ! 103: dn_abort() ! 104: { ! 105: ! 106: sleep(2); ! 107: if (child > 0) ! 108: kill(child, SIGKILL); ! 109: if (dn > 0) ! 110: close(dn); ! 111: if (FD > 0) ! 112: ioctl(FD, TIOCCDTR, 0); ! 113: close(FD); ! 114: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.