summaryrefslogtreecommitdiff
path: root/src/messageparser.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/messageparser.cc')
-rw-r--r--src/messageparser.cc80
1 files changed, 55 insertions, 25 deletions
diff --git a/src/messageparser.cc b/src/messageparser.cc
index 62923be..bfaa033 100644
--- a/src/messageparser.cc
+++ b/src/messageparser.cc
@@ -98,75 +98,95 @@ inline static void parse_into_msg_tokens(std::string& data,
}
inline static void create_msg_list(MsgTokensList& msgTokensList,
- MessageList& msgList) {
+ MessageList& msgList,
+ bool clientmode) {
+ int origin = 0;
+ if(clientmode) {
+ origin = 1;
+ }
+
MsgTokensList::iterator it_msg;
for(it_msg = msgTokensList.begin(); it_msg != msgTokensList.end(); it_msg++) {
TokenVector t = *it_msg;
//malformed msg
- if(t.size() < 1) continue;
+ if(t.size() < origin+1) continue;
message_t m;
- if(t[0] == "observe") m.cmd = cmd::observe;
- else if(t[0] == "unobserve") m.cmd = cmd::unobserve;
- else if(t[0] == "create") m.cmd = cmd::create;
- else if(t[0] == "remove") m.cmd = cmd::remove;
- else if(t[0] == "move") m.cmd = cmd::move;
- else if(t[0] == "update") m.cmd = cmd::update;
+// printf("t[%d] : %s, running in clientmode: %d\n", origin, t[origin].c_str(), clientmode);
+
+// printf("%d\n", t.size());
+
+ if(t[origin] == "observe") m.cmd = cmd::observe;
+ else if(t[origin] == "unobserve") m.cmd = cmd::unobserve;
+ else if(t[origin] == "create") m.cmd = cmd::create;
+ else if(t[origin] == "remove") m.cmd = cmd::remove;
+ else if(t[origin] == "move") m.cmd = cmd::move;
+ else if(t[origin] == "update") m.cmd = cmd::update;
else m.cmd = cmd::error;
// printf("Number of tokens %d\n", t.size());
switch(m.cmd) {
case cmd::observe: {
- if(t.size() != 1+1) {
- printf("Wrong number of parameters\n");
+ if(t.size() != origin+1+1) {
+ printf("W1: rong number of parameters\n");
continue;
}
- m.observe.id = atoi(t[1].c_str());
+ m.observe.id = atoi(t[origin+1].c_str());
break;
}
case cmd::unobserve: {
- if(t.size() != 1+1) {
+ if(t.size() != origin+1+1) {
printf("Wrong number of parameters\n");
continue;
}
- m.unobserve.id = atoi(t[1].c_str());
+ m.unobserve.id = atoi(t[origin+1].c_str());
break;
}
case cmd::create: {
- if(t.size() != 1+1) {
+ if(!clientmode && t.size() != origin+1+1) {
printf("Wrong number of parameters\n");
continue;
}
- m.create.parentid = atoi(t[1].c_str());
+ if(clientmode && t.size() != origin+1+2) {
+ printf("Wrong number of parameters\n");
+ continue;
+ }
+ if(clientmode) {
+ m.create.id = atoi(t[origin+1].c_str());
+ m.create.parentid = atoi(t[origin+2].c_str());
+ }
+ else {
+ m.create.parentid = atoi(t[origin+1].c_str());
+ }
break;
}
case cmd::remove: {
- if(t.size() != 1+1) {
+ if(t.size() != origin+1+1) {
printf("Wrong number of parameters\n");
continue;
}
- m.remove.id = atoi(t[1].c_str());
+ m.remove.id = atoi(t[origin+1].c_str());
break;
}
case cmd::move: {
- if(t.size() != 2+1) {
+ if(t.size() != origin+2+1) {
printf("Wrong number of parameters\n");
continue;
}
- m.move.id = atoi(t[1].c_str());
- m.move.parentid = atoi(t[2].c_str());
+ m.move.id = atoi(t[origin+1].c_str());
+ m.move.parentid = atoi(t[origin+2].c_str());
break;
}
case cmd::update: {
- if(t.size() != 2+1) {
+ if(t.size() != origin+2+1) {
printf("Wrong number of parameters\n");
continue;
}
- m.update.id = atoi(t[1].c_str());
- sprintf(m.update.title, "%s", t[2].c_str());
+ m.update.id = atoi(t[origin+1].c_str());
+ sprintf(m.update.title, "%s", t[origin+2].c_str());
break;
}
default:
@@ -177,13 +197,23 @@ inline static void create_msg_list(MsgTokensList& msgTokensList,
}
MessageList parse_msg(std::string data) {
- printf("Parsing: %s\n", data.c_str());
+// printf("Parsing: %s\n", data.c_str());
+
+ MsgTokensList msgTokensList;
+ parse_into_msg_tokens(data, msgTokensList);
+
+ MessageList msgList;
+ create_msg_list(msgTokensList, msgList, false);
+
+ return msgList;
+}
+MessageList parse_msg_client(std::string data) {
MsgTokensList msgTokensList;
parse_into_msg_tokens(data, msgTokensList);
MessageList msgList;
- create_msg_list(msgTokensList, msgList);
+ create_msg_list(msgTokensList, msgList, true);
return msgList;
}