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)); 1873bf3b463Smrg if (pStart != NULL) 1883bf3b463Smrg { 1893bf3b463Smrg STORE_STRING (pBuf, reason); 1903bf3b463Smrg IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart); 1913bf3b463Smrg } 192266e564dSmrg IceFlush (iceConn); 193266e564dSmrg} 194266e564dSmrg 195266e564dSmrg 196266e564dSmrgvoid 197c5629e66Smrg_IceErrorAuthenticationRejected ( 198c5629e66Smrg IceConn iceConn, 199c5629e66Smrg int offendingMinor, 2009ef0b394Smrg const char *reason 201c5629e66Smrg) 202266e564dSmrg{ 203266e564dSmrg char *pBuf, *pStart; 204266e564dSmrg int bytes; 205266e564dSmrg 206266e564dSmrg if (!reason) 207266e564dSmrg reason = ""; 208266e564dSmrg bytes = STRING_BYTES (reason); 209266e564dSmrg 210266e564dSmrg IceErrorHeader (iceConn, 211266e564dSmrg 0, offendingMinor, 212266e564dSmrg iceConn->receive_sequence, 213266e564dSmrg IceFatalToProtocol, 214266e564dSmrg IceAuthRejected, 215266e564dSmrg WORD64COUNT (bytes)); 216266e564dSmrg 217266e564dSmrg pBuf = pStart = IceAllocScratch (iceConn, PADDED_BYTES64 (bytes)); 2183bf3b463Smrg if (pStart != NULL) 2193bf3b463Smrg { 2203bf3b463Smrg STORE_STRING (pBuf, reason); 2213bf3b463Smrg IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart); 2223bf3b463Smrg } 223266e564dSmrg IceFlush (iceConn); 224266e564dSmrg} 225266e564dSmrg 226266e564dSmrg 227266e564dSmrgvoid 228c5629e66Smrg_IceErrorAuthenticationFailed ( 229c5629e66Smrg IceConn iceConn, 230c5629e66Smrg int offendingMinor, 2319ef0b394Smrg const 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)); 2493bf3b463Smrg if (pStart != NULL) 2503bf3b463Smrg { 2513bf3b463Smrg STORE_STRING (pBuf, reason); 2523bf3b463Smrg IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart); 2533bf3b463Smrg } 254266e564dSmrg IceFlush (iceConn); 255266e564dSmrg} 256266e564dSmrg 257266e564dSmrg 258266e564dSmrgvoid 259c5629e66Smrg_IceErrorProtocolDuplicate ( 260c5629e66Smrg IceConn iceConn, 2619ef0b394Smrg const char *protocolName 262c5629e66Smrg) 263266e564dSmrg{ 264266e564dSmrg char *pBuf, *pStart; 265266e564dSmrg int bytes; 266266e564dSmrg 267266e564dSmrg if (!protocolName) 268266e564dSmrg protocolName = ""; 269266e564dSmrg bytes = STRING_BYTES (protocolName); 270266e564dSmrg 271266e564dSmrg IceErrorHeader (iceConn, 272266e564dSmrg 0, ICE_ProtocolSetup, 273266e564dSmrg iceConn->receive_sequence, 274266e564dSmrg IceFatalToProtocol, 275266e564dSmrg IceProtocolDuplicate, 276266e564dSmrg WORD64COUNT (bytes)); 277266e564dSmrg 278266e564dSmrg pBuf = pStart = IceAllocScratch (iceConn, PADDED_BYTES64 (bytes)); 2793bf3b463Smrg if (pStart != NULL) 2803bf3b463Smrg { 2813bf3b463Smrg STORE_STRING (pBuf, protocolName); 2823bf3b463Smrg IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart); 2833bf3b463Smrg } 284266e564dSmrg IceFlush (iceConn); 285266e564dSmrg} 286266e564dSmrg 287266e564dSmrg 288266e564dSmrgvoid 289c5629e66Smrg_IceErrorMajorOpcodeDuplicate ( 290c5629e66Smrg IceConn iceConn, 291c5629e66Smrg int majorOpcode 292c5629e66Smrg) 293266e564dSmrg{ 2949ef0b394Smrg char mOp[8] = { (char) majorOpcode }; 295266e564dSmrg 296266e564dSmrg IceErrorHeader (iceConn, 297266e564dSmrg 0, ICE_ProtocolSetup, 298266e564dSmrg iceConn->receive_sequence, 299266e564dSmrg IceFatalToProtocol, 300266e564dSmrg IceMajorOpcodeDuplicate, 301266e564dSmrg 1 /* length */); 302266e564dSmrg 3039ef0b394Smrg IceWriteData (iceConn, 8, mOp); 304266e564dSmrg IceFlush (iceConn); 305266e564dSmrg} 306266e564dSmrg 307266e564dSmrg 308266e564dSmrgvoid 309c5629e66Smrg_IceErrorUnknownProtocol ( 310c5629e66Smrg IceConn iceConn, 3119ef0b394Smrg const char *protocolName 312c5629e66Smrg) 313266e564dSmrg{ 314266e564dSmrg char *pBuf, *pStart; 315266e564dSmrg int bytes; 316266e564dSmrg 317266e564dSmrg if (!protocolName) 318266e564dSmrg protocolName = ""; 319266e564dSmrg bytes = STRING_BYTES (protocolName); 320266e564dSmrg 321266e564dSmrg IceErrorHeader (iceConn, 322266e564dSmrg 0, ICE_ProtocolSetup, 323266e564dSmrg iceConn->receive_sequence, 324266e564dSmrg IceFatalToProtocol, 325266e564dSmrg IceUnknownProtocol, 326266e564dSmrg WORD64COUNT (bytes)); 327266e564dSmrg 328266e564dSmrg pBuf = pStart = IceAllocScratch (iceConn, PADDED_BYTES64 (bytes)); 3293bf3b463Smrg if (pStart != NULL) 3303bf3b463Smrg { 3313bf3b463Smrg STORE_STRING (pBuf, protocolName); 3323bf3b463Smrg IceWriteData (iceConn, PADDED_BYTES64 (bytes), pStart); 3333bf3b463Smrg } 334266e564dSmrg IceFlush (iceConn); 335266e564dSmrg} 336266e564dSmrg 337266e564dSmrg 338266e564dSmrgvoid 339c5629e66Smrg_IceErrorBadMajor ( 340c5629e66Smrg IceConn iceConn, 341c5629e66Smrg int offendingMajor, 342c5629e66Smrg int offendingMinor, 343c5629e66Smrg int severity 344c5629e66Smrg) 345266e564dSmrg{ 3469ef0b394Smrg char maj[8] = { (char) offendingMajor }; 347266e564dSmrg 348266e564dSmrg IceErrorHeader (iceConn, 349266e564dSmrg 0, offendingMinor, 350266e564dSmrg iceConn->receive_sequence, 351266e564dSmrg severity, 352266e564dSmrg IceBadMajor, 353266e564dSmrg 1 /* length */); 354266e564dSmrg 3559ef0b394Smrg IceWriteData (iceConn, 8, maj); 356266e564dSmrg IceFlush (iceConn); 357266e564dSmrg} 358266e564dSmrg 359266e564dSmrg 360a3129944Smrg 361266e564dSmrg/* 362266e564dSmrg * Default error handler. 363266e564dSmrg */ 364266e564dSmrg 365c5629e66Smrgstatic void 366c5629e66Smrg_IceDefaultErrorHandler ( 367c5629e66Smrg IceConn iceConn, 368c5629e66Smrg Bool swap, 369c5629e66Smrg int offendingMinorOpcode, 370c5629e66Smrg unsigned long offendingSequence, 371c5629e66Smrg int errorClass, 372c5629e66Smrg int severity, 373c5629e66Smrg IcePointer values 374c5629e66Smrg) 375266e564dSmrg{ 3769ef0b394Smrg const char *str; 3779ef0b394Smrg char *estr; 378266e564dSmrg char *pData = (char *) values; 379266e564dSmrg 380266e564dSmrg switch (offendingMinorOpcode) 381266e564dSmrg { 382266e564dSmrg case ICE_ConnectionSetup: 383266e564dSmrg str = "ConnectionSetup"; 384266e564dSmrg break; 385266e564dSmrg case ICE_AuthRequired: 386266e564dSmrg str = "AuthRequired"; 387266e564dSmrg break; 388266e564dSmrg case ICE_AuthReply: 389266e564dSmrg str = "AuthReply"; 390266e564dSmrg break; 391266e564dSmrg case ICE_AuthNextPhase: 392266e564dSmrg str = "AuthNextPhase"; 393266e564dSmrg break; 394266e564dSmrg case ICE_ConnectionReply: 395266e564dSmrg str = "ConnectionReply"; 396266e564dSmrg break; 397266e564dSmrg case ICE_ProtocolSetup: 398266e564dSmrg str = "ProtocolSetup"; 399266e564dSmrg break; 400266e564dSmrg case ICE_ProtocolReply: 401266e564dSmrg str = "ProtocolReply"; 402266e564dSmrg break; 403266e564dSmrg case ICE_Ping: 404266e564dSmrg str = "Ping"; 405266e564dSmrg break; 406266e564dSmrg case ICE_PingReply: 407266e564dSmrg str = "PingReply"; 408266e564dSmrg break; 409266e564dSmrg case ICE_WantToClose: 410266e564dSmrg str = "WantToClose"; 411266e564dSmrg break; 412266e564dSmrg case ICE_NoClose: 413266e564dSmrg str = "NoClose"; 414266e564dSmrg break; 415266e564dSmrg default: 416266e564dSmrg str = ""; 417266e564dSmrg } 418266e564dSmrg 419266e564dSmrg fprintf (stderr, "\n"); 420266e564dSmrg 421266e564dSmrg fprintf (stderr, "ICE error: Offending minor opcode = %d (%s)\n", 422266e564dSmrg offendingMinorOpcode, str); 423266e564dSmrg 424266e564dSmrg fprintf (stderr, " Offending sequence number = %lu\n", 425266e564dSmrg offendingSequence); 426266e564dSmrg 427266e564dSmrg switch (errorClass) 428266e564dSmrg { 429266e564dSmrg case IceBadMinor: 430266e564dSmrg str = "BadMinor"; 431266e564dSmrg break; 432266e564dSmrg case IceBadState: 433266e564dSmrg str = "BadState"; 434266e564dSmrg break; 435266e564dSmrg case IceBadLength: 436266e564dSmrg str = "BadLength"; 437266e564dSmrg break; 438266e564dSmrg case IceBadValue: 439266e564dSmrg str = "BadValue"; 440266e564dSmrg break; 441266e564dSmrg case IceBadMajor: 442266e564dSmrg str = "BadMajor"; 443266e564dSmrg break; 444266e564dSmrg case IceNoAuth: 445266e564dSmrg str = "NoAuthentication"; 446266e564dSmrg break; 447266e564dSmrg case IceNoVersion: 448266e564dSmrg str = "NoVersion"; 449266e564dSmrg break; 450266e564dSmrg case IceSetupFailed: 451266e564dSmrg str = "SetupFailed"; 452266e564dSmrg break; 453266e564dSmrg case IceAuthRejected: 454266e564dSmrg str = "AuthenticationRejected"; 455266e564dSmrg break; 456266e564dSmrg case IceAuthFailed: 457266e564dSmrg str = "AuthenticationFailed"; 458266e564dSmrg break; 459266e564dSmrg case IceProtocolDuplicate: 460266e564dSmrg str = "ProtocolDuplicate"; 461266e564dSmrg break; 462266e564dSmrg case IceMajorOpcodeDuplicate: 463266e564dSmrg str = "MajorOpcodeDuplicate"; 464266e564dSmrg break; 465266e564dSmrg case IceUnknownProtocol: 466266e564dSmrg str = "UnknownProtocol"; 467266e564dSmrg break; 468266e564dSmrg default: 469266e564dSmrg str = "???"; 470266e564dSmrg } 471266e564dSmrg 472266e564dSmrg fprintf (stderr, " Error class = %s\n", str); 473266e564dSmrg 474266e564dSmrg if (severity == IceCanContinue) 475266e564dSmrg str = "CanContinue"; 476266e564dSmrg else if (severity == IceFatalToProtocol) 477266e564dSmrg str = "FatalToProtocol"; 478266e564dSmrg else if (severity == IceFatalToConnection) 479266e564dSmrg str = "FatalToConnection"; 480266e564dSmrg else 481266e564dSmrg str = "???"; 482266e564dSmrg 483266e564dSmrg fprintf (stderr, " Severity = %s\n", str); 484266e564dSmrg 485266e564dSmrg switch (errorClass) 486266e564dSmrg { 487266e564dSmrg case IceBadValue: 488266e564dSmrg { 489266e564dSmrg int offset, length, val; 490266e564dSmrg 491266e564dSmrg EXTRACT_CARD32 (pData, swap, offset); 492266e564dSmrg EXTRACT_CARD32 (pData, swap, length); 493266e564dSmrg 494266e564dSmrg fprintf (stderr, 495266e564dSmrg " BadValue Offset = %d\n", offset); 496266e564dSmrg fprintf (stderr, 497266e564dSmrg " BadValue Length = %d\n", length); 498266e564dSmrg 499266e564dSmrg if (length <= 4) 500266e564dSmrg { 501266e564dSmrg if (length == 1) 502266e564dSmrg val = (int) *pData; 503266e564dSmrg else if (length == 2) 504266e564dSmrg { 505266e564dSmrg EXTRACT_CARD16 (pData, swap, val); 506266e564dSmrg } 507266e564dSmrg else 508266e564dSmrg { 509266e564dSmrg EXTRACT_CARD32 (pData, swap, val); 510266e564dSmrg } 511266e564dSmrg 512266e564dSmrg fprintf (stderr, 513266e564dSmrg " BadValue = %d\n", val); 514266e564dSmrg } 515266e564dSmrg break; 516266e564dSmrg } 517266e564dSmrg 518266e564dSmrg case IceBadMajor: 519266e564dSmrg 520266e564dSmrg fprintf (stderr, "Major opcode : %d\n", (int) *pData); 521266e564dSmrg break; 522266e564dSmrg 523266e564dSmrg case IceSetupFailed: 524266e564dSmrg 5259ef0b394Smrg EXTRACT_STRING (pData, swap, estr); 5269ef0b394Smrg fprintf (stderr, "Reason : %s\n", estr); 5279ef0b394Smrg free(estr); 528266e564dSmrg break; 529266e564dSmrg 530266e564dSmrg case IceAuthRejected: 531266e564dSmrg 5329ef0b394Smrg EXTRACT_STRING (pData, swap, estr); 5339ef0b394Smrg fprintf (stderr, "Reason : %s\n", estr); 5349ef0b394Smrg free(estr); 535266e564dSmrg break; 536266e564dSmrg 537266e564dSmrg case IceAuthFailed: 538266e564dSmrg 5399ef0b394Smrg EXTRACT_STRING (pData, swap, estr); 5409ef0b394Smrg fprintf (stderr, "Reason : %s\n", estr); 5419ef0b394Smrg free(estr); 542266e564dSmrg break; 543266e564dSmrg 544266e564dSmrg case IceProtocolDuplicate: 545266e564dSmrg 5469ef0b394Smrg EXTRACT_STRING (pData, swap, estr); 5479ef0b394Smrg fprintf (stderr, "Protocol name : %s\n", estr); 5489ef0b394Smrg free(estr); 549266e564dSmrg break; 550266e564dSmrg 551266e564dSmrg case IceMajorOpcodeDuplicate: 552266e564dSmrg 5539ef0b394Smrg fprintf (stderr, "Major opcode : %d\n", (int) *pData); 554266e564dSmrg break; 555266e564dSmrg 556266e564dSmrg case IceUnknownProtocol: 557266e564dSmrg 5589ef0b394Smrg EXTRACT_STRING (pData, swap, estr); 5599ef0b394Smrg fprintf (stderr, "Protocol name : %s\n", estr); 5609ef0b394Smrg free(estr); 561266e564dSmrg break; 562266e564dSmrg 563266e564dSmrg default: 564266e564dSmrg break; 565266e564dSmrg } 566266e564dSmrg 567266e564dSmrg fprintf (stderr, "\n"); 568266e564dSmrg 569266e564dSmrg if (severity != IceCanContinue) 570266e564dSmrg exit (1); 571266e564dSmrg} 572266e564dSmrg 573c5629e66SmrgIceErrorHandler _IceErrorHandler = _IceDefaultErrorHandler; 574266e564dSmrg 575a3129944Smrg 5769ef0b394Smrg/* 577266e564dSmrg * This procedure sets the ICE error handler to be the specified 578266e564dSmrg * routine. If NULL is passed in the default error handler is restored. 579266e564dSmrg * The function's return value is the previous error handler. 580266e564dSmrg */ 5819ef0b394Smrg 582266e564dSmrgIceErrorHandler 583c5629e66SmrgIceSetErrorHandler ( 584c5629e66Smrg IceErrorHandler handler 585c5629e66Smrg) 586266e564dSmrg{ 587266e564dSmrg IceErrorHandler oldHandler = _IceErrorHandler; 588266e564dSmrg 589266e564dSmrg if (handler != NULL) 590266e564dSmrg _IceErrorHandler = handler; 591266e564dSmrg else 592266e564dSmrg _IceErrorHandler = _IceDefaultErrorHandler; 593266e564dSmrg 594266e564dSmrg return (oldHandler); 595266e564dSmrg} 596266e564dSmrg 597266e564dSmrg 598a3129944Smrg 599266e564dSmrg/* 600266e564dSmrg * Default IO error handler. 601266e564dSmrg */ 602266e564dSmrg 603c5629e66Smrgstatic void 604c5629e66Smrg_IceDefaultIOErrorHandler ( 605c5629e66Smrg IceConn iceConn 606c5629e66Smrg) 607266e564dSmrg{ 608266e564dSmrg fprintf (stderr, 609266e564dSmrg "ICE default IO error handler doing an exit(), pid = %ld, errno = %d\n", 610266e564dSmrg (long)getpid(), errno); 611266e564dSmrg 612266e564dSmrg exit (1); 613266e564dSmrg} 614266e564dSmrg 615c5629e66SmrgIceIOErrorHandler _IceIOErrorHandler = _IceDefaultIOErrorHandler; 616266e564dSmrg 617a3129944Smrg 6189ef0b394Smrg/* 619266e564dSmrg * This procedure sets the ICE fatal I/O error handler to be the 620266e564dSmrg * specified routine. If NULL is passed in the default error 621266e564dSmrg * handler is restored. The function's return value is the 622266e564dSmrg * previous error handler. 623266e564dSmrg */ 6249ef0b394Smrg 625266e564dSmrgIceIOErrorHandler 626c5629e66SmrgIceSetIOErrorHandler ( 627c5629e66Smrg IceIOErrorHandler handler 628c5629e66Smrg) 629266e564dSmrg{ 630266e564dSmrg IceIOErrorHandler oldHandler = _IceIOErrorHandler; 631266e564dSmrg 632266e564dSmrg if (handler != NULL) 633266e564dSmrg _IceIOErrorHandler = handler; 634266e564dSmrg else 635266e564dSmrg _IceIOErrorHandler = _IceDefaultIOErrorHandler; 636266e564dSmrg 637266e564dSmrg return (oldHandler); 638266e564dSmrg} 639