| /* |
| * |
| * D-Bus++ - C++ bindings for D-Bus |
| * |
| * Copyright (C) 2005-2007 Paolo Durante <shackan@gmail.com> |
| * |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| * |
| */ |
| |
| |
| #ifndef __DBUSXX_MESSAGE_H |
| #define __DBUSXX_MESSAGE_H |
| |
| #include <string> |
| #include <map> |
| |
| #include "api.h" |
| #include "util.h" |
| |
| namespace DBus { |
| |
| class Message; |
| class ErrorMessage; |
| class SignalMessage; |
| class ReturnMessage; |
| class Error; |
| class Connection; |
| class Tag; |
| |
| class DXXAPI MessageIter |
| { |
| public: |
| |
| MessageIter(); |
| |
| ~MessageIter(); |
| |
| MessageIter(const MessageIter &iter); |
| |
| MessageIter &operator =(const MessageIter &iter); |
| |
| int type(); |
| |
| bool at_end(); |
| |
| bool has_next(); |
| |
| MessageIter &operator ++(); |
| |
| MessageIter operator ++(int); |
| |
| bool append_byte(unsigned char byte); |
| |
| unsigned char get_byte(); |
| |
| bool append_bool(bool b); |
| |
| bool get_bool(); |
| |
| bool append_int16(signed short i); |
| |
| signed short get_int16(); |
| |
| bool append_uint16(unsigned short u); |
| |
| unsigned short get_uint16(); |
| |
| bool append_int32(signed int i); |
| |
| signed int get_int32(); |
| |
| bool append_uint32(unsigned int u); |
| |
| unsigned int get_uint32(); |
| |
| bool append_int64(signed long long i); |
| |
| signed long long get_int64(); |
| |
| bool append_uint64(unsigned long long i); |
| |
| unsigned long long get_uint64(); |
| |
| bool append_double(double d); |
| |
| double get_double(); |
| |
| bool append_string(const char *chars); |
| |
| const char *get_string(); |
| |
| bool append_path(const char *chars); |
| |
| const char *get_path(); |
| |
| bool append_signature(const char *chars); |
| |
| const char *get_signature(); |
| |
| char *signature() const; //returned string must be manually free()'d |
| |
| int get_fd(); |
| |
| bool append_fd(int fd); |
| |
| MessageIter recurse(); |
| |
| bool append_array(char type, const void *ptr, size_t length); |
| |
| int array_type(); |
| |
| int get_array(void *ptr); |
| |
| bool is_array(); |
| |
| bool is_dict(); |
| |
| MessageIter new_array(const char *sig); |
| |
| MessageIter new_variant(const char *sig); |
| |
| MessageIter new_struct(); |
| |
| MessageIter new_dict_entry(); |
| |
| void close_container(MessageIter &container); |
| |
| void copy_data(MessageIter &to); |
| |
| Message &msg() const |
| { |
| return *_msg; |
| } |
| |
| private: |
| |
| DXXAPILOCAL MessageIter(Message &msg); |
| |
| DXXAPILOCAL bool append_basic(int type_id, void *value); |
| |
| DXXAPILOCAL void get_basic(int type_id, void *ptr); |
| |
| private: |
| |
| struct Private; |
| |
| Private *_pvt; |
| |
| Message *_msg; |
| |
| friend class Message; |
| }; |
| |
| class DXXAPI Message |
| { |
| public: |
| |
| struct Private; |
| |
| Message(Private *, bool incref = true); |
| |
| Message(const Message &m); |
| |
| ~Message(); |
| |
| Message &operator = (const Message &m); |
| |
| Message copy(); |
| |
| int type() const; |
| |
| int serial() const; |
| |
| int reply_serial() const; |
| |
| bool reply_serial(int); |
| |
| const char *sender() const; |
| |
| bool sender(const char *s); |
| |
| const char *destination() const; |
| |
| bool destination(const char *s); |
| |
| bool is_error() const; |
| |
| bool is_signal(const char *interface, const char *member) const; |
| |
| Tag *tag() const; |
| |
| MessageIter reader() const; |
| |
| MessageIter writer(); |
| |
| bool append(int first_type, ...); |
| |
| void terminate(); |
| |
| protected: |
| |
| Message(); |
| |
| protected: |
| |
| RefPtrI<Private> _pvt; |
| |
| /* classes who need to read `_pvt` directly |
| */ |
| friend class ErrorMessage; |
| friend class ReturnMessage; |
| friend class MessageIter; |
| friend class Error; |
| friend class Connection; |
| friend class TagMessage; |
| }; |
| |
| /* |
| */ |
| |
| class DXXAPI ErrorMessage : public Message |
| { |
| public: |
| |
| ErrorMessage(); |
| |
| ErrorMessage(const Message &, const char *name, const char *message); |
| |
| const char *name() const; |
| |
| bool name(const char *n); |
| |
| bool operator == (const ErrorMessage &) const; |
| }; |
| |
| /* |
| */ |
| |
| class DXXAPI SignalMessage : public Message |
| { |
| public: |
| |
| SignalMessage(const char *name); |
| |
| SignalMessage(const char *path, const char *interface, const char *name); |
| |
| const char *interface() const; |
| |
| bool interface(const char *i); |
| |
| const char *member() const; |
| |
| bool member(const char *m); |
| |
| const char *path() const; |
| |
| char ** path_split() const; |
| |
| bool path(const char *p); |
| |
| bool operator == (const SignalMessage &) const; |
| }; |
| |
| /* |
| */ |
| |
| class DXXAPI CallMessage : public Message |
| { |
| public: |
| |
| CallMessage(); |
| |
| CallMessage(const char *dest, const char *path, const char *iface, const char *method); |
| |
| const char *interface() const; |
| |
| bool interface(const char *i); |
| |
| const char *member() const; |
| |
| bool member(const char *m); |
| |
| const char *path() const; |
| |
| char ** path_split() const; |
| |
| bool path(const char *p); |
| |
| const char *signature() const; |
| |
| bool operator == (const CallMessage &) const; |
| }; |
| |
| /* |
| */ |
| |
| class DXXAPI TagMessage : public Message |
| { |
| public: |
| TagMessage(Tag *tag); |
| }; |
| |
| /* |
| */ |
| |
| class DXXAPI ReturnMessage : public Message |
| { |
| public: |
| |
| ReturnMessage(const CallMessage &callee); |
| |
| const char *signature() const; |
| }; |
| |
| } /* namespace DBus */ |
| |
| #endif//__DBUSXX_MESSAGE_H |