diff --git a/legacy/ecore/src/bin/ecore_dbus_hal_test.c b/legacy/ecore/src/bin/ecore_dbus_hal_test.c index 94877533ca..d2d40e9e6d 100644 --- a/legacy/ecore/src/bin/ecore_dbus_hal_test.c +++ b/legacy/ecore/src/bin/ecore_dbus_hal_test.c @@ -7,13 +7,16 @@ static int ecore_dbus_event_server_add(void *udata, int ev_type, void *ev); static int ecore_dbus_event_server_del(void *udata, int ev_type, void *ev); -static int ecore_dbus_event_server_method_return(void *udata, int ev_type, void *ev); + +static void ecore_dbus_method_name_has_owner_cb(void *data, Ecore_DBus_Message_Type type, + Ecore_DBus_Method_Return *reply); +static void ecore_dbus_method_add_match_cb(void *data, Ecore_DBus_Message_Type type, + Ecore_DBus_Method_Return *reply); + static int ecore_dbus_event_server_signal(void *udata, int ev_type, void *ev); static const char *event_type_get(Ecore_DBus_Message_Type type); -static int state = 0; - static Ecore_DBus_Server *svr = NULL; int @@ -38,8 +41,6 @@ main(int argc, char **argv) ecore_dbus_event_server_add, NULL); handler[i++] = ecore_event_handler_add(ECORE_DBUS_EVENT_SERVER_DEL, ecore_dbus_event_server_del, NULL); - handler[i++] = ecore_event_handler_add(ECORE_DBUS_EVENT_SERVER_METHOD_RETURN, - ecore_dbus_event_server_method_return, NULL); handler[i++] = ecore_event_handler_add(ECORE_DBUS_EVENT_SERVER_SIGNAL, ecore_dbus_event_server_signal, NULL); @@ -61,8 +62,8 @@ ecore_dbus_event_server_add(void *udata, int ev_type, void *ev) event = ev; printf("ecore_dbus_event_server_add\n"); - ecore_dbus_method_name_has_owner(event->server, "org.freedesktop.Hal"); - state++; + ecore_dbus_method_name_has_owner(event->server, "org.freedesktop.Hal", + ecore_dbus_method_name_has_owner_cb, NULL); return 0; } @@ -78,54 +79,58 @@ ecore_dbus_event_server_del(void *udata, int ev_type, void *ev) return 0; } -static int -ecore_dbus_event_server_method_return(void *udata, int ev_type, void *ev) +static void +ecore_dbus_method_name_has_owner_cb(void *data, Ecore_DBus_Message_Type type, + Ecore_DBus_Method_Return *reply) { - Ecore_DBus_Event_Server_Data *event; - - event = ev; - printf("ecore_dbus_event_server_method_return %s %s.%s\n", event_type_get(event->type), - event->header.interface, - event->header.member); - printf("state: %d\n", state); - if (state == 1) + unsigned int *exists; + if (type != ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN) { - int *exists; - - exists = event->args[0].value; - if ((!exists) || (!*exists)) - { - printf("No hal\n"); - ecore_main_loop_quit(); - } - else - { - printf("Add listener for devices\n"); - ecore_dbus_method_add_match(event->server, - "type='signal'," - "interface='org.freedesktop.Hal.Manager'," - "sender='org.freedesktop.Hal'," - "path='/org/freedesktop/Hal/Manager'"); - - state++; - } + ecore_main_loop_quit(); + return; } - else if (state == 2) + printf("ecore_dbus_event_server_method_return %s %s.%s\n", event_type_get(reply->type), + reply->header.interface, + reply->header.member); + + exists = reply->args[0].value; + if ((!exists) || (!*exists)) { - printf("Should be listening for device changes!\n"); + printf("No hal\n"); + ecore_main_loop_quit(); } else { - printf("Hm: %s\n", event->header.member); - ecore_dbus_message_print(event->message); + printf("Add listener for devices\n"); + ecore_dbus_method_add_match(reply->server, + "type='signal'," + "interface='org.freedesktop.Hal.Manager'," + "sender='org.freedesktop.Hal'," + "path='/org/freedesktop/Hal/Manager'", + ecore_dbus_method_add_match_cb, NULL); + } - return 0; +} + +static void +ecore_dbus_method_add_match_cb(void *data, Ecore_DBus_Message_Type type, + Ecore_DBus_Method_Return *reply) +{ + if (type != ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN) + { + ecore_main_loop_quit(); + return; + } + printf("ecore_dbus_event_server_method_return %s %s.%s\n", event_type_get(reply->type), + reply->header.interface, + reply->header.member); + printf("Should be listening for device changes!\n"); } static int ecore_dbus_event_server_signal(void *udata, int ev_type, void *ev) { - Ecore_DBus_Event_Server_Data *event; + Ecore_DBus_Event_Server_Signal *event; event = ev; printf("ecore_dbus_event_server_signal %s %s.%s\n", event_type_get(event->type), diff --git a/legacy/ecore/src/bin/ecore_dbus_test.c b/legacy/ecore/src/bin/ecore_dbus_test.c index 20d1dffc37..a36e055adf 100644 --- a/legacy/ecore/src/bin/ecore_dbus_test.c +++ b/legacy/ecore/src/bin/ecore_dbus_test.c @@ -7,7 +7,10 @@ static int ecore_dbus_event_server_add(void *udata, int ev_type, void *ev); static int ecore_dbus_event_server_del(void *udata, int ev_type, void *ev); -static int ecore_dbus_event_server_method_return(void *udata, int ev_type, void *ev); + +static void ecore_dbus_method_list_names_cb(void *data, + Ecore_DBus_Message_Type type, + Ecore_DBus_Method_Return *ev); static const char * event_type_get(Ecore_DBus_Message_Type type); @@ -34,12 +37,10 @@ main(int argc, char **argv) ecore_dbus_event_server_add, NULL); handler[i++] = ecore_event_handler_add(ECORE_DBUS_EVENT_SERVER_DEL, ecore_dbus_event_server_del, NULL); - handler[i++] = ecore_event_handler_add(ECORE_DBUS_EVENT_SERVER_METHOD_RETURN, - ecore_dbus_event_server_method_return, NULL); ecore_main_loop_begin(); - for (i = 0; i < 3; i++) + for (i = 0; i < 2; i++) ecore_event_handler_del(handler[i]); if (svr) ecore_dbus_server_del(svr); @@ -55,7 +56,7 @@ ecore_dbus_event_server_add(void *udata, int ev_type, void *ev) event = ev; printf("ecore_dbus_event_server_add\n"); - ecore_dbus_method_list_names(event->server); + ecore_dbus_method_list_names(event->server, ecore_dbus_method_list_names_cb, NULL); return 0; } @@ -71,19 +72,19 @@ ecore_dbus_event_server_del(void *udata, int ev_type, void *ev) return 0; } -static int -ecore_dbus_event_server_method_return(void *udata, int ev_type, void *ev) +static void +ecore_dbus_method_list_names_cb(void *data, + Ecore_DBus_Message_Type type, + Ecore_DBus_Method_Return *reply) { - Ecore_DBus_Event_Server_Data *event; Ecore_List *names; - event = ev; - printf("ecore_dbus_event_server_data %s %s.%s\n", event_type_get(event->type), - event->header.interface, - event->header.member); + printf("ecore_dbus_event_server_data %s %s.%s\n", event_type_get(reply->type), + reply->header.interface, + reply->header.member); - printf("Got names %c\n", event->args[0].type); - names = event->args[0].value; + names = reply->args[0].value; + printf("Got names %c\n", reply->args[0].type); if (names) { char *name; diff --git a/legacy/ecore/src/lib/ecore_dbus/Ecore_DBus.h b/legacy/ecore/src/lib/ecore_dbus/Ecore_DBus.h index bc9ff9cc7f..2d2adb2561 100644 --- a/legacy/ecore/src/lib/ecore_dbus/Ecore_DBus.h +++ b/legacy/ecore/src/lib/ecore_dbus/Ecore_DBus.h @@ -36,8 +36,10 @@ extern "C" { typedef struct _Ecore_DBus_Event_Server_Add Ecore_DBus_Event_Server_Add; typedef struct _Ecore_DBus_Event_Server_Del Ecore_DBus_Event_Server_Del; typedef struct _Ecore_DBus_Event_Server_Data Ecore_DBus_Event_Server_Data; - typedef struct _Ecore_DBus_Event_Arg Ecore_DBus_Event_Arg; + typedef struct _Ecore_DBus_Event_Server_Data Ecore_DBus_Event_Server_Signal; + typedef struct _Ecore_DBus_Event_Server_Data Ecore_DBus_Method_Return; typedef struct _Ecore_DBus_Message Ecore_DBus_Message; + typedef struct _Ecore_DBus_Message_Arg Ecore_DBus_Message_Arg; typedef struct _Ecore_DBus_Message_Field Ecore_DBus_Message_Field; typedef enum _Ecore_DBus_Type @@ -106,10 +108,10 @@ extern "C" { const char *sender; const char *signature; } header; - Ecore_DBus_Event_Arg *args; + Ecore_DBus_Message_Arg *args; }; - struct _Ecore_DBus_Event_Arg + struct _Ecore_DBus_Message_Arg { Ecore_DBus_Data_Type type; void *value; @@ -130,10 +132,10 @@ extern "C" { EAPI extern int ECORE_DBUS_EVENT_SERVER_ADD; EAPI extern int ECORE_DBUS_EVENT_SERVER_DEL; - EAPI extern int ECORE_DBUS_EVENT_SERVER_METHOD_RETURN; - EAPI extern int ECORE_DBUS_EVENT_SERVER_ERROR; EAPI extern int ECORE_DBUS_EVENT_SERVER_SIGNAL; - EAPI extern int ECORE_DBUS_EVENT_SERVER_DATA; + + /* callback */ + typedef void (*Ecore_DBus_Method_Cb)(void *data, Ecore_DBus_Message_Type type, Ecore_DBus_Method_Return *reply); /* init */ EAPI int ecore_dbus_init(void); @@ -146,21 +148,28 @@ extern "C" { /* message */ EAPI int ecore_dbus_server_send(Ecore_DBus_Server *svr, char *command, int length); - EAPI unsigned int ecore_dbus_message_new_method_call(Ecore_DBus_Server *svr, char *destination, char *path, char *interface, char *method, char *fmt, ...); + EAPI unsigned int ecore_dbus_message_new_method_call(Ecore_DBus_Server *svr, + char *destination, char *path, + char *interface, char *method, + void (*method_cb)(void *udata, + Ecore_DBus_Message_Type type, + Ecore_DBus_Event_Server_Data *data), + void *data, + char *fmt, ...); EAPI void ecore_dbus_message_del(Ecore_DBus_Message *msg); EAPI void ecore_dbus_message_print(Ecore_DBus_Message *msg); EAPI void *ecore_dbus_message_header_field_get(Ecore_DBus_Message *msg, Ecore_DBus_Message_Header_Field field); EAPI void *ecore_dbus_message_body_field_get(Ecore_DBus_Message *msg, unsigned int pos); /* methods */ - EAPI int ecore_dbus_method_hello(Ecore_DBus_Server *svr); - EAPI int ecore_dbus_method_list_names(Ecore_DBus_Server *svr); - EAPI int ecore_dbus_method_name_has_owner(Ecore_DBus_Server *svr, char *name); - EAPI int ecore_dbus_method_start_service_by_name(Ecore_DBus_Server *svr, char *name, unsigned int flags); - EAPI int ecore_dbus_method_get_name_owner(Ecore_DBus_Server *svr, char *name); - EAPI int ecore_dbus_method_get_connection_unix_user(Ecore_DBus_Server *svr, char *connection); - EAPI int ecore_dbus_method_add_match(Ecore_DBus_Server *svr, char *match); - EAPI int ecore_dbus_method_remove_match(Ecore_DBus_Server *svr, char *match); + EAPI int ecore_dbus_method_hello(Ecore_DBus_Server *svr, Ecore_DBus_Method_Cb method_cb, void *data); + EAPI int ecore_dbus_method_list_names(Ecore_DBus_Server *svr, Ecore_DBus_Method_Cb method_cb, void *data); + EAPI int ecore_dbus_method_name_has_owner(Ecore_DBus_Server *svr, char *name, Ecore_DBus_Method_Cb method_cb, void *data); + EAPI int ecore_dbus_method_start_service_by_name(Ecore_DBus_Server *svr, char *name, unsigned int flags, Ecore_DBus_Method_Cb method_cb, void *data); + EAPI int ecore_dbus_method_get_name_owner(Ecore_DBus_Server *svr, char *name, Ecore_DBus_Method_Cb method_cb, void *data); + EAPI int ecore_dbus_method_get_connection_unix_user(Ecore_DBus_Server *svr, char *connection, Ecore_DBus_Method_Cb method_cb, void *data); + EAPI int ecore_dbus_method_add_match(Ecore_DBus_Server *svr, char *match, Ecore_DBus_Method_Cb method_cb, void *data); + EAPI int ecore_dbus_method_remove_match(Ecore_DBus_Server *svr, char *match, Ecore_DBus_Method_Cb method_cb, void *data); #ifdef __cplusplus } diff --git a/legacy/ecore/src/lib/ecore_dbus/ecore_dbus.c b/legacy/ecore/src/lib/ecore_dbus/ecore_dbus.c index 21c4ea6eda..d969265d79 100644 --- a/legacy/ecore/src/lib/ecore_dbus/ecore_dbus.c +++ b/legacy/ecore/src/lib/ecore_dbus/ecore_dbus.c @@ -42,10 +42,7 @@ EAPI int ECORE_DBUS_EVENT_SERVER_ADD = 0; EAPI int ECORE_DBUS_EVENT_SERVER_DEL = 0; -EAPI int ECORE_DBUS_EVENT_SERVER_METHOD_RETURN = 0; -EAPI int ECORE_DBUS_EVENT_SERVER_ERROR = 0; EAPI int ECORE_DBUS_EVENT_SERVER_SIGNAL = 0; -EAPI int ECORE_DBUS_EVENT_SERVER_DATA = 0; /* private function declaration */ @@ -63,6 +60,8 @@ static void _ecore_dbus_event_server_data_free(void *data, void *ev); static Ecore_DBus_Event_Server_Data *_ecore_dbus_event_create(Ecore_DBus_Server *svr, Ecore_DBus_Message *msg); +static void _ecore_dbus_method_hello_cb(void *data, Ecore_DBus_Message_Type type, Ecore_DBus_Method_Return *reply); + /* local variables */ static const Ecore_DBus_Auth auths[] = { @@ -89,10 +88,7 @@ ecore_dbus_init(void) ECORE_DBUS_EVENT_SERVER_ADD = ecore_event_type_new(); ECORE_DBUS_EVENT_SERVER_DEL = ecore_event_type_new(); - ECORE_DBUS_EVENT_SERVER_METHOD_RETURN = ecore_event_type_new(); - ECORE_DBUS_EVENT_SERVER_ERROR = ecore_event_type_new(); ECORE_DBUS_EVENT_SERVER_SIGNAL = ecore_event_type_new(); - ECORE_DBUS_EVENT_SERVER_DATA = ecore_event_type_new(); handler[i++] = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_ADD, _ecore_dbus_event_server_add, NULL); @@ -320,7 +316,7 @@ _ecore_dbus_event_server_data(void *udata, int ev_type, void *ev) ecore_dbus_server_send(svr, "BEGIN\r\n", 7); svr->authenticated = 1; /* Register on the bus */ - svr->hello = ecore_dbus_method_hello(svr); + ecore_dbus_method_hello(svr, _ecore_dbus_method_hello_cb, svr); } else if (!strncmp(e->data, "DATA", 4)) { @@ -354,6 +350,8 @@ _ecore_dbus_event_server_data(void *udata, int ev_type, void *ev) printf("[ecore_dbus] received server data, %d bytes\n", e->size); while (e->size) { + Ecore_DBus_Event_Server_Data *ev2; + msg = _ecore_dbus_message_unmarshal(svr, (unsigned char *)(e->data) + offset, e->size); if (!msg) break; offset += msg->length; @@ -362,56 +360,23 @@ _ecore_dbus_event_server_data(void *udata, int ev_type, void *ev) msg->length, e->size); //ecore_dbus_message_print(msg); /* Trap known messages */ - if (msg->type == ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN) + ev2 = _ecore_dbus_event_create(svr, msg); + if (!ev2) break; + if ((msg->type == ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN) || + (msg->type == ECORE_DBUS_MESSAGE_TYPE_ERROR)) { - unsigned int *serial; - - serial = ecore_dbus_message_header_field_get(msg, ECORE_DBUS_HEADER_FIELD_REPLY_SERIAL); - if (serial) + Ecore_DBus_Message *sent; + sent = ecore_hash_remove(svr->messages, (void *)(ev2->header.reply_serial)); + if ((sent) && (sent->cb.func)) { - Ecore_DBus_Message *sent; - sent = ecore_hash_remove(svr->messages, (void *)(*serial)); - if (*serial == svr->hello) - { - Ecore_DBus_Event_Server_Add *svr_add; - char *name; - - name = ecore_dbus_message_body_field_get(msg, 0); - printf("Got unique name: %s\n", name); - if (svr->unique_name) - { - printf("Ecore_DBus: Already said hello %s - %s\n", - svr->unique_name, name); - free(svr->unique_name); - } - svr->unique_name = strdup(name); - _ecore_dbus_message_free(msg); - - svr_add = malloc(sizeof(Ecore_DBus_Event_Server_Add)); - svr_add->server = svr; - ecore_event_add(ECORE_DBUS_EVENT_SERVER_ADD, svr_add, NULL, NULL); - } - else - { - Ecore_DBus_Event_Server_Data *ev2; - ev2 = _ecore_dbus_event_create(svr, msg); - ecore_event_add(ECORE_DBUS_EVENT_SERVER_METHOD_RETURN, ev2, - _ecore_dbus_event_server_data_free, NULL); - } - _ecore_dbus_message_free(sent); + sent->cb.func(sent->cb.data, msg->type, ev2); + _ecore_dbus_event_server_data_free(NULL, ev2); } else { - printf("Ecore_DBus: Method return without reply serial!\n"); + printf("Ecore_DBus: Reply without reply serial!\n"); } } - else if (msg->type == ECORE_DBUS_MESSAGE_TYPE_ERROR) - { - Ecore_DBus_Event_Server_Data *ev2; - ev2 = _ecore_dbus_event_create(svr, msg); - ecore_event_add(ECORE_DBUS_EVENT_SERVER_ERROR, ev2, - _ecore_dbus_event_server_data_free, NULL); - } else if (msg->type == ECORE_DBUS_MESSAGE_TYPE_SIGNAL) { Ecore_DBus_Event_Server_Data *ev2; @@ -421,10 +386,8 @@ _ecore_dbus_event_server_data(void *udata, int ev_type, void *ev) } else { - Ecore_DBus_Event_Server_Data *ev2; - ev2 = _ecore_dbus_event_create(svr, msg); - ecore_event_add(ECORE_DBUS_EVENT_SERVER_DATA, ev2, - _ecore_dbus_event_server_data_free, NULL); + printf("Ecore_DBus: Unknown return type %d\n", msg->type); + _ecore_dbus_event_server_data_free(NULL, ev2); } } } @@ -478,7 +441,7 @@ _ecore_dbus_event_create(Ecore_DBus_Server *svr, Ecore_DBus_Message *msg) Ecore_DBus_Message_Field *f; int i = 0; - ev->args = malloc(ecore_list_nodes(msg->fields) * sizeof(Ecore_DBus_Event_Arg)); + ev->args = malloc(ecore_list_nodes(msg->fields) * sizeof(Ecore_DBus_Message_Arg)); ecore_list_goto_first(msg->fields); while ((f = ecore_list_next(msg->fields))) { @@ -490,3 +453,31 @@ _ecore_dbus_event_create(Ecore_DBus_Server *svr, Ecore_DBus_Message *msg) return ev; } +static void +_ecore_dbus_method_hello_cb(void *data, Ecore_DBus_Message_Type type, Ecore_DBus_Method_Return *reply) +{ + Ecore_DBus_Event_Server_Add *svr_add; + Ecore_DBus_Server *svr; + char *name; + + if (type != ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN) + { + printf("Ecore_DBus: Could not register on the message bus\n"); + return; + } + + svr = data; + name = reply->args[0].value; + printf("Got unique name: %s\n", name); + if (svr->unique_name) + { + printf("Ecore_DBus: Already said hello %s - %s\n", + svr->unique_name, name); + free(svr->unique_name); + } + svr->unique_name = strdup(name); + + svr_add = malloc(sizeof(Ecore_DBus_Event_Server_Add)); + svr_add->server = svr; + ecore_event_add(ECORE_DBUS_EVENT_SERVER_ADD, svr_add, NULL, NULL); +} diff --git a/legacy/ecore/src/lib/ecore_dbus/ecore_dbus_message.c b/legacy/ecore/src/lib/ecore_dbus/ecore_dbus_message.c index 24a0707c7e..ae2a90be17 100644 --- a/legacy/ecore/src/lib/ecore_dbus/ecore_dbus_message.c +++ b/legacy/ecore/src/lib/ecore_dbus/ecore_dbus_message.c @@ -19,6 +19,8 @@ static void _ecore_dbus_message_print_raw(Ecore_DBus_Message *msg); EAPI unsigned int ecore_dbus_message_new_method_call(Ecore_DBus_Server *svr, char *destination, char *path, char *interface, char *method, + Ecore_DBus_Method_Cb method_cb, + void *data, char *fmt, ...) { unsigned int body_start; @@ -29,6 +31,11 @@ ecore_dbus_message_new_method_call(Ecore_DBus_Server *svr, char *destination, /* init message */ Ecore_DBus_Message *msg = _ecore_dbus_message_new(svr); + if (method_cb) + { + msg->cb.func = method_cb; + msg->cb.data = data; + } /* common header */ _ecore_dbus_message_common_header(msg, ECORE_DBUS_MESSAGE_TYPE_METHOD_CALL, 0); diff --git a/legacy/ecore/src/lib/ecore_dbus/ecore_dbus_methods.c b/legacy/ecore/src/lib/ecore_dbus/ecore_dbus_methods.c index 9d8d4804cf..cc1c1c356d 100644 --- a/legacy/ecore/src/lib/ecore_dbus/ecore_dbus_methods.c +++ b/legacy/ecore/src/lib/ecore_dbus/ecore_dbus_methods.c @@ -9,97 +9,102 @@ #include "ecore_dbus_private.h" EAPI int -ecore_dbus_method_hello(Ecore_DBus_Server *svr) +ecore_dbus_method_hello(Ecore_DBus_Server *svr, Ecore_DBus_Method_Cb method_cb, void *data) { if (svr->unique_name) { printf("Ecore_DBus: Already registered on the message bus.\n"); return 0; } - if (svr->hello) - { - printf("Ecore_DBus: Already tried to register on the message bus, wait for reply.\n"); - return 0; - } return ecore_dbus_message_new_method_call(svr, "org.freedesktop.DBus" /*destination*/, "/org/freedesktop/DBus" /*path*/, "org.freedesktop.DBus" /*interface*/, - "Hello" /*method*/, NULL /*fmt*/); + "Hello" /*method*/, + method_cb, data, + NULL /*fmt*/); } EAPI int -ecore_dbus_method_list_names(Ecore_DBus_Server *svr) +ecore_dbus_method_list_names(Ecore_DBus_Server *svr, Ecore_DBus_Method_Cb method_cb, void *data) { return ecore_dbus_message_new_method_call(svr, "org.freedesktop.DBus" /*destination*/, "/org/freedesktop/DBus" /*path*/, "org.freedesktop.DBus" /*interface*/, - "ListNames" /*method*/, NULL /*fmt*/); + "ListNames" /*method*/, + method_cb, data, + NULL /*fmt*/); } EAPI int -ecore_dbus_method_name_has_owner(Ecore_DBus_Server *svr, char *name) +ecore_dbus_method_name_has_owner(Ecore_DBus_Server *svr, char *name, Ecore_DBus_Method_Cb method_cb, void *data) { return ecore_dbus_message_new_method_call(svr, "org.freedesktop.DBus" /*destination*/, "/org/freedesktop/DBus" /*path*/, "org.freedesktop.DBus" /*interface*/, "NameHasOwner" /*method*/, + method_cb, data, "s" /*fmt*/, name); } EAPI int -ecore_dbus_method_start_service_by_name(Ecore_DBus_Server *svr, char *name, unsigned int flags) +ecore_dbus_method_start_service_by_name(Ecore_DBus_Server *svr, char *name, unsigned int flags, Ecore_DBus_Method_Cb method_cb, void *data) { return ecore_dbus_message_new_method_call(svr, "org.freedesktop.DBus" /*destination*/, "/org/freedesktop/DBus" /*path*/, "org.freedesktop.DBus" /*interface*/, "StartServiceByName" /*method*/, + method_cb, data, "su" /*fmt*/, name, flags); } EAPI int -ecore_dbus_method_get_name_owner(Ecore_DBus_Server *svr, char *name) +ecore_dbus_method_get_name_owner(Ecore_DBus_Server *svr, char *name, Ecore_DBus_Method_Cb method_cb, void *data) { return ecore_dbus_message_new_method_call(svr, "org.freedesktop.DBus" /*destination*/, "/org/freedesktop/DBus" /*path*/, "org.freedesktop.DBus" /*interface*/, "GetNameOwner" /*method*/, + method_cb, data, "s" /*fmt*/, name); } EAPI int -ecore_dbus_method_get_connection_unix_user(Ecore_DBus_Server *svr, char *connection) +ecore_dbus_method_get_connection_unix_user(Ecore_DBus_Server *svr, char *connection, Ecore_DBus_Method_Cb method_cb, void *data) { return ecore_dbus_message_new_method_call(svr, "org.freedesktop.DBus" /*destination*/, "/org/freedesktop/DBus" /*path*/, "org.freedesktop.DBus" /*interface*/, "GetConnectionUnixUser" /*method*/, + method_cb, data, "s" /*fmt*/, connection); } EAPI int -ecore_dbus_method_add_match(Ecore_DBus_Server *svr, char *match) +ecore_dbus_method_add_match(Ecore_DBus_Server *svr, char *match, Ecore_DBus_Method_Cb method_cb, void *data) { return ecore_dbus_message_new_method_call(svr, "org.freedesktop.DBus" /*destination*/, "/org/freedesktop/DBus" /*path*/, "org.freedesktop.DBus" /*interface*/, "AddMatch" /*method*/, + method_cb, data, "s" /*fmt*/, match); } EAPI int -ecore_dbus_method_remove_match(Ecore_DBus_Server *svr, char *match) +ecore_dbus_method_remove_match(Ecore_DBus_Server *svr, char *match, Ecore_DBus_Method_Cb method_cb, void *data) { return ecore_dbus_message_new_method_call(svr, "org.freedesktop.DBus" /*destination*/, "/org/freedesktop/DBus" /*path*/, "org.freedesktop.DBus" /*interface*/, "RemoveMatch" /*method*/, + method_cb, data, "s" /*fmt*/, match); } diff --git a/legacy/ecore/src/lib/ecore_dbus/ecore_dbus_private.h b/legacy/ecore/src/lib/ecore_dbus/ecore_dbus_private.h index f05dc7473b..e8274fb297 100644 --- a/legacy/ecore/src/lib/ecore_dbus/ecore_dbus_private.h +++ b/legacy/ecore/src/lib/ecore_dbus/ecore_dbus_private.h @@ -64,7 +64,6 @@ struct _Ecore_DBus_Server int cnt_msg; Ecore_Hash *messages; - unsigned int hello; char *unique_name; }; @@ -73,6 +72,12 @@ struct _Ecore_DBus_Message /* server to send to */ Ecore_DBus_Server *server; + /* callback */ + struct { + Ecore_DBus_Method_Cb func; + void *data; + } cb; + /* header fields */ unsigned char byte_order; unsigned char type;