summaryrefslogtreecommitdiff
path: root/server/src/client_connection.cc
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/client_connection.cc')
-rw-r--r--server/src/client_connection.cc49
1 files changed, 35 insertions, 14 deletions
diff --git a/server/src/client_connection.cc b/server/src/client_connection.cc
index 9a1ac0f..1ec7e7c 100644
--- a/server/src/client_connection.cc
+++ b/server/src/client_connection.cc
@@ -44,21 +44,42 @@ static std::string error_box(std::string message)
static bool did_commit = false;
#endif
-ClientConnection::ClientConnection(Environment &e, headers_t &headers)
+ClientConnection::ClientConnection(Environment &e, headers_t &headers,
+ headers_t args, std::string uri)
: env(e), parser(&transaction)
{
DEBUG(connection, "[%p] CREATE\n", this);
- if(headers.contains("SessionID"))
- sessionid = headers["SessionID"];
- if(headers.contains("SessionPatientID"))
- patientid = headers["SessionPatientID"];
- if(headers.contains("SessionTemplate"))
- templ = headers["SessionTemplate"];
-
- docommit = headers.contains("SessionCommit");
- donocommit = headers.contains("SessionNoCommit");
- dodiscard = headers.contains("SessionDiscard");
+ size_t i = 0;
+ std::string *tar[3];
+ tar[0] = &request.course;
+ tar[1] = &request.templ;
+ tar[2] = &request.macro;
+ int p = -1;
+ while(i < uri.size() && p < 3) {
+ if(uri[i] == '/') {
+ p++;
+ } else if(p > -1) {
+ *(tar[p]) += uri[i];
+ } else {
+ ERR(connection, "Malformed URI. Missing beginning '/'!");
+ }
+ i++;
+ }
+
+ DEBUG(connection, "Course: %s, Template: %s, Macro: %s\n",
+ request.course.c_str(),
+ request.templ.c_str(),
+ request.macro.c_str());
+
+ templ = request.templ;
+
+ request.patientid = patientid = args.lookup("patientid");
+ sessionid = args.lookup("sessionid");
+
+ docommit = args.lookup("statechange") == "commit";
+ donocommit = args.lookup("statechange") == "nocommit";
+ dodiscard = args.lookup("statechange") == "discard";
#ifdef TEST_CLIENT_CONNECTION
did_commit = false;
@@ -151,7 +172,7 @@ bool ClientConnection::handle(const char *data, size_t size)
try {
- if(!data || !size) {
+ if((!data || !size) && (docommit || donocommit || dodiscard)) {
parser_complete = true;
commit(session);
nocommit(session);
@@ -159,12 +180,12 @@ bool ClientConnection::handle(const char *data, size_t size)
return true;
}
- if(parser.parse(data, size)) {
+ if(size == 0 || parser.parse(data, size)) {
parser_complete = true;
{
SessionAutolock lock(*session);
- response = handleTransaction(transaction, env, *session);
+ response = handleTransaction(request, transaction, env, *session);
}
commit(session);