Enlightenment CVS committal Author : sebastid Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_dbus Modified Files: Ecore_DBus.h Makefile.am ecore_dbus.c ecore_dbus_private.h Added Files: ecore_dbus_marshal.c ecore_dbus_unmarshal.c ecore_dbus_utils.c Log Message: Split files. =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/Ecore_DBus.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- Ecore_DBus.h 21 Jul 2006 15:56:42 -0000 1.7 +++ Ecore_DBus.h 21 Jul 2006 22:04:09 -0000 1.8 @@ -26,7 +26,7 @@ # endif #endif -#define ECORE_DBUS_MAJOR_PROTOCOL_VERSION 1 +#define ECORE_DBUS_MAJOR_PROTOCOL_VERSION 0x1 #ifdef __cplusplus extern "C" { =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/Makefile.am,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- Makefile.am 29 Apr 2005 09:45:12 -0000 1.3 +++ Makefile.am 21 Jul 2006 22:04:09 -0000 1.4 @@ -21,6 +21,9 @@ libecore_dbus_la_SOURCES = \ ecore_dbus.c \ +ecore_dbus_marshal.c \ +ecore_dbus_unmarshal.c \ +ecore_dbus_utils.c \ ecore_dbus_private.h libecore_dbus_la_LIBADD = \ =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- ecore_dbus.c 21 Jul 2006 15:56:42 -0000 1.10 +++ ecore_dbus.c 21 Jul 2006 22:04:09 -0000 1.11 @@ -1,15 +1,12 @@ /* * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 */ -#include <stdlib.h> -#include <stdio.h> -#include <string.h> #include <stdarg.h> #include "Ecore.h" #include "ecore_private.h" -#include "Ecore_DBus.h" #include "Ecore_Con.h" +#include "Ecore_DBus.h" #include "ecore_dbus_private.h" /********************************************************************************/ @@ -51,78 +48,8 @@ /* private function declaration */ -/* length functions */ -static void _ecore_dbus_message_append_length(unsigned char **buf, unsigned int old_length, unsigned int size); -static void _ecore_dbus_message_increase_length(unsigned char **buf, unsigned int new_length); -/* padding functions */ -static void _ecore_dbus_message_padding(unsigned char **buf, unsigned int *old_length, int size); -static void _ecore_dbus_message_padding_skip(unsigned int *old_length, int size); -/* appending/reading functions */ -static void _ecore_dbus_message_append_nbytes(unsigned char *buf, unsigned char *data, unsigned int data_length); -static void _ecore_dbus_message_append_byte(unsigned char *buf, unsigned char c); -static void _ecore_dbus_message_append_uint32(unsigned char *buf, unsigned int i); -static unsigned char _ecore_dbus_message_read_byte(unsigned char *buf); -static unsigned int _ecore_dbus_message_read_uint32(unsigned char *buf); /* message functions */ -static Ecore_DBus_Message *_ecore_dbus_message_new(Ecore_DBus_Server *svr); -static Ecore_DBus_Message_Field *_ecore_dbus_message_new_field(Ecore_DBus_Data_Type type, unsigned int offset); static void _ecore_dbus_message_free(void *data, void *ev); -/* marshal functions */ -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_byte(unsigned char **buf, unsigned int *old_length, unsigned char c); -/* -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_boolean(unsigned char **buf, unsigned int *old_length, uint32_t i); -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_int16(unsigned char **buf, unsigned int *old_length, int16_t i); -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_uint16(unsigned char **buf, unsigned int *old_length, uint16_t i); -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_int32(unsigned char **buf, unsigned int *old_length, int32_t i); -*/ -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_uint32(unsigned char **buf, unsigned int *old_length, uint32_t i); -/* -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_int64(unsigned char **buf, unsigned int *old_length, int64_t i); -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_uint64(unsigned char **buf, unsigned int *old_length, uint64_t i); -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_double(unsigned char **buf, unsigned int *old_length, double i); -*/ -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_string(unsigned char **buf, unsigned int *old_length, char *str); -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_object_path(unsigned char **buf, unsigned int *old_length, char *str); -/* -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_signature(unsigned char **buf, unsigned int *old_length, char *str); -*/ -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_array(unsigned char **msg, unsigned int *old_length, Ecore_DBus_Data_Type contained_type); -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_struct_begin(unsigned char **msg, unsigned int *old_length); -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_struct_end(unsigned char **msg, unsigned int *old_length); -/* - * FIXME: These aren't correct ! -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_variant(unsigned char **msg, unsigned int *old_length); -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_dict_entry(unsigned char **msg, unsigned int *old_length); -*/ -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_data(unsigned char **buf, unsigned int *old_length, Ecore_DBus_Data_Type type, void *data); -static Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_custom_header(unsigned char **buf, unsigned int *old_length, unsigned int code, Ecore_DBus_Data_Type type, void *data); -/* unmarshal functions */ -/* -static Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_byte(unsigned char *buf, unsigned int *old_length); -static Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_boolean(unsigned char *buf, unsigned int *old_length); -static Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_int16(unsigned char *buf, unsigned int *old_length); -static Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_uint16(unsigned char *buf, unsigned int *old_length); -*/ -static Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_int32(unsigned char *buf, unsigned int *old_length); -static Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_uint32(unsigned char *buf, unsigned int *old_length); -/* -static Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_int64(unsigned char *buf, unsigned int *old_length); -static Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_uint64(unsigned char *buf, unsigned int *old_length); -static Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_double(unsigned char *buf, unsigned int *old_length); -*/ -static Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_string(unsigned char *buf, unsigned int *old_length); -static Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_object_path(unsigned char *buf, unsigned int *old_length); -static Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_signature(unsigned char *buf, unsigned int *old_length); -/* - * FIXME: These aren't correct! -static Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_array(unsigned char *buf, unsigned int *old_length); -static Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_variant(unsigned char *buf, unsigned int *old_length); -static Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_struct(unsigned char *buf, unsigned int *old_length); -static Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_dict_entry(unsigned char *buf, unsigned int *old_length); -*/ -static Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_data(unsigned char *buf, unsigned int *old_length); -static Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_custom_header(unsigned char *buf, unsigned int *old_length); -static Ecore_DBus_Message *_ecore_dbus_message_unmarshal(Ecore_DBus_Server *svr, unsigned char *message); /* header functions */ static void _ecore_dbus_message_common_header(Ecore_DBus_Message *msg, int type, int flags); static void *_ecore_dbus_field_get(unsigned char *buf, Ecore_DBus_Message_Field *f); @@ -140,7 +67,6 @@ static Ecore_DBus_Message_Field *_ecore_dbus_message_print_header_field(Ecore_DBus_Message_Field *f, unsigned char *buf); /*static void _ecore_dbus_message_print_fields(Ecore_DBus_Message_Field *f);*/ /*static void _ecore_dbus_message_print_raw(unsigned char *msg, unsigned int msg_len);*/ -static int _ecore_dbus_alignment_get(Ecore_DBus_Data_Type type); /* local variables */ @@ -455,92 +381,9 @@ /* private functions */ -/* length functions */ - -static void -_ecore_dbus_message_append_length(unsigned char **buf, - unsigned int old_length, unsigned int size) -{ - *buf = realloc(*buf, old_length + size); - memset(*buf + old_length, 0, size); -} - -static void -_ecore_dbus_message_increase_length(unsigned char **buf, - unsigned int new_length) -{ - *buf = realloc(*buf, new_length); -} - -/* padding functions */ - -static void -_ecore_dbus_message_padding(unsigned char **buf, unsigned int *old_length, int size) -{ - unsigned int padding; - - padding = *old_length % size; - if (padding != 0) - { - padding = size - padding; - _ecore_dbus_message_append_length(buf, *old_length, padding); - } - *old_length += padding; -} - -static void -_ecore_dbus_message_padding_skip(unsigned int *old_length, int size) -{ - unsigned int padding; - - padding = *old_length % size; - if (padding != 0) - *old_length += size - padding; - return; -} - -/* appending/reading functions */ - -static void -_ecore_dbus_message_append_nbytes(unsigned char *buf, unsigned char *data, - unsigned int data_length) -{ - memcpy(buf, data, data_length); -} - -static void -_ecore_dbus_message_append_byte(unsigned char *buf, unsigned char c) -{ - *buf = c; -} - -static void -_ecore_dbus_message_append_uint32(unsigned char *buf, unsigned int i) -{ - unsigned char *c; - - c = (unsigned char *)&i; - *(buf + 0) = *(c + 0); - *(buf + 1) = *(c + 1); - *(buf + 2) = *(c + 2); - *(buf + 3) = *(c + 3); -} - -static unsigned char -_ecore_dbus_message_read_byte(unsigned char *buf) -{ - return *(unsigned char *)buf; -} - -static unsigned int -_ecore_dbus_message_read_uint32(unsigned char *buf) -{ - return *(unsigned int *)buf; -} - /* message functions */ -static Ecore_DBus_Message * +Ecore_DBus_Message * _ecore_dbus_message_new(Ecore_DBus_Server *svr) { Ecore_DBus_Message *msg; @@ -560,7 +403,7 @@ return msg; } -static Ecore_DBus_Message_Field * +Ecore_DBus_Message_Field * _ecore_dbus_message_new_field(Ecore_DBus_Data_Type type, unsigned int offset) { Ecore_DBus_Message_Field *f; @@ -601,484 +444,6 @@ free(msg); } -/* marshal functions */ - -static Ecore_DBus_Message_Field * -_ecore_dbus_message_marshal_byte(unsigned char **buf, unsigned int *old_length, - unsigned char c) -{ - Ecore_DBus_Message_Field *f; - - /* increase the length + 1, old_length changed */ - _ecore_dbus_message_increase_length(buf, *old_length + 1); - /* append the data type */ - _ecore_dbus_message_append_byte(*buf + *old_length, ECORE_DBUS_DATA_TYPE_BYTE); - *old_length += 1; - /* increase the length + 1, old_length changed */ - _ecore_dbus_message_increase_length(buf, *old_length + 1); - /* append c at cur_length */ - _ecore_dbus_message_append_byte(*buf + *old_length, c); - /* create field */ - f = _ecore_dbus_message_new_field(ECORE_DBUS_DATA_TYPE_BYTE, *old_length); - *old_length += 1; - return f; -} - -static Ecore_DBus_Message_Field * -_ecore_dbus_message_marshal_uint32(unsigned char **buf, - unsigned int *old_length, - unsigned int i) -{ - Ecore_DBus_Message_Field *f; - - /* increase the length + 1, old_length changed */ - _ecore_dbus_message_increase_length(buf, *old_length + 1); - /* append the data type */ - _ecore_dbus_message_append_byte(*buf + *old_length, ECORE_DBUS_DATA_TYPE_UINT32); - *old_length += 1; - _ecore_dbus_message_padding(buf, old_length, 4); - _ecore_dbus_message_increase_length(buf, *old_length + 4); - _ecore_dbus_message_append_uint32(*buf + *old_length, i); - f = _ecore_dbus_message_new_field(ECORE_DBUS_DATA_TYPE_UINT32, *old_length); - *old_length += 4; - return f; -} - -static Ecore_DBus_Message_Field * -_ecore_dbus_message_marshal_object_path(unsigned char **buf, unsigned int *old_length, - char *str) -{ - int str_len; - Ecore_DBus_Message_Field *f; - - /* increase the length + 1, old_length changed */ - _ecore_dbus_message_increase_length(buf, *old_length + 1); - /* append the data type */ - _ecore_dbus_message_append_byte(*buf + *old_length, ECORE_DBUS_DATA_TYPE_OBJECT_PATH); - *old_length += 1; - - str_len = strlen(str); - _ecore_dbus_message_padding(buf, old_length, 4); - _ecore_dbus_message_increase_length(buf, *old_length + 4); - f = _ecore_dbus_message_new_field(ECORE_DBUS_DATA_TYPE_OBJECT_PATH, *old_length); - _ecore_dbus_message_append_uint32(*buf + *old_length, str_len); - *old_length += 4; - /* + 1 for \0 */ - _ecore_dbus_message_increase_length(buf, *old_length + str_len + 1); - _ecore_dbus_message_append_nbytes(*buf + *old_length, (unsigned char *)str, str_len + 1); - *old_length += str_len + 1; - - return f; -} - -static Ecore_DBus_Message_Field * -_ecore_dbus_message_marshal_string(unsigned char **buf, - unsigned int *old_length, char *str) -{ - int str_len; - Ecore_DBus_Message_Field *f; - - /* increase the length + 1, new_length changed */ - _ecore_dbus_message_increase_length(buf, *old_length + 1); - /* append the data type */ - _ecore_dbus_message_append_byte(*buf + *old_length, ECORE_DBUS_DATA_TYPE_STRING); - *old_length += 1; - - str_len = strlen(str); - _ecore_dbus_message_padding(buf, old_length, 4); - _ecore_dbus_message_increase_length(buf, *old_length + 4); - f = _ecore_dbus_message_new_field(ECORE_DBUS_DATA_TYPE_STRING, *old_length); - _ecore_dbus_message_append_uint32(*buf + *old_length, str_len); - *old_length += 4; - /* + 1 for \0 */ - _ecore_dbus_message_increase_length(buf, *old_length + str_len + 1); - _ecore_dbus_message_append_nbytes(*buf + *old_length, (unsigned char *)str, str_len + 1); - *old_length += str_len + 1; - return f; -} - -static Ecore_DBus_Message_Field * -_ecore_dbus_message_marshal_array(unsigned char **buf, unsigned int *old_length, - Ecore_DBus_Data_Type contained_type) -{ - Ecore_DBus_Message_Field *f; - - /* increase the length with 1 + contained length */ - _ecore_dbus_message_increase_length(buf, *old_length + 1); - /* append the data type */ - _ecore_dbus_message_append_byte(*buf + *old_length, ECORE_DBUS_DATA_TYPE_ARRAY); - *old_length += 1; - - /* for the array length value */ - _ecore_dbus_message_padding(buf, old_length, 4); - _ecore_dbus_message_increase_length(buf, *old_length + 4); - f = _ecore_dbus_message_new_field(ECORE_DBUS_DATA_TYPE_ARRAY, *old_length); - *old_length += 4; - - /* pad for contained type */ - _ecore_dbus_message_padding(buf, old_length, _ecore_dbus_alignment_get(contained_type)); - - return f; -} - -static Ecore_DBus_Message_Field * -_ecore_dbus_message_marshal_struct_begin(unsigned char **buf, unsigned int *old_length) -{ - Ecore_DBus_Message_Field *f; - - /* increase the length with 1 */ - _ecore_dbus_message_increase_length(buf, *old_length + 1); - /* append the data type */ - _ecore_dbus_message_append_byte(*buf + *old_length, ECORE_DBUS_DATA_TYPE_STRUCT_BEGIN); - *old_length += 1; - - /* padding */ - _ecore_dbus_message_padding(buf, old_length, 8); - f = _ecore_dbus_message_new_field(ECORE_DBUS_DATA_TYPE_STRUCT, *old_length); - - return f; -} - -static Ecore_DBus_Message_Field * -_ecore_dbus_message_marshal_struct_end(unsigned char **buf, unsigned int *old_length) -{ - Ecore_DBus_Message_Field *f; - - /* increase the length with 1 */ - _ecore_dbus_message_increase_length(buf, *old_length + 1); - /* append the data type */ - _ecore_dbus_message_append_byte(*buf + *old_length, ECORE_DBUS_DATA_TYPE_STRUCT_END); - *old_length += 1; - - f = _ecore_dbus_message_new_field(ECORE_DBUS_DATA_TYPE_STRUCT, *old_length); - - return f; -} - -static Ecore_DBus_Message_Field * -_ecore_dbus_message_marshal_data(unsigned char **buf, unsigned int *old_length, - Ecore_DBus_Data_Type type, void *data) -{ - Ecore_DBus_Message_Field *f = NULL; - - _ecore_dbus_message_increase_length(buf, *old_length + 1); - /* append the signature length */ - _ecore_dbus_message_append_byte(*buf + *old_length, 1); - *old_length += 1; - - switch (type) - { - case ECORE_DBUS_DATA_TYPE_UINT32: - f = _ecore_dbus_message_marshal_uint32(buf, old_length, - *(unsigned int *)data); - break; - case ECORE_DBUS_DATA_TYPE_STRING: - f = _ecore_dbus_message_marshal_string(buf, old_length, - (char *)data); - break; - case ECORE_DBUS_DATA_TYPE_OBJECT_PATH: - f = _ecore_dbus_message_marshal_object_path(buf, old_length, - (char *)data); - break; - case ECORE_DBUS_DATA_TYPE_INVALID: - case ECORE_DBUS_DATA_TYPE_BYTE: - case ECORE_DBUS_DATA_TYPE_BOOLEAN: - case ECORE_DBUS_DATA_TYPE_INT16: - case ECORE_DBUS_DATA_TYPE_UINT16: - case ECORE_DBUS_DATA_TYPE_INT32: - case ECORE_DBUS_DATA_TYPE_INT64: - case ECORE_DBUS_DATA_TYPE_UINT64: - case ECORE_DBUS_DATA_TYPE_DOUBLE: - case ECORE_DBUS_DATA_TYPE_SIGNATURE: - 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: -#if 0 - default: -#endif - printf("[ecore_dbus] unknown/unhandled data type %c\n", type); - break; - } - return f; -} - -static Ecore_DBus_Message_Field * -_ecore_dbus_message_marshal_custom_header(unsigned char **buf, - unsigned int *old_length, - unsigned int code, - Ecore_DBus_Data_Type type, void *data) -{ - Ecore_DBus_Message_Field *f; - - _ecore_dbus_message_padding(buf, old_length, 8); - /* increase the length + 1, old_length changed */ - _ecore_dbus_message_increase_length(buf, *old_length + 1); - /* append header field name at cur_length */ - _ecore_dbus_message_append_byte(*buf + *old_length, code); - *old_length += 1; - - /* marshal header field data */ - f = _ecore_dbus_message_marshal_data(buf, old_length, type, data); - f->hfield = code; - return f; -} - -/* unmarshal functions */ - -static Ecore_DBus_Message_Field * -_ecore_dbus_message_unmarshal_int32(unsigned char *buf, - unsigned int *old_length) -{ - Ecore_DBus_Message_Field *f; - - _ecore_dbus_message_padding_skip(old_length, 4); - f = _ecore_dbus_message_new_field(ECORE_DBUS_DATA_TYPE_INT32, *old_length); - *old_length += 4; - return f; -} - -static Ecore_DBus_Message_Field * -_ecore_dbus_message_unmarshal_uint32(unsigned char *buf, - unsigned int *old_length) -{ - Ecore_DBus_Message_Field *f; - - _ecore_dbus_message_padding_skip(old_length, 4); - f = _ecore_dbus_message_new_field(ECORE_DBUS_DATA_TYPE_UINT32, *old_length); - *old_length += 4; - return f; -} - -static Ecore_DBus_Message_Field * -_ecore_dbus_message_unmarshal_string(unsigned char *buf, - unsigned int *old_length) -{ - Ecore_DBus_Message_Field *f; - unsigned int str_len; - - _ecore_dbus_message_padding_skip(old_length, 4); - f = _ecore_dbus_message_new_field(ECORE_DBUS_DATA_TYPE_STRING, *old_length); - str_len = _ecore_dbus_message_read_uint32(buf + *old_length); - *old_length += 4; - *old_length += str_len + 1; - return f; -} - -static Ecore_DBus_Message_Field * -_ecore_dbus_message_unmarshal_object_path(unsigned char *buf, unsigned int *old_length) -{ - Ecore_DBus_Message_Field *f; - unsigned int str_len; - - _ecore_dbus_message_padding_skip(old_length, 4); - f = _ecore_dbus_message_new_field(ECORE_DBUS_DATA_TYPE_OBJECT_PATH, - *old_length); - str_len = _ecore_dbus_message_read_uint32(buf + *old_length); - *old_length += 4; - *old_length += str_len + 1; - return f; -} - -static Ecore_DBus_Message_Field * -_ecore_dbus_message_unmarshal_signature(unsigned char *buf, - unsigned int *old_length) -{ - Ecore_DBus_Message_Field *f; - unsigned int str_len; - - f = _ecore_dbus_message_new_field(ECORE_DBUS_DATA_TYPE_SIGNATURE, *old_length); - str_len = _ecore_dbus_message_read_byte(buf + *old_length); - *old_length += 1; - *old_length += str_len + 1; - return f; -} - -static Ecore_DBus_Message_Field * -_ecore_dbus_message_unmarshal_data(unsigned char *buf, unsigned int *old_length) -{ - Ecore_DBus_Message_Field *f = NULL; - Ecore_DBus_Data_Type type; - - type = _ecore_dbus_message_read_byte(buf + *old_length); - *old_length += 1; - - switch (type) - { - case ECORE_DBUS_DATA_TYPE_INT32: - f = _ecore_dbus_message_unmarshal_int32(buf, old_length); - break; - case ECORE_DBUS_DATA_TYPE_UINT32: - f = _ecore_dbus_message_unmarshal_uint32(buf, old_length); - break; - case ECORE_DBUS_DATA_TYPE_STRING: - f = _ecore_dbus_message_unmarshal_string(buf, old_length); - break; - case ECORE_DBUS_DATA_TYPE_OBJECT_PATH: - f = _ecore_dbus_message_unmarshal_object_path(buf, old_length); - break; - case ECORE_DBUS_DATA_TYPE_SIGNATURE: - f = _ecore_dbus_message_unmarshal_signature(buf, old_length); - break; - case ECORE_DBUS_DATA_TYPE_INVALID: - case ECORE_DBUS_DATA_TYPE_BYTE: - case ECORE_DBUS_DATA_TYPE_BOOLEAN: - case ECORE_DBUS_DATA_TYPE_INT16: - case ECORE_DBUS_DATA_TYPE_UINT16: - case ECORE_DBUS_DATA_TYPE_INT64: - case ECORE_DBUS_DATA_TYPE_UINT64: - case ECORE_DBUS_DATA_TYPE_DOUBLE: - 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: -#if 0 - default: -#endif - printf("[ecore_dbus] unknown/unhandled data type %c\n", type); - break; - } - return f; -} - -static Ecore_DBus_Message_Field * -_ecore_dbus_message_unmarshal_custom_header(unsigned char *buf, - unsigned int *old_length) -{ - Ecore_DBus_Message_Field *f; - unsigned int code, length; - - _ecore_dbus_message_padding_skip(old_length, 8); - /* get header field name at cur_length */ - code = _ecore_dbus_message_read_byte(buf + *old_length); - *old_length += 1; - /* Read signature length */ - length = _ecore_dbus_message_read_byte(buf + *old_length); - if (length != 1) - fprintf(stderr, "[ecore_dbus]: Wrong signature length in header\n"); - *old_length += 1; - - /* unmarshal header field data */ - f = _ecore_dbus_message_unmarshal_data(buf, old_length); - if (f) f->hfield = code; - return f; -} - -static Ecore_DBus_Message * -_ecore_dbus_message_unmarshal(Ecore_DBus_Server *svr, unsigned char *message) -{ - Ecore_DBus_Message_Field *f, *sig; - - /* init */ - Ecore_DBus_Message *msg = _ecore_dbus_message_new(svr); - - printf("[ecore_dbus] unmarshaling\n"); - - /* message header */ - - /* common fields */ - msg->byte_order = *(message + 0); - msg->type = *(message + 1); - msg->flags = *(message + 2); - msg->protocol = *(message + 3); - msg->blength = *(unsigned int *)(message + 4); - msg->serial = *(unsigned int *)(message + 8); - msg->hlength = *(unsigned int *)(message + 12) + 16; - _ecore_dbus_message_padding_skip(&(msg->hlength), 8); - if (msg->type == ECORE_DBUS_MESSAGE_TYPE_INVALID) - { - printf("[ecore_dbus] message type invalid\n"); - return NULL; - } - msg->hpos += 16; - /* memcpy the header part */ - _ecore_dbus_message_increase_length(&msg->header, msg->hlength); - _ecore_dbus_message_append_nbytes(msg->header, message, msg->hlength); - /* custom fields */ - sig = NULL; - while ((msg->hpos + 8 - (msg->hpos % 8)) < msg->hlength) - { - f = _ecore_dbus_message_unmarshal_custom_header(message, &msg->hpos); - if (f) - { - msg->header_fields = _ecore_list2_append(msg->header_fields, f); - if (f->type == ECORE_DBUS_DATA_TYPE_SIGNATURE) - sig = f; - } - } - msg->hpos = msg->hlength; - message += msg->hlength; - - /* message body */ - if (sig) - { - unsigned char *s; - Ecore_DBus_Data_Type type; - - _ecore_dbus_message_increase_length(&msg->body, msg->blength); - _ecore_dbus_message_append_nbytes(msg->body, message, msg->blength); - - s = msg->header + sig->offset + 2; - while (*s) - { - f = NULL; - printf("body: %c\n", *s); - type = *s; - switch (type) - { - case ECORE_DBUS_DATA_TYPE_INT32: - f = _ecore_dbus_message_unmarshal_int32(msg->body, &(msg->bpos)); - break; - case ECORE_DBUS_DATA_TYPE_UINT32: - f = _ecore_dbus_message_unmarshal_uint32(msg->body, &(msg->bpos)); - break; - case ECORE_DBUS_DATA_TYPE_STRING: - f = _ecore_dbus_message_unmarshal_string(msg->body, &(msg->bpos)); - break; - case ECORE_DBUS_DATA_TYPE_OBJECT_PATH: - f = _ecore_dbus_message_unmarshal_object_path(msg->body, &(msg->bpos)); - break; - case ECORE_DBUS_DATA_TYPE_SIGNATURE: - f = _ecore_dbus_message_unmarshal_signature(msg->body, &(msg->bpos)); - break; - case ECORE_DBUS_DATA_TYPE_INVALID: - case ECORE_DBUS_DATA_TYPE_BYTE: - case ECORE_DBUS_DATA_TYPE_BOOLEAN: - case ECORE_DBUS_DATA_TYPE_INT16: - case ECORE_DBUS_DATA_TYPE_UINT16: - case ECORE_DBUS_DATA_TYPE_INT64: - case ECORE_DBUS_DATA_TYPE_UINT64: - case ECORE_DBUS_DATA_TYPE_DOUBLE: - 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: -#if 0 - default: -#endif - printf("[ecore_dbus] unknown/unhandled data type %c\n", type); - break; - } - if (f) - msg->body_fields = _ecore_list2_append(msg->body_fields, f); - s++; - } - } - return msg; -} - /* header functions */ static void @@ -1093,7 +458,7 @@ /* flags (1) 0x1 = no reply expected, 0x2 auto activiation */ msg->header[2] = msg->flags = 0x0; /* protocol (1) */ - msg->header[3] = msg->protocol = 0x1; + msg->header[3] = msg->protocol = ECORE_DBUS_MAJOR_PROTOCOL_VERSION; /* autoincrement the client_serial (0 is invalid) */ msg->ref_server->cnt_msg++; @@ -1449,35 +814,3 @@ printf("[ecore_dbus] end raw message\n"); } */ - -static int -_ecore_dbus_alignment_get(Ecore_DBus_Data_Type type) -{ - switch (type) - { - case ECORE_DBUS_DATA_TYPE_BYTE: - case ECORE_DBUS_DATA_TYPE_SIGNATURE: - case ECORE_DBUS_DATA_TYPE_VARIANT: - return 1; - case ECORE_DBUS_DATA_TYPE_INT16: - case ECORE_DBUS_DATA_TYPE_UINT16: - return 2; - case ECORE_DBUS_DATA_TYPE_BOOLEAN: - case ECORE_DBUS_DATA_TYPE_INT32: - case ECORE_DBUS_DATA_TYPE_UINT32: - case ECORE_DBUS_DATA_TYPE_STRING: - case ECORE_DBUS_DATA_TYPE_OBJECT_PATH: - case ECORE_DBUS_DATA_TYPE_ARRAY: - return 4; - case ECORE_DBUS_DATA_TYPE_INT64: - case ECORE_DBUS_DATA_TYPE_UINT64: - case ECORE_DBUS_DATA_TYPE_DOUBLE: - return 8; - case ECORE_DBUS_DATA_TYPE_STRUCT: - case ECORE_DBUS_DATA_TYPE_DICT_ENTRY: - return 8; - default: - fprintf(stderr, "Ecore_DBus: Alignment requested for invalid data type!\n"); - return 0; - } -} =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_dbus/ecore_dbus_private.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- ecore_dbus_private.h 21 Jul 2006 15:56:42 -0000 1.3 +++ ecore_dbus_private.h 21 Jul 2006 22:04:09 -0000 1.4 @@ -73,6 +73,76 @@ Ecore_DBus_Auth_Transaction transactions[5]; }; +/* ecore_dbus_utils.c */ +void _ecore_dbus_message_append_length(unsigned char **buf, unsigned int old_length, unsigned int size); +void _ecore_dbus_message_increase_length(unsigned char **buf, unsigned int new_length); +void _ecore_dbus_message_padding(unsigned char **buf, unsigned int *old_length, int size); +void _ecore_dbus_message_padding_skip(unsigned int *old_length, int size); +void _ecore_dbus_message_append_nbytes(unsigned char *buf, unsigned char *data, unsigned int data_length); +void _ecore_dbus_message_append_byte(unsigned char *buf, unsigned char c); +void _ecore_dbus_message_append_uint32(unsigned char *buf, unsigned int i); +unsigned char _ecore_dbus_message_read_byte(unsigned char *buf); +unsigned int _ecore_dbus_message_read_uint32(unsigned char *buf); + +/* ecore_dbus.c */ +Ecore_DBus_Message *_ecore_dbus_message_new(Ecore_DBus_Server *svr); +Ecore_DBus_Message_Field *_ecore_dbus_message_new_field(Ecore_DBus_Data_Type type, unsigned int offset); +/* ecore_dbus_marshal.c */ +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_byte(unsigned char **buf, unsigned int *old_length, unsigned char c); +/* +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_boolean(unsigned char **buf, unsigned int *old_length, uint32_t i); +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_int16(unsigned char **buf, unsigned int *old_length, int16_t i); +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_uint16(unsigned char **buf, unsigned int *old_length, uint16_t i); +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_int32(unsigned char **buf, unsigned int *old_length, int32_t i); +*/ +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_uint32(unsigned char **buf, unsigned int *old_length, uint32_t i); +/* +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_int64(unsigned char **buf, unsigned int *old_length, int64_t i); +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_uint64(unsigned char **buf, unsigned int *old_length, uint64_t i); +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_double(unsigned char **buf, unsigned int *old_length, double i); +*/ +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_string(unsigned char **buf, unsigned int *old_length, char *str); +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_object_path(unsigned char **buf, unsigned int *old_length, char *str); +/* +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_signature(unsigned char **buf, unsigned int *old_length, char *str); +*/ +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_array(unsigned char **msg, unsigned int *old_length, Ecore_DBus_Data_Type contained_type); +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_struct_begin(unsigned char **msg, unsigned int *old_length); +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_struct_end(unsigned char **msg, unsigned int *old_length); +/* + * FIXME: These aren't correct ! +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_variant(unsigned char **msg, unsigned int *old_length); +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_dict_entry(unsigned char **msg, unsigned int *old_length); +*/ +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_data(unsigned char **buf, unsigned int *old_length, Ecore_DBus_Data_Type type, void *data); +Ecore_DBus_Message_Field *_ecore_dbus_message_marshal_custom_header(unsigned char **buf, unsigned int *old_length, unsigned int code, Ecore_DBus_Data_Type type, void *data); +/* ecore_dbus_unmarshal.c */ +/* +Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_byte(unsigned char *buf, unsigned int *old_length); +Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_boolean(unsigned char *buf, unsigned int *old_length); +Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_int16(unsigned char *buf, unsigned int *old_length); +Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_uint16(unsigned char *buf, unsigned int *old_length); +*/ +Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_int32(unsigned char *buf, unsigned int *old_length); +Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_uint32(unsigned char *buf, unsigned int *old_length); +/* +Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_int64(unsigned char *buf, unsigned int *old_length); +Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_uint64(unsigned char *buf, unsigned int *old_length); +Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_double(unsigned char *buf, unsigned int *old_length); +*/ +Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_string(unsigned char *buf, unsigned int *old_length); +Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_object_path(unsigned char *buf, unsigned int *old_length); +Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_signature(unsigned char *buf, unsigned int *old_length); +/* + * FIXME: These aren't correct! +Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_array(unsigned char *buf, unsigned int *old_length); +Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_variant(unsigned char *buf, unsigned int *old_length); +Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_struct(unsigned char *buf, unsigned int *old_length); +Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_dict_entry(unsigned char *buf, unsigned int *old_length); +*/ +Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_data(unsigned char *buf, unsigned int *old_length); +Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_custom_header(unsigned char *buf, unsigned int *old_length); +Ecore_DBus_Message *_ecore_dbus_message_unmarshal(Ecore_DBus_Server *svr, unsigned char *message); /* Errors */ #define DBUS_ERROR_FAILED "org.freedesktop.DBus.Error.Failed" ------------------------------------------------------------------------- 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