Allow external creation of input message for dbus_call()

This commit is contained in:
Nedko Arnaudov 2009-09-05 19:19:55 +03:00
parent 9290a15648
commit 9ce6f0a4e4
1 changed files with 37 additions and 27 deletions

View File

@ -296,42 +296,49 @@ dbus_call(
ret = false; ret = false;
va_start(ap, input_signature); va_start(ap, input_signature);
if (!dbus_signature_validate(input_signature, NULL)) if (input_signature != NULL)
{ {
lash_error("input signature '%s' is invalid", input_signature); if (!dbus_signature_validate(input_signature, NULL))
goto fail;
}
dbus_signature_iter_init(&sig_iter, input_signature);
request_ptr = dbus_message_new_method_call(service, object, iface, method);
if (request_ptr == NULL)
{
lash_error("dbus_message_new_method_call() failed.");
goto fail;
}
dbus_message_iter_init_append(request_ptr, &iter);
while (*input_signature != '\0')
{
type = dbus_signature_iter_get_current_type(&sig_iter);
if (!dbus_type_is_basic(type))
{ {
lash_error("non-basic input parameter '%c' (%d)", *input_signature, type); lash_error("input signature '%s' is invalid", input_signature);
goto fail; goto fail;
} }
parameter_ptr = va_arg(ap, void *); dbus_signature_iter_init(&sig_iter, input_signature);
if (!dbus_message_iter_append_basic(&iter, type, parameter_ptr)) request_ptr = dbus_message_new_method_call(service, object, iface, method);
if (request_ptr == NULL)
{ {
lash_error("dbus_message_iter_append_basic() failed."); lash_error("dbus_message_new_method_call() failed.");
goto fail; goto fail;
} }
dbus_signature_iter_next(&sig_iter); dbus_message_iter_init_append(request_ptr, &iter);
input_signature++;
while (*input_signature != '\0')
{
type = dbus_signature_iter_get_current_type(&sig_iter);
if (!dbus_type_is_basic(type))
{
lash_error("non-basic input parameter '%c' (%d)", *input_signature, type);
goto fail;
}
parameter_ptr = va_arg(ap, void *);
if (!dbus_message_iter_append_basic(&iter, type, parameter_ptr))
{
lash_error("dbus_message_iter_append_basic() failed.");
goto fail;
}
dbus_signature_iter_next(&sig_iter);
input_signature++;
}
}
else
{
request_ptr = va_arg(ap, DBusMessage *);
} }
output_signature = va_arg(ap, const char *); output_signature = va_arg(ap, const char *);
@ -342,7 +349,10 @@ dbus_call(
DBUS_CALL_DEFAULT_TIMEOUT, DBUS_CALL_DEFAULT_TIMEOUT,
&g_dbus_error); &g_dbus_error);
dbus_message_unref(request_ptr); if (input_signature != NULL)
{
dbus_message_unref(request_ptr);
}
if (reply_ptr == NULL) if (reply_ptr == NULL)
{ {