From: Patrik Flykt <[email protected]>
---
v2: Update the callbacks to accept a dbus message that needs not be unref'ed
src/agent.c | 133 +++++++++++++++++++++++------------------------------------
1 file changed, 52 insertions(+), 81 deletions(-)
diff --git a/src/agent.c b/src/agent.c
index dc32723..b78bc1c 100644
--- a/src/agent.c
+++ b/src/agent.c
@@ -182,7 +182,7 @@ static void agent_receive_message(DBusPendingCall *call,
void *user_data)
static int agent_queue_message(struct connman_service *service,
DBusMessage *msg, int timeout,
- DBusPendingCallNotifyFunction callback, void *user_data)
+ agent_queue_cb callback, void *user_data)
{
struct agent_data *queue_data;
@@ -229,7 +229,7 @@ struct request_input_reply {
void *user_data;
};
-static void request_input_passphrase_reply(DBusPendingCall *call, void
*user_data)
+static void request_input_passphrase_reply(DBusMessage *reply, void *user_data)
{
struct request_input_reply *passphrase_reply = user_data;
connman_bool_t values_received = FALSE;
@@ -242,7 +242,6 @@ static void request_input_passphrase_reply(DBusPendingCall
*call, void *user_dat
char *name = NULL;
int name_len = 0;
DBusMessageIter iter, dict;
- DBusMessage *reply = dbus_pending_call_steal_reply(call);
if (dbus_message_get_type(reply) == DBUS_MESSAGE_TYPE_ERROR) {
error = dbus_message_get_error_name(reply);
@@ -323,8 +322,6 @@ done:
wps, wpspin, error,
passphrase_reply->user_data);
connman_service_unref(passphrase_reply->service);
- dbus_message_unref(reply);
- dbus_pending_call_unref(call);
g_free(passphrase_reply);
}
@@ -511,7 +508,7 @@ static void previous_passphrase_handler(DBusMessageIter
*iter,
request_input_append_previouspassphrase, &data);
}
-static void request_input_login_reply(DBusPendingCall *call, void *user_data)
+static void request_input_login_reply(DBusMessage *reply, void *user_data)
{
struct request_input_reply *username_password_reply = user_data;
const char *error = NULL;
@@ -520,7 +517,6 @@ static void request_input_login_reply(DBusPendingCall
*call, void *user_data)
char *password = NULL;
char *key;
DBusMessageIter iter, dict;
- DBusMessage *reply = dbus_pending_call_steal_reply(call);
if (dbus_message_get_type(reply) == DBUS_MESSAGE_TYPE_ERROR) {
error = dbus_message_get_error_name(reply);
@@ -570,7 +566,6 @@ done:
FALSE, NULL, error,
username_password_reply->user_data);
connman_service_unref(username_password_reply->service);
- dbus_message_unref(reply);
g_free(username_password_reply);
}
@@ -581,8 +576,8 @@ int __connman_agent_request_passphrase_input(struct
connman_service *service,
const char *path;
DBusMessageIter iter;
DBusMessageIter dict;
- DBusPendingCall *call;
struct request_input_reply *passphrase_reply;
+ int err;
if (service == NULL || agent_path == NULL || callback == NULL)
return -ESRCH;
@@ -635,26 +630,22 @@ int __connman_agent_request_passphrase_input(struct
connman_service *service,
return -ENOMEM;
}
- if (dbus_connection_send_with_reply(connection, message, &call,
- connman_timeout_input_request())
- == FALSE) {
- dbus_message_unref(message);
- g_free(passphrase_reply);
- return -ESRCH;
- }
-
- if (call == NULL) {
- dbus_message_unref(message);
- g_free(passphrase_reply);
- return -ESRCH;
- }
-
passphrase_reply->service = connman_service_ref(service);
passphrase_reply->callback = callback;
passphrase_reply->user_data = user_data;
- dbus_pending_call_set_notify(call, request_input_passphrase_reply,
- passphrase_reply, NULL);
+ err = agent_queue_message(service, message,
+ connman_timeout_input_request(),
+ request_input_passphrase_reply,
+ passphrase_reply);
+
+ if (err < 0 && err != -EBUSY) {
+ DBG("error %d sending agent message", err);
+ connman_service_unref(service);
+ dbus_message_unref(message);
+ g_free(passphrase_reply);
+ return err;
+ }
dbus_message_unref(message);
@@ -668,8 +659,8 @@ int __connman_agent_request_login_input(struct
connman_service *service,
const char *path;
DBusMessageIter iter;
DBusMessageIter dict;
- DBusPendingCall *call;
struct request_input_reply *username_password_reply;
+ int err;
if (service == NULL || agent_path == NULL || callback == NULL)
return -ESRCH;
@@ -702,26 +693,20 @@ int __connman_agent_request_login_input(struct
connman_service *service,
return -ENOMEM;
}
- if (dbus_connection_send_with_reply(connection, message, &call,
- connman_timeout_input_request())
- == FALSE) {
- dbus_message_unref(message);
- g_free(username_password_reply);
- return -ESRCH;
- }
-
- if (call == NULL) {
- dbus_message_unref(message);
- g_free(username_password_reply);
- return -ESRCH;
- }
-
username_password_reply->service = connman_service_ref(service);
username_password_reply->callback = callback;
username_password_reply->user_data = user_data;
- dbus_pending_call_set_notify(call, request_input_login_reply,
- username_password_reply, NULL);
+ err = agent_queue_message(service, message,
+ connman_timeout_input_request(),
+ request_input_login_reply, username_password_reply);
+ if (err < 0 && err != -EBUSY) {
+ DBG("error %d sending agent request", err);
+ connman_service_unref(service);
+ dbus_message_unref(message);
+ g_free(username_password_reply);
+ return err;
+ }
dbus_message_unref(message);
@@ -734,10 +719,9 @@ struct request_browser_reply_data {
void *user_data;
};
-static void request_browser_reply(DBusPendingCall *call, void *user_data)
+static void request_browser_reply(DBusMessage *reply, void *user_data)
{
struct request_browser_reply_data *browser_reply_data = user_data;
- DBusMessage *reply = dbus_pending_call_steal_reply(call);
connman_bool_t result = FALSE;
const char *error = NULL;
@@ -752,7 +736,6 @@ done:
browser_reply_data->callback(browser_reply_data->service, result,
error, browser_reply_data->user_data);
connman_service_unref(browser_reply_data->service);
- dbus_message_unref(reply);
g_free(browser_reply_data);
}
@@ -761,10 +744,10 @@ int __connman_agent_request_browser(struct
connman_service *service,
const char *url, void *user_data)
{
struct request_browser_reply_data *browser_reply_data;
- DBusPendingCall *call;
DBusMessage *message;
DBusMessageIter iter;
const char *path;
+ int err;
if (service == NULL || agent_path == NULL || callback == NULL)
return -ESRCH;
@@ -791,26 +774,21 @@ int __connman_agent_request_browser(struct
connman_service *service,
return -ENOMEM;
}
- if (dbus_connection_send_with_reply(connection, message, &call,
- connman_timeout_browser_launch())
- == FALSE) {
- dbus_message_unref(message);
- g_free(browser_reply_data);
- return -ESRCH;
- }
-
- if (call == NULL) {
- dbus_message_unref(message);
- g_free(browser_reply_data);
- return -ESRCH;
- }
-
browser_reply_data->service = connman_service_ref(service);
browser_reply_data->callback = callback;
browser_reply_data->user_data = user_data;
- dbus_pending_call_set_notify(call, request_browser_reply,
- browser_reply_data, NULL);
+ err = agent_queue_message(service, message,
+ connman_timeout_browser_launch(),
+ request_browser_reply, browser_reply_data);
+
+ if (err < 0 && err != -EBUSY) {
+ DBG("error %d sending browser request", err);
+ connman_service_unref(service);
+ dbus_message_unref(message);
+ g_free(browser_reply_data);
+ return err;
+ }
dbus_message_unref(message);
@@ -823,10 +801,9 @@ struct report_error_data {
void *user_data;
};
-static void report_error_reply(DBusPendingCall *call, void *user_data)
+static void report_error_reply(DBusMessage *reply, void *user_data)
{
struct report_error_data *report_error = user_data;
- DBusMessage *reply = dbus_pending_call_steal_reply(call);
gboolean retry = FALSE;
const char *dbus_err;
@@ -842,8 +819,6 @@ static void report_error_reply(DBusPendingCall *call, void
*user_data)
report_error->user_data);
connman_service_unref(report_error->service);
g_free(report_error);
- dbus_message_unref(reply);
- dbus_pending_call_unref(call);
}
int __connman_agent_report_error(struct connman_service *service,
@@ -854,7 +829,7 @@ int __connman_agent_report_error(struct connman_service
*service,
DBusMessageIter iter;
const char *path;
struct report_error_data *report_error;
- DBusPendingCall *call;
+ int err;
if (service == NULL || agent_path == NULL || error == NULL ||
callback == NULL)
@@ -880,25 +855,21 @@ int __connman_agent_report_error(struct connman_service
*service,
return -ENOMEM;
}
- if (dbus_connection_send_with_reply(connection, message, &call,
- connman_timeout_input_request())
- == FALSE) {
- dbus_message_unref(message);
- g_free(report_error);
- return -ESRCH;
- }
+ report_error->service = connman_service_ref(service);
+ report_error->callback = callback;
+ report_error->user_data = user_data;
- if (call == NULL) {
- dbus_message_unref(message);
+ err = agent_queue_message(service, message,
+ connman_timeout_input_request(),
+ report_error_reply, report_error);
+ if (err < 0 && err != -EBUSY) {
+ DBG("error %d sending error request", err);
+ connman_service_unref(service);
g_free(report_error);
+ dbus_message_unref(message);
return -ESRCH;
}
- report_error->service = connman_service_ref(service);
- report_error->callback = callback;
- report_error->user_data = user_data;
- dbus_pending_call_set_notify(call, report_error_reply,
- report_error, NULL);
dbus_message_unref(message);
return -EINPROGRESS;
--
1.7.10.4
_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman