1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 /* dbus-connection.h DBusConnection object 3 * 4 * Copyright (C) 2002, 2003 Red Hat Inc. 5 * 6 * Licensed under the Academic Free License version 2.1 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 * 22 */ 23 #if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION) 24 #error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents." 25 #endif 26 27 #ifndef DBUS_CONNECTION_H 28 #define DBUS_CONNECTION_H 29 30 #include <dbus/dbus-errors.h> 31 #include <dbus/dbus-memory.h> 32 #include <dbus/dbus-message.h> 33 #include <dbus/dbus-shared.h> 34 35 DBUS_BEGIN_DECLS 36 37 /** 38 * @addtogroup DBusConnection 39 * @{ 40 */ 41 42 /* documented in dbus-watch.c */ 43 typedef struct DBusWatch DBusWatch; 44 /* documented in dbus-timeout.c */ 45 typedef struct DBusTimeout DBusTimeout; 46 /** Opaque type representing preallocated resources so a message can be sent without further memory allocation. */ 47 typedef struct DBusPreallocatedSend DBusPreallocatedSend; 48 /** Opaque type representing a method call that has not yet received a reply. */ 49 typedef struct DBusPendingCall DBusPendingCall; 50 /** Opaque type representing a connection to a remote application and associated incoming/outgoing message queues. */ 51 typedef struct DBusConnection DBusConnection; 52 /** Set of functions that must be implemented to handle messages sent to a particular object path. */ 53 typedef struct DBusObjectPathVTable DBusObjectPathVTable; 54 55 /** 56 * Indicates the status of a #DBusWatch. 57 */ 58 typedef enum 59 { 60 DBUS_WATCH_READABLE = 1 << 0, /**< As in POLLIN */ 61 DBUS_WATCH_WRITABLE = 1 << 1, /**< As in POLLOUT */ 62 DBUS_WATCH_ERROR = 1 << 2, /**< As in POLLERR (can't watch for 63 * this, but can be present in 64 * current state passed to 65 * dbus_watch_handle()). 66 */ 67 DBUS_WATCH_HANGUP = 1 << 3 /**< As in POLLHUP (can't watch for 68 * it, but can be present in current 69 * state passed to 70 * dbus_watch_handle()). 71 */ 72 /* Internal to libdbus, there is also _DBUS_WATCH_NVAL in dbus-watch.h */ 73 } DBusWatchFlags; 74 75 /** 76 * Indicates the status of incoming data on a #DBusConnection. This determines whether 77 * dbus_connection_dispatch() needs to be called. 78 */ 79 typedef enum 80 { 81 DBUS_DISPATCH_DATA_REMAINS, /**< There is more data to potentially convert to messages. */ 82 DBUS_DISPATCH_COMPLETE, /**< All currently available data has been processed. */ 83 DBUS_DISPATCH_NEED_MEMORY /**< More memory is needed to continue. */ 84 } DBusDispatchStatus; 85 86 /** Called when libdbus needs a new watch to be monitored by the main 87 * loop. Returns #FALSE if it lacks enough memory to add the 88 * watch. Set by dbus_connection_set_watch_functions() or 89 * dbus_server_set_watch_functions(). 90 */ 91 typedef dbus_bool_t (* DBusAddWatchFunction) (DBusWatch *watch, 92 void *data); 93 /** Called when dbus_watch_get_enabled() may return a different value 94 * than it did before. Set by dbus_connection_set_watch_functions() 95 * or dbus_server_set_watch_functions(). 96 */ 97 typedef void (* DBusWatchToggledFunction) (DBusWatch *watch, 98 void *data); 99 /** Called when libdbus no longer needs a watch to be monitored by the 100 * main loop. Set by dbus_connection_set_watch_functions() or 101 * dbus_server_set_watch_functions(). 102 */ 103 typedef void (* DBusRemoveWatchFunction) (DBusWatch *watch, 104 void *data); 105 /** Called when libdbus needs a new timeout to be monitored by the main 106 * loop. Returns #FALSE if it lacks enough memory to add the 107 * watch. Set by dbus_connection_set_timeout_functions() or 108 * dbus_server_set_timeout_functions(). 109 */ 110 typedef dbus_bool_t (* DBusAddTimeoutFunction) (DBusTimeout *timeout, 111 void *data); 112 /** Called when dbus_timeout_get_enabled() may return a different 113 * value than it did before. 114 * Set by dbus_connection_set_timeout_functions() or 115 * dbus_server_set_timeout_functions(). 116 */ 117 typedef void (* DBusTimeoutToggledFunction) (DBusTimeout *timeout, 118 void *data); 119 /** Called when libdbus no longer needs a timeout to be monitored by the 120 * main loop. Set by dbus_connection_set_timeout_functions() or 121 * dbus_server_set_timeout_functions(). 122 */ 123 typedef void (* DBusRemoveTimeoutFunction) (DBusTimeout *timeout, 124 void *data); 125 /** Called when the return value of dbus_connection_get_dispatch_status() 126 * may have changed. Set with dbus_connection_set_dispatch_status_function(). 127 */ 128 typedef void (* DBusDispatchStatusFunction) (DBusConnection *connection, 129 DBusDispatchStatus new_status, 130 void *data); 131 /** 132 * Called when the main loop's thread should be notified that there's now work 133 * to do. Set with dbus_connection_set_wakeup_main_function(). 134 */ 135 typedef void (* DBusWakeupMainFunction) (void *data); 136 137 /** 138 * Called during authentication to check whether the given UNIX user 139 * ID is allowed to connect, if the client tried to auth as a UNIX 140 * user ID. Normally on Windows this would never happen. Set with 141 * dbus_connection_set_unix_user_function(). 142 */ 143 typedef dbus_bool_t (* DBusAllowUnixUserFunction) (DBusConnection *connection, 144 unsigned long uid, 145 void *data); 146 147 /** 148 * Called during authentication to check whether the given Windows user 149 * ID is allowed to connect, if the client tried to auth as a Windows 150 * user ID. Normally on UNIX this would never happen. Set with 151 * dbus_connection_set_windows_user_function(). 152 */ 153 typedef dbus_bool_t (* DBusAllowWindowsUserFunction) (DBusConnection *connection, 154 const char *user_sid, 155 void *data); 156 157 158 /** 159 * Called when a pending call now has a reply available. Set with 160 * dbus_pending_call_set_notify(). 161 */ 162 typedef void (* DBusPendingCallNotifyFunction) (DBusPendingCall *pending, 163 void *user_data); 164 165 /** 166 * Called when a message needs to be handled. The result indicates whether or 167 * not more handlers should be run. Set with dbus_connection_add_filter(). 168 */ 169 typedef DBusHandlerResult (* DBusHandleMessageFunction) (DBusConnection *connection, 170 DBusMessage *message, 171 void *user_data); 172 DBUS_EXPORT 173 DBusConnection* dbus_connection_open (const char *address, 174 DBusError *error); 175 DBUS_EXPORT 176 DBusConnection* dbus_connection_open_private (const char *address, 177 DBusError *error); 178 DBUS_EXPORT 179 DBusConnection* dbus_connection_ref (DBusConnection *connection); 180 DBUS_EXPORT 181 void dbus_connection_unref (DBusConnection *connection); 182 DBUS_EXPORT 183 void dbus_connection_close (DBusConnection *connection); 184 DBUS_EXPORT 185 dbus_bool_t dbus_connection_get_is_connected (DBusConnection *connection); 186 DBUS_EXPORT 187 dbus_bool_t dbus_connection_get_is_authenticated (DBusConnection *connection); 188 DBUS_EXPORT 189 dbus_bool_t dbus_connection_get_is_anonymous (DBusConnection *connection); 190 DBUS_EXPORT 191 char* dbus_connection_get_server_id (DBusConnection *connection); 192 DBUS_EXPORT 193 dbus_bool_t dbus_connection_can_send_type (DBusConnection *connection, 194 int type); 195 196 DBUS_EXPORT 197 void dbus_connection_set_exit_on_disconnect (DBusConnection *connection, 198 dbus_bool_t exit_on_disconnect); 199 DBUS_EXPORT 200 void dbus_connection_flush (DBusConnection *connection); 201 DBUS_EXPORT 202 dbus_bool_t dbus_connection_read_write_dispatch (DBusConnection *connection, 203 int timeout_milliseconds); 204 DBUS_EXPORT 205 dbus_bool_t dbus_connection_read_write (DBusConnection *connection, 206 int timeout_milliseconds); 207 DBUS_EXPORT 208 DBusMessage* dbus_connection_borrow_message (DBusConnection *connection); 209 DBUS_EXPORT 210 void dbus_connection_return_message (DBusConnection *connection, 211 DBusMessage *message); 212 DBUS_EXPORT 213 void dbus_connection_steal_borrowed_message (DBusConnection *connection, 214 DBusMessage *message); 215 DBUS_EXPORT 216 DBusMessage* dbus_connection_pop_message (DBusConnection *connection); 217 DBUS_EXPORT 218 DBusDispatchStatus dbus_connection_get_dispatch_status (DBusConnection *connection); 219 DBUS_EXPORT 220 DBusDispatchStatus dbus_connection_dispatch (DBusConnection *connection); 221 DBUS_EXPORT 222 dbus_bool_t dbus_connection_has_messages_to_send (DBusConnection *connection); 223 DBUS_EXPORT 224 dbus_bool_t dbus_connection_send (DBusConnection *connection, 225 DBusMessage *message, 226 dbus_uint32_t *client_serial); 227 DBUS_EXPORT 228 dbus_bool_t dbus_connection_send_with_reply (DBusConnection *connection, 229 DBusMessage *message, 230 DBusPendingCall **pending_return, 231 int timeout_milliseconds); 232 DBUS_EXPORT 233 DBusMessage * dbus_connection_send_with_reply_and_block (DBusConnection *connection, 234 DBusMessage *message, 235 int timeout_milliseconds, 236 DBusError *error); 237 DBUS_EXPORT 238 dbus_bool_t dbus_connection_set_watch_functions (DBusConnection *connection, 239 DBusAddWatchFunction add_function, 240 DBusRemoveWatchFunction remove_function, 241 DBusWatchToggledFunction toggled_function, 242 void *data, 243 DBusFreeFunction free_data_function); 244 DBUS_EXPORT 245 dbus_bool_t dbus_connection_set_timeout_functions (DBusConnection *connection, 246 DBusAddTimeoutFunction add_function, 247 DBusRemoveTimeoutFunction remove_function, 248 DBusTimeoutToggledFunction toggled_function, 249 void *data, 250 DBusFreeFunction free_data_function); 251 DBUS_EXPORT 252 void dbus_connection_set_wakeup_main_function (DBusConnection *connection, 253 DBusWakeupMainFunction wakeup_main_function, 254 void *data, 255 DBusFreeFunction free_data_function); 256 DBUS_EXPORT 257 void dbus_connection_set_dispatch_status_function (DBusConnection *connection, 258 DBusDispatchStatusFunction function, 259 void *data, 260 DBusFreeFunction free_data_function); 261 DBUS_EXPORT 262 dbus_bool_t dbus_connection_get_unix_user (DBusConnection *connection, 263 unsigned long *uid); 264 DBUS_EXPORT 265 dbus_bool_t dbus_connection_get_unix_process_id (DBusConnection *connection, 266 unsigned long *pid); 267 DBUS_EXPORT 268 dbus_bool_t dbus_connection_get_adt_audit_session_data (DBusConnection *connection, 269 void **data, 270 dbus_int32_t *data_size); 271 DBUS_EXPORT 272 void dbus_connection_set_unix_user_function (DBusConnection *connection, 273 DBusAllowUnixUserFunction function, 274 void *data, 275 DBusFreeFunction free_data_function); 276 DBUS_EXPORT 277 dbus_bool_t dbus_connection_get_windows_user (DBusConnection *connection, 278 char **windows_sid_p); 279 DBUS_EXPORT 280 void dbus_connection_set_windows_user_function (DBusConnection *connection, 281 DBusAllowWindowsUserFunction function, 282 void *data, 283 DBusFreeFunction free_data_function); 284 DBUS_EXPORT 285 void dbus_connection_set_allow_anonymous (DBusConnection *connection, 286 dbus_bool_t value); 287 DBUS_EXPORT 288 void dbus_connection_set_route_peer_messages (DBusConnection *connection, 289 dbus_bool_t value); 290 291 292 /* Filters */ 293 294 DBUS_EXPORT 295 dbus_bool_t dbus_connection_add_filter (DBusConnection *connection, 296 DBusHandleMessageFunction function, 297 void *user_data, 298 DBusFreeFunction free_data_function); 299 DBUS_EXPORT 300 void dbus_connection_remove_filter (DBusConnection *connection, 301 DBusHandleMessageFunction function, 302 void *user_data); 303 304 305 /* Other */ 306 DBUS_EXPORT 307 dbus_bool_t dbus_connection_allocate_data_slot (dbus_int32_t *slot_p); 308 DBUS_EXPORT 309 void dbus_connection_free_data_slot (dbus_int32_t *slot_p); 310 DBUS_EXPORT 311 dbus_bool_t dbus_connection_set_data (DBusConnection *connection, 312 dbus_int32_t slot, 313 void *data, 314 DBusFreeFunction free_data_func); 315 DBUS_EXPORT 316 void* dbus_connection_get_data (DBusConnection *connection, 317 dbus_int32_t slot); 318 319 DBUS_EXPORT 320 void dbus_connection_set_change_sigpipe (dbus_bool_t will_modify_sigpipe); 321 322 DBUS_EXPORT 323 void dbus_connection_set_max_message_size (DBusConnection *connection, 324 long size); 325 DBUS_EXPORT 326 long dbus_connection_get_max_message_size (DBusConnection *connection); 327 DBUS_EXPORT 328 void dbus_connection_set_max_received_size (DBusConnection *connection, 329 long size); 330 DBUS_EXPORT 331 long dbus_connection_get_max_received_size (DBusConnection *connection); 332 333 DBUS_EXPORT 334 void dbus_connection_set_max_message_unix_fds (DBusConnection *connection, 335 long n); 336 DBUS_EXPORT 337 long dbus_connection_get_max_message_unix_fds (DBusConnection *connection); 338 DBUS_EXPORT 339 void dbus_connection_set_max_received_unix_fds(DBusConnection *connection, 340 long n); 341 DBUS_EXPORT 342 long dbus_connection_get_max_received_unix_fds(DBusConnection *connection); 343 344 DBUS_EXPORT 345 long dbus_connection_get_outgoing_size (DBusConnection *connection); 346 DBUS_EXPORT 347 long dbus_connection_get_outgoing_unix_fds (DBusConnection *connection); 348 349 DBUS_EXPORT 350 DBusPreallocatedSend* dbus_connection_preallocate_send (DBusConnection *connection); 351 DBUS_EXPORT 352 void dbus_connection_free_preallocated_send (DBusConnection *connection, 353 DBusPreallocatedSend *preallocated); 354 DBUS_EXPORT 355 void dbus_connection_send_preallocated (DBusConnection *connection, 356 DBusPreallocatedSend *preallocated, 357 DBusMessage *message, 358 dbus_uint32_t *client_serial); 359 360 361 /* Object tree functionality */ 362 363 /** 364 * Called when a #DBusObjectPathVTable is unregistered (or its connection is freed). 365 * Found in #DBusObjectPathVTable. 366 */ 367 typedef void (* DBusObjectPathUnregisterFunction) (DBusConnection *connection, 368 void *user_data); 369 /** 370 * Called when a message is sent to a registered object path. Found in 371 * #DBusObjectPathVTable which is registered with dbus_connection_register_object_path() 372 * or dbus_connection_register_fallback(). 373 */ 374 typedef DBusHandlerResult (* DBusObjectPathMessageFunction) (DBusConnection *connection, 375 DBusMessage *message, 376 void *user_data); 377 378 /** 379 * Virtual table that must be implemented to handle a portion of the 380 * object path hierarchy. Attach the vtable to a particular path using 381 * dbus_connection_register_object_path() or 382 * dbus_connection_register_fallback(). 383 */ 384 struct DBusObjectPathVTable 385 { 386 DBusObjectPathUnregisterFunction unregister_function; /**< Function to unregister this handler */ 387 DBusObjectPathMessageFunction message_function; /**< Function to handle messages */ 388 389 void (* dbus_internal_pad1) (void *); /**< Reserved for future expansion */ 390 void (* dbus_internal_pad2) (void *); /**< Reserved for future expansion */ 391 void (* dbus_internal_pad3) (void *); /**< Reserved for future expansion */ 392 void (* dbus_internal_pad4) (void *); /**< Reserved for future expansion */ 393 }; 394 395 DBUS_EXPORT 396 dbus_bool_t dbus_connection_try_register_object_path (DBusConnection *connection, 397 const char *path, 398 const DBusObjectPathVTable *vtable, 399 void *user_data, 400 DBusError *error); 401 402 DBUS_EXPORT 403 dbus_bool_t dbus_connection_register_object_path (DBusConnection *connection, 404 const char *path, 405 const DBusObjectPathVTable *vtable, 406 void *user_data); 407 408 DBUS_EXPORT 409 dbus_bool_t dbus_connection_try_register_fallback (DBusConnection *connection, 410 const char *path, 411 const DBusObjectPathVTable *vtable, 412 void *user_data, 413 DBusError *error); 414 415 DBUS_EXPORT 416 dbus_bool_t dbus_connection_register_fallback (DBusConnection *connection, 417 const char *path, 418 const DBusObjectPathVTable *vtable, 419 void *user_data); 420 DBUS_EXPORT 421 dbus_bool_t dbus_connection_unregister_object_path (DBusConnection *connection, 422 const char *path); 423 424 DBUS_EXPORT 425 dbus_bool_t dbus_connection_get_object_path_data (DBusConnection *connection, 426 const char *path, 427 void **data_p); 428 429 DBUS_EXPORT 430 dbus_bool_t dbus_connection_list_registered (DBusConnection *connection, 431 const char *parent_path, 432 char ***child_entries); 433 434 DBUS_EXPORT 435 dbus_bool_t dbus_connection_get_unix_fd (DBusConnection *connection, 436 int *fd); 437 DBUS_EXPORT 438 dbus_bool_t dbus_connection_get_socket (DBusConnection *connection, 439 int *fd); 440 441 /** @} */ 442 443 444 /** 445 * @addtogroup DBusWatch 446 * @{ 447 */ 448 449 #ifndef DBUS_DISABLE_DEPRECATED 450 DBUS_EXPORT 451 DBUS_DEPRECATED int dbus_watch_get_fd (DBusWatch *watch); 452 #endif 453 454 DBUS_EXPORT 455 int dbus_watch_get_unix_fd (DBusWatch *watch); 456 DBUS_EXPORT 457 int dbus_watch_get_socket (DBusWatch *watch); 458 DBUS_EXPORT 459 unsigned int dbus_watch_get_flags (DBusWatch *watch); 460 DBUS_EXPORT 461 void* dbus_watch_get_data (DBusWatch *watch); 462 DBUS_EXPORT 463 void dbus_watch_set_data (DBusWatch *watch, 464 void *data, 465 DBusFreeFunction free_data_function); 466 DBUS_EXPORT 467 dbus_bool_t dbus_watch_handle (DBusWatch *watch, 468 unsigned int flags); 469 DBUS_EXPORT 470 dbus_bool_t dbus_watch_get_enabled (DBusWatch *watch); 471 472 /** @} */ 473 474 /** 475 * @addtogroup DBusTimeout 476 * @{ 477 */ 478 479 DBUS_EXPORT 480 int dbus_timeout_get_interval (DBusTimeout *timeout); 481 DBUS_EXPORT 482 void* dbus_timeout_get_data (DBusTimeout *timeout); 483 DBUS_EXPORT 484 void dbus_timeout_set_data (DBusTimeout *timeout, 485 void *data, 486 DBusFreeFunction free_data_function); 487 DBUS_EXPORT 488 dbus_bool_t dbus_timeout_handle (DBusTimeout *timeout); 489 DBUS_EXPORT 490 dbus_bool_t dbus_timeout_get_enabled (DBusTimeout *timeout); 491 492 /** @} */ 493 494 DBUS_END_DECLS 495 496 #endif /* DBUS_CONNECTION_H */ 497