Annotation of researchv10no/cmd/uucp/systat.c, revision 1.1.1.1

1.1       root        1: /*     /sccs/src/cmd/uucp/s.systat.c
                      2:        systat.c        1.3     8/30/84 17:37:44
                      3: */
                      4: #include "uucp.h"
                      5: VERSION(@(#)systat.c   1.3);
                      6: 
                      7: #define STATNAME(f, n) ((void)sprintf(f, "%s/%s", STATDIR, n))
                      8: #define S_SIZE 100
                      9: 
                     10: /*
                     11:  * make system status entry
                     12:  *     name -> system name
                     13:  *     text -> text string to read
                     14:  *     type -> ?
                     15:  * return:
                     16:  *     none
                     17:  */
                     18: void
                     19: systat(name, type, text, retry)
                     20: register int type;
                     21: char *name, *text;
                     22: long retry;
                     23: {
                     24:        register FILE *fp;
                     25:        int count;
                     26:        char filename[MAXFULLNAME], line[S_SIZE];
                     27:        time_t prestime;
                     28:        long presretry = 0;
                     29:        char *vec[5];
                     30: 
                     31:        line[0] = '\0';
                     32:        (void) time(&prestime);
                     33:        count = 0;
                     34:        STATNAME(filename, name);
                     35: 
                     36:        fp = fopen(filename, "r");
                     37:        if (fp != NULL) {
                     38:                if (fgets(line, S_SIZE, fp) != NULL)
                     39:                        if (getargs(line, vec, 4) == 4) {
                     40:                            count = atoi(vec[1]);
                     41:                            presretry = atol(vec[3]);
                     42:                        }
                     43:                if (count <= 0)
                     44:                        count = 0;
                     45:                fclose(fp);
                     46:        }
                     47: 
                     48:        switch (type) {
                     49:                /* if there is already a status file - don't change */
                     50:        case SS_TIME_WRONG:
                     51:        case SS_LOCKED_DEVICE:
                     52:        case SS_CANT_ACCESS_DEVICE:
                     53:                if (count > 1)
                     54:                    return;
                     55:                break;
                     56: 
                     57:        case SS_ASSERT_ERROR:
                     58:                retry = 55*60;          /* wait an hour after assertion fails */
                     59:                break;
                     60: 
                     61:        case SS_OK:                     /* delete record of OK transfers */
                     62:                unlink(filename);
                     63:                return;
                     64: 
                     65:        case SS_INPROGRESS:             /* preserve current record */
                     66:                retry = presretry;
                     67:                break;
                     68: 
                     69:                /* Startup failure means protocol mismatch--some administrative
                     70:                 * action must be taken
                     71:                 */
                     72:        case SS_STARTUP:
                     73:                retry = MAXRETRYTIME;
                     74:                count = 0;
                     75:                break;
                     76: 
                     77:        default:        /*  increment count and set up retry time */
                     78:                count++;
                     79:                if (!retry) {   /* use exponential backoff */
                     80:                    if (presretry < RETRYTIME)
                     81:                        retry = RETRYTIME;
                     82:                    else {
                     83:                        retry = presretry + presretry;
                     84:                        if (retry > MAXRETRYTIME)
                     85:                            retry = MAXRETRYTIME;
                     86:                    }
                     87:                }
                     88:                else {  /* use specified time */
                     89:                    if (retry < RETRYTIME)
                     90:                        retry = RETRYTIME;
                     91:                }
                     92:                break;
                     93:        }
                     94: 
                     95:        fp = fopen(filename, "w");
                     96:        /* can't ASSERT since assert() calls systat() */
                     97:        if (fp == NULL) {
                     98:            errent(Ct_OPEN, filename, errno, sccsid, __FILE__, __LINE__);
                     99:            cleanup(FAIL);
                    100:        }
                    101:        (void) chmod(filename, 0666);
                    102:        (void) fprintf(fp, "%d %d %ld %ld %s %s\n",
                    103:                type, count, prestime, retry, text, name);
                    104:        (void) fclose(fp);
                    105:        return;
                    106: }
                    107: 
                    108: /*
                    109:  * check system status for call
                    110:  *     name -> system to check 
                    111:  * return:  
                    112:  *     0       -> ok
                    113:  *     >0      -> system status
                    114:  */
                    115: callok(name)
                    116: char *name;
                    117: {
                    118:        register FILE *fp;
                    119:        register int t;
                    120:        long retrytime;
                    121:        int count, type;
                    122:        char filename[MAXFULLNAME], line[S_SIZE];
                    123:        time_t lasttime, prestime;
                    124: 
                    125:        STATNAME(filename, name);
                    126:        fp = fopen(filename, "r");
                    127:        if (fp == NULL)
                    128:                return(SS_OK);
                    129: 
                    130:        if (fgets(line, S_SIZE, fp) == NULL) {
                    131: 
                    132:                /* no data */
                    133:                fclose(fp);
                    134:                (void) unlink(filename);
                    135:                return(SS_OK);
                    136:        }
                    137: 
                    138:        fclose(fp);
                    139:        (void) time(&prestime);
                    140:        sscanf(line, "%d%d%ld%ld", &type, &count, &lasttime, &retrytime);
                    141:        t = type;
                    142: 
                    143:        switch(t) {
                    144:        case SS_SEQBAD:
                    145:        case SS_LOGIN_FAILED:
                    146:        case SS_DIAL_FAILED:
                    147:        case SS_BAD_LOG_MCH:
                    148:        case SS_BADSYSTEM:
                    149:        case SS_CANT_ACCESS_DEVICE:
                    150:        case SS_WRONG_MCH:
                    151:        case SS_RLOCKED:
                    152:        case SS_RUNKNOWN:
                    153:        case SS_RLOGIN:
                    154:        case SS_UNKNOWN_RESPONSE:
                    155:        case SS_CHAT_FAILED:
                    156:        case SS_ASSERT_ERROR:
                    157:        case SS_CONVERSATION:
                    158:                if (prestime - lasttime < retrytime) {
                    159:                        logent("RETRY TIME NOT REACHED", "NO CALL");
                    160:                        DEBUG(4, "RETRY TIME (%ld) NOT REACHED\n", retrytime);
                    161:                        return(type);
                    162:                }
                    163: 
                    164:                return(SS_OK);
                    165:        default:
                    166:                return(SS_OK);
                    167:        }
                    168: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.