KGRKJGETMRETU895U-589TY5MIGM5JGB5SDFESFREWTGR54TY
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 :  /usr/share/devhelp/books/dbus/api/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //usr/share/devhelp/books/dbus/api/dbus-message_8c-source.html
<!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&nbsp;Page</span></a></li>
    <li><a href="modules.html"><span>Modules</span></a></li>
    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
    <li id="current"><a href="files.html"><span>Files</span></a></li>
    <li><a href="pages.html"><span>Related&nbsp;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 &lt;string.h&gt;</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 = &amp;_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-&gt;<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 (&amp;message-&gt;<a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>, &amp;type_str, &amp;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-&gt;<a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a>,
<a name="l00123"></a>00123                           DBUS_COMPILER_BYTE_ORDER,
<a name="l00124"></a>00124                           &amp;message-&gt;<a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>, 0);
<a name="l00125"></a>00125 
<a name="l00126"></a>00126   message-&gt;<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> (&amp;message-&gt;<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-&gt;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-&gt;<a class="code" href="structDBusMessage.html#c926e7027f22608d75a6dfe18680b9e7">locked</a>);
<a name="l00157"></a>00157 
<a name="l00158"></a>00158   *header = &amp;message-&gt;<a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>.<a class="code" href="structDBusHeader.html#67df8bff43c10e2d4f6ae36b56ee5814">data</a>;
<a name="l00159"></a>00159   *body = &amp;message-&gt;<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-&gt;<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> (&amp;message-&gt;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-&gt;<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-&gt;<a class="code" href="structDBusMessage.html#b8f43d40fa870f97f1126256568cec61">size_counter_delta</a> =
<a name="l00205"></a>00205         _dbus_string_get_length (&amp;message-&gt;<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 (&amp;message-&gt;<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-&gt;<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> (&amp;message-&gt;<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-&gt;<a class="code" href="structDBusList.html#29ab457bcf9092252bb0c4282c727055">data</a>, message-&gt;<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> (&amp;message-&gt;<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> (&amp;message-&gt;<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-&gt;<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-&gt;<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> (&amp;message-&gt;<a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l00290"></a>00290                                    _dbus_string_get_length (&amp;message-&gt;<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 (&amp;message-&gt;<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-&gt;<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> (&amp;message-&gt;<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> (&amp;message-&gt;<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                                          &amp;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-&gt;<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 (&amp;message-&gt;<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 &lt; <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 &gt;= 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 &gt; 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 &lt; <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 &gt;= 0);
<a name="l00482"></a>00482   <a class="code" href="group__DBusInternalsUtils.html#g129c6c03f011cdc171934d5d386cc797">_dbus_assert</a> (i &lt; <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-&gt;<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-&gt;<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-&gt;<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-&gt;<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> (&amp;message-&gt;<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> (&amp;message-&gt;<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> (&amp;message-&gt;<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 &lt; <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 &gt;= 0);
<a name="l00549"></a>00549 
<a name="l00550"></a>00550   <span class="keywordflow">if</span> ((_dbus_string_get_length (&amp;message-&gt;<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 (&amp;message-&gt;<a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>)) &gt;
<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 &gt;= <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 &lt; <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-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<a class="code" href="structDBusMessageRealIter.html#552cb582c65645ed46d9d1ad38ece3c7">message</a>-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<a class="code" href="structDBusMessageRealIter.html#552cb582c65645ed46d9d1ad38ece3c7">message</a>-&gt;<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-&gt;<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-&gt;<a class="code" href="structDBusMessageRealIter.html#c10324f74497a5c2288eef8fbcd3ae42">changed_stamp</a> != iter-&gt;<a class="code" href="structDBusMessageRealIter.html#552cb582c65645ed46d9d1ad38ece3c7">message</a>-&gt;<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> (&amp;real-&gt;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> (&amp;real-&gt;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> (&amp;real-&gt;u.reader, &amp;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> (&amp;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> (&amp;real-&gt;u.reader, &amp;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> (&amp;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> (&amp;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> (&amp;real-&gt;u.reader, &amp;array);
<a name="l00752"></a>00752 
<a name="l00753"></a>00753               i = 0;
<a name="l00754"></a>00754               <span class="keywordflow">while</span> (i &lt; 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> (&amp;array,
<a name="l00758"></a>00758                                                 &amp;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> (&amp;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> (&amp;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> (&amp;real-&gt;u.reader) &amp;&amp; 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> (&amp;message-&gt;<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-&gt;<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> (&amp;message-&gt;<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                                        &amp;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> (&amp;message-&gt;<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                                     &amp;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-&gt;<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> (&amp;message-&gt;<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> (&amp;message-&gt;<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> (&amp;message-&gt;<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> (&amp;message-&gt;<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> (&amp;message-&gt;<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-&gt;<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-&gt;<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-&gt;<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-&gt;<a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a> = DBUS_COMPILER_BYTE_ORDER;
<a name="l00972"></a>00972   message-&gt;<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-&gt;<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-&gt;<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-&gt;<a class="code" href="structDBusMessage.html#b8f43d40fa870f97f1126256568cec61">size_counter_delta</a> = 0;
<a name="l00978"></a>00978   message-&gt;<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> (&amp;message-&gt;<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> (&amp;message-&gt;<a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>, message-&gt;<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> (&amp;message-&gt;<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> (&amp;message-&gt;<a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>, message-&gt;<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> (&amp;message-&gt;<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> (&amp;message-&gt;<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> (&amp;message-&gt;<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> (&amp;message-&gt;<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> (&amp;message-&gt;<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> (&amp;message-&gt;<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> (&amp;message-&gt;<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, &amp;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> (&amp;iter,
<a name="l01240"></a>01240                                            <a class="code" href="group__DBusProtocol.html#g7eb77066dadf5415896b44c56d93acce">DBUS_TYPE_STRING</a>,
<a name="l01241"></a>01241                                            &amp;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> (&amp;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> (&amp;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 (&amp;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> (&amp;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-&gt;<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-&gt;<a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a> = message-&gt;<a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a>;
<a name="l01323"></a>01323   retval-&gt;<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-&gt;<a class="code" href="structDBusMessage.html#96263aa8a777c8c661d2596911c7d592">generation</a> = message-&gt;<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> (&amp;message-&gt;<a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>, &amp;retval-&gt;<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> (&amp;retval-&gt;<a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>,
<a name="l01335"></a>01335                                        _dbus_string_get_length (&amp;message-&gt;<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> (&amp;retval-&gt;<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> (&amp;message-&gt;<a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>, 0,
<a name="l01343"></a>01343                           &amp;retval-&gt;<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> (&amp;retval-&gt;<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> (&amp;retval-&gt;<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-&gt;<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-&gt;<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> (&amp;message-&gt;<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 &gt;= 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-&gt;<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-&gt;<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> (&amp;message-&gt;<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 &gt;= 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> (&amp;message-&gt;<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, &amp;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> (&amp;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> (&amp;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                                                  &amp;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> (&amp;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 &lt; 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> (&amp;array,
<a name="l01587"></a>01587                                                        element_type,
<a name="l01588"></a>01588                                                        &amp;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> (&amp;iter, &amp;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, &amp;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> (&amp;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>) &lt;= <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-&gt;<a class="code" href="structDBusMessageRealIter.html#552cb582c65645ed46d9d1ad38ece3c7">message</a> = message;
<a name="l01714"></a>01714   real-&gt;<a class="code" href="structDBusMessageRealIter.html#c10324f74497a5c2288eef8fbcd3ae42">changed_stamp</a> = message-&gt;<a class="code" href="structDBusMessage.html#5d102e908f6ff96a5a0aa6a39b4963a8">changed_stamp</a>;
<a name="l01715"></a>01715   real-&gt;<a class="code" href="structDBusMessageRealIter.html#835b7990b2909beb06fc2dc38b76a089">iter_type</a> = iter_type;
<a name="l01716"></a>01716   real-&gt;<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 (&amp;message-&gt;<a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>, &amp;type_str, &amp;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> (&amp;real-&gt;<a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>.<a class="code" href="structDBusMessageRealIter.html#e5c4e45b0a5d6642850144f642d7db67">reader</a>,
<a name="l01758"></a>01758                           message-&gt;<a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a>,
<a name="l01759"></a>01759                           type_str, type_pos,
<a name="l01760"></a>01760                           &amp;message-&gt;<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> (&amp;real-&gt;<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-&gt;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> (&amp;real-&gt;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-&gt;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> (&amp;real-&gt;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-&gt;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> (&amp;real-&gt;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-&gt;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> (&amp;real-&gt;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> (&amp;real-&gt;u.reader, &amp;real_sub-&gt;<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> (&amp;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> (&amp;real-&gt;u.reader, &amp;sig,
<a name="l01912"></a>01912                                    &amp;start, &amp;len);
<a name="l01913"></a>01913   <span class="keywordflow">if</span> (!<a class="code" href="group__DBusString.html#g724656b7091b910965bd1af42d0b7bab">_dbus_string_append_len</a> (&amp;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> (&amp;retstr, &amp;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> (&amp;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> (&amp;real-&gt;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> (&amp;real-&gt;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>(&amp;real-&gt;<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> (&amp;real-&gt;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> (&amp;real-&gt;<a class="code" href="structDBusMessageRealIter.html#c9c3ce5775bc9f5f0720b65093345ec6">u</a>.<a class="code" href="structDBusMessageRealIter.html#93bc11bb1521743170b0b411b32140cf">writer</a>,
<a name="l02080"></a>02080                                         message-&gt;<a class="code" href="structDBusMessage.html#d541d18c22a8a0d5f13822b0851ef57e">byte_order</a>,
<a name="l02081"></a>02081                                         &amp;message-&gt;<a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>,
<a name="l02082"></a>02082                                         _dbus_string_get_length (&amp;message-&gt;<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-&gt;<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-&gt;<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-&gt;<a class="code" href="structDBusMessageRealIter.html#93789e6f814d55b5952fee34d286f6d6">sig_refcount</a> &gt; 0);
<a name="l02105"></a>02105       real-&gt;<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> (&amp;real-&gt;<a class="code" href="structDBusMessageRealIter.html#552cb582c65645ed46d9d1ad38ece3c7">message</a>-&gt;<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                                    &amp;current_sig, &amp;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-&gt;<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> (&amp;real-&gt;<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-&gt;<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-&gt;<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-&gt;<a class="code" href="structDBusMessageRealIter.html#93789e6f814d55b5952fee34d286f6d6">sig_refcount</a> &gt; 0);
<a name="l02174"></a>02174 
<a name="l02175"></a>02175   real-&gt;<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-&gt;<a class="code" href="structDBusMessageRealIter.html#93789e6f814d55b5952fee34d286f6d6">sig_refcount</a> &gt; 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-&gt;<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-&gt;<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> (&amp;real-&gt;<a class="code" href="structDBusMessageRealIter.html#552cb582c65645ed46d9d1ad38ece3c7">message</a>-&gt;<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                                      &amp;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> (&amp;real-&gt;<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-&gt;message-&gt;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-&gt;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> (&amp;real-&gt;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-&gt;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-&gt;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 &gt;= 0, <a class="code" href="group__DBusMacros.html#ga93f0eb578d23995850d61f7d61c55c1">FALSE</a>);
<a name="l02305"></a>02305   _dbus_return_val_if_fail (n_elements &lt;=
<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> (&amp;real-&gt;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-&gt;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> &amp;&amp;
<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> &amp;&amp;
<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> &amp;&amp;
<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> &amp;&amp;
<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> &amp;&amp; contained_signature &amp;&amp; *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> (&amp;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> (&amp;real-&gt;u.writer,
<a name="l02377"></a>02377                                         type,
<a name="l02378"></a>02378                                         &amp;contained_str, 0,
<a name="l02379"></a>02379                                         &amp;real_sub-&gt;<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> (&amp;real-&gt;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                                         &amp;real_sub-&gt;<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-&gt;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-&gt;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> (&amp;real-&gt;u.writer,
<a name="l02418"></a>02418                                      &amp;real_sub-&gt;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-&gt;<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> (&amp;message-&gt;<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> (&amp;message-&gt;<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-&gt;<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> (&amp;message-&gt;<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> (&amp;message-&gt;<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-&gt;<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> (&amp;message-&gt;<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                                 &amp;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-&gt;<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> (&amp;message-&gt;<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                                 &amp;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-&gt;<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> (&amp;message-&gt;<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                                 &amp;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-&gt;<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> (&amp;message-&gt;<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                                 &amp;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-&gt;<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> (&amp;message-&gt;<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                                 &amp;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-&gt;<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> (&amp;message-&gt;<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                                 &amp;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 (&amp;message-&gt;<a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>, &amp;type_str, &amp;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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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>, &amp;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-&gt;<a class="code" href="structDBusMessageLoader.html#f3372b7d574dab49a7435d8f29ea2258">refcount</a> = 1;
<a name="l03313"></a>03313 
<a name="l03314"></a>03314   loader-&gt;<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-&gt;<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-&gt;<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> (&amp;loader-&gt;<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> (&amp;loader-&gt;<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> (&amp;loader-&gt;<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-&gt;<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-&gt;<a class="code" href="structDBusMessageLoader.html#f3372b7d574dab49a7435d8f29ea2258">refcount</a> -= 1;
<a name="l03357"></a>03357   <span class="keywordflow">if</span> (loader-&gt;<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> (&amp;loader-&gt;<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> (&amp;loader-&gt;<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> (&amp;loader-&gt;<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-&gt;<a class="code" href="structDBusMessageLoader.html#7fe926ecd87e9ddb37e7481195bc3d67">buffer_outstanding</a>);
<a name="l03391"></a>03391 
<a name="l03392"></a>03392   *buffer = &amp;loader-&gt;<a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>;
<a name="l03393"></a>03393 
<a name="l03394"></a>03394   loader-&gt;<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-&gt;<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 == &amp;loader-&gt;<a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>);
<a name="l03414"></a>03414 
<a name="l03415"></a>03415   loader-&gt;<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-&gt;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> (&amp;loader-&gt;<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 (&amp;message-&gt;<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) &lt;= _dbus_string_get_length (&amp;loader-&gt;<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> (&amp;message-&gt;<a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>,
<a name="l03471"></a>03471                           mode,
<a name="l03472"></a>03472                           &amp;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                           &amp;loader-&gt;<a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>, 0,
<a name="l03478"></a>03478                           _dbus_string_get_length (&amp;loader-&gt;<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-&gt;<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-&gt;<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-&gt;<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 (&amp;message-&gt;<a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>, &amp;type_str, &amp;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                                                   &amp;loader-&gt;<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-&gt;<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-&gt;<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> (&amp;loader-&gt;<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 (&amp;message-&gt;<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 (&amp;loader-&gt;<a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>) &gt;=
<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> (&amp;loader-&gt;<a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>, header_len, body_len, &amp;message-&gt;<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> (&amp;loader-&gt;<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 (&amp;message-&gt;<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 (&amp;message-&gt;<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-&gt;<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-&gt;<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> (&amp;loader-&gt;<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> (&amp;loader-&gt;<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-&gt;<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-&gt;<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> (&amp;loader-&gt;<a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>, 0, _dbus_string_get_length (&amp;loader-&gt;<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-&gt;<a class="code" href="structDBusMessageLoader.html#7af27694794dc471ed3b251da8d7c62e">corrupted</a> &amp;&amp;
<a name="l03595"></a>03595          _dbus_string_get_length (&amp;loader-&gt;<a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>) &gt;= <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-&gt;<a class="code" href="structDBusMessageLoader.html#174d67695b3aca6ee3bb8e1e5e033334">max_message_size</a>,
<a name="l03601"></a>03601                                                &amp;validity,
<a name="l03602"></a>03602                                                &amp;byte_order,
<a name="l03603"></a>03603                                                &amp;fields_array_len,
<a name="l03604"></a>03604                                                &amp;header_len,
<a name="l03605"></a>03605                                                &amp;body_len,
<a name="l03606"></a>03606                                                &amp;loader-&gt;<a class="code" href="structDBusMessageLoader.html#33c22d4f64a32a72faefb1df94fcfed1">data</a>, 0,
<a name="l03607"></a>03607                                                _dbus_string_get_length (&amp;loader-&gt;<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-&gt;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-&gt;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> (&amp;loader-&gt;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-&gt;<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-&gt;<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-&gt;<a class="code" href="structDBusMessageLoader.html#5ad667f9a5b58d23f2089e7cea58f6cc">messages</a>)
<a name="l03658"></a>03658     <span class="keywordflow">return</span> loader-&gt;<a class="code" href="structDBusMessageLoader.html#5ad667f9a5b58d23f2089e7cea58f6cc">messages</a>-&gt;<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> (&amp;loader-&gt;<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> (&amp;loader-&gt;<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> (&amp;loader-&gt;<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-&gt;<a class="code" href="structDBusMessageLoader.html#7af27694794dc471ed3b251da8d7c62e">corrupted</a> &amp;&amp; loader-&gt;<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-&gt;<a class="code" href="structDBusMessageLoader.html#7af27694794dc471ed3b251da8d7c62e">corrupted</a> &amp;&amp; loader-&gt;<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-&gt;<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 &gt; <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-&gt;<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-&gt;<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> (&amp;slot_allocator,
<a name="l03773"></a>03773                                           &amp;<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 &gt;= 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> (&amp;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 &gt;= 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> (&amp;slot_allocator,
<a name="l03823"></a>03823                                      &amp;message-&gt;<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                                      &amp;old_free_func, &amp;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> (&amp;slot_allocator,
<a name="l03854"></a>03854                                   &amp;message-&gt;<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> (&amp;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> (&amp;(msg-&gt;<a class="code" href="structDBusMessage.html#00cf6910d9f3bee5d5a82137c8c64a42">header</a>.<a class="code" href="structDBusHeader.html#67df8bff43c10e2d4f6ae36b56ee5814">data</a>), 0, &amp;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 (&amp;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> (&amp;(msg-&gt;<a class="code" href="structDBusMessage.html#0b9d14d6e0529f0ec2e3c0087fe62a9e">body</a>), 0, &amp;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 (&amp;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> (&amp;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> (&amp;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> (&amp;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, &amp;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&nbsp;
<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>

Anon7 - 2021