add simple object/method creation API

SVN revision: 26171
This commit is contained in:
rephorm 2006-09-27 00:00:59 +00:00 committed by rephorm
parent 1463d31ea0
commit 4e1d08d200
6 changed files with 57 additions and 4 deletions

View File

@ -46,6 +46,33 @@ extern "C" {
typedef struct _Ecore_DBus_Message_Field Ecore_DBus_Message_Field;
typedef struct _Ecore_DBus_Address Ecore_DBus_Address;
typedef void (*Ecore_DBus_Method_Call_Cb) (Ecore_DBus_Event_Method_Call *event);
typedef struct _Ecore_DBus_Object Ecore_DBus_Object;
typedef struct _Ecore_DBus_Object_Method Ecore_DBus_Object_Method;
typedef struct _Ecore_DBus_Object_Registry Ecore_DBus_Object_Registry;
struct _Ecore_DBus_Object
{
Ecore_DBus_Server *server;
char *path; /* dbus path name */
Ecore_List *methods;
};
struct _Ecore_DBus_Object_Method
{
Ecore_DBus_Object *object;
char *interface;
char *name;
Ecore_DBus_Method_Call_Cb func;
};
struct _Ecore_DBus_Object_Registry
{
Ecore_Hash *objects;
};
typedef enum _Ecore_DBus_Message_Type
{
ECORE_DBUS_MESSAGE_TYPE_INVALID,
@ -217,6 +244,14 @@ extern "C" {
EAPI Ecore_DBus_Server *ecore_dbus_address_list_connect(Ecore_List *addrs, const void *data);
EAPI Ecore_DBus_Server *ecore_dbus_address_connect(Ecore_DBus_Address *addr, const void *data);
/* object */
EAPI Ecore_DBus_Object *ecore_dbus_object_add(Ecore_DBus_Server *svr, const char *path);
EAPI void ecore_dbus_object_free(Ecore_DBus_Object *obj);
EAPI Ecore_DBus_Object_Method *ecore_dbus_object_method_add(Ecore_DBus_Object *obj, const char *interface, const char *method_name, Ecore_DBus_Method_Call_Cb func);
EAPI void ecore_dbus_object_method_remove(Ecore_DBus_Object *obj, Ecore_DBus_Object_Method *method);
EAPI void ecore_dbus_object_method_free(Ecore_DBus_Object_Method *method);
#ifdef __cplusplus
}
#endif

View File

@ -27,6 +27,7 @@ ecore_dbus_unmarshal.c \
ecore_dbus_methods.c \
ecore_dbus_utils.c \
ecore_dbus_address.c \
ecore_dbus_object.c \
ecore_dbus_private.h
libecore_dbus_la_LIBADD = \

View File

@ -105,6 +105,7 @@ ecore_dbus_init(void)
handler[i++] = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DATA,
_ecore_dbus_event_server_data, NULL);
ecore_dbus_objects_init();
return init_count;
}
@ -115,6 +116,7 @@ ecore_dbus_shutdown(void)
if (--init_count != 0) return init_count;
ecore_dbus_objects_shutdown();
/* FIXME: Delete servers */
for (i = 0; i < 3; i++)
@ -231,6 +233,9 @@ ecore_dbus_server_connect(Ecore_Con_Type con_type, const char *name, int port,
svr->auth_type_transaction = 0;
svr->messages = ecore_hash_new(ecore_direct_hash, ecore_direct_compare);
ecore_hash_set_free_value(svr->messages, ECORE_FREE_CB(_ecore_dbus_message_free));
svr->objects = ecore_hash_new(ecore_str_hash, ecore_str_compare);
ecore_hash_set_free_key(svr->objects, free);
ecore_hash_set_free_value(svr->objects, ECORE_FREE_CB(ecore_dbus_object_free));
servers = _ecore_list2_append(servers, svr);
return svr;
@ -243,6 +248,7 @@ ecore_dbus_server_del(Ecore_DBus_Server *svr)
servers = _ecore_list2_remove(servers, svr);
if (svr->unique_name) free(svr->unique_name);
ecore_hash_destroy(svr->messages);
ecore_hash_destroy(svr->objects);
free(svr);
}

View File

@ -298,6 +298,12 @@ ecore_dbus_message_body_field_get(Ecore_DBus_Message *m, unsigned int pos)
return NULL;
}
EAPI int
ecore_dbus_message_serial_get(Ecore_DBus_Message *m)
{
return m->serial;
}
/* message functions */
Ecore_DBus_Message *

View File

@ -67,6 +67,8 @@ struct _Ecore_DBus_Server
int cnt_msg;
Ecore_Hash *messages;
Ecore_Hash *objects;
char *unique_name;
};
@ -287,6 +289,9 @@ Ecore_DBus_Message_Field *_ecore_dbus_message_unmarshal_custom_header(unsigned c
*/
Ecore_DBus_Message *_ecore_dbus_message_unmarshal(Ecore_DBus_Server *svr, unsigned char *message, int size);
int ecore_dbus_object_method_dispatch(Ecore_DBus_Server *server, const char *path, const char *interface, const char *method);
/* Errors */
#define DBUS_ERROR_FAILED "org.freedesktop.DBus.Error.Failed"
#define DBUS_ERROR_NO_MEMORY "org.freedesktop.DBus.Error.NoMemory"

View File

@ -384,7 +384,7 @@ _ecore_dbus_message_unmarshal(Ecore_DBus_Server *svr, unsigned char *message, in
_ecore_dbus_message_append_bytes(msg, message, size);
msg->length = 12;
size -= 12;
/* Parse custom header */
/* Parse header fields */
if (!(arr = _ecore_dbus_message_unmarshal_array_begin(msg, ECORE_DBUS_DATA_TYPE_STRUCT, &size)))
{
printf("Could not parse custom header.\n");
@ -461,10 +461,10 @@ _ecore_dbus_message_unmarshal(Ecore_DBus_Server *svr, unsigned char *message, in
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
printf("[ecore_dbus] unhandled data type %c\n", type);
break;
default:
#endif
printf("[ecore_dbus] unknown/unhandled data type %c\n", type);
printf("[ecore_dbus] unknown data type %c\n", type);
break;
}
sig++;