|
|
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.