From: Daniel Wagner <[email protected]>
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 29b637d..f178bb4 100644
--- a/include/session.h
+++ b/include/session.h
@@ -81,6 +81,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 29d98ea..64a91e3 100644
--- a/src/session.c
+++ b/src/session.c
@@ -1367,6 +1367,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.1.382.gb0576a6
_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman