forked from enlightenment/efl
Use callbacks for method return, not events
SVN revision: 24236
This commit is contained in:
parent
2e58ad9aad
commit
0df8ad55dd
|
@ -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),
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue