forked from enlightenment/efl
add simple object/method creation API
SVN revision: 26171
This commit is contained in:
parent
1463d31ea0
commit
4e1d08d200
|
@ -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
|
||||
|
|
|
@ -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 = \
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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 *
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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++;
|
||||
|
|
Loading…
Reference in New Issue