error.c revision c5629e66
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
43c5629e66Smrg_IceErrorBadMinor (
44c5629e66Smrg	IceConn	iceConn,
45c5629e66Smrg	int	majorOpcode,
46c5629e66Smrg	int	offendingMinor,
47c5629e66Smrg	int	severity
48c5629e66Smrg)
49266e564dSmrg{
50266e564dSmrg    IceErrorHeader (iceConn,
51266e564dSmrg	majorOpcode, offendingMinor,
52266e564dSmrg	iceConn->receive_sequence,
53266e564dSmrg	severity,
54266e564dSmrg	IceBadMinor,
55266e564dSmrg	0);
56266e564dSmrg
57266e564dSmrg    IceFlush (iceConn);
58266e564dSmrg}
59266e564dSmrg
60266e564dSmrg
61266e564dSmrgvoid
62c5629e66Smrg_IceErrorBadState (
63c5629e66Smrg	IceConn	iceConn,
64c5629e66Smrg	int	majorOpcode,
65c5629e66Smrg	int	offendingMinor,
66c5629e66Smrg	int	severity
67c5629e66Smrg)
68266e564dSmrg{
69266e564dSmrg    IceErrorHeader (iceConn,
70266e564dSmrg	majorOpcode, offendingMinor,
71266e564dSmrg	iceConn->receive_sequence,
72266e564dSmrg	severity,
73266e564dSmrg	IceBadState,
74266e564dSmrg	0);
75266e564dSmrg
76266e564dSmrg    IceFlush (iceConn);
77266e564dSmrg}
78266e564dSmrg
79266e564dSmrg
80266e564dSmrgvoid
81c5629e66Smrg_IceErrorBadLength (
82c5629e66Smrg	IceConn	iceConn,
83c5629e66Smrg	int	majorOpcode,
84c5629e66Smrg	int	offendingMinor,
85c5629e66Smrg	int	severity
86c5629e66Smrg)
87266e564dSmrg{
88266e564dSmrg    IceErrorHeader (iceConn,
89266e564dSmrg	majorOpcode, offendingMinor,
90266e564dSmrg	iceConn->receive_sequence,
91266e564dSmrg	severity,
92266e564dSmrg	IceBadLength,
93266e564dSmrg	0);
94266e564dSmrg
95266e564dSmrg    IceFlush (iceConn);
96266e564dSmrg}
97266e564dSmrg
98266e564dSmrg
99266e564dSmrgvoid
100c5629e66Smrg_IceErrorBadValue (
101c5629e66Smrg	IceConn		iceConn,
102c5629e66Smrg	int		majorOpcode,
103c5629e66Smrg	int		offendingMinor,
104c5629e66Smrg	int		offset,
105c5629e66Smrg	int		length,		/* in bytes */
106c5629e66Smrg	IcePointer	value
107c5629e66Smrg)
108266e564dSmrg{
109266e564dSmrg    IceErrorHeader (iceConn,
110266e564dSmrg	majorOpcode, offendingMinor,
111266e564dSmrg	iceConn->receive_sequence,
112266e564dSmrg	IceCanContinue,
113266e564dSmrg	IceBadValue,
114266e564dSmrg	WORD64COUNT (8 + length));
115266e564dSmrg
116266e564dSmrg    IceWriteData32 (iceConn, 4, &offset);
117266e564dSmrg    IceWriteData32 (iceConn, 4, &length);
118266e564dSmrg    IceWriteData (iceConn, length, (char *) value);
119266e564dSmrg
120266e564dSmrg    if (PAD64 (length))
121266e564dSmrg	IceWritePad (iceConn, PAD64 (length));
122266e564dSmrg
123266e564dSmrg    IceFlush (iceConn);
124266e564dSmrg}
125266e564dSmrg
126266e564dSmrg
127266e564dSmrgvoid
128c5629e66Smrg_IceErrorNoAuthentication (
129c5629e66Smrg	IceConn	iceConn,
130c5629e66Smrg	int	offendingMinor
131c5629e66Smrg)
132266e564dSmrg{
133266e564dSmrg    int severity = (offendingMinor == ICE_ConnectionSetup) ?
134266e564dSmrg	IceFatalToConnection : IceFatalToProtocol;
135266e564dSmrg
136266e564dSmrg    IceErrorHeader (iceConn,
137266e564dSmrg	0, offendingMinor,
138266e564dSmrg	iceConn->receive_sequence,
139266e564dSmrg	severity,
140266e564dSmrg	IceNoAuth,
141266e564dSmrg	0);
142266e564dSmrg
143266e564dSmrg    IceFlush (iceConn);
144266e564dSmrg}
145266e564dSmrg
146266e564dSmrg
147266e564dSmrgvoid
148c5629e66Smrg_IceErrorNoVersion (
149c5629e66Smrg	IceConn	iceConn,
150c5629e66Smrg	int	offendingMinor
151c5629e66Smrg)
152266e564dSmrg{
153266e564dSmrg    int severity = (offendingMinor == ICE_ConnectionSetup) ?
154266e564dSmrg	IceFatalToConnection : IceFatalToProtocol;
155266e564dSmrg
156266e564dSmrg    IceErrorHeader (iceConn,
157266e564dSmrg	0, offendingMinor,
158266e564dSmrg	iceConn->receive_sequence,
159266e564dSmrg	severity,
160266e564dSmrg	IceNoVersion,
161266e564dSmrg	0);
162266e564dSmrg
163266e564dSmrg    IceFlush (iceConn);
164266e564dSmrg}
165266e564dSmrg
166266e564dSmrg
167266e564dSmrgvoid
168c5629e66Smrg_IceErrorSetupFailed (
169c5629e66Smrg	IceConn	iceConn,
170c5629e66Smrg	int	offendingMinor,
171c5629e66Smrg	char	*reason
172c5629e66Smrg)
173266e564dSmrg{
174266e564dSmrg    char *pBuf, *pStart;
175266e564dSmrg    int bytes;
176266e564dSmrg    int severity = (offendingMinor == ICE_ConnectionSetup) ?
177266e564dSmrg	IceFatalToConnection : IceFatalToProtocol;
178266e564dSmrg
179266e564dSmrg    if (!reason)
180266e564dSmrg	reason = "";
181266e564dSmrg    bytes = STRING_BYTES (reason);
182266e564dSmrg
183266e564dSmrg    IceErrorHeader (iceConn,
184266e564dSmrg	0, offendingMinor,
185266e564dSmrg	iceConn->receive_sequence,
186266e564dSmrg	severity,
187266e564dSmrg	IceSetupFailed,
188266e564dSmrg	WORD64COUNT (bytes));
189266e564dSmrg
190266e564dSmrg    pBuf = pStart = IceAllocScratch (iceConn, PADDED_BYTES64 (bytes));
191266e564dSmrg    STORE_STRING (pBuf, reason);
192266e564dSmrg
193266e564dSmrg    IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart);
194266e564dSmrg    IceFlush (iceConn);
195266e564dSmrg}
196266e564dSmrg
197266e564dSmrg
198266e564dSmrgvoid
199c5629e66Smrg_IceErrorAuthenticationRejected (
200c5629e66Smrg	IceConn	iceConn,
201c5629e66Smrg	int	offendingMinor,
202c5629e66Smrg	char	*reason
203c5629e66Smrg)
204266e564dSmrg{
205266e564dSmrg    char *pBuf, *pStart;
206266e564dSmrg    int bytes;
207266e564dSmrg
208266e564dSmrg    if (!reason)
209266e564dSmrg	reason = "";
210266e564dSmrg    bytes = STRING_BYTES (reason);
211266e564dSmrg
212266e564dSmrg    IceErrorHeader (iceConn,
213266e564dSmrg	0, offendingMinor,
214266e564dSmrg	iceConn->receive_sequence,
215266e564dSmrg	IceFatalToProtocol,
216266e564dSmrg	IceAuthRejected,
217266e564dSmrg	WORD64COUNT (bytes));
218266e564dSmrg
219266e564dSmrg    pBuf = pStart = IceAllocScratch (iceConn, PADDED_BYTES64 (bytes));
220266e564dSmrg    STORE_STRING (pBuf, reason);
221266e564dSmrg
222266e564dSmrg    IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart);
223266e564dSmrg    IceFlush (iceConn);
224266e564dSmrg}
225266e564dSmrg
226266e564dSmrg
227266e564dSmrgvoid
228c5629e66Smrg_IceErrorAuthenticationFailed (
229c5629e66Smrg	IceConn	iceConn,
230c5629e66Smrg	int	offendingMinor,
231c5629e66Smrg	char	*reason
232c5629e66Smrg)
233266e564dSmrg{
234266e564dSmrg    char *pBuf, *pStart;
235266e564dSmrg    int bytes;
236266e564dSmrg
237266e564dSmrg    if (!reason)
238266e564dSmrg	reason = "";
239266e564dSmrg    bytes = STRING_BYTES (reason);
240266e564dSmrg
241266e564dSmrg    IceErrorHeader (iceConn,
242266e564dSmrg	0, offendingMinor,
243266e564dSmrg	iceConn->receive_sequence,
244266e564dSmrg	IceFatalToProtocol,
245266e564dSmrg	IceAuthFailed,
246266e564dSmrg	WORD64COUNT (bytes));
247266e564dSmrg
248266e564dSmrg    pBuf = pStart = IceAllocScratch (iceConn, PADDED_BYTES64 (bytes));
249266e564dSmrg    STORE_STRING (pBuf, reason);
250266e564dSmrg
251266e564dSmrg    IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart);
252266e564dSmrg    IceFlush (iceConn);
253266e564dSmrg}
254266e564dSmrg
255266e564dSmrg
256266e564dSmrgvoid
257c5629e66Smrg_IceErrorProtocolDuplicate (
258c5629e66Smrg	IceConn	iceConn,
259c5629e66Smrg	char	*protocolName
260c5629e66Smrg)
261266e564dSmrg{
262266e564dSmrg    char *pBuf, *pStart;
263266e564dSmrg    int bytes;
264266e564dSmrg
265266e564dSmrg    if (!protocolName)
266266e564dSmrg	protocolName = "";
267266e564dSmrg    bytes = STRING_BYTES (protocolName);
268266e564dSmrg
269266e564dSmrg    IceErrorHeader (iceConn,
270266e564dSmrg	0, ICE_ProtocolSetup,
271266e564dSmrg	iceConn->receive_sequence,
272266e564dSmrg	IceFatalToProtocol,
273266e564dSmrg	IceProtocolDuplicate,
274266e564dSmrg	WORD64COUNT (bytes));
275266e564dSmrg
276266e564dSmrg    pBuf = pStart = IceAllocScratch (iceConn, PADDED_BYTES64 (bytes));
277266e564dSmrg    STORE_STRING (pBuf, protocolName);
278266e564dSmrg
279266e564dSmrg    IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart);
280266e564dSmrg    IceFlush (iceConn);
281266e564dSmrg}
282266e564dSmrg
283266e564dSmrg
284266e564dSmrgvoid
285c5629e66Smrg_IceErrorMajorOpcodeDuplicate (
286c5629e66Smrg	IceConn	iceConn,
287c5629e66Smrg	int	majorOpcode
288c5629e66Smrg)
289266e564dSmrg{
290266e564dSmrg    char mOp = (char) majorOpcode;
291266e564dSmrg
292266e564dSmrg    IceErrorHeader (iceConn,
293266e564dSmrg	0, ICE_ProtocolSetup,
294266e564dSmrg	iceConn->receive_sequence,
295266e564dSmrg	IceFatalToProtocol,
296266e564dSmrg	IceMajorOpcodeDuplicate,
297266e564dSmrg	1 /* length */);
298266e564dSmrg
299266e564dSmrg    IceWriteData (iceConn, 8, &mOp);
300266e564dSmrg    IceFlush (iceConn);
301266e564dSmrg}
302266e564dSmrg
303266e564dSmrg
304266e564dSmrgvoid
305c5629e66Smrg_IceErrorUnknownProtocol (
306c5629e66Smrg	IceConn	iceConn,
307c5629e66Smrg	char	*protocolName
308c5629e66Smrg)
309266e564dSmrg{
310266e564dSmrg    char *pBuf, *pStart;
311266e564dSmrg    int bytes;
312266e564dSmrg
313266e564dSmrg    if (!protocolName)
314266e564dSmrg	protocolName = "";
315266e564dSmrg    bytes = STRING_BYTES (protocolName);
316266e564dSmrg
317266e564dSmrg    IceErrorHeader (iceConn,
318266e564dSmrg	0, ICE_ProtocolSetup,
319266e564dSmrg	iceConn->receive_sequence,
320266e564dSmrg	IceFatalToProtocol,
321266e564dSmrg	IceUnknownProtocol,
322266e564dSmrg	WORD64COUNT (bytes));
323266e564dSmrg
324266e564dSmrg    pBuf = pStart = IceAllocScratch (iceConn, PADDED_BYTES64 (bytes));
325266e564dSmrg    STORE_STRING (pBuf, protocolName);
326266e564dSmrg
327266e564dSmrg    IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart);
328266e564dSmrg    IceFlush (iceConn);
329266e564dSmrg}
330266e564dSmrg
331266e564dSmrg
332266e564dSmrgvoid
333c5629e66Smrg_IceErrorBadMajor (
334c5629e66Smrg	IceConn	iceConn,
335c5629e66Smrg	int     offendingMajor,
336c5629e66Smrg	int     offendingMinor,
337c5629e66Smrg	int	severity
338c5629e66Smrg)
339266e564dSmrg{
340266e564dSmrg    char maj = (char) offendingMajor;
341266e564dSmrg
342266e564dSmrg    IceErrorHeader (iceConn,
343266e564dSmrg	0, offendingMinor,
344266e564dSmrg	iceConn->receive_sequence,
345266e564dSmrg	severity,
346266e564dSmrg	IceBadMajor,
347266e564dSmrg	1 /* length */);
348266e564dSmrg
349266e564dSmrg    IceWriteData (iceConn, 8, &maj);
350266e564dSmrg    IceFlush (iceConn);
351266e564dSmrg}
352266e564dSmrg
353266e564dSmrg
354266e564dSmrg
355266e564dSmrg/*
356266e564dSmrg * Default error handler.
357266e564dSmrg */
358266e564dSmrg
359c5629e66Smrgstatic void
360c5629e66Smrg_IceDefaultErrorHandler (
361c5629e66Smrg	IceConn		iceConn,
362c5629e66Smrg	Bool		swap,
363c5629e66Smrg	int		offendingMinorOpcode,
364c5629e66Smrg	unsigned long	offendingSequence,
365c5629e66Smrg	int 		errorClass,
366c5629e66Smrg	int		severity,
367c5629e66Smrg	IcePointer	values
368c5629e66Smrg)
369266e564dSmrg{
370266e564dSmrg    char *str;
371266e564dSmrg    char *pData = (char *) values;
372266e564dSmrg
373266e564dSmrg    switch (offendingMinorOpcode)
374266e564dSmrg    {
375266e564dSmrg        case ICE_ConnectionSetup:
376266e564dSmrg            str = "ConnectionSetup";
377266e564dSmrg	    break;
378266e564dSmrg        case ICE_AuthRequired:
379266e564dSmrg            str = "AuthRequired";
380266e564dSmrg	    break;
381266e564dSmrg        case ICE_AuthReply:
382266e564dSmrg            str = "AuthReply";
383266e564dSmrg	    break;
384266e564dSmrg        case ICE_AuthNextPhase:
385266e564dSmrg            str = "AuthNextPhase";
386266e564dSmrg	    break;
387266e564dSmrg        case ICE_ConnectionReply:
388266e564dSmrg            str = "ConnectionReply";
389266e564dSmrg	    break;
390266e564dSmrg        case ICE_ProtocolSetup:
391266e564dSmrg            str = "ProtocolSetup";
392266e564dSmrg	    break;
393266e564dSmrg        case ICE_ProtocolReply:
394266e564dSmrg            str = "ProtocolReply";
395266e564dSmrg	    break;
396266e564dSmrg        case ICE_Ping:
397266e564dSmrg            str = "Ping";
398266e564dSmrg	    break;
399266e564dSmrg        case ICE_PingReply:
400266e564dSmrg            str = "PingReply";
401266e564dSmrg	    break;
402266e564dSmrg        case ICE_WantToClose:
403266e564dSmrg            str = "WantToClose";
404266e564dSmrg	    break;
405266e564dSmrg        case ICE_NoClose:
406266e564dSmrg            str = "NoClose";
407266e564dSmrg	    break;
408266e564dSmrg	default:
409266e564dSmrg	    str = "";
410266e564dSmrg	}
411266e564dSmrg
412266e564dSmrg    fprintf (stderr, "\n");
413266e564dSmrg
414266e564dSmrg    fprintf (stderr, "ICE error:  Offending minor opcode    = %d (%s)\n",
415266e564dSmrg	offendingMinorOpcode, str);
416266e564dSmrg
417266e564dSmrg    fprintf (stderr, "            Offending sequence number = %lu\n",
418266e564dSmrg	offendingSequence);
419266e564dSmrg
420266e564dSmrg    switch (errorClass)
421266e564dSmrg    {
422266e564dSmrg        case IceBadMinor:
423266e564dSmrg            str = "BadMinor";
424266e564dSmrg            break;
425266e564dSmrg        case IceBadState:
426266e564dSmrg            str = "BadState";
427266e564dSmrg            break;
428266e564dSmrg        case IceBadLength:
429266e564dSmrg            str = "BadLength";
430266e564dSmrg            break;
431266e564dSmrg        case IceBadValue:
432266e564dSmrg            str = "BadValue";
433266e564dSmrg            break;
434266e564dSmrg        case IceBadMajor:
435266e564dSmrg            str = "BadMajor";
436266e564dSmrg            break;
437266e564dSmrg        case IceNoAuth:
438266e564dSmrg            str = "NoAuthentication";
439266e564dSmrg            break;
440266e564dSmrg        case IceNoVersion:
441266e564dSmrg            str = "NoVersion";
442266e564dSmrg            break;
443266e564dSmrg        case IceSetupFailed:
444266e564dSmrg            str = "SetupFailed";
445266e564dSmrg            break;
446266e564dSmrg        case IceAuthRejected:
447266e564dSmrg            str = "AuthenticationRejected";
448266e564dSmrg            break;
449266e564dSmrg        case IceAuthFailed:
450266e564dSmrg            str = "AuthenticationFailed";
451266e564dSmrg            break;
452266e564dSmrg        case IceProtocolDuplicate:
453266e564dSmrg            str = "ProtocolDuplicate";
454266e564dSmrg            break;
455266e564dSmrg        case IceMajorOpcodeDuplicate:
456266e564dSmrg            str = "MajorOpcodeDuplicate";
457266e564dSmrg            break;
458266e564dSmrg        case IceUnknownProtocol:
459266e564dSmrg            str = "UnknownProtocol";
460266e564dSmrg            break;
461266e564dSmrg	default:
462266e564dSmrg	    str = "???";
463266e564dSmrg    }
464266e564dSmrg
465266e564dSmrg    fprintf (stderr, "            Error class               = %s\n", str);
466266e564dSmrg
467266e564dSmrg    if (severity == IceCanContinue)
468266e564dSmrg	str = "CanContinue";
469266e564dSmrg    else if (severity == IceFatalToProtocol)
470266e564dSmrg	str = "FatalToProtocol";
471266e564dSmrg    else if (severity == IceFatalToConnection)
472266e564dSmrg	str = "FatalToConnection";
473266e564dSmrg    else
474266e564dSmrg	str = "???";
475266e564dSmrg
476266e564dSmrg    fprintf (stderr, "            Severity                  = %s\n", str);
477266e564dSmrg
478266e564dSmrg    switch (errorClass)
479266e564dSmrg    {
480266e564dSmrg        case IceBadValue:
481266e564dSmrg        {
482266e564dSmrg	    int offset, length, val;
483266e564dSmrg
484266e564dSmrg	    EXTRACT_CARD32 (pData, swap, offset);
485266e564dSmrg	    EXTRACT_CARD32 (pData, swap, length);
486266e564dSmrg
487266e564dSmrg	    fprintf (stderr,
488266e564dSmrg		"            BadValue Offset           = %d\n", offset);
489266e564dSmrg	    fprintf (stderr,
490266e564dSmrg		"            BadValue Length           = %d\n", length);
491266e564dSmrg
492266e564dSmrg	    if (length <= 4)
493266e564dSmrg	    {
494266e564dSmrg		if (length == 1)
495266e564dSmrg		    val = (int) *pData;
496266e564dSmrg		else if (length == 2)
497266e564dSmrg		{
498266e564dSmrg		    EXTRACT_CARD16 (pData, swap, val);
499266e564dSmrg		}
500266e564dSmrg		else
501266e564dSmrg		{
502266e564dSmrg		    EXTRACT_CARD32 (pData, swap, val);
503266e564dSmrg		}
504266e564dSmrg
505266e564dSmrg		fprintf (stderr,
506266e564dSmrg	            "            BadValue                  = %d\n", val);
507266e564dSmrg	    }
508266e564dSmrg            break;
509266e564dSmrg	}
510266e564dSmrg
511266e564dSmrg        case IceBadMajor:
512266e564dSmrg
513266e564dSmrg	    fprintf (stderr, "Major opcode : %d\n", (int) *pData);
514266e564dSmrg            break;
515266e564dSmrg
516266e564dSmrg        case IceSetupFailed:
517266e564dSmrg
518266e564dSmrg	    EXTRACT_STRING (pData, swap, str);
519266e564dSmrg	    fprintf (stderr, "Reason : %s\n", str);
520266e564dSmrg	    free(str);
521266e564dSmrg            break;
522266e564dSmrg
523266e564dSmrg        case IceAuthRejected:
524266e564dSmrg
525266e564dSmrg	    EXTRACT_STRING (pData, swap, str);
526266e564dSmrg	    fprintf (stderr, "Reason : %s\n", str);
527266e564dSmrg	    free(str);
528266e564dSmrg            break;
529266e564dSmrg
530266e564dSmrg        case IceAuthFailed:
531266e564dSmrg
532266e564dSmrg	    EXTRACT_STRING (pData, swap, str);
533266e564dSmrg	    fprintf (stderr, "Reason : %s\n", str);
534266e564dSmrg	    free(str);
535266e564dSmrg            break;
536266e564dSmrg
537266e564dSmrg        case IceProtocolDuplicate:
538266e564dSmrg
539266e564dSmrg	    EXTRACT_STRING (pData, swap, str);
540266e564dSmrg	    fprintf (stderr, "Protocol name : %s\n", str);
541266e564dSmrg	    free(str);
542266e564dSmrg            break;
543266e564dSmrg
544266e564dSmrg        case IceMajorOpcodeDuplicate:
545266e564dSmrg
546266e564dSmrg	    fprintf (stderr, "Major opcode : %d\n", (int) *pData);
547266e564dSmrg            break;
548266e564dSmrg
549266e564dSmrg        case IceUnknownProtocol:
550266e564dSmrg
551266e564dSmrg	    EXTRACT_STRING (pData, swap, str);
552266e564dSmrg	    fprintf (stderr, "Protocol name : %s\n", str);
553266e564dSmrg	    free(str);
554266e564dSmrg            break;
555266e564dSmrg
556266e564dSmrg	default:
557266e564dSmrg	    break;
558266e564dSmrg    }
559266e564dSmrg
560266e564dSmrg    fprintf (stderr, "\n");
561266e564dSmrg
562266e564dSmrg    if (severity != IceCanContinue)
563266e564dSmrg	exit (1);
564266e564dSmrg}
565266e564dSmrg
566c5629e66SmrgIceErrorHandler   _IceErrorHandler   = _IceDefaultErrorHandler;
567266e564dSmrg
568266e564dSmrg
569266e564dSmrg/*
570266e564dSmrg * This procedure sets the ICE error handler to be the specified
571266e564dSmrg * routine.  If NULL is passed in the default error handler is restored.
572266e564dSmrg * The function's return value is the previous error handler.
573266e564dSmrg */
574266e564dSmrg
575266e564dSmrgIceErrorHandler
576c5629e66SmrgIceSetErrorHandler (
577c5629e66Smrg	IceErrorHandler handler
578c5629e66Smrg)
579266e564dSmrg{
580266e564dSmrg    IceErrorHandler oldHandler = _IceErrorHandler;
581266e564dSmrg
582266e564dSmrg    if (handler != NULL)
583266e564dSmrg	_IceErrorHandler = handler;
584266e564dSmrg    else
585266e564dSmrg	_IceErrorHandler = _IceDefaultErrorHandler;
586266e564dSmrg
587266e564dSmrg    return (oldHandler);
588266e564dSmrg}
589266e564dSmrg
590266e564dSmrg
591266e564dSmrg
592266e564dSmrg/*
593266e564dSmrg * Default IO error handler.
594266e564dSmrg */
595266e564dSmrg
596c5629e66Smrgstatic void
597c5629e66Smrg_IceDefaultIOErrorHandler (
598c5629e66Smrg	IceConn		iceConn
599c5629e66Smrg)
600266e564dSmrg{
601266e564dSmrg    fprintf (stderr,
602266e564dSmrg	"ICE default IO error handler doing an exit(), pid = %ld, errno = %d\n",
603266e564dSmrg	(long)getpid(), errno);
604266e564dSmrg
605266e564dSmrg    exit (1);
606266e564dSmrg}
607266e564dSmrg
608c5629e66SmrgIceIOErrorHandler _IceIOErrorHandler = _IceDefaultIOErrorHandler;
609266e564dSmrg
610266e564dSmrg
611266e564dSmrg/*
612266e564dSmrg * This procedure sets the ICE fatal I/O error handler to be the
613266e564dSmrg * specified routine.  If NULL is passed in the default error
614266e564dSmrg * handler is restored.   The function's return value is the
615266e564dSmrg * previous error handler.
616266e564dSmrg */
617266e564dSmrg
618266e564dSmrgIceIOErrorHandler
619c5629e66SmrgIceSetIOErrorHandler (
620c5629e66Smrg	IceIOErrorHandler handler
621c5629e66Smrg)
622266e564dSmrg{
623266e564dSmrg    IceIOErrorHandler oldHandler = _IceIOErrorHandler;
624266e564dSmrg
625266e564dSmrg    if (handler != NULL)
626266e564dSmrg	_IceIOErrorHandler = handler;
627266e564dSmrg    else
628266e564dSmrg	_IceIOErrorHandler = _IceDefaultIOErrorHandler;
629266e564dSmrg
630266e564dSmrg    return (oldHandler);
631266e564dSmrg}
632