Beispiel #1
0
int 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.
     */

    if (session->id_type != session->policy_config->id_type) {
        cleanup_firewall_session(session);
        err = init_firewall_session(session);
        if (err < 0) {
            connman_session_destroy(session);
            return err;
        }

        session->id_type = session->policy_config->id_type;
    }

    apply_policy_on_bearers(
        session->policy_config->allowed_bearers,
        session->user_allowed_bearers,
        &allowed_bearers);

    if (session->active)
        set_active_session(session, false);

    session->active = false;
    session_deactivate(session);

    g_slist_free(info->config.allowed_bearers);
    info->config.allowed_bearers = allowed_bearers;

    session_activate(session);

    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)
        ecall_session = session;

    info->config.priority = session->policy_config->priority;

    session_notify(session);

    return 0;
}
Beispiel #2
0
static void cleanup_session(gpointer user_data)
{
    struct connman_session *session = user_data;

    DBG("remove %s", session->session_path);

    cleanup_routing_table(session);
    cleanup_firewall_session(session);

    if (session->active)
        set_active_session(session, false);

    session_deactivate(session);
    update_session_state(session);

    g_slist_free(session->user_allowed_bearers);

    free_session(session);
}
Beispiel #3
0
static void update_firewall(struct connman_session *session)
{
	cleanup_firewall_session(session);
	init_firewall_session(session);
}