|
|
1.1 root 1: /* acsapblock.c - manage association blocks */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/acsap/RCS/acsapblock.c,v 7.0 89/11/23 21:21:46 mrose Rel $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/acsap/RCS/acsapblock.c,v 7.0 89/11/23 21:21:46 mrose Rel $
9: *
10: *
11: * $Log: acsapblock.c,v $
12: * Revision 7.0 89/11/23 21:21:46 mrose
13: * Release 6.0
14: *
15: */
16:
17: /*
18: * NOTICE
19: *
20: * Acquisition, use, and distribution of this module and related
21: * materials are subject to the restrictions of a license agreement.
22: * Consult the Preface in the User's Manual for the full terms of
23: * this agreement.
24: *
25: */
26:
27:
28: /* LINTLIBRARY */
29:
30: #include <stdio.h>
31: #include "acpkt.h"
32:
33: /* DATA */
34:
35: static int once_only = 0;
36: static struct assocblk assocque;
37: static struct assocblk *ACHead = &assocque;
38:
39: /* ASSOCIATION BLOCKS */
40:
41: struct assocblk *newacblk () {
42: register struct assocblk *acb;
43:
44: acb = (struct assocblk *) calloc (1, sizeof *acb);
45: if (acb == NULL)
46: return NULL;
47:
48: acb -> acb_fd = NOTOK;
49:
50: if (once_only == 0) {
51: ACHead -> acb_forw = ACHead -> acb_back = ACHead;
52: once_only++;
53: }
54:
55: insque (acb, ACHead -> acb_back);
56:
57: return acb;
58: }
59:
60: /* */
61:
62: freeacblk (acb)
63: register struct assocblk *acb;
64: {
65: if (acb == NULL)
66: return;
67:
68: if (acb -> acb_flags & ACB_STICKY) {
69: acb -> acb_flags &= ~ACB_STICKY;
70: return;
71: }
72:
73: if (acb -> acb_fd != NOTOK && acb -> acb_uabort)
74: if (acb -> acb_flags & ACB_ACS) {
75: if (acb -> acb_flags & ACB_RTS) {/* recurse */
76: struct AcSAPindication acis;
77:
78: (void) (*acb -> acb_uabort) (acb -> acb_fd, NULLPEP, 0, &acis);
79: return;
80: }
81: else {
82: struct PSAPindication pis;
83:
84: (void) (*acb -> acb_uabort) (acb -> acb_fd, NULLPEP, 0, &pis);
85: }
86: }
87: else {
88: struct SSAPindication sis;
89:
90: (void) (*acb -> acb_uabort) (acb -> acb_fd, NULLCP, 0, &sis);
91: }
92:
93: if (acb -> acb_flags & ACB_FINISH)
94: ACFFREE (&acb -> acb_finish);
95:
96: if (acb -> acb_context)
97: oid_free (acb -> acb_context);
98: if (acb -> acb_retry)
99: pe_free (acb -> acb_retry);
100:
101: FREEACB (acb);
102:
103: if (acb -> acb_apdu)
104: pe_free (acb -> acb_apdu);
105:
106: remque (acb);
107:
108: free ((char *) acb);
109: }
110:
111: /* */
112:
113: struct assocblk *findacblk (sd)
114: register int sd;
115: {
116: register struct assocblk *acb;
117:
118: if (once_only == 0)
119: return NULL;
120:
121: for (acb = ACHead -> acb_forw; acb != ACHead; acb = acb -> acb_forw)
122: if (acb -> acb_fd == sd)
123: return acb;
124:
125: return NULL;
126: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.