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 static void dbus_message_finalize (
DBusMessage *message);
64 DBUS_MESSAGE_ITER_TYPE_READER = 3,
65 DBUS_MESSAGE_ITER_TYPE_WRITER = 7
103 *type_str_p = &_dbus_empty_signature_str;
119 if (message->
byte_order == DBUS_COMPILER_BYTE_ORDER)
122 _dbus_verbose (
"Swapping message into compiler byte order\n");
124 get_const_signature (&message->
header, &type_str, &type_pos);
128 DBUS_COMPILER_BYTE_ORDER,
131 message->
byte_order = DBUS_COMPILER_BYTE_ORDER;
142 #define ensure_byte_order(message) \
143 if (message->byte_order != DBUS_COMPILER_BYTE_ORDER) \
144 _dbus_message_byteswap (message)
164 *body = &message->
body;
182 #ifdef HAVE_UNIX_FD_PASSING
183 *fds = message->unix_fds;
184 *n_fds = message->n_unix_fds;
206 _dbus_return_if_fail (message !=
NULL);
207 _dbus_return_if_fail (!message->
locked);
239 #ifdef HAVE_UNIX_FD_PASSING
240 message->unix_fd_counter_delta = message->n_unix_fds;
244 _dbus_verbose (
"message has size %ld\n",
253 #ifdef HAVE_UNIX_FD_PASSING
311 #ifdef HAVE_UNIX_FD_PASSING
386 const char *signature)
388 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
389 _dbus_return_val_if_fail (!message->
locked,
FALSE);
390 _dbus_return_val_if_fail (signature ==
NULL ||
391 _dbus_check_is_valid_signature (signature));
396 return set_or_delete_string_field (message,
450 #define MAX_MESSAGE_SIZE_TO_CACHE 10 * _DBUS_ONE_KILOBYTE
453 #define MAX_MESSAGE_CACHE_SIZE 5
457 static int message_cache_count = 0;
461 dbus_message_cache_shutdown (
void *data)
470 if (message_cache[i])
471 dbus_message_finalize (message_cache[i]);
476 message_cache_count = 0;
477 message_cache_shutdown_registered =
FALSE;
490 dbus_message_get_cached (
void)
501 if (message_cache_count == 0)
516 if (message_cache[i])
518 message = message_cache[i];
519 message_cache[i] =
NULL;
520 message_cache_count -= 1;
537 #ifdef HAVE_UNIX_FD_PASSING
539 close_unix_fds(
int *fds,
unsigned *n_fds)
549 for (i = 0; i < *n_fds; i++)
565 free_counter (
void *element,
572 #ifdef HAVE_UNIX_FD_PASSING
585 dbus_message_cache_or_finalize (
DBusMessage *message)
598 free_counter, message);
601 #ifdef HAVE_UNIX_FD_PASSING
602 close_unix_fds(message->unix_fds, &message->n_unix_fds);
609 if (!message_cache_shutdown_registered)
619 message_cache[i] =
NULL;
623 message_cache_shutdown_registered =
TRUE;
638 while (message_cache[i] !=
NULL)
644 message_cache[i] = message;
645 message_cache_count += 1;
647 #ifndef DBUS_DISABLE_CHECKS
657 dbus_message_finalize (message);
660 #ifndef DBUS_DISABLE_CHECKS
670 if (iter->
iter_type == DBUS_MESSAGE_ITER_TYPE_READER)
680 else if (iter->
iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER)
698 _dbus_warn_check_failed (
"dbus message iterator invalid because the message has been modified (or perhaps the iterator is just uninitialized)\n");
727 int spec_type, msg_type, i;
734 spec_type = first_arg_type;
741 if (msg_type != spec_type)
744 "Argument %d is specified to be of type \"%s\", but "
745 "is actually of type \"%s\"\n", i,
754 #ifdef HAVE_UNIX_FD_PASSING
758 pfd = va_arg (var_args,
int*);
766 "Message refers to file descriptor at index %i,"
767 "but has only %i descriptors attached.\n",
779 "Platform does not support file desciptor passing.\n");
797 int spec_element_type;
802 spec_element_type = va_arg (var_args,
int);
805 if (spec_element_type != element_type)
808 "Argument %d is specified to be an array of \"%s\", but "
809 "is actually an array of \"%s\"\n",
821 n_elements_p = va_arg (var_args,
int*);
829 (
void *) ptr, n_elements_p);
839 str_array_p = va_arg (var_args,
char***);
840 n_elements_p = va_arg (var_args,
int*);
855 str_array =
dbus_new0 (
char*, n_elements + 1);
856 if (str_array ==
NULL)
858 _DBUS_SET_OOM (error);
866 while (i < n_elements)
873 if (str_array[i] ==
NULL)
876 _DBUS_SET_OOM (error);
890 *str_array_p = str_array;
891 *n_elements_p = n_elements;
893 #ifndef DBUS_DISABLE_CHECKS
896 _dbus_warn (
"you can't read arrays of container types (struct, variant, array) with %s for now\n",
897 _DBUS_FUNCTION_NAME);
902 #ifndef DBUS_DISABLE_CHECKS
905 _dbus_warn (
"you can only read arrays and basic types with %s for now\n",
906 _DBUS_FUNCTION_NAME);
911 spec_type = va_arg (var_args,
int);
915 "Message has only %d arguments, but more were expected", i);
990 _dbus_return_val_if_fail (message !=
NULL, 0);
1007 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
1008 _dbus_return_val_if_fail (!message->
locked,
FALSE);
1009 _dbus_return_val_if_fail (reply_serial != 0,
FALSE);
1028 _dbus_return_val_if_fail (message !=
NULL, 0);
1048 free_counter, message);
1054 #ifdef HAVE_UNIX_FD_PASSING
1055 close_unix_fds(message->unix_fds, &message->n_unix_fds);
1065 dbus_message_new_empty_header (
void)
1070 message = dbus_message_get_cached ();
1072 if (message !=
NULL)
1080 if (message ==
NULL)
1082 #ifndef DBUS_DISABLE_CHECKS
1086 #ifdef HAVE_UNIX_FD_PASSING
1087 message->unix_fds =
NULL;
1088 message->n_unix_fds_allocated = 0;
1093 message->
byte_order = DBUS_COMPILER_BYTE_ORDER;
1095 #ifndef DBUS_DISABLE_CHECKS
1102 #ifdef HAVE_UNIX_FD_PASSING
1103 message->n_unix_fds = 0;
1104 message->n_unix_fds_allocated = 0;
1105 message->unix_fd_counter_delta = 0;
1154 message = dbus_message_new_empty_header ();
1155 if (message ==
NULL)
1193 const char *interface,
1198 _dbus_return_val_if_fail (path !=
NULL,
NULL);
1199 _dbus_return_val_if_fail (method !=
NULL,
NULL);
1200 _dbus_return_val_if_fail (destination ==
NULL ||
1201 _dbus_check_is_valid_bus_name (destination),
NULL);
1202 _dbus_return_val_if_fail (_dbus_check_is_valid_path (path),
NULL);
1203 _dbus_return_val_if_fail (interface ==
NULL ||
1204 _dbus_check_is_valid_interface (interface),
NULL);
1205 _dbus_return_val_if_fail (_dbus_check_is_valid_member (method),
NULL);
1207 message = dbus_message_new_empty_header ();
1208 if (message ==
NULL)
1213 destination, path, interface, method,
NULL))
1235 _dbus_return_val_if_fail (method_call !=
NULL,
NULL);
1241 message = dbus_message_new_empty_header ();
1242 if (message ==
NULL)
1281 const char *interface,
1286 _dbus_return_val_if_fail (path !=
NULL,
NULL);
1287 _dbus_return_val_if_fail (interface !=
NULL,
NULL);
1288 _dbus_return_val_if_fail (name !=
NULL,
NULL);
1289 _dbus_return_val_if_fail (_dbus_check_is_valid_path (path),
NULL);
1290 _dbus_return_val_if_fail (_dbus_check_is_valid_interface (interface),
NULL);
1291 _dbus_return_val_if_fail (_dbus_check_is_valid_member (name),
NULL);
1293 message = dbus_message_new_empty_header ();
1294 if (message ==
NULL)
1299 NULL, path, interface, name,
NULL))
1326 const char *error_name,
1327 const char *error_message)
1333 _dbus_return_val_if_fail (reply_to !=
NULL,
NULL);
1334 _dbus_return_val_if_fail (error_name !=
NULL,
NULL);
1335 _dbus_return_val_if_fail (_dbus_check_is_valid_error_name (error_name),
NULL);
1343 message = dbus_message_new_empty_header ();
1344 if (message ==
NULL)
1364 if (error_message !=
NULL)
1397 const char *error_name,
1398 const char *error_format,
1405 _dbus_return_val_if_fail (reply_to !=
NULL,
NULL);
1406 _dbus_return_val_if_fail (error_name !=
NULL,
NULL);
1407 _dbus_return_val_if_fail (_dbus_check_is_valid_error_name (error_name),
NULL);
1412 va_start (args, error_format);
1445 _dbus_return_val_if_fail (message !=
NULL,
NULL);
1454 #ifndef DBUS_DISABLE_CHECKS
1476 #ifdef HAVE_UNIX_FD_PASSING
1477 retval->unix_fds =
dbus_new(
int, message->n_unix_fds);
1478 if (retval->unix_fds ==
NULL && message->n_unix_fds > 0)
1481 retval->n_unix_fds_allocated = message->n_unix_fds;
1483 for (retval->n_unix_fds = 0;
1484 retval->n_unix_fds < message->n_unix_fds;
1485 retval->n_unix_fds++)
1487 retval->unix_fds[retval->n_unix_fds] =
_dbus_dup(message->unix_fds[retval->n_unix_fds],
NULL);
1489 if (retval->unix_fds[retval->n_unix_fds] < 0)
1501 #ifdef HAVE_UNIX_FD_PASSING
1502 close_unix_fds(retval->unix_fds, &retval->n_unix_fds);
1524 _dbus_return_val_if_fail (message !=
NULL,
NULL);
1546 _dbus_return_if_fail (message !=
NULL);
1548 _dbus_return_if_fail (!message->
in_cache);
1554 if (old_refcount == 1)
1557 dbus_message_cache_or_finalize (message);
1649 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
1651 va_start (var_args, first_arg_type);
1681 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
1683 type = first_arg_type;
1705 element_type = va_arg (var_args,
int);
1707 buf[0] = element_type;
1722 n_elements = va_arg (var_args,
int);
1736 const char ***value_p;
1741 value_p = va_arg (var_args,
const char***);
1742 n_elements = va_arg (var_args,
int);
1747 while (i < n_elements)
1760 _dbus_warn (
"arrays of %s can't be appended with %s for now\n",
1762 _DBUS_FUNCTION_NAME);
1769 #ifndef DBUS_DISABLE_CHECKS
1772 _dbus_warn (
"type %s isn't supported yet in %s\n",
1778 type = va_arg (var_args,
int);
1840 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
1841 _dbus_return_val_if_error_is_set (error,
FALSE);
1843 va_start (var_args, first_arg_type);
1868 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
1869 _dbus_return_val_if_error_is_set (error,
FALSE);
1876 _dbus_message_iter_init_common (
DBusMessage *message,
1923 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
1924 _dbus_return_val_if_fail (iter !=
NULL,
FALSE);
1926 get_const_signature (&message->
header, &type_str, &type_pos);
1928 _dbus_message_iter_init_common (message, real,
1929 DBUS_MESSAGE_ITER_TYPE_READER);
1951 _dbus_return_val_if_fail (_dbus_message_iter_check (real),
FALSE);
1952 _dbus_return_val_if_fail (real->
iter_type == DBUS_MESSAGE_ITER_TYPE_READER,
FALSE);
1970 _dbus_return_val_if_fail (_dbus_message_iter_check (real),
FALSE);
1971 _dbus_return_val_if_fail (real->
iter_type == DBUS_MESSAGE_ITER_TYPE_READER,
FALSE);
1996 _dbus_return_val_if_fail (real->
iter_type == DBUS_MESSAGE_ITER_TYPE_READER,
FALSE);
2053 _dbus_return_if_fail (_dbus_message_iter_check (real));
2054 _dbus_return_if_fail (sub !=
NULL);
2080 _dbus_return_val_if_fail (_dbus_message_iter_check (real),
NULL);
2150 _dbus_return_if_fail (_dbus_message_iter_check (real));
2151 _dbus_return_if_fail (value !=
NULL);
2155 #ifdef HAVE_UNIX_FD_PASSING
2163 *((
int*) value) = -1;
2169 *((
int*) value) = -1;
2202 _dbus_return_val_if_fail (_dbus_message_iter_check (real), 0);
2250 _dbus_return_if_fail (_dbus_message_iter_check (real));
2251 _dbus_return_if_fail (value !=
NULL);
2276 _dbus_return_if_fail (message !=
NULL);
2277 _dbus_return_if_fail (iter !=
NULL);
2279 _dbus_message_iter_init_common (message, real,
2280 DBUS_MESSAGE_ITER_TYPE_WRITER);
2305 int current_sig_pos;
2322 ¤t_sig, ¤t_sig_pos))
2330 current_sig_pos += 1;
2375 const char *v_STRING;
2435 #ifndef DBUS_DISABLE_CHECKS
2439 if (!_dbus_message_iter_check (iter))
2452 #ifdef HAVE_UNIX_FD_PASSING
2462 if (m->n_unix_fds + n > m->n_unix_fds_allocated)
2468 k = (m->n_unix_fds + n) * 2;
2479 m->n_unix_fds_allocated = k;
2482 return m->unix_fds + m->n_unix_fds;
2513 _dbus_return_val_if_fail (_dbus_message_iter_append_check (real),
FALSE);
2514 _dbus_return_val_if_fail (real->
iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER,
FALSE);
2516 _dbus_return_val_if_fail (value !=
NULL,
FALSE);
2518 #ifndef DBUS_DISABLE_CHECKS
2521 const char *
const *string_p;
2526 _dbus_return_val_if_fail (_dbus_check_is_valid_utf8 (*string_p),
FALSE);
2531 _dbus_return_val_if_fail (_dbus_check_is_valid_path (*string_p),
FALSE);
2536 _dbus_return_val_if_fail (_dbus_check_is_valid_signature (*string_p),
FALSE);
2541 _dbus_return_val_if_fail (*bool_p == 0 || *bool_p == 1,
FALSE);
2551 if (!_dbus_message_iter_open_signature (real))
2556 #ifdef HAVE_UNIX_FD_PASSING
2561 if (!(fds = expand_fd_array(real->
message, 1)))
2568 u = real->
message->n_unix_fds;
2576 real->
message->n_unix_fds += 1;
2599 if (!_dbus_message_iter_close_signature (real))
2649 _dbus_return_val_if_fail (_dbus_message_iter_append_check (real),
FALSE);
2650 _dbus_return_val_if_fail (real->
iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER,
FALSE);
2653 _dbus_return_val_if_fail (value !=
NULL,
FALSE);
2654 _dbus_return_val_if_fail (n_elements >= 0,
FALSE);
2655 _dbus_return_val_if_fail (n_elements <=
2659 #ifndef DBUS_DISABLE_CHECKS
2665 for (i = 0; i < n_elements; i++)
2667 _dbus_return_val_if_fail ((*bools)[i] == 0 || (*bools)[i] == 1,
FALSE);
2701 const char *contained_signature,
2708 _dbus_return_val_if_fail (_dbus_message_iter_append_check (real),
FALSE);
2709 _dbus_return_val_if_fail (real->
iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER,
FALSE);
2711 _dbus_return_val_if_fail (sub !=
NULL,
FALSE);
2713 contained_signature ==
NULL) ||
2715 contained_signature ==
NULL) ||
2717 contained_signature !=
NULL) ||
2726 (contained_signature ==
NULL ||
2727 _dbus_check_is_valid_signature (contained_signature)),
2730 if (!_dbus_message_iter_open_signature (real))
2735 if (contained_signature !=
NULL)
2775 _dbus_return_val_if_fail (_dbus_message_iter_append_check (real),
FALSE);
2776 _dbus_return_val_if_fail (real->
iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER,
FALSE);
2777 _dbus_return_val_if_fail (_dbus_message_iter_append_check (real_sub),
FALSE);
2778 _dbus_return_val_if_fail (real_sub->
iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER,
FALSE);
2783 if (!_dbus_message_iter_close_signature (real))
2807 _dbus_return_if_fail (_dbus_message_iter_append_check (real));
2808 _dbus_return_if_fail (real->
iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER);
2809 _dbus_return_if_fail (_dbus_message_iter_append_check (real_sub));
2810 _dbus_return_if_fail (real_sub->
iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER);
2812 _dbus_message_iter_abandon_signature (real);
2835 _dbus_return_if_fail (message !=
NULL);
2836 _dbus_return_if_fail (!message->
locked);
2853 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
2877 _dbus_return_if_fail (message !=
NULL);
2878 _dbus_return_if_fail (!message->
locked);
2895 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
2916 const char *object_path)
2918 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
2919 _dbus_return_val_if_fail (!message->
locked,
FALSE);
2920 _dbus_return_val_if_fail (object_path ==
NULL ||
2921 _dbus_check_is_valid_path (object_path),
2924 return set_or_delete_string_field (message,
2948 _dbus_return_val_if_fail (message !=
NULL,
NULL);
2971 const char *msg_path;
2974 if (msg_path ==
NULL)
2985 if (strcmp (msg_path, path) == 0)
3017 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3018 _dbus_return_val_if_fail (path !=
NULL,
FALSE);
3047 const char *interface)
3049 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3050 _dbus_return_val_if_fail (!message->
locked,
FALSE);
3051 _dbus_return_val_if_fail (interface ==
NULL ||
3052 _dbus_check_is_valid_interface (interface),
3055 return set_or_delete_string_field (message,
3079 _dbus_return_val_if_fail (message !=
NULL,
NULL);
3098 const char *interface)
3100 const char *msg_interface;
3103 if (msg_interface ==
NULL)
3105 if (interface ==
NULL)
3111 if (interface ==
NULL)
3114 if (strcmp (msg_interface, interface) == 0)
3137 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3138 _dbus_return_val_if_fail (!message->
locked,
FALSE);
3139 _dbus_return_val_if_fail (member ==
NULL ||
3140 _dbus_check_is_valid_member (member),
3143 return set_or_delete_string_field (message,
3165 _dbus_return_val_if_fail (message !=
NULL,
NULL);
3186 const char *msg_member;
3189 if (msg_member ==
NULL)
3200 if (strcmp (msg_member, member) == 0)
3220 const char *error_name)
3222 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3223 _dbus_return_val_if_fail (!message->
locked,
FALSE);
3224 _dbus_return_val_if_fail (error_name ==
NULL ||
3225 _dbus_check_is_valid_error_name (error_name),
3228 return set_or_delete_string_field (message,
3249 _dbus_return_val_if_fail (message !=
NULL,
NULL);
3274 const char *destination)
3276 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3277 _dbus_return_val_if_fail (!message->
locked,
FALSE);
3278 _dbus_return_val_if_fail (destination ==
NULL ||
3279 _dbus_check_is_valid_bus_name (destination),
3282 return set_or_delete_string_field (message,
3302 _dbus_return_val_if_fail (message !=
NULL,
NULL);
3330 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3331 _dbus_return_val_if_fail (!message->
locked,
FALSE);
3332 _dbus_return_val_if_fail (sender ==
NULL ||
3333 _dbus_check_is_valid_bus_name (sender),
3336 return set_or_delete_string_field (message,
3362 _dbus_return_val_if_fail (message !=
NULL,
NULL);
3396 _dbus_return_val_if_fail (message !=
NULL,
NULL);
3398 get_const_signature (&message->
header, &type_str, &type_pos);
3404 _dbus_message_has_type_interface_member (
DBusMessage *message,
3406 const char *interface,
3424 if (n && strcmp (n, member) == 0)
3428 if (n ==
NULL || strcmp (n, interface) == 0)
3451 const char *interface,
3454 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3455 _dbus_return_val_if_fail (interface !=
NULL,
FALSE);
3456 _dbus_return_val_if_fail (method !=
NULL,
FALSE);
3461 return _dbus_message_has_type_interface_member (message,
3479 const char *interface,
3480 const char *signal_name)
3482 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3483 _dbus_return_val_if_fail (interface !=
NULL,
FALSE);
3484 _dbus_return_val_if_fail (signal_name !=
NULL,
FALSE);
3489 return _dbus_message_has_type_interface_member (message,
3491 interface, signal_name);
3506 const char *error_name)
3510 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3511 _dbus_return_val_if_fail (error_name !=
NULL,
FALSE);
3521 if (n && strcmp (n, error_name) == 0)
3543 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3544 _dbus_return_val_if_fail (name !=
NULL,
FALSE);
3551 if (s && strcmp (s, name) == 0)
3578 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3579 _dbus_return_val_if_fail (name !=
NULL,
FALSE);
3586 if (s && strcmp (s, name) == 0)
3603 const char *signature)
3607 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3608 _dbus_return_val_if_fail (signature !=
NULL,
FALSE);
3615 if (s && strcmp (s, signature) == 0)
3649 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
3650 _dbus_return_val_if_error_is_set (error,
FALSE);
3661 str ?
"%s" :
NULL, str);
3675 #ifdef HAVE_UNIX_FD_PASSING
3678 return message->n_unix_fds > 0;
3702 #define INITIAL_LOADER_DATA_LEN 32
3743 #ifdef HAVE_UNIX_FD_PASSING
3744 loader->unix_fds =
NULL;
3745 loader->n_unix_fds = loader->n_unix_fds_allocated = 0;
3746 loader->unix_fds_outstanding =
FALSE;
3778 #ifdef HAVE_UNIX_FD_PASSING
3779 close_unix_fds(loader->unix_fds, &loader->n_unix_fds);
3815 *buffer = &loader->
data;
3854 unsigned *max_n_fds)
3856 #ifdef HAVE_UNIX_FD_PASSING
3875 loader->unix_fds = a;
3879 *fds = loader->unix_fds + loader->n_unix_fds;
3880 *max_n_fds = loader->n_unix_fds_allocated - loader->n_unix_fds;
3882 loader->unix_fds_outstanding =
TRUE;
3905 #ifdef HAVE_UNIX_FD_PASSING
3907 _dbus_assert(loader->unix_fds + loader->n_unix_fds == fds);
3908 _dbus_assert(loader->n_unix_fds + n_fds <= loader->n_unix_fds_allocated);
3910 loader->n_unix_fds += n_fds;
3911 loader->unix_fds_outstanding =
FALSE;
3947 int fields_array_len,
3958 mode = DBUS_VALIDATION_MODE_DATA_IS_UNTRUSTED;
3980 _dbus_verbose (
"Failed to load header for new message code %d\n", validity);
4001 if (mode != DBUS_VALIDATION_MODE_WE_TRUST_THIS_DATA_ABSOLUTELY)
4003 get_const_signature (&message->
header, &type_str, &type_pos);
4017 _dbus_verbose (
"Failed to validate message body code %d\n", validity);
4032 #ifdef HAVE_UNIX_FD_PASSING
4034 if (n_unix_fds > loader->n_unix_fds)
4036 _dbus_verbose(
"Message contains references to more unix fds than were sent %u != %u\n",
4037 n_unix_fds, loader->n_unix_fds);
4050 message->unix_fds =
_dbus_memdup(loader->unix_fds, n_unix_fds *
sizeof(message->unix_fds[0]));
4051 if (message->unix_fds ==
NULL)
4053 _dbus_verbose (
"Failed to allocate file descriptor array\n");
4058 message->n_unix_fds_allocated = message->n_unix_fds = n_unix_fds;
4059 loader->n_unix_fds -= n_unix_fds;
4060 memmove(loader->unix_fds + n_unix_fds, loader->unix_fds, loader->n_unix_fds);
4063 message->unix_fds =
NULL;
4069 _dbus_verbose (
"Hmm, message claims to come with file descriptors "
4070 "but that's not supported on our platform, disconnecting.\n");
4083 _dbus_verbose (
"Failed to append new message to loader queue\n");
4090 (header_len + body_len));
4094 _dbus_verbose (
"Failed to move body into new message\n");
4107 _dbus_verbose (
"Loaded message %p\n", message);
4154 int byte_order, fields_array_len, header_len, body_len;
4169 message = dbus_message_new_empty_header ();
4170 if (message ==
NULL)
4173 if (!load_message (loader, message,
4174 byte_order, fields_array_len,
4175 header_len, body_len))
4189 _dbus_verbose (
"Initial peek at header says we don't have a whole message yet, or data broken with invalid code %d\n",
4304 _dbus_verbose (
"clamping requested max message size %ld to %d\n",
4335 _dbus_verbose (
"clamping requested max message unix_fds %ld to %d\n",
4393 _dbus_return_if_fail (*slot_p >= 0);
4421 _dbus_return_val_if_fail (message !=
NULL,
FALSE);
4422 _dbus_return_val_if_fail (slot >= 0,
FALSE);
4426 slot, data, free_data_func,
4427 &old_free_func, &old_data);
4433 (* old_free_func) (old_data);
4453 _dbus_return_val_if_fail (message !=
NULL,
NULL);
4478 if (strcmp (type_str,
"method_call") == 0)
4480 if (strcmp (type_str,
"method_return") == 0)
4482 else if (strcmp (type_str,
"signal") == 0)
4484 else if (strcmp (type_str,
"error") == 0)
4509 return "method_call";
4511 return "method_return";
4535 char **marshalled_data_p,
4541 _dbus_return_val_if_fail (msg !=
NULL,
FALSE);
4542 _dbus_return_val_if_fail (marshalled_data_p !=
NULL,
FALSE);
4543 _dbus_return_val_if_fail (len_p !=
NULL,
FALSE);
4549 was_locked = msg->
locked;
4604 _dbus_return_val_if_fail (str !=
NULL,
NULL);
4636 _DBUS_SET_OOM (error);
4659 int byte_order, fields_array_len, header_len, body_len;
4673 &validity, &byte_order,
4684 return header_len + body_len;