Use callbacks for method return, not events

SVN revision: 24236
This commit is contained in:
sebastid 2006-07-27 15:06:13 +00:00 committed by sebastid
parent 2e58ad9aad
commit 0df8ad55dd
7 changed files with 165 additions and 142 deletions

View File

@ -7,13 +7,16 @@
static int ecore_dbus_event_server_add(void *udata, int ev_type, void *ev);
static int ecore_dbus_event_server_del(void *udata, int ev_type, void *ev);
static int ecore_dbus_event_server_method_return(void *udata, int ev_type, void *ev);
static void ecore_dbus_method_name_has_owner_cb(void *data, Ecore_DBus_Message_Type type,
Ecore_DBus_Method_Return *reply);
static void ecore_dbus_method_add_match_cb(void *data, Ecore_DBus_Message_Type type,
Ecore_DBus_Method_Return *reply);
static int ecore_dbus_event_server_signal(void *udata, int ev_type, void *ev);
static const char *event_type_get(Ecore_DBus_Message_Type type);
static int state = 0;
static Ecore_DBus_Server *svr = NULL;
int
@ -38,8 +41,6 @@ main(int argc, char **argv)
ecore_dbus_event_server_add, NULL);
handler[i++] = ecore_event_handler_add(ECORE_DBUS_EVENT_SERVER_DEL,
ecore_dbus_event_server_del, NULL);
handler[i++] = ecore_event_handler_add(ECORE_DBUS_EVENT_SERVER_METHOD_RETURN,
ecore_dbus_event_server_method_return, NULL);
handler[i++] = ecore_event_handler_add(ECORE_DBUS_EVENT_SERVER_SIGNAL,
ecore_dbus_event_server_signal, NULL);
@ -61,8 +62,8 @@ ecore_dbus_event_server_add(void *udata, int ev_type, void *ev)
event = ev;
printf("ecore_dbus_event_server_add\n");
ecore_dbus_method_name_has_owner(event->server, "org.freedesktop.Hal");
state++;
ecore_dbus_method_name_has_owner(event->server, "org.freedesktop.Hal",
ecore_dbus_method_name_has_owner_cb, NULL);
return 0;
}
@ -78,54 +79,58 @@ ecore_dbus_event_server_del(void *udata, int ev_type, void *ev)
return 0;
}
static int
ecore_dbus_event_server_method_return(void *udata, int ev_type, void *ev)
static void
ecore_dbus_method_name_has_owner_cb(void *data, Ecore_DBus_Message_Type type,
Ecore_DBus_Method_Return *reply)
{
Ecore_DBus_Event_Server_Data *event;
event = ev;
printf("ecore_dbus_event_server_method_return %s %s.%s\n", event_type_get(event->type),
event->header.interface,
event->header.member);
printf("state: %d\n", state);
if (state == 1)
unsigned int *exists;
if (type != ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN)
{
int *exists;
exists = event->args[0].value;
if ((!exists) || (!*exists))
{
printf("No hal\n");
ecore_main_loop_quit();
}
else
{
printf("Add listener for devices\n");
ecore_dbus_method_add_match(event->server,
"type='signal',"
"interface='org.freedesktop.Hal.Manager',"
"sender='org.freedesktop.Hal',"
"path='/org/freedesktop/Hal/Manager'");
state++;
}
ecore_main_loop_quit();
return;
}
else if (state == 2)
printf("ecore_dbus_event_server_method_return %s %s.%s\n", event_type_get(reply->type),
reply->header.interface,
reply->header.member);
exists = reply->args[0].value;
if ((!exists) || (!*exists))
{
printf("Should be listening for device changes!\n");
printf("No hal\n");
ecore_main_loop_quit();
}
else
{
printf("Hm: %s\n", event->header.member);
ecore_dbus_message_print(event->message);
printf("Add listener for devices\n");
ecore_dbus_method_add_match(reply->server,
"type='signal',"
"interface='org.freedesktop.Hal.Manager',"
"sender='org.freedesktop.Hal',"
"path='/org/freedesktop/Hal/Manager'",
ecore_dbus_method_add_match_cb, NULL);
}
return 0;
}
static void
ecore_dbus_method_add_match_cb(void *data, Ecore_DBus_Message_Type type,
Ecore_DBus_Method_Return *reply)
{
if (type != ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN)
{
ecore_main_loop_quit();
return;
}
printf("ecore_dbus_event_server_method_return %s %s.%s\n", event_type_get(reply->type),
reply->header.interface,
reply->header.member);
printf("Should be listening for device changes!\n");
}
static int
ecore_dbus_event_server_signal(void *udata, int ev_type, void *ev)
{
Ecore_DBus_Event_Server_Data *event;
Ecore_DBus_Event_Server_Signal *event;
event = ev;
printf("ecore_dbus_event_server_signal %s %s.%s\n", event_type_get(event->type),

View File

@ -7,7 +7,10 @@
static int ecore_dbus_event_server_add(void *udata, int ev_type, void *ev);
static int ecore_dbus_event_server_del(void *udata, int ev_type, void *ev);
static int ecore_dbus_event_server_method_return(void *udata, int ev_type, void *ev);
static void ecore_dbus_method_list_names_cb(void *data,
Ecore_DBus_Message_Type type,
Ecore_DBus_Method_Return *ev);
static const char * event_type_get(Ecore_DBus_Message_Type type);
@ -34,12 +37,10 @@ main(int argc, char **argv)
ecore_dbus_event_server_add, NULL);
handler[i++] = ecore_event_handler_add(ECORE_DBUS_EVENT_SERVER_DEL,
ecore_dbus_event_server_del, NULL);
handler[i++] = ecore_event_handler_add(ECORE_DBUS_EVENT_SERVER_METHOD_RETURN,
ecore_dbus_event_server_method_return, NULL);
ecore_main_loop_begin();
for (i = 0; i < 3; i++)
for (i = 0; i < 2; i++)
ecore_event_handler_del(handler[i]);
if (svr) ecore_dbus_server_del(svr);
@ -55,7 +56,7 @@ ecore_dbus_event_server_add(void *udata, int ev_type, void *ev)
event = ev;
printf("ecore_dbus_event_server_add\n");
ecore_dbus_method_list_names(event->server);
ecore_dbus_method_list_names(event->server, ecore_dbus_method_list_names_cb, NULL);
return 0;
}
@ -71,19 +72,19 @@ ecore_dbus_event_server_del(void *udata, int ev_type, void *ev)
return 0;
}
static int
ecore_dbus_event_server_method_return(void *udata, int ev_type, void *ev)
static void
ecore_dbus_method_list_names_cb(void *data,
Ecore_DBus_Message_Type type,
Ecore_DBus_Method_Return *reply)
{
Ecore_DBus_Event_Server_Data *event;
Ecore_List *names;
event = ev;
printf("ecore_dbus_event_server_data %s %s.%s\n", event_type_get(event->type),
event->header.interface,
event->header.member);
printf("ecore_dbus_event_server_data %s %s.%s\n", event_type_get(reply->type),
reply->header.interface,
reply->header.member);
printf("Got names %c\n", event->args[0].type);
names = event->args[0].value;
names = reply->args[0].value;
printf("Got names %c\n", reply->args[0].type);
if (names)
{
char *name;

View File

@ -36,8 +36,10 @@ extern "C" {
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_Event_Server_Data Ecore_DBus_Event_Server_Signal;
typedef struct _Ecore_DBus_Event_Server_Data Ecore_DBus_Method_Return;
typedef struct _Ecore_DBus_Message Ecore_DBus_Message;
typedef struct _Ecore_DBus_Message_Arg Ecore_DBus_Message_Arg;
typedef struct _Ecore_DBus_Message_Field Ecore_DBus_Message_Field;
typedef enum _Ecore_DBus_Type
@ -106,10 +108,10 @@ extern "C" {
const char *sender;
const char *signature;
} header;
Ecore_DBus_Event_Arg *args;
Ecore_DBus_Message_Arg *args;
};
struct _Ecore_DBus_Event_Arg
struct _Ecore_DBus_Message_Arg
{
Ecore_DBus_Data_Type type;
void *value;
@ -130,10 +132,10 @@ extern "C" {
EAPI extern int ECORE_DBUS_EVENT_SERVER_ADD;
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;
/* callback */
typedef void (*Ecore_DBus_Method_Cb)(void *data, Ecore_DBus_Message_Type type, Ecore_DBus_Method_Return *reply);
/* init */
EAPI int ecore_dbus_init(void);
@ -146,21 +148,28 @@ extern "C" {
/* message */
EAPI int ecore_dbus_server_send(Ecore_DBus_Server *svr, char *command, int length);
EAPI unsigned int ecore_dbus_message_new_method_call(Ecore_DBus_Server *svr, char *destination, char *path, char *interface, char *method, char *fmt, ...);
EAPI unsigned int ecore_dbus_message_new_method_call(Ecore_DBus_Server *svr,
char *destination, char *path,
char *interface, char *method,
void (*method_cb)(void *udata,
Ecore_DBus_Message_Type type,
Ecore_DBus_Event_Server_Data *data),
void *data,
char *fmt, ...);
EAPI void ecore_dbus_message_del(Ecore_DBus_Message *msg);
EAPI void ecore_dbus_message_print(Ecore_DBus_Message *msg);
EAPI void *ecore_dbus_message_header_field_get(Ecore_DBus_Message *msg, Ecore_DBus_Message_Header_Field field);
EAPI void *ecore_dbus_message_body_field_get(Ecore_DBus_Message *msg, unsigned int pos);
/* methods */
EAPI int ecore_dbus_method_hello(Ecore_DBus_Server *svr);
EAPI int ecore_dbus_method_list_names(Ecore_DBus_Server *svr);
EAPI int ecore_dbus_method_name_has_owner(Ecore_DBus_Server *svr, char *name);
EAPI int ecore_dbus_method_start_service_by_name(Ecore_DBus_Server *svr, char *name, unsigned int flags);
EAPI int ecore_dbus_method_get_name_owner(Ecore_DBus_Server *svr, char *name);
EAPI int ecore_dbus_method_get_connection_unix_user(Ecore_DBus_Server *svr, char *connection);
EAPI int ecore_dbus_method_add_match(Ecore_DBus_Server *svr, char *match);
EAPI int ecore_dbus_method_remove_match(Ecore_DBus_Server *svr, char *match);
EAPI int ecore_dbus_method_hello(Ecore_DBus_Server *svr, Ecore_DBus_Method_Cb method_cb, void *data);
EAPI int ecore_dbus_method_list_names(Ecore_DBus_Server *svr, Ecore_DBus_Method_Cb method_cb, void *data);
EAPI int ecore_dbus_method_name_has_owner(Ecore_DBus_Server *svr, char *name, Ecore_DBus_Method_Cb method_cb, void *data);
EAPI int ecore_dbus_method_start_service_by_name(Ecore_DBus_Server *svr, char *name, unsigned int flags, Ecore_DBus_Method_Cb method_cb, void *data);
EAPI int ecore_dbus_method_get_name_owner(Ecore_DBus_Server *svr, char *name, Ecore_DBus_Method_Cb method_cb, void *data);
EAPI int ecore_dbus_method_get_connection_unix_user(Ecore_DBus_Server *svr, char *connection, Ecore_DBus_Method_Cb method_cb, void *data);
EAPI int ecore_dbus_method_add_match(Ecore_DBus_Server *svr, char *match, Ecore_DBus_Method_Cb method_cb, void *data);
EAPI int ecore_dbus_method_remove_match(Ecore_DBus_Server *svr, char *match, Ecore_DBus_Method_Cb method_cb, void *data);
#ifdef __cplusplus
}

View File

@ -42,10 +42,7 @@
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 */
@ -63,6 +60,8 @@ 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);
static void _ecore_dbus_method_hello_cb(void *data, Ecore_DBus_Message_Type type, Ecore_DBus_Method_Return *reply);
/* local variables */
static const Ecore_DBus_Auth auths[] = {
@ -89,10 +88,7 @@ ecore_dbus_init(void)
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,
_ecore_dbus_event_server_add, NULL);
@ -320,7 +316,7 @@ _ecore_dbus_event_server_data(void *udata, int ev_type, void *ev)
ecore_dbus_server_send(svr, "BEGIN\r\n", 7);
svr->authenticated = 1;
/* Register on the bus */
svr->hello = ecore_dbus_method_hello(svr);
ecore_dbus_method_hello(svr, _ecore_dbus_method_hello_cb, svr);
}
else if (!strncmp(e->data, "DATA", 4))
{
@ -354,6 +350,8 @@ _ecore_dbus_event_server_data(void *udata, int ev_type, void *ev)
printf("[ecore_dbus] received server data, %d bytes\n", e->size);
while (e->size)
{
Ecore_DBus_Event_Server_Data *ev2;
msg = _ecore_dbus_message_unmarshal(svr, (unsigned char *)(e->data) + offset, e->size);
if (!msg) break;
offset += msg->length;
@ -362,56 +360,23 @@ _ecore_dbus_event_server_data(void *udata, int ev_type, void *ev)
msg->length, e->size);
//ecore_dbus_message_print(msg);
/* Trap known messages */
if (msg->type == ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN)
ev2 = _ecore_dbus_event_create(svr, msg);
if (!ev2) break;
if ((msg->type == ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN) ||
(msg->type == ECORE_DBUS_MESSAGE_TYPE_ERROR))
{
unsigned int *serial;
serial = ecore_dbus_message_header_field_get(msg, ECORE_DBUS_HEADER_FIELD_REPLY_SERIAL);
if (serial)
Ecore_DBus_Message *sent;
sent = ecore_hash_remove(svr->messages, (void *)(ev2->header.reply_serial));
if ((sent) && (sent->cb.func))
{
Ecore_DBus_Message *sent;
sent = ecore_hash_remove(svr->messages, (void *)(*serial));
if (*serial == svr->hello)
{
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);
}
_ecore_dbus_message_free(sent);
sent->cb.func(sent->cb.data, msg->type, ev2);
_ecore_dbus_event_server_data_free(NULL, ev2);
}
else
{
printf("Ecore_DBus: Method return without reply serial!\n");
printf("Ecore_DBus: Reply 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;
@ -421,10 +386,8 @@ _ecore_dbus_event_server_data(void *udata, int ev_type, void *ev)
}
else
{
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);
printf("Ecore_DBus: Unknown return type %d\n", msg->type);
_ecore_dbus_event_server_data_free(NULL, ev2);
}
}
}
@ -478,7 +441,7 @@ _ecore_dbus_event_create(Ecore_DBus_Server *svr, Ecore_DBus_Message *msg)
Ecore_DBus_Message_Field *f;
int i = 0;
ev->args = malloc(ecore_list_nodes(msg->fields) * sizeof(Ecore_DBus_Event_Arg));
ev->args = malloc(ecore_list_nodes(msg->fields) * sizeof(Ecore_DBus_Message_Arg));
ecore_list_goto_first(msg->fields);
while ((f = ecore_list_next(msg->fields)))
{
@ -490,3 +453,31 @@ _ecore_dbus_event_create(Ecore_DBus_Server *svr, Ecore_DBus_Message *msg)
return ev;
}
static void
_ecore_dbus_method_hello_cb(void *data, Ecore_DBus_Message_Type type, Ecore_DBus_Method_Return *reply)
{
Ecore_DBus_Event_Server_Add *svr_add;
Ecore_DBus_Server *svr;
char *name;
if (type != ECORE_DBUS_MESSAGE_TYPE_METHOD_RETURN)
{
printf("Ecore_DBus: Could not register on the message bus\n");
return;
}
svr = data;
name = reply->args[0].value;
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);
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);
}

