|
|
1.1 root 1: /* ode2oid.c - object descriptor to object identifier */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/psap/RCS/ode2oid.c,v 7.2 90/07/09 14:43:45 mrose Exp $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/psap/RCS/ode2oid.c,v 7.2 90/07/09 14:43:45 mrose Exp $
9: *
10: *
11: * $Log: ode2oid.c,v $
12: * Revision 7.2 90/07/09 14:43:45 mrose
13: * sync
14: *
15: * Revision 1.1.1.2 90/06/07 08:03:26 isode
16: * ISODE 6.1 beta
17: *
18: * Revision 7.0 89/11/23 22:12:48 mrose
19: * Release 6.0
20: *
21: */
22:
23: /*
24: * NOTICE
25: *
26: * Acquisition, use, and distribution of this module and related
27: * materials are subject to the restrictions of a license agreement.
28: * Consult the Preface in the User's Manual for the full terms of
29: * this agreement.
30: *
31: */
32:
33:
34: /* LINTLIBRARY */
35:
36: #include <stdio.h>
37: #include "psap.h"
38: #include "ppkt.h"
39:
40: /* work around define collisions */
41: #undef missingP
42: #undef pylose
43: #include "rtpkt.h"
44:
45: /* work around type clashes */
46: #undef missingP
47: #undef pylose
48: #undef toomuchP
49: #define ACSE
50: #define assocblk assocblkxxx
51: #define newacblk newacblkxxx
52: #define findacblk findacblkxxx
53: #include "acpkt.h"
54:
55: /* */
56: #define ODECACHESIZE 10
57: static struct la_cache {
58: char *descriptor;
59: int ref;
60: OID oid;
61: } Cache[ODECACHESIZE];
62:
63: static void preloadcache (str)
64: char *str;
65: {
66: struct la_cache *cp = &Cache[0];
67: register struct isobject *io;
68:
69: (void) setisobject (0);
70: while (io = getisobject ()) {
71: if (strcmp (str, io -> io_descriptor) == 0 ||
72: strcmp (DFLT_ASN, io -> io_descriptor) == 0 ||
73: strcmp (AC_ASN, io -> io_descriptor) == 0 ||
74: strcmp (BER, io -> io_descriptor) == 0 ||
75: strcmp (RT_ASN, io -> io_descriptor) == 0) {
76: if ((cp -> oid = oid_cpy (&io -> io_identity)) == NULLOID ||
77: (cp -> descriptor = malloc ((unsigned) (strlen (io -> io_descriptor) + 1)))
78: == NULLCP) {
79: if (cp -> oid) {
80: oid_free (cp -> oid);
81: cp -> oid = NULLOID;
82: }
83: }
84: else {
85: (void) strcpy (cp -> descriptor, io -> io_descriptor);
86: cp -> ref = 1;
87: cp ++;
88: }
89: }
90: }
91: (void) endisobject ();
92: }
93:
94: OID ode2oid (descriptor)
95: char *descriptor;
96: {
97: register struct isobject *io;
98: int i, least;
99: struct la_cache *cp, *cpn;
100: static char firsttime = 0;
101:
102: if (firsttime == 0) {
103: preloadcache (descriptor);
104: firsttime = 1;
105: }
106:
107: least = Cache[0].ref;
108: for (cpn = cp = &Cache[0], i = 0; i < ODECACHESIZE; i++, cp++) {
109: if (cp -> ref < least) {
110: least = cp -> ref;
111: cpn = cp;
112: }
113: if (cp -> ref <= 0)
114: continue;
115: if (strcmp (descriptor, cp -> descriptor) == 0) {
116: cp -> ref ++;
117: return cp -> oid;
118: }
119: }
120:
121: if ((io = getisobjectbyname (descriptor)) == NULL)
122: return NULLOID;
123:
124: if (cpn -> oid)
125: oid_free (cpn -> oid);
126: if (cpn -> descriptor)
127: free (cpn -> descriptor);
128:
129: cpn -> ref = 1;
130: if ((cpn -> oid = oid_cpy (&io -> io_identity)) == NULLOID ||
131: (cpn -> descriptor = malloc ((unsigned) (strlen (descriptor) + 1))) == NULLCP) {
132: if (cpn -> oid) {
133: oid_free (cpn -> oid);
134: cpn -> oid = NULLOID;
135: }
136: cpn -> ref = 0;
137: }
138: else
139: (void) strcpy (cpn -> descriptor, descriptor);
140:
141: return (&io -> io_identity);
142: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.