dbus-connection.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:24k
源码类别:

系统编程

开发平台:

Unix_Linux

  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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  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. #ifndef DBUS_CONNECTION_H
  27. #define DBUS_CONNECTION_H
  28. #include <dbus/dbus-errors.h>
  29. #include <dbus/dbus-memory.h>
  30. #include <dbus/dbus-message.h>
  31. #include <dbus/dbus-shared.h>
  32. DBUS_BEGIN_DECLS
  33. /**
  34.  * @addtogroup DBusConnection
  35.  * @{
  36.  */
  37. /* documented in dbus-watch.c */
  38. typedef struct DBusWatch DBusWatch;
  39. /* documented in dbus-timeout.c */
  40. typedef struct DBusTimeout DBusTimeout;
  41. /** Opaque type representing preallocated resources so a message can be sent without further memory allocation. */
  42. typedef struct DBusPreallocatedSend DBusPreallocatedSend;
  43. /** Opaque type representing a method call that has not yet received a reply. */
  44. typedef struct DBusPendingCall DBusPendingCall;
  45. /** Opaque type representing a connection to a remote application and associated incoming/outgoing message queues. */
  46. typedef struct DBusConnection DBusConnection;
  47. /** Set of functions that must be implemented to handle messages sent to a particular object path. */
  48. typedef struct DBusObjectPathVTable DBusObjectPathVTable;
  49. /**
  50.  * Indicates the status of a #DBusWatch.
  51.  */
  52. typedef enum
  53. {
  54.   DBUS_WATCH_READABLE = 1 << 0, /**< As in POLLIN */
  55.   DBUS_WATCH_WRITABLE = 1 << 1, /**< As in POLLOUT */
  56.   DBUS_WATCH_ERROR    = 1 << 2, /**< As in POLLERR (can't watch for
  57.                                  *   this, but can be present in
  58.                                  *   current state passed to
  59.                                  *   dbus_watch_handle()).
  60.                                  */
  61.   DBUS_WATCH_HANGUP   = 1 << 3  /**< As in POLLHUP (can't watch for
  62.                                  *   it, but can be present in current
  63.                                  *   state passed to
  64.                                  *   dbus_watch_handle()).
  65.                                  */
  66. } DBusWatchFlags;
  67. /**
  68.  * Indicates the status of incoming data on a #DBusConnection. This determines whether
  69.  * dbus_connection_dispatch() needs to be called.
  70.  */
  71. typedef enum
  72. {
  73.   DBUS_DISPATCH_DATA_REMAINS,  /**< There is more data to potentially convert to messages. */
  74.   DBUS_DISPATCH_COMPLETE,      /**< All currently available data has been processed. */
  75.   DBUS_DISPATCH_NEED_MEMORY    /**< More memory is needed to continue. */
  76. } DBusDispatchStatus;
  77. /** Called when libdbus needs a new watch to be monitored by the main
  78.  * loop. Returns #FALSE if it lacks enough memory to add the
  79.  * watch. Set by dbus_connection_set_watch_functions() or
  80.  * dbus_server_set_watch_functions().
  81.  */
  82. typedef dbus_bool_t (* DBusAddWatchFunction)       (DBusWatch      *watch,
  83.                                                     void           *data);
  84. /** Called when dbus_watch_get_enabled() may return a different value
  85.  *  than it did before.  Set by dbus_connection_set_watch_functions()
  86.  *  or dbus_server_set_watch_functions().
  87.  */
  88. typedef void        (* DBusWatchToggledFunction)   (DBusWatch      *watch,
  89.                                                     void           *data);
  90. /** Called when libdbus no longer needs a watch to be monitored by the
  91.  * main loop. Set by dbus_connection_set_watch_functions() or
  92.  * dbus_server_set_watch_functions().
  93.  */
  94. typedef void        (* DBusRemoveWatchFunction)    (DBusWatch      *watch,
  95.                                                     void           *data);
  96. /** Called when libdbus needs a new timeout to be monitored by the main
  97.  * loop. Returns #FALSE if it lacks enough memory to add the
  98.  * watch. Set by dbus_connection_set_timeout_functions() or
  99.  * dbus_server_set_timeout_functions().
  100.  */
  101. typedef dbus_bool_t (* DBusAddTimeoutFunction)     (DBusTimeout    *timeout,
  102.                                                     void           *data);
  103. /** Called when dbus_timeout_get_enabled() may return a different
  104.  * value than it did before.
  105.  * Set by dbus_connection_set_timeout_functions() or
  106.  * dbus_server_set_timeout_functions().
  107.  */
  108. typedef void        (* DBusTimeoutToggledFunction) (DBusTimeout    *timeout,
  109.                                                     void           *data);
  110. /** Called when libdbus no longer needs a timeout to be monitored by the
  111.  * main loop. Set by dbus_connection_set_timeout_functions() or
  112.  * dbus_server_set_timeout_functions().
  113.  */
  114. typedef void        (* DBusRemoveTimeoutFunction)  (DBusTimeout    *timeout,
  115.                                                     void           *data);
  116. /** Called when the return value of dbus_connection_get_dispatch_status()
  117.  * may have changed. Set with dbus_connection_set_dispatch_status_function().
  118.  */
  119. typedef void        (* DBusDispatchStatusFunction) (DBusConnection *connection,
  120.                                                     DBusDispatchStatus new_status,
  121.                                                     void           *data);
  122. /**
  123.  * Called when the main loop's thread should be notified that there's now work
  124.  * to do. Set with dbus_connection_set_wakeup_main_function().
  125.  */
  126. typedef void        (* DBusWakeupMainFunction)     (void           *data);
  127. /**
  128.  * Called during authentication to check whether the given UNIX user
  129.  * ID is allowed to connect, if the client tried to auth as a UNIX
  130.  * user ID. Normally on Windows this would never happen. Set with
  131.  * dbus_connection_set_unix_user_function().
  132.  */ 
  133. typedef dbus_bool_t (* DBusAllowUnixUserFunction)  (DBusConnection *connection,
  134.                                                     unsigned long   uid,
  135.                                                     void           *data);
  136. /**
  137.  * Called during authentication to check whether the given Windows user
  138.  * ID is allowed to connect, if the client tried to auth as a Windows
  139.  * user ID. Normally on UNIX this would never happen. Set with
  140.  * dbus_connection_set_windows_user_function().
  141.  */ 
  142. typedef dbus_bool_t (* DBusAllowWindowsUserFunction)  (DBusConnection *connection,
  143.                                                        const char     *user_sid,
  144.                                                        void           *data);
  145. /**
  146.  * Called when a pending call now has a reply available. Set with
  147.  * dbus_pending_call_set_notify().
  148.  */
  149. typedef void (* DBusPendingCallNotifyFunction) (DBusPendingCall *pending,
  150.                                                 void            *user_data);
  151. /**
  152.  * Called when a message needs to be handled. The result indicates whether or
  153.  * not more handlers should be run. Set with dbus_connection_add_filter().
  154.  */
  155. typedef DBusHandlerResult (* DBusHandleMessageFunction) (DBusConnection     *connection,
  156.                                                          DBusMessage        *message,
  157.                                                          void               *user_data);
  158. DBusConnection*    dbus_connection_open                         (const char                 *address,
  159.                                                                  DBusError                  *error);
  160. DBusConnection*    dbus_connection_open_private                 (const char                 *address,
  161.                                                                  DBusError                  *error);
  162. DBusConnection*    dbus_connection_ref                          (DBusConnection             *connection);
  163. void               dbus_connection_unref                        (DBusConnection             *connection);
  164. void               dbus_connection_close                        (DBusConnection             *connection);
  165. dbus_bool_t        dbus_connection_get_is_connected             (DBusConnection             *connection);
  166. dbus_bool_t        dbus_connection_get_is_authenticated         (DBusConnection             *connection);
  167. dbus_bool_t        dbus_connection_get_is_anonymous             (DBusConnection             *connection);
  168. char*              dbus_connection_get_server_id                (DBusConnection             *connection);
  169. void               dbus_connection_set_exit_on_disconnect       (DBusConnection             *connection,
  170.                                                                  dbus_bool_t                 exit_on_disconnect);
  171. void               dbus_connection_flush                        (DBusConnection             *connection);
  172. dbus_bool_t        dbus_connection_read_write_dispatch          (DBusConnection             *connection,
  173.                                                                  int                         timeout_milliseconds);
  174. dbus_bool_t        dbus_connection_read_write                   (DBusConnection             *connection,
  175.                                                                  int                         timeout_milliseconds);
  176. DBusMessage*       dbus_connection_borrow_message               (DBusConnection             *connection);
  177. void               dbus_connection_return_message               (DBusConnection             *connection,
  178.                                                                  DBusMessage                *message);
  179. void               dbus_connection_steal_borrowed_message       (DBusConnection             *connection,
  180.                                                                  DBusMessage                *message);
  181. DBusMessage*       dbus_connection_pop_message                  (DBusConnection             *connection);
  182. DBusDispatchStatus dbus_connection_get_dispatch_status          (DBusConnection             *connection);
  183. DBusDispatchStatus dbus_connection_dispatch                     (DBusConnection             *connection);
  184. dbus_bool_t        dbus_connection_has_messages_to_send         (DBusConnection *connection);
  185. dbus_bool_t        dbus_connection_send                         (DBusConnection             *connection,
  186.                                                                  DBusMessage                *message,
  187.                                                                  dbus_uint32_t              *client_serial);
  188. dbus_bool_t        dbus_connection_send_with_reply              (DBusConnection             *connection,
  189.                                                                  DBusMessage                *message,
  190.                                                                  DBusPendingCall           **pending_return,
  191.                                                                  int                         timeout_milliseconds);
  192. DBusMessage *      dbus_connection_send_with_reply_and_block    (DBusConnection             *connection,
  193.                                                                  DBusMessage                *message,
  194.                                                                  int                         timeout_milliseconds,
  195.                                                                  DBusError                  *error);
  196. dbus_bool_t        dbus_connection_set_watch_functions          (DBusConnection             *connection,
  197.                                                                  DBusAddWatchFunction        add_function,
  198.                                                                  DBusRemoveWatchFunction     remove_function,
  199.                                                                  DBusWatchToggledFunction    toggled_function,
  200.                                                                  void                       *data,
  201.                                                                  DBusFreeFunction            free_data_function);
  202. dbus_bool_t        dbus_connection_set_timeout_functions        (DBusConnection             *connection,
  203.                                                                  DBusAddTimeoutFunction      add_function,
  204.                                                                  DBusRemoveTimeoutFunction   remove_function,
  205.                                                                  DBusTimeoutToggledFunction  toggled_function,
  206.                                                                  void                       *data,
  207.                                                                  DBusFreeFunction            free_data_function);
  208. void               dbus_connection_set_wakeup_main_function     (DBusConnection             *connection,
  209.                                                                  DBusWakeupMainFunction      wakeup_main_function,
  210.                                                                  void                       *data,
  211.                                                                  DBusFreeFunction            free_data_function);
  212. void               dbus_connection_set_dispatch_status_function (DBusConnection             *connection,
  213.                                                                  DBusDispatchStatusFunction  function,
  214.                                                                  void                       *data,
  215.                                                                  DBusFreeFunction            free_data_function);
  216. dbus_bool_t        dbus_connection_get_unix_user                (DBusConnection             *connection,
  217.                                                                  unsigned long              *uid);
  218. dbus_bool_t        dbus_connection_get_unix_process_id          (DBusConnection             *connection,
  219.                                                                  unsigned long              *pid);
  220. dbus_bool_t        dbus_connection_get_adt_audit_session_data   (DBusConnection             *connection,
  221.                                                                  void                      **data,
  222.                                                                  dbus_int32_t               *data_size);
  223. void               dbus_connection_set_unix_user_function       (DBusConnection             *connection,
  224.                                                                  DBusAllowUnixUserFunction   function,
  225.                                                                  void                       *data,
  226.                                                                  DBusFreeFunction            free_data_function);
  227. dbus_bool_t        dbus_connection_get_windows_user             (DBusConnection             *connection,
  228.                                                                  char                      **windows_sid_p); 
  229. void               dbus_connection_set_windows_user_function    (DBusConnection             *connection,
  230.                                                                  DBusAllowWindowsUserFunction function,
  231.                                                                  void                       *data,
  232.                                                                  DBusFreeFunction            free_data_function);
  233. void               dbus_connection_set_allow_anonymous          (DBusConnection             *connection,
  234.                                                                  dbus_bool_t                 value);
  235. void               dbus_connection_set_route_peer_messages      (DBusConnection             *connection,
  236.                                                                  dbus_bool_t                 value);
  237. /* Filters */
  238. dbus_bool_t dbus_connection_add_filter    (DBusConnection            *connection,
  239.                                            DBusHandleMessageFunction  function,
  240.                                            void                      *user_data,
  241.                                            DBusFreeFunction           free_data_function);
  242. void        dbus_connection_remove_filter (DBusConnection            *connection,
  243.                                            DBusHandleMessageFunction  function,
  244.                                            void                      *user_data);
  245. /* Other */
  246. dbus_bool_t dbus_connection_allocate_data_slot (dbus_int32_t     *slot_p);
  247. void        dbus_connection_free_data_slot     (dbus_int32_t     *slot_p);
  248. dbus_bool_t dbus_connection_set_data           (DBusConnection   *connection,
  249.                                                 dbus_int32_t      slot,
  250.                                                 void             *data,
  251.                                                 DBusFreeFunction  free_data_func);
  252. void*       dbus_connection_get_data           (DBusConnection   *connection,
  253.                                                 dbus_int32_t      slot);
  254. void        dbus_connection_set_change_sigpipe (dbus_bool_t       will_modify_sigpipe); 
  255. void dbus_connection_set_max_message_size  (DBusConnection *connection,
  256.                                             long            size);
  257. long dbus_connection_get_max_message_size  (DBusConnection *connection);
  258. void dbus_connection_set_max_received_size (DBusConnection *connection,
  259.                                             long            size);
  260. long dbus_connection_get_max_received_size (DBusConnection *connection);
  261. long dbus_connection_get_outgoing_size     (DBusConnection *connection);
  262. DBusPreallocatedSend* dbus_connection_preallocate_send       (DBusConnection       *connection);
  263. void                  dbus_connection_free_preallocated_send (DBusConnection       *connection,
  264.                                                               DBusPreallocatedSend *preallocated);
  265. void                  dbus_connection_send_preallocated      (DBusConnection       *connection,
  266.                                                               DBusPreallocatedSend *preallocated,
  267.                                                               DBusMessage          *message,
  268.                                                               dbus_uint32_t        *client_serial);
  269. /* Object tree functionality */
  270. /**
  271.  * Called when a #DBusObjectPathVTable is unregistered (or its connection is freed).
  272.  * Found in #DBusObjectPathVTable.
  273.  */
  274. typedef void              (* DBusObjectPathUnregisterFunction) (DBusConnection  *connection,
  275.                                                                 void            *user_data);
  276. /**
  277.  * Called when a message is sent to a registered object path. Found in
  278.  * #DBusObjectPathVTable which is registered with dbus_connection_register_object_path()
  279.  * or dbus_connection_register_fallback().
  280.  */
  281. typedef DBusHandlerResult (* DBusObjectPathMessageFunction)    (DBusConnection  *connection,
  282.                                                                 DBusMessage     *message,
  283.                                                                 void            *user_data);
  284. /**
  285.  * Virtual table that must be implemented to handle a portion of the
  286.  * object path hierarchy. Attach the vtable to a particular path using
  287.  * dbus_connection_register_object_path() or
  288.  * dbus_connection_register_fallback().
  289.  */
  290. struct DBusObjectPathVTable
  291. {
  292.   DBusObjectPathUnregisterFunction   unregister_function; /**< Function to unregister this handler */
  293.   DBusObjectPathMessageFunction      message_function; /**< Function to handle messages */
  294.   
  295.   void (* dbus_internal_pad1) (void *); /**< Reserved for future expansion */
  296.   void (* dbus_internal_pad2) (void *); /**< Reserved for future expansion */
  297.   void (* dbus_internal_pad3) (void *); /**< Reserved for future expansion */
  298.   void (* dbus_internal_pad4) (void *); /**< Reserved for future expansion */
  299. };
  300. dbus_bool_t dbus_connection_try_register_object_path (DBusConnection              *connection,
  301.                                                       const char                  *path,
  302.                                                       const DBusObjectPathVTable  *vtable,
  303.                                                       void                        *user_data,
  304.                                                       DBusError                   *error);
  305. dbus_bool_t dbus_connection_register_object_path   (DBusConnection              *connection,
  306.                                                     const char                  *path,
  307.                                                     const DBusObjectPathVTable  *vtable,
  308.                                                     void                        *user_data);
  309. dbus_bool_t dbus_connection_try_register_fallback (DBusConnection              *connection,
  310.                                                    const char                  *path,
  311.                                                    const DBusObjectPathVTable  *vtable,
  312.                                                    void                        *user_data,
  313.                                                    DBusError                   *error);
  314. dbus_bool_t dbus_connection_register_fallback      (DBusConnection              *connection,
  315.                                                     const char                  *path,
  316.                                                     const DBusObjectPathVTable  *vtable,
  317.                                                     void                        *user_data);
  318. dbus_bool_t dbus_connection_unregister_object_path (DBusConnection              *connection,
  319.                                                     const char                  *path);
  320. dbus_bool_t dbus_connection_get_object_path_data   (DBusConnection              *connection,
  321.                                                     const char                  *path,
  322.                                                     void                       **data_p);
  323. dbus_bool_t dbus_connection_list_registered        (DBusConnection              *connection,
  324.                                                     const char                  *parent_path,
  325.                                                     char                      ***child_entries);
  326. dbus_bool_t dbus_connection_get_unix_fd            (DBusConnection              *connection,
  327.                                                     int                         *fd);
  328. dbus_bool_t dbus_connection_get_socket             (DBusConnection              *connection,
  329.                                                     int                         *fd);
  330. /** @} */
  331. /**
  332.  * @addtogroup DBusWatch
  333.  * @{
  334.  */
  335. #ifndef DBUS_DISABLE_DEPRECATED
  336. DBUS_DEPRECATED int dbus_watch_get_fd      (DBusWatch        *watch);
  337. #endif
  338. int          dbus_watch_get_unix_fd (DBusWatch        *watch);
  339. int          dbus_watch_get_socket  (DBusWatch        *watch);
  340. unsigned int dbus_watch_get_flags   (DBusWatch        *watch);
  341. void*        dbus_watch_get_data    (DBusWatch        *watch);
  342. void         dbus_watch_set_data    (DBusWatch        *watch,
  343.                                      void             *data,
  344.                                      DBusFreeFunction  free_data_function);
  345. dbus_bool_t  dbus_watch_handle      (DBusWatch        *watch,
  346.                                      unsigned int      flags);
  347. dbus_bool_t  dbus_watch_get_enabled (DBusWatch        *watch);
  348. /** @} */
  349. /**
  350.  * @addtogroup DBusTimeout
  351.  * @{
  352.  */
  353. int         dbus_timeout_get_interval (DBusTimeout      *timeout);
  354. void*       dbus_timeout_get_data     (DBusTimeout      *timeout);
  355. void        dbus_timeout_set_data     (DBusTimeout      *timeout,
  356.                                        void             *data,
  357.                                        DBusFreeFunction  free_data_function);
  358. dbus_bool_t dbus_timeout_handle       (DBusTimeout      *timeout);
  359. dbus_bool_t dbus_timeout_get_enabled  (DBusTimeout      *timeout);
  360. /** @} */
  361. DBUS_END_DECLS
  362. #endif /* DBUS_CONNECTION_H */