26 #include "dbus-internals.h"
27 #include "dbus-marshal-recursive.h"
28 #include "dbus-marshal-validate.h"
29 #include "dbus-marshal-byteswap.h"
30 #include "dbus-marshal-header.h"
31 #include "dbus-signature.h"
32 #include "dbus-message-private.h"
33 #include "dbus-object-tree.h"
34 #include "dbus-memory.h"
35 #include "dbus-list.h"
36 #include "dbus-threads-internal.h"
37 #ifdef HAVE_UNIX_FD_PASSING
38 #include "dbus-sysdeps-unix.h"
43 #define _DBUS_TYPE_IS_STRINGLIKE(type) \
44 (type == DBUS_TYPE_STRING || type == DBUS_TYPE_SIGNATURE || \
45 type == DBUS_TYPE_OBJECT_PATH)
47 static void dbus_message_finalize (
DBusMessage *message);
59 #ifdef DBUS_ENABLE_EMBEDDED_TESTS
61 _dbus_enable_message_cache (
void)
63 static int enabled = -1;
78 _dbus_warn (
"DBUS_MESSAGE_CACHE should be 0 or 1 if set, not '%s'",
87 # define _dbus_enable_message_cache() (TRUE)
90 #ifndef _dbus_message_trace_ref
97 static int enabled = -1;
99 _dbus_trace_ref (
"DBusMessage", message, old_refcount, new_refcount, why,
100 "DBUS_MESSAGE_TRACE", &enabled);
113 DBUS_MESSAGE_ITER_TYPE_READER = 3,
114 DBUS_MESSAGE_ITER_TYPE_WRITER = 7
152 *type_str_p = &_dbus_empty_signature_str;
171 if (byte_order == DBUS_COMPILER_BYTE_ORDER)
174 _dbus_verbose (
"Swapping message into compiler byte order\n");
176 get_const_signature (&message->
header, &type_str, &type_pos);
180 DBUS_COMPILER_BYTE_ORDER,
185 DBUS_COMPILER_BYTE_ORDER);
194 #define ensure_byte_order(message) _dbus_message_byteswap (message)
214 *body = &message->
body;
232 #ifdef HAVE_UNIX_FD_PASSING
233 *fds = message->unix_fds;
234 *n_fds = message->n_unix_fds;
256 _dbus_return_if_fail (message !=
NULL);
257 _dbus_return_if_fail (!message->
locked);
294 #ifdef HAVE_UNIX_FD_PASSING
295 message->unix_fd_counter_delta = message->n_unix_fds;
299 _dbus_verbose (
"message has size %ld\n",
308 #ifdef HAVE_UNIX_FD_PASSING
364 #ifdef HAVE_UNIX_FD_PASSING
440 const char *signature)
442 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
443 _dbus_return_val_if_fail (!message->
locked,
FALSE);
444 _dbus_return_val_if_fail (signature ==
NULL ||
445 _dbus_check_is_valid_signature (signature));
450 return set_or_delete_string_field (message,
504 #define MAX_MESSAGE_SIZE_TO_CACHE 10 * _DBUS_ONE_KILOBYTE
507 #define MAX_MESSAGE_CACHE_SIZE 5
511 static int message_cache_count = 0;
515 dbus_message_cache_shutdown (
void *data)
521 "before registering a shutdown function");
526 if (message_cache[i])
527 dbus_message_finalize (message_cache[i]);
532 message_cache_count = 0;
533 message_cache_shutdown_registered =
FALSE;
546 dbus_message_get_cached (
void)
562 if (message_cache_count == 0)
577 if (message_cache[i])
579 message = message_cache[i];
580 message_cache[i] =
NULL;
581 message_cache_count -= 1;
599 #ifdef HAVE_UNIX_FD_PASSING
601 close_unix_fds(
int *fds,
unsigned *n_fds)
611 for (i = 0; i < *n_fds; i++)
627 free_counter (
void *element,
634 #ifdef HAVE_UNIX_FD_PASSING
648 dbus_message_cache_or_finalize (
DBusMessage *message)
661 free_counter, message);
664 #ifdef HAVE_UNIX_FD_PASSING
665 close_unix_fds(message->unix_fds, &message->n_unix_fds);
675 "the first time we constructed a message");
678 if (!message_cache_shutdown_registered)
688 message_cache[i] =
NULL;
692 message_cache_shutdown_registered =
TRUE;
697 if (!_dbus_enable_message_cache ())
710 while (message_cache[i] !=
NULL)
716 message_cache[i] = message;
717 message_cache_count += 1;
719 #ifndef DBUS_DISABLE_CHECKS
729 dbus_message_finalize (message);
732 #if defined(DBUS_ENABLE_CHECKS) || defined(DBUS_ENABLE_ASSERT)
746 if (iter->
iter_type == DBUS_MESSAGE_ITER_TYPE_READER)
756 else if (iter->
iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER)
774 _dbus_warn_check_failed (
"dbus message iterator invalid because the message has been modified (or perhaps the iterator is just uninitialized)\n");
801 int spec_type, msg_type, i, j;
809 spec_type = first_arg_type;
815 DBUS_VA_COPY (copy_args, var_args);
821 if (msg_type != spec_type)
824 "Argument %d is specified to be of type \"%s\", but "
825 "is actually of type \"%s\"\n", i,
834 #ifdef HAVE_UNIX_FD_PASSING
838 pfd = va_arg (var_args,
int*);
846 "Message refers to file descriptor at index %i,"
847 "but has only %i descriptors attached.\n",
859 "Platform does not support file desciptor passing.\n");
877 int spec_element_type;
882 spec_element_type = va_arg (var_args,
int);
885 if (spec_element_type != element_type)
888 "Argument %d is specified to be an array of \"%s\", but "
889 "is actually an array of \"%s\"\n",
901 n_elements_p = va_arg (var_args,
int*);
909 (
void *) ptr, n_elements_p);
911 else if (_DBUS_TYPE_IS_STRINGLIKE (spec_element_type))
917 str_array_p = va_arg (var_args,
char***);
918 n_elements_p = va_arg (var_args,
int*);
933 str_array =
dbus_new0 (
char*, n_elements + 1);
934 if (str_array ==
NULL)
936 _DBUS_SET_OOM (error);
944 while (j < n_elements)
951 if (str_array[j] ==
NULL)
954 _DBUS_SET_OOM (error);
968 *str_array_p = str_array;
969 *n_elements_p = n_elements;
971 #ifndef DBUS_DISABLE_CHECKS
974 _dbus_warn (
"you can't read arrays of container types (struct, variant, array) with %s for now\n",
975 _DBUS_FUNCTION_NAME);
980 #ifndef DBUS_DISABLE_CHECKS
983 _dbus_warn (
"you can only read arrays and basic types with %s for now\n",
984 _DBUS_FUNCTION_NAME);
992 spec_type = va_arg (var_args,
int);
996 "Message has only %d arguments, but more were expected", i);
1010 spec_type = first_arg_type;
1017 #ifdef HAVE_UNIX_FD_PASSING
1020 pfd = va_arg (copy_args,
int *);
1036 int spec_element_type;
1038 spec_element_type = va_arg (copy_args,
int);
1043 va_arg (copy_args,
int *);
1045 else if (_DBUS_TYPE_IS_STRINGLIKE (spec_element_type))
1047 char ***str_array_p;
1049 str_array_p = va_arg (copy_args,
char ***);
1051 va_arg (copy_args,
int *);
1054 *str_array_p =
NULL;
1058 spec_type = va_arg (copy_args,
int);
1128 _dbus_return_val_if_fail (message !=
NULL, 0);
1145 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
1146 _dbus_return_val_if_fail (!message->
locked,
FALSE);
1147 _dbus_return_val_if_fail (reply_serial != 0,
FALSE);
1166 _dbus_return_val_if_fail (message !=
NULL, 0);
1186 free_counter, message);
1192 #ifdef HAVE_UNIX_FD_PASSING
1193 close_unix_fds(message->unix_fds, &message->n_unix_fds);
1203 dbus_message_new_empty_header (
void)
1208 message = dbus_message_get_cached ();
1210 if (message !=
NULL)
1218 if (message ==
NULL)
1220 #ifndef DBUS_DISABLE_CHECKS
1224 #ifdef HAVE_UNIX_FD_PASSING
1225 message->unix_fds =
NULL;
1226 message->n_unix_fds_allocated = 0;
1232 _dbus_message_trace_ref (message, 0, 1,
"new_empty_header");
1235 #ifndef DBUS_DISABLE_CHECKS
1242 #ifdef HAVE_UNIX_FD_PASSING
1243 message->n_unix_fds = 0;
1244 message->n_unix_fds_allocated = 0;
1245 message->unix_fd_counter_delta = 0;
1294 message = dbus_message_new_empty_header ();
1295 if (message ==
NULL)
1299 DBUS_COMPILER_BYTE_ORDER,
1339 _dbus_return_val_if_fail (path !=
NULL,
NULL);
1340 _dbus_return_val_if_fail (method !=
NULL,
NULL);
1341 _dbus_return_val_if_fail (destination ==
NULL ||
1342 _dbus_check_is_valid_bus_name (destination),
NULL);
1343 _dbus_return_val_if_fail (_dbus_check_is_valid_path (path),
NULL);
1344 _dbus_return_val_if_fail (iface ==
NULL ||
1345 _dbus_check_is_valid_interface (iface),
NULL);
1346 _dbus_return_val_if_fail (_dbus_check_is_valid_member (method),
NULL);
1348 message = dbus_message_new_empty_header ();
1349 if (message ==
NULL)
1353 DBUS_COMPILER_BYTE_ORDER,
1355 destination, path, iface, method,
NULL))
1377 _dbus_return_val_if_fail (method_call !=
NULL,
NULL);
1383 message = dbus_message_new_empty_header ();
1384 if (message ==
NULL)
1388 DBUS_COMPILER_BYTE_ORDER,
1429 _dbus_return_val_if_fail (path !=
NULL,
NULL);
1430 _dbus_return_val_if_fail (iface !=
NULL,
NULL);
1431 _dbus_return_val_if_fail (name !=
NULL,
NULL);
1432 _dbus_return_val_if_fail (_dbus_check_is_valid_path (path),
NULL);
1433 _dbus_return_val_if_fail (_dbus_check_is_valid_interface (iface),
NULL);
1434 _dbus_return_val_if_fail (_dbus_check_is_valid_member (name),
NULL);
1436 message = dbus_message_new_empty_header ();
1437 if (message ==
NULL)
1441 DBUS_COMPILER_BYTE_ORDER,
1470 const char *error_name,
1471 const char *error_message)
1477 _dbus_return_val_if_fail (reply_to !=
NULL,
NULL);
1478 _dbus_return_val_if_fail (error_name !=
NULL,
NULL);
1479 _dbus_return_val_if_fail (_dbus_check_is_valid_error_name (error_name),
NULL);
1487 message = dbus_message_new_empty_header ();
1488 if (message ==
NULL)
1492 DBUS_COMPILER_BYTE_ORDER,
1509 if (error_message !=
NULL)
1542 const char *error_name,
1543 const char *error_format,
1550 _dbus_return_val_if_fail (reply_to !=
NULL,
NULL);
1551 _dbus_return_val_if_fail (error_name !=
NULL,
NULL);
1552 _dbus_return_val_if_fail (_dbus_check_is_valid_error_name (error_name),
NULL);
1557 va_start (args, error_format);
1590 _dbus_return_val_if_fail (message !=
NULL,
NULL);
1599 #ifndef DBUS_DISABLE_CHECKS
1621 #ifdef HAVE_UNIX_FD_PASSING
1622 retval->unix_fds =
dbus_new(
int, message->n_unix_fds);
1623 if (retval->unix_fds ==
NULL && message->n_unix_fds > 0)
1626 retval->n_unix_fds_allocated = message->n_unix_fds;
1628 for (retval->n_unix_fds = 0;
1629 retval->n_unix_fds < message->n_unix_fds;
1630 retval->n_unix_fds++)
1632 retval->unix_fds[retval->n_unix_fds] =
_dbus_dup(message->unix_fds[retval->n_unix_fds],
NULL);
1634 if (retval->unix_fds[retval->n_unix_fds] < 0)
1640 _dbus_message_trace_ref (retval, 0, 1,
"copy");
1647 #ifdef HAVE_UNIX_FD_PASSING
1648 close_unix_fds(retval->unix_fds, &retval->n_unix_fds);
1670 _dbus_return_val_if_fail (message !=
NULL,
NULL);
1676 _dbus_message_trace_ref (message, old_refcount, old_refcount + 1,
"ref");
1693 _dbus_return_if_fail (message !=
NULL);
1695 _dbus_return_if_fail (!message->
in_cache);
1701 _dbus_message_trace_ref (message, old_refcount, old_refcount - 1,
"unref");
1703 if (old_refcount == 1)
1706 dbus_message_cache_or_finalize (message);
1798 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
1800 va_start (var_args, first_arg_type);
1830 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
1832 type = first_arg_type;
1854 element_type = va_arg (var_args,
int);
1856 buf[0] = element_type;
1871 n_elements = va_arg (var_args,
int);
1881 else if (_DBUS_TYPE_IS_STRINGLIKE (element_type))
1883 const char ***value_p;
1888 value_p = va_arg (var_args,
const char***);
1889 n_elements = va_arg (var_args,
int);
1894 while (i < n_elements)
1907 _dbus_warn (
"arrays of %s can't be appended with %s for now\n",
1909 _DBUS_FUNCTION_NAME);
1916 #ifndef DBUS_DISABLE_CHECKS
1919 _dbus_warn (
"type %s isn't supported yet in %s\n",
1925 type = va_arg (var_args,
int);
1987 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
1988 _dbus_return_val_if_error_is_set (error,
FALSE);
1990 va_start (var_args, first_arg_type);
2015 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
2016 _dbus_return_val_if_error_is_set (error,
FALSE);
2023 _dbus_message_iter_init_common (
DBusMessage *message,
2070 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
2071 _dbus_return_val_if_fail (iter !=
NULL,
FALSE);
2073 get_const_signature (&message->
header, &type_str, &type_pos);
2075 _dbus_message_iter_init_common (message, real,
2076 DBUS_MESSAGE_ITER_TYPE_READER);
2098 _dbus_return_val_if_fail (_dbus_message_iter_check (real),
FALSE);
2099 _dbus_return_val_if_fail (real->
iter_type == DBUS_MESSAGE_ITER_TYPE_READER,
FALSE);
2117 _dbus_return_val_if_fail (_dbus_message_iter_check (real),
FALSE);
2118 _dbus_return_val_if_fail (real->
iter_type == DBUS_MESSAGE_ITER_TYPE_READER,
FALSE);
2143 _dbus_return_val_if_fail (real->
iter_type == DBUS_MESSAGE_ITER_TYPE_READER,
FALSE);
2200 _dbus_return_if_fail (_dbus_message_iter_check (real));
2201 _dbus_return_if_fail (sub !=
NULL);
2227 _dbus_return_val_if_fail (_dbus_message_iter_check (real),
NULL);
2297 _dbus_return_if_fail (_dbus_message_iter_check (real));
2298 _dbus_return_if_fail (value !=
NULL);
2302 #ifdef HAVE_UNIX_FD_PASSING
2310 *((
int*) value) = -1;
2316 *((
int*) value) = -1;
2349 _dbus_return_val_if_fail (_dbus_message_iter_check (real), 0);
2395 #ifndef DBUS_DISABLE_CHECKS
2398 _dbus_return_if_fail (_dbus_message_iter_check (real));
2399 _dbus_return_if_fail (value !=
NULL);
2425 _dbus_return_if_fail (message !=
NULL);
2426 _dbus_return_if_fail (iter !=
NULL);
2428 _dbus_message_iter_init_common (message, real,
2429 DBUS_MESSAGE_ITER_TYPE_WRITER);
2454 int current_sig_pos;
2471 ¤t_sig, ¤t_sig_pos))
2479 current_sig_pos += 1;
2524 const char *v_STRING;
2584 #ifndef DBUS_DISABLE_CHECKS
2588 if (!_dbus_message_iter_check (iter))
2601 #ifdef HAVE_UNIX_FD_PASSING
2611 if (m->n_unix_fds + n > m->n_unix_fds_allocated)
2617 k = (m->n_unix_fds + n) * 2;
2628 m->n_unix_fds_allocated = k;
2631 return m->unix_fds + m->n_unix_fds;
2662 _dbus_return_val_if_fail (_dbus_message_iter_append_check (real),
FALSE);
2663 _dbus_return_val_if_fail (real->
iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER,
FALSE);
2665 _dbus_return_val_if_fail (value !=
NULL,
FALSE);
2667 #ifndef DBUS_DISABLE_CHECKS
2670 const char *
const *string_p;
2675 _dbus_return_val_if_fail (_dbus_check_is_valid_utf8 (*string_p),
FALSE);
2680 _dbus_return_val_if_fail (_dbus_check_is_valid_path (*string_p),
FALSE);
2685 _dbus_return_val_if_fail (_dbus_check_is_valid_signature (*string_p),
FALSE);
2690 _dbus_return_val_if_fail (*bool_p == 0 || *bool_p == 1,
FALSE);
2700 if (!_dbus_message_iter_open_signature (real))
2705 #ifdef HAVE_UNIX_FD_PASSING
2710 if (!(fds = expand_fd_array(real->
message, 1)))
2717 u = real->
message->n_unix_fds;
2725 real->
message->n_unix_fds += 1;
2748 if (!_dbus_message_iter_close_signature (real))
2798 _dbus_return_val_if_fail (_dbus_message_iter_append_check (real),
FALSE);
2799 _dbus_return_val_if_fail (real->
iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER,
FALSE);
2802 _dbus_return_val_if_fail (value !=
NULL,
FALSE);
2803 _dbus_return_val_if_fail (n_elements >= 0,
FALSE);
2804 _dbus_return_val_if_fail (n_elements <=
2808 #ifndef DBUS_DISABLE_CHECKS
2814 for (i = 0; i < n_elements; i++)
2816 _dbus_return_val_if_fail ((*bools)[i] == 0 || (*bools)[i] == 1,
FALSE);
2850 const char *contained_signature,
2857 _dbus_return_val_if_fail (_dbus_message_iter_append_check (real),
FALSE);
2858 _dbus_return_val_if_fail (real->
iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER,
FALSE);
2860 _dbus_return_val_if_fail (sub !=
NULL,
FALSE);
2862 contained_signature ==
NULL) ||
2864 contained_signature ==
NULL) ||
2866 contained_signature !=
NULL) ||
2875 (contained_signature ==
NULL ||
2876 _dbus_check_is_valid_signature (contained_signature)),
2879 if (!_dbus_message_iter_open_signature (real))
2884 if (contained_signature !=
NULL)
2924 _dbus_return_val_if_fail (_dbus_message_iter_append_check (real),
FALSE);
2925 _dbus_return_val_if_fail (real->
iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER,
FALSE);
2926 _dbus_return_val_if_fail (_dbus_message_iter_append_check (real_sub),
FALSE);
2927 _dbus_return_val_if_fail (real_sub->
iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER,
FALSE);
2932 if (!_dbus_message_iter_close_signature (real))
2954 #ifndef DBUS_DISABLE_CHECKS
2957 _dbus_return_if_fail (_dbus_message_iter_append_check (real));
2958 _dbus_return_if_fail (real->
iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER);
2959 _dbus_return_if_fail (_dbus_message_iter_append_check (real_sub));
2960 _dbus_return_if_fail (real_sub->
iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER);
2963 _dbus_message_iter_abandon_signature (real);
2986 _dbus_return_if_fail (message !=
NULL);
2987 _dbus_return_if_fail (!message->
locked);
3004 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3028 _dbus_return_if_fail (message !=
NULL);
3029 _dbus_return_if_fail (!message->
locked);
3046 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3067 const char *object_path)
3069 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3070 _dbus_return_val_if_fail (!message->
locked,
FALSE);
3071 _dbus_return_val_if_fail (object_path ==
NULL ||
3072 _dbus_check_is_valid_path (object_path),
3075 return set_or_delete_string_field (message,
3099 _dbus_return_val_if_fail (message !=
NULL,
NULL);
3122 const char *msg_path;
3125 if (msg_path ==
NULL)
3136 if (strcmp (msg_path, path) == 0)
3168 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3169 _dbus_return_val_if_fail (path !=
NULL,
FALSE);
3200 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3201 _dbus_return_val_if_fail (!message->
locked,
FALSE);
3202 _dbus_return_val_if_fail (iface ==
NULL ||
3203 _dbus_check_is_valid_interface (iface),
3206 return set_or_delete_string_field (message,
3230 _dbus_return_val_if_fail (message !=
NULL,
NULL);
3251 const char *msg_interface;
3254 if (msg_interface ==
NULL)
3265 if (strcmp (msg_interface, iface) == 0)
3288 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3289 _dbus_return_val_if_fail (!message->
locked,
FALSE);
3290 _dbus_return_val_if_fail (member ==
NULL ||
3291 _dbus_check_is_valid_member (member),
3294 return set_or_delete_string_field (message,
3316 _dbus_return_val_if_fail (message !=
NULL,
NULL);
3337 const char *msg_member;
3340 if (msg_member ==
NULL)
3351 if (strcmp (msg_member, member) == 0)
3371 const char *error_name)
3373 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3374 _dbus_return_val_if_fail (!message->
locked,
FALSE);
3375 _dbus_return_val_if_fail (error_name ==
NULL ||
3376 _dbus_check_is_valid_error_name (error_name),
3379 return set_or_delete_string_field (message,
3400 _dbus_return_val_if_fail (message !=
NULL,
NULL);
3425 const char *destination)
3427 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3428 _dbus_return_val_if_fail (!message->
locked,
FALSE);
3429 _dbus_return_val_if_fail (destination ==
NULL ||
3430 _dbus_check_is_valid_bus_name (destination),
3433 return set_or_delete_string_field (message,
3453 _dbus_return_val_if_fail (message !=
NULL,
NULL);
3481 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3482 _dbus_return_val_if_fail (!message->
locked,
FALSE);
3483 _dbus_return_val_if_fail (sender ==
NULL ||
3484 _dbus_check_is_valid_bus_name (sender),
3487 return set_or_delete_string_field (message,
3513 _dbus_return_val_if_fail (message !=
NULL,
NULL);
3547 _dbus_return_val_if_fail (message !=
NULL,
NULL);
3549 get_const_signature (&message->
header, &type_str, &type_pos);
3555 _dbus_message_has_type_interface_member (
DBusMessage *message,
3575 if (n && strcmp (n, member) == 0)
3579 if (n ==
NULL || strcmp (n, iface) == 0)
3605 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3606 _dbus_return_val_if_fail (iface !=
NULL,
FALSE);
3607 _dbus_return_val_if_fail (method !=
NULL,
FALSE);
3612 return _dbus_message_has_type_interface_member (message,
3631 const char *signal_name)
3633 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3634 _dbus_return_val_if_fail (iface !=
NULL,
FALSE);
3635 _dbus_return_val_if_fail (signal_name !=
NULL,
FALSE);
3640 return _dbus_message_has_type_interface_member (message,
3642 iface, signal_name);
3657 const char *error_name)
3661 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3662 _dbus_return_val_if_fail (error_name !=
NULL,
FALSE);
3672 if (n && strcmp (n, error_name) == 0)
3694 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3695 _dbus_return_val_if_fail (name !=
NULL,
FALSE);
3702 if (s && strcmp (s, name) == 0)
3729 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3730 _dbus_return_val_if_fail (name !=
NULL,
FALSE);
3737 if (s && strcmp (s, name) == 0)
3754 const char *signature)
3758 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3759 _dbus_return_val_if_fail (signature !=
NULL,
FALSE);
3766 if (s && strcmp (s, signature) == 0)
3800 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3801 _dbus_return_val_if_error_is_set (error,
FALSE);
3812 str ?
"%s" :
NULL, str);
3826 #ifdef HAVE_UNIX_FD_PASSING
3829 return message->n_unix_fds > 0;
3853 #define INITIAL_LOADER_DATA_LEN 32
3894 #ifdef HAVE_UNIX_FD_PASSING
3895 loader->unix_fds =
NULL;
3896 loader->n_unix_fds = loader->n_unix_fds_allocated = 0;
3897 loader->unix_fds_outstanding =
FALSE;
3929 #ifdef HAVE_UNIX_FD_PASSING
3930 close_unix_fds(loader->unix_fds, &loader->n_unix_fds);
3966 *buffer = &loader->
data;
4003 unsigned *max_n_fds)
4005 #ifdef HAVE_UNIX_FD_PASSING
4024 loader->unix_fds = a;
4028 *fds = loader->unix_fds + loader->n_unix_fds;
4029 *max_n_fds = loader->n_unix_fds_allocated - loader->n_unix_fds;
4031 loader->unix_fds_outstanding =
TRUE;
4054 #ifdef HAVE_UNIX_FD_PASSING
4056 _dbus_assert(loader->unix_fds + loader->n_unix_fds == fds);
4057 _dbus_assert(loader->n_unix_fds + n_fds <= loader->n_unix_fds_allocated);
4059 loader->n_unix_fds += n_fds;
4060 loader->unix_fds_outstanding =
FALSE;
4096 int fields_array_len,
4107 mode = DBUS_VALIDATION_MODE_DATA_IS_UNTRUSTED;
4129 _dbus_verbose (
"Failed to load header for new message code %d\n", validity);
4148 if (mode != DBUS_VALIDATION_MODE_WE_TRUST_THIS_DATA_ABSOLUTELY)
4150 get_const_signature (&message->
header, &type_str, &type_pos);
4164 _dbus_verbose (
"Failed to validate message body code %d\n", validity);
4179 #ifdef HAVE_UNIX_FD_PASSING
4181 if (n_unix_fds > loader->n_unix_fds)
4183 _dbus_verbose(
"Message contains references to more unix fds than were sent %u != %u\n",
4184 n_unix_fds, loader->n_unix_fds);
4197 message->unix_fds =
_dbus_memdup(loader->unix_fds, n_unix_fds *
sizeof(message->unix_fds[0]));
4198 if (message->unix_fds ==
NULL)
4200 _dbus_verbose (
"Failed to allocate file descriptor array\n");
4205 message->n_unix_fds_allocated = message->n_unix_fds = n_unix_fds;
4206 loader->n_unix_fds -= n_unix_fds;
4207 memmove(loader->unix_fds + n_unix_fds, loader->unix_fds, loader->n_unix_fds);
4210 message->unix_fds =
NULL;
4216 _dbus_verbose (
"Hmm, message claims to come with file descriptors "
4217 "but that's not supported on our platform, disconnecting.\n");
4230 _dbus_verbose (
"Failed to append new message to loader queue\n");
4237 (header_len + body_len));
4241 _dbus_verbose (
"Failed to move body into new message\n");
4254 _dbus_verbose (
"Loaded message %p\n", message);
4301 int byte_order, fields_array_len, header_len, body_len;
4316 message = dbus_message_new_empty_header ();
4317 if (message ==
NULL)
4320 if (!load_message (loader, message,
4321 byte_order, fields_array_len,
4322 header_len, body_len))
4336 _dbus_verbose (
"Initial peek at header says we don't have a whole message yet, or data broken with invalid code %d\n",
4451 _dbus_verbose (
"clamping requested max message size %ld to %d\n",
4482 _dbus_verbose (
"clamping requested max message unix_fds %ld to %d\n",
4539 _dbus_return_if_fail (*slot_p >= 0);
4567 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
4568 _dbus_return_val_if_fail (slot >= 0,
FALSE);
4572 slot, data, free_data_func,
4573 &old_free_func, &old_data);
4579 (* old_free_func) (old_data);
4599 _dbus_return_val_if_fail (message !=
NULL,
NULL);
4624 if (strcmp (type_str,
"method_call") == 0)
4626 if (strcmp (type_str,
"method_return") == 0)
4628 else if (strcmp (type_str,
"signal") == 0)
4630 else if (strcmp (type_str,
"error") == 0)
4655 return "method_call";
4657 return "method_return";
4681 char **marshalled_data_p,
4687 _dbus_return_val_if_fail (msg !=
NULL,
FALSE);
4688 _dbus_return_val_if_fail (marshalled_data_p !=
NULL,
FALSE);
4689 _dbus_return_val_if_fail (len_p !=
NULL,
FALSE);
4695 was_locked = msg->
locked;
4750 _dbus_return_val_if_fail (str !=
NULL,
NULL);
4782 _DBUS_SET_OOM (error);
4804 int byte_order, fields_array_len, header_len, body_len;
4818 &validity, &byte_order,
4828 _dbus_assert (have_message || (header_len + body_len) > len);
4829 (void) have_message;
4830 return header_len + body_len;