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.cc61
1 files changed, 37 insertions, 24 deletions
diff --git a/server/src/client_connection.cc b/server/src/client_connection.cc
index 075dc46..c3de7b0 100644
--- a/server/src/client_connection.cc
+++ b/server/src/client_connection.cc
@@ -85,7 +85,7 @@ ClientConnection::ClientConnection(Environment &e, headers_t headers,
did_commit = false;
#endif
- parser_complete = false;
+ parser_complete = true;
}
ClientConnection::~ClientConnection()
@@ -108,6 +108,7 @@ void ClientConnection::nocommit(Session *session)
}
void ClientConnection::commit(Session *session)
+ throw(LUAScript::Exception, Journal::Exception)
{
if(docommit) {
if(session->isReadonly()) { // Commit of an empty session discards it.
@@ -117,7 +118,13 @@ void ClientConnection::commit(Session *session)
DEBUG(connection, "Commit (%s)\n", session->id().c_str());
std::string sid = session->id();
- session->commit();
+ try {
+ session->commit();
+ } catch(LUAScript::Exception &e) {
+ throw e;
+ } catch(Journal::Exception &e) {
+ throw e;
+ }
env.sessions.deleteSession(sid);
sessionid = "";
docommit = false;
@@ -139,8 +146,19 @@ void ClientConnection::discard(Session *session)
}
}
-bool ClientConnection::handle(const char *data, size_t size)
+bool ClientConnection::data(const char *data, size_t size)
{
+ DEBUG(connection, "data(%p %d)\n", data, size);
+
+ parser_complete = parser.parse(data, size);
+
+ return true;
+}
+
+bool ClientConnection::handle()
+{
+ DEBUG(connection, "handle\n");
+
if(patientid == "") {
response = error_box(xml_encode("Missing patientid."));
parser_complete = true;
@@ -189,33 +207,28 @@ bool ClientConnection::handle(const char *data, size_t size)
sessionid = session->id();
- try {
+ // Force session discard on empty template name.
+ if(templ == "") dodiscard = true;
- if((!data || !size) && (docommit || donocommit || dodiscard)) {
- parser_complete = true;
- commit(session);
- nocommit(session);
- discard(session);
- return true;
+ try {
+ if(parser_complete) {
+ response = handleTransaction(request, transaction, env, *session);
}
- // Force session discard on empty template name.
- if(templ == "") dodiscard = true;
-
- if(size == 0 || parser.parse(data, size)) {
- parser_complete = true;
-
- {
- //SessionAutolock lock(session);
- response = handleTransaction(request, transaction, env, *session);
- }
-
+ try {
commit(session);
- nocommit(session);
- discard(session);
-
+ } catch(LUAScript::Exception &e) {
+ response = error_box(xml_encode(e.msg));
+ return true;
+ } catch(Journal::Exception &e) {
+ response = error_box(xml_encode(e.msg));
return true;
}
+ nocommit(session);
+ discard(session);
+
+ return true;
+
} catch(...) {
ERR(connection, "Failed to parse data!\n");
response = error_box(xml_encode("XML Parse error."));