1 /* $Header: errmsg.c,v 2.2 87/03/07 14:44:42 jqj Exp $ */
2
3 /* $Log: errmsg.c,v $
4 * Revision 2.2 87/03/07 14:44:42 jqj
5 * set problem correctly. Cardinal != Enum on most UNIX systems
6 *
7 * Revision 2.1 86/06/02 07:10:30 jqj
8 * print more information on unspecifiedError
9 *
10 * Revision 2.0 85/11/21 07:22:44 jqj
11 * 4.3BSD standard release
12 *
13 * Revision 1.1 85/11/20 14:19:04 jqj
14 * Initial revision
15 *
16 */
17 #include "Filing4_defs.h"
18
FilingErrMsg(Code,Message)19 FilingErrMsg(Code, Message)
20 int Code;
21 char *Message;
22 {
23 static char *errmsgs[] = {
24 "AttributeTypeError",
25 "AttributeValueError",
26 "ControlTypeError",
27 "ControlValueError",
28 "ScopeTypeError",
29 "ScopeValueError",
30 "AccessError",
31 "AuthenticationError",
32 "ConnectionError",
33 "HandleError",
34 "InsertionError",
35 "ServiceError",
36 "SessionError",
37 "SpaceError",
38 "TransferError",
39 "UndefinedError",
40 "RangeError" };
41 static char *argproblems[] = {
42 "illegal",
43 "disallowed",
44 "unreasonable",
45 "unimplemented",
46 "duplicated",
47 "missing" };
48 static char *accessproblems[] = {
49 "accessRightsInsufficient",
50 "accessRightsIndeterminate",
51 "fileChanged",
52 "fileDamaged",
53 "fileInUse",
54 "fileNotFound",
55 "fileOpen" };
56 static char *connectionproblems[] = {
57 "noRoute",
58 "noResponse",
59 "transmissionHardware",
60 "transportTimeout",
61 "tooManyLocalConnections",
62 "tooManyRemoteConnections",
63 "missingCourier",
64 "missingProgram",
65 "missingProcedure",
66 "protocolMismatch",
67 "parameterInconsistency",
68 "invalidMessage",
69 "returnTimedOut",
70 "otherCallProblem" };
71 static char* handleproblems[] = {
72 "invalid",
73 "nullDisallowed",
74 "directoryRequired" };
75 static char *insertionproblems[] = {
76 "positionUnavailable",
77 "fileNotUnique",
78 "loopInHierarchy" };
79 static char *serviceproblems[] = {
80 "cannotAuthenticate",
81 "serviceFull",
82 "serviceUnavailable",
83 "sessionInUse" };
84 static char *sessionproblems[] = {
85 "tokenInvalid",
86 "serviceAlreadySet" };
87 static char *spaceproblems[] = {
88 "allocationExceeded",
89 "attributeAreadFull",
90 "mediumFull" };
91 static char *transferproblems[] = {
92 "aborted",
93 "checksumIncorrect",
94 "formatIncorrect",
95 "noRendevous",
96 "wrongDirection" };
97 static char *authenticationproblems[] = {
98 "credentialsInvalid",
99 "verifierInvalid",
100 "verifierExpiered",
101 "verifierReused",
102 "credentialsExpired",
103 "inappropriateCredentials" };
104 static char *rejectproblem[] = {
105 "noSuchProgramNumber",
106 "noSuchVersionNumber",
107 "noSuchProcedureValue",
108 "invalidArgument" };
109 char *msg, *problemstr;
110 int problem;
111 char tempbuf[40];
112
113 if (Code < 1000) {
114 if (Message != (char *) 0)
115 printf("ERROR: %s\n", Message);
116 return;
117 }
118
119 msg = "";
120 problem = 0;
121 if (Code-ERROR_OFFSET >= 0 && Code-ERROR_OFFSET <= 16) {
122 msg = errmsgs[Code-ERROR_OFFSET];
123 }
124 switch (Code) {
125 case AttributeTypeError:
126 case AttributeValueError:
127 case ControlTypeError:
128 case ControlValueError:
129 case ScopeTypeError:
130 case ScopeValueError:
131 /* the following fails because "type" is defined as "Filing4_type". Argh!!
132 /* problem = (int) (((ScopeTypeErrorArgs *) Message)->problem);
133 /* (void)sprintf(tempbuf,"problem: %s; type: %d",
134 /* argproblems[problem],
135 /* ((ScopeTypeErrorArgs *) Message)->type);
136 /* problemstr = tempbuf;
137 /* break;
138 */
139 case RangeError:
140 problem = (int) (((RangeErrorArgs *) Message)->problem);
141 problemstr = argproblems[problem];
142 break;
143 case AccessError:
144 problem = (int) (((AccessErrorArgs *) Message)->problem);
145 problemstr = accessproblems[problem];
146 break;
147 case AuthenticationError:
148 problem = (int) (((AuthenticationErrorArgs *) Message)->problem);
149 problemstr = authenticationproblems[problem];
150 break;
151 case ConnectionError:
152 problem = (int) (((ConnectionErrorArgs *) Message)->problem);
153 problemstr = connectionproblems[problem];
154 break;
155 case HandleError:
156 problem = (int) (((HandleErrorArgs *) Message)->problem);
157 problemstr = handleproblems[problem];
158 break;
159 case InsertionError:
160 problem = (int) (((InsertionErrorArgs *) Message)->problem);
161 problemstr = insertionproblems[problem];
162 break;
163 case ServiceError:
164 problem = (int) (((ServiceErrorArgs *) Message)->problem);
165 problemstr = serviceproblems[problem];
166 break;
167 case SessionError:
168 problem = (int) (((SessionErrorArgs *) Message)->problem);
169 problemstr = sessionproblems[problem];
170 break;
171 case SpaceError:
172 problem = (int) (((SpaceErrorArgs *) Message)->problem);
173 problemstr = spaceproblems[problem];
174 break;
175 case TransferError:
176 problem = (int) (((TransferErrorArgs *) Message)->problem);
177 problemstr = transferproblems[problem];
178 break;
179 case UndefinedError:
180 problem = (int) (((UndefinedErrorArgs *) Message)->problem);
181 problemstr = tempbuf;
182 sprintf(problemstr,"number %d",problem);
183 break;
184 case REJECT_ERROR:
185 msg = "Courier REJECT";
186 problem = (int) (((rejectionDetails *) Message)->designator);
187 if (problem <= 3)
188 problemstr = rejectproblem[problem];
189 else {
190 problemstr = tempbuf;
191 sprintf(problemstr,"unspecifiedError (%d)", problem);
192 }
193 break;
194 case PROTOCOL_VIOLATION:
195 problemstr = "Courier protocol violation";
196 break;
197 default:
198 problemstr = tempbuf;
199 sprintf(problemstr,"unexpected error number %d", Code);
200 break;
201 }
202 printf("ERROR: %s, %s\n", msg, problemstr);
203 }
204