Enlightenment CVS committal Author : sebastid Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_dbus Modified Files: Ecore_DBus.h ecore_dbus.c ecore_dbus_message.c ecore_dbus_methods.c ecore_dbus_private.h ecore_dbus_unmarshal.c ecore_dbus_utils.c Log Message: Add one event type for each type of message =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/Ecore_DBus.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- Ecore_DBus.h 26 Jul 2006 12:08:06 -0000 1.12 +++ Ecore_DBus.h 27 Jul 2006 13:29:43 -0000 1.13 @@ -36,6 +36,7 @@ typedef struct _Ecore_DBus_Event_Server_Add Ecore_DBus_Event_Server_Add; typedef struct _Ecore_DBus_Event_Server_Del Ecore_DBus_Event_Server_Del; typedef struct _Ecore_DBus_Event_Server_Data Ecore_DBus_Event_Server_Data; + typedef struct _Ecore_DBus_Event_Arg Ecore_DBus_Event_Arg; typedef struct _Ecore_DBus_Message Ecore_DBus_Message; typedef struct _Ecore_DBus_Message_Field Ecore_DBus_Message_Field; @@ -94,8 +95,24 @@ { Ecore_DBus_Server *server; Ecore_DBus_Message_Type type; - char *member; Ecore_DBus_Message *message; + struct { + const char *path; + const char *interface; + const char *member; + const char *error_name; + unsigned int reply_serial; + const char *destination; + const char *sender; + const char *signature; + } header; + Ecore_DBus_Event_Arg *args; + }; + + struct _Ecore_DBus_Event_Arg + { + Ecore_DBus_Data_Type type; + void *value; }; typedef enum _Ecore_DBus_Message_Header_Field @@ -112,8 +129,11 @@ } Ecore_DBus_Message_Header_Field; EAPI extern int ECORE_DBUS_EVENT_SERVER_ADD; - EAPI extern int ECORE_DBUS_EVENT_SERVER_DATA; EAPI extern int ECORE_DBUS_EVENT_SERVER_DEL; + EAPI extern int ECORE_DBUS_EVENT_SERVER_METHOD_RETURN; + EAPI extern int ECORE_DBUS_EVENT_SERVER_ERROR; + EAPI extern int ECORE_DBUS_EVENT_SERVER_SIGNAL; + EAPI extern int ECORE_DBUS_EVENT_SERVER_DATA; /* init */ EAPI int ecore_dbus_init(void); =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -3 -r1.17 -r1.18 --- ecore_dbus.c 26 Jul 2006 20:43:28 -0000 1.17 +++ ecore_dbus.c 27 Jul 2006 13:29:43 -0000 1.18 @@ -42,6 +42,9 @@ EAPI int ECORE_DBUS_EVENT_SERVER_ADD = 0; EAPI int ECORE_DBUS_EVENT_SERVER_DEL = 0; +EAPI int ECORE_DBUS_EVENT_SERVER_METHOD_RETURN = 0; +EAPI int ECORE_DBUS_EVENT_SERVER_ERROR = 0; +EAPI int ECORE_DBUS_EVENT_SERVER_SIGNAL = 0; EAPI int ECORE_DBUS_EVENT_SERVER_DATA = 0; /* private function declaration */ @@ -55,8 +58,11 @@ static int _ecore_dbus_event_server_add(void *data, int ev_type, void *ev); static int _ecore_dbus_event_server_del(void *data, int ev_type, void *ev); static int _ecore_dbus_event_server_data(void *data, int ev_type, void *ev); +static void _ecore_dbus_event_server_del_free(void *data, void *ev); static void _ecore_dbus_event_server_data_free(void *data, void *ev); +static Ecore_DBus_Event_Server_Data *_ecore_dbus_event_create(Ecore_DBus_Server *svr, Ecore_DBus_Message *msg); + /* local variables */ static const Ecore_DBus_Auth auths[] = { @@ -83,6 +89,9 @@ ECORE_DBUS_EVENT_SERVER_ADD = ecore_event_type_new(); ECORE_DBUS_EVENT_SERVER_DEL = ecore_event_type_new(); + ECORE_DBUS_EVENT_SERVER_METHOD_RETURN = ecore_event_type_new(); + ECORE_DBUS_EVENT_SERVER_ERROR = ecore_event_type_new(); + ECORE_DBUS_EVENT_SERVER_SIGNAL = ecore_event_type_new(); ECORE_DBUS_EVENT_SERVER_DATA = ecore_event_type_new(); handler[i++] = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_ADD, @@ -102,6 +111,8 @@ if (--init_count != 0) return init_count; + /* FIXME: Delete servers */ + for (i = 0; i < 3; i++) ecore_event_handler_del(handler[i]); @@ -254,9 +265,10 @@ Ecore_DBus_Server *svr; e = ev; - if (!_ecore_list2_find(servers, ecore_con_server_data_get(e->server))) return 1; - svr = ecore_con_server_data_get(e->server); + if (!svr) return 1; + if (!_ecore_list2_find(servers, svr)) return 1; + ecore_dbus_server_send(svr, "\0", 1); ecore_dbus_server_send(svr, "AUTH\r\n", 6); printf("[ecore_dbus] begining auth process\n"); @@ -271,14 +283,16 @@ Ecore_DBus_Event_Server_Del *e2; e = ev; - if (!_ecore_list2_find(servers, ecore_con_server_data_get(e->server))) return 1; - svr = ecore_con_server_data_get(e->server); + if (!svr) return 1; + if (!_ecore_list2_find(servers, svr)) return 1; + e2 = calloc(1, sizeof(Ecore_DBus_Event_Server_Del)); if (e2) { + svr->server = NULL; e2->server = svr; - ecore_event_add(ECORE_DBUS_EVENT_SERVER_DEL, e2, NULL, NULL); + ecore_event_add(ECORE_DBUS_EVENT_SERVER_DEL, e2, _ecore_dbus_event_server_del_free, NULL); } return 0; } @@ -288,12 +302,11 @@ { Ecore_Con_Event_Server_Data *e; Ecore_DBus_Server *svr; - Ecore_DBus_Event_Server_Add *svr_add; e = ev; - if (!_ecore_list2_find(servers, ecore_con_server_data_get(e->server))) return 1; - svr = ecore_con_server_data_get(e->server); + if (!svr) return 1; + if (!_ecore_list2_find(servers, svr)) return 1; if (!svr->authenticated) { @@ -306,9 +319,8 @@ printf("[ecore_dbus] auth type %s successful\n", auths[svr->auth_type].name); ecore_dbus_server_send(svr, "BEGIN\r\n", 7); svr->authenticated = 1; - svr_add = malloc(sizeof(Ecore_DBus_Event_Server_Add)); - svr_add->server = svr; - ecore_event_add(ECORE_DBUS_EVENT_SERVER_ADD, svr_add, NULL, NULL); + /* Register on the bus */ + svr->hello = ecore_dbus_method_hello(svr); } else if (!strncmp(e->data, "DATA", 4)) { @@ -336,75 +348,144 @@ else { /* message protocol */ - Ecore_DBus_Message *msg; - unsigned int offset = 0; + Ecore_DBus_Message *msg; + unsigned int offset = 0; printf("[ecore_dbus] received server data, %d bytes\n", e->size); while (e->size) { - Ecore_DBus_Event_Server_Data *ev; - unsigned int *serial; - char *method; - msg = _ecore_dbus_message_unmarshal(svr, (unsigned char *)(e->data) + offset, e->size); - if (msg == NULL) break; + if (!msg) break; offset += msg->length; e->size -= msg->length; printf("[ecore_dbus] dbus message length %u bytes, still %d\n", msg->length, e->size); //ecore_dbus_message_print(msg); /* Trap known messages */ - serial = ecore_dbus_message_header_field_get(msg, ECORE_DBUS_HEADER_FIELD_REPLY_SERIAL); - if ((serial) && (msg->type == ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN)) + if (msg->type == ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN) { + //char *method; + unsigned int *serial; - method = ecore_hash_remove(svr->methods, (void *)(*serial)); - if (method) + serial = ecore_dbus_message_header_field_get(msg, ECORE_DBUS_HEADER_FIELD_REPLY_SERIAL); + //method = ecore_hash_remove(svr->methods, (void *)(ev->header.reply_serial)); + if (serial) { - printf("Return from method: %s\n", method); - if (!strcmp(method, "org.freedesktop.DBus.Hello")) + if (*serial == svr->hello) { - char *name; + Ecore_DBus_Event_Server_Add *svr_add; + char *name; name = ecore_dbus_message_body_field_get(msg, 0); printf("Got unique name: %s\n", name); + if (svr->unique_name) + { + printf("Ecore_DBus: Already said hello %s - %s\n", + svr->unique_name, name); + free(svr->unique_name); + } svr->unique_name = strdup(name); + _ecore_dbus_message_free(msg); + + svr_add = malloc(sizeof(Ecore_DBus_Event_Server_Add)); + svr_add->server = svr; + ecore_event_add(ECORE_DBUS_EVENT_SERVER_ADD, svr_add, NULL, NULL); + } + else + { + Ecore_DBus_Event_Server_Data *ev2; + ev2 = _ecore_dbus_event_create(svr, msg); + ecore_event_add(ECORE_DBUS_EVENT_SERVER_METHOD_RETURN, ev2, + _ecore_dbus_event_server_data_free, NULL); } } + else + { + printf("Ecore_DBus: Method return without reply serial!\n"); + } + } + else if (msg->type == ECORE_DBUS_MESSAGE_TYPE_ERROR) + { + Ecore_DBus_Event_Server_Data *ev2; + ev2 = _ecore_dbus_event_create(svr, msg); + ecore_event_add(ECORE_DBUS_EVENT_SERVER_ERROR, ev2, + _ecore_dbus_event_server_data_free, NULL); + } + else if (msg->type == ECORE_DBUS_MESSAGE_TYPE_SIGNAL) + { + Ecore_DBus_Event_Server_Data *ev2; + ev2 = _ecore_dbus_event_create(svr, msg); + ecore_event_add(ECORE_DBUS_EVENT_SERVER_SIGNAL, ev2, + _ecore_dbus_event_server_data_free, NULL); } else { - /* Get interface and member from the message */ - char buf[1024]; - - char *interface, *member; - interface = ecore_dbus_message_header_field_get(msg, ECORE_DBUS_HEADER_FIELD_INTERFACE); - member = ecore_dbus_message_header_field_get(msg, ECORE_DBUS_HEADER_FIELD_MEMBER); - if ((member) && (interface)) - snprintf(buf, sizeof(buf), "%s.%s", interface, member); - else if (member) - strcpy(buf, member); - method = strdup(buf); + Ecore_DBus_Event_Server_Data *ev2; + ev2 = _ecore_dbus_event_create(svr, msg); + ecore_event_add(ECORE_DBUS_EVENT_SERVER_DATA, ev2, + _ecore_dbus_event_server_data_free, NULL); } - ev = malloc(sizeof(Ecore_DBus_Event_Server_Data)); - ev->type = msg->type; - ev->server = svr; - ev->message = msg; - ev->member = method; - ecore_event_add(ECORE_DBUS_EVENT_SERVER_DATA, ev, - _ecore_dbus_event_server_data_free, NULL); } } return 0; } static void +_ecore_dbus_event_server_del_free(void *data, void *ev) +{ + Ecore_DBus_Event_Server_Del *event; + + event = ev; + ecore_dbus_server_del(event->server); + free(ev); +} + +static void _ecore_dbus_event_server_data_free(void *data, void *ev) { Ecore_DBus_Event_Server_Data *event; event = ev; _ecore_dbus_message_free(event->message); - if (event->member) free(event->member); + if (event->args) free(event->args); free(ev); } + +static Ecore_DBus_Event_Server_Data * +_ecore_dbus_event_create(Ecore_DBus_Server *svr, Ecore_DBus_Message *msg) +{ + Ecore_DBus_Event_Server_Data *ev; + unsigned int *serial; + + ev = calloc(1, sizeof(Ecore_DBus_Event_Server_Data)); + if (!ev) return NULL; + ev->server = svr; + ev->type = msg->type; + ev->message = msg; + ev->header.path = ecore_dbus_message_header_field_get(msg, ECORE_DBUS_HEADER_FIELD_PATH); + ev->header.interface = ecore_dbus_message_header_field_get(msg, ECORE_DBUS_HEADER_FIELD_INTERFACE); + ev->header.member = ecore_dbus_message_header_field_get(msg, ECORE_DBUS_HEADER_FIELD_MEMBER); + ev->header.error_name = ecore_dbus_message_header_field_get(msg, ECORE_DBUS_HEADER_FIELD_ERROR_NAME); + serial = ecore_dbus_message_header_field_get(msg, ECORE_DBUS_HEADER_FIELD_REPLY_SERIAL); + if (serial) + ev->header.reply_serial = *serial; + ev->header.destination = ecore_dbus_message_header_field_get(msg, ECORE_DBUS_HEADER_FIELD_DESTINATION); + ev->header.sender = ecore_dbus_message_header_field_get(msg, ECORE_DBUS_HEADER_FIELD_SENDER); + ev->header.signature = ecore_dbus_message_header_field_get(msg, ECORE_DBUS_HEADER_FIELD_SIGNATURE); + if (!ecore_list_is_empty(msg->fields)) + { + Ecore_DBus_Message_Field *f; + int i = 0; + + ev->args = malloc(ecore_list_nodes(msg->fields) * sizeof(Ecore_DBus_Event_Arg *)); + ecore_list_goto_first(msg->fields); + while ((f = ecore_list_next(msg->fields))) + { + ev->args[i].type = f->type; + ev->args[i].value = _ecore_dbus_message_field_value_get(f); + i++; + } + } + return ev; +} + =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_message.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- ecore_dbus_message.c 26 Jul 2006 20:43:28 -0000 1.4 +++ ecore_dbus_message.c 27 Jul 2006 13:29:44 -0000 1.5 @@ -228,119 +228,7 @@ while ((f = ecore_list_next(m->fields))) { if (i == pos) - { - switch (f->type) - { - case ECORE_DBUS_DATA_TYPE_BYTE: - return &ECORE_DBUS_MESSAGE_FIELD_BYTE(f)->value; - case ECORE_DBUS_DATA_TYPE_BOOLEAN: - return &ECORE_DBUS_MESSAGE_FIELD_BOOLEAN(f)->value; - case ECORE_DBUS_DATA_TYPE_INT16: - return &ECORE_DBUS_MESSAGE_FIELD_INT16(f)->value; - case ECORE_DBUS_DATA_TYPE_UINT16: - return &ECORE_DBUS_MESSAGE_FIELD_UINT16(f)->value; - case ECORE_DBUS_DATA_TYPE_INT32: - return &ECORE_DBUS_MESSAGE_FIELD_INT32(f)->value; - case ECORE_DBUS_DATA_TYPE_UINT32: - return &ECORE_DBUS_MESSAGE_FIELD_UINT32(f)->value; - case ECORE_DBUS_DATA_TYPE_INT64: - return &ECORE_DBUS_MESSAGE_FIELD_INT64(f)->value; - case ECORE_DBUS_DATA_TYPE_UINT64: - return &ECORE_DBUS_MESSAGE_FIELD_UINT64(f)->value; - case ECORE_DBUS_DATA_TYPE_DOUBLE: - return &ECORE_DBUS_MESSAGE_FIELD_DOUBLE(f)->value; - case ECORE_DBUS_DATA_TYPE_STRING: - return ECORE_DBUS_MESSAGE_FIELD_STRING(f)->value; - case ECORE_DBUS_DATA_TYPE_OBJECT_PATH: - return ECORE_DBUS_MESSAGE_FIELD_OBJECT_PATH(f)->value; - case ECORE_DBUS_DATA_TYPE_SIGNATURE: - return ECORE_DBUS_MESSAGE_FIELD_SIGNATURE(f)->value; - case ECORE_DBUS_DATA_TYPE_ARRAY: - { - Ecore_DBus_Message_Field_Container *c; - Ecore_List *list; - void *value; - - list = ecore_list_new(); - c = ECORE_DBUS_MESSAGE_FIELD_CONTAINER(f); - ecore_list_goto_first(c->values); - switch (ECORE_DBUS_MESSAGE_FIELD_ARRAY(f)->contained_type) - { - case ECORE_DBUS_DATA_TYPE_BYTE: - while ((value = ecore_list_next(c->values))) - ecore_list_append(list, &ECORE_DBUS_MESSAGE_FIELD_BYTE(value)->value); - break; - case ECORE_DBUS_DATA_TYPE_BOOLEAN: - while ((value = ecore_list_next(c->values))) - ecore_list_append(list, &ECORE_DBUS_MESSAGE_FIELD_BOOLEAN(value)->value); - break; - case ECORE_DBUS_DATA_TYPE_INT16: - while ((value = ecore_list_next(c->values))) - ecore_list_append(list, &ECORE_DBUS_MESSAGE_FIELD_INT16(value)->value); - break; - case ECORE_DBUS_DATA_TYPE_UINT16: - while ((value = ecore_list_next(c->values))) - ecore_list_append(list, &ECORE_DBUS_MESSAGE_FIELD_UINT16(value)->value); - break; - case ECORE_DBUS_DATA_TYPE_INT32: - while ((value = ecore_list_next(c->values))) - ecore_list_append(list, &ECORE_DBUS_MESSAGE_FIELD_INT32(value)->value); - break; - case ECORE_DBUS_DATA_TYPE_UINT32: - while ((value = ecore_list_next(c->values))) - ecore_list_append(list, &ECORE_DBUS_MESSAGE_FIELD_UINT32(value)->value); - break; - case ECORE_DBUS_DATA_TYPE_INT64: - while ((value = ecore_list_next(c->values))) - ecore_list_append(list, &ECORE_DBUS_MESSAGE_FIELD_INT64(value)->value); - break; - case ECORE_DBUS_DATA_TYPE_UINT64: - while ((value = ecore_list_next(c->values))) - ecore_list_append(list, &ECORE_DBUS_MESSAGE_FIELD_UINT64(value)->value); - break; - case ECORE_DBUS_DATA_TYPE_DOUBLE: - while ((value = ecore_list_next(c->values))) - ecore_list_append(list, &ECORE_DBUS_MESSAGE_FIELD_DOUBLE(value)->value); - break; - case ECORE_DBUS_DATA_TYPE_STRING: - while ((value = ecore_list_next(c->values))) - ecore_list_append(list, ECORE_DBUS_MESSAGE_FIELD_STRING(value)->value); - break; - case ECORE_DBUS_DATA_TYPE_OBJECT_PATH: - while ((value = ecore_list_next(c->values))) - ecore_list_append(list, ECORE_DBUS_MESSAGE_FIELD_OBJECT_PATH(value)->value); - break; - case ECORE_DBUS_DATA_TYPE_SIGNATURE: - while ((value = ecore_list_next(c->values))) - ecore_list_append(list, ECORE_DBUS_MESSAGE_FIELD_SIGNATURE(value)->value); - break; - case ECORE_DBUS_DATA_TYPE_INVALID: - case ECORE_DBUS_DATA_TYPE_ARRAY: - case ECORE_DBUS_DATA_TYPE_VARIANT: - case ECORE_DBUS_DATA_TYPE_STRUCT: - case ECORE_DBUS_DATA_TYPE_STRUCT_BEGIN: - case ECORE_DBUS_DATA_TYPE_STRUCT_END: - case ECORE_DBUS_DATA_TYPE_DICT_ENTRY: - case ECORE_DBUS_DATA_TYPE_DICT_ENTRY_BEGIN: - case ECORE_DBUS_DATA_TYPE_DICT_ENTRY_END: - return NULL; - } - return list; - } - case ECORE_DBUS_DATA_TYPE_INVALID: - case ECORE_DBUS_DATA_TYPE_VARIANT: - case ECORE_DBUS_DATA_TYPE_STRUCT: - case ECORE_DBUS_DATA_TYPE_STRUCT_BEGIN: - case ECORE_DBUS_DATA_TYPE_STRUCT_END: - case ECORE_DBUS_DATA_TYPE_DICT_ENTRY: - case ECORE_DBUS_DATA_TYPE_DICT_ENTRY_BEGIN: - case ECORE_DBUS_DATA_TYPE_DICT_ENTRY_END: -#if 0 - default: -#endif - break; - } - } + return _ecore_dbus_message_field_value_get(f); i++; } return NULL; @@ -552,6 +440,11 @@ ("[ecore_dbus] field BYTE: value offset = %d value = %c %d\n", f->offset, (char)*(f->buffer), (char)*(f->buffer)); break; + case ECORE_DBUS_DATA_TYPE_BOOLEAN: + printf + ("[ecore_dbus] field BOOLEAN: value offset = %d value = %u\n", + f->offset, (unsigned int)*(f->buffer)); + break; case ECORE_DBUS_DATA_TYPE_INT32: printf ("[ecore_dbus] field INT32: value offset = %d value = %d\n", @@ -623,7 +516,6 @@ } break; case ECORE_DBUS_DATA_TYPE_INVALID: - case ECORE_DBUS_DATA_TYPE_BOOLEAN: case ECORE_DBUS_DATA_TYPE_INT16: case ECORE_DBUS_DATA_TYPE_UINT16: case ECORE_DBUS_DATA_TYPE_INT64: =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_methods.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- ecore_dbus_methods.c 25 Jul 2006 16:03:05 -0000 1.2 +++ ecore_dbus_methods.c 27 Jul 2006 13:29:44 -0000 1.3 @@ -11,6 +11,16 @@ EAPI int ecore_dbus_method_hello(Ecore_DBus_Server *svr) { + if (svr->unique_name) + { + printf("Ecore_DBus: Already registered on the message bus.\n"); + return 0; + } + if (svr->hello) + { + printf("Ecore_DBus: Already tried to register on the message bus, wait for reply.\n"); + return 0; + } return ecore_dbus_message_new_method_call(svr, "org.freedesktop.DBus" /*destination*/, "/org/freedesktop/DBus" /*path*/, =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_private.h,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- ecore_dbus_private.h 26 Jul 2006 12:08:06 -0000 1.8 +++ ecore_dbus_private.h 27 Jul 2006 13:29:44 -0000 1.9 @@ -64,6 +64,7 @@ int cnt_msg; Ecore_Hash *methods; + unsigned int hello; char *unique_name; }; @@ -224,6 +225,8 @@ unsigned char _ecore_dbus_message_read_byte(Ecore_DBus_Message *msg); unsigned int _ecore_dbus_message_read_uint32(Ecore_DBus_Message *msg); int _ecore_dbus_alignment_get(Ecore_DBus_Data_Type type); +void *_ecore_dbus_message_field_value_get(Ecore_DBus_Message_Field *f); + /* ecore_dbus_marshal.c */ Ecore_DBus_Message_Field_Byte *_ecore_dbus_message_marshal_byte(Ecore_DBus_Message *msg, unsigned char c); #if 0 =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_unmarshal.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- ecore_dbus_unmarshal.c 26 Jul 2006 20:43:28 -0000 1.5 +++ ecore_dbus_unmarshal.c 27 Jul 2006 13:29:44 -0000 1.6 @@ -367,12 +367,18 @@ msg->type = *(message + 1); msg->flags = *(message + 2); msg->protocol = *(message + 3); + if (msg->protocol != ECORE_DBUS_MAJOR_PROTOCOL_VERSION) + { + printf("Ecore_DBus: Only supports protocol 0x%x, message has protocol 0x%x.\n", + ECORE_DBUS_MAJOR_PROTOCOL_VERSION, msg->protocol); + goto error; + } msg->body_length = *(unsigned int *)(message + 4); msg->serial = *(unsigned int *)(message + 8); if (msg->type == ECORE_DBUS_MESSAGE_TYPE_INVALID) { - printf("[ecore_dbus] message type invalid\n"); - return NULL; + printf("Ecore_DBus: Invalid message type.\n"); + goto error; } /* copy message to buffer */ _ecore_dbus_message_append_bytes(msg, message, size); =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_utils.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- ecore_dbus_utils.c 25 Jul 2006 16:03:05 -0000 1.3 +++ ecore_dbus_utils.c 27 Jul 2006 13:29:44 -0000 1.4 @@ -144,3 +144,61 @@ return 0; } } + +void * +_ecore_dbus_message_field_value_get(Ecore_DBus_Message_Field *f) +{ + switch (f->type) + { + case ECORE_DBUS_DATA_TYPE_BYTE: + return &ECORE_DBUS_MESSAGE_FIELD_BYTE(f)->value; + case ECORE_DBUS_DATA_TYPE_BOOLEAN: + return &ECORE_DBUS_MESSAGE_FIELD_BOOLEAN(f)->value; + case ECORE_DBUS_DATA_TYPE_INT16: + return &ECORE_DBUS_MESSAGE_FIELD_INT16(f)->value; + case ECORE_DBUS_DATA_TYPE_UINT16: + return &ECORE_DBUS_MESSAGE_FIELD_UINT16(f)->value; + case ECORE_DBUS_DATA_TYPE_INT32: + return &ECORE_DBUS_MESSAGE_FIELD_INT32(f)->value; + case ECORE_DBUS_DATA_TYPE_UINT32: + return &ECORE_DBUS_MESSAGE_FIELD_UINT32(f)->value; + case ECORE_DBUS_DATA_TYPE_INT64: + return &ECORE_DBUS_MESSAGE_FIELD_INT64(f)->value; + case ECORE_DBUS_DATA_TYPE_UINT64: + return &ECORE_DBUS_MESSAGE_FIELD_UINT64(f)->value; + case ECORE_DBUS_DATA_TYPE_DOUBLE: + return &ECORE_DBUS_MESSAGE_FIELD_DOUBLE(f)->value; + case ECORE_DBUS_DATA_TYPE_STRING: + return ECORE_DBUS_MESSAGE_FIELD_STRING(f)->value; + case ECORE_DBUS_DATA_TYPE_OBJECT_PATH: + return ECORE_DBUS_MESSAGE_FIELD_OBJECT_PATH(f)->value; + case ECORE_DBUS_DATA_TYPE_SIGNATURE: + return ECORE_DBUS_MESSAGE_FIELD_SIGNATURE(f)->value; + case ECORE_DBUS_DATA_TYPE_ARRAY: + { + Ecore_DBus_Message_Field_Container *c; + Ecore_List *list; + void *value; + + list = ecore_list_new(); + c = ECORE_DBUS_MESSAGE_FIELD_CONTAINER(f); + ecore_list_goto_first(c->values); + while ((value = ecore_list_next(c->values))) + ecore_list_append(list, _ecore_dbus_message_field_value_get(value)); + return list; + } + case ECORE_DBUS_DATA_TYPE_INVALID: + case ECORE_DBUS_DATA_TYPE_VARIANT: + case ECORE_DBUS_DATA_TYPE_STRUCT: + case ECORE_DBUS_DATA_TYPE_STRUCT_BEGIN: + case ECORE_DBUS_DATA_TYPE_STRUCT_END: + case ECORE_DBUS_DATA_TYPE_DICT_ENTRY: + case ECORE_DBUS_DATA_TYPE_DICT_ENTRY_BEGIN: + case ECORE_DBUS_DATA_TYPE_DICT_ENTRY_END: +#if 0 + default: +#endif + break; + } + return NULL; +} ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs