From: Daniel Wagner <[email protected]>

Instead returning directly a config when create() is called
in policy plugin, use a callback function for handing over a valid
configuration from the plugin to the session core. This prepars
support for asynchronize create call.
---
 include/session.h        |  9 +++++++--
 plugins/session_policy.c | 13 ++++++++-----
 src/session.c            | 25 ++++++++++++++-----------
 3 files changed, 29 insertions(+), 18 deletions(-)

diff --git a/include/session.h b/include/session.h
index b8f7a51..29b637d 100644
--- a/include/session.h
+++ b/include/session.h
@@ -65,11 +65,16 @@ struct connman_session_config {
        GSList *allowed_bearers;
 };
 
+typedef void (* connman_session_config_cb) (struct connman_session *session,
+                                       struct connman_session_config *config,
+                                       void *user_data);
+
 struct connman_session_policy {
        const char *name;
        int priority;
-       struct connman_session_config *(*create)(
-                                       struct connman_session *session);
+       int (*create)(struct connman_session *session,
+                       connman_session_config_cb callback,
+                       void *user_data);
        void (*destroy)(struct connman_session *session);
 };
 
diff --git a/plugins/session_policy.c b/plugins/session_policy.c
index 5c2c418..e0c1887 100644
--- a/plugins/session_policy.c
+++ b/plugins/session_policy.c
@@ -35,8 +35,9 @@
 
 static GHashTable *config_hash;
 
-static struct connman_session_config *policy_create(
-                                       struct connman_session *session)
+static int policy_create(struct connman_session *session,
+                               connman_session_config_cb callback,
+                               void *user_data)
 {
        struct connman_session_config *config;
 
@@ -44,7 +45,7 @@ static struct connman_session_config *policy_create(
 
        config = g_try_new0(struct connman_session_config, 1);
        if (config == NULL)
-               return NULL;
+               return -ENOMEM;
 
        config->priority = FALSE;
        config->roaming_policy = CONNMAN_SESSION_ROAMING_POLICY_DEFAULT;
@@ -53,12 +54,14 @@ static struct connman_session_config *policy_create(
        config->allowed_bearers = connman_session_allowed_bearers_any();
        if (config->allowed_bearers == NULL) {
                g_free(config);
-               return NULL;
+               return -ENOMEM;
        }
 
        g_hash_table_replace(config_hash, session, config);
 
-       return config;
+       (*callback)(session, config, user_data);
+
+       return 0;
 }
 
 static void policy_destroy(struct connman_session *session)
diff --git a/src/session.c b/src/session.c
index f31613a..8957c71 100644
--- a/src/session.c
+++ b/src/session.c
@@ -236,17 +236,11 @@ static int assign_policy_plugin(struct connman_session 
*session)
        return 0;
 }
 
-static int create_policy_config(struct connman_session *session)
+static int create_policy_config(struct connman_session *session,
+                               connman_session_config_cb callback,
+                               void *user_data)
 {
-       struct connman_session_config *config;
-
-       config = (*session->policy->create)(session);
-       if (config == NULL)
-               return -ENOMEM;
-
-       session->policy_config = config;
-
-       return 0;
+       return (*session->policy->create)(session, callback, user_data);
 }
 
 static void destroy_policy_config(struct connman_session *session)
@@ -1549,6 +1543,15 @@ static const GDBusMethodTable session_methods[] = {
        { },
 };
 
+static void session_create_cb(struct connman_session *session,
+                               struct connman_session_config *config,
+                               void *user_data)
+{
+       DBG("session %p config %p", session, config);
+
+       session->policy_config = config;
+}
+
 int __connman_session_create(DBusMessage *msg)
 {
        const char *owner, *notify_path;
@@ -1665,7 +1668,7 @@ int __connman_session_create(DBusMessage *msg)
        err = assign_policy_plugin(session);
        if (err < 0)
                goto err;
-       err = create_policy_config(session);
+       err = create_policy_config(session, session_create_cb, NULL);
        if (err < 0)
                goto err;
 
-- 
1.7.12.1.382.gb0576a6

_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to