diff options
Diffstat (limited to 'server/src/client_connection.cc')
-rw-r--r-- | server/src/client_connection.cc | 61 |
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.")); |