summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Wagner <daniel.wagner@bmw-carit.de>2012-09-26 14:24:56 +0200
committerDaniel Wagner <daniel.wagner@bmw-carit.de>2012-09-27 10:28:28 +0200
commita374db97cda09ca0cdd16ca0c19f7d1ecdc974a8 (patch)
treeaf13f6334c856482cf0e3d2e313b0ebe320d2e64
parent3b2d8bb429d1339e7edf9d20331e9b9a3514d279 (diff)
downloadconnman-a374db97cda09ca0cdd16ca0c19f7d1ecdc974a8.tar.gz
connman-a374db97cda09ca0cdd16ca0c19f7d1ecdc974a8.tar.bz2
connman-a374db97cda09ca0cdd16ca0c19f7d1ecdc974a8.zip
session: Get config from policy plugin
Let's ask the plugin for the default configuration. AllowedBearers and ConnectionType are not yet taken fromt the plugin. Instead the user configuration will be taken.
-rw-r--r--src/session.c80
1 files changed, 29 insertions, 51 deletions
diff --git a/src/session.c b/src/session.c
index 0a70e500..529d8877 100644
--- a/src/session.c
+++ b/src/session.c
@@ -88,6 +88,7 @@ struct connman_session {
connman_bool_t append_all;
struct session_info *info;
struct session_info *info_last;
+ struct connman_session_config *policy_config;
connman_bool_t ecall;
@@ -167,22 +168,6 @@ static enum connman_session_type string2type(const char *type)
return CONNMAN_SESSION_TYPE_ANY;
}
-static enum connman_session_roaming_policy string2roamingpolicy(const char *policy)
-{
- if (g_strcmp0(policy, "default") == 0)
- return CONNMAN_SESSION_ROAMING_POLICY_DEFAULT;
- else if (g_strcmp0(policy, "always") == 0)
- return CONNMAN_SESSION_ROAMING_POLICY_ALWAYS;
- else if (g_strcmp0(policy, "forbidden") == 0)
- return CONNMAN_SESSION_ROAMING_POLICY_FORBIDDEN;
- else if (g_strcmp0(policy, "national") == 0)
- return CONNMAN_SESSION_ROAMING_POLICY_NATIONAL;
- else if (g_strcmp0(policy, "international") == 0)
- return CONNMAN_SESSION_ROAMING_POLICY_INTERNATIONAL;
- else
- return CONNMAN_SESSION_ROAMING_POLICY_UNKNOWN;
-}
-
static enum connman_service_type bearer2service(const char *bearer)
{
if (bearer == NULL)
@@ -229,28 +214,6 @@ static char *service2bearer(enum connman_service_type type)
return "";
}
-static int policy_get_bool(struct connman_session *session, const char *id,
- const char *key, connman_bool_t *val)
-{
- if (session->policy == NULL) {
- *val = FALSE;
- return -EINVAL;
- }
-
- return (*session->policy->get_bool)(session, key, val);
-}
-
-static int policy_get_string(struct connman_session *session, const char *id,
- const char *key, char **val)
-{
- if (session->policy == NULL) {
- *val = NULL;
- return -EINVAL;
- }
-
- return (*session->policy->get_string)(session, key, val);
-}
-
static int assign_policy_plugin(struct connman_session *session)
{
GSList *list;
@@ -269,6 +232,24 @@ static int assign_policy_plugin(struct connman_session *session)
return 0;
}
+static int create_policy_config(struct connman_session *session)
+{
+ struct connman_session_config *config;
+
+ config = (*session->policy->create)(session);
+ if (config == NULL)
+ return -ENOMEM;
+
+ session->policy_config = config;
+
+ return 0;
+}
+
+static void destroy_policy_config(struct connman_session *session)
+{
+ (*session->policy->destroy)(session);
+}
+
static void probe_policy(struct connman_session_policy *policy)
{
@@ -803,6 +784,7 @@ static void cleanup_session(gpointer user_data)
__connman_service_disconnect(info->entry->service);
}
+ destroy_policy_config(session);
g_slist_foreach(info->config.allowed_bearers, cleanup_bearer, NULL);
g_slist_free(info->config.allowed_bearers);
@@ -1493,10 +1475,6 @@ int __connman_session_create(DBusMessage *msg)
struct connman_session *session = NULL;
struct session_info *info, *info_last;
enum connman_session_type type = CONNMAN_SESSION_TYPE_ANY;
- connman_bool_t priority;
- connman_bool_t ecall_app;
- enum connman_session_roaming_policy roaming_policy;
- char *roaming_policy_str;
GSList *allowed_bearers = NULL;
int err;
@@ -1595,20 +1573,20 @@ int __connman_session_create(DBusMessage *msg)
g_dbus_add_disconnect_watch(connection, session->owner,
owner_disconnect, session, NULL);
- assign_policy_plugin(session);
-
- policy_get_bool(session, owner, "Priority", &priority);
- policy_get_bool(session, owner, "EmergencyCall", &ecall_app);
- policy_get_string(session, owner, "RoamingPolicy", &roaming_policy_str);
- roaming_policy = string2roamingpolicy(roaming_policy_str);
+ err = assign_policy_plugin(session);
+ if (err < 0)
+ goto err;
+ err = create_policy_config(session);
+ if (err < 0)
+ goto err;
- if (ecall_app == TRUE)
+ if (session->policy_config->ecall == TRUE)
ecall_session = session;
info->state = CONNMAN_SESSION_STATE_DISCONNECTED;
info->config.type = type;
- info->config.priority = priority;
- info->config.roaming_policy = roaming_policy;
+ info->config.priority = session->policy_config->priority;
+ info->config.roaming_policy = session->policy_config->roaming_policy;
info->entry = NULL;
if (allowed_bearers == NULL) {