libsysutils: Add multiple client support and fix some bugs
diff --git a/libsysutils/src/FrameworkListener.cpp b/libsysutils/src/FrameworkListener.cpp
index b920215..9210ca5 100644
--- a/libsysutils/src/FrameworkListener.cpp
+++ b/libsysutils/src/FrameworkListener.cpp
@@ -22,17 +22,18 @@
#include <sysutils/FrameworkListener.h>
#include <sysutils/FrameworkCommand.h>
+#include <sysutils/SocketClient.h>
FrameworkListener::FrameworkListener(const char *socketName) :
SocketListener(socketName, true) {
mCommands = new FrameworkCommandCollection();
}
-bool FrameworkListener::onDataAvailable(int socket) {
+bool FrameworkListener::onDataAvailable(SocketClient *c) {
char buffer[101];
int len;
- if ((len = read(socket, buffer, sizeof(buffer) -1)) < 0) {
+ if ((len = read(c->getSocket(), buffer, sizeof(buffer) -1)) < 0) {
LOGE("read() failed (%s)", strerror(errno));
return errno;
} else if (!len) {
@@ -47,7 +48,7 @@
for (i = 0; i < len; i++) {
if (buffer[i] == '\0') {
- dispatchCommand(buffer + start);
+ dispatchCommand(c, buffer + start);
start = i + 1;
}
}
@@ -58,14 +59,22 @@
mCommands->push_back(cmd);
}
-void FrameworkListener::dispatchCommand(char *cmd) {
+void FrameworkListener::dispatchCommand(SocketClient *cli, char *cmd) {
+
+ char *cm, *last;
+
+ if (!(cm = strtok_r(cmd, ":", &last))) {
+ cli->sendMsg("BAD_MSG");
+ return;
+ }
+
FrameworkCommandCollection::iterator i;
for (i = mCommands->begin(); i != mCommands->end(); ++i) {
FrameworkCommand *c = *i;
- if (!strncmp(cmd, c->getCommand(), strlen(c->getCommand()))) {
- if (c->runCommand(cmd)) {
+ if (!strcmp(cm, c->getCommand())) {
+ if (c->runCommand(cli, cmd)) {
LOGW("Handler '%s' error (%s)", c->getCommand(), strerror(errno));
}
return;
@@ -73,5 +82,6 @@
}
LOGE("No cmd handlers defined for '%s'", cmd);
+ cli->sendMsg("UNKNOWN_CMD");
+ return;
}
-