X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=client%2Fdbus_helpers.c;h=8c6bdbb387ea1a6fd0e4a02e3c76bccdbb77c40a;hb=d04bfa0350781ebfb8cbb2e64fabdfb2f36cd302;hp=a3e0843364456e73cbdde7d790d0db96122a8f5b;hpb=fff12a67390147487a7d3b41e7c8aa60487243ed;p=platform%2Fupstream%2Fconnman.git diff --git a/client/dbus_helpers.c b/client/dbus_helpers.c index a3e0843..8c6bdbb 100644 --- a/client/dbus_helpers.c +++ b/client/dbus_helpers.c @@ -22,12 +22,13 @@ #include #include +#include #include #include "input.h" #include "dbus_helpers.h" -#define TIMEOUT 60000 +#define TIMEOUT 120000 void __connmanctl_dbus_print(DBusMessageIter *iter, const char *pre, const char *dict, const char *sep) @@ -35,13 +36,16 @@ void __connmanctl_dbus_print(DBusMessageIter *iter, const char *pre, int arg_type; dbus_bool_t b; unsigned char c; - unsigned int i; + dbus_uint16_t u16; + dbus_uint32_t u; + dbus_int32_t i; + dbus_uint64_t u64; double d; char *str; DBusMessageIter entry; - if (pre == NULL) + if (!pre) pre = ""; while ((arg_type = dbus_message_iter_get_arg_type(iter)) @@ -85,7 +89,7 @@ void __connmanctl_dbus_print(DBusMessageIter *iter, const char *pre, case DBUS_TYPE_BOOLEAN: dbus_message_iter_get_basic(iter, &b); - if (b == FALSE) + if (!b) fprintf(stdout, "False"); else fprintf(stdout, "True"); @@ -97,11 +101,25 @@ void __connmanctl_dbus_print(DBusMessageIter *iter, const char *pre, break; case DBUS_TYPE_UINT16: + dbus_message_iter_get_basic(iter, &u16); + fprintf(stdout, "%u", u16); + break; + case DBUS_TYPE_UINT32: + dbus_message_iter_get_basic(iter, &u); + fprintf(stdout, "%d", u); + break; + + case DBUS_TYPE_INT32: dbus_message_iter_get_basic(iter, &i); fprintf(stdout, "%d", i); break; + case DBUS_TYPE_UINT64: + dbus_message_iter_get_basic(iter, &u64); + fprintf(stdout, "%"PRIu64, u64); + break; + case DBUS_TYPE_DOUBLE: dbus_message_iter_get_basic(iter, &d); fprintf(stdout, "%f", d); @@ -112,7 +130,7 @@ void __connmanctl_dbus_print(DBusMessageIter *iter, const char *pre, break; } - if (dbus_message_iter_has_next(iter) == TRUE) + if (dbus_message_iter_has_next(iter)) fprintf(stdout, "%s", sep); dbus_message_iter_next(iter); @@ -134,6 +152,7 @@ static void dbus_method_reply(DBusPendingCall *call, void *user_data) __connmanctl_save_rl(); reply = dbus_pending_call_steal_reply(call); + dbus_pending_call_unref(call); if (dbus_message_get_type(reply) == DBUS_MESSAGE_TYPE_ERROR) { DBusError err; @@ -166,14 +185,13 @@ static int send_method_call(DBusConnection *connection, DBusPendingCall *call; struct dbus_callback *callback; - if (dbus_connection_send_with_reply(connection, message, &call, - TIMEOUT) == FALSE) + if (!dbus_connection_send_with_reply(connection, message, &call, TIMEOUT)) goto end; - if (call == NULL) - goto end; + if (!call) + goto end; - if (cb != NULL) { + if (cb) { callback = g_new0(struct dbus_callback, 1); callback->cb = cb; callback->user_data = user_data; @@ -203,6 +221,14 @@ static int append_variant(DBusMessageIter *iter, const char *property, case DBUS_TYPE_STRING: type_str = DBUS_TYPE_STRING_AS_STRING; break; + case DBUS_TYPE_INT32: + type_str = DBUS_TYPE_INT32_AS_STRING; + break; +#if defined TIZEN_EXT_WIFI_MESH + case DBUS_TYPE_UINT16: + type_str = DBUS_TYPE_UINT16_AS_STRING; + break; +#endif default: return -EOPNOTSUPP; } @@ -216,23 +242,25 @@ static int append_variant(DBusMessageIter *iter, const char *property, return 0; } -int __connmanctl_dbus_method_call(DBusConnection *connection, const char *path, - const char *interface, const char *method, - connmanctl_dbus_method_return_func_t cb, void *user_data, - int arg1, ...) +int __connmanctl_dbus_method_call(DBusConnection *connection, + const char *service, const char *path, const char *interface, + const char *method, connmanctl_dbus_method_return_func_t cb, + void *user_data, connmanctl_dbus_append_func_t append_func, + void *append_data) { DBusMessage *message; - va_list args; + DBusMessageIter iter; - message = dbus_message_new_method_call("net.connman", path, - interface, method); + message = dbus_message_new_method_call(service, path, interface, + method); - if (message == NULL) + if (!message) return -ENOMEM; - va_start(args, arg1); - dbus_message_append_args_valist(message, arg1, args); - va_end(args); + if (append_func) { + dbus_message_iter_init_append(message, &iter); + append_func(&iter, append_data); + } return send_method_call(connection, message, cb, user_data); } @@ -248,7 +276,7 @@ int __connmanctl_dbus_set_property(DBusConnection *connection, message = dbus_message_new_method_call("net.connman", path, interface, "SetProperty"); - if (message == NULL) + if (!message) return -ENOMEM; dbus_message_iter_init_append(message, &iter); @@ -261,6 +289,22 @@ int __connmanctl_dbus_set_property(DBusConnection *connection, return send_method_call(connection, message, cb, user_data); } +void __connmanctl_dbus_append_dict(DBusMessageIter *iter, + connmanctl_dbus_append_func_t append_fn, void *append_data) +{ + DBusMessageIter dict; + + dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY, + DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING + DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING + DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict); + + if (append_fn) + append_fn(&dict, append_data); + + dbus_message_iter_close_container(iter, &dict); +} + void __connmanctl_dbus_append_dict_entry(DBusMessageIter *iter, const char *property, int type, void *value) { @@ -287,7 +331,7 @@ int __connmanctl_dbus_set_property_dict(DBusConnection *connection, message = dbus_message_new_method_call("net.connman", path, interface, "SetProperty"); - if (message == NULL) + if (!message) return -ENOMEM; dbus_message_iter_init_append(message, &iter); @@ -315,6 +359,50 @@ int __connmanctl_dbus_set_property_dict(DBusConnection *connection, return send_method_call(connection, message, cb, user_data); } +#if defined TIZEN_EXT_WIFI_MESH +int __connmanctl_dbus_mesh_dict(DBusConnection *connection, + const char *path, const char *interface, + connmanctl_dbus_method_return_func_t cb, void *user_data, + const char *property, int type, + connmanctl_dbus_append_func_t append_fn, + void *append_user_data) +{ + DBusMessage *message; + DBusMessageIter iter, variant, dict; + + message = dbus_message_new_method_call(CONNMAN_SERVICE, path, + interface, "MeshCommands"); + + if (!message) + return -ENOMEM; + + dbus_message_iter_init_append(message, &iter); + dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &property); + dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT, + DBUS_TYPE_ARRAY_AS_STRING + DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING + DBUS_TYPE_STRING_AS_STRING + DBUS_TYPE_VARIANT_AS_STRING + DBUS_DICT_ENTRY_END_CHAR_AS_STRING, + &variant); + + dbus_message_iter_open_container(&variant, DBUS_TYPE_ARRAY, + DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING + DBUS_TYPE_STRING_AS_STRING + DBUS_TYPE_VARIANT_AS_STRING + DBUS_DICT_ENTRY_END_CHAR_AS_STRING, + &dict); + + if (append_fn) + append_fn(&dict, append_user_data); + + dbus_message_iter_close_container(&variant, &dict); + dbus_message_iter_close_container(&iter, &variant); + + return send_method_call(connection, message, cb, user_data); +} +#endif + static void append_variant_array(DBusMessageIter *iter, const char *property, connmanctl_dbus_append_func_t append_fn, void *append_user_data) @@ -367,7 +455,54 @@ int __connmanctl_dbus_set_property_array(DBusConnection *connection, message = dbus_message_new_method_call("net.connman", path, interface, "SetProperty"); - if (message == NULL) + if (!message) + return -ENOMEM; + + dbus_message_iter_init_append(message, &iter); + + append_variant_array(&iter, property, append_fn, append_user_data); + + return send_method_call(connection, message, cb, user_data); +} + +int __connmanctl_dbus_session_change(DBusConnection *connection, + const char *session_path, + connmanctl_dbus_method_return_func_t cb, void * user_data, + const char *property, int type, void *value) +{ + DBusMessage *message; + DBusMessageIter iter; + + message = dbus_message_new_method_call("net.connman", session_path, + "net.connman.Session", "Change"); + + if (!message) + return -ENOMEM; + + dbus_message_iter_init_append(message, &iter); + + if (append_variant(&iter, property, type, value) < 0) { + dbus_message_unref(message); + return -EINVAL; + } + + return send_method_call(connection, message, cb, user_data); +} + +int __connmanctl_dbus_session_change_array(DBusConnection *connection, + const char *session_path, + connmanctl_dbus_method_return_func_t cb, void *user_data, + const char *property, + connmanctl_dbus_append_func_t append_fn, + void *append_user_data) +{ + DBusMessage *message; + DBusMessageIter iter; + + message = dbus_message_new_method_call("net.connman", session_path, + "net.connman.Session", "Change"); + + if (!message) return -ENOMEM; dbus_message_iter_init_append(message, &iter);