|
|
1.1 root 1: \File{ryresp\-assoc.c},{22:20},{Jul 8 1989}
2: \L{\LB{\C{}\/* ryresponder.c \- generic idempotent responder *\/\CE{}}}
3: \L{\LB{}}
4: \L{\LB{\K{\#include} \<stdio.h\>}}
5: \L{\LB{\K{\#include} \<setjmp.h\>}}
6: \L{\LB{\K{\#include} \S{}\"ryresponder.h\"\SE{}}}
7: \L{\LB{\K{\#include} \<isode\/tsap.h\> \C{}\/* for listening *\/\CE{}}}
8: \L{\LB{}}
9: \L{\LB{\C{}\/* DATA *\/\CE{}}}
10: \L{\LB{}}
11: \L{\LB{\K{int} debug = 0;}}
12: \L{\LB{}}
13: \L{\LB{\K{static} LLog \_pgm\_log = \{}}
14: \L{\LB{ \S{}\"responder.log\"\SE{}, NULLCP, NULLCP,}}
15: \L{\LB{ LLOG\_FATAL \| LLOG\_EXCEPTIONS \| LLOG\_NOTICE, LLOG\_FATAL, \-1,}}
16: \L{\LB{ LLOGCLS \| LLOGCRT \| LLOGZER, NOTOK}}
17: \L{\LB{\};}}
18: \L{\LB{LLog *pgm\_log = \&\_pgm\_log;}}
19: \L{\LB{}}
20: \L{\LB{\K{static} \K{char} *myname = \S{}\"ryresponder\"\SE{};}}
21: \L{\LB{}}
22: \L{\LB{}}
23: \L{\LB{\K{static} jmp\_buf toplevel;}}
24: \L{\LB{}}
25: \L{\LB{}}
26: \L{\LB{\K{static} IFP startfnx;}}
27: \L{\LB{\K{static} IFP stopfnx;}}
28: \L{\LB{}}
29: \L{\LB{\K{int} ros\_init (), ros\_work (), ros\_indication (), ros\_lose ();}}
30: \L{\LB{}}
31: \L{\LB{}}
32: \L{\LB{\K{extern} \K{int} errno;}}
33: \L{\LB{}}
34: \L{\LB{\C{}\/* RESPONDER *\/\CE{}}}
35: \L{\LB{}}
36: \L{\LB{\K{int}}\Tab{8}{ryresponder (argc, argv, host, myservice, dispatches, ops, start, stop)}}
37: \L{\LB{\K{int} argc;}}
38: \L{\LB{\K{char} **argv,}}
39: \L{\LB{ *host,}}
40: \L{\LB{ *myservice;}}
41: \L{\LB{\K{struct} dispatch *dispatches;}}
42: \L{\LB{\K{struct} RyOperation *ops;}}
43: \L{\LB{IFP start,}}
44: \L{\LB{}\Tab{8}{stop;}}
45: \L{\LB{\{}}
46: \L{\LB{ \K{register} \K{struct} dispatch *ds;}}
47: \L{\LB{ AEI aei;}}
48: \L{\LB{ \K{struct} TSAPdisconnect tds;}}
49: \L{\LB{ \K{struct} TSAPdisconnect *td = \&tds;}}
50: \L{\LB{ \K{struct} RoSAPindication rois;}}
51: \L{\LB{ \K{register} \K{struct} RoSAPindication *roi = \&rois;}}
52: \L{\LB{ \K{register} \K{struct} RoSAPpreject *rop = \&roi \-\> roi\_preject;}}
53: \L{\LB{}}
54: \L{\LB{ \K{if} (myname = rindex (argv[0], \S{}\'\/\'\SE{}))}}
55: \L{\LB{}\Tab{8}{myname++;}}
56: \L{\LB{ \K{if} (myname == NULL \|\| *myname == NULL)}}
57: \L{\LB{}\Tab{8}{myname = argv[0];}}
58: \L{\LB{}}
59: \L{\LB{ isodetailor (myname, 0);}}
60: \L{\LB{ \K{if} (debug = isatty (fileno (stderr)))}}
61: \L{\LB{}\Tab{8}{ll\_dbinit (pgm\_log, myname);}}
62: \L{\LB{ \K{else} \{}}
63: \L{\LB{}\Tab{8}{\K{static} \K{char} myfile[BUFSIZ];}}
64: \L{\LB{}}
65: \L{\LB{}\Tab{8}{(\K{void}) sprintf (myfile, \S{}\"\%s.log\"\SE{},}}
66: \L{\LB{}\Tab{24}{(strncmp (myname, \S{}\"ros.\"\SE{}, 4)}\Tab{72}{}}
67: \L{\LB{}\Tab{32}{ \&\& strncmp (myname, \S{}\"lpp.\"\SE{}, 4))}}
68: \L{\LB{}\Tab{32}{\|\| myname[4] == NULL}}
69: \L{\LB{}\Tab{24}{ ? myname : myname + 4);}}
70: \L{\LB{}\Tab{8}{pgm\_log \-\> ll\_file = myfile;}}
71: \L{\LB{}\Tab{8}{ll\_hdinit (pgm\_log, myname);}}
72: \L{\LB{ \}}}
73: \L{\LB{}}
74: \L{\LB{ advise (LLOG\_NOTICE, NULLCP, \S{}\"starting\"\SE{});}}
75: \L{\LB{}}
76: \L{\LB{ \K{if} ((aei = str2aei (host, myservice)) == NULLAEI)}}
77: \L{\LB{}\Tab{8}{adios (NULLCP, \S{}\"\%s\-\%s: unknown application\-entity\"\SE{},}}
78: \L{\LB{}\Tab{16}{host, myservice);}}
79: \L{\LB{}}
80: \L{\LB{ \K{for} (ds = dispatches; ds \-\> ds\_name; ds++)}}
81: \L{\LB{}\Tab{8}{\K{if} (RyDispatch (NOTOK, ops, ds \-\> ds\_operation, ds \-\> ds\_vector, roi)}}
82: \L{\LB{}\Tab{16}{== NOTOK)}}
83: \L{\LB{}\Tab{8}{ ros\_adios (rop, ds \-\> ds\_name);}}
84: \L{\LB{}}
85: \L{\LB{ startfnx = start;}}
86: \L{\LB{ stopfnx = stop;}}
87: \L{\LB{}}
88: \L{\LB{ \K{if} (isodeserver (argc, argv, aei, ros\_init, ros\_work, ros\_lose, td)}}
89: \L{\LB{}\Tab{8}{ == NOTOK) \{}}
90: \L{\LB{}\Tab{8}{\K{if} (td \-\> td\_cc \> 0)}}
91: \L{\LB{}\Tab{8}{ adios (NULLCP, \S{}\"isodeserver: [\%s] \%*.*s\"\SE{},}}
92: \L{\LB{}\Tab{16}{ TErrString (td \-\> td\_reason),}}
93: \L{\LB{}\Tab{16}{ td \-\> td\_cc, td \-\> td\_cc, td \-\> td\_data);}}
94: \L{\LB{}\Tab{8}{\K{else}}}
95: \L{\LB{}\Tab{8}{ adios (NULLCP, \S{}\"isodeserver: [\%s]\"\SE{},}}
96: \L{\LB{}\Tab{16}{ TErrString (td \-\> td\_reason));}}
97: \L{\LB{ \}}}
98: \L{\LB{}}
99: \L{\LB{ \K{return} 0;}}
100: \L{\LB{\}}}
101: \L{\LB{}}
102: \L{\LB{}}
103: \L{\LB{\K{static} \K{int} ros\_init (vecp, vec)}}
104: \L{\LB{\K{int}}\Tab{8}{vecp;}}
105: \L{\LB{\K{char} **vec;}}
106: \L{\LB{\{}}
107: \L{\LB{ \K{int}}\Tab{8}{ reply,}}
108: \L{\LB{}\Tab{8}{ result,}}
109: \L{\LB{}\Tab{8}{ sd;}}
110: \L{\LB{ \K{struct} AcSAPstart acss;}}
111: \L{\LB{ \K{register} \K{struct} AcSAPstart *acs = \&acss;}}
112: \L{\LB{ \K{struct} AcSAPindication acis;}}
113: \L{\LB{ \K{register} \K{struct} AcSAPindication *aci = \&acis;}}
114: \L{\LB{ \K{register} \K{struct} AcSAPabort *aca = \&aci \-\> aci\_abort;}}
115: \L{\LB{ \K{register} \K{struct} PSAPstart *ps = \&acs \-\> acs\_start;}}
116: \L{\LB{ \K{struct} RoSAPindication rois;}}
117: \L{\LB{ \K{register} \K{struct} RoSAPindication *roi = \&rois;}}
118: \L{\LB{ \K{register} \K{struct} RoSAPpreject *rop = \&roi \-\> roi\_preject;}}
119: \L{\LB{}}
120: \L{\LB{ \K{if} (AcInit (vecp, vec, acs, aci) == NOTOK) \{}}
121: \L{\LB{}\Tab{8}{acs\_advise (aca, \S{}\"initialization fails\"\SE{});}}
122: \L{\LB{}\Tab{8}{\K{return} NOTOK;}}
123: \L{\LB{ \}}}
124: \L{\LB{ advise (LLOG\_NOTICE, NULLCP,}}
125: \L{\LB{}\Tab{16}{\S{}\"A\-ASSOCIATE.INDICATION: \<\%d, \%s, \%s, \%s, \%d\>\"\SE{},}}
126: \L{\LB{}\Tab{16}{acs \-\> acs\_sd, oid2ode (acs \-\> acs\_context),}}
127: \L{\LB{}\Tab{16}{sprintaei (\&acs \-\> acs\_callingtitle),}}
128: \L{\LB{}\Tab{16}{sprintaei (\&acs \-\> acs\_calledtitle), acs \-\> acs\_ninfo);}}
129: \L{\LB{}}
130: \L{\LB{ sd = acs \-\> acs\_sd;}}
131: \L{\LB{}}
132: \L{\LB{ \K{for} (vec++; *vec; vec++)}}
133: \L{\LB{}\Tab{8}{advise (LLOG\_EXCEPTIONS, NULLCP, \S{}\"unknown argument \!\"\%s\!\"\"\SE{}, *vec);}}
134: \L{\LB{}}
135: \L{\LB{ reply = startfnx ? (*startfnx) (sd, acs) : ACS\_ACCEPT;}}
136: \L{\LB{}}
137: \L{\LB{ result = AcAssocResponse (sd, reply, reply != ACS\_ACCEPT}}
138: \L{\LB{}\Tab{24}{ ? ACS\_USER\_NOREASON : ACS\_USER\_NULL,}}
139: \L{\LB{}\Tab{16}{NULLOID, NULLAEI,}}
140: \L{\LB{}\Tab{16}{NULLPA, NULLPC, ps \-\> ps\_defctxresult,}}
141: \L{\LB{}\Tab{16}{ps \-\> ps\_prequirements, ps \-\> ps\_srequirements,}}
142: \L{\LB{}\Tab{16}{SERIAL\_NONE, ps \-\> ps\_settings, \&ps \-\> ps\_connect,}}
143: \L{\LB{}\Tab{16}{NULLPEP, 0, aci);}}
144: \L{\LB{}}
145: \L{\LB{ ACSFREE (acs);}}
146: \L{\LB{}}
147: \L{\LB{ \K{if} (result == NOTOK) \{}}
148: \L{\LB{}\Tab{8}{acs\_advise (aca, \S{}\"A\-ASSOCIATE.RESPONSE\"\SE{});}}
149: \L{\LB{}\Tab{8}{\K{return} NOTOK;}}
150: \L{\LB{ \}}}
151: \L{\LB{ \K{if} (reply != ACS\_ACCEPT)}}
152: \L{\LB{}\Tab{8}{\K{return} NOTOK;}}
153: \L{\LB{}}
154: \L{\LB{ \K{if} (RoSetService (sd, RoPService, roi) == NOTOK)}}
155: \L{\LB{}\Tab{8}{ros\_adios (rop, \S{}\"set RO\/PS fails\"\SE{});}}
156: \L{\LB{}}
157: \L{\LB{ \K{return} sd;}}
158: \L{\LB{\}}}
159: \L{\LB{}}
160: \L{\LB{}}
161: \L{\LB{\K{static} \K{int} ros\_work (fd)}}
162: \L{\LB{\K{int}}\Tab{8}{fd;}}
163: \L{\LB{\{}}
164: \L{\LB{ \K{int}}\Tab{8}{ result;}}
165: \L{\LB{ caddr\_t out;}}
166: \L{\LB{ \K{struct} AcSAPindication acis;}}
167: \L{\LB{ \K{struct} RoSAPindication rois;}}
168: \L{\LB{ \K{register} \K{struct} RoSAPindication *roi = \&rois;}}
169: \L{\LB{ \K{register} \K{struct} RoSAPpreject *rop = \&roi \-\> roi\_preject;}}
170: \L{\LB{}}
171: \L{\LB{ \K{switch} (setjmp (toplevel)) \{}}
172: \L{\LB{}\Tab{8}{\K{case} OK: }}
173: \L{\LB{}\Tab{8}{ \K{break};}}
174: \L{\LB{}}
175: \L{\LB{}\Tab{8}{\K{default}: }}
176: \L{\LB{}\Tab{8}{ \K{if} (stopfnx)}}
177: \L{\LB{}\Tab{16}{(*stopfnx) (fd, (\K{struct} AcSAPfinish *) 0);}}
178: \L{\LB{}\Tab{8}{\K{case} DONE:}}
179: \L{\LB{}\Tab{8}{ (\K{void}) AcUAbortRequest (fd, NULLPEP, 0, \&acis);}}
180: \L{\LB{}\Tab{8}{ (\K{void}) RyLose (fd, roi);}}
181: \L{\LB{}\Tab{8}{ \K{return} NOTOK;}}
182: \L{\LB{ \}}}
183: \L{\LB{}}
184: \L{\LB{ \K{switch} (result = RyWait (fd, NULLIP, \&out, OK, roi)) \{}}
185: \L{\LB{}\Tab{8}{\K{case} NOTOK: }}
186: \L{\LB{}\Tab{8}{ \K{if} (rop \-\> rop\_reason == ROS\_TIMER)}}
187: \L{\LB{}\Tab{16}{\K{break};}}
188: \L{\LB{}\Tab{8}{\K{case} OK: }}
189: \L{\LB{}\Tab{8}{\K{case} DONE: }}
190: \L{\LB{}\Tab{8}{ ros\_indication (fd, roi);}}
191: \L{\LB{}\Tab{8}{ \K{break};}}
192: \L{\LB{}}
193: \L{\LB{}\Tab{8}{\K{default}: }}
194: \L{\LB{}\Tab{8}{ adios (NULLCP, \S{}\"unknown return from RoWaitRequest=\%d\"\SE{}, result);}}
195: \L{\LB{ \}}}
196: \L{\LB{}}
197: \L{\LB{ \K{return} OK;}}
198: \L{\LB{\}}}
199: \L{\LB{}}
200: \L{\LB{}}
201: \L{\LB{\K{static} \K{int} ros\_indication (sd, roi)}}
202: \L{\LB{\K{int}}\Tab{8}{sd;}}
203: \L{\LB{\K{register} \K{struct} RoSAPindication *roi;}}
204: \L{\LB{\{}}
205: \L{\LB{ \K{int}}\Tab{8}{ reply,}}
206: \L{\LB{}\Tab{8}{ result;}}
207: \L{\LB{}}
208: \L{\LB{ \K{switch} (roi \-\> roi\_type) \{}}
209: \L{\LB{}\Tab{8}{\K{case} ROI\_INVOKE: }}
210: \L{\LB{}\Tab{8}{\K{case} ROI\_RESULT: }}
211: \L{\LB{}\Tab{8}{\K{case} ROI\_ERROR: }}
212: \L{\LB{}\Tab{8}{ adios (NULLCP, \S{}\"unexpected indication type=\%d\"\SE{}, roi \-\> roi\_type);}}
213: \L{\LB{}\Tab{8}{ \K{break};}}
214: \L{\LB{}}
215: \L{\LB{}\Tab{8}{\K{case} ROI\_UREJECT: }}
216: \L{\LB{}\Tab{8}{ \{}}
217: \L{\LB{}\Tab{16}{\K{register} \K{struct} RoSAPureject *rou = \&roi \-\> roi\_ureject;}}
218: \L{\LB{}}
219: \L{\LB{}\Tab{16}{\K{if} (rou \-\> rou\_noid)}}
220: \L{\LB{}\Tab{16}{ advise (LLOG\_EXCEPTIONS, NULLCP,}}
221: \L{\LB{}\Tab{24}{ \S{}\"RO\-REJECT\-U.INDICATION\/\%d: \%s\"\SE{},}}
222: \L{\LB{}\Tab{24}{ sd, RoErrString (rou \-\> rou\_reason));}}
223: \L{\LB{}\Tab{16}{\K{else}}}
224: \L{\LB{}\Tab{16}{ advise (LLOG\_EXCEPTIONS, NULLCP,}}
225: \L{\LB{}\Tab{24}{ \S{}\"RO\-REJECT\-U.INDICATION\/\%d: \%s (id=\%d)\"\SE{},}}
226: \L{\LB{}\Tab{24}{ sd, RoErrString (rou \-\> rou\_reason),}}
227: \L{\LB{}\Tab{24}{ rou \-\> rou\_id);}}
228: \L{\LB{}\Tab{8}{ \}}}
229: \L{\LB{}\Tab{8}{ \K{break};}}
230: \L{\LB{}}
231: \L{\LB{}\Tab{8}{\K{case} ROI\_PREJECT: }}
232: \L{\LB{}\Tab{8}{ \{}}
233: \L{\LB{}\Tab{16}{\K{register} \K{struct} RoSAPpreject *rop = \&roi \-\> roi\_preject;}}
234: \L{\LB{}}
235: \L{\LB{}\Tab{16}{\K{if} (ROS\_FATAL (rop \-\> rop\_reason))}}
236: \L{\LB{}\Tab{16}{ ros\_adios (rop, \S{}\"RO\-REJECT\-P.INDICATION\"\SE{});}}
237: \L{\LB{}\Tab{16}{ros\_advise (rop, \S{}\"RO\-REJECT\-P.INDICATION\"\SE{});}}
238: \L{\LB{}\Tab{8}{ \}}}
239: \L{\LB{}\Tab{8}{ \K{break};}}
240: \L{\LB{}}
241: \L{\LB{}\Tab{8}{\K{case} ROI\_FINISH: }}
242: \L{\LB{}\Tab{8}{ \{}}
243: \L{\LB{}\Tab{16}{\K{register} \K{struct} AcSAPfinish *acf = \&roi \-\> roi\_finish;}}
244: \L{\LB{}\Tab{16}{\K{struct} AcSAPindication acis;}}
245: \L{\LB{}\Tab{16}{\K{register} \K{struct} AcSAPabort *aca = \&acis.aci\_abort;}}
246: \L{\LB{}}
247: \L{\LB{}\Tab{16}{advise (LLOG\_NOTICE, NULLCP, \S{}\"A\-RELEASE.INDICATION\/\%d: \%d\"\SE{},}}
248: \L{\LB{}\Tab{24}{sd, acf \-\> acf\_reason);}}
249: \L{\LB{}}
250: \L{\LB{}\Tab{16}{reply = stopfnx ? (*stopfnx) (sd, acf) : ACS\_ACCEPT;}}
251: \L{\LB{}}
252: \L{\LB{}\Tab{16}{result = AcRelResponse (sd, reply, ACR\_NORMAL, NULLPEP,}}
253: \L{\LB{}\Tab{24}{ 0, \&acis);}}
254: \L{\LB{}}
255: \L{\LB{}\Tab{16}{ACFFREE (acf);}}
256: \L{\LB{}}
257: \L{\LB{}\Tab{16}{\K{if} (result == NOTOK)}}
258: \L{\LB{}\Tab{16}{ acs\_advise (aca, \S{}\"A\-RELEASE.RESPONSE\"\SE{});}}
259: \L{\LB{}\Tab{16}{\K{else}}}
260: \L{\LB{}\Tab{16}{ \K{if} (reply != ACS\_ACCEPT)}}
261: \L{\LB{}\Tab{24}{\K{break};}}
262: \L{\LB{}\Tab{16}{longjmp (toplevel, DONE);}}
263: \L{\LB{}\Tab{8}{ \}}}
264: \L{\LB{}\Tab{8}{\C{}\/* NOTREACHED *\/\CE{}}}
265: \L{\LB{}}
266: \L{\LB{}\Tab{8}{\K{default}: }}
267: \L{\LB{}\Tab{8}{ adios (NULLCP, \S{}\"unknown indication type=\%d\"\SE{}, roi \-\> roi\_type);}}
268: \L{\LB{ \}}}
269: \L{\LB{\}}}
270: \L{\LB{}}
271: \L{\LB{}}
272: \L{\LB{\K{static} \K{int} ros\_lose (td)}}
273: \L{\LB{\K{struct} TSAPdisconnect *td;}}
274: \L{\LB{\{}}
275: \L{\LB{ \K{if} (td \-\> td\_cc \> 0)}}
276: \L{\LB{}\Tab{8}{adios (NULLCP, \S{}\"TNetAccept: [\%s] \%*.*s\"\SE{},}}
277: \L{\LB{}\Tab{16}{TErrString (td \-\> td\_reason), td \-\> td\_cc, td \-\> td\_cc,}}
278: \L{\LB{}\Tab{16}{td \-\> td\_data);}}
279: \L{\LB{ \K{else}}}
280: \L{\LB{}\Tab{8}{adios (NULLCP, \S{}\"TNetAccept: [\%s]\"\SE{}, TErrString (td \-\> td\_reason));}}
281: \L{\LB{\}}}
282: \L{\LB{}}
283: \L{\LB{...}}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.