Tizen 2.1 release
[platform/core/uifw/e17.git] / src / bin / e_ipc_codec.c
1 #include "e.h"
2
3 #ifdef USE_IPC
4 /* local subsystem functions */
5
6 /* encode functions, Should these be global? */
7
8 /* local subsystem globals */
9 static Eet_Data_Descriptor *_e_ipc_int_edd = NULL;
10 static Eet_Data_Descriptor *_e_ipc_double_edd = NULL;
11 static Eet_Data_Descriptor *_e_ipc_2int_edd = NULL;
12 static Eet_Data_Descriptor *_e_ipc_str_edd = NULL;
13 static Eet_Data_Descriptor *_e_ipc_str_list_edd = NULL;
14 static Eet_Data_Descriptor *_e_ipc_2str_edd = NULL;
15 static Eet_Data_Descriptor *_e_ipc_2str_list_edd = NULL;
16 static Eet_Data_Descriptor *_e_ipc_str_int_edd = NULL;
17 static Eet_Data_Descriptor *_e_ipc_str_int_list_edd = NULL;
18 static Eet_Data_Descriptor *_e_ipc_2str_int_edd = NULL;
19 static Eet_Data_Descriptor *_e_ipc_2str_int_list_edd = NULL;
20 static Eet_Data_Descriptor *_e_ipc_4int_2str_edd = NULL;
21 static Eet_Data_Descriptor *_e_ipc_4int_2str_list_edd = NULL;
22 static Eet_Data_Descriptor *_e_ipc_5int_2str_edd = NULL;
23 static Eet_Data_Descriptor *_e_ipc_5int_2str_list_edd = NULL;
24 static Eet_Data_Descriptor *_e_ipc_3int_4str_edd = NULL;
25 static Eet_Data_Descriptor *_e_ipc_3int_4str_list_edd = NULL;
26 static Eet_Data_Descriptor *_e_ipc_3int_3str_edd = NULL;
27 static Eet_Data_Descriptor *_e_ipc_3int_3str_list_edd = NULL;
28 static Eet_Data_Descriptor *_e_ipc_str_4int_edd = NULL;
29 static Eet_Data_Descriptor *_e_ipc_str_4int_list_edd = NULL;
30
31 #define E_IPC_DD(Edd, Eddc, Name, Type)         \
32   Eddc.name = Name;                             \
33   Eddc.size = sizeof (Type);                    \
34   Edd = eet_data_descriptor_stream_new(&Eddc);
35
36 /* externally accessible functions */
37 EINTERN int
38 e_ipc_codec_init(void)
39 {
40    Eet_Data_Descriptor_Class eddc;
41
42    if (!eet_eina_stream_data_descriptor_class_set(&eddc, sizeof (eddc), "int", sizeof (E_Ipc_Int)))
43      return 0;
44    _e_ipc_int_edd = eet_data_descriptor_stream_new(&eddc);
45    E_CONFIG_VAL(_e_ipc_int_edd, E_Ipc_Int, val, INT);
46
47    E_IPC_DD(_e_ipc_double_edd, eddc, "double", E_Ipc_Double);
48    E_CONFIG_VAL(_e_ipc_double_edd, E_Ipc_Double, val, DOUBLE);
49
50    E_IPC_DD(_e_ipc_2int_edd, eddc, "2int", E_Ipc_2Int);
51    E_CONFIG_VAL(_e_ipc_2int_edd, E_Ipc_2Int, val1, INT);
52    E_CONFIG_VAL(_e_ipc_2int_edd, E_Ipc_2Int, val2, INT);
53
54    E_IPC_DD(_e_ipc_str_edd, eddc, "str", E_Ipc_Str);
55    E_CONFIG_VAL(_e_ipc_str_edd, E_Ipc_Str, str, STR);
56
57    E_IPC_DD(_e_ipc_str_list_edd, eddc, "str_list", E_Ipc_List);
58    E_CONFIG_LIST(_e_ipc_str_list_edd, E_Ipc_List, list, _e_ipc_str_edd);
59
60    E_IPC_DD(_e_ipc_2str_edd, eddc, "2str", E_Ipc_2Str);
61    E_CONFIG_VAL(_e_ipc_2str_edd, E_Ipc_2Str, str1, STR);
62    E_CONFIG_VAL(_e_ipc_2str_edd, E_Ipc_2Str, str2, STR);
63
64    E_IPC_DD(_e_ipc_2str_list_edd, eddc, "2str_list", E_Ipc_List);
65    E_CONFIG_LIST(_e_ipc_2str_list_edd, E_Ipc_List, list, _e_ipc_2str_edd);
66
67    E_IPC_DD(_e_ipc_str_int_edd, eddc, "str_int", E_Ipc_Str_Int);
68    E_CONFIG_VAL(_e_ipc_str_int_edd, E_Ipc_Str_Int, str, STR);
69    E_CONFIG_VAL(_e_ipc_str_int_edd, E_Ipc_Str_Int, val, INT);
70
71    E_IPC_DD(_e_ipc_str_int_list_edd, eddc, "str_int_list", E_Ipc_List);
72    E_CONFIG_LIST(_e_ipc_str_int_list_edd, E_Ipc_List, list, _e_ipc_str_int_edd);
73
74    E_IPC_DD(_e_ipc_2str_int_edd, eddc, "2str_int", E_Ipc_2Str_Int);
75    E_CONFIG_VAL(_e_ipc_2str_int_edd, E_Ipc_2Str_Int, str1, STR);
76    E_CONFIG_VAL(_e_ipc_2str_int_edd, E_Ipc_2Str_Int, str2, STR);
77    E_CONFIG_VAL(_e_ipc_2str_int_edd, E_Ipc_2Str_Int, val, INT);
78
79    E_IPC_DD(_e_ipc_2str_int_list_edd, eddc, "2str_int_list", E_Ipc_List);
80    E_CONFIG_LIST(_e_ipc_2str_int_list_edd, E_Ipc_List, list, _e_ipc_2str_int_edd);
81
82    E_IPC_DD(_e_ipc_4int_2str_edd, eddc, "4int_2str", E_Ipc_4Int_2Str);
83    E_CONFIG_VAL(_e_ipc_4int_2str_edd, E_Ipc_4Int_2Str, val1, INT);
84    E_CONFIG_VAL(_e_ipc_4int_2str_edd, E_Ipc_4Int_2Str, val2, INT);
85    E_CONFIG_VAL(_e_ipc_4int_2str_edd, E_Ipc_4Int_2Str, val3, INT);
86    E_CONFIG_VAL(_e_ipc_4int_2str_edd, E_Ipc_4Int_2Str, val4, INT);
87    E_CONFIG_VAL(_e_ipc_4int_2str_edd, E_Ipc_4Int_2Str, str1, STR);
88    E_CONFIG_VAL(_e_ipc_4int_2str_edd, E_Ipc_4Int_2Str, str2, STR);
89
90    E_IPC_DD(_e_ipc_4int_2str_list_edd, eddc, "4int_2str_list", E_Ipc_List);
91    E_CONFIG_LIST(_e_ipc_4int_2str_list_edd, E_Ipc_List, list, _e_ipc_4int_2str_edd);
92
93    E_IPC_DD(_e_ipc_5int_2str_edd, eddc, "5int_2str", E_Ipc_5Int_2Str);
94    E_CONFIG_VAL(_e_ipc_5int_2str_edd, E_Ipc_5Int_2Str, val1, INT);
95    E_CONFIG_VAL(_e_ipc_5int_2str_edd, E_Ipc_5Int_2Str, val2, INT);
96    E_CONFIG_VAL(_e_ipc_5int_2str_edd, E_Ipc_5Int_2Str, val3, INT);
97    E_CONFIG_VAL(_e_ipc_5int_2str_edd, E_Ipc_5Int_2Str, val4, INT);
98    E_CONFIG_VAL(_e_ipc_5int_2str_edd, E_Ipc_5Int_2Str, val5, INT);
99    E_CONFIG_VAL(_e_ipc_5int_2str_edd, E_Ipc_5Int_2Str, str1, STR);
100    E_CONFIG_VAL(_e_ipc_5int_2str_edd, E_Ipc_5Int_2Str, str2, STR);
101
102    E_IPC_DD(_e_ipc_5int_2str_list_edd, eddc, "5int_2str_list", E_Ipc_List);
103    E_CONFIG_LIST(_e_ipc_5int_2str_list_edd, E_Ipc_List, list, _e_ipc_5int_2str_edd);
104
105    E_IPC_DD(_e_ipc_3int_4str_edd, eddc, "3int_4str", E_Ipc_3Int_4Str);
106    E_CONFIG_VAL(_e_ipc_3int_4str_edd, E_Ipc_3Int_4Str, val1, INT);
107    E_CONFIG_VAL(_e_ipc_3int_4str_edd, E_Ipc_3Int_4Str, val2, INT);
108    E_CONFIG_VAL(_e_ipc_3int_4str_edd, E_Ipc_3Int_4Str, val3, INT);
109    E_CONFIG_VAL(_e_ipc_3int_4str_edd, E_Ipc_3Int_4Str, str1, STR);
110    E_CONFIG_VAL(_e_ipc_3int_4str_edd, E_Ipc_3Int_4Str, str2, STR);
111    E_CONFIG_VAL(_e_ipc_3int_4str_edd, E_Ipc_3Int_4Str, str3, STR);
112    E_CONFIG_VAL(_e_ipc_3int_4str_edd, E_Ipc_3Int_4Str, str4, STR);
113
114    E_IPC_DD(_e_ipc_3int_4str_list_edd, eddc, "3int_4str_list", E_Ipc_List);
115    E_CONFIG_LIST(_e_ipc_3int_4str_list_edd, E_Ipc_List, list, _e_ipc_3int_4str_edd);
116
117    E_IPC_DD(_e_ipc_3int_3str_edd, eddc, "3int_3str", E_Ipc_3Int_3Str);
118    E_CONFIG_VAL(_e_ipc_3int_3str_edd, E_Ipc_3Int_3Str, val1, INT);
119    E_CONFIG_VAL(_e_ipc_3int_3str_edd, E_Ipc_3Int_3Str, val2, INT);
120    E_CONFIG_VAL(_e_ipc_3int_3str_edd, E_Ipc_3Int_3Str, val3, INT);
121    E_CONFIG_VAL(_e_ipc_3int_3str_edd, E_Ipc_3Int_3Str, str1, STR);
122    E_CONFIG_VAL(_e_ipc_3int_3str_edd, E_Ipc_3Int_3Str, str2, STR);
123    E_CONFIG_VAL(_e_ipc_3int_3str_edd, E_Ipc_3Int_3Str, str3, STR);
124
125    E_IPC_DD(_e_ipc_3int_3str_list_edd, eddc, "3int_3str_list", E_Ipc_List);
126    E_CONFIG_LIST(_e_ipc_3int_3str_list_edd, E_Ipc_List, list, _e_ipc_3int_3str_edd);
127
128    E_IPC_DD(_e_ipc_str_4int_edd, eddc, "str_4int", E_Ipc_Str_4Int);
129    E_CONFIG_VAL(_e_ipc_str_4int_edd, E_Ipc_Str_4Int, str, STR);
130    E_CONFIG_VAL(_e_ipc_str_4int_edd, E_Ipc_Str_4Int, val1, INT);
131    E_CONFIG_VAL(_e_ipc_str_4int_edd, E_Ipc_Str_4Int, val2, INT);
132    E_CONFIG_VAL(_e_ipc_str_4int_edd, E_Ipc_Str_4Int, val3, INT);
133    E_CONFIG_VAL(_e_ipc_str_4int_edd, E_Ipc_Str_4Int, val4, INT);
134
135    E_IPC_DD(_e_ipc_str_4int_list_edd, eddc, "str_4int_list", E_Ipc_List);
136    E_CONFIG_LIST(_e_ipc_str_4int_list_edd, E_Ipc_List, list, _e_ipc_str_4int_edd);
137
138    return 1;
139 }
140
141 EINTERN void
142 e_ipc_codec_shutdown(void)
143 {
144    E_CONFIG_DD_FREE(_e_ipc_int_edd);
145    E_CONFIG_DD_FREE(_e_ipc_double_edd);
146    E_CONFIG_DD_FREE(_e_ipc_2int_edd);
147    E_CONFIG_DD_FREE(_e_ipc_str_edd);
148    E_CONFIG_DD_FREE(_e_ipc_str_list_edd);
149    E_CONFIG_DD_FREE(_e_ipc_2str_edd);
150    E_CONFIG_DD_FREE(_e_ipc_2str_list_edd);
151    E_CONFIG_DD_FREE(_e_ipc_str_int_edd);
152    E_CONFIG_DD_FREE(_e_ipc_str_int_list_edd);
153    E_CONFIG_DD_FREE(_e_ipc_2str_int_edd);
154    E_CONFIG_DD_FREE(_e_ipc_2str_int_list_edd);
155    E_CONFIG_DD_FREE(_e_ipc_4int_2str_edd);
156    E_CONFIG_DD_FREE(_e_ipc_4int_2str_list_edd);
157    E_CONFIG_DD_FREE(_e_ipc_5int_2str_edd);
158    E_CONFIG_DD_FREE(_e_ipc_5int_2str_list_edd);
159    E_CONFIG_DD_FREE(_e_ipc_3int_4str_edd);
160    E_CONFIG_DD_FREE(_e_ipc_3int_4str_list_edd);
161    E_CONFIG_DD_FREE(_e_ipc_3int_3str_edd);
162    E_CONFIG_DD_FREE(_e_ipc_3int_3str_list_edd);
163    E_CONFIG_DD_FREE(_e_ipc_str_4int_edd);
164    E_CONFIG_DD_FREE(_e_ipc_str_4int_list_edd);
165 }
166
167 EAPI int
168 e_ipc_codec_int_dec(char *data, int bytes, int *dest)
169 {
170    E_Ipc_Int *dat;
171
172    if (!data) return 0;
173    dat = eet_data_descriptor_decode(_e_ipc_int_edd, data, bytes);
174    if (!dat) return 0;
175    if (dest) *dest = dat->val;
176    free(dat);
177    return 1;
178 }
179
180 EAPI void *
181 e_ipc_codec_int_enc(int val, int *size_ret)
182 {
183    E_Ipc_Int dat;
184
185    dat.val = val;
186    return eet_data_descriptor_encode(_e_ipc_int_edd, &dat, size_ret);
187 }
188
189 EAPI int
190 e_ipc_codec_double_dec(char *data, int bytes, double *dest)
191 {
192    E_Ipc_Double *dat;
193
194    if (!data) return 0;
195    dat = eet_data_descriptor_decode(_e_ipc_double_edd, data, bytes);
196    if (!dat) return 0;
197    if (dest) *dest = dat->val;
198    free(dat);
199    return 1;
200 }
201
202 EAPI void *
203 e_ipc_codec_double_enc(double val, int *size_ret)
204 {
205    E_Ipc_Double dat;
206
207    dat.val = val;
208    return eet_data_descriptor_encode(_e_ipc_double_edd, &dat, size_ret);
209 }
210
211 EAPI int
212 e_ipc_codec_2int_dec(char *data, int bytes, int *dest, int *dest2)
213 {
214    E_Ipc_2Int *dat;
215
216    if (!data) return 0;
217    dat = eet_data_descriptor_decode(_e_ipc_2int_edd, data, bytes);
218    if (!dat) return 0;
219    if (dest) *dest = dat->val1;
220    if (dest2) *dest2 = dat->val2;
221    free(dat);
222    return 1;
223 }
224
225 EAPI void *
226 e_ipc_codec_2int_enc(int val1, int val2, int *size_ret)
227 {
228    E_Ipc_2Int dat;
229
230    dat.val1 = val1;
231    dat.val2 = val2;
232    return eet_data_descriptor_encode(_e_ipc_2int_edd, &dat, size_ret);
233 }
234
235 EAPI int
236 e_ipc_codec_str_dec(char *data, int bytes, char **dest)
237 {
238    E_Ipc_Str *dat;
239
240    if (!data) return 0;
241    dat = eet_data_descriptor_decode(_e_ipc_str_edd, data, bytes);
242    if (!dat) return 0;
243    if (dest) *dest = dat->str;
244    free(dat);
245    return 1;
246 }
247
248 EAPI void *
249 e_ipc_codec_str_enc(const char *str, int *size_ret)
250 {
251    E_Ipc_Str dat;
252
253    dat.str = (char *) str;
254    return eet_data_descriptor_encode(_e_ipc_str_edd, &dat, size_ret);
255 }
256
257 EAPI int
258 e_ipc_codec_2str_dec(char *data, int bytes, E_Ipc_2Str **dest)
259 {
260    E_Ipc_2Str *dat;
261
262    if (!data) return 0;
263    dat = eet_data_descriptor_decode(_e_ipc_2str_edd, data, bytes);
264    if (!dat) return 0;
265    if (dest) *dest = dat;
266    return 1;
267 }
268
269 EAPI void *
270 e_ipc_codec_2str_enc(const char *str1, const char *str2, int *size_ret)
271 {
272    E_Ipc_2Str dat;
273
274    dat.str1 = (char *) str1;
275    dat.str2 = (char *) str2;
276    return eet_data_descriptor_encode(_e_ipc_2str_edd, &dat, size_ret);
277 }
278
279 EAPI int
280 e_ipc_codec_2str_list_dec(char *data, int bytes, Eina_List **dest)
281 {
282    E_Ipc_List *dat;
283
284    if (!data) return 0;
285    dat = eet_data_descriptor_decode(_e_ipc_2str_list_edd, data, bytes);
286    if (!dat) return 0;
287    if (dest) *dest = dat->list;
288    free(dat);
289    return 1;
290 }
291
292 EAPI void *
293 e_ipc_codec_2str_list_enc(Eina_List *list, int *size_ret)
294 {
295    E_Ipc_List dat;
296    dat.list = list;
297    return eet_data_descriptor_encode(_e_ipc_2str_list_edd, &dat, size_ret);
298 }
299
300 EAPI int
301 e_ipc_codec_str_list_dec(char *data, int bytes, Eina_List **dest)
302 {
303    E_Ipc_List *dat;
304    Eina_List *list = NULL, *l;
305    E_Ipc_Str *str_node;
306
307    if (!data) return 0;
308    dat = eet_data_descriptor_decode(_e_ipc_str_list_edd, data, bytes);
309    if (!dat) return 0;
310    EINA_LIST_FOREACH(dat->list, l, str_node)
311      {
312         list = eina_list_append(list, str_node->str);
313      }
314    if (dest) *dest = list;
315    E_FREE_LIST(dat->list, free);
316    free(dat);
317    return 1;
318 }
319
320 EAPI void *
321 e_ipc_codec_str_list_enc(Eina_List *list, int *size_ret)
322 {
323    E_Ipc_List dat;
324    Eina_List *l;
325    E_Ipc_Str *str_node;
326    char *str;
327    void *data;
328
329    dat.list = NULL;
330    EINA_LIST_FOREACH(list, l, str)
331      {
332         str_node = malloc(sizeof(E_Ipc_Str));
333         str_node->str = str;
334         dat.list = eina_list_append(dat.list, str_node);
335      }
336    data = eet_data_descriptor_encode(_e_ipc_str_list_edd, &dat, size_ret);
337    E_FREE_LIST(dat.list, free);
338    return data;
339 }
340
341 EAPI int
342 e_ipc_codec_str_int_dec(char *data, int bytes, E_Ipc_Str_Int **dest)
343 {
344    E_Ipc_Str_Int *dat;
345
346    if (!data) return 0;
347    dat = eet_data_descriptor_decode(_e_ipc_str_int_edd, data, bytes);
348    if (!dat) return 0;
349    if (dest) *dest = dat;
350    return 1;
351 }
352
353 EAPI void *
354 e_ipc_codec_str_int_enc(const char *str, int val, int *size_ret)
355 {
356    E_Ipc_Str_Int dat;
357
358    dat.str = (char *) str;
359    dat.val = val;
360    return eet_data_descriptor_encode(_e_ipc_str_int_edd, &dat, size_ret);
361 }
362
363 EAPI int
364 e_ipc_codec_str_int_list_dec(char *data, int bytes, Eina_List **dest)
365 {
366    E_Ipc_List *dat;
367
368    if (!data) return 0;
369    dat = eet_data_descriptor_decode(_e_ipc_str_int_list_edd, data, bytes);
370    if (!dat) return 0;
371    if (dest) *dest = dat->list;
372    free(dat);
373    return 1;
374 }
375
376 EAPI void *
377 e_ipc_codec_str_int_list_enc(Eina_List *list, int *size_ret)
378 {
379    E_Ipc_List dat;
380    dat.list = list;
381    return eet_data_descriptor_encode(_e_ipc_str_int_list_edd, &dat, size_ret);
382 }
383
384 EAPI int
385 e_ipc_codec_2str_int_dec(char *data, int bytes, E_Ipc_2Str_Int **dest)
386 {
387    E_Ipc_2Str_Int *dat;
388
389    if (!data) return 0;
390    dat = eet_data_descriptor_decode(_e_ipc_2str_int_edd, data, bytes);
391    if (!dat) return 0;
392    if (dest) *dest = dat;
393    return 1;
394 }
395
396 EAPI void *
397 e_ipc_codec_2str_int_enc(const char *str1, const char *str2, int val, int *size_ret)
398 {
399    E_Ipc_2Str_Int dat;
400
401    dat.str1 = (char *) str1;
402    dat.str2 = (char *) str2;
403    dat.val = val;
404    return eet_data_descriptor_encode(_e_ipc_2str_int_edd, &dat, size_ret);
405 }
406
407 EAPI int
408 e_ipc_codec_2str_int_list_dec(char *data, int bytes, Eina_List **dest)
409 {
410    E_Ipc_List *dat;
411
412    if (!data) return 0;
413    dat = eet_data_descriptor_decode(_e_ipc_2str_int_list_edd, data, bytes);
414    if (!dat) return 0;
415    if (dest) *dest = dat->list;
416    free(dat);
417    return 1;
418 }
419
420 EAPI void *
421 e_ipc_codec_2str_int_list_enc(Eina_List *list, int *size_ret)
422 {
423    E_Ipc_List dat;
424    dat.list = list;
425    return eet_data_descriptor_encode(_e_ipc_2str_int_list_edd, &dat, size_ret);
426 }
427
428 EAPI int
429 e_ipc_codec_4int_2str_dec(char *data, int bytes, E_Ipc_4Int_2Str **dest)
430 {
431    E_Ipc_4Int_2Str *dat;
432
433    if (!data) return 0;
434    dat = eet_data_descriptor_decode(_e_ipc_4int_2str_edd, data, bytes);
435    if (!dat) return 0;
436    if (dest) *dest = dat;
437    return 1;
438 }
439
440 EAPI void *
441 e_ipc_codec_4int_2str_enc(int val1, int val2, int val3, int val4, const char *str1, const char *str2, int *size_ret)
442 {
443    E_Ipc_4Int_2Str dat;
444
445    dat.val1 = val1;
446    dat.val2 = val2;
447    dat.val3 = val3;
448    dat.val4 = val4;
449    dat.str1 = (char *) str1;
450    dat.str2 = (char *) str2;
451    return eet_data_descriptor_encode(_e_ipc_4int_2str_edd, &dat, size_ret);
452 }
453
454 EAPI int
455 e_ipc_codec_4int_2str_list_dec(char *data, int bytes, Eina_List **dest)
456 {
457    E_Ipc_List *dat;
458
459    if (!data) return 0;
460    dat = eet_data_descriptor_decode(_e_ipc_4int_2str_list_edd, data, bytes);
461    if (!dat) return 0;
462    if (dest) *dest = dat->list;
463    free(dat);
464    return 1;
465 }
466
467 EAPI void *
468 e_ipc_codec_4int_2str_list_enc(Eina_List *list, int *size_ret)
469 {
470    E_Ipc_List dat;
471    dat.list = list;
472    return eet_data_descriptor_encode(_e_ipc_4int_2str_list_edd, &dat, size_ret);
473 }
474
475 EAPI int
476 e_ipc_codec_5int_2str_dec(char *data, int bytes, E_Ipc_5Int_2Str **dest)
477 {
478    E_Ipc_5Int_2Str *dat;
479
480    if (!data) return 0;
481    dat = eet_data_descriptor_decode(_e_ipc_5int_2str_edd, data, bytes);
482    if (!dat) return 0;
483    if (dest) *dest = dat;
484    return 1;
485 }
486
487 EAPI void *
488 e_ipc_codec_5int_2str_enc(int val1, int val2, int val3, int val4, int val5, const char *str1, const char *str2, int *size_ret)
489 {
490    E_Ipc_5Int_2Str dat;
491
492    dat.val1 = val1;
493    dat.val2 = val2;
494    dat.val3 = val3;
495    dat.val4 = val4;
496    dat.val5 = val5;
497    dat.str1 = (char *) str1;
498    dat.str2 = (char *) str2;
499    return eet_data_descriptor_encode(_e_ipc_5int_2str_edd, &dat, size_ret);
500 }
501
502 EAPI int
503 e_ipc_codec_5int_2str_list_dec(char *data, int bytes, Eina_List **dest)
504 {
505    E_Ipc_List *dat;
506
507    if (!data) return 0;
508    dat = eet_data_descriptor_decode(_e_ipc_5int_2str_list_edd, data, bytes);
509    if (!dat) return 0;
510    if (dest) *dest = dat->list;
511    free(dat);
512    return 1;
513 }
514
515 EAPI void *
516 e_ipc_codec_5int_2str_list_enc(Eina_List *list, int *size_ret)
517 {
518    E_Ipc_List dat;
519    dat.list = list;
520    return eet_data_descriptor_encode(_e_ipc_5int_2str_list_edd, &dat, size_ret);
521 }
522
523 EAPI int
524 e_ipc_codec_3int_4str_dec(char *data, int bytes, E_Ipc_3Int_4Str **dest)
525 {
526    E_Ipc_3Int_4Str *dat;
527
528    if (!data) return 0;
529    dat = eet_data_descriptor_decode(_e_ipc_3int_4str_edd, data, bytes);
530    if (!dat) return 0;
531    if (dest) *dest = dat;
532    return 1;
533 }
534
535 EAPI void *
536 e_ipc_codec_3int_4str_enc(int val1, int val2, int val3, const char *str1, const char *str2, const char *str3, const char *str4, int *size_ret)
537 {
538    E_Ipc_3Int_4Str dat;
539
540    dat.val1 = val1;
541    dat.val2 = val2;
542    dat.val3 = val3;
543    dat.str1 = (char *) str1;
544    dat.str2 = (char *) str2;
545    dat.str3 = (char *) str3;
546    dat.str4 = (char *) str4;
547    return eet_data_descriptor_encode(_e_ipc_3int_4str_edd, &dat, size_ret);
548 }
549
550 EAPI int
551 e_ipc_codec_3int_4str_list_dec(char *data, int bytes, Eina_List **dest)
552 {
553    E_Ipc_List *dat;
554
555    if (!data) return 0;
556    dat = eet_data_descriptor_decode(_e_ipc_3int_4str_list_edd, data, bytes);
557    if (!dat) return 0;
558    if (dest) *dest = dat->list;
559    free(dat);
560    return 1;
561 }
562
563 EAPI void *
564 e_ipc_codec_3int_4str_list_enc(Eina_List *list, int *size_ret)
565 {
566    E_Ipc_List dat;
567    dat.list = list;
568    return eet_data_descriptor_encode(_e_ipc_3int_4str_list_edd, &dat, size_ret);
569 }
570
571 EAPI int
572 e_ipc_codec_3int_3str_dec(char *data, int bytes, E_Ipc_3Int_3Str **dest)
573 {
574    E_Ipc_3Int_3Str *dat;
575
576    if (!data) return 0;
577    dat = eet_data_descriptor_decode(_e_ipc_3int_3str_edd, data, bytes);
578    if (!dat) return 0;
579    if (dest) *dest = dat;
580    return 1;
581 }
582
583 EAPI void *
584 e_ipc_codec_3int_3str_enc(int val1, int val2, int val3, const char *str1, const char *str2, const char *str3, int *size_ret)
585 {
586    E_Ipc_3Int_3Str dat;
587
588    dat.val1 = val1;
589    dat.val2 = val2;
590    dat.val3 = val3;
591    dat.str1 = (char *) str1;
592    dat.str2 = (char *) str2;
593    dat.str3 = (char *) str3;
594    return eet_data_descriptor_encode(_e_ipc_3int_3str_edd, &dat, size_ret);
595 }
596
597 EAPI int
598 e_ipc_codec_3int_3str_list_dec(char *data, int bytes, Eina_List **dest)
599 {
600    E_Ipc_List *dat;
601
602    if (!data) return 0;
603    dat = eet_data_descriptor_decode(_e_ipc_3int_3str_list_edd, data, bytes);
604    if (!dat) return 0;
605    if (dest) *dest = dat->list;
606    free(dat);
607    return 1;
608 }
609
610 EAPI void *
611 e_ipc_codec_3int_3str_list_enc(Eina_List *list, int *size_ret)
612 {
613    E_Ipc_List dat;
614    dat.list = list;
615    return eet_data_descriptor_encode(_e_ipc_3int_3str_list_edd, &dat, size_ret);
616 }
617
618 EAPI int
619 e_ipc_codec_str_4int_dec(char *data, int bytes, E_Ipc_Str_4Int **dest)
620 {
621   E_Ipc_Str_4Int *dat;
622
623   if (!data) return 0;
624   dat = eet_data_descriptor_decode(_e_ipc_str_4int_edd, data, bytes);
625   if (!dat) return 0;
626   if (dest) *dest = dat;
627   return 1;
628 }
629
630 EAPI void *
631 e_ipc_codec_str_4int_enc(const char *str1, int val1, int val2, int val3, int val4, int *size_ret)
632 {
633   E_Ipc_Str_4Int dat;
634
635   dat.str = (char *) str1;
636   dat.val1 = val1;
637   dat.val2 = val2;
638   dat.val3 = val3;
639   dat.val4 = val4;
640
641   return eet_data_descriptor_encode(_e_ipc_str_4int_edd, &dat, size_ret);
642 }
643
644 EAPI int
645 e_ipc_codec_str_4int_list_dec(char *data, int bytes, Eina_List **dest)
646 {
647    E_Ipc_List *dat;
648
649    if (!data) return 0;
650    dat = eet_data_descriptor_decode(_e_ipc_str_4int_list_edd, data, bytes);
651    if (!dat) return 0;
652    if (dest) *dest = dat->list;
653    free(dat);
654    return 1;
655 }
656
657 EAPI void *
658 e_ipc_codec_str_4int_list_enc(Eina_List *list, int *size_ret)
659 {
660    E_Ipc_List dat;
661    dat.list = list;
662    return eet_data_descriptor_encode(_e_ipc_str_4int_list_edd, &dat, size_ret);
663 }
664
665 /* local subsystem globals */
666
667 #endif