|
|
1.1 root 1: /* isoentity.c - application entity titles -- sequential lookup utilities */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/acsap/RCS/isoentity.c,v 7.0 89/11/23 21:22:13 mrose Rel $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/acsap/RCS/isoentity.c,v 7.0 89/11/23 21:22:13 mrose Rel $
9: *
10: *
11: * $Log: isoentity.c,v $
12: * Revision 7.0 89/11/23 21:22:13 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 <ctype.h>
31: #include <stdio.h>
32: #include "psap.h"
33: #include "isoaddrs.h"
34: #include "tailor.h"
35:
36: /* DATA */
37:
38: static char *isoentities = "isoentities";
39:
40: static FILE *servf = NULL;
41: static int stayopen = 0;
42:
43: static int mask;
44: static int vecp;
45: static char buffer[BUFSIZ + 1];
46: static char *vec[NVEC + NSLACK + 1];
47:
48: static struct isoentity ies;
49:
50: /* */
51:
52: int setisoentity (f)
53: int f;
54: {
55: if (servf == NULL)
56: servf = fopen (isodefile (isoentities, 0), "r");
57: else
58: rewind (servf);
59: stayopen |= f;
60:
61: return (servf != NULL);
62: }
63:
64:
65: int endisoentity () {
66: if (servf && !stayopen) {
67: (void) fclose (servf);
68: servf = NULL;
69: }
70:
71: return 1;
72: }
73:
74: /* */
75:
76: struct isoentity *getisoentity () {
77: static char descriptor[BUFSIZ];
78:
79: if (servf == NULL
80: && (servf = fopen (isodefile (isoentities, 0), "r")) == NULL)
81: return NULL;
82:
83: while (_startisoentity (descriptor) == OK)
84: if (_stopisoentity (descriptor, (struct isoentity *) NULL) == OK)
85: return (&ies);
86:
87: return NULL;
88: }
89:
90: /* */
91:
92: int _startisoentity (descriptor)
93: char *descriptor;
94: {
95: register char *cp,
96: *dp;
97: char *ep;
98: register struct isoentity *ie = &ies;
99:
100: bzero ((char *) ie, sizeof *ie);
101:
102: ep = (dp = buffer) + sizeof buffer;
103: while (fgets (dp, ep - dp, servf) != NULL) {
104: if (*buffer == '#')
105: continue;
106: if (cp = index (buffer, '\n')) {
107: *cp-- = NULL;
108: if (*cp == '\\') {
109: if ((dp = cp) + 1 >= ep)
110: dp = buffer;
111: continue;
112: }
113: }
114:
115: switch (vecp = str2vecX (buffer, vec, 5 + 1, &mask, NULL)) {
116: case 3: /* no address */
117: case 4: /* new-style */
118: break;
119:
120: default:
121: continue;
122: }
123:
124: (void) sprintf (descriptor, "%s-%s", vec[0], vec[1]);
125:
126: return OK;
127: }
128:
129: return DONE;
130: }
131:
132: /* */
133:
134: int _stopisoentity (descriptor, iep)
135: char *descriptor;
136: struct isoentity *iep;
137: {
138: register int i;
139: register struct isoentity *ie = &ies;
140: OID oid = &ie -> ie_identifier;
141: struct PSAPaddr *pa = &ie -> ie_addr;
142: struct PSAPaddr *pz;
143: static unsigned int elements[NELEM + 1];
144:
145: if (strcmp (vec[2], "NULL") == 0)
146: elements[i = 0] = 0;
147: else
148: if ((i = str2elem (vec[2], elements)) <= 1)
149: return NOTOK;
150: oid -> oid_elements = elements;
151: oid -> oid_nelem = i;
152: ie -> ie_descriptor = descriptor;
153:
154: switch (vecp) {
155: case 3: /* no address */
156: break;
157:
158: case 4: /* new-style */
159: if (pz = str2paddr (vec[3]))
160: *pa = *pz; /* struct copy */
161: break;
162: }
163:
164: if (iep)
165: *iep = *ie; /* struct copy */
166:
167: return OK;
168: }
169:
170: /* */
171:
172: _printent (ie)
173: register struct isoentity *ie;
174: {
175: LLOG (addr_log, LLOG_DEBUG,
176: ("Entity: %s (%s)", ie -> ie_descriptor,
177: oid2ode (&ie -> ie_identifier)));
178:
179: (void) ll_printf (addr_log, "Address: %s\n",
180: paddr2str (&ie -> ie_addr, NULLNA));
181:
182: (void) ll_printf (addr_log, "///////\n");
183:
184: (void) ll_sync (addr_log);
185: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.