diff options
author | Gordon Sim <gsim@apache.org> | 2012-11-15 14:42:22 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2012-11-15 14:42:22 +0000 |
commit | abe66b3f8e18fc8b6f016b922db24100ff834734 (patch) | |
tree | 2a10278bfdf15c18214d1642e1dd24eebd2a0a4f /cpp/src/qpid/messaging/amqp/ReceiverContext.cpp | |
parent | 2bce3b0dd247227bc5ff1dd3f17f6903c66e9cce (diff) | |
download | qpid-python-abe66b3f8e18fc8b6f016b922db24100ff834734.tar.gz |
QPID-4368: Add support for subject, translated to a filter (i.e. at present a binding key) by receivers and used as default value for senders
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1409813 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/messaging/amqp/ReceiverContext.cpp')
-rw-r--r-- | cpp/src/qpid/messaging/amqp/ReceiverContext.cpp | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/cpp/src/qpid/messaging/amqp/ReceiverContext.cpp b/cpp/src/qpid/messaging/amqp/ReceiverContext.cpp index 7e41e727cc..33ddabfc75 100644 --- a/cpp/src/qpid/messaging/amqp/ReceiverContext.cpp +++ b/cpp/src/qpid/messaging/amqp/ReceiverContext.cpp @@ -29,10 +29,10 @@ namespace qpid { namespace messaging { namespace amqp { //TODO: proper conversion to wide string for address -ReceiverContext::ReceiverContext(pn_session_t* session, const std::string& n, const std::string& s) +ReceiverContext::ReceiverContext(pn_session_t* session, const std::string& n, const qpid::messaging::Address& a) : name(n), - source(s), - receiver(pn_receiver(session, source.c_str())), + address(a), + receiver(pn_receiver(session, name.c_str())), capacity(0) {} ReceiverContext::~ReceiverContext() { @@ -84,7 +84,36 @@ const std::string& ReceiverContext::getName() const const std::string& ReceiverContext::getSource() const { - return source; + return address.getName(); +} +namespace { +pn_bytes_t convert(const std::string& s) +{ + pn_bytes_t result; + result.start = const_cast<char*>(s.data()); + result.size = s.size(); + return result; +} +} + +void ReceiverContext::configure() const +{ + configure(pn_link_source(receiver)); +} +void ReceiverContext::configure(pn_terminus_t* source) const +{ + pn_terminus_set_address(source, address.getName().c_str()); + + pn_data_t* filter = pn_terminus_filter(source); + pn_data_put_map(filter); + pn_data_enter(filter); + pn_data_put_symbol(filter, convert("subject")); + pn_data_put_described(filter); + pn_data_enter(filter); + pn_data_put_ulong(filter, 0x0000468C00000001/*LEGACY_TOPIC_FILTER*/); + pn_data_put_string(filter, convert(address.getSubject())); + pn_data_exit(filter); + pn_data_exit(filter); } bool ReceiverContext::isClosed() const |