summaryrefslogtreecommitdiff
path: root/src/agent.c
diff options
context:
space:
mode:
authorTomasz Bursztyka <tomasz.bursztyka@linux.intel.com>2012-02-14 12:05:44 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2012-02-14 14:55:55 +0100
commit26be4f3e78aea1bb6df7f77bcdb429a7e2b0329b (patch)
treef25eaa7737d3a9e468773c8d487362957e731ec9 /src/agent.c
parent4130aedfe7bf313c4b28e2d84edf38ebcdcac1cf (diff)
downloadconnman-26be4f3e78aea1bb6df7f77bcdb429a7e2b0329b.tar.gz
connman-26be4f3e78aea1bb6df7f77bcdb429a7e2b0329b.tar.bz2
connman-26be4f3e78aea1bb6df7f77bcdb429a7e2b0329b.zip
agent: Handle browser request reply
Diffstat (limited to 'src/agent.c')
-rw-r--r--src/agent.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/agent.c b/src/agent.c
index 67303087..d0b3ecd5 100644
--- a/src/agent.c
+++ b/src/agent.c
@@ -524,10 +524,36 @@ int __connman_agent_request_login_input(struct connman_service *service,
return -EIO;
}
+struct request_browser_reply_data {
+ struct connman_service *service;
+ browser_authentication_cb_t callback;
+ void *user_data;
+};
+
+static void request_browser_reply(DBusPendingCall *call, 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;
+
+ if (dbus_message_get_type(reply) == DBUS_MESSAGE_TYPE_ERROR)
+ goto done;
+
+ result = TRUE;
+
+done:
+ browser_reply_data->callback(browser_reply_data->service,
+ result, browser_reply_data->user_data);
+ connman_service_unref(browser_reply_data->service);
+ dbus_message_unref(reply);
+ g_free(browser_reply_data);
+}
+
int __connman_agent_request_browser(struct connman_service *service,
browser_authentication_cb_t callback,
const char *url, void *user_data)
{
+ struct request_browser_reply_data *browser_reply_data;
DBusPendingCall *call;
DBusMessage *message;
DBusMessageIter iter;
@@ -552,17 +578,32 @@ int __connman_agent_request_browser(struct connman_service *service,
dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &url);
+ browser_reply_data = g_try_new0(struct request_browser_reply_data, 1);
+ if (browser_reply_data == NULL) {
+ dbus_message_unref(message);
+ return -ENOMEM;
+ }
+
if (dbus_connection_send_with_reply(connection, message,
&call, -1) == 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);
+
dbus_message_unref(message);
return -EIO;