2 * @file status_controller.c
4 * @brief Implementation of status_controller_t.
9 * Copyright (C) 2007 Martin Willi
10 * Hochschule fuer Technik Rapperswil
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the
14 * Free Software Foundation; either version 2 of the License, or (at your
15 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
19 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
23 #include "status_controller.h"
24 #include "../manager.h"
25 #include "../gateway.h"
33 typedef struct private_status_controller_t private_status_controller_t
;
36 * private data of the task manager
38 struct private_status_controller_t
{
43 status_controller_t
public;
51 static void ikesalist(private_status_controller_t
*this,
52 request_t
*request
, response_t
*response
)
57 enumerator_t
*e1
, *e2
, *e3
, *e4
, *e5
, *e6
;
58 char *name
, *value
, *id
, *section
;
60 gateway
= this->manager
->select_gateway(this->manager
, 0);
61 str
= gateway
->request(gateway
, "<message type=\"request\" id=\"1\">"
68 response
->printf(response
, "gateway did not respond");
72 doc
= xml_create(str
);
75 response
->printf(response
, "parsing XML failed");
79 template_t
*t
= template_create("templates/status/ikesalist.cs");
81 e1
= doc
->children(doc
);
82 while (e1
->enumerate(e1
, &node
, &name
, &value
))
84 if (streq(name
, "message"))
86 e2
= node
->children(node
);
87 while (e2
->enumerate(e2
, &node
, &name
, &value
))
89 if (streq(name
, "query"))
91 e3
= node
->children(node
);
92 while (e3
->enumerate(e3
, &node
, &name
, &value
))
94 if (streq(name
, "ikesalist"))
96 e4
= node
->children(node
);
97 while (e4
->enumerate(e4
, &node
, &name
, &value
))
99 if (streq(name
, "ikesa"))
101 e5
= node
->children(node
);
102 while (e5
->enumerate(e5
, &node
, &name
, &value
))
104 if (streq(name
, "id"))
108 else if(streq(name
, "local") ||
109 streq(name
, "remote"))
112 e6
= node
->children(node
);
113 while (e6
->enumerate(e6
, &node
, &name
, &value
))
115 t
->setf(t
, "ikesas.%s.%s.%s=%s", id
, section
, name
, value
);
121 t
->setf(t
, "ikesas.%s.%s=%s", id
, name
, value
);
138 t
->render(t
, response
);
144 * redirect to authentication login
146 static void login(private_status_controller_t
*this,
147 request_t
*request
, response_t
*response
)
149 response
->redirect(response
, "auth/login");
153 * redirect to gateway selection
155 static void selection(private_status_controller_t
*this,
156 request_t
*request
, response_t
*response
)
158 response
->redirect(response
, "gateway/list");
162 * Implementation of controller_t.get_name
164 static char* get_name(private_status_controller_t
*this)
170 * Implementation of controller_t.get_handler
172 static controller_handler_t
get_handler(private_status_controller_t
*this, char *name
)
174 if (!this->manager
->logged_in(this->manager
)) return (controller_handler_t
)login
;
175 if (this->manager
->select_gateway(this->manager
, 0) == NULL
) return (controller_handler_t
)selection
;
176 if (streq(name
, "ikesalist")) return (controller_handler_t
)ikesalist
;
181 * Implementation of controller_t.destroy
183 static void destroy(private_status_controller_t
*this)
191 controller_t
*status_controller_create(context_t
*context
, void *param
)
193 private_status_controller_t
*this = malloc_thing(private_status_controller_t
);
195 this->public.controller
.get_name
= (char*(*)(controller_t
*))get_name
;
196 this->public.controller
.get_handler
= (controller_handler_t(*)(controller_t
*,char*))get_handler
;
197 this->public.controller
.destroy
= (void(*)(controller_t
*))destroy
;
199 this->manager
= (manager_t
*)context
;
201 return &this->public.controller
;