#include <X11/SM/SMlib.h>
#include "SMlibint.h"
#include <stdio.h>
void
_SmcDefaultErrorHandler (smcConn, swap,
offendingMinorOpcode, offendingSequence,
errorClass, severity, values)
SmcConn smcConn;
Bool swap;
int offendingMinorOpcode;
unsigned long offendingSequence;
int errorClass;
int severity;
SmPointer values;
{
char *pData = (char *) values;
char *str;
switch (offendingMinorOpcode)
{
case SM_RegisterClient:
str = "RegisterClient";
break;
case SM_InteractRequest:
str = "InteractRequest";
break;
case SM_InteractDone:
str = "InteractDone";
break;
case SM_SaveYourselfDone:
str = "SaveYourselfDone";
break;
case SM_CloseConnection:
str = "CloseConnection";
break;
case SM_SetProperties:
str = "SetProperties";
break;
case SM_GetProperties:
str = "GetProperties";
break;
default:
str = "";
}
fprintf (stderr, "\n");
fprintf (stderr, "XSMP error: Offending minor opcode = %d (%s)\n",
offendingMinorOpcode, str);
fprintf (stderr, " Offending sequence number = %ld\n",
offendingSequence);
switch (errorClass)
{
case IceBadMinor:
str = "BadMinor";
break;
case IceBadState:
str = "BadState";
break;
case IceBadLength:
str = "BadLength";
break;
case IceBadValue:
str = "BadValue";
break;
default:
str = "???";
}
fprintf (stderr, " Error class = %s\n", str);
if (severity == IceCanContinue)
str = "CanContinue";
else if (severity == IceFatalToProtocol)
str = "FatalToProtocol";
else if (severity == IceFatalToConnection)
str = "FatalToConnection";
else
str = "???";
fprintf (stderr, " Severity = %s\n", str);
switch (errorClass)
{
case IceBadValue:
{
int offset, length, val;
EXTRACT_CARD32 (pData, swap, offset);
EXTRACT_CARD32 (pData, swap, length);
fprintf (stderr,
" BadValue Offset = %d\n", offset);
fprintf (stderr,
" BadValue Length = %d\n", length);
if (length <= 4)
{
if (length == 1)
val = (int) *pData;
else if (length == 2)
{
EXTRACT_CARD16 (pData, swap, val);
}
else
{
EXTRACT_CARD32 (pData, swap, val);
}
fprintf (stderr,
" BadValue = %d\n", val);
}
break;
}
default:
break;
}
fprintf (stderr, "\n");
if (severity != IceCanContinue)
exit (1);
}
void
_SmsDefaultErrorHandler (smsConn, swap,
offendingMinorOpcode, offendingSequence,
errorClass, severity, values)
SmsConn smsConn;
Bool swap;
int offendingMinorOpcode;
unsigned long offendingSequence;
int errorClass;
int severity;
SmPointer values;
{
char *pData = (char *) values;
char *str;
switch (offendingMinorOpcode)
{
case SM_SaveYourself:
str = "SaveYourself";
break;
case SM_Interact:
str = "Interact";
break;
case SM_Die:
str = "Die";
break;
case SM_ShutdownCancelled:
str = "ShutdownCancelled";
break;
default:
str = "";
}
fprintf (stderr, "\n");
fprintf (stderr, "XSMP error: Offending minor opcode = %d (%s)\n",
offendingMinorOpcode, str);
fprintf (stderr, " Offending sequence number = %ld\n",
offendingSequence);
switch (errorClass)
{
case IceBadMinor:
str = "BadMinor";
break;
case IceBadState:
str = "BadState";
break;
case IceBadLength:
str = "BadLength";
break;
case IceBadValue:
str = "BadValue";
break;
default:
str = "???";
}
fprintf (stderr, " Error class = %s\n", str);
if (severity == IceCanContinue)
str = "CanContinue";
else if (severity == IceFatalToProtocol)
str = "FatalToProtocol";
else if (severity == IceFatalToConnection)
str = "FatalToConnection";
else
str = "???";
fprintf (stderr, " Severity = %s\n", str);
switch (errorClass)
{
case IceBadValue:
{
int offset, length, val;
EXTRACT_CARD32 (pData, swap, offset);
EXTRACT_CARD32 (pData, swap, length);
fprintf (stderr,
" BadValue Offset = %d\n", offset);
fprintf (stderr,
" BadValue Length = %d\n", length);
if (length <= 4)
{
if (length == 1)
val = (int) *pData;
else if (length == 2)
{
EXTRACT_CARD16 (pData, swap, val);
}
else
{
EXTRACT_CARD32 (pData, swap, val);
}
fprintf (stderr,
" BadValue = %d\n", val);
}
break;
}
default:
break;
}
fprintf (stderr, "\n\n");
}
SmcErrorHandler
SmcSetErrorHandler (handler)
SmcErrorHandler handler;
{
SmcErrorHandler oldHandler = _SmcErrorHandler;
if (handler != NULL)
_SmcErrorHandler = handler;
else
_SmcErrorHandler = _SmcDefaultErrorHandler;
return (oldHandler);
}
SmsErrorHandler
SmsSetErrorHandler (handler)
SmsErrorHandler handler;
{
SmsErrorHandler oldHandler = _SmsErrorHandler;
if (handler != NULL)
_SmsErrorHandler = handler;
else
_SmsErrorHandler = _SmsDefaultErrorHandler;
return (oldHandler);
}