4 * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd.
6 * Licensed under the Apache License, Version 2.0 (the License);
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
29 /* -1 is a default timeout value, it's converted to 25*1000 internally. */
30 #define DBUS_REPLY_TIMEOUT (-1)
32 static int append_variant(DBusMessageIter *iter, const char *sig, char *param[])
39 struct dbus_byte *byte;
44 for (ch = (char*)sig, i = 0; *ch != '\0'; ++i, ++ch) {
47 int_type = atoi(param[i]);
48 dbus_message_iter_append_basic(iter, DBUS_TYPE_INT32, &int_type);
51 int_type = strtoul(param[i], NULL, 10);
52 dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT32, &int_type);
55 int64_type = atoll(param[i]);
56 dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT64, &int64_type);
59 dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, ¶m[i]);
65 dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE_AS_STRING, &arr);
66 byte = (struct dbus_byte*)param[i];
67 dbus_message_iter_append_fixed_array(&arr, DBUS_TYPE_BYTE, &(byte->data), byte->size);
68 dbus_message_iter_close_container(iter, &arr);
82 int dbus_method_sync(const char *dest, const char *path,
83 const char *interface, const char *method,
84 const char *sig, char *param[])
93 conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
95 _E("dbus_bus_get error");
99 msg = dbus_message_new_method_call(dest, path, interface, method);
101 _E("dbus_message_new_method_call(%s:%s-%s)",
102 path, interface, method);
106 dbus_message_iter_init_append(msg, &iter);
107 ret = append_variant(&iter, sig, param);
109 _E("append_variant error(%d) %s %s:%s-%s",
110 ret, dest, path, interface, method);
111 dbus_message_unref(msg);
115 dbus_error_init(&err);
117 reply = dbus_connection_send_with_reply_and_block(conn, msg, DBUS_REPLY_TIMEOUT, &err);
118 dbus_message_unref(msg);
120 _E("dbus_connection_send error(%s:%s) %s %s:%s-%s",
121 err.name, err.message, dest, path, interface, method);
122 dbus_error_free(&err);
126 ret = dbus_message_get_args(reply, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
127 dbus_message_unref(reply);
129 _E("no message : [%s:%s] %s %s:%s-%s",
130 err.name, err.message, dest, path, interface, method);
131 dbus_error_free(&err);