Repository : http://git.fedorahosted.org/cgit/firewalld-recode.git
On branch : master
commit f39dbcbd2950b018b01e7ba1f91f073bf892f13e Author: Daniel Kopecek dkopecek@redhat.com Date: Tue Oct 7 10:22:19 2014 +0200
Minor refactoring of the DBusResultBuilder
src/Daemon/DBus.hpp | 122 ++++++++++++++++++++++++-------------------------- 1 files changed, 59 insertions(+), 63 deletions(-)
diff --git a/src/Daemon/DBus.hpp b/src/Daemon/DBus.hpp index 8fcd859..31912c9 100644 --- a/src/Daemon/DBus.hpp +++ b/src/Daemon/DBus.hpp @@ -223,7 +223,7 @@ namespace firewalld return *this; }
- DBusResultBuilder& addBuilder() + DBusResultBuilder& addBuilder(const char *signature = nullptr) { switch(_value_type) { case ValueType::Array: @@ -233,7 +233,7 @@ namespace firewalld throw std::runtime_error("Invalid usage of addBuilder() method"); }
- DBusResultBuilder* builder = new DBusResultBuilder(); + DBusResultBuilder* builder = new DBusResultBuilder(signature); _array.push_back(builder); return *builder; } @@ -311,96 +311,92 @@ namespace firewalld bool finishMethodResponse(GVariantBuilder& g_builder) { switch (_value_type) { - case ValueType::Error: - case ValueType::Unknown: - return false; case ValueType::Basic: - LOG(DEBUG) << "basic"; g_variant_builder_add_value(&g_builder, _basic.gobj()); return true; + case ValueType::List: case ValueType::Array: { if (_array.size() == 0) { - return false; + if (!_value_signature.empty()) { + GVariant *g_array = g_variant_new(_value_signature.c_str(), nullptr); + g_variant_builder_add_value(&g_builder, g_array); + return true; + } else { + return false; + } }
GVariantBuilder g_array_builder; - g_variant_builder_init(&g_array_builder, G_VARIANT_TYPE_ARRAY); - LOG(DEBUG) << "array init"; - - for (_Array::iterator i = _array.begin(); - i != _array.end(); ++i) - { - DBusResultBuilder *builder = *i; - if (builder == nullptr) { - continue; - } - LOG(DEBUG) << "array entry"; - builder->finishMethodResponse(g_array_builder); - }
- LOG(DEBUG) << "array end"; - GVariant *g_array = g_variant_builder_end(&g_array_builder); - LOG(DEBUG) << "array type: " << g_variant_get_type_string(g_array); - LOG(DEBUG) << "builder add"; - g_variant_builder_add_value(&g_builder, g_array); - LOG(DEBUG) << "builder added"; - } return true; - case ValueType::List: - { - if (_array.size() == 0) { - return false; + if (_value_type == ValueType::List) { + g_variant_builder_init(&g_array_builder, G_VARIANT_TYPE_TUPLE); + } else { + g_variant_builder_init(&g_array_builder, G_VARIANT_TYPE_ARRAY); }
- GVariantBuilder g_array_builder; - g_variant_builder_init(&g_array_builder, G_VARIANT_TYPE_TUPLE); - LOG(DEBUG) << "list init"; - - for (_Array::iterator i = _array.begin(); - i != _array.end(); ++i) - { - DBusResultBuilder *builder = *i; - if (builder == nullptr) { - continue; - } - LOG(DEBUG) << "list entry"; + for (auto builder : _array) { + if (builder != nullptr) { builder->finishMethodResponse(g_array_builder); - } + } + }
- LOG(DEBUG) << "list end"; GVariant *g_array = g_variant_builder_end(&g_array_builder); - LOG(DEBUG) << "list type: " << g_variant_get_type_string(g_array); - LOG(DEBUG) << "builder add"; g_variant_builder_add_value(&g_builder, g_array); - LOG(DEBUG) << "builder added"; - } return true; + + return true; + } + break; case ValueType::Dictionary: { if (_dictionary.size() == 0) { - return false; + if (!_value_signature.empty()) { + GVariant *g_array = g_variant_new(_value_signature.c_str(), nullptr); + g_variant_builder_add_value(&g_builder, g_array); + return true; + } else { + return false; + } }
GVariantBuilder g_dictionary_builder; g_variant_builder_init(&g_dictionary_builder, G_VARIANT_TYPE_DICTIONARY);
- for (_Dictionary::iterator i = _dictionary.begin(); - i != _dictionary.end(); ++i) - { - const UString& key = i->first; - DBusResultBuilder *builder = i->second; - GVariantBuilder g_variant_builder; + for (auto dict_entry : _dictionary) { + const UString& key = dict_entry.first; + DBusResultBuilder *builder = dict_entry.second; + GVariantBuilder g_variant_builder;
- g_variant_builder_init(&g_variant_builder, G_VARIANT_TYPE_DICT_ENTRY); - g_variant_builder_add_value(&g_variant_builder, g_variant_new_string(key.c_str())); - builder->finishMethodResponse(g_variant_builder); + g_variant_builder_init(&g_variant_builder, G_VARIANT_TYPE_DICT_ENTRY); + g_variant_builder_add_value(&g_variant_builder, g_variant_new_string(key.c_str()));
- GVariant *g_dict_entry = g_variant_builder_end(&g_variant_builder); - g_variant_builder_add_value(&g_dictionary_builder, g_dict_entry); - } + builder->finishMethodResponse(g_variant_builder); + + GVariant *g_dict_entry = g_variant_builder_end(&g_variant_builder); + g_variant_builder_add_value(&g_dictionary_builder, g_dict_entry); + }
GVariant *g_dictionary = g_variant_builder_end(&g_dictionary_builder); g_variant_builder_add_value(&g_builder, g_dictionary); - } return true; + + return true; + } + break; + case ValueType::Unknown: + LOG(DEBUG) << "Unknown"; + if (!_value_signature.empty()) { + GVariant *g_array = g_variant_new(_value_signature.c_str(), nullptr); + LOG(DEBUG) << "Add empty variant of type " << _value_signature; + g_variant_builder_add_value(&g_builder, g_array); + LOG(DEBUG) << "added"; + return true; + } else { + return false; + } + break; + case ValueType::Error: + default: + return false; } return false; }