easydbus.h File Reference

#include <easydbus/elem.h>
#include <easydbus/variant.h>
#include <easydbus/dict_entry.h>
#include <easydbus/skeleton.h>
#include <easydbus/array.h>
#include <easydbus/struct.h>
#include <easydbus/monitor.h>

Include dependency graph for easydbus.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Typedefs

typedef struct EasyDbus_conn EasyDbus_conn
typedef struct EasyDbus_container EasyDbus_container
typedef struct EasyDbus_elem EasyDbus_elem
typedef void(* easydbus_error_message_cb_f )(EasyDbus_conn *, const EasyDbus_reply *, void *)
typedef struct EasyDbus_method EasyDbus_method
typedef void(* easydbus_method_async_reply_cb_f )(EasyDbus_conn *, EasyDbus_method *, void *)
typedef struct EasyDbus_reply EasyDbus_reply
typedef void(* easydbus_reply_async_cb_f )(EasyDbus_conn *, EasyDbus_method *, void *)
typedef void(* easydbus_reply_message_cb_f )(EasyDbus_conn *, const EasyDbus_method *, void *)
typedef struct EasyDbus_signal EasyDbus_signal

Enumerations

enum  easydbus_bus {
  EASYDBUS_INVALID, EASYDBUS_SESSION, EASYDBUS_SYSTEM, EASYDBUS_SESSION_SERVER,
  EASYDBUS_SYSTEM_SERVER, EASYDBUS_LOCAL
}
enum  easydbus_connection_flags {
  EASYDBUS_CONN_DEFAULT = 0, EASYDBUS_CONN_PRIVATE = 1, EASYDBUS_CONN_ALLOW_REPLACEMENT = 2, EASYDBUS_CONN_REPLACE_EXISTING = 4,
  EASYDBUS_CONN_DO_NOT_QUEUE = 8, EASYDBUS_CONN_NAME_SERVICE_RENAMED = 16, EASYDBUS_CONN_NAME_SERVICE_EXISTS = 32, EASYDBUS_CONN_NAME_SERVICE_IN_QUEUE = 64,
  EASYDBUS_CONN_NAME_SERVICE_PRIMARY = 128, EASYDBUS_CONN_NAME_UNIQUE = 256
}
enum  easydbus_ret_values {
  EASYDBUS_SIGNAL_HANDLED, EASYDBUS_SIGNAL_NOT_HANDLED, EASYDBUS_SIGNAL_MSG_NULL, EASYDBUS_SIGNAL_SENT,
  EASYDBUS_SIGNAL_NOT_SENT, EASYDBUS_SIGNAL_NOT_FOUND, EASYDBUS_METHOD_NOT_SENT, EASYDBUS_METHOD_SENT,
  EASYDBUS_METHOD_HANDLED, EASYDBUS_METHOD_NOT_HANDLED, EASYDBUS_METHOD_MSG_NULL, EASYDBUS_METHOD_NOT_FOUND,
  EASYDBUS_FAILURE_HANDLED, EASYDBUS_METHOD_RETURN_HANDLED, EASYDBUS_NEED_MEMORY, EASYDBUS_ERROR
}
enum  easydbus_watcher_flags {
  EASYDBUS_WATCHER_INVALID = 0, EASYDBUS_WATCHER_WRITABLE = 1, EASYDBUS_WATCHER_READABLE = 2, EASYDBUS_WATCHER_ERROR = 4,
  EASYDBUS_WATCHER_HANGUP = 8
}
enum  el_type {
  EASYDBUS_ELTYPE_INVALID, EASYDBUS_ELTYPE_STRING, EASYDBUS_ELTYPE_ARRAY, EASYDBUS_ELTYPE_BYTE,
  EASYDBUS_ELTYPE_BOOLEAN, EASYDBUS_ELTYPE_DOUBLE, EASYDBUS_ELTYPE_INT16, EASYDBUS_ELTYPE_UINT16,
  EASYDBUS_ELTYPE_INT32, EASYDBUS_ELTYPE_UINT32, EASYDBUS_ELTYPE_INT64, EASYDBUS_ELTYPE_UINT64,
  EASYDBUS_ELTYPE_OBJECT_PATH, EASYDBUS_ELTYPE_SIGNATURE, EASYDBUS_ELTYPE_STRUCT, EASYDBUS_ELTYPE_VARIANT,
  EASYDBUS_ELTYPE_DICT_ENTRY
}
enum  event_type {
  EASYDBUS_ET_INVALID, EASYDBUS_ET_METHOD, EASYDBUS_ET_SIGNAL, EASYDBUS_ET_REPLY,
  EASYDBUS_ET_FAILURE
}

