aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/ecore/src/lib/ecore_config/ecore_config_ipc_ecore.c
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/ecore/src/lib/ecore_config/ecore_config_ipc_ecore.c')
-rw-r--r--libraries/ecore/src/lib/ecore_config/ecore_config_ipc_ecore.c384
1 files changed, 0 insertions, 384 deletions
diff --git a/libraries/ecore/src/lib/ecore_config/ecore_config_ipc_ecore.c b/libraries/ecore/src/lib/ecore_config/ecore_config_ipc_ecore.c
deleted file mode 100644
index b1622f3..0000000
--- a/libraries/ecore/src/lib/ecore_config/ecore_config_ipc_ecore.c
+++ /dev/null
@@ -1,384 +0,0 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif
4
5/* by Azundris, with thanks to Corey Donohoe <atmos@atmos.org> */
6#include <stdio.h>
7#include <stdlib.h>
8#include <string.h>
9#include <errno.h>
10#include <limits.h>
11#include <sys/types.h>
12#include <sys/stat.h>
13#include <unistd.h>
14#include <ctype.h>
15
16#include <Ecore.h>
17#include "ecore_private.h"
18#include <Ecore_Ipc.h>
19
20#include "ecore_config_ipc.h"
21#include "ecore_config_util.h"
22#include "ecore_config_private.h"
23
24#include "Ecore_Config.h"
25
26
27/*****************************************************************************/
28
29static int
30_ecore_config_ipc_ecore_string_get(char **m, char **r)
31{
32 char *q;
33 int l = 0;
34
35 if (!m || !*m)
36 return ECORE_CONFIG_ERR_NODATA;
37 if (!r)
38 return ECORE_CONFIG_ERR_FAIL;
39 q = *m;
40 if (*q != 's')
41 return ECORE_CONFIG_ERR_TYPEMISMATCH;
42 q++;
43 l = (*(q++)) << 8;
44 l += *(q++);
45 *r = q;
46 q += l;
47 *m = q;
48 WRN("IPC/eCore: got string-%d \"%s\"", l, *r);
49 return ECORE_CONFIG_ERR_SUCC;
50}
51
52static char *
53_ecore_config_ipc_global_prop_list(Ecore_Config_Server * srv __UNUSED__, long serial __UNUSED__)
54{
55 Ecore_Config_DB_File *db;
56 char **keys;
57 int key_count, x;
58 estring *s;
59 int f;
60 char buf[PATH_MAX], *p;
61 // char *data; UNUSED
62 Ecore_Config_Type type;
63
64 db = NULL;
65 s = estring_new(8192);
66 f = 0;
67 if ((p = getenv("HOME")))
68 {
69 snprintf(buf, sizeof(buf), "%s/.e/config.eet", p);
70 if (!(db = _ecore_config_db_open_read(buf)))
71 {
72 strcpy(buf, PACKAGE_DATA_DIR"/system.eet");
73 if (!(db = _ecore_config_db_open_read(buf)))
74 return NULL;
75 }
76 }
77 if (!db) return NULL;
78 key_count = 0;
79 keys = _ecore_config_db_keys_get(db, &key_count);
80 if (keys)
81 {
82 for (x = 0; x < key_count; x++)
83 {
84 type = _ecore_config_db_key_type_get(db, keys[x]);
85 switch (type)
86 {
87 case ECORE_CONFIG_INT:
88 estring_appendf(s, "%s%s: integer", f ? "\n" : "", keys[x]);
89 break;
90 case ECORE_CONFIG_BLN:
91 estring_appendf(s, "%s%s: boolean", f ? "\n" : "", keys[x]);
92 break;
93 case ECORE_CONFIG_FLT:
94 estring_appendf(s, "%s%s: float", f ? "\n" : "", keys[x]);
95 break;
96 case ECORE_CONFIG_STR:
97 estring_appendf(s, "%s%s: string", f ? "\n" : "", keys[x]);
98 break;
99 case ECORE_CONFIG_RGB:
100 estring_appendf(s, "%s%s: colour", f ? "\n" : "", keys[x]);
101 break;
102 case ECORE_CONFIG_THM:
103 estring_appendf(s, "%s%s: theme", f ? "\n" : "", keys[x]);
104 break;
105 case ECORE_CONFIG_SCT:
106 estring_appendf(s, "%s%s: structure", f ? "\n" : "", keys[x]);
107 break;
108 default:
109 estring_appendf(s, "%s%s: unknown", f ? "\n" : "", keys[x]);
110 continue;
111 }
112 f = 1;
113 }
114 }
115 _ecore_config_db_close(db);
116 if (keys)
117 {
118 for (x = 0; x < key_count; x++)
119 {
120 free(keys[x]);
121 }
122 free(keys);
123 }
124
125 return estring_disown(s);
126}
127
128/*****************************************************************************/
129
130static int
131_ecore_config_ipc_ecore_send(Ecore_Ipc_Event_Client_Data * e, int code,
132 char *reply)
133{
134 static int our_ref = 0;
135 int len = reply ? strlen(reply) + 1 : 0;
136
137 our_ref++;
138 WRN("IPC/eCore: replying [0,0] %d IRT %d => %d {\"%s\":%d}", our_ref,
139 e->ref, code, reply ? reply : "", len);
140 return ecore_ipc_client_send(e->client, 0, 0, our_ref, e->ref, code, reply,
141 len);
142}
143
144/*****************************************************************************/
145
146static int
147_ecore_config_ipc_ecore_handle_request(Ecore_Ipc_Server * server,
148 Ecore_Ipc_Event_Client_Data * e)
149{
150 Ecore_Config_Server *srv;
151 long serial;
152 int ret;
153 char *r, *k, *v, *m;
154
155 srv = _ecore_config_server_convert(server);
156 serial = e->minor;
157 r = NULL;
158 m = (char *)e->data;
159 INF("IPC/eCore: client sent: [%d,%d] #%d (%d) @ %p", e->major, e->minor,
160 e->ref, e->size, server);
161
162 switch (e->major)
163 {
164 case IPC_PROP_LIST:
165 if (srv == __ecore_config_server_global)
166 r = _ecore_config_ipc_global_prop_list(srv, serial);
167 else
168 r = _ecore_config_ipc_prop_list(srv, serial);
169 break;
170 case IPC_PROP_DESC:
171 if (_ecore_config_ipc_ecore_string_get(&m, &k) == ECORE_CONFIG_ERR_SUCC)
172 r = _ecore_config_ipc_prop_desc(srv, serial, k);
173 break;
174 case IPC_PROP_GET:
175 if (_ecore_config_ipc_ecore_string_get(&m, &k) == ECORE_CONFIG_ERR_SUCC)
176 r = _ecore_config_ipc_prop_get(srv, serial, k);
177 break;
178 case IPC_PROP_SET:
179 if (_ecore_config_ipc_ecore_string_get(&m, &k) == ECORE_CONFIG_ERR_SUCC)
180 {
181 if (_ecore_config_ipc_ecore_string_get(&m, &v) ==
182 ECORE_CONFIG_ERR_SUCC)
183 return _ecore_config_ipc_ecore_send(e,
184 _ecore_config_ipc_prop_set
185 (srv, serial, k, v), NULL);
186 }
187 break;
188
189 case IPC_BUNDLE_LIST:
190 r = _ecore_config_ipc_bundle_list(srv);
191 break;
192 case IPC_BUNDLE_NEW:
193 if (_ecore_config_ipc_ecore_string_get(&m, &k) == ECORE_CONFIG_ERR_SUCC)
194 return _ecore_config_ipc_ecore_send(e,
195 k ?
196 _ecore_config_ipc_bundle_new(srv,
197 k) :
198 ECORE_CONFIG_ERR_FAIL, NULL);
199 break;
200 case IPC_BUNDLE_LABEL_SET:
201 if (_ecore_config_ipc_ecore_string_get(&m, &k) == ECORE_CONFIG_ERR_SUCC)
202 return _ecore_config_ipc_ecore_send(e,
203 k ?
204 _ecore_config_ipc_bundle_label_set
205 (srv, serial,
206 k) : ECORE_CONFIG_ERR_FAIL,
207 NULL);
208 break;
209 case IPC_BUNDLE_LABEL_FIND:
210 if (_ecore_config_ipc_ecore_string_get(&m, &k) == ECORE_CONFIG_ERR_SUCC)
211 return _ecore_config_ipc_ecore_send(e,
212 _ecore_config_ipc_bundle_label_find
213 (srv, k), NULL);
214 break;
215 case IPC_BUNDLE_LABEL_GET:
216 r = _ecore_config_ipc_bundle_label_get(srv, serial);
217 break;
218 }
219
220 ret =
221 _ecore_config_ipc_ecore_send(e,
222 r ? ECORE_CONFIG_ERR_SUCC :
223 ECORE_CONFIG_ERR_FAIL, r);
224 if (r)
225 {
226 free(r);
227 return ret;
228 }
229 return ECORE_CONFIG_ERR_NOTFOUND;
230}
231
232/*****************************************************************************/
233
234static Eina_Bool
235_ecore_config_ipc_client_add(void *data, int type __UNUSED__, void *event)
236{
237 Ecore_Ipc_Server **server;
238 Ecore_Ipc_Event_Client_Data *e;
239
240 server = (Ecore_Ipc_Server **) data;
241 e = (Ecore_Ipc_Event_Client_Data *) event;
242
243 if (*server != ecore_ipc_client_server_get(e->client))
244 return EINA_TRUE;
245
246 INF("IPC/eCore: Client connected. @ %p", server);
247 return EINA_TRUE;
248}
249
250static Eina_Bool
251_ecore_config_ipc_client_del(void *data, int type __UNUSED__, void *event)
252{
253 Ecore_Ipc_Server **server;
254 Ecore_Ipc_Event_Client_Data *e;
255
256 server = (Ecore_Ipc_Server **) data;
257 e = (Ecore_Ipc_Event_Client_Data *) event;
258
259 if (*server != ecore_ipc_client_server_get(e->client))
260 return EINA_TRUE;
261
262 INF("IPC/eCore: Client disconnected. @ %p", server);
263 return EINA_TRUE;
264}
265
266static Eina_Bool
267_ecore_config_ipc_client_sent(void *data, int type __UNUSED__, void *event)
268{
269 Ecore_Ipc_Server **server;
270 Ecore_Ipc_Event_Client_Data *e;
271
272 server = (Ecore_Ipc_Server **) data;
273 e = (Ecore_Ipc_Event_Client_Data *) event;
274
275 if (*server != ecore_ipc_client_server_get(e->client))
276 return EINA_TRUE;
277
278 _ecore_config_ipc_ecore_handle_request(*server, e);
279 return EINA_TRUE;
280}
281
282/*****************************************************************************/
283
284int
285_ecore_config_ipc_ecore_init(const char *pipe_name, void **data)
286{
287 Ecore_Ipc_Server **server;
288 struct stat st;
289 char *p;
290 int port;
291 char socket[PATH_MAX];
292
293 server = (Ecore_Ipc_Server **) data;
294 port = 0;
295 if (!server)
296 return ECORE_CONFIG_ERR_FAIL;
297
298/* if(*server)
299 return ECORE_CONFIG_ERR_IGNORED; */
300
301 ecore_init();
302 if (ecore_ipc_init() < 1)
303 return ECORE_CONFIG_ERR_FAIL;
304
305 if ((p = getenv("HOME")))
306 { /* debug-only ### FIXME */
307 int stale;
308
309 stale = 1;
310 while (stale)
311 {
312 snprintf(socket, PATH_MAX, "%s/.ecore/%s/%d", p, pipe_name, port);
313
314 if (!stat(socket, &st))
315 {
316 INF("IPC/eCore: pipe \"%s\" already exists!?", socket);
317/* if(unlink(buf))
318 E(0,"IPC/eCore: could not remove pipe \"%s\": %d\n",buf,errno); }}*/
319 port++;
320 }
321 else
322 {
323 stale = 0;
324 }
325 }
326 }
327 *server = ecore_ipc_server_add(ECORE_IPC_LOCAL_USER, pipe_name, port, NULL);
328 ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_ADD,
329 _ecore_config_ipc_client_add, server);
330 ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DEL,
331 _ecore_config_ipc_client_del, server);
332 ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DATA,
333 _ecore_config_ipc_client_sent, server);
334
335 if (*server)
336 {
337 INF("IPC/eCore: Server is listening on %s.", pipe_name);
338 }
339
340 return ECORE_CONFIG_ERR_SUCC;
341}
342
343int
344_ecore_config_ipc_ecore_exit(void **data)
345{
346 int ret;
347 Ecore_Ipc_Server **server;
348
349 ret = ECORE_CONFIG_ERR_SUCC;
350 server = (Ecore_Ipc_Server **) data;
351
352 if (!server)
353 return ECORE_CONFIG_ERR_FAIL;
354
355 if (*server)
356 {
357 ecore_ipc_server_del(*server);
358 *server = NULL;
359 }
360
361 ecore_ipc_shutdown();
362 ecore_shutdown();
363
364 return ret;
365}
366
367/*****************************************************************************/
368
369int
370_ecore_config_ipc_ecore_poll(void **data)
371{
372 Ecore_Ipc_Server **server;
373
374 server = (Ecore_Ipc_Server **) data;
375
376 if (!server)
377 return ECORE_CONFIG_ERR_FAIL;
378
379 ecore_main_loop_iterate();
380
381 return ECORE_CONFIG_ERR_SUCC;
382}
383
384/*****************************************************************************/