2012-05-14 07:41:00 -07:00
|
|
|
#include "eet_data.h"
|
2012-05-14 07:38:35 -07:00
|
|
|
static data_desc *desc = NULL;
|
2012-05-14 07:37:49 -07:00
|
|
|
|
2012-05-14 07:38:42 -07:00
|
|
|
void
|
2012-05-14 07:39:23 -07:00
|
|
|
item_tree_item_free(Tree_Item *parent)
|
2012-05-14 07:38:42 -07:00
|
|
|
{
|
|
|
|
Tree_Item *treeit;
|
|
|
|
|
|
|
|
EINA_LIST_FREE(parent->children, treeit)
|
|
|
|
{
|
2012-05-14 07:39:23 -07:00
|
|
|
item_tree_item_free(treeit);
|
2012-05-14 07:38:42 -07:00
|
|
|
}
|
|
|
|
|
2012-05-14 07:39:23 -07:00
|
|
|
obj_information_free(parent->info);
|
2012-05-14 07:38:42 -07:00
|
|
|
eina_stringshare_del(parent->name);
|
|
|
|
free(parent);
|
|
|
|
}
|
|
|
|
|
2012-05-14 07:39:23 -07:00
|
|
|
void
|
|
|
|
item_tree_free(Eina_List *tree)
|
|
|
|
{
|
|
|
|
Tree_Item *treeit;
|
|
|
|
|
|
|
|
EINA_LIST_FREE(tree, treeit)
|
|
|
|
{
|
|
|
|
item_tree_item_free(treeit);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-05-14 07:38:46 -07:00
|
|
|
void
|
|
|
|
_item_tree_item_string(Tree_Item *parent)
|
2012-05-14 07:40:02 -07:00
|
|
|
{ /* Use this function if you want to print tree for debug */
|
2012-05-14 07:38:46 -07:00
|
|
|
Tree_Item *treeit;
|
|
|
|
Eina_List *l;
|
|
|
|
|
|
|
|
EINA_LIST_FOREACH(parent->children, l, treeit)
|
|
|
|
{
|
|
|
|
_item_tree_item_string(treeit);
|
|
|
|
}
|
2012-05-14 07:40:02 -07:00
|
|
|
|
|
|
|
if (parent->name)
|
|
|
|
printf("<%s>\n", parent->name);
|
2012-05-14 07:38:46 -07:00
|
|
|
}
|
2012-05-14 07:38:42 -07:00
|
|
|
|
2012-05-14 07:38:35 -07:00
|
|
|
static eet_message_type_mapping eet_mapping[] = {
|
2012-05-14 07:39:38 -07:00
|
|
|
{ GUI_CLIENT_CONNECT, GUI_CONNECT_STR },
|
|
|
|
{ APP_CLIENT_CONNECT, APP_CONNECT_STR },
|
|
|
|
{ APP_ADD, APP_ADD_STR },
|
|
|
|
{ DATA_REQ, DATA_REQ_STR },
|
|
|
|
{ TREE_DATA, TREE_DATA_STR },
|
|
|
|
{ APP_CLOSED, APP_CLOSED_STR },
|
|
|
|
{ HIGHLIGHT, HIGHLIGHT_STR }
|
2012-05-14 07:38:35 -07:00
|
|
|
};
|
2012-05-14 07:37:49 -07:00
|
|
|
|
2012-05-14 07:38:35 -07:00
|
|
|
message_type
|
|
|
|
packet_mapping_type_get(const char *name)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
for (i = 0; eet_mapping[i].name != NULL; ++i)
|
|
|
|
if (strcmp(name, eet_mapping[i].name) == 0)
|
|
|
|
return eet_mapping[i].t;
|
2012-05-14 07:37:49 -07:00
|
|
|
|
2012-05-14 07:38:35 -07:00
|
|
|
return UNKNOWN;
|
|
|
|
}
|
2012-05-14 07:37:49 -07:00
|
|
|
|
2012-05-14 07:38:35 -07:00
|
|
|
const char *
|
|
|
|
packet_mapping_type_str_get(message_type t)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
for (i = 0; eet_mapping[i].name != NULL; ++i)
|
|
|
|
if (t == eet_mapping[i].t)
|
|
|
|
return eet_mapping[i].name;
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
const char *
|
|
|
|
_variant_type_get(const void *data, Eina_Bool *unknow)
|
|
|
|
{
|
|
|
|
const Variant_Type_st *type = data;
|
|
|
|
int i;
|
|
|
|
|
|
|
|
if (unknow)
|
|
|
|
*unknow = type->unknow;
|
|
|
|
|
|
|
|
for (i = 0; eet_mapping[i].name != NULL; ++i)
|
|
|
|
if (strcmp(type->type, eet_mapping[i].name) == 0)
|
|
|
|
return eet_mapping[i].name;
|
2012-05-14 07:37:49 -07:00
|
|
|
|
2012-05-14 07:38:35 -07:00
|
|
|
if (unknow)
|
|
|
|
*unknow = EINA_FALSE;
|
2012-05-14 07:37:49 -07:00
|
|
|
|
2012-05-14 07:38:35 -07:00
|
|
|
return type->type;
|
|
|
|
} /* _variant_type_get */
|
|
|
|
|
|
|
|
Eina_Bool
|
|
|
|
_variant_type_set(const char *type,
|
|
|
|
void *data,
|
|
|
|
Eina_Bool unknow)
|
2012-05-14 07:38:09 -07:00
|
|
|
{
|
2012-05-14 07:38:35 -07:00
|
|
|
Variant_Type_st *vt = data;
|
2012-05-14 07:38:09 -07:00
|
|
|
|
2012-05-14 07:38:35 -07:00
|
|
|
vt->type = type;
|
|
|
|
vt->unknow = unknow;
|
|
|
|
return EINA_TRUE;
|
|
|
|
} /* _variant_type_set */
|
2012-05-14 07:38:09 -07:00
|
|
|
|
2012-05-14 07:38:35 -07:00
|
|
|
void
|
|
|
|
variant_free(Variant_st *v)
|
|
|
|
{
|
|
|
|
if (v->data)
|
|
|
|
free(v->data);
|
|
|
|
|
|
|
|
free(v);
|
2012-05-14 07:38:09 -07:00
|
|
|
}
|
|
|
|
|
2012-05-14 07:38:35 -07:00
|
|
|
Variant_st *
|
|
|
|
variant_alloc(message_type t, size_t size, void *info)
|
2012-05-14 07:38:09 -07:00
|
|
|
{
|
2012-05-14 07:38:35 -07:00
|
|
|
if (t != UNKNOWN)
|
|
|
|
{ /* This will allocate variant and message struct */
|
|
|
|
Variant_st *v = malloc(sizeof(Variant_st));
|
|
|
|
v->data = malloc(size);
|
|
|
|
_variant_type_set(packet_mapping_type_str_get(t), &v->t, EINA_FALSE);
|
|
|
|
memcpy(v->data, info, size);
|
|
|
|
|
|
|
|
return v;
|
|
|
|
}
|
2012-05-14 07:38:09 -07:00
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
2012-05-14 07:38:35 -07:00
|
|
|
|
|
|
|
Eet_Data_Descriptor *
|
2012-05-14 07:39:38 -07:00
|
|
|
connect_desc_make(void)
|
2012-05-14 07:38:35 -07:00
|
|
|
{
|
|
|
|
Eet_Data_Descriptor *d;
|
|
|
|
|
|
|
|
Eet_Data_Descriptor_Class eddc;
|
2012-05-14 07:39:38 -07:00
|
|
|
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, connect_st);
|
2012-05-14 07:38:35 -07:00
|
|
|
d = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
|
2012-05-14 07:39:38 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC (d, connect_st, "pid", pid, EET_T_UINT);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC (d, connect_st, "name", name, EET_T_STRING);
|
|
|
|
|
|
|
|
return d;
|
|
|
|
}
|
|
|
|
|
|
|
|
Eet_Data_Descriptor *
|
|
|
|
app_add_desc_make(void)
|
|
|
|
{
|
|
|
|
Eet_Data_Descriptor *d;
|
|
|
|
|
|
|
|
Eet_Data_Descriptor_Class eddc;
|
|
|
|
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, app_info_st);
|
|
|
|
d = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC (d, app_info_st, "pid", pid, EET_T_UINT);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC (d, app_info_st, "name", name, EET_T_STRING);
|
2012-05-14 07:39:49 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC (d, app_info_st, "ptr", ptr, EET_T_ULONG_LONG);
|
2012-05-14 07:39:38 -07:00
|
|
|
|
|
|
|
return d;
|
|
|
|
}
|
|
|
|
|
|
|
|
Eet_Data_Descriptor *
|
|
|
|
data_req_desc_make(void)
|
|
|
|
{
|
|
|
|
Eet_Data_Descriptor *d;
|
|
|
|
|
|
|
|
Eet_Data_Descriptor_Class eddc;
|
|
|
|
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, data_req_st);
|
|
|
|
d = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
|
2012-05-14 07:39:49 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC (d, data_req_st, "gui", gui, EET_T_ULONG_LONG);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC (d, data_req_st, "app", app, EET_T_ULONG_LONG);
|
2012-05-14 07:39:38 -07:00
|
|
|
|
|
|
|
return d;
|
|
|
|
}
|
|
|
|
|
|
|
|
Eet_Data_Descriptor *
|
|
|
|
tree_data_desc_make(void)
|
|
|
|
{
|
|
|
|
Eet_Data_Descriptor *d;
|
|
|
|
|
|
|
|
Eet_Data_Descriptor_Class eddc;
|
|
|
|
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, tree_data_st);
|
|
|
|
d = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
|
2012-05-14 07:39:49 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC (d, tree_data_st, "gui", gui, EET_T_ULONG_LONG);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC (d, tree_data_st, "app", app, EET_T_ULONG_LONG);
|
2012-05-14 07:39:38 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_LIST (d, tree_data_st,
|
|
|
|
"tree", tree, desc->tree); /* Carefull - init this first */
|
|
|
|
|
|
|
|
return d;
|
|
|
|
}
|
|
|
|
|
|
|
|
Eet_Data_Descriptor *
|
|
|
|
app_closed_desc_make(void)
|
|
|
|
{
|
|
|
|
Eet_Data_Descriptor *d;
|
|
|
|
|
|
|
|
Eet_Data_Descriptor_Class eddc;
|
|
|
|
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, app_closed_st);
|
|
|
|
d = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
|
2012-05-14 07:39:49 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC (d, app_closed_st, "ptr",
|
|
|
|
ptr, EET_T_ULONG_LONG);
|
2012-05-14 07:39:38 -07:00
|
|
|
|
|
|
|
return d;
|
|
|
|
}
|
|
|
|
|
|
|
|
Eet_Data_Descriptor *
|
|
|
|
highlight_desc_make(void)
|
|
|
|
{
|
|
|
|
Eet_Data_Descriptor *d;
|
|
|
|
|
|
|
|
Eet_Data_Descriptor_Class eddc;
|
|
|
|
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, highlight_st);
|
|
|
|
d = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
|
2012-05-14 07:39:49 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC (d, highlight_st, "app",
|
|
|
|
app, EET_T_ULONG_LONG);
|
2012-05-14 07:39:38 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC (d, highlight_st,
|
2012-05-14 07:39:49 -07:00
|
|
|
"object", object, EET_T_ULONG_LONG);
|
2012-05-14 07:38:35 -07:00
|
|
|
|
|
|
|
return d;
|
2012-05-14 07:37:49 -07:00
|
|
|
}
|
|
|
|
|
2012-05-14 07:38:35 -07:00
|
|
|
Eet_Data_Descriptor *
|
|
|
|
tree_item_desc_make(void)
|
|
|
|
{
|
|
|
|
Eet_Data_Descriptor *d;
|
|
|
|
|
|
|
|
Eet_Data_Descriptor_Class eddc;
|
|
|
|
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Tree_Item);
|
|
|
|
d = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_LIST(d, Tree_Item, "children",
|
|
|
|
children, d);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(d, Tree_Item, "name",
|
|
|
|
name, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(d, Tree_Item, "ptr",
|
2012-05-14 07:38:52 -07:00
|
|
|
ptr, EET_T_UINT);
|
2012-05-14 07:39:10 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_SUB(d, Tree_Item, "info",
|
2012-05-14 07:40:41 -07:00
|
|
|
info, desc->obj_info);
|
2012-05-14 07:38:35 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(d, Tree_Item, "is_obj",
|
|
|
|
is_obj, EET_T_UCHAR);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(d, Tree_Item, "is_clipper",
|
|
|
|
is_clipper, EET_T_UCHAR);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(d, Tree_Item, "is_visible",
|
|
|
|
is_visible, EET_T_UCHAR);
|
|
|
|
|
|
|
|
return d;
|
|
|
|
}
|
|
|
|
|
2012-05-14 07:39:26 -07:00
|
|
|
data_desc *
|
|
|
|
data_descriptors_init(void)
|
2012-05-14 07:38:35 -07:00
|
|
|
{
|
|
|
|
if (desc) /* Was allocated */
|
|
|
|
return desc;
|
|
|
|
|
|
|
|
desc = calloc(1, sizeof(data_desc));
|
|
|
|
|
|
|
|
Eet_Data_Descriptor_Class eddc;
|
2012-05-14 07:37:49 -07:00
|
|
|
|
2012-05-14 07:40:41 -07:00
|
|
|
desc->obj_info = Obj_Information_desc_make();
|
2012-05-14 07:39:38 -07:00
|
|
|
desc->tree = tree_item_desc_make();
|
|
|
|
desc->connect = connect_desc_make();
|
|
|
|
desc->app_add = app_add_desc_make();
|
|
|
|
desc->data_req = data_req_desc_make();
|
|
|
|
desc->tree_data = tree_data_desc_make();
|
|
|
|
desc->app_closed = app_closed_desc_make();
|
|
|
|
desc->highlight = highlight_desc_make();
|
|
|
|
|
2012-05-14 07:38:35 -07:00
|
|
|
/* for variant */
|
|
|
|
EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Variant_st);
|
|
|
|
desc->_variant_descriptor = eet_data_descriptor_file_new(&eddc);
|
2012-05-14 07:37:49 -07:00
|
|
|
|
2012-05-14 07:38:35 -07:00
|
|
|
eddc.version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
|
|
|
|
eddc.func.type_get = _variant_type_get;
|
|
|
|
eddc.func.type_set = _variant_type_set;
|
|
|
|
desc->_variant_unified_descriptor = eet_data_descriptor_stream_new(&eddc);
|
2012-05-14 07:37:49 -07:00
|
|
|
|
2012-05-14 07:38:35 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor,
|
2012-05-14 07:39:38 -07:00
|
|
|
GUI_CONNECT_STR, desc->connect);
|
|
|
|
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor,
|
|
|
|
APP_CONNECT_STR, desc->connect);
|
|
|
|
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor,
|
|
|
|
APP_ADD_STR , desc->app_add);
|
2012-05-14 07:37:49 -07:00
|
|
|
|
2012-05-14 07:38:35 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor,
|
2012-05-14 07:39:38 -07:00
|
|
|
DATA_REQ_STR, desc->data_req);
|
2012-05-14 07:37:49 -07:00
|
|
|
|
2012-05-14 07:38:35 -07:00
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor,
|
2012-05-14 07:39:38 -07:00
|
|
|
TREE_DATA_STR, desc->tree_data);
|
2012-05-14 07:38:35 -07:00
|
|
|
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor,
|
2012-05-14 07:39:38 -07:00
|
|
|
APP_CLOSED_STR, desc->app_closed);
|
2012-05-14 07:38:35 -07:00
|
|
|
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(desc->_variant_unified_descriptor,
|
2012-05-14 07:39:38 -07:00
|
|
|
HIGHLIGHT_STR, desc->highlight);
|
2012-05-14 07:38:35 -07:00
|
|
|
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_VARIANT(desc->_variant_descriptor,
|
|
|
|
Variant_st, "data", data, t, desc->_variant_unified_descriptor);
|
|
|
|
|
|
|
|
return desc;
|
|
|
|
}
|
|
|
|
|
2012-05-14 07:39:26 -07:00
|
|
|
void
|
|
|
|
data_descriptors_shutdown(void)
|
2012-05-14 07:38:35 -07:00
|
|
|
{
|
2012-05-14 07:39:29 -07:00
|
|
|
Obj_Information_desc_shutdown();
|
|
|
|
|
2012-05-14 07:38:35 -07:00
|
|
|
if (desc)
|
|
|
|
{
|
2012-05-14 07:39:38 -07:00
|
|
|
eet_data_descriptor_free(desc->connect);
|
|
|
|
eet_data_descriptor_free(desc->app_add);
|
|
|
|
eet_data_descriptor_free(desc->data_req);
|
|
|
|
eet_data_descriptor_free(desc->tree_data);
|
|
|
|
eet_data_descriptor_free(desc->app_closed);
|
|
|
|
eet_data_descriptor_free(desc->highlight);
|
2012-05-14 07:38:35 -07:00
|
|
|
eet_data_descriptor_free(desc->tree);
|
2012-05-14 07:40:41 -07:00
|
|
|
eet_data_descriptor_free(desc->obj_info);
|
2012-05-14 07:38:35 -07:00
|
|
|
eet_data_descriptor_free(desc->_variant_descriptor );
|
|
|
|
eet_data_descriptor_free(desc->_variant_unified_descriptor);
|
|
|
|
|
|
|
|
free(desc);
|
|
|
|
desc = NULL;
|
|
|
|
}
|
2012-05-14 07:37:49 -07:00
|
|
|
}
|
2012-05-14 07:38:49 -07:00
|
|
|
|
|
|
|
void *
|
|
|
|
packet_compose(message_type t, void *data, int data_size, int *size)
|
|
|
|
{ /* Returns packet BLOB and size in size param, NULL on failure */
|
2012-05-14 07:41:13 -07:00
|
|
|
/* Packet is composed of message type + ptr to data */
|
2012-05-14 07:39:26 -07:00
|
|
|
data_desc *d = data_descriptors_init();
|
2012-05-14 07:38:49 -07:00
|
|
|
Variant_st *v = variant_alloc(t, data_size, data);
|
|
|
|
void *p = eet_data_descriptor_encode(d->_variant_descriptor , v, size);
|
|
|
|
variant_free(v);
|
|
|
|
|
2012-05-14 07:40:02 -07:00
|
|
|
/* printf("%s size=<%d>\n", __func__, *size); */
|
2012-05-14 07:38:49 -07:00
|
|
|
return p; /* User has to free(p) */
|
|
|
|
}
|
|
|
|
|
|
|
|
Variant_st *
|
|
|
|
packet_info_get(void *data, int size)
|
2012-05-14 07:41:13 -07:00
|
|
|
{ /* user has to use variant_free() to free return struct */
|
2012-05-14 07:39:26 -07:00
|
|
|
data_desc *d = data_descriptors_init();
|
2012-05-14 07:38:49 -07:00
|
|
|
return eet_data_descriptor_decode(d->_variant_descriptor, data, size);
|
|
|
|
}
|