]> git.ipfire.org Git - thirdparty/squid.git/blame_incremental - src/format/ByteCode.h
Simplify appending SBuf to String (#2108)
[thirdparty/squid.git] / src / format / ByteCode.h
... / ...
CommitLineData
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
24namespace Format
25{
26
27/*
28 * Bytecodes for the configurable format stuff
29 */
30typedef 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.
262enum 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