error.c revision a3129944
1266e564dSmrg/****************************************************************************** 2266e564dSmrg 3266e564dSmrg 4266e564dSmrgCopyright 1993, 1998 The Open Group 5266e564dSmrg 6266e564dSmrgPermission to use, copy, modify, distribute, and sell this software and its 7266e564dSmrgdocumentation for any purpose is hereby granted without fee, provided that 8266e564dSmrgthe above copyright notice appear in all copies and that both that 9266e564dSmrgcopyright notice and this permission notice appear in supporting 10266e564dSmrgdocumentation. 11266e564dSmrg 12266e564dSmrgThe above copyright notice and this permission notice shall be included in 13266e564dSmrgall copies or substantial portions of the Software. 14266e564dSmrg 15266e564dSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16266e564dSmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17266e564dSmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18266e564dSmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 19266e564dSmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20266e564dSmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21266e564dSmrg 22266e564dSmrgExcept as contained in this notice, the name of The Open Group shall not be 23266e564dSmrgused in advertising or otherwise to promote the sale, use or other dealings 24266e564dSmrgin this Software without prior written authorization from The Open Group. 25266e564dSmrg 26266e564dSmrgAuthor: Ralph Mor, X Consortium 27266e564dSmrg******************************************************************************/ 28266e564dSmrg 29266e564dSmrg#ifdef HAVE_CONFIG_H 30266e564dSmrg#include <config.h> 31266e564dSmrg#endif 32266e564dSmrg#include <X11/ICE/ICElib.h> 33266e564dSmrg#include "ICElibint.h" 34266e564dSmrg#include <stdio.h> 35a3129944Smrg#include <unistd.h> 36266e564dSmrg#include <errno.h> 37266e564dSmrg 38266e564dSmrgvoid 39c5629e66Smrg_IceErrorBadMinor ( 40c5629e66Smrg IceConn iceConn, 41c5629e66Smrg int majorOpcode, 42c5629e66Smrg int offendingMinor, 43c5629e66Smrg int severity 44c5629e66Smrg) 45266e564dSmrg{ 46266e564dSmrg IceErrorHeader (iceConn, 47266e564dSmrg majorOpcode, offendingMinor, 48266e564dSmrg iceConn->receive_sequence, 49266e564dSmrg severity, 50266e564dSmrg IceBadMinor, 51266e564dSmrg 0); 52266e564dSmrg 53266e564dSmrg IceFlush (iceConn); 54266e564dSmrg} 55266e564dSmrg 56266e564dSmrg 57266e564dSmrgvoid 58c5629e66Smrg_IceErrorBadState ( 59c5629e66Smrg IceConn iceConn, 60c5629e66Smrg int majorOpcode, 61c5629e66Smrg int offendingMinor, 62c5629e66Smrg int severity 63c5629e66Smrg) 64266e564dSmrg{ 65266e564dSmrg IceErrorHeader (iceConn, 66266e564dSmrg majorOpcode, offendingMinor, 67266e564dSmrg iceConn->receive_sequence, 68266e564dSmrg severity, 69266e564dSmrg IceBadState, 70266e564dSmrg 0); 71266e564dSmrg 72266e564dSmrg IceFlush (iceConn); 73266e564dSmrg} 74266e564dSmrg 75266e564dSmrg 76266e564dSmrgvoid 77c5629e66Smrg_IceErrorBadLength ( 78c5629e66Smrg IceConn iceConn, 79c5629e66Smrg int majorOpcode, 80c5629e66Smrg int offendingMinor, 81c5629e66Smrg int severity 82c5629e66Smrg) 83266e564dSmrg{ 84266e564dSmrg IceErrorHeader (iceConn, 85266e564dSmrg majorOpcode, offendingMinor, 86266e564dSmrg iceConn->receive_sequence, 87266e564dSmrg severity, 88266e564dSmrg IceBadLength, 89266e564dSmrg 0); 90266e564dSmrg 91266e564dSmrg IceFlush (iceConn); 92266e564dSmrg} 93266e564dSmrg 94266e564dSmrg 95266e564dSmrgvoid 96c5629e66Smrg_IceErrorBadValue ( 97c5629e66Smrg IceConn iceConn, 98c5629e66Smrg int majorOpcode, 99c5629e66Smrg int offendingMinor, 100c5629e66Smrg int offset, 101c5629e66Smrg int length, /* in bytes */ 102c5629e66Smrg IcePointer value 103c5629e66Smrg) 104266e564dSmrg{ 105266e564dSmrg IceErrorHeader (iceConn, 106266e564dSmrg majorOpcode, offendingMinor, 107266e564dSmrg iceConn->receive_sequence, 108266e564dSmrg IceCanContinue, 109266e564dSmrg IceBadValue, 110266e564dSmrg WORD64COUNT (8 + length)); 111266e564dSmrg 112266e564dSmrg IceWriteData32 (iceConn, 4, &offset); 113266e564dSmrg IceWriteData32 (iceConn, 4, &length); 114266e564dSmrg IceWriteData (iceConn, length, (char *) value); 115266e564dSmrg 116266e564dSmrg if (PAD64 (length)) 117266e564dSmrg IceWritePad (iceConn, PAD64 (length)); 1189ef0b394Smrg 119266e564dSmrg IceFlush (iceConn); 120266e564dSmrg} 121266e564dSmrg 122266e564dSmrg 123266e564dSmrgvoid 124c5629e66Smrg_IceErrorNoAuthentication ( 125c5629e66Smrg IceConn iceConn, 126c5629e66Smrg int offendingMinor 127c5629e66Smrg) 128266e564dSmrg{ 129266e564dSmrg int severity = (offendingMinor == ICE_ConnectionSetup) ? 130266e564dSmrg IceFatalToConnection : IceFatalToProtocol; 131266e564dSmrg 132266e564dSmrg IceErrorHeader (iceConn, 133266e564dSmrg 0, offendingMinor, 134266e564dSmrg iceConn->receive_sequence, 135266e564dSmrg severity, 136266e564dSmrg IceNoAuth, 137266e564dSmrg 0); 138266e564dSmrg 139266e564dSmrg IceFlush (iceConn); 140266e564dSmrg} 141266e564dSmrg 142266e564dSmrg 143266e564dSmrgvoid 144c5629e66Smrg_IceErrorNoVersion ( 145c5629e66Smrg IceConn iceConn, 146c5629e66Smrg int offendingMinor 147c5629e66Smrg) 148266e564dSmrg{ 149266e564dSmrg int severity = (offendingMinor == ICE_ConnectionSetup) ? 150266e564dSmrg IceFatalToConnection : IceFatalToProtocol; 151266e564dSmrg 152266e564dSmrg IceErrorHeader (iceConn, 153266e564dSmrg 0, offendingMinor, 154266e564dSmrg iceConn->receive_sequence, 155266e564dSmrg severity, 156266e564dSmrg IceNoVersion, 157266e564dSmrg 0); 158266e564dSmrg 159266e564dSmrg IceFlush (iceConn); 160266e564dSmrg} 161266e564dSmrg 162266e564dSmrg 163266e564dSmrgvoid 164c5629e66Smrg_IceErrorSetupFailed ( 165c5629e66Smrg IceConn iceConn, 166c5629e66Smrg int offendingMinor, 1679ef0b394Smrg const char *reason 168c5629e66Smrg) 169266e564dSmrg{ 170266e564dSmrg char *pBuf, *pStart; 171266e564dSmrg int bytes; 172266e564dSmrg int severity = (offendingMinor == ICE_ConnectionSetup) ? 173266e564dSmrg IceFatalToConnection : IceFatalToProtocol; 174266e564dSmrg 175266e564dSmrg if (!reason) 176266e564dSmrg reason = ""; 177266e564dSmrg bytes = STRING_BYTES (reason); 178266e564dSmrg 179266e564dSmrg IceErrorHeader (iceConn, 180266e564dSmrg 0, offendingMinor, 181266e564dSmrg iceConn->receive_sequence, 182266e564dSmrg severity, 183266e564dSmrg IceSetupFailed, 184266e564dSmrg WORD64COUNT (bytes)); 185266e564dSmrg 186266e564dSmrg pBuf = pStart = IceAllocScratch (iceConn, PADDED_BYTES64 (bytes)); 187266e564dSmrg STORE_STRING (pBuf, reason); 188266e564dSmrg 189266e564dSmrg IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart); 190266e564dSmrg IceFlush (iceConn); 191266e564dSmrg} 192266e564dSmrg 193266e564dSmrg 194266e564dSmrgvoid 195c5629e66Smrg_IceErrorAuthenticationRejected ( 196c5629e66Smrg IceConn iceConn, 197c5629e66Smrg int offendingMinor, 1989ef0b394Smrg const char *reason 199c5629e66Smrg) 200266e564dSmrg{ 201266e564dSmrg char *pBuf, *pStart; 202266e564dSmrg int bytes; 203266e564dSmrg 204266e564dSmrg if (!reason) 205266e564dSmrg reason = ""; 206266e564dSmrg bytes = STRING_BYTES (reason); 207266e564dSmrg 208266e564dSmrg IceErrorHeader (iceConn, 209266e564dSmrg 0, offendingMinor, 210266e564dSmrg iceConn->receive_sequence, 211266e564dSmrg IceFatalToProtocol, 212266e564dSmrg IceAuthRejected, 213266e564dSmrg WORD64COUNT (bytes)); 214266e564dSmrg 215266e564dSmrg pBuf = pStart = IceAllocScratch (iceConn, PADDED_BYTES64 (bytes)); 216266e564dSmrg STORE_STRING (pBuf, reason); 217266e564dSmrg 218266e564dSmrg IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart); 219266e564dSmrg IceFlush (iceConn); 220266e564dSmrg} 221266e564dSmrg 222266e564dSmrg 223266e564dSmrgvoid 224c5629e66Smrg_IceErrorAuthenticationFailed ( 225c5629e66Smrg IceConn iceConn, 226c5629e66Smrg int offendingMinor, 2279ef0b394Smrg const char *reason 228c5629e66Smrg) 229266e564dSmrg{ 230266e564dSmrg char *pBuf, *pStart; 231266e564dSmrg int bytes; 232266e564dSmrg 233266e564dSmrg if (!reason) 234266e564dSmrg reason = ""; 235266e564dSmrg bytes = STRING_BYTES (reason); 236266e564dSmrg 237266e564dSmrg IceErrorHeader (iceConn, 238266e564dSmrg 0, offendingMinor, 239266e564dSmrg iceConn->receive_sequence, 240266e564dSmrg IceFatalToProtocol, 241266e564dSmrg IceAuthFailed, 242266e564dSmrg WORD64COUNT (bytes)); 243266e564dSmrg 244266e564dSmrg pBuf = pStart = IceAllocScratch (iceConn, PADDED_BYTES64 (bytes)); 245266e564dSmrg STORE_STRING (pBuf, reason); 246266e564dSmrg 247266e564dSmrg IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart); 248266e564dSmrg IceFlush (iceConn); 249266e564dSmrg} 250266e564dSmrg 251266e564dSmrg 252266e564dSmrgvoid 253c5629e66Smrg_IceErrorProtocolDuplicate ( 254c5629e66Smrg IceConn iceConn, 2559ef0b394Smrg const char *protocolName 256c5629e66Smrg) 257266e564dSmrg{ 258266e564dSmrg char *pBuf, *pStart; 259266e564dSmrg int bytes; 260266e564dSmrg 261266e564dSmrg if (!protocolName) 262266e564dSmrg protocolName = ""; 263266e564dSmrg bytes = STRING_BYTES (protocolName); 264266e564dSmrg 265266e564dSmrg IceErrorHeader (iceConn, 266266e564dSmrg 0, ICE_ProtocolSetup, 267266e564dSmrg iceConn->receive_sequence, 268266e564dSmrg IceFatalToProtocol, 269266e564dSmrg IceProtocolDuplicate, 270266e564dSmrg WORD64COUNT (bytes)); 271266e564dSmrg 272266e564dSmrg pBuf = pStart = IceAllocScratch (iceConn, PADDED_BYTES64 (bytes)); 273266e564dSmrg STORE_STRING (pBuf, protocolName); 274266e564dSmrg 275266e564dSmrg IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart); 276266e564dSmrg IceFlush (iceConn); 277266e564dSmrg} 278266e564dSmrg 279266e564dSmrg 280266e564dSmrgvoid 281c5629e66Smrg_IceErrorMajorOpcodeDuplicate ( 282c5629e66Smrg IceConn iceConn, 283c5629e66Smrg int majorOpcode 284c5629e66Smrg) 285266e564dSmrg{ 2869ef0b394Smrg char mOp[8] = { (char) majorOpcode }; 287266e564dSmrg 288266e564dSmrg IceErrorHeader (iceConn, 289266e564dSmrg 0, ICE_ProtocolSetup, 290266e564dSmrg iceConn->receive_sequence, 291266e564dSmrg IceFatalToProtocol, 292266e564dSmrg IceMajorOpcodeDuplicate, 293266e564dSmrg 1 /* length */); 294266e564dSmrg 2959ef0b394Smrg IceWriteData (iceConn, 8, mOp); 296266e564dSmrg IceFlush (iceConn); 297266e564dSmrg} 298266e564dSmrg 299266e564dSmrg 300266e564dSmrgvoid 301c5629e66Smrg_IceErrorUnknownProtocol ( 302c5629e66Smrg IceConn iceConn, 3039ef0b394Smrg const char *protocolName 304c5629e66Smrg) 305266e564dSmrg{ 306266e564dSmrg char *pBuf, *pStart; 307266e564dSmrg int bytes; 308266e564dSmrg 309266e564dSmrg if (!protocolName) 310266e564dSmrg protocolName = ""; 311266e564dSmrg bytes = STRING_BYTES (protocolName); 312266e564dSmrg 313266e564dSmrg IceErrorHeader (iceConn, 314266e564dSmrg 0, ICE_ProtocolSetup, 315266e564dSmrg iceConn->receive_sequence, 316266e564dSmrg IceFatalToProtocol, 317266e564dSmrg IceUnknownProtocol, 318266e564dSmrg WORD64COUNT (bytes)); 319266e564dSmrg 320266e564dSmrg pBuf = pStart = IceAllocScratch (iceConn, PADDED_BYTES64 (bytes)); 321266e564dSmrg STORE_STRING (pBuf, protocolName); 322266e564dSmrg 323266e564dSmrg IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart); 324266e564dSmrg IceFlush (iceConn); 325266e564dSmrg} 326266e564dSmrg 327266e564dSmrg 328266e564dSmrgvoid 329c5629e66Smrg_IceErrorBadMajor ( 330c5629e66Smrg IceConn iceConn, 331c5629e66Smrg int offendingMajor, 332c5629e66Smrg int offendingMinor, 333c5629e66Smrg int severity 334c5629e66Smrg) 335266e564dSmrg{ 3369ef0b394Smrg char maj[8] = { (char) offendingMajor }; 337266e564dSmrg 338266e564dSmrg IceErrorHeader (iceConn, 339266e564dSmrg 0, offendingMinor, 340266e564dSmrg iceConn->receive_sequence, 341266e564dSmrg severity, 342266e564dSmrg IceBadMajor, 343266e564dSmrg 1 /* length */); 344266e564dSmrg 3459ef0b394Smrg IceWriteData (iceConn, 8, maj); 346266e564dSmrg IceFlush (iceConn); 347266e564dSmrg} 348266e564dSmrg 349266e564dSmrg 350a3129944Smrg 351266e564dSmrg/* 352266e564dSmrg * Default error handler. 353266e564dSmrg */ 354266e564dSmrg 355c5629e66Smrgstatic void 356c5629e66Smrg_IceDefaultErrorHandler ( 357c5629e66Smrg IceConn iceConn, 358c5629e66Smrg Bool swap, 359c5629e66Smrg int offendingMinorOpcode, 360c5629e66Smrg unsigned long offendingSequence, 361c5629e66Smrg int errorClass, 362c5629e66Smrg int severity, 363c5629e66Smrg IcePointer values 364c5629e66Smrg) 365266e564dSmrg{ 3669ef0b394Smrg const char *str; 3679ef0b394Smrg char *estr; 368266e564dSmrg char *pData = (char *) values; 369266e564dSmrg 370266e564dSmrg switch (offendingMinorOpcode) 371266e564dSmrg { 372266e564dSmrg case ICE_ConnectionSetup: 373266e564dSmrg str = "ConnectionSetup"; 374266e564dSmrg break; 375266e564dSmrg case ICE_AuthRequired: 376266e564dSmrg str = "AuthRequired"; 377266e564dSmrg break; 378266e564dSmrg case ICE_AuthReply: 379266e564dSmrg str = "AuthReply"; 380266e564dSmrg break; 381266e564dSmrg case ICE_AuthNextPhase: 382266e564dSmrg str = "AuthNextPhase"; 383266e564dSmrg break; 384266e564dSmrg case ICE_ConnectionReply: 385266e564dSmrg str = "ConnectionReply"; 386266e564dSmrg break; 387266e564dSmrg case ICE_ProtocolSetup: 388266e564dSmrg str = "ProtocolSetup"; 389266e564dSmrg break; 390266e564dSmrg case ICE_ProtocolReply: 391266e564dSmrg str = "ProtocolReply"; 392266e564dSmrg break; 393266e564dSmrg case ICE_Ping: 394266e564dSmrg str = "Ping"; 395266e564dSmrg break; 396266e564dSmrg case ICE_PingReply: 397266e564dSmrg str = "PingReply"; 398266e564dSmrg break; 399266e564dSmrg case ICE_WantToClose: 400266e564dSmrg str = "WantToClose"; 401266e564dSmrg break; 402266e564dSmrg case ICE_NoClose: 403266e564dSmrg str = "NoClose"; 404266e564dSmrg break; 405266e564dSmrg default: 406266e564dSmrg str = ""; 407266e564dSmrg } 408266e564dSmrg 409266e564dSmrg fprintf (stderr, "\n"); 410266e564dSmrg 411266e564dSmrg fprintf (stderr, "ICE error: Offending minor opcode = %d (%s)\n", 412266e564dSmrg offendingMinorOpcode, str); 413266e564dSmrg 414266e564dSmrg fprintf (stderr, " Offending sequence number = %lu\n", 415266e564dSmrg offendingSequence); 416266e564dSmrg 417266e564dSmrg switch (errorClass) 418266e564dSmrg { 419266e564dSmrg case IceBadMinor: 420266e564dSmrg str = "BadMinor"; 421266e564dSmrg break; 422266e564dSmrg case IceBadState: 423266e564dSmrg str = "BadState"; 424266e564dSmrg break; 425266e564dSmrg case IceBadLength: 426266e564dSmrg str = "BadLength"; 427266e564dSmrg break; 428266e564dSmrg case IceBadValue: 429266e564dSmrg str = "BadValue"; 430266e564dSmrg break; 431266e564dSmrg case IceBadMajor: 432266e564dSmrg str = "BadMajor"; 433266e564dSmrg break; 434266e564dSmrg case IceNoAuth: 435266e564dSmrg str = "NoAuthentication"; 436266e564dSmrg break; 437266e564dSmrg case IceNoVersion: 438266e564dSmrg str = "NoVersion"; 439266e564dSmrg break; 440266e564dSmrg case IceSetupFailed: 441266e564dSmrg str = "SetupFailed"; 442266e564dSmrg break; 443266e564dSmrg case IceAuthRejected: 444266e564dSmrg str = "AuthenticationRejected"; 445266e564dSmrg break; 446266e564dSmrg case IceAuthFailed: 447266e564dSmrg str = "AuthenticationFailed"; 448266e564dSmrg break; 449266e564dSmrg case IceProtocolDuplicate: 450266e564dSmrg str = "ProtocolDuplicate"; 451266e564dSmrg break; 452266e564dSmrg case IceMajorOpcodeDuplicate: 453266e564dSmrg str = "MajorOpcodeDuplicate"; 454266e564dSmrg break; 455266e564dSmrg case IceUnknownProtocol: 456266e564dSmrg str = "UnknownProtocol"; 457266e564dSmrg break; 458266e564dSmrg default: 459266e564dSmrg str = "???"; 460266e564dSmrg } 461266e564dSmrg 462266e564dSmrg fprintf (stderr, " Error class = %s\n", str); 463266e564dSmrg 464266e564dSmrg if (severity == IceCanContinue) 465266e564dSmrg str = "CanContinue"; 466266e564dSmrg else if (severity == IceFatalToProtocol) 467266e564dSmrg str = "FatalToProtocol"; 468266e564dSmrg else if (severity == IceFatalToConnection) 469266e564dSmrg str = "FatalToConnection"; 470266e564dSmrg else 471266e564dSmrg str = "???"; 472266e564dSmrg 473266e564dSmrg fprintf (stderr, " Severity = %s\n", str); 474266e564dSmrg 475266e564dSmrg switch (errorClass) 476266e564dSmrg { 477266e564dSmrg case IceBadValue: 478266e564dSmrg { 479266e564dSmrg int offset, length, val; 480266e564dSmrg 481266e564dSmrg EXTRACT_CARD32 (pData, swap, offset); 482266e564dSmrg EXTRACT_CARD32 (pData, swap, length); 483266e564dSmrg 484266e564dSmrg fprintf (stderr, 485266e564dSmrg " BadValue Offset = %d\n", offset); 486266e564dSmrg fprintf (stderr, 487266e564dSmrg " BadValue Length = %d\n", length); 488266e564dSmrg 489266e564dSmrg if (length <= 4) 490266e564dSmrg { 491266e564dSmrg if (length == 1) 492266e564dSmrg val = (int) *pData; 493266e564dSmrg else if (length == 2) 494266e564dSmrg { 495266e564dSmrg EXTRACT_CARD16 (pData, swap, val); 496266e564dSmrg } 497266e564dSmrg else 498266e564dSmrg { 499266e564dSmrg EXTRACT_CARD32 (pData, swap, val); 500266e564dSmrg } 501266e564dSmrg 502266e564dSmrg fprintf (stderr, 503266e564dSmrg " BadValue = %d\n", val); 504266e564dSmrg } 505266e564dSmrg break; 506266e564dSmrg } 507266e564dSmrg 508266e564dSmrg case IceBadMajor: 509266e564dSmrg 510266e564dSmrg fprintf (stderr, "Major opcode : %d\n", (int) *pData); 511266e564dSmrg break; 512266e564dSmrg 513266e564dSmrg case IceSetupFailed: 514266e564dSmrg 5159ef0b394Smrg EXTRACT_STRING (pData, swap, estr); 5169ef0b394Smrg fprintf (stderr, "Reason : %s\n", estr); 5179ef0b394Smrg free(estr); 518266e564dSmrg break; 519266e564dSmrg 520266e564dSmrg case IceAuthRejected: 521266e564dSmrg 5229ef0b394Smrg EXTRACT_STRING (pData, swap, estr); 5239ef0b394Smrg fprintf (stderr, "Reason : %s\n", estr); 5249ef0b394Smrg free(estr); 525266e564dSmrg break; 526266e564dSmrg 527266e564dSmrg case IceAuthFailed: 528266e564dSmrg 5299ef0b394Smrg EXTRACT_STRING (pData, swap, estr); 5309ef0b394Smrg fprintf (stderr, "Reason : %s\n", estr); 5319ef0b394Smrg free(estr); 532266e564dSmrg break; 533266e564dSmrg 534266e564dSmrg case IceProtocolDuplicate: 535266e564dSmrg 5369ef0b394Smrg EXTRACT_STRING (pData, swap, estr); 5379ef0b394Smrg fprintf (stderr, "Protocol name : %s\n", estr); 5389ef0b394Smrg free(estr); 539266e564dSmrg break; 540266e564dSmrg 541266e564dSmrg case IceMajorOpcodeDuplicate: 542266e564dSmrg 5439ef0b394Smrg fprintf (stderr, "Major opcode : %d\n", (int) *pData); 544266e564dSmrg break; 545266e564dSmrg 546266e564dSmrg case IceUnknownProtocol: 547266e564dSmrg 5489ef0b394Smrg EXTRACT_STRING (pData, swap, estr); 5499ef0b394Smrg fprintf (stderr, "Protocol name : %s\n", estr); 5509ef0b394Smrg free(estr); 551266e564dSmrg break; 552266e564dSmrg 553266e564dSmrg default: 554266e564dSmrg break; 555266e564dSmrg } 556266e564dSmrg 557266e564dSmrg fprintf (stderr, "\n"); 558266e564dSmrg 559266e564dSmrg if (severity != IceCanContinue) 560266e564dSmrg exit (1); 561266e564dSmrg} 562266e564dSmrg 563c5629e66SmrgIceErrorHandler _IceErrorHandler = _IceDefaultErrorHandler; 564266e564dSmrg 565a3129944Smrg 5669ef0b394Smrg/* 567266e564dSmrg * This procedure sets the ICE error handler to be the specified 568266e564dSmrg * routine. If NULL is passed in the default error handler is restored. 569266e564dSmrg * The function's return value is the previous error handler. 570266e564dSmrg */ 5719ef0b394Smrg 572266e564dSmrgIceErrorHandler 573c5629e66SmrgIceSetErrorHandler ( 574c5629e66Smrg IceErrorHandler handler 575c5629e66Smrg) 576266e564dSmrg{ 577266e564dSmrg IceErrorHandler oldHandler = _IceErrorHandler; 578266e564dSmrg 579266e564dSmrg if (handler != NULL) 580266e564dSmrg _IceErrorHandler = handler; 581266e564dSmrg else 582266e564dSmrg _IceErrorHandler = _IceDefaultErrorHandler; 583266e564dSmrg 584266e564dSmrg return (oldHandler); 585266e564dSmrg} 586266e564dSmrg 587266e564dSmrg 588a3129944Smrg 589266e564dSmrg/* 590266e564dSmrg * Default IO error handler. 591266e564dSmrg */ 592266e564dSmrg 593c5629e66Smrgstatic void 594c5629e66Smrg_IceDefaultIOErrorHandler ( 595c5629e66Smrg IceConn iceConn 596c5629e66Smrg) 597266e564dSmrg{ 598266e564dSmrg fprintf (stderr, 599266e564dSmrg "ICE default IO error handler doing an exit(), pid = %ld, errno = %d\n", 600266e564dSmrg (long)getpid(), errno); 601266e564dSmrg 602266e564dSmrg exit (1); 603266e564dSmrg} 604266e564dSmrg 605c5629e66SmrgIceIOErrorHandler _IceIOErrorHandler = _IceDefaultIOErrorHandler; 606266e564dSmrg 607a3129944Smrg 6089ef0b394Smrg/* 609266e564dSmrg * This procedure sets the ICE fatal I/O error handler to be the 610266e564dSmrg * specified routine. If NULL is passed in the default error 611266e564dSmrg * handler is restored. The function's return value is the 612266e564dSmrg * previous error handler. 613266e564dSmrg */ 6149ef0b394Smrg 615266e564dSmrgIceIOErrorHandler 616c5629e66SmrgIceSetIOErrorHandler ( 617c5629e66Smrg IceIOErrorHandler handler 618c5629e66Smrg) 619266e564dSmrg{ 620266e564dSmrg IceIOErrorHandler oldHandler = _IceIOErrorHandler; 621266e564dSmrg 622266e564dSmrg if (handler != NULL) 623266e564dSmrg _IceIOErrorHandler = handler; 624266e564dSmrg else 625266e564dSmrg _IceIOErrorHandler = _IceDefaultIOErrorHandler; 626266e564dSmrg 627266e564dSmrg return (oldHandler); 628266e564dSmrg} 629