Enlightenment CVS committal Author : rephorm Project : e17 Module : proto
Dir : e17/proto/e_dbus/src/lib/hal Modified Files: E_Hal.h Makefile.am e_hal_device.c e_hal_manager.c Log Message: playing around with the api a bit - use a single callback instead of separate reply / error callbacks =================================================================== RCS file: /cvs/e/e17/proto/e_dbus/src/lib/hal/E_Hal.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- E_Hal.h 15 Mar 2007 08:59:19 -0000 1.1 +++ E_Hal.h 20 Mar 2007 06:34:13 -0000 1.2 @@ -17,7 +17,7 @@ * For method calls, the return structs use the following naming convention: * E_Hal_<Interface>_<Method_Call_Name>_Return */ -typedef void (*E_Hal_Callback_Func) (void *user_data, void *method_return); +typedef void (*E_Hal_Callback_Func) (void *user_data, void *method_return, DBusError *error); /* message return types */ =================================================================== RCS file: /cvs/e/e17/proto/e_dbus/src/lib/hal/Makefile.am,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- Makefile.am 15 Mar 2007 08:59:19 -0000 1.1 +++ Makefile.am 20 Mar 2007 06:34:13 -0000 1.2 @@ -6,7 +6,7 @@ lib_LTLIBRARIES = libehal.la -include_HEADERS = E_Hal.h +include_HEADERS = E_Hal.h e_hal_private.h libehal_la_SOURCES = \ E_Hal.h \ =================================================================== RCS file: /cvs/e/e17/proto/e_dbus/src/lib/hal/e_hal_device.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- e_hal_device.c 15 Mar 2007 08:59:19 -0000 1.1 +++ e_hal_device.c 20 Mar 2007 06:34:13 -0000 1.2 @@ -1,29 +1,28 @@ #include <E_Hal.h> +#include "e_hal_private.h" #define e_hal_device_call_new(udi, member) dbus_message_new_method_call(E_HAL_SENDER, udi, E_HAL_DEVICE_INTERFACE, member) #define e_hal_device_volume_call_new(udi, member) dbus_message_new_method_call(E_HAL_SENDER, udi, E_HAL_DEVICE_VOLUME_INTERFACE, member) -static void cb_device_get_property(void *data, DBusMessage *msg); -static void cb_device_get_all_properties(void *data, DBusMessage *msg); -static void cb_device_query_capability(void *data, DBusMessage *msg); +static void cb_device_get_property(void *data, DBusMessage *msg, DBusError *err); +static void cb_device_get_all_properties(void *data, DBusMessage *msg, DBusError *err); +static void cb_device_query_capability(void *data, DBusMessage *msg, DBusError *err); /* Device.GetProperty */ static void -cb_device_get_property(void *data, DBusMessage *msg) +cb_device_get_property(void *data, DBusMessage *msg, DBusError *err) { E_Hal_Callback *cb = data; E_Hal_Device_Get_Property_Return *ret; - DBusError err; DBusMessageIter iter; - dbus_bool_t val; int type; if (!cb) return; + E_HAL_HANDLE_ERROR(cb, err); ret = calloc(1, sizeof(E_Hal_Device_Get_Property_Return)); if (!ret) return; - dbus_error_init(&err); dbus_message_iter_init(msg, &iter); type = dbus_message_iter_get_arg_type(&iter); switch(type) @@ -42,15 +41,16 @@ break; } - if (dbus_error_is_set(&err)) + if (dbus_error_is_set(err)) { /* XXX do something with an error */ - printf("ERROR: %s, %s!\n", err.name, err.message); - dbus_error_free(&err); + printf("ERROR: %s, %s!\n", err->name, err->message); + dbus_error_free(err); goto error; } - cb->func(cb->user_data, ret); + if (cb->func) + cb->func(cb->user_data, ret, err); error: free(ret); @@ -66,22 +66,20 @@ cb = e_hal_callback_new(cb_func, data); msg = e_hal_device_call_new(udi, "GetProperty"); dbus_message_append_args(msg, DBUS_TYPE_STRING, &property, DBUS_TYPE_INVALID); - return e_dbus_message_send(conn, msg, cb_device_get_property, cb_error_generic, -1, cb) ? 1 : 0; + return e_dbus_message_send(conn, msg, cb_device_get_property, -1, cb) ? 1 : 0; } /* Device.GetAllProperties */ static void -cb_device_get_all_properties(void *data, DBusMessage *msg) +cb_device_get_all_properties(void *data, DBusMessage *msg, DBusError *err) { E_Hal_Callback *cb = data; E_Hal_Device_Get_All_Properties_Return *ret; - DBusError err; DBusMessageIter iter, a_iter, s_iter, v_iter; - dbus_bool_t val; - int type; if (!cb) return; + E_HAL_HANDLE_ERROR(cb, err); ret = calloc(1, sizeof(E_Hal_Device_Get_All_Properties_Return)); if (!ret) return; @@ -91,7 +89,6 @@ ecore_hash_set_free_value(ret->properties, ECORE_FREE_CB(e_hal_property_free)); - dbus_error_init(&err); dbus_message_iter_init(msg, &iter); if (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_ARRAY && dbus_message_iter_get_element_type(&iter) == DBUS_TYPE_DICT_ENTRY) @@ -155,15 +152,16 @@ } else printf("error, wrong type\n"); - if (dbus_error_is_set(&err)) + if (dbus_error_is_set(err)) { /* XXX do something with an error */ - printf("ERROR: %s, %s!\n", err.name, err.message); - dbus_error_free(&err); + printf("ERROR: %s, %s!\n", err->name, err->message); + dbus_error_free(err); goto error; } - cb->func(cb->user_data, ret); + if (cb->func) + cb->func(cb->user_data, ret, err); error: ecore_hash_destroy(ret->properties); @@ -179,7 +177,7 @@ cb = e_hal_callback_new(cb_func, data); msg = e_hal_device_call_new(udi, "GetAllProperties"); - return e_dbus_message_send(conn, msg, cb_device_get_all_properties, cb_error_generic, -1, cb) ? 1 : 0; + return e_dbus_message_send(conn, msg, cb_device_get_all_properties, -1, cb) ? 1 : 0; } @@ -187,31 +185,31 @@ /* bool Device.QueryCapability(string udi) */ static void -cb_device_query_capability(void *data, DBusMessage *msg) +cb_device_query_capability(void *data, DBusMessage *msg, DBusError *err) { E_Hal_Callback *cb = data; E_Hal_Device_Query_Capability_Return *ret; - DBusError err; dbus_bool_t val; if (!cb) return; + E_HAL_HANDLE_ERROR(cb, err); ret = calloc(1, sizeof(E_Hal_Device_Query_Capability_Return)); if (!ret) return; - dbus_error_init(&err); - dbus_message_get_args(msg, &err, DBUS_TYPE_BOOLEAN, &val, DBUS_TYPE_INVALID); + dbus_message_get_args(msg, err, DBUS_TYPE_BOOLEAN, &val, DBUS_TYPE_INVALID); - if (dbus_error_is_set(&err)) + if (dbus_error_is_set(err)) { /* XXX do something with an error */ - printf("ERROR: %s, %s!\n", err.name, err.message); - dbus_error_free(&err); + printf("ERROR: %s, %s!\n", err->name, err->message); + dbus_error_free(err); goto error; } ret->boolean = val; - cb->func(cb->user_data, ret); + if (cb->func) + cb->func(cb->user_data, ret, err); error: free(ret); @@ -227,31 +225,24 @@ cb = e_hal_callback_new(cb_func, data); msg = e_hal_device_call_new(udi, "QueryCapability"); dbus_message_append_args(msg, DBUS_TYPE_STRING, &capability, DBUS_TYPE_INVALID); - return e_dbus_message_send(conn, msg, cb_device_query_capability, cb_error_generic, -1, cb) ? 1 : 0; + return e_dbus_message_send(conn, msg, cb_device_query_capability, -1, cb) ? 1 : 0; } /* void Device.Mount(string mount_point, string fstype, array{string}options) */ -static void -cb_device_volume_mount_error(void *data, char *error_name, char *error_message) -{ - E_Hal_Callback *cb = data; - //XXX finish (and use in e_hal_device_volume_mount() instead of cb_error_generic... - e_hal_callback_free(cb); -} static void -cb_device_volume_mount(void *data, DBusMessage *msg) +cb_device_volume_mount(void *data, DBusMessage *msg, DBusError *err) { E_Hal_Callback *cb = data; - DBusError err; - char *val; if (!cb) return; + E_HAL_HANDLE_ERROR(cb, err); if (cb->func) - cb->func(cb->user_data, NULL); + cb->func(cb->user_data, NULL, err); +error: e_hal_callback_free(cb); } @@ -290,22 +281,23 @@ } dbus_message_iter_close_container(&iter, &subiter) ; - return e_dbus_message_send(conn, msg, cb_device_volume_mount, cb_error_generic, -1, cb) ? 1 : 0; + return e_dbus_message_send(conn, msg, cb_device_volume_mount, -1, cb) ? 1 : 0; } /* void Unmount(array{string} options) */ static void -cb_device_volume_unmount(void *data, DBusMessage *msg) +cb_device_volume_unmount(void *data, DBusMessage *msg, DBusError *err) { E_Hal_Callback *cb = data; - DBusError err; - char *val; if (!cb) return; + E_HAL_HANDLE_ERROR(cb, err); + if (cb->func) - cb->func(cb->user_data, NULL); + cb->func(cb->user_data, NULL, err); +error: e_hal_callback_free(cb); } @@ -339,5 +331,5 @@ } dbus_message_iter_close_container(&iter, &subiter) ; - return e_dbus_message_send(conn, msg, cb_device_volume_unmount, cb_error_generic, -1, cb) ? 1 : 0; + return e_dbus_message_send(conn, msg, cb_device_volume_unmount, -1, cb) ? 1 : 0; } =================================================================== RCS file: /cvs/e/e17/proto/e_dbus/src/lib/hal/e_hal_manager.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- e_hal_manager.c 15 Mar 2007 08:59:19 -0000 1.1 +++ e_hal_manager.c 20 Mar 2007 06:34:13 -0000 1.2 @@ -1,16 +1,19 @@ -#include <E_Hal.h> +#include "E_Hal.h" +#include "e_hal_private.h" -static void cb_manager_get_all_devices(void *data, DBusMessage *msg); -static void cb_manager_device_exists(void *data, DBusMessage *msg); -static void cb_manager_find_device_string_match(void *data, DBusMessage *msg); -static void cb_manager_find_device_by_capability(void *data, DBusMessage *msg); +static void cb_manager_get_all_devices(void *data, DBusMessage *msg, DBusError *err); +static void cb_manager_device_exists(void *data, DBusMessage *msg, DBusError *err); +static void cb_manager_find_device_string_match(void *data, DBusMessage *msg, DBusError *err); +static void cb_manager_find_device_by_capability(void *data, DBusMessage *msg, DBusError *err); #define e_hal_manager_call_new(member) dbus_message_new_method_call(E_HAL_SENDER, E_HAL_MANAGER_PATH, E_HAL_MANAGER_INTERFACE, member) + + /* GetAllDevices */ static void -cb_manager_get_all_devices(void *data, DBusMessage *msg) +cb_manager_get_all_devices(void *data, DBusMessage *msg, DBusError *err) { E_Hal_Callback *cb = data; E_Hal_Manager_Get_All_Devices_Return *ret; @@ -18,8 +21,10 @@ if (!cb) return; + E_HAL_HANDLE_ERROR(cb, err); + ret = calloc(1, sizeof(E_Hal_Manager_Get_All_Devices_Return)); - if (!ret) return; + if (!ret) goto error; ret->strings = ecore_list_new(); if (!ret->strings) goto error; @@ -38,7 +43,7 @@ dbus_message_iter_next(&sub); } - cb->func(cb->user_data, ret); + cb->func(cb->user_data, ret, err); error: if (ret->strings) ecore_list_destroy(ret->strings); @@ -52,40 +57,40 @@ E_Hal_Callback *cb; DBusMessage *msg; + if (!cb_func) return 0; cb = e_hal_callback_new(cb_func, data); msg = e_hal_manager_call_new("GetAllDevices"); /* add params here (for method calls that have them) */ - return e_dbus_message_send(conn, msg, cb_manager_get_all_devices, cb_error_generic, -1, cb) ? 1 : 0; + return e_dbus_message_send(conn, msg, cb_manager_get_all_devices, -1, cb) ? 1 : 0; } /* Manager.DeviceExists(string udi) */ static void -cb_manager_device_exists(void *data, DBusMessage *msg) +cb_manager_device_exists(void *data, DBusMessage *msg, DBusError *err) { E_Hal_Callback *cb = data; E_Hal_Manager_Device_Exists_Return *ret; - DBusError err; dbus_bool_t val; if (!cb) return; + E_HAL_HANDLE_ERROR(cb, err); ret = calloc(1, sizeof(E_Hal_Manager_Device_Exists_Return)); if (!ret) return; - dbus_error_init(&err); - dbus_message_get_args(msg, &err, DBUS_TYPE_BOOLEAN, &val, DBUS_TYPE_INVALID); + dbus_message_get_args(msg, err, DBUS_TYPE_BOOLEAN, &val, DBUS_TYPE_INVALID); - if (dbus_error_is_set(&err)) + if (dbus_error_is_set(err)) { - /* XXX do something with an error */ - printf("ERROR: %s, %s!\n", err.name, err.message); - dbus_error_free(&err); + if (cb->func) + cb->func(cb->user_data, NULL, err); + dbus_error_free(err); goto error; } ret->boolean = val; - cb->func(cb->user_data, ret); + cb->func(cb->user_data, ret, err); error: free(ret); @@ -101,19 +106,20 @@ cb = e_hal_callback_new(cb_func, data); msg = e_hal_manager_call_new("DeviceExists"); dbus_message_append_args(msg, DBUS_TYPE_STRING, &udi, DBUS_TYPE_INVALID); - return e_dbus_message_send(conn, msg, cb_manager_device_exists, cb_error_generic, -1, cb) ? 1 : 0; + return e_dbus_message_send(conn, msg, cb_manager_device_exists, -1, cb) ? 1 : 0; } /* Manager.FindDeviceStringMatch */ static void -cb_manager_find_device_string_match(void *data, DBusMessage *msg) +cb_manager_find_device_string_match(void *data, DBusMessage *msg, DBusError *err) { E_Hal_Callback *cb = data; E_Hal_Manager_Find_Device_String_Match_Return *ret; DBusMessageIter iter, sub; if (!cb) return; + E_HAL_HANDLE_ERROR(cb, err); ret = calloc(1, sizeof(E_Hal_Manager_Find_Device_String_Match_Return)); if (!ret) return; @@ -135,7 +141,7 @@ dbus_message_iter_next(&sub); } - cb->func(cb->user_data, ret); + cb->func(cb->user_data, ret, err); error: if (ret->strings) ecore_list_destroy(ret->strings); @@ -152,19 +158,20 @@ cb = e_hal_callback_new(cb_func, data); msg = e_hal_manager_call_new("FindDeviceStringMatch"); dbus_message_append_args(msg, DBUS_TYPE_STRING, &key, DBUS_TYPE_STRING, &value, DBUS_TYPE_INVALID); - return e_dbus_message_send(conn, msg, cb_manager_find_device_string_match, cb_error_generic, -1, cb) ? 1 : 0; + return e_dbus_message_send(conn, msg, cb_manager_find_device_string_match, -1, cb) ? 1 : 0; } /* Manager.FindDeviceByCapability */ static void -cb_manager_find_device_by_capability(void *data, DBusMessage *msg) +cb_manager_find_device_by_capability(void *data, DBusMessage *msg, DBusError *err) { E_Hal_Callback *cb = data; E_Hal_Manager_Find_Device_By_Capability_Return *ret; DBusMessageIter iter, sub; if (!cb) return; + E_HAL_HANDLE_ERROR(cb, err); ret = calloc(1, sizeof(E_Hal_Manager_Find_Device_By_Capability_Return)); if (!ret) return; @@ -186,7 +193,7 @@ dbus_message_iter_next(&sub); } - cb->func(cb->user_data, ret); + cb->func(cb->user_data, ret, err); error: if (ret->strings) ecore_list_destroy(ret->strings); @@ -203,5 +210,5 @@ cb = e_hal_callback_new(cb_func, data); msg = e_hal_manager_call_new("FindDeviceByCapability"); dbus_message_append_args(msg, DBUS_TYPE_STRING, &capability, DBUS_TYPE_INVALID); - return e_dbus_message_send(conn, msg, cb_manager_find_device_by_capability, cb_error_generic, -1, cb) ? 1 : 0; + return e_dbus_message_send(conn, msg, cb_manager_find_device_by_capability, -1, cb) ? 1 : 0; } ------------------------------------------------------------------------- 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