Fix a potential leak.
[evas_quartz.git] / proto / ecore_dbus / Ecore_DBus.h
blobc1cbcb08bc55aa51bf054c03dad1bef093b821b5
1 /*
2 * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
3 */
4 #ifndef _ECORE_DBUS_H
5 #define _ECORE_DBUS_H
7 #include "Ecore_Data.h"
8 #include "Ecore_Con.h"
10 #ifdef EAPI
11 #undef EAPI
12 #endif
13 #ifdef _MSC_VER
14 # ifdef BUILDING_DLL
15 # define EAPI __declspec(dllexport)
16 # else
17 # define EAPI __declspec(dllimport)
18 # endif
19 #else
20 # ifdef __GNUC__
21 # if __GNUC__ >= 4
22 # define EAPI __attribute__ ((visibility("default")))
23 # else
24 # define EAPI
25 # endif
26 # else
27 # define EAPI
28 # endif
29 #endif
31 #define ECORE_DBUS_MAJOR_PROTOCOL_VERSION 0x1
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
37 typedef struct _Ecore_DBus_Server Ecore_DBus_Server;
38 typedef struct _Ecore_DBus_Event_Server_Add Ecore_DBus_Event_Server_Add;
39 typedef struct _Ecore_DBus_Event_Server_Del Ecore_DBus_Event_Server_Del;
40 typedef struct _Ecore_DBus_Event_Server_Data Ecore_DBus_Event_Server_Data;
41 typedef struct _Ecore_DBus_Event_Server_Data Ecore_DBus_Event_Signal;
42 typedef struct _Ecore_DBus_Event_Server_Data Ecore_DBus_Event_Method_Call;
43 typedef struct _Ecore_DBus_Event_Server_Data Ecore_DBus_Method_Return;
44 typedef struct _Ecore_DBus_Message Ecore_DBus_Message;
45 typedef struct _Ecore_DBus_Message_Arg Ecore_DBus_Message_Arg;
46 typedef struct _Ecore_DBus_Message_Field Ecore_DBus_Message_Field;
47 typedef struct _Ecore_DBus_Address Ecore_DBus_Address;
49 typedef void (*Ecore_DBus_Method_Call_Cb) (void *data, Ecore_DBus_Event_Method_Call *event);
51 typedef struct _Ecore_DBus_Object Ecore_DBus_Object;
52 typedef struct _Ecore_DBus_Object_Method Ecore_DBus_Object_Method;
53 typedef struct _Ecore_DBus_Object_Registry Ecore_DBus_Object_Registry;
55 struct _Ecore_DBus_Object
57 Ecore_DBus_Server *server;
58 char *path; /* dbus path name */
59 Ecore_List *methods;
62 struct _Ecore_DBus_Object_Method
64 Ecore_DBus_Object *object;
65 char *interface;
66 char *name;
68 Ecore_DBus_Method_Call_Cb func;
69 void *data;
71 struct _Ecore_DBus_Object_Registry
73 Ecore_Hash *objects;
77 typedef enum _Ecore_DBus_Message_Type
79 ECORE_DBUS_MESSAGE_TYPE_INVALID,
80 ECORE_DBUS_MESSAGE_TYPE_METHOD_CALL,
81 ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN,
82 ECORE_DBUS_MESSAGE_TYPE_ERROR,
83 ECORE_DBUS_MESSAGE_TYPE_SIGNAL
84 } Ecore_DBus_Message_Type;
86 typedef enum _Ecore_DBus_Message_Flag
88 ECORE_DBUS_MESSAGE_FLAG_NO_REPLY_EXPECTED,
89 ECORE_DBUS_MESSAGE_FLAG_NO_AUTO_START
90 } Ecore_DBus_Message_Flag;
92 typedef enum _Ecore_DBus_Data_Type
94 ECORE_DBUS_DATA_TYPE_INVALID = ((int) '\0'),
95 ECORE_DBUS_DATA_TYPE_BYTE = ((int) 'y'),
96 ECORE_DBUS_DATA_TYPE_BOOLEAN = ((int) 'b'), /* 0,1 */
97 ECORE_DBUS_DATA_TYPE_INT16 = ((int) 'n'),
98 ECORE_DBUS_DATA_TYPE_UINT16 = ((int) 'q'),
99 ECORE_DBUS_DATA_TYPE_INT32 = ((int) 'i'),
100 ECORE_DBUS_DATA_TYPE_UINT32 = ((int) 'u'),
101 ECORE_DBUS_DATA_TYPE_INT64 = ((int) 'x'),
102 ECORE_DBUS_DATA_TYPE_UINT64 = ((int) 't'),
103 ECORE_DBUS_DATA_TYPE_DOUBLE = ((int) 'd'),
104 ECORE_DBUS_DATA_TYPE_STRING = ((int) 's'),
105 ECORE_DBUS_DATA_TYPE_OBJECT_PATH = ((int) 'o'),
106 ECORE_DBUS_DATA_TYPE_SIGNATURE = ((int) 'g'),
107 ECORE_DBUS_DATA_TYPE_ARRAY = ((int) 'a'),
108 ECORE_DBUS_DATA_TYPE_VARIANT = ((int) 'v'),
109 ECORE_DBUS_DATA_TYPE_STRUCT = ((int) 'r'),
110 ECORE_DBUS_DATA_TYPE_STRUCT_BEGIN = ((int) '('),
111 ECORE_DBUS_DATA_TYPE_STRUCT_END = ((int) ')'),
112 ECORE_DBUS_DATA_TYPE_DICT_ENTRY = ((int) 'e'),
113 ECORE_DBUS_DATA_TYPE_DICT_ENTRY_BEGIN = ((int) '{'),
114 ECORE_DBUS_DATA_TYPE_DICT_ENTRY_END = ((int) '}'),
115 } Ecore_DBus_Data_Type;
117 struct _Ecore_DBus_Event_Server_Add
119 Ecore_DBus_Server *server;
122 struct _Ecore_DBus_Event_Server_Del
124 Ecore_DBus_Server *server;
127 struct _Ecore_DBus_Event_Server_Data
129 Ecore_DBus_Server *server;
130 Ecore_DBus_Message_Type type;
131 Ecore_DBus_Message *message;
132 struct {
133 const char *path;
134 const char *interface;
135 const char *member;
136 const char *error_name;
137 unsigned int reply_serial;
138 const char *destination;
139 const char *sender;
140 const char *signature;
141 } header;
142 Ecore_DBus_Message_Arg *args;
145 struct _Ecore_DBus_Message_Arg
147 Ecore_DBus_Data_Type type;
148 void *value;
151 typedef enum _Ecore_DBus_Message_Header_Field
153 ECORE_DBUS_HEADER_FIELD_INVALID,
154 ECORE_DBUS_HEADER_FIELD_PATH,
155 ECORE_DBUS_HEADER_FIELD_INTERFACE,
156 ECORE_DBUS_HEADER_FIELD_MEMBER,
157 ECORE_DBUS_HEADER_FIELD_ERROR_NAME,
158 ECORE_DBUS_HEADER_FIELD_REPLY_SERIAL,
159 ECORE_DBUS_HEADER_FIELD_DESTINATION,
160 ECORE_DBUS_HEADER_FIELD_SENDER,
161 ECORE_DBUS_HEADER_FIELD_SIGNATURE
162 } Ecore_DBus_Message_Header_Field;
165 struct _Ecore_DBus_Address
167 char *transport;
168 Ecore_List *keys;
169 Ecore_List *vals;
172 EAPI extern int ECORE_DBUS_EVENT_SERVER_ADD;
173 EAPI extern int ECORE_DBUS_EVENT_SERVER_DEL;
174 EAPI extern int ECORE_DBUS_EVENT_METHOD_CALL;
175 EAPI extern int ECORE_DBUS_EVENT_SIGNAL;
177 /* callback */
178 typedef void (*Ecore_DBus_Method_Return_Cb)(void *data, Ecore_DBus_Method_Return *reply);
179 typedef void (*Ecore_DBus_Error_Cb)(void *data, const char *error);
181 /* init */
182 EAPI int ecore_dbus_init(void);
183 EAPI int ecore_dbus_shutdown(void);
185 /* connection */
186 EAPI Ecore_DBus_Server *ecore_dbus_server_system_connect(const void *data);
187 EAPI Ecore_DBus_Server *ecore_dbus_server_session_connect(const void *data);
188 EAPI Ecore_DBus_Server *ecore_dbus_server_starter_connect(const void *data);
190 EAPI Ecore_DBus_Server *ecore_dbus_server_connect(Ecore_Con_Type type, const char *name, int port, const void *data);
193 EAPI void ecore_dbus_server_del(Ecore_DBus_Server *svr);
196 /* message */
197 EAPI int ecore_dbus_server_send(Ecore_DBus_Server *svr, const char *command, int length);
199 EAPI unsigned int ecore_dbus_message_new_method_call(Ecore_DBus_Server *svr,
200 const char *path, const char *interface,
201 const char *method, const char *destination,
202 Ecore_DBus_Method_Return_Cb method_cb,
203 Ecore_DBus_Error_Cb error_cb,
204 const void *data,
205 const char *signature, ...);
206 EAPI unsigned int ecore_dbus_message_new_method_return(Ecore_DBus_Server *svr,
207 int reply_serial, const char *destination,
208 const char *signature, ...);
209 EAPI unsigned int ecore_dbus_message_new_error(Ecore_DBus_Server *svr,
210 const char *error_name,
211 int reply_serial, const char *destination,
212 const char *error_message);
213 EAPI unsigned int ecore_dbus_message_new_signal(Ecore_DBus_Server *svr,
214 const char *path,
215 const char *interface, const char *signal_name,
216 const char *destination, const void *data,
217 const char *signature, ...);
219 EAPI void ecore_dbus_message_del(Ecore_DBus_Message *msg);
220 EAPI void ecore_dbus_message_print(Ecore_DBus_Message *msg);
221 EAPI void *ecore_dbus_message_header_field_get(Ecore_DBus_Message *msg, Ecore_DBus_Message_Header_Field field);
222 EAPI void *ecore_dbus_message_body_field_get(Ecore_DBus_Message *msg, unsigned int pos);
223 EAPI int ecore_dbus_message_serial_get(Ecore_DBus_Message *m);
225 /* methods */
226 EAPI int ecore_dbus_method_hello(Ecore_DBus_Server *svr, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data);
227 EAPI int ecore_dbus_method_list_names(Ecore_DBus_Server *svr, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data);
228 EAPI int ecore_dbus_method_name_has_owner(Ecore_DBus_Server *svr, char *name, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data);
229 EAPI int ecore_dbus_method_start_service_by_name(Ecore_DBus_Server *svr, char *name, unsigned int flags, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data);
230 EAPI int ecore_dbus_method_get_name_owner(Ecore_DBus_Server *svr, char *name, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data);
231 EAPI int ecore_dbus_method_get_connection_unix_user(Ecore_DBus_Server *svr, char *connection, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data);
232 EAPI int ecore_dbus_method_add_match(Ecore_DBus_Server *svr, char *match, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data);
233 EAPI int ecore_dbus_method_remove_match(Ecore_DBus_Server *svr, char *match, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data);
234 EAPI int ecore_dbus_method_request_name(Ecore_DBus_Server *svr, char *name, int flags, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data);
235 EAPI int ecore_dbus_method_release_name(Ecore_DBus_Server *svr, char *name, Ecore_DBus_Method_Return_Cb method_cb, Ecore_DBus_Error_Cb, void *data);
237 /* addresses */
238 EAPI Ecore_DBus_Address *ecore_dbus_address_new(void);
239 EAPI void ecore_dbus_address_free(Ecore_DBus_Address *address);
241 EAPI Ecore_List *ecore_dbus_address_parse(const char *address);
242 EAPI char *ecore_dbus_address_string(Ecore_DBus_Address *address);
244 EAPI const char *ecore_dbus_address_value_get(Ecore_DBus_Address *address, const char *key);
245 EAPI void ecore_dbus_print_address_list(Ecore_List *addresses);
246 EAPI Ecore_DBus_Server *ecore_dbus_address_list_connect(Ecore_List *addrs, const void *data);
247 EAPI Ecore_DBus_Server *ecore_dbus_address_connect(Ecore_DBus_Address *addr, const void *data);
249 /* object */
250 EAPI Ecore_DBus_Object *ecore_dbus_object_add(Ecore_DBus_Server *svr, const char *path);
251 EAPI void ecore_dbus_object_free(Ecore_DBus_Object *obj);
253 EAPI Ecore_DBus_Object_Method *ecore_dbus_object_method_add(Ecore_DBus_Object *obj, const char *interface, const char *method_name, Ecore_DBus_Method_Call_Cb func, void *data);
254 EAPI void ecore_dbus_object_method_remove(Ecore_DBus_Object *obj, Ecore_DBus_Object_Method *method);
255 EAPI void ecore_dbus_object_method_free(Ecore_DBus_Object_Method *method);
257 #ifdef __cplusplus
259 #endif
260 #endif