]>
Commit | Line | Data |
---|---|---|
1 | /* | |
2 | * Copyright (C) 1996-2025 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_SRC_FORMAT_BYTECODE_H | |
10 | #define SQUID_SRC_FORMAT_BYTECODE_H | |
11 | ||
12 | /* | |
13 | * Squid configuration allows users to define custom formats in | |
14 | * several components. | |
15 | * - logging | |
16 | * - external ACL input | |
17 | * - deny page URL | |
18 | * | |
19 | * These enumerations and classes define the API for parsing of | |
20 | * format directives to define these patterns. Along with output | |
21 | * functionality to produce formatted buffers. | |
22 | */ | |
23 | ||
24 | namespace Format | |
25 | { | |
26 | ||
27 | /* | |
28 | * Bytecodes for the configurable format stuff | |
29 | */ | |
30 | typedef enum { | |
31 | LFT_NONE, /* dummy */ | |
32 | ||
33 | /* arbitrary string between tokens */ | |
34 | LFT_STRING, | |
35 | ||
36 | LFT_BYTE, | |
37 | ||
38 | /* client TCP connection remote end details */ | |
39 | LFT_CLIENT_IP_ADDRESS, | |
40 | LFT_CLIENT_FQDN, | |
41 | LFT_CLIENT_PORT, | |
42 | LFT_CLIENT_EUI, | |
43 | ||
44 | /* client TCP connection local end details */ | |
45 | LFT_CLIENT_LOCAL_IP, | |
46 | LFT_CLIENT_LOCAL_PORT, | |
47 | /*LFT_CLIENT_LOCAL_FQDN, (rDNS) */ | |
48 | LFT_CLIENT_LOCAL_TOS, | |
49 | LFT_CLIENT_LOCAL_NFMARK, | |
50 | ||
51 | LFT_TRANSPORT_CLIENT_CONNECTION_ID, | |
52 | ||
53 | LFT_CLIENT_HANDSHAKE, | |
54 | ||
55 | /* client connection local squid.conf details */ | |
56 | LFT_LOCAL_LISTENING_IP, | |
57 | LFT_LOCAL_LISTENING_PORT, | |
58 | /*LFT_LOCAL_LISTENING_NAME, (myportname) */ | |
59 | ||
60 | /* server TCP connection remote end details */ | |
61 | LFT_SERVER_IP_ADDRESS, | |
62 | LFT_SERVER_FQDN_OR_PEER_NAME, | |
63 | LFT_SERVER_PORT, | |
64 | ||
65 | /* server TCP connection local end details */ | |
66 | LFT_SERVER_LOCAL_IP, | |
67 | LFT_SERVER_LOCAL_IP_OLD_27, | |
68 | LFT_SERVER_LOCAL_PORT, | |
69 | LFT_SERVER_LOCAL_TOS, | |
70 | LFT_SERVER_LOCAL_NFMARK, | |
71 | ||
72 | /* original Request-Line details received from client */ | |
73 | LFT_CLIENT_REQ_METHOD, | |
74 | LFT_CLIENT_REQ_URI, | |
75 | LFT_CLIENT_REQ_URLSCHEME, | |
76 | LFT_CLIENT_REQ_URLDOMAIN, | |
77 | LFT_CLIENT_REQ_URLPORT, | |
78 | LFT_CLIENT_REQ_URLPATH, | |
79 | /* LFT_CLIENT_REQ_QUERY, */ | |
80 | LFT_CLIENT_REQ_VERSION, | |
81 | ||
82 | /* Request-Line details received from client (legacy, filtered) */ | |
83 | LFT_REQUEST_METHOD, | |
84 | LFT_REQUEST_URI, | |
85 | LFT_REQUEST_URLPATH_OLD_31, | |
86 | /*LFT_REQUEST_QUERY, */ | |
87 | LFT_REQUEST_VERSION_OLD_2X, | |
88 | LFT_REQUEST_VERSION, | |
89 | LFT_REQUEST_URLGROUP_OLD_2X, | |
90 | ||
91 | /* request header details pre-adaptation */ | |
92 | LFT_REQUEST_HEADER, | |
93 | LFT_REQUEST_HEADER_ELEM, | |
94 | LFT_REQUEST_ALL_HEADERS, | |
95 | ||
96 | /* request header details post-adaptation */ | |
97 | LFT_ADAPTED_REQUEST_HEADER, | |
98 | LFT_ADAPTED_REQUEST_HEADER_ELEM, | |
99 | LFT_ADAPTED_REQUEST_ALL_HEADERS, | |
100 | ||
101 | /* Request-Line details sent to the server/peer */ | |
102 | LFT_SERVER_REQ_METHOD, | |
103 | LFT_SERVER_REQ_URI, | |
104 | LFT_SERVER_REQ_URLSCHEME, | |
105 | LFT_SERVER_REQ_URLDOMAIN, | |
106 | LFT_SERVER_REQ_URLPORT, | |
107 | LFT_SERVER_REQ_URLPATH, | |
108 | /*LFT_SERVER_REQ_QUERY, */ | |
109 | LFT_SERVER_REQ_VERSION, | |
110 | ||
111 | /* request meta details */ | |
112 | LFT_CLIENT_REQUEST_SIZE_TOTAL, | |
113 | LFT_CLIENT_REQUEST_SIZE_HEADERS, | |
114 | /*LFT_REQUEST_SIZE_BODY, */ | |
115 | /*LFT_REQUEST_SIZE_BODY_NO_TE, */ | |
116 | ||
117 | /* original Status-Line details received from server */ | |
118 | // TODO: implement server detail logging | |
119 | ||
120 | /* Status-Line details sent to the client */ | |
121 | // TODO: implement server detail logging | |
122 | ||
123 | /* response Status-Line details (legacy, filtered) */ | |
124 | LFT_HTTP_SENT_STATUS_CODE_OLD_30, | |
125 | LFT_HTTP_SENT_STATUS_CODE, | |
126 | LFT_HTTP_RECEIVED_STATUS_CODE, | |
127 | /*LFT_HTTP_STATUS, */ | |
128 | LFT_HTTP_BODY_BYTES_READ, | |
129 | ||
130 | /* response header details pre-adaptation */ | |
131 | LFT_REPLY_HEADER, | |
132 | LFT_REPLY_HEADER_ELEM, | |
133 | LFT_REPLY_ALL_HEADERS, | |
134 | ||
135 | /* response header details post-adaptation */ | |
136 | /* LFT_ADAPTED_REPLY_HEADER, */ | |
137 | /* LFT_ADAPTED_REPLY_HEADER_ELEM, */ | |
138 | /* LFT_ADAPTED_REPLY_ALL_HEADERS, */ | |
139 | ||
140 | /* response meta details */ | |
141 | LFT_ADAPTED_REPLY_SIZE_TOTAL, | |
142 | LFT_REPLY_HIGHOFFSET, | |
143 | LFT_REPLY_OBJECTSIZE, | |
144 | LFT_ADAPTED_REPLY_SIZE_HEADERS, | |
145 | /*LFT_REPLY_SIZE_BODY, */ | |
146 | /*LFT_REPLY_SIZE_BODY_NO_TE, */ | |
147 | ||
148 | LFT_CLIENT_IO_SIZE_TOTAL, | |
149 | ||
150 | /* client credentials */ | |
151 | LFT_USER_NAME, /* any source will do */ | |
152 | LFT_USER_LOGIN, | |
153 | /*LFT_USER_REALM, */ | |
154 | /*LFT_USER_SCHEME, */ | |
155 | LFT_USER_EXTERNAL, | |
156 | /* LFT_USER_SSL_CERT, */ | |
157 | ||
158 | /* global time details */ | |
159 | LFT_TIME_SECONDS_SINCE_EPOCH, | |
160 | LFT_TIME_SUBSECOND, | |
161 | LFT_TIME_LOCALTIME, | |
162 | LFT_TIME_GMT, | |
163 | LFT_TIME_START, // the time the master transaction started | |
164 | ||
165 | /* processing time details */ | |
166 | LFT_TIME_TO_HANDLE_REQUEST, | |
167 | LFT_PEER_RESPONSE_TIME, | |
168 | LFT_TOTAL_SERVER_SIDE_RESPONSE_TIME, | |
169 | LFT_DNS_WAIT_TIME, | |
170 | LFT_BUSY_TIME, | |
171 | ||
172 | /* Squid internal processing details */ | |
173 | LFT_SQUID_STATUS, | |
174 | LFT_SQUID_ERROR, | |
175 | LFT_SQUID_ERROR_DETAIL, | |
176 | LFT_SQUID_HIERARCHY, | |
177 | LFT_SQUID_REQUEST_ATTEMPTS, | |
178 | ||
179 | LFT_MIME_TYPE, | |
180 | LFT_TAG, | |
181 | LFT_EXT_LOG, | |
182 | ||
183 | LFT_SEQUENCE_NUMBER, | |
184 | ||
185 | #if USE_ADAPTATION | |
186 | LFT_ADAPTATION_SUM_XACT_TIMES, | |
187 | LFT_ADAPTATION_ALL_XACT_TIMES, | |
188 | LFT_ADAPTATION_LAST_HEADER, | |
189 | LFT_ADAPTATION_LAST_HEADER_ELEM, | |
190 | LFT_ADAPTATION_LAST_ALL_HEADERS, | |
191 | #endif | |
192 | ||
193 | #if ICAP_CLIENT | |
194 | ||
195 | LFT_ICAP_TOTAL_TIME, | |
196 | ||
197 | LFT_ICAP_ADDR, | |
198 | LFT_ICAP_SERV_NAME, | |
199 | LFT_ICAP_REQUEST_URI, | |
200 | LFT_ICAP_REQUEST_METHOD, | |
201 | LFT_ICAP_BYTES_SENT, | |
202 | LFT_ICAP_BYTES_READ, | |
203 | LFT_ICAP_BODY_BYTES_READ, | |
204 | ||
205 | LFT_ICAP_REQ_HEADER, | |
206 | LFT_ICAP_REQ_HEADER_ELEM, | |
207 | LFT_ICAP_REQ_ALL_HEADERS, | |
208 | ||
209 | LFT_ICAP_REP_HEADER, | |
210 | LFT_ICAP_REP_HEADER_ELEM, | |
211 | LFT_ICAP_REP_ALL_HEADERS, | |
212 | ||
213 | LFT_ICAP_TR_RESPONSE_TIME, | |
214 | LFT_ICAP_IO_TIME, | |
215 | LFT_ICAP_OUTCOME, | |
216 | LFT_ICAP_STATUS_CODE, | |
217 | #endif | |
218 | LFT_CREDENTIALS, | |
219 | ||
220 | #if USE_OPENSSL | |
221 | LFT_SSL_BUMP_MODE, | |
222 | LFT_SSL_USER_CERT_SUBJECT, | |
223 | LFT_SSL_USER_CERT_ISSUER, | |
224 | LFT_SSL_CLIENT_SNI, | |
225 | LFT_SSL_SERVER_CERT_SUBJECT, | |
226 | LFT_SSL_SERVER_CERT_ISSUER, | |
227 | LFT_SSL_SERVER_CERT_ERRORS, | |
228 | LFT_SSL_SERVER_CERT_WHOLE, | |
229 | LFT_TLS_CLIENT_NEGOTIATED_VERSION, | |
230 | LFT_TLS_SERVER_NEGOTIATED_VERSION, | |
231 | LFT_TLS_CLIENT_NEGOTIATED_CIPHER, | |
232 | LFT_TLS_SERVER_NEGOTIATED_CIPHER, | |
233 | LFT_TLS_CLIENT_RECEIVED_HELLO_VERSION, | |
234 | LFT_TLS_SERVER_RECEIVED_HELLO_VERSION, | |
235 | LFT_TLS_CLIENT_SUPPORTED_VERSION, | |
236 | LFT_TLS_SERVER_SUPPORTED_VERSION, | |
237 | #endif | |
238 | ||
239 | LFT_NOTE, | |
240 | LFT_PERCENT, /* special string cases for escaped chars */ | |
241 | LFT_MASTER_XACTION, | |
242 | ||
243 | // TODO assign better bytecode names and Token strings for these | |
244 | #if USE_OPENSSL | |
245 | LFT_EXT_ACL_USER_CERT_RAW, | |
246 | LFT_EXT_ACL_USER_CERTCHAIN_RAW, | |
247 | LFT_EXT_ACL_USER_CERT, | |
248 | LFT_EXT_ACL_USER_CA_CERT, | |
249 | #endif | |
250 | LFT_EXT_ACL_CLIENT_EUI48, | |
251 | LFT_EXT_ACL_CLIENT_EUI64, | |
252 | LFT_EXT_ACL_NAME, | |
253 | LFT_EXT_ACL_DATA, | |
254 | ||
255 | /* PROXY protocol details */ | |
256 | LFT_PROXY_PROTOCOL_RECEIVED_HEADER, | |
257 | LFT_PROXY_PROTOCOL_RECEIVED_HEADER_ELEM, | |
258 | LFT_PROXY_PROTOCOL_RECEIVED_ALL_HEADERS | |
259 | } ByteCode_t; | |
260 | ||
261 | /// Quoting style for a format output. | |
262 | enum Quoting { | |
263 | LOG_QUOTE_NONE = 0, | |
264 | LOG_QUOTE_QUOTES, | |
265 | LOG_QUOTE_MIMEBLOB, | |
266 | LOG_QUOTE_URL, | |
267 | LOG_QUOTE_SHELL, | |
268 | LOG_QUOTE_RAW | |
269 | }; | |
270 | ||
271 | } // namespace Format | |
272 | ||
273 | #endif /* SQUID_SRC_FORMAT_BYTECODE_H */ | |
274 |