3e1f50aee830201394e9b8d8fd8d72395a419c26
[framework/uifw/edbus.git] / src / lib / dbus / E_DBus.h
1 #ifndef E_DBUS_H
2 #define E_DBUS_H
3
4 #define DBUS_API_SUBJECT_TO_CHANGE
5
6 #ifdef _WIN32
7 # ifdef interface
8 #  undef interface
9 # endif
10 #endif
11
12 #include <dbus/dbus.h>
13 #include <Eina.h>
14
15 #ifdef EAPI
16 #undef EAPI
17 #endif
18 #ifdef _WIN32
19 # ifdef EFL_EDBUS_BUILD
20 #  ifdef DLL_EXPORT
21 #   define EAPI __declspec(dllexport)
22 #  else
23 #   define EAPI
24 #  endif /* ! DLL_EXPORT */
25 # else
26 #  define EAPI __declspec(dllimport)
27 # endif /* ! EFL_EDBUS_BUILD */
28 #else
29 # ifdef __GNUC__
30 #  if __GNUC__ >= 4
31 #   define EAPI __attribute__ ((visibility("default")))
32 #  else
33 #   define EAPI
34 #  endif
35 # else
36 #  define EAPI
37 # endif
38 #endif
39
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
43    EAPI extern int E_DBUS_DOMAIN_GLOBAL;
44    EAPI extern int E_DBUS_EVENT_SIGNAL;
45
46    typedef struct E_DBus_Connection E_DBus_Connection;
47    typedef struct E_DBus_Object E_DBus_Object;
48    typedef struct E_DBus_Interface E_DBus_Interface;
49    typedef struct E_DBus_Signal_Handler E_DBus_Signal_Handler;
50
51    typedef DBusMessage *(* E_DBus_Method_Cb)(E_DBus_Object *obj, DBusMessage *message);
52    typedef void (*E_DBus_Method_Return_Cb) (void *data, DBusMessage *msg, DBusError *error);
53    typedef void (*E_DBus_Signal_Cb) (void *data, DBusMessage *msg);
54
55    typedef void (*E_DBus_Object_Property_Get_Cb) (E_DBus_Object *obj, const char *property, int *type, void **value);
56    typedef int  (*E_DBus_Object_Property_Set_Cb) (E_DBus_Object *obj, const char *property, int type, void *value);
57
58 /**
59  * A callback function for a DBus call
60  * @param user_data the data passed in to the method call
61  * @param event_data a struct containing the return data.
62  */
63    typedef void (*E_DBus_Callback_Func) (void *user_data, void *method_return, DBusError *error);
64    typedef void *(*E_DBus_Unmarshal_Func) (DBusMessage *msg, DBusError *err);
65    typedef void (*E_DBus_Free_Func) (void *data);
66
67    typedef struct E_DBus_Callback E_DBus_Callback;
68
69
70    EAPI int e_dbus_init(void);
71    EAPI int e_dbus_shutdown(void);
72
73 /* setting up the connection */
74
75    EAPI E_DBus_Connection *e_dbus_bus_get(DBusBusType type);
76
77    EAPI void e_dbus_connection_ref(E_DBus_Connection *conn);
78
79    EAPI E_DBus_Connection *e_dbus_connection_setup(DBusConnection *conn);
80    EAPI void e_dbus_connection_close(E_DBus_Connection *conn);
81
82 /* receiving method calls */
83    EAPI E_DBus_Interface *e_dbus_interface_new(const char *interface);
84    EAPI void e_dbus_interface_ref(E_DBus_Interface *iface);
85    EAPI void e_dbus_interface_unref(E_DBus_Interface *iface);
86    EAPI void e_dbus_object_interface_attach(E_DBus_Object *obj, E_DBus_Interface *iface);
87    EAPI void e_dbus_object_interface_detach(E_DBus_Object *obj, E_DBus_Interface *iface);
88    EAPI int e_dbus_interface_method_add(E_DBus_Interface *iface, const char *member, const char *signature, const char *reply_signature, E_DBus_Method_Cb func);
89
90    EAPI int e_dbus_interface_signal_add(E_DBus_Interface *iface, const char *name, const char *signature);
91
92    EAPI E_DBus_Object *e_dbus_object_add(E_DBus_Connection *conn, const char *object_path, void *data);
93    EAPI void e_dbus_object_free(E_DBus_Object *obj);
94    EAPI void *e_dbus_object_data_get(E_DBus_Object *obj);
95    EAPI E_DBus_Connection *e_dbus_object_conn_get(E_DBus_Object *obj);
96    EAPI const char *e_dbus_object_path_get(E_DBus_Object *obj);
97    EAPI const Eina_List *e_dbus_object_interfaces_get(E_DBus_Object *obj);
98
99    EAPI void e_dbus_object_property_get_cb_set(E_DBus_Object *obj, E_DBus_Object_Property_Get_Cb func);
100    EAPI void e_dbus_object_property_set_cb_set(E_DBus_Object *obj, E_DBus_Object_Property_Set_Cb func);
101
102
103 /* sending method calls */
104
105
106    EAPI DBusPendingCall *e_dbus_message_send(E_DBus_Connection *conn, DBusMessage *msg, E_DBus_Method_Return_Cb cb_return, int timeout, void *data);
107
108    EAPI DBusPendingCall *e_dbus_method_call_send(E_DBus_Connection *conn, DBusMessage *msg, E_DBus_Unmarshal_Func unmarshal_func, E_DBus_Callback_Func cb_func, E_DBus_Free_Func free_func, int timeout, void *data);
109
110
111 /* signal receiving */
112
113    EAPI E_DBus_Signal_Handler *e_dbus_signal_handler_add(E_DBus_Connection *conn, const char *sender, const char *path, const char *interface, const char *member, E_DBus_Signal_Cb cb_signal, void *data);
114    EAPI void e_dbus_signal_handler_del(E_DBus_Connection *conn, E_DBus_Signal_Handler *sh);
115
116 /* standard dbus method calls */
117
118    EAPI DBusPendingCall *e_dbus_request_name(E_DBus_Connection *conn, const char *name,
119                                              unsigned int flags,
120                                              E_DBus_Method_Return_Cb cb_return,
121                                              const void *data);
122    EAPI DBusPendingCall *e_dbus_release_name(E_DBus_Connection *conn, const char *name,
123                                              E_DBus_Method_Return_Cb cb_return,
124                                              const void *data);
125
126    EAPI DBusPendingCall *e_dbus_get_name_owner(E_DBus_Connection *conn, const char *name,
127                                                E_DBus_Method_Return_Cb cb_return,
128                                                const void *data);
129    EAPI DBusPendingCall *e_dbus_list_names(E_DBus_Connection *conn,
130                                            E_DBus_Method_Return_Cb cb_return,
131                                            const void *data);
132    EAPI DBusPendingCall *e_dbus_list_activatable_names(E_DBus_Connection *conn,
133                                                        E_DBus_Method_Return_Cb cb_return,
134                                                        const void *data);
135    EAPI DBusPendingCall *e_dbus_name_has_owner(E_DBus_Connection *conn, const char *name,
136                                                E_DBus_Method_Return_Cb cb_return,
137                                                const void *data);
138    EAPI DBusPendingCall *e_dbus_start_service_by_name(E_DBus_Connection *conn, const char *name, unsigned int flags,
139                                                       E_DBus_Method_Return_Cb cb_return,
140                                                       const void *data);
141
142 /* standard methods calls on objects */
143    EAPI DBusPendingCall *e_dbus_peer_ping(E_DBus_Connection *conn, const char *destination,
144                                           const char *path, E_DBus_Method_Return_Cb cb_return,
145                                           const void *data);
146    EAPI DBusPendingCall *e_dbus_peer_get_machine_id(E_DBus_Connection *conn,
147                                                     const char *destination, const char *path,
148                                                     E_DBus_Method_Return_Cb cb_return,
149                                                     const void *data);
150    EAPI DBusPendingCall *e_dbus_properties_get_all(E_DBus_Connection *conn, const char *destination,
151                                                    const char *path, const char *interface,
152                                                    E_DBus_Method_Return_Cb cb_return,
153                                                    const void *data);
154    EAPI DBusPendingCall *e_dbus_properties_get(E_DBus_Connection *conn, const char *destination,
155                                                const char *path, const char *interface,
156                                                const char *property,
157                                                E_DBus_Method_Return_Cb cb_return,
158                                                const void *data);
159    EAPI DBusPendingCall *e_dbus_properties_set(E_DBus_Connection *conn, const char *destination,
160                                                const char *path, const char *interface,
161                                                const char *property, int value_type,
162                                                const void *value, E_DBus_Method_Return_Cb cb_return,
163                                                const void *data);
164
165
166    EAPI E_DBus_Callback *e_dbus_callback_new(E_DBus_Callback_Func cb_func, E_DBus_Unmarshal_Func unmarshal_func, E_DBus_Free_Func free_func, void *user_data);
167
168    EAPI void e_dbus_callback_free(E_DBus_Callback *callback);
169    EAPI void e_dbus_callback_call(E_DBus_Callback *cb, void *data, DBusError *error);
170    EAPI void *e_dbus_callback_unmarshal(E_DBus_Callback *cb, DBusMessage *msg, DBusError *err);
171    EAPI void e_dbus_callback_return_free(E_DBus_Callback *callback, void *data);
172
173 #ifdef __cplusplus
174 }
175 #endif
176
177 #endif