2 * Copyright (C) 2007 Martin Willi
3 * Hochschule fuer Technik Rapperswil
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>.
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
16 #include "gateway_controller.h"
17 #include "../manager.h"
18 #include "../gateway.h"
23 typedef struct private_gateway_controller_t private_gateway_controller_t
;
26 * private data of the gateway_controller
28 struct private_gateway_controller_t
{
33 gateway_controller_t
public;
42 static void list(private_gateway_controller_t
*this, fast_request_t
*request
)
44 enumerator_t
*enumerator
;
48 enumerator
= this->manager
->create_gateway_enumerator(this->manager
);
49 while (enumerator
->enumerate(enumerator
, &id
, &name
, &port
, &address
))
51 request
->setf(request
, "gateways.%d.name=%s", id
, name
);
54 request
->setf(request
, "gateways.%d.address=tcp://%s:%d",
59 request
->setf(request
, "gateways.%d.address=unix://%s",
60 id
, IPSEC_PIDDIR
"/charon.xml");
63 enumerator
->destroy(enumerator
);
64 request
->set(request
, "action", "select");
65 request
->set(request
, "title", "Choose gateway");
66 request
->render(request
, "templates/gateway/list.cs");
69 static void _select(private_gateway_controller_t
*this, fast_request_t
*request
)
73 id
= request
->get_query_data(request
, "gateway");
76 if (this->manager
->select_gateway(this->manager
, atoi(id
)))
78 request
->redirect(request
, "ikesa/list");
82 request
->redirect(request
, "gateway/list");
85 METHOD(fast_controller_t
, get_name
, char*,
86 private_gateway_controller_t
*this)
91 METHOD(fast_controller_t
, handle
, void,
92 private_gateway_controller_t
*this, fast_request_t
*request
, char *action
,
93 char *p2
, char *p3
, char *p4
, char *p5
)
95 if (!this->manager
->logged_in(this->manager
))
97 return request
->redirect(request
, "auth/login");
101 if (streq(action
, "list"))
103 return list(this, request
);
105 else if (streq(action
, "select"))
107 return _select(this, request
);
110 request
->redirect(request
, "gateway/list");
113 METHOD(fast_controller_t
, destroy
, void,
114 private_gateway_controller_t
*this)
122 fast_controller_t
*gateway_controller_create(fast_context_t
*context
,
125 private_gateway_controller_t
*this;
130 .get_name
= _get_name
,
135 .manager
= (manager_t
*)context
,
138 return &this->public.controller
;