summaryrefslogtreecommitdiff
path: root/server/src/client_connection.cc
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2012-01-26 12:08:39 +0100
committerBent Bisballe Nyeng <deva@aasimon.org>2012-01-26 12:08:39 +0100
commit4edae3f518353bb21a02fcda2dfcff83c5a72fc3 (patch)
tree7902e2b6af1dabdb5c49b906b8592874bfce407d /server/src/client_connection.cc
parente9ff9842e9a8c178f5e17c0cf5dde16db1a0d8fc (diff)
New onCommit scripting system.
Diffstat (limited to 'server/src/client_connection.cc')
-rw-r--r--server/src/client_connection.cc19
1 files changed, 17 insertions, 2 deletions
diff --git a/server/src/client_connection.cc b/server/src/client_connection.cc
index b9d17b9..c3de7b0 100644
--- a/server/src/client_connection.cc
+++ b/server/src/client_connection.cc
@@ -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;
@@ -208,7 +215,15 @@ bool ClientConnection::handle()
response = handleTransaction(request, transaction, env, *session);
}
- commit(session);
+ try {
+ commit(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);