Annotation of embedaddon/strongswan/src/manager/manager.c, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 2007 Martin Willi
                      3:  * HSR Hochschule fuer Technik Rapperswil
                      4:  *
                      5:  * This program is free software; you can redistribute it and/or modify it
                      6:  * under the terms of the GNU General Public License as published by the
                      7:  * Free Software Foundation; either version 2 of the License, or (at your
                      8:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
                      9:  *
                     10:  * This program is distributed in the hope that it will be useful, but
                     11:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     12:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
                     13:  * for more details.
                     14:  */
                     15: 
                     16: #include "manager.h"
                     17: 
                     18: #include "gateway.h"
                     19: 
                     20: #include <collections/linked_list.h>
                     21: 
                     22: typedef struct private_manager_t private_manager_t;
                     23: 
                     24: /**
                     25:  * private data of manager
                     26:  */
                     27: struct private_manager_t {
                     28: 
                     29:        /**
                     30:         * public functions
                     31:         */
                     32:        manager_t public;
                     33: 
                     34:        /**
                     35:         * underlying storage database
                     36:         */
                     37:        storage_t *store;
                     38: 
                     39:        /**
                     40:         * user id, if we are logged in
                     41:         */
                     42:        int user;
                     43: 
                     44:        /**
                     45:         * selected gateway
                     46:         */
                     47:        gateway_t *gateway;
                     48: };
                     49: 
                     50: METHOD(manager_t, create_gateway_enumerator, enumerator_t*,
                     51:        private_manager_t *this)
                     52: {
                     53:        return this->store->create_gateway_enumerator(this->store, this->user);
                     54: }
                     55: 
                     56: METHOD(manager_t, select_gateway, gateway_t*,
                     57:        private_manager_t *this, int select_id)
                     58: {
                     59:        if (select_id != 0)
                     60:        {
                     61:                enumerator_t *enumerator;
                     62:                int id, port;
                     63:                char *name, *address;
                     64:                host_t *host;
                     65: 
                     66:                if (this->gateway) this->gateway->destroy(this->gateway);
                     67:                this->gateway = NULL;
                     68: 
                     69:                enumerator = this->store->create_gateway_enumerator(this->store, this->user);
                     70:                while (enumerator->enumerate(enumerator, &id, &name, &port, &address))
                     71:                {
                     72:                        if (select_id == id)
                     73:                        {
                     74:                                if (port == 0)
                     75:                                {
                     76:                                        this->gateway = gateway_create_unix(name);
                     77:                                }
                     78:                                else
                     79:                                {
                     80:                                        host = host_create_from_string(address, port);
                     81:                                        if (host)
                     82:                                        {
                     83:                                                this->gateway = gateway_create_tcp(name, host);
                     84:                                        }
                     85:                                }
                     86:                                break;
                     87:                        }
                     88:                }
                     89:                enumerator->destroy(enumerator);
                     90:        }
                     91:        return this->gateway;
                     92: }
                     93: 
                     94: METHOD(manager_t, logged_in, bool,
                     95:        private_manager_t *this)
                     96: {
                     97:        return this->user != 0;
                     98: }
                     99: 
                    100: METHOD(manager_t, login, bool,
                    101:        private_manager_t *this, char *username, char *password)
                    102: {
                    103:        if (!this->user)
                    104:        {
                    105:                this->user = this->store->login(this->store, username, password);
                    106:        }
                    107:        return this->user != 0;
                    108: }
                    109: 
                    110: METHOD(manager_t, logout, void,
                    111:        private_manager_t *this)
                    112: {
                    113:        if (this->gateway)
                    114:        {
                    115:                this->gateway->destroy(this->gateway);
                    116:                this->gateway = NULL;
                    117:        }
                    118:        this->user = 0;
                    119: }
                    120: 
                    121: METHOD(fast_context_t, destroy, void,
                    122:        private_manager_t *this)
                    123: {
                    124:        if (this->gateway) this->gateway->destroy(this->gateway);
                    125:        free(this);
                    126: }
                    127: 
                    128: /*
                    129:  * see header file
                    130:  */
                    131: manager_t *manager_create(storage_t *storage)
                    132: {
                    133:        private_manager_t *this;
                    134: 
                    135:        INIT(this,
                    136:                .public = {
                    137:                        .login = _login,
                    138:                        .logged_in = _logged_in,
                    139:                        .logout = _logout,
                    140:                        .create_gateway_enumerator = _create_gateway_enumerator,
                    141:                        .select_gateway = _select_gateway,
                    142:                        .context = {
                    143:                                .destroy = _destroy,
                    144:                        },
                    145:                },
                    146:                .store = storage,
                    147:        );
                    148: 
                    149:        return &this->public;
                    150: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>