]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/esi/VarState.h
dfca6e7b8fc6f45ad2e8ebe7dfe30594d80b4b22
2 * Copyright (C) 1996-2017 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_ESIVARSTATE_H
10 #define SQUID_ESIVARSTATE_H
12 #include "esi/Segment.h"
13 #include "HttpHeader.h"
14 #include "libTrie/Trie.h"
20 /* esi variable replacement logic */
28 extern char const * esiBrowsers
[];
30 /* Recursive uses are not supported by design */
32 struct _query_elem
{char *var
, *val
;};
36 CBDATA_CLASS(ESIVarState
);
39 ESIVarState(HttpHeader
const *hdr
, char const *uri
);
42 ESISegment::Pointer
extractList();
44 void feedData (const char *buf
, size_t len
);
45 void buildVary (HttpReply
*rep
);
48 void addVariable (char const *, size_t, Variable
*);
49 void removeVariable (String
const &);
57 ESISegment::Pointer
&getOutput();
61 ESISegment::Pointer input
;
62 ESISegment::Pointer output
;
81 virtual ~Variable() {}
83 /* prevent synthetics */
84 Variable (Variable
const &) {}
86 Variable
&operator= (Variable
const &);
87 virtual void eval (ESIVarState
&state
, char const *, char const *) const;
90 Variable
* GetVar(char const *s
, int len
);
94 void setupUserAgent();
96 std::vector
<Variable
*> variablesForCleanup
;
97 Variable
*defaultVariable
;
100 class ESIVariableCookie
: public ESIVarState::Variable
104 virtual void eval (ESIVarState
&state
, char const *, char const *) const;
107 class ESIVariableHost
: public ESIVarState::Variable
111 virtual void eval (ESIVarState
&state
, char const *, char const *) const;
114 class ESIVariableLanguage
: public ESIVarState::Variable
118 virtual void eval (ESIVarState
&state
, char const *, char const *) const;
121 class ESIVariableQuery
: public ESIVarState::Variable
125 ESIVariableQuery(char const *uri
);
127 virtual void eval (ESIVarState
&state
, char const *, char const *) const;
128 char const *queryString() const;
130 struct _query_elem
const *queryVector() const;
131 size_t const &queryElements() const;
133 struct _query_elem
*query
;
135 size_t query_elements
;
139 class ESIVariableReferer
: public ESIVarState::Variable
143 virtual void eval (ESIVarState
&state
, char const *, char const *) const;
146 class ESIVariableUserAgent
: public ESIVarState::Variable
150 ~ESIVariableUserAgent();
151 ESIVariableUserAgent (ESIVarState
&state
);
152 virtual void eval (ESIVarState
&state
, char const *, char const *) const;
155 static char const * esiUserOs
[];
162 esiUserOs_t
identifyOs(char const *) const;
163 char const *browserVersion() const {return browserversion
;}
165 char *getProductVersion (char const *s
);
167 esiBrowser_t browser
;
168 char *browserversion
;
171 #endif /* SQUID_ESIVARSTATE_H */