diff options
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | packaging/settingsd.changes | 3 | ||||
-rw-r--r-- | packaging/settingsd.spec | 2 | ||||
-rw-r--r-- | plugins/connman/technology.cpp | 175 |
4 files changed, 108 insertions, 74 deletions
diff --git a/configure.ac b/configure.ac index 2bc6ecd..83221e9 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ]) -AC_INIT([settingsd], [0.4.1], [ossama.othman@intel.com]) +AC_INIT([settingsd], [0.4.2], [ossama.othman@intel.com]) AM_INIT_AUTOMAKE([1.11.1 foreign -Wall -Werror -Wno-portability silent-rules]) LT_INIT([disable-static dlopen]) diff --git a/packaging/settingsd.changes b/packaging/settingsd.changes index 3880866..4effcd7 100644 --- a/packaging/settingsd.changes +++ b/packaging/settingsd.changes @@ -1,3 +1,6 @@ +* Mon Mar 24 2014 Ossama Othman <ossama.othman@intel.com> accepted/tizen/ivi/release/20140312.113719@c944784 +- [TIVI-2848] Fix tethering configuration. + * Thu Jan 23 2014 Ossama Othman <ossama.othman@intel.com> submit/tizen/20131219.042933@47492bc - Added API for enabling tethering - Added autoconnect property settings for services diff --git a/packaging/settingsd.spec b/packaging/settingsd.spec index b245158..babd1ce 100644 --- a/packaging/settingsd.spec +++ b/packaging/settingsd.spec @@ -1,6 +1,6 @@ Name: settingsd Summary: Tizen IVI Settings Daemon -Version: 0.4.1 +Version: 0.4.2 Release: 1 Group: Application Framework/Settings License: LGPL-2.1 diff --git a/plugins/connman/technology.cpp b/plugins/connman/technology.cpp index ef093ce..13711ba 100644 --- a/plugins/connman/technology.cpp +++ b/plugins/connman/technology.cpp @@ -138,86 +138,117 @@ ivi::settings::technology::set_powered(JsonReader * reader, void ivi::settings::technology::set_tethering(JsonReader * reader, - response_callback & response) + response_callback & response) { - char const * ssid = nullptr; - char const * password = nullptr; - bool enabled = false, have_password = true, have_ssid = true; - constexpr char const identifier[] = "TetheringIdentifier"; - constexpr char const passphrase[] = "TetheringPassphrase"; - constexpr char const tethering[] = "Tethering"; - - if (json_reader_read_member(reader, "enabled")) { + bool const have_enabled = json_reader_read_member(reader, "enabled"); + bool enabled = false; + if (have_enabled) { enabled = json_reader_get_boolean_value(reader); json_reader_end_element(reader); + } else { + response.send_error( + "connman::technology tether \"enabled\" parameter is null."); + // We have to call json_reader_end_element() before we return + json_reader_end_element(reader); + return; + } + + unique_ptr<GError> identifier_error; + unique_ptr<GError> passphrase_error; + bool identifier_res = true; // Identifier not always needed. + bool passphrase_res = true; // Passphrase not always needed. + + // Check if we have a tethering identifier and passphrase if we are + // enabling tethering. + if (enabled) { + // -------------------- + // Tethering identifier + // -------------------- + char const * ssid = nullptr; + if (json_reader_read_member(reader, "ssid")) { + ssid = json_reader_get_string_value(reader); + } + json_reader_end_element(reader); - // In case that we are enabling tethering we need to setup also SSID and passphrase - // Otherwise those values are not required - if (enabled) { - have_ssid = json_reader_read_member(reader, "ssid"); - if (have_ssid) { - ssid = json_reader_get_string_value(reader); - } - json_reader_end_element(reader); - - have_password = json_reader_read_member(reader, "password"); - if (have_password) { - password = json_reader_get_string_value(reader); - } - json_reader_end_element(reader); + if (ssid != nullptr) { + constexpr char const identifier[] = "TetheringIdentifier"; + GError * error = nullptr; + identifier_res = this->set_property(identifier, + g_variant_new_string(ssid), + response, + error); + identifier_error.reset(error); } - if (have_ssid && have_password) { - GError * identifier_error = nullptr, *passphrase_error = nullptr, *enabled_error = nullptr; - bool identifier_res = true, passphrase_res = true, enabled_res; - - enabled_res = this->set_property(tethering, g_variant_new_boolean(enabled), response, enabled_error); - - if (enabled && enabled_res) { - passphrase_res = this->set_property(passphrase, g_variant_new_string(password), response, passphrase_error); - identifier_res = this->set_property(identifier, g_variant_new_string(ssid), response, identifier_error); - } - - if (enabled_res && identifier_res && passphrase_res) { - response.send_response( - [enabled](JsonBuilder * builder) - { - json_builder_set_member_name(builder, "value"); - json_builder_add_boolean_value(builder, enabled); - }); - } else { - std::string failed_part; - GError *error; - - if (!enabled_res) { - error = enabled_error; - failed_part = std::string("status"); - } else if (!identifier_res) { - error = identifier_error; - failed_part = std::string("identifier"); - } else { - error = passphrase_error; - failed_part = std::string("passphrase"); - } - - if (error != nullptr) { - unique_ptr<GError> safe_error(error); - response.send_error( - std::string("Unable to set connman::technology tethering ") - + failed_part - + std::string(": ") - + enabled_error->message); - } else { - response.send_error(std::string("Malformed connman::technology tethering value ") + failed_part); - } - } - } else if (!have_ssid) { - response.send_error("connman::technology tether ssid parameter is null."); - } else { - response.send_error("connman::technology tether password parameter is null."); + // -------------------- + // Tethering passphrase + // -------------------- + char const * password = nullptr; + if (json_reader_read_member(reader, "password")) { + password = json_reader_get_string_value(reader); + } + json_reader_end_element(reader); + + if (password != nullptr) { + constexpr char const passphrase[] = "TetheringPassphrase"; + GError * error = nullptr; + passphrase_res = this->set_property(passphrase, + g_variant_new_string(password), + response, + error); + passphrase_error.reset(error); } + } + + // ---------------- + // Tethering status + // ---------------- + // Set "enabled" after passphrase and SSID have been set. + // Otherwise Connman may issue an invalid argument error. + constexpr char const tethering[] = "Tethering"; + bool enabled_res = false; + GError * error = nullptr; + enabled_res = this->set_property(tethering, + g_variant_new_boolean(enabled), + response, + error); + unique_ptr<GError> enabled_error(error); + + // ---------------------------- + // Send final response or error + // ---------------------------- + if (enabled_res && identifier_res && passphrase_res) { + response.send_response( + [enabled](JsonBuilder * builder) { + json_builder_set_member_name(builder, "value"); + json_builder_add_boolean_value(builder, enabled); + }); } else { - response.send_error("connman::technology tether enabled parameter is null."); + char const * failed_part = nullptr; + error = nullptr; + + if (!enabled_res) { + error = enabled_error.get(); + failed_part = "status"; + } else if (!identifier_res) { + error = identifier_error.get(); + failed_part = "identifier"; + } else if (!passphrase_res) { + error = passphrase_error.get(); + failed_part = "passphrase"; + } + + if (error != nullptr) { + response.send_error( + std::string("Unable to set connman::technology tethering ") + + failed_part + + std::string(": ") + + error->message); + } else { + response.send_error( + std::string("Malformed connman::technology tethering ") + + failed_part); + } } } |