From bdaaf1a1a5efcef6e9ad60d9d74a87881186ba4f Mon Sep 17 00:00:00 2001 From: Francesco Chemolli Date: Fri, 4 Jul 2008 21:14:12 +0200 Subject: [PATCH] Refactored menu action. Changed cachemgrStateData to protected. --- src/CacheManager.h | 42 ++++++++++++++++++++---------------------- src/cache_manager.cc | 9 ++++----- 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/src/CacheManager.h b/src/CacheManager.h index 9394761d02..092d3ad57c 100644 --- a/src/CacheManager.h +++ b/src/CacheManager.h @@ -73,15 +73,6 @@ public: class CacheManagerActionList : public Vector { }; -/// \ingroup CacheManagerInternal -typedef struct -{ - StoreEntry *entry; - char *action; - char *user_name; - char *passwd; -} cachemgrStateData; - /** \ingroup CacheManagerAPI * a CacheManager - the menu system for interacting with squid. @@ -112,12 +103,6 @@ public: const char *ActionProtection(const CacheManagerAction * at); //needs to be called from C protected: - CacheManager(); - cachemgrStateData* ParseUrl(const char *url); - void ParseHeaders(cachemgrStateData * mgr, const HttpRequest * request); - int CheckPassword(cachemgrStateData * mgr); - char *PasswdGet(cachemgr_passwd *, const char *); - // command classes. They are private to the cachemanager because they // may require access to local data sources, plus we avoid polluting // the namespace more than needed. @@ -136,18 +121,31 @@ protected: virtual void run (StoreEntry *sentry); OfflineToggleAction(); }; + class MenuAction : public CacheManagerAction { + public: + virtual void run (StoreEntry *sentry); + MenuAction(); + }; +/// \ingroup CacheManagerInternal +typedef struct +{ + StoreEntry *entry; + char *action; + char *user_name; + char *passwd; +} cachemgrStateData; + + + CacheManager(); + cachemgrStateData* ParseUrl(const char *url); + void ParseHeaders(cachemgrStateData * mgr, const HttpRequest * request); + int CheckPassword(cachemgrStateData * mgr); + char *PasswdGet(cachemgr_passwd *, const char *); private: static CacheManager* instance; - //commands need to be static to be able to be referenced as C-style - //functions. Binding to nonstatic members can be done at runtime - //via the singleton, but it's syntactic hackery - //TODO: fix so that ActionTable uses a Command pattern and thus - // function calls are properly object-wrapped - static void MenuCommand(StoreEntry *sentry); - void StateFree(cachemgrStateData * mgr); diff --git a/src/cache_manager.cc b/src/cache_manager.cc index 5b7b76778d..8de91f2d68 100644 --- a/src/cache_manager.cc +++ b/src/cache_manager.cc @@ -60,11 +60,10 @@ CacheManager::CacheManager() if (ActionsList != NULL) delete(ActionsList); //TODO: Laaazy. Will be moved to class member ActionsList = new CacheManagerActionList; - registerAction("menu", "This Cachemanager Menu", MenuCommand, 0, 1); - //registerAction("offline_toggle", "Toggle offline_mode setting", OfflineToggleCommand, 1, 1); registerAction(new OfflineToggleAction); registerAction(new ShutdownAction); registerAction(new ReconfigureAction); + registerAction(new MenuAction); } void @@ -99,7 +98,6 @@ CacheManager::findAction(char const * action) debugs(16, 5, "CacheManager::findAction: looking for action " << action); for ( a = ActionsList->begin(); a != ActionsList->end(); a++) { - //debugs(16, 6, " checking against '" << (*a)->action << "'"); if (0 == strcmp((*a)->action, action)) { debugs(16, 6, " found"); return *a; @@ -111,7 +109,7 @@ CacheManager::findAction(char const * action) } /// \ingroup CacheManagerInternal -cachemgrStateData * +CacheManager::cachemgrStateData * CacheManager::ParseUrl(const char *url) { int t; @@ -384,7 +382,7 @@ CacheManager::ActionProtection(const CacheManagerAction * at) /// \ingroup CacheManagerInternal void -CacheManager::MenuCommand(StoreEntry * sentry) +CacheManager::MenuAction::run(StoreEntry * sentry) { CacheManagerActionList::iterator a; @@ -395,6 +393,7 @@ CacheManager::MenuCommand(StoreEntry * sentry) (*a)->action, (*a)->desc, CacheManager::GetInstance()->ActionProtection(*a)); } } +CacheManager::MenuAction::MenuAction() : CacheManagerAction ("menu", "Cache Manager Menu", 1, 1) { } /// \ingroup CacheManagerInternal char * -- 2.47.3