|
|
1.1 ! root 1: /* acpkt.h - include file for association control providers (AcS-PROVIDER) */ ! 2: ! 3: /* ! 4: * $Header: /f/osi/h/RCS/acpkt.h,v 7.2 90/07/01 21:03:46 mrose Exp $ ! 5: * ! 6: * ! 7: * $Log: acpkt.h,v $ ! 8: * Revision 7.2 90/07/01 21:03:46 mrose ! 9: * pepsy ! 10: * ! 11: * Revision 7.1 90/01/11 18:35:57 mrose ! 12: * real-sync ! 13: * ! 14: * Revision 7.0 89/11/23 21:55:37 mrose ! 15: * Release 6.0 ! 16: * ! 17: */ ! 18: ! 19: /* ! 20: * NOTICE ! 21: * ! 22: * Acquisition, use, and distribution of this module and related ! 23: * materials are subject to the restrictions of a license agreement. ! 24: * Consult the Preface in the User's Manual for the full terms of ! 25: * this agreement. ! 26: * ! 27: */ ! 28: ! 29: ! 30: #ifndef _AcSAP_ ! 31: #include "acsap.h" /* definitions for AcS-USERs */ ! 32: #endif ! 33: ! 34: #ifndef _PSAP2_ ! 35: #include "psap2.h" /* definitions for PS-USERs */ ! 36: #endif ! 37: ! 38: /* */ ! 39: ! 40: #ifdef ACSE ! 41: ! 42: #define AC_ASN "acse pci version 1" ! 43: ! 44: #define acsapPsig(acb, sd) \ ! 45: { \ ! 46: if ((acb = findacblk (sd)) == NULL) { \ ! 47: (void) sigiomask (smask); \ ! 48: return acsaplose (aci, ACS_PARAMETER, NULLCP, \ ! 49: "invalid association descriptor"); \ ! 50: } \ ! 51: if (!(acb -> acb_flags & ACB_CONN)) { \ ! 52: (void) sigiomask (smask); \ ! 53: return acsaplose (aci, ACS_OPERATION, NULLCP, \ ! 54: "assocation descriptor not connected"); \ ! 55: } \ ! 56: if (acb -> acb_flags & ACB_FINN) { \ ! 57: (void) sigiomask (smask); \ ! 58: return acsaplose (aci, ACS_OPERATION, NULLCP, \ ! 59: "association descriptor finishing"); \ ! 60: } \ ! 61: if (acb -> acb_flags & ACB_RELEASE) { \ ! 62: (void) sigiomask (smask); \ ! 63: return acsaplose (aci, ACS_OPERATION, NULLCP, \ ! 64: "release in progress"); \ ! 65: } \ ! 66: } ! 67: ! 68: #define acsapFsig(acb, sd) \ ! 69: { \ ! 70: if ((acb = findacblk (sd)) == NULL) {\ ! 71: (void) sigiomask (smask);\ ! 72: return acsaplose (aci, ACS_PARAMETER, NULLCP, \ ! 73: "invalid association descriptor"); \ ! 74: } \ ! 75: if (!(acb -> acb_flags & ACB_CONN)) { \ ! 76: (void) sigiomask (smask); \ ! 77: return acsaplose (aci, ACS_OPERATION, NULLCP, \ ! 78: "assocation descriptor not connected"); \ ! 79: } \ ! 80: if (!(acb -> acb_flags & ACB_FINN)) { \ ! 81: (void) sigiomask (smask); \ ! 82: return acsaplose (aci, ACS_OPERATION, NULLCP, \ ! 83: "association descriptor not finishing"); \ ! 84: } \ ! 85: if (acb -> acb_flags & ACB_RELEASE) { \ ! 86: (void) sigiomask (smask); \ ! 87: return acsaplose (aci, ACS_OPERATION, NULLCP, \ ! 88: "release in progress"); \ ! 89: } \ ! 90: } ! 91: ! 92: #define toomuchP(b,n,m,p) \ ! 93: { \ ! 94: if (b == NULL) \ ! 95: n = 0; \ ! 96: else \ ! 97: if (n > m) \ ! 98: return acsaplose (aci, ACS_PARAMETER, NULLCP, \ ! 99: "too many %s user data elements", p); \ ! 100: } ! 101: ! 102: #define missingP(p) \ ! 103: { \ ! 104: if (p == NULL) \ ! 105: return acsaplose (aci, ACS_PARAMETER, NULLCP, \ ! 106: "mandatory parameter \"%s\" missing", "p"); \ ! 107: } ! 108: ! 109: #ifndef lint ! 110: #ifndef __STDC__ ! 111: #define copyAcSAPdata(base,len,d) \ ! 112: { \ ! 113: register int i = len; \ ! 114: if ((d -> d/* */_cc = min (i, sizeof d -> d/* */_data)) > 0) \ ! 115: bcopy (base, d -> d/* */_data, d -> d/* */_cc); \ ! 116: } ! 117: #else ! 118: #define copyAcSAPdata(base,len,d) \ ! 119: { \ ! 120: register int i = len; \ ! 121: if ((d -> d##_cc = min (i, sizeof d -> d##_data)) > 0) \ ! 122: bcopy (base, d -> d##_data, d -> d##_cc); \ ! 123: } ! 124: #endif ! 125: #else ! 126: #define copyAcSAPdata(base,len,d) bcopy (base, (char *) d, len) ! 127: #endif ! 128: ! 129: ! 130: #define ACS_USER_BASE ACS_USER_NULL ! 131: #define ACS_PROV_BASE ACS_PROV_NULL ! 132: ! 133: ! 134: int acpktlose (), acsaplose (); ! 135: ! 136: /* */ ! 137: ! 138: int ps2acslose (); ! 139: ! 140: struct type_ACS_Association__information *info2apdu (); ! 141: int apdu2info (); ! 142: #endif ! 143: ! 144: /* */ ! 145: ! 146: struct assocblk { ! 147: struct assocblk *acb_forw; /* doubly-linked list */ ! 148: struct assocblk *acb_back; /* .. */ ! 149: ! 150: int acb_fd; /* session/presentation descriptor */ ! 151: ! 152: short acb_flags; /* our state */ ! 153: #define ACB_NULL 0x0000 ! 154: #define ACB_CONN 0x0001 /* connected */ ! 155: #define ACB_FINN 0x0002 /* other side wants to finish */ ! 156: #define ACB_INIT 0x0004 /* this side initiated the association */ ! 157: #define ACB_ASYN 0x0008 /* asynchronous */ ! 158: #define ACB_TURN 0x0010 /* we have the turn */ ! 159: #define ACB_TWA 0x0020 /* two-way alternate */ ! 160: #define ACB_ACT 0x0040 /* activity in progress */ ! 161: #define ACB_PLEASE 0x0080 /* RTS: RT-TURN-PLEASE received ! 162: ROS on Session: sent S-PLEASE-TOKENS */ ! 163: #define ACB_TIMER 0x0100 /* ACTIVITY discarded due to timing ! 164: constraint */ ! 165: #define ACB_ROS 0x0200 /* ROS started association */ ! 166: #define ACB_RTS 0x0400 /* RTS .. */ ! 167: #define ACB_ACS 0x0800 /* ACS .. */ ! 168: #define ACB_CLOSING 0x1000 /* waiting to close */ ! 169: #define ACB_FINISH 0x2000 /* .. */ ! 170: #define ACB_STICKY 0x4000 /* ROS using RTS (ugh!) */ ! 171: #define ACB_RELEASE 0x8000 /* release in progress */ ! 172: ! 173: struct SSAPref acb_connect; /* session connection reference */ ! 174: ! 175: int acb_requirements; /* session requirements */ ! 176: int acb_owned; /* session tokens we own */ ! 177: int acb_avail; /* session tokens available */ ! 178: int acb_settings; /* initial settings */ ! 179: int acb_ssdusize; /* largest atomic SSDU */ ! 180: ! 181: IFP acb_uabort; /* disconnect underlying service */ ! 182: ! 183: /* ACSE */ ! 184: int acb_sversion; /* session service version number */ ! 185: int acb_id; /* ACSE context id */ ! 186: OID acb_context; /* application context name */ ! 187: int acb_offset; /* offset to ACSE PCI */ ! 188: /* negative means at END */ ! 189: PE acb_retry; /* final acpkt */ ! 190: ! 191: /* RTSE */ ! 192: int acb_rtsid; /* RTSE context id */ ! 193: int acb_ckpoint; /* checkpoint size */ ! 194: int acb_window; /* window size */ ! 195: int acb_actno; /* sending activity serial number */ ! 196: long acb_ssn; /* highest serial number sent */ ! 197: int acb_ack; /* highest serial number acknowledged */ ! 198: ! 199: IFP acb_pturnrequest; /* RT-TURN-PLEASE.REQUEST */ ! 200: IFP acb_gturnrequest; /* RT-TURN-GIVE.REQUEST */ ! 201: IFP acb_transferequest; /* RT-TRANSER.REQUEST */ ! 202: IFP acb_rtwaitrequest; /* RT-WAIT.REQUEST */ ! 203: IFP acb_rtsetindications;/* define vectors for INDICATION events */ ! 204: IFP acb_rtselectmask; /* map association descriptors for select () */ ! 205: IFP acb_rtpktlose; /* protocol-level abort */ ! 206: ! 207: int acb_priority; /* priority of please turn */ ! 208: struct AcSAPfinish acb_finish; ! 209: ! 210: char *acb_realbase; /* APDU in transit */ ! 211: char *acb_base; /* .. */ ! 212: int acb_len; /* .. */ ! 213: ! 214: IFP acb_uptrans; /* upcall for up-transfer */ ! 215: IFP acb_downtrans; /* upcall for down-transfer */ ! 216: ! 217: IFP acb_rtsindication; /* rts event handler */ ! 218: ! 219: /* ROSE */ ! 220: int acb_rosid; /* ROSE (SASE) context id */ ! 221: IFP acb_putosdu; /* osdu2acb */ ! 222: IFP acb_rowaitrequest; /* RO-WAIT.REQUEST */ ! 223: IFP acb_ready; /* get HDX permission */ ! 224: IFP acb_rosetindications;/* define vectors for INDICATION events */ ! 225: IFP acb_roselectmask; /* map association descriptors for select () */ ! 226: IFP acb_ropktlose; /* protocol-level abort */ ! 227: PE (*acb_getosdu) (); /* for users of THORN... */ ! 228: ! 229: PE acb_apdu; /* APDU buffered */ ! 230: ! 231: IFP acb_rosindication; /* ros event handler */ ! 232: }; ! 233: #define NULLACB ((struct assocblk *) 0) ! 234: ! 235: #define FREEACB(acb) \ ! 236: { \ ! 237: if ((acb) -> acb_realbase) \ ! 238: free ((acb) -> acb_realbase); \ ! 239: else \ ! 240: if ((acb) -> acb_base) \ ! 241: free ((acb) -> acb_base); \ ! 242: (acb) -> acb_realbase = (acb) -> acb_base = NULL, (acb) -> acb_len = 0; \ ! 243: } ! 244: ! 245: ! 246: int freeacblk (); ! 247: struct assocblk *newacblk (), *findacblk (); ! 248: ! 249: /* */ ! 250: ! 251: #ifndef ACSE ! 252: ! 253: /* PConnect Types */ ! 254: #define PCONN_DTS 0 /* Data Transfer Syntax */ ! 255: #define PCONN_DATA 1 /* User Data */ ! 256: #define PCONN_DATA_CK 0 /* Checkpoint Size */ ! 257: #define PCONN_CK_DFLT 0 ! 258: #define PCONN_DATA_WD 1 /* Window Size */ ! 259: #define PCONN_WD_DFLT 3 ! 260: #define PCONN_DATA_DM 2 /* Dialogue-mode */ ! 261: #define PCONN_DM_MONO 0 /* monologue */ ! 262: #define PCONN_DM_TWA 1 /* two-way alternate */ ! 263: #define PCONN_DM_DFLT PCONN_DM_MONO ! 264: #define PCONN_DATA_CN 3 /* Connection Data */ ! 265: #define PCONN_DATA_AP 4 /* Application Protocol */ ! 266: #define PCONN_AP_DFLT 1 ! 267: ! 268: ! 269: /* PAccept Types */ ! 270: #define PACC_DTS 0 /* Data Transfer Syntax */ ! 271: #define PACC_DATA 1 /* User Data */ ! 272: #define PACC_DATA_CK 0 /* Checkpoint Size */ ! 273: #define PACC_CK_DFLT 0 ! 274: #define PACC_DATA_WD 1 /* Window Size */ ! 275: #define PACC_WD_DFLT 3 ! 276: #define PACC_DATA_CN 2 /* Connection Data */ ! 277: ! 278: ! 279: /* PRefuse Types */ ! 280: #define PREF_REASON 0 /* Refuse Reason */ ! 281: ! 282: ! 283: /* Data Transfer Syntax Types */ ! 284: #define DTS_SYNTAX 0 /* IMPLICIT INTEGER */ ! 285: #define SYN_X409 0 /* x.409 */ ! 286: ! 287: ! 288: /* Connection Data Types */ ! 289: #define CN_OPEN 0 /* Open */ ! 290: #define CN_RECOVER 1 /* Recover */ ! 291: ! 292: ! 293: /* Refuse codes */ ! 294: #define REFUSE_BUSY 0 /* Busy */ ! 295: #define REFUSE_RECOVER 1 /* Cannot recover */ ! 296: #define REFUSE_VALIDATE 2 /* Validation failure */ ! 297: #define REFUSE_MODE 3 /* Unacceptable dialogue mode */ ! 298: ! 299: ! 300: /* Abort codes */ ! 301: #define ABORT_LSP 0 /* Local system problem */ ! 302: #define ABORT_INV 1 /* Invalid parameter */ ! 303: #define ABORT_ACT 2 /* Unrecognized activity */ ! 304: #define ABORT_TMP 3 /* Temporary problem */ ! 305: #define ABORT_PROTO 4 /* Protocol error */ ! 306: #define ABORT_PERM 5 /* Permanent problem */ ! 307: #define ABORT_USER 6 /* User abort */ ! 308: #define ABORT_TRANS 7 /* Transfer completed */ ! 309: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.