]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/esi/VarState.h
2 * Copyright (C) 1996-2015 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
;};
38 ESISegment::Pointer
extractList();
40 void feedData (const char *buf
, size_t len
);
41 void buildVary (HttpReply
*rep
);
44 void addVariable (char const *, size_t, Variable
*);
45 void removeVariable (String
const &);
47 void *operator new (size_t byteCount
);
48 void operator delete (void *address
);
50 ESIVarState (HttpHeader
const *hdr
, char const *uri
);
59 ESISegment::Pointer
&getOutput();
63 ESISegment::Pointer input
;
64 ESISegment::Pointer output
;
83 virtual ~Variable() {}
85 /* prevent synthetics */
86 Variable (Variable
const &) {}
88 Variable
&operator= (Variable
const &);
89 virtual void eval (ESIVarState
&state
, char const *, char const *) const;
92 Variable
* GetVar(char const *s
, int len
);
96 void setupUserAgent();
98 std::vector
<Variable
*> variablesForCleanup
;
99 Variable
*defaultVariable
;
102 class ESIVariableCookie
: public ESIVarState::Variable
106 virtual void eval (ESIVarState
&state
, char const *, char const *) const;
109 class ESIVariableHost
: public ESIVarState::Variable
113 virtual void eval (ESIVarState
&state
, char const *, char const *) const;
116 class ESIVariableLanguage
: public ESIVarState::Variable
120 virtual void eval (ESIVarState
&state
, char const *, char const *) const;
123 class ESIVariableQuery
: public ESIVarState::Variable
127 ESIVariableQuery(char const *uri
);
129 virtual void eval (ESIVarState
&state
, char const *, char const *) const;
130 char const *queryString() const;
132 struct _query_elem
const *queryVector() const;
133 size_t const &queryElements() const;
135 struct _query_elem
*query
;
137 size_t query_elements
;
141 class ESIVariableReferer
: public ESIVarState::Variable
145 virtual void eval (ESIVarState
&state
, char const *, char const *) const;
148 class ESIVariableUserAgent
: public ESIVarState::Variable
152 ~ESIVariableUserAgent();
153 ESIVariableUserAgent (ESIVarState
&state
);
154 virtual void eval (ESIVarState
&state
, char const *, char const *) const;
157 static char const * esiUserOs
[];
164 esiUserOs_t
identifyOs(char const *) const;
165 char const *browserVersion() const {return browserversion
;}
167 char *getProductVersion (char const *s
);
169 esiBrowser_t browser
;
170 char *browserversion
;
173 #endif /* SQUID_ESIVARSTATE_H */