00001 00027 #ifndef _PURPLE_DBUS_BINDINGS_H_ 00028 #define _PURPLE_DBUS_BINDINGS_H_ 00029 00030 #include <dbus/dbus.h> 00031 #include <dbus/dbus-glib-lowlevel.h> 00032 #include <glib.h> 00033 00034 #ifdef __cplusplus 00035 extern "C" { 00036 #endif 00037 00038 gint purple_dbus_pointer_to_id(gconstpointer node); 00039 gpointer purple_dbus_id_to_pointer(gint id, PurpleDBusType *type); 00040 gint purple_dbus_pointer_to_id_error(gconstpointer ptr, DBusError *error); 00041 gpointer purple_dbus_id_to_pointer_error(gint id, PurpleDBusType *type, 00042 const char *typename, DBusError *error); 00043 00044 #define NULLIFY(id) id = empty_to_null(id) 00045 00046 #define CHECK_ERROR(error) if (dbus_error_is_set(error)) return NULL; 00047 00048 #define PURPLE_DBUS_ID_TO_POINTER(ptr, id, type, error) \ 00049 G_STMT_START { \ 00050 ptr = (type*) purple_dbus_id_to_pointer_error \ 00051 (id, PURPLE_DBUS_TYPE(type), #type, error); \ 00052 CHECK_ERROR(error); \ 00053 } G_STMT_END 00054 00055 00056 #define PURPLE_DBUS_POINTER_TO_ID(id, ptr, error) \ 00057 G_STMT_START { \ 00058 id = purple_dbus_pointer_to_id_error(ptr,error); \ 00059 CHECK_ERROR(error); \ 00060 } G_STMT_END 00061 00062 00063 dbus_bool_t 00064 purple_dbus_message_get_args (DBusMessage *message, 00065 DBusError *error, 00066 int first_arg_type, 00067 ...); 00068 dbus_bool_t 00069 purple_dbus_message_get_args_valist (DBusMessage *message, 00070 DBusError *error, 00071 int first_arg_type, 00072 va_list var_args); 00073 00074 dbus_bool_t 00075 purple_dbus_message_iter_get_args (DBusMessageIter *iter, 00076 DBusError *error, 00077 int first_arg_type, 00078 ...); 00079 00080 dbus_bool_t 00081 purple_dbus_message_iter_get_args_valist (DBusMessageIter *iter, 00082 DBusError *error, 00083 int first_arg_type, 00084 va_list var_args); 00085 00086 dbus_int32_t* purple_dbusify_GList(GList *list, gboolean free_memory, 00087 dbus_int32_t *len); 00088 dbus_int32_t* purple_dbusify_GSList(GSList *list, gboolean free_memory, 00089 dbus_int32_t *len); 00090 gpointer* purple_GList_to_array(GList *list, gboolean free_memory, 00091 dbus_int32_t *len); 00092 gpointer* purple_GSList_to_array(GSList *list, gboolean free_memory, 00093 dbus_int32_t *len); 00094 GHashTable *purple_dbus_iter_hash_table(DBusMessageIter *iter, DBusError *error); 00095 00096 const char* empty_to_null(const char *str); 00097 const char* null_to_empty(const char *s); 00098 00099 typedef struct { 00100 const char *name; 00101 const char *parameters; 00102 DBusMessage* (*handler)(DBusMessage *request, DBusError *error); 00103 } PurpleDBusBinding; 00104 00105 void purple_dbus_register_bindings(void *handle, PurpleDBusBinding *bindings); 00106 00107 DBusConnection *purple_dbus_get_connection(void); 00108 00109 #ifdef __cplusplus 00110 } 00111 #endif 00112 00113 #endif