aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-connectivity/connman/connman-gnome/0004-Handle-WiFi-authentication-using-an-agent.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-connectivity/connman/connman-gnome/0004-Handle-WiFi-authentication-using-an-agent.patch')
-rw-r--r--meta/recipes-connectivity/connman/connman-gnome/0004-Handle-WiFi-authentication-using-an-agent.patch923
1 files changed, 0 insertions, 923 deletions
diff --git a/meta/recipes-connectivity/connman/connman-gnome/0004-Handle-WiFi-authentication-using-an-agent.patch b/meta/recipes-connectivity/connman/connman-gnome/0004-Handle-WiFi-authentication-using-an-agent.patch
deleted file mode 100644
index 98230525b6..0000000000
--- a/meta/recipes-connectivity/connman/connman-gnome/0004-Handle-WiFi-authentication-using-an-agent.patch
+++ /dev/null
@@ -1,923 +0,0 @@
-From c742b40860851f1659e801d0a652f854f6783bd1 Mon Sep 17 00:00:00 2001
-Message-Id: <c742b40860851f1659e801d0a652f854f6783bd1.1334369310.git.paul.eggleton@linux.intel.com>
-In-Reply-To: <cover.1334369310.git.paul.eggleton@linux.intel.com>
-References: <cover.1334369310.git.paul.eggleton@linux.intel.com>
-From: Paul Eggleton <paul.eggleton@linux.intel.com>
-Date: Sat, 14 Apr 2012 02:32:43 +0100
-Subject: [PATCH 4/6] Handle WiFi authentication using an agent
-
-Register an agent within the applet which shows an appropriate dialog
-when credentials are requested upon connecting to a secured wireless
-network.
-
-Thanks to Julien Massot for providing the underlying agent library code.
-
-Upstream-Status: Submitted
-
-Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
----
- applet/Makefile.am | 3 +-
- applet/agent.c | 209 +++++++++++++++++++++++
- applet/agent.h | 29 +++
- applet/main.c | 3 +
- common/Makefile.am | 13 +-
- common/connman-agent.c | 426 ++++++++++++++++++++++++++++++++++++++++++++++
- common/connman-agent.h | 77 +++++++++
- common/connman-agent.xml | 26 +++
- common/marshal.list | 2 +
- 9 files changed, 783 insertions(+), 5 deletions(-)
- create mode 100644 applet/agent.c
- create mode 100644 applet/agent.h
- create mode 100644 common/connman-agent.c
- create mode 100644 common/connman-agent.h
- create mode 100644 common/connman-agent.xml
-
-diff --git a/applet/Makefile.am b/applet/Makefile.am
-index fe582ef..2e7c157 100644
---- a/applet/Makefile.am
-+++ b/applet/Makefile.am
-@@ -2,7 +2,8 @@
- bin_PROGRAMS = connman-applet
-
- connman_applet_SOURCES = main.c \
-- properties.h properties.c status.h status.c
-+ properties.h properties.c status.h \
-+ status.c agent.h agent.c
-
- connman_applet_LDADD = $(top_builddir)/common/libcommon.a \
- @GTK_LIBS@ @DBUS_LIBS@
-diff --git a/applet/agent.c b/applet/agent.c
-new file mode 100644
-index 0000000..b12d337
---- /dev/null
-+++ b/applet/agent.c
-@@ -0,0 +1,209 @@
-+/*
-+ *
-+ * Connection Manager
-+ *
-+ * Agent implementation based on code from bluez-gnome
-+ *
-+ * Copyright (C) 2005-2008 Marcel Holtmann <marcel@holtmann.org>
-+ * Copyright (C) 2006-2007 Bastien Nocera <hadess@hadess.net>
-+ * Copyright (C) 2012 Intel Corporation
-+ *
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-+ *
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+#include <config.h>
-+#endif
-+
-+#include <stdlib.h>
-+
-+#include <glib/gi18n.h>
-+#include <gtk/gtk.h>
-+
-+#include <dbus/dbus-glib.h>
-+
-+#include <connman-agent.h>
-+
-+#include "agent.h"
-+
-+struct input_data {
-+ gboolean numeric;
-+ gpointer request_data;
-+ GtkWidget *dialog;
-+ GHashTable *entries;
-+};
-+
-+static struct input_data *input_data_inst = NULL;
-+
-+static void input_free(struct input_data *input)
-+{
-+ gtk_widget_destroy(input->dialog);
-+
-+ g_hash_table_destroy(input->entries);
-+
-+ if( input_data_inst == input )
-+ input_data_inst = NULL;
-+
-+ g_free(input);
-+}
-+
-+static void request_input_callback(GtkWidget *dialog,
-+ gint response, gpointer user_data)
-+{
-+ GHashTableIter iter;
-+ gpointer key, value;
-+ GValue *retvalue = NULL;
-+ const gchar *text;
-+ struct input_data *input = user_data;
-+
-+ if (response == GTK_RESPONSE_OK) {
-+ GHashTable *reply = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
-+ g_hash_table_iter_init (&iter, input->entries);
-+ while (g_hash_table_iter_next (&iter, &key, &value)) {
-+ text = gtk_entry_get_text((GtkEntry *)value);
-+ if(strlen(text)) {
-+ retvalue = g_slice_new0(GValue);
-+ g_value_init(retvalue, G_TYPE_STRING);
-+ g_value_set_string(retvalue, text);
-+ g_hash_table_insert(reply, g_strdup(key), retvalue);
-+ }
-+ }
-+
-+ connman_agent_request_input_set_reply(input->request_data, reply);
-+ } else {
-+ connman_agent_request_input_abort(input->request_data);
-+ }
-+
-+ input_free(input);
-+}
-+
-+static void show_dialog(gpointer data, gpointer user_data)
-+{
-+ struct input_data *input = data;
-+
-+ gtk_widget_show_all(input->dialog);
-+
-+ gtk_window_present(GTK_WINDOW(input->dialog));
-+}
-+
-+static void request_input_dialog(GHashTable *request,
-+ gpointer request_data)
-+{
-+ GtkWidget *dialog;
-+ GtkWidget *label;
-+ GtkWidget *table;
-+ GtkWidget *entry;
-+ struct input_data *input;
-+ GHashTableIter iter;
-+ gpointer key, value;
-+ int elems, i;
-+
-+ input = g_try_malloc0(sizeof(*input));
-+ if (!input)
-+ return;
-+
-+ input->request_data = request_data;
-+
-+ input->entries = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
-+
-+ dialog = gtk_dialog_new();
-+ gtk_window_set_title(GTK_WINDOW(dialog), _("Connection Manager"));
-+ gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
-+ gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
-+ gtk_window_set_keep_above(GTK_WINDOW(dialog), TRUE);
-+ gtk_window_set_urgency_hint(GTK_WINDOW(dialog), TRUE);
-+ gtk_dialog_set_has_separator(GTK_DIALOG(dialog), FALSE);
-+ input->dialog = dialog;
-+
-+ gtk_dialog_add_button(GTK_DIALOG(dialog),
-+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
-+ gtk_dialog_add_button(GTK_DIALOG(dialog),
-+ GTK_STOCK_OK, GTK_RESPONSE_OK);
-+
-+ elems = g_hash_table_size(request);
-+ table = gtk_table_new(elems+1, 2, FALSE);
-+ gtk_table_set_row_spacings(GTK_TABLE(table), 4);
-+ gtk_table_set_col_spacings(GTK_TABLE(table), 20);
-+ gtk_container_set_border_width(GTK_CONTAINER(table), 12);
-+ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), table);
-+
-+ label = gtk_label_new(_("Please provide some network information:"));
-+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
-+ gtk_table_attach(GTK_TABLE(table), label, 0, 2, 0, 1,
-+ GTK_EXPAND | GTK_FILL, GTK_SHRINK, 0, 0);
-+
-+ g_hash_table_iter_init (&iter, request);
-+ i=1;
-+ while (g_hash_table_iter_next (&iter, &key, &value)) {
-+ label = gtk_label_new((const char *)key);
-+ gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
-+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, i, i+1,
-+ GTK_EXPAND | GTK_FILL, GTK_SHRINK, 0, 0);
-+
-+ entry = gtk_entry_new();
-+ gtk_entry_set_max_length(GTK_ENTRY(entry), 64);
-+ gtk_entry_set_width_chars(GTK_ENTRY(entry), 16);
-+ gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE);
-+ gtk_table_attach(GTK_TABLE(table), entry, 1, 2, i, i+1,
-+ GTK_EXPAND | GTK_FILL, GTK_SHRINK, 0, 0);
-+ g_hash_table_insert(input->entries, g_strdup(key), entry);
-+
-+ i++;
-+ }
-+
-+ input_data_inst = input;
-+
-+ g_signal_connect(G_OBJECT(dialog), "response",
-+ G_CALLBACK(request_input_callback), input);
-+
-+ show_dialog(input, NULL);
-+}
-+
-+static void request_input(const char *service_id,
-+ GHashTable *request, gpointer request_data, gpointer user_data)
-+{
-+ request_input_dialog(request, request_data);
-+}
-+
-+static gboolean cancel_request(DBusGMethodInvocation *context,
-+ gpointer user_data)
-+{
-+ if( input_data_inst ) {
-+ connman_agent_request_input_abort(input_data_inst->request_data);
-+
-+ input_free(input_data_inst);
-+ }
-+
-+ return TRUE;
-+}
-+
-+int setup_agents(void)
-+{
-+ ConnmanAgent *agent = connman_agent_new();
-+ connman_agent_setup(agent, "/org/gnome/connman/applet");
-+
-+ connman_agent_set_request_input_func(agent, request_input, agent);
-+ connman_agent_set_cancel_func(agent, cancel_request, agent);
-+
-+ connman_agent_register(agent);
-+
-+ return 0;
-+}
-+
-+void cleanup_agents(void)
-+{
-+}
-diff --git a/applet/agent.h b/applet/agent.h
-new file mode 100644
-index 0000000..d85676b
---- /dev/null
-+++ b/applet/agent.h
-@@ -0,0 +1,29 @@
-+/*
-+ *
-+ * Connection Manager
-+ *
-+ * Agent implementation based on code from bluez-gnome
-+ *
-+ * Copyright (C) 2005-2008 Marcel Holtmann <marcel@holtmann.org>
-+ * Copyright (C) 2006-2007 Bastien Nocera <hadess@hadess.net>
-+ * Copyright (C) 2012 Intel Corporation
-+ *
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-+ *
-+ */
-+
-+int setup_agents(void);
-+void cleanup_agents(void);
-diff --git a/applet/main.c b/applet/main.c
-index 68a77b1..d06ce60 100644
---- a/applet/main.c
-+++ b/applet/main.c
-@@ -32,6 +32,7 @@
-
- #include "properties.h"
- #include "status.h"
-+#include "agent.h"
-
- static gboolean global_ready = FALSE;
- static gint global_strength = -1;
-@@ -132,6 +133,7 @@ static void manager_init(DBusGConnection *connection)
- "/", "net.connman.Manager");
-
- properties_create(manager, manager_property_changed, NULL);
-+ setup_agents();
- }
-
- static void manager_cleanup(void)
-@@ -148,6 +150,7 @@ static void name_owner_changed(DBusGProxy *proxy, const char *name,
- if (*new != '\0') {
- status_offline();
- properties_enable(manager);
-+ setup_agents();
- } else {
- properties_disable(manager);
- status_unavailable();
-diff --git a/common/Makefile.am b/common/Makefile.am
-index ef1267a..5bfff19 100644
---- a/common/Makefile.am
-+++ b/common/Makefile.am
-@@ -3,19 +3,21 @@ noinst_LIBRARIES = libcommon.a
-
- libcommon_a_SOURCES = connman-dbus.c connman-dbus.h connman-dbus-glue.h \
- connman-client.h connman-client.c \
-- instance.h instance.c
-+ instance.h instance.c \
-+ connman-agent.h connman-agent.c
-
- BUILT_SOURCES = marshal.h marshal.c \
- connman-dbus-glue.h \
-- instance-glue.h
-+ instance-glue.h \
-+ connman-agent-glue.h
-
--nodist_libcommon_a_SOURCES = connman-dbus-glue.h instance-glue.h
-+nodist_libcommon_a_SOURCES = connman-dbus-glue.h instance-glue.h connman-agent-glue.h
-
- CLEANFILES = $(BUILT_SOURCES)
-
- AM_CFLAGS = @DBUS_CFLAGS@ @GTK_CFLAGS@
-
--EXTRA_DIST = marshal.list instance.xml connman-dbus.xml
-+EXTRA_DIST = marshal.list instance.xml connman-dbus.xml connman-agent.xml
-
- MAINTAINERCLEANFILES = Makefile.in
-
-@@ -30,3 +32,6 @@ instance-glue.h: instance.xml
-
- connman-dbus-glue.h: connman-dbus.xml
- $(DBUS_BINDING_TOOL) --prefix=connman --mode=glib-client --output=$@ $<
-+
-+connman-agent-glue.h: connman-agent.xml
-+ $(DBUS_BINDING_TOOL) --prefix=connman_agent --mode=glib-server --output=$@ $<
-diff --git a/common/connman-agent.c b/common/connman-agent.c
-new file mode 100644
-index 0000000..769bf27
---- /dev/null
-+++ b/common/connman-agent.c
-@@ -0,0 +1,426 @@
-+/*
-+ * Connection Manager Agent implementation
-+ *
-+ * Author(s):
-+ * - Julien MASSOT <jmassot@aldebaran-robotics.com>
-+ * - Paul Eggleton <paul.eggleton@linux.intel.com>
-+ *
-+ * Copyright (C) 2012 Aldebaran Robotics
-+ * Copyright (C) 2012 Intel Corporation
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1 as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#include <dbus/dbus-glib.h>
-+#include <dbus/dbus-glib-lowlevel.h>
-+#include <stdio.h>
-+
-+#include "connman-agent.h"
-+#include "connman-dbus.h"
-+
-+#define CONNMAN_AGENT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), \
-+ CONNMAN_TYPE_AGENT, ConnmanAgentPrivate))
-+
-+typedef enum {
-+ AGENT_ERROR_REJECT,
-+ AGENT_ERROR_RETRY
-+} AgentError;
-+
-+#define AGENT_ERROR (agent_error_quark())
-+
-+#define AGENT_ERROR_TYPE (agent_error_get_type())
-+
-+static GQuark agent_error_quark(void)
-+{
-+ static GQuark quark = 0;
-+ if (!quark)
-+ quark = g_quark_from_static_string("Agent");
-+
-+ return quark;
-+}
-+
-+#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
-+
-+static GType agent_error_get_type(void)
-+{
-+ static GType etype = 0;
-+ if (etype == 0) {
-+ static const GEnumValue values[] = {
-+ ENUM_ENTRY(AGENT_ERROR_REJECT, "Rejected"),
-+ ENUM_ENTRY(AGENT_ERROR_RETRY, "Retry"),
-+ { 0, 0, 0 }
-+ };
-+
-+ etype = g_enum_register_static("Agent", values);
-+ }
-+
-+ return etype;
-+}
-+
-+typedef struct _ConnmanAgentPrivate ConnmanAgentPrivate;
-+
-+typedef struct _PendingRequest PendingRequest;
-+
-+struct _PendingRequest {
-+ DBusGMethodInvocation *context;
-+ ConnmanAgent *agent;
-+};
-+
-+struct _ConnmanAgentPrivate {
-+ gchar *busname;
-+ gchar *path;
-+ DBusGConnection *connection;
-+ DBusGProxy *connman_proxy;
-+
-+ ConnmanAgentRequestInputFunc input_func;
-+ gpointer input_data;
-+
-+ ConnmanAgentCancelFunc cancel_func;
-+ gpointer cancel_data;
-+
-+ ConnmanAgentReleaseFunc release_func;
-+ gpointer release_data;
-+
-+ ConnmanAgentDebugFunc debug_func;
-+ gpointer debug_data;
-+
-+};
-+
-+G_DEFINE_TYPE(ConnmanAgent, connman_agent, G_TYPE_OBJECT)
-+
-+static inline void debug(ConnmanAgent *agent, const char *format, ...)
-+{
-+ char str[256];
-+ va_list ap;
-+ ConnmanAgentPrivate *priv = CONNMAN_AGENT_GET_PRIVATE(agent);
-+
-+ if (priv->debug_func == NULL)
-+ return;
-+
-+ va_start(ap, format);
-+
-+ if (vsnprintf(str, sizeof(str), format, ap) > 0)
-+ priv->debug_func(str, priv->debug_data);
-+
-+ va_end(ap);
-+}
-+
-+gboolean connman_agent_request_input_set_reply(gpointer request_data, GHashTable *reply)
-+{
-+ PendingRequest *pendingrequest = request_data;
-+
-+ if (request_data == NULL)
-+ return FALSE;
-+
-+ dbus_g_method_return(pendingrequest->context, reply);
-+
-+ g_free(pendingrequest);
-+
-+ return FALSE;
-+}
-+
-+gboolean connman_agent_request_input_abort(gpointer request_data)
-+{
-+ PendingRequest *pendingrequest = request_data;
-+ GError *result;
-+ if (request_data == NULL)
-+ return FALSE;
-+
-+ result = g_error_new(AGENT_ERROR, AGENT_ERROR_REJECT,
-+ "Input request rejected");
-+ dbus_g_method_return_error(pendingrequest->context, result);
-+ g_clear_error(&result);
-+ g_free(pendingrequest);
-+
-+ return FALSE;
-+}
-+
-+static gboolean connman_agent_request_input_cb(const GHashTable *reply, gpointer user_data)
-+{
-+
-+ PendingRequest *pendingrequest = user_data;
-+
-+ dbus_g_method_return(pendingrequest->context, reply);
-+
-+ g_free(pendingrequest);
-+ return FALSE;
-+}
-+
-+gboolean connman_agent_report_error(ConnmanAgent *agent,
-+ const char *path, const char *error,
-+ DBusGMethodInvocation *context)
-+{
-+ GError *result;
-+ ConnmanAgentPrivate *priv = CONNMAN_AGENT_GET_PRIVATE(agent);
-+
-+ debug(agent, "connection %s, reports an error: %s", path, error);
-+ result = g_error_new(AGENT_ERROR, AGENT_ERROR_RETRY,
-+ "Retry");
-+ dbus_g_method_return_error(context, result);
-+ g_clear_error(&result);
-+
-+ return FALSE;
-+}
-+
-+gboolean connman_agent_request_input(ConnmanAgent *agent,
-+ const char *path, GHashTable *fields,
-+ DBusGMethodInvocation *context)
-+{
-+ ConnmanAgentPrivate *priv = CONNMAN_AGENT_GET_PRIVATE(agent);
-+ const char *sender = dbus_g_method_get_sender(context);
-+ char *name = NULL, *type = NULL;
-+ char **id = NULL;
-+ PendingRequest *pendingrequest = NULL;
-+
-+ debug(agent, "request %s, sender %s", path, sender);
-+
-+ if (fields == NULL)
-+ return FALSE;
-+
-+ if (priv->input_func != NULL) {
-+ id = g_strsplit(path, "/net/connman/service/", 2);
-+ if (g_strv_length(id) == 2) {
-+ pendingrequest = g_try_new0(PendingRequest, 1);
-+ pendingrequest->context = context;
-+ pendingrequest->agent = agent;
-+ priv->input_func(id[1], fields, pendingrequest, priv->input_data);
-+ }
-+ g_strfreev(id);
-+ }
-+
-+ return FALSE;
-+}
-+
-+gboolean connman_agent_cancel(ConnmanAgent *agent,
-+ DBusGMethodInvocation *context)
-+{
-+ ConnmanAgentPrivate *priv = CONNMAN_AGENT_GET_PRIVATE(agent);
-+ const char *sender = dbus_g_method_get_sender(context);
-+ gboolean result = FALSE;
-+
-+ debug(agent, "Request Canceled %s", sender);
-+
-+ if (g_str_equal(sender, priv->busname) == FALSE)
-+ return FALSE;
-+
-+ if (priv->cancel_func)
-+ result = priv->cancel_func(context, priv->cancel_data);
-+
-+ return result;
-+}
-+
-+gboolean connman_agent_release(ConnmanAgent *agent,
-+ DBusGMethodInvocation *context)
-+{
-+ ConnmanAgentPrivate *priv = CONNMAN_AGENT_GET_PRIVATE(agent);
-+ const char *sender = dbus_g_method_get_sender(context);
-+
-+ debug(agent, "agent %p sender %s", agent, sender);
-+
-+ if (g_str_equal(sender, priv->busname) == FALSE)
-+ return FALSE;
-+
-+ dbus_g_method_return(context);
-+
-+ return TRUE;
-+}
-+
-+#include "connman-agent-glue.h"
-+
-+static void connman_agent_init(ConnmanAgent *agent)
-+{
-+ debug(agent, "agent %p", agent);
-+}
-+
-+static void connman_agent_finalize(GObject *agent)
-+{
-+ ConnmanAgentPrivate *priv = CONNMAN_AGENT_GET_PRIVATE(agent);
-+
-+ if (priv->connman_proxy != NULL) {
-+ g_object_unref(priv->connman_proxy);
-+ }
-+
-+ g_free(priv->path);
-+ g_free(priv->busname);
-+ dbus_g_connection_unref(priv->connection);
-+
-+ G_OBJECT_CLASS(connman_agent_parent_class)->finalize(agent);
-+}
-+
-+static void connman_agent_class_init(ConnmanAgentClass *klass)
-+{
-+ GObjectClass *object_class = (GObjectClass *) klass;
-+
-+ g_type_class_add_private(klass, sizeof(ConnmanAgentPrivate));
-+
-+ object_class->finalize = connman_agent_finalize;
-+
-+ dbus_g_object_type_install_info(CONNMAN_TYPE_AGENT,
-+ &dbus_glib_connman_agent_object_info);
-+}
-+
-+ConnmanAgent *connman_agent_new(void)
-+{
-+ ConnmanAgent *agent;
-+ g_type_init();
-+
-+ agent = CONNMAN_AGENT(g_object_new(CONNMAN_TYPE_AGENT, NULL));
-+
-+ return agent;
-+}
-+
-+gboolean connman_agent_setup(ConnmanAgent *agent, const char *path)
-+{
-+ ConnmanAgentPrivate *priv = CONNMAN_AGENT_GET_PRIVATE(agent);
-+ DBusGProxy *proxy;
-+ GObject *object;
-+ GError *error = NULL;
-+
-+ debug(agent, "agent_setup %p", agent);
-+
-+ if (priv->path != NULL)
-+ return FALSE;
-+
-+ priv->path = g_strdup(path);
-+ priv->connection = dbus_g_bus_get(DBUS_BUS_SYSTEM, &error);
-+ if (error != NULL) {
-+ g_printerr("Connecting to system bus failed: %s\n",
-+ error->message);
-+ g_error_free(error);
-+ return FALSE;
-+ }
-+
-+ proxy = dbus_g_proxy_new_for_name_owner(priv->connection, CONNMAN_SERVICE,
-+ CONNMAN_MANAGER_PATH, CONNMAN_MANAGER_INTERFACE, NULL);
-+
-+ g_free(priv->busname);
-+
-+ if (proxy != NULL) {
-+ priv->busname = g_strdup(dbus_g_proxy_get_bus_name(proxy));
-+ g_object_unref(proxy);
-+ } else
-+ priv->busname = NULL;
-+
-+ object = dbus_g_connection_lookup_g_object(priv->connection, priv->path);
-+ if (object != NULL)
-+ g_object_unref(object);
-+
-+ return TRUE;
-+}
-+
-+
-+gboolean connman_agent_register(ConnmanAgent *agent)
-+{
-+ ConnmanAgentPrivate *priv = CONNMAN_AGENT_GET_PRIVATE(agent);
-+ DBusGProxy *proxy;
-+ GObject *object;
-+ GError *error = NULL;
-+ gchar *path;
-+
-+ debug(agent, "register agent %p", agent);
-+
-+ if (priv->connman_proxy != NULL)
-+ return FALSE;
-+
-+ priv->connman_proxy = dbus_g_proxy_new_for_name_owner(priv->connection, CONNMAN_SERVICE,
-+ CONNMAN_MANAGER_PATH, CONNMAN_MANAGER_INTERFACE, NULL);
-+
-+ g_free(priv->busname);
-+
-+ priv->busname = g_strdup(dbus_g_proxy_get_bus_name(priv->connman_proxy));
-+
-+ object = dbus_g_connection_lookup_g_object(priv->connection, priv->path);
-+ if (object != NULL)
-+ g_object_unref(object);
-+
-+ dbus_g_connection_register_g_object(priv->connection,
-+ priv->path, G_OBJECT(agent));
-+
-+ dbus_g_proxy_call(priv->connman_proxy, "RegisterAgent", &error,
-+ DBUS_TYPE_G_OBJECT_PATH, priv->path,
-+ G_TYPE_INVALID, G_TYPE_INVALID);
-+
-+ if (error != NULL) {
-+ g_printerr("Agent registration failed: %s\n",
-+ error->message);
-+ g_error_free(error);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+gboolean connman_agent_unregister(ConnmanAgent *agent)
-+{
-+ ConnmanAgentPrivate *priv = CONNMAN_AGENT_GET_PRIVATE(agent);
-+ GError *error = NULL;
-+
-+ debug(agent, "unregister agent %p", agent);
-+
-+ if (priv->connman_proxy == NULL)
-+ return FALSE;
-+
-+ dbus_g_proxy_call(priv->connman_proxy, "UnregisterAgent", &error,
-+ DBUS_TYPE_G_OBJECT_PATH, priv->path,
-+ G_TYPE_INVALID, G_TYPE_INVALID);
-+
-+ if (error != NULL) {
-+ g_printerr("Agent unregistration failed: %s\n",
-+ error->message);
-+ g_error_free(error);
-+ }
-+
-+ g_object_unref(priv->connman_proxy);
-+ priv->connman_proxy = NULL;
-+
-+ g_free(priv->path);
-+ priv->path = NULL;
-+
-+ return TRUE;
-+}
-+
-+void connman_agent_set_request_input_func(ConnmanAgent *agent,
-+ ConnmanAgentRequestInputFunc func, gpointer data)
-+{
-+ ConnmanAgentPrivate *priv = CONNMAN_AGENT_GET_PRIVATE(agent);
-+
-+ priv->input_func = func;
-+ priv->input_data = data;
-+}
-+
-+void connman_agent_set_cancel_func(ConnmanAgent *agent,
-+ ConnmanAgentCancelFunc func, gpointer data)
-+{
-+ ConnmanAgentPrivate *priv = CONNMAN_AGENT_GET_PRIVATE(agent);
-+
-+ priv->cancel_func = func;
-+ priv->cancel_data = data;
-+}
-+
-+void connman_agent_set_release_func(ConnmanAgent *agent,
-+ ConnmanAgentReleaseFunc func, gpointer data)
-+{
-+ ConnmanAgentPrivate *priv = CONNMAN_AGENT_GET_PRIVATE(agent);
-+
-+ priv->release_func = func;
-+ priv->release_data = data;
-+}
-+
-+void connman_agent_set_debug_func(ConnmanAgent *agent, ConnmanAgentDebugFunc func, gpointer data)
-+{
-+ ConnmanAgentPrivate *priv = CONNMAN_AGENT_GET_PRIVATE(agent);
-+
-+ priv->debug_func = func;
-+ priv->debug_data = data;
-+}
-diff --git a/common/connman-agent.h b/common/connman-agent.h
-new file mode 100644
-index 0000000..0a1aa92
---- /dev/null
-+++ b/common/connman-agent.h
-@@ -0,0 +1,77 @@
-+/*
-+ * Connection Manager Agent implementation
-+ *
-+ * Author(s):
-+ * - Julien MASSOT <jmassot@aldebaran-robotics.com>
-+ * - Paul Eggleton <paul.eggleton@linux.intel.com>
-+ *
-+ * Copyright (C) 2012 Aldebaran Robotics
-+ * Copyright (C) 2012 Intel Corporation
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1 as published by the Free Software Foundation.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#ifndef CONNMAN_AGENT_H_
-+# define CONNMAN_AGENT_H_
-+
-+#include <glib-object.h>
-+#include <dbus/dbus-glib.h>
-+
-+G_BEGIN_DECLS
-+
-+#define CONNMAN_TYPE_AGENT (connman_agent_get_type())
-+#define CONNMAN_AGENT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \
-+ CONNMAN_TYPE_AGENT, ConnmanAgent))
-+#define CONNMAN_AGENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \
-+ CONNMAN_TYPE_AGENT, ConnmanAgentClass))
-+#define CONNMAN_IS_AGENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
-+ CONNMAN_TYPE_AGENT))
-+#define CONNMAN_IS_AGENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), \
-+ CONNMAN_TYPE_AGENT))
-+#define CONNMAN_GET_AGENT_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), \
-+ CONNMAN_TYPE_AGENT, ConnmanAgentClass))
-+
-+typedef struct _ConnmanAgent ConnmanAgent;
-+typedef struct _ConnmanAgentClass ConnmanAgentClass;
-+
-+struct _ConnmanAgent {
-+ GObject parent;
-+};
-+
-+struct _ConnmanAgentClass {
-+ GObjectClass parent_class;
-+};
-+
-+GType connman_agent_get_type(void);
-+
-+ConnmanAgent *connman_agent_new(void);
-+
-+gboolean connman_agent_setup(ConnmanAgent *agent, const char *path);
-+
-+gboolean connman_agent_register(ConnmanAgent *agent);
-+gboolean connman_agent_unregister(ConnmanAgent *agent);
-+gboolean connman_agent_request_input_set_reply(gpointer request_data, GHashTable *reply);
-+gboolean connman_agent_request_input_abort(gpointer request_data);
-+
-+typedef void (*ConnmanAgentRequestInputFunc) (const char *service_id, GHashTable *request, gpointer request_data, gpointer user_data);
-+typedef gboolean (*ConnmanAgentCancelFunc) (DBusGMethodInvocation *context, gpointer data);
-+typedef gboolean (*ConnmanAgentReleaseFunc) (DBusGMethodInvocation *context, gpointer data);
-+typedef void (*ConnmanAgentDebugFunc) (const char *str, gpointer user_data);
-+
-+void connman_agent_set_request_input_func(ConnmanAgent *agent, ConnmanAgentRequestInputFunc func, gpointer data);
-+void connman_agent_set_cancel_func(ConnmanAgent *agent, ConnmanAgentCancelFunc func, gpointer data);
-+void connman_agent_set_debug_func(ConnmanAgent *agent, ConnmanAgentDebugFunc func, gpointer data);
-+
-+G_END_DECLS
-+#endif /* !CONNMAN_AGENT_H_ */
-diff --git a/common/connman-agent.xml b/common/connman-agent.xml
-new file mode 100644
-index 0000000..ed9ee8b
---- /dev/null
-+++ b/common/connman-agent.xml
-@@ -0,0 +1,26 @@
-+<?xml version="1.0" encoding="UTF-8" ?>
-+
-+<node name="/net/connman/Agent">
-+ <interface name="net.connman.Agent">
-+ <method name="ReportError">
-+ <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
-+ <arg type="o" direction="in"/>
-+ <arg type="s" direction="in"/>
-+ </method>
-+
-+ <method name="RequestInput">
-+ <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
-+ <arg type="o" direction="in"/>
-+ <arg type="a{sv}" direction="in"/>
-+ <arg type="a{sv}" direction="out"/>
-+ </method>
-+
-+ <method name="Cancel">
-+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-+ </method>
-+
-+ <method name="Release">
-+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
-+ </method>
-+ </interface>
-+</node>
-diff --git a/common/marshal.list b/common/marshal.list
-index 8b174d0..3c6317b 100644
---- a/common/marshal.list
-+++ b/common/marshal.list
-@@ -1,3 +1,5 @@
- VOID:STRING,BOXED
-+VOID:OBJECT,BOXED
-+VOID:OBJECT
- VOID:BOXED
- VOID:STRING
---
-1.7.5.4
-