]> git.ipfire.org Git - thirdparty/squid.git/blame - src/esi/VarState.h
Source Format Enforcement (#763)
[thirdparty/squid.git] / src / esi / VarState.h
CommitLineData
924f73bc 1/*
f70aedc4 2 * Copyright (C) 1996-2021 The Squid Software Foundation and contributors
924f73bc 3 *
bbc27441
AJ
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.
924f73bc 7 */
8
9#ifndef SQUID_ESIVARSTATE_H
10#define SQUID_ESIVARSTATE_H
11
602d9612 12#include "esi/Segment.h"
924f73bc 13#include "HttpHeader.h"
602d9612 14#include "libTrie/Trie.h"
924f73bc 15
523c3de3
FC
16#include <vector>
17
43ca19e0
FC
18class HttpReply;
19
924f73bc 20/* esi variable replacement logic */
21
22typedef enum {
23 ESI_BROWSER_MSIE,
24 ESI_BROWSER_MOZILLA,
25 ESI_BROWSER_OTHER
26} esiBrowser_t;
27
28extern char const * esiBrowsers[];
29
30/* Recursive uses are not supported by design */
31
26ac0430 32struct _query_elem {char *var, *val;};
924f73bc 33
34class ESIVarState
35{
8c41d298 36 CBDATA_CLASS(ESIVarState);
924f73bc 37
38public:
8c41d298
AJ
39 ESIVarState(HttpHeader const *hdr, char const *uri);
40 ~ESIVarState();
41
924f73bc 42 ESISegment::Pointer extractList();
43 char *extractChar();
44 void feedData (const char *buf, size_t len);
45 void buildVary (HttpReply *rep);
46
47 class Variable;
48 void addVariable (char const *, size_t, Variable *);
30abd221 49 void removeVariable (String const &);
924f73bc 50
924f73bc 51 /* For Variables */
52 void cookieUsed();
53 void hostUsed();
54 void languageUsed();
55 void refererUsed();
56 void useragentUsed();
57 ESISegment::Pointer &getOutput();
58 HttpHeader &header();
59
60private:
61 ESISegment::Pointer input;
62 ESISegment::Pointer output;
63 HttpHeader hdr;
64
26ac0430 65 struct {
3d0ac046
HN
66 int language:1;
67 int cookie:1;
68 int host:1;
69 int referer:1;
70 int useragent:1;
71 } flags;
924f73bc 72
73public:
74
75 class Variable
76 {
77
78 public:
79 Variable () {}
80
26ac0430 81 virtual ~Variable() {}
924f73bc 82
83 /* prevent synthetics */
84 Variable (Variable const &) {}
85
86 Variable &operator= (Variable const &);
87 virtual void eval (ESIVarState &state, char const *, char const *) const;
88 };
89
90 Variable* GetVar(char const *s, int len);
91
92private:
93 void doIt ();
94 void setupUserAgent();
95 Trie variables;
523c3de3 96 std::vector<Variable*> variablesForCleanup;
924f73bc 97 Variable *defaultVariable;
98};
99
100class ESIVariableCookie : public ESIVarState::Variable
101{
102
103public:
104 virtual void eval (ESIVarState &state, char const *, char const *) const;
105};
106
107class ESIVariableHost : public ESIVarState::Variable
108{
109
110public:
111 virtual void eval (ESIVarState &state, char const *, char const *) const;
112};
113
114class ESIVariableLanguage : public ESIVarState::Variable
115{
116
117public:
118 virtual void eval (ESIVarState &state, char const *, char const *) const;
119};
120
121class ESIVariableQuery : public ESIVarState::Variable
122{
123
124public:
125 ESIVariableQuery(char const *uri);
126 ~ESIVariableQuery();
127 virtual void eval (ESIVarState &state, char const *, char const *) const;
128 char const *queryString() const;
129
130 struct _query_elem const *queryVector() const;
131 size_t const &queryElements() const;
132
133 struct _query_elem *query;
134 size_t query_sz;
135 size_t query_elements;
136 char *query_string;
137};
138
139class ESIVariableReferer : public ESIVarState::Variable
140{
141
142public:
143 virtual void eval (ESIVarState &state, char const *, char const *) const;
144};
145
146class ESIVariableUserAgent : public ESIVarState::Variable
147{
148
149public:
150 ~ESIVariableUserAgent();
151 ESIVariableUserAgent (ESIVarState &state);
152 virtual void eval (ESIVarState &state, char const *, char const *) const;
153
154private:
155 static char const * esiUserOs[];
26ac0430 156 enum esiUserOs_t {
924f73bc 157 ESI_OS_WIN,
158 ESI_OS_MAC,
159 ESI_OS_UNIX,
160 ESI_OS_OTHER
161 };
162 esiUserOs_t identifyOs(char const *) const;
163 char const *browserVersion() const {return browserversion;}
164
165 char *getProductVersion (char const *s);
166 esiUserOs_t UserOs;
167 esiBrowser_t browser;
168 char *browserversion;
169};
170
924f73bc 171#endif /* SQUID_ESIVARSTATE_H */
f53969cc 172