|
|
1.1 root 1: /* ronotunbind1.c - RONOT: Maps ABSTRACT-UNBIND onto A-RELEASE.REQUEST */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/ronot/RCS/ronotunbind1.c,v 7.1 90/07/26 14:34:01 mrose Exp $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/ronot/RCS/ronotunbind1.c,v 7.1 90/07/26 14:34:01 mrose Exp $
9: *
10: *
11: * $Log: ronotunbind1.c,v $
12: * Revision 7.1 90/07/26 14:34:01 mrose
13: * template
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 "tailor.h"
31: #include "logger.h"
32: #include "ronot.h"
33: #include "RONOT-types.h"
34:
35:
36: /* RO-UNBIND.REQUEST */
37:
38: /* ARGSUSED */
39:
40: int RoUnBindRequest (sd, unbindargpe, secs, acr, rni)
41: int sd;
42: PE unbindargpe;
43: int secs;
44: struct AcSAPrelease * acr;
45: struct RoNOTindication * rni;
46: {
47: int result;
48: PE user_data;
49: PE * user_data_p = &(user_data);
50: int ndata;
51: struct AcSAPindication aci_s;
52: struct AcSAPindication * aci = &aci_s;
53: struct AcSAPabort * aca = &(aci->aci_abort);
54:
55:
56: if (unbindargpe != NULLPE)
57: {
58: if (encode_RONOT_UnBindArgumentValue (user_data_p, 1, 0, NULLCP, unbindargpe) == NOTOK)
59: {
60: LLOG (rosap_log, LLOG_EXCEPTIONS, ("RoUnbindRequest: encode_RONOT_UnBindArgumentValue failed"));
61: return (ronotlose (rni, RBI_ENC_UNBIND_ARG, NULLCP, NULLCP));
62: }
63: (*user_data_p)->pe_context = unbindargpe->pe_context;
64: ndata = 1;
65: }
66: else
67: {
68: (*user_data_p) = NULLPE;
69: ndata = 0;
70: }
71:
72: result = AcRelRequest (sd, ACF_NORMAL, user_data_p, ndata, secs, acr, aci);
73:
74: if ((*user_data_p) != NULLPE)
75: {
76: pe_free ((*user_data_p));
77: }
78:
79: if (result == NOTOK)
80: {
81: if (aci->aci_abort.aca_reason == ACS_TIMER)
82: {
83: /* ADT: Watch this !! */
84: /* more work needed !!! */
85: ACAFREE (aca);
86: return (DONE);
87: }
88: else
89: {
90: LLOG (rosap_log, LLOG_EXCEPTIONS, ("RoUnbindRequest: AcRelRequest failed"));
91: (void) acs2ronotlose (rni, "RO-UNBIND.REQUEST", aca);
92: ACAFREE (aca);
93: return (NOTOK);
94: }
95: }
96: else
97: {
98: if (ParseRoUnBindResponse (acr, rni) != OK)
99: {
100: LLOG (rosap_log, LLOG_EXCEPTIONS, ("RoUnbindRequest: ParseRoUnBindResponse failed"));
101: ACRFREE (acr);
102: return (NOTOK);
103: }
104: }
105:
106: return (result);
107: }
108:
109: /* RO-UNBIND.RETRY */
110:
111: /* ARGSUSED */
112:
113: int RoUnBindRetry (sd, secs, acr, rni)
114: int sd;
115: int secs;
116: struct AcSAPrelease * acr;
117: struct RoNOTindication * rni;
118: {
119: int result;
120: struct AcSAPindication aci_s;
121: struct AcSAPindication * aci = &(aci_s);
122: struct AcSAPabort * aca = &(aci->aci_abort);
123:
124: result = AcRelRetryRequest (sd, secs, acr, aci);
125:
126: if (result == NOTOK)
127: {
128: if (aci->aci_abort.aca_reason == ACS_TIMER)
129: {
130: /* ADT: Watch out for this */
131: /* more work needed !!! */
132: ACAFREE (aca);
133: return (DONE);
134: }
135: else
136: {
137: LLOG (rosap_log, LLOG_EXCEPTIONS, ("RoUnbindRetry: AcRelRetryRequest failed"));
138: (void) acs2ronotlose (rni, "RO-UNBIND.RETRY", aca);
139: ACAFREE (aca);
140: return (NOTOK);
141: }
142: }
143: else
144: {
145: if (ParseRoUnBindResponse (acr, rni) != OK)
146: {
147: LLOG (rosap_log, LLOG_EXCEPTIONS, ("RoUnbindRetry: ParseRoUnBindResponse failed"));
148: ACRFREE (acr);
149: return (NOTOK);
150: }
151: }
152:
153: return (result);
154: }
155:
156: int ParseRoUnBindResponse (acr, rni)
157: struct AcSAPrelease * acr;
158: struct RoNOTindication * rni;
159: {
160: PE pe;
161:
162: if (acr->acr_ninfo == 0)
163: return (OK);
164:
165: if (acr->acr_ninfo != 1)
166: return (ronotlose (rni, RBI_DEC_NINFO, NULLCP, NULLCP));
167:
168: if (acr->acr_info[0] == NULLPE)
169: return (ronotlose (rni, RBI_DEC_NINFO, NULLCP, NULLCP));
170:
171: /* ADT: Can we get rid of this copy? */
172: pe = acr->acr_info[0];
173: acr->acr_info[0] = NULLPE;
174: if (acr->acr_affirmative == ACS_ACCEPT)
175: {
176: if (decode_RONOT_UnBindResultValue (pe, 1, NULLIP, NULLVP, &acr->acr_info[0]) != OK)
177: {
178: LLOG (rosap_log, LLOG_EXCEPTIONS, ("ParseRoUnBindResponse: decode_RONOT_UnBindResultValue failed"));
179: acr->acr_ninfo = 0;
180: pe_free (pe);
181: return (ronotlose (rni, RBI_DEC_UNBIND_RES, NULLCP, NULLCP));
182: }
183: }
184: else
185: {
186: if (decode_RONOT_UnBindErrorValue (pe, 1, NULLIP, NULLVP, &acr->acr_info[0]) != OK)
187: {
188: LLOG (rosap_log, LLOG_EXCEPTIONS, ("ParseRoUnBindResponse: decode_RONOT_UnBindErrorValue failed"));
189: acr->acr_ninfo = 0;
190: pe_free (pe);
191: return (ronotlose (rni, RBI_DEC_UNBIND_RES, NULLCP, NULLCP));
192: }
193: }
194: pe_free (pe);
195:
196: return (OK);
197: }
198:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.