# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: rousskov@measurement-factory.com-20090317203645-\ # 2spv623fkyjly1db # target_branch: http://www.squid-cache.org/bzr/squid3/trunk # testament_sha1: 97730ab799d7eedf538ddc42c166b94024bcdb4d # timestamp: 2009-03-17 14:37:53 -0600 # base_revision_id: rousskov@measurement-factory.com-20090317171057-\ # 23x9uv83xfty1hnf # # Begin patch === modified file 'configure.in' --- configure.in 2009-03-09 05:53:08 +0000 +++ configure.in 2009-03-13 21:54:28 +0000 @@ -3808,6 +3808,7 @@ src/adaptation/Makefile \ src/adaptation/icap/Makefile \ src/adaptation/ecap/Makefile \ + src/esi/Makefile \ src/icmp/Makefile \ src/ip/Makefile \ contrib/Makefile \ === modified file 'lib/Makefile.am' --- lib/Makefile.am 2009-03-08 18:41:06 +0000 +++ lib/Makefile.am 2009-03-13 21:47:14 +0000 @@ -3,12 +3,16 @@ # $Id$ # -SUBDIRS = libTrie +SUBDIRS = if USE_LOADABLE_MODULES SUBDIRS += libLtdl endif +if USE_ESI +SUBDIRS += libTrie +endif + CLEANFILES = @@ -89,10 +93,8 @@ xusleep.c \ $(XPROF_STATS_SOURCE) \ $(WIN32SRC) -libmiscutil_a_LIBADD = \ - libTrie/src/Trie.o \ - libTrie/src/TrieNode.o \ - @LIBOBJS@ +libmiscutil_a_LIBADD = @LIBOBJS@ + # $(top_srcdir)/include/version.h should be a dependency libntlmauth_a_SOURCES = \ ntlmauth.c === modified file 'src/Makefile.am' --- src/Makefile.am 2009-03-17 02:04:14 +0000 +++ src/Makefile.am 2009-03-17 03:39:54 +0000 @@ -40,6 +40,15 @@ ADAPTATION_LIBS = @ADAPTATION_LIBS@ +if USE_ESI +SUBDIRS += esi +ESI_LIBS = \ + esi/libesi.la \ + $(top_builddir)/lib/libTrie/src/libTrie.a +else +ESI_LIBS = +endif + DELAY_POOL_ALL_SOURCE = \ CommonPool.h \ CompositePoolNode.h \ @@ -70,43 +79,6 @@ DELAY_POOL_SOURCE = endif -ESI_ALL_SOURCE = \ - ElementList.h \ - ESI.cc \ - ESI.h \ - ESIAssign.cc \ - ESIAssign.h \ - ESIAttempt.h \ - ESIContext.cc \ - ESIContext.h \ - ESICustomParser.cc \ - ESICustomParser.h \ - ESIElement.h \ - ESIExcept.h \ - ESIExpatParser.cc \ - ESIExpatParser.h \ - ESIExpression.cc \ - ESIExpression.h \ - ESIInclude.cc \ - ESIInclude.h \ - ESILiteral.h \ - ESILibxml2Parser.cc \ - ESILibxml2Parser.h \ - ESIParser.cc \ - ESIParser.h \ - ESISegment.cc \ - ESISegment.h \ - ESISequence.cc \ - ESISequence.h \ - ESIVar.h \ - ESIVarState.cc \ - ESIVarState.h -if USE_ESI - ESI_SOURCE = $(ESI_ALL_SOURCE) -else - ESI_SOURCE = -endif - if ENABLE_XPROF_STATS XPROF_STATS_SOURCE = ProfStats.cc else @@ -203,7 +175,6 @@ -I$(top_srcdir)/src \ -I$(top_builddir)/include \ -I$(top_srcdir)/include \ - -I$(top_srcdir)/lib/libTrie/include \ -I$(top_builddir)/lib \ -I$(top_srcdir)/lib \ @SQUID_CPPUNIT_INC@ @@ -280,7 +251,6 @@ ipc.cc \ ipc_win32.cc \ $(IDENT_ALL_SOURCE) \ - $(ESI_ALL_SOURCE) \ ProfStats.cc \ LeakFinder.cc \ LeakFinder.h \ @@ -374,7 +344,6 @@ enums.h \ errorpage.cc \ errorpage.h \ - $(ESI_SOURCE) \ ETag.cc \ event.cc \ event.h \ @@ -569,6 +538,7 @@ @REGEXLIB@ \ @SNMPLIB@ \ ${ADAPTATION_LIBS} \ + ${ESI_LIBS} \ @SSLLIB@ \ -lmiscutil \ @XTRA_LIBS@ \ @@ -1068,7 +1038,6 @@ dlink.cc \ $(DNSSOURCE) \ errorpage.cc \ - $(ESI_SOURCE) \ ETag.cc \ external_acl.cc \ ExternalACLEntry.cc \ @@ -1166,6 +1135,7 @@ icmp/libicmp.la icmp/libicmp-core.la \ @REPL_OBJS@ \ ${ADAPTATION_LIBS} \ + ${ESI_LIBS} \ @REGEXLIB@ \ @SNMPLIB@ \ -L../lib -lmiscutil \ @@ -1237,7 +1207,6 @@ dlink.cc \ $(DNSSOURCE) \ errorpage.cc \ - $(ESI_SOURCE) \ ETag.cc \ external_acl.cc \ ExternalACLEntry.cc \ @@ -1334,6 +1303,7 @@ icmp/libicmp.la icmp/libicmp-core.la \ @REPL_OBJS@ \ ${ADAPTATION_LIBS} \ + ${ESI_LIBS} \ @REGEXLIB@ \ @SNMPLIB@ \ -L../lib -lmiscutil \ @@ -1384,7 +1354,6 @@ dlink.cc \ $(DNSSOURCE) \ errorpage.cc \ - $(ESI_SOURCE) \ ETag.cc \ external_acl.cc \ ExternalACLEntry.cc \ @@ -1481,6 +1450,7 @@ icmp/libicmp.la icmp/libicmp-core.la \ @REPL_OBJS@ \ ${ADAPTATION_LIBS} \ + ${ESI_LIBS} \ @REGEXLIB@ \ @SNMPLIB@ \ -L../lib -lmiscutil \ @@ -1520,7 +1490,6 @@ dlink.cc \ $(DNSSOURCE) \ errorpage.cc \ - $(ESI_SOURCE) \ ETag.cc \ external_acl.cc \ ExternalACLEntry.cc \ @@ -1624,6 +1593,7 @@ @REPL_OBJS@ \ @STORE_LIBS_TO_ADD@ \ ${ADAPTATION_LIBS} \ + ${ESI_LIBS} \ @REGEXLIB@ \ @SNMPLIB@ \ -L../lib -lmiscutil \ @@ -1673,7 +1643,6 @@ dlink.cc \ $(DNSSOURCE) \ errorpage.cc \ - $(ESI_SOURCE) \ ETag.cc \ external_acl.cc \ ExternalACLEntry.cc \ @@ -1771,6 +1740,7 @@ icmp/libicmp.la icmp/libicmp-core.la \ @REPL_OBJS@ \ ${ADAPTATION_LIBS} \ + ${ESI_LIBS} \ @REGEXLIB@ \ @SNMPLIB@ \ -L../lib -lmiscutil \ @@ -2022,7 +1992,6 @@ dlink.cc \ $(DNSSOURCE) \ errorpage.cc \ - $(ESI_SOURCE) \ ETag.cc \ external_acl.cc \ ExternalACLEntry.cc \ @@ -2118,6 +2087,7 @@ @REGEXLIB@ \ @REPL_OBJS@ \ ${ADAPTATION_LIBS} \ + ${ESI_LIBS} \ @SNMPLIB@ \ -L../lib -lmiscutil \ @SQUID_CPPUNIT_LIBS@ \ === modified file 'src/Store.h' --- src/Store.h 2009-02-08 00:02:47 +0000 +++ src/Store.h 2009-03-10 20:52:45 +0000 @@ -50,7 +50,7 @@ #include "RemovalPolicy.h" #if USE_SQUID_ESI -#include "ESIElement.h" +#include "esi/Element.h" #endif class AsyncCall; === modified file 'src/cache_cf.cc' --- src/cache_cf.cc 2009-03-13 20:45:32 +0000 +++ src/cache_cf.cc 2009-03-13 21:54:28 +0000 @@ -57,7 +57,7 @@ #include "snmp.h" #endif #if USE_SQUID_ESI -#include "ESIParser.h" +#include "esi/Parser.h" #endif #if USE_ADAPTATION === modified file 'src/client_side_reply.cc' --- src/client_side_reply.cc 2009-03-08 21:53:27 +0000 +++ src/client_side_reply.cc 2009-03-10 20:52:45 +0000 @@ -48,7 +48,7 @@ #include "clientStream.h" #include "auth/UserRequest.h" #if USE_SQUID_ESI -#include "ESI.h" +#include "esi/Esi.h" #endif #include "MemObject.h" #include "fde.h" === added directory 'src/esi' === renamed file 'src/ESIAssign.cc' => 'src/esi/Assign.cc' --- src/ESIAssign.cc 2009-02-11 17:08:24 +0000 +++ src/esi/Assign.cc 2009-03-10 20:52:45 +0000 @@ -40,9 +40,9 @@ */ #if (USE_SQUID_ESI == 1) -#include "ESIAssign.h" -#include "ESIContext.h" -#include "ESISequence.h" +#include "esi/Assign.h" +#include "esi/Context.h" +#include "esi/Sequence.h" ESIAssign::~ESIAssign() { === renamed file 'src/ESIAssign.h' => 'src/esi/Assign.h' --- src/ESIAssign.h 2009-01-21 03:47:47 +0000 +++ src/esi/Assign.h 2009-03-10 20:52:45 +0000 @@ -37,9 +37,9 @@ #define SQUID_ESIASSIGN_H #include "squid.h" -#include "ESIElement.h" +#include "esi/Element.h" #include "SquidString.h" -#include "ESIVarState.h" +#include "esi/VarState.h" /* ESIVariableExpression */ /* This is a variable that is itself and expression */ === renamed file 'src/ESIAttempt.h' => 'src/esi/Attempt.h' --- src/ESIAttempt.h 2009-01-21 03:47:47 +0000 +++ src/esi/Attempt.h 2009-03-10 20:52:45 +0000 @@ -37,8 +37,8 @@ #define SQUID_ESIATTEMPT_H #include "squid.h" -#include "ESIElement.h" -#include "ESISequence.h" +#include "esi/Element.h" +#include "esi/Sequence.h" /* esiAttempt */ === renamed file 'src/ESIContext.cc' => 'src/esi/Context.cc' --- src/ESIContext.cc 2009-01-21 03:47:47 +0000 +++ src/esi/Context.cc 2009-03-10 20:52:45 +0000 @@ -40,7 +40,7 @@ */ #if (USE_SQUID_ESI == 1) -#include "ESIContext.h" +#include "esi/Context.h" #include "Store.h" #include "client_side_request.h" === renamed file 'src/ESIContext.h' => 'src/esi/Context.h' --- src/ESIContext.h 2009-01-21 03:47:47 +0000 +++ src/esi/Context.h 2009-03-10 20:52:45 +0000 @@ -34,14 +34,14 @@ #ifndef SQUID_ESICONTEXT_H #define SQUID_ESICONTEXT_H -#include "ESIElement.h" +#include "esi/Element.h" #include "clientStream.h" class ESIVarState; class ClientHttpRequest; -#include "ESIParser.h" +#include "esi/Parser.h" /* ESIContext */ === renamed file 'src/ESICustomParser.cc' => 'src/esi/CustomParser.cc' --- src/ESICustomParser.cc 2009-02-10 11:02:53 +0000 +++ src/esi/CustomParser.cc 2009-03-17 15:29:06 +0000 @@ -34,14 +34,14 @@ */ #include "squid.h" -#include "ESICustomParser.h" +#include "esi/CustomParser.h" #include "Trie.h" #include "TrieCharTransform.h" #include "Array.h" Trie *ESICustomParser::SearchTrie=NULL; -RegisterESIParser("custom", ESICustomParser); +EsiParserDefinition(ESICustomParser); Trie * ESICustomParser::GetTrie() === renamed file 'src/ESICustomParser.h' => 'src/esi/CustomParser.h' --- src/ESICustomParser.h 2009-01-21 03:47:47 +0000 +++ src/esi/CustomParser.h 2009-03-17 15:29:06 +0000 @@ -35,7 +35,7 @@ class Trie; /* inherits from */ -#include "ESIParser.h" +#include "esi/Parser.h" /* for String variables */ #include "SquidString.h" @@ -54,8 +54,9 @@ long int lineNumber() const; char const * errorString() const; + EsiParserDeclaration; + private: - ESI_PARSER_TYPE; static Trie *SearchTrie; static Trie *GetTrie(); enum ESITAG_t { === renamed file 'src/ESIElement.h' => 'src/esi/Element.h' --- src/ESIElement.h 2009-01-21 03:47:47 +0000 +++ src/esi/Element.h 2009-03-10 20:52:45 +0000 @@ -34,7 +34,7 @@ #define SQUID_ESIELEMENT_H #include "RefCount.h" -#include "ESISegment.h" +#include "esi/Segment.h" typedef enum { ESI_PROCESS_COMPLETE = 0, === renamed file 'src/ElementList.h' => 'src/esi/ElementList.h' --- src/ElementList.h 2009-01-21 03:47:47 +0000 +++ src/esi/ElementList.h 2009-03-10 20:52:45 +0000 @@ -37,7 +37,7 @@ #define SQUID_ELEMENTLIST_H #include "squid.h" -#include "ESIElement.h" +#include "esi/Element.h" class ElementList { === renamed file 'src/ESI.cc' => 'src/esi/Esi.cc' --- src/ESI.cc 2009-02-11 17:08:24 +0000 +++ src/esi/Esi.cc 2009-03-10 20:52:45 +0000 @@ -38,22 +38,22 @@ */ #if (USE_SQUID_ESI == 1) -#include "ESI.h" +#include "esi/Esi.h" #include "clientStream.h" #include "client_side_request.h" #include "errorpage.h" -#include "ESISegment.h" -#include "ESIElement.h" -#include "ESIContext.h" +#include "esi/Segment.h" +#include "esi/Element.h" +#include "esi/Context.h" #include "HttpHdrSc.h" #include "HttpHdrScTarget.h" #include "HttpReply.h" -#include "ESIAttempt.h" -#include "ESIExcept.h" +#include "esi/Attempt.h" +#include "esi/Except.h" #include "client_side.h" -#include "ESIVarState.h" -#include "ESIAssign.h" -#include "ESIExpression.h" +#include "esi/VarState.h" +#include "esi/Assign.h" +#include "esi/Expression.h" #include "HttpRequest.h" #include "MemBuf.h" #include "ip/IpAddress.h" @@ -116,11 +116,11 @@ MEMPROXY_CLASS_INLINE(esiComment) /**DOCS_NOSEMI*/ -#include "ESILiteral.h" - -#include "ESISequence.h" - -#include "ESIInclude.h" +#include "esi/Literal.h" + +#include "esi/Sequence.h" + +#include "esi/Include.h" /* esiRemove */ @@ -181,7 +181,7 @@ MEMPROXY_CLASS_INLINE(esiTry) /**DOCS_NOSEMI*/ -#include "ESIVar.h" +#include "esi/Var.h" /* esiChoose */ === renamed file 'src/ESI.h' => 'src/esi/Esi.h' === renamed file 'src/ESIExcept.h' => 'src/esi/Except.h' --- src/ESIExcept.h 2009-01-21 03:47:47 +0000 +++ src/esi/Except.h 2009-03-10 20:52:45 +0000 @@ -37,8 +37,8 @@ #define SQUID_ESIEXCEPT_H #include "squid.h" -#include "ESIElement.h" -#include "ESISequence.h" +#include "esi/Element.h" +#include "esi/Sequence.h" /* esiExcept */ === renamed file 'src/ESIExpatParser.cc' => 'src/esi/ExpatParser.cc' --- src/ESIExpatParser.cc 2009-01-21 03:47:47 +0000 +++ src/esi/ExpatParser.cc 2009-03-17 15:29:06 +0000 @@ -37,9 +37,9 @@ #if USE_SQUID_ESI -#include "ESIExpatParser.h" +#include "esi/ExpatParser.h" -RegisterESIParser("expat", ESIExpatParser); +EsiParserDefinition(ESIExpatParser); ESIExpatParser::ESIExpatParser(ESIParserClient *aClient) : theClient (aClient) { === renamed file 'src/ESIExpatParser.h' => 'src/esi/ExpatParser.h' --- src/ESIExpatParser.h 2009-01-21 03:47:47 +0000 +++ src/esi/ExpatParser.h 2009-03-17 15:29:06 +0000 @@ -35,8 +35,8 @@ #if USE_SQUID_ESI -#include "ESIParser.h" -#include "expat.h" +#include "esi/Parser.h" +#include class ESIExpatParser : public ESIParser { @@ -51,8 +51,9 @@ long int lineNumber() const; char const * errorString() const; + EsiParserDeclaration; + private: - ESI_PARSER_TYPE; /** our parser */ mutable XML_Parser p; static void Start(void *data, const XML_Char *el, const char **attr); === renamed file 'src/ESIExpression.cc' => 'src/esi/Expression.cc' --- src/ESIExpression.cc 2009-01-21 03:47:47 +0000 +++ src/esi/Expression.cc 2009-03-10 20:52:45 +0000 @@ -34,7 +34,7 @@ */ #include "squid.h" -#include "ESIExpression.h" +#include "esi/Expression.h" /* stack precedence rules: * before pushing an operator onto the stack, the === renamed file 'src/ESIExpression.h' => 'src/esi/Expression.h' === renamed file 'src/ESIInclude.cc' => 'src/esi/Include.cc' --- src/ESIInclude.cc 2009-01-21 03:47:47 +0000 +++ src/esi/Include.cc 2009-03-10 20:52:45 +0000 @@ -41,8 +41,8 @@ */ #if (USE_SQUID_ESI == 1) -#include "ESIInclude.h" -#include "ESIVarState.h" +#include "esi/Include.h" +#include "esi/VarState.h" #include "client_side_request.h" #include "HttpReply.h" === renamed file 'src/ESIInclude.h' => 'src/esi/Include.h' --- src/ESIInclude.h 2009-01-21 03:47:47 +0000 +++ src/esi/Include.h 2009-03-10 20:52:45 +0000 @@ -37,9 +37,9 @@ #define SQUID_ESIINCLUDE_H #include "squid.h" -#include "ESISegment.h" -#include "ESIElement.h" -#include "ESIContext.h" +#include "esi/Segment.h" +#include "esi/Element.h" +#include "esi/Context.h" class ESIInclude; typedef RefCount ESIIncludePtr; === renamed file 'src/ESILibxml2Parser.cc' => 'src/esi/Libxml2Parser.cc' --- src/ESILibxml2Parser.cc 2009-01-21 03:47:47 +0000 +++ src/esi/Libxml2Parser.cc 2009-03-17 15:29:06 +0000 @@ -41,13 +41,13 @@ #if USE_SQUID_ESI -#include "ESILibxml2Parser.h" +#include "esi/Libxml2Parser.h" // the global document that will store the resolved entity // definitions static htmlDocPtr entity_doc = NULL; -RegisterESIParser("libxml2", ESILibxml2Parser); +EsiParserDefinition(ESILibxml2Parser); // the SAX callback functions void esi_startElementSAXFunc(void * ctx, const xmlChar * name, const xmlChar ** atts) === renamed file 'src/ESILibxml2Parser.h' => 'src/esi/Libxml2Parser.h' --- src/ESILibxml2Parser.h 2009-01-21 03:47:47 +0000 +++ src/esi/Libxml2Parser.h 2009-03-17 15:29:06 +0000 @@ -42,7 +42,7 @@ #if USE_SQUID_ESI -#include "ESIParser.h" +#include "esi/Parser.h" // workaround for definition of "free" that prevents include of // parser.h from libxml2 without errors #ifdef free @@ -70,8 +70,9 @@ ESIParserClient *getClient() { return theClient; } + EsiParserDeclaration; + private: - ESI_PARSER_TYPE; mutable xmlParserCtxtPtr parser; /* our parser */ ESIParserClient *theClient; === renamed file 'src/ESILiteral.h' => 'src/esi/Literal.h' --- src/ESILiteral.h 2009-01-21 03:47:47 +0000 +++ src/esi/Literal.h 2009-03-10 20:52:45 +0000 @@ -37,7 +37,7 @@ #define SQUID_ESILITERAL_H #include "squid.h" -#include "ESIElement.h" +#include "esi/Element.h" class ESIContext; /* esiLiteral */ === added file 'src/esi/Makefile.am' --- src/esi/Makefile.am 1970-01-01 00:00:00 +0000 +++ src/esi/Makefile.am 2009-03-17 15:27:56 +0000 @@ -0,0 +1,43 @@ +include $(top_srcdir)/src/Common.am +include $(top_srcdir)/src/TestHeaders.am + +noinst_LTLIBRARIES = libesi.la + +libesi_la_SOURCES = \ + Assign.cc \ + Assign.h \ + Attempt.h \ + Context.cc \ + Context.h \ + CustomParser.cc \ + CustomParser.h \ + Element.h \ + ElementList.h \ + Esi.cc \ + Esi.h \ + Except.h \ + ExpatParser.cc \ + ExpatParser.h \ + Expression.cc \ + Expression.h \ + Include.cc \ + Include.h \ + Literal.h \ + Libxml2Parser.cc \ + Libxml2Parser.h \ + Module.cc \ + Module.h \ + Parser.cc \ + Parser.h \ + Segment.cc \ + Segment.h \ + Sequence.cc \ + Sequence.h \ + Var.h \ + VarState.cc \ + VarState.h + +INCLUDES += \ + -I$(top_srcdir)/lib/libTrie/include \ + -I$(top_builddir)/lib/libTrie/include + === added file 'src/esi/Module.cc' --- src/esi/Module.cc 1970-01-01 00:00:00 +0000 +++ src/esi/Module.cc 2009-03-17 15:27:56 +0000 @@ -0,0 +1,28 @@ +#include "squid.h" +#include "esi/Module.h" +#include "esi/CustomParser.h" +#include "esi/Libxml2Parser.h" +#include "esi/ExpatParser.h" /* must follow esi/Libxml2Parser.h */ + +static ESIParser::Register *prCustom = 0; +static ESIParser::Register *prLibxml = 0; +static ESIParser::Register *prExpat = 0; + +void Esi::Init() { + assert(!prCustom); // we should be called once + prCustom = new ESIParser::Register("custom", &ESICustomParser::NewParser); + prLibxml = new ESIParser::Register("libxml2", &ESILibxml2Parser::NewParser); + prExpat = new ESIParser::Register("expat", &ESIExpatParser::NewParser); +} + +void Esi::Clean() { + assert(prCustom); // we should be called once, and only after Init() + + delete prExpat; + delete prLibxml; + delete prCustom; + + prExpat = NULL; + prLibxml = NULL; + prCustom = NULL; +} === added file 'src/esi/Module.h' --- src/esi/Module.h 1970-01-01 00:00:00 +0000 +++ src/esi/Module.h 2009-03-17 15:27:56 +0000 @@ -0,0 +1,11 @@ +#ifndef SQUID_ESI_MODULE_H +#define SQUID_ESI_MODULE_H + +namespace Esi { + + extern void Init(); + extern void Clean(); + +}; // namespace Esi + +#endif /* SQUID_ESI_MODULE_H */ === renamed file 'src/ESIParser.cc' => 'src/esi/Parser.cc' --- src/ESIParser.cc 2009-01-21 03:47:47 +0000 +++ src/esi/Parser.cc 2009-03-17 15:24:36 +0000 @@ -33,7 +33,7 @@ */ #include "squid.h" -#include "ESIParser.h" +#include "esi/Parser.h" char *ESIParser::Type = NULL; ESIParser::Register *ESIParser::Parsers = NULL; @@ -54,3 +54,14 @@ return (Parser->newParser)(aClient); } + +ESIParser::Register::Register(const char *_name, ESIParser::Pointer (*_newParser)(ESIParserClient *aClient)) : name(_name), newParser(_newParser) { + this->next = ESIParser::Parsers; + ESIParser::Parsers = this; +} + +ESIParser::Register::~Register() { + // TODO: support random-order deregistration + assert(ESIParser::Parsers == this); + ESIParser::Parsers = next; +} === renamed file 'src/ESIParser.h' => 'src/esi/Parser.h' --- src/ESIParser.h 2009-01-21 03:47:47 +0000 +++ src/esi/Parser.h 2009-03-17 15:24:36 +0000 @@ -52,6 +52,7 @@ class ESIParser : public RefCountable { public: + class Register; typedef RefCount Pointer; static void registerParser(const char *name, Pointer (*new_func)(ESIParserClient *aClient)); @@ -70,8 +71,6 @@ protected: ESIParser() {}; - class Register; - private: static Register *Parser; static Register *Parsers; @@ -83,26 +82,21 @@ { public: - Register(const char *_name, ESIParser::Pointer (*_newParser)(ESIParserClient *aClient)) : name(_name), newParser(_newParser) { - this->next = ESIParser::Parsers; - ESIParser::Parsers = this; - } + Register(const char *_name, ESIParser::Pointer (*_newParser)(ESIParserClient *aClient)); + ~Register(); const char *name; ESIParser::Pointer (*newParser)(ESIParserClient *aClient); Register * next; }; -#define RegisterESIParser(name, ThisClass) \ - ESIParser::Register ThisClass::thisParser(name, &NewParser); \ +#define EsiParserDefinition(ThisClass) \ ESIParser::Pointer ThisClass::NewParser(ESIParserClient *aClient) \ { \ return new ThisClass (aClient); \ } -#define ESI_PARSER_TYPE \ - static ESIParser::Pointer NewParser(ESIParserClient *aClient); \ - static ESIParser::Register thisParser - +#define EsiParserDeclaration \ + static ESIParser::Pointer NewParser(ESIParserClient *aClient) #endif /* SQUID_ESIPARSER_H */ === renamed file 'src/ESISegment.cc' => 'src/esi/Segment.cc' --- src/ESISegment.cc 2009-02-06 00:59:06 +0000 +++ src/esi/Segment.cc 2009-03-10 20:52:45 +0000 @@ -34,7 +34,7 @@ */ #include "squid.h" -#include "ESISegment.h" +#include "esi/Segment.h" #include "SquidString.h" CBDATA_TYPE(ESISegment); === renamed file 'src/ESISegment.h' => 'src/esi/Segment.h' === renamed file 'src/ESISequence.cc' => 'src/esi/Sequence.cc' --- src/ESISequence.cc 2009-01-21 03:47:47 +0000 +++ src/esi/Sequence.cc 2009-03-10 20:52:45 +0000 @@ -40,10 +40,10 @@ */ #if (USE_SQUID_ESI == 1) -#include "ESISequence.h" -#include "ESILiteral.h" -#include "ESIAttempt.h" -#include "ESIExcept.h" +#include "esi/Sequence.h" +#include "esi/Literal.h" +#include "esi/Attempt.h" +#include "esi/Except.h" class esiExcept; === renamed file 'src/ESISequence.h' => 'src/esi/Sequence.h' --- src/ESISequence.h 2009-01-21 03:47:47 +0000 +++ src/esi/Sequence.h 2009-03-10 20:52:45 +0000 @@ -37,8 +37,8 @@ #define SQUID_ESISEQUENCE_H #include "squid.h" -#include "ESIElement.h" -#include "ElementList.h" +#include "esi/Element.h" +#include "esi/ElementList.h" /* esiSequence */ === renamed file 'src/ESIVar.h' => 'src/esi/Var.h' --- src/ESIVar.h 2009-01-21 03:47:47 +0000 +++ src/esi/Var.h 2009-03-10 20:52:45 +0000 @@ -37,8 +37,8 @@ #define SQUID_ESIVAR_H #include "squid.h" -#include "ESIElement.h" -#include "ESISequence.h" +#include "esi/Element.h" +#include "esi/Sequence.h" /* esiVar */ === renamed file 'src/ESIVarState.cc' => 'src/esi/VarState.cc' --- src/ESIVarState.cc 2009-01-31 16:05:18 +0000 +++ src/esi/VarState.cc 2009-03-10 20:52:45 +0000 @@ -35,7 +35,7 @@ */ #include "squid.h" -#include "ESIVarState.h" +#include "esi/VarState.h" #include "HttpReply.h" CBDATA_TYPE (ESIVarState); === renamed file 'src/ESIVarState.h' => 'src/esi/VarState.h' --- src/ESIVarState.h 2009-01-21 03:47:47 +0000 +++ src/esi/VarState.h 2009-03-10 20:52:45 +0000 @@ -34,7 +34,7 @@ #ifndef SQUID_ESIVARSTATE_H #define SQUID_ESIVARSTATE_H -#include "ESISegment.h" +#include "esi/Segment.h" #include "Trie.h" #include "Array.h" #include "HttpHeader.h" === modified file 'src/main.cc' --- src/main.cc 2009-03-08 19:34:36 +0000 +++ src/main.cc 2009-03-17 16:57:05 +0000 @@ -86,6 +86,10 @@ #include "adaptation/Config.h" #endif +#if USE_SQUID_ESI +#include "esi/Module.h" +#endif + #if USE_WIN32_SERVICE #include "squid_windows.h" @@ -1061,6 +1065,9 @@ Adaptation::Config::Finalize(enableAdaptation); #endif +#if USE_SQUID_ESI + Esi::Init(); +#endif debugs(1, 1, "Ready to serve requests."); @@ -1671,6 +1678,11 @@ releaseServerSockets(); commCloseAllSockets(); + +#if USE_SQUID_ESI + Esi::Clean(); +#endif + #if DELAY_POOLS DelayPools::FreePools(); === modified file 'test-suite/ESIExpressions.cc' --- test-suite/ESIExpressions.cc 2009-01-21 03:47:47 +0000 +++ test-suite/ESIExpressions.cc 2009-03-10 20:52:45 +0000 @@ -34,7 +34,7 @@ */ #include "squid.h" -#include "ESIExpression.h" +#include "esi/Expression.h" int main () === modified file 'test-suite/Makefile.am' --- test-suite/Makefile.am 2009-02-18 00:18:43 +0000 +++ test-suite/Makefile.am 2009-03-10 20:52:45 +0000 @@ -66,7 +66,7 @@ DEBUG_SOURCE = test_tools.cc debug_SOURCES = debug.cc $(DEBUG_SOURCE) ESIExpressions_SOURCES = ESIExpressions.cc $(DEBUG_SOURCE) -ESIExpressions_LDADD = $(top_builddir)/src/ESIExpression.o \ +ESIExpressions_LDADD = $(top_builddir)/src/esi/Expression.o \ $(LDADD) mem_node_test_SOURCES = mem_node_test.cc mem_node_test_LDADD = $(top_builddir)/src/mem_node.o $(LDADD) # Begin bundle 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 V+h5Bxr7Cn3d3/i7kinChIbr98Tg