Annotation of libwww/Library/src/HTError.html, revision 2.29
2.1 frystyk 1: <HTML>
2: <HEAD>
2.26 frystyk 3: <TITLE>Error Manager</TITLE>
2.29 ! frystyk 4: <!-- Changed by: Henrik Frystyk Nielsen, 15-Sep-1995 -->
2.1 frystyk 5: <NEXTID N="z1">
6: </HEAD>
7: <BODY>
2.18 frystyk 8:
2.9 frystyk 9: <H1>Reporting Errors and Messages to the Client</H1>
2.1 frystyk 10:
2.18 frystyk 11: <PRE>
12: /*
2.22 frystyk 13: ** (c) COPYRIGHT MIT 1995.
2.18 frystyk 14: ** Please first read the full copyright statement in the file COPYRIGH.
15: */
16: </PRE>
17:
2.15 frystyk 18: This module maintaines a list of error messages that might occur
19: during load of a requested URL. The error list is put out to standard
20: output by a simple function that easily can be overwritten by a smart
2.28 frystyk 21: server or client. <P>
2.18 frystyk 22:
23: This module is implemented by <A HREF="HTError.c">HTError.c</A>, and
24: it is a part of the <A
2.27 frystyk 25: HREF="http://www.w3.org/pub/WWW/Library/">
2.25 frystyk 26: W3C Reference Library</A>.
2.4 frystyk 27:
2.1 frystyk 28: <PRE>
29: #ifndef HTERROR_H
30: #define HTERROR_H
2.20 frystyk 31:
2.28 frystyk 32: #include "HTReq.h"
2.1 frystyk 33: </PRE>
34:
2.24 frystyk 35: <A NAME="errorinfo"><H2>Data Structures</H2></A>
2.1 frystyk 36:
2.15 frystyk 37: The basic data structure is HTErrorInfo, but in addition the following
38: types are used:
2.1 frystyk 39:
2.3 frystyk 40: <H3>Error Numbers</H3>
2.1 frystyk 41:
2.15 frystyk 42: <NOTE><B>Note: </B></NOTE> All non-HTTP error codes have index numbers
43: > HTERR_HTTP_CODES, and they will not be shown in the error-message
44: generated.
45:
2.1 frystyk 46: <PRE>
47: typedef enum _HTErrorElement {
48: HTERR_OK = 0, /* 200 */
49: HTERR_CREATED, /* 201 */
50: HTERR_ACCEPTED, /* 202 */
51: HTERR_PARTIAL, /* 203 */
2.23 frystyk 52: HTERR_NO_CONTENT, /* 204 */
2.1 frystyk 53: HTERR_MOVED, /* 301 */
54: HTERR_FOUND, /* 302 */
55: HTERR_METHOD, /* 303 */
56: HTERR_NOT_MODIFIED, /* 304 */
57: HTERR_BAD_REQUEST, /* 400 */
58: HTERR_UNAUTHORIZED, /* 401 */
59: HTERR_PAYMENT_REQUIRED, /* 402 */
60: HTERR_FORBIDDEN, /* 403 */
61: HTERR_NOT_FOUND, /* 404 */
2.20 frystyk 62: HTERR_NOT_ALLOWED, /* 405 */
63: HTERR_NONE_ACCEPTABLE, /* 406 */
64: HTERR_PROXY, /* 407 */
65: HTERR_TIMEOUT, /* 408 */
2.1 frystyk 66: HTERR_INTERNAL, /* 500 */
67: HTERR_NOT_IMPLEMENTED, /* 501 */
2.20 frystyk 68: HTERR_BAD_GATE, /* 502 */
69: HTERR_DOWN, /* 503 */
70: HTERR_GATE_TIMEOUT, /* 504 */
2.1 frystyk 71: HTERR_HTTP_CODES_END, /* Put all non-HTTP status codes after this */
72: HTERR_NO_REMOTE_HOST,
2.13 frystyk 73: HTERR_NO_HOST,
2.1 frystyk 74: HTERR_FTP_SERVER,
75: HTERR_FTP_NO_RESPONSE,
76: HTERR_TIME_OUT,
2.2 frystyk 77: HTERR_GOPHER_SERVER,
78: HTERR_INTERRUPTED,
2.13 frystyk 79: HTERR_CON_INTR,
2.2 frystyk 80: HTERR_CSO_SERVER,
2.20 frystyk 81: HTERR_HTTP09,
82: HTERR_BAD_REPLY,
2.16 frystyk 83: HTERR_UNKNOWN_AA,
2.5 frystyk 84: HTERR_NEWS_SERVER,
2.7 frystyk 85: HTERR_FILE_TO_FTP,
2.8 frystyk 86: HTERR_MAX_REDIRECT,
2.16 frystyk 87: HTERR_EOF,
2.14 frystyk 88: HTERR_WAIS_OVERFLOW,
89: HTERR_WAIS_MODULE,
2.12 frystyk 90: HTERR_WAIS_NO_CONNECT,
2.2 frystyk 91: HTERR_SYSTEM,
2.29 ! frystyk 92: HTERR_CLASS,
2.1 frystyk 93: HTERR_ELEMENTS /* This MUST be the last element */
94: } HTErrorElement;
2.19 roeber 95:
2.3 frystyk 96: typedef enum _HTErrSeverity {
97: ERR_FATAL = 0x1,
2.7 frystyk 98: ERR_NON_FATAL = 0x2,
2.20 frystyk 99: ERR_WARN = 0x4,
2.7 frystyk 100: ERR_INFO = 0x8
2.3 frystyk 101: } HTErrSeverity;
102:
103: typedef struct _HTErrorInfo {
2.7 frystyk 104: int handle; /* Unique number in this stack */
2.3 frystyk 105: HTErrorElement element; /* Index number into HTErrorMsgInfo */
106: HTErrSeverity severity; /* A la VMS */
107: BOOL ignore; /* YES if msg should not go to user */
108: void * par; /* Explanation, e.g. filename */
109: unsigned int par_length; /* For copying by generic routine */
110: char * where; /* Which function */
111: } HTErrorInfo;
2.1 frystyk 112: </PRE>
113:
2.3 frystyk 114: <H2>Controling Globals</H2>
115:
2.15 frystyk 116: This variable dictates which errors should be put out when generating
117: the message to the user. The first four enumerations make it possible
118: to see `everything as bad or worse than' this level, e.g.
119: HT_ERR_SHOW_NON_FATAL shows messages of type HT_ERR_SHOW_NON_FATAL and
120: HT_ERR_SHOW_FATAL. <P>
121:
122: <B>Note:</B> The default value is made so that it only puts a message
123: to <EM>stderr</EM> if a `real' error has occurred. If a separate
124: widget is available for information and error messages then probably
125: HT_ERR_SHOW_DETAILED would be more appropriate.
2.3 frystyk 126:
127: <PRE>
128: typedef enum _HTErrorShow {
129: HT_ERR_SHOW_FATAL = 0x1,
130: HT_ERR_SHOW_NON_FATAL = 0x3,
131: HT_ERR_SHOW_WARNING = 0x7,
2.6 frystyk 132: HT_ERR_SHOW_INFO = 0xF,
133: HT_ERR_SHOW_PARS = 0x10,
134: HT_ERR_SHOW_LOCATION = 0x20,
135: HT_ERR_SHOW_IGNORE = 0x40,
136: HT_ERR_SHOW_FIRST = 0x80,
2.15 frystyk 137: HT_ERR_SHOW_LINKS = 0x100,
2.7 frystyk 138: HT_ERR_SHOW_DEFAULT = 0x13,
139: HT_ERR_SHOW_DETAILED = 0x1F,
2.10 frystyk 140: HT_ERR_SHOW_DEBUG = 0x7F
2.3 frystyk 141: } HTErrorShow;
142:
143: extern unsigned int HTErrorShowMask;
144: </PRE>
2.1 frystyk 145:
2.15 frystyk 146: This is the table containing the actual error-messages and links for
147: more information:
2.1 frystyk 148:
149: <PRE>
2.3 frystyk 150: typedef struct _HTErrorMsgInfo {
151: int code; /* Error number */
152: char * msg; /* Short explanation */
153: char * url; /* Explaning URL */
154: } HTErrorMsgInfo;
155:
156: extern HTErrorMsgInfo error_info[];
2.1 frystyk 157: </PRE>
158:
2.3 frystyk 159: <H2>Public Error Functions</H2>
160:
2.1 frystyk 161: <H3>Add an Error Message</H3>
162:
163: This function adds an error message to the error_stack list in the HTRequest
2.3 frystyk 164: structure. It always returns a negative value.
2.1 frystyk 165: <PRE>
2.3 frystyk 166: extern int HTErrorAdd PARAMS(( HTRequest * request,
2.1 frystyk 167: HTErrSeverity severity,
168: BOOL ignore,
169: int element,
170: void * par,
171: unsigned int par_length,
172: char * where));
2.2 frystyk 173: </PRE>
174:
175: <H3>Add a System Error Message</H3>
176:
2.15 frystyk 177: This function adds an error from a system call that initializes errno
178: or equivalent and adds it to the error_stack list in the HTRequest
179: structure. It always returns a negative value.
180:
2.2 frystyk 181: <PRE>
2.3 frystyk 182: extern int HTErrorSysAdd PARAMS(( HTRequest * request,
2.2 frystyk 183: HTErrSeverity severity,
2.20 frystyk 184: int errornumber,
2.2 frystyk 185: BOOL ignore,
186: char * syscall));
2.1 frystyk 187: </PRE>
188:
189: <H3>Ignoring an Error Message</H3>
190:
2.15 frystyk 191: If an error message is not to be send to the user, e.g., output to the
192: stream, then the ignore flag must be turn on. Theese functions turns
193: it on for the latest error appended to the list or an arbitrary error
194: refered to by its handle.
195:
2.1 frystyk 196: <PRE>
2.7 frystyk 197: extern void HTErrorIgnore PARAMS((HTRequest * request, int handle));
198: extern void HTErrorIgnoreLast PARAMS((HTRequest * request));
2.1 frystyk 199: </PRE>
200:
2.15 frystyk 201: <H3>Handling Prefix for Links in Error Message</H3>
202:
203: Two functions handle the URL prefix of the links inside the error
204: message. They are quite obvious:
205:
206: <PRE>
2.17 frystyk 207: extern void HTErrorSetPrefix PARAMS((char *path));
208: extern CONST char *HTErrorGetPrefix NOPARAMS;
2.1 frystyk 209: </PRE>
210:
211: <H3>Freeing an Error List</H3>
212:
2.8 frystyk 213: This is normally done when the HTRequest structure is freed but it might be
214: done at any other time in order to ignore a whole series of errors.
2.1 frystyk 215: <PRE>
2.17 frystyk 216: extern void HTErrorFree PARAMS((HTRequest * request));
2.1 frystyk 217: </PRE>
218:
219: <PRE>
220: #endif
221: </PRE>
222: end
223: </BODY>
224: </HTML>
225:
226:
Webmaster