|
|
1.1 root 1: /* psaplose.c - PPM: you lose */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/psap2/RCS/psaplose.c,v 7.1 90/07/01 21:05:04 mrose Exp $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/psap2/RCS/psaplose.c,v 7.1 90/07/01 21:05:04 mrose Exp $
9: *
10: *
11: * $Log: psaplose.c,v $
12: * Revision 7.1 90/07/01 21:05:04 mrose
13: * pepsy
14: *
15: * Revision 7.0 89/11/23 22:14:21 mrose
16: * Release 6.0
17: *
18: */
19:
20: /*
21: * NOTICE
22: *
23: * Acquisition, use, and distribution of this module and related
24: * materials are subject to the restrictions of a license agreement.
25: * Consult the Preface in the User's Manual for the full terms of
26: * this agreement.
27: *
28: */
29:
30:
31: /* LINTLIBRARY */
32:
33: #include <stdio.h>
34: #include <varargs.h>
35: #include "PS-types.h"
36: #include "ppkt.h"
37: #include "tailor.h"
38:
39: /* */
40:
41: #ifndef lint
42: int ppktlose (va_alist)
43: va_dcl
44: {
45: int len,
46: ppdu,
47: reason,
48: result,
49: value;
50: char *base;
51: register struct psapblk *pb;
52: PE pe;
53: register struct PSAPindication *pi;
54: register struct PSAPabort *pa;
55: struct SSAPindication sis;
56: struct type_PS_ARP__PPDU pdus;
57: register struct type_PS_ARP__PPDU *pdu = &pdus;
58: va_list ap;
59:
60: va_start (ap);
61:
62: pb = va_arg (ap, struct psapblk *);
63: pi = va_arg (ap, struct PSAPindication *);
64: reason = va_arg (ap, int);
65: ppdu = va_arg (ap, int);
66:
67: result = _psaplose (pi, reason, ap);
68:
69: va_end (ap);
70:
71: if ((pa = &pi -> pi_abort) -> pa_cc > 0) {
72: SLOG (psap2_log, LLOG_EXCEPTIONS, NULLCP,
73: ("ppktlose [%s] %*.*s", PErrString (pa -> pa_reason),
74: pa -> pa_cc, pa -> pa_cc, pa -> pa_data));
75: }
76: else
77: SLOG (psap2_log, LLOG_EXCEPTIONS, NULLCP,
78: ("ppktlose [%s]", PErrString (pa -> pa_reason)));
79:
80: if (pb -> pb_fd == NOTOK)
81: return result;
82:
83: switch (reason) {
84: case PC_NOTSPECIFIED:
85: default:
86: reason = int_PS_Abort__reason_reason__not__specified;
87: break;
88:
89: case PC_UNRECOGNIZED:
90: case PC_UNEXPECTED:
91: case PC_SSPRIMITIVE:
92: case PC_PPPARAM1:
93: case PC_PPPARAM2:
94: case PC_INVALID:
95: reason -= PC_ABORT_BASE;
96: break;
97: }
98:
99: pdu -> provider__reason = (struct type_PS_Abort__reason *) &reason;
100: pdu -> event = ppdu != PPDU_NONE
101: ? (struct type_PS_Event__identifier *) &ppdu
102: : NULL;
103:
104: pe = NULLPE;
105: base = NULL, len = 0;
106: if (encode_PS_ARP__PPDU (&pe, 1, 0, NULLCP, pdu) == NOTOK) {
107: PLOGP (psap2_log,PS_ARP__PPDU, pe, "ARP-PPDU", 0);
108:
109: (void) pe2ssdu (pe, &base, &len);
110: }
111: if (pe)
112: pe_free (pe);
113:
114: if (SUAbortRequest (pb -> pb_fd, base, len, &sis) != NOTOK)
115: pb -> pb_fd = NOTOK;
116:
117: if (base)
118: free (base);
119:
120: return result;
121: }
122: #else
123: /* VARARGS6 */
124:
125: int ppktlose (pb, pi, reason, ppdu, what, fmt)
126: register struct psapblk *pb;
127: register struct PSAPindication *pi;
128: int reason,
129: ppdu;
130: char *what,
131: *fmt;
132: {
133: return ppktlose (pb, pi, reason, ppdu, what, fmt);
134: }
135: #endif
136:
137: /* */
138:
139: #ifndef lint
140: int psaplose (va_alist)
141: va_dcl
142: {
143: int reason,
144: result;
145: struct PSAPindication *pi;
146: va_list ap;
147:
148: va_start (ap);
149:
150: pi = va_arg (ap, struct PSAPindication *);
151: reason = va_arg (ap, int);
152:
153: result = _psaplose (pi, reason, ap);
154:
155: va_end (ap);
156:
157: return result;
158: }
159: #else
160: /* VARARGS4 */
161:
162: int psaplose (pi, reason, what, fmt)
163: struct PSAPindication *pi;
164: int reason;
165: char *what,
166: *fmt;
167: {
168: return psaplose (pi, reason, what, fmt);
169: }
170: #endif
171:
172: /* */
173:
174: #ifndef lint
175: static int _psaplose (pi, reason, ap) /* what, fmt, args ... */
176: register struct PSAPindication *pi;
177: int reason;
178: va_list ap;
179: {
180: register char *bp;
181: char buffer[BUFSIZ];
182: register struct PSAPabort *pa;
183:
184: if (pi) {
185: bzero ((char *) pi, sizeof *pi);
186: pi -> pi_type = PI_ABORT;
187: pa = &pi -> pi_abort;
188:
189: asprintf (bp = buffer, ap);
190: bp += strlen (bp);
191:
192: pa -> pa_peer = 0;
193: pa -> pa_reason = reason;
194: pa -> pa_ninfo = 0;
195: copyPSAPdata (buffer, bp - buffer, pa);
196: }
197:
198: return NOTOK;
199: }
200: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.