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