error.c revision 266e564d
1266e564dSmrg/* $XdotOrg: $ */
2266e564dSmrg/* $Xorg: error.c,v 1.4 2001/02/09 02:03:26 xorgcvs Exp $ */
3266e564dSmrg/******************************************************************************
4266e564dSmrg
5266e564dSmrg
6266e564dSmrgCopyright 1993, 1998  The Open Group
7266e564dSmrg
8266e564dSmrgPermission to use, copy, modify, distribute, and sell this software and its
9266e564dSmrgdocumentation for any purpose is hereby granted without fee, provided that
10266e564dSmrgthe above copyright notice appear in all copies and that both that
11266e564dSmrgcopyright notice and this permission notice appear in supporting
12266e564dSmrgdocumentation.
13266e564dSmrg
14266e564dSmrgThe above copyright notice and this permission notice shall be included in
15266e564dSmrgall copies or substantial portions of the Software.
16266e564dSmrg
17266e564dSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18266e564dSmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19266e564dSmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
20266e564dSmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21266e564dSmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22266e564dSmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23266e564dSmrg
24266e564dSmrgExcept as contained in this notice, the name of The Open Group shall not be
25266e564dSmrgused in advertising or otherwise to promote the sale, use or other dealings
26266e564dSmrgin this Software without prior written authorization from The Open Group.
27266e564dSmrg
28266e564dSmrgAuthor: Ralph Mor, X Consortium
29266e564dSmrg******************************************************************************/
30266e564dSmrg/* $XFree86: xc/lib/ICE/error.c,v 1.5 2001/10/28 03:32:28 tsi Exp $ */
31266e564dSmrg
32266e564dSmrg#ifdef HAVE_CONFIG_H
33266e564dSmrg#include <config.h>
34266e564dSmrg#endif
35266e564dSmrg#include <X11/ICE/ICElib.h>
36266e564dSmrg#include "ICElibint.h"
37266e564dSmrg#include <stdio.h>
38266e564dSmrg
39266e564dSmrg#include <errno.h>
40266e564dSmrg
41266e564dSmrg
42266e564dSmrgvoid
43266e564dSmrg_IceErrorBadMinor (iceConn, majorOpcode, offendingMinor, severity)
44266e564dSmrg
45266e564dSmrgIceConn	iceConn;
46266e564dSmrgint	majorOpcode;
47266e564dSmrgint	offendingMinor;
48266e564dSmrgint	severity;
49266e564dSmrg
50266e564dSmrg{
51266e564dSmrg    IceErrorHeader (iceConn,
52266e564dSmrg	majorOpcode, offendingMinor,
53266e564dSmrg	iceConn->receive_sequence,
54266e564dSmrg	severity,
55266e564dSmrg	IceBadMinor,
56266e564dSmrg	0);
57266e564dSmrg
58266e564dSmrg    IceFlush (iceConn);
59266e564dSmrg}
60266e564dSmrg
61266e564dSmrg
62266e564dSmrgvoid
63266e564dSmrg_IceErrorBadState (iceConn, majorOpcode, offendingMinor, severity)
64266e564dSmrg
65266e564dSmrgIceConn	iceConn;
66266e564dSmrgint	majorOpcode;
67266e564dSmrgint	offendingMinor;
68266e564dSmrgint	severity;
69266e564dSmrg
70266e564dSmrg{
71266e564dSmrg    IceErrorHeader (iceConn,
72266e564dSmrg	majorOpcode, offendingMinor,
73266e564dSmrg	iceConn->receive_sequence,
74266e564dSmrg	severity,
75266e564dSmrg	IceBadState,
76266e564dSmrg	0);
77266e564dSmrg
78266e564dSmrg    IceFlush (iceConn);
79266e564dSmrg}
80266e564dSmrg
81266e564dSmrg
82266e564dSmrgvoid
83266e564dSmrg_IceErrorBadLength (iceConn, majorOpcode, offendingMinor, severity)
84266e564dSmrg
85266e564dSmrgIceConn	iceConn;
86266e564dSmrgint	majorOpcode;
87266e564dSmrgint	offendingMinor;
88266e564dSmrgint	severity;
89266e564dSmrg
90266e564dSmrg{
91266e564dSmrg    IceErrorHeader (iceConn,
92266e564dSmrg	majorOpcode, offendingMinor,
93266e564dSmrg	iceConn->receive_sequence,
94266e564dSmrg	severity,
95266e564dSmrg	IceBadLength,
96266e564dSmrg	0);
97266e564dSmrg
98266e564dSmrg    IceFlush (iceConn);
99266e564dSmrg}
100266e564dSmrg
101266e564dSmrg
102266e564dSmrgvoid
103266e564dSmrg_IceErrorBadValue (iceConn, majorOpcode, offendingMinor, offset, length, value)
104266e564dSmrg
105266e564dSmrgIceConn		iceConn;
106266e564dSmrgint		majorOpcode;
107266e564dSmrgint		offendingMinor;
108266e564dSmrgint		offset;
109266e564dSmrgint		length;		/* in bytes */
110266e564dSmrgIcePointer	value;
111266e564dSmrg
112266e564dSmrg{
113266e564dSmrg    IceErrorHeader (iceConn,
114266e564dSmrg	majorOpcode, offendingMinor,
115266e564dSmrg	iceConn->receive_sequence,
116266e564dSmrg	IceCanContinue,
117266e564dSmrg	IceBadValue,
118266e564dSmrg	WORD64COUNT (8 + length));
119266e564dSmrg
120266e564dSmrg    IceWriteData32 (iceConn, 4, &offset);
121266e564dSmrg    IceWriteData32 (iceConn, 4, &length);
122266e564dSmrg    IceWriteData (iceConn, length, (char *) value);
123266e564dSmrg
124266e564dSmrg    if (PAD64 (length))
125266e564dSmrg	IceWritePad (iceConn, PAD64 (length));
126266e564dSmrg
127266e564dSmrg    IceFlush (iceConn);
128266e564dSmrg}
129266e564dSmrg
130266e564dSmrg
131266e564dSmrgvoid
132266e564dSmrg_IceErrorNoAuthentication (iceConn, offendingMinor)
133266e564dSmrg
134266e564dSmrgIceConn	iceConn;
135266e564dSmrgint	offendingMinor;
136266e564dSmrg
137266e564dSmrg{
138266e564dSmrg    int severity = (offendingMinor == ICE_ConnectionSetup) ?
139266e564dSmrg	IceFatalToConnection : IceFatalToProtocol;
140266e564dSmrg
141266e564dSmrg    IceErrorHeader (iceConn,
142266e564dSmrg	0, offendingMinor,
143266e564dSmrg	iceConn->receive_sequence,
144266e564dSmrg	severity,
145266e564dSmrg	IceNoAuth,
146266e564dSmrg	0);
147266e564dSmrg
148266e564dSmrg    IceFlush (iceConn);
149266e564dSmrg}
150266e564dSmrg
151266e564dSmrg
152266e564dSmrgvoid
153266e564dSmrg_IceErrorNoVersion (iceConn, offendingMinor)
154266e564dSmrg
155266e564dSmrgIceConn	iceConn;
156266e564dSmrgint	offendingMinor;
157266e564dSmrg
158266e564dSmrg{
159266e564dSmrg    int severity = (offendingMinor == ICE_ConnectionSetup) ?
160266e564dSmrg	IceFatalToConnection : IceFatalToProtocol;
161266e564dSmrg
162266e564dSmrg    IceErrorHeader (iceConn,
163266e564dSmrg	0, offendingMinor,
164266e564dSmrg	iceConn->receive_sequence,
165266e564dSmrg	severity,
166266e564dSmrg	IceNoVersion,
167266e564dSmrg	0);
168266e564dSmrg
169266e564dSmrg    IceFlush (iceConn);
170266e564dSmrg}
171266e564dSmrg
172266e564dSmrg
173266e564dSmrgvoid
174266e564dSmrg_IceErrorSetupFailed (iceConn, offendingMinor, reason)
175266e564dSmrg
176266e564dSmrgIceConn	iceConn;
177266e564dSmrgint	offendingMinor;
178266e564dSmrgchar	*reason;
179266e564dSmrg
180266e564dSmrg{
181266e564dSmrg    char *pBuf, *pStart;
182266e564dSmrg    int bytes;
183266e564dSmrg    int severity = (offendingMinor == ICE_ConnectionSetup) ?
184266e564dSmrg	IceFatalToConnection : IceFatalToProtocol;
185266e564dSmrg
186266e564dSmrg    if (!reason)
187266e564dSmrg	reason = "";
188266e564dSmrg    bytes = STRING_BYTES (reason);
189266e564dSmrg
190266e564dSmrg    IceErrorHeader (iceConn,
191266e564dSmrg	0, offendingMinor,
192266e564dSmrg	iceConn->receive_sequence,
193266e564dSmrg	severity,
194266e564dSmrg	IceSetupFailed,
195266e564dSmrg	WORD64COUNT (bytes));
196266e564dSmrg
197266e564dSmrg    pBuf = pStart = IceAllocScratch (iceConn, PADDED_BYTES64 (bytes));
198266e564dSmrg    STORE_STRING (pBuf, reason);
199266e564dSmrg
200266e564dSmrg    IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart);
201266e564dSmrg    IceFlush (iceConn);
202266e564dSmrg}
203266e564dSmrg
204266e564dSmrg
205266e564dSmrgvoid
206266e564dSmrg_IceErrorAuthenticationRejected (iceConn, offendingMinor, reason)
207266e564dSmrg
208266e564dSmrgIceConn	iceConn;
209266e564dSmrgint	offendingMinor;
210266e564dSmrgchar	*reason;
211266e564dSmrg
212266e564dSmrg{
213266e564dSmrg    char *pBuf, *pStart;
214266e564dSmrg    int bytes;
215266e564dSmrg
216266e564dSmrg    if (!reason)
217266e564dSmrg	reason = "";
218266e564dSmrg    bytes = STRING_BYTES (reason);
219266e564dSmrg
220266e564dSmrg    IceErrorHeader (iceConn,
221266e564dSmrg	0, offendingMinor,
222266e564dSmrg	iceConn->receive_sequence,
223266e564dSmrg	IceFatalToProtocol,
224266e564dSmrg	IceAuthRejected,
225266e564dSmrg	WORD64COUNT (bytes));
226266e564dSmrg
227266e564dSmrg    pBuf = pStart = IceAllocScratch (iceConn, PADDED_BYTES64 (bytes));
228266e564dSmrg    STORE_STRING (pBuf, reason);
229266e564dSmrg
230266e564dSmrg    IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart);
231266e564dSmrg    IceFlush (iceConn);
232266e564dSmrg}
233266e564dSmrg
234266e564dSmrg
235266e564dSmrgvoid
236266e564dSmrg_IceErrorAuthenticationFailed (iceConn, offendingMinor, reason)
237266e564dSmrg
238266e564dSmrgIceConn	iceConn;
239266e564dSmrgint	offendingMinor;
240266e564dSmrgchar	*reason;
241266e564dSmrg
242266e564dSmrg{
243266e564dSmrg    char *pBuf, *pStart;
244266e564dSmrg    int bytes;
245266e564dSmrg
246266e564dSmrg    if (!reason)
247266e564dSmrg	reason = "";
248266e564dSmrg    bytes = STRING_BYTES (reason);
249266e564dSmrg
250266e564dSmrg    IceErrorHeader (iceConn,
251266e564dSmrg	0, offendingMinor,
252266e564dSmrg	iceConn->receive_sequence,
253266e564dSmrg	IceFatalToProtocol,
254266e564dSmrg	IceAuthFailed,
255266e564dSmrg	WORD64COUNT (bytes));
256266e564dSmrg
257266e564dSmrg    pBuf = pStart = IceAllocScratch (iceConn, PADDED_BYTES64 (bytes));
258266e564dSmrg    STORE_STRING (pBuf, reason);
259266e564dSmrg
260266e564dSmrg    IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart);
261266e564dSmrg    IceFlush (iceConn);
262266e564dSmrg}
263266e564dSmrg
264266e564dSmrg
265266e564dSmrgvoid
266266e564dSmrg_IceErrorProtocolDuplicate (iceConn, protocolName)
267266e564dSmrg
268266e564dSmrgIceConn	iceConn;
269266e564dSmrgchar	*protocolName;
270266e564dSmrg
271266e564dSmrg{
272266e564dSmrg    char *pBuf, *pStart;
273266e564dSmrg    int bytes;
274266e564dSmrg
275266e564dSmrg    if (!protocolName)
276266e564dSmrg	protocolName = "";
277266e564dSmrg    bytes = STRING_BYTES (protocolName);
278266e564dSmrg
279266e564dSmrg    IceErrorHeader (iceConn,
280266e564dSmrg	0, ICE_ProtocolSetup,
281266e564dSmrg	iceConn->receive_sequence,
282266e564dSmrg	IceFatalToProtocol,
283266e564dSmrg	IceProtocolDuplicate,
284266e564dSmrg	WORD64COUNT (bytes));
285266e564dSmrg
286266e564dSmrg    pBuf = pStart = IceAllocScratch (iceConn, PADDED_BYTES64 (bytes));
287266e564dSmrg    STORE_STRING (pBuf, protocolName);
288266e564dSmrg
289266e564dSmrg    IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart);
290266e564dSmrg    IceFlush (iceConn);
291266e564dSmrg}
292266e564dSmrg
293266e564dSmrg
294266e564dSmrgvoid
295266e564dSmrg_IceErrorMajorOpcodeDuplicate (iceConn, majorOpcode)
296266e564dSmrg
297266e564dSmrgIceConn	iceConn;
298266e564dSmrgint	majorOpcode;
299266e564dSmrg
300266e564dSmrg{
301266e564dSmrg    char mOp = (char) majorOpcode;
302266e564dSmrg
303266e564dSmrg    IceErrorHeader (iceConn,
304266e564dSmrg	0, ICE_ProtocolSetup,
305266e564dSmrg	iceConn->receive_sequence,
306266e564dSmrg	IceFatalToProtocol,
307266e564dSmrg	IceMajorOpcodeDuplicate,
308266e564dSmrg	1 /* length */);
309266e564dSmrg
310266e564dSmrg    IceWriteData (iceConn, 8, &mOp);
311266e564dSmrg    IceFlush (iceConn);
312266e564dSmrg}
313266e564dSmrg
314266e564dSmrg
315266e564dSmrgvoid
316266e564dSmrg_IceErrorUnknownProtocol (iceConn, protocolName)
317266e564dSmrg
318266e564dSmrgIceConn	iceConn;
319266e564dSmrgchar	*protocolName;
320266e564dSmrg
321266e564dSmrg{
322266e564dSmrg    char *pBuf, *pStart;
323266e564dSmrg    int bytes;
324266e564dSmrg
325266e564dSmrg    if (!protocolName)
326266e564dSmrg	protocolName = "";
327266e564dSmrg    bytes = STRING_BYTES (protocolName);
328266e564dSmrg
329266e564dSmrg    IceErrorHeader (iceConn,
330266e564dSmrg	0, ICE_ProtocolSetup,
331266e564dSmrg	iceConn->receive_sequence,
332266e564dSmrg	IceFatalToProtocol,
333266e564dSmrg	IceUnknownProtocol,
334266e564dSmrg	WORD64COUNT (bytes));
335266e564dSmrg
336266e564dSmrg    pBuf = pStart = IceAllocScratch (iceConn, PADDED_BYTES64 (bytes));
337266e564dSmrg    STORE_STRING (pBuf, protocolName);
338266e564dSmrg
339266e564dSmrg    IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart);
340266e564dSmrg    IceFlush (iceConn);
341266e564dSmrg}
342266e564dSmrg
343266e564dSmrg
344266e564dSmrgvoid
345266e564dSmrg_IceErrorBadMajor (iceConn, offendingMajor, offendingMinor, severity)
346266e564dSmrg
347266e564dSmrgIceConn	iceConn;
348266e564dSmrgint     offendingMajor;
349266e564dSmrgint     offendingMinor;
350266e564dSmrgint	severity;
351266e564dSmrg
352266e564dSmrg{
353266e564dSmrg    char maj = (char) offendingMajor;
354266e564dSmrg
355266e564dSmrg    IceErrorHeader (iceConn,
356266e564dSmrg	0, offendingMinor,
357266e564dSmrg	iceConn->receive_sequence,
358266e564dSmrg	severity,
359266e564dSmrg	IceBadMajor,
360266e564dSmrg	1 /* length */);
361266e564dSmrg
362266e564dSmrg    IceWriteData (iceConn, 8, &maj);
363266e564dSmrg    IceFlush (iceConn);
364266e564dSmrg}
365266e564dSmrg
366266e564dSmrg
367266e564dSmrg
368266e564dSmrg/*
369266e564dSmrg * Default error handler.
370266e564dSmrg */
371266e564dSmrg
372266e564dSmrgvoid
373266e564dSmrg_IceDefaultErrorHandler (iceConn, swap,
374266e564dSmrg    offendingMinorOpcode, offendingSequence, errorClass, severity, values)
375266e564dSmrg
376266e564dSmrgIceConn		iceConn;
377266e564dSmrgBool		swap;
378266e564dSmrgint		offendingMinorOpcode;
379266e564dSmrgunsigned long	offendingSequence;
380266e564dSmrgint 		errorClass;
381266e564dSmrgint		severity;
382266e564dSmrgIcePointer	values;
383266e564dSmrg
384266e564dSmrg{
385266e564dSmrg    char *str;
386266e564dSmrg    char *pData = (char *) values;
387266e564dSmrg
388266e564dSmrg    switch (offendingMinorOpcode)
389266e564dSmrg    {
390266e564dSmrg        case ICE_ConnectionSetup:
391266e564dSmrg            str = "ConnectionSetup";
392266e564dSmrg	    break;
393266e564dSmrg        case ICE_AuthRequired:
394266e564dSmrg            str = "AuthRequired";
395266e564dSmrg	    break;
396266e564dSmrg        case ICE_AuthReply:
397266e564dSmrg            str = "AuthReply";
398266e564dSmrg	    break;
399266e564dSmrg        case ICE_AuthNextPhase:
400266e564dSmrg            str = "AuthNextPhase";
401266e564dSmrg	    break;
402266e564dSmrg        case ICE_ConnectionReply:
403266e564dSmrg            str = "ConnectionReply";
404266e564dSmrg	    break;
405266e564dSmrg        case ICE_ProtocolSetup:
406266e564dSmrg            str = "ProtocolSetup";
407266e564dSmrg	    break;
408266e564dSmrg        case ICE_ProtocolReply:
409266e564dSmrg            str = "ProtocolReply";
410266e564dSmrg	    break;
411266e564dSmrg        case ICE_Ping:
412266e564dSmrg            str = "Ping";
413266e564dSmrg	    break;
414266e564dSmrg        case ICE_PingReply:
415266e564dSmrg            str = "PingReply";
416266e564dSmrg	    break;
417266e564dSmrg        case ICE_WantToClose:
418266e564dSmrg            str = "WantToClose";
419266e564dSmrg	    break;
420266e564dSmrg        case ICE_NoClose:
421266e564dSmrg            str = "NoClose";
422266e564dSmrg	    break;
423266e564dSmrg	default:
424266e564dSmrg	    str = "";
425266e564dSmrg	}
426266e564dSmrg
427266e564dSmrg    fprintf (stderr, "\n");
428266e564dSmrg
429266e564dSmrg    fprintf (stderr, "ICE error:  Offending minor opcode    = %d (%s)\n",
430266e564dSmrg	offendingMinorOpcode, str);
431266e564dSmrg
432266e564dSmrg    fprintf (stderr, "            Offending sequence number = %lu\n",
433266e564dSmrg	offendingSequence);
434266e564dSmrg
435266e564dSmrg    switch (errorClass)
436266e564dSmrg    {
437266e564dSmrg        case IceBadMinor:
438266e564dSmrg            str = "BadMinor";
439266e564dSmrg            break;
440266e564dSmrg        case IceBadState:
441266e564dSmrg            str = "BadState";
442266e564dSmrg            break;
443266e564dSmrg        case IceBadLength:
444266e564dSmrg            str = "BadLength";
445266e564dSmrg            break;
446266e564dSmrg        case IceBadValue:
447266e564dSmrg            str = "BadValue";
448266e564dSmrg            break;
449266e564dSmrg        case IceBadMajor:
450266e564dSmrg            str = "BadMajor";
451266e564dSmrg            break;
452266e564dSmrg        case IceNoAuth:
453266e564dSmrg            str = "NoAuthentication";
454266e564dSmrg            break;
455266e564dSmrg        case IceNoVersion:
456266e564dSmrg            str = "NoVersion";
457266e564dSmrg            break;
458266e564dSmrg        case IceSetupFailed:
459266e564dSmrg            str = "SetupFailed";
460266e564dSmrg            break;
461266e564dSmrg        case IceAuthRejected:
462266e564dSmrg            str = "AuthenticationRejected";
463266e564dSmrg            break;
464266e564dSmrg        case IceAuthFailed:
465266e564dSmrg            str = "AuthenticationFailed";
466266e564dSmrg            break;
467266e564dSmrg        case IceProtocolDuplicate:
468266e564dSmrg            str = "ProtocolDuplicate";
469266e564dSmrg            break;
470266e564dSmrg        case IceMajorOpcodeDuplicate:
471266e564dSmrg            str = "MajorOpcodeDuplicate";
472266e564dSmrg            break;
473266e564dSmrg        case IceUnknownProtocol:
474266e564dSmrg            str = "UnknownProtocol";
475266e564dSmrg            break;
476266e564dSmrg	default:
477266e564dSmrg	    str = "???";
478266e564dSmrg    }
479266e564dSmrg
480266e564dSmrg    fprintf (stderr, "            Error class               = %s\n", str);
481266e564dSmrg
482266e564dSmrg    if (severity == IceCanContinue)
483266e564dSmrg	str = "CanContinue";
484266e564dSmrg    else if (severity == IceFatalToProtocol)
485266e564dSmrg	str = "FatalToProtocol";
486266e564dSmrg    else if (severity == IceFatalToConnection)
487266e564dSmrg	str = "FatalToConnection";
488266e564dSmrg    else
489266e564dSmrg	str = "???";
490266e564dSmrg
491266e564dSmrg    fprintf (stderr, "            Severity                  = %s\n", str);
492266e564dSmrg
493266e564dSmrg    switch (errorClass)
494266e564dSmrg    {
495266e564dSmrg        case IceBadValue:
496266e564dSmrg        {
497266e564dSmrg	    int offset, length, val;
498266e564dSmrg
499266e564dSmrg	    EXTRACT_CARD32 (pData, swap, offset);
500266e564dSmrg	    EXTRACT_CARD32 (pData, swap, length);
501266e564dSmrg
502266e564dSmrg	    fprintf (stderr,
503266e564dSmrg		"            BadValue Offset           = %d\n", offset);
504266e564dSmrg	    fprintf (stderr,
505266e564dSmrg		"            BadValue Length           = %d\n", length);
506266e564dSmrg
507266e564dSmrg	    if (length <= 4)
508266e564dSmrg	    {
509266e564dSmrg		if (length == 1)
510266e564dSmrg		    val = (int) *pData;
511266e564dSmrg		else if (length == 2)
512266e564dSmrg		{
513266e564dSmrg		    EXTRACT_CARD16 (pData, swap, val);
514266e564dSmrg		}
515266e564dSmrg		else
516266e564dSmrg		{
517266e564dSmrg		    EXTRACT_CARD32 (pData, swap, val);
518266e564dSmrg		}
519266e564dSmrg
520266e564dSmrg		fprintf (stderr,
521266e564dSmrg	            "            BadValue                  = %d\n", val);
522266e564dSmrg	    }
523266e564dSmrg            break;
524266e564dSmrg	}
525266e564dSmrg
526266e564dSmrg        case IceBadMajor:
527266e564dSmrg
528266e564dSmrg	    fprintf (stderr, "Major opcode : %d\n", (int) *pData);
529266e564dSmrg            break;
530266e564dSmrg
531266e564dSmrg        case IceSetupFailed:
532266e564dSmrg
533266e564dSmrg	    EXTRACT_STRING (pData, swap, str);
534266e564dSmrg	    fprintf (stderr, "Reason : %s\n", str);
535266e564dSmrg	    free(str);
536266e564dSmrg            break;
537266e564dSmrg
538266e564dSmrg        case IceAuthRejected:
539266e564dSmrg
540266e564dSmrg	    EXTRACT_STRING (pData, swap, str);
541266e564dSmrg	    fprintf (stderr, "Reason : %s\n", str);
542266e564dSmrg	    free(str);
543266e564dSmrg            break;
544266e564dSmrg
545266e564dSmrg        case IceAuthFailed:
546266e564dSmrg
547266e564dSmrg	    EXTRACT_STRING (pData, swap, str);
548266e564dSmrg	    fprintf (stderr, "Reason : %s\n", str);
549266e564dSmrg	    free(str);
550266e564dSmrg            break;
551266e564dSmrg
552266e564dSmrg        case IceProtocolDuplicate:
553266e564dSmrg
554266e564dSmrg	    EXTRACT_STRING (pData, swap, str);
555266e564dSmrg	    fprintf (stderr, "Protocol name : %s\n", str);
556266e564dSmrg	    free(str);
557266e564dSmrg            break;
558266e564dSmrg
559266e564dSmrg        case IceMajorOpcodeDuplicate:
560266e564dSmrg
561266e564dSmrg	    fprintf (stderr, "Major opcode : %d\n", (int) *pData);
562266e564dSmrg            break;
563266e564dSmrg
564266e564dSmrg        case IceUnknownProtocol:
565266e564dSmrg
566266e564dSmrg	    EXTRACT_STRING (pData, swap, str);
567266e564dSmrg	    fprintf (stderr, "Protocol name : %s\n", str);
568266e564dSmrg	    free(str);
569266e564dSmrg            break;
570266e564dSmrg
571266e564dSmrg	default:
572266e564dSmrg	    break;
573266e564dSmrg    }
574266e564dSmrg
575266e564dSmrg    fprintf (stderr, "\n");
576266e564dSmrg
577266e564dSmrg    if (severity != IceCanContinue)
578266e564dSmrg	exit (1);
579266e564dSmrg}
580266e564dSmrg
581266e564dSmrg
582266e564dSmrg
583266e564dSmrg/*
584266e564dSmrg * This procedure sets the ICE error handler to be the specified
585266e564dSmrg * routine.  If NULL is passed in the default error handler is restored.
586266e564dSmrg * The function's return value is the previous error handler.
587266e564dSmrg */
588266e564dSmrg
589266e564dSmrgIceErrorHandler
590266e564dSmrgIceSetErrorHandler (handler)
591266e564dSmrg
592266e564dSmrgIceErrorHandler handler;
593266e564dSmrg
594266e564dSmrg{
595266e564dSmrg    IceErrorHandler oldHandler = _IceErrorHandler;
596266e564dSmrg
597266e564dSmrg    if (handler != NULL)
598266e564dSmrg	_IceErrorHandler = handler;
599266e564dSmrg    else
600266e564dSmrg	_IceErrorHandler = _IceDefaultErrorHandler;
601266e564dSmrg
602266e564dSmrg    return (oldHandler);
603266e564dSmrg}
604266e564dSmrg
605266e564dSmrg
606266e564dSmrg
607266e564dSmrg/*
608266e564dSmrg * Default IO error handler.
609266e564dSmrg */
610266e564dSmrg
611266e564dSmrgvoid
612266e564dSmrg_IceDefaultIOErrorHandler (iceConn)
613266e564dSmrg
614266e564dSmrgIceConn iceConn;
615266e564dSmrg
616266e564dSmrg{
617266e564dSmrg    fprintf (stderr,
618266e564dSmrg	"ICE default IO error handler doing an exit(), pid = %ld, errno = %d\n",
619266e564dSmrg	(long)getpid(), errno);
620266e564dSmrg
621266e564dSmrg    exit (1);
622266e564dSmrg}
623266e564dSmrg
624266e564dSmrg
625266e564dSmrg
626266e564dSmrg/*
627266e564dSmrg * This procedure sets the ICE fatal I/O error handler to be the
628266e564dSmrg * specified routine.  If NULL is passed in the default error
629266e564dSmrg * handler is restored.   The function's return value is the
630266e564dSmrg * previous error handler.
631266e564dSmrg */
632266e564dSmrg
633266e564dSmrgIceIOErrorHandler
634266e564dSmrgIceSetIOErrorHandler (handler)
635266e564dSmrg
636266e564dSmrgIceIOErrorHandler handler;
637266e564dSmrg
638266e564dSmrg{
639266e564dSmrg    IceIOErrorHandler oldHandler = _IceIOErrorHandler;
640266e564dSmrg
641266e564dSmrg    if (handler != NULL)
642266e564dSmrg	_IceIOErrorHandler = handler;
643266e564dSmrg    else
644266e564dSmrg	_IceIOErrorHandler = _IceDefaultIOErrorHandler;
645266e564dSmrg
646266e564dSmrg    return (oldHandler);
647266e564dSmrg}
648