From: Daniel Wagner <daniel.wag...@bmw-carit.de>

Give the policy plugin a way to inform the session core that
some of the config values have changed.

This could be done in a more clever way, e.g. figure out only
to update the necessary info entries.

It is not expected that there are many updates so let's keep it
simple for the time beeing.
---
 include/session.h |  2 ++
 src/session.c     | 37 +++++++++++++++++++++++++++++++++++++
 2 files changed, 39 insertions(+)

diff --git a/include/session.h b/include/session.h
index 7e45276..0e3d4c1 100644
--- a/include/session.h
+++ b/include/session.h
@@ -79,6 +79,8 @@ struct connman_session_policy {
 int connman_session_policy_register(struct connman_session_policy *config);
 void connman_session_policy_unregister(struct connman_session_policy *config);
 
+void connman_session_config_update(struct connman_session *session);
+
 GSList *connman_session_allowed_bearers_any(void);
 void connman_session_free_bearers(GSList *bearers);
 
diff --git a/src/session.c b/src/session.c
index 8930a0a..8fdaa8b 100644
--- a/src/session.c
+++ b/src/session.c
@@ -1362,6 +1362,43 @@ static void session_changed(struct connman_session 
*session,
        session_notify(session);
 }
 
+void connman_session_config_update(struct connman_session *session)
+{
+       struct session_info *info = session->info;
+       GSList *allowed_bearers;
+       int err;
+
+       DBG("session %p", session);
+
+       /*
+        * We update all configuration even though only one entry
+        * might have changed. We can still optimize this later.
+        */
+
+       err = apply_policy_on_bearers(
+               session->policy_config->allowed_bearers,
+               info->config.allowed_bearers,
+               &allowed_bearers);
+       if (err < 0)
+               return;
+       connman_session_free_bearers(info->config.allowed_bearers);
+       info->config.allowed_bearers = allowed_bearers;
+
+       info->config.type = apply_policy_on_type(
+                               session->policy_config->type,
+                               info->config.type);
+
+       info->config.roaming_policy = session->policy_config->roaming_policy;
+
+       info->config.ecall = session->policy_config->ecall;
+       if (info->config.ecall == TRUE)
+               ecall_session = session;
+
+       info->config.priority = session->policy_config->priority;
+
+       session_changed(session, CONNMAN_SESSION_TRIGGER_SETTING);
+}
+
 static DBusMessage *connect_session(DBusConnection *conn,
                                        DBusMessage *msg, void *user_data)
 {
-- 
1.7.12.315.g682ce8b

_______________________________________________
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman

Reply via email to