00001 #ifndef PROTON_SENDER_HPP
00002 #define PROTON_SENDER_HPP
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "./fwd.hpp"
00026 #include "./internal/export.hpp"
00027 #include "./link.hpp"
00028 #include "./tracker.hpp"
00029
00032
00033 struct pn_link_t;
00034 struct pn_session_t;
00035
00036 namespace proton {
00037
00039 class
00040 PN_CPP_CLASS_EXTERN sender : public link {
00042 PN_CPP_EXTERN sender(pn_link_t* s);
00044
00045 public:
00047 sender() {}
00048
00049 PN_CPP_EXTERN ~sender();
00050
00054 PN_CPP_EXTERN void open();
00055
00057 PN_CPP_EXTERN void open(const sender_options &opts);
00058
00060 PN_CPP_EXTERN tracker send(const message &m);
00061
00063 PN_CPP_EXTERN class source source() const;
00064
00066 PN_CPP_EXTERN class target target() const;
00067
00074 PN_CPP_EXTERN void return_credit();
00075
00077 friend class internal::factory<sender>;
00078 friend class sender_iterator;
00080 };
00081
00083
00085 class sender_iterator : public internal::iter_base<sender, sender_iterator> {
00086 sender_iterator(sender snd, pn_session_t* s = 0) :
00087 internal::iter_base<sender, sender_iterator>(snd), session_(s) {}
00088
00089 public:
00091 sender_iterator() :
00092 internal::iter_base<sender, sender_iterator>(0), session_(0) {}
00094 PN_CPP_EXTERN sender_iterator operator++();
00095
00096 private:
00097 pn_session_t* session_;
00098
00099 friend class connection;
00100 friend class session;
00101 };
00102
00104 typedef internal::iter_range<sender_iterator> sender_range;
00105
00107
00108 }
00109
00110 #endif // PROTON_SENDER_HPP