|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)systat.c 5.4 (Berkeley) 6/23/85"; ! 3: #endif ! 4: ! 5: #include "uucp.h" ! 6: ! 7: #define STATNAME(f, n) sprintf(f, "%s/%s/%s", Spool, "STST", n) ! 8: #define S_SIZE 100 ! 9: ! 10: /*LINTLIBRARY*/ ! 11: ! 12: /* ! 13: * make system status entry ! 14: * return codes: none ! 15: */ ! 16: systat(name, type, text) ! 17: char *name, *text; ! 18: int type; ! 19: { ! 20: char filename[MAXFULLNAME], line[S_SIZE]; ! 21: int count, oldtype; ! 22: register FILE *fp; ! 23: time_t prestime, rtry; ! 24: ! 25: if (type == 0) ! 26: return; ! 27: line[0] = '\0'; ! 28: time(&prestime); ! 29: count = 0; ! 30: STATNAME(filename, name); ! 31: ! 32: fp = fopen(filename, "r"); ! 33: if (fp != NULL) { ! 34: fgets(line, S_SIZE, fp); ! 35: sscanf(line, "%d %d", &oldtype, &count); ! 36: if (count <= 0) ! 37: count = 0; ! 38: fclose(fp); ! 39: /* If merely 'wrong time', don't change existing STST */ ! 40: if (type == SS_WRONGTIME && oldtype != SS_INPROGRESS) ! 41: return; ! 42: } ! 43: ! 44: rtry = Retrytime; ! 45: /* if failures repeat, don't try so often, ! 46: * to forstall a 'MAX RECALLS' situation. ! 47: */ ! 48: if (type == SS_FAIL) { ! 49: count++; ! 50: if (count > 5) { ! 51: rtry = rtry * (count-5); ! 52: if (rtry > ONEDAY/2) ! 53: rtry = ONEDAY/2; ! 54: } ! 55: } ! 56: ! 57: ! 58: #ifdef VMS ! 59: unlink(filename); ! 60: #endif VMS ! 61: fp = fopen(filename, "w"); ! 62: ASSERT(fp != NULL, "SYSTAT OPEN FAIL", filename, 0); ! 63: fprintf(fp, "%d %d %ld %ld %s %s\n", type, count, prestime, rtry, text, name); ! 64: fclose(fp); ! 65: return; ! 66: } ! 67: ! 68: /*** ! 69: * rmstat(name) remove system status entry ! 70: * char *name; ! 71: * ! 72: * return codes: none ! 73: */ ! 74: ! 75: rmstat(name) ! 76: char *name; ! 77: { ! 78: char filename[MAXFULLNAME]; ! 79: ! 80: STATNAME(filename, name); ! 81: unlink(filename); ! 82: } ! 83: ! 84: /* ! 85: * check system status for call ! 86: * ! 87: * return codes 0 - ok | >0 system status ! 88: */ ! 89: ! 90: callok(name) ! 91: char *name; ! 92: { ! 93: char filename[MAXFULLNAME], line[S_SIZE]; ! 94: register FILE *fp; ! 95: time_t lasttime, prestime, retrytime; ! 96: long t1, t2; ! 97: int count, type; ! 98: ! 99: STATNAME(filename, name); ! 100: fp = fopen(filename, "r"); ! 101: if (fp == NULL) ! 102: return(SS_OK); ! 103: ! 104: if (fgets(line, S_SIZE, fp) == NULL) { ! 105: /* no data */ ! 106: fclose(fp); ! 107: unlink(filename); ! 108: return(SS_OK); ! 109: } ! 110: ! 111: fclose(fp); ! 112: time(&prestime); ! 113: sscanf(line, "%d%d%ld%ld", &type, &count, &t1, &t2); ! 114: lasttime = t1; ! 115: retrytime = t2; ! 116: ! 117: switch(type) { ! 118: case SS_BADSEQ: ! 119: case SS_CALLBACK: ! 120: case SS_NODEVICE: ! 121: case SS_INPROGRESS: /*let LCK take care of it */ ! 122: return(SS_OK); ! 123: ! 124: case SS_FAIL: ! 125: if (count > MAXRECALLS) { ! 126: logent("MAX RECALLS", "NO CALL"); ! 127: DEBUG(4, "MAX RECALL COUNT %d\n", count); ! 128: if (Debug) { ! 129: logent("debugging", "continuing anyway"); ! 130: return SS_OK; ! 131: } ! 132: return type; ! 133: } ! 134: ! 135: if (prestime - lasttime < retrytime) { ! 136: logent("RETRY TIME NOT REACHED", "NO CALL"); ! 137: DEBUG(4, "RETRY TIME (%ld) NOT REACHED\n", retrytime); ! 138: if (Debug) { ! 139: logent("debugging", "continuing anyway"); ! 140: return SS_OK; ! 141: } ! 142: return type; ! 143: } ! 144: ! 145: return SS_OK; ! 146: default: ! 147: return SS_OK; ! 148: } ! 149: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.