//=-- AFDomainify.cpp - Prepend domain name onto URL of access ----------------= // // PLUGIN DESCRIPTION: // // This plugin is designed to prepend the domain name of an access to the URL // field of the access, causing it to be shown in reports like any other hit. // // This plugin can optionally use a Filter to only domainify certain accesses, // which would be useful, because this allows you to do something like this: // // [ "Domainify", "/[^~]*" ] # Only domainify non user hits... // // Which would allow all hits to user directories to remain unmodified, because // in this case, they all get mapped to the same file being served anyways. // // PLUGIN AUTHOR: // Chris Lattner, Author of Magicstats (sabre@nondot.org) // // PLUGIN HOMEPAGE: // http://www.magicstats.com/ // // PLUGIN VERSION / COMPATIBILITY: // Domainify v1.0 / MagicStats 2.0+ // //=----------------------------------------------------------------------------= // This file is copyright (c) 1999-2000 Chris Lattner //=----------------------------------------------------------------------------= #include "AccessFilterPlugin.h" #include "AccessFormatPlugin.h" #include "FilterManager.h" #include "VarTable.h" class AFDomainify : public PluginTemplate { private: FilterHandle Handle; public: inline AFDomainify(int &CE) { CE = 0; } inline static unsigned int GetCurrentVersion() { return 100; // Version 1.00 } inline static const char *GetPluginName() { return "Domainify"; } // Initialize - Initialize plugin, based on the arguments received... // virtual int Initialize(const VTListExp *Params) { if (Params->GetNumElements() == 3) { // Filter specified... VTExp *I = Params->GetListElement(1), *E = Params->GetListElement(2); Handle = FilterManager::GetFilter(I->GetStringValue(), E->GetStringValue()); } else if (Params->GetNumElements() == 2) { VTExp *Exp = Params->GetListElement(1); if (Exp->GetExpType() == VTExp::ListTy) { Handle = FilterManager::GetFilter((VTListExp*)Exp); } else { Handle = FilterManager::GetFilter(Exp->GetStringValue(), ""); } } else if (Params->GetNumElements() != 1) { cout << "Domainify AccessFilter only recognizes two parameters, a " "filter specification!\nIgnoring filter.\n"; return 1; } return 0; } // FilterAccess - Process the access that is coming in and domainify if // neccesary... // virtual int FilterAccess(AccessFormatPlugin &A) { if (Handle.Match(A)) // If the filter matches, prepend domain to URL... A.GetURL() = A.GetDomain() + A.GetURL(); return 0; } }; INIT_PLUGIN(AFDomainify);