]> git.ipfire.org Git - thirdparty/squid.git/blame - src/format/ByteCode.h
Simplify appending SBuf to String (#2108)
[thirdparty/squid.git] / src / format / ByteCode.h
CommitLineData
bbc27441 1/*
1f7b830e 2 * Copyright (C) 1996-2025 The Squid Software Foundation and contributors
bbc27441
AJ
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
ff9d9458
FC
9#ifndef SQUID_SRC_FORMAT_BYTECODE_H
10#define SQUID_SRC_FORMAT_BYTECODE_H
38e16f92 11
20efa1c2 12/*
38e16f92
AJ
13 * Squid configuration allows users to define custom formats in
14 * several components.
15 * - logging
16 * - external ACL input
17 * - deny page URL
20efa1c2 18 *
38e16f92
AJ
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.
20efa1c2 22 */
20efa1c2 23
38e16f92
AJ
24namespace Format
25{
20efa1c2 26
20efa1c2 27/*
2f8abb64 28 * Bytecodes for the configurable format stuff
20efa1c2
AJ
29 */
30typedef enum {
f53969cc 31 LFT_NONE, /* dummy */
31971e6a
AJ
32
33 /* arbitrary string between tokens */
20efa1c2
AJ
34 LFT_STRING,
35
007cd686
EB
36 LFT_BYTE,
37
31971e6a 38 /* client TCP connection remote end details */
20efa1c2
AJ
39 LFT_CLIENT_IP_ADDRESS,
40 LFT_CLIENT_FQDN,
41 LFT_CLIENT_PORT,
20efa1c2 42 LFT_CLIENT_EUI,
20efa1c2 43
31971e6a 44 /* client TCP connection local end details */
8652f8e7 45 LFT_CLIENT_LOCAL_IP,
8652f8e7 46 LFT_CLIENT_LOCAL_PORT,
31971e6a 47 /*LFT_CLIENT_LOCAL_FQDN, (rDNS) */
f123f5e9
CT
48 LFT_CLIENT_LOCAL_TOS,
49 LFT_CLIENT_LOCAL_NFMARK,
31971e6a 50
a120b7a8
CT
51 LFT_TRANSPORT_CLIENT_CONNECTION_ID,
52
6131103b
CT
53 LFT_CLIENT_HANDSHAKE,
54
31971e6a
AJ
55 /* client connection local squid.conf details */
56 LFT_LOCAL_LISTENING_IP,
28417506 57 LFT_LOCAL_LISTENING_PORT,
31971e6a
AJ
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,
8652f8e7 64
31971e6a 65 /* server TCP connection local end details */
8652f8e7
AJ
66 LFT_SERVER_LOCAL_IP,
67 LFT_SERVER_LOCAL_IP_OLD_27,
68 LFT_SERVER_LOCAL_PORT,
f123f5e9
CT
69 LFT_SERVER_LOCAL_TOS,
70 LFT_SERVER_LOCAL_NFMARK,
20efa1c2 71
2f8abb64 72 /* original Request-Line details received from client */
f025622f
AJ
73 LFT_CLIENT_REQ_METHOD,
74 LFT_CLIENT_REQ_URI,
5aca9cf2 75 LFT_CLIENT_REQ_URLSCHEME,
fa450988 76 LFT_CLIENT_REQ_URLDOMAIN,
5aca9cf2 77 LFT_CLIENT_REQ_URLPORT,
f025622f
AJ
78 LFT_CLIENT_REQ_URLPATH,
79 /* LFT_CLIENT_REQ_QUERY, */
80 LFT_CLIENT_REQ_VERSION,
81
2f8abb64 82 /* Request-Line details received from client (legacy, filtered) */
20efa1c2
AJ
83 LFT_REQUEST_METHOD,
84 LFT_REQUEST_URI,
f025622f
AJ
85 LFT_REQUEST_URLPATH_OLD_31,
86 /*LFT_REQUEST_QUERY, */
87 LFT_REQUEST_VERSION_OLD_2X,
20efa1c2 88 LFT_REQUEST_VERSION,
d074f918 89 LFT_REQUEST_URLGROUP_OLD_2X,
20efa1c2 90
31971e6a
AJ
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
f025622f
AJ
101 /* Request-Line details sent to the server/peer */
102 LFT_SERVER_REQ_METHOD,
103 LFT_SERVER_REQ_URI,
5aca9cf2
AJ
104 LFT_SERVER_REQ_URLSCHEME,
105 LFT_SERVER_REQ_URLDOMAIN,
106 LFT_SERVER_REQ_URLPORT,
f025622f
AJ
107 LFT_SERVER_REQ_URLPATH,
108 /*LFT_SERVER_REQ_QUERY, */
109 LFT_SERVER_REQ_VERSION,
110
31971e6a 111 /* request meta details */
d6df21d2
AJ
112 LFT_CLIENT_REQUEST_SIZE_TOTAL,
113 LFT_CLIENT_REQUEST_SIZE_HEADERS,
20efa1c2
AJ
114 /*LFT_REQUEST_SIZE_BODY, */
115 /*LFT_REQUEST_SIZE_BODY_NO_TE, */
116
2f8abb64 117 /* original Status-Line details received from server */
9837567d 118 // TODO: implement server detail logging
31971e6a
AJ
119
120 /* Status-Line details sent to the client */
9837567d 121 // TODO: implement server detail logging
31971e6a
AJ
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 */
d6df21d2 141 LFT_ADAPTED_REPLY_SIZE_TOTAL,
20efa1c2
AJ
142 LFT_REPLY_HIGHOFFSET,
143 LFT_REPLY_OBJECTSIZE,
d6df21d2 144 LFT_ADAPTED_REPLY_SIZE_HEADERS,
20efa1c2
AJ
145 /*LFT_REPLY_SIZE_BODY, */
146 /*LFT_REPLY_SIZE_BODY_NO_TE, */
147
d6df21d2
AJ
148 LFT_CLIENT_IO_SIZE_TOTAL,
149
31971e6a
AJ
150 /* client credentials */
151 LFT_USER_NAME, /* any source will do */
152 LFT_USER_LOGIN,
31971e6a
AJ
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,
af0ded40 163 LFT_TIME_START, // the time the master transaction started
31971e6a
AJ
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,
0cd2a1b6 170 LFT_BUSY_TIME,
31971e6a
AJ
171
172 /* Squid internal processing details */
173 LFT_SQUID_STATUS,
174 LFT_SQUID_ERROR,
175 LFT_SQUID_ERROR_DETAIL,
176 LFT_SQUID_HIERARCHY,
e7a9b7a8 177 LFT_SQUID_REQUEST_ATTEMPTS,
31971e6a
AJ
178
179 LFT_MIME_TYPE,
20efa1c2 180 LFT_TAG,
20efa1c2
AJ
181 LFT_EXT_LOG,
182
183 LFT_SEQUENCE_NUMBER,
184
185#if USE_ADAPTATION
31971e6a
AJ
186 LFT_ADAPTATION_SUM_XACT_TIMES,
187 LFT_ADAPTATION_ALL_XACT_TIMES,
ed231061
AR
188 LFT_ADAPTATION_LAST_HEADER,
189 LFT_ADAPTATION_LAST_HEADER_ELEM,
190 LFT_ADAPTATION_LAST_ALL_HEADERS,
20efa1c2
AJ
191#endif
192
193#if ICAP_CLIENT
194
195 LFT_ICAP_TOTAL_TIME,
20efa1c2
AJ
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
d4806c91 218 LFT_CREDENTIALS,
20efa1c2 219
cb4f4424 220#if USE_OPENSSL
08097970 221 LFT_SSL_BUMP_MODE,
f4698e0b
CT
222 LFT_SSL_USER_CERT_SUBJECT,
223 LFT_SSL_USER_CERT_ISSUER,
cedca6e7 224 LFT_SSL_CLIENT_SNI,
789dda8d
CT
225 LFT_SSL_SERVER_CERT_SUBJECT,
226 LFT_SSL_SERVER_CERT_ISSUER,
7598eb63 227 LFT_SSL_SERVER_CERT_ERRORS,
12b5040f 228 LFT_SSL_SERVER_CERT_WHOLE,
2bcab852
CT
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,
08097970
AR
237#endif
238
d7f4a0b7 239 LFT_NOTE,
f53969cc 240 LFT_PERCENT, /* special string cases for escaped chars */
7cfd3a41 241 LFT_MASTER_XACTION,
5aca9cf2
AJ
242
243 // TODO assign better bytecode names and Token strings for these
ce810e33 244#if USE_OPENSSL
5aca9cf2
AJ
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,
ce810e33 249#endif
5aca9cf2
AJ
250 LFT_EXT_ACL_CLIENT_EUI48,
251 LFT_EXT_ACL_CLIENT_EUI64,
252 LFT_EXT_ACL_NAME,
36c774f7 253 LFT_EXT_ACL_DATA,
5aca9cf2 254
36c774f7
EB
255 /* PROXY protocol details */
256 LFT_PROXY_PROTOCOL_RECEIVED_HEADER,
257 LFT_PROXY_PROTOCOL_RECEIVED_HEADER_ELEM,
258 LFT_PROXY_PROTOCOL_RECEIVED_ALL_HEADERS
38e16f92 259} ByteCode_t;
20efa1c2 260
38e16f92
AJ
261/// Quoting style for a format output.
262enum Quoting {
20efa1c2
AJ
263 LOG_QUOTE_NONE = 0,
264 LOG_QUOTE_QUOTES,
265 LOG_QUOTE_MIMEBLOB,
266 LOG_QUOTE_URL,
95d78f10 267 LOG_QUOTE_SHELL,
20efa1c2
AJ
268 LOG_QUOTE_RAW
269};
270
38e16f92 271} // namespace Format
20efa1c2 272
ff9d9458 273#endif /* SQUID_SRC_FORMAT_BYTECODE_H */
f53969cc 274