Functions

int easydbus_conn_add_match_rule (EasyDbus_conn *, enum event_type, char *, char *, char *, char *, char *)
 easydbus includes
EasyDbus_conneasydbus_conn_create (void)
 Create and init EasyDbus_conn object.
int easydbus_conn_destroy (EasyDbus_conn *)
 Deinitialize EasyDbus_conn object, close connection to Dbus and remove registered objects.
int easydbus_conn_disable_filters (EasyDbus_conn *)
 Disable filters for objects.
int easydbus_conn_enable_filters (EasyDbus_conn *)
 Enable filters for objects. In particular, this function MUST be called for manage Disconnected signal, reply message on service and for manage external signal object.
int easydbus_conn_get_address (EasyDbus_conn *, char *, enum easydbus_bus, int)
 Acquire source address.
void * easydbus_conn_get_closure (EasyDbus_conn *)
 Get closure of EasyDbus_conn object.
int easydbus_conn_get_fd (EasyDbus_conn *)
 Get connection file descriptor of connection.
const char * easydbus_conn_get_service_name (const EasyDbus_conn *)
 Get service name.
int easydbus_conn_get_system_service_address (EasyDbus_conn *, char *)
 Acquire source address from environment variable.
int easydbus_conn_reconnect (EasyDbus_conn *, int)
 Try to reconnect to DBus through previous data.
int easydbus_conn_remove_match_rule (EasyDbus_conn *, enum event_type, char *, char *, char *, char *, char *)
 Remove match rule on dbus.
void easydbus_conn_set_closure (EasyDbus_conn *, void *)
 Set closure of EasyDbus_conn object.
int easydbus_conn_set_error_message_cb (EasyDbus_conn *, easydbus_error_message_cb_f, void *)
 Set user callback for handle error message not connected to a pending message.
int easydbus_conn_set_reply_async_cb (EasyDbus_conn *, easydbus_reply_async_cb_f, void *)
 Set user callback for handle reply to asynchronous method call on easydbus_main_loop or through watcher.
int easydbus_conn_set_reply_message_cb (EasyDbus_conn *, easydbus_reply_message_cb_f)
 Set user callback for handle reply message connected to a pending message.
void easydbus_deinit (void)
 Frees all memory allocated internally by libdbus.
void easydbus_init (void)
 Init easydbus library function.
int easydbus_start_service (EasyDbus_conn *, char *)
 Start service.


Typedef Documentation

typedef struct EasyDbus_conn EasyDbus_conn

Definition at line 125 of file easydbus.h.

typedef struct EasyDbus_container EasyDbus_container

Definition at line 126 of file easydbus.h.

typedef struct EasyDbus_elem EasyDbus_elem

Definition at line 127 of file easydbus.h.

typedef void(* easydbus_error_message_cb_f)(EasyDbus_conn *, const EasyDbus_reply *, void *)

Definition at line 138 of file easydbus.h.

typedef struct EasyDbus_method EasyDbus_method

Definition at line 130 of file easydbus.h.

typedef void(* easydbus_method_async_reply_cb_f)(EasyDbus_conn *, EasyDbus_method *, void *)

Definition at line 132 of file easydbus.h.

typedef struct EasyDbus_reply EasyDbus_reply

Definition at line 129 of file easydbus.h.

typedef void(* easydbus_reply_async_cb_f)(EasyDbus_conn *, EasyDbus_method *, void *)

Definition at line 135 of file easydbus.h.

typedef void(* easydbus_reply_message_cb_f)(EasyDbus_conn *, const EasyDbus_method *, void *)

Definition at line 142 of file easydbus.h.

typedef struct EasyDbus_signal EasyDbus_signal

Definition at line 128 of file easydbus.h.


Enumeration Type Documentation

enum easydbus_bus

