Enlightenment CVS committal Author : sebastid Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_dbus Modified Files: Ecore_DBus.h ecore_dbus.c ecore_dbus_message.c ecore_dbus_methods.c ecore_dbus_private.h Log Message: Add error callback =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/Ecore_DBus.h,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- Ecore_DBus.h 27 Jul 2006 15:06:13 -0000 1.14 +++ Ecore_DBus.h 27 Jul 2006 15:28:44 -0000 1.15 @@ -135,7 +135,8 @@ EAPI extern int ECORE_DBUS_EVENT_SERVER_SIGNAL; /* callback */ - typedef void (*Ecore_DBus_Method_Cb)(void *data, Ecore_DBus_Message_Type type, Ecore_DBus_Method_Return *reply); + typedef void (*Ecore_DBus_Method_Return_Cb)(void *data, Ecore_DBus_Method_Return *reply); + typedef void (*Ecore_DBus_Error_Cb)(void *data, const char *error); /* init */ EAPI int ecore_dbus_init(void); @@ -151,9 +152,8 @@ 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), + Ecore_DBus_Method_Return_Cb method_cb, + Ecore_DBus_Error_Cb error_cb, void *data, char *fmt, ...); EAPI void ecore_dbus_message_del(Ecore_DBus_Message *msg); @@ -162,14 +162,14 @@ 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, 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); + EAPI int ecore_dbus_method_hello(Ecore_DBus_Server *svr, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data); + EAPI int ecore_dbus_method_list_names(Ecore_DBus_Server *svr, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data); + EAPI int ecore_dbus_method_name_has_owner(Ecore_DBus_Server *svr, char *name, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data); + EAPI int ecore_dbus_method_start_service_by_name(Ecore_DBus_Server *svr, char *name, unsigned int flags, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data); + EAPI int ecore_dbus_method_get_name_owner(Ecore_DBus_Server *svr, char *name, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data); + EAPI int ecore_dbus_method_get_connection_unix_user(Ecore_DBus_Server *svr, char *connection, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data); + EAPI int ecore_dbus_method_add_match(Ecore_DBus_Server *svr, char *match, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data); + EAPI int ecore_dbus_method_remove_match(Ecore_DBus_Server *svr, char *match, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data); #ifdef __cplusplus } =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -3 -r1.20 -r1.21 --- ecore_dbus.c 27 Jul 2006 15:06:13 -0000 1.20 +++ ecore_dbus.c 27 Jul 2006 15:28:44 -0000 1.21 @@ -60,7 +60,8 @@ 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); +static void _ecore_dbus_method_hello_cb(void *data, Ecore_DBus_Method_Return *reply); +static void _ecore_dbus_method_error_cb(void *data, const char *error); /* local variables */ @@ -316,7 +317,7 @@ ecore_dbus_server_send(svr, "BEGIN\r\n", 7); svr->authenticated = 1; /* Register on the bus */ - ecore_dbus_method_hello(svr, _ecore_dbus_method_hello_cb, svr); + ecore_dbus_method_hello(svr, _ecore_dbus_method_hello_cb, _ecore_dbus_method_error_cb, svr); } else if (!strncmp(e->data, "DATA", 4)) { @@ -362,20 +363,38 @@ /* Trap known messages */ 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)) + if (msg->type == ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN) { Ecore_DBus_Message *sent; sent = ecore_hash_remove(svr->messages, (void *)(ev2->header.reply_serial)); - if ((sent) && (sent->cb.func)) + if ((sent) && (sent->cb.method_return)) { - sent->cb.func(sent->cb.data, msg->type, ev2); - _ecore_dbus_event_server_data_free(NULL, ev2); + sent->cb.method_return(sent->cb.data, ev2); } else { printf("Ecore_DBus: Reply without reply serial!\n"); } + if (sent) _ecore_dbus_message_free(sent); + _ecore_dbus_event_server_data_free(NULL, ev2); + } + else if (msg->type == ECORE_DBUS_MESSAGE_TYPE_ERROR) + { + Ecore_DBus_Message *sent; + sent = ecore_hash_remove(svr->messages, (void *)(ev2->header.reply_serial)); + if ((sent) && (sent->cb.error)) + { + char *error = NULL; + if (ev2->args) + error = ev2->args[0].value; + sent->cb.error(sent->cb.data, error); + } + else + { + printf("Ecore_DBus: Error without reply serial!\n"); + } + if (sent) _ecore_dbus_message_free(sent); + _ecore_dbus_event_server_data_free(NULL, ev2); } else if (msg->type == ECORE_DBUS_MESSAGE_TYPE_SIGNAL) { @@ -454,18 +473,12 @@ } static void -_ecore_dbus_method_hello_cb(void *data, Ecore_DBus_Message_Type type, Ecore_DBus_Method_Return *reply) +_ecore_dbus_method_hello_cb(void *data, 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); @@ -480,4 +493,19 @@ 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); +} + +static void +_ecore_dbus_method_error_cb(void *data, const char *error) +{ + Ecore_DBus_Event_Server_Del *ev; + Ecore_DBus_Server *svr; + + svr = data; + printf("Ecore_DBus: error %s\n", error); + + ev = malloc(sizeof(Ecore_DBus_Event_Server_Del)); + if (!ev) return; + ev->server = svr; + ecore_event_add(ECORE_DBUS_EVENT_SERVER_DEL, ev, _ecore_dbus_event_server_del_free, NULL); } =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_message.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- ecore_dbus_message.c 27 Jul 2006 15:06:13 -0000 1.7 +++ ecore_dbus_message.c 27 Jul 2006 15:28:44 -0000 1.8 @@ -19,7 +19,8 @@ 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, + Ecore_DBus_Method_Return_Cb method_cb, + Ecore_DBus_Error_Cb error_cb, void *data, char *fmt, ...) { @@ -33,7 +34,8 @@ Ecore_DBus_Message *msg = _ecore_dbus_message_new(svr); if (method_cb) { - msg->cb.func = method_cb; + msg->cb.method_return = method_cb; + msg->cb.error = error_cb; msg->cb.data = data; } =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_methods.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- ecore_dbus_methods.c 27 Jul 2006 15:06:13 -0000 1.4 +++ ecore_dbus_methods.c 27 Jul 2006 15:28:44 -0000 1.5 @@ -9,7 +9,10 @@ #include "ecore_dbus_private.h" EAPI int -ecore_dbus_method_hello(Ecore_DBus_Server *svr, Ecore_DBus_Method_Cb method_cb, void *data) +ecore_dbus_method_hello(Ecore_DBus_Server *svr, + Ecore_DBus_Method_Return_Cb method_cb, + Ecore_DBus_Error_Cb error_cb, + void *data) { if (svr->unique_name) { @@ -21,90 +24,111 @@ "/org/freedesktop/DBus" /*path*/, "org.freedesktop.DBus" /*interface*/, "Hello" /*method*/, - method_cb, data, + method_cb, error_cb, data, NULL /*fmt*/); } EAPI int -ecore_dbus_method_list_names(Ecore_DBus_Server *svr, Ecore_DBus_Method_Cb method_cb, void *data) +ecore_dbus_method_list_names(Ecore_DBus_Server *svr, + Ecore_DBus_Method_Return_Cb method_cb, + Ecore_DBus_Error_Cb error_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*/, - method_cb, data, + method_cb, error_cb, data, NULL /*fmt*/); } EAPI int -ecore_dbus_method_name_has_owner(Ecore_DBus_Server *svr, char *name, Ecore_DBus_Method_Cb method_cb, void *data) +ecore_dbus_method_name_has_owner(Ecore_DBus_Server *svr, char *name, + Ecore_DBus_Method_Return_Cb method_cb, + Ecore_DBus_Error_Cb error_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, + method_cb, error_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_Cb method_cb, void *data) +ecore_dbus_method_start_service_by_name(Ecore_DBus_Server *svr, char *name, unsigned int flags, + Ecore_DBus_Method_Return_Cb method_cb, + Ecore_DBus_Error_Cb error_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, + method_cb, error_cb, data, "su" /*fmt*/, name, flags); } EAPI int -ecore_dbus_method_get_name_owner(Ecore_DBus_Server *svr, char *name, Ecore_DBus_Method_Cb method_cb, void *data) +ecore_dbus_method_get_name_owner(Ecore_DBus_Server *svr, char *name, + Ecore_DBus_Method_Return_Cb method_cb, + Ecore_DBus_Error_Cb error_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, + method_cb, error_cb, data, "s" /*fmt*/, name); } EAPI int -ecore_dbus_method_get_connection_unix_user(Ecore_DBus_Server *svr, char *connection, Ecore_DBus_Method_Cb method_cb, void *data) +ecore_dbus_method_get_connection_unix_user(Ecore_DBus_Server *svr, char *connection, + Ecore_DBus_Method_Return_Cb method_cb, + Ecore_DBus_Error_Cb error_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, + method_cb, error_cb, data, "s" /*fmt*/, connection); } EAPI int -ecore_dbus_method_add_match(Ecore_DBus_Server *svr, char *match, Ecore_DBus_Method_Cb method_cb, void *data) +ecore_dbus_method_add_match(Ecore_DBus_Server *svr, char *match, + Ecore_DBus_Method_Return_Cb method_cb, + Ecore_DBus_Error_Cb error_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, + method_cb, error_cb, data, "s" /*fmt*/, match); } EAPI int -ecore_dbus_method_remove_match(Ecore_DBus_Server *svr, char *match, Ecore_DBus_Method_Cb method_cb, void *data) +ecore_dbus_method_remove_match(Ecore_DBus_Server *svr, char *match, + Ecore_DBus_Method_Return_Cb method_cb, + Ecore_DBus_Error_Cb error_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, + method_cb, error_cb, data, "s" /*fmt*/, match); } =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_private.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- ecore_dbus_private.h 27 Jul 2006 15:06:13 -0000 1.11 +++ ecore_dbus_private.h 27 Jul 2006 15:28:44 -0000 1.12 @@ -74,8 +74,9 @@ /* callback */ struct { - Ecore_DBus_Method_Cb func; - void *data; + Ecore_DBus_Method_Return_Cb method_return; + Ecore_DBus_Error_Cb error; + void *data; } cb; /* header fields */ ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs