diff options
Diffstat (limited to 'qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp')
-rw-r--r-- | qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp b/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp index 9d9f186f5c..ffc4247ee3 100644 --- a/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp +++ b/qpid/cpp/src/qpid/messaging/amqp/ConnectionContext.cpp @@ -417,7 +417,6 @@ void ConnectionContext::detach(boost::shared_ptr<SessionContext> ssn, boost::sha void ConnectionContext::attach(boost::shared_ptr<SessionContext> ssn, boost::shared_ptr<SenderContext> lnk) { - sys::Monitor::ScopedLock l(lock); lnk->configure(); attach(ssn, lnk->sender); checkClosed(ssn, lnk); @@ -427,7 +426,6 @@ void ConnectionContext::attach(boost::shared_ptr<SessionContext> ssn, boost::sha void ConnectionContext::attach(boost::shared_ptr<SessionContext> ssn, boost::shared_ptr<ReceiverContext> lnk) { - sys::Monitor::ScopedLock l(lock); lnk->configure(); attach(ssn, lnk->receiver, lnk->capacity); checkClosed(ssn, lnk); @@ -447,6 +445,43 @@ void ConnectionContext::attach(boost::shared_ptr<SessionContext> ssn, pn_link_t* } } +boost::shared_ptr<SenderContext> ConnectionContext::createSender(boost::shared_ptr<SessionContext> session, const qpid::messaging::Address& address) +{ + sys::Monitor::ScopedLock l(lock); + boost::shared_ptr<SenderContext> sender = session->createSender(address, setToOnSend); + try { + attach(session, sender); + return sender; + } catch (...) { + session->removeSender(sender->getName()); + throw; + } + +} +boost::shared_ptr<ReceiverContext> ConnectionContext::createReceiver(boost::shared_ptr<SessionContext> session, const qpid::messaging::Address& address) +{ + sys::Monitor::ScopedLock l(lock); + boost::shared_ptr<ReceiverContext> receiver = session->createReceiver(address); + try { + attach(session, receiver); + return receiver; + } catch (...) { + session->removeReceiver(receiver->getName()); + throw; + } +} +boost::shared_ptr<SenderContext> ConnectionContext::getSender(boost::shared_ptr<SessionContext> session, const std::string& name) const +{ + sys::Monitor::ScopedLock l(lock); + return session->getSender(name); +} + +boost::shared_ptr<ReceiverContext> ConnectionContext::getReceiver(boost::shared_ptr<SessionContext> session, const std::string& name) const +{ + sys::Monitor::ScopedLock l(lock); + return session->getReceiver(name); +} + void ConnectionContext::send( boost::shared_ptr<SessionContext> ssn, boost::shared_ptr<SenderContext> snd, |