Enumerator:
EASYDBUS_INVALID 
EASYDBUS_SESSION 
EASYDBUS_SYSTEM 
EASYDBUS_SESSION_SERVER 
EASYDBUS_SYSTEM_SERVER 
EASYDBUS_LOCAL 

Definition at line 67 of file easydbus.h.

enum easydbus_connection_flags

Enumerator:
EASYDBUS_CONN_DEFAULT 
EASYDBUS_CONN_PRIVATE 
EASYDBUS_CONN_ALLOW_REPLACEMENT 
EASYDBUS_CONN_REPLACE_EXISTING 
EASYDBUS_CONN_DO_NOT_QUEUE 
EASYDBUS_CONN_NAME_SERVICE_RENAMED 
EASYDBUS_CONN_NAME_SERVICE_EXISTS 
EASYDBUS_CONN_NAME_SERVICE_IN_QUEUE 
EASYDBUS_CONN_NAME_SERVICE_PRIMARY 
EASYDBUS_CONN_NAME_UNIQUE 

Definition at line 84 of file easydbus.h.

00084                                {
00085   EASYDBUS_CONN_DEFAULT = 0,
00086   EASYDBUS_CONN_PRIVATE = 1,
00087   // dbus flags binding
00088   EASYDBUS_CONN_ALLOW_REPLACEMENT = 2,
00089   EASYDBUS_CONN_REPLACE_EXISTING = 4,
00090   EASYDBUS_CONN_DO_NOT_QUEUE = 8,
00091   // this flag permit to renamed service
00092   // to "name_service"+n--> "name_service1", "name_service2", etc.
00093   // if also EASYDBUS_CONN_DO_NOT_QUEUE is used.
00094   EASYDBUS_CONN_NAME_SERVICE_RENAMED = 16,
00095   // connection status
00096   EASYDBUS_CONN_NAME_SERVICE_EXISTS = 32,
00097   EASYDBUS_CONN_NAME_SERVICE_IN_QUEUE = 64,
00098   EASYDBUS_CONN_NAME_SERVICE_PRIMARY = 128,
00099   // enable setting dbus unique name (under testing, seems create a memory leak)
00100   EASYDBUS_CONN_NAME_UNIQUE = 256
00101 };

enum easydbus_ret_values

Enumerator:
EASYDBUS_SIGNAL_HANDLED 
EASYDBUS_SIGNAL_NOT_HANDLED 
EASYDBUS_SIGNAL_MSG_NULL 
EASYDBUS_SIGNAL_SENT 
EASYDBUS_SIGNAL_NOT_SENT 
EASYDBUS_SIGNAL_NOT_FOUND 
EASYDBUS_METHOD_NOT_SENT 
EASYDBUS_METHOD_SENT 
EASYDBUS_METHOD_HANDLED 
EASYDBUS_METHOD_NOT_HANDLED 
EASYDBUS_METHOD_MSG_NULL 
EASYDBUS_METHOD_NOT_FOUND 
EASYDBUS_FAILURE_HANDLED 
EASYDBUS_METHOD_RETURN_HANDLED 
EASYDBUS_NEED_MEMORY 
EASYDBUS_ERROR 

Definition at line 103 of file easydbus.h.

00103                          {
00104   EASYDBUS_SIGNAL_HANDLED,
00105   EASYDBUS_SIGNAL_NOT_HANDLED,
00106   EASYDBUS_SIGNAL_MSG_NULL,
00107   EASYDBUS_SIGNAL_SENT,
00108   EASYDBUS_SIGNAL_NOT_SENT,
00109   EASYDBUS_SIGNAL_NOT_FOUND, // for manage signal that 
00110   // aren't present
00111   EASYDBUS_METHOD_NOT_SENT,
00112   EASYDBUS_METHOD_SENT,
00113   EASYDBUS_METHOD_HANDLED,
00114   EASYDBUS_METHOD_NOT_HANDLED,
00115   EASYDBUS_METHOD_MSG_NULL,
00116   EASYDBUS_METHOD_NOT_FOUND, // for manage call on method
00117   // that aren't present
00118   EASYDBUS_FAILURE_HANDLED,
00119   EASYDBUS_METHOD_RETURN_HANDLED,
00120   EASYDBUS_NEED_MEMORY,
00121   EASYDBUS_ERROR
00122 };

