4 /* local subsystem functions */
6 /* encode functions, Should these be global? */
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;
31 #define E_IPC_DD(Edd, Eddc, Name, Type) \
33 Eddc.size = sizeof (Type); \
34 Edd = eet_data_descriptor_stream_new(&Eddc);
36 /* externally accessible functions */
38 e_ipc_codec_init(void)
40 Eet_Data_Descriptor_Class eddc;
42 if (!eet_eina_stream_data_descriptor_class_set(&eddc, sizeof (eddc), "int", sizeof (E_Ipc_Int)))
44 _e_ipc_int_edd = eet_data_descriptor_stream_new(&eddc);
45 E_CONFIG_VAL(_e_ipc_int_edd, E_Ipc_Int, val, INT);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
142 e_ipc_codec_shutdown(void)
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);
168 e_ipc_codec_int_dec(char *data, int bytes, int *dest)
173 dat = eet_data_descriptor_decode(_e_ipc_int_edd, data, bytes);
175 if (dest) *dest = dat->val;
181 e_ipc_codec_int_enc(int val, int *size_ret)
186 return eet_data_descriptor_encode(_e_ipc_int_edd, &dat, size_ret);
190 e_ipc_codec_double_dec(char *data, int bytes, double *dest)
195 dat = eet_data_descriptor_decode(_e_ipc_double_edd, data, bytes);
197 if (dest) *dest = dat->val;
203 e_ipc_codec_double_enc(double val, int *size_ret)
208 return eet_data_descriptor_encode(_e_ipc_double_edd, &dat, size_ret);
212 e_ipc_codec_2int_dec(char *data, int bytes, int *dest, int *dest2)
217 dat = eet_data_descriptor_decode(_e_ipc_2int_edd, data, bytes);
219 if (dest) *dest = dat->val1;
220 if (dest2) *dest2 = dat->val2;
226 e_ipc_codec_2int_enc(int val1, int val2, int *size_ret)
232 return eet_data_descriptor_encode(_e_ipc_2int_edd, &dat, size_ret);
236 e_ipc_codec_str_dec(char *data, int bytes, char **dest)
241 dat = eet_data_descriptor_decode(_e_ipc_str_edd, data, bytes);
243 if (dest) *dest = dat->str;
249 e_ipc_codec_str_enc(const char *str, int *size_ret)
253 dat.str = (char *) str;
254 return eet_data_descriptor_encode(_e_ipc_str_edd, &dat, size_ret);
258 e_ipc_codec_2str_dec(char *data, int bytes, E_Ipc_2Str **dest)
263 dat = eet_data_descriptor_decode(_e_ipc_2str_edd, data, bytes);
265 if (dest) *dest = dat;
270 e_ipc_codec_2str_enc(const char *str1, const char *str2, int *size_ret)
274 dat.str1 = (char *) str1;
275 dat.str2 = (char *) str2;
276 return eet_data_descriptor_encode(_e_ipc_2str_edd, &dat, size_ret);
280 e_ipc_codec_2str_list_dec(char *data, int bytes, Eina_List **dest)
285 dat = eet_data_descriptor_decode(_e_ipc_2str_list_edd, data, bytes);
287 if (dest) *dest = dat->list;
293 e_ipc_codec_2str_list_enc(Eina_List *list, int *size_ret)
297 return eet_data_descriptor_encode(_e_ipc_2str_list_edd, &dat, size_ret);
301 e_ipc_codec_str_list_dec(char *data, int bytes, Eina_List **dest)
304 Eina_List *list = NULL, *l;
308 dat = eet_data_descriptor_decode(_e_ipc_str_list_edd, data, bytes);
310 EINA_LIST_FOREACH(dat->list, l, str_node)
312 list = eina_list_append(list, str_node->str);
314 if (dest) *dest = list;
315 E_FREE_LIST(dat->list, free);
321 e_ipc_codec_str_list_enc(Eina_List *list, int *size_ret)
330 EINA_LIST_FOREACH(list, l, str)
332 str_node = malloc(sizeof(E_Ipc_Str));
334 dat.list = eina_list_append(dat.list, str_node);
336 data = eet_data_descriptor_encode(_e_ipc_str_list_edd, &dat, size_ret);
337 E_FREE_LIST(dat.list, free);
342 e_ipc_codec_str_int_dec(char *data, int bytes, E_Ipc_Str_Int **dest)
347 dat = eet_data_descriptor_decode(_e_ipc_str_int_edd, data, bytes);
349 if (dest) *dest = dat;
354 e_ipc_codec_str_int_enc(const char *str, int val, int *size_ret)
358 dat.str = (char *) str;
360 return eet_data_descriptor_encode(_e_ipc_str_int_edd, &dat, size_ret);
364 e_ipc_codec_str_int_list_dec(char *data, int bytes, Eina_List **dest)
369 dat = eet_data_descriptor_decode(_e_ipc_str_int_list_edd, data, bytes);
371 if (dest) *dest = dat->list;
377 e_ipc_codec_str_int_list_enc(Eina_List *list, int *size_ret)
381 return eet_data_descriptor_encode(_e_ipc_str_int_list_edd, &dat, size_ret);
385 e_ipc_codec_2str_int_dec(char *data, int bytes, E_Ipc_2Str_Int **dest)
390 dat = eet_data_descriptor_decode(_e_ipc_2str_int_edd, data, bytes);
392 if (dest) *dest = dat;
397 e_ipc_codec_2str_int_enc(const char *str1, const char *str2, int val, int *size_ret)
401 dat.str1 = (char *) str1;
402 dat.str2 = (char *) str2;
404 return eet_data_descriptor_encode(_e_ipc_2str_int_edd, &dat, size_ret);
408 e_ipc_codec_2str_int_list_dec(char *data, int bytes, Eina_List **dest)
413 dat = eet_data_descriptor_decode(_e_ipc_2str_int_list_edd, data, bytes);
415 if (dest) *dest = dat->list;
421 e_ipc_codec_2str_int_list_enc(Eina_List *list, int *size_ret)
425 return eet_data_descriptor_encode(_e_ipc_2str_int_list_edd, &dat, size_ret);
429 e_ipc_codec_4int_2str_dec(char *data, int bytes, E_Ipc_4Int_2Str **dest)
431 E_Ipc_4Int_2Str *dat;
434 dat = eet_data_descriptor_decode(_e_ipc_4int_2str_edd, data, bytes);
436 if (dest) *dest = dat;
441 e_ipc_codec_4int_2str_enc(int val1, int val2, int val3, int val4, const char *str1, const char *str2, int *size_ret)
449 dat.str1 = (char *) str1;
450 dat.str2 = (char *) str2;
451 return eet_data_descriptor_encode(_e_ipc_4int_2str_edd, &dat, size_ret);
455 e_ipc_codec_4int_2str_list_dec(char *data, int bytes, Eina_List **dest)
460 dat = eet_data_descriptor_decode(_e_ipc_4int_2str_list_edd, data, bytes);
462 if (dest) *dest = dat->list;
468 e_ipc_codec_4int_2str_list_enc(Eina_List *list, int *size_ret)
472 return eet_data_descriptor_encode(_e_ipc_4int_2str_list_edd, &dat, size_ret);
476 e_ipc_codec_5int_2str_dec(char *data, int bytes, E_Ipc_5Int_2Str **dest)
478 E_Ipc_5Int_2Str *dat;
481 dat = eet_data_descriptor_decode(_e_ipc_5int_2str_edd, data, bytes);
483 if (dest) *dest = dat;
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)
497 dat.str1 = (char *) str1;
498 dat.str2 = (char *) str2;
499 return eet_data_descriptor_encode(_e_ipc_5int_2str_edd, &dat, size_ret);
503 e_ipc_codec_5int_2str_list_dec(char *data, int bytes, Eina_List **dest)
508 dat = eet_data_descriptor_decode(_e_ipc_5int_2str_list_edd, data, bytes);
510 if (dest) *dest = dat->list;
516 e_ipc_codec_5int_2str_list_enc(Eina_List *list, int *size_ret)
520 return eet_data_descriptor_encode(_e_ipc_5int_2str_list_edd, &dat, size_ret);
524 e_ipc_codec_3int_4str_dec(char *data, int bytes, E_Ipc_3Int_4Str **dest)
526 E_Ipc_3Int_4Str *dat;
529 dat = eet_data_descriptor_decode(_e_ipc_3int_4str_edd, data, bytes);
531 if (dest) *dest = dat;
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)
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);
551 e_ipc_codec_3int_4str_list_dec(char *data, int bytes, Eina_List **dest)
556 dat = eet_data_descriptor_decode(_e_ipc_3int_4str_list_edd, data, bytes);
558 if (dest) *dest = dat->list;
564 e_ipc_codec_3int_4str_list_enc(Eina_List *list, int *size_ret)
568 return eet_data_descriptor_encode(_e_ipc_3int_4str_list_edd, &dat, size_ret);
572 e_ipc_codec_3int_3str_dec(char *data, int bytes, E_Ipc_3Int_3Str **dest)
574 E_Ipc_3Int_3Str *dat;
577 dat = eet_data_descriptor_decode(_e_ipc_3int_3str_edd, data, bytes);
579 if (dest) *dest = dat;
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)
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);
598 e_ipc_codec_3int_3str_list_dec(char *data, int bytes, Eina_List **dest)
603 dat = eet_data_descriptor_decode(_e_ipc_3int_3str_list_edd, data, bytes);
605 if (dest) *dest = dat->list;
611 e_ipc_codec_3int_3str_list_enc(Eina_List *list, int *size_ret)
615 return eet_data_descriptor_encode(_e_ipc_3int_3str_list_edd, &dat, size_ret);
619 e_ipc_codec_str_4int_dec(char *data, int bytes, E_Ipc_Str_4Int **dest)
624 dat = eet_data_descriptor_decode(_e_ipc_str_4int_edd, data, bytes);
626 if (dest) *dest = dat;
631 e_ipc_codec_str_4int_enc(const char *str1, int val1, int val2, int val3, int val4, int *size_ret)
635 dat.str = (char *) str1;
641 return eet_data_descriptor_encode(_e_ipc_str_4int_edd, &dat, size_ret);
645 e_ipc_codec_str_4int_list_dec(char *data, int bytes, Eina_List **dest)
650 dat = eet_data_descriptor_decode(_e_ipc_str_4int_list_edd, data, bytes);
652 if (dest) *dest = dat->list;
658 e_ipc_codec_str_4int_list_enc(Eina_List *list, int *size_ret)
662 return eet_data_descriptor_encode(_e_ipc_str_4int_list_edd, &dat, size_ret);
665 /* local subsystem globals */