25#ifndef DBUS_SERVER_PROTECTED_H
26#define DBUS_SERVER_PROTECTED_H
28#include <dbus/dbus-internals.h>
29#include <dbus/dbus-threads-internal.h>
30#include <dbus/dbus-server.h>
31#include <dbus/dbus-address.h>
32#include <dbus/dbus-timeout.h>
33#include <dbus/dbus-watch.h>
34#include <dbus/dbus-resources.h>
35#include <dbus/dbus-dataslot.h>
36#include <dbus/dbus-string.h>
91#ifndef DBUS_DISABLE_CHECKS
101void _dbus_server_disconnect_unlocked (
DBusServer *server);
108 dbus_bool_t enabled);
115 dbus_bool_t enabled);
124 DBUS_SERVER_LISTEN_NOT_HANDLED,
125 DBUS_SERVER_LISTEN_OK,
126 DBUS_SERVER_LISTEN_BAD_ADDRESS,
127 DBUS_SERVER_LISTEN_DID_NOT_CONNECT,
128 DBUS_SERVER_LISTEN_ADDRESS_ALREADY_USED
129} DBusServerListenResult;
139#ifdef DBUS_ENABLE_VERBOSE_MODE
140void _dbus_server_trace_ref (
DBusServer *server,
145#define _dbus_server_trace_ref(s,o,n,w) \
153#ifdef DBUS_DISABLE_CHECKS
154#define TOOK_LOCK_CHECK(server)
155#define RELEASING_LOCK_CHECK(server)
156#define HAVE_LOCK_CHECK(server)
158#define TOOK_LOCK_CHECK(server) do { \
159 _dbus_assert (!(server)->have_server_lock); \
160 (server)->have_server_lock = TRUE; \
162#define RELEASING_LOCK_CHECK(server) do { \
163 _dbus_assert ((server)->have_server_lock); \
164 (server)->have_server_lock = FALSE; \
166#define HAVE_LOCK_CHECK(server) _dbus_assert ((server)->have_server_lock)
172#define SERVER_LOCK(server) do { \
173 if (TRACE_LOCKS) { _dbus_verbose ("LOCK\n"); } \
174 _dbus_rmutex_lock ((server)->mutex); \
175 TOOK_LOCK_CHECK (server); \
178#define SERVER_UNLOCK(server) do { \
179 if (TRACE_LOCKS) { _dbus_verbose ("UNLOCK\n"); } \
180 RELEASING_LOCK_CHECK (server); \
181 _dbus_rmutex_unlock ((server)->mutex); \
#define DBUS_BEGIN_DECLS
Macro used prior to declaring functions in the D-Bus header files.
#define DBUS_END_DECLS
Macro used after declaring functions in the D-Bus header files.
void(* DBusFreeFunction)(void *memory)
The type of a function which frees a block of memory.
dbus_bool_t _dbus_server_add_watch(DBusServer *server, DBusWatch *watch)
Adds a watch for this server, chaining out to application-provided watch handlers.
void _dbus_server_remove_watch(DBusServer *server, DBusWatch *watch)
Removes a watch previously added with _dbus_server_remove_watch().
void _dbus_server_remove_timeout(DBusServer *server, DBusTimeout *timeout)
Removes a timeout previously added with _dbus_server_add_timeout().
DBUS_PRIVATE_EXPORT void _dbus_server_unref_unlocked(DBusServer *server)
Like dbus_server_unref() but does not acquire the lock (must already be held)
void _dbus_server_toggle_timeout(DBusServer *server, DBusTimeout *timeout, dbus_bool_t enabled)
Toggles a timeout and notifies app via server's DBusTimeoutToggledFunction if available.
dbus_bool_t _dbus_server_add_timeout(DBusServer *server, DBusTimeout *timeout)
Adds a timeout for this server, chaining out to application-provided timeout handlers.
dbus_bool_t _dbus_server_init_base(DBusServer *server, const DBusServerVTable *vtable, const DBusString *address, DBusError *error)
Initializes the members of the DBusServer base class.
void _dbus_server_finalize_base(DBusServer *server)
Finalizes the members of the DBusServer base class.
DBUS_PRIVATE_EXPORT void _dbus_server_ref_unlocked(DBusServer *server)
Like dbus_server_ref() but does not acquire the lock (must already be held)
DBUS_PRIVATE_EXPORT void _dbus_server_toggle_all_watches(DBusServer *server, dbus_bool_t enabled)
Toggles all watch and notifies app via server's DBusWatchToggledFunction if available.
DBusServerListenResult _dbus_server_listen_unix_socket(DBusAddressEntry *entry, DBusServer **server_p, DBusError *error)
Tries to interpret the address entry for UNIX socket addresses.
DBusServerListenResult _dbus_server_listen_platform_specific(DBusAddressEntry *entry, DBusServer **server_p, DBusError *error)
Tries to interpret the address entry in a platform-specific way, creating a platform-specific server ...
void(* DBusNewConnectionFunction)(DBusServer *server, DBusConnection *new_connection, void *data)
Called when a new connection to the server is available.
Internals of DBusAddressEntry.
An atomic integer safe to increment or decrement from multiple threads.
Data structure that stores the actual user data set at a given slot.
Object representing an exception.
Virtual table to be implemented by all server "subclasses".
void(* disconnect)(DBusServer *server)
Disconnect this server.
void(* finalize)(DBusServer *server)
The finalize method must free the server.
Internals of DBusServer object.
dbus_bool_t published_address
flag which indicates that server has published its bus address.
DBusDataSlotList slot_list
Data stored by allocated integer ID.
char * address
Address this server is listening on.
DBusFreeFunction new_connection_free_data_function
Callback to invoke to free new_connection_data when server is finalized or data is replaced.
DBusAtomic refcount
Reference count.
DBusWatchList * watches
Our watches.
DBusGUID guid
Globally unique ID of server.
DBusString guid_hex
Hex-encoded version of GUID.
unsigned int disconnected
TRUE if we are disconnected.
DBusRMutex * mutex
Lock on the server object.
int max_connections
Max number of connections allowed at once.
DBusNewConnectionFunction new_connection_function
Callback to invoke when a new connection is created.
const DBusServerVTable * vtable
Virtual methods for this instance.
void * new_connection_data
Data for new connection callback.
unsigned int have_server_lock
Does someone have the server mutex locked.
char ** auth_mechanisms
Array of allowed authentication mechanisms.
DBusTimeoutList * timeouts
Our timeouts.
DBusTimeoutList implementation details.
Internals of DBusTimeout.
DBusWatchList implementation details.
Implementation of DBusWatch.
A globally unique ID ; we have one for each DBusServer, and also one for each machine with libdbus in...