summaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
Diffstat (limited to 'server/src')
-rw-r--r--server/src/geofence_dbus_server.c499
1 files changed, 232 insertions, 267 deletions
diff --git a/server/src/geofence_dbus_server.c b/server/src/geofence_dbus_server.c
index 254d00b..3e86c03 100644
--- a/server/src/geofence_dbus_server.c
+++ b/server/src/geofence_dbus_server.c
@@ -20,20 +20,35 @@
#include "geofence_dbus_server.h"
#include "geofence_dbus_server_priv.h"
+
+#define GEOFENCE_SERVICE_NAME "org.tizen.lbs.Providers.GeofenceServer"
+#define GEOFENCE_SERVICE_PATH "/org/tizen/lbs/Providers/GeofenceServer"
+
+typedef struct _geofence_dbus_signal_s {
+ guint add_geofence_h;
+ guint delete_geofence_h;
+ guint get_geofences_h;
+ guint enable_geofence_h;
+ guint start_geofence_h;
+ guint stop_geofence_h;
+
+ guint add_place_h;
+ guint update_place_h;
+ guint delete_place_h;
+ guint get_place_name_h;
+ guint get_places_h;
+} geofence_dbus_signal_s;
+
typedef struct _geofence_dbus_server_s {
/* Geofence Dbus Server info */
gchar *service_name;
gchar *prev_owner;
gchar *service_path;
- gchar *name;
- gchar *description;
- GHashTable *connections;
gint status;
GDBusObjectManagerServer *manager;
SLocObjectSkeleton *obj_skeleton;
- GeofenceDbusSetOptionsCB set_options_cb;
- GeofenceDbusShutdownCB shutdown_cb;
- gpointer userdata; /* used for save GpsManager */
+ GHashTable *connections;
+ gpointer userdata;
guint owner_changed_id;
guint owner_id;
guint get_providerinfo_h;
@@ -42,41 +57,10 @@ typedef struct _geofence_dbus_server_s {
guint add_reference_h;
guint remove_reference_h;
- /* for geofence */
- guint add_geofence_h;
- guint add_place_h;
- guint enable_geofence_h;
- guint update_place_h;
- guint delete_geofence_h;
- guint delete_place_h;
- guint start_geofence_h;
- guint stop_geofence_h;
- guint getplacename_geofence_h;
- guint getlist_geofence_h;
- guint getplacelist_geofence_h;
-
- gint geofence_status;
- GeofenceAddGeofenceCB add_geofence_cb;
- GeofenceAddPlaceCB add_place_cb;
- GeofenceEnableGeofenceCB enable_geofence_cb;
- GeofenceUpdatePlaceCB update_place_cb;
- GeofenceDeleteGeofenceCB delete_geofence_cb;
- GeofenceDeletePlaceCB delete_place_cb;
- GeofenceGetPlaceNameGeofenceCB getplacename_geofence_cb;
- GeofenceGetlistGeofenceCB getlist_geofence_cb;
- GeofenceGetPlaceListGeofenceCB getplacelist_geofence_cb;
- GeofenceStartGeofenceCB start_geofence_cb;
- GeofenceStopGeofenceCB stop_geofence_cb;
+ geofence_dbus_signal_s *dbus_signal;
+ geofence_dbus_callback_s *dbus_callback;
} geofence_dbus_server_s;
-typedef enum {
- GEOFENCE_DBUS_SERVER_METHOD_GPS = 0,
- GEOFENCE_DBUS_SERVER_METHOD_NPS,
- GEOFENCE_DBUS_SERVER_METHOD_AGPS,
- GEOFENCE_DBUS_SERVER_METHOD_GEOFENCE,
- GEOFENCE_DBUS_SERVER_METHOD_SIZE,
-} geofence_dbus_server_method_e;
-
static gboolean geofence_dbus_setup_geofence_interface(SLocObjectSkeleton *object, geofence_dbus_server_s *ctx)
{
GEOFENCE_DBUS_SERVER_LOGD("geofence_dbus_setup_geofence_interface");
@@ -91,160 +75,138 @@ static gboolean geofence_dbus_setup_geofence_interface(SLocObjectSkeleton *objec
return TRUE;
}
-static gboolean geofence_find_method(gpointer key, gpointer value, gpointer user_data)
-{
- int *ip = (int *)user_data;
- int *arr = (int *)value;
- int method = *ip;
-
- GEOFENCE_DBUS_SERVER_LOGD("[%s] geofence_find_method method:%d, count:%d", (char *)key, method, arr[method]);
-
- return (arr[method] > 0) ? TRUE : FALSE;
-}
-
/*
* For geofence methods
*/
static gboolean on_add_geofence(SLocGeofence *geofence, GDBusMethodInvocation *invocation, const gchar *app_id, gint place_id, gint geofence_type, gdouble latitude, gdouble longitude, gint radius, const gchar *address, const gchar *bssid, const gchar *ssid, gpointer user_data)
{
- GEOFENCE_DBUS_SERVER_LOGD("on_add_geofence");
+ GEOFENCE_DBUS_SERVER_LOGD("ENTER >>>");
/* call geofence-server's callback, add_geofence_cb */
geofence_dbus_server_s *ctx = (geofence_dbus_server_s *)user_data;
- if (!ctx)
- return FALSE;
- gint fence_id = 0;
- if (ctx->add_geofence_cb) {
- fence_id = ctx->add_geofence_cb(app_id, place_id, geofence_type, latitude, longitude, radius, address, bssid, ssid, ctx->userdata);
+ if (!ctx) return FALSE;
+
+ gint fence_id = -1;
+ if (ctx->dbus_callback && ctx->dbus_callback->add_geofence_cb) {
+ fence_id = ctx->dbus_callback->add_geofence_cb(app_id, place_id, geofence_type, latitude, longitude, radius, address, bssid, ssid, ctx->userdata);
GEOFENCE_DBUS_SERVER_LOGD("add_geofence_cb called");
}
+ GEOFENCE_DBUS_SERVER_LOGD("fence_id: %d", fence_id);
sloc_geofence_complete_add_geofence(geofence, invocation, fence_id);
return TRUE;
}
-static gboolean on_add_place(SLocGeofence *geofence, GDBusMethodInvocation *invocation, const gchar *app_id, const gchar *place_name, gpointer user_data)
+static gboolean on_delete_geofence(SLocGeofence *geofence, GDBusMethodInvocation *invocation, gint fence_id, const gchar *app_id, gpointer user_data)
{
- GEOFENCE_DBUS_SERVER_LOGD("on_add_place");
+ GEOFENCE_DBUS_SERVER_LOGD("on_delete_geofence");
- /* call geofence-server's callback, add_place_cb */
+ /* call geofence-server's callback, delete_geofence_cb */
geofence_dbus_server_s *ctx = (geofence_dbus_server_s *)user_data;
- if (!ctx)
- return FALSE;
- gint place_id = 0;
- if (ctx->add_geofence_cb) {
- place_id = ctx->add_place_cb(app_id, place_name, ctx->userdata);
- GEOFENCE_DBUS_SERVER_LOGD("add_place_cb called");
+ if (!ctx) return FALSE;
+
+ if (ctx->dbus_callback && ctx->dbus_callback->delete_geofence_cb) {
+ ctx->dbus_callback->delete_geofence_cb(fence_id, app_id, ctx->userdata);
+ GEOFENCE_DBUS_SERVER_LOGD("delete_geofence_cb called");
}
- sloc_geofence_complete_add_place(geofence, invocation, place_id);
+ sloc_geofence_complete_delete_geofence(geofence, invocation);
return TRUE;
}
-static gboolean on_enable_geofence(SLocGeofence *geofence, GDBusMethodInvocation *invocation, gint fence_id, const gchar *app_id, gboolean enable, gpointer user_data)
+static gboolean on_get_geofences(SLocGeofence *geofence, GDBusMethodInvocation *invocation, gint place_id, const gchar *app_id, gpointer user_data)
{
- GEOFENCE_DBUS_SERVER_LOGD("on_enable_geofence");
+ GEOFENCE_DBUS_SERVER_LOGD("ENTER >>>");
+ /* call geofence-server's callback, getlist_geofence_cb */
geofence_dbus_server_s *ctx = (geofence_dbus_server_s *)user_data;
- if (!ctx)
- return FALSE;
+ if (!ctx) return FALSE;
- /* call geofence-server's callback, enable_geofence_cb */
- if (ctx->enable_geofence_cb) {
- ctx->enable_geofence_cb(fence_id, app_id, enable, ctx->userdata);
- GEOFENCE_DBUS_SERVER_LOGD("enable_geofence_cb called");
+ GVariant *geofence_info = NULL;
+ gint fence_cnt = 0;
+ gint error_code = -1;
+
+ if (ctx->dbus_callback && ctx->dbus_callback->get_geofences_cb) {
+ geofence_info = ctx->dbus_callback->get_geofences_cb(place_id, app_id, &fence_cnt, &error_code, ctx->userdata);
+ GEOFENCE_DBUS_SERVER_LOGD("getlist_geofence_cb called");
}
- sloc_geofence_complete_enable_geofence(geofence, invocation);
+ sloc_geofence_complete_get_geofences(geofence, invocation, fence_cnt, error_code, geofence_info);
return TRUE;
}
-static gboolean on_update_place(SLocGeofence *geofence, GDBusMethodInvocation *invocation, gint place_id, const gchar *app_id, const gchar *place_name, gpointer user_data)
+static gboolean on_enable_geofence(SLocGeofence *geofence, GDBusMethodInvocation *invocation, gint fence_id, const gchar *app_id, gboolean enable, gpointer user_data)
{
- GEOFENCE_DBUS_SERVER_LOGD("on_update_place");
+ GEOFENCE_DBUS_SERVER_LOGD("on_enable_geofence");
- /* call geofence-server's callback, update_place_cb */
geofence_dbus_server_s *ctx = (geofence_dbus_server_s *)user_data;
- if (!ctx)
- return FALSE;
- if (ctx->update_place_cb) {
- ctx->update_place_cb(place_id, app_id, place_name, ctx->userdata);
- GEOFENCE_DBUS_SERVER_LOGD("update_place_cb called");
+ if (!ctx) return FALSE;
+
+ /* call geofence-server's callback, enable_geofence_cb */
+ if (ctx->dbus_callback && ctx->dbus_callback->enable_geofence_cb) {
+ ctx->dbus_callback->enable_geofence_cb(fence_id, app_id, enable, ctx->userdata);
+ GEOFENCE_DBUS_SERVER_LOGD("enable_geofence_cb called");
}
- sloc_geofence_complete_update_place(geofence, invocation);
+ sloc_geofence_complete_enable_geofence(geofence, invocation);
return TRUE;
}
-static gboolean on_getplacename_geofence(SLocGeofence *geofence, GDBusMethodInvocation *invocation, gint place_id, const gchar *app_id, gpointer user_data)
+static gboolean on_start_geofence(SLocGeofence *geofence, GDBusMethodInvocation *invocation, gint fence_id, const gchar *app_id, gpointer user_data)
{
- GEOFENCE_DBUS_SERVER_LOGD("on_getplacename_geofence");
+ GEOFENCE_DBUS_SERVER_LOGD("on_start_geofence");
- /* call geofence-server's callback, getplacename_geofence_cb */
geofence_dbus_server_s *ctx = (geofence_dbus_server_s *)user_data;
- if (!ctx) {
- return FALSE;
- }
- char *place_name = NULL;
- gint error_code = -1;
- if (ctx->getplacename_geofence_cb) {
- ctx->getplacename_geofence_cb(place_id, app_id, &place_name, &error_code, ctx->userdata);
- GEOFENCE_DBUS_SERVER_LOGD("getlist_geofence_cb called");
+ if (!ctx) return FALSE;
+ /* call geofence-server's callback, start_geofence_cb */
+ if (ctx->dbus_callback && ctx->dbus_callback->start_geofence_cb) {
+ ctx->dbus_callback->start_geofence_cb(fence_id, app_id, ctx->userdata);
+ GEOFENCE_DBUS_SERVER_LOGD("start_geofence_cb called");
}
- sloc_geofence_complete_get_place_name(geofence, invocation, error_code, place_name);
- if (place_name)
- g_free(place_name); /*This has to be freed as it has been allocated by the server DB side*/
+ sloc_geofence_complete_start_geofence(geofence, invocation);
return TRUE;
}
-static gboolean on_getlist_geofence(SLocGeofence *geofence, GDBusMethodInvocation *invocation, gint place_id, const gchar *app_id, gpointer user_data)
+static gboolean on_stop_geofence(SLocGeofence *geofence, GDBusMethodInvocation *invocation, gint fence_id, const gchar *app_id, gpointer user_data)
{
- GEOFENCE_DBUS_SERVER_LOGD("on_getlist_geofence");
+ GEOFENCE_DBUS_SERVER_LOGD("on_stop_geofence");
- /* call geofence-server's callback, getlist_geofence_cb */
geofence_dbus_server_s *ctx = (geofence_dbus_server_s *)user_data;
- if (!ctx)
- return FALSE;
-
- GVariant *geofence_info = NULL;
- gint fence_cnt = 0;
- gint error_code = -1;
- if (ctx->getlist_geofence_cb) {
- geofence_info = ctx->getlist_geofence_cb(place_id, app_id, &fence_cnt, &error_code, ctx->userdata);
- GEOFENCE_DBUS_SERVER_LOGD("getlist_geofence_cb called");
+ if (!ctx) return FALSE;
+ /* call geofence-server's callback, stop_geofence_cb */
+ if (ctx->dbus_callback && ctx->dbus_callback->stop_geofence_cb) {
+ ctx->dbus_callback->stop_geofence_cb(fence_id, app_id, ctx->userdata);
+ GEOFENCE_DBUS_SERVER_LOGD("stop_geofence_cb called");
}
- sloc_geofence_complete_get_list(geofence, invocation, fence_cnt, error_code, geofence_info);
+ sloc_geofence_complete_stop_geofence(geofence, invocation);
return TRUE;
}
-static gboolean on_getplacelist_geofence(SLocGeofence *geofence, GDBusMethodInvocation *invocation, const gchar *app_id, gpointer user_data)
+static gboolean on_add_place(SLocGeofence *geofence, GDBusMethodInvocation *invocation, const gchar *app_id, const gchar *place_name, gpointer user_data)
{
- GEOFENCE_DBUS_SERVER_LOGD("on_getplacelist_geofence");
+ GEOFENCE_DBUS_SERVER_LOGD("on_add_place");
- /* call geofence-server's callback, getplacelist_geofence_cb */
+ /* call geofence-server's callback, add_place_cb */
geofence_dbus_server_s *ctx = (geofence_dbus_server_s *)user_data;
- if (!ctx)
- return FALSE;
- GVariant *place_info = NULL;
- gint place_cnt = 0;
- gint error_code = -1;
- if (ctx->getplacelist_geofence_cb) {
- place_info = ctx->getplacelist_geofence_cb(app_id, &place_cnt, &error_code, ctx->userdata);
- GEOFENCE_DBUS_SERVER_LOGD("getplacelist_geofence_cb called");
+ if (!ctx) return FALSE;
+ gint place_id = -1;
+ if (ctx->dbus_callback && ctx->dbus_callback->add_place_cb) {
+ place_id = ctx->dbus_callback->add_place_cb(app_id, place_name, ctx->userdata);
+ GEOFENCE_DBUS_SERVER_LOGD("add_place_cb called");
}
- sloc_geofence_complete_get_place_list(geofence, invocation, place_cnt, error_code, place_info);
+ sloc_geofence_complete_add_place(geofence, invocation, place_id);
return TRUE;
}
-static gboolean on_delete_geofence(SLocGeofence *geofence, GDBusMethodInvocation *invocation, gint fence_id, const gchar *app_id, gpointer user_data)
+static gboolean on_update_place(SLocGeofence *geofence, GDBusMethodInvocation *invocation, gint place_id, const gchar *app_id, const gchar *place_name, gpointer user_data)
{
- GEOFENCE_DBUS_SERVER_LOGD("on_delete_geofence");
+ GEOFENCE_DBUS_SERVER_LOGD("on_update_place");
- /* call geofence-server's callback, delete_geofence_cb */
+ /* call geofence-server's callback, update_place_cb */
geofence_dbus_server_s *ctx = (geofence_dbus_server_s *)user_data;
- if (!ctx)
- return FALSE;
- if (ctx->delete_geofence_cb) {
- ctx->delete_geofence_cb(fence_id, app_id, ctx->userdata);
- GEOFENCE_DBUS_SERVER_LOGD("delete_geofence_cb called");
+ if (!ctx) return FALSE;
+
+ if (ctx->dbus_callback && ctx->dbus_callback->update_place_cb) {
+ ctx->dbus_callback->update_place_cb(place_id, app_id, place_name, ctx->userdata);
+ GEOFENCE_DBUS_SERVER_LOGD("update_place_cb called");
}
- sloc_geofence_complete_delete_geofence(geofence, invocation);
+ sloc_geofence_complete_update_place(geofence, invocation);
return TRUE;
}
@@ -254,48 +216,56 @@ static gboolean on_delete_place(SLocGeofence *geofence, GDBusMethodInvocation *i
/* call geofence-server's callback, delete_place_cb */
geofence_dbus_server_s *ctx = (geofence_dbus_server_s *)user_data;
- if (!ctx)
- return FALSE;
- if (ctx->delete_place_cb) {
- ctx->delete_place_cb(place_id, app_id, ctx->userdata);
+ if (!ctx) return FALSE;
+
+ if (ctx->dbus_callback && ctx->dbus_callback->delete_place_cb) {
+ ctx->dbus_callback->delete_place_cb(place_id, app_id, ctx->userdata);
GEOFENCE_DBUS_SERVER_LOGD("delete_place_cb called");
}
sloc_geofence_complete_delete_place(geofence, invocation);
return TRUE;
}
-static gboolean on_start_geofence(SLocGeofence *geofence, GDBusMethodInvocation *invocation, gint fence_id, const gchar *app_id, gpointer user_data)
+static gboolean on_get_place_name(SLocGeofence *geofence, GDBusMethodInvocation *invocation, gint place_id, const gchar *app_id, gpointer user_data)
{
- GEOFENCE_DBUS_SERVER_LOGD("on_start_geofence");
+ GEOFENCE_DBUS_SERVER_LOGD("on_getplacename_geofence");
+ /* call geofence-server's callback, getplacename_geofence_cb */
geofence_dbus_server_s *ctx = (geofence_dbus_server_s *)user_data;
- if (!ctx)
- return FALSE;
- /* call geofence-server's callback, start_geofence_cb */
- if (ctx->start_geofence_cb) {
- ctx->start_geofence_cb(fence_id, app_id, ctx->userdata);
- GEOFENCE_DBUS_SERVER_LOGD("start_geofence_cb called");
+ if (!ctx) return FALSE;
+
+ char *place_name = NULL;
+ gint error_code = -1;
+ if (ctx->dbus_callback && ctx->dbus_callback->add_place_cb) {
+ ctx->dbus_callback->get_place_name_cb(place_id, app_id, &place_name, &error_code, ctx->userdata);
+ GEOFENCE_DBUS_SERVER_LOGD("getlist_geofence_cb called");
}
- sloc_geofence_complete_start_geofence(geofence, invocation);
+ sloc_geofence_complete_get_place_name(geofence, invocation, error_code, place_name);
+ if (place_name)
+ g_free(place_name); /*This has to be freed as it has been allocated by the server DB side*/
return TRUE;
}
-static gboolean on_stop_geofence(SLocGeofence *geofence, GDBusMethodInvocation *invocation, gint fence_id, const gchar *app_id, gpointer user_data)
+static gboolean on_get_places(SLocGeofence *geofence, GDBusMethodInvocation *invocation, const gchar *app_id, gpointer user_data)
{
- GEOFENCE_DBUS_SERVER_LOGD("on_stop_geofence");
+ GEOFENCE_DBUS_SERVER_LOGD("ENTER >>>");
+ /* call geofence-server's callback, getplacelist_geofence_cb */
geofence_dbus_server_s *ctx = (geofence_dbus_server_s *)user_data;
- if (!ctx)
- return FALSE;
- /* call geofence-server's callback, stop_geofence_cb */
- if (ctx->stop_geofence_cb) {
- ctx->stop_geofence_cb(fence_id, app_id, ctx->userdata);
- GEOFENCE_DBUS_SERVER_LOGD("stop_geofence_cb called");
+ if (!ctx) return FALSE;
+
+ GVariant *place_info = NULL;
+ gint place_cnt = 0;
+ gint error_code = -1;
+ if (ctx->dbus_callback && ctx->dbus_callback->add_place_cb) {
+ place_info = ctx->dbus_callback->get_places_cb(app_id, &place_cnt, &error_code, ctx->userdata);
+ GEOFENCE_DBUS_SERVER_LOGD("get_places_cb called");
}
- sloc_geofence_complete_stop_geofence(geofence, invocation);
+ sloc_geofence_complete_get_places(geofence, invocation, place_cnt, error_code, place_info);
return TRUE;
}
+/*#if SUPPORT_MULTI_CLIENT */
static gboolean geofence_remove_client_by_force(const char *client, void *data)
{
GEOFENCE_DBUS_SERVER_LOGD("remove client by force for client [%s]", client);
@@ -312,37 +282,25 @@ static gboolean geofence_remove_client_by_force(const char *client, void *data)
GEOFENCE_DBUS_SERVER_LOGE("g_hash_table_remove is Fail");
}
- int index = 0;
- gboolean *shutdown_arr = (gboolean *)g_malloc0_n(GEOFENCE_DBUS_SERVER_METHOD_SIZE, sizeof(gboolean));
- if (shutdown_arr == NULL) {
- GEOFENCE_DBUS_SERVER_LOGD("malloc fail for geofence_remove_client_by_force");
- return FALSE;
- }
+#if SUPPORT_MULTI_CLIENT
+ gboolean shutdown_arr = FALSE;
if (g_hash_table_size(ctx->connections) == 0) {
- GEOFENCE_DBUS_SERVER_SECLOG("Hash table size is zero, Now shutdown provider[%s]", ctx->name);
-
- for (; index < GEOFENCE_DBUS_SERVER_METHOD_SIZE; index++)
- shutdown_arr[index] = TRUE;
+ GEOFENCE_DBUS_SERVER_SECLOG("Hash table size is zero, Now shutdown provider[%s]", ctx->prev_owner);
+ shutdown_arr = TRUE;
} else {
GEOFENCE_DBUS_SERVER_SECLOG("Hash table size is not zero");
-
- for (; index < GEOFENCE_DBUS_SERVER_METHOD_SIZE; index++) {
- if (g_hash_table_find(ctx->connections, (GHRFunc) geofence_find_method, &index) == NULL) {
- shutdown_arr[index] = TRUE;
- continue;
- }
- }
}
if (ctx->shutdown_cb) {
ctx->shutdown_cb(ctx->userdata, shutdown_arr);
- GEOFENCE_DBUS_SERVER_LOGD("shutdown_cb called.. gps:%d, nps:%d", shutdown_arr[GEOFENCE_DBUS_SERVER_METHOD_GPS], shutdown_arr[GEOFENCE_DBUS_SERVER_METHOD_NPS]);
+ GEOFENCE_DBUS_SERVER_LOGD("shutdown_cb called..[%d]", shutdown_arr);
}
+#endif
GEOFENCE_DBUS_SERVER_LOGD("###### A client[%s] is abnormally shut down ########", client);
- g_free(shutdown_arr);
+
return TRUE;
}
@@ -382,12 +340,12 @@ static void on_name_owner_changed(GDBusConnection *connection, const gchar *send
g_hash_table_foreach(handle->connections, (GHFunc) geofence_scan_sender, handle);
}
}
+/*#endif */
static void on_bus_acquired(GDBusConnection *conn, const gchar *name, gpointer user_data)
{
geofence_dbus_server_s *ctx = (geofence_dbus_server_s *)user_data;
- if (!ctx)
- return;
+ g_return_if_fail(ctx);
gchar *path = NULL;
SLocGeofence *geofence = NULL;
@@ -412,34 +370,47 @@ static void on_bus_acquired(GDBusConnection *conn, const gchar *name, gpointer u
/* register callback for each methods for geofence */
geofence = sloc_object_get_geofence(SLOC_OBJECT(ctx->obj_skeleton));
}
- if (geofence == NULL)
+ if (geofence == NULL) {
+ GEOFENCE_DBUS_SERVER_LOGE("Can't create geofence object");
return;
+ }
+
+ geofence_dbus_callback_s *dbus_callback = ctx->dbus_callback;
+ geofence_dbus_signal_s *dbus_signal = g_new0(geofence_dbus_signal_s, 1);
+ g_return_val_if_fail(dbus_signal, GEOFENCE_DBUS_SERVER_ERROR_MEMORY);
+
+ if (dbus_callback->add_geofence_cb)
+ dbus_signal->add_geofence_h = g_signal_connect(geofence, "handle-add-geofence", G_CALLBACK(on_add_geofence), ctx);
+ if (dbus_callback->delete_geofence_cb)
+ dbus_signal->delete_geofence_h = g_signal_connect(geofence, "handle-delete-geofence", G_CALLBACK(on_delete_geofence), ctx);
+ if (dbus_callback->get_geofences_cb)
+ dbus_signal->get_geofences_h = g_signal_connect(geofence, "handle-get-geofences", G_CALLBACK(on_get_geofences), ctx);
+ if (dbus_callback->enable_geofence_cb)
+ dbus_signal->enable_geofence_h = g_signal_connect(geofence, "handle-enable-geofence", G_CALLBACK(on_enable_geofence), ctx);
+ if (dbus_callback->start_geofence_cb)
+ dbus_signal->start_geofence_h = g_signal_connect(geofence, "handle-start-geofence", G_CALLBACK(on_start_geofence), ctx);
+ if (dbus_callback->stop_geofence_cb)
+ dbus_signal->stop_geofence_h = g_signal_connect(geofence, "handle-stop-geofence", G_CALLBACK(on_stop_geofence), ctx);
+
+ if (dbus_callback->add_place_cb)
+ dbus_signal->add_place_h = g_signal_connect(geofence, "handle-add-place", G_CALLBACK(on_add_place), ctx);
+ if (dbus_callback->update_place_cb)
+ dbus_signal->update_place_h = g_signal_connect(geofence, "handle-update-place", G_CALLBACK(on_update_place), ctx);
+ if (dbus_callback->delete_place_cb)
+ dbus_signal->delete_place_h = g_signal_connect(geofence, "handle-delete-place", G_CALLBACK(on_delete_place), ctx);
+ if (dbus_callback->get_place_name_cb)
+ dbus_signal->get_place_name_h = g_signal_connect(geofence, "handle-get-place-name", G_CALLBACK(on_get_place_name), ctx);
+ if (dbus_callback->get_places_cb)
+ dbus_signal->get_places_h = g_signal_connect(geofence, "handle-get-places", G_CALLBACK(on_get_places), ctx);
+
+ ctx->dbus_signal = dbus_signal;
- if (ctx->add_geofence_cb)
- ctx->add_geofence_h = g_signal_connect(geofence, "handle-add-geofence", G_CALLBACK(on_add_geofence), ctx); /* user_data */
- if (ctx->add_place_cb)
- ctx->add_place_h = g_signal_connect(geofence, "handle-add-place", G_CALLBACK(on_add_place), ctx); /* user_data */
- if (ctx->enable_geofence_cb)
- ctx->enable_geofence_h = g_signal_connect(geofence, "handle-enable-geofence", G_CALLBACK(on_enable_geofence), ctx); /* user_data */
- if (ctx->update_place_cb)
- ctx->update_place_h = g_signal_connect(geofence, "handle-update-place", G_CALLBACK(on_update_place), ctx); /* user_data */
- if (ctx->delete_geofence_cb)
- ctx->delete_geofence_h = g_signal_connect(geofence, "handle-delete-geofence", G_CALLBACK(on_delete_geofence), ctx); /* user_data */
- if (ctx->delete_place_cb)
- ctx->delete_place_h = g_signal_connect(geofence, "handle-delete-place", G_CALLBACK(on_delete_place), ctx); /* user_data */
- if (ctx->start_geofence_cb)
- ctx->start_geofence_h = g_signal_connect(geofence, "handle-start-geofence", G_CALLBACK(on_start_geofence), ctx); /* user_data */
- if (ctx->stop_geofence_cb)
- ctx->stop_geofence_h = g_signal_connect(geofence, "handle-stop-geofence", G_CALLBACK(on_stop_geofence), ctx); /* user_data */
- if (ctx->getplacename_geofence_cb)
- ctx->getplacename_geofence_h = g_signal_connect(geofence, "handle-get-place-name", G_CALLBACK(on_getplacename_geofence), ctx);
- if (ctx->getlist_geofence_cb)
- ctx->getlist_geofence_h = g_signal_connect(geofence, "handle-get-list", G_CALLBACK(on_getlist_geofence), ctx); /*user_data */
- if (ctx->getplacelist_geofence_cb)
- ctx->getplacelist_geofence_h = g_signal_connect(geofence, "handle-get-place-list", G_CALLBACK(on_getplacelist_geofence), ctx);
g_object_unref(geofence);
+ /*#if SUPPORT_MULTI_CLIENT //TODO: We need it? */
ctx->owner_changed_id = g_dbus_connection_signal_subscribe(conn, "org.freedesktop.DBus", "org.freedesktop.DBus", "NameOwnerChanged", "/org/freedesktop/DBus", NULL, G_DBUS_SIGNAL_FLAGS_NONE, on_name_owner_changed, ctx, NULL);
+ /*#endif */
+
g_dbus_object_manager_server_set_connection(ctx->manager, conn);
GEOFENCE_DBUS_SERVER_LOGD("done to acquire the dbus");
}
@@ -456,7 +427,7 @@ static void on_name_lost(GDBusConnection *connection, const gchar *name, gpointe
EXPORT_API int geofence_dbus_server_send_geofence_inout_changed(geofence_dbus_server_h geofence_dbus_server, const gchar *app_id, gint fence_id, gint access_type, gint fence_state)
{
- GEOFENCE_DBUS_SERVER_LOGD("geofence_dbus_server_send_geofence_inout_changed");
+ GEOFENCE_DBUS_SERVER_LOGD("ENTER >>>");
g_return_val_if_fail(geofence_dbus_server, GEOFENCE_DBUS_SERVER_ERROR_PARAMETER);
geofence_dbus_server_s *handle = (geofence_dbus_server_s *)geofence_dbus_server;
@@ -474,7 +445,7 @@ EXPORT_API int geofence_dbus_server_send_geofence_inout_changed(geofence_dbus_se
EXPORT_API int geofence_dbus_server_send_geofence_event_changed(geofence_dbus_server_h geofence_dbus_server, gint place_id, gint fence_id, gint access_type, const gchar *app_id, gint error, gint state)
{
- GEOFENCE_DBUS_SERVER_LOGD("geofence_dbus_server_send_geofence_event_changed");
+ GEOFENCE_DBUS_SERVER_LOGD("ENTER >>>");
g_return_val_if_fail(geofence_dbus_server, GEOFENCE_DBUS_SERVER_ERROR_PARAMETER);
geofence_dbus_server_s *handle = (geofence_dbus_server_s *)geofence_dbus_server;
g_return_val_if_fail(handle->obj_skeleton, GEOFENCE_DBUS_SERVER_ERROR_PARAMETER);
@@ -489,100 +460,80 @@ EXPORT_API int geofence_dbus_server_send_geofence_event_changed(geofence_dbus_se
return GEOFENCE_DBUS_SERVER_ERROR_NONE;
}
-static void _glib_log(const gchar *log_domain, GLogLevelFlags log_level, const gchar *msg, gpointer user_data)
+/* Because of this, geofence-server's handler doesn't work. */
+#if 0
+static void __glib_log(const gchar *log_domain, GLogLevelFlags log_level, const gchar *msg, gpointer user_data)
{
geofence_dbus_server_s *server = (geofence_dbus_server_s *)user_data;
if (server != NULL)
GEOFENCE_DBUS_SERVER_LOGD("server->manager (%p)", server->manager);
GEOFENCE_DBUS_SERVER_LOGE("GLIB[%d] : %s", log_level, msg);
}
+#endif
-EXPORT_API int geofence_dbus_server_create(char *service_name, char *service_path, char *name, char *description, geofence_dbus_server_h *geofence_dbus_server, GeofenceAddGeofenceCB add_geofence_cb, GeofenceAddPlaceCB add_place_cb, GeofenceEnableGeofenceCB enable_geofence_cb, GeofenceUpdatePlaceCB update_place_cb, GeofenceDeleteGeofenceCB delete_geofence_cb, GeofenceDeletePlaceCB delete_place_cb, GeofenceGetPlaceNameGeofenceCB getplacename_geofence_cb, GeofenceGetlistGeofenceCB getlist_geofence_cb, GeofenceGetPlaceListGeofenceCB getplacelist_geofence_cb, GeofenceStartGeofenceCB start_geofence_cb, GeofenceStopGeofenceCB stop_geofence_cb, gpointer userdata)
+EXPORT_API int geofence_dbus_server_create(geofence_dbus_server_h *geofence_dbus_server, geofence_dbus_callback_s *geofence_dbus_callback, gpointer userdata)
{
GEOFENCE_DBUS_SERVER_LOGD("geofence_dbus_server_create");
- g_return_val_if_fail(service_name, GEOFENCE_DBUS_SERVER_ERROR_PARAMETER);
- g_return_val_if_fail(service_path, GEOFENCE_DBUS_SERVER_ERROR_PARAMETER);
g_return_val_if_fail(geofence_dbus_server, GEOFENCE_DBUS_SERVER_ERROR_PARAMETER);
+ g_return_val_if_fail(geofence_dbus_callback, GEOFENCE_DBUS_SERVER_ERROR_PARAMETER);
int ret = GEOFENCE_DBUS_SERVER_ERROR_NONE;
geofence_dbus_server_s *server = g_new0(geofence_dbus_server_s, 1);
g_return_val_if_fail(server, GEOFENCE_DBUS_SERVER_ERROR_MEMORY);
- g_log_set_default_handler(_glib_log, server);
+ /* g_log_set_default_handler(__glib_log, server); */
- server->service_name = g_strdup(service_name);
- server->service_path = g_strdup(service_path);
+ server->service_name = g_strdup(GEOFENCE_SERVICE_NAME);
+ server->service_path = g_strdup(GEOFENCE_SERVICE_PATH);
server->manager = g_dbus_object_manager_server_new(server->service_path);
-
- if (name)
- server->name = g_strdup(name);
- if (description)
- server->description = g_strdup(description);
-
server->connections = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
server->userdata = userdata;
- /* add gefence callbacks */
- server->add_geofence_cb = add_geofence_cb;
- server->add_place_cb = add_place_cb;
- server->enable_geofence_cb = enable_geofence_cb;
- server->update_place_cb = update_place_cb;
- server->delete_geofence_cb = delete_geofence_cb;
- server->delete_place_cb = delete_place_cb;
- server->getplacename_geofence_cb = getplacename_geofence_cb;
- server->getlist_geofence_cb = getlist_geofence_cb;
- server->getplacelist_geofence_cb = getplacelist_geofence_cb;
- server->start_geofence_cb = start_geofence_cb;
- server->stop_geofence_cb = stop_geofence_cb;
-
- server->owner_id = g_bus_own_name(G_BUS_TYPE_SYSTEM, service_name, G_BUS_NAME_OWNER_FLAGS_REPLACE, on_bus_acquired, on_name_acquired, on_name_lost, server, NULL);
+ /* set gefence callbacks */
+ server->dbus_callback = geofence_dbus_callback;
+
+ server->owner_id = g_bus_own_name(G_BUS_TYPE_SYSTEM, server->service_name, G_BUS_NAME_OWNER_FLAGS_REPLACE, on_bus_acquired, on_name_acquired, on_name_lost, server, NULL);
GEOFENCE_DBUS_SERVER_LOGD("g_bus_own_name id=[%d]", server->owner_id);
- *geofence_dbus_server = (geofence_dbus_server_h *) server;
+ *geofence_dbus_server = (geofence_dbus_server_s *) server;
return ret;
}
-
EXPORT_API int geofence_dbus_server_destroy(geofence_dbus_server_h geofence_dbus_server)
{
GEOFENCE_DBUS_SERVER_LOGD("geofence_dbus_server_destroy");
g_return_val_if_fail(geofence_dbus_server, GEOFENCE_DBUS_SERVER_ERROR_PARAMETER);
- geofence_dbus_server_s *handle = (geofence_dbus_server_s *)geofence_dbus_server;
+ geofence_dbus_server_s *server = (geofence_dbus_server_s *)geofence_dbus_server;
int ret = GEOFENCE_DBUS_SERVER_ERROR_NONE;
- g_bus_unown_name(handle->owner_id);
- if (handle->prev_owner) {
- g_free(handle->prev_owner);
- handle->prev_owner = NULL;
+ g_bus_unown_name(server->owner_id);
+ if (server->prev_owner) {
+ g_free(server->prev_owner);
+ server->prev_owner = NULL;
}
/* disconnect geofence callbacks */
SLocGeofence *geofence = NULL;
- geofence = sloc_object_get_geofence(SLOC_OBJECT(handle->obj_skeleton));
+ geofence = sloc_object_get_geofence(SLOC_OBJECT(server->obj_skeleton));
g_return_val_if_fail(geofence, GEOFENCE_DBUS_SERVER_ERROR_PARAMETER);
+ geofence_dbus_signal_s *handle = server->dbus_signal;
+ g_return_val_if_fail(handle, GEOFENCE_DBUS_SERVER_ERROR_PARAMETER);
+
if (handle->add_geofence_h) {
g_signal_handler_disconnect(geofence, handle->add_geofence_h);
handle->add_geofence_h = 0;
}
- if (handle->add_place_h) {
- g_signal_handler_disconnect(geofence, handle->add_place_h);
- handle->add_place_h = 0;
- }
- if (handle->enable_geofence_h) {
- g_signal_handler_disconnect(geofence, handle->enable_geofence_h);
- handle->enable_geofence_h = 0;
- }
- if (handle->update_place_h) {
- g_signal_handler_disconnect(geofence, handle->update_place_h);
- handle->update_place_h = 0;
- }
if (handle->delete_geofence_h) {
g_signal_handler_disconnect(geofence, handle->delete_geofence_h);
handle->delete_geofence_h = 0;
}
- if (handle->delete_place_h) {
- g_signal_handler_disconnect(geofence, handle->delete_place_h);
- handle->delete_place_h = 0;
+ if (handle->get_geofences_h) {
+ g_signal_handler_disconnect(geofence, handle->get_geofences_h);
+ handle->get_geofences_h = 0;
+ }
+ if (handle->enable_geofence_h) {
+ g_signal_handler_disconnect(geofence, handle->enable_geofence_h);
+ handle->enable_geofence_h = 0;
}
if (handle->start_geofence_h) {
g_signal_handler_disconnect(geofence, handle->start_geofence_h);
@@ -592,31 +543,45 @@ EXPORT_API int geofence_dbus_server_destroy(geofence_dbus_server_h geofence_dbus
g_signal_handler_disconnect(geofence, handle->stop_geofence_h);
handle->stop_geofence_h = 0;
}
- if (handle->getplacename_geofence_h) {
- g_signal_handler_disconnect(geofence, handle->getplacename_geofence_h);
- handle->getplacename_geofence_h = 0;
+
+ if (handle->add_place_h) {
+ g_signal_handler_disconnect(geofence, handle->add_place_h);
+ handle->add_place_h = 0;
+ }
+ if (handle->update_place_h) {
+ g_signal_handler_disconnect(geofence, handle->update_place_h);
+ handle->update_place_h = 0;
+ }
+ if (handle->delete_place_h) {
+ g_signal_handler_disconnect(geofence, handle->delete_place_h);
+ handle->delete_place_h = 0;
}
- if (handle->getlist_geofence_h) {
- g_signal_handler_disconnect(geofence, handle->getlist_geofence_h);
- handle->getlist_geofence_h = 0;
+ if (handle->get_place_name_h) {
+ g_signal_handler_disconnect(geofence, handle->get_place_name_h);
+ handle->get_place_name_h = 0;
}
- if (handle->getplacelist_geofence_h) {
- g_signal_handler_disconnect(geofence, handle->getplacelist_geofence_h);
- handle->getplacelist_geofence_h = 0;
+ if (handle->get_places_h) {
+ g_signal_handler_disconnect(geofence, handle->get_places_h);
+ handle->get_places_h = 0;
}
+ g_free(handle);
g_object_unref(geofence);
- if (handle->manager) {
- if (handle->owner_changed_id) {
- g_dbus_connection_signal_unsubscribe(g_dbus_object_manager_server_get_connection(handle->manager), handle->owner_changed_id);
- handle->owner_changed_id = 0;
+ if (server->manager) {
+ if (server->owner_changed_id) {
+ g_dbus_connection_signal_unsubscribe(g_dbus_object_manager_server_get_connection(server->manager), server->owner_changed_id);
+ server->owner_changed_id = 0;
}
- g_object_unref(handle->manager);
- handle->manager = NULL;
+ g_object_unref(server->manager);
+ server->manager = NULL;
}
- g_hash_table_destroy(handle->connections);
- g_free(handle);
+ g_hash_table_destroy(server->connections);
+
+ g_free(server->service_name);
+ g_free(server->service_path);
+
+ g_free(server);
return ret;
}