Annotation of researchv8dc/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:                /* reset count on successful call */
                     58:        case SS_OK:
                     59:        case SS_INPROGRESS:
                     60:        case SS_CONVERSATION:   /* failure during conversation - contact ok */
                     61:                retry = 0;
                     62:                count = 0;
                     63:                break;
                     64: 
                     65:                /* Startup failure means protocol mismatch--some administrative
                     66:                 * action must be taken
                     67:                 */
                     68:        case SS_STARTUP:
                     69:                retry = MAXRETRYTIME;
                     70:                count = 0;
                     71:                break;
                     72:        default:        /*  increment count and set up retry time */
                     73:                count++;
                     74:                if (!retry) {   /* use exponential backoff */
                     75:                    if (presretry < RETRYTIME)
                     76:                        retry = RETRYTIME;
                     77:                    else {
                     78:                        retry = presretry + presretry;
                     79:                        if (retry > MAXRETRYTIME)
                     80:                            retry = MAXRETRYTIME;
                     81:                    }
                     82:                }
                     83:                else {  /* use specified time */
                     84:                    if (retry < RETRYTIME)
                     85:                        retry = RETRYTIME;
                     86:                }
                     87:                break;
                     88:        }
                     89: 
                     90:        fp = fopen(filename, "w");
                     91:        /* can't ASSERT since assert() calls systat() */
                     92:        if (fp == NULL) {
                     93:            errent(Ct_OPEN, filename, errno, sccsid, __FILE__, __LINE__);
                     94:            cleanup(FAIL);
                     95:        }
                     96:        (void) chmod(filename, 0666);
                     97:        (void) fprintf(fp, "%d %d %ld %ld %s %s\n",
                     98:                type, count, prestime, retry, text, name);
                     99:        (void) fclose(fp);
                    100:        return;
                    101: }
                    102: 
                    103: /*
                    104:  * check system status for call
                    105:  *     name -> system to check 
                    106:  * return:  
                    107:  *     0       -> ok
                    108:  *     >0      -> system status
                    109:  */
                    110: callok(name)
                    111: char *name;
                    112: {
                    113:        register FILE *fp;
                    114:        register int t;
                    115:        long retrytime;
                    116:        int count, type;
                    117:        char filename[MAXFULLNAME], line[S_SIZE];
                    118:        time_t lasttime, prestime;
                    119: 
                    120:        STATNAME(filename, name);
                    121:        fp = fopen(filename, "r");
                    122:        if (fp == NULL)
                    123:                return(SS_OK);
                    124: 
                    125:        if (fgets(line, S_SIZE, fp) == NULL) {
                    126: 
                    127:                /* no data */
                    128:                fclose(fp);
                    129:                (void) unlink(filename);
                    130:                return(SS_OK);
                    131:        }
                    132: 
                    133:        fclose(fp);
                    134:        (void) time(&prestime);
                    135:        sscanf(line, "%d%d%ld%ld", &type, &count, &lasttime, &retrytime);
                    136:        t = type;
                    137: 
                    138:        switch(t) {
                    139:        case SS_SEQBAD:
                    140:        case SS_LOGIN_FAILED:
                    141:        case SS_DIAL_FAILED:
                    142:        case SS_BAD_LOG_MCH:
                    143:        case SS_BADSYSTEM:
                    144:        case SS_CANT_ACCESS_DEVICE:
                    145:        case SS_WRONG_MCH:
                    146:        case SS_RLOCKED:
                    147:        case SS_RUNKNOWN:
                    148:        case SS_RLOGIN:
                    149:        case SS_UNKNOWN_RESPONSE:
                    150:        case SS_CHAT_FAILED:
                    151: 
                    152:                if (prestime - lasttime < retrytime) {
                    153:                        logent("RETRY TIME NOT REACHED", "NO CALL");
                    154:                        DEBUG(4, "RETRY TIME (%ld) NOT REACHED\n", retrytime);
                    155:                        return(type);
                    156:                }
                    157: 
                    158:                return(SS_OK);
                    159:        default:
                    160:                return(SS_OK);
                    161:        }
                    162: }

unix.superglobalmegacorp.com

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