|
|
1.1 ! root 1: /* ppkt.h - include file for presentation providers (PS-PROVIDER) */ ! 2: ! 3: /* ! 4: * $Header: /f/osi/h/RCS/ppkt.h,v 7.0 89/11/23 21:55:51 mrose Rel $ ! 5: * ! 6: * RFC1085 (LPP) support contributed by the Wollongong Group, Inc. ! 7: * ! 8: * ! 9: * $Log: ppkt.h,v $ ! 10: * Revision 7.0 89/11/23 21:55:51 mrose ! 11: * Release 6.0 ! 12: * ! 13: */ ! 14: ! 15: /* ! 16: * NOTICE ! 17: * ! 18: * Acquisition, use, and distribution of this module and related ! 19: * materials are subject to the restrictions of a license agreement. ! 20: * Consult the Preface in the User's Manual for the full terms of ! 21: * this agreement. ! 22: * ! 23: */ ! 24: ! 25: ! 26: #ifndef _PSAP2_ ! 27: #include "psap2.h" /* definitions for PS-USERs */ ! 28: #endif ! 29: ! 30: #include "ssap.h" /* definitinos for SS-USERs */ ! 31: ! 32: /* */ ! 33: ! 34: #define psapPsig(pb, sd) \ ! 35: { \ ! 36: if ((pb = findpblk (sd)) == NULL) { \ ! 37: (void) sigiomask (smask); \ ! 38: return psaplose (pi, PC_PARAMETER, NULLCP, \ ! 39: "invalid presentation descriptor"); \ ! 40: } \ ! 41: if (!(pb -> pb_flags & PB_CONN)) { \ ! 42: (void) sigiomask (smask); \ ! 43: return psaplose (pi, PC_OPERATION, NULLCP, \ ! 44: "presentation descriptor not connected"); \ ! 45: } \ ! 46: if (pb -> pb_flags & PB_FINN) { \ ! 47: (void) sigiomask (smask); \ ! 48: return psaplose (pi, PC_OPERATION, NULLCP, \ ! 49: "presentation descriptor finishing"); \ ! 50: } \ ! 51: if (pb -> pb_flags & PB_RELEASE) { \ ! 52: (void) sigiomask (smask); \ ! 53: return psaplose (pi, PC_OPERATION, NULLCP, \ ! 54: "release in progress"); \ ! 55: } \ ! 56: } ! 57: ! 58: #define psapFsig(pb, sd) \ ! 59: { \ ! 60: if ((pb = findpblk (sd)) == NULL) { \ ! 61: (void) sigiomask (smask); \ ! 62: return psaplose (pi, PC_PARAMETER, NULLCP, \ ! 63: "invalid presentation descriptor"); \ ! 64: } \ ! 65: if (!(pb -> pb_flags & PB_CONN)) { \ ! 66: (void) sigiomask (smask); \ ! 67: return psaplose (pi, PC_OPERATION, NULLCP, \ ! 68: "presentation descriptor not connected"); \ ! 69: } \ ! 70: if (!(pb -> pb_flags & PB_FINN)) { \ ! 71: (void) sigiomask (smask); \ ! 72: return psaplose (pi, PC_OPERATION, NULLCP, \ ! 73: "presentation descriptor not finishing"); \ ! 74: } \ ! 75: if (pb -> pb_flags & PB_RELEASE) { \ ! 76: (void) sigiomask (smask); \ ! 77: return psaplose (pi, PC_OPERATION, NULLCP, \ ! 78: "release in progress"); \ ! 79: } \ ! 80: } ! 81: ! 82: #define toomuchP(b,n,m,p) \ ! 83: { \ ! 84: if (b == NULL) \ ! 85: n = 0; \ ! 86: else \ ! 87: if (n > m) \ ! 88: return psaplose (pi, PC_PARAMETER, NULLCP, \ ! 89: "too many %s user data elements", p); \ ! 90: } ! 91: ! 92: #define missingP(p) \ ! 93: { \ ! 94: if (p == NULL) \ ! 95: return psaplose (pi, PC_PARAMETER, NULLCP, \ ! 96: "mandatory parameter \"%s\" missing", "p"); \ ! 97: } ! 98: ! 99: #ifndef lint ! 100: #ifndef __STDC__ ! 101: #define copyPSAPdata(base,len,d) \ ! 102: { \ ! 103: register int i = len; \ ! 104: if ((d -> d/* */_cc = min (i, sizeof d -> d/* */_data)) > 0) \ ! 105: bcopy (base, d -> d/* */_data, d -> d/* */_cc); \ ! 106: } ! 107: #else ! 108: #define copyPSAPdata(base,len,d) \ ! 109: { \ ! 110: register int i = len; \ ! 111: if ((d -> d##_cc = min (i, sizeof d -> d##_data)) > 0) \ ! 112: bcopy (base, d -> d##_data, d -> d##_cc); \ ! 113: } ! 114: #endif ! 115: #else ! 116: #define copyPSAPdata(base,len,d) bcopy (base, (char *) d, len) ! 117: #endif ! 118: ! 119: ! 120: #define pylose(p) \ ! 121: ppktlose (pb, pi, PC_UNRECOGNIZED, (p), NULLCP, "%s", PY_pepy) ! 122: ! 123: ! 124: int ppktlose (), psaplose (); ! 125: ! 126: /* */ ! 127: ! 128: #define DFLT_ASN "iso asn.1 abstract syntax" ! 129: #define DFLT_ATN BER ! 130: ! 131: #define atn_is_ok(pb,atn) atn_is_ber ((pb), (atn)) ! 132: #define atn_is_ber(pb,atn) (!oid_cmp (pb -> pb_ber, atn)) ! 133: ! 134: ! 135: struct psapblk { ! 136: struct psapblk *pb_forw; /* doubly-linked list */ ! 137: struct psapblk *pb_back; /* .. */ ! 138: ! 139: int pb_fd; /* session descriptor */ ! 140: ! 141: short pb_flags; /* our state */ ! 142: #define PB_NULL 0x00 ! 143: #define PB_CONN 0x01 /* connected */ ! 144: #define PB_FINN 0x02 /* other side wants to finish */ ! 145: #define PB_ASYN 0x04 /* asynchronous */ ! 146: #define PB_DFLT 0x10 /* respond with default context result */ ! 147: #define PB_RELEASE 0x20 /* release in progress */ ! 148: ! 149: #ifndef LPP ! 150: char *pb_retry; /* initial/final ppkt */ ! 151: char *pb_realbase; ! 152: int pb_len; ! 153: #else ! 154: PE pb_retry; ! 155: PE pb_response; ! 156: ! 157: struct type_PS_SessionConnectionIdentifier *pb_reference; ! 158: ! 159: PS pb_stream; ! 160: ! 161: int pb_reliability; ! 162: ! 163: int pb_maxtries; ! 164: int pb_tries; ! 165: #endif ! 166: ! 167: int pb_ncontext; /* presentation context set */ ! 168: struct PSAPcontext pb_contexts[NPCTX]; ! 169: ! 170: OID pb_asn; /* default: abstract syntax name */ ! 171: OID pb_atn; /* .. abstract transfer name */ ! 172: int pb_result; /* response */ ! 173: ! 174: OID pb_ber; /* BER */ ! 175: ! 176: int pb_prequirements; /* presentation requirements */ ! 177: ! 178: int pb_srequirements; /* our session requirements */ ! 179: int pb_urequirements; /* user's session requirements */ ! 180: int pb_owned; /* session tokens we own */ ! 181: int pb_avail; /* session tokens available */ ! 182: int pb_ssdusize; /* largest atomic SSDU */ ! 183: ! 184: #ifdef LPP ! 185: struct NSAPaddr pb_initiating; /* initiator */ ! 186: #endif ! 187: struct PSAPaddr pb_responding; /* responder */ ! 188: ! 189: IFP pb_DataIndication; /* INDICATION handlers */ ! 190: IFP pb_TokenIndication; /* .. */ ! 191: IFP pb_SyncIndication; /* .. */ ! 192: IFP pb_ActivityIndication; /* .. */ ! 193: IFP pb_ReportIndication; /* .. */ ! 194: IFP pb_ReleaseIndication; /* .. */ ! 195: IFP pb_AbortIndication; /* .. */ ! 196: ! 197: #ifdef LPP ! 198: IFP pb_retryfnx; ! 199: IFP pb_closefnx; ! 200: IFP pb_selectfnx; ! 201: IFP pb_checkfnx; ! 202: #endif ! 203: }; ! 204: #define NULLPB ((struct psapblk *) 0) ! 205: ! 206: int freepblk (); ! 207: struct psapblk *newpblk (), *findpblk (); ! 208: ! 209: #ifndef LPP ! 210: #define PC_PROV_BASE PC_NOTSPECIFIED ! 211: #define PC_ABORT_BASE \ ! 212: (PC_UNRECOGNIZED - int_PS_Abort__reason_unrecognized__ppdu) ! 213: #define PC_REASON_BASE \ ! 214: (PC_ABSTRACT - int_PS_provider__reason_abstract__syntax__not__supported) ! 215: ! 216: ! 217: struct type_PS_User__data *info2ppdu (); ! 218: int ppdu2info (); ! 219: ! 220: int info2ssdu (), ssdu2info (), qbuf2info (); ! 221: ! 222: struct qbuf *info2qb (); ! 223: int qb2info (); ! 224: ! 225: struct type_PS_Identifier__list *silly_list (); ! 226: ! 227: int ss2pslose (), ss2psabort (); ! 228: ! 229: ! 230: struct pair { ! 231: int p_mask; ! 232: int p_bitno; ! 233: }; ! 234: ! 235: extern struct pair preq_pairs[], sreq_pairs[]; ! 236: #endif ! 237: ! 238: /* */ ! 239: ! 240: #define REASON_BASE PC_NOTSPECIFIED ! 241: ! 242: #ifndef LPP ! 243: #define PPDU_NONE (-1) ! 244: #define PPDU_CP 0 ! 245: #define PPDU_CPA 1 ! 246: #define PPDU_CPR 2 ! 247: #define PPDU_ARU 3 ! 248: #define PPDU_ARP 4 ! 249: #define PPDU_TD 7 ! 250: #define PPDU_RS 12 ! 251: #define PPDU_RSA 13 ! 252: #else ! 253: #define PR_KERNEL 0x0000 /* kernel (yuk) */ ! 254: ! 255: #define NPCTX_PS 2 /* maximum number of contexts */ ! 256: #define NPDATA_PS 1 /* maximum number of PDVs in a request */ ! 257: #define PCI_ROSE 1 /* PCI for SASE using ROSE */ ! 258: #define PCI_ACSE 3 /* PCI for ACSE */ ! 259: ! 260: #define PT_TCP 'T' /* TCP providing backing */ ! 261: #define PT_UDP 'U' /* UDP providing backing */ ! 262: ! 263: #define NULLRF ((struct type_PS_SessionConnectionIdentifier *) 0) ! 264: ! 265: ! 266: #define pslose(pi,reason) \ ! 267: (reason != PS_ERR_NONE && reason != PS_ERR_IO \ ! 268: ? psaplose ((pi), PC_CONGEST, NULLCP, "%s", ps_error (reason)) \ ! 269: : psaplose ((pi), PC_SESSION, NULLCP, NULLCP)) ! 270: ! 271: ! 272: int pdu2sel (), refcmp (); ! 273: struct SSAPref *pdu2ref (); ! 274: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.