2 * Copyright (C) 1996-2025 The Squid Software Foundation and contributors
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.
9 #ifndef SQUID_SRC_FORMAT_BYTECODE_H
10 #define SQUID_SRC_FORMAT_BYTECODE_H
13 * Squid configuration allows users to define custom formats in
16 * - external ACL input
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.
28 * Bytecodes for the configurable format stuff
33 /* arbitrary string between tokens */
38 /* client TCP connection remote end details */
39 LFT_CLIENT_IP_ADDRESS
,
44 /* client TCP connection local end details */
46 LFT_CLIENT_LOCAL_PORT
,
47 /*LFT_CLIENT_LOCAL_FQDN, (rDNS) */
49 LFT_CLIENT_LOCAL_NFMARK
,
51 LFT_TRANSPORT_CLIENT_CONNECTION_ID
,
55 /* client connection local squid.conf details */
56 LFT_LOCAL_LISTENING_IP
,
57 LFT_LOCAL_LISTENING_PORT
,
58 /*LFT_LOCAL_LISTENING_NAME, (myportname) */
60 /* server TCP connection remote end details */
61 LFT_SERVER_IP_ADDRESS
,
62 LFT_SERVER_FQDN_OR_PEER_NAME
,
65 /* server TCP connection local end details */
67 LFT_SERVER_LOCAL_IP_OLD_27
,
68 LFT_SERVER_LOCAL_PORT
,
70 LFT_SERVER_LOCAL_NFMARK
,
72 /* original Request-Line details received from client */
73 LFT_CLIENT_REQ_METHOD
,
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
,
82 /* Request-Line details received from client (legacy, filtered) */
85 LFT_REQUEST_URLPATH_OLD_31
,
86 /*LFT_REQUEST_QUERY, */
87 LFT_REQUEST_VERSION_OLD_2X
,
89 LFT_REQUEST_URLGROUP_OLD_2X
,
91 /* request header details pre-adaptation */
93 LFT_REQUEST_HEADER_ELEM
,
94 LFT_REQUEST_ALL_HEADERS
,
96 /* request header details post-adaptation */
97 LFT_ADAPTED_REQUEST_HEADER
,
98 LFT_ADAPTED_REQUEST_HEADER_ELEM
,
99 LFT_ADAPTED_REQUEST_ALL_HEADERS
,
101 /* Request-Line details sent to the server/peer */
102 LFT_SERVER_REQ_METHOD
,
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
,
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, */
117 /* original Status-Line details received from server */
118 // TODO: implement server detail logging
120 /* Status-Line details sent to the client */
121 // TODO: implement server detail logging
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
,
130 /* response header details pre-adaptation */
132 LFT_REPLY_HEADER_ELEM
,
133 LFT_REPLY_ALL_HEADERS
,
135 /* response header details post-adaptation */
136 /* LFT_ADAPTED_REPLY_HEADER, */
137 /* LFT_ADAPTED_REPLY_HEADER_ELEM, */
138 /* LFT_ADAPTED_REPLY_ALL_HEADERS, */
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, */
148 LFT_CLIENT_IO_SIZE_TOTAL
,
150 /* client credentials */
151 LFT_USER_NAME
, /* any source will do */
154 /*LFT_USER_SCHEME, */
156 /* LFT_USER_SSL_CERT, */
158 /* global time details */
159 LFT_TIME_SECONDS_SINCE_EPOCH
,
163 LFT_TIME_START
, // the time the master transaction started
165 /* processing time details */
166 LFT_TIME_TO_HANDLE_REQUEST
,
167 LFT_PEER_RESPONSE_TIME
,
168 LFT_TOTAL_SERVER_SIDE_RESPONSE_TIME
,
172 /* Squid internal processing details */
175 LFT_SQUID_ERROR_DETAIL
,
177 LFT_SQUID_REQUEST_ATTEMPTS
,
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
,
199 LFT_ICAP_REQUEST_URI
,
200 LFT_ICAP_REQUEST_METHOD
,
203 LFT_ICAP_BODY_BYTES_READ
,
206 LFT_ICAP_REQ_HEADER_ELEM
,
207 LFT_ICAP_REQ_ALL_HEADERS
,
210 LFT_ICAP_REP_HEADER_ELEM
,
211 LFT_ICAP_REP_ALL_HEADERS
,
213 LFT_ICAP_TR_RESPONSE_TIME
,
216 LFT_ICAP_STATUS_CODE
,
222 LFT_SSL_USER_CERT_SUBJECT
,
223 LFT_SSL_USER_CERT_ISSUER
,
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
,
240 LFT_PERCENT
, /* special string cases for escaped chars */
243 // TODO assign better bytecode names and Token strings for these
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
,
250 LFT_EXT_ACL_CLIENT_EUI48
,
251 LFT_EXT_ACL_CLIENT_EUI64
,
255 /* PROXY protocol details */
256 LFT_PROXY_PROTOCOL_RECEIVED_HEADER
,
257 LFT_PROXY_PROTOCOL_RECEIVED_HEADER_ELEM
,
258 LFT_PROXY_PROTOCOL_RECEIVED_ALL_HEADERS
261 /// Quoting style for a format output.
271 } // namespace Format
273 #endif /* SQUID_SRC_FORMAT_BYTECODE_H */