4.4BSD/usr/src/contrib/xns/examples/filing/errmsg.c
/* $Header: errmsg.c,v 2.2 87/03/07 14:44:42 jqj Exp $ */
/* $Log: errmsg.c,v $
* Revision 2.2 87/03/07 14:44:42 jqj
* set problem correctly. Cardinal != Enum on most UNIX systems
*
* Revision 2.1 86/06/02 07:10:30 jqj
* print more information on unspecifiedError
*
* Revision 2.0 85/11/21 07:22:44 jqj
* 4.3BSD standard release
*
* Revision 1.1 85/11/20 14:19:04 jqj
* Initial revision
*
*/
#include "Filing4_defs.h"
FilingErrMsg(Code, Message)
int Code;
char *Message;
{
static char *errmsgs[] = {
"AttributeTypeError",
"AttributeValueError",
"ControlTypeError",
"ControlValueError",
"ScopeTypeError",
"ScopeValueError",
"AccessError",
"AuthenticationError",
"ConnectionError",
"HandleError",
"InsertionError",
"ServiceError",
"SessionError",
"SpaceError",
"TransferError",
"UndefinedError",
"RangeError" };
static char *argproblems[] = {
"illegal",
"disallowed",
"unreasonable",
"unimplemented",
"duplicated",
"missing" };
static char *accessproblems[] = {
"accessRightsInsufficient",
"accessRightsIndeterminate",
"fileChanged",
"fileDamaged",
"fileInUse",
"fileNotFound",
"fileOpen" };
static char *connectionproblems[] = {
"noRoute",
"noResponse",
"transmissionHardware",
"transportTimeout",
"tooManyLocalConnections",
"tooManyRemoteConnections",
"missingCourier",
"missingProgram",
"missingProcedure",
"protocolMismatch",
"parameterInconsistency",
"invalidMessage",
"returnTimedOut",
"otherCallProblem" };
static char* handleproblems[] = {
"invalid",
"nullDisallowed",
"directoryRequired" };
static char *insertionproblems[] = {
"positionUnavailable",
"fileNotUnique",
"loopInHierarchy" };
static char *serviceproblems[] = {
"cannotAuthenticate",
"serviceFull",
"serviceUnavailable",
"sessionInUse" };
static char *sessionproblems[] = {
"tokenInvalid",
"serviceAlreadySet" };
static char *spaceproblems[] = {
"allocationExceeded",
"attributeAreadFull",
"mediumFull" };
static char *transferproblems[] = {
"aborted",
"checksumIncorrect",
"formatIncorrect",
"noRendevous",
"wrongDirection" };
static char *authenticationproblems[] = {
"credentialsInvalid",
"verifierInvalid",
"verifierExpiered",
"verifierReused",
"credentialsExpired",
"inappropriateCredentials" };
static char *rejectproblem[] = {
"noSuchProgramNumber",
"noSuchVersionNumber",
"noSuchProcedureValue",
"invalidArgument" };
char *msg, *problemstr;
int problem;
char tempbuf[40];
if (Code < 1000) {
if (Message != (char *) 0)
printf("ERROR: %s\n", Message);
return;
}
msg = "";
problem = 0;
if (Code-ERROR_OFFSET >= 0 && Code-ERROR_OFFSET <= 16) {
msg = errmsgs[Code-ERROR_OFFSET];
}
switch (Code) {
case AttributeTypeError:
case AttributeValueError:
case ControlTypeError:
case ControlValueError:
case ScopeTypeError:
case ScopeValueError:
/* the following fails because "type" is defined as "Filing4_type". Argh!!
/* problem = (int) (((ScopeTypeErrorArgs *) Message)->problem);
/* (void)sprintf(tempbuf,"problem: %s; type: %d",
/* argproblems[problem],
/* ((ScopeTypeErrorArgs *) Message)->type);
/* problemstr = tempbuf;
/* break;
*/
case RangeError:
problem = (int) (((RangeErrorArgs *) Message)->problem);
problemstr = argproblems[problem];
break;
case AccessError:
problem = (int) (((AccessErrorArgs *) Message)->problem);
problemstr = accessproblems[problem];
break;
case AuthenticationError:
problem = (int) (((AuthenticationErrorArgs *) Message)->problem);
problemstr = authenticationproblems[problem];
break;
case ConnectionError:
problem = (int) (((ConnectionErrorArgs *) Message)->problem);
problemstr = connectionproblems[problem];
break;
case HandleError:
problem = (int) (((HandleErrorArgs *) Message)->problem);
problemstr = handleproblems[problem];
break;
case InsertionError:
problem = (int) (((InsertionErrorArgs *) Message)->problem);
problemstr = insertionproblems[problem];
break;
case ServiceError:
problem = (int) (((ServiceErrorArgs *) Message)->problem);
problemstr = serviceproblems[problem];
break;
case SessionError:
problem = (int) (((SessionErrorArgs *) Message)->problem);
problemstr = sessionproblems[problem];
break;
case SpaceError:
problem = (int) (((SpaceErrorArgs *) Message)->problem);
problemstr = spaceproblems[problem];
break;
case TransferError:
problem = (int) (((TransferErrorArgs *) Message)->problem);
problemstr = transferproblems[problem];
break;
case UndefinedError:
problem = (int) (((UndefinedErrorArgs *) Message)->problem);
problemstr = tempbuf;
sprintf(problemstr,"number %d",problem);
break;
case REJECT_ERROR:
msg = "Courier REJECT";
problem = (int) (((rejectionDetails *) Message)->designator);
if (problem <= 3)
problemstr = rejectproblem[problem];
else {
problemstr = tempbuf;
sprintf(problemstr,"unspecifiedError (%d)", problem);
}
break;
case PROTOCOL_VIOLATION:
problemstr = "Courier protocol violation";
break;
default:
problemstr = tempbuf;
sprintf(problemstr,"unexpected error number %d", Code);
break;
}
printf("ERROR: %s, %s\n", msg, problemstr);
}