1 /*
2  * Copyright (C) 1996-2021 The Squid Software Foundation and contributors
3  *
4  * Squid software is distributed under GPLv2+ license and includes
5  * contributions from numerous individuals and organizations.
6  * Please see the COPYING and CONTRIBUTORS files for details.
7  */
8 
9 #ifndef _SQUID_ERR_TYPE_H
10 #define _SQUID_ERR_TYPE_H
11 
12 typedef enum {
13     ERR_NONE,
14 
15     /* Access Permission Errors.  Prefix new with ERR_ACCESS_ */
16     ERR_ACCESS_DENIED,
17     ERR_CACHE_ACCESS_DENIED,
18     ERR_CACHE_MGR_ACCESS_DENIED,
19     ERR_FORWARDING_DENIED,
20     ERR_NO_RELAY,
21     ERR_CANNOT_FORWARD,
22 
23     /* TCP Errors. */
24     ERR_READ_TIMEOUT,
25     ERR_LIFETIME_EXP,
26     ERR_READ_ERROR,
27     ERR_WRITE_ERROR,
28     ERR_CONNECT_FAIL,
29     ERR_SECURE_CONNECT_FAIL,
30     ERR_SOCKET_FAILURE,
31 
32     /* DNS Errors */
33     ERR_DNS_FAIL,
34     ERR_URN_RESOLVE,
35 
36     /* HTTP Errors */
37     ERR_ONLY_IF_CACHED_MISS,    /* failure to satisfy only-if-cached request */
38     ERR_TOO_BIG,
39     ERR_INVALID_RESP,
40     ERR_UNSUP_HTTPVERSION,     /* HTTP version is not supported */
41     ERR_INVALID_REQ,
42     ERR_UNSUP_REQ,
43     ERR_INVALID_URL,
44     ERR_ZERO_SIZE_OBJECT,
45     ERR_PRECONDITION_FAILED,
46     ERR_CONFLICT_HOST,
47 
48     /* FTP Errors */
49     ERR_FTP_DISABLED,
50     ERR_FTP_UNAVAILABLE,
51     ERR_FTP_FAILURE,
52     ERR_FTP_PUT_ERROR,
53     ERR_FTP_NOT_FOUND,
54     ERR_FTP_FORBIDDEN,
55     ERR_FTP_PUT_CREATED,        /* !error,a note that the file was created */
56     ERR_FTP_PUT_MODIFIED,       /* modified, !created */
57 
58     /* ESI Errors */
59     ERR_ESI,                    /* Failure to perform ESI processing */
60 
61     /* ICAP Errors */
62     ERR_ICAP_FAILURE,
63 
64     /* Squid problem */
65     ERR_GATEWAY_FAILURE,
66 
67     /* Special Cases */
68     ERR_DIR_LISTING,            /* Display of remote directory (FTP, Gopher) */
69     ERR_SQUID_SIGNATURE,        /* not really an error */
70     ERR_SHUTTING_DOWN,
71     ERR_PROTOCOL_UNKNOWN,
72 
73     // NOTE: error types defined below TCP_RESET are optional and do not generate
74     //       a log warning if the files are missing
75     TCP_RESET,                  // Send TCP RST packet instead of error page
76 
77     ERR_SECURE_ACCEPT_FAIL, // Rejects the SSL connection intead of error page
78     ERR_REQUEST_START_TIMEOUT, // Aborts the connection instead of error page
79     ERR_REQUEST_PARSE_TIMEOUT, // Aborts the connection instead of error page
80 
81     /* Cache Manager GUI can install a manager index/home page */
82     MGR_INDEX,
83 
84     ERR_MAX
85 } err_type;
86 
87 extern const char *err_type_str[];
88 
89 inline
90 err_type
errorTypeByName(const char * name)91 errorTypeByName(const char *name)
92 {
93     for (int i = 0; i < ERR_MAX; ++i)
94         if (strcmp(name, err_type_str[i]) == 0)
95             return (err_type)i;
96     return ERR_MAX;
97 }
98 
99 inline
100 const char *
errorTypeName(err_type err)101 errorTypeName(err_type err)
102 {
103     if (err < ERR_NONE || err >= ERR_MAX)
104         return "UNKNOWN";
105     return err_type_str[err];
106 }
107 
108 #endif /* _SQUID_ERR_TYPE_H */
109 
110