summaryrefslogtreecommitdiff
path: root/src/messagehandler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/messagehandler.cc')
-rw-r--r--src/messagehandler.cc79
1 files changed, 56 insertions, 23 deletions
diff --git a/src/messagehandler.cc b/src/messagehandler.cc
index 9a00e46..d20c963 100644
--- a/src/messagehandler.cc
+++ b/src/messagehandler.cc
@@ -34,6 +34,8 @@
#include "messageparser.h"
+#include "errorcodes.h"
+
MessageList handle_msg(MessageList msgList, clientid_t wsi)
{
@@ -47,11 +49,19 @@ MessageList handle_msg(MessageList msgList, clientid_t wsi)
if(m.cmd == cmd::login)
{
connection_handler.login(wsi, m.login.user, m.login.password);
+ if(!connection_handler.authenticated(wsi))
+ {
+ outmsgs.push_back(create_msg_error(ErrorCode::LoginFailed,
+ "Bad username or password.", wsi));
+ continue;
+ }
}
// If client is not authenticated; do not continue beyond this point...
if(!connection_handler.authenticated(wsi))
{
+ outmsgs.push_back(create_msg_error(ErrorCode::Unauthorized,
+ "Not authorized.", wsi));
continue;
}
@@ -59,12 +69,19 @@ MessageList handle_msg(MessageList msgList, clientid_t wsi)
{
case cmd::login:
// Already handled, before this switch ... case
+ INFO(messagehandler, "Handling login command\n");
break;
case cmd::logout:
+ INFO(messagehandler, "Handling logout command\n");
connection_handler.logout(wsi);
break;
+ case cmd::create_with_attributes:
+ // Never sent to the server
+ INFO(messagehandler, "Handling create_with_attributes command\n");
+ break;
+
case cmd::create:
{
INFO(messagehandler, "Handling create command\n");
@@ -74,9 +91,15 @@ MessageList handle_msg(MessageList msgList, clientid_t wsi)
m.create.insertbeforeid);
outmsgs.push_back(m);
}
- catch (std::exception& e)
+ catch (const ErrorMessage& e)
{
- DEBUG(messagehandler, "Error creating node\n");
+ // Set client id (wsi) and forward upstream
+ outmsgs.push_back(create_msg_error(e, wsi));
+ }
+ catch (...)
+ {
+ outmsgs.push_back(create_msg_error(ErrorCode::Unknown,
+ "Unknown create error", wsi));
}
}
break;
@@ -99,9 +122,15 @@ MessageList handle_msg(MessageList msgList, clientid_t wsi)
id++;
}
}
- catch (std::exception& e)
+ catch (const ErrorMessage& e)
+ {
+ // Set client id (wsi) and forward upstream
+ outmsgs.push_back(create_msg_error(e, wsi));
+ }
+ catch (...)
{
- DEBUG(messagehandler, "Error remove node\n");
+ outmsgs.push_back(create_msg_error(ErrorCode::Unknown,
+ "Unknown remove error", wsi));
}
}
break;
@@ -113,7 +142,8 @@ MessageList handle_msg(MessageList msgList, clientid_t wsi)
{
node_t removenode = node_manager.node(m.move.id);
NodeIdListPair tilpair =
- node_manager.moveNode(m.move.id, m.move.parentid, m.move.insertbeforeid);
+ node_manager.moveNode(m.move.id, m.move.parentid,
+ m.move.insertbeforeid);
node_t createnode = node_manager.node(m.move.id);
message_t removemsg = create_msg_remove(removenode);
@@ -143,24 +173,27 @@ MessageList handle_msg(MessageList msgList, clientid_t wsi)
outmsgs.push_back(removemsg);
outmsgs.push_back(createmsg);
}
- catch (std::exception& e)
+ catch (const ErrorMessage& e)
{
- DEBUG(messagehandler, "Error moving node\n");
+ // Set client id (wsi) and forward upstream
+ outmsgs.push_back(create_msg_error(e, wsi));
+ }
+ catch (...)
+ {
+ outmsgs.push_back(create_msg_error(ErrorCode::Unknown,
+ "Unknown move error", wsi));
}
}
break;
case cmd::subscribe:
- {
- //connection_handler.subscribe(wsi, m.subscribe.id);
- outmsgs.push_back(m);
- }
+ INFO(messagehandler, "Handling subscribe command\n");
+ outmsgs.push_back(m);
break;
case cmd::unsubscribe:
- //connection_handler.unsubscribe(wsi, m.subscribe.id);
+ INFO(messagehandler, "Handling unsubscribe command\n");
outmsgs.push_back(m);
- DEBUG(handler, "unsubscribe: %d\n", (int)m.unsubscribe.id);
break;
case cmd::update:
@@ -173,24 +206,24 @@ MessageList handle_msg(MessageList msgList, clientid_t wsi)
m.update.value);
outmsgs.push_back(m);
}
- catch (std::exception& e)
+ catch (const ErrorMessage& e)
{
- DEBUG(messagehandler, "Error updating node\n");
+ // Set client id (wsi) and forward upstream
+ outmsgs.push_back(create_msg_error(e, wsi));
+ }
+ catch (...)
+ {
+ outmsgs.push_back(create_msg_error(ErrorCode::Unknown,
+ "Unknown update error", wsi));
}
}
break;
case cmd::error:
- ERR(messagehandler, "An error occurred.\n");
- break;
-
- default:
- WARN(messagehandler, "!!! Unknown command %d\n", m.cmd);
+ INFO(messagehandler, "Handling error command\n");
+ outmsgs.push_back(m); // Just forward the error message
break;
}
- node_manager.tree.toStdOut();
- DEBUG(messagehandler, "%d affected nodes registered\n",
- (int)m.nodes.size());
}
return outmsgs;