dbus-pending-call.c revision e3dc6e281aae288e995f9d6a2675662ac3d0749f
1a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington/* -*- mode: C; c-file-style: "gnu" -*- */
2a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington/* dbus-pending-call.c Object representing a call in progress.
3a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington *
4a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * Copyright (C) 2002, 2003 Red Hat Inc.
5a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington *
643605a6f4e78a8c28afb4b1e924dff0301e0e95cHavoc Pennington * Licensed under the Academic Free License version 2.1
7a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington *
8a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * This program is free software; you can redistribute it and/or modify
9a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * it under the terms of the GNU General Public License as published by
10a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * the Free Software Foundation; either version 2 of the License, or
11a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * (at your option) any later version.
12a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington *
13a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * This program is distributed in the hope that it will be useful,
14a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * but WITHOUT ANY WARRANTY; without even the implied warranty of
15a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * GNU General Public License for more details.
17a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington *
18a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * You should have received a copy of the GNU General Public License
19a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * along with this program; if not, write to the Free Software
20a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington *
22a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington */
23a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
24a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington#include "dbus-internals.h"
25ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington#include "dbus-connection-internal.h"
26e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J#include "dbus-pending-call-internal.h"
27ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington#include "dbus-pending-call.h"
28a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington#include "dbus-list.h"
29a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington#include "dbus-threads.h"
30a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington#include "dbus-test.h"
31a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
32a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington/**
33a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @defgroup DBusPendingCallInternals DBusPendingCall implementation details
34a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @ingroup DBusInternals
35a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @brief DBusPendingCall private implementation details.
36a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington *
37a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * The guts of DBusPendingCall and its methods.
38a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington *
39a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @{
40a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington */
41a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
42e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J/**
43e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @brief Internals of DBusPendingCall
44e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J *
45e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * Opaque object representing a reply message that we're waiting for.
46e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J */
47e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (Jstruct DBusPendingCall
48e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J{
49e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  DBusAtomic refcount;                            /**< reference count */
50e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
51e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  DBusDataSlotList slot_list;                     /**< Data stored by allocated integer ID */
52e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
53e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  DBusPendingCallNotifyFunction function;         /**< Notifier when reply arrives. */
54e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
55e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  DBusConnection *connection;                     /**< Connections we're associated with */
56e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  DBusMessage *reply;                             /**< Reply (after we've received it) */
57e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  DBusTimeout *timeout;                           /**< Timeout */
58e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
59e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  DBusList *timeout_link;                         /**< Preallocated timeout response */
60e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
61e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  dbus_uint32_t reply_serial;                     /**< Expected serial of reply */
62e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
63e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  unsigned int completed : 1;                     /**< TRUE if completed */
64e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  unsigned int timeout_added : 1;                 /**< Have added the timeout */
65e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J};
66e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
67583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Penningtonstatic dbus_int32_t notify_user_data_slot = -1;
68583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
69a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington/**
70a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * Creates a new pending reply object.
71a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington *
72a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @param connection connection where reply will arrive
73ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington * @param timeout_milliseconds length of timeout, -1 for default
74ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington * @param timeout_handler timeout handler, takes pending call as data
75a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @returns a new #DBusPendingCall or #NULL if no memory.
76a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington */
77a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc PenningtonDBusPendingCall*
78ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington_dbus_pending_call_new (DBusConnection    *connection,
79ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington                        int                timeout_milliseconds,
80ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington                        DBusTimeoutHandler timeout_handler)
81a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington{
82a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington  DBusPendingCall *pending;
83ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington  DBusTimeout *timeout;
84a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
85aad6fa897f85486386b030847151cb09943c97c0Havoc Pennington  _dbus_assert (timeout_milliseconds >= 0 || timeout_milliseconds == -1);
86ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington
87ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington  if (timeout_milliseconds == -1)
88ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington    timeout_milliseconds = _DBUS_DEFAULT_TIMEOUT_VALUE;
89583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
909e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington  /* it would probably seem logical to pass in _DBUS_INT_MAX for
919e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington   * infinite timeout, but then math in
929e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington   * _dbus_connection_block_for_reply would get all overflow-prone, so
939e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington   * smack that down.
949e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington   */
959e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington  if (timeout_milliseconds > _DBUS_ONE_HOUR_IN_MILLISECONDS * 6)
969e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington    timeout_milliseconds = _DBUS_ONE_HOUR_IN_MILLISECONDS * 6;
979e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington
98583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  if (!dbus_pending_call_allocate_data_slot (&notify_user_data_slot))
99583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington    return NULL;
100ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington
1014097e94af3d2fb1eb865343e3f76ca3949e7c69bHavoc Pennington  pending = dbus_new0 (DBusPendingCall, 1);
102a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
103a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington  if (pending == NULL)
104583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington    {
105583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington      dbus_pending_call_free_data_slot (&notify_user_data_slot);
106583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington      return NULL;
107583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington    }
108a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
109ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington  timeout = _dbus_timeout_new (timeout_milliseconds,
110ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington                               timeout_handler,
111ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington			       pending, NULL);
112ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington
113ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington  if (timeout == NULL)
114ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington    {
115583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington      dbus_pending_call_free_data_slot (&notify_user_data_slot);
116ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington      dbus_free (pending);
117ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington      return NULL;
118ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington    }
119ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington
120a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington  pending->refcount.value = 1;
121a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington  pending->connection = connection;
122ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington  pending->timeout = timeout;
123583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
124583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  _dbus_data_slot_list_init (&pending->slot_list);
125ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington
126a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington  return pending;
127a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington}
128a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
129ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington/**
130e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * Sets the reply of a pending call with the given message,
131e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * or if the message is #NULL, by timing out the pending call.
132e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J *
133e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @param pending the pending call
134e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @param message the message to complete the call with, or #NULL
135e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J *  to time out the call
136e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J */
137e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (Jvoid
138e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J_dbus_pending_call_set_reply (DBusPendingCall *pending,
139e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J                              DBusMessage     *message)
140e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J{
141e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  if (message == NULL)
142e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J    {
143e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J      message = pending->timeout_link->data;
144e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J      _dbus_list_clear (&pending->timeout_link);
145e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J    }
146e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  else
147e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J    dbus_message_ref (message);
148e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
149e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  _dbus_verbose ("  handing message %p (%s) to pending call serial %u\n",
150e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J                 message,
151e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J                 dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_METHOD_RETURN ?
152e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J                 "method return" :
153e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J                 dbus_message_get_type (message) == DBUS_MESSAGE_TYPE_ERROR ?
154e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J                 "error" : "other type",
155e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J                 pending->reply_serial);
156e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
157e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  _dbus_assert (pending->reply == NULL);
158e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  _dbus_assert (pending->reply_serial == dbus_message_get_reply_serial (message));
159e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  pending->reply = message;
160e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J}
161e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
162e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J/**
163ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington * Calls notifier function for the pending call
164ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington * and sets the call to completed.
165ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington *
166ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington * @param pending the pending call
167ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington *
168ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington */
169ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Penningtonvoid
170e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J_dbus_pending_call_complete (DBusPendingCall *pending)
171ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington{
1729e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington  _dbus_assert (!pending->completed);
1739e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington
174ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington  pending->completed = TRUE;
175ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington
176ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington  if (pending->function)
177583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington    {
178583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington      void *user_data;
179583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington      user_data = dbus_pending_call_get_data (pending,
180583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington                                              notify_user_data_slot);
181583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
182583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington      (* pending->function) (pending, user_data);
183583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington    }
184ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington}
185ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington
186e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (Jvoid
187e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J_dbus_pending_call_queue_timeout_error (DBusPendingCall *pending,
188e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J                                        DBusConnection *connection)
189e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J{
190e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  if (pending->timeout_link)
191e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J    {
192e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J      _dbus_connection_queue_synthesized_message_link (connection,
193e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J						       pending->timeout_link);
194e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J      pending->timeout_link = NULL;
195e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J    }
196e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J}
197e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
198e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J/**
199e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * Checks to see if a timeout has been added
200e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J *
201e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @param pending the pending_call
202e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @returns #TRUE if there is a timeout or #FALSE if not
203e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J */
204e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (Jdbus_bool_t
205e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J_dbus_pending_call_is_timeout_added (DBusPendingCall  *pending)
206e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J{
207e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  _dbus_assert (pending != NULL);
208e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
209e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  return pending->timeout_added;
210e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J}
211e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
212e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
213e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J/**
214e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * Sets wether the timeout has been added
215e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J *
216e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @param pending the pending_call
217e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @param is_added whether or not a timeout is added
218e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J */
219e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (Jvoid
220e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J_dbus_pending_call_set_timeout_added (DBusPendingCall  *pending,
221e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J                                      dbus_bool_t       is_added)
222e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J{
223e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  _dbus_assert (pending != NULL);
224e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
225e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  pending->timeout_added = is_added;
226e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J}
227e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
228e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
229e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J/**
230e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * Retrives the timeout
231e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J *
232e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @param pending the pending_call
233e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @returns a timeout object
234e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J */
235e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (JDBusTimeout *
236e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J_dbus_pending_call_get_timeout (DBusPendingCall  *pending)
237e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J{
238e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  _dbus_assert (pending != NULL);
239e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
240e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  return pending->timeout;
241e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J}
242e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
243e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J/**
244e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * Gets the reply's serial number
245e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J *
246e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @param pending the pending_call
247e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @returns a serial number for the reply or 0
248e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J */
249e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (Jdbus_uint32_t
250e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J_dbus_pending_call_get_reply_serial (DBusPendingCall  *pending)
251e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J{
252e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  _dbus_assert (pending != NULL);
253e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
254e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  return pending->reply_serial;
255e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J}
256e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
257e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J/**
258e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * Sets the reply's serial number
259e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J *
260e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @param pending the pending_call
261e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @param serial the serial number
262e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J */
263e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (Jvoid
264e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J_dbus_pending_call_set_reply_serial  (DBusPendingCall *pending,
265e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J                                      dbus_uint32_t serial)
266e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J{
267e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  _dbus_assert (pending != NULL);
268e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  _dbus_assert (pending->reply_serial == 0);
269e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
270e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  pending->reply_serial = serial;
271e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J}
272e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
273e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J/**
274e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * Gets the connection associated with this pending call
275e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J *
276e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @param pending the pending_call
277e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @returns the connection associated with the pending call
278e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J */
279e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (JDBusConnection *
280e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J_dbus_pending_call_get_connection (DBusPendingCall *pending)
281e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J{
282e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  _dbus_assert (pending != NULL);
283e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
284e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  return pending->connection;
285e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J}
286e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
287e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J/**
288e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * Sets the connection associated with the pending call
289e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J *
290e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @param pending the pending_call
291e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @param connection the connection which is associated with the pending call
292e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J */
293e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (Jvoid
294e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J_dbus_pending_call_set_connection (DBusPendingCall *pending,
295e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J                                   DBusConnection *connection)
296e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J{
297e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  _dbus_assert (pending != NULL);
298e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
299e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  pending->connection = connection;
300e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J}
301e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
302e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J/**
303e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * NULLs out the connection
304e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J *
305e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @param pending the pending_call
306e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J */
307e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (Jvoid
308e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J_dbus_pending_call_clear_connection (DBusPendingCall *pending)
309e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J{
310e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  _dbus_assert (pending != NULL);
311e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
312e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  pending->connection = NULL;
313e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J}
314e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
315e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J/**
316e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * Sets the reply message associated with the pending call to a timeout error
317e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J *
318e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @param pending the pending_call
319e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @param message the message we are sending the error reply to
320e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @param serial serial number for the reply
321e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J * @return #FALSE on OOM
322e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J */
323e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (Jdbus_bool_t
324e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J_dbus_pending_call_set_timeout_error (DBusPendingCall *pending,
325e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J                                      DBusMessage *message,
326e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J                                      dbus_uint32_t serial)
327e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J{
328e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  DBusList *reply_link;
329e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  DBusMessage *reply;
330e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
331e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  reply = dbus_message_new_error (message, DBUS_ERROR_NO_REPLY,
332e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J                                  "No reply within specified time");
333e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  if (reply == NULL)
334e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J    return FALSE;
335e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
336e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  reply_link = _dbus_list_alloc_link (reply);
337e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  if (reply_link == NULL)
338e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J    {
339e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J      dbus_message_unref (reply);
340e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J      return FALSE;
341e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J    }
342e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
343e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  pending->timeout_link = reply_link;
344e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
345e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  _dbus_pending_call_set_reply_serial (pending, serial);
346e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
347e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J  return TRUE;
348e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J}
349e3dc6e281aae288e995f9d6a2675662ac3d0749fJohn (J
350a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington/** @} */
351a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
352a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington/**
353a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @defgroup DBusPendingCall DBusPendingCall
354a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @ingroup  DBus
355a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @brief Pending reply to a method call message
356a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington *
357a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * A DBusPendingCall is an object representing an
358a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * expected reply. A #DBusPendingCall can be created
359a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * when you send a message that should have a reply.
360a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington *
361a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @{
362a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington */
363a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
364a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington/**
365a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @typedef DBusPendingCall
366a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington *
367a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * Opaque data type representing a message pending.
368a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington */
369a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
370a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington/**
371a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * Increments the reference count on a pending call.
372a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington *
373a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @param pending the pending call object
3749f1a60dbba69844c0a04b3dd86280352736187ceMikael Hallendal * @returns the pending call object
375a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington */
3769f1a60dbba69844c0a04b3dd86280352736187ceMikael HallendalDBusPendingCall *
377a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Penningtondbus_pending_call_ref (DBusPendingCall *pending)
378a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington{
379eacb2afdc2903874f5dfde80b4ee338ea333c75eOlivier Andrieu  _dbus_return_val_if_fail (pending != NULL, NULL);
380a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
381a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington  _dbus_atomic_inc (&pending->refcount);
3829f1a60dbba69844c0a04b3dd86280352736187ceMikael Hallendal
3839f1a60dbba69844c0a04b3dd86280352736187ceMikael Hallendal  return pending;
384a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington}
385a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
386a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington/**
387a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * Decrements the reference count on a pending call,
388a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * freeing it if the count reaches 0.
389a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington *
390a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @param pending the pending call object
391a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington */
392a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Penningtonvoid
393a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Penningtondbus_pending_call_unref (DBusPendingCall *pending)
394a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington{
395a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington  dbus_bool_t last_unref;
396a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
397a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington  _dbus_return_if_fail (pending != NULL);
398a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
399a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington  last_unref = (_dbus_atomic_dec (&pending->refcount) == 1);
400a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
401a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington  if (last_unref)
402a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington    {
403ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington      /* If we get here, we should be already detached
404ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington       * from the connection, or never attached.
405ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington       */
406ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington      _dbus_assert (pending->connection == NULL);
407ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington      _dbus_assert (!pending->timeout_added);
408ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington
409ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington      /* this assumes we aren't holding connection lock... */
410583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington      _dbus_data_slot_list_free (&pending->slot_list);
411583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
412ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington      if (pending->timeout != NULL)
413ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington        _dbus_timeout_unref (pending->timeout);
414ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington
415ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington      if (pending->timeout_link)
416a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington        {
417ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington          dbus_message_unref ((DBusMessage *)pending->timeout_link->data);
418ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington          _dbus_list_free_link (pending->timeout_link);
419ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington          pending->timeout_link = NULL;
420a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington        }
421a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
422a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington      if (pending->reply)
423a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington        {
424a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington          dbus_message_unref (pending->reply);
425a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington          pending->reply = NULL;
426a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington        }
427a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
428a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington      dbus_free (pending);
429583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
430583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington      dbus_pending_call_free_data_slot (&notify_user_data_slot);
431a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington    }
432a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington}
433a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
434a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington/**
435a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * Sets a notification function to be called when the reply is
436a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * received or the pending call times out.
437a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington *
438a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @param pending the pending call
439a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @param function notifier function
440a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @param user_data data to pass to notifier function
441a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @param free_user_data function to free the user data
442583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * @returns #FALSE if not enough memory
443a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington */
444583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Penningtondbus_bool_t
445a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Penningtondbus_pending_call_set_notify (DBusPendingCall              *pending,
446a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington                              DBusPendingCallNotifyFunction function,
447a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington                              void                         *user_data,
448a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington                              DBusFreeFunction              free_user_data)
449a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington{
450583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  _dbus_return_val_if_fail (pending != NULL, FALSE);
451a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
452583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  /* could invoke application code! */
453583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  if (!dbus_pending_call_set_data (pending, notify_user_data_slot,
454583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington                                   user_data, free_user_data))
455583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington    return FALSE;
456583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
457a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington  pending->function = function;
458a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
459583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  return TRUE;
460a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington}
461a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
462ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington/**
4631dcacffc325e50754d4cc3338822d1f03c8b6e45Havoc Pennington * Cancels the pending call, such that any reply or error received
4641dcacffc325e50754d4cc3338822d1f03c8b6e45Havoc Pennington * will just be ignored.  Drops the dbus library's internal reference
4651dcacffc325e50754d4cc3338822d1f03c8b6e45Havoc Pennington * to the #DBusPendingCall so will free the call if nobody else is
4661dcacffc325e50754d4cc3338822d1f03c8b6e45Havoc Pennington * holding a reference. However you usually get a reference
4671dcacffc325e50754d4cc3338822d1f03c8b6e45Havoc Pennington * from dbus_connection_send() so probably your app owns a ref also.
468ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington *
469ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington * @param pending the pending call
470ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington */
471ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Penningtonvoid
472ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Penningtondbus_pending_call_cancel (DBusPendingCall *pending)
473ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington{
474ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington  if (pending->connection)
475ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington    _dbus_connection_remove_pending_call (pending->connection,
476ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington                                          pending);
477ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington}
478a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
479ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington/**
480ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington * Checks whether the pending call has received a reply
481ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington * yet, or not.
482ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington *
483583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * @todo not thread safe? I guess it has to lock though it sucks
484583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington *
485ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington * @param pending the pending call
486583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * @returns #TRUE if a reply has been received */
487ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Penningtondbus_bool_t
488ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Penningtondbus_pending_call_get_completed (DBusPendingCall *pending)
489a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington{
490ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington  return pending->completed;
491a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington}
492a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
493ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington/**
4949e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington * Gets the reply, or returns #NULL if none has been received
4959e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington * yet. Ownership of the reply message passes to the caller. This
4969e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington * function can only be called once per pending call, since the reply
4979e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington * message is tranferred to the caller.
498583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington *
499ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington * @param pending the pending call
500ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington * @returns the reply message or #NULL.
501ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington */
502ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc PenningtonDBusMessage*
5039e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Penningtondbus_pending_call_steal_reply (DBusPendingCall *pending)
504a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington{
5059e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington  DBusMessage *message;
5069e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington
5079e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington  _dbus_return_val_if_fail (pending->completed, NULL);
5089e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington  _dbus_return_val_if_fail (pending->reply != NULL, NULL);
5099e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington
5109e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington  message = pending->reply;
5119e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington  pending->reply = NULL;
5129e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington
5139e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington  return message;
514a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington}
515a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
516a1b0bd33408f03894987ac32b4e6b46c6a15a594Havoc Pennington/**
517a1b0bd33408f03894987ac32b4e6b46c6a15a594Havoc Pennington * Block until the pending call is completed.  The blocking is as with
518a1b0bd33408f03894987ac32b4e6b46c6a15a594Havoc Pennington * dbus_connection_send_with_reply_and_block(); it does not enter the
519a1b0bd33408f03894987ac32b4e6b46c6a15a594Havoc Pennington * main loop or process other messages, it simply waits for the reply
520a1b0bd33408f03894987ac32b4e6b46c6a15a594Havoc Pennington * in question.
521a1b0bd33408f03894987ac32b4e6b46c6a15a594Havoc Pennington *
522583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * If the pending call is already completed, this function returns
523583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * immediately.
524583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington *
525a1b0bd33408f03894987ac32b4e6b46c6a15a594Havoc Pennington * @todo when you start blocking, the timeout is reset, but it should
526a1b0bd33408f03894987ac32b4e6b46c6a15a594Havoc Pennington * really only use time remaining since the pending call was created.
527a1b0bd33408f03894987ac32b4e6b46c6a15a594Havoc Pennington *
528a1b0bd33408f03894987ac32b4e6b46c6a15a594Havoc Pennington * @param pending the pending call
529a1b0bd33408f03894987ac32b4e6b46c6a15a594Havoc Pennington */
530a1b0bd33408f03894987ac32b4e6b46c6a15a594Havoc Penningtonvoid
531a1b0bd33408f03894987ac32b4e6b46c6a15a594Havoc Penningtondbus_pending_call_block (DBusPendingCall *pending)
532a1b0bd33408f03894987ac32b4e6b46c6a15a594Havoc Pennington{
5339e4450872a6861bd93a01dabe14d2d16f6c84d3fHavoc Pennington  _dbus_connection_block_pending_call (pending);
534a1b0bd33408f03894987ac32b4e6b46c6a15a594Havoc Pennington}
535a1b0bd33408f03894987ac32b4e6b46c6a15a594Havoc Pennington
536583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Penningtonstatic DBusDataSlotAllocator slot_allocator;
537583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington_DBUS_DEFINE_GLOBAL_LOCK (pending_call_slots);
538583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
539583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington/**
540583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * Allocates an integer ID to be used for storing application-specific
541583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * data on any DBusPendingCall. The allocated ID may then be used
542583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * with dbus_pending_call_set_data() and dbus_pending_call_get_data().
543583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * The passed-in slot must be initialized to -1, and is filled in
544583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * with the slot ID. If the passed-in slot is not -1, it's assumed
545583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * to be already allocated, and its refcount is incremented.
546583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington *
547583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * The allocated slot is global, i.e. all DBusPendingCall objects will
548583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * have a slot with the given integer ID reserved.
549583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington *
550583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * @param slot_p address of a global variable storing the slot
551583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * @returns #FALSE on failure (no memory)
552583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington */
553583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Penningtondbus_bool_t
554583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Penningtondbus_pending_call_allocate_data_slot (dbus_int32_t *slot_p)
555583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington{
556583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  return _dbus_data_slot_allocator_alloc (&slot_allocator,
557583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington                                          _DBUS_LOCK_NAME (pending_call_slots),
558583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington                                          slot_p);
559583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington}
560583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
561583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington/**
562583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * Deallocates a global ID for #DBusPendingCall data slots.
563583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * dbus_pending_call_get_data() and dbus_pending_call_set_data() may
564583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * no longer be used with this slot.  Existing data stored on existing
565583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * DBusPendingCall objects will be freed when the #DBusPendingCall is
566583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * finalized, but may not be retrieved (and may only be replaced if
567583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * someone else reallocates the slot).  When the refcount on the
568583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * passed-in slot reaches 0, it is set to -1.
569583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington *
570583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * @param slot_p address storing the slot to deallocate
571583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington */
572583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Penningtonvoid
573583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Penningtondbus_pending_call_free_data_slot (dbus_int32_t *slot_p)
574583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington{
575583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  _dbus_return_if_fail (*slot_p >= 0);
576583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
577583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  _dbus_data_slot_allocator_free (&slot_allocator, slot_p);
578583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington}
579583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
580583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington/**
581583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * Stores a pointer on a #DBusPendingCall, along
582583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * with an optional function to be used for freeing
583583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * the data when the data is set again, or when
584583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * the pending call is finalized. The slot number
585583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * must have been allocated with dbus_pending_call_allocate_data_slot().
586583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington *
587583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * @param pending the pending_call
588583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * @param slot the slot number
589583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * @param data the data to store
590583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * @param free_data_func finalizer function for the data
591583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * @returns #TRUE if there was enough memory to store the data
592583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington */
593583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Penningtondbus_bool_t
594583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Penningtondbus_pending_call_set_data (DBusPendingCall  *pending,
595583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington                            dbus_int32_t      slot,
596583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington                            void             *data,
597583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington                            DBusFreeFunction  free_data_func)
598583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington{
599583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  DBusFreeFunction old_free_func;
600583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  void *old_data;
601583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  dbus_bool_t retval;
602583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
603583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  _dbus_return_val_if_fail (pending != NULL, FALSE);
604583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  _dbus_return_val_if_fail (slot >= 0, FALSE);
605583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
606583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  retval = _dbus_data_slot_list_set (&slot_allocator,
607583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington                                     &pending->slot_list,
608583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington                                     slot, data, free_data_func,
609583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington                                     &old_free_func, &old_data);
610583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
611583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  if (retval)
612583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington    {
613583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington      if (old_free_func)
614583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington        (* old_free_func) (old_data);
615583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington    }
616583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
617583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  return retval;
618583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington}
619583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
620583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington/**
621583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * Retrieves data previously set with dbus_pending_call_set_data().
622583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * The slot must still be allocated (must not have been freed).
623583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington *
624583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * @param pending the pending_call
625583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * @param slot the slot to get data from
626583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington * @returns the data, or #NULL if not found
627583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington */
628583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Penningtonvoid*
629583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Penningtondbus_pending_call_get_data (DBusPendingCall   *pending,
630583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington                            dbus_int32_t       slot)
631583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington{
632583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  void *res;
633583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
634583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  _dbus_return_val_if_fail (pending != NULL, NULL);
635583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
636583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  res = _dbus_data_slot_list_get (&slot_allocator,
637583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington                                  &pending->slot_list,
638583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington                                  slot);
639583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
640583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington  return res;
641583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington}
642583994cb3b7f5562fb7b8c37b4cb0d5af78e4ce2Havoc Pennington
643ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington/** @} */
644ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington
645ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington#ifdef DBUS_BUILD_TESTS
646ef614207fc4f03e5cc02faeb109f739eb1ccdf31Havoc Pennington
647a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington/**
648a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @ingroup DBusPendingCallInternals
649a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * Unit test for DBusPendingCall.
650a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington *
651a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington * @returns #TRUE on success.
652a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington */
653a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Penningtondbus_bool_t
654a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington_dbus_pending_call_test (const char *test_data_dir)
655a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington{
656a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington
657a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington  return TRUE;
658a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington}
659a6c8a71b1bcba04b63812a61f668e87af0922e5eHavoc Pennington#endif /* DBUS_BUILD_TESTS */
660