View File

@ -19,6 +19,8 @@ static void _ecore_dbus_message_print_raw(Ecore_DBus_Message *msg);
EAPI unsigned int
ecore_dbus_message_new_method_call(Ecore_DBus_Server *svr, char *destination,
char *path, char *interface, char *method,
Ecore_DBus_Method_Cb method_cb,
void *data,
char *fmt, ...)
{
unsigned int body_start;
@ -29,6 +31,11 @@ ecore_dbus_message_new_method_call(Ecore_DBus_Server *svr, char *destination,
/* init message */
Ecore_DBus_Message *msg = _ecore_dbus_message_new(svr);
if (method_cb)
{
msg->cb.func = method_cb;
msg->cb.data = data;
}
/* common header */
_ecore_dbus_message_common_header(msg, ECORE_DBUS_MESSAGE_TYPE_METHOD_CALL, 0);

View File

@ -9,97 +9,102 @@
#include "ecore_dbus_private.h"
EAPI int
ecore_dbus_method_hello(Ecore_DBus_Server *svr)
ecore_dbus_method_hello(Ecore_DBus_Server *svr, Ecore_DBus_Method_Cb method_cb, void *data)
{
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*/,
"org.freedesktop.DBus" /*interface*/,
"Hello" /*method*/, NULL /*fmt*/);
"Hello" /*method*/,
method_cb, data,
NULL /*fmt*/);
}
EAPI int
ecore_dbus_method_list_names(Ecore_DBus_Server *svr)
ecore_dbus_method_list_names(Ecore_DBus_Server *svr, Ecore_DBus_Method_Cb method_cb, void *data)
{
return ecore_dbus_message_new_method_call(svr,
"org.freedesktop.DBus" /*destination*/,
"/org/freedesktop/DBus" /*path*/,
"org.freedesktop.DBus" /*interface*/,
"ListNames" /*method*/, NULL /*fmt*/);
"ListNames" /*method*/,
method_cb, data,
NULL /*fmt*/);
}
EAPI int
ecore_dbus_method_name_has_owner(Ecore_DBus_Server *svr, char *name)
ecore_dbus_method_name_has_owner(Ecore_DBus_Server *svr, char *name, Ecore_DBus_Method_Cb method_cb, void *data)
{
return ecore_dbus_message_new_method_call(svr,
"org.freedesktop.DBus" /*destination*/,
"/org/freedesktop/DBus" /*path*/,
"org.freedesktop.DBus" /*interface*/,
"NameHasOwner" /*method*/,
method_cb, data,
"s" /*fmt*/, name);
}
EAPI int
ecore_dbus_method_start_service_by_name(Ecore_DBus_Server *svr, char *name, unsigned int flags)
ecore_dbus_method_start_service_by_name(Ecore_DBus_Server *svr, char *name, unsigned int flags, Ecore_DBus_Method_Cb method_cb, void *data)
{
return ecore_dbus_message_new_method_call(svr,
"org.freedesktop.DBus" /*destination*/,
"/org/freedesktop/DBus" /*path*/,
"org.freedesktop.DBus" /*interface*/,
"StartServiceByName" /*method*/,
method_cb, data,
"su" /*fmt*/, name, flags);
}
EAPI int
ecore_dbus_method_get_name_owner(Ecore_DBus_Server *svr, char *name)
ecore_dbus_method_get_name_owner(Ecore_DBus_Server *svr, char *name, Ecore_DBus_Method_Cb method_cb, void *data)
{
return ecore_dbus_message_new_method_call(svr,
"org.freedesktop.DBus" /*destination*/,
"/org/freedesktop/DBus" /*path*/,
"org.freedesktop.DBus" /*interface*/,
"GetNameOwner" /*method*/,
method_cb, data,
"s" /*fmt*/, name);
}
EAPI int
ecore_dbus_method_get_connection_unix_user(Ecore_DBus_Server *svr, char *connection)
ecore_dbus_method_get_connection_unix_user(Ecore_DBus_Server *svr, char *connection, Ecore_DBus_Method_Cb method_cb, void *data)
{
return ecore_dbus_message_new_method_call(svr,
"org.freedesktop.DBus" /*destination*/,
"/org/freedesktop/DBus" /*path*/,
"org.freedesktop.DBus" /*interface*/,
"GetConnectionUnixUser" /*method*/,
method_cb, data,
"s" /*fmt*/, connection);
}
EAPI int
ecore_dbus_method_add_match(Ecore_DBus_Server *svr, char *match)
ecore_dbus_method_add_match(Ecore_DBus_Server *svr, char *match, Ecore_DBus_Method_Cb method_cb, void *data)
{
return ecore_dbus_message_new_method_call(svr,
"org.freedesktop.DBus" /*destination*/,
"/org/freedesktop/DBus" /*path*/,
"org.freedesktop.DBus" /*interface*/,
"AddMatch" /*method*/,
method_cb, data,
"s" /*fmt*/, match);
}
EAPI int
ecore_dbus_method_remove_match(Ecore_DBus_Server *svr, char *match)
ecore_dbus_method_remove_match(Ecore_DBus_Server *svr, char *match, Ecore_DBus_Method_Cb method_cb, void *data)
{
return ecore_dbus_message_new_method_call(svr,
"org.freedesktop.DBus" /*destination*/,
"/org/freedesktop/DBus" /*path*/,
"org.freedesktop.DBus" /*interface*/,
"RemoveMatch" /*method*/,
method_cb, data,
"s" /*fmt*/, match);
}

View File

@ -64,7 +64,6 @@ struct _Ecore_DBus_Server
int cnt_msg;
Ecore_Hash *messages;
unsigned int hello;
char *unique_name;
};
@ -73,6 +72,12 @@ struct _Ecore_DBus_Message
/* server to send to */
Ecore_DBus_Server *server;
/* callback */
struct {
Ecore_DBus_Method_Cb func;
void *data;
} cb;
/* header fields */
unsigned char byte_order;
unsigned char type;