summaryrefslogtreecommitdiff
path: root/cpp/lib/broker/Reference.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/lib/broker/Reference.cpp')
-rw-r--r--cpp/lib/broker/Reference.cpp19
1 files changed, 9 insertions, 10 deletions
diff --git a/cpp/lib/broker/Reference.cpp b/cpp/lib/broker/Reference.cpp
index 0aedef2bef..c4c33e6363 100644
--- a/cpp/lib/broker/Reference.cpp
+++ b/cpp/lib/broker/Reference.cpp
@@ -20,36 +20,35 @@
#include "Reference.h"
#include "BrokerMessageMessage.h"
#include "QpidError.h"
+#include "MessageAppendBody.h"
#include "CompletionHandler.h"
namespace qpid {
namespace broker {
-Reference& ReferenceRegistry::open(const Reference::Id& id) {
+Reference::shared_ptr ReferenceRegistry::open(const Reference::Id& id) {
ReferenceMap::iterator i = references.find(id);
// TODO aconway 2007-02-05: should we throw Channel or Connection
// exceptions here?
if (i != references.end())
throw ConnectionException(503, "Attempt to re-open reference " +id);
- return references[id] = Reference(id, this);
+ return references[id] = Reference::shared_ptr(new Reference(id, this));
}
-Reference& ReferenceRegistry::get(const Reference::Id& id) {
+Reference::shared_ptr ReferenceRegistry::get(const Reference::Id& id) {
ReferenceMap::iterator i = references.find(id);
if (i == references.end())
throw ConnectionException(503, "Attempt to use non-existent reference "+id);
return i->second;
}
-void Reference::close() {
- for_each(messages.begin(), messages.end(),
- boost::bind(&Reference::complete, this, _1));
- registry->references.erase(getId());
+void Reference::append(AppendPtr ptr) {
+ appends.push_back(ptr);
+ size += ptr->getBytes().length();
}
-void Reference::complete(MessagePtr message) {
- message->setAppends(appends);
- registry->handler.complete(message);
+void Reference::close() {
+ registry->references.erase(getId());
}
}} // namespace qpid::broker