#include "eom.h"
#include "eom-log.h"
#include "eom-dbus.h"
+#include "eom-private.h"
+
+#define EOM_DBUS_SERVER "org.eom.server"
+#define EOM_DBUS_CLIENT "org.eom.client"
+#define EOM_DBUS_INTERFACE "org.eom.interface"
+#define EOM_DBUS_PATH "/org/eom/path"
+
+#define STR_LEN 128
#define REPLY_TIME 1000
#define ARGV_NUM 64
+typedef struct _EomDBusClientMethod {
+ char name[STR_LEN];
+ notify_func func;
+ void *data;
+ struct _EomDBusClientMethod *next;
+} EomDBusClientMethod;
+
typedef struct _EomDBusClientInfo {
DBusConnection *conn;
char name[STR_LEN];
static EomDBusClientInfo client_info;
-static void _eom_dbus_client_deinit(EomDBusClientInfo *info);
+static bool dbus_initialized;
+static EomDBusClientMethod dbus_method;
+
+static void _eom_dbus_client_deinitialize(EomDBusClientInfo *info);
static int
_eom_dbus_need_private_conn(void)
if (dbus_message_is_signal(msg, DBUS_INTERFACE_LOCAL, "Disconnected")) {
INFO("[EOM] disconnected by signal");
- _eom_dbus_client_deinit(info);
+ _eom_dbus_client_deinitialize(info);
return DBUS_HANDLER_RESULT_HANDLED;
}
}
static int
-_eom_dbus_client_init(EomDBusClientInfo *info)
+_eom_dbus_client_initialize(EomDBusClientInfo *info)
{
DBusError err;
int ret;
}
static void
-_eom_dbus_client_deinit(EomDBusClientInfo *info)
+_eom_dbus_client_deinitialize(EomDBusClientInfo *info)
{
DBusError err;
INFO("[EOM] disconnected");
}
-bool
-eom_dbus_client_connect(void)
+
+static bool
+_eom_dbus_client_connect(void)
{
if (client_info.conn)
return true;
client_info.fd = -1;
- if (!_eom_dbus_client_init(&client_info))
+ if (!_eom_dbus_client_initialize(&client_info))
return false;
return true;
}
-void
-eom_dbus_client_disconnect(void)
+static void
+_eom_dbus_client_disconnect(void)
{
- _eom_dbus_client_deinit(&client_info);
+ _eom_dbus_client_deinitialize(&client_info);
}
-bool
-eom_dbus_client_add_method(EomDBusClientMethod *method)
+static bool
+_eom_dbus_client_add_method(EomDBusClientMethod *method)
{
EomDBusClientMethod **prev;
return true;
}
-void
-eom_dbus_client_remove_method(EomDBusClientMethod *method)
+static void
+_eom_dbus_client_remove_method(EomDBusClientMethod *method)
{
EomDBusClientMethod **prev;
}
}
+bool
+eom_dbus_client_init(notify_func func)
+{
+ if (dbus_initialized)
+ return true;
+
+ if (!_eom_dbus_client_connect())
+ return false;
+
+ snprintf(dbus_method.name, sizeof(dbus_method.name), "%s", "Notify");
+ dbus_method.func = func;
+ dbus_method.data = NULL;
+ _eom_dbus_client_add_method(&dbus_method);
+
+ dbus_initialized = true;
+
+ INFO("dbus init");
+
+ return true;
+}
+
+void
+eom_dbus_client_deinit(GList *cb_info_list)
+{
+ if (!dbus_initialized)
+ return;
+
+ /* An output instance and a callback can be created and be added only by user.
+ * If there is cb_info_list, it means that user is still
+ * watching and interested with eom dbus message.
+ */
+ if (cb_info_list)
+ return;
+
+ _eom_dbus_client_remove_method(&dbus_method);
+ _eom_dbus_client_disconnect();
+
+ dbus_initialized = false;
+}
+
GValueArray*
eom_dbus_client_send_message(char *method, GValueArray *array)
{
#include <glib.h>
#include <glib-object.h>
#include "eom.h"
+#include "eom-private.h"
-#define EOM_DBUS_SERVER "org.eom.server"
-#define EOM_DBUS_CLIENT "org.eom.client"
-#define EOM_DBUS_INTERFACE "org.eom.interface"
-#define EOM_DBUS_PATH "/org/eom/path"
+bool eom_dbus_client_init(notify_func func);
+void eom_dbus_client_deinit(GList *cb_info_list);
-#define STR_LEN 128
-
-typedef void (*MethodFunc) (void *data, GValueArray *noti_array);
-
-typedef struct _EomDBusClientMethod {
- char name[STR_LEN];
- MethodFunc func;
- void *data;
- struct _EomDBusClientMethod *next;
-} EomDBusClientMethod;
-
-bool eom_dbus_client_connect(void);
-void eom_dbus_client_disconnect(void);
GValueArray *eom_dbus_client_send_message(char *method, GValueArray *array);
-bool eom_dbus_client_add_method(EomDBusClientMethod *method);
-void eom_dbus_client_remove_method(EomDBusClientMethod *method);
#endif /* __EOM_DBUS_H__ */
static pthread_mutex_t eom_lock;
-static bool dbus_initialized;
-static EomDBusClientMethod dbus_method;
-
static GList *cb_info_list;
static GList *output_info_list;
pthread_mutex_unlock(&eom_lock);
}
-static bool
-_eom_dbus_init(void)
-{
- if (dbus_initialized)
- return true;
-
- if (!eom_dbus_client_connect())
- return false;
-
- snprintf(dbus_method.name, sizeof(dbus_method.name), "%s", "Notify");
- dbus_method.func = _eom_output_process_notify_cb;
- dbus_method.data = NULL;
- eom_dbus_client_add_method(&dbus_method);
-
- dbus_initialized = true;
-
- INFO("dbus init");
-
- return true;
-}
-
-static void
-_eom_dbus_deinit(void)
-{
- if (!dbus_initialized)
- return;
-
- /* An output instance and a callback can be created and be added only by user.
- * If there is cb_info_list, it means that user is still
- * watching and interested with eom dbus message.
- */
- if (cb_info_list)
- return;
-
- eom_dbus_client_remove_method(&dbus_method);
- eom_dbus_client_disconnect();
-
- dbus_initialized = false;
-}
-
static void
_eom_set_output_info_mode(eom_output_info *output_info, int output_mode)
{
g_type_init();
- ret = _eom_dbus_init();
+ ret = eom_dbus_client_init(_eom_output_process_notify_cb);
_eom_mutex_unlock();
GList *l;
_eom_mutex_lock();
- _eom_dbus_deinit();
+
+ eom_dbus_client_deinit(cb_info_list);
/* TODO: redesign the life-cycle of output_infos */
/* destory output_info. */