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>