diff --git a/src/command_events.cc b/src/command_events.cc index 653b0925..26fafb7c 100644 --- a/src/command_events.cc +++ b/src/command_events.cc @@ -174,21 +174,21 @@ initialize_command_events() { utils::VariableMap* variables = control->variable(); core::DownloadList* downloadList = control->core()->download_list(); - ADD_COMMAND_SLOT("on_insert", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_insert())); - ADD_COMMAND_SLOT("on_erase", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_erase())); - ADD_COMMAND_SLOT("on_open", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_open())); - ADD_COMMAND_SLOT("on_close", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_close())); - ADD_COMMAND_SLOT("on_start", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_start())); - ADD_COMMAND_SLOT("on_stop", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_stop())); - ADD_COMMAND_SLOT("on_hash_queued", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_hash_queued())); - ADD_COMMAND_SLOT("on_hash_removed", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_hash_removed())); - ADD_COMMAND_SLOT("on_hash_done", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_hash_done())); - ADD_COMMAND_SLOT("on_finished", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_finished())); + ADD_COMMAND_SLOT_PRIVATE("on_insert", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_insert())); + ADD_COMMAND_SLOT_PRIVATE("on_erase", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_erase())); + ADD_COMMAND_SLOT_PRIVATE("on_open", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_open())); + ADD_COMMAND_SLOT_PRIVATE("on_close", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_close())); + ADD_COMMAND_SLOT_PRIVATE("on_start", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_start())); + ADD_COMMAND_SLOT_PRIVATE("on_stop", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_stop())); + ADD_COMMAND_SLOT_PRIVATE("on_hash_queued", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_hash_queued())); + ADD_COMMAND_SLOT_PRIVATE("on_hash_removed", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_hash_removed())); + ADD_COMMAND_SLOT_PRIVATE("on_hash_done", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_hash_done())); + ADD_COMMAND_SLOT_PRIVATE("on_finished", call_list, rak::bind_ptr_fn(&apply_on_state_change, &downloadList->slot_map_finished())); - ADD_COMMAND_SLOT("stop_on_ratio", call_list, rak::ptr_fn(&apply_stop_on_ratio)); + ADD_COMMAND_SLOT_PRIVATE("stop_on_ratio", call_list, rak::ptr_fn(&apply_stop_on_ratio)); - ADD_COMMAND_SLOT("start_tied", call_string, utils::object_fn(&apply_start_tied)); - ADD_COMMAND_SLOT("stop_untied", call_string, utils::object_fn(&apply_stop_untied)); - ADD_COMMAND_SLOT("close_untied", call_string, utils::object_fn(&apply_close_untied)); - ADD_COMMAND_SLOT("remove_untied", call_string, utils::object_fn(&apply_remove_untied)); + ADD_COMMAND_SLOT_PRIVATE("start_tied", call_string, utils::object_fn(&apply_start_tied)); + ADD_COMMAND_SLOT_PRIVATE("stop_untied", call_string, utils::object_fn(&apply_stop_untied)); + ADD_COMMAND_SLOT_PRIVATE("close_untied", call_string, utils::object_fn(&apply_close_untied)); + ADD_COMMAND_SLOT_PRIVATE("remove_untied", call_string, utils::object_fn(&apply_remove_untied)); } diff --git a/src/command_helpers.h b/src/command_helpers.h index 36b906b5..99f87822 100644 --- a/src/command_helpers.h +++ b/src/command_helpers.h @@ -72,26 +72,40 @@ add_variable("get_" key, "set_" key, key, &utils::CommandVariable::get_value, &u #define ADD_VARIABLE_STRING(key, defaultValue) \ add_variable("get_" key, "set_" key, key, &utils::CommandVariable::get_string, &utils::CommandVariable::set_string, std::string(defaultValue)); -#define ADD_COMMAND_SLOT(key, function, slot) \ +#define ADD_COMMAND_SLOT(key, function, slot, parm, doc) \ + commandSlotsItr->set_slot(slot); \ + variables->insert(key, commandSlotsItr++, &utils::CommandSlot::function, utils::VariableMap::flag_dont_delete | utils::VariableMap::flag_public_xmlrpc, parm, doc); + +#define ADD_COMMAND_SLOT_PRIVATE(key, function, slot) \ commandSlotsItr->set_slot(slot); \ variables->insert(key, commandSlotsItr++, &utils::CommandSlot::function, utils::VariableMap::flag_dont_delete); -#define ADD_COMMAND_COPY(key, function) \ +#define ADD_COMMAND_COPY(key, function, parm, doc) \ + variables->insert(key, (commandSlotsItr - 1), &utils::CommandSlot::function, utils::VariableMap::flag_dont_delete | utils::VariableMap::flag_public_xmlrpc, parm, doc); + +#define ADD_COMMAND_COPY_PRIVATE(key, function) \ variables->insert(key, (commandSlotsItr - 1), &utils::CommandSlot::function, utils::VariableMap::flag_dont_delete); #define ADD_COMMAND_VALUE_TRI(key, set, get) \ - ADD_COMMAND_SLOT(key, call_value, utils::object_value_fn(set)) \ - ADD_COMMAND_COPY("set_" key, call_value) \ - ADD_COMMAND_SLOT("get_" key, call_unknown, utils::object_void_fn(get)) + ADD_COMMAND_SLOT_PRIVATE(key, call_value, utils::object_value_fn(set)) \ + ADD_COMMAND_COPY("set_" key, call_value, "i:i", "") \ + ADD_COMMAND_SLOT("get_" key, call_unknown, utils::object_void_fn(get), "i:", "") #define ADD_COMMAND_VALUE_TRI_KB(key, set, get) \ - ADD_COMMAND_SLOT(key, call_value_kb, utils::object_value_fn(set)) \ - ADD_COMMAND_COPY("set_" key, call_value) \ - ADD_COMMAND_SLOT("get_" key, call_unknown, utils::object_void_fn(get)) + ADD_COMMAND_SLOT_PRIVATE(key, call_value_kb, utils::object_value_fn(set)) \ + ADD_COMMAND_COPY("set_" key, call_value, "i:i", "") \ + ADD_COMMAND_SLOT("get_" key, call_unknown, utils::object_void_fn(get), "i:", "") #define ADD_COMMAND_STRING_TRI(key, set, get) \ - ADD_COMMAND_SLOT(key, call_string, utils::object_string_fn(set)) \ - ADD_COMMAND_COPY("set_" key, call_string) \ - ADD_COMMAND_SLOT("get_" key, call_unknown, utils::object_void_fn(get)) + ADD_COMMAND_SLOT_PRIVATE(key, call_string, utils::object_string_fn(set)) \ + ADD_COMMAND_COPY("set_" key, call_string, "i:s", "") \ + ADD_COMMAND_SLOT("get_" key, call_unknown, utils::object_void_fn(get), "s:", "") + +#define ADD_COMMAND_STRING(key, slot) \ + ADD_COMMAND_SLOT(key, call_string, slot, "i:s", "") + +#define ADD_COMMAND_LIST(key, slot) \ + ADD_COMMAND_SLOT(key, call_list, slot, "i:", "") + #endif diff --git a/src/command_network.cc b/src/command_network.cc index c66b1161..86dfb0cc 100644 --- a/src/command_network.cc +++ b/src/command_network.cc @@ -143,9 +143,9 @@ initialize_command_network() { ADD_VARIABLE_VALUE("tracker_numwant", -1); - ADD_COMMAND_SLOT("encryption", call_list, rak::ptr_fn(&apply_encryption)); + ADD_COMMAND_LIST("encryption", rak::ptr_fn(&apply_encryption)); - ADD_COMMAND_SLOT("tos", call_string, rak::ptr_fn(&apply_tos)); + ADD_COMMAND_STRING("tos", rak::ptr_fn(&apply_tos)); ADD_COMMAND_STRING_TRI("bind", rak::make_mem_fun(control->core(), &core::Manager::set_bind_address), rak::make_mem_fun(control->core(), &core::Manager::bind_address)); ADD_COMMAND_STRING_TRI("ip", rak::make_mem_fun(control->core(), &core::Manager::set_local_address), rak::make_mem_fun(control->core(), &core::Manager::local_address)); diff --git a/src/command_ui.cc b/src/command_ui.cc index fc231567..1c109a61 100644 --- a/src/command_ui.cc +++ b/src/command_ui.cc @@ -104,16 +104,16 @@ initialize_command_ui() { ADD_VARIABLE_STRING("key_layout", "qwerty"); - ADD_COMMAND_SLOT("view_add", call_string, utils::object_string_fn(rak::make_mem_fun(control->view_manager(), &core::ViewManager::insert_throw))); + ADD_COMMAND_STRING("view_add", utils::object_string_fn(rak::make_mem_fun(control->view_manager(), &core::ViewManager::insert_throw))); - ADD_COMMAND_SLOT("view_filter", call_list, rak::bind_ptr_fn(&apply_view_filter, &core::ViewManager::set_filter)); - ADD_COMMAND_SLOT("view_filter_on", call_list, rak::bind_ptr_fn(&apply_view_filter, &core::ViewManager::set_filter_on)); + ADD_COMMAND_LIST("view_filter", rak::bind_ptr_fn(&apply_view_filter, &core::ViewManager::set_filter)); + ADD_COMMAND_LIST("view_filter_on", rak::bind_ptr_fn(&apply_view_filter, &core::ViewManager::set_filter_on)); - ADD_COMMAND_SLOT("view_sort", call_list, rak::ptr_fn(&apply_view_sort)); - ADD_COMMAND_SLOT("view_sort_new", call_list, rak::bind_ptr_fn(&apply_view_filter, &core::ViewManager::set_sort_new)); - ADD_COMMAND_SLOT("view_sort_current", call_list, rak::bind_ptr_fn(&apply_view_filter, &core::ViewManager::set_sort_current)); + ADD_COMMAND_LIST("view_sort", rak::ptr_fn(&apply_view_sort)); + ADD_COMMAND_LIST("view_sort_new", rak::bind_ptr_fn(&apply_view_filter, &core::ViewManager::set_sort_new)); + ADD_COMMAND_LIST("view_sort_current", rak::bind_ptr_fn(&apply_view_filter, &core::ViewManager::set_sort_current)); -// ADD_COMMAND_SLOT("view_sort_current", call_list, rak::bind_ptr_fn(&apply_view_filter, &core::ViewManager::set_sort_current)); +// ADD_COMMAND_LIST("view_sort_current", rak::bind_ptr_fn(&apply_view_filter, &core::ViewManager::set_sort_current)); - ADD_COMMAND_SLOT("print", call_string, utils::object_string_fn(rak::make_mem_fun(control->core(), &core::Manager::push_log))); + ADD_COMMAND_STRING("print", utils::object_string_fn(rak::make_mem_fun(control->core(), &core::Manager::push_log))); } diff --git a/src/core/view_manager.cc b/src/core/view_manager.cc index 0975223e..410d93b2 100644 --- a/src/core/view_manager.cc +++ b/src/core/view_manager.cc @@ -250,6 +250,7 @@ ViewManager::set_filter(const std::string& name, const filter_args& args) { iterator viewItr = find_throw(name); (*viewItr)->set_filter(build_filter_list(args)); + (*viewItr)->filter(); } void diff --git a/src/option_handler_rules.cc b/src/option_handler_rules.cc index 809c9fe6..3b111dcd 100644 --- a/src/option_handler_rules.cc +++ b/src/option_handler_rules.cc @@ -151,8 +151,11 @@ apply_fast_cgi(const std::string& arg) { if (control->xmlrpc() == NULL) { control->set_xmlrpc(new rpc::XmlRpc); - control->xmlrpc()->set_slot_call_command_get(rak::mem_fn(control->variable(), &utils::VariableMap::call_command_get)); - control->xmlrpc()->set_slot_call_command_set(rak::mem_fn(control->variable(), &utils::VariableMap::call_command_set)); + control->xmlrpc()->set_slot_call_command(rak::mem_fn(control->variable(), &utils::VariableMap::call_command)); + + for (utils::VariableMap::const_iterator itr = control->variable()->begin(), last = control->variable()->end(); itr != last; itr++) + if (itr->second.m_flags & utils::VariableMap::flag_public_xmlrpc) + control->xmlrpc()->insert_command(itr->first, itr->second.m_parm, itr->second.m_doc); } control->set_fast_cgi(new rpc::FastCgi(arg)); @@ -227,7 +230,7 @@ initialize_variables() { variables->insert("import", new utils::VariableStringSlot(NULL, rak::ptr_fn(&apply_import))); variables->insert("try_import", new utils::VariableStringSlot(NULL, rak::ptr_fn(&apply_try_import))); - ADD_COMMAND_SLOT("schedule", call_list, rak::ptr_fn(&apply_schedule)); + ADD_COMMAND_LIST("schedule", rak::ptr_fn(&apply_schedule)); variables->insert("schedule_remove", new utils::VariableStringSlot(NULL, rak::mem_fn(control->command_scheduler(), &CommandScheduler::erase))); variables->insert("download_scheduler", new utils::VariableVoidSlot(rak::mem_fn(control->scheduler(), &core::Scheduler::update))); diff --git a/src/rpc/xmlrpc.cc b/src/rpc/xmlrpc.cc index ed44d322..5bdd4a34 100644 --- a/src/rpc/xmlrpc.cc +++ b/src/rpc/xmlrpc.cc @@ -48,6 +48,8 @@ namespace rpc { +XmlRpc::slot_call_command XmlRpc::m_slotCall; + #ifdef HAVE_XMLRPC_C torrent::Object @@ -113,25 +115,15 @@ xmlrpc_to_object(xmlrpc_env* env, xmlrpc_value* value) { } } -struct server_info_t { - server_info_t(const char* command, XmlRpc::slot_call_command* callCommand) : - m_command(command), m_callCommand(callCommand) {} - - const char* m_command; - XmlRpc::slot_call_command* m_callCommand; -}; - xmlrpc_value* -xmlrpc_call_command(xmlrpc_env* env, xmlrpc_value* args, void* voidServerInfo) { +XmlRpc::call_command(xmlrpc_env* env, xmlrpc_value* args, void* voidServerInfo) { torrent::Object object = xmlrpc_to_object(env, args); if (env->fault_occurred) return NULL; try { - server_info_t* serverInfo = reinterpret_cast(voidServerInfo); - - const torrent::Object& resultObject = (*serverInfo->m_callCommand)(serverInfo->m_command, object); + const torrent::Object& resultObject = XmlRpc::m_slotCall((const char*)voidServerInfo, object); xmlrpc_value* result; xmlrpc_int32 tmpInt; @@ -162,22 +154,6 @@ xmlrpc_call_command(xmlrpc_env* env, xmlrpc_value* args, void* voidServerInfo) { XmlRpc::XmlRpc() : m_env(new xmlrpc_env) { xmlrpc_env_init(m_env); m_registry = xmlrpc_registry_new(m_env); - - // Add a helper function for this... - - xmlrpc_registry_add_method_w_doc(m_env, m_registry, NULL, "call.set_upload_rate", &xmlrpc_call_command, new server_info_t("upload_rate", &m_slotSet), "i:i", ""); - xmlrpc_registry_add_method_w_doc(m_env, m_registry, NULL, "call.get_upload_rate", &xmlrpc_call_command, new server_info_t("upload_rate", &m_slotGet), "i:", ""); - - xmlrpc_registry_add_method_w_doc(m_env, m_registry, NULL, "call.get_directory", &xmlrpc_call_command, new server_info_t("get_directory", &m_slotGet), "s:", ""); - xmlrpc_registry_add_method_w_doc(m_env, m_registry, NULL, "call.set_directory", &xmlrpc_call_command, new server_info_t("set_directory", &m_slotSet), "i:s", ""); - - xmlrpc_registry_add_method_w_doc(m_env, m_registry, NULL, "call.get_bind", &xmlrpc_call_command, new server_info_t("get_bind", &m_slotGet), "s:", ""); - xmlrpc_registry_add_method_w_doc(m_env, m_registry, NULL, "call.set_bind", &xmlrpc_call_command, new server_info_t("set_bind", &m_slotSet), "i:s", ""); - - xmlrpc_registry_add_method_w_doc(m_env, m_registry, NULL, "call.get_ip", &xmlrpc_call_command, new server_info_t("get_ip", &m_slotGet), "s:", ""); - xmlrpc_registry_add_method_w_doc(m_env, m_registry, NULL, "call.set_ip", &xmlrpc_call_command, new server_info_t("set_ip", &m_slotSet), "i:s", ""); - - xmlrpc_registry_add_method_w_doc(m_env, m_registry, NULL, "call.print", &xmlrpc_call_command, new server_info_t("print", &m_slotSet), "i:s", ""); } XmlRpc::~XmlRpc() { @@ -201,6 +177,11 @@ XmlRpc::process(const char* inBuffer, uint32_t length, slot_write slotWrite) { return result; } +void +XmlRpc::insert_command(const char* name, const char* parm, const char* doc) { + xmlrpc_registry_add_method_w_doc(m_env, m_registry, NULL, name, &XmlRpc::call_command, const_cast(name), parm, doc); +} + #else XmlRpc::XmlRpc() { throw torrent::resource_error("XMLRPC not supported."); } diff --git a/src/rpc/xmlrpc.h b/src/rpc/xmlrpc.h index 493f699b..d10f6e4d 100644 --- a/src/rpc/xmlrpc.h +++ b/src/rpc/xmlrpc.h @@ -40,6 +40,7 @@ #include typedef struct _xmlrpc_env xmlrpc_env; +typedef struct _xmlrpc_value xmlrpc_value; typedef struct _xmlrpc_registry xmlrpc_registry; namespace torrent { @@ -58,15 +59,16 @@ public: bool process(const char* inBuffer, uint32_t length, slot_write slotWrite); - void set_slot_call_command_get(slot_call_command::base_type* s) { m_slotGet.set(s); } - void set_slot_call_command_set(slot_call_command::base_type* s) { m_slotSet.set(s); } + void insert_command(const char* name, const char* parm, const char* doc); + + static xmlrpc_value* call_command(xmlrpc_env* env, xmlrpc_value* args, void* voidServerInfo); + static void set_slot_call_command(slot_call_command::base_type* s) { m_slotCall.set(s); } private: xmlrpc_env* m_env; xmlrpc_registry* m_registry; - slot_call_command m_slotGet; - slot_call_command m_slotSet; + static slot_call_command m_slotCall; }; } diff --git a/src/utils/command_slot.cc b/src/utils/command_slot.cc index 383699d5..97a0eb95 100644 --- a/src/utils/command_slot.cc +++ b/src/utils/command_slot.cc @@ -97,6 +97,7 @@ CommandSlot::call_value_base(Variable* rawVariable, const torrent::Object& rawAr switch (arg.type()) { case torrent::Object::TYPE_VALUE: + // Should shift this one too, so it gives the right unit. return command->m_slot(arg); case torrent::Object::TYPE_STRING: diff --git a/src/utils/variable_map.cc b/src/utils/variable_map.cc index bca5a66c..acd9e602 100644 --- a/src/utils/variable_map.cc +++ b/src/utils/variable_map.cc @@ -62,13 +62,14 @@ VariableMap::~VariableMap() { } void -VariableMap::insert(key_type key, Variable* variable, generic_slot genericSlot, int flags) { +VariableMap::insert(key_type key, Variable* variable, generic_slot genericSlot, int flags, + const char* parm, const char* doc) { iterator itr = base_type::find(key); if (itr != base_type::end()) throw torrent::internal_error("VariableMap::insert(...) tried to insert an already existing key."); - base_type::insert(itr, value_type(key, variable_map_data_type(variable, genericSlot, NULL, flags))); + base_type::insert(itr, value_type(key, variable_map_data_type(variable, genericSlot, NULL, flags, parm, doc))); } const VariableMap::mapped_type @@ -279,32 +280,4 @@ VariableMap::call_command(key_type key, const mapped_type& arg) { return itr->second.m_genericSlot(itr->second.m_variable, arg); } -const VariableMap::mapped_type -VariableMap::call_command_get(key_type key, const mapped_type& arg) { - const_iterator itr = base_type::find(key); - - if (itr == base_type::end()) - throw torrent::input_error("Variable \"" + std::string(key) + "\" does not exist."); - - if (itr->second.m_genericSlot != NULL) - return itr->second.m_genericSlot(itr->second.m_variable, arg); - - return get(key); -} - -const VariableMap::mapped_type -VariableMap::call_command_set(key_type key, const mapped_type& arg) { - const_iterator itr = base_type::find(key); - - if (itr == base_type::end()) - throw torrent::input_error("Variable \"" + std::string(key) + "\" does not exist."); - - if (itr->second.m_genericSlot != NULL) - return itr->second.m_genericSlot(itr->second.m_variable, arg); - - set(key, arg); - - return Variable::m_emptyObject; -} - } diff --git a/src/utils/variable_map.h b/src/utils/variable_map.h index 56e4f6a6..a90dd5ad 100644 --- a/src/utils/variable_map.h +++ b/src/utils/variable_map.h @@ -66,14 +66,18 @@ struct variable_map_data_type { typedef const torrent::Object (*generic_slot)(Variable*, const torrent::Object&); typedef const torrent::Object (*download_slot)(Variable*, core::Download*, const torrent::Object&); - variable_map_data_type(Variable* variable, generic_slot genericSlot, download_slot downloadSlot, int flags) : - m_variable(variable), m_genericSlot(genericSlot), m_downloadSlot(downloadSlot), m_flags(flags) {} + variable_map_data_type(Variable* variable, generic_slot genericSlot, download_slot downloadSlot, int flags, + const char* parm, const char* doc) : + m_variable(variable), m_genericSlot(genericSlot), m_downloadSlot(downloadSlot), m_flags(flags), m_parm(parm), m_doc(doc) {} Variable* m_variable; generic_slot m_genericSlot; download_slot m_downloadSlot; int m_flags; + + const char* m_parm; + const char* m_doc; }; class VariableMap : public std::map { @@ -90,11 +94,15 @@ public: using base_type::key_type; using base_type::value_type; + using base_type::begin; + using base_type::end; + static const int max_size_key = 128; static const int max_size_opt = 1024; static const int max_size_line = max_size_key + max_size_opt + 64; - static const int flag_dont_delete = 0x1; + static const int flag_dont_delete = 0x1; + static const int flag_public_xmlrpc = 0x2; VariableMap() {} ~VariableMap(); @@ -104,15 +112,16 @@ public: // Allow NULL slot as a temporary compatibility hack. - void insert(key_type key, Variable* variable, generic_slot genericSlot = NULL, int flags = 0); + void insert(key_type key, Variable* variable, generic_slot genericSlot = NULL, int flags = 0, + const char* parm = "", const char* doc = ""); // Consider uninlining the helper functions. - const mapped_type get(key_type key) const; - const mapped_type get_d(core::Download* download, key_type key) const; + const mapped_type get(key_type key) const; + const mapped_type get_d(core::Download* download, key_type key) const; - const std::string get_string(key_type key) const { return get(key).as_string(); } - const std::string get_d_string(core::Download* download, key_type key) const { return get_d(download, key).as_string(); } + const std::string get_string(key_type key) const { return get(key).as_string(); } + const std::string get_d_string(core::Download* download, key_type key) const { return get_d(download, key).as_string(); } mapped_value_type get_value(key_type key) const { return get(key).as_value(); } mapped_value_type get_d_value(core::Download* download, key_type key) const { return get_d(download, key).as_value(); } @@ -145,9 +154,6 @@ public: // requires seperate calls to get and set. These will be merged. const mapped_type call_command(key_type key, const mapped_type& arg); - const mapped_type call_command_get(key_type key, const mapped_type& arg); - const mapped_type call_command_set(key_type key, const mapped_type& arg); - private: VariableMap(const VariableMap&); void operator = (const VariableMap&);