diff options
| author | Gordon Sim <gsim@apache.org> | 2007-05-17 11:03:55 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2007-05-17 11:03:55 +0000 |
| commit | 9a6c0d41b19744c8e4dc4711d13a5a0afa2f7ed2 (patch) | |
| tree | 539a8102197fa119c7efb77056841932e2eb5c1a /cpp/src/qpid/broker/HeadersExchange.cpp | |
| parent | decfd77364e211bc8f8784e15f54e06a79e16675 (diff) | |
| download | qpid-python-9a6c0d41b19744c8e4dc4711d13a5a0afa2f7ed2.tar.gz | |
Changes to support durable exchanges.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@538872 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/HeadersExchange.cpp')
| -rw-r--r-- | cpp/src/qpid/broker/HeadersExchange.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/cpp/src/qpid/broker/HeadersExchange.cpp b/cpp/src/qpid/broker/HeadersExchange.cpp index fef1f3fa4b..c33d638fce 100644 --- a/cpp/src/qpid/broker/HeadersExchange.cpp +++ b/cpp/src/qpid/broker/HeadersExchange.cpp @@ -41,21 +41,35 @@ namespace { } HeadersExchange::HeadersExchange(const string& _name) : Exchange(_name) { } +HeadersExchange::HeadersExchange(const std::string& _name, bool _durable, const FieldTable& _args) : Exchange(_name, _durable, _args) {} -void HeadersExchange::bind(Queue::shared_ptr queue, const string& /*routingKey*/, const FieldTable* args){ +bool HeadersExchange::bind(Queue::shared_ptr queue, const string& /*routingKey*/, const FieldTable* args){ Mutex::ScopedLock locker(lock); std::string what = args->getString("x-match"); if (what != all && what != any) { THROW_QPID_ERROR(PROTOCOL_ERROR, "Invalid x-match value binding to headers exchange."); } - bindings.push_back(Binding(*args, queue)); + Binding binding(*args, queue); + Bindings::iterator i = + std::find(bindings.begin(),bindings.end(), binding); + if (i == bindings.end()) { + bindings.push_back(binding); + return true; + } else { + return false; + } } -void HeadersExchange::unbind(Queue::shared_ptr queue, const string& /*routingKey*/, const FieldTable* args){ +bool HeadersExchange::unbind(Queue::shared_ptr queue, const string& /*routingKey*/, const FieldTable* args){ Mutex::ScopedLock locker(lock); Bindings::iterator i = std::find(bindings.begin(),bindings.end(), Binding(*args, queue)); - if (i != bindings.end()) bindings.erase(i); + if (i != bindings.end()) { + bindings.erase(i); + return true; + } else { + return false; + } } |
