• Main Page
  • Modules
  • Classes
  • Files
  • File List
  • File Members

wvdbusmsg.h

00001 /* -*- Mode: C++ -*-
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 2004-2006 Net Integration Technologies, Inc.
00004  * 
00005  * Pathfinder Software:
00006  *   Copyright (C) 2007, Carillon Information Security Inc.
00007  *
00008  * This library is licensed under the LGPL, please read LICENSE for details.
00009  *
00010  * WvDBusMsg is intended to be an easy-to-use abstraction over the low-level 
00011  * D-Bus DBusMessage structure. It represents a message being passed around on 
00012  * the bus.
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

Generated on Thu Aug 12 2010 11:33:10 for WvStreams by  doxygen 1.7.1