summaryrefslogtreecommitdiff
path: root/server/src/admin_connection.cc
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/admin_connection.cc')
-rw-r--r--server/src/admin_connection.cc21
1 files changed, 17 insertions, 4 deletions
diff --git a/server/src/admin_connection.cc b/server/src/admin_connection.cc
index 0fe5380..fac52a1 100644
--- a/server/src/admin_connection.cc
+++ b/server/src/admin_connection.cc
@@ -27,6 +27,8 @@
*/
#include "admin_connection.h"
+#include <stdlib.h>
+
#include "admin_rc.h"
#include "admin_export.h"
@@ -36,7 +38,11 @@
static std::string admin_sessionunlock(Environment &env, std::string id)
{
- Session *session = env.sessions.session(id);
+ // NOTE: Returned session is returned in locked state!
+ Session *session = NULL;
+ SessionAutounlock l(&session);
+
+ session = env.sessions.lockedSession(id);
if(session) {
if(session->isReadonly()) {
env.sessions.deleteSession(id);
@@ -56,8 +62,10 @@ static std::string admin_listactivesessions(Environment &env)
std::vector<std::string> act = env.sessions.activeSessions();
std::vector<std::string>::iterator i = act.begin();
while(i != act.end()) {
- Session *s = env.sessions.session(*i);
- SessionAutolock lock(*s);
+ // NOTE: Returned session is returned in locked state!
+ Session *s = NULL;
+ SessionAutounlock l(&s);
+ s = env.sessions.lockedSession(*i);
str += "Session " + *i + ": "+s->templ+" on "+s->patientid+" "+
std::string(s->idle()?"[idle]":"[active]")+"\n";
i++;
@@ -118,8 +126,13 @@ bool AdminConnection::handle(const char *data, size_t size)
}
if(uri == "/export" && args.find("template") != args.end()) {
+ time_t from = 0;
+ if(args.find("from") != args.end()) from = atoi(args["from"].c_str());
+
+ time_t to = time(NULL);
+ if(args.find("to") != args.end()) to = atoi(args["to"].c_str());
bool ok;
- std::string res = admin_export(env, args["template"], &ok);
+ std::string res = admin_export(env, args["template"], &ok, from, to);
if(!ok) reply = admin_header(uri) + res + admin_rc("footer");
else {
reply = res;