* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
- *
- * $Id$
*/
#include "manager.h"
#include "gateway.h"
-#include <utils/linked_list.h>
+#include <collections/linked_list.h>
typedef struct private_manager_t private_manager_t;
* public functions
*/
manager_t public;
-
+
/**
* underlying storage database
*/
storage_t *store;
-
+
/**
* user id, if we are logged in
*/
int user;
-
+
/**
* selected gateway
*/
gateway_t *gateway;
-};
-
-/**
- * Implementation of manager_t.create_gateway_enumerator.
- */
-static enumerator_t* create_gateway_enumerator(private_manager_t *this)
+};
+
+METHOD(manager_t, create_gateway_enumerator, enumerator_t*,
+ private_manager_t *this)
{
return this->store->create_gateway_enumerator(this->store, this->user);
}
-/**
- * Implementation of manager_t.select_gateway.
- */
-static gateway_t* select_gateway(private_manager_t *this, int select_id)
+METHOD(manager_t, select_gateway, gateway_t*,
+ private_manager_t *this, int select_id)
{
if (select_id != 0)
{
int id, port;
char *name, *address;
host_t *host;
-
+
if (this->gateway) this->gateway->destroy(this->gateway);
this->gateway = NULL;
-
+
enumerator = this->store->create_gateway_enumerator(this->store, this->user);
while (enumerator->enumerate(enumerator, &id, &name, &port, &address))
{
return this->gateway;
}
-/**
- * Implementation of manager_t.logged_in.
- */
-static bool logged_in(private_manager_t *this)
+METHOD(manager_t, logged_in, bool,
+ private_manager_t *this)
{
return this->user != 0;
}
-/**
- * Implementation of manager_t.login.
- */
-static bool login(private_manager_t *this, char *username, char *password)
+METHOD(manager_t, login, bool,
+ private_manager_t *this, char *username, char *password)
{
if (!this->user)
{
return this->user != 0;
}
-/**
- * Implementation of manager_t.logout.
- */
-static void logout(private_manager_t *this)
+METHOD(manager_t, logout, void,
+ private_manager_t *this)
{
if (this->gateway)
{
this->user = 0;
}
-/**
- * Implementation of manager_t.destroy
- */
-static void destroy(private_manager_t *this)
+METHOD(context_t, destroy, void,
+ private_manager_t *this)
{
if (this->gateway) this->gateway->destroy(this->gateway);
free(this);
*/
manager_t *manager_create(storage_t *storage)
{
- private_manager_t *this = malloc_thing(private_manager_t);
-
- this->public.login = (bool(*)(manager_t*, char *username, char *password))login;
- this->public.logged_in = (bool(*)(manager_t*))logged_in;
- this->public.logout = (void(*)(manager_t*))logout;
- this->public.create_gateway_enumerator = (enumerator_t*(*)(manager_t*))create_gateway_enumerator;
- this->public.select_gateway = (gateway_t*(*)(manager_t*, int id))select_gateway;
- this->public.context.destroy = (void(*)(context_t*))destroy;
-
- this->user = 0;
- this->store = storage;
- this->gateway = NULL;
-
+ private_manager_t *this;
+
+ INIT(this,
+ .public = {
+ .login = _login,
+ .logged_in = _logged_in,
+ .logout = _logout,
+ .create_gateway_enumerator = _create_gateway_enumerator,
+ .select_gateway = _select_gateway,
+ .context = {
+ .destroy = _destroy,
+ },
+ },
+ .store = storage,
+ );
+
return &this->public;
}