*/
#include "service.hpp"
+#include "connman_manager.hpp"
#include <settingsd/glib_traits.hpp>
#include <settingsd/unique_ptr.hpp>
ivi::settings::service::service(std::string service_path,
- GDBusConnection * connection)
+ GDBusConnection * connection,
+ connman_manager & manager)
: connman_("net.connman.Service", // Interface
service_path.c_str(), // Object path
connection)
+ , manager_(manager)
{
}
+ivi::settings::service::~service(void)
+{
+ // The connection data will become invalid once this object is
+ // destroyed. Clean up any references to that data.
+ manager_.deregister_connect_data(connman_.object_path());
+}
+
void
ivi::settings::service::handle_request(char const * name,
JsonReader * reader,
- connman_manager & manager,
response_callback & response)
{
if (name != nullptr) {
if (strcmp(name, "connect") == 0)
- connect(reader, manager, response);
+ connect(reader, response);
else if (strcmp(name, "disconnect") == 0)
- disconnect(reader, manager, response);
+ disconnect(reader, response);
else {
response.send_error(
std::string("Unrecognized connman service request name: ")
void
ivi::settings::service::connect(JsonReader * reader,
- connman_manager & manager,
response_callback response)
{
- bool successful_parse = false;
-
typedef agent::connect_info_map_type map_type;
map_type info;
}
// This cast is safe.
- if (static_cast<gint>(info.size()) == count) {
- successful_parse = true;
+ if (static_cast<gint>(info.size()) != count) {
+ json_reader_end_element(reader);
+ response.send_error("Unable to parse service connection information.");
+ return;
}
}
json_reader_end_element(reader);
- if (!successful_parse) {
- response.send_error("Unable to parse service connection information.");
- return;
- }
-
- if (!manager.register_connect_data(connman_.object_path(),
- std::move(info),
- response)) {
- response.send_error("Unable to register connection information.");
+ if (!info.empty()
+ && !manager_.register_connect_data(connman_.object_path(),
+ std::move(info),
+ response)) {
+ response.send_error("Connection information already registered.");
return;
}
+ // This will block until the connection is complete.
call_method("Connect", response);
}
void
ivi::settings::service::disconnect(JsonReader * reader,
- connman_manager & manager,
response_callback response)
{
bool null = false;
}
call_method("Disconnect", response);
-
- manager.deregister_connect_data(connman_.object_path());
}
void
#define IVI_SETTINGS_CONNMAN_SERVICE_HPP
#include "connman.hpp"
-#include "connman_manager.hpp"
+
+#include <string>
+
+#include <json-glib/json-glib.h>
namespace ivi
namespace settings
{
class response_callback;
+ class connman_manager;
/**
* @class service
* @param[in] service_path The D-Bus object path for connman
* service.
* @param[in] connection Underlying D-Bus connection.
- * @param[in] e Callback through which events will be
- * sent to clients.
+ * @param[in] manager The object to which connection data
+ * will be registered.
*/
service(std::string service_path,
- GDBusConnection * connection);
+ GDBusConnection * connection,
+ connman_manager & manager);
+
+ /// Destructor.
+ ~service();
/**
* Handle connman Service object request.
*/
void handle_request(char const * name,
JsonReader * reader,
- connman_manager & manager,
response_callback & response);
private:
/// Connect to the service.
void connect(JsonReader * reader,
- connman_manager & manager,
response_callback response);
/// Disconnect from the service.
void disconnect(JsonReader * reader,
- connman_manager & manager,
response_callback response);
/**
/// The proxy used to access the connman Service D-Bus API.
connman connman_;
- };
+ /// The object to which connection data will be registered.
+ connman_manager & manager_;
+ };
}
}