00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef __WVDBUSMSG_H
00015 #define __WVDBUSMSG_H
00016
00017 #include "wvstringlist.h"
00018 #include "wvbuf.h"
00019 #include <stdint.h>
00020
00021 struct DBusMessageIter;
00022 struct DBusMessage;
00023
00024 class WvDBusMsg;
00025 class WvDBusConn;
00026
00027
00028 class WvDBusMsg
00029 {
00030 public:
00036 WvDBusMsg(WvStringParm busname, WvStringParm objectname,
00037 WvStringParm ifc, WvStringParm method);
00038
00042 WvDBusMsg(WvDBusMsg &_msg);
00043
00048 WvDBusMsg(DBusMessage *_msg);
00049
00050 virtual ~WvDBusMsg();
00051
00052 operator DBusMessage* () const;
00053
00061 static WvDBusMsg *demarshal(WvBuf &buf);
00062
00071 static size_t demarshal_bytes_needed(WvBuf &buf);
00072
00080 void marshal(WvBuf &buf);
00081
00082 WvString get_sender() const;
00083 WvString get_dest() const;
00084 WvString get_path() const;
00085 WvString get_interface() const;
00086 WvString get_member() const;
00087 WvString get_error() const;
00088 uint32_t get_serial() const;
00089 uint32_t get_replyserial() const;
00090 bool is_reply() const;
00091 operator WvString() const;
00092
00093 void get_arglist(WvStringList &list) const;
00094 WvString get_argstr() const;
00095
00100 WvDBusMsg &append(const char *s);
00101 WvDBusMsg &append(bool b);
00102 WvDBusMsg &append(signed char c);
00103 WvDBusMsg &append(unsigned char c);
00104 WvDBusMsg &append(int16_t i);
00105 WvDBusMsg &append(uint16_t i);
00106 WvDBusMsg &append(int32_t i);
00107 WvDBusMsg &append(uint32_t i);
00108 WvDBusMsg &append(int64_t i);
00109 WvDBusMsg &append(uint64_t i);
00110 WvDBusMsg &append(double d);
00111
00115 WvDBusMsg &variant_start(WvStringParm element_type);
00116
00120 WvDBusMsg &variant_end();
00121
00127 WvDBusMsg &struct_start(WvStringParm element_type);
00128
00132 WvDBusMsg &struct_end();
00133
00138 WvDBusMsg &array_start(WvStringParm element_type);
00139
00143 WvDBusMsg &array_end();
00144
00153 WvDBusMsg &varray_start(WvStringParm element_type);
00154
00158 WvDBusMsg &varray_end();
00159
00163 WvDBusMsg reply();
00164
00168 bool iserror() const;
00169
00174 void send(WvDBusConn &conn);
00175
00176 class Iter
00177 {
00178 public:
00179 DBusMessageIter *const first, *const it;
00180 mutable WvString s;
00181 bool rewound;
00182
00183 Iter(const WvDBusMsg &_msg);
00184 Iter(const WvDBusMsg::Iter &_it);
00185 Iter(const DBusMessageIter &_first);
00186 ~Iter();
00187
00192 void rewind();
00193
00198 int type() const;
00199
00207 Iter open() const;
00208
00215 bool next();
00216
00222 Iter &getnext()
00223 { next(); return *this; }
00224
00228 bool cur() const;
00229
00233 void get_all(WvStringList &list);
00234
00239 WvString get_all();
00240
00244 WvString get_str() const;
00245
00250 int64_t get_int() const;
00251 operator int64_t() const { return get_int(); }
00252 operator int32_t() const { return get_int(); }
00253 operator int16_t() const { return get_int(); }
00254 operator int8_t() const { return get_int(); }
00255 operator bool() const { return get_int() != 0; }
00256
00261 uint64_t get_uint() const;
00262 operator uint64_t() const { return get_uint(); }
00263 operator uint32_t() const { return get_uint(); }
00264 operator uint16_t() const { return get_uint(); }
00265 operator uint8_t() const { return get_uint(); }
00266
00271 double get_double() const;
00272 operator double() const { return get_double(); }
00273 operator float() const { return get_double(); }
00274
00279 WvString *ptr() const;
00280 operator WvString() const { return *ptr(); }
00281
00282 WvIterStuff(WvString);
00283 };
00284
00285 protected:
00286 mutable DBusMessage *msg;
00287 WvList<DBusMessageIter> itlist;
00288 };
00289
00290
00291 class WvDBusSignal : public WvDBusMsg
00292 {
00293 public:
00294 WvDBusSignal(WvStringParm objectname, WvStringParm ifc,
00295 WvStringParm name);
00296 };
00297
00298
00299 class WvDBusError : public WvDBusMsg
00300 {
00301 DBusMessage *setup1(WvDBusMsg &in_reply_to,
00302 WvStringParm errname, WvStringParm message);
00303 void setup2();
00304 public:
00305 WvDBusError(WvDBusMsg &in_reply_to,
00306 WvStringParm errname, WvStringParm message)
00307 : WvDBusMsg(setup1(in_reply_to, errname, message))
00308 {
00309 setup2();
00310 }
00311
00312 WvDBusError(WvDBusMsg &in_reply_to,
00313 WvStringParm errname, WVSTRING_FORMAT_DECL)
00314 : WvDBusMsg(setup1(in_reply_to, errname,
00315 WvString(WVSTRING_FORMAT_CALL)))
00316 {
00317 setup2();
00318 }
00319 };
00320
00321 #endif // __WVDBUSMSG_H