summaryrefslogtreecommitdiff
path: root/PluginCommandInterfaceDbus/DBUSMessageHandler.h
diff options
context:
space:
mode:
Diffstat (limited to 'PluginCommandInterfaceDbus/DBUSMessageHandler.h')
-rw-r--r--PluginCommandInterfaceDbus/DBUSMessageHandler.h69
1 files changed, 56 insertions, 13 deletions
diff --git a/PluginCommandInterfaceDbus/DBUSMessageHandler.h b/PluginCommandInterfaceDbus/DBUSMessageHandler.h
index 0ec6d3a..819b8f2 100644
--- a/PluginCommandInterfaceDbus/DBUSMessageHandler.h
+++ b/PluginCommandInterfaceDbus/DBUSMessageHandler.h
@@ -21,24 +21,44 @@
#define _DBUSMESSAGEHANDLER_H_
#include <vector>
+#include <sstream>
+using std::stringstream;
+
#include <string>
+using std::string;
+
#include "headers.h"
+#include <dbus/dbus.h>
+
+#define DLT_CONTEXT DBusCommandPlugin
+
+typedef void (CommandDbusReceive::*CallBackMethod)(DBusConnection *connection, DBusMessage *message);
+
+struct MethodTable
+{
+ const char *name;
+ const char *signature;
+ const char *reply;
+ CallBackMethod function;
+};
+
+struct SignalTable {
+ const char* name;
+ const char* signature;
+};
+
class DBUSMessageHandler
{
public:
- DBUSMessageHandler();
+ DBUSMessageHandler(DBusObjectPathVTable* vtable, DBusConnection* conn, void* reference);
~DBUSMessageHandler();
- void setConnection(DBusConnection* conn);
- DBusConnection* getConnection();
-
void initReceive(DBusMessage* msg);
void initReply(DBusMessage* msg);
void closeReply();
void ReplyError(DBusMessage* msg, const char* errorname, const char* errorMsg);
-
dbus_uint32_t getUInt();
char getByte();
dbus_bool_t getBool();
@@ -66,15 +86,38 @@ private:
DBusError m_err;
};
-
-inline void DBUSMessageHandler::setConnection(DBusConnection* conn)
+class DBUSIntrospection
{
- m_pConnection = conn;
-}
+public:
+ DBUSIntrospection(MethodTable* table, SignalTable* stable,std::string nodename);
+ void process(DBusConnection* conn, DBusMessage* msg);
-inline DBusConnection* DBUSMessageHandler::getConnection()
-{
- return m_pConnection;
-}
+private:
+ void generateString(void);
+
+ void addHeader(void);
+ void addArgument(string argname, string direction, string type);
+ void addSignalArgument(string argname, string type);
+ void addEntry(MethodTable entry);
+ void addEntry(SignalTable entry);
+
+ void openNode(string nodename);
+ void closeNode(void);
+
+ void openInterface(string interfacename);
+ void closeInterface(void);
+
+ void openMethod(string methodname);
+ void closeMethod(void);
+
+ void openSignal(string signalname);
+ void closeSignal(void);
+
+private:
+ stringstream m_introspectionString;
+ MethodTable* m_methodTable;
+ SignalTable* m_signalTable;
+ std::string m_nodename;
+};
#endif // _DBUSMESSAGEWRAPPER_H_