enum easydbus_watcher_flags

Enumerator:
EASYDBUS_WATCHER_INVALID 
EASYDBUS_WATCHER_WRITABLE 
EASYDBUS_WATCHER_READABLE 
EASYDBUS_WATCHER_ERROR 
EASYDBUS_WATCHER_HANGUP 

Definition at line 76 of file easydbus.h.

enum el_type

Enumerator:
EASYDBUS_ELTYPE_INVALID 
EASYDBUS_ELTYPE_STRING 
EASYDBUS_ELTYPE_ARRAY 
EASYDBUS_ELTYPE_BYTE 
EASYDBUS_ELTYPE_BOOLEAN 
EASYDBUS_ELTYPE_DOUBLE 
EASYDBUS_ELTYPE_INT16 
EASYDBUS_ELTYPE_UINT16 
EASYDBUS_ELTYPE_INT32 
EASYDBUS_ELTYPE_UINT32 
EASYDBUS_ELTYPE_INT64 
EASYDBUS_ELTYPE_UINT64 
EASYDBUS_ELTYPE_OBJECT_PATH 
EASYDBUS_ELTYPE_SIGNATURE 
EASYDBUS_ELTYPE_STRUCT 
EASYDBUS_ELTYPE_VARIANT 
EASYDBUS_ELTYPE_DICT_ENTRY 

Definition at line 38 of file easydbus.h.

enum event_type

Enumerator:
EASYDBUS_ET_INVALID 
EASYDBUS_ET_METHOD 
EASYDBUS_ET_SIGNAL 
EASYDBUS_ET_REPLY 
EASYDBUS_ET_FAILURE 

Definition at line 59 of file easydbus.h.


Function Documentation

void* easydbus_conn_get_closure ( EasyDbus_conn c  ) 

Get closure of EasyDbus_conn object.

Parameters:
c EasyDbus_conn object pointer
Returns:
pointer to closure data

Definition at line 380 of file acquire.c.

References EasyDbus_conn::closure.

00381 {
00382    return (c ? c->closure : NULL);
00383 }

int easydbus_conn_reconnect ( EasyDbus_conn conn,
int  sleep_time 
)

Try to reconnect to DBus through previous data.

Parameters:
conn EasyDbus_conn object pointer
sleep_time time before reconnect (in seconds)
Note:
This function MUST be called only if a Disconnect signal is handled and on easydbus_error_cb_f callback. However, it is advise use of this function for system service because libdbus leave a reference count of 1 on DBusConnection and so doesn't free all data until easydbus_deinit is called.
Returns:
-1 error

EASYDBUS_CONN_NAME_SERVICE_EXISTS name service exists.

EASYDBUS_CONN_NAME_SERVICE_IN_QUEUE name service in queue.

EASYDBUS_CONN_NAME_SERVICE_PRIMARY name service is primary name.

EASYDBUS_CONN_NAME_SERVICE_RENAMED name service is been renamed.

Definition at line 112 of file acquire.c.

References EasyDbus_conn::bus, EasyDbus_core::conn, EasyDbus_object_box::core, easydbus_acquire_name(), EASYDBUS_CONN_DO_NOT_QUEUE, easydbus_conn_enable_filters(), EASYDBUS_CONN_NAME_SERVICE_EXISTS, EASYDBUS_CONN_NAME_SERVICE_RENAMED, easydbus_connect_to_bus(), easydbus_found_new_name(), EASYDBUS_SESSION, EASYDBUS_SESSION_SERVER, EASYDBUS_SYSTEM, EASYDBUS_SYSTEM_SERVER, easydbus_watcher_enable(), EasyDbusDebug, EasyDbus_conn::flags, EasyDbus_object_box::next, EasyDbus_core::objects, EasyDbus_object::path, EasyDbus_conn::registered_ondbus, EasyDbus_core::service_name, EasyDbus_object_box::vtable, EasyDbus_conn::watcher_add_cb, EasyDbus_conn::watcher_closure, and EasyDbus_conn::watcher_remove_cb.

00113 {
00114    DBusError err;
00115    int result = -1;
00116    struct EasyDbus_object_box *object;
00117    struct EasyDbus_core *core = 
00118       (struct EasyDbus_core *)conn;
00119    char *new_service_name = NULL;
00120 
00121    if (!conn || !core->service_name)
00122       return -1;
00123 
00124    if (core->conn)
00125       dbus_connection_unref(core->conn);
00126    core->conn = NULL;
00127    conn->registered_ondbus = 0;
00128 
00129    dbus_error_init (&err);
00130 
00131    sleep (sleep_time);
00132 
00133    // Acquire bus address
00134    switch (conn->bus) {
00135       case EASYDBUS_SESSION:
00136       case EASYDBUS_SESSION_SERVER:
00137          if (easydbus_connect_to_bus (core, &err, DBUS_BUS_SESSION))
00138             goto error;
00139          break;
00140       case EASYDBUS_SYSTEM:
00141       case EASYDBUS_SYSTEM_SERVER:
00142          if (easydbus_connect_to_bus (core, &err, DBUS_BUS_SYSTEM))
00143             goto error;
00144          break;
00145       default:
00146          goto error;
00147          break;
00148    }
00149 
00150    result = easydbus_acquire_name (core, core->service_name, 
00151                                    conn->flags, &err);
00152 
00153    if (result == EASYDBUS_CONN_NAME_SERVICE_EXISTS &&
00154        // probably this isn't needed because without this flags
00155        // return value is EASYDBUS_CONN_NAME_SERVICE_IN_QUEUE
00156        (conn->flags & EASYDBUS_CONN_DO_NOT_QUEUE)) {
00157       if (conn->flags & EASYDBUS_CONN_NAME_SERVICE_RENAMED) {
00158          new_service_name = easydbus_found_new_name
00159             (core, core->service_name, conn->flags, &err);
00160          if (new_service_name == NULL)
00161             goto error;
00162          result = EASYDBUS_CONN_NAME_SERVICE_RENAMED;
00163       }
00164       else
00165          goto error;
00166    }
00167 
00168    conn->registered_ondbus = 1;
00169    if (new_service_name) {
00170       if (core->service_name)
00171          free (core->service_name);
00172       core->service_name = new_service_name;
00173    }
00174 
00175    if (core->objects) {
00176       for (object = core->objects; object; 
00177            object = object->next) {
00178          if (!dbus_connection_register_object_path (core->conn,
00179                                      (const char *) object->core.path, 
00180                                                     &object->vtable,
00181                                                     core)) {
00182             EasyDbusDebug ("Error on register object %s", object->core.path);
00183             goto error;
00184          }
00185       }
00186       easydbus_conn_enable_filters (conn);
00187    }
00188 
00189    // check if there is watcher
00190    if (conn->watcher_add_cb && conn->watcher_remove_cb) {
00191       if (easydbus_watcher_enable (conn, conn->watcher_add_cb,
00192                                    conn->watcher_remove_cb,
00193                                    conn->watcher_closure))
00194          goto error;
00195    }
00196 
00197    dbus_error_free (&err);
00198 
00199    return result;
00200 error:
00201    if (conn->registered_ondbus)
00202       dbus_bus_release_name (core->conn, core->service_name, &err);
00203 
00204    if (core->conn != NULL)
00205       dbus_connection_unref (core->conn);
00206 
00207    dbus_error_free (&err);
00208    return -1;
00209 }

Here is the call graph for this function:

void easydbus_conn_set_closure ( EasyDbus_conn c,
void *  closure 
)

Set closure of EasyDbus_conn object.

Parameters:
c EasyDbus_conn object pointer
closure pointer to user data.

Definition at line 369 of file acquire.c.

References EasyDbus_conn::closure.

00371 {
00372    c->closure = closure;
00373 }

void easydbus_deinit ( void   )  [inline]

Frees all memory allocated internally by libdbus.

Note:
Must be called only at end on programs or if DBus isn't still necessary.

Definition at line 62 of file easydbus.c.

References EasyDbusDebug.

00063 {
00064    EasyDbusDebug ("Deinit %s %s library...", PACKAGE_NAME, VERSION);
00065    dbus_shutdown ();
00066 }


Generated on Thu Apr 10 10:00:41 2008 for EasyDbus-0.2 by  doxygen 1.5.4