|
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17 System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64 User : nobody ( 99) PHP Version : 5.2.17 Disable Function : NONE Directory : /proc/21573/root/usr/share/devhelp/books/dbus/api/ |
Upload File : |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>D-Bus: dbus-message.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data Structures</span></a></li>
<li id="current"><a href="files.html"><span>Files</span></a></li>
<li><a href="pages.html"><span>Related Pages</span></a></li>
</ul></div>
<h1>dbus-message.c</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */</span>
<a name="l00002"></a>00002 <span class="comment">/* dbus-message.c DBusMessage object</span>
<a name="l00003"></a>00003 <span class="comment"> *</span>
<a name="l00004"></a>00004 <span class="comment"> * Copyright (C) 2002, 2003, 2004, 2005 Red Hat Inc.</span>
<a name="l00005"></a>00005 <span class="comment"> * Copyright (C) 2002, 2003 CodeFactory AB</span>
<a name="l00006"></a>00006 <span class="comment"> *</span>
<a name="l00007"></a>00007 <span class="comment"> * Licensed under the Academic Free License version 2.1</span>
<a name="l00008"></a>00008 <span class="comment"> *</span>
<a name="l00009"></a>00009 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
<a name="l00010"></a>00010 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
<a name="l00011"></a>00011 <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span>
<a name="l00012"></a>00012 <span class="comment"> * (at your option) any later version.</span>
<a name="l00013"></a>00013 <span class="comment"> *</span>
<a name="l00014"></a>00014 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
<a name="l00015"></a>00015 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00016"></a>00016 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<a name="l00017"></a>00017 <span class="comment"> * GNU General Public License for more details.</span>
<a name="l00018"></a>00018 <span class="comment"> *</span>
<a name="l00019"></a>00019 <span class="comment"> * You should have received a copy of the GNU General Public License</span>
<a name="l00020"></a>00020 <span class="comment"> * along with this program; if not, write to the Free Software</span>
<a name="l00021"></a>00021 <span class="comment"> * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA</span>
<a name="l00022"></a>00022 <span class="comment"> *</span>
<a name="l00023"></a>00023 <span class="comment"> */</span>
<a name="l00024"></a>00024
<a name="l00025"></a>00025 <span class="preprocessor">#include "dbus-internals.h"</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include "dbus-marshal-recursive.h"</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include "dbus-marshal-validate.h"</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include "dbus-marshal-byteswap.h"</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include "dbus-marshal-header.h"</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include "dbus-signature.h"</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include "dbus-message-private.h"</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include "dbus-object-tree.h"</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include "dbus-memory.h"</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include "dbus-list.h"</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include "dbus-threads-internal.h"</span>
<a name="l00036"></a>00036 <span class="preprocessor">#include <string.h></span>
<a name="l00037"></a>00037
<a name="l00038"></a>00038 <span class="keyword">static</span> <span class="keywordtype">void</span> dbus_message_finalize (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message);
<a name="l00039"></a>00039
<a name="l00050"></a>00050 <span class="comment">/* Not thread locked, but strictly const/read-only so should be OK</span>
<a name="l00051"></a>00051 <span class="comment"> */</span>
<a name="l00053"></a>00053 <a class="code" href="group__DBusMarshal.html#gb49ca4819ef45b26463427bb09060844">_DBUS_STRING_DEFINE_STATIC</a>(_dbus_empty_signature_str, <span class="stringliteral">""</span>);
<a name="l00054"></a>00054
<a name="l00055"></a>00055 <span class="comment">/* these have wacky values to help trap uninitialized iterators;</span>
<a name="l00056"></a>00056 <span class="comment"> * but has to fit in 3 bits</span>
<a name="l00057"></a>00057 <span class="comment"> */</span>
<a name="l00058"></a>00058 <span class="keyword">enum</span> {
<a name="l00059"></a>00059 DBUS_MESSAGE_ITER_TYPE_READER = 3,
<a name="l00060"></a>00060 DBUS_MESSAGE_ITER_TYPE_WRITER = 7
<a name="l00061"></a>00061 };
<a name="l00062"></a>00062
<a name="l00064"></a><a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">00064</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structDBusMessageRealIter.html">DBusMessageRealIter</a> <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a>;
<a name="l00065"></a>00065
<a name="l00071"></a><a class="code" href="structDBusMessageRealIter.html">00071</a> <span class="keyword">struct </span><a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a>
<a name="l00072"></a>00072 {
<a name="l00073"></a><a class="code" href="structDBusMessageRealIter.html#552cb582c65645ed46d9d1ad38ece3c7">00073</a> <a class="code" href="structDBusMessage.html">DBusMessage</a> *<a class="code" href="structDBusMessageRealIter.html#552cb582c65645ed46d9d1ad38ece3c7">message</a>;
<a name="l00074"></a><a class="code" href="structDBusMessageRealIter.html#c10324f74497a5c2288eef8fbcd3ae42">00074</a> <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a> <a class="code" href="structDBusMessageRealIter.html#c10324f74497a5c2288eef8fbcd3ae42">changed_stamp</a> : <a class="code" href="group__DBusMessageInternals.html#g660989658f3be5e403da430f63afd0b7">CHANGED_STAMP_BITS</a>;
<a name="l00075"></a><a class="code" href="structDBusMessageRealIter.html#835b7990b2909beb06fc2dc38b76a089">00075</a> <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a> <a class="code" href="structDBusMessageRealIter.html#835b7990b2909beb06fc2dc38b76a089">iter_type</a> : 3;
<a name="l00076"></a><a class="code" href="structDBusMessageRealIter.html#93789e6f814d55b5952fee34d286f6d6">00076</a> <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a> <a class="code" href="structDBusMessageRealIter.html#93789e6f814d55b5952fee34d286f6d6">sig_refcount</a> : 8;
<a name="l00077"></a>00077 <span class="keyword">union</span>
<a name="l00078"></a>00078 <span class="keyword"> </span>{
<a name="l00079"></a><a class="code" href="structDBusMessageRealIter.html#93bc11bb1521743170b0b411b32140cf">00079</a> <a class="code" href="structDBusTypeWriter.html">DBusTypeWriter</a> <a class="code" href="structDBusMessageRealIter.html#93bc11bb1521743170b0b411b32140cf">writer</a>;
<a name="l00080"></a><a class="code" href="structDBusMessageRealIter.html#e5c4e45b0a5d6642850144f642d7db67">00080</a> <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> <a class="code" href="structDBusMessageRealIter.html#e5c4e45b0a5d6642850144f642d7db67">reader</a>;
<a name="l00081"></a>00081 } <a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>;
<a name="l00082"></a>00082 };
<a name="l00083"></a>00083
<a name="l00084"></a>00084 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00085"></a>00085 get_const_signature (<a class="code" href="structDBusHeader.html">DBusHeader</a> *header,
<a name="l00086"></a>00086 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> **type_str_p,
<a name="l00087"></a>00087 <span class="keywordtype">int</span> *type_pos_p)
<a name="l00088"></a>00088 {
<a name="l00089"></a>00089 <span class="keywordflow">if</span> (<a class="code" href="group__DBusMarshal.html#gf4661ba8e7067f349ba03c9f5776bbb0">_dbus_header_get_field_raw</a> (header,
<a name="l00090"></a>00090 <a class="code" href="group__DBusProtocol.html#g450d63fa110d3cb891082e23291580b4">DBUS_HEADER_FIELD_SIGNATURE</a>,
<a name="l00091"></a>00091 type_str_p,
<a name="l00092"></a>00092 type_pos_p))
<a name="l00093"></a>00093 {
<a name="l00094"></a>00094 *type_pos_p += 1; <span class="comment">/* skip the signature length which is 1 byte */</span>
<a name="l00095"></a>00095 }
<a name="l00096"></a>00096 <span class="keywordflow">else</span>
<a name="l00097"></a>00097 {
<a name="l00098"></a>00098 *type_str_p = &_dbus_empty_signature_str;
<a name="l00099"></a>00099 *type_pos_p = 0;
<a name="l00100"></a>00100 }
<a name="l00101"></a>00101 }
<a name="l00102"></a>00102
<a name="l00108"></a>00108 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00109"></a>00109 _dbus_message_byteswap (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l00110"></a>00110 {
<a name="l00111"></a>00111 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *type_str;
<a name="l00112"></a>00112 <span class="keywordtype">int</span> type_pos;
<a name="l00113"></a>00113
<a name="l00114"></a>00114 <span class="keywordflow">if</span> (message-><a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a> == DBUS_COMPILER_BYTE_ORDER)
<a name="l00115"></a>00115 <span class="keywordflow">return</span>;
<a name="l00116"></a>00116
<a name="l00117"></a>00117 _dbus_verbose (<span class="stringliteral">"Swapping message into compiler byte order\n"</span>);
<a name="l00118"></a>00118
<a name="l00119"></a>00119 get_const_signature (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>, &type_str, &type_pos);
<a name="l00120"></a>00120
<a name="l00121"></a>00121 <a class="code" href="group__DBusMarshal.html#g609a4b8c0b65096890766fda73a4c40f">_dbus_marshal_byteswap</a> (type_str, type_pos,
<a name="l00122"></a>00122 message-><a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a>,
<a name="l00123"></a>00123 DBUS_COMPILER_BYTE_ORDER,
<a name="l00124"></a>00124 &message-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>, 0);
<a name="l00125"></a>00125
<a name="l00126"></a>00126 message-><a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a> = DBUS_COMPILER_BYTE_ORDER;
<a name="l00127"></a>00127
<a name="l00128"></a>00128 <a class="code" href="group__DBusMarshal.html#ge5277c7b7bfb7b85e421baceac0398c8">_dbus_header_byteswap</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>, DBUS_COMPILER_BYTE_ORDER);
<a name="l00129"></a>00129 }
<a name="l00130"></a>00130
<a name="l00137"></a><a class="code" href="group__DBusMessageInternals.html#g1dfae386ef0d4d808584abeafc44e8ca">00137</a> <span class="preprocessor">#define ensure_byte_order(message) \</span>
<a name="l00138"></a>00138 <span class="preprocessor"> if (message->byte_order != DBUS_COMPILER_BYTE_ORDER) \</span>
<a name="l00139"></a>00139 <span class="preprocessor"> _dbus_message_byteswap (message)</span>
<a name="l00140"></a>00140 <span class="preprocessor"></span>
<a name="l00151"></a>00151 <span class="keywordtype">void</span>
<a name="l00152"></a><a class="code" href="group__DBusMessageInternals.html#g617811b117ac5eb31151ffb7dabea7a8">00152</a> <a class="code" href="group__DBusMessageInternals.html#g617811b117ac5eb31151ffb7dabea7a8">_dbus_message_get_network_data</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l00153"></a>00153 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> **header,
<a name="l00154"></a>00154 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> **body)
<a name="l00155"></a>00155 {
<a name="l00156"></a>00156 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message-><a class="code" href="structDBusMessage.html#c926e7027f22608d75a6dfe18680b9e7">locked</a>);
<a name="l00157"></a>00157
<a name="l00158"></a>00158 *header = &message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>.<a class="code" href="structDBusHeader.html#67df8bff43c10e2d4f6ae36b56ee5814">data</a>;
<a name="l00159"></a>00159 *body = &message-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>;
<a name="l00160"></a>00160 }
<a name="l00161"></a>00161
<a name="l00169"></a>00169 <span class="keywordtype">void</span>
<a name="l00170"></a><a class="code" href="group__DBusMessageInternals.html#g0d9af43afd808b3543ac43b22e731508">00170</a> <a class="code" href="group__DBusMessageInternals.html#g0d9af43afd808b3543ac43b22e731508">_dbus_message_set_serial</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l00171"></a>00171 <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a> serial)
<a name="l00172"></a>00172 {
<a name="l00173"></a>00173 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00174"></a>00174 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (!message-><a class="code" href="structDBusMessage.html#c926e7027f22608d75a6dfe18680b9e7">locked</a>);
<a name="l00175"></a>00175 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (<a class="code" href="group__DBusMessage.html#g89b6eb41aed10c6d5f4a3bc0fe018a6b">dbus_message_get_serial</a> (message) == 0);
<a name="l00176"></a>00176
<a name="l00177"></a>00177 <a class="code" href="group__DBusMarshal.html#gd92e0b1992cf96a4da642a4a54a5d26d">_dbus_header_set_serial</a> (&message->header, serial);
<a name="l00178"></a>00178 }
<a name="l00179"></a>00179
<a name="l00192"></a>00192 <span class="keywordtype">void</span>
<a name="l00193"></a><a class="code" href="group__DBusMessageInternals.html#g444052d30845d5914fa988fad0588170">00193</a> <a class="code" href="group__DBusMessageInternals.html#g444052d30845d5914fa988fad0588170">_dbus_message_add_size_counter_link</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l00194"></a>00194 <a class="code" href="structDBusList.html">DBusList</a> *link)
<a name="l00195"></a>00195 {
<a name="l00196"></a>00196 <span class="comment">/* right now we don't recompute the delta when message</span>
<a name="l00197"></a>00197 <span class="comment"> * size changes, and that's OK for current purposes</span>
<a name="l00198"></a>00198 <span class="comment"> * I think, but could be important to change later.</span>
<a name="l00199"></a>00199 <span class="comment"> * Do recompute it whenever there are no outstanding counters,</span>
<a name="l00200"></a>00200 <span class="comment"> * since it's basically free.</span>
<a name="l00201"></a>00201 <span class="comment"> */</span>
<a name="l00202"></a>00202 <span class="keywordflow">if</span> (message-><a class="code" href="structDBusMessage.html#439f34ae452c73577d7ce2541e16424b">size_counters</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l00203"></a>00203 {
<a name="l00204"></a>00204 message-><a class="code" href="structDBusMessage.html#b8f43d40fa870f97f1126256568cec61">size_counter_delta</a> =
<a name="l00205"></a>00205 _dbus_string_get_length (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>.<a class="code" href="structDBusHeader.html#67df8bff43c10e2d4f6ae36b56ee5814">data</a>) +
<a name="l00206"></a>00206 _dbus_string_get_length (&message-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>);
<a name="l00207"></a>00207
<a name="l00208"></a>00208 <span class="preprocessor">#if 0</span>
<a name="l00209"></a>00209 <span class="preprocessor"></span> _dbus_verbose (<span class="stringliteral">"message has size %ld\n"</span>,
<a name="l00210"></a>00210 message-><a class="code" href="structDBusMessage.html#b8f43d40fa870f97f1126256568cec61">size_counter_delta</a>);
<a name="l00211"></a>00211 <span class="preprocessor">#endif</span>
<a name="l00212"></a>00212 <span class="preprocessor"></span> }
<a name="l00213"></a>00213
<a name="l00214"></a>00214 <a class="code" href="group__DBusList.html#g20e549175e2b8f450f907592dc39d953">_dbus_list_append_link</a> (&message-><a class="code" href="structDBusMessage.html#439f34ae452c73577d7ce2541e16424b">size_counters</a>, link);
<a name="l00215"></a>00215
<a name="l00216"></a>00216 <a class="code" href="group__DBusResources.html#gcdde7d91bea4143a35329b246b889670">_dbus_counter_adjust</a> (link-><a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>, message-><a class="code" href="structDBusMessage.html#b8f43d40fa870f97f1126256568cec61">size_counter_delta</a>);
<a name="l00217"></a>00217 }
<a name="l00218"></a>00218
<a name="l00228"></a>00228 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00229"></a><a class="code" href="group__DBusMessageInternals.html#g563ac5990a24808a952b117894e6c894">00229</a> <a class="code" href="group__DBusMessageInternals.html#g563ac5990a24808a952b117894e6c894">_dbus_message_add_size_counter</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l00230"></a>00230 <a class="code" href="structDBusCounter.html">DBusCounter</a> *counter)
<a name="l00231"></a>00231 {
<a name="l00232"></a>00232 <a class="code" href="structDBusList.html">DBusList</a> *link;
<a name="l00233"></a>00233
<a name="l00234"></a>00234 link = <a class="code" href="group__DBusList.html#gc20b9981531cef590d49a59240344cd8">_dbus_list_alloc_link</a> (counter);
<a name="l00235"></a>00235 <span class="keywordflow">if</span> (link == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l00236"></a>00236 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00237"></a>00237
<a name="l00238"></a>00238 <a class="code" href="group__DBusResources.html#ge93240c77bfb66642453518c9bb90bc4">_dbus_counter_ref</a> (counter);
<a name="l00239"></a>00239 <a class="code" href="group__DBusMessageInternals.html#g444052d30845d5914fa988fad0588170">_dbus_message_add_size_counter_link</a> (message, link);
<a name="l00240"></a>00240
<a name="l00241"></a>00241 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00242"></a>00242 }
<a name="l00243"></a>00243
<a name="l00252"></a>00252 <span class="keywordtype">void</span>
<a name="l00253"></a><a class="code" href="group__DBusMessageInternals.html#g5a991994492dfb85c5838b8293ccf0aa">00253</a> <a class="code" href="group__DBusMessageInternals.html#g5a991994492dfb85c5838b8293ccf0aa">_dbus_message_remove_size_counter</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l00254"></a>00254 <a class="code" href="structDBusCounter.html">DBusCounter</a> *counter,
<a name="l00255"></a>00255 <a class="code" href="structDBusList.html">DBusList</a> **link_return)
<a name="l00256"></a>00256 {
<a name="l00257"></a>00257 <a class="code" href="structDBusList.html">DBusList</a> *link;
<a name="l00258"></a>00258
<a name="l00259"></a>00259 link = <a class="code" href="group__DBusList.html#g5929ad5253d2f538158e513e9df3002b">_dbus_list_find_last</a> (&message-><a class="code" href="structDBusMessage.html#439f34ae452c73577d7ce2541e16424b">size_counters</a>,
<a name="l00260"></a>00260 counter);
<a name="l00261"></a>00261 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (link != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00262"></a>00262
<a name="l00263"></a>00263 <a class="code" href="group__DBusList.html#g57f1fc73dc1a4f8a7bf9860e000b1703">_dbus_list_unlink</a> (&message-><a class="code" href="structDBusMessage.html#439f34ae452c73577d7ce2541e16424b">size_counters</a>,
<a name="l00264"></a>00264 link);
<a name="l00265"></a>00265 <span class="keywordflow">if</span> (link_return)
<a name="l00266"></a>00266 *link_return = link;
<a name="l00267"></a>00267 <span class="keywordflow">else</span>
<a name="l00268"></a>00268 <a class="code" href="group__DBusList.html#g6e824f717125ce40c549d5402e32610f">_dbus_list_free_link</a> (link);
<a name="l00269"></a>00269
<a name="l00270"></a>00270 <a class="code" href="group__DBusResources.html#gcdde7d91bea4143a35329b246b889670">_dbus_counter_adjust</a> (counter, - message-><a class="code" href="structDBusMessage.html#b8f43d40fa870f97f1126256568cec61">size_counter_delta</a>);
<a name="l00271"></a>00271
<a name="l00272"></a>00272 <a class="code" href="group__DBusResources.html#g48d9b53d1a395ab3c4f1846ca569ef3f">_dbus_counter_unref</a> (counter);
<a name="l00273"></a>00273 }
<a name="l00274"></a>00274
<a name="l00284"></a>00284 <span class="keywordtype">void</span>
<a name="l00285"></a><a class="code" href="group__DBusMessageInternals.html#gb4ea319b17b104f3b930e5e4b7c13a3a">00285</a> <a class="code" href="group__DBusMessageInternals.html#gb4ea319b17b104f3b930e5e4b7c13a3a">_dbus_message_lock</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l00286"></a>00286 {
<a name="l00287"></a>00287 <span class="keywordflow">if</span> (!message-><a class="code" href="structDBusMessage.html#c926e7027f22608d75a6dfe18680b9e7">locked</a>)
<a name="l00288"></a>00288 {
<a name="l00289"></a>00289 <a class="code" href="group__DBusMarshal.html#g0cff04252f97f6a25552c368199897f5">_dbus_header_update_lengths</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l00290"></a>00290 _dbus_string_get_length (&message-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>));
<a name="l00291"></a>00291
<a name="l00292"></a>00292 <span class="comment">/* must have a signature if you have a body */</span>
<a name="l00293"></a>00293 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (_dbus_string_get_length (&message-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>) == 0 ||
<a name="l00294"></a>00294 <a class="code" href="group__DBusMessage.html#g7ee1a53a1aa27764b6088179d8f5ec86">dbus_message_get_signature</a> (message) != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00295"></a>00295
<a name="l00296"></a>00296 message-><a class="code" href="structDBusMessage.html#c926e7027f22608d75a6dfe18680b9e7">locked</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00297"></a>00297 }
<a name="l00298"></a>00298 }
<a name="l00299"></a>00299
<a name="l00300"></a>00300 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00301"></a>00301 set_or_delete_string_field (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l00302"></a>00302 <span class="keywordtype">int</span> field,
<a name="l00303"></a>00303 <span class="keywordtype">int</span> typecode,
<a name="l00304"></a>00304 <span class="keyword">const</span> <span class="keywordtype">char</span> *value)
<a name="l00305"></a>00305 {
<a name="l00306"></a>00306 <span class="keywordflow">if</span> (value == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l00307"></a>00307 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#g7814248f4d74d109d29dc00487cd9b0c">_dbus_header_delete_field</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>, field);
<a name="l00308"></a>00308 <span class="keywordflow">else</span>
<a name="l00309"></a>00309 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#g4349de00b7754a337526e36fda133464">_dbus_header_set_field_basic</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l00310"></a>00310 field,
<a name="l00311"></a>00311 typecode,
<a name="l00312"></a>00312 &value);
<a name="l00313"></a>00313 }
<a name="l00314"></a>00314
<a name="l00315"></a>00315 <span class="preprocessor">#if 0</span>
<a name="l00316"></a>00316 <span class="preprocessor"></span><span class="comment">/* Probably we don't need to use this */</span>
<a name="l00340"></a>00340 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00341"></a>00341 _dbus_message_set_signature (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l00342"></a>00342 <span class="keyword">const</span> <span class="keywordtype">char</span> *signature)
<a name="l00343"></a>00343 {
<a name="l00344"></a>00344 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l00345"></a>00345 _dbus_return_val_if_fail (!message-><a class="code" href="structDBusMessage.html#c926e7027f22608d75a6dfe18680b9e7">locked</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l00346"></a>00346 _dbus_return_val_if_fail (signature == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> ||
<a name="l00347"></a>00347 _dbus_check_is_valid_signature (signature));
<a name="l00348"></a>00348 <span class="comment">/* can't delete the signature if you have a message body */</span>
<a name="l00349"></a>00349 _dbus_return_val_if_fail (_dbus_string_get_length (&message-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>) == 0 ||
<a name="l00350"></a>00350 signature != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00351"></a>00351
<a name="l00352"></a>00352 <span class="keywordflow">return</span> set_or_delete_string_field (message,
<a name="l00353"></a>00353 <a class="code" href="group__DBusProtocol.html#g450d63fa110d3cb891082e23291580b4">DBUS_HEADER_FIELD_SIGNATURE</a>,
<a name="l00354"></a>00354 <a class="code" href="group__DBusProtocol.html#g26ed6c20c3d9f0b50ea0a1cf80be3279">DBUS_TYPE_SIGNATURE</a>,
<a name="l00355"></a>00355 signature);
<a name="l00356"></a>00356 }
<a name="l00357"></a>00357 <span class="preprocessor">#endif</span>
<a name="l00358"></a>00358 <span class="preprocessor"></span>
<a name="l00359"></a>00359 <span class="comment">/* Message Cache</span>
<a name="l00360"></a>00360 <span class="comment"> *</span>
<a name="l00361"></a>00361 <span class="comment"> * We cache some DBusMessage to reduce the overhead of allocating</span>
<a name="l00362"></a>00362 <span class="comment"> * them. In my profiling this consistently made about an 8%</span>
<a name="l00363"></a>00363 <span class="comment"> * difference. It avoids the malloc for the message, the malloc for</span>
<a name="l00364"></a>00364 <span class="comment"> * the slot list, the malloc for the header string and body string,</span>
<a name="l00365"></a>00365 <span class="comment"> * and the associated free() calls. It does introduce another global</span>
<a name="l00366"></a>00366 <span class="comment"> * lock which could be a performance issue in certain cases.</span>
<a name="l00367"></a>00367 <span class="comment"> *</span>
<a name="l00368"></a>00368 <span class="comment"> * For the echo client/server the round trip time goes from around</span>
<a name="l00369"></a>00369 <span class="comment"> * .000077 to .000069 with the message cache on my laptop. The sysprof</span>
<a name="l00370"></a>00370 <span class="comment"> * change is as follows (numbers are cumulative percentage):</span>
<a name="l00371"></a>00371 <span class="comment"> *</span>
<a name="l00372"></a>00372 <span class="comment"> * with message cache implemented as array as it is now (0.000069 per):</span>
<a name="l00373"></a>00373 <span class="comment"> * new_empty_header 1.46</span>
<a name="l00374"></a>00374 <span class="comment"> * mutex_lock 0.56 # i.e. _DBUS_LOCK(message_cache)</span>
<a name="l00375"></a>00375 <span class="comment"> * mutex_unlock 0.25</span>
<a name="l00376"></a>00376 <span class="comment"> * self 0.41</span>
<a name="l00377"></a>00377 <span class="comment"> * unref 2.24</span>
<a name="l00378"></a>00378 <span class="comment"> * self 0.68</span>
<a name="l00379"></a>00379 <span class="comment"> * list_clear 0.43</span>
<a name="l00380"></a>00380 <span class="comment"> * mutex_lock 0.33 # i.e. _DBUS_LOCK(message_cache)</span>
<a name="l00381"></a>00381 <span class="comment"> * mutex_unlock 0.25</span>
<a name="l00382"></a>00382 <span class="comment"> *</span>
<a name="l00383"></a>00383 <span class="comment"> * with message cache implemented as list (0.000070 per roundtrip):</span>
<a name="l00384"></a>00384 <span class="comment"> * new_empty_header 2.72</span>
<a name="l00385"></a>00385 <span class="comment"> * list_pop_first 1.88</span>
<a name="l00386"></a>00386 <span class="comment"> * unref 3.3</span>
<a name="l00387"></a>00387 <span class="comment"> * list_prepend 1.63</span>
<a name="l00388"></a>00388 <span class="comment"> *</span>
<a name="l00389"></a>00389 <span class="comment"> * without cache (0.000077 per roundtrip):</span>
<a name="l00390"></a>00390 <span class="comment"> * new_empty_header 6.7</span>
<a name="l00391"></a>00391 <span class="comment"> * string_init_preallocated 3.43</span>
<a name="l00392"></a>00392 <span class="comment"> * dbus_malloc 2.43</span>
<a name="l00393"></a>00393 <span class="comment"> * dbus_malloc0 2.59</span>
<a name="l00394"></a>00394 <span class="comment"> *</span>
<a name="l00395"></a>00395 <span class="comment"> * unref 4.02</span>
<a name="l00396"></a>00396 <span class="comment"> * string_free 1.82</span>
<a name="l00397"></a>00397 <span class="comment"> * dbus_free 1.63</span>
<a name="l00398"></a>00398 <span class="comment"> * dbus_free 0.71</span>
<a name="l00399"></a>00399 <span class="comment"> *</span>
<a name="l00400"></a>00400 <span class="comment"> * If you implement the message_cache with a list, the primary reason</span>
<a name="l00401"></a>00401 <span class="comment"> * it's slower is that you add another thread lock (on the DBusList</span>
<a name="l00402"></a>00402 <span class="comment"> * mempool).</span>
<a name="l00403"></a>00403 <span class="comment"> */</span>
<a name="l00404"></a>00404
<a name="l00406"></a><a class="code" href="group__DBusMessageInternals.html#g2c5c6aef45dd0b5cc10c800f986a7ce7">00406</a> <span class="preprocessor">#define MAX_MESSAGE_SIZE_TO_CACHE 10 * _DBUS_ONE_KILOBYTE</span>
<a name="l00407"></a>00407 <span class="preprocessor"></span>
<a name="l00409"></a><a class="code" href="group__DBusMessageInternals.html#geab2038ce58cd314dc1f23103abec5b0">00409</a> <span class="preprocessor">#define MAX_MESSAGE_CACHE_SIZE 5</span>
<a name="l00410"></a>00410 <span class="preprocessor"></span>
<a name="l00411"></a>00411 <a class="code" href="group__DBusInternalsUtils.html#gc8d22e9846ecc2845959082076de899b">_DBUS_DEFINE_GLOBAL_LOCK</a> (message_cache);
<a name="l00412"></a>00412 <span class="keyword">static</span> <a class="code" href="structDBusMessage.html">DBusMessage</a> *message_cache[<a class="code" href="group__DBusMessageInternals.html#geab2038ce58cd314dc1f23103abec5b0">MAX_MESSAGE_CACHE_SIZE</a>];
<a name="l00413"></a>00413 <span class="keyword">static</span> <span class="keywordtype">int</span> message_cache_count = 0;
<a name="l00414"></a>00414 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> message_cache_shutdown_registered = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00415"></a>00415
<a name="l00416"></a>00416 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00417"></a>00417 dbus_message_cache_shutdown (<span class="keywordtype">void</span> *data)
<a name="l00418"></a>00418 {
<a name="l00419"></a>00419 <span class="keywordtype">int</span> i;
<a name="l00420"></a>00420
<a name="l00421"></a>00421 <a class="code" href="group__DBusInternalsUtils.html#g3b56fdb9df58277ee69d9f56a73bf383">_DBUS_LOCK</a> (message_cache);
<a name="l00422"></a>00422
<a name="l00423"></a>00423 i = 0;
<a name="l00424"></a>00424 <span class="keywordflow">while</span> (i < <a class="code" href="group__DBusMessageInternals.html#geab2038ce58cd314dc1f23103abec5b0">MAX_MESSAGE_CACHE_SIZE</a>)
<a name="l00425"></a>00425 {
<a name="l00426"></a>00426 <span class="keywordflow">if</span> (message_cache[i])
<a name="l00427"></a>00427 dbus_message_finalize (message_cache[i]);
<a name="l00428"></a>00428
<a name="l00429"></a>00429 ++i;
<a name="l00430"></a>00430 }
<a name="l00431"></a>00431
<a name="l00432"></a>00432 message_cache_count = 0;
<a name="l00433"></a>00433 message_cache_shutdown_registered = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00434"></a>00434
<a name="l00435"></a>00435 <a class="code" href="group__DBusInternalsUtils.html#g1b7db80a2ea11235768ec8aa698df0a5">_DBUS_UNLOCK</a> (message_cache);
<a name="l00436"></a>00436 }
<a name="l00437"></a>00437
<a name="l00445"></a>00445 <span class="keyword">static</span> <a class="code" href="structDBusMessage.html">DBusMessage</a>*
<a name="l00446"></a>00446 dbus_message_get_cached (<span class="keywordtype">void</span>)
<a name="l00447"></a>00447 {
<a name="l00448"></a>00448 <a class="code" href="structDBusMessage.html">DBusMessage</a> *message;
<a name="l00449"></a>00449 <span class="keywordtype">int</span> i;
<a name="l00450"></a>00450
<a name="l00451"></a>00451 message = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l00452"></a>00452
<a name="l00453"></a>00453 <a class="code" href="group__DBusInternalsUtils.html#g3b56fdb9df58277ee69d9f56a73bf383">_DBUS_LOCK</a> (message_cache);
<a name="l00454"></a>00454
<a name="l00455"></a>00455 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message_cache_count >= 0);
<a name="l00456"></a>00456
<a name="l00457"></a>00457 <span class="keywordflow">if</span> (message_cache_count == 0)
<a name="l00458"></a>00458 {
<a name="l00459"></a>00459 <a class="code" href="group__DBusInternalsUtils.html#g1b7db80a2ea11235768ec8aa698df0a5">_DBUS_UNLOCK</a> (message_cache);
<a name="l00460"></a>00460 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l00461"></a>00461 }
<a name="l00462"></a>00462
<a name="l00463"></a>00463 <span class="comment">/* This is not necessarily true unless count > 0, and</span>
<a name="l00464"></a>00464 <span class="comment"> * message_cache is uninitialized until the shutdown is</span>
<a name="l00465"></a>00465 <span class="comment"> * registered</span>
<a name="l00466"></a>00466 <span class="comment"> */</span>
<a name="l00467"></a>00467 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message_cache_shutdown_registered);
<a name="l00468"></a>00468
<a name="l00469"></a>00469 i = 0;
<a name="l00470"></a>00470 <span class="keywordflow">while</span> (i < <a class="code" href="group__DBusMessageInternals.html#geab2038ce58cd314dc1f23103abec5b0">MAX_MESSAGE_CACHE_SIZE</a>)
<a name="l00471"></a>00471 {
<a name="l00472"></a>00472 <span class="keywordflow">if</span> (message_cache[i])
<a name="l00473"></a>00473 {
<a name="l00474"></a>00474 message = message_cache[i];
<a name="l00475"></a>00475 message_cache[i] = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l00476"></a>00476 message_cache_count -= 1;
<a name="l00477"></a>00477 <span class="keywordflow">break</span>;
<a name="l00478"></a>00478 }
<a name="l00479"></a>00479 ++i;
<a name="l00480"></a>00480 }
<a name="l00481"></a>00481 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message_cache_count >= 0);
<a name="l00482"></a>00482 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (i < <a class="code" href="group__DBusMessageInternals.html#geab2038ce58cd314dc1f23103abec5b0">MAX_MESSAGE_CACHE_SIZE</a>);
<a name="l00483"></a>00483 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00484"></a>00484
<a name="l00485"></a>00485 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message-><a class="code" href="structDBusMessage.html#324c5377e0be18dd84ac519ab2d23f0d">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> == 0);
<a name="l00486"></a>00486 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message-><a class="code" href="structDBusMessage.html#439f34ae452c73577d7ce2541e16424b">size_counters</a> == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00487"></a>00487
<a name="l00488"></a>00488 <a class="code" href="group__DBusInternalsUtils.html#g1b7db80a2ea11235768ec8aa698df0a5">_DBUS_UNLOCK</a> (message_cache);
<a name="l00489"></a>00489
<a name="l00490"></a>00490 <span class="keywordflow">return</span> message;
<a name="l00491"></a>00491 }
<a name="l00492"></a>00492
<a name="l00493"></a>00493 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00494"></a>00494 free_size_counter (<span class="keywordtype">void</span> *element,
<a name="l00495"></a>00495 <span class="keywordtype">void</span> *data)
<a name="l00496"></a>00496 {
<a name="l00497"></a>00497 <a class="code" href="structDBusCounter.html">DBusCounter</a> *counter = element;
<a name="l00498"></a>00498 <a class="code" href="structDBusMessage.html">DBusMessage</a> *message = data;
<a name="l00499"></a>00499
<a name="l00500"></a>00500 <a class="code" href="group__DBusResources.html#gcdde7d91bea4143a35329b246b889670">_dbus_counter_adjust</a> (counter, - message-><a class="code" href="structDBusMessage.html#b8f43d40fa870f97f1126256568cec61">size_counter_delta</a>);
<a name="l00501"></a>00501
<a name="l00502"></a>00502 <a class="code" href="group__DBusResources.html#g48d9b53d1a395ab3c4f1846ca569ef3f">_dbus_counter_unref</a> (counter);
<a name="l00503"></a>00503 }
<a name="l00504"></a>00504
<a name="l00510"></a>00510 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00511"></a>00511 dbus_message_cache_or_finalize (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l00512"></a>00512 {
<a name="l00513"></a>00513 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> was_cached;
<a name="l00514"></a>00514 <span class="keywordtype">int</span> i;
<a name="l00515"></a>00515
<a name="l00516"></a>00516 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message-><a class="code" href="structDBusMessage.html#324c5377e0be18dd84ac519ab2d23f0d">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> == 0);
<a name="l00517"></a>00517
<a name="l00518"></a>00518 <span class="comment">/* This calls application code and has to be done first thing</span>
<a name="l00519"></a>00519 <span class="comment"> * without holding the lock</span>
<a name="l00520"></a>00520 <span class="comment"> */</span>
<a name="l00521"></a>00521 <a class="code" href="group__DBusDataSlot.html#g3c96d2ca263ba397b4da2956a49ae282">_dbus_data_slot_list_clear</a> (&message-><a class="code" href="structDBusMessage.html#179c446523c6321e04f88a671363be19">slot_list</a>);
<a name="l00522"></a>00522
<a name="l00523"></a>00523 <a class="code" href="group__DBusList.html#g8dd69084b53361803a765e6d53d5b9d1">_dbus_list_foreach</a> (&message-><a class="code" href="structDBusMessage.html#439f34ae452c73577d7ce2541e16424b">size_counters</a>,
<a name="l00524"></a>00524 free_size_counter, message);
<a name="l00525"></a>00525 <a class="code" href="group__DBusList.html#ga36d13444a050a923941c53650b72f9d">_dbus_list_clear</a> (&message-><a class="code" href="structDBusMessage.html#439f34ae452c73577d7ce2541e16424b">size_counters</a>);
<a name="l00526"></a>00526
<a name="l00527"></a>00527 was_cached = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00528"></a>00528
<a name="l00529"></a>00529 <a class="code" href="group__DBusInternalsUtils.html#g3b56fdb9df58277ee69d9f56a73bf383">_DBUS_LOCK</a> (message_cache);
<a name="l00530"></a>00530
<a name="l00531"></a>00531 <span class="keywordflow">if</span> (!message_cache_shutdown_registered)
<a name="l00532"></a>00532 {
<a name="l00533"></a>00533 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message_cache_count == 0);
<a name="l00534"></a>00534
<a name="l00535"></a>00535 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMemoryInternals.html#g8dc6d5dd0a0e7901ab793da7403ee734">_dbus_register_shutdown_func</a> (dbus_message_cache_shutdown, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>))
<a name="l00536"></a>00536 <span class="keywordflow">goto</span> out;
<a name="l00537"></a>00537
<a name="l00538"></a>00538 i = 0;
<a name="l00539"></a>00539 <span class="keywordflow">while</span> (i < <a class="code" href="group__DBusMessageInternals.html#geab2038ce58cd314dc1f23103abec5b0">MAX_MESSAGE_CACHE_SIZE</a>)
<a name="l00540"></a>00540 {
<a name="l00541"></a>00541 message_cache[i] = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l00542"></a>00542 ++i;
<a name="l00543"></a>00543 }
<a name="l00544"></a>00544
<a name="l00545"></a>00545 message_cache_shutdown_registered = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00546"></a>00546 }
<a name="l00547"></a>00547
<a name="l00548"></a>00548 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message_cache_count >= 0);
<a name="l00549"></a>00549
<a name="l00550"></a>00550 <span class="keywordflow">if</span> ((_dbus_string_get_length (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>.<a class="code" href="structDBusHeader.html#67df8bff43c10e2d4f6ae36b56ee5814">data</a>) +
<a name="l00551"></a>00551 _dbus_string_get_length (&message-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>)) >
<a name="l00552"></a>00552 <a class="code" href="group__DBusMessageInternals.html#g2c5c6aef45dd0b5cc10c800f986a7ce7">MAX_MESSAGE_SIZE_TO_CACHE</a>)
<a name="l00553"></a>00553 <span class="keywordflow">goto</span> out;
<a name="l00554"></a>00554
<a name="l00555"></a>00555 <span class="keywordflow">if</span> (message_cache_count >= <a class="code" href="group__DBusMessageInternals.html#geab2038ce58cd314dc1f23103abec5b0">MAX_MESSAGE_CACHE_SIZE</a>)
<a name="l00556"></a>00556 <span class="keywordflow">goto</span> out;
<a name="l00557"></a>00557
<a name="l00558"></a>00558 <span class="comment">/* Find empty slot */</span>
<a name="l00559"></a>00559 i = 0;
<a name="l00560"></a>00560 <span class="keywordflow">while</span> (message_cache[i] != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l00561"></a>00561 ++i;
<a name="l00562"></a>00562
<a name="l00563"></a>00563 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (i < <a class="code" href="group__DBusMessageInternals.html#geab2038ce58cd314dc1f23103abec5b0">MAX_MESSAGE_CACHE_SIZE</a>);
<a name="l00564"></a>00564
<a name="l00565"></a>00565 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message_cache[i] == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00566"></a>00566 message_cache[i] = message;
<a name="l00567"></a>00567 message_cache_count += 1;
<a name="l00568"></a>00568 was_cached = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00569"></a>00569 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l00570"></a>00570 <span class="preprocessor"></span> message-><a class="code" href="structDBusMessage.html#c71fa5534264093e6af8bc41f15237c8">in_cache</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00571"></a>00571 <span class="preprocessor">#endif</span>
<a name="l00572"></a>00572 <span class="preprocessor"></span>
<a name="l00573"></a>00573 out:
<a name="l00574"></a>00574 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message-><a class="code" href="structDBusMessage.html#324c5377e0be18dd84ac519ab2d23f0d">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> == 0);
<a name="l00575"></a>00575
<a name="l00576"></a>00576 <a class="code" href="group__DBusInternalsUtils.html#g1b7db80a2ea11235768ec8aa698df0a5">_DBUS_UNLOCK</a> (message_cache);
<a name="l00577"></a>00577
<a name="l00578"></a>00578 <span class="keywordflow">if</span> (!was_cached)
<a name="l00579"></a>00579 dbus_message_finalize (message);
<a name="l00580"></a>00580 }
<a name="l00581"></a>00581
<a name="l00582"></a>00582 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l00583"></a>00583 <span class="preprocessor"></span><span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00584"></a>00584 _dbus_message_iter_check (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *iter)
<a name="l00585"></a>00585 {
<a name="l00586"></a>00586 <span class="keywordflow">if</span> (iter == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l00587"></a>00587 {
<a name="l00588"></a>00588 <a class="code" href="group__DBusInternalsUtils.html#g63f2f8a068454b781f214ba596e313b4">_dbus_warn_check_failed</a> (<span class="stringliteral">"dbus message iterator is NULL\n"</span>);
<a name="l00589"></a>00589 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00590"></a>00590 }
<a name="l00591"></a>00591
<a name="l00592"></a>00592 <span class="keywordflow">if</span> (iter-><a class="code" href="structDBusMessageRealIter.html#835b7990b2909beb06fc2dc38b76a089">iter_type</a> == DBUS_MESSAGE_ITER_TYPE_READER)
<a name="l00593"></a>00593 {
<a name="l00594"></a>00594 <span class="keywordflow">if</span> (iter-><a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>.<a class="code" href="structDBusMessageRealIter.html#e5c4e45b0a5d6642850144f642d7db67">reader</a>.<a class="code" href="structDBusTypeReader.html#eb0846d954066f420e1df98b81148702">byte_order</a> != iter-><a class="code" href="structDBusMessageRealIter.html#552cb582c65645ed46d9d1ad38ece3c7">message</a>-><a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a>)
<a name="l00595"></a>00595 {
<a name="l00596"></a>00596 <a class="code" href="group__DBusInternalsUtils.html#g63f2f8a068454b781f214ba596e313b4">_dbus_warn_check_failed</a> (<span class="stringliteral">"dbus message changed byte order since iterator was created\n"</span>);
<a name="l00597"></a>00597 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00598"></a>00598 }
<a name="l00599"></a>00599 <span class="comment">/* because we swap the message into compiler order when you init an iter */</span>
<a name="l00600"></a>00600 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (iter-><a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>.<a class="code" href="structDBusMessageRealIter.html#e5c4e45b0a5d6642850144f642d7db67">reader</a>.<a class="code" href="structDBusTypeReader.html#eb0846d954066f420e1df98b81148702">byte_order</a> == DBUS_COMPILER_BYTE_ORDER);
<a name="l00601"></a>00601 }
<a name="l00602"></a>00602 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (iter-><a class="code" href="structDBusMessageRealIter.html#835b7990b2909beb06fc2dc38b76a089">iter_type</a> == DBUS_MESSAGE_ITER_TYPE_WRITER)
<a name="l00603"></a>00603 {
<a name="l00604"></a>00604 <span class="keywordflow">if</span> (iter-><a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>.<a class="code" href="structDBusMessageRealIter.html#93bc11bb1521743170b0b411b32140cf">writer</a>.<a class="code" href="structDBusTypeWriter.html#6c4baf0b7148cf3f76924b654dada148">byte_order</a> != iter-><a class="code" href="structDBusMessageRealIter.html#552cb582c65645ed46d9d1ad38ece3c7">message</a>-><a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a>)
<a name="l00605"></a>00605 {
<a name="l00606"></a>00606 <a class="code" href="group__DBusInternalsUtils.html#g63f2f8a068454b781f214ba596e313b4">_dbus_warn_check_failed</a> (<span class="stringliteral">"dbus message changed byte order since append iterator was created\n"</span>);
<a name="l00607"></a>00607 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00608"></a>00608 }
<a name="l00609"></a>00609 <span class="comment">/* because we swap the message into compiler order when you init an iter */</span>
<a name="l00610"></a>00610 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (iter-><a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>.<a class="code" href="structDBusMessageRealIter.html#93bc11bb1521743170b0b411b32140cf">writer</a>.<a class="code" href="structDBusTypeWriter.html#6c4baf0b7148cf3f76924b654dada148">byte_order</a> == DBUS_COMPILER_BYTE_ORDER);
<a name="l00611"></a>00611 }
<a name="l00612"></a>00612 <span class="keywordflow">else</span>
<a name="l00613"></a>00613 {
<a name="l00614"></a>00614 <a class="code" href="group__DBusInternalsUtils.html#g63f2f8a068454b781f214ba596e313b4">_dbus_warn_check_failed</a> (<span class="stringliteral">"dbus message iterator looks uninitialized or corrupted\n"</span>);
<a name="l00615"></a>00615 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00616"></a>00616 }
<a name="l00617"></a>00617
<a name="l00618"></a>00618 <span class="keywordflow">if</span> (iter-><a class="code" href="structDBusMessageRealIter.html#c10324f74497a5c2288eef8fbcd3ae42">changed_stamp</a> != iter-><a class="code" href="structDBusMessageRealIter.html#552cb582c65645ed46d9d1ad38ece3c7">message</a>-><a class="code" href="structDBusMessage.html#5d102e908f6ff96a5a0aa6a39b4963a8">changed_stamp</a>)
<a name="l00619"></a>00619 {
<a name="l00620"></a>00620 <a class="code" href="group__DBusInternalsUtils.html#g63f2f8a068454b781f214ba596e313b4">_dbus_warn_check_failed</a> (<span class="stringliteral">"dbus message iterator invalid because the message has been modified (or perhaps the iterator is just uninitialized)\n"</span>);
<a name="l00621"></a>00621 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00622"></a>00622 }
<a name="l00623"></a>00623
<a name="l00624"></a>00624 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00625"></a>00625 }
<a name="l00626"></a>00626 <span class="preprocessor">#endif </span><span class="comment">/* DBUS_DISABLE_CHECKS */</span>
<a name="l00627"></a>00627
<a name="l00640"></a>00640 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00641"></a><a class="code" href="group__DBusMessageInternals.html#g1ae02a435d19c3363e11c74b08c43ab2">00641</a> <a class="code" href="group__DBusMessageInternals.html#g1ae02a435d19c3363e11c74b08c43ab2">_dbus_message_iter_get_args_valist</a> (<a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *iter,
<a name="l00642"></a>00642 <a class="code" href="structDBusError.html">DBusError</a> *error,
<a name="l00643"></a>00643 <span class="keywordtype">int</span> first_arg_type,
<a name="l00644"></a>00644 va_list var_args)
<a name="l00645"></a>00645 {
<a name="l00646"></a>00646 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)iter;
<a name="l00647"></a>00647 <span class="keywordtype">int</span> spec_type, msg_type, i;
<a name="l00648"></a>00648 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l00649"></a>00649
<a name="l00650"></a>00650 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (_dbus_message_iter_check (real));
<a name="l00651"></a>00651
<a name="l00652"></a>00652 retval = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00653"></a>00653
<a name="l00654"></a>00654 spec_type = first_arg_type;
<a name="l00655"></a>00655 i = 0;
<a name="l00656"></a>00656
<a name="l00657"></a>00657 <span class="keywordflow">while</span> (spec_type != <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>)
<a name="l00658"></a>00658 {
<a name="l00659"></a>00659 msg_type = <a class="code" href="group__DBusMessage.html#g72703026e43a44ed341ff58ef03c6a4f">dbus_message_iter_get_arg_type</a> (iter);
<a name="l00660"></a>00660
<a name="l00661"></a>00661 <span class="keywordflow">if</span> (msg_type != spec_type)
<a name="l00662"></a>00662 {
<a name="l00663"></a>00663 <a class="code" href="group__DBusErrors.html#g4e1b4b297468006781a957129ad9cf00">dbus_set_error</a> (error, <a class="code" href="group__DBusProtocol.html#gcf5321b161193ad66d5bdf5c910a9792">DBUS_ERROR_INVALID_ARGS</a>,
<a name="l00664"></a>00664 <span class="stringliteral">"Argument %d is specified to be of type \"%s\", but "</span>
<a name="l00665"></a>00665 <span class="stringliteral">"is actually of type \"%s\"\n"</span>, i,
<a name="l00666"></a>00666 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (spec_type),
<a name="l00667"></a>00667 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (msg_type));
<a name="l00668"></a>00668
<a name="l00669"></a>00669 <span class="keywordflow">goto</span> out;
<a name="l00670"></a>00670 }
<a name="l00671"></a>00671
<a name="l00672"></a>00672 <span class="keywordflow">if</span> (<a class="code" href="group__DBusSignature.html#g2d8d39cba08f450645a17651478a0ad4">dbus_type_is_basic</a> (spec_type))
<a name="l00673"></a>00673 {
<a name="l00674"></a>00674 <a class="code" href="unionDBusBasicValue.html">DBusBasicValue</a> *ptr;
<a name="l00675"></a>00675
<a name="l00676"></a>00676 ptr = va_arg (var_args, <a class="code" href="unionDBusBasicValue.html">DBusBasicValue</a>*);
<a name="l00677"></a>00677
<a name="l00678"></a>00678 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (ptr != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00679"></a>00679
<a name="l00680"></a>00680 <a class="code" href="group__DBusMarshal.html#ga54355ee98d6721d7a29b5ae7d92eb9a">_dbus_type_reader_read_basic</a> (&real->u.reader,
<a name="l00681"></a>00681 ptr);
<a name="l00682"></a>00682 }
<a name="l00683"></a>00683 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (spec_type == <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>)
<a name="l00684"></a>00684 {
<a name="l00685"></a>00685 <span class="keywordtype">int</span> element_type;
<a name="l00686"></a>00686 <span class="keywordtype">int</span> spec_element_type;
<a name="l00687"></a>00687 <span class="keyword">const</span> <a class="code" href="unionDBusBasicValue.html">DBusBasicValue</a> **ptr;
<a name="l00688"></a>00688 <span class="keywordtype">int</span> *n_elements_p;
<a name="l00689"></a>00689 <a class="code" href="structDBusTypeReader.html">DBusTypeReader</a> array;
<a name="l00690"></a>00690
<a name="l00691"></a>00691 spec_element_type = va_arg (var_args, <span class="keywordtype">int</span>);
<a name="l00692"></a>00692 element_type = <a class="code" href="group__DBusMarshal.html#g6e5439f7ca5ee8a1ce943ddab7611d0d">_dbus_type_reader_get_element_type</a> (&real->u.reader);
<a name="l00693"></a>00693
<a name="l00694"></a>00694 <span class="keywordflow">if</span> (spec_element_type != element_type)
<a name="l00695"></a>00695 {
<a name="l00696"></a>00696 <a class="code" href="group__DBusErrors.html#g4e1b4b297468006781a957129ad9cf00">dbus_set_error</a> (error, <a class="code" href="group__DBusProtocol.html#gcf5321b161193ad66d5bdf5c910a9792">DBUS_ERROR_INVALID_ARGS</a>,
<a name="l00697"></a>00697 <span class="stringliteral">"Argument %d is specified to be an array of \"%s\", but "</span>
<a name="l00698"></a>00698 <span class="stringliteral">"is actually an array of \"%s\"\n"</span>,
<a name="l00699"></a>00699 i,
<a name="l00700"></a>00700 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (spec_element_type),
<a name="l00701"></a>00701 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (element_type));
<a name="l00702"></a>00702
<a name="l00703"></a>00703 <span class="keywordflow">goto</span> out;
<a name="l00704"></a>00704 }
<a name="l00705"></a>00705
<a name="l00706"></a>00706 <span class="keywordflow">if</span> (<a class="code" href="group__DBusSignature.html#g435ffc74ae015cc193175f5b864872bc">dbus_type_is_fixed</a> (spec_element_type))
<a name="l00707"></a>00707 {
<a name="l00708"></a>00708 ptr = va_arg (var_args, <span class="keyword">const</span> <a class="code" href="unionDBusBasicValue.html">DBusBasicValue</a>**);
<a name="l00709"></a>00709 n_elements_p = va_arg (var_args, <span class="keywordtype">int</span>*);
<a name="l00710"></a>00710
<a name="l00711"></a>00711 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (ptr != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00712"></a>00712 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (n_elements_p != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00713"></a>00713
<a name="l00714"></a>00714 <a class="code" href="group__DBusMarshal.html#g082b410820c74b2a6ca816a8e0c91803">_dbus_type_reader_recurse</a> (&real->u.reader, &array);
<a name="l00715"></a>00715
<a name="l00716"></a>00716 <a class="code" href="group__DBusMarshal.html#ge9a65c05e58ace9c83352f65af2fe745">_dbus_type_reader_read_fixed_multi</a> (&array,
<a name="l00717"></a>00717 ptr, n_elements_p);
<a name="l00718"></a>00718 }
<a name="l00719"></a>00719 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (spec_element_type == <a class="code" href="group__DBusProtocol.html#g7eb77066dadf5415896b44c56d93acce">DBUS_TYPE_STRING</a> ||
<a name="l00720"></a>00720 spec_element_type == <a class="code" href="group__DBusProtocol.html#g26ed6c20c3d9f0b50ea0a1cf80be3279">DBUS_TYPE_SIGNATURE</a> ||
<a name="l00721"></a>00721 spec_element_type == <a class="code" href="group__DBusProtocol.html#g31cc59c99a6cbbfcef71756e1390dc4c">DBUS_TYPE_OBJECT_PATH</a>)
<a name="l00722"></a>00722 {
<a name="l00723"></a>00723 <span class="keywordtype">char</span> ***str_array_p;
<a name="l00724"></a>00724 <span class="keywordtype">int</span> n_elements;
<a name="l00725"></a>00725 <span class="keywordtype">char</span> **str_array;
<a name="l00726"></a>00726
<a name="l00727"></a>00727 str_array_p = va_arg (var_args, <span class="keywordtype">char</span>***);
<a name="l00728"></a>00728 n_elements_p = va_arg (var_args, <span class="keywordtype">int</span>*);
<a name="l00729"></a>00729
<a name="l00730"></a>00730 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (str_array_p != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00731"></a>00731 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (n_elements_p != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00732"></a>00732
<a name="l00733"></a>00733 <span class="comment">/* Count elements in the array */</span>
<a name="l00734"></a>00734 <a class="code" href="group__DBusMarshal.html#g082b410820c74b2a6ca816a8e0c91803">_dbus_type_reader_recurse</a> (&real->u.reader, &array);
<a name="l00735"></a>00735
<a name="l00736"></a>00736 n_elements = 0;
<a name="l00737"></a>00737 <span class="keywordflow">while</span> (<a class="code" href="group__DBusMarshal.html#gb8e39cb8084247d54d7f272c51622a73">_dbus_type_reader_get_current_type</a> (&array) != <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>)
<a name="l00738"></a>00738 {
<a name="l00739"></a>00739 ++n_elements;
<a name="l00740"></a>00740 <a class="code" href="group__DBusMarshal.html#g746c09512d4905f2d2fac7ed4c3c63c2">_dbus_type_reader_next</a> (&array);
<a name="l00741"></a>00741 }
<a name="l00742"></a>00742
<a name="l00743"></a>00743 str_array = <a class="code" href="group__DBusMemory.html#gba9d823abda7f4cadbaf5177d3b8b793">dbus_new0</a> (<span class="keywordtype">char</span>*, n_elements + 1);
<a name="l00744"></a>00744 <span class="keywordflow">if</span> (str_array == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l00745"></a>00745 {
<a name="l00746"></a>00746 _DBUS_SET_OOM (error);
<a name="l00747"></a>00747 <span class="keywordflow">goto</span> out;
<a name="l00748"></a>00748 }
<a name="l00749"></a>00749
<a name="l00750"></a>00750 <span class="comment">/* Now go through and dup each string */</span>
<a name="l00751"></a>00751 <a class="code" href="group__DBusMarshal.html#g082b410820c74b2a6ca816a8e0c91803">_dbus_type_reader_recurse</a> (&real->u.reader, &array);
<a name="l00752"></a>00752
<a name="l00753"></a>00753 i = 0;
<a name="l00754"></a>00754 <span class="keywordflow">while</span> (i < n_elements)
<a name="l00755"></a>00755 {
<a name="l00756"></a>00756 <span class="keyword">const</span> <span class="keywordtype">char</span> *s;
<a name="l00757"></a>00757 <a class="code" href="group__DBusMarshal.html#ga54355ee98d6721d7a29b5ae7d92eb9a">_dbus_type_reader_read_basic</a> (&array,
<a name="l00758"></a>00758 &s);
<a name="l00759"></a>00759
<a name="l00760"></a>00760 str_array[i] = <a class="code" href="group__DBusInternalsUtils.html#g9d00d77f6595b9d7ac1baf59d44bf58c">_dbus_strdup</a> (s);
<a name="l00761"></a>00761 <span class="keywordflow">if</span> (str_array[i] == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l00762"></a>00762 {
<a name="l00763"></a>00763 <a class="code" href="group__DBusMemory.html#g6d4674de64d806d238ffd309a486754e">dbus_free_string_array</a> (str_array);
<a name="l00764"></a>00764 _DBUS_SET_OOM (error);
<a name="l00765"></a>00765 <span class="keywordflow">goto</span> out;
<a name="l00766"></a>00766 }
<a name="l00767"></a>00767
<a name="l00768"></a>00768 ++i;
<a name="l00769"></a>00769
<a name="l00770"></a>00770 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMarshal.html#g746c09512d4905f2d2fac7ed4c3c63c2">_dbus_type_reader_next</a> (&array))
<a name="l00771"></a>00771 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (i == n_elements);
<a name="l00772"></a>00772 }
<a name="l00773"></a>00773
<a name="l00774"></a>00774 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (<a class="code" href="group__DBusMarshal.html#gb8e39cb8084247d54d7f272c51622a73">_dbus_type_reader_get_current_type</a> (&array) == <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>);
<a name="l00775"></a>00775 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (i == n_elements);
<a name="l00776"></a>00776 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (str_array[i] == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l00777"></a>00777
<a name="l00778"></a>00778 *str_array_p = str_array;
<a name="l00779"></a>00779 *n_elements_p = n_elements;
<a name="l00780"></a>00780 }
<a name="l00781"></a>00781 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l00782"></a>00782 <span class="preprocessor"></span> <span class="keywordflow">else</span>
<a name="l00783"></a>00783 {
<a name="l00784"></a>00784 <a class="code" href="group__DBusInternalsUtils.html#gbea2c16d6d3fe7c4eb5b9496fc877f84">_dbus_warn</a> (<span class="stringliteral">"you can't read arrays of container types (struct, variant, array) with %s for now\n"</span>,
<a name="l00785"></a>00785 _DBUS_FUNCTION_NAME);
<a name="l00786"></a>00786 <span class="keywordflow">goto</span> out;
<a name="l00787"></a>00787 }
<a name="l00788"></a>00788 <span class="preprocessor">#endif</span>
<a name="l00789"></a>00789 <span class="preprocessor"></span> }
<a name="l00790"></a>00790 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l00791"></a>00791 <span class="preprocessor"></span> <span class="keywordflow">else</span>
<a name="l00792"></a>00792 {
<a name="l00793"></a>00793 <a class="code" href="group__DBusInternalsUtils.html#gbea2c16d6d3fe7c4eb5b9496fc877f84">_dbus_warn</a> (<span class="stringliteral">"you can only read arrays and basic types with %s for now\n"</span>,
<a name="l00794"></a>00794 _DBUS_FUNCTION_NAME);
<a name="l00795"></a>00795 <span class="keywordflow">goto</span> out;
<a name="l00796"></a>00796 }
<a name="l00797"></a>00797 <span class="preprocessor">#endif</span>
<a name="l00798"></a>00798 <span class="preprocessor"></span>
<a name="l00799"></a>00799 spec_type = va_arg (var_args, <span class="keywordtype">int</span>);
<a name="l00800"></a>00800 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMarshal.html#g746c09512d4905f2d2fac7ed4c3c63c2">_dbus_type_reader_next</a> (&real->u.reader) && spec_type != <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>)
<a name="l00801"></a>00801 {
<a name="l00802"></a>00802 <a class="code" href="group__DBusErrors.html#g4e1b4b297468006781a957129ad9cf00">dbus_set_error</a> (error, <a class="code" href="group__DBusProtocol.html#gcf5321b161193ad66d5bdf5c910a9792">DBUS_ERROR_INVALID_ARGS</a>,
<a name="l00803"></a>00803 <span class="stringliteral">"Message has only %d arguments, but more were expected"</span>, i);
<a name="l00804"></a>00804 <span class="keywordflow">goto</span> out;
<a name="l00805"></a>00805 }
<a name="l00806"></a>00806
<a name="l00807"></a>00807 i++;
<a name="l00808"></a>00808 }
<a name="l00809"></a>00809
<a name="l00810"></a>00810 retval = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00811"></a>00811
<a name="l00812"></a>00812 out:
<a name="l00813"></a>00813
<a name="l00814"></a>00814 <span class="keywordflow">return</span> retval;
<a name="l00815"></a>00815 }
<a name="l00816"></a>00816
<a name="l00875"></a>00875 <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a>
<a name="l00876"></a><a class="code" href="group__DBusMessage.html#g89b6eb41aed10c6d5f4a3bc0fe018a6b">00876</a> <a class="code" href="group__DBusMessage.html#g89b6eb41aed10c6d5f4a3bc0fe018a6b">dbus_message_get_serial</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l00877"></a>00877 {
<a name="l00878"></a>00878 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, 0);
<a name="l00879"></a>00879
<a name="l00880"></a>00880 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#g7ec7222423db42935aae4a24499ee0fb">_dbus_header_get_serial</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>);
<a name="l00881"></a>00881 }
<a name="l00882"></a>00882
<a name="l00891"></a>00891 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l00892"></a><a class="code" href="group__DBusMessage.html#gbaf9939d2ea5f1a4949e64a8737de815">00892</a> <a class="code" href="group__DBusMessage.html#gbaf9939d2ea5f1a4949e64a8737de815">dbus_message_set_reply_serial</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l00893"></a>00893 <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a> reply_serial)
<a name="l00894"></a>00894 {
<a name="l00895"></a>00895 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l00896"></a>00896 _dbus_return_val_if_fail (!message-><a class="code" href="structDBusMessage.html#c926e7027f22608d75a6dfe18680b9e7">locked</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l00897"></a>00897 _dbus_return_val_if_fail (reply_serial != 0, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>); <span class="comment">/* 0 is invalid */</span>
<a name="l00898"></a>00898
<a name="l00899"></a>00899 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#g4349de00b7754a337526e36fda133464">_dbus_header_set_field_basic</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l00900"></a>00900 <a class="code" href="group__DBusProtocol.html#g1067e28a7151a161e5fd601a3b017584">DBUS_HEADER_FIELD_REPLY_SERIAL</a>,
<a name="l00901"></a>00901 <a class="code" href="group__DBusProtocol.html#gedb1740bd8a9174b98ac593eded25d49">DBUS_TYPE_UINT32</a>,
<a name="l00902"></a>00902 &reply_serial);
<a name="l00903"></a>00903 }
<a name="l00904"></a>00904
<a name="l00911"></a>00911 <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a>
<a name="l00912"></a><a class="code" href="group__DBusMessage.html#g1d7466805d255a82109d4f71b1008ff2">00912</a> <a class="code" href="group__DBusMessage.html#g1d7466805d255a82109d4f71b1008ff2">dbus_message_get_reply_serial</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l00913"></a>00913 {
<a name="l00914"></a>00914 <a class="code" href="group__DBusTypes.html#gf513803b030613a669cc7ef199f90a8b">dbus_uint32_t</a> v_UINT32;
<a name="l00915"></a>00915
<a name="l00916"></a>00916 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, 0);
<a name="l00917"></a>00917
<a name="l00918"></a>00918 <span class="keywordflow">if</span> (<a class="code" href="group__DBusMarshal.html#g499973a18dcb17d854eaf14101a66736">_dbus_header_get_field_basic</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l00919"></a>00919 <a class="code" href="group__DBusProtocol.html#g1067e28a7151a161e5fd601a3b017584">DBUS_HEADER_FIELD_REPLY_SERIAL</a>,
<a name="l00920"></a>00920 <a class="code" href="group__DBusProtocol.html#gedb1740bd8a9174b98ac593eded25d49">DBUS_TYPE_UINT32</a>,
<a name="l00921"></a>00921 &v_UINT32))
<a name="l00922"></a>00922 <span class="keywordflow">return</span> v_UINT32;
<a name="l00923"></a>00923 <span class="keywordflow">else</span>
<a name="l00924"></a>00924 <span class="keywordflow">return</span> 0;
<a name="l00925"></a>00925 }
<a name="l00926"></a>00926
<a name="l00927"></a>00927 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l00928"></a>00928 dbus_message_finalize (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l00929"></a>00929 {
<a name="l00930"></a>00930 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message-><a class="code" href="structDBusMessage.html#324c5377e0be18dd84ac519ab2d23f0d">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> == 0);
<a name="l00931"></a>00931
<a name="l00932"></a>00932 <span class="comment">/* This calls application callbacks! */</span>
<a name="l00933"></a>00933 <a class="code" href="group__DBusDataSlot.html#gbc399733376c462c3010271a2d431e73">_dbus_data_slot_list_free</a> (&message-><a class="code" href="structDBusMessage.html#179c446523c6321e04f88a671363be19">slot_list</a>);
<a name="l00934"></a>00934
<a name="l00935"></a>00935 <a class="code" href="group__DBusList.html#g8dd69084b53361803a765e6d53d5b9d1">_dbus_list_foreach</a> (&message-><a class="code" href="structDBusMessage.html#439f34ae452c73577d7ce2541e16424b">size_counters</a>,
<a name="l00936"></a>00936 free_size_counter, message);
<a name="l00937"></a>00937 <a class="code" href="group__DBusList.html#ga36d13444a050a923941c53650b72f9d">_dbus_list_clear</a> (&message-><a class="code" href="structDBusMessage.html#439f34ae452c73577d7ce2541e16424b">size_counters</a>);
<a name="l00938"></a>00938
<a name="l00939"></a>00939 <a class="code" href="group__DBusMarshal.html#gb90a814a27aeeace7e02c4ed130539cf">_dbus_header_free</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>);
<a name="l00940"></a>00940 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&message-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>);
<a name="l00941"></a>00941
<a name="l00942"></a>00942 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message-><a class="code" href="structDBusMessage.html#324c5377e0be18dd84ac519ab2d23f0d">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> == 0);
<a name="l00943"></a>00943
<a name="l00944"></a>00944 <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (message);
<a name="l00945"></a>00945 }
<a name="l00946"></a>00946
<a name="l00947"></a>00947 <span class="keyword">static</span> <a class="code" href="structDBusMessage.html">DBusMessage</a>*
<a name="l00948"></a>00948 dbus_message_new_empty_header (<span class="keywordtype">void</span>)
<a name="l00949"></a>00949 {
<a name="l00950"></a>00950 <a class="code" href="structDBusMessage.html">DBusMessage</a> *message;
<a name="l00951"></a>00951 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> from_cache;
<a name="l00952"></a>00952
<a name="l00953"></a>00953 message = dbus_message_get_cached ();
<a name="l00954"></a>00954
<a name="l00955"></a>00955 <span class="keywordflow">if</span> (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l00956"></a>00956 {
<a name="l00957"></a>00957 from_cache = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l00958"></a>00958 }
<a name="l00959"></a>00959 <span class="keywordflow">else</span>
<a name="l00960"></a>00960 {
<a name="l00961"></a>00961 from_cache = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00962"></a>00962 message = <a class="code" href="group__DBusMemory.html#g54ccb556e7964112a825a7f46c156ca0">dbus_new</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a>, 1);
<a name="l00963"></a>00963 <span class="keywordflow">if</span> (message == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l00964"></a>00964 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l00965"></a>00965 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l00966"></a>00966 <span class="preprocessor"></span> message-><a class="code" href="structDBusMessage.html#96263aa8a777c8c661d2596911c7d592">generation</a> = <a class="code" href="group__DBusMemoryInternals.html#g7c224d82013e2bdc181c1d85dcb6f295">_dbus_current_generation</a>;
<a name="l00967"></a>00967 <span class="preprocessor">#endif</span>
<a name="l00968"></a>00968 <span class="preprocessor"></span> }
<a name="l00969"></a>00969
<a name="l00970"></a>00970 message-><a class="code" href="structDBusMessage.html#324c5377e0be18dd84ac519ab2d23f0d">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> = 1;
<a name="l00971"></a>00971 message-><a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a> = DBUS_COMPILER_BYTE_ORDER;
<a name="l00972"></a>00972 message-><a class="code" href="structDBusMessage.html#c926e7027f22608d75a6dfe18680b9e7">locked</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00973"></a>00973 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l00974"></a>00974 <span class="preprocessor"></span> message-><a class="code" href="structDBusMessage.html#c71fa5534264093e6af8bc41f15237c8">in_cache</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l00975"></a>00975 <span class="preprocessor">#endif</span>
<a name="l00976"></a>00976 <span class="preprocessor"></span> message-><a class="code" href="structDBusMessage.html#439f34ae452c73577d7ce2541e16424b">size_counters</a> = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l00977"></a>00977 message-><a class="code" href="structDBusMessage.html#b8f43d40fa870f97f1126256568cec61">size_counter_delta</a> = 0;
<a name="l00978"></a>00978 message-><a class="code" href="structDBusMessage.html#5d102e908f6ff96a5a0aa6a39b4963a8">changed_stamp</a> = 0;
<a name="l00979"></a>00979
<a name="l00980"></a>00980 <span class="keywordflow">if</span> (!from_cache)
<a name="l00981"></a>00981 <a class="code" href="group__DBusDataSlot.html#g6de49b3a1210202215d40a5a19806992">_dbus_data_slot_list_init</a> (&message-><a class="code" href="structDBusMessage.html#179c446523c6321e04f88a671363be19">slot_list</a>);
<a name="l00982"></a>00982
<a name="l00983"></a>00983 <span class="keywordflow">if</span> (from_cache)
<a name="l00984"></a>00984 {
<a name="l00985"></a>00985 <a class="code" href="group__DBusMarshal.html#gcb9244bf214bcb53d851d2ce640b3931">_dbus_header_reinit</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>, message-><a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a>);
<a name="l00986"></a>00986 <a class="code" href="group__DBusString.html#g08c423b93c28dd746dcb93e0461ab95c">_dbus_string_set_length</a> (&message-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>, 0);
<a name="l00987"></a>00987 }
<a name="l00988"></a>00988 <span class="keywordflow">else</span>
<a name="l00989"></a>00989 {
<a name="l00990"></a>00990 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMarshal.html#gf939f7ccf175ff3056f76b7673b20ccb">_dbus_header_init</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>, message-><a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a>))
<a name="l00991"></a>00991 {
<a name="l00992"></a>00992 <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (message);
<a name="l00993"></a>00993 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l00994"></a>00994 }
<a name="l00995"></a>00995
<a name="l00996"></a>00996 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g569b784beea1b4fa98f05d27e6dd0e72">_dbus_string_init_preallocated</a> (&message-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>, 32))
<a name="l00997"></a>00997 {
<a name="l00998"></a>00998 <a class="code" href="group__DBusMarshal.html#gb90a814a27aeeace7e02c4ed130539cf">_dbus_header_free</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>);
<a name="l00999"></a>00999 <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (message);
<a name="l01000"></a>01000 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01001"></a>01001 }
<a name="l01002"></a>01002 }
<a name="l01003"></a>01003
<a name="l01004"></a>01004 <span class="keywordflow">return</span> message;
<a name="l01005"></a>01005 }
<a name="l01006"></a>01006
<a name="l01019"></a>01019 <a class="code" href="structDBusMessage.html">DBusMessage</a>*
<a name="l01020"></a><a class="code" href="group__DBusMessage.html#g4b4e9fad4eb4ceda24488ab67d9f34b0">01020</a> <a class="code" href="group__DBusMessage.html#g4b4e9fad4eb4ceda24488ab67d9f34b0">dbus_message_new</a> (<span class="keywordtype">int</span> message_type)
<a name="l01021"></a>01021 {
<a name="l01022"></a>01022 <a class="code" href="structDBusMessage.html">DBusMessage</a> *message;
<a name="l01023"></a>01023
<a name="l01024"></a>01024 _dbus_return_val_if_fail (message_type != <a class="code" href="group__DBusProtocol.html#gc975525a6ce258a7a70c583c9741b516">DBUS_MESSAGE_TYPE_INVALID</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01025"></a>01025
<a name="l01026"></a>01026 message = dbus_message_new_empty_header ();
<a name="l01027"></a>01027 <span class="keywordflow">if</span> (message == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01028"></a>01028 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01029"></a>01029
<a name="l01030"></a>01030 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMarshal.html#gcabc7d2698ec08845d1af23f3409a7a9">_dbus_header_create</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l01031"></a>01031 message_type,
<a name="l01032"></a>01032 <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>))
<a name="l01033"></a>01033 {
<a name="l01034"></a>01034 <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (message);
<a name="l01035"></a>01035 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01036"></a>01036 }
<a name="l01037"></a>01037
<a name="l01038"></a>01038 <span class="keywordflow">return</span> message;
<a name="l01039"></a>01039 }
<a name="l01040"></a>01040
<a name="l01062"></a>01062 <a class="code" href="structDBusMessage.html">DBusMessage</a>*
<a name="l01063"></a><a class="code" href="group__DBusMessage.html#g1989f2ba4a7ec15fc0ac3c308310a180">01063</a> <a class="code" href="group__DBusMessage.html#g1989f2ba4a7ec15fc0ac3c308310a180">dbus_message_new_method_call</a> (<span class="keyword">const</span> <span class="keywordtype">char</span> *destination,
<a name="l01064"></a>01064 <span class="keyword">const</span> <span class="keywordtype">char</span> *path,
<a name="l01065"></a>01065 <span class="keyword">const</span> <span class="keywordtype">char</span> *interface,
<a name="l01066"></a>01066 <span class="keyword">const</span> <span class="keywordtype">char</span> *method)
<a name="l01067"></a>01067 {
<a name="l01068"></a>01068 <a class="code" href="structDBusMessage.html">DBusMessage</a> *message;
<a name="l01069"></a>01069
<a name="l01070"></a>01070 _dbus_return_val_if_fail (path != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01071"></a>01071 _dbus_return_val_if_fail (method != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01072"></a>01072 _dbus_return_val_if_fail (destination == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> ||
<a name="l01073"></a>01073 _dbus_check_is_valid_bus_name (destination), <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01074"></a>01074 _dbus_return_val_if_fail (_dbus_check_is_valid_path (path), <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01075"></a>01075 _dbus_return_val_if_fail (interface == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> ||
<a name="l01076"></a>01076 _dbus_check_is_valid_interface (interface), <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01077"></a>01077 _dbus_return_val_if_fail (_dbus_check_is_valid_member (method), <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01078"></a>01078
<a name="l01079"></a>01079 message = dbus_message_new_empty_header ();
<a name="l01080"></a>01080 <span class="keywordflow">if</span> (message == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01081"></a>01081 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01082"></a>01082
<a name="l01083"></a>01083 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMarshal.html#gcabc7d2698ec08845d1af23f3409a7a9">_dbus_header_create</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l01084"></a>01084 <a class="code" href="group__DBusProtocol.html#g09416afd76b65139eddd31e1085d9ebf">DBUS_MESSAGE_TYPE_METHOD_CALL</a>,
<a name="l01085"></a>01085 destination, path, interface, method, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>))
<a name="l01086"></a>01086 {
<a name="l01087"></a>01087 <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (message);
<a name="l01088"></a>01088 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01089"></a>01089 }
<a name="l01090"></a>01090
<a name="l01091"></a>01091 <span class="keywordflow">return</span> message;
<a name="l01092"></a>01092 }
<a name="l01093"></a>01093
<a name="l01101"></a>01101 <a class="code" href="structDBusMessage.html">DBusMessage</a>*
<a name="l01102"></a><a class="code" href="group__DBusMessage.html#gcd04d0109686b8c0d8c1416aa62dee05">01102</a> <a class="code" href="group__DBusMessage.html#gcd04d0109686b8c0d8c1416aa62dee05">dbus_message_new_method_return</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *method_call)
<a name="l01103"></a>01103 {
<a name="l01104"></a>01104 <a class="code" href="structDBusMessage.html">DBusMessage</a> *message;
<a name="l01105"></a>01105 <span class="keyword">const</span> <span class="keywordtype">char</span> *sender;
<a name="l01106"></a>01106
<a name="l01107"></a>01107 _dbus_return_val_if_fail (method_call != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01108"></a>01108
<a name="l01109"></a>01109 sender = <a class="code" href="group__DBusMessage.html#g293b1a56f01173db32602344208c6271">dbus_message_get_sender</a> (method_call);
<a name="l01110"></a>01110
<a name="l01111"></a>01111 <span class="comment">/* sender is allowed to be null here in peer-to-peer case */</span>
<a name="l01112"></a>01112
<a name="l01113"></a>01113 message = dbus_message_new_empty_header ();
<a name="l01114"></a>01114 <span class="keywordflow">if</span> (message == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01115"></a>01115 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01116"></a>01116
<a name="l01117"></a>01117 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMarshal.html#gcabc7d2698ec08845d1af23f3409a7a9">_dbus_header_create</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l01118"></a>01118 <a class="code" href="group__DBusProtocol.html#g4a9012edd7f22342f845e98150aeb858">DBUS_MESSAGE_TYPE_METHOD_RETURN</a>,
<a name="l01119"></a>01119 sender, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>))
<a name="l01120"></a>01120 {
<a name="l01121"></a>01121 <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (message);
<a name="l01122"></a>01122 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01123"></a>01123 }
<a name="l01124"></a>01124
<a name="l01125"></a>01125 <a class="code" href="group__DBusMessage.html#g3a94b84b3c3a5d37911dffca75b631aa">dbus_message_set_no_reply</a> (message, <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>);
<a name="l01126"></a>01126
<a name="l01127"></a>01127 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMessage.html#gbaf9939d2ea5f1a4949e64a8737de815">dbus_message_set_reply_serial</a> (message,
<a name="l01128"></a>01128 <a class="code" href="group__DBusMessage.html#g89b6eb41aed10c6d5f4a3bc0fe018a6b">dbus_message_get_serial</a> (method_call)))
<a name="l01129"></a>01129 {
<a name="l01130"></a>01130 <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (message);
<a name="l01131"></a>01131 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01132"></a>01132 }
<a name="l01133"></a>01133
<a name="l01134"></a>01134 <span class="keywordflow">return</span> message;
<a name="l01135"></a>01135 }
<a name="l01136"></a>01136
<a name="l01151"></a>01151 <a class="code" href="structDBusMessage.html">DBusMessage</a>*
<a name="l01152"></a><a class="code" href="group__DBusMessage.html#g9b9306115efd0fd720fc9b912f108bca">01152</a> <a class="code" href="group__DBusMessage.html#g9b9306115efd0fd720fc9b912f108bca">dbus_message_new_signal</a> (<span class="keyword">const</span> <span class="keywordtype">char</span> *path,
<a name="l01153"></a>01153 <span class="keyword">const</span> <span class="keywordtype">char</span> *interface,
<a name="l01154"></a>01154 <span class="keyword">const</span> <span class="keywordtype">char</span> *name)
<a name="l01155"></a>01155 {
<a name="l01156"></a>01156 <a class="code" href="structDBusMessage.html">DBusMessage</a> *message;
<a name="l01157"></a>01157
<a name="l01158"></a>01158 _dbus_return_val_if_fail (path != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01159"></a>01159 _dbus_return_val_if_fail (interface != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01160"></a>01160 _dbus_return_val_if_fail (name != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01161"></a>01161 _dbus_return_val_if_fail (_dbus_check_is_valid_path (path), <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01162"></a>01162 _dbus_return_val_if_fail (_dbus_check_is_valid_interface (interface), <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01163"></a>01163 _dbus_return_val_if_fail (_dbus_check_is_valid_member (name), <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01164"></a>01164
<a name="l01165"></a>01165 message = dbus_message_new_empty_header ();
<a name="l01166"></a>01166 <span class="keywordflow">if</span> (message == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01167"></a>01167 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01168"></a>01168
<a name="l01169"></a>01169 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMarshal.html#gcabc7d2698ec08845d1af23f3409a7a9">_dbus_header_create</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l01170"></a>01170 <a class="code" href="group__DBusProtocol.html#g728d893ff0c00e126517ba39835220a5">DBUS_MESSAGE_TYPE_SIGNAL</a>,
<a name="l01171"></a>01171 <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, path, interface, name, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>))
<a name="l01172"></a>01172 {
<a name="l01173"></a>01173 <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (message);
<a name="l01174"></a>01174 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01175"></a>01175 }
<a name="l01176"></a>01176
<a name="l01177"></a>01177 <a class="code" href="group__DBusMessage.html#g3a94b84b3c3a5d37911dffca75b631aa">dbus_message_set_no_reply</a> (message, <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>);
<a name="l01178"></a>01178
<a name="l01179"></a>01179 <span class="keywordflow">return</span> message;
<a name="l01180"></a>01180 }
<a name="l01181"></a>01181
<a name="l01196"></a>01196 <a class="code" href="structDBusMessage.html">DBusMessage</a>*
<a name="l01197"></a><a class="code" href="group__DBusMessage.html#g4b650525068ff3af73d22f803e70f494">01197</a> <a class="code" href="group__DBusMessage.html#g4b650525068ff3af73d22f803e70f494">dbus_message_new_error</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *reply_to,
<a name="l01198"></a>01198 <span class="keyword">const</span> <span class="keywordtype">char</span> *error_name,
<a name="l01199"></a>01199 <span class="keyword">const</span> <span class="keywordtype">char</span> *error_message)
<a name="l01200"></a>01200 {
<a name="l01201"></a>01201 <a class="code" href="structDBusMessage.html">DBusMessage</a> *message;
<a name="l01202"></a>01202 <span class="keyword">const</span> <span class="keywordtype">char</span> *sender;
<a name="l01203"></a>01203 <a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> iter;
<a name="l01204"></a>01204
<a name="l01205"></a>01205 _dbus_return_val_if_fail (reply_to != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01206"></a>01206 _dbus_return_val_if_fail (error_name != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01207"></a>01207 _dbus_return_val_if_fail (_dbus_check_is_valid_error_name (error_name), <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01208"></a>01208
<a name="l01209"></a>01209 sender = <a class="code" href="group__DBusMessage.html#g293b1a56f01173db32602344208c6271">dbus_message_get_sender</a> (reply_to);
<a name="l01210"></a>01210
<a name="l01211"></a>01211 <span class="comment">/* sender may be NULL for non-message-bus case or</span>
<a name="l01212"></a>01212 <span class="comment"> * when the message bus is dealing with an unregistered</span>
<a name="l01213"></a>01213 <span class="comment"> * connection.</span>
<a name="l01214"></a>01214 <span class="comment"> */</span>
<a name="l01215"></a>01215 message = dbus_message_new_empty_header ();
<a name="l01216"></a>01216 <span class="keywordflow">if</span> (message == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01217"></a>01217 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01218"></a>01218
<a name="l01219"></a>01219 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMarshal.html#gcabc7d2698ec08845d1af23f3409a7a9">_dbus_header_create</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l01220"></a>01220 <a class="code" href="group__DBusProtocol.html#g2b9423d95066313d73eeea8eeaf86812">DBUS_MESSAGE_TYPE_ERROR</a>,
<a name="l01221"></a>01221 sender, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, error_name))
<a name="l01222"></a>01222 {
<a name="l01223"></a>01223 <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (message);
<a name="l01224"></a>01224 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01225"></a>01225 }
<a name="l01226"></a>01226
<a name="l01227"></a>01227 <a class="code" href="group__DBusMessage.html#g3a94b84b3c3a5d37911dffca75b631aa">dbus_message_set_no_reply</a> (message, <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>);
<a name="l01228"></a>01228
<a name="l01229"></a>01229 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMessage.html#gbaf9939d2ea5f1a4949e64a8737de815">dbus_message_set_reply_serial</a> (message,
<a name="l01230"></a>01230 <a class="code" href="group__DBusMessage.html#g89b6eb41aed10c6d5f4a3bc0fe018a6b">dbus_message_get_serial</a> (reply_to)))
<a name="l01231"></a>01231 {
<a name="l01232"></a>01232 <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (message);
<a name="l01233"></a>01233 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01234"></a>01234 }
<a name="l01235"></a>01235
<a name="l01236"></a>01236 <span class="keywordflow">if</span> (error_message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01237"></a>01237 {
<a name="l01238"></a>01238 <a class="code" href="group__DBusMessage.html#g46f26e9d5553b739c7fa0a702f174917">dbus_message_iter_init_append</a> (message, &iter);
<a name="l01239"></a>01239 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMessage.html#g65eaa4a195e6c77ccfb1bf522fe3ab2e">dbus_message_iter_append_basic</a> (&iter,
<a name="l01240"></a>01240 <a class="code" href="group__DBusProtocol.html#g7eb77066dadf5415896b44c56d93acce">DBUS_TYPE_STRING</a>,
<a name="l01241"></a>01241 &error_message))
<a name="l01242"></a>01242 {
<a name="l01243"></a>01243 <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (message);
<a name="l01244"></a>01244 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01245"></a>01245 }
<a name="l01246"></a>01246 }
<a name="l01247"></a>01247
<a name="l01248"></a>01248 <span class="keywordflow">return</span> message;
<a name="l01249"></a>01249 }
<a name="l01250"></a>01250
<a name="l01267"></a>01267 <a class="code" href="structDBusMessage.html">DBusMessage</a>*
<a name="l01268"></a><a class="code" href="group__DBusMessage.html#g9a992b09b92e7d98e6e70197735eb7db">01268</a> <a class="code" href="group__DBusMessage.html#g9a992b09b92e7d98e6e70197735eb7db">dbus_message_new_error_printf</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *reply_to,
<a name="l01269"></a>01269 <span class="keyword">const</span> <span class="keywordtype">char</span> *error_name,
<a name="l01270"></a>01270 <span class="keyword">const</span> <span class="keywordtype">char</span> *error_format,
<a name="l01271"></a>01271 ...)
<a name="l01272"></a>01272 {
<a name="l01273"></a>01273 va_list args;
<a name="l01274"></a>01274 <a class="code" href="structDBusString.html">DBusString</a> str;
<a name="l01275"></a>01275 <a class="code" href="structDBusMessage.html">DBusMessage</a> *message;
<a name="l01276"></a>01276
<a name="l01277"></a>01277 _dbus_return_val_if_fail (reply_to != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01278"></a>01278 _dbus_return_val_if_fail (error_name != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01279"></a>01279 _dbus_return_val_if_fail (_dbus_check_is_valid_error_name (error_name), <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01280"></a>01280
<a name="l01281"></a>01281 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g348252317f7bb8ac43529972945830ae">_dbus_string_init</a> (&str))
<a name="l01282"></a>01282 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01283"></a>01283
<a name="l01284"></a>01284 va_start (args, error_format);
<a name="l01285"></a>01285
<a name="l01286"></a>01286 <span class="keywordflow">if</span> (<a class="code" href="group__DBusString.html#g8d794f292831d1a7edeb971b13a2c641">_dbus_string_append_printf_valist</a> (&str, error_format, args))
<a name="l01287"></a>01287 message = <a class="code" href="group__DBusMessage.html#g4b650525068ff3af73d22f803e70f494">dbus_message_new_error</a> (reply_to, error_name,
<a name="l01288"></a>01288 _dbus_string_get_const_data (&str));
<a name="l01289"></a>01289 <span class="keywordflow">else</span>
<a name="l01290"></a>01290 message = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01291"></a>01291
<a name="l01292"></a>01292 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&str);
<a name="l01293"></a>01293
<a name="l01294"></a>01294 va_end (args);
<a name="l01295"></a>01295
<a name="l01296"></a>01296 <span class="keywordflow">return</span> message;
<a name="l01297"></a>01297 }
<a name="l01298"></a>01298
<a name="l01299"></a>01299
<a name="l01310"></a>01310 <a class="code" href="structDBusMessage.html">DBusMessage</a> *
<a name="l01311"></a><a class="code" href="group__DBusMessage.html#g282ce1f3bd3f4bc0a5651fd03f11ae95">01311</a> <a class="code" href="group__DBusMessage.html#g282ce1f3bd3f4bc0a5651fd03f11ae95">dbus_message_copy</a> (<span class="keyword">const</span> <a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l01312"></a>01312 {
<a name="l01313"></a>01313 <a class="code" href="structDBusMessage.html">DBusMessage</a> *retval;
<a name="l01314"></a>01314
<a name="l01315"></a>01315 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01316"></a>01316
<a name="l01317"></a>01317 retval = <a class="code" href="group__DBusMemory.html#gba9d823abda7f4cadbaf5177d3b8b793">dbus_new0</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a>, 1);
<a name="l01318"></a>01318 <span class="keywordflow">if</span> (retval == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l01319"></a>01319 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01320"></a>01320
<a name="l01321"></a>01321 retval-><a class="code" href="structDBusMessage.html#324c5377e0be18dd84ac519ab2d23f0d">refcount</a>.<a class="code" href="structDBusAtomic.html#ef100f17856a635a9d0f3cae7a7f6bf8">value</a> = 1;
<a name="l01322"></a>01322 retval-><a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a> = message-><a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a>;
<a name="l01323"></a>01323 retval-><a class="code" href="structDBusMessage.html#c926e7027f22608d75a6dfe18680b9e7">locked</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01324"></a>01324 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l01325"></a>01325 <span class="preprocessor"></span> retval-><a class="code" href="structDBusMessage.html#96263aa8a777c8c661d2596911c7d592">generation</a> = message-><a class="code" href="structDBusMessage.html#96263aa8a777c8c661d2596911c7d592">generation</a>;
<a name="l01326"></a>01326 <span class="preprocessor">#endif</span>
<a name="l01327"></a>01327 <span class="preprocessor"></span>
<a name="l01328"></a>01328 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMarshal.html#g0d5aad82f8bf5a314dcf3f70930e254b">_dbus_header_copy</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>, &retval-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>))
<a name="l01329"></a>01329 {
<a name="l01330"></a>01330 <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (retval);
<a name="l01331"></a>01331 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01332"></a>01332 }
<a name="l01333"></a>01333
<a name="l01334"></a>01334 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g569b784beea1b4fa98f05d27e6dd0e72">_dbus_string_init_preallocated</a> (&retval-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>,
<a name="l01335"></a>01335 _dbus_string_get_length (&message-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>)))
<a name="l01336"></a>01336 {
<a name="l01337"></a>01337 <a class="code" href="group__DBusMarshal.html#gb90a814a27aeeace7e02c4ed130539cf">_dbus_header_free</a> (&retval-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>);
<a name="l01338"></a>01338 <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (retval);
<a name="l01339"></a>01339 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01340"></a>01340 }
<a name="l01341"></a>01341
<a name="l01342"></a>01342 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g3c10f0d1bcaa3b450025b9c6a8b901d7">_dbus_string_copy</a> (&message-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>, 0,
<a name="l01343"></a>01343 &retval-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>, 0))
<a name="l01344"></a>01344 <span class="keywordflow">goto</span> failed_copy;
<a name="l01345"></a>01345
<a name="l01346"></a>01346 <span class="keywordflow">return</span> retval;
<a name="l01347"></a>01347
<a name="l01348"></a>01348 failed_copy:
<a name="l01349"></a>01349 <a class="code" href="group__DBusMarshal.html#gb90a814a27aeeace7e02c4ed130539cf">_dbus_header_free</a> (&retval-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>);
<a name="l01350"></a>01350 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&retval-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>);
<a name="l01351"></a>01351 <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (retval);
<a name="l01352"></a>01352
<a name="l01353"></a>01353 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01354"></a>01354 }
<a name="l01355"></a>01355
<a name="l01356"></a>01356
<a name="l01364"></a>01364 <a class="code" href="structDBusMessage.html">DBusMessage</a> *
<a name="l01365"></a><a class="code" href="group__DBusMessage.html#g984ff98c7d031a9ea9e90ede2140d395">01365</a> <a class="code" href="group__DBusMessage.html#g984ff98c7d031a9ea9e90ede2140d395">dbus_message_ref</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l01366"></a>01366 {
<a name="l01367"></a>01367 <a class="code" href="group__DBusTypes.html#gb18afa60e9b17b6e322735bda3d863d8">dbus_int32_t</a> old_refcount;
<a name="l01368"></a>01368
<a name="l01369"></a>01369 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01370"></a>01370 _dbus_return_val_if_fail (message-><a class="code" href="structDBusMessage.html#96263aa8a777c8c661d2596911c7d592">generation</a> == <a class="code" href="group__DBusMemoryInternals.html#g7c224d82013e2bdc181c1d85dcb6f295">_dbus_current_generation</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01371"></a>01371 _dbus_return_val_if_fail (!message-><a class="code" href="structDBusMessage.html#c71fa5534264093e6af8bc41f15237c8">in_cache</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01372"></a>01372
<a name="l01373"></a>01373 old_refcount = <a class="code" href="group__DBusSysdeps.html#ge74c3fcf12acaeccdb152ef907de951c">_dbus_atomic_inc</a> (&message-><a class="code" href="structDBusMessage.html#324c5377e0be18dd84ac519ab2d23f0d">refcount</a>);
<a name="l01374"></a>01374 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (old_refcount >= 1);
<a name="l01375"></a>01375
<a name="l01376"></a>01376 <span class="keywordflow">return</span> message;
<a name="l01377"></a>01377 }
<a name="l01378"></a>01378
<a name="l01386"></a>01386 <span class="keywordtype">void</span>
<a name="l01387"></a><a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">01387</a> <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l01388"></a>01388 {
<a name="l01389"></a>01389 <a class="code" href="group__DBusTypes.html#gb18afa60e9b17b6e322735bda3d863d8">dbus_int32_t</a> old_refcount;
<a name="l01390"></a>01390
<a name="l01391"></a>01391 _dbus_return_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01392"></a>01392 _dbus_return_if_fail (message-><a class="code" href="structDBusMessage.html#96263aa8a777c8c661d2596911c7d592">generation</a> == <a class="code" href="group__DBusMemoryInternals.html#g7c224d82013e2bdc181c1d85dcb6f295">_dbus_current_generation</a>);
<a name="l01393"></a>01393 _dbus_return_if_fail (!message-><a class="code" href="structDBusMessage.html#c71fa5534264093e6af8bc41f15237c8">in_cache</a>);
<a name="l01394"></a>01394
<a name="l01395"></a>01395 old_refcount = <a class="code" href="group__DBusSysdeps.html#g3c50a069f795dceeb9172fe2b517bbdc">_dbus_atomic_dec</a> (&message-><a class="code" href="structDBusMessage.html#324c5377e0be18dd84ac519ab2d23f0d">refcount</a>);
<a name="l01396"></a>01396
<a name="l01397"></a>01397 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (old_refcount >= 0);
<a name="l01398"></a>01398
<a name="l01399"></a>01399 <span class="keywordflow">if</span> (old_refcount == 1)
<a name="l01400"></a>01400 {
<a name="l01401"></a>01401 <span class="comment">/* Calls application callbacks! */</span>
<a name="l01402"></a>01402 dbus_message_cache_or_finalize (message);
<a name="l01403"></a>01403 }
<a name="l01404"></a>01404 }
<a name="l01405"></a>01405
<a name="l01416"></a>01416 <span class="keywordtype">int</span>
<a name="l01417"></a><a class="code" href="group__DBusMessage.html#g35fbb5a1cc616426f71e6ae8a0499f6f">01417</a> <a class="code" href="group__DBusMessage.html#g35fbb5a1cc616426f71e6ae8a0499f6f">dbus_message_get_type</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l01418"></a>01418 {
<a name="l01419"></a>01419 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusProtocol.html#gc975525a6ce258a7a70c583c9741b516">DBUS_MESSAGE_TYPE_INVALID</a>);
<a name="l01420"></a>01420
<a name="l01421"></a>01421 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#g4427247494fc5c988498c5a87d42092d">_dbus_header_get_message_type</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>);
<a name="l01422"></a>01422 }
<a name="l01423"></a>01423
<a name="l01481"></a>01481 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01482"></a><a class="code" href="group__DBusMessage.html#g019a46208b411e1fc8a3a311e8f7f943">01482</a> <a class="code" href="group__DBusMessage.html#g019a46208b411e1fc8a3a311e8f7f943">dbus_message_append_args</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l01483"></a>01483 <span class="keywordtype">int</span> first_arg_type,
<a name="l01484"></a>01484 ...)
<a name="l01485"></a>01485 {
<a name="l01486"></a>01486 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l01487"></a>01487 va_list var_args;
<a name="l01488"></a>01488
<a name="l01489"></a>01489 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l01490"></a>01490
<a name="l01491"></a>01491 va_start (var_args, first_arg_type);
<a name="l01492"></a>01492 retval = <a class="code" href="group__DBusMessage.html#ga27c07bbddad40d025a222fb9c1edc48">dbus_message_append_args_valist</a> (message,
<a name="l01493"></a>01493 first_arg_type,
<a name="l01494"></a>01494 var_args);
<a name="l01495"></a>01495 va_end (var_args);
<a name="l01496"></a>01496
<a name="l01497"></a>01497 <span class="keywordflow">return</span> retval;
<a name="l01498"></a>01498 }
<a name="l01499"></a>01499
<a name="l01513"></a>01513 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01514"></a><a class="code" href="group__DBusMessage.html#ga27c07bbddad40d025a222fb9c1edc48">01514</a> <a class="code" href="group__DBusMessage.html#ga27c07bbddad40d025a222fb9c1edc48">dbus_message_append_args_valist</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l01515"></a>01515 <span class="keywordtype">int</span> first_arg_type,
<a name="l01516"></a>01516 va_list var_args)
<a name="l01517"></a>01517 {
<a name="l01518"></a>01518 <span class="keywordtype">int</span> type;
<a name="l01519"></a>01519 <a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> iter;
<a name="l01520"></a>01520
<a name="l01521"></a>01521 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l01522"></a>01522
<a name="l01523"></a>01523 type = first_arg_type;
<a name="l01524"></a>01524
<a name="l01525"></a>01525 <a class="code" href="group__DBusMessage.html#g46f26e9d5553b739c7fa0a702f174917">dbus_message_iter_init_append</a> (message, &iter);
<a name="l01526"></a>01526
<a name="l01527"></a>01527 <span class="keywordflow">while</span> (type != <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>)
<a name="l01528"></a>01528 {
<a name="l01529"></a>01529 <span class="keywordflow">if</span> (<a class="code" href="group__DBusSignature.html#g2d8d39cba08f450645a17651478a0ad4">dbus_type_is_basic</a> (type))
<a name="l01530"></a>01530 {
<a name="l01531"></a>01531 <span class="keyword">const</span> <a class="code" href="unionDBusBasicValue.html">DBusBasicValue</a> *value;
<a name="l01532"></a>01532 value = va_arg (var_args, <span class="keyword">const</span> <a class="code" href="unionDBusBasicValue.html">DBusBasicValue</a>*);
<a name="l01533"></a>01533
<a name="l01534"></a>01534 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMessage.html#g65eaa4a195e6c77ccfb1bf522fe3ab2e">dbus_message_iter_append_basic</a> (&iter,
<a name="l01535"></a>01535 type,
<a name="l01536"></a>01536 value))
<a name="l01537"></a>01537 <span class="keywordflow">goto</span> failed;
<a name="l01538"></a>01538 }
<a name="l01539"></a>01539 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>)
<a name="l01540"></a>01540 {
<a name="l01541"></a>01541 <span class="keywordtype">int</span> element_type;
<a name="l01542"></a>01542 <a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> array;
<a name="l01543"></a>01543 <span class="keywordtype">char</span> buf[2];
<a name="l01544"></a>01544
<a name="l01545"></a>01545 element_type = va_arg (var_args, <span class="keywordtype">int</span>);
<a name="l01546"></a>01546
<a name="l01547"></a>01547 buf[0] = element_type;
<a name="l01548"></a>01548 buf[1] = <span class="charliteral">'\0'</span>;
<a name="l01549"></a>01549 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMessage.html#gde4dacfedb6a33c8a2ab6fc2db3cf665">dbus_message_iter_open_container</a> (&iter,
<a name="l01550"></a>01550 <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>,
<a name="l01551"></a>01551 buf,
<a name="l01552"></a>01552 &array))
<a name="l01553"></a>01553 <span class="keywordflow">goto</span> failed;
<a name="l01554"></a>01554
<a name="l01555"></a>01555 <span class="keywordflow">if</span> (<a class="code" href="group__DBusSignature.html#g435ffc74ae015cc193175f5b864872bc">dbus_type_is_fixed</a> (element_type))
<a name="l01556"></a>01556 {
<a name="l01557"></a>01557 <span class="keyword">const</span> <a class="code" href="unionDBusBasicValue.html">DBusBasicValue</a> **value;
<a name="l01558"></a>01558 <span class="keywordtype">int</span> n_elements;
<a name="l01559"></a>01559
<a name="l01560"></a>01560 value = va_arg (var_args, <span class="keyword">const</span> <a class="code" href="unionDBusBasicValue.html">DBusBasicValue</a>**);
<a name="l01561"></a>01561 n_elements = va_arg (var_args, <span class="keywordtype">int</span>);
<a name="l01562"></a>01562
<a name="l01563"></a>01563 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMessage.html#g4f172ebd964e0f698f63295a9eccf520">dbus_message_iter_append_fixed_array</a> (&array,
<a name="l01564"></a>01564 element_type,
<a name="l01565"></a>01565 value,
<a name="l01566"></a>01566 n_elements))
<a name="l01567"></a>01567 <span class="keywordflow">goto</span> failed;
<a name="l01568"></a>01568 }
<a name="l01569"></a>01569 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (element_type == <a class="code" href="group__DBusProtocol.html#g7eb77066dadf5415896b44c56d93acce">DBUS_TYPE_STRING</a> ||
<a name="l01570"></a>01570 element_type == <a class="code" href="group__DBusProtocol.html#g26ed6c20c3d9f0b50ea0a1cf80be3279">DBUS_TYPE_SIGNATURE</a> ||
<a name="l01571"></a>01571 element_type == <a class="code" href="group__DBusProtocol.html#g31cc59c99a6cbbfcef71756e1390dc4c">DBUS_TYPE_OBJECT_PATH</a>)
<a name="l01572"></a>01572 {
<a name="l01573"></a>01573 <span class="keyword">const</span> <span class="keywordtype">char</span> ***value_p;
<a name="l01574"></a>01574 <span class="keyword">const</span> <span class="keywordtype">char</span> **value;
<a name="l01575"></a>01575 <span class="keywordtype">int</span> n_elements;
<a name="l01576"></a>01576 <span class="keywordtype">int</span> i;
<a name="l01577"></a>01577
<a name="l01578"></a>01578 value_p = va_arg (var_args, <span class="keyword">const</span> <span class="keywordtype">char</span>***);
<a name="l01579"></a>01579 n_elements = va_arg (var_args, <span class="keywordtype">int</span>);
<a name="l01580"></a>01580
<a name="l01581"></a>01581 value = *value_p;
<a name="l01582"></a>01582
<a name="l01583"></a>01583 i = 0;
<a name="l01584"></a>01584 <span class="keywordflow">while</span> (i < n_elements)
<a name="l01585"></a>01585 {
<a name="l01586"></a>01586 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMessage.html#g65eaa4a195e6c77ccfb1bf522fe3ab2e">dbus_message_iter_append_basic</a> (&array,
<a name="l01587"></a>01587 element_type,
<a name="l01588"></a>01588 &value[i]))
<a name="l01589"></a>01589 <span class="keywordflow">goto</span> failed;
<a name="l01590"></a>01590 ++i;
<a name="l01591"></a>01591 }
<a name="l01592"></a>01592 }
<a name="l01593"></a>01593 <span class="keywordflow">else</span>
<a name="l01594"></a>01594 {
<a name="l01595"></a>01595 <a class="code" href="group__DBusInternalsUtils.html#gbea2c16d6d3fe7c4eb5b9496fc877f84">_dbus_warn</a> (<span class="stringliteral">"arrays of %s can't be appended with %s for now\n"</span>,
<a name="l01596"></a>01596 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (element_type),
<a name="l01597"></a>01597 _DBUS_FUNCTION_NAME);
<a name="l01598"></a>01598 <span class="keywordflow">goto</span> failed;
<a name="l01599"></a>01599 }
<a name="l01600"></a>01600
<a name="l01601"></a>01601 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMessage.html#geae534bd1e513d527c9650f9c884e1d5">dbus_message_iter_close_container</a> (&iter, &array))
<a name="l01602"></a>01602 <span class="keywordflow">goto</span> failed;
<a name="l01603"></a>01603 }
<a name="l01604"></a>01604 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l01605"></a>01605 <span class="preprocessor"></span> <span class="keywordflow">else</span>
<a name="l01606"></a>01606 {
<a name="l01607"></a>01607 <a class="code" href="group__DBusInternalsUtils.html#gbea2c16d6d3fe7c4eb5b9496fc877f84">_dbus_warn</a> (<span class="stringliteral">"type %s isn't supported yet in %s\n"</span>,
<a name="l01608"></a>01608 <a class="code" href="group__DBusMarshal.html#g48a595c2b26dce6e9c25ce040e5247e5">_dbus_type_to_string</a> (type), _DBUS_FUNCTION_NAME);
<a name="l01609"></a>01609 <span class="keywordflow">goto</span> failed;
<a name="l01610"></a>01610 }
<a name="l01611"></a>01611 <span class="preprocessor">#endif</span>
<a name="l01612"></a>01612 <span class="preprocessor"></span>
<a name="l01613"></a>01613 type = va_arg (var_args, <span class="keywordtype">int</span>);
<a name="l01614"></a>01614 }
<a name="l01615"></a>01615
<a name="l01616"></a>01616 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l01617"></a>01617
<a name="l01618"></a>01618 failed:
<a name="l01619"></a>01619 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l01620"></a>01620 }
<a name="l01621"></a>01621
<a name="l01657"></a>01657 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01658"></a><a class="code" href="group__DBusMessage.html#gaa5e339a728a7baa786e6c30e3b840b7">01658</a> <a class="code" href="group__DBusMessage.html#gaa5e339a728a7baa786e6c30e3b840b7">dbus_message_get_args</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l01659"></a>01659 <a class="code" href="structDBusError.html">DBusError</a> *error,
<a name="l01660"></a>01660 <span class="keywordtype">int</span> first_arg_type,
<a name="l01661"></a>01661 ...)
<a name="l01662"></a>01662 {
<a name="l01663"></a>01663 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l01664"></a>01664 va_list var_args;
<a name="l01665"></a>01665
<a name="l01666"></a>01666 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l01667"></a>01667 _dbus_return_val_if_error_is_set (error, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l01668"></a>01668
<a name="l01669"></a>01669 va_start (var_args, first_arg_type);
<a name="l01670"></a>01670 retval = <a class="code" href="group__DBusMessage.html#ga0c3255d3cb8dc40e0e478f163889e4f">dbus_message_get_args_valist</a> (message, error, first_arg_type, var_args);
<a name="l01671"></a>01671 va_end (var_args);
<a name="l01672"></a>01672
<a name="l01673"></a>01673 <span class="keywordflow">return</span> retval;
<a name="l01674"></a>01674 }
<a name="l01675"></a>01675
<a name="l01686"></a>01686 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01687"></a><a class="code" href="group__DBusMessage.html#ga0c3255d3cb8dc40e0e478f163889e4f">01687</a> <a class="code" href="group__DBusMessage.html#ga0c3255d3cb8dc40e0e478f163889e4f">dbus_message_get_args_valist</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l01688"></a>01688 <a class="code" href="structDBusError.html">DBusError</a> *error,
<a name="l01689"></a>01689 <span class="keywordtype">int</span> first_arg_type,
<a name="l01690"></a>01690 va_list var_args)
<a name="l01691"></a>01691 {
<a name="l01692"></a>01692 <a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> iter;
<a name="l01693"></a>01693
<a name="l01694"></a>01694 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l01695"></a>01695 _dbus_return_val_if_error_is_set (error, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l01696"></a>01696
<a name="l01697"></a>01697 <a class="code" href="group__DBusMessage.html#g974a0f898df186afc6b61c976b4d84b5">dbus_message_iter_init</a> (message, &iter);
<a name="l01698"></a>01698 <span class="keywordflow">return</span> <a class="code" href="group__DBusMessageInternals.html#g1ae02a435d19c3363e11c74b08c43ab2">_dbus_message_iter_get_args_valist</a> (&iter, error, first_arg_type, var_args);
<a name="l01699"></a>01699 }
<a name="l01700"></a>01700
<a name="l01701"></a>01701 <span class="keyword">static</span> <span class="keywordtype">void</span>
<a name="l01702"></a>01702 _dbus_message_iter_init_common (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l01703"></a>01703 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real,
<a name="l01704"></a>01704 <span class="keywordtype">int</span> iter_type)
<a name="l01705"></a>01705 {
<a name="l01706"></a>01706 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (<span class="keyword">sizeof</span> (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a>) <= <span class="keyword">sizeof</span> (<a class="code" href="structDBusMessageIter.html">DBusMessageIter</a>));
<a name="l01707"></a>01707
<a name="l01708"></a>01708 <span class="comment">/* Since the iterator will read or write who-knows-what from the</span>
<a name="l01709"></a>01709 <span class="comment"> * message, we need to get in the right byte order</span>
<a name="l01710"></a>01710 <span class="comment"> */</span>
<a name="l01711"></a>01711 <a class="code" href="group__DBusMessageInternals.html#g1dfae386ef0d4d808584abeafc44e8ca">ensure_byte_order</a> (message);
<a name="l01712"></a>01712
<a name="l01713"></a>01713 real-><a class="code" href="structDBusMessageRealIter.html#552cb582c65645ed46d9d1ad38ece3c7">message</a> = message;
<a name="l01714"></a>01714 real-><a class="code" href="structDBusMessageRealIter.html#c10324f74497a5c2288eef8fbcd3ae42">changed_stamp</a> = message-><a class="code" href="structDBusMessage.html#5d102e908f6ff96a5a0aa6a39b4963a8">changed_stamp</a>;
<a name="l01715"></a>01715 real-><a class="code" href="structDBusMessageRealIter.html#835b7990b2909beb06fc2dc38b76a089">iter_type</a> = iter_type;
<a name="l01716"></a>01716 real-><a class="code" href="structDBusMessageRealIter.html#93789e6f814d55b5952fee34d286f6d6">sig_refcount</a> = 0;
<a name="l01717"></a>01717 }
<a name="l01718"></a>01718
<a name="l01741"></a>01741 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01742"></a><a class="code" href="group__DBusMessage.html#g974a0f898df186afc6b61c976b4d84b5">01742</a> <a class="code" href="group__DBusMessage.html#g974a0f898df186afc6b61c976b4d84b5">dbus_message_iter_init</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l01743"></a>01743 <a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *iter)
<a name="l01744"></a>01744 {
<a name="l01745"></a>01745 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)iter;
<a name="l01746"></a>01746 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *type_str;
<a name="l01747"></a>01747 <span class="keywordtype">int</span> type_pos;
<a name="l01748"></a>01748
<a name="l01749"></a>01749 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l01750"></a>01750 _dbus_return_val_if_fail (iter != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l01751"></a>01751
<a name="l01752"></a>01752 get_const_signature (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>, &type_str, &type_pos);
<a name="l01753"></a>01753
<a name="l01754"></a>01754 _dbus_message_iter_init_common (message, real,
<a name="l01755"></a>01755 DBUS_MESSAGE_ITER_TYPE_READER);
<a name="l01756"></a>01756
<a name="l01757"></a>01757 <a class="code" href="group__DBusMarshal.html#g35d70cf69b1196518367e3e68e9b2dd2">_dbus_type_reader_init</a> (&real-><a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>.<a class="code" href="structDBusMessageRealIter.html#e5c4e45b0a5d6642850144f642d7db67">reader</a>,
<a name="l01758"></a>01758 message-><a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a>,
<a name="l01759"></a>01759 type_str, type_pos,
<a name="l01760"></a>01760 &message-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>,
<a name="l01761"></a>01761 0);
<a name="l01762"></a>01762
<a name="l01763"></a>01763 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#gb8e39cb8084247d54d7f272c51622a73">_dbus_type_reader_get_current_type</a> (&real-><a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>.<a class="code" href="structDBusMessageRealIter.html#e5c4e45b0a5d6642850144f642d7db67">reader</a>) != <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>;
<a name="l01764"></a>01764 }
<a name="l01765"></a>01765
<a name="l01772"></a>01772 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01773"></a><a class="code" href="group__DBusMessage.html#ge64e076a12dbf61e3806b90ece202031">01773</a> <a class="code" href="group__DBusMessage.html#ge64e076a12dbf61e3806b90ece202031">dbus_message_iter_has_next</a> (<a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *iter)
<a name="l01774"></a>01774 {
<a name="l01775"></a>01775 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)iter;
<a name="l01776"></a>01776
<a name="l01777"></a>01777 _dbus_return_val_if_fail (_dbus_message_iter_check (real), <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l01778"></a>01778 _dbus_return_val_if_fail (real->iter_type == DBUS_MESSAGE_ITER_TYPE_READER, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l01779"></a>01779
<a name="l01780"></a>01780 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#g97a59dbd1597ef1b267457e809f095de">_dbus_type_reader_has_next</a> (&real->u.reader);
<a name="l01781"></a>01781 }
<a name="l01782"></a>01782
<a name="l01791"></a>01791 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l01792"></a><a class="code" href="group__DBusMessage.html#g3995194302ab3c81e2e058796a62b9ab">01792</a> <a class="code" href="group__DBusMessage.html#g3995194302ab3c81e2e058796a62b9ab">dbus_message_iter_next</a> (<a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *iter)
<a name="l01793"></a>01793 {
<a name="l01794"></a>01794 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)iter;
<a name="l01795"></a>01795
<a name="l01796"></a>01796 _dbus_return_val_if_fail (_dbus_message_iter_check (real), <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l01797"></a>01797 _dbus_return_val_if_fail (real->iter_type == DBUS_MESSAGE_ITER_TYPE_READER, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l01798"></a>01798
<a name="l01799"></a>01799 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#g746c09512d4905f2d2fac7ed4c3c63c2">_dbus_type_reader_next</a> (&real->u.reader);
<a name="l01800"></a>01800 }
<a name="l01801"></a>01801
<a name="l01816"></a>01816 <span class="keywordtype">int</span>
<a name="l01817"></a><a class="code" href="group__DBusMessage.html#g72703026e43a44ed341ff58ef03c6a4f">01817</a> <a class="code" href="group__DBusMessage.html#g72703026e43a44ed341ff58ef03c6a4f">dbus_message_iter_get_arg_type</a> (<a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *iter)
<a name="l01818"></a>01818 {
<a name="l01819"></a>01819 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)iter;
<a name="l01820"></a>01820
<a name="l01821"></a>01821 _dbus_return_val_if_fail (_dbus_message_iter_check (real), <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>);
<a name="l01822"></a>01822 _dbus_return_val_if_fail (real->iter_type == DBUS_MESSAGE_ITER_TYPE_READER, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l01823"></a>01823
<a name="l01824"></a>01824 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#gb8e39cb8084247d54d7f272c51622a73">_dbus_type_reader_get_current_type</a> (&real->u.reader);
<a name="l01825"></a>01825 }
<a name="l01826"></a>01826
<a name="l01835"></a>01835 <span class="keywordtype">int</span>
<a name="l01836"></a><a class="code" href="group__DBusMessage.html#g48b97dced0e9d7f9794337cad953b30d">01836</a> <a class="code" href="group__DBusMessage.html#g48b97dced0e9d7f9794337cad953b30d">dbus_message_iter_get_element_type</a> (<a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *iter)
<a name="l01837"></a>01837 {
<a name="l01838"></a>01838 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)iter;
<a name="l01839"></a>01839
<a name="l01840"></a>01840 _dbus_return_val_if_fail (_dbus_message_iter_check (real), <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>);
<a name="l01841"></a>01841 _dbus_return_val_if_fail (real->iter_type == DBUS_MESSAGE_ITER_TYPE_READER, <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>);
<a name="l01842"></a>01842 _dbus_return_val_if_fail (<a class="code" href="group__DBusMessage.html#g72703026e43a44ed341ff58ef03c6a4f">dbus_message_iter_get_arg_type</a> (iter) == <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>, <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>);
<a name="l01843"></a>01843
<a name="l01844"></a>01844 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#g6e5439f7ca5ee8a1ce943ddab7611d0d">_dbus_type_reader_get_element_type</a> (&real->u.reader);
<a name="l01845"></a>01845 }
<a name="l01846"></a>01846
<a name="l01872"></a>01872 <span class="keywordtype">void</span>
<a name="l01873"></a><a class="code" href="group__DBusMessage.html#gb4d9f88a33467735ad8b466f97dca16d">01873</a> <a class="code" href="group__DBusMessage.html#gb4d9f88a33467735ad8b466f97dca16d">dbus_message_iter_recurse</a> (<a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *iter,
<a name="l01874"></a>01874 <a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *sub)
<a name="l01875"></a>01875 {
<a name="l01876"></a>01876 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)iter;
<a name="l01877"></a>01877 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real_sub = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)sub;
<a name="l01878"></a>01878
<a name="l01879"></a>01879 _dbus_return_if_fail (_dbus_message_iter_check (real));
<a name="l01880"></a>01880 _dbus_return_if_fail (sub != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01881"></a>01881
<a name="l01882"></a>01882 *real_sub = *real;
<a name="l01883"></a>01883 <a class="code" href="group__DBusMarshal.html#g082b410820c74b2a6ca816a8e0c91803">_dbus_type_reader_recurse</a> (&real->u.reader, &real_sub-><a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>.<a class="code" href="structDBusMessageRealIter.html#e5c4e45b0a5d6642850144f642d7db67">reader</a>);
<a name="l01884"></a>01884 }
<a name="l01885"></a>01885
<a name="l01897"></a>01897 <span class="keywordtype">char</span> *
<a name="l01898"></a><a class="code" href="group__DBusMessage.html#gaa7e45dbfa7e722ec2337cb3e070e491">01898</a> <a class="code" href="group__DBusMessage.html#gaa7e45dbfa7e722ec2337cb3e070e491">dbus_message_iter_get_signature</a> (<a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *iter)
<a name="l01899"></a>01899 {
<a name="l01900"></a>01900 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *sig;
<a name="l01901"></a>01901 <a class="code" href="structDBusString.html">DBusString</a> retstr;
<a name="l01902"></a>01902 <span class="keywordtype">char</span> *ret;
<a name="l01903"></a>01903 <span class="keywordtype">int</span> start, len;
<a name="l01904"></a>01904 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)iter;
<a name="l01905"></a>01905
<a name="l01906"></a>01906 _dbus_return_val_if_fail (_dbus_message_iter_check (real), <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01907"></a>01907
<a name="l01908"></a>01908 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g348252317f7bb8ac43529972945830ae">_dbus_string_init</a> (&retstr))
<a name="l01909"></a>01909 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01910"></a>01910
<a name="l01911"></a>01911 <a class="code" href="group__DBusMarshal.html#g4578cc623c8b0978ca780ce0ab950fdb">_dbus_type_reader_get_signature</a> (&real->u.reader, &sig,
<a name="l01912"></a>01912 &start, &len);
<a name="l01913"></a>01913 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g724656b7091b910965bd1af42d0b7bab">_dbus_string_append_len</a> (&retstr,
<a name="l01914"></a>01914 _dbus_string_get_const_data (sig) + start,
<a name="l01915"></a>01915 len))
<a name="l01916"></a>01916 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01917"></a>01917 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g556cc30c3ab032dbc63e217119f0d1f5">_dbus_string_steal_data</a> (&retstr, &ret))
<a name="l01918"></a>01918 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l01919"></a>01919 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&retstr);
<a name="l01920"></a>01920 <span class="keywordflow">return</span> ret;
<a name="l01921"></a>01921 }
<a name="l01922"></a>01922
<a name="l01963"></a>01963 <span class="keywordtype">void</span>
<a name="l01964"></a><a class="code" href="group__DBusMessage.html#g4b250c5093870ca2b74958d73f996fe4">01964</a> <a class="code" href="group__DBusMessage.html#g4b250c5093870ca2b74958d73f996fe4">dbus_message_iter_get_basic</a> (<a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *iter,
<a name="l01965"></a>01965 <span class="keywordtype">void</span> *value)
<a name="l01966"></a>01966 {
<a name="l01967"></a>01967 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)iter;
<a name="l01968"></a>01968
<a name="l01969"></a>01969 _dbus_return_if_fail (_dbus_message_iter_check (real));
<a name="l01970"></a>01970 _dbus_return_if_fail (value != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l01971"></a>01971
<a name="l01972"></a>01972 <a class="code" href="group__DBusMarshal.html#ga54355ee98d6721d7a29b5ae7d92eb9a">_dbus_type_reader_read_basic</a> (&real->u.reader,
<a name="l01973"></a>01973 value);
<a name="l01974"></a>01974 }
<a name="l01975"></a>01975
<a name="l01994"></a>01994 <span class="keywordtype">int</span>
<a name="l01995"></a><a class="code" href="group__DBusMessage.html#gf7b41787068f957d0914c492635b1235">01995</a> <a class="code" href="group__DBusMessage.html#gf7b41787068f957d0914c492635b1235">dbus_message_iter_get_array_len</a> (<a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *iter)
<a name="l01996"></a>01996 {
<a name="l01997"></a>01997 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)iter;
<a name="l01998"></a>01998
<a name="l01999"></a>01999 _dbus_return_val_if_fail (_dbus_message_iter_check (real), 0);
<a name="l02000"></a>02000
<a name="l02001"></a>02001 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#g7def93d676d528c261aa274cea41c29d">_dbus_type_reader_get_array_length</a> (&real->u.reader);
<a name="l02002"></a>02002 }
<a name="l02003"></a>02003
<a name="l02035"></a>02035 <span class="keywordtype">void</span>
<a name="l02036"></a><a class="code" href="group__DBusMessage.html#gae8493b610544a9c155fdeab63a8e102">02036</a> <a class="code" href="group__DBusMessage.html#gae8493b610544a9c155fdeab63a8e102">dbus_message_iter_get_fixed_array</a> (<a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *iter,
<a name="l02037"></a>02037 <span class="keywordtype">void</span> *value,
<a name="l02038"></a>02038 <span class="keywordtype">int</span> *n_elements)
<a name="l02039"></a>02039 {
<a name="l02040"></a>02040 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)iter;
<a name="l02041"></a>02041 <span class="keywordtype">int</span> subtype = <a class="code" href="group__DBusMarshal.html#gb8e39cb8084247d54d7f272c51622a73">_dbus_type_reader_get_current_type</a>(&real-><a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>.<a class="code" href="structDBusMessageRealIter.html#e5c4e45b0a5d6642850144f642d7db67">reader</a>);
<a name="l02042"></a>02042
<a name="l02043"></a>02043 _dbus_return_if_fail (_dbus_message_iter_check (real));
<a name="l02044"></a>02044 _dbus_return_if_fail (value != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02045"></a>02045 _dbus_return_if_fail ((subtype == <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>) ||
<a name="l02046"></a>02046 <a class="code" href="group__DBusSignature.html#g435ffc74ae015cc193175f5b864872bc">dbus_type_is_fixed</a> (subtype));
<a name="l02047"></a>02047
<a name="l02048"></a>02048 <a class="code" href="group__DBusMarshal.html#ge9a65c05e58ace9c83352f65af2fe745">_dbus_type_reader_read_fixed_multi</a> (&real->u.reader,
<a name="l02049"></a>02049 value, n_elements);
<a name="l02050"></a>02050 }
<a name="l02051"></a>02051
<a name="l02063"></a>02063 <span class="keywordtype">void</span>
<a name="l02064"></a><a class="code" href="group__DBusMessage.html#g46f26e9d5553b739c7fa0a702f174917">02064</a> <a class="code" href="group__DBusMessage.html#g46f26e9d5553b739c7fa0a702f174917">dbus_message_iter_init_append</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l02065"></a>02065 <a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *iter)
<a name="l02066"></a>02066 {
<a name="l02067"></a>02067 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)iter;
<a name="l02068"></a>02068
<a name="l02069"></a>02069 _dbus_return_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02070"></a>02070 _dbus_return_if_fail (iter != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02071"></a>02071
<a name="l02072"></a>02072 _dbus_message_iter_init_common (message, real,
<a name="l02073"></a>02073 DBUS_MESSAGE_ITER_TYPE_WRITER);
<a name="l02074"></a>02074
<a name="l02075"></a>02075 <span class="comment">/* We create the signature string and point iterators at it "on demand"</span>
<a name="l02076"></a>02076 <span class="comment"> * when a value is actually appended. That means that init() never fails</span>
<a name="l02077"></a>02077 <span class="comment"> * due to OOM.</span>
<a name="l02078"></a>02078 <span class="comment"> */</span>
<a name="l02079"></a>02079 <a class="code" href="group__DBusMarshal.html#ga9ecf7e96d5323bc1da9cdf0c3f2c1e7">_dbus_type_writer_init_types_delayed</a> (&real-><a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>.<a class="code" href="structDBusMessageRealIter.html#93bc11bb1521743170b0b411b32140cf">writer</a>,
<a name="l02080"></a>02080 message-><a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a>,
<a name="l02081"></a>02081 &message-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>,
<a name="l02082"></a>02082 _dbus_string_get_length (&message-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>));
<a name="l02083"></a>02083 }
<a name="l02084"></a>02084
<a name="l02093"></a>02093 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02094"></a>02094 _dbus_message_iter_open_signature (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real)
<a name="l02095"></a>02095 {
<a name="l02096"></a>02096 <a class="code" href="structDBusString.html">DBusString</a> *str;
<a name="l02097"></a>02097 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *current_sig;
<a name="l02098"></a>02098 <span class="keywordtype">int</span> current_sig_pos;
<a name="l02099"></a>02099
<a name="l02100"></a>02100 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (real-><a class="code" href="structDBusMessageRealIter.html#835b7990b2909beb06fc2dc38b76a089">iter_type</a> == DBUS_MESSAGE_ITER_TYPE_WRITER);
<a name="l02101"></a>02101
<a name="l02102"></a>02102 <span class="keywordflow">if</span> (real-><a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>.<a class="code" href="structDBusMessageRealIter.html#93bc11bb1521743170b0b411b32140cf">writer</a>.<a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a> != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02103"></a>02103 {
<a name="l02104"></a>02104 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (real-><a class="code" href="structDBusMessageRealIter.html#93789e6f814d55b5952fee34d286f6d6">sig_refcount</a> > 0);
<a name="l02105"></a>02105 real-><a class="code" href="structDBusMessageRealIter.html#93789e6f814d55b5952fee34d286f6d6">sig_refcount</a> += 1;
<a name="l02106"></a>02106 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02107"></a>02107 }
<a name="l02108"></a>02108
<a name="l02109"></a>02109 str = <a class="code" href="group__DBusMemory.html#g54ccb556e7964112a825a7f46c156ca0">dbus_new</a> (<a class="code" href="structDBusString.html">DBusString</a>, 1);
<a name="l02110"></a>02110 <span class="keywordflow">if</span> (str == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02111"></a>02111 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02112"></a>02112
<a name="l02113"></a>02113 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMarshal.html#gf4661ba8e7067f349ba03c9f5776bbb0">_dbus_header_get_field_raw</a> (&real-><a class="code" href="structDBusMessageRealIter.html#552cb582c65645ed46d9d1ad38ece3c7">message</a>-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l02114"></a>02114 <a class="code" href="group__DBusProtocol.html#g450d63fa110d3cb891082e23291580b4">DBUS_HEADER_FIELD_SIGNATURE</a>,
<a name="l02115"></a>02115 &current_sig, &current_sig_pos))
<a name="l02116"></a>02116 current_sig = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l02117"></a>02117
<a name="l02118"></a>02118 <span class="keywordflow">if</span> (current_sig)
<a name="l02119"></a>02119 {
<a name="l02120"></a>02120 <span class="keywordtype">int</span> current_len;
<a name="l02121"></a>02121
<a name="l02122"></a>02122 current_len = _dbus_string_get_byte (current_sig, current_sig_pos);
<a name="l02123"></a>02123 current_sig_pos += 1; <span class="comment">/* move on to sig data */</span>
<a name="l02124"></a>02124
<a name="l02125"></a>02125 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g569b784beea1b4fa98f05d27e6dd0e72">_dbus_string_init_preallocated</a> (str, current_len + 4))
<a name="l02126"></a>02126 {
<a name="l02127"></a>02127 <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (str);
<a name="l02128"></a>02128 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02129"></a>02129 }
<a name="l02130"></a>02130
<a name="l02131"></a>02131 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gf5f13bc7ac7a623516930d26ae2589bf">_dbus_string_copy_len</a> (current_sig, current_sig_pos, current_len,
<a name="l02132"></a>02132 str, 0))
<a name="l02133"></a>02133 {
<a name="l02134"></a>02134 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (str);
<a name="l02135"></a>02135 <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (str);
<a name="l02136"></a>02136 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02137"></a>02137 }
<a name="l02138"></a>02138 }
<a name="l02139"></a>02139 <span class="keywordflow">else</span>
<a name="l02140"></a>02140 {
<a name="l02141"></a>02141 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g569b784beea1b4fa98f05d27e6dd0e72">_dbus_string_init_preallocated</a> (str, 4))
<a name="l02142"></a>02142 {
<a name="l02143"></a>02143 <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (str);
<a name="l02144"></a>02144 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02145"></a>02145 }
<a name="l02146"></a>02146 }
<a name="l02147"></a>02147
<a name="l02148"></a>02148 real-><a class="code" href="structDBusMessageRealIter.html#93789e6f814d55b5952fee34d286f6d6">sig_refcount</a> = 1;
<a name="l02149"></a>02149
<a name="l02150"></a>02150 <a class="code" href="group__DBusMarshal.html#g863b2f232a21582f9e6fe1951b09da91">_dbus_type_writer_add_types</a> (&real-><a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>.<a class="code" href="structDBusMessageRealIter.html#93bc11bb1521743170b0b411b32140cf">writer</a>,
<a name="l02151"></a>02151 str, _dbus_string_get_length (str));
<a name="l02152"></a>02152 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02153"></a>02153 }
<a name="l02154"></a>02154
<a name="l02164"></a>02164 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02165"></a>02165 _dbus_message_iter_close_signature (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real)
<a name="l02166"></a>02166 {
<a name="l02167"></a>02167 <a class="code" href="structDBusString.html">DBusString</a> *str;
<a name="l02168"></a>02168 <span class="keyword">const</span> <span class="keywordtype">char</span> *v_STRING;
<a name="l02169"></a>02169 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l02170"></a>02170
<a name="l02171"></a>02171 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (real-><a class="code" href="structDBusMessageRealIter.html#835b7990b2909beb06fc2dc38b76a089">iter_type</a> == DBUS_MESSAGE_ITER_TYPE_WRITER);
<a name="l02172"></a>02172 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (real-><a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>.<a class="code" href="structDBusMessageRealIter.html#93bc11bb1521743170b0b411b32140cf">writer</a>.<a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a> != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02173"></a>02173 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (real-><a class="code" href="structDBusMessageRealIter.html#93789e6f814d55b5952fee34d286f6d6">sig_refcount</a> > 0);
<a name="l02174"></a>02174
<a name="l02175"></a>02175 real-><a class="code" href="structDBusMessageRealIter.html#93789e6f814d55b5952fee34d286f6d6">sig_refcount</a> -= 1;
<a name="l02176"></a>02176
<a name="l02177"></a>02177 <span class="keywordflow">if</span> (real-><a class="code" href="structDBusMessageRealIter.html#93789e6f814d55b5952fee34d286f6d6">sig_refcount</a> > 0)
<a name="l02178"></a>02178 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02179"></a>02179 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (real-><a class="code" href="structDBusMessageRealIter.html#93789e6f814d55b5952fee34d286f6d6">sig_refcount</a> == 0);
<a name="l02180"></a>02180
<a name="l02181"></a>02181 retval = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02182"></a>02182
<a name="l02183"></a>02183 str = real-><a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>.<a class="code" href="structDBusMessageRealIter.html#93bc11bb1521743170b0b411b32140cf">writer</a>.<a class="code" href="structDBusTypeWriter.html#95204ef3a9cf29ee31687032b142b836">type_str</a>;
<a name="l02184"></a>02184
<a name="l02185"></a>02185 v_STRING = _dbus_string_get_const_data (str);
<a name="l02186"></a>02186 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMarshal.html#g4349de00b7754a337526e36fda133464">_dbus_header_set_field_basic</a> (&real-><a class="code" href="structDBusMessageRealIter.html#552cb582c65645ed46d9d1ad38ece3c7">message</a>-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l02187"></a>02187 <a class="code" href="group__DBusProtocol.html#g450d63fa110d3cb891082e23291580b4">DBUS_HEADER_FIELD_SIGNATURE</a>,
<a name="l02188"></a>02188 <a class="code" href="group__DBusProtocol.html#g26ed6c20c3d9f0b50ea0a1cf80be3279">DBUS_TYPE_SIGNATURE</a>,
<a name="l02189"></a>02189 &v_STRING))
<a name="l02190"></a>02190 retval = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02191"></a>02191
<a name="l02192"></a>02192 <a class="code" href="group__DBusMarshal.html#g34d675b57c7e6569707d22ba76ae010c">_dbus_type_writer_remove_types</a> (&real-><a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>.<a class="code" href="structDBusMessageRealIter.html#93bc11bb1521743170b0b411b32140cf">writer</a>);
<a name="l02193"></a>02193 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (str);
<a name="l02194"></a>02194 <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (str);
<a name="l02195"></a>02195
<a name="l02196"></a>02196 <span class="keywordflow">return</span> retval;
<a name="l02197"></a>02197 }
<a name="l02198"></a>02198
<a name="l02199"></a>02199 <span class="preprocessor">#ifndef DBUS_DISABLE_CHECKS</span>
<a name="l02200"></a>02200 <span class="preprocessor"></span><span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02201"></a>02201 _dbus_message_iter_append_check (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *iter)
<a name="l02202"></a>02202 {
<a name="l02203"></a>02203 <span class="keywordflow">if</span> (!_dbus_message_iter_check (iter))
<a name="l02204"></a>02204 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02205"></a>02205
<a name="l02206"></a>02206 <span class="keywordflow">if</span> (iter->message->locked)
<a name="l02207"></a>02207 {
<a name="l02208"></a>02208 <a class="code" href="group__DBusInternalsUtils.html#g63f2f8a068454b781f214ba596e313b4">_dbus_warn_check_failed</a> (<span class="stringliteral">"dbus append iterator can't be used: message is locked (has already been sent)\n"</span>);
<a name="l02209"></a>02209 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02210"></a>02210 }
<a name="l02211"></a>02211
<a name="l02212"></a>02212 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02213"></a>02213 }
<a name="l02214"></a>02214 <span class="preprocessor">#endif </span><span class="comment">/* DBUS_DISABLE_CHECKS */</span>
<a name="l02215"></a>02215
<a name="l02231"></a>02231 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02232"></a><a class="code" href="group__DBusMessage.html#g65eaa4a195e6c77ccfb1bf522fe3ab2e">02232</a> <a class="code" href="group__DBusMessage.html#g65eaa4a195e6c77ccfb1bf522fe3ab2e">dbus_message_iter_append_basic</a> (<a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *iter,
<a name="l02233"></a>02233 <span class="keywordtype">int</span> type,
<a name="l02234"></a>02234 <span class="keyword">const</span> <span class="keywordtype">void</span> *value)
<a name="l02235"></a>02235 {
<a name="l02236"></a>02236 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)iter;
<a name="l02237"></a>02237 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> ret;
<a name="l02238"></a>02238
<a name="l02239"></a>02239 _dbus_return_val_if_fail (_dbus_message_iter_append_check (real), <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02240"></a>02240 _dbus_return_val_if_fail (real->iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02241"></a>02241 _dbus_return_val_if_fail (<a class="code" href="group__DBusSignature.html#g2d8d39cba08f450645a17651478a0ad4">dbus_type_is_basic</a> (type), <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02242"></a>02242 _dbus_return_val_if_fail (value != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02243"></a>02243
<a name="l02244"></a>02244 <span class="keywordflow">if</span> (!_dbus_message_iter_open_signature (real))
<a name="l02245"></a>02245 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02246"></a>02246
<a name="l02247"></a>02247 ret = <a class="code" href="group__DBusMarshal.html#g0103b0214766b0ff1ca05bcc7f1e631b">_dbus_type_writer_write_basic</a> (&real->u.writer, type, value);
<a name="l02248"></a>02248
<a name="l02249"></a>02249 <span class="keywordflow">if</span> (!_dbus_message_iter_close_signature (real))
<a name="l02250"></a>02250 ret = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02251"></a>02251
<a name="l02252"></a>02252 <span class="keywordflow">return</span> ret;
<a name="l02253"></a>02253 }
<a name="l02254"></a>02254
<a name="l02290"></a>02290 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02291"></a><a class="code" href="group__DBusMessage.html#g4f172ebd964e0f698f63295a9eccf520">02291</a> <a class="code" href="group__DBusMessage.html#g4f172ebd964e0f698f63295a9eccf520">dbus_message_iter_append_fixed_array</a> (<a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *iter,
<a name="l02292"></a>02292 <span class="keywordtype">int</span> element_type,
<a name="l02293"></a>02293 <span class="keyword">const</span> <span class="keywordtype">void</span> *value,
<a name="l02294"></a>02294 <span class="keywordtype">int</span> n_elements)
<a name="l02295"></a>02295 {
<a name="l02296"></a>02296 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)iter;
<a name="l02297"></a>02297 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> ret;
<a name="l02298"></a>02298
<a name="l02299"></a>02299 _dbus_return_val_if_fail (_dbus_message_iter_append_check (real), <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02300"></a>02300 _dbus_return_val_if_fail (real->iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02301"></a>02301 _dbus_return_val_if_fail (<a class="code" href="group__DBusSignature.html#g435ffc74ae015cc193175f5b864872bc">dbus_type_is_fixed</a> (element_type), <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02302"></a>02302 _dbus_return_val_if_fail (real->u.writer.container_type == <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02303"></a>02303 _dbus_return_val_if_fail (value != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02304"></a>02304 _dbus_return_val_if_fail (n_elements >= 0, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02305"></a>02305 _dbus_return_val_if_fail (n_elements <=
<a name="l02306"></a>02306 <a class="code" href="group__DBusProtocol.html#g5265afa08a4c8d9f31b287a57e8cb217">DBUS_MAXIMUM_ARRAY_LENGTH</a> / <a class="code" href="group__DBusMarshal.html#g2ba80f227880e442c140bc67653b0abd">_dbus_type_get_alignment</a> (element_type),
<a name="l02307"></a>02307 <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02308"></a>02308
<a name="l02309"></a>02309 ret = <a class="code" href="group__DBusMarshal.html#gcf99495cbed7462992b6a231563b4528">_dbus_type_writer_write_fixed_multi</a> (&real->u.writer, element_type, value, n_elements);
<a name="l02310"></a>02310
<a name="l02311"></a>02311 <span class="keywordflow">return</span> ret;
<a name="l02312"></a>02312 }
<a name="l02313"></a>02313
<a name="l02335"></a>02335 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02336"></a><a class="code" href="group__DBusMessage.html#gde4dacfedb6a33c8a2ab6fc2db3cf665">02336</a> <a class="code" href="group__DBusMessage.html#gde4dacfedb6a33c8a2ab6fc2db3cf665">dbus_message_iter_open_container</a> (<a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *iter,
<a name="l02337"></a>02337 <span class="keywordtype">int</span> type,
<a name="l02338"></a>02338 <span class="keyword">const</span> <span class="keywordtype">char</span> *contained_signature,
<a name="l02339"></a>02339 <a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *sub)
<a name="l02340"></a>02340 {
<a name="l02341"></a>02341 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)iter;
<a name="l02342"></a>02342 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real_sub = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)sub;
<a name="l02343"></a>02343 <a class="code" href="structDBusString.html">DBusString</a> contained_str;
<a name="l02344"></a>02344
<a name="l02345"></a>02345 _dbus_return_val_if_fail (_dbus_message_iter_append_check (real), <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02346"></a>02346 _dbus_return_val_if_fail (real->iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02347"></a>02347 _dbus_return_val_if_fail (<a class="code" href="group__DBusSignature.html#g6e71e0d4ab3d7e68d2b906f43475544b">dbus_type_is_container</a> (type), <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02348"></a>02348 _dbus_return_val_if_fail (sub != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02349"></a>02349 _dbus_return_val_if_fail ((type == <a class="code" href="group__DBusProtocol.html#ge4b22a74b9edb0ec0ff6e0294794d3f9">DBUS_TYPE_STRUCT</a> &&
<a name="l02350"></a>02350 contained_signature == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) ||
<a name="l02351"></a>02351 (type == <a class="code" href="group__DBusProtocol.html#gd2fc8e6c50e0ad927f4249fb9e53ca97">DBUS_TYPE_DICT_ENTRY</a> &&
<a name="l02352"></a>02352 contained_signature == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) ||
<a name="l02353"></a>02353 (type == <a class="code" href="group__DBusProtocol.html#g4aa7a463ad2bce4e9aa95e3e397ddcf1">DBUS_TYPE_VARIANT</a> &&
<a name="l02354"></a>02354 contained_signature != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>) ||
<a name="l02355"></a>02355 (type == <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a> &&
<a name="l02356"></a>02356 contained_signature != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>), <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02357"></a>02357
<a name="l02358"></a>02358 <span class="comment">/* this would fail if the contained_signature is a dict entry, since</span>
<a name="l02359"></a>02359 <span class="comment"> * dict entries are invalid signatures standalone (they must be in</span>
<a name="l02360"></a>02360 <span class="comment"> * an array)</span>
<a name="l02361"></a>02361 <span class="comment"> */</span>
<a name="l02362"></a>02362 _dbus_return_val_if_fail ((type == <a class="code" href="group__DBusProtocol.html#g8912f600f81a773066ca03d9163613a9">DBUS_TYPE_ARRAY</a> && contained_signature && *contained_signature == <a class="code" href="group__DBusProtocol.html#gd51b5f7a2e6d927295479dd371f6b353">DBUS_DICT_ENTRY_BEGIN_CHAR</a>) ||
<a name="l02363"></a>02363 (contained_signature == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> ||
<a name="l02364"></a>02364 _dbus_check_is_valid_signature (contained_signature)),
<a name="l02365"></a>02365 <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02366"></a>02366
<a name="l02367"></a>02367 <span class="keywordflow">if</span> (!_dbus_message_iter_open_signature (real))
<a name="l02368"></a>02368 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02369"></a>02369
<a name="l02370"></a>02370 *real_sub = *real;
<a name="l02371"></a>02371
<a name="l02372"></a>02372 <span class="keywordflow">if</span> (contained_signature != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02373"></a>02373 {
<a name="l02374"></a>02374 <a class="code" href="group__DBusString.html#g374640ddfa2f0b27a8356e2379ba8043">_dbus_string_init_const</a> (&contained_str, contained_signature);
<a name="l02375"></a>02375
<a name="l02376"></a>02376 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#g4c0a1036e59dac270141052d951baff2">_dbus_type_writer_recurse</a> (&real->u.writer,
<a name="l02377"></a>02377 type,
<a name="l02378"></a>02378 &contained_str, 0,
<a name="l02379"></a>02379 &real_sub-><a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>.<a class="code" href="structDBusMessageRealIter.html#93bc11bb1521743170b0b411b32140cf">writer</a>);
<a name="l02380"></a>02380 }
<a name="l02381"></a>02381 <span class="keywordflow">else</span>
<a name="l02382"></a>02382 {
<a name="l02383"></a>02383 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#g4c0a1036e59dac270141052d951baff2">_dbus_type_writer_recurse</a> (&real->u.writer,
<a name="l02384"></a>02384 type,
<a name="l02385"></a>02385 <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, 0,
<a name="l02386"></a>02386 &real_sub-><a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>.<a class="code" href="structDBusMessageRealIter.html#93bc11bb1521743170b0b411b32140cf">writer</a>);
<a name="l02387"></a>02387 }
<a name="l02388"></a>02388 }
<a name="l02389"></a>02389
<a name="l02390"></a>02390
<a name="l02404"></a>02404 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02405"></a><a class="code" href="group__DBusMessage.html#geae534bd1e513d527c9650f9c884e1d5">02405</a> <a class="code" href="group__DBusMessage.html#geae534bd1e513d527c9650f9c884e1d5">dbus_message_iter_close_container</a> (<a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *iter,
<a name="l02406"></a>02406 <a class="code" href="structDBusMessageIter.html">DBusMessageIter</a> *sub)
<a name="l02407"></a>02407 {
<a name="l02408"></a>02408 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)iter;
<a name="l02409"></a>02409 <a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *real_sub = (<a class="code" href="group__DBusMessageInternals.html#g84c2bf86d0ab364b236814eafb85e512">DBusMessageRealIter</a> *)sub;
<a name="l02410"></a>02410 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> ret;
<a name="l02411"></a>02411
<a name="l02412"></a>02412 _dbus_return_val_if_fail (_dbus_message_iter_append_check (real), <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02413"></a>02413 _dbus_return_val_if_fail (real->iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02414"></a>02414 _dbus_return_val_if_fail (_dbus_message_iter_append_check (real_sub), <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02415"></a>02415 _dbus_return_val_if_fail (real_sub->iter_type == DBUS_MESSAGE_ITER_TYPE_WRITER, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02416"></a>02416
<a name="l02417"></a>02417 ret = <a class="code" href="group__DBusMarshal.html#gcbe7eddf4f9c19da91b742087fcc111a">_dbus_type_writer_unrecurse</a> (&real->u.writer,
<a name="l02418"></a>02418 &real_sub->u.writer);
<a name="l02419"></a>02419
<a name="l02420"></a>02420 <span class="keywordflow">if</span> (!_dbus_message_iter_close_signature (real))
<a name="l02421"></a>02421 ret = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02422"></a>02422
<a name="l02423"></a>02423 <span class="keywordflow">return</span> ret;
<a name="l02424"></a>02424 }
<a name="l02425"></a>02425
<a name="l02442"></a>02442 <span class="keywordtype">void</span>
<a name="l02443"></a><a class="code" href="group__DBusMessage.html#g3a94b84b3c3a5d37911dffca75b631aa">02443</a> <a class="code" href="group__DBusMessage.html#g3a94b84b3c3a5d37911dffca75b631aa">dbus_message_set_no_reply</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l02444"></a>02444 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> no_reply)
<a name="l02445"></a>02445 {
<a name="l02446"></a>02446 _dbus_return_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02447"></a>02447 _dbus_return_if_fail (!message-><a class="code" href="structDBusMessage.html#c926e7027f22608d75a6dfe18680b9e7">locked</a>);
<a name="l02448"></a>02448
<a name="l02449"></a>02449 <a class="code" href="group__DBusMarshal.html#gd2073f8f2f2ba3b710aa929dced34cc3">_dbus_header_toggle_flag</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l02450"></a>02450 <a class="code" href="group__DBusProtocol.html#g0dcac038284250b3b0bff49cb4990626">DBUS_HEADER_FLAG_NO_REPLY_EXPECTED</a>,
<a name="l02451"></a>02451 no_reply);
<a name="l02452"></a>02452 }
<a name="l02453"></a>02453
<a name="l02461"></a>02461 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02462"></a><a class="code" href="group__DBusMessage.html#g4b64da1ca7dd2e95698b8da0f57a6182">02462</a> <a class="code" href="group__DBusMessage.html#g4b64da1ca7dd2e95698b8da0f57a6182">dbus_message_get_no_reply</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l02463"></a>02463 {
<a name="l02464"></a>02464 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02465"></a>02465
<a name="l02466"></a>02466 <span class="keywordflow">return</span> <a class="code" href="group__DBusMarshal.html#g56619efed3088554b8760edd246b4157">_dbus_header_get_flag</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l02467"></a>02467 <a class="code" href="group__DBusProtocol.html#g0dcac038284250b3b0bff49cb4990626">DBUS_HEADER_FLAG_NO_REPLY_EXPECTED</a>);
<a name="l02468"></a>02468 }
<a name="l02469"></a>02469
<a name="l02484"></a>02484 <span class="keywordtype">void</span>
<a name="l02485"></a><a class="code" href="group__DBusMessage.html#g4661483ba92680738ae2cdf6f21cbccf">02485</a> <a class="code" href="group__DBusMessage.html#g4661483ba92680738ae2cdf6f21cbccf">dbus_message_set_auto_start</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l02486"></a>02486 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> auto_start)
<a name="l02487"></a>02487 {
<a name="l02488"></a>02488 _dbus_return_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02489"></a>02489 _dbus_return_if_fail (!message-><a class="code" href="structDBusMessage.html#c926e7027f22608d75a6dfe18680b9e7">locked</a>);
<a name="l02490"></a>02490
<a name="l02491"></a>02491 <a class="code" href="group__DBusMarshal.html#gd2073f8f2f2ba3b710aa929dced34cc3">_dbus_header_toggle_flag</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l02492"></a>02492 <a class="code" href="group__DBusProtocol.html#g8699fad5ce9ff93fe3f3471ba463dd40">DBUS_HEADER_FLAG_NO_AUTO_START</a>,
<a name="l02493"></a>02493 !auto_start);
<a name="l02494"></a>02494 }
<a name="l02495"></a>02495
<a name="l02503"></a>02503 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02504"></a><a class="code" href="group__DBusMessage.html#gb258a310afec2bb6b592f70f304d49be">02504</a> <a class="code" href="group__DBusMessage.html#gb258a310afec2bb6b592f70f304d49be">dbus_message_get_auto_start</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l02505"></a>02505 {
<a name="l02506"></a>02506 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02507"></a>02507
<a name="l02508"></a>02508 <span class="keywordflow">return</span> !<a class="code" href="group__DBusMarshal.html#g56619efed3088554b8760edd246b4157">_dbus_header_get_flag</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l02509"></a>02509 <a class="code" href="group__DBusProtocol.html#g8699fad5ce9ff93fe3f3471ba463dd40">DBUS_HEADER_FLAG_NO_AUTO_START</a>);
<a name="l02510"></a>02510 }
<a name="l02511"></a>02511
<a name="l02512"></a>02512
<a name="l02525"></a>02525 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02526"></a><a class="code" href="group__DBusMessage.html#g45528c050c738412a25abfe4aea3233e">02526</a> <a class="code" href="group__DBusMessage.html#g45528c050c738412a25abfe4aea3233e">dbus_message_set_path</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l02527"></a>02527 <span class="keyword">const</span> <span class="keywordtype">char</span> *object_path)
<a name="l02528"></a>02528 {
<a name="l02529"></a>02529 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02530"></a>02530 _dbus_return_val_if_fail (!message-><a class="code" href="structDBusMessage.html#c926e7027f22608d75a6dfe18680b9e7">locked</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02531"></a>02531 _dbus_return_val_if_fail (object_path == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> ||
<a name="l02532"></a>02532 _dbus_check_is_valid_path (object_path),
<a name="l02533"></a>02533 <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02534"></a>02534
<a name="l02535"></a>02535 <span class="keywordflow">return</span> set_or_delete_string_field (message,
<a name="l02536"></a>02536 <a class="code" href="group__DBusProtocol.html#g0cd885e6e808b28ff082a7f8a2c9f579">DBUS_HEADER_FIELD_PATH</a>,
<a name="l02537"></a>02537 <a class="code" href="group__DBusProtocol.html#g31cc59c99a6cbbfcef71756e1390dc4c">DBUS_TYPE_OBJECT_PATH</a>,
<a name="l02538"></a>02538 object_path);
<a name="l02539"></a>02539 }
<a name="l02540"></a>02540
<a name="l02554"></a>02554 <span class="keyword">const</span> <span class="keywordtype">char</span>*
<a name="l02555"></a><a class="code" href="group__DBusMessage.html#gc14b5439d9cde712a8e1fd19a4c7dae0">02555</a> <a class="code" href="group__DBusMessage.html#gc14b5439d9cde712a8e1fd19a4c7dae0">dbus_message_get_path</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l02556"></a>02556 {
<a name="l02557"></a>02557 <span class="keyword">const</span> <span class="keywordtype">char</span> *v;
<a name="l02558"></a>02558
<a name="l02559"></a>02559 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02560"></a>02560
<a name="l02561"></a>02561 v = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>; <span class="comment">/* in case field doesn't exist */</span>
<a name="l02562"></a>02562 <a class="code" href="group__DBusMarshal.html#g499973a18dcb17d854eaf14101a66736">_dbus_header_get_field_basic</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l02563"></a>02563 <a class="code" href="group__DBusProtocol.html#g0cd885e6e808b28ff082a7f8a2c9f579">DBUS_HEADER_FIELD_PATH</a>,
<a name="l02564"></a>02564 <a class="code" href="group__DBusProtocol.html#g31cc59c99a6cbbfcef71756e1390dc4c">DBUS_TYPE_OBJECT_PATH</a>,
<a name="l02565"></a>02565 &v);
<a name="l02566"></a>02566 <span class="keywordflow">return</span> v;
<a name="l02567"></a>02567 }
<a name="l02568"></a>02568
<a name="l02578"></a>02578 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02579"></a><a class="code" href="group__DBusMessage.html#g15c844ad4190adbae2ac80f088af1b36">02579</a> <a class="code" href="group__DBusMessage.html#g15c844ad4190adbae2ac80f088af1b36">dbus_message_has_path</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l02580"></a>02580 <span class="keyword">const</span> <span class="keywordtype">char</span> *path)
<a name="l02581"></a>02581 {
<a name="l02582"></a>02582 <span class="keyword">const</span> <span class="keywordtype">char</span> *msg_path;
<a name="l02583"></a>02583 msg_path = <a class="code" href="group__DBusMessage.html#gc14b5439d9cde712a8e1fd19a4c7dae0">dbus_message_get_path</a> (message);
<a name="l02584"></a>02584
<a name="l02585"></a>02585 <span class="keywordflow">if</span> (msg_path == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02586"></a>02586 {
<a name="l02587"></a>02587 <span class="keywordflow">if</span> (path == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02588"></a>02588 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02589"></a>02589 <span class="keywordflow">else</span>
<a name="l02590"></a>02590 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02591"></a>02591 }
<a name="l02592"></a>02592
<a name="l02593"></a>02593 <span class="keywordflow">if</span> (path == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02594"></a>02594 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02595"></a>02595
<a name="l02596"></a>02596 <span class="keywordflow">if</span> (strcmp (msg_path, path) == 0)
<a name="l02597"></a>02597 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02598"></a>02598
<a name="l02599"></a>02599 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02600"></a>02600 }
<a name="l02601"></a>02601
<a name="l02622"></a>02622 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02623"></a><a class="code" href="group__DBusMessage.html#gfae53bd88e154e18e2db6cb7578a9b36">02623</a> <a class="code" href="group__DBusMessage.html#gfae53bd88e154e18e2db6cb7578a9b36">dbus_message_get_path_decomposed</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l02624"></a>02624 <span class="keywordtype">char</span> ***path)
<a name="l02625"></a>02625 {
<a name="l02626"></a>02626 <span class="keyword">const</span> <span class="keywordtype">char</span> *v;
<a name="l02627"></a>02627
<a name="l02628"></a>02628 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02629"></a>02629 _dbus_return_val_if_fail (path != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02630"></a>02630
<a name="l02631"></a>02631 *path = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l02632"></a>02632
<a name="l02633"></a>02633 v = <a class="code" href="group__DBusMessage.html#gc14b5439d9cde712a8e1fd19a4c7dae0">dbus_message_get_path</a> (message);
<a name="l02634"></a>02634 <span class="keywordflow">if</span> (v != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02635"></a>02635 {
<a name="l02636"></a>02636 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusObjectTree.html#gb282b916368cd512842d3aaae31e65c7">_dbus_decompose_path</a> (v, strlen (v),
<a name="l02637"></a>02637 path, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>))
<a name="l02638"></a>02638 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02639"></a>02639 }
<a name="l02640"></a>02640 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02641"></a>02641 }
<a name="l02642"></a>02642
<a name="l02656"></a>02656 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02657"></a><a class="code" href="group__DBusMessage.html#g119b1f7c80d5944dc9ba6a6463827d26">02657</a> <a class="code" href="group__DBusMessage.html#g119b1f7c80d5944dc9ba6a6463827d26">dbus_message_set_interface</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l02658"></a>02658 <span class="keyword">const</span> <span class="keywordtype">char</span> *interface)
<a name="l02659"></a>02659 {
<a name="l02660"></a>02660 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02661"></a>02661 _dbus_return_val_if_fail (!message-><a class="code" href="structDBusMessage.html#c926e7027f22608d75a6dfe18680b9e7">locked</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02662"></a>02662 _dbus_return_val_if_fail (interface == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> ||
<a name="l02663"></a>02663 _dbus_check_is_valid_interface (interface),
<a name="l02664"></a>02664 <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02665"></a>02665
<a name="l02666"></a>02666 <span class="keywordflow">return</span> set_or_delete_string_field (message,
<a name="l02667"></a>02667 <a class="code" href="group__DBusProtocol.html#g296b5f099b6c347f65d53ef0a6fa2b0d">DBUS_HEADER_FIELD_INTERFACE</a>,
<a name="l02668"></a>02668 <a class="code" href="group__DBusProtocol.html#g7eb77066dadf5415896b44c56d93acce">DBUS_TYPE_STRING</a>,
<a name="l02669"></a>02669 interface);
<a name="l02670"></a>02670 }
<a name="l02671"></a>02671
<a name="l02685"></a>02685 <span class="keyword">const</span> <span class="keywordtype">char</span>*
<a name="l02686"></a><a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">02686</a> <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l02687"></a>02687 {
<a name="l02688"></a>02688 <span class="keyword">const</span> <span class="keywordtype">char</span> *v;
<a name="l02689"></a>02689
<a name="l02690"></a>02690 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02691"></a>02691
<a name="l02692"></a>02692 v = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>; <span class="comment">/* in case field doesn't exist */</span>
<a name="l02693"></a>02693 <a class="code" href="group__DBusMarshal.html#g499973a18dcb17d854eaf14101a66736">_dbus_header_get_field_basic</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l02694"></a>02694 <a class="code" href="group__DBusProtocol.html#g296b5f099b6c347f65d53ef0a6fa2b0d">DBUS_HEADER_FIELD_INTERFACE</a>,
<a name="l02695"></a>02695 <a class="code" href="group__DBusProtocol.html#g7eb77066dadf5415896b44c56d93acce">DBUS_TYPE_STRING</a>,
<a name="l02696"></a>02696 &v);
<a name="l02697"></a>02697 <span class="keywordflow">return</span> v;
<a name="l02698"></a>02698 }
<a name="l02699"></a>02699
<a name="l02707"></a>02707 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02708"></a><a class="code" href="group__DBusMessage.html#gfc99645ba3dfb1e8b231d5ec3ed77fa1">02708</a> <a class="code" href="group__DBusMessage.html#gfc99645ba3dfb1e8b231d5ec3ed77fa1">dbus_message_has_interface</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l02709"></a>02709 <span class="keyword">const</span> <span class="keywordtype">char</span> *interface)
<a name="l02710"></a>02710 {
<a name="l02711"></a>02711 <span class="keyword">const</span> <span class="keywordtype">char</span> *msg_interface;
<a name="l02712"></a>02712 msg_interface = <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (message);
<a name="l02713"></a>02713
<a name="l02714"></a>02714 <span class="keywordflow">if</span> (msg_interface == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02715"></a>02715 {
<a name="l02716"></a>02716 <span class="keywordflow">if</span> (interface == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02717"></a>02717 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02718"></a>02718 <span class="keywordflow">else</span>
<a name="l02719"></a>02719 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02720"></a>02720 }
<a name="l02721"></a>02721
<a name="l02722"></a>02722 <span class="keywordflow">if</span> (interface == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02723"></a>02723 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02724"></a>02724
<a name="l02725"></a>02725 <span class="keywordflow">if</span> (strcmp (msg_interface, interface) == 0)
<a name="l02726"></a>02726 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02727"></a>02727
<a name="l02728"></a>02728 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02729"></a>02729
<a name="l02730"></a>02730 }
<a name="l02731"></a>02731
<a name="l02744"></a>02744 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02745"></a><a class="code" href="group__DBusMessage.html#gbfb965617a3d550f70713bc78cdcbb61">02745</a> <a class="code" href="group__DBusMessage.html#gbfb965617a3d550f70713bc78cdcbb61">dbus_message_set_member</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l02746"></a>02746 <span class="keyword">const</span> <span class="keywordtype">char</span> *member)
<a name="l02747"></a>02747 {
<a name="l02748"></a>02748 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02749"></a>02749 _dbus_return_val_if_fail (!message-><a class="code" href="structDBusMessage.html#c926e7027f22608d75a6dfe18680b9e7">locked</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02750"></a>02750 _dbus_return_val_if_fail (member == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> ||
<a name="l02751"></a>02751 _dbus_check_is_valid_member (member),
<a name="l02752"></a>02752 <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02753"></a>02753
<a name="l02754"></a>02754 <span class="keywordflow">return</span> set_or_delete_string_field (message,
<a name="l02755"></a>02755 <a class="code" href="group__DBusProtocol.html#g2aa9d65ef983ac9c08c1d4cb31366818">DBUS_HEADER_FIELD_MEMBER</a>,
<a name="l02756"></a>02756 <a class="code" href="group__DBusProtocol.html#g7eb77066dadf5415896b44c56d93acce">DBUS_TYPE_STRING</a>,
<a name="l02757"></a>02757 member);
<a name="l02758"></a>02758 }
<a name="l02759"></a>02759
<a name="l02771"></a>02771 <span class="keyword">const</span> <span class="keywordtype">char</span>*
<a name="l02772"></a><a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">02772</a> <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l02773"></a>02773 {
<a name="l02774"></a>02774 <span class="keyword">const</span> <span class="keywordtype">char</span> *v;
<a name="l02775"></a>02775
<a name="l02776"></a>02776 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02777"></a>02777
<a name="l02778"></a>02778 v = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>; <span class="comment">/* in case field doesn't exist */</span>
<a name="l02779"></a>02779 <a class="code" href="group__DBusMarshal.html#g499973a18dcb17d854eaf14101a66736">_dbus_header_get_field_basic</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l02780"></a>02780 <a class="code" href="group__DBusProtocol.html#g2aa9d65ef983ac9c08c1d4cb31366818">DBUS_HEADER_FIELD_MEMBER</a>,
<a name="l02781"></a>02781 <a class="code" href="group__DBusProtocol.html#g7eb77066dadf5415896b44c56d93acce">DBUS_TYPE_STRING</a>,
<a name="l02782"></a>02782 &v);
<a name="l02783"></a>02783 <span class="keywordflow">return</span> v;
<a name="l02784"></a>02784 }
<a name="l02785"></a>02785
<a name="l02793"></a>02793 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02794"></a><a class="code" href="group__DBusMessage.html#g5641f9abfc624a8d18a270d28b875443">02794</a> <a class="code" href="group__DBusMessage.html#g5641f9abfc624a8d18a270d28b875443">dbus_message_has_member</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l02795"></a>02795 <span class="keyword">const</span> <span class="keywordtype">char</span> *member)
<a name="l02796"></a>02796 {
<a name="l02797"></a>02797 <span class="keyword">const</span> <span class="keywordtype">char</span> *msg_member;
<a name="l02798"></a>02798 msg_member = <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message);
<a name="l02799"></a>02799
<a name="l02800"></a>02800 <span class="keywordflow">if</span> (msg_member == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02801"></a>02801 {
<a name="l02802"></a>02802 <span class="keywordflow">if</span> (member == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02803"></a>02803 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02804"></a>02804 <span class="keywordflow">else</span>
<a name="l02805"></a>02805 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02806"></a>02806 }
<a name="l02807"></a>02807
<a name="l02808"></a>02808 <span class="keywordflow">if</span> (member == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l02809"></a>02809 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02810"></a>02810
<a name="l02811"></a>02811 <span class="keywordflow">if</span> (strcmp (msg_member, member) == 0)
<a name="l02812"></a>02812 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l02813"></a>02813
<a name="l02814"></a>02814 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l02815"></a>02815
<a name="l02816"></a>02816 }
<a name="l02817"></a>02817
<a name="l02829"></a>02829 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02830"></a><a class="code" href="group__DBusMessage.html#gc2adeb77803c00de2b2f1a824c30287f">02830</a> <a class="code" href="group__DBusMessage.html#gc2adeb77803c00de2b2f1a824c30287f">dbus_message_set_error_name</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l02831"></a>02831 <span class="keyword">const</span> <span class="keywordtype">char</span> *error_name)
<a name="l02832"></a>02832 {
<a name="l02833"></a>02833 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02834"></a>02834 _dbus_return_val_if_fail (!message-><a class="code" href="structDBusMessage.html#c926e7027f22608d75a6dfe18680b9e7">locked</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02835"></a>02835 _dbus_return_val_if_fail (error_name == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> ||
<a name="l02836"></a>02836 _dbus_check_is_valid_error_name (error_name),
<a name="l02837"></a>02837 <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02838"></a>02838
<a name="l02839"></a>02839 <span class="keywordflow">return</span> set_or_delete_string_field (message,
<a name="l02840"></a>02840 <a class="code" href="group__DBusProtocol.html#gc551be0f921390d01104cce30a814a5e">DBUS_HEADER_FIELD_ERROR_NAME</a>,
<a name="l02841"></a>02841 <a class="code" href="group__DBusProtocol.html#g7eb77066dadf5415896b44c56d93acce">DBUS_TYPE_STRING</a>,
<a name="l02842"></a>02842 error_name);
<a name="l02843"></a>02843 }
<a name="l02844"></a>02844
<a name="l02855"></a>02855 <span class="keyword">const</span> <span class="keywordtype">char</span>*
<a name="l02856"></a><a class="code" href="group__DBusMessage.html#gba0bbcddac374137d56c49129d61af84">02856</a> <a class="code" href="group__DBusMessage.html#gba0bbcddac374137d56c49129d61af84">dbus_message_get_error_name</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l02857"></a>02857 {
<a name="l02858"></a>02858 <span class="keyword">const</span> <span class="keywordtype">char</span> *v;
<a name="l02859"></a>02859
<a name="l02860"></a>02860 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02861"></a>02861
<a name="l02862"></a>02862 v = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>; <span class="comment">/* in case field doesn't exist */</span>
<a name="l02863"></a>02863 <a class="code" href="group__DBusMarshal.html#g499973a18dcb17d854eaf14101a66736">_dbus_header_get_field_basic</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l02864"></a>02864 <a class="code" href="group__DBusProtocol.html#gc551be0f921390d01104cce30a814a5e">DBUS_HEADER_FIELD_ERROR_NAME</a>,
<a name="l02865"></a>02865 <a class="code" href="group__DBusProtocol.html#g7eb77066dadf5415896b44c56d93acce">DBUS_TYPE_STRING</a>,
<a name="l02866"></a>02866 &v);
<a name="l02867"></a>02867 <span class="keywordflow">return</span> v;
<a name="l02868"></a>02868 }
<a name="l02869"></a>02869
<a name="l02883"></a>02883 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02884"></a><a class="code" href="group__DBusMessage.html#gdf72a8cd11d1cb1460c40433a233c8ef">02884</a> <a class="code" href="group__DBusMessage.html#gdf72a8cd11d1cb1460c40433a233c8ef">dbus_message_set_destination</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l02885"></a>02885 <span class="keyword">const</span> <span class="keywordtype">char</span> *destination)
<a name="l02886"></a>02886 {
<a name="l02887"></a>02887 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02888"></a>02888 _dbus_return_val_if_fail (!message-><a class="code" href="structDBusMessage.html#c926e7027f22608d75a6dfe18680b9e7">locked</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02889"></a>02889 _dbus_return_val_if_fail (destination == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> ||
<a name="l02890"></a>02890 _dbus_check_is_valid_bus_name (destination),
<a name="l02891"></a>02891 <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02892"></a>02892
<a name="l02893"></a>02893 <span class="keywordflow">return</span> set_or_delete_string_field (message,
<a name="l02894"></a>02894 <a class="code" href="group__DBusProtocol.html#gde98f71a08a1e0198d095fdb6d46cab9">DBUS_HEADER_FIELD_DESTINATION</a>,
<a name="l02895"></a>02895 <a class="code" href="group__DBusProtocol.html#g7eb77066dadf5415896b44c56d93acce">DBUS_TYPE_STRING</a>,
<a name="l02896"></a>02896 destination);
<a name="l02897"></a>02897 }
<a name="l02898"></a>02898
<a name="l02908"></a>02908 <span class="keyword">const</span> <span class="keywordtype">char</span>*
<a name="l02909"></a><a class="code" href="group__DBusMessage.html#g3def34b29d7b3bbb06235e04046e8236">02909</a> <a class="code" href="group__DBusMessage.html#g3def34b29d7b3bbb06235e04046e8236">dbus_message_get_destination</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l02910"></a>02910 {
<a name="l02911"></a>02911 <span class="keyword">const</span> <span class="keywordtype">char</span> *v;
<a name="l02912"></a>02912
<a name="l02913"></a>02913 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02914"></a>02914
<a name="l02915"></a>02915 v = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>; <span class="comment">/* in case field doesn't exist */</span>
<a name="l02916"></a>02916 <a class="code" href="group__DBusMarshal.html#g499973a18dcb17d854eaf14101a66736">_dbus_header_get_field_basic</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l02917"></a>02917 <a class="code" href="group__DBusProtocol.html#gde98f71a08a1e0198d095fdb6d46cab9">DBUS_HEADER_FIELD_DESTINATION</a>,
<a name="l02918"></a>02918 <a class="code" href="group__DBusProtocol.html#g7eb77066dadf5415896b44c56d93acce">DBUS_TYPE_STRING</a>,
<a name="l02919"></a>02919 &v);
<a name="l02920"></a>02920 <span class="keywordflow">return</span> v;
<a name="l02921"></a>02921 }
<a name="l02922"></a>02922
<a name="l02937"></a>02937 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l02938"></a><a class="code" href="group__DBusMessage.html#g6f213386d912b334848db9c2efc26309">02938</a> <a class="code" href="group__DBusMessage.html#g6f213386d912b334848db9c2efc26309">dbus_message_set_sender</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l02939"></a>02939 <span class="keyword">const</span> <span class="keywordtype">char</span> *sender)
<a name="l02940"></a>02940 {
<a name="l02941"></a>02941 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02942"></a>02942 _dbus_return_val_if_fail (!message-><a class="code" href="structDBusMessage.html#c926e7027f22608d75a6dfe18680b9e7">locked</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02943"></a>02943 _dbus_return_val_if_fail (sender == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> ||
<a name="l02944"></a>02944 _dbus_check_is_valid_bus_name (sender),
<a name="l02945"></a>02945 <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02946"></a>02946
<a name="l02947"></a>02947 <span class="keywordflow">return</span> set_or_delete_string_field (message,
<a name="l02948"></a>02948 <a class="code" href="group__DBusProtocol.html#g3ba84ae623951832bd73e2796bb13e71">DBUS_HEADER_FIELD_SENDER</a>,
<a name="l02949"></a>02949 <a class="code" href="group__DBusProtocol.html#g7eb77066dadf5415896b44c56d93acce">DBUS_TYPE_STRING</a>,
<a name="l02950"></a>02950 sender);
<a name="l02951"></a>02951 }
<a name="l02952"></a>02952
<a name="l02968"></a>02968 <span class="keyword">const</span> <span class="keywordtype">char</span>*
<a name="l02969"></a><a class="code" href="group__DBusMessage.html#g293b1a56f01173db32602344208c6271">02969</a> <a class="code" href="group__DBusMessage.html#g293b1a56f01173db32602344208c6271">dbus_message_get_sender</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l02970"></a>02970 {
<a name="l02971"></a>02971 <span class="keyword">const</span> <span class="keywordtype">char</span> *v;
<a name="l02972"></a>02972
<a name="l02973"></a>02973 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l02974"></a>02974
<a name="l02975"></a>02975 v = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>; <span class="comment">/* in case field doesn't exist */</span>
<a name="l02976"></a>02976 <a class="code" href="group__DBusMarshal.html#g499973a18dcb17d854eaf14101a66736">_dbus_header_get_field_basic</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l02977"></a>02977 <a class="code" href="group__DBusProtocol.html#g3ba84ae623951832bd73e2796bb13e71">DBUS_HEADER_FIELD_SENDER</a>,
<a name="l02978"></a>02978 <a class="code" href="group__DBusProtocol.html#g7eb77066dadf5415896b44c56d93acce">DBUS_TYPE_STRING</a>,
<a name="l02979"></a>02979 &v);
<a name="l02980"></a>02980 <span class="keywordflow">return</span> v;
<a name="l02981"></a>02981 }
<a name="l02982"></a>02982
<a name="l03001"></a>03001 <span class="keyword">const</span> <span class="keywordtype">char</span>*
<a name="l03002"></a><a class="code" href="group__DBusMessage.html#g7ee1a53a1aa27764b6088179d8f5ec86">03002</a> <a class="code" href="group__DBusMessage.html#g7ee1a53a1aa27764b6088179d8f5ec86">dbus_message_get_signature</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l03003"></a>03003 {
<a name="l03004"></a>03004 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *type_str;
<a name="l03005"></a>03005 <span class="keywordtype">int</span> type_pos;
<a name="l03006"></a>03006
<a name="l03007"></a>03007 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03008"></a>03008
<a name="l03009"></a>03009 get_const_signature (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>, &type_str, &type_pos);
<a name="l03010"></a>03010
<a name="l03011"></a>03011 <span class="keywordflow">return</span> _dbus_string_get_const_data_len (type_str, type_pos, 0);
<a name="l03012"></a>03012 }
<a name="l03013"></a>03013
<a name="l03014"></a>03014 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03015"></a>03015 _dbus_message_has_type_interface_member (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l03016"></a>03016 <span class="keywordtype">int</span> type,
<a name="l03017"></a>03017 <span class="keyword">const</span> <span class="keywordtype">char</span> *interface,
<a name="l03018"></a>03018 <span class="keyword">const</span> <span class="keywordtype">char</span> *member)
<a name="l03019"></a>03019 {
<a name="l03020"></a>03020 <span class="keyword">const</span> <span class="keywordtype">char</span> *n;
<a name="l03021"></a>03021
<a name="l03022"></a>03022 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03023"></a>03023 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (interface != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03024"></a>03024 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (member != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03025"></a>03025
<a name="l03026"></a>03026 <span class="keywordflow">if</span> (<a class="code" href="group__DBusMessage.html#g35fbb5a1cc616426f71e6ae8a0499f6f">dbus_message_get_type</a> (message) != type)
<a name="l03027"></a>03027 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03028"></a>03028
<a name="l03029"></a>03029 <span class="comment">/* Optimize by checking the short member name first</span>
<a name="l03030"></a>03030 <span class="comment"> * instead of the longer interface name</span>
<a name="l03031"></a>03031 <span class="comment"> */</span>
<a name="l03032"></a>03032
<a name="l03033"></a>03033 n = <a class="code" href="group__DBusMessage.html#g60744ad914e162c6fc91abe4f4e7249a">dbus_message_get_member</a> (message);
<a name="l03034"></a>03034
<a name="l03035"></a>03035 <span class="keywordflow">if</span> (n && strcmp (n, member) == 0)
<a name="l03036"></a>03036 {
<a name="l03037"></a>03037 n = <a class="code" href="group__DBusMessage.html#g1463c97dbfa03e7ab878094c66128a77">dbus_message_get_interface</a> (message);
<a name="l03038"></a>03038
<a name="l03039"></a>03039 <span class="keywordflow">if</span> (n == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a> || strcmp (n, interface) == 0)
<a name="l03040"></a>03040 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03041"></a>03041 }
<a name="l03042"></a>03042
<a name="l03043"></a>03043 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03044"></a>03044 }
<a name="l03045"></a>03045
<a name="l03060"></a>03060 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03061"></a><a class="code" href="group__DBusMessage.html#gcc67b43672cf42042d28b9ee9236cf9b">03061</a> <a class="code" href="group__DBusMessage.html#gcc67b43672cf42042d28b9ee9236cf9b">dbus_message_is_method_call</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l03062"></a>03062 <span class="keyword">const</span> <span class="keywordtype">char</span> *interface,
<a name="l03063"></a>03063 <span class="keyword">const</span> <span class="keywordtype">char</span> *method)
<a name="l03064"></a>03064 {
<a name="l03065"></a>03065 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03066"></a>03066 _dbus_return_val_if_fail (interface != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03067"></a>03067 _dbus_return_val_if_fail (method != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03068"></a>03068 <span class="comment">/* don't check that interface/method are valid since it would be</span>
<a name="l03069"></a>03069 <span class="comment"> * expensive, and not catch many common errors</span>
<a name="l03070"></a>03070 <span class="comment"> */</span>
<a name="l03071"></a>03071
<a name="l03072"></a>03072 <span class="keywordflow">return</span> _dbus_message_has_type_interface_member (message,
<a name="l03073"></a>03073 <a class="code" href="group__DBusProtocol.html#g09416afd76b65139eddd31e1085d9ebf">DBUS_MESSAGE_TYPE_METHOD_CALL</a>,
<a name="l03074"></a>03074 interface, method);
<a name="l03075"></a>03075 }
<a name="l03076"></a>03076
<a name="l03088"></a>03088 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03089"></a><a class="code" href="group__DBusMessage.html#gf35ecf35c463650dad01fa33f6300fac">03089</a> <a class="code" href="group__DBusMessage.html#gf35ecf35c463650dad01fa33f6300fac">dbus_message_is_signal</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l03090"></a>03090 <span class="keyword">const</span> <span class="keywordtype">char</span> *interface,
<a name="l03091"></a>03091 <span class="keyword">const</span> <span class="keywordtype">char</span> *signal_name)
<a name="l03092"></a>03092 {
<a name="l03093"></a>03093 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03094"></a>03094 _dbus_return_val_if_fail (interface != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03095"></a>03095 _dbus_return_val_if_fail (signal_name != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03096"></a>03096 <span class="comment">/* don't check that interface/name are valid since it would be</span>
<a name="l03097"></a>03097 <span class="comment"> * expensive, and not catch many common errors</span>
<a name="l03098"></a>03098 <span class="comment"> */</span>
<a name="l03099"></a>03099
<a name="l03100"></a>03100 <span class="keywordflow">return</span> _dbus_message_has_type_interface_member (message,
<a name="l03101"></a>03101 <a class="code" href="group__DBusProtocol.html#g728d893ff0c00e126517ba39835220a5">DBUS_MESSAGE_TYPE_SIGNAL</a>,
<a name="l03102"></a>03102 interface, signal_name);
<a name="l03103"></a>03103 }
<a name="l03104"></a>03104
<a name="l03115"></a>03115 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03116"></a><a class="code" href="group__DBusMessage.html#g809a628a76726414c6d693f04c3d3792">03116</a> <a class="code" href="group__DBusMessage.html#g809a628a76726414c6d693f04c3d3792">dbus_message_is_error</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l03117"></a>03117 <span class="keyword">const</span> <span class="keywordtype">char</span> *error_name)
<a name="l03118"></a>03118 {
<a name="l03119"></a>03119 <span class="keyword">const</span> <span class="keywordtype">char</span> *n;
<a name="l03120"></a>03120
<a name="l03121"></a>03121 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03122"></a>03122 _dbus_return_val_if_fail (error_name != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03123"></a>03123 <span class="comment">/* don't check that error_name is valid since it would be expensive,</span>
<a name="l03124"></a>03124 <span class="comment"> * and not catch many common errors</span>
<a name="l03125"></a>03125 <span class="comment"> */</span>
<a name="l03126"></a>03126
<a name="l03127"></a>03127 <span class="keywordflow">if</span> (<a class="code" href="group__DBusMessage.html#g35fbb5a1cc616426f71e6ae8a0499f6f">dbus_message_get_type</a> (message) != <a class="code" href="group__DBusProtocol.html#g2b9423d95066313d73eeea8eeaf86812">DBUS_MESSAGE_TYPE_ERROR</a>)
<a name="l03128"></a>03128 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03129"></a>03129
<a name="l03130"></a>03130 n = <a class="code" href="group__DBusMessage.html#gba0bbcddac374137d56c49129d61af84">dbus_message_get_error_name</a> (message);
<a name="l03131"></a>03131
<a name="l03132"></a>03132 <span class="keywordflow">if</span> (n && strcmp (n, error_name) == 0)
<a name="l03133"></a>03133 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03134"></a>03134 <span class="keywordflow">else</span>
<a name="l03135"></a>03135 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03136"></a>03136 }
<a name="l03137"></a>03137
<a name="l03148"></a>03148 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03149"></a><a class="code" href="group__DBusMessage.html#gd048df7b9bb1ec72a3a289dc2a1ee968">03149</a> <a class="code" href="group__DBusMessage.html#gd048df7b9bb1ec72a3a289dc2a1ee968">dbus_message_has_destination</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l03150"></a>03150 <span class="keyword">const</span> <span class="keywordtype">char</span> *name)
<a name="l03151"></a>03151 {
<a name="l03152"></a>03152 <span class="keyword">const</span> <span class="keywordtype">char</span> *s;
<a name="l03153"></a>03153
<a name="l03154"></a>03154 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03155"></a>03155 _dbus_return_val_if_fail (name != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03156"></a>03156 <span class="comment">/* don't check that name is valid since it would be expensive, and</span>
<a name="l03157"></a>03157 <span class="comment"> * not catch many common errors</span>
<a name="l03158"></a>03158 <span class="comment"> */</span>
<a name="l03159"></a>03159
<a name="l03160"></a>03160 s = <a class="code" href="group__DBusMessage.html#g3def34b29d7b3bbb06235e04046e8236">dbus_message_get_destination</a> (message);
<a name="l03161"></a>03161
<a name="l03162"></a>03162 <span class="keywordflow">if</span> (s && strcmp (s, name) == 0)
<a name="l03163"></a>03163 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03164"></a>03164 <span class="keywordflow">else</span>
<a name="l03165"></a>03165 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03166"></a>03166 }
<a name="l03167"></a>03167
<a name="l03183"></a>03183 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03184"></a><a class="code" href="group__DBusMessage.html#g2b5f88f322230bed0f94695b802b7a4e">03184</a> <a class="code" href="group__DBusMessage.html#g2b5f88f322230bed0f94695b802b7a4e">dbus_message_has_sender</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l03185"></a>03185 <span class="keyword">const</span> <span class="keywordtype">char</span> *name)
<a name="l03186"></a>03186 {
<a name="l03187"></a>03187 <span class="keyword">const</span> <span class="keywordtype">char</span> *s;
<a name="l03188"></a>03188
<a name="l03189"></a>03189 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03190"></a>03190 _dbus_return_val_if_fail (name != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03191"></a>03191 <span class="comment">/* don't check that name is valid since it would be expensive, and</span>
<a name="l03192"></a>03192 <span class="comment"> * not catch many common errors</span>
<a name="l03193"></a>03193 <span class="comment"> */</span>
<a name="l03194"></a>03194
<a name="l03195"></a>03195 s = <a class="code" href="group__DBusMessage.html#g293b1a56f01173db32602344208c6271">dbus_message_get_sender</a> (message);
<a name="l03196"></a>03196
<a name="l03197"></a>03197 <span class="keywordflow">if</span> (s && strcmp (s, name) == 0)
<a name="l03198"></a>03198 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03199"></a>03199 <span class="keywordflow">else</span>
<a name="l03200"></a>03200 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03201"></a>03201 }
<a name="l03202"></a>03202
<a name="l03212"></a>03212 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03213"></a><a class="code" href="group__DBusMessage.html#g1259ec02737317f47efad01d159f8643">03213</a> <a class="code" href="group__DBusMessage.html#g1259ec02737317f47efad01d159f8643">dbus_message_has_signature</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l03214"></a>03214 <span class="keyword">const</span> <span class="keywordtype">char</span> *signature)
<a name="l03215"></a>03215 {
<a name="l03216"></a>03216 <span class="keyword">const</span> <span class="keywordtype">char</span> *s;
<a name="l03217"></a>03217
<a name="l03218"></a>03218 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03219"></a>03219 _dbus_return_val_if_fail (signature != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03220"></a>03220 <span class="comment">/* don't check that signature is valid since it would be expensive,</span>
<a name="l03221"></a>03221 <span class="comment"> * and not catch many common errors</span>
<a name="l03222"></a>03222 <span class="comment"> */</span>
<a name="l03223"></a>03223
<a name="l03224"></a>03224 s = <a class="code" href="group__DBusMessage.html#g7ee1a53a1aa27764b6088179d8f5ec86">dbus_message_get_signature</a> (message);
<a name="l03225"></a>03225
<a name="l03226"></a>03226 <span class="keywordflow">if</span> (s && strcmp (s, signature) == 0)
<a name="l03227"></a>03227 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03228"></a>03228 <span class="keywordflow">else</span>
<a name="l03229"></a>03229 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03230"></a>03230 }
<a name="l03231"></a>03231
<a name="l03254"></a>03254 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03255"></a><a class="code" href="group__DBusMessage.html#gea5de0b66799aa0baebde2ca41f640b9">03255</a> <a class="code" href="group__DBusMessage.html#gea5de0b66799aa0baebde2ca41f640b9">dbus_set_error_from_message</a> (<a class="code" href="structDBusError.html">DBusError</a> *error,
<a name="l03256"></a>03256 <a class="code" href="structDBusMessage.html">DBusMessage</a> *message)
<a name="l03257"></a>03257 {
<a name="l03258"></a>03258 <span class="keyword">const</span> <span class="keywordtype">char</span> *str;
<a name="l03259"></a>03259
<a name="l03260"></a>03260 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03261"></a>03261 _dbus_return_val_if_error_is_set (error, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03262"></a>03262
<a name="l03263"></a>03263 <span class="keywordflow">if</span> (<a class="code" href="group__DBusMessage.html#g35fbb5a1cc616426f71e6ae8a0499f6f">dbus_message_get_type</a> (message) != <a class="code" href="group__DBusProtocol.html#g2b9423d95066313d73eeea8eeaf86812">DBUS_MESSAGE_TYPE_ERROR</a>)
<a name="l03264"></a>03264 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03265"></a>03265
<a name="l03266"></a>03266 str = <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l03267"></a>03267 <a class="code" href="group__DBusMessage.html#gaa5e339a728a7baa786e6c30e3b840b7">dbus_message_get_args</a> (message, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>,
<a name="l03268"></a>03268 <a class="code" href="group__DBusProtocol.html#g7eb77066dadf5415896b44c56d93acce">DBUS_TYPE_STRING</a>, &str,
<a name="l03269"></a>03269 <a class="code" href="group__DBusProtocol.html#ga9588da889743b2119dc6664712ae51e">DBUS_TYPE_INVALID</a>);
<a name="l03270"></a>03270
<a name="l03271"></a>03271 <a class="code" href="group__DBusErrors.html#g4e1b4b297468006781a957129ad9cf00">dbus_set_error</a> (error, <a class="code" href="group__DBusMessage.html#gba0bbcddac374137d56c49129d61af84">dbus_message_get_error_name</a> (message),
<a name="l03272"></a>03272 str ? <span class="stringliteral">"%s"</span> : <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, str);
<a name="l03273"></a>03273
<a name="l03274"></a>03274 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03275"></a>03275 }
<a name="l03276"></a>03276
<a name="l03295"></a><a class="code" href="group__DBusMessageInternals.html#gcbe0bfe7a9551ab0489a0ec9aba6e94e">03295</a> <span class="preprocessor">#define INITIAL_LOADER_DATA_LEN 32</span>
<a name="l03296"></a>03296 <span class="preprocessor"></span>
<a name="l03303"></a>03303 <a class="code" href="structDBusMessageLoader.html">DBusMessageLoader</a>*
<a name="l03304"></a><a class="code" href="group__DBusMessageInternals.html#g66f1c10cf909ba09ed732bc125ff8671">03304</a> <a class="code" href="group__DBusMessageInternals.html#g66f1c10cf909ba09ed732bc125ff8671">_dbus_message_loader_new</a> (<span class="keywordtype">void</span>)
<a name="l03305"></a>03305 {
<a name="l03306"></a>03306 <a class="code" href="structDBusMessageLoader.html">DBusMessageLoader</a> *loader;
<a name="l03307"></a>03307
<a name="l03308"></a>03308 loader = <a class="code" href="group__DBusMemory.html#gba9d823abda7f4cadbaf5177d3b8b793">dbus_new0</a> (<a class="code" href="structDBusMessageLoader.html">DBusMessageLoader</a>, 1);
<a name="l03309"></a>03309 <span class="keywordflow">if</span> (loader == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l03310"></a>03310 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l03311"></a>03311
<a name="l03312"></a>03312 loader-><a class="code" href="structDBusMessageLoader.html#f3372b7d574dab49a7435d8f29ea2258">refcount</a> = 1;
<a name="l03313"></a>03313
<a name="l03314"></a>03314 loader-><a class="code" href="structDBusMessageLoader.html#7af27694794dc471ed3b251da8d7c62e">corrupted</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03315"></a>03315 loader-><a class="code" href="structDBusMessageLoader.html#c6116f8620094b8ce348b103483c0035">corruption_reason</a> = <a class="code" href="group__DBusMarshal.html#gg0c4521d30d6650a33673a4d7f9cc007ce68ac5067fe94cdcfb35e115f36298c8">DBUS_VALID</a>;
<a name="l03316"></a>03316
<a name="l03317"></a>03317 <span class="comment">/* this can be configured by the app, but defaults to the protocol max */</span>
<a name="l03318"></a>03318 loader-><a class="code" href="structDBusMessageLoader.html#174d67695b3aca6ee3bb8e1e5e033334">max_message_size</a> = <a class="code" href="group__DBusProtocol.html#g2874c299e1c87fe745ef09bf231264e9">DBUS_MAXIMUM_MESSAGE_LENGTH</a>;
<a name="l03319"></a>03319
<a name="l03320"></a>03320 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g348252317f7bb8ac43529972945830ae">_dbus_string_init</a> (&loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>))
<a name="l03321"></a>03321 {
<a name="l03322"></a>03322 <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (loader);
<a name="l03323"></a>03323 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l03324"></a>03324 }
<a name="l03325"></a>03325
<a name="l03326"></a>03326 <span class="comment">/* preallocate the buffer for speed, ignore failure */</span>
<a name="l03327"></a>03327 <a class="code" href="group__DBusString.html#g08c423b93c28dd746dcb93e0461ab95c">_dbus_string_set_length</a> (&loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>, <a class="code" href="group__DBusMessageInternals.html#gcbe0bfe7a9551ab0489a0ec9aba6e94e">INITIAL_LOADER_DATA_LEN</a>);
<a name="l03328"></a>03328 <a class="code" href="group__DBusString.html#g08c423b93c28dd746dcb93e0461ab95c">_dbus_string_set_length</a> (&loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>, 0);
<a name="l03329"></a>03329
<a name="l03330"></a>03330 <span class="keywordflow">return</span> loader;
<a name="l03331"></a>03331 }
<a name="l03332"></a>03332
<a name="l03339"></a>03339 <a class="code" href="structDBusMessageLoader.html">DBusMessageLoader</a> *
<a name="l03340"></a><a class="code" href="group__DBusMessageInternals.html#gd39efb9ff20c7538f12e164a6920edc4">03340</a> <a class="code" href="group__DBusMessageInternals.html#gd39efb9ff20c7538f12e164a6920edc4">_dbus_message_loader_ref</a> (<a class="code" href="structDBusMessageLoader.html">DBusMessageLoader</a> *loader)
<a name="l03341"></a>03341 {
<a name="l03342"></a>03342 loader-><a class="code" href="structDBusMessageLoader.html#f3372b7d574dab49a7435d8f29ea2258">refcount</a> += 1;
<a name="l03343"></a>03343
<a name="l03344"></a>03344 <span class="keywordflow">return</span> loader;
<a name="l03345"></a>03345 }
<a name="l03346"></a>03346
<a name="l03353"></a>03353 <span class="keywordtype">void</span>
<a name="l03354"></a><a class="code" href="group__DBusMessageInternals.html#g51299aab1f5e0b2408ab858d3377b20c">03354</a> <a class="code" href="group__DBusMessageInternals.html#g51299aab1f5e0b2408ab858d3377b20c">_dbus_message_loader_unref</a> (<a class="code" href="structDBusMessageLoader.html">DBusMessageLoader</a> *loader)
<a name="l03355"></a>03355 {
<a name="l03356"></a>03356 loader-><a class="code" href="structDBusMessageLoader.html#f3372b7d574dab49a7435d8f29ea2258">refcount</a> -= 1;
<a name="l03357"></a>03357 <span class="keywordflow">if</span> (loader-><a class="code" href="structDBusMessageLoader.html#f3372b7d574dab49a7435d8f29ea2258">refcount</a> == 0)
<a name="l03358"></a>03358 {
<a name="l03359"></a>03359 <a class="code" href="group__DBusList.html#g8dd69084b53361803a765e6d53d5b9d1">_dbus_list_foreach</a> (&loader-><a class="code" href="structDBusMessageLoader.html#5ad667f9a5b58d23f2089e7cea58f6cc">messages</a>,
<a name="l03360"></a>03360 (<a class="code" href="group__DBusInternalsUtils.html#gadf9d45082dd1c9f59d8420d13492669">DBusForeachFunction</a>) <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a>,
<a name="l03361"></a>03361 <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03362"></a>03362 <a class="code" href="group__DBusList.html#ga36d13444a050a923941c53650b72f9d">_dbus_list_clear</a> (&loader-><a class="code" href="structDBusMessageLoader.html#5ad667f9a5b58d23f2089e7cea58f6cc">messages</a>);
<a name="l03363"></a>03363 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>);
<a name="l03364"></a>03364 <a class="code" href="group__DBusMemory.html#g488c6b08cc8c1ddf0203243c4b27a13c">dbus_free</a> (loader);
<a name="l03365"></a>03365 }
<a name="l03366"></a>03366 }
<a name="l03367"></a>03367
<a name="l03386"></a>03386 <span class="keywordtype">void</span>
<a name="l03387"></a><a class="code" href="group__DBusMessageInternals.html#ge77f064b8034189a955d5be982d2fbdb">03387</a> <a class="code" href="group__DBusMessageInternals.html#ge77f064b8034189a955d5be982d2fbdb">_dbus_message_loader_get_buffer</a> (<a class="code" href="structDBusMessageLoader.html">DBusMessageLoader</a> *loader,
<a name="l03388"></a>03388 <a class="code" href="structDBusString.html">DBusString</a> **buffer)
<a name="l03389"></a>03389 {
<a name="l03390"></a>03390 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (!loader-><a class="code" href="structDBusMessageLoader.html#7fe926ecd87e9ddb37e7481195bc3d67">buffer_outstanding</a>);
<a name="l03391"></a>03391
<a name="l03392"></a>03392 *buffer = &loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>;
<a name="l03393"></a>03393
<a name="l03394"></a>03394 loader-><a class="code" href="structDBusMessageLoader.html#7fe926ecd87e9ddb37e7481195bc3d67">buffer_outstanding</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03395"></a>03395 }
<a name="l03396"></a>03396
<a name="l03407"></a>03407 <span class="keywordtype">void</span>
<a name="l03408"></a><a class="code" href="group__DBusMessageInternals.html#gc559604b855d0eb6f32b8c20328553cc">03408</a> <a class="code" href="group__DBusMessageInternals.html#gc559604b855d0eb6f32b8c20328553cc">_dbus_message_loader_return_buffer</a> (<a class="code" href="structDBusMessageLoader.html">DBusMessageLoader</a> *loader,
<a name="l03409"></a>03409 <a class="code" href="structDBusString.html">DBusString</a> *buffer,
<a name="l03410"></a>03410 <span class="keywordtype">int</span> bytes_read)
<a name="l03411"></a>03411 {
<a name="l03412"></a>03412 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (loader-><a class="code" href="structDBusMessageLoader.html#7fe926ecd87e9ddb37e7481195bc3d67">buffer_outstanding</a>);
<a name="l03413"></a>03413 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (buffer == &loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>);
<a name="l03414"></a>03414
<a name="l03415"></a>03415 loader-><a class="code" href="structDBusMessageLoader.html#7fe926ecd87e9ddb37e7481195bc3d67">buffer_outstanding</a> = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03416"></a>03416 }
<a name="l03417"></a>03417
<a name="l03418"></a>03418 <span class="comment">/*</span>
<a name="l03419"></a>03419 <span class="comment"> * FIXME when we move the header out of the buffer, that memmoves all</span>
<a name="l03420"></a>03420 <span class="comment"> * buffered messages. Kind of crappy.</span>
<a name="l03421"></a>03421 <span class="comment"> *</span>
<a name="l03422"></a>03422 <span class="comment"> * Also we copy the header and body, which is kind of crappy. To</span>
<a name="l03423"></a>03423 <span class="comment"> * avoid this, we have to allow header and body to be in a single</span>
<a name="l03424"></a>03424 <span class="comment"> * memory block, which is good for messages we read and bad for</span>
<a name="l03425"></a>03425 <span class="comment"> * messages we are creating. But we could move_len() the buffer into</span>
<a name="l03426"></a>03426 <span class="comment"> * this single memory block, and move_len() will just swap the buffers</span>
<a name="l03427"></a>03427 <span class="comment"> * if you're moving the entire buffer replacing the dest string.</span>
<a name="l03428"></a>03428 <span class="comment"> *</span>
<a name="l03429"></a>03429 <span class="comment"> * We could also have the message loader tell the transport how many</span>
<a name="l03430"></a>03430 <span class="comment"> * bytes to read; so it would first ask for some arbitrary number like</span>
<a name="l03431"></a>03431 <span class="comment"> * 256, then if the message was incomplete it would use the</span>
<a name="l03432"></a>03432 <span class="comment"> * header/body len to ask for exactly the size of the message (or</span>
<a name="l03433"></a>03433 <span class="comment"> * blocks the size of a typical kernel buffer for the socket). That</span>
<a name="l03434"></a>03434 <span class="comment"> * way we don't get trailing bytes in the buffer that have to be</span>
<a name="l03435"></a>03435 <span class="comment"> * memmoved. Though I suppose we also don't have a chance of reading a</span>
<a name="l03436"></a>03436 <span class="comment"> * bunch of small messages at once, so the optimization may be stupid.</span>
<a name="l03437"></a>03437 <span class="comment"> *</span>
<a name="l03438"></a>03438 <span class="comment"> * Another approach would be to keep a "start" index into</span>
<a name="l03439"></a>03439 <span class="comment"> * loader->data and only delete it occasionally, instead of after</span>
<a name="l03440"></a>03440 <span class="comment"> * each message is loaded.</span>
<a name="l03441"></a>03441 <span class="comment"> *</span>
<a name="l03442"></a>03442 <span class="comment"> * load_message() returns FALSE if not enough memory OR the loader was corrupted</span>
<a name="l03443"></a>03443 <span class="comment"> */</span>
<a name="l03444"></a>03444 <span class="keyword">static</span> <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03445"></a>03445 load_message (<a class="code" href="structDBusMessageLoader.html">DBusMessageLoader</a> *loader,
<a name="l03446"></a>03446 <a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l03447"></a>03447 <span class="keywordtype">int</span> byte_order,
<a name="l03448"></a>03448 <span class="keywordtype">int</span> fields_array_len,
<a name="l03449"></a>03449 <span class="keywordtype">int</span> header_len,
<a name="l03450"></a>03450 <span class="keywordtype">int</span> body_len)
<a name="l03451"></a>03451 {
<a name="l03452"></a>03452 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> oom;
<a name="l03453"></a>03453 <a class="code" href="group__DBusMarshal.html#g0c4521d30d6650a33673a4d7f9cc007c">DBusValidity</a> validity;
<a name="l03454"></a>03454 <span class="keyword">const</span> <a class="code" href="structDBusString.html">DBusString</a> *type_str;
<a name="l03455"></a>03455 <span class="keywordtype">int</span> type_pos;
<a name="l03456"></a>03456 <a class="code" href="group__DBusMarshal.html#gf9dce059725fa793c44b219460cbbe6d">DBusValidationMode</a> mode;
<a name="l03457"></a>03457
<a name="l03458"></a>03458 mode = DBUS_VALIDATION_MODE_DATA_IS_UNTRUSTED;
<a name="l03459"></a>03459
<a name="l03460"></a>03460 oom = <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03461"></a>03461
<a name="l03462"></a>03462 <span class="preprocessor">#if 0</span>
<a name="l03463"></a>03463 <span class="preprocessor"></span> <a class="code" href="group__DBusMarshal.html#g3926bb35edf78d114cf0c341fe3258e0">_dbus_verbose_bytes_of_string</a> (&loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>, 0, header_len <span class="comment">/* + body_len */</span>);
<a name="l03464"></a>03464 <span class="preprocessor">#endif</span>
<a name="l03465"></a>03465 <span class="preprocessor"></span>
<a name="l03466"></a>03466 <span class="comment">/* 1. VALIDATE AND COPY OVER HEADER */</span>
<a name="l03467"></a>03467 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (_dbus_string_get_length (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>.<a class="code" href="structDBusHeader.html#67df8bff43c10e2d4f6ae36b56ee5814">data</a>) == 0);
<a name="l03468"></a>03468 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> ((header_len + body_len) <= _dbus_string_get_length (&loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>));
<a name="l03469"></a>03469
<a name="l03470"></a>03470 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMarshal.html#g0c3a3f95d9a53b91a0cd0b260196685b">_dbus_header_load</a> (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l03471"></a>03471 mode,
<a name="l03472"></a>03472 &validity,
<a name="l03473"></a>03473 byte_order,
<a name="l03474"></a>03474 fields_array_len,
<a name="l03475"></a>03475 header_len,
<a name="l03476"></a>03476 body_len,
<a name="l03477"></a>03477 &loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>, 0,
<a name="l03478"></a>03478 _dbus_string_get_length (&loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>)))
<a name="l03479"></a>03479 {
<a name="l03480"></a>03480 _dbus_verbose (<span class="stringliteral">"Failed to load header for new message code %d\n"</span>, validity);
<a name="l03481"></a>03481
<a name="l03482"></a>03482 <span class="comment">/* assert here so we can catch any code that still uses DBUS_VALID to indicate</span>
<a name="l03483"></a>03483 <span class="comment"> oom errors. They should use DBUS_VALIDITY_UNKNOWN_OOM_ERROR instead */</span>
<a name="l03484"></a>03484 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (validity != <a class="code" href="group__DBusMarshal.html#gg0c4521d30d6650a33673a4d7f9cc007ce68ac5067fe94cdcfb35e115f36298c8">DBUS_VALID</a>);
<a name="l03485"></a>03485
<a name="l03486"></a>03486 <span class="keywordflow">if</span> (validity == <a class="code" href="group__DBusMarshal.html#gg0c4521d30d6650a33673a4d7f9cc007c08cf1e84457c1f41acaf082de2060a65">DBUS_VALIDITY_UNKNOWN_OOM_ERROR</a>)
<a name="l03487"></a>03487 oom = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03488"></a>03488 <span class="keywordflow">else</span>
<a name="l03489"></a>03489 {
<a name="l03490"></a>03490 loader-><a class="code" href="structDBusMessageLoader.html#7af27694794dc471ed3b251da8d7c62e">corrupted</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03491"></a>03491 loader-><a class="code" href="structDBusMessageLoader.html#c6116f8620094b8ce348b103483c0035">corruption_reason</a> = validity;
<a name="l03492"></a>03492 }
<a name="l03493"></a>03493 <span class="keywordflow">goto</span> failed;
<a name="l03494"></a>03494 }
<a name="l03495"></a>03495
<a name="l03496"></a>03496 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (validity == <a class="code" href="group__DBusMarshal.html#gg0c4521d30d6650a33673a4d7f9cc007ce68ac5067fe94cdcfb35e115f36298c8">DBUS_VALID</a>);
<a name="l03497"></a>03497
<a name="l03498"></a>03498 message-><a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a> = byte_order;
<a name="l03499"></a>03499
<a name="l03500"></a>03500 <span class="comment">/* 2. VALIDATE BODY */</span>
<a name="l03501"></a>03501 <span class="keywordflow">if</span> (mode != DBUS_VALIDATION_MODE_WE_TRUST_THIS_DATA_ABSOLUTELY)
<a name="l03502"></a>03502 {
<a name="l03503"></a>03503 get_const_signature (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>, &type_str, &type_pos);
<a name="l03504"></a>03504
<a name="l03505"></a>03505 <span class="comment">/* Because the bytes_remaining arg is NULL, this validates that the</span>
<a name="l03506"></a>03506 <span class="comment"> * body is the right length</span>
<a name="l03507"></a>03507 <span class="comment"> */</span>
<a name="l03508"></a>03508 validity = <a class="code" href="group__DBusMarshal.html#ge997884ec8091aacb5492c2b5a7eaef9">_dbus_validate_body_with_reason</a> (type_str,
<a name="l03509"></a>03509 type_pos,
<a name="l03510"></a>03510 byte_order,
<a name="l03511"></a>03511 <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>,
<a name="l03512"></a>03512 &loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>,
<a name="l03513"></a>03513 header_len,
<a name="l03514"></a>03514 body_len);
<a name="l03515"></a>03515 <span class="keywordflow">if</span> (validity != <a class="code" href="group__DBusMarshal.html#gg0c4521d30d6650a33673a4d7f9cc007ce68ac5067fe94cdcfb35e115f36298c8">DBUS_VALID</a>)
<a name="l03516"></a>03516 {
<a name="l03517"></a>03517 _dbus_verbose (<span class="stringliteral">"Failed to validate message body code %d\n"</span>, validity);
<a name="l03518"></a>03518
<a name="l03519"></a>03519 loader-><a class="code" href="structDBusMessageLoader.html#7af27694794dc471ed3b251da8d7c62e">corrupted</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03520"></a>03520 loader-><a class="code" href="structDBusMessageLoader.html#c6116f8620094b8ce348b103483c0035">corruption_reason</a> = validity;
<a name="l03521"></a>03521
<a name="l03522"></a>03522 <span class="keywordflow">goto</span> failed;
<a name="l03523"></a>03523 }
<a name="l03524"></a>03524 }
<a name="l03525"></a>03525
<a name="l03526"></a>03526 <span class="comment">/* 3. COPY OVER BODY AND QUEUE MESSAGE */</span>
<a name="l03527"></a>03527
<a name="l03528"></a>03528 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusList.html#gd99045e79db46159babe69718f343053">_dbus_list_append</a> (&loader-><a class="code" href="structDBusMessageLoader.html#5ad667f9a5b58d23f2089e7cea58f6cc">messages</a>, message))
<a name="l03529"></a>03529 {
<a name="l03530"></a>03530 _dbus_verbose (<span class="stringliteral">"Failed to append new message to loader queue\n"</span>);
<a name="l03531"></a>03531 oom = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03532"></a>03532 <span class="keywordflow">goto</span> failed;
<a name="l03533"></a>03533 }
<a name="l03534"></a>03534
<a name="l03535"></a>03535 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (_dbus_string_get_length (&message-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>) == 0);
<a name="l03536"></a>03536 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (_dbus_string_get_length (&loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>) >=
<a name="l03537"></a>03537 (header_len + body_len));
<a name="l03538"></a>03538
<a name="l03539"></a>03539 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#gf5f13bc7ac7a623516930d26ae2589bf">_dbus_string_copy_len</a> (&loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>, header_len, body_len, &message-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>, 0))
<a name="l03540"></a>03540 {
<a name="l03541"></a>03541 _dbus_verbose (<span class="stringliteral">"Failed to move body into new message\n"</span>);
<a name="l03542"></a>03542 oom = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03543"></a>03543 <span class="keywordflow">goto</span> failed;
<a name="l03544"></a>03544 }
<a name="l03545"></a>03545
<a name="l03546"></a>03546 <a class="code" href="group__DBusString.html#g7e0e164ad5bb094e5ccad9edc7ae4235">_dbus_string_delete</a> (&loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>, 0, header_len + body_len);
<a name="l03547"></a>03547
<a name="l03548"></a>03548 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (_dbus_string_get_length (&message-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>.<a class="code" href="structDBusHeader.html#67df8bff43c10e2d4f6ae36b56ee5814">data</a>) == header_len);
<a name="l03549"></a>03549 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (_dbus_string_get_length (&message-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>) == body_len);
<a name="l03550"></a>03550
<a name="l03551"></a>03551 _dbus_verbose (<span class="stringliteral">"Loaded message %p\n"</span>, message);
<a name="l03552"></a>03552
<a name="l03553"></a>03553 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (!oom);
<a name="l03554"></a>03554 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (!loader-><a class="code" href="structDBusMessageLoader.html#7af27694794dc471ed3b251da8d7c62e">corrupted</a>);
<a name="l03555"></a>03555 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (loader-><a class="code" href="structDBusMessageLoader.html#5ad667f9a5b58d23f2089e7cea58f6cc">messages</a> != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03556"></a>03556 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (<a class="code" href="group__DBusList.html#g5929ad5253d2f538158e513e9df3002b">_dbus_list_find_last</a> (&loader-><a class="code" href="structDBusMessageLoader.html#5ad667f9a5b58d23f2089e7cea58f6cc">messages</a>, message) != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03557"></a>03557
<a name="l03558"></a>03558 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03559"></a>03559
<a name="l03560"></a>03560 failed:
<a name="l03561"></a>03561
<a name="l03562"></a>03562 <span class="comment">/* Clean up */</span>
<a name="l03563"></a>03563
<a name="l03564"></a>03564 <span class="comment">/* does nothing if the message isn't in the list */</span>
<a name="l03565"></a>03565 <a class="code" href="group__DBusList.html#gd93f1fc853914144e94fc7a7dc0945aa">_dbus_list_remove_last</a> (&loader-><a class="code" href="structDBusMessageLoader.html#5ad667f9a5b58d23f2089e7cea58f6cc">messages</a>, message);
<a name="l03566"></a>03566
<a name="l03567"></a>03567 <span class="keywordflow">if</span> (oom)
<a name="l03568"></a>03568 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (!loader-><a class="code" href="structDBusMessageLoader.html#7af27694794dc471ed3b251da8d7c62e">corrupted</a>);
<a name="l03569"></a>03569 <span class="keywordflow">else</span>
<a name="l03570"></a>03570 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (loader-><a class="code" href="structDBusMessageLoader.html#7af27694794dc471ed3b251da8d7c62e">corrupted</a>);
<a name="l03571"></a>03571
<a name="l03572"></a>03572 <a class="code" href="group__DBusMarshal.html#g3926bb35edf78d114cf0c341fe3258e0">_dbus_verbose_bytes_of_string</a> (&loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>, 0, _dbus_string_get_length (&loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>));
<a name="l03573"></a>03573
<a name="l03574"></a>03574 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03575"></a>03575 }
<a name="l03576"></a>03576
<a name="l03591"></a>03591 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03592"></a><a class="code" href="group__DBusMessageInternals.html#gf55885371a6d022ec94c79bd7138923f">03592</a> <a class="code" href="group__DBusMessageInternals.html#gf55885371a6d022ec94c79bd7138923f">_dbus_message_loader_queue_messages</a> (<a class="code" href="structDBusMessageLoader.html">DBusMessageLoader</a> *loader)
<a name="l03593"></a>03593 {
<a name="l03594"></a>03594 <span class="keywordflow">while</span> (!loader-><a class="code" href="structDBusMessageLoader.html#7af27694794dc471ed3b251da8d7c62e">corrupted</a> &&
<a name="l03595"></a>03595 _dbus_string_get_length (&loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>) >= <a class="code" href="group__DBusProtocol.html#gf8c13dd883c21b5dea179d77d8ac12e3">DBUS_MINIMUM_HEADER_SIZE</a>)
<a name="l03596"></a>03596 {
<a name="l03597"></a>03597 <a class="code" href="group__DBusMarshal.html#g0c4521d30d6650a33673a4d7f9cc007c">DBusValidity</a> validity;
<a name="l03598"></a>03598 <span class="keywordtype">int</span> byte_order, fields_array_len, header_len, body_len;
<a name="l03599"></a>03599
<a name="l03600"></a>03600 <span class="keywordflow">if</span> (<a class="code" href="group__DBusMarshal.html#g674d74081baf6e7531e0d4a286724210">_dbus_header_have_message_untrusted</a> (loader-><a class="code" href="structDBusMessageLoader.html#174d67695b3aca6ee3bb8e1e5e033334">max_message_size</a>,
<a name="l03601"></a>03601 &validity,
<a name="l03602"></a>03602 &byte_order,
<a name="l03603"></a>03603 &fields_array_len,
<a name="l03604"></a>03604 &header_len,
<a name="l03605"></a>03605 &body_len,
<a name="l03606"></a>03606 &loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>, 0,
<a name="l03607"></a>03607 _dbus_string_get_length (&loader-><a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>)))
<a name="l03608"></a>03608 {
<a name="l03609"></a>03609 <a class="code" href="structDBusMessage.html">DBusMessage</a> *message;
<a name="l03610"></a>03610
<a name="l03611"></a>03611 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (validity == <a class="code" href="group__DBusMarshal.html#gg0c4521d30d6650a33673a4d7f9cc007ce68ac5067fe94cdcfb35e115f36298c8">DBUS_VALID</a>);
<a name="l03612"></a>03612
<a name="l03613"></a>03613 message = dbus_message_new_empty_header ();
<a name="l03614"></a>03614 <span class="keywordflow">if</span> (message == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l03615"></a>03615 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03616"></a>03616
<a name="l03617"></a>03617 <span class="keywordflow">if</span> (!load_message (loader, message,
<a name="l03618"></a>03618 byte_order, fields_array_len,
<a name="l03619"></a>03619 header_len, body_len))
<a name="l03620"></a>03620 {
<a name="l03621"></a>03621 <a class="code" href="group__DBusMessage.html#g84f8b6931de993dc0ae8c69d63bdee29">dbus_message_unref</a> (message);
<a name="l03622"></a>03622 <span class="comment">/* load_message() returns false if corrupted or OOM; if</span>
<a name="l03623"></a>03623 <span class="comment"> * corrupted then return TRUE for not OOM</span>
<a name="l03624"></a>03624 <span class="comment"> */</span>
<a name="l03625"></a>03625 <span class="keywordflow">return</span> loader->corrupted;
<a name="l03626"></a>03626 }
<a name="l03627"></a>03627
<a name="l03628"></a>03628 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (loader->messages != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03629"></a>03629 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (<a class="code" href="group__DBusList.html#g5929ad5253d2f538158e513e9df3002b">_dbus_list_find_last</a> (&loader->messages, message) != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03630"></a>03630 }
<a name="l03631"></a>03631 <span class="keywordflow">else</span>
<a name="l03632"></a>03632 {
<a name="l03633"></a>03633 _dbus_verbose (<span class="stringliteral">"Initial peek at header says we don't have a whole message yet, or data broken with invalid code %d\n"</span>,
<a name="l03634"></a>03634 validity);
<a name="l03635"></a>03635 <span class="keywordflow">if</span> (validity != <a class="code" href="group__DBusMarshal.html#gg0c4521d30d6650a33673a4d7f9cc007ce68ac5067fe94cdcfb35e115f36298c8">DBUS_VALID</a>)
<a name="l03636"></a>03636 {
<a name="l03637"></a>03637 loader-><a class="code" href="structDBusMessageLoader.html#7af27694794dc471ed3b251da8d7c62e">corrupted</a> = <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03638"></a>03638 loader-><a class="code" href="structDBusMessageLoader.html#c6116f8620094b8ce348b103483c0035">corruption_reason</a> = validity;
<a name="l03639"></a>03639 }
<a name="l03640"></a>03640 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03641"></a>03641 }
<a name="l03642"></a>03642 }
<a name="l03643"></a>03643
<a name="l03644"></a>03644 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03645"></a>03645 }
<a name="l03646"></a>03646
<a name="l03654"></a>03654 <a class="code" href="structDBusMessage.html">DBusMessage</a>*
<a name="l03655"></a><a class="code" href="group__DBusMessageInternals.html#g66674354acdd09ca6e11d600b34bdd5f">03655</a> <a class="code" href="group__DBusMessageInternals.html#g66674354acdd09ca6e11d600b34bdd5f">_dbus_message_loader_peek_message</a> (<a class="code" href="structDBusMessageLoader.html">DBusMessageLoader</a> *loader)
<a name="l03656"></a>03656 {
<a name="l03657"></a>03657 <span class="keywordflow">if</span> (loader-><a class="code" href="structDBusMessageLoader.html#5ad667f9a5b58d23f2089e7cea58f6cc">messages</a>)
<a name="l03658"></a>03658 <span class="keywordflow">return</span> loader-><a class="code" href="structDBusMessageLoader.html#5ad667f9a5b58d23f2089e7cea58f6cc">messages</a>-><a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>;
<a name="l03659"></a>03659 <span class="keywordflow">else</span>
<a name="l03660"></a>03660 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l03661"></a>03661 }
<a name="l03662"></a>03662
<a name="l03671"></a>03671 <a class="code" href="structDBusMessage.html">DBusMessage</a>*
<a name="l03672"></a><a class="code" href="group__DBusMessageInternals.html#g9e5e75716d7263d9908d45a60b1b6bdc">03672</a> <a class="code" href="group__DBusMessageInternals.html#g9e5e75716d7263d9908d45a60b1b6bdc">_dbus_message_loader_pop_message</a> (<a class="code" href="structDBusMessageLoader.html">DBusMessageLoader</a> *loader)
<a name="l03673"></a>03673 {
<a name="l03674"></a>03674 <span class="keywordflow">return</span> <a class="code" href="group__DBusList.html#gcb96c9d3e9a869e63b8db4f8913a5a60">_dbus_list_pop_first</a> (&loader-><a class="code" href="structDBusMessageLoader.html#5ad667f9a5b58d23f2089e7cea58f6cc">messages</a>);
<a name="l03675"></a>03675 }
<a name="l03676"></a>03676
<a name="l03685"></a>03685 <a class="code" href="structDBusList.html">DBusList</a>*
<a name="l03686"></a><a class="code" href="group__DBusMessageInternals.html#g6ec3c1ad57340f717a47d79092122d04">03686</a> <a class="code" href="group__DBusMessageInternals.html#g6ec3c1ad57340f717a47d79092122d04">_dbus_message_loader_pop_message_link</a> (<a class="code" href="structDBusMessageLoader.html">DBusMessageLoader</a> *loader)
<a name="l03687"></a>03687 {
<a name="l03688"></a>03688 <span class="keywordflow">return</span> <a class="code" href="group__DBusList.html#gab9a957eca9bf5466bbf377a23b4b25c">_dbus_list_pop_first_link</a> (&loader-><a class="code" href="structDBusMessageLoader.html#5ad667f9a5b58d23f2089e7cea58f6cc">messages</a>);
<a name="l03689"></a>03689 }
<a name="l03690"></a>03690
<a name="l03697"></a>03697 <span class="keywordtype">void</span>
<a name="l03698"></a><a class="code" href="group__DBusMessageInternals.html#g71b290eb470a55217971fcd6851fc40c">03698</a> <a class="code" href="group__DBusMessageInternals.html#g71b290eb470a55217971fcd6851fc40c">_dbus_message_loader_putback_message_link</a> (<a class="code" href="structDBusMessageLoader.html">DBusMessageLoader</a> *loader,
<a name="l03699"></a>03699 <a class="code" href="structDBusList.html">DBusList</a> *link)
<a name="l03700"></a>03700 {
<a name="l03701"></a>03701 <a class="code" href="group__DBusList.html#gb3dd068e3bd8a319c0d12150785050a7">_dbus_list_prepend_link</a> (&loader-><a class="code" href="structDBusMessageLoader.html#5ad667f9a5b58d23f2089e7cea58f6cc">messages</a>, link);
<a name="l03702"></a>03702 }
<a name="l03703"></a>03703
<a name="l03713"></a>03713 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03714"></a><a class="code" href="group__DBusMessageInternals.html#g38da52ac9344b00df530098bdd9a3842">03714</a> <a class="code" href="group__DBusMessageInternals.html#g38da52ac9344b00df530098bdd9a3842">_dbus_message_loader_get_is_corrupted</a> (<a class="code" href="structDBusMessageLoader.html">DBusMessageLoader</a> *loader)
<a name="l03715"></a>03715 {
<a name="l03716"></a>03716 <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> ((loader-><a class="code" href="structDBusMessageLoader.html#7af27694794dc471ed3b251da8d7c62e">corrupted</a> && loader-><a class="code" href="structDBusMessageLoader.html#c6116f8620094b8ce348b103483c0035">corruption_reason</a> != <a class="code" href="group__DBusMarshal.html#gg0c4521d30d6650a33673a4d7f9cc007ce68ac5067fe94cdcfb35e115f36298c8">DBUS_VALID</a>) ||
<a name="l03717"></a>03717 (!loader-><a class="code" href="structDBusMessageLoader.html#7af27694794dc471ed3b251da8d7c62e">corrupted</a> && loader-><a class="code" href="structDBusMessageLoader.html#c6116f8620094b8ce348b103483c0035">corruption_reason</a> == <a class="code" href="group__DBusMarshal.html#gg0c4521d30d6650a33673a4d7f9cc007ce68ac5067fe94cdcfb35e115f36298c8">DBUS_VALID</a>));
<a name="l03718"></a>03718 <span class="keywordflow">return</span> loader-><a class="code" href="structDBusMessageLoader.html#7af27694794dc471ed3b251da8d7c62e">corrupted</a>;
<a name="l03719"></a>03719 }
<a name="l03720"></a>03720
<a name="l03727"></a>03727 <span class="keywordtype">void</span>
<a name="l03728"></a><a class="code" href="group__DBusMessageInternals.html#g031623c6235f98801cab3e53f0a5f757">03728</a> <a class="code" href="group__DBusMessageInternals.html#g031623c6235f98801cab3e53f0a5f757">_dbus_message_loader_set_max_message_size</a> (<a class="code" href="structDBusMessageLoader.html">DBusMessageLoader</a> *loader,
<a name="l03729"></a>03729 <span class="keywordtype">long</span> size)
<a name="l03730"></a>03730 {
<a name="l03731"></a>03731 <span class="keywordflow">if</span> (size > <a class="code" href="group__DBusProtocol.html#g2874c299e1c87fe745ef09bf231264e9">DBUS_MAXIMUM_MESSAGE_LENGTH</a>)
<a name="l03732"></a>03732 {
<a name="l03733"></a>03733 _dbus_verbose (<span class="stringliteral">"clamping requested max message size %ld to %d\n"</span>,
<a name="l03734"></a>03734 size, <a class="code" href="group__DBusProtocol.html#g2874c299e1c87fe745ef09bf231264e9">DBUS_MAXIMUM_MESSAGE_LENGTH</a>);
<a name="l03735"></a>03735 size = <a class="code" href="group__DBusProtocol.html#g2874c299e1c87fe745ef09bf231264e9">DBUS_MAXIMUM_MESSAGE_LENGTH</a>;
<a name="l03736"></a>03736 }
<a name="l03737"></a>03737 loader-><a class="code" href="structDBusMessageLoader.html#174d67695b3aca6ee3bb8e1e5e033334">max_message_size</a> = size;
<a name="l03738"></a>03738 }
<a name="l03739"></a>03739
<a name="l03746"></a>03746 <span class="keywordtype">long</span>
<a name="l03747"></a><a class="code" href="group__DBusMessageInternals.html#gdd76a4b7191465f2dcb8e6b56b717961">03747</a> <a class="code" href="group__DBusMessageInternals.html#gdd76a4b7191465f2dcb8e6b56b717961">_dbus_message_loader_get_max_message_size</a> (<a class="code" href="structDBusMessageLoader.html">DBusMessageLoader</a> *loader)
<a name="l03748"></a>03748 {
<a name="l03749"></a>03749 <span class="keywordflow">return</span> loader-><a class="code" href="structDBusMessageLoader.html#174d67695b3aca6ee3bb8e1e5e033334">max_message_size</a>;
<a name="l03750"></a>03750 }
<a name="l03751"></a>03751
<a name="l03752"></a>03752 <span class="keyword">static</span> <a class="code" href="structDBusDataSlotAllocator.html">DBusDataSlotAllocator</a> slot_allocator;
<a name="l03753"></a>03753 <a class="code" href="group__DBusInternalsUtils.html#gc8d22e9846ecc2845959082076de899b">_DBUS_DEFINE_GLOBAL_LOCK</a> (message_slots);
<a name="l03754"></a>03754
<a name="l03769"></a>03769 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03770"></a><a class="code" href="group__DBusMessage.html#g537b3456202fdd9f305666504bde98fb">03770</a> <a class="code" href="group__DBusMessageInternals.html#g537b3456202fdd9f305666504bde98fb">dbus_message_allocate_data_slot</a> (<a class="code" href="group__DBusTypes.html#gb18afa60e9b17b6e322735bda3d863d8">dbus_int32_t</a> *slot_p)
<a name="l03771"></a>03771 {
<a name="l03772"></a>03772 <span class="keywordflow">return</span> <a class="code" href="group__DBusDataSlot.html#g941a12182e69c185bd27f6efbfbd0f86">_dbus_data_slot_allocator_alloc</a> (&slot_allocator,
<a name="l03773"></a>03773 &<a class="code" href="group__DBusInternalsUtils.html#gde571435b55fae64217f5142aa78ee8d">_DBUS_LOCK_NAME</a> (message_slots),
<a name="l03774"></a>03774 slot_p);
<a name="l03775"></a>03775 }
<a name="l03776"></a>03776
<a name="l03788"></a>03788 <span class="keywordtype">void</span>
<a name="l03789"></a><a class="code" href="group__DBusMessage.html#gc7a5ba135e1aec4ad8c7b43752af02e1">03789</a> <a class="code" href="group__DBusMessageInternals.html#gc7a5ba135e1aec4ad8c7b43752af02e1">dbus_message_free_data_slot</a> (<a class="code" href="group__DBusTypes.html#gb18afa60e9b17b6e322735bda3d863d8">dbus_int32_t</a> *slot_p)
<a name="l03790"></a>03790 {
<a name="l03791"></a>03791 _dbus_return_if_fail (*slot_p >= 0);
<a name="l03792"></a>03792
<a name="l03793"></a>03793 <a class="code" href="group__DBusDataSlot.html#g059c50a24cd9fc984e918e6159841633">_dbus_data_slot_allocator_free</a> (&slot_allocator, slot_p);
<a name="l03794"></a>03794 }
<a name="l03795"></a>03795
<a name="l03809"></a>03809 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03810"></a><a class="code" href="group__DBusMessage.html#g69d0bc701f9ca935e6de8a3f3e376c0a">03810</a> <a class="code" href="group__DBusMessageInternals.html#g69d0bc701f9ca935e6de8a3f3e376c0a">dbus_message_set_data</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l03811"></a>03811 <a class="code" href="group__DBusTypes.html#gb18afa60e9b17b6e322735bda3d863d8">dbus_int32_t</a> slot,
<a name="l03812"></a>03812 <span class="keywordtype">void</span> *data,
<a name="l03813"></a>03813 <a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a> free_data_func)
<a name="l03814"></a>03814 {
<a name="l03815"></a>03815 <a class="code" href="group__DBusMemory.html#g8792ec2b2b8626ca28022faf51ec415a">DBusFreeFunction</a> old_free_func;
<a name="l03816"></a>03816 <span class="keywordtype">void</span> *old_data;
<a name="l03817"></a>03817 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a> retval;
<a name="l03818"></a>03818
<a name="l03819"></a>03819 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03820"></a>03820 _dbus_return_val_if_fail (slot >= 0, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03821"></a>03821
<a name="l03822"></a>03822 retval = <a class="code" href="group__DBusDataSlot.html#gd2952f9f686d96e7114fc49ab7452e1a">_dbus_data_slot_list_set</a> (&slot_allocator,
<a name="l03823"></a>03823 &message-><a class="code" href="structDBusMessage.html#179c446523c6321e04f88a671363be19">slot_list</a>,
<a name="l03824"></a>03824 slot, data, free_data_func,
<a name="l03825"></a>03825 &old_free_func, &old_data);
<a name="l03826"></a>03826
<a name="l03827"></a>03827 <span class="keywordflow">if</span> (retval)
<a name="l03828"></a>03828 {
<a name="l03829"></a>03829 <span class="comment">/* Do the actual free outside the message lock */</span>
<a name="l03830"></a>03830 <span class="keywordflow">if</span> (old_free_func)
<a name="l03831"></a>03831 (* old_free_func) (old_data);
<a name="l03832"></a>03832 }
<a name="l03833"></a>03833
<a name="l03834"></a>03834 <span class="keywordflow">return</span> retval;
<a name="l03835"></a>03835 }
<a name="l03836"></a>03836
<a name="l03845"></a>03845 <span class="keywordtype">void</span>*
<a name="l03846"></a><a class="code" href="group__DBusMessage.html#g62769bfaf8f1b2edc7922c579bc0649d">03846</a> <a class="code" href="group__DBusMessageInternals.html#g62769bfaf8f1b2edc7922c579bc0649d">dbus_message_get_data</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *message,
<a name="l03847"></a>03847 <a class="code" href="group__DBusTypes.html#gb18afa60e9b17b6e322735bda3d863d8">dbus_int32_t</a> slot)
<a name="l03848"></a>03848 {
<a name="l03849"></a>03849 <span class="keywordtype">void</span> *res;
<a name="l03850"></a>03850
<a name="l03851"></a>03851 _dbus_return_val_if_fail (message != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03852"></a>03852
<a name="l03853"></a>03853 res = <a class="code" href="group__DBusDataSlot.html#g43f741229f0c38788442601e2750ec66">_dbus_data_slot_list_get</a> (&slot_allocator,
<a name="l03854"></a>03854 &message-><a class="code" href="structDBusMessage.html#179c446523c6321e04f88a671363be19">slot_list</a>,
<a name="l03855"></a>03855 slot);
<a name="l03856"></a>03856
<a name="l03857"></a>03857 <span class="keywordflow">return</span> res;
<a name="l03858"></a>03858 }
<a name="l03859"></a>03859
<a name="l03873"></a>03873 <span class="keywordtype">int</span>
<a name="l03874"></a><a class="code" href="group__DBusMessage.html#g40412bdfc6ba9cf9e167db4c23df0a7e">03874</a> <a class="code" href="group__DBusMessageInternals.html#g40412bdfc6ba9cf9e167db4c23df0a7e">dbus_message_type_from_string</a> (<span class="keyword">const</span> <span class="keywordtype">char</span> *type_str)
<a name="l03875"></a>03875 {
<a name="l03876"></a>03876 <span class="keywordflow">if</span> (strcmp (type_str, <span class="stringliteral">"method_call"</span>) == 0)
<a name="l03877"></a>03877 <span class="keywordflow">return</span> <a class="code" href="group__DBusProtocol.html#g09416afd76b65139eddd31e1085d9ebf">DBUS_MESSAGE_TYPE_METHOD_CALL</a>;
<a name="l03878"></a>03878 <span class="keywordflow">if</span> (strcmp (type_str, <span class="stringliteral">"method_return"</span>) == 0)
<a name="l03879"></a>03879 <span class="keywordflow">return</span> <a class="code" href="group__DBusProtocol.html#g4a9012edd7f22342f845e98150aeb858">DBUS_MESSAGE_TYPE_METHOD_RETURN</a>;
<a name="l03880"></a>03880 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp (type_str, <span class="stringliteral">"signal"</span>) == 0)
<a name="l03881"></a>03881 <span class="keywordflow">return</span> <a class="code" href="group__DBusProtocol.html#g728d893ff0c00e126517ba39835220a5">DBUS_MESSAGE_TYPE_SIGNAL</a>;
<a name="l03882"></a>03882 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp (type_str, <span class="stringliteral">"error"</span>) == 0)
<a name="l03883"></a>03883 <span class="keywordflow">return</span> <a class="code" href="group__DBusProtocol.html#g2b9423d95066313d73eeea8eeaf86812">DBUS_MESSAGE_TYPE_ERROR</a>;
<a name="l03884"></a>03884 <span class="keywordflow">else</span>
<a name="l03885"></a>03885 <span class="keywordflow">return</span> <a class="code" href="group__DBusProtocol.html#gc975525a6ce258a7a70c583c9741b516">DBUS_MESSAGE_TYPE_INVALID</a>;
<a name="l03886"></a>03886 }
<a name="l03887"></a>03887
<a name="l03901"></a>03901 <span class="keyword">const</span> <span class="keywordtype">char</span> *
<a name="l03902"></a><a class="code" href="group__DBusMessage.html#g75bcb613a291eb7e427f77f2f3635b8f">03902</a> <a class="code" href="group__DBusMessageInternals.html#g75bcb613a291eb7e427f77f2f3635b8f">dbus_message_type_to_string</a> (<span class="keywordtype">int</span> type)
<a name="l03903"></a>03903 {
<a name="l03904"></a>03904 <span class="keywordflow">switch</span> (type)
<a name="l03905"></a>03905 {
<a name="l03906"></a>03906 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#g09416afd76b65139eddd31e1085d9ebf">DBUS_MESSAGE_TYPE_METHOD_CALL</a>:
<a name="l03907"></a>03907 <span class="keywordflow">return</span> <span class="stringliteral">"method_call"</span>;
<a name="l03908"></a>03908 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#g4a9012edd7f22342f845e98150aeb858">DBUS_MESSAGE_TYPE_METHOD_RETURN</a>:
<a name="l03909"></a>03909 <span class="keywordflow">return</span> <span class="stringliteral">"method_return"</span>;
<a name="l03910"></a>03910 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#g728d893ff0c00e126517ba39835220a5">DBUS_MESSAGE_TYPE_SIGNAL</a>:
<a name="l03911"></a>03911 <span class="keywordflow">return</span> <span class="stringliteral">"signal"</span>;
<a name="l03912"></a>03912 <span class="keywordflow">case</span> <a class="code" href="group__DBusProtocol.html#g2b9423d95066313d73eeea8eeaf86812">DBUS_MESSAGE_TYPE_ERROR</a>:
<a name="l03913"></a>03913 <span class="keywordflow">return</span> <span class="stringliteral">"error"</span>;
<a name="l03914"></a>03914 <span class="keywordflow">default</span>:
<a name="l03915"></a>03915 <span class="keywordflow">return</span> <span class="stringliteral">"invalid"</span>;
<a name="l03916"></a>03916 }
<a name="l03917"></a>03917 }
<a name="l03918"></a>03918
<a name="l03931"></a>03931 <a class="code" href="group__DBusTypes.html#g39c9cb0f3a2a8ad6f55cc4855d035349">dbus_bool_t</a>
<a name="l03932"></a><a class="code" href="group__DBusMessage.html#gd85c737f9e7d03005d6028d6bbae7e87">03932</a> <a class="code" href="group__DBusMessageInternals.html#gd85c737f9e7d03005d6028d6bbae7e87">dbus_message_marshal</a> (<a class="code" href="structDBusMessage.html">DBusMessage</a> *msg,
<a name="l03933"></a>03933 <span class="keywordtype">char</span> **marshalled_data_p,
<a name="l03934"></a>03934 <span class="keywordtype">int</span> *len_p)
<a name="l03935"></a>03935 {
<a name="l03936"></a>03936 <a class="code" href="structDBusString.html">DBusString</a> tmp;
<a name="l03937"></a>03937
<a name="l03938"></a>03938 _dbus_return_val_if_fail (msg != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03939"></a>03939 _dbus_return_val_if_fail (marshalled_data_p != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03940"></a>03940 _dbus_return_val_if_fail (len_p != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l03941"></a>03941
<a name="l03942"></a>03942 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g348252317f7bb8ac43529972945830ae">_dbus_string_init</a> (&tmp))
<a name="l03943"></a>03943 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03944"></a>03944
<a name="l03945"></a>03945 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g3c10f0d1bcaa3b450025b9c6a8b901d7">_dbus_string_copy</a> (&(msg-><a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>.<a class="code" href="structDBusHeader.html#67df8bff43c10e2d4f6ae36b56ee5814">data</a>), 0, &tmp, 0))
<a name="l03946"></a>03946 <span class="keywordflow">goto</span> fail;
<a name="l03947"></a>03947
<a name="l03948"></a>03948 *len_p = _dbus_string_get_length (&tmp);
<a name="l03949"></a>03949
<a name="l03950"></a>03950 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g3c10f0d1bcaa3b450025b9c6a8b901d7">_dbus_string_copy</a> (&(msg-><a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>), 0, &tmp, *len_p))
<a name="l03951"></a>03951 <span class="keywordflow">goto</span> fail;
<a name="l03952"></a>03952
<a name="l03953"></a>03953 *len_p = _dbus_string_get_length (&tmp);
<a name="l03954"></a>03954
<a name="l03955"></a>03955 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g556cc30c3ab032dbc63e217119f0d1f5">_dbus_string_steal_data</a> (&tmp, marshalled_data_p))
<a name="l03956"></a>03956 <span class="keywordflow">goto</span> fail;
<a name="l03957"></a>03957
<a name="l03958"></a>03958 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&tmp);
<a name="l03959"></a>03959 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga8cecfc5c5c054d2875c03e77b7be15d">TRUE</a>;
<a name="l03960"></a>03960
<a name="l03961"></a>03961 fail:
<a name="l03962"></a>03962 <a class="code" href="group__DBusString.html#g781ca91acda49a834dce7d0ed0eef212">_dbus_string_free</a> (&tmp);
<a name="l03963"></a>03963 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>;
<a name="l03964"></a>03964 }
<a name="l03965"></a>03965
<a name="l03978"></a>03978 <a class="code" href="structDBusMessage.html">DBusMessage</a> *
<a name="l03979"></a><a class="code" href="group__DBusMessage.html#g776fe8b5cd935d642875efa1d13a31b3">03979</a> <a class="code" href="group__DBusMessageInternals.html#g776fe8b5cd935d642875efa1d13a31b3">dbus_message_demarshal</a> (<span class="keyword">const</span> <span class="keywordtype">char</span> *str,
<a name="l03980"></a>03980 <span class="keywordtype">int</span> len,
<a name="l03981"></a>03981 <a class="code" href="structDBusError.html">DBusError</a> *error)
<a name="l03982"></a>03982 {
<a name="l03983"></a>03983 <a class="code" href="structDBusMessageLoader.html">DBusMessageLoader</a> *loader;
<a name="l03984"></a>03984 <a class="code" href="structDBusString.html">DBusString</a> *buffer;
<a name="l03985"></a>03985 <a class="code" href="structDBusMessage.html">DBusMessage</a> *msg;
<a name="l03986"></a>03986
<a name="l03987"></a>03987 _dbus_return_val_if_fail (str != <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>, <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>);
<a name="l03988"></a>03988
<a name="l03989"></a>03989 loader = <a class="code" href="group__DBusMessageInternals.html#g66f1c10cf909ba09ed732bc125ff8671">_dbus_message_loader_new</a> ();
<a name="l03990"></a>03990
<a name="l03991"></a>03991 <span class="keywordflow">if</span> (loader == <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>)
<a name="l03992"></a>03992 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l03993"></a>03993
<a name="l03994"></a>03994 <a class="code" href="group__DBusMessageInternals.html#ge77f064b8034189a955d5be982d2fbdb">_dbus_message_loader_get_buffer</a> (loader, &buffer);
<a name="l03995"></a>03995 <a class="code" href="group__DBusString.html#g724656b7091b910965bd1af42d0b7bab">_dbus_string_append_len</a> (buffer, str, len);
<a name="l03996"></a>03996 <a class="code" href="group__DBusMessageInternals.html#gc559604b855d0eb6f32b8c20328553cc">_dbus_message_loader_return_buffer</a> (loader, buffer, len);
<a name="l03997"></a>03997
<a name="l03998"></a>03998 <span class="keywordflow">if</span> (!<a class="code" href="group__DBusMessageInternals.html#gf55885371a6d022ec94c79bd7138923f">_dbus_message_loader_queue_messages</a> (loader))
<a name="l03999"></a>03999 <span class="keywordflow">goto</span> fail_oom;
<a name="l04000"></a>04000
<a name="l04001"></a>04001 <span class="keywordflow">if</span> (<a class="code" href="group__DBusMessageInternals.html#g38da52ac9344b00df530098bdd9a3842">_dbus_message_loader_get_is_corrupted</a> (loader))
<a name="l04002"></a>04002 <span class="keywordflow">goto</span> fail_corrupt;
<a name="l04003"></a>04003
<a name="l04004"></a>04004 msg = <a class="code" href="group__DBusMessageInternals.html#g9e5e75716d7263d9908d45a60b1b6bdc">_dbus_message_loader_pop_message</a> (loader);
<a name="l04005"></a>04005
<a name="l04006"></a>04006 <span class="keywordflow">if</span> (!msg)
<a name="l04007"></a>04007 <span class="keywordflow">goto</span> fail_oom;
<a name="l04008"></a>04008
<a name="l04009"></a>04009 <a class="code" href="group__DBusMessageInternals.html#g51299aab1f5e0b2408ab858d3377b20c">_dbus_message_loader_unref</a> (loader);
<a name="l04010"></a>04010 <span class="keywordflow">return</span> msg;
<a name="l04011"></a>04011
<a name="l04012"></a>04012 fail_corrupt:
<a name="l04013"></a>04013 <a class="code" href="group__DBusErrors.html#g4e1b4b297468006781a957129ad9cf00">dbus_set_error</a> (error, <a class="code" href="group__DBusProtocol.html#gcf5321b161193ad66d5bdf5c910a9792">DBUS_ERROR_INVALID_ARGS</a>, <span class="stringliteral">"Message is corrupted"</span>);
<a name="l04014"></a>04014 <a class="code" href="group__DBusMessageInternals.html#g51299aab1f5e0b2408ab858d3377b20c">_dbus_message_loader_unref</a> (loader);
<a name="l04015"></a>04015 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l04016"></a>04016
<a name="l04017"></a>04017 fail_oom:
<a name="l04018"></a>04018 _DBUS_SET_OOM (error);
<a name="l04019"></a>04019 <a class="code" href="group__DBusMessageInternals.html#g51299aab1f5e0b2408ab858d3377b20c">_dbus_message_loader_unref</a> (loader);
<a name="l04020"></a>04020 <span class="keywordflow">return</span> <a class="code" href="group__DBusMacros.html#g070d2ce7b6bb7e5c05602aa8c308d0c4">NULL</a>;
<a name="l04021"></a>04021 }
<a name="l04022"></a>04022
<a name="l04025"></a>04025 <span class="comment">/* tests in dbus-message-util.c */</span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Dec 14 22:26:12 2009 for D-Bus by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
</body>
</html>