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
00052 PN_CPP_EXTERN void open();
00053
00055 PN_CPP_EXTERN void open(const sender_options &opts);
00056
00058 PN_CPP_EXTERN tracker send(const message &m);
00059
00061 PN_CPP_EXTERN class source source() const;
00062
00064 PN_CPP_EXTERN class target target() const;
00065
00072 PN_CPP_EXTERN void return_credit();
00073
00075 friend class internal::factory<sender>;
00076 friend class sender_iterator;
00078 };
00079
00081
00083 class sender_iterator : public internal::iter_base<sender, sender_iterator> {
00084 sender_iterator(sender snd, pn_session_t* s = 0) :
00085 internal::iter_base<sender, sender_iterator>(snd), session_(s) {}
00086
00087 public:
00089 sender_iterator() :
00090 internal::iter_base<sender, sender_iterator>(0), session_(0) {}
00092 PN_CPP_EXTERN sender_iterator operator++();
00093
00094 private:
00095 pn_session_t* session_;
00096
00097 friend class connection;
00098 friend class session;
00099 };
00100
00102 typedef internal::iter_range<sender_iterator> sender_range;
00103
00105
00106 }
00107
00108 #endif // PROTON_SENDER_HPP