Annotation of 43BSDReno/contrib/isode-beta/ftam2/ftamd.c, revision 1.1

1.1     ! root        1: /* ftamd.c - FTAM -- responder */
        !             2: 
        !             3: #ifndef        lint
        !             4: static char *rcsid = "$Header: /f/osi/ftam2/RCS/ftamd.c,v 7.0 89/11/23 21:54:36 mrose Rel $";
        !             5: #endif
        !             6: 
        !             7: /* 
        !             8:  * $Header: /f/osi/ftam2/RCS/ftamd.c,v 7.0 89/11/23 21:54:36 mrose Rel $
        !             9:  *
        !            10:  *
        !            11:  * $Log:       ftamd.c,v $
        !            12:  * Revision 7.0  89/11/23  21:54:36  mrose
        !            13:  * Release 6.0
        !            14:  * 
        !            15:  */
        !            16: 
        !            17: /*
        !            18:  *                               NOTICE
        !            19:  *
        !            20:  *    Acquisition, use, and distribution of this module and related
        !            21:  *    materials are subject to the restrictions of a license agreement.
        !            22:  *    Consult the Preface in the User's Manual for the full terms of
        !            23:  *    this agreement.
        !            24:  *
        !            25:  */
        !            26: 
        !            27: 
        !            28: #include <stdio.h>
        !            29: #include <varargs.h>
        !            30: #include "ftamsystem.h"
        !            31: 
        !            32: /*    DATA */
        !            33: 
        !            34: int    ftamfd = NOTOK;
        !            35: 
        !            36: int    cflag = 0;
        !            37: int    debug = 0;
        !            38: char   *myname = "ftamd";
        !            39: 
        !            40: /*    MAIN */
        !            41: 
        !            42: #define        SMASK   "\020\01UNCONS\02MANAGE\03TRANSFER\04TM\05ACCESS"
        !            43: 
        !            44: #define        UMASK   "\020\01READ\02WRITE\03ACCESS\04LIMITED\05ENHANCED\06GROUPING\
        !            45: \07FADULOCK\08RECOVERY\00RESTART"
        !            46: 
        !            47: #define        AMASK   "\020\01STORAGE\02SECURITY\03PRIVATE"
        !            48: 
        !            49: /* ARGSUSED */
        !            50: 
        !            51: main (argc, argv, envp)
        !            52: int    argc;
        !            53: char  **argv,
        !            54:       **envp;
        !            55: {
        !            56:     int     result;
        !            57:     char   *ap;
        !            58:     struct FTAMstart    ftss;
        !            59:     register struct FTAMstart  *fts = &ftss;
        !            60:     struct FTAMindication   ftis;
        !            61:     register struct FTAMindication *fti = &ftis;
        !            62: 
        !            63:     if (myname = rindex (argv[0], '/'))
        !            64:        myname++;
        !            65:     if (myname == NULL || *myname == NULL)
        !            66:        myname = argv[0];
        !            67: 
        !            68:     isodetailor (myname, 0);
        !            69:     if (debug == 0 && !(debug = isatty (fileno (stderr)))) {
        !            70:        ftam_log -> ll_stat &= ~LLOGCLS;
        !            71:        ll_hdinit (ftam_log, myname);
        !            72:     }
        !            73:     else
        !            74:        ll_dbinit (ftam_log, myname);
        !            75: 
        !            76:     advise (LLOG_NOTICE, NULLCP, "starting");
        !            77: 
        !            78:     if (FInit (argc, argv, fts, debug ? FTraceHook : NULLIFP, fti) == NOTOK)
        !            79:        ftam_adios (&fti -> fti_abort, "initialization");
        !            80:     advise (LLOG_NOTICE, NULLCP,
        !            81:            "F-INITIALIZE.INDICATION: <%d, %s, %s, %s, %s>",
        !            82:            fts -> fts_sd, oid2ode (fts -> fts_context),
        !            83:            sprintb (fts -> fts_class, SMASK),
        !            84:            fts -> fts_initiator ? fts -> fts_initiator : "",
        !            85:            fts -> fts_account ? fts -> fts_account : "");
        !            86: #ifdef DEBUG
        !            87:     {
        !            88:        register int    i;
        !            89:        register struct FTAMcontent *fx;
        !            90: 
        !            91:        advise (LLOG_DEBUG, NULLCP,
        !            92:                " called AE title: %s, called PSAP address: %s",
        !            93:                sprintaei (&fts -> fts_calledtitle),
        !            94:                paddr2str (&fts -> fts_calledaddr, NULLNA));
        !            95:        advise (LLOG_DEBUG, NULLCP,
        !            96:                " calling AE title: %s, calling PSAP address: %s",
        !            97:                sprintaei (&fts -> fts_callingtitle),
        !            98:                paddr2str (&fts -> fts_callingaddr, NULLNA));
        !            99: 
        !           100:        advise (LLOG_DEBUG, NULLCP, " manage: %d, ftam-QoS: %d",
        !           101:                fts -> fts_manage, fts -> fts_fqos);
        !           102:        advise (LLOG_DEBUG, NULLCP, " units: %s",
        !           103:                sprintb (fts -> fts_units, UMASK));
        !           104:        advise (LLOG_DEBUG, NULLCP, " attrs: %s",
        !           105:                sprintb (fts -> fts_attrs, AMASK));
        !           106: 
        !           107:        for (fx = fts -> fts_contents.fc_contents, i = 0;
        !           108:                i < fts -> fts_contents.fc_ncontent;
        !           109:                fx++, i++)
        !           110:            advise (LLOG_DEBUG, NULLCP, " cnt %d: %s %d %d",
        !           111:                i, sprintoid (fx -> fc_dtn), fx -> fc_id, fx -> fc_result);
        !           112:     }
        !           113: #endif
        !           114: 
        !           115:     for (argv++; ap = *argv; argv++)
        !           116:        if (*ap == '-')
        !           117:            while (*++ap)
        !           118:                switch (*ap) {
        !           119:                    case 'c':
        !           120:                        cflag++;
        !           121:                        break;
        !           122: 
        !           123:                    case 'd':
        !           124:                        debug++;
        !           125:                        ll_dbinit (ftam_log, myname);
        !           126:                        (void) FHookRequest (fts -> fts_sd, FTraceHook, fti);
        !           127:                        break;
        !           128: 
        !           129:                    default:
        !           130:                        adios (NULLCP, "unknown switch -%c", *ap);
        !           131:                }
        !           132:        else
        !           133:            advise (LLOG_NOTICE, NULLCP, "unknown argument \"%s\"", ap);    
        !           134: 
        !           135:     ftam_start (fts);
        !           136: 
        !           137:     FTSFREE (fts);
        !           138: 
        !           139:     for (;;)
        !           140:        switch (result = FWaitRequest (ftamfd, NOTOK, fti)) {
        !           141:            case NOTOK: 
        !           142:            case OK: 
        !           143:            case DONE: 
        !           144:                ftam_indication (fti);
        !           145:                break;
        !           146: 
        !           147:            default: 
        !           148:                adios (NULLCP, "unknown return from FWaitRequest=%d", result);
        !           149:        }
        !           150: }
        !           151: 
        !           152: /*  */
        !           153: 
        !           154: void   ftam_adios (fta, event)
        !           155: struct FTAMabort *fta;
        !           156: char   *event;
        !           157: {
        !           158:     struct FTAMindication   ftis;
        !           159: 
        !           160:     ftam_advise (fta, event);
        !           161: 
        !           162:     if (fta -> fta_action != FACTION_PERM && ftamfd != NOTOK)
        !           163:        (void) FUAbortRequest (ftamfd, FACTION_PERM,
        !           164:                (struct FTAMdiagnostic *) 0, 0, &ftis);
        !           165: 
        !           166:     closewtmp ();
        !           167: 
        !           168:     _exit (1);
        !           169: }
        !           170: 
        !           171: 
        !           172: void   ftam_advise (fta, event)
        !           173: register struct FTAMabort *fta;
        !           174: char   *event;
        !           175: {
        !           176:     advise (LLOG_NOTICE, NULLCP, "%s: failed", event);
        !           177:     ftam_diag (fta -> fta_diags, fta -> fta_ndiag);
        !           178: 
        !           179:     if (fta -> fta_action == FACTION_PERM) {
        !           180:        closewtmp ();
        !           181: 
        !           182:        _exit (1);
        !           183:     }
        !           184: }
        !           185: 
        !           186: /*  */
        !           187: 
        !           188: static char *entity[] = {
        !           189:     "UNK", "IFSU", "IFPM", "VFS", "RFPM", "RFSU"
        !           190: };
        !           191: 
        !           192: 
        !           193: void   ftam_diag (diag, ndiag)
        !           194: struct FTAMdiagnostic diag[];
        !           195: int    ndiag;
        !           196: {
        !           197:     register int    i;
        !           198:     register char  *cp;
        !           199:     char    buffer[BUFSIZ];
        !           200:     register struct FTAMdiagnostic *dp;
        !           201: 
        !           202:     for (dp = diag, i = ndiag - 1; i >= 0; dp++, i--) {
        !           203:        cp = buffer;
        !           204:        (void) sprintf (cp, "%s", FErrString (dp -> ftd_identifier));
        !           205: 
        !           206:        if (dp -> ftd_cc > 0) {
        !           207:            cp += strlen (cp);
        !           208:            (void) sprintf (cp, ": %*.*s", dp -> ftd_cc, dp -> ftd_cc,
        !           209:                    dp -> ftd_data);
        !           210:        }
        !           211: 
        !           212:        advise (LLOG_NOTICE, NULLCP, "%s", buffer);
        !           213: 
        !           214:        cp = buffer;
        !           215:        (void) sprintf (cp, "    type ");
        !           216:        cp += strlen (cp);
        !           217: 
        !           218:        switch (dp -> ftd_type) {
        !           219:            case DIAG_INFORM: 
        !           220:                (void) sprintf (cp, "informative");
        !           221:                break;
        !           222: 
        !           223:            case DIAG_TRANS: 
        !           224:                (void) sprintf (cp, "transient");
        !           225:                break;
        !           226: 
        !           227:            case DIAG_PERM: 
        !           228:                (void) sprintf (cp, "permanent");
        !           229:                break;
        !           230: 
        !           231:            default: 
        !           232:                (void) sprintf (cp, "%d", dp -> ftd_type);
        !           233:                break;
        !           234:        }
        !           235:        cp += strlen (cp);
        !           236: 
        !           237:        (void) sprintf (cp, ", observer ");
        !           238:        cp += strlen (cp);
        !           239: 
        !           240:        switch (dp -> ftd_observer) {
        !           241:            case EREF_IFSU: 
        !           242:            case EREF_IFPM: 
        !           243:            case EREF_RFPM: 
        !           244:            case EREF_RFSU: 
        !           245:                (void) sprintf (cp, "%s", entity[dp -> ftd_observer]);
        !           246:                break;
        !           247: 
        !           248:            default: 
        !           249:                (void) sprintf (cp, "%d", dp -> ftd_observer);
        !           250:                break;
        !           251:        }
        !           252:        cp += strlen (cp);
        !           253: 
        !           254:        (void) sprintf (cp, ", source ");
        !           255:        cp += strlen (cp);
        !           256: 
        !           257:        switch (dp -> ftd_source) {
        !           258:            case EREF_NONE: 
        !           259:            case EREF_IFSU: 
        !           260:            case EREF_IFPM: 
        !           261:            case EREF_SERV: 
        !           262:            case EREF_RFPM: 
        !           263:            case EREF_RFSU: 
        !           264:                (void) sprintf (cp, "%s", entity[dp -> ftd_source]);
        !           265:                break;
        !           266: 
        !           267:            default: 
        !           268:                (void) sprintf (cp, "%d", dp -> ftd_source);
        !           269:                break;
        !           270:        }
        !           271: 
        !           272:        if (dp -> ftd_delay != DIAG_NODELAY) {
        !           273:            cp += strlen (cp);
        !           274:            (void) sprintf (cp, ", suggested-delay %d", dp -> ftd_delay);
        !           275:        }
        !           276: 
        !           277:        advise (LLOG_NOTICE, NULLCP, "%s", buffer);
        !           278:     }
        !           279: }
        !           280: 
        !           281: /*  */
        !           282: 
        !           283: #ifndef        lint
        !           284: void   adios (va_alist)
        !           285: va_dcl
        !           286: {
        !           287:     struct FTAMindication   ftis;
        !           288:     va_list ap;
        !           289: 
        !           290:     va_start (ap);
        !           291: 
        !           292:     (void) _ll_log (ftam_log, LLOG_FATAL, ap);
        !           293: 
        !           294:     va_end (ap);
        !           295: 
        !           296:     if (ftamfd != NOTOK)
        !           297:        (void) FUAbortRequest (ftamfd, FACTION_PERM,
        !           298:                (struct FTAMdiagnostic *) 0, 0, &ftis);
        !           299: 
        !           300:     closewtmp ();
        !           301: 
        !           302:     _exit (1);
        !           303: }
        !           304: #else
        !           305: /* VARARGS */
        !           306: 
        !           307: void   adios (what, fmt)
        !           308: char   *what,
        !           309:        *fmt;
        !           310: {
        !           311:     adios (what, fmt);
        !           312: }
        !           313: #endif
        !           314: 
        !           315: 
        !           316: #ifndef        lint
        !           317: void   advise (va_alist)
        !           318: va_dcl
        !           319: {
        !           320:     int            code;
        !           321:     va_list ap;
        !           322: 
        !           323:     va_start (ap);
        !           324: 
        !           325:     code = va_arg (ap, int);
        !           326: 
        !           327:     (void) _ll_log (ftam_log, code, ap);
        !           328: 
        !           329:     va_end (ap);
        !           330: }
        !           331: #else
        !           332: /* VARARGS */
        !           333: 
        !           334: void   advise (code, what, fmt)
        !           335: char   *what,
        !           336:        *fmt;
        !           337: int    code;
        !           338: {
        !           339:     advise (code, what, fmt);
        !           340: }
        !           341: #endif

unix.superglobalmegacorp.com

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