]> git.ipfire.org Git - thirdparty/squid.git/blob - src/format/Token.h
Maintenance: Remove FIXME and \todo labels (#647)
[thirdparty/squid.git] / src / format / Token.h
1 /*
2 * Copyright (C) 1996-2020 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_FORMAT_TOKEN_H
10 #define _SQUID_FORMAT_TOKEN_H
11
12 #include "format/ByteCode.h"
13 #include "proxyp/Elements.h"
14
15 /*
16 * Squid configuration allows users to define custom formats in
17 * several components.
18 * - logging
19 * - external ACL input
20 * - deny page URL
21 *
22 * These enumerations and classes define the API for parsing of
23 * format directives to define these patterns. Along with output
24 * functionality to produce formatted buffers.
25 */
26
27 namespace Format
28 {
29
30 class TokenTableEntry;
31
32 #define LOG_BUF_SZ (MAX_URL<<2)
33
34 // XXX: inherit from linked list
35 class Token
36 {
37 public:
38 Token();
39 ~Token();
40
41 /// Initialize the format token registrations
42 static void Init();
43
44 /** parses a single token. Returns the token length in characters,
45 * and fills in this item with the token information.
46 * def is for sure null-terminated.
47 */
48 int parse(const char *def, enum Quoting *quote);
49
50 ByteCode_t type;
51 const char *label;
52 struct {
53 char *string;
54 // TODO: Add ID caching for protocols other than PROXY protocol.
55 /// the cached ID of the parsed header or zero
56 ProxyProtocol::Two::FieldType headerId;
57
58 struct {
59 char *header;
60 char *element;
61 char separator;
62 } header;
63 } data;
64 int widthMin; ///< minimum field width
65 int widthMax; ///< maximum field width
66 enum Quoting quote;
67 bool left;
68 bool space;
69 bool zero;
70 int divisor; // class invariant: MUST NOT be zero.
71 Token *next; // TODO: move from linked list to array
72
73 private:
74 const char *scanForToken(TokenTableEntry const table[], const char *cur);
75 };
76
77 } // namespace Format
78
79 #endif /* _SQUID_FORMAT_TOKEN_H */
80