|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.