Annotation of 43BSDReno/contrib/isode-beta/h/ftam.h, revision 1.1

1.1     ! root        1: /* ftam.h - include file for FTAM users (FS-USER) */
        !             2: 
        !             3: /* 
        !             4:  * $Header: /f/osi/h/RCS/ftam.h,v 7.1 90/03/23 10:52:56 mrose Exp $
        !             5:  *
        !             6:  *
        !             7:  * $Log:       ftam.h,v $
        !             8:  * Revision 7.1  90/03/23  10:52:56  mrose
        !             9:  * update
        !            10:  * 
        !            11:  * Revision 7.0  89/11/23  21:55:41  mrose
        !            12:  * Release 6.0
        !            13:  * 
        !            14:  */
        !            15: 
        !            16: /*
        !            17:  *                               NOTICE
        !            18:  *
        !            19:  *    Acquisition, use, and distribution of this module and related
        !            20:  *    materials are subject to the restrictions of a license agreement.
        !            21:  *    Consult the Preface in the User's Manual for the full terms of
        !            22:  *    this agreement.
        !            23:  *
        !            24:  */
        !            25: 
        !            26: 
        !            27: #ifndef        _FTAM_
        !            28: #define        _FTAM_
        !            29: 
        !            30: #ifndef        _PSAP2_
        !            31: #include "psap2.h"             /* definitions for PS-USERs */
        !            32: #endif
        !            33: #include "logger.h"
        !            34: 
        !            35: /*  */
        !            36: 
        !            37:                                /* FTAM-QoS */
        !            38: #define        FQOS_NORECOVERY 0       /*   no-recovery */
        !            39: #define        FQOS_CLASS1     1       /*   class-1-recovery */
        !            40: #define        FQOS_CLASS2     2       /*   class-2-recovery */
        !            41: #define        FQOS_CLASS3     3       /*   class-3-recovery */
        !            42: #define        MY_FQOS         FQOS_NORECOVERY
        !            43: 
        !            44: 
        !            45:                                /* Service-Class */
        !            46: #define        FCLASS_UNCONS   0x01    /*   unconstrained-class */
        !            47: #define        FCLASS_MANAGE   0x02    /*   management-class */
        !            48: #define        FCLASS_TRANSFER 0x04    /*   transfer-class */
        !            49: #define        FCLASS_TM       0x08    /*   transfer-and-management-class */
        !            50: #define        FCLASS_ACCESS   0x10    /*   access-class */
        !            51: 
        !            52:                                /* Functional-Units */
        !            53: #define        FUNIT_READ      0x001   /*   read */
        !            54: #define        FUNIT_WRITE     0x002   /*   write */
        !            55: #define        FUNIT_ACCESS    0x004   /*   file-access */
        !            56: #define        FUNIT_LIMITED   0x008   /*   limited-file-managment */
        !            57: #define        FUNIT_ENHANCED  0x010   /*   enhanced-file-management */
        !            58: #define        FUNIT_GROUPING  0x020   /*   grouping */
        !            59: #define        FUNIT_FADULOCK  0x040   /*   fadu-locking */
        !            60: #define        FUNIT_RECOVERY  0x080   /*   recovery */
        !            61: #define        FUNIT_RESTART   0x100   /*   restart-data-transfer */
        !            62: #define        MY_FUNIT        (FUNIT_READ | FUNIT_WRITE | FUNIT_ACCESS \
        !            63:                                | FUNIT_LIMITED | FUNIT_ENHANCED \
        !            64:                                | FUNIT_GROUPING | FUNIT_FADULOCK)
        !            65: 
        !            66:                                /* Attribute-Groups */
        !            67: #define        FATTR_STORAGE   0x01    /*   storage */
        !            68: #define        FATTR_SECURITY  0x02    /*   security */
        !            69: #define        FATTR_PRIVATE   0x04    /*   private */
        !            70: #define        MY_FATTR        (FATTR_STORAGE | FATTR_SECURITY)
        !            71: 
        !            72: 
        !            73:                                /* State-Result */
        !            74: #define        FSTATE_SUCCESS  0       /*   success */
        !            75: #define        FSTATE_FAILURE  1       /*   failure */
        !            76: 
        !            77:                                /* Action-Result */
        !            78: #define        FACTION_SUCCESS 0       /*   success */
        !            79: #define        FACTION_TRANS   1       /*   transient-error */
        !            80: #define        FACTION_PERM    2       /*   permanent-error */
        !            81: 
        !            82: /*  */
        !            83: 
        !            84: struct FTAMcontent {
        !            85:     OID            fc_dtn;             /* Document-Type-Name */
        !            86: 
        !            87:                                /* associated presentation context info */
        !            88:     int            fc_id;              /*   identifier */
        !            89:     int            fc_result;          /*   status */
        !            90: };
        !            91:     
        !            92:     
        !            93: struct FTAMcontentlist {       /* Contents-Type-List */
        !            94:     int            fc_ncontent;        /* number of contents */
        !            95: 
        !            96: #define        NFCONT  (NPCTX - 2)     /* not-so-arbitrary */
        !            97:     struct FTAMcontent fc_contents[NFCONT];
        !            98: };
        !            99: 
        !           100: /*  */
        !           101: 
        !           102: struct FTAMdiagnostic {                /* Diagnostic */
        !           103:     int            ftd_type;           /* diagnostic-type */
        !           104: #define        DIAG_INFORM     0       /*   informative */
        !           105: #define        DIAG_TRANS      1       /*   transient */
        !           106: #define        DIAG_PERM       2       /*   permanent */
        !           107: 
        !           108:     int            ftd_identifier;     /* error-identifier */
        !           109: #define        FS_CODE2OFF(c)  ((c) % 1000)
        !           110: 
        !           111: #define        FS_GEN_BASE     0       /* General FTAM diagnostics */
        !           112: #define        FS_GEN_NOREASON 0       /* No reason */
        !           113: #define        FS_GEN_RESPONDER 1      /* Responder error (unspecific) */
        !           114: #define        FS_GEN_SHUTDOWN 2       /* System shutdown */
        !           115: #define        FS_GEN_MGMT     3       /* FTAM management problem (unspecific) */
        !           116: #define        FS_GEN_MGMTACCT 4       /* FTAM management, bad account */
        !           117: #define        FS_GEN_MGMTPASS 5       /* FTAM management, security not passed */
        !           118: #define        FS_GEN_DELAY    6       /* Delay may be encountered */
        !           119: #define        FS_GEN_INITIATOR 7      /* Initiator error (unspecific) */
        !           120: #define        FS_GEN_SUBSEQ   8       /* Subsequent error */
        !           121: #define        FS_GEN_TEMPORAL 9       /* Temporal insufficiency of resources */
        !           122: #define        FS_GEN_VFSECURE 10      /* Access request violates VFS security */
        !           123: #define        FS_GEN_LSECURE  11      /* Access request violates local security */
        !           124: #define        FS_GEN_WAITING  12      /* Indications waiting (unofficial) */
        !           125: 
        !           126: #define        FS_PRO_BASE     1000    /* Protocol and supporting service related
        !           127:                                   diagnostics */
        !           128: #define        FS_PRO_CONFLICT 1000    /* Conflicting parameter values */
        !           129: #define        FS_PRO_UNSUPORT 1001    /* Unsupported parameter values */
        !           130: #define        FS_PRO_MANDATORY 1002   /* Mandatory parameter not set */
        !           131: #define        FS_PRO_UNPARAM  1003    /* Unsupported parameter */
        !           132: #define        FS_PRO_DUPARAM  1004    /* Duplicated parameter */
        !           133: #define        FS_PRO_ILLEGAL  1005    /* Illegal parameter type */
        !           134: #define        FS_PRO_UNTYPE   1006    /* Unsupported parameter type */
        !           135: #define        FS_PRO_ERR      1007    /* FTAM protocol error (unspecific) */
        !           136: #define        FS_PRO_ERRPROC  1008    /* FTAM protocol error, procedure error */
        !           137: #define        FS_PRO_ERRFUNIT 1009    /* FTAM protocol error, functional unit error*/
        !           138: #define        FS_PRO_ERRMSG   1010    /* FTAM protocol error, corruption error */
        !           139: #define        FS_PRO_LOWFAIL  1011    /* Lower layer failure */
        !           140: #define        FS_PRO_LOWADDR  1012    /* Lower layer addressing error */
        !           141: #define        FS_PRO_TIMEOUT  1013    /* Timeout */
        !           142: #define        FS_PRO_SHUTDOWN 1014    /* System shutdown */
        !           143: #define        FS_PRO_GROUPING 1015    /* Illegal grouping sequence */
        !           144: #define        FS_PRO_THRESH   1016    /* Grouping threshold violation */
        !           145: #define        FS_PRO_PDU      1017    /* Specific PDU request inconsistent with the
        !           146:                                   current requested access */
        !           147: 
        !           148: #define        FS_ACS_BASE     2000    /* Association related diagnostics */
        !           149: #define        FS_ACS_USER     2000    /* Association with user not allowed */
        !           150: #define        FS_ACS_2001     2001    /* not assigned, #2001  */
        !           151: #define        FS_ACS_CLASS    2002    /* Unsupported service class */
        !           152: #define        FS_ACS_FUNIT    2003    /* Unsupported functional unit */
        !           153: #define        FS_ACS_GRP      2004    /* Attribute group error (unspecific) */
        !           154: #define        FS_ACS_GRPSUP   2005    /* Attribute group not supported */
        !           155: #define        FS_ACS_GRPALL   2006    /* Attribute group not allowed */
        !           156: #define        FS_ACS_ACCT     2007    /* Bad account */
        !           157: #define        FS_ACS_MGMT     2008    /* Association management (unspecific) */
        !           158: #define        FS_ACS_MGMTADDR 2009    /* Association management - bad address */
        !           159: #define        FS_ACS_MGMTACCT 2010    /* Association management - bad account */
        !           160: #define        FS_ACS_CKPLARGE 2011    /* Checkpoint window error - too large */
        !           161: #define        FS_ACS_CKPSMALL 2012    /* Checkpoint window error - too small */
        !           162: #define        FS_ACS_CKPERR   2013    /* Checkpoint window error - unsupported */
        !           163: #define        FS_ACS_QOS      2014    /* Communications QoS not supported */
        !           164: #define        FS_ACS_IDENTITY 2015    /* Initiator identity unacceptable */
        !           165: #define        FS_ACS_CONTEXT  2016    /* Context management refused */
        !           166: #define        FS_ACS_ROLLBACK 2017    /* Rollback not available */
        !           167: #define        FS_ACS_CNTRESP  2018    /* Contents type list cut by responder */
        !           168: #define        FS_ACS_CNTPSAP  2019    /* Contents type list cut by Presentation
        !           169:                                   service */
        !           170: #define        FS_ACS_PASSWORD 2020    /* Invalid filestore password */
        !           171: #define        FS_ACS_SERVICES 2021    /* Incompatible service classes */
        !           172: 
        !           173: #define        FS_SEL_BASE     3000    /* Selection related diagnostics */
        !           174: #define        FS_SEL_FILENAME 3000    /* Filename not found */
        !           175: #define        FS_SEL_MATCHED  3001    /* Selection attributes not matched */
        !           176: #define        FS_SEL_INITIAL  3002    /* Initial attributes not possible */
        !           177: #define        FS_SEL_ATTRNAME 3003    /* Bad attribute name */
        !           178: #define        FS_SEL_NOEXIST  3004    /* Non-existent file */
        !           179: #define        FS_SEL_EXISTS   3005    /* File already exists */
        !           180: #define        FS_SEL_CREATE   3006    /* File can not be created */
        !           181: #define        FS_SEL_DELETE   3007    /* File can not be deleted */
        !           182: #define        FS_SEL_CONAVAIL 3008    /* Concurrency control not available */
        !           183: #define        FS_SEL_CONSUPRT 3009    /* Concurrency control not supported */
        !           184: #define        FS_SEL_CONPOSS  3010    /* Concurrency control not possible */
        !           185: #define        FS_SEL_RESTRICT 3011    /* More restrictive lock */
        !           186: #define        FS_SEL_BUSY     3012    /* File busy */
        !           187: #define        FS_SEL_AVAIL    3013    /* File not available */
        !           188: #define        FS_SEL_ACCAVAIL 3014    /* Access control not available */
        !           189: #define        FS_SEL_ACCSUPRT 3015    /* Access control not supported */
        !           190: #define        FS_SEL_ACCINCON 3016    /* Access control inconsistent */
        !           191: #define        FS_SEL_TRUNC    3017    /* Filename truncated */
        !           192: #define        FS_SEL_ALTER    3018    /* Initial attributes altered */
        !           193: #define        FS_SEL_ACCOUNT  3019    /* Bad account */
        !           194: #define        FS_SEL_CREEXIST 3020    /* Override selected existing file */
        !           195: #define        FS_SEL_CREOLD   3021    /* Override deleted and recreated file
        !           196:                                   with old attributes */
        !           197: #define        FS_SEL_CRENEW   3022    /* Create override deleted and recreated file
        !           198:                                   with new attributes */
        !           199: #define        FS_SEL_CRELOSE  3023    /* Create override - not possible */
        !           200: #define        FS_SEL_AMBIG    3024    /* Ambiguous file specification */
        !           201: #define        FS_SEL_CREPASS  3025    /* Invalid create password */
        !           202: #define        FS_SEL_DELPASS  3026    /* Invalid delete password on override */
        !           203: #define        FS_SEL_ATRVALUE 3027    /* Bad attribute value */
        !           204: #define        FS_SEL_VIOLATES 3028    /* Requested access violates permitted
        !           205:                                   actions */
        !           206: #define        FS_SEL_NOTAVAIL 3029    /* Functional unit not available for requested
        !           207:                                   access */
        !           208: #define        FS_SEL_CRENOSEL 3030    /* File created but not selected */
        !           209: 
        !           210: #define        FS_MGT_BASE     4000    /* File management related diagnostics */
        !           211: #define        FS_MGT_EXIST    4000    /* Attribute non-existant */
        !           212: #define        FS_MGT_READ     4001    /* Attribute cannot be read */
        !           213: #define        FS_MGT_CHANGE   4002    /* Attribute cannot be changed */
        !           214: #define        FS_MGT_SUPPORT  4003    /* Attribute not supported */
        !           215: #define        FS_MGT_NAME     4004    /* Bad attribute name */
        !           216: #define        FS_MGT_VALUE    4005    /* Bad attribute value */
        !           217: #define        FS_MGT_PARTIAL  4006    /* Attribute partially supported */
        !           218: #define        FS_MGMT_DISTINCT 4007   /* Additional set attribute not distinct */
        !           219: 
        !           220: #define        FS_ACC_BASE     5000    /* Access related diagnostics */
        !           221: #define        FS_ACC_FADU     5000    /* Bad FADU (unspecific) */
        !           222: #define        FS_ACC_FADUSIZE 5001    /* Bad FADU - size error */
        !           223: #define        FS_ACC_FADUTYPE 5002    /* Bad FADU - type error */
        !           224: #define        FS_ACC_FADUSPEC 5003    /* Bad FADU - poorly specified */
        !           225: #define        FS_ACC_FADULOC  5004    /* Bad FADU - bad location */
        !           226: #define        FS_ACC_EXIST    5005    /* FADU does not exist */
        !           227: #define        FS_ACC_AVL      5006    /* FADU not available (unspecific) */
        !           228: #define        FS_ACC_AVLREAD  5007    /* FADU not available for reading */
        !           229: #define        FS_ACC_AVLWRITE 5008    /* FADU not available for writing */
        !           230: #define        FS_ACC_AVLLOC   5009    /* FADU not available for location */
        !           231: #define        FS_ACC_AVLERASE 5010    /* FADU not available for erasure */
        !           232: #define        FS_ACC_INSERT   5011    /* FADU cannot be inserted */
        !           233: #define        FS_ACC_REPLACE  5012    /* FADU cannot be replaced */
        !           234: #define        FS_ACC_LOCATE   5013    /* FADU cannot be located */
        !           235: #define        FS_ACC_ELEMENT  5014    /* Bad data element type */
        !           236: #define        FS_ACC_OPAVAIL  5015    /* Operation not available */
        !           237: #define        FS_ACC_OPSUPRT  5016    /* Operation not supported */
        !           238: #define        FS_ACC_OPCONS   5017    /* Operation inconsistent */
        !           239: #define        FS_ACC_CONAVAIL 5018    /* Concurrency control not available */
        !           240: #define        FS_ACC_CONSUPRT 5019    /* Concurrency control not supported */
        !           241: #define        FS_ACC_CONINCON 5020    /* Concurrency control inconsistent */
        !           242: #define        FS_ACC_MODAVAIL 5021    /* Processing mode not available */
        !           243: #define        FS_ACC_MODSUPRT 5022    /* Processing mode not supported */
        !           244: #define        FS_ACC_MODINCON 5023    /* Processing mode inconsistent */
        !           245: #define        FS_ACC_CTXAVAIL 5024    /* Access context not available */
        !           246: #define        FS_ACC_CTXSUPRT 5025    /* Access context not supported */
        !           247: #define        FS_ACC_WRITE    5026    /* Bad write (unspecific) */
        !           248: #define        FS_ACC_READ     5027    /* Bad read (unspecific) */
        !           249: #define        FS_ACC_LCL      5028    /* Local failure (unspecific) */
        !           250: #define        FS_ACC_LCLSPACE 5029    /* Local failure - file space exhausted */
        !           251: #define        FS_ACC_LCLDATA  5030    /* Local failure - data corrupted */
        !           252: #define        FS_ACC_LCLDEV   5031    /* Local failure - device failure */
        !           253: #define        FS_ACC_FFSEXCEED 5032   /* Future file size exceeded */
        !           254: #define        FS_ACC_FFSINCRES 5034   /* Future file size increased */
        !           255: #define        FS_ACC_FUNIT    5035    /* Functional unit invalid in processing
        !           256:                                   mode */
        !           257: #define        FS_ACC_TYPINCON 5036    /* Contents type inconsistent */
        !           258: #define        FS_ACC_TYPSIMPL 5037    /* Contents type simplified */
        !           259: #define        FS_ACC_DUPLICATE 5038   /* Duplicate FADU name */
        !           260: #define        FS_ACC_DAMAGED  5039    /* Damage to select/open regime */
        !           261: #define        FS_ACC_NOLOCKS  5040    /* FADU locking not available on file */
        !           262: #define        FS_ACC_LOCKED   5041    /* FADU locked by another user */
        !           263: 
        !           264: #define        FS_RVY_BASE     6000    /* Recovery related diagnostics */
        !           265: #define        FS_RVY_CKP      6000    /* Bad checkpoint (unspecific) */
        !           266: #define        FS_RVY_UNIQUE   6001    /* Activity not unique */
        !           267: #define        FS_RVY_WINDOW   6002    /* Checkpoint outside window */
        !           268: #define        FS_RVY_EXISTS   6003    /* Activity no longer exists */
        !           269: #define        FS_RVY_RECOG    6004    /* Activity not recognized */
        !           270: #define        FS_RVY_NODOCKET 6005    /* No docket */
        !           271: #define        FS_RVY_CODOCKET 6006    /* Corrupt docket */
        !           272: #define        FS_RVY_WAITING  6007    /* File waiting restart */
        !           273: #define        FS_RVY_RECOVERY 6008    /* Bad recovery point */
        !           274: #define        FS_RVY_NOPOINT  6009    /* Non-existent recovery point */
        !           275: #define        FS_RVY_MODAVAIL 6010    /* Recovery mode not available */
        !           276: #define        FS_RVY_MODINCON 6011    /* Recovery mode inconsistent */
        !           277: #define        FS_RVY_MODREDUCE 6012   /* Recovery mode reduced */
        !           278: #define        FS_RVY_ACCAVAIL 6013    /* Access control not available */
        !           279: #define        FS_RVY_ACCSUPRT 6014    /* Access control not supported */
        !           280: #define        FS_RVY_ACCINCON 6015    /* Access control inconsistent */
        !           281: #define        FS_RVY_TYPINCON 6016    /* Contents type inconsistent */
        !           282: #define        FS_RVY_TYPSIMPL 6017    /* Contents type simplified */
        !           283: 
        !           284:     int            ftd_observer;       /* error-observer */
        !           285:     int            ftd_source;         /* error-source */
        !           286: #define        EREF_NONE       0       /*   no-categorizaton-possible */
        !           287: #define        EREF_IFSU       1       /*   initiating-file-service-user */
        !           288: #define        EREF_IFPM       2       /*   initiating-file-protocol-machine */
        !           289: #define        EREF_SERV       3       /*   service-supporting-the-file-protocol-machine */
        !           290: #define        EREF_RFPM       4       /*   responding-file-protocol-machine */
        !           291: #define        EREF_RFSU       5       /*   responding-file-service-user */
        !           292: 
        !           293:     int            ftd_delay;          /* suggested-delay */
        !           294: #define        DIAG_NODELAY    (-1)
        !           295: 
        !           296:                                /* further-details */
        !           297: #define        FTD_SIZE        512     /* should be unlimited... */
        !           298:     int            ftd_cc;             /*   length */
        !           299:     char    ftd_data[FTD_SIZE];        /*   data */
        !           300: };
        !           301: 
        !           302: /*  */
        !           303: 
        !           304: struct FTAMcharging {          /* Charging */
        !           305:     int            fc_ncharge;         /* number of charges */
        !           306: 
        !           307: #define        NFCHRG  5               /* arbitrary */
        !           308:     struct fc_charge {
        !           309:        char   *fc_resource;    /* resource-identifier */
        !           310:        char   *fc_unit;        /* charging-unit */
        !           311:        int     fc_value;       /* charging-value */
        !           312:     }      fc_charges[NFCHRG];
        !           313: };
        !           314: 
        !           315: /*  */
        !           316: 
        !           317: struct FTAMpasswords {         /* Access-Passwords */
        !           318:     char   *fp_read;           /* read-password */
        !           319:     int            fp_readlen;
        !           320: 
        !           321:     char   *fp_insert;         /* insert-password */
        !           322:     int            fp_insertlen;
        !           323: 
        !           324:     char   *fp_replace;                /* replace-password */
        !           325:     int            fp_replacelen;
        !           326: 
        !           327:     char   *fp_extend;         /* extend-password */
        !           328:     int            fp_extendlen;
        !           329: 
        !           330:     char   *fp_erase;          /* erase-password */
        !           331:     int            fp_eraselen;
        !           332: 
        !           333:     char   *fp_readattr;       /* read-attribute-password */
        !           334:     int            fp_readattrlen;
        !           335: 
        !           336:     char   *fp_chngattr;       /* change-attribute-password */
        !           337:     int            fp_chngattrlen;
        !           338: 
        !           339:     char   *fp_delete;         /* delete-password */
        !           340:     int            fp_deletelen;
        !           341: };
        !           342: #define        FPFREE(fp) \
        !           343: { \
        !           344:     register struct FTAMpasswords *FP = (fp); \
        !           345:  \
        !           346:     if (FP -> fp_read) \
        !           347:        free (FP -> fp_read), FP -> fp_read = NULL; \
        !           348:     if (FP -> fp_insert) \
        !           349:        free (FP -> fp_insert), FP -> fp_insert = NULL; \
        !           350:     if (FP -> fp_replace) \
        !           351:        free (FP -> fp_replace), FP -> fp_replace = NULL; \
        !           352:     if (FP -> fp_extend) \
        !           353:        free (FP -> fp_extend), FP -> fp_extend = NULL; \
        !           354:     if (FP -> fp_erase) \
        !           355:        free (FP -> fp_erase), FP -> fp_erase = NULL; \
        !           356:     if (FP -> fp_readattr) \
        !           357:        free (FP -> fp_readattr), FP -> fp_readattr = NULL; \
        !           358:     if (FP -> fp_chngattr) \
        !           359:        free (FP -> fp_chngattr), FP -> fp_chngattr = NULL; \
        !           360:     if (FP -> fp_delete) \
        !           361:        free (FP -> fp_delete), FP -> fp_delete = NULL; \
        !           362: }
        !           363: 
        !           364: /*  */
        !           365: 
        !           366: struct FTAMconcurrency {       /* Concurrency-Control/Concurrency-Access */
        !           367: #define        FLOCK_SHARED    00      /* shared */
        !           368: #define        FLOCK_EXCLUSIVE 01      /* exclusive */
        !           369: #define        FLOCK_NOTREQD   02      /* not-required */
        !           370: #define        FLOCK_NOACCESS  03      /* no-access */
        !           371: #define        FLOCK_MASK      03
        !           372: #define        FLOCK_PRESENT   FLOCK_EXCLUSIVE
        !           373: #define        FLOCK_RESTRICT  01
        !           374: 
        !           375:     char    fc_readlock;
        !           376:     char    fc_insertlock;
        !           377:     char    fc_replacelock;
        !           378:     char    fc_extendlock;
        !           379:     char    fc_eraselock;
        !           380:     char    fc_readattrlock;
        !           381:     char    fc_chngattrlock;
        !           382:     char    fc_deletelock;
        !           383: };
        !           384: #define        FCINIT(fc) \
        !           385: { \
        !           386:     (fc) -> fc_readlock = FLOCK_NOTREQD; \
        !           387:     (fc) -> fc_insertlock = FLOCK_NOTREQD; \
        !           388:     (fc) -> fc_replacelock = FLOCK_NOTREQD; \
        !           389:     (fc) -> fc_eraselock = FLOCK_NOTREQD; \
        !           390:     (fc) -> fc_extendlock = FLOCK_NOTREQD; \
        !           391:     (fc) -> fc_readattrlock = FLOCK_NOTREQD; \
        !           392:     (fc) -> fc_chngattrlock = FLOCK_NOTREQD; \
        !           393:     (fc) -> fc_deletelock = FLOCK_NOTREQD; \
        !           394: }
        !           395: 
        !           396: /*  */
        !           397: 
        !           398: struct FTAMacelement {         /* SET OF Access-Control-Element */
        !           399:     int            fe_actions;         /* action-list */
        !           400: #define        FA_PERM_READ            0x0001  /* read */
        !           401: #define        FA_PERM_INSERT          0x0002  /* insert */
        !           402: #define        FA_PERM_REPLACE         0x0004  /* replace */
        !           403: #define        FA_PERM_EXTEND          0x0008  /* extend */
        !           404: #define        FA_PERM_ERASE           0x0010  /* erase */
        !           405: #define        FA_PERM_READATTR        0x0020  /* read-attribute */
        !           406: #define        FA_PERM_CHNGATTR        0x0040  /* change-attribute */
        !           407: #define        FA_PERM_DELETE          0x0080  /* delete-file */
        !           408: 
        !           409:     struct FTAMconcurrency fe_concurrency; /* concurrency-access */
        !           410: 
        !           411:     char   *fe_identity;       /* user-identity */
        !           412: 
        !           413:     struct FTAMpasswords fe_passwords;
        !           414: 
        !           415:     AEI     fe_aet;            /* application-entity-title */
        !           416: 
        !           417:     struct FTAMacelement *fe_next;
        !           418: };
        !           419: #define        FEFREE(fe) \
        !           420: { \
        !           421:     register struct FTAMacelement  *FE, \
        !           422:                                   *FN; \
        !           423:  \
        !           424:     for (FE = (fe); FE; FE = FN) { \
        !           425:        FN = FE -> fe_next; \
        !           426:  \
        !           427:        if (FE -> fe_identity) \
        !           428:            free (FE -> fe_identity), FE -> fe_identity = NULL; \
        !           429:  \
        !           430:        FPFREE (&FE -> fe_passwords); \
        !           431:  \
        !           432:        if (FE -> fe_aet) { \
        !           433:            AEIFREE (FE -> fe_aet); \
        !           434:            free ((char *) FE -> fe_aet), FE -> fe_aet = NULL; \
        !           435:        } \
        !           436:  \
        !           437:        FE -> fe_next = NULL; \
        !           438:  \
        !           439:        free ((char *) FE); \
        !           440:     } \
        !           441: }
        !           442: 
        !           443: /*  */
        !           444: 
        !           445: struct FTAMattributes {                /* {Change,Create,Read,Select}-Attributes */
        !           446:     long    fa_present;                /* values present */
        !           447:     long    fa_novalue;                /* no value available */
        !           448: #define        FA_NULL         0x00000
        !           449: #define        FA_FILENAME     0x00001 /* filename */
        !           450: #define        FA_ACTIONS      0x00002 /* permitted-actions */
        !           451: #define        FA_CONTENTS     0x00004 /* contents-type */
        !           452: #define        FA_ACCOUNT      0x00008 /* account */
        !           453: #define        FA_DATE_CREATE  0x00010 /* date-and-time-of-creation */
        !           454: #define        FA_DATE_MODIFY  0x00020 /* date-and-time-of-last-modification */
        !           455: #define        FA_DATE_READ    0x00040 /* date-and-time-of-last-read-access */
        !           456: #define        FA_DATE_ATTR    0x00080 /* date-and-time-of-last-attribute-modification */
        !           457: #define        FA_ID_CREATE    0x00100 /* identity-of-creator */
        !           458: #define        FA_ID_MODIFY    0x00200 /* identity-of-last-modifier */
        !           459: #define        FA_ID_READ      0x00400 /* identity-of-last-reader */
        !           460: #define        FA_ID_ATTR      0x00800 /* identity-of-last-attribute-modifier */
        !           461: #define        FA_AVAILABILITY 0x01000 /* file-availability */
        !           462: #define        FA_FILESIZE     0x02000 /* filesize */
        !           463: #define        FA_FUTURESIZE   0x04000 /* future-filesize */
        !           464: #define        FA_CONTROL      0x08000 /* access-control */
        !           465: #define        FA_LEGAL        0x10000 /* legal-qualifications */
        !           466: #define        FA_PRIVATE      0x20000 /* private-use */
        !           467: 
        !           468: #define        FA_KERNEL       (FA_FILENAME | FA_ACTIONS | FA_CONTENTS)
        !           469: #define        FA_STORAGE      (FA_ACCOUNT | FA_DATE_CREATE | FA_DATE_MODIFY \
        !           470:                            | FA_DATE_READ | FA_DATE_ATTR | FA_ID_CREATE \
        !           471:                            | FA_ID_MODIFY | FA_ID_READ | FA_ID_ATTR \
        !           472:                            | FA_AVAILABILITY | FA_FILESIZE | FA_FUTURESIZE)
        !           473: #define        FA_SECURITY     (FA_CONTROL | FA_LEGAL)
        !           474: 
        !           475: #define        NFFILE  5               /* arbitrary */
        !           476:     int            fa_nfile;           /* filename */
        !           477:     char   *fa_files[NFFILE];  /*   .. */
        !           478:     
        !           479:     int            fa_permitted;       /* permitted-actions,
        !           480:                                   same as fe_actions, plus: */
        !           481: #define        FA_PERM_TRAV            0x0100  /* traversal */
        !           482: #define        FA_PERM_RVTRAV          0x0200  /* reverse-traversal */
        !           483: #define        FA_PERM_RANDOM          0x0400  /* random-order */
        !           484: #define        FA_PERM_TRAVERSAL       (FA_PERM_TRAV | FA_PERM_RVTRAV \
        !           485:                                        | FA_PERM_RANDOM)
        !           486: 
        !           487:     OID            fa_contents;        /* contents-type */
        !           488:     PE     fa_parameter;       /*   .. parameter */
        !           489: 
        !           490:     char   *fa_account;                /* account */
        !           491: 
        !           492:                                /* date-and-time-of- ... */
        !           493:     struct UTCtime fa_date_create;
        !           494:     struct UTCtime fa_date_modify;
        !           495:     struct UTCtime fa_date_read;
        !           496:     struct UTCtime fa_date_attribute;
        !           497: 
        !           498:                                /* identity-of- ... */
        !           499:     char   *fa_id_create;
        !           500:     char   *fa_id_modify;
        !           501:     char   *fa_id_read;
        !           502:     char   *fa_id_attribute;
        !           503: 
        !           504:     int            fa_availability;    /* file-availability */
        !           505: #define        FA_AVAIL_IMMED  0       /*   immediate */
        !           506: #define        FA_AVAIL_DEFER  1       /*   deferred */
        !           507: 
        !           508:     int            fa_filesize;        /* filesize */
        !           509:     int            fa_futuresize;      /* future-filesize */
        !           510: 
        !           511:     struct FTAMacelement *fa_control;/* access-control */
        !           512:     char   *fa_legal;          /* legal-qualification */
        !           513: 
        !           514:     char   *fa_private;                /* XXX */
        !           515: };
        !           516: 
        !           517: void   FAFREE ();
        !           518: 
        !           519: /*  */
        !           520: 
        !           521: struct FADUidentity {          /* FADU-Identity */
        !           522:     int            fa_type;
        !           523: #define        FA_FIRSTLAST    0       /* first-last */
        !           524: #define        FA_RELATIVE     1       /* relative */
        !           525: #define        FA_BEGINEND     2       /* begin-end */
        !           526: #define        FA_SINGLE       3       /* single-name */
        !           527: #define        FA_NAMELIST     4       /* name-list */
        !           528: #define        FA_FADUNUMBER   5       /* fadu-number */
        !           529: 
        !           530:     union {
        !           531:        int     fa_un_firstlast;
        !           532: #define        FA_FIRST        0
        !           533: #define        FA_LAST         1
        !           534: 
        !           535:        int     fa_un_relative;
        !           536: #define        FA_PREVIOUS     0
        !           537: #define        FA_CURRENT      1
        !           538: #define        FA_NEXT         2
        !           539: 
        !           540:        int     fa_un_beginend;
        !           541: #define        FA_BEGIN        0
        !           542: #define        FA_END          1
        !           543: 
        !           544:        char   *fa_un_singlename;
        !           545: 
        !           546: #define        NANAME  5               /* arbitrary */
        !           547:        struct {
        !           548:            char   *fa_un_names[NANAME];
        !           549:            int     fa_un_nname;
        !           550:        }       fa_un_list;
        !           551: 
        !           552:        int     fa_un_fadunumber;
        !           553:     }  fa_un;
        !           554: #define        fa_firstlast    fa_un.fa_un_firstlast
        !           555: #define        fa_relative     fa_un.fa_un_relative
        !           556: #define        fa_beginend     fa_un.fa_un_beginend
        !           557: #define        fa_singlename   fa_un.fa_un_singlename
        !           558: #define        fa_names        fa_un.fa_un_list.fa_un_names
        !           559: #define        fa_nname        fa_un.fa_un_list.fa_un_nname
        !           560: #define        fa_fadunumber   fa_un.fa_un_fadunumber
        !           561: };
        !           562: #define        FUFREE(fu) \
        !           563: { \
        !           564:     register int    FUI; \
        !           565:  \
        !           566:     if ((fu) -> fa_singlename) \
        !           567:        free ((fu) -> fa_singlename), (fu) -> fa_singlename = NULL; \
        !           568:  \
        !           569:     for (FUI = (fu) -> fa_nname - 1; FUI >= 0; FUI--) \
        !           570:        if ((fu) -> fa_names[FUI]) \
        !           571:            free ((fu) -> fa_names[FUI]), (fu) -> fa_names[FUI] = NULL; \
        !           572: }
        !           573: 
        !           574: /*  */
        !           575: 
        !           576: struct FTAMstart {             /* F-INITIALIZE.INDICATION */
        !           577:     int            fts_sd;             /* FTAM descriptor */
        !           578: 
        !           579:     AEInfo fts_callingtitle;   /* info on calling application-entity */
        !           580:     AEInfo fts_calledtitle;    /* info called application-entity */
        !           581: 
        !           582:     struct PSAPaddr fts_calledaddr;/* called presentation address */
        !           583:     struct PSAPaddr fts_callingaddr;/* calling presentation address */
        !           584: 
        !           585:     OID            fts_context;        /* application context name */
        !           586: 
        !           587:     int            fts_manage;         /* presentation-context-management */
        !           588: 
        !           589:     int            fts_class;          /* service-class */
        !           590: 
        !           591:     int            fts_units;          /* functional-units */
        !           592:     int            fts_attrs;          /* attribute-groups */
        !           593: 
        !           594:     PE     fts_sharedASE;      /* shared-ASE-information */
        !           595: 
        !           596:     int            fts_fqos;           /* ftam-QoS */
        !           597: 
        !           598:     struct FTAMcontentlist fts_contents;/* contents-type-list */
        !           599: 
        !           600:     char   *fts_initiator;     /* initiator-identity */
        !           601:     char   *fts_account;       /* account */
        !           602:     char   *fts_password;      /* filestore-password */
        !           603:     int            fts_passlen;        /*   .. */
        !           604: 
        !           605:     int            fts_ssdusize;       /* largest atomic SSDU */
        !           606: 
        !           607:     struct QOStype fts_qos;    /* Communications QoS */
        !           608: };
        !           609: #define        FTSFREE(fts) \
        !           610: { \
        !           611:     register int FSI; \
        !           612:  \
        !           613:     AEIFREE (&(fts) -> fts_callingtitle); \
        !           614:     AEIFREE (&(fts) -> fts_calledtitle); \
        !           615:     if ((fts) -> fts_context) \
        !           616:        oid_free ((fts) -> fts_context), (fts) -> fts_context = NULLOID; \
        !           617:  \
        !           618:     if ((fts) -> fts_sharedASE) \
        !           619:        pe_free ((fts) -> fts_sharedASE), (fts) -> fts_sharedASE = NULLPE; \
        !           620:  \
        !           621:     for (FSI = (fts) -> fts_contents.fc_ncontent - 1; FSI >= 0; FSI--) \
        !           622:        oid_free ((fts) -> fts_contents.fc_contents[FSI].fc_dtn), \
        !           623:                (fts) -> fts_contents.fc_contents[FSI].fc_dtn = NULLOID; \
        !           624:     (fts) -> fts_contents.fc_ncontent = 0; \
        !           625:  \
        !           626:     if ((fts) -> fts_initiator) \
        !           627:        free ((fts) -> fts_initiator), (fts) -> fts_initiator = NULL; \
        !           628:     if ((fts) -> fts_account) \
        !           629:        free ((fts) -> fts_account), (fts) -> fts_account = NULL; \
        !           630:     if ((fts) -> fts_password) \
        !           631:        free ((fts) -> fts_password), (fts) -> fts_password = NULL; \
        !           632: }
        !           633: 
        !           634: 
        !           635: struct FTAMconnect {           /* F-INITIALIZE.CONFIRMATION */
        !           636:     int            ftc_sd;             /* FTAM descriptor */
        !           637: 
        !           638:     AEInfo ftc_respondtitle;   /* responding application-entity title */
        !           639: 
        !           640:     struct PSAPaddr ftc_respondaddr;/* responding presentation address */
        !           641: 
        !           642:     OID            ftc_context;        /* application context name */
        !           643: 
        !           644:     int            ftc_state;          /* state-result */
        !           645:     int            ftc_action;         /* action-result */
        !           646: 
        !           647:     int            ftc_manage;         /* presentation-context-management */
        !           648: 
        !           649:     int            ftc_class;          /* service-class */
        !           650: 
        !           651:     int            ftc_units;          /* functional-units */
        !           652:     int            ftc_attrs;          /* attribute-groups */
        !           653: 
        !           654:     PE     ftc_sharedASE;      /* shared-ASE-information */
        !           655: 
        !           656:     int            ftc_fqos;           /* ftam-QoS */
        !           657: 
        !           658:     struct FTAMcontentlist ftc_contents;/* contents-type-list */
        !           659: 
        !           660: #define        NFDIAG  5               /* diagnostic */
        !           661:     int            ftc_ndiag;
        !           662:     struct FTAMdiagnostic  ftc_diags[NFDIAG];
        !           663: 
        !           664:     int            ftc_ssdusize;       /* largest atomic SSDU */
        !           665: 
        !           666:     struct QOStype ftc_qos;    /* communications QoS */
        !           667: };
        !           668: #define        FTCFREE(ftc) \
        !           669: { \
        !           670:     register int FCI; \
        !           671:  \
        !           672:     AEIFREE (&(ftc) -> ftc_respondtitle); \
        !           673:     if ((ftc) -> ftc_context) \
        !           674:        oid_free ((ftc) -> ftc_context), (ftc) -> ftc_context = NULLOID; \
        !           675:  \
        !           676:     if ((ftc) -> ftc_sharedASE) \
        !           677:        pe_free ((ftc) -> ftc_sharedASE), (ftc) -> ftc_sharedASE = NULLPE; \
        !           678:  \
        !           679:     for (FCI = (ftc) -> ftc_contents.fc_ncontent - 1; FCI >= 0; FCI--) \
        !           680:        oid_free ((ftc) -> ftc_contents.fc_contents[FCI].fc_dtn), \
        !           681:                (ftc) -> ftc_contents.fc_contents[FCI].fc_dtn = NULLOID; \
        !           682:     (ftc) -> ftc_contents.fc_ncontent = 0; \
        !           683: }
        !           684: 
        !           685: 
        !           686: struct FTAMfinish {            /* F-TERMINATE.INDICATION */
        !           687:     PE     ftf_sharedASE;      /* shared-ASE-information */
        !           688: };
        !           689: #define        FTFFREE(ftf) \
        !           690: { \
        !           691:       if ((ftf) -> ftf_sharedASE) \
        !           692:          pe_free ((ftf) -> ftf_sharedASE), (ftf) -> ftf_sharedASE = NULLPE; \
        !           693: }
        !           694: 
        !           695: struct FTAMrelease {           /* F-TERMINATE.CONFIRMATION */
        !           696:     PE     ftr_sharedASE;      /* shared-ASE-information */
        !           697:                                /* charging */
        !           698:     struct FTAMcharging ftr_charges;
        !           699: };
        !           700: #define        FTRFREE(ftr) \
        !           701: { \
        !           702:     register int    FRI; \
        !           703:     register struct fc_charge  *FC; \
        !           704:  \
        !           705:     if ((ftr) -> ftr_sharedASE) \
        !           706:        pe_free ((ftr) -> ftr_sharedASE), (ftr) -> ftr_sharedASE = NULLPE; \
        !           707:  \
        !           708:     for (FC = (ftr) -> ftr_charges.fc_charges, FRI = (ftr) -> ftr_charges.fc_ncharge - 1; \
        !           709:            FRI >= 0; \
        !           710:            FC++, FRI--) { \
        !           711:        if (FC -> fc_resource) \
        !           712:            free (FC -> fc_resource), FC -> fc_resource = NULL; \
        !           713:        if (FC -> fc_unit) \
        !           714:            free (FC -> fc_unit), FC -> fc_unit = NULL; \
        !           715:     } \
        !           716:     (ftr) -> ftr_charges.fc_ncharge = 0; \
        !           717: }
        !           718: 
        !           719: 
        !           720: struct FTAMabort {             /* F-{U,P}-ABORT.INDICATION */
        !           721:     int            fta_peer;           /* T   = F-U-ABORT.INDICATION
        !           722:                                   NIL = F-P-ABORT.INDICATION */
        !           723: 
        !           724:     int            fta_action;         /* action-result */
        !           725:     
        !           726:     int            fta_ndiag;          /* diagnostic */
        !           727:     struct FTAMdiagnostic fta_diags[NFDIAG];
        !           728: };
        !           729: 
        !           730: 
        !           731: struct FTAMselect {            /* F-SELECT.* */
        !           732:                                /* RESPONSE only */
        !           733:     int     ftse_state;                /* state-result */
        !           734:     int     ftse_action;       /* action-result */
        !           735: 
        !           736:                                /* attributes (FILENAME only) */
        !           737:     struct FTAMattributes ftse_attrs;
        !           738: #define        FA_SEL_ATTRS    FA_FILENAME
        !           739: 
        !           740:                                /* REQUEST only */
        !           741:     int            ftse_access;        /* requested-access */
        !           742: #define        FA_REQ_MASK     (FA_PERM_READ | FA_PERM_INSERT | FA_PERM_REPLACE \
        !           743:                                | FA_PERM_EXTEND | FA_PERM_ERASE \
        !           744:                                | FA_PERM_READATTR | FA_PERM_CHNGATTR \
        !           745:                                | FA_PERM_DELETE)
        !           746:                                /* access-passwords */
        !           747:     struct FTAMpasswords ftse_pwds;
        !           748:                                /* concurrency-control */
        !           749:     struct FTAMconcurrency ftse_conctl;
        !           750:     PE     ftse_sharedASE;     /* shared-ASE-information */
        !           751:     char   *ftse_account;      /* account */
        !           752: 
        !           753:                                /* RESPONSE only */
        !           754:     int            ftse_ndiag;         /* diagnostic */
        !           755:     struct FTAMdiagnostic ftse_diags[NFDIAG];
        !           756: };
        !           757: #define        FTSEFREE(ftse) \
        !           758: { \
        !           759:     FAFREE (&((ftse) -> ftse_attrs)); \
        !           760:     FPFREE (&((ftse) -> ftse_pwds)); \
        !           761:     if ((ftse) -> ftse_sharedASE) \
        !           762:        pe_free ((ftse) -> ftse_sharedASE), (ftse) -> ftse_sharedASE = NULLPE; \
        !           763:     if ((ftse) -> ftse_account) \
        !           764:        free ((ftse) -> ftse_account), (ftse) -> ftse_account = NULLCP; \
        !           765: }
        !           766: 
        !           767: 
        !           768: struct FTAMdeselect {          /* F-DESELECT.* */
        !           769:                                /* RESPONSE only */
        !           770:     int     ftde_action;       /* action-result */
        !           771: 
        !           772:     PE     ftde_sharedASE;     /* shared-ASE-information */
        !           773: 
        !           774:                                /* RESPONSE only */
        !           775:                                /* charging */
        !           776:     struct FTAMcharging ftde_charges;
        !           777:     int     ftde_ndiag;                /* diagnostic */
        !           778:     struct FTAMdiagnostic   ftde_diags[NFDIAG];
        !           779: };
        !           780: #define        FTDEFREE(ftde) \
        !           781: { \
        !           782:     register int    FDEI; \
        !           783:     register struct fc_charge  *FC; \
        !           784:  \
        !           785:     for (FC = (ftde) -> ftde_charges.fc_charges, FDEI = (ftde) -> ftde_charges.fc_ncharge - 1; \
        !           786:            FDEI >= 0; \
        !           787:            FC++, FDEI--) { \
        !           788:        if (FC -> fc_resource) \
        !           789:            free (FC -> fc_resource), FC -> fc_resource = NULL; \
        !           790:        if (FC -> fc_unit) \
        !           791:            free (FC -> fc_unit), FC -> fc_unit = NULL; \
        !           792:     } \
        !           793:     (ftde) -> ftde_charges.fc_ncharge = 0; \
        !           794:     if ((ftde) -> ftde_sharedASE) \
        !           795:        pe_free ((ftde) -> ftde_sharedASE), (ftde) -> ftde_sharedASE = NULLPE; \
        !           796: }
        !           797: 
        !           798: 
        !           799: struct FTAMcreate {            /* F-CREATE.* */
        !           800:                                /* RESPONSE only */
        !           801:     int     ftce_state;                /* state-result */
        !           802:     int     ftce_action;       /* action-result */
        !           803: 
        !           804:                                /* REQUEST only */
        !           805:     int            ftce_override;      /* override */
        !           806: #define        FOVER_FAIL      0       /* fail, if already exists */
        !           807: #define        FOVER_SELECT    1       /* select, if it already exists */
        !           808: #define        FOVER_WRITE     2       /* zero-truncate, if it already exists */
        !           809: #define        FOVER_DELETE    3       /* delete, if it already exists */
        !           810: 
        !           811:                                /* initial-attributes */
        !           812:     struct FTAMattributes ftce_attrs;
        !           813: #define        FA_CRE_ATTRS    (FA_FILENAME | FA_ACTIONS | FA_CONTENTS | FA_ACCOUNT \
        !           814:                            | FA_AVAILABILITY | FA_FUTURESIZE | FA_CONTROL \
        !           815:                            | FA_LEGAL | FA_PRIVATE)
        !           816: 
        !           817:                                /* REQUEST only */
        !           818:     char   *ftce_create;       /* create-password */
        !           819:     int            ftce_crelen;        /*   .. */
        !           820:     int            ftce_access;        /* requested-access */
        !           821:                                /* access-passwords */
        !           822:     struct FTAMpasswords ftce_pwds;
        !           823:                                /* concurrency-control */
        !           824:     struct FTAMconcurrency ftce_conctl;
        !           825: 
        !           826:     PE     ftce_sharedASE;     /* shared-ASE-information */
        !           827: 
        !           828:                                /* REQUEST only */
        !           829:     char   *ftce_account;      /* account */
        !           830: 
        !           831:                                /* RESPONSE only */
        !           832:     int            ftce_ndiag;         /* diagnostic */
        !           833:     struct FTAMdiagnostic ftce_diags[NFDIAG];
        !           834: };
        !           835: #define        FTCEFREE(ftce) \
        !           836: { \
        !           837:     FAFREE (&((ftce) -> ftce_attrs)); \
        !           838:     if ((ftce) -> ftce_create) \
        !           839:        free ((ftce) -> ftce_create), (ftce) -> ftce_create = NULLCP; \
        !           840:     FPFREE (&((ftce) -> ftce_pwds)); \
        !           841:     if ((ftce) -> ftce_sharedASE) \
        !           842:        pe_free ((ftce) -> ftce_sharedASE), (ftce) -> ftce_sharedASE = NULLPE; \
        !           843:     if ((ftce) -> ftce_account) \
        !           844:        free ((ftce) -> ftce_account), (ftce) -> ftce_account = NULLCP; \
        !           845: }
        !           846: 
        !           847: 
        !           848: struct FTAMdelete {            /* F-DELETE.* */
        !           849:                                /* RESPONSE only */
        !           850:     int            ftxe_action;        /* action-result */
        !           851:     
        !           852:     PE     ftxe_sharedASE;     /* shared-ASE-information */
        !           853: 
        !           854:                                /* RESPONSE only */
        !           855:                                /* charging */
        !           856:     struct FTAMcharging ftxe_charges;
        !           857:     int     ftxe_ndiag;                /* diagnostic */
        !           858:     struct FTAMdiagnostic   ftxe_diags[NFDIAG];
        !           859: };
        !           860: #define        FTXEFREE(ftxe) \
        !           861: { \
        !           862:     register int    FXEI; \
        !           863:     register struct fc_charge  *FC; \
        !           864:  \
        !           865:     if ((ftxe) -> ftxe_sharedASE) \
        !           866:        pe_free ((ftxe) -> ftxe_sharedASE), (ftxe) -> ftxe_sharedASE = NULLPE; \
        !           867:  \
        !           868:     for (FC = (ftxe) -> ftxe_charges.fc_charges, FXEI = (ftxe) -> ftxe_charges.fc_ncharge - 1; \
        !           869:            FXEI >= 0; \
        !           870:            FC++, FXEI--) { \
        !           871:        if (FC -> fc_resource) \
        !           872:            free (FC -> fc_resource), FC -> fc_resource = NULL; \
        !           873:        if (FC -> fc_unit) \
        !           874:            free (FC -> fc_unit), FC -> fc_unit = NULL; \
        !           875:     } \
        !           876:     (ftxe) -> ftxe_charges.fc_ncharge = 0; \
        !           877: }
        !           878: 
        !           879: 
        !           880: struct FTAMreadattr {          /* F-READ-ATTRIB.* */
        !           881:                                /* RESPONSE only */
        !           882:     int            ftra_action;        /* action-result */
        !           883: 
        !           884:                                /* REQUEST only */
        !           885:     int            ftra_attrnames;     /* attribute names (from fa_present) */
        !           886: 
        !           887:                                /* RESPONSE only */
        !           888:     struct FTAMattributes ftra_attrs;
        !           889:     int            ftra_ndiag;         /* diagnostic */
        !           890:     struct FTAMdiagnostic ftra_diags[NFDIAG];
        !           891: };
        !           892: #define        FTRAFREE(ftra) \
        !           893: { \
        !           894:     FAFREE (&((ftra) -> ftra_attrs)); \
        !           895: }
        !           896: 
        !           897: 
        !           898: struct FTAMchngattr {          /* F-CHANGE-ATTRIB.* */
        !           899:                                /* RESPONSE only */
        !           900:     int ftca_action;           /* action-result */
        !           901: 
        !           902:     struct FTAMattributes ftca_attrs;
        !           903: #define        FA_CHG_ATTRS    (FA_FILENAME | FA_ACCOUNT | FA_AVAILABILITY \
        !           904:                            | FA_FUTURESIZE | FA_CONTROL | FA_LEGAL \
        !           905:                            | FA_PRIVATE)
        !           906: 
        !           907:                                /* RESPONSE only */
        !           908:     int            ftca_ndiag;         /* diagnostic */
        !           909:     struct FTAMdiagnostic ftca_diags[NFDIAG];
        !           910: };
        !           911: #define        FTCAFREE(ftca) \
        !           912: { \
        !           913:     FAFREE (&((ftca) -> ftca_attrs)); \
        !           914: }
        !           915: 
        !           916: 
        !           917: struct FTAMopen {              /* F-OPEN.* */
        !           918:                                /* RESPONSE only */
        !           919:     int            ftop_state;         /* state-result */
        !           920:     int            ftop_action;        /* action-result */
        !           921: 
        !           922:                                /* REQUEST only */
        !           923:     int            ftop_mode;          /* processing-mode (read..erase) */
        !           924: #define        FA_MODE_MASK    (FA_PERM_READ | FA_PERM_INSERT | FA_PERM_REPLACE \
        !           925:                                | FA_PERM_EXTEND | FA_PERM_ERASE)
        !           926: 
        !           927:     OID            ftop_contents;      /* contents-type */
        !           928:     PE     ftop_parameter;     /*   .. */
        !           929:                                /* concurrency-control */
        !           930:     struct FTAMconcurrency ftop_conctl;
        !           931:     PE     ftop_sharedASE;     /* shared-ASE-information */
        !           932: 
        !           933:                                /* REQUEST only */
        !           934:     int            ftop_locking;       /* enable-fadu-locking */
        !           935: 
        !           936:                                /* RESPONSE only */
        !           937:     int            ftop_ndiag;         /* diagnostic */
        !           938:     struct FTAMdiagnostic ftop_diags[NFDIAG];
        !           939: };
        !           940: #define        FTOPFREE(ftop) \
        !           941: { \
        !           942:     if ((ftop) -> ftop_contents) \
        !           943:        oid_free ((ftop) -> ftop_contents), \
        !           944:            (ftop) -> ftop_contents = NULLOID; \
        !           945:     if ((ftop) -> ftop_parameter) \
        !           946:        pe_free ((ftop) -> ftop_parameter), \
        !           947:            (ftop) -> ftop_parameter = NULLPE; \
        !           948:     if ((ftop) -> ftop_sharedASE) \
        !           949:        pe_free ((ftop) -> ftop_sharedASE), (ftop) -> ftop_sharedASE = NULLPE; \
        !           950: }
        !           951: 
        !           952: 
        !           953: struct FTAMclose {             /* F-CLOSE.* */
        !           954:     int            ftcl_action;        /* action-result */
        !           955: 
        !           956:     PE     ftcl_sharedASE;     /* shared-ASE-information */
        !           957: 
        !           958:     int     ftcl_ndiag;                /* diagnostic */
        !           959:     struct FTAMdiagnostic   ftcl_diags[NFDIAG];
        !           960: };
        !           961: #define        FTCLFREE(ftcl) \
        !           962: { \
        !           963:     if ((ftcl) -> ftcl_sharedASE) \
        !           964:        pe_free ((ftcl) -> ftcl_sharedASE), (ftcl) -> ftcl_sharedASE = NULLPE; \
        !           965: }
        !           966: 
        !           967: 
        !           968: struct FTAMgroup {
        !           969:     int     ftg_threshold;     /* threshold */
        !           970: 
        !           971:     int     ftg_flags;
        !           972: #define        FTG_NULL        0x0000
        !           973: #define        FTG_BEGIN       0x0001  /* have begin */
        !           974: #define        FTG_SELECT      0x0002  /*   .. select */
        !           975: #define        FTG_CREATE      0x0004  /*   .. create */
        !           976: #define        FTG_RDATTR      0x0008  /*   .. read attribute */
        !           977: #define        FTG_CHATTR      0x0010  /*   .. change attribute */
        !           978: #define        FTG_OPEN        0x0020  /*   .. open */
        !           979: #define        FTG_CLOSE       0x0040  /*   .. close */
        !           980: #define        FTG_DESELECT    0x0080  /*   .. deselect */
        !           981: #define        FTG_DELETE      0x0100  /*   .. delete */
        !           982: #define        FTG_END         0x0200  /*   .. end */
        !           983: 
        !           984:     union {
        !           985:        struct FTAMselect   ftg_un1_select;
        !           986:        struct FTAMcreate   ftg_un1_create;
        !           987:        struct FTAMclose    ftg_un1_close;
        !           988:     }                   ftg_un1;
        !           989: #define        ftg_select      ftg_un1.ftg_un1_select
        !           990: #define        ftg_create      ftg_un1.ftg_un1_create
        !           991: #define        ftg_close       ftg_un1.ftg_un1_close
        !           992: 
        !           993:     struct FTAMreadattr ftg_readattr;
        !           994: 
        !           995:     struct FTAMchngattr ftg_chngattr;
        !           996: 
        !           997:     union {
        !           998:        struct FTAMdeselect ftg_un2_deselect;
        !           999:        struct FTAMdelete   ftg_un2_delete;
        !          1000:        struct FTAMopen     ftg_un2_open;
        !          1001:     } ftg_un2;
        !          1002: #define        ftg_deselect    ftg_un2.ftg_un2_deselect
        !          1003: #define        ftg_delete      ftg_un2.ftg_un2_delete
        !          1004: #define        ftg_open        ftg_un2.ftg_un2_open
        !          1005: };
        !          1006: #define        FTGFREE(ftg) \
        !          1007: { \
        !          1008:     if ((ftg) -> ftg_flags & FTG_SELECT) { \
        !          1009:        FTSEFREE (&((ftg) -> ftg_select)); \
        !          1010:     } \
        !          1011:     else \
        !          1012:        if ((ftg) -> ftg_flags & FTG_CREATE) { \
        !          1013:            FTCEFREE (&((ftg) -> ftg_create)); \
        !          1014:        } \
        !          1015:        else \
        !          1016:            if ((ftg) -> ftg_flags & FTG_CLOSE) \
        !          1017:                FTCLFREE (&((ftg) -> ftg_close)); \
        !          1018:  \
        !          1019:     if ((ftg) ->ftg_flags & FTG_RDATTR) \
        !          1020:        FTRAFREE (&((ftg) -> ftg_readattr)); \
        !          1021:  \
        !          1022:     if ((ftg) ->ftg_flags & FTG_CHATTR) \
        !          1023:        FTCAFREE (&((ftg) -> ftg_chngattr)); \
        !          1024:  \
        !          1025:     if ((ftg) -> ftg_flags & FTG_DESELECT) { \
        !          1026:        FTDEFREE (&((ftg) -> ftg_deselect)); \
        !          1027:     } \
        !          1028:     else \
        !          1029:        if ((ftg) -> ftg_flags & FTG_DELETE) { \
        !          1030:            FTXEFREE (&((ftg) -> ftg_delete)); \
        !          1031:        } \
        !          1032:        else \
        !          1033:            if ((ftg) -> ftg_flags & FTG_OPEN) \
        !          1034:                FTOPFREE (&((ftg) -> ftg_open)); \
        !          1035: }
        !          1036: 
        !          1037: 
        !          1038: struct FTAMaccess {            /* F-{LOCATE,ERASE}.{INDICATION,CONFIRMATION} */
        !          1039:     int            ftac_operation;
        !          1040: #define        FA_OPS_LOCATE   0       /* locate */
        !          1041: #define        FA_OPS_ERASE    1       /* erase */
        !          1042: 
        !          1043:                                /* CONFIRMATION only */
        !          1044:     int            ftac_action;        /* action-result */
        !          1045: 
        !          1046:                                /* *.INDICATION OR F-LOCATE.CONFIRMATION */
        !          1047:                                /* fadu-identity */
        !          1048:     struct FADUidentity ftac_identity;
        !          1049: 
        !          1050:                                /* F-LOCATE.INDICATION only */
        !          1051:     int            ftac_locking;       /* fadu-lock (on, off) */
        !          1052: 
        !          1053:                                /* CONFIRMATION only */
        !          1054:     int     ftac_ndiag;                /* diagnostic */
        !          1055:     struct FTAMdiagnostic   ftac_diags[NFDIAG];
        !          1056: };
        !          1057: #define        FTACFREE(ftac) \
        !          1058: { \
        !          1059:     FUFREE (&((ftac) -> ftac_identity)); \
        !          1060: }
        !          1061: 
        !          1062: 
        !          1063: struct FTAMreadwrite {         /* F-{READ,WRITE}.INDICATION */
        !          1064:     int            ftrw_operation;     /* fadu-operation */
        !          1065: #define        FA_OPS_READ     (-1)    /*   read (pseudo) */
        !          1066: #define        FA_OPS_INSERT   0       /*   insert */
        !          1067: #define        FA_OPS_REPLACE  1       /*   replace */
        !          1068: #define        FA_OPS_EXTEND   2       /*   extend */
        !          1069: 
        !          1070:                                /* fadu-identity */
        !          1071:     struct FADUidentity        ftrw_identity;
        !          1072: 
        !          1073:                                /* F-READ.INDICATION only */
        !          1074:     int            ftrw_context;       /* access-context */
        !          1075: #define        FA_ACC_HA       0       /*   hierarchical-all-data-units */
        !          1076: #define        FA_ACC_HN       1       /*   hierarchical-no-data-units */
        !          1077: #define        FA_ACC_FA       2       /*   flat-all-data-units */
        !          1078: #define        FA_ACC_FL       3       /*   flat-one-level-data-units */
        !          1079: #define        FA_ACC_FS       4       /*   flat-single-data-unit */
        !          1080: #define        FA_ACC_UA       5       /*   unstructured-all-data-units */
        !          1081: #define        FA_ACC_US       6       /*   unstructured-single-data-unit */
        !          1082:     int            ftrw_level;         /* level for FL */
        !          1083: 
        !          1084:     int            ftrw_locking;       /* fadu-lock */
        !          1085: };
        !          1086: #define        FTRWFREE(ftrw) \
        !          1087: { \
        !          1088:     FUFREE (&((ftrw) -> ftrw_identity)); \
        !          1089: }
        !          1090: 
        !          1091: 
        !          1092: struct FTAMdataend {           /* F-DATA-END.INDICATION */
        !          1093:     int            ftda_action;        /* action-result */
        !          1094: 
        !          1095:     int     ftda_ndiag;                /* diagnostic */
        !          1096:     struct FTAMdiagnostic   ftda_diags[NFDIAG];
        !          1097: };
        !          1098: 
        !          1099: 
        !          1100: struct FTAMtransend {          /* F-TRANSFER-END.{INDICATION,CONFIRMATION} */
        !          1101:                                /* RESPONSE only */
        !          1102:     int            ftre_action;        /* action-result */
        !          1103: 
        !          1104:     PE     ftre_sharedASE;     /* shared-ASE-information */
        !          1105: 
        !          1106:                                /* RESPONSE only */
        !          1107:     int     ftre_ndiag;                /* diagnostic */
        !          1108:     struct FTAMdiagnostic   ftre_diags[NFDIAG];
        !          1109: };
        !          1110: #define        FTREFREE(ftre) \
        !          1111: { \
        !          1112:     if ((ftre) -> ftre_sharedASE) \
        !          1113:        pe_free ((ftre) -> ftre_sharedASE), (ftre) -> ftre_sharedASE = NULLPE; \
        !          1114: }
        !          1115: 
        !          1116: 
        !          1117: struct FTAMcancel {            /* F-CANCEL.{INDICATION,CONFIRMATION} */
        !          1118:     int            ftcn_action;        /* action-result */
        !          1119: 
        !          1120:     PE     ftcn_sharedASE;     /* shared-ASE-information */
        !          1121: 
        !          1122:     int     ftcn_ndiag;                /* diagnostic */
        !          1123:     struct FTAMdiagnostic   ftcn_diags[NFDIAG];
        !          1124: };
        !          1125: #define        FTCNFREE(ftcn) \
        !          1126: { \
        !          1127:     if ((ftcn) -> ftcn_sharedASE) \
        !          1128:        pe_free ((ftcn) -> ftcn_sharedASE), (ftcn) -> ftcn_sharedASE = NULLPE; \
        !          1129: }
        !          1130: 
        !          1131: 
        !          1132: struct FTAMindication {
        !          1133:     int     fti_type;          /* the union element present */
        !          1134: #define        FTI_FINISH      0x00
        !          1135: #define        FTI_ABORT       0x01
        !          1136: #define        FTI_MANAGEMENT  0x02
        !          1137: #define        FTI_BULKBEGIN   0x03
        !          1138: #define        FTI_BULKEND     0x04
        !          1139: #define        FTI_ACCESS      0x05
        !          1140: #define        FTI_READWRITE   0x06
        !          1141: #define        FTI_DATA        0x07
        !          1142: #define        FTI_DATAEND     0x08
        !          1143: #define        FTI_CANCEL      0x09
        !          1144: #define        FTI_TRANSEND    0x10
        !          1145: 
        !          1146:     union {
        !          1147:        struct FTAMfinish   fti_un_finish;
        !          1148:        struct FTAMabort    fti_un_abort;
        !          1149:        struct FTAMgroup    fti_un_group;
        !          1150:        struct FTAMaccess   fti_un_access;
        !          1151:        struct FTAMreadwrite fti_un_readwrite;
        !          1152:        struct PSAPdata     fti_un_data;
        !          1153:        struct FTAMdataend  fti_un_dataend;
        !          1154:        struct FTAMcancel   fti_un_cancel;
        !          1155:        struct FTAMtransend fti_un_transend;
        !          1156:     }  fti_un;
        !          1157: #define        fti_finish      fti_un.fti_un_finish
        !          1158: #define        fti_abort       fti_un.fti_un_abort
        !          1159: #define        fti_group       fti_un.fti_un_group
        !          1160: #define        fti_access      fti_un.fti_un_access
        !          1161: #define        fti_readwrite   fti_un.fti_un_readwrite
        !          1162: #define        fti_data        fti_un.fti_un_data
        !          1163: #define        fti_dataend     fti_un.fti_un_dataend
        !          1164: #define        fti_cancel      fti_un.fti_un_cancel
        !          1165: #define        fti_transend    fti_un.fti_un_transend
        !          1166: };
        !          1167:     
        !          1168: /* when FTAMindication has PSAPdata, the pe_context indicates whether
        !          1169:    each data is from the FTAM PCI or is a data element.
        !          1170: 
        !          1171:        FTAM PCI        - PE_DFLT_CTX
        !          1172: 
        !          1173:        data element    - anything else
        !          1174: 
        !          1175:    three different types of data in the FTAM PCI are handled by the user:
        !          1176: 
        !          1177:        Node-Descriptor-Data-Element ::=        [APPLICATION 0] ...
        !          1178:        Enter-Subtree-Data-Element ::=          [APPLICATION 1] ...
        !          1179:        Exit-Subtree-Data-Element ::=           [APPLICATION 2] ...
        !          1180:  */
        !          1181: 
        !          1182: #define        FADU_NODESCR    0       /* Node-Descriptor-Data-Element */
        !          1183: #define        FADU_ENTERTREE  1       /* Enter-Subtree-Data-Element */
        !          1184: #define        FADU_EXITREE    2       /* Exit-Subtree-Data-Element */
        !          1185: 
        !          1186: /*  */
        !          1187: 
        !          1188: extern char *ftamversion;
        !          1189: 
        !          1190: extern LLog _ftam_log, *ftam_log;
        !          1191: 
        !          1192: 
        !          1193: int    FInit ();               /* F-INITIALIZE.INDICATION */
        !          1194: int    FInitializeResponse (); /* F-INITIALIZE.RESPONSE */
        !          1195: int    FInitializeRequest ();  /* F-INITIALIZE.REQUEST */
        !          1196: int    FTerminateRequest ();   /* F-TERMINATE.REQUEST */
        !          1197: int    FTerminateResponse ();  /* F-TERMINATE.RESPONSE */
        !          1198: int    FUAbortRequest ();      /* F-U-ABORT.REQUEST */
        !          1199: 
        !          1200: int    FWaitRequest ();        /* F-WAIT.REQUEST (pseudo) */
        !          1201: 
        !          1202: int    FManageRequest ();      /* F-MANAGE.REQUEST (group) */
        !          1203: int    FManageResponse ();     /* F-MANAGE.RESPONSE (group) */
        !          1204: int    FBulkBeginRequest ();   /* F-BULK-BEGIN.REQUEST (group) */
        !          1205: int    FBulkBeginResponse ();  /* F-BULK-BEGIN.RESPONSE (group) */
        !          1206: int    FBulkEndRequest ();     /* F-BULK-END.REQUEST (group) */
        !          1207: int    FBulkEndResponse ();    /* F-BULK-END.RESPONSE (group) */
        !          1208: 
        !          1209: int    FAccessRequest ();      /* F-{LOCATE,ERASE}.REQUEST */
        !          1210: int    FAccessResponse ();     /* F-{LOCATE,ERASE}.RESPONSE */
        !          1211: 
        !          1212: int    FReadWriteRequest ();   /* F-{READ,WRITE}.REQUEST */
        !          1213: int    FDataRequest ();        /* F-DATA.REQUEST */
        !          1214: int    FDataEndRequest ();     /* F-DATA-END.REQUEST */
        !          1215: int    FCancelRequest ();      /* F-CANCEL.REQUEST */
        !          1216: int    FCancelResponse ();     /* F-CANCEL.RESPONSE */
        !          1217: int    FTransEndRequest ();    /* F-TRANSFER-END.REQUEST */
        !          1218: int    FTransEndResponse ();   /* F-TRANSFER-END.RESPONSE */
        !          1219: 
        !          1220: int    FSetIndications ();     /* define vector for INDICATION events */
        !          1221: int    FSelectMask ();         /* map ftam descriptors for select() */
        !          1222: 
        !          1223: int    FHookRequest ();        /* set tracing */
        !          1224: int    FTraceHook ();          /* user-defined tracing */
        !          1225: 
        !          1226: char   *FErrString ();         /* return FTAM error code in string form */
        !          1227: 
        !          1228: /*  */
        !          1229: 
        !          1230: struct isodocument {
        !          1231:     char   *id_entry;
        !          1232: 
        !          1233:     OID            id_type;
        !          1234: 
        !          1235:     OID            id_abstract;
        !          1236:     OID            id_transfer;
        !          1237:     OID            id_model;
        !          1238:     OID            id_constraint;
        !          1239: };
        !          1240: 
        !          1241: int    setisodocument (), endisodocument ();
        !          1242: 
        !          1243: struct isodocument *getisodocument ();
        !          1244: 
        !          1245: struct isodocument *getisodocumentbyentry ();
        !          1246: struct isodocument *getisodocumentbytype ();
        !          1247: 
        !          1248: #endif

unix.superglobalmegacorp.com

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