summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorDaniel Wagner <daniel.wagner@bmw-carit.de>2012-09-26 11:08:41 +0200
committerDaniel Wagner <daniel.wagner@bmw-carit.de>2012-09-27 10:28:28 +0200
commit3b2d8bb429d1339e7edf9d20331e9b9a3514d279 (patch)
treebfc962b95af0c4d01585b183fd33419df6bfd0de /plugins
parent580921d2458dd24174d4cd4392e572112d24501f (diff)
downloadconnman-3b2d8bb429d1339e7edf9d20331e9b9a3514d279.tar.gz
connman-3b2d8bb429d1339e7edf9d20331e9b9a3514d279.tar.bz2
connman-3b2d8bb429d1339e7edf9d20331e9b9a3514d279.zip
session_policy: Implement create() and destroy()
Diffstat (limited to 'plugins')
-rw-r--r--plugins/session_policy.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/plugins/session_policy.c b/plugins/session_policy.c
index 906cc229..31ded238 100644
--- a/plugins/session_policy.c
+++ b/plugins/session_policy.c
@@ -33,6 +33,8 @@
#include <connman/log.h>
#include <connman/session.h>
+static GHashTable *config_hash;
+
static int policy_get_bool(struct connman_session *session,
const char *key, connman_bool_t *val)
{
@@ -61,13 +63,65 @@ static int policy_get_string(struct connman_session *session,
return 0;
}
+static struct connman_session_config *policy_create(
+ struct connman_session *session)
+{
+ struct connman_session_config *config;
+
+ DBG("session %p", session);
+
+ config = g_try_new0(struct connman_session_config, 1);
+ if (config == NULL)
+ return NULL;
+
+ config->priority = FALSE;
+ config->roaming_policy = CONNMAN_SESSION_ROAMING_POLICY_DEFAULT;
+ config->type = CONNMAN_SESSION_TYPE_ANY;
+ config->ecall = FALSE;
+ config->allowed_bearers = connman_session_allowed_bearers_any();
+ if (config->allowed_bearers == NULL) {
+ g_free(config);
+ return NULL;
+ }
+
+ g_hash_table_replace(config_hash, session, config);
+
+ return config;
+}
+
+static void policy_destroy(struct connman_session *session)
+{
+ DBG("session %p", session);
+
+ g_hash_table_remove(config_hash, session);
+}
+
static struct connman_session_policy session_policy = {
.name = "session policy configuration",
.priority = CONNMAN_SESSION_POLICY_PRIORITY_LOW,
.get_bool = policy_get_bool,
.get_string = policy_get_string,
+ .create = policy_create,
+ .destroy = policy_destroy,
};
+static void cleanup_bearer(gpointer data, gpointer user_data)
+{
+ struct connman_session_bearer *info = data;
+
+ g_free(info->name);
+ g_free(info);
+}
+
+static void cleanup_config(gpointer user_data)
+{
+ struct connman_session_config *config = user_data;
+
+ g_slist_foreach(config->allowed_bearers, cleanup_bearer, NULL);
+ g_slist_free(config->allowed_bearers);
+ g_free(config);
+}
+
static int session_policy_init(void)
{
int err;
@@ -76,11 +130,20 @@ static int session_policy_init(void)
if (err < 0)
return err;
+ config_hash = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL,
+ cleanup_config);
+ if (config_hash == NULL) {
+ connman_session_policy_unregister(&session_policy);
+ return -ENOMEM;
+ }
+
return 0;
}
static void session_policy_exit(void)
{
+ g_hash_table_destroy(config_hash);
+
connman_session_policy_unregister(&session_policy);
}