00001
00002
00003
00004
00005
00006 #ifndef DBUSMSG_H
00007 #define DBUSMSG_H
00008
00009 #include <string>
00010 #include <dbus/dbus.h>
00011
00012 class YCPValue;
00013
00014
00015 class DBusMsg
00016 {
00017
00018 public:
00019
00020 DBusMsg();
00021 ~DBusMsg();
00022
00023
00024 DBusMsg(const DBusMsg &);
00025 DBusMsg &operator = (const DBusMsg &);
00026
00027
00028 void createCall(const std::string &service, const std::string &object,
00029 const std::string &interface, const std::string &method);
00030
00031
00032 void createReply(const DBusMsg &m);
00033
00034
00035 void createError(const DBusMsg &m, const std::string &error_msg,
00036
00037 const std::string &error_code = std::string(DBUS_ERROR_FAILED));
00038
00039 bool addString(const std::string &val);
00040 bool addInt64(dbus_int64_t val);
00041 bool addInt32(dbus_int32_t val);
00042 bool addBoolean(bool val);
00043 bool addDouble(double val);
00044
00045 bool addYCPValue(const YCPValue &val);
00046 YCPValue getYCPValue(int index);
00047
00048 bool isMethodCall(const std::string &interface, const std::string &method) const;
00049 int arguments() const;
00050 int type() const;
00051 bool empty() const;
00052
00053 DBusMessage *getMessage() const;
00054 void setMessage(DBusMessage *message);
00055
00056 std::string interface() const;
00057 std::string method() const;
00058 std::string path() const;
00059 std::string sender() const;
00060
00061 private:
00062
00063 bool addValue(int type, void* data);
00064 bool addValue(int type, void* data, DBusMessageIter *i);
00065 bool addYCPValue(const YCPValue &v, DBusMessageIter *i);
00066 bool addYCPValueRaw(const YCPValue &val, DBusMessageIter *i);
00067 void release();
00068 DBusMessage *msg;
00069
00070 int typeInt(const YCPValue &val) const;
00071 const char * typeStr(const YCPValue &val) const;
00072
00073 YCPValue getYCPValue(DBusMessageIter *it);
00074 YCPValue getYCPValueRaw(DBusMessageIter *it, const std::string &ycp_type = std::string());
00075 };
00076
00077 #endif
00078