Annotation of embedaddon/strongswan/src/manager/controller/gateway_controller.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 "gateway_controller.h"
17: #include "../manager.h"
18: #include "../gateway.h"
19:
20: #include <library.h>
21:
22:
23: typedef struct private_gateway_controller_t private_gateway_controller_t;
24:
25: /**
26: * private data of the gateway_controller
27: */
28: struct private_gateway_controller_t {
29:
30: /**
31: * public functions
32: */
33: gateway_controller_t public;
34:
35: /**
36: * manager instance
37: */
38: manager_t *manager;
39:
40: };
41:
42: static void list(private_gateway_controller_t *this, fast_request_t *request)
43: {
44: enumerator_t *enumerator;
45: char *name, *address;
46: int id, port;
47:
48: enumerator = this->manager->create_gateway_enumerator(this->manager);
49: while (enumerator->enumerate(enumerator, &id, &name, &port, &address))
50: {
51: request->setf(request, "gateways.%d.name=%s", id, name);
52: if (port)
53: {
54: request->setf(request, "gateways.%d.address=tcp://%s:%d",
55: id, address, port);
56: }
57: else
58: {
59: request->setf(request, "gateways.%d.address=unix://%s",
60: id, IPSEC_PIDDIR"/charon.xml");
61: }
62: }
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");
67: }
68:
69: static void _select(private_gateway_controller_t *this, fast_request_t *request)
70: {
71: char *id;
72:
73: id = request->get_query_data(request, "gateway");
74: if (id)
75: {
76: if (this->manager->select_gateway(this->manager, atoi(id)))
77: {
78: request->redirect(request, "ikesa/list");
79: return;
80: }
81: }
82: request->redirect(request, "gateway/list");
83: }
84:
85: METHOD(fast_controller_t, get_name, char*,
86: private_gateway_controller_t *this)
87: {
88: return "gateway";
89: }
90:
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)
94: {
95: if (!this->manager->logged_in(this->manager))
96: {
97: return request->redirect(request, "auth/login");
98: }
99: if (action)
100: {
101: if (streq(action, "list"))
102: {
103: return list(this, request);
104: }
105: else if (streq(action, "select"))
106: {
107: return _select(this, request);
108: }
109: }
110: request->redirect(request, "gateway/list");
111: }
112:
113: METHOD(fast_controller_t, destroy, void,
114: private_gateway_controller_t *this)
115: {
116: free(this);
117: }
118:
119: /*
120: * see header file
121: */
122: fast_controller_t *gateway_controller_create(fast_context_t *context,
123: void *param)
124: {
125: private_gateway_controller_t *this;
126:
127: INIT(this,
128: .public = {
129: .controller = {
130: .get_name = _get_name,
131: .handle = _handle,
132: .destroy = _destroy,
133: },
134: },
135: .manager = (manager_t*)context,
136: );
137:
138: return &this->public.controller;
139: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>