bool Interconnects::deleteObject(Broker& broker, const std::string& type, const std::string& name, const qpid::types::Variant::Map& /*properties*/, const std::string& /*userId*/, const std::string& /*connectionId*/) { if (type == DOMAIN_TYPE) { boost::shared_ptr<Domain> domain; qpid::sys::ScopedLock<qpid::sys::Mutex> l(lock); DomainMap::iterator i = domains.find(name); if (i != domains.end()) { domain = i->second; domains.erase(i); if (domain->isDurable()) broker.getStore().destroy(*domain); return true; } else { throw qpid::Exception(QPID_MSG("No such domain: " << name)); } } else if (type == INCOMING_TYPE || type == OUTGOING_TYPE) { boost::shared_ptr<Interconnect> interconnect; { qpid::sys::ScopedLock<qpid::sys::Mutex> l(lock); InterconnectMap::iterator i = interconnects.find(name); if (i != interconnects.end()) { interconnect = i->second; interconnects.erase(i); } else { throw qpid::Exception(QPID_MSG("No such interconnection: " << name)); } } if (interconnect) interconnect->deletedFromRegistry(); return true; } else { return false; } }
bool Interconnects::createObject(Broker& broker, const std::string& type, const std::string& name, const qpid::types::Variant::Map& properties, const std::string& /*userId*/, const std::string& /*connectionId*/) { if (type == DOMAIN_TYPE) { qpid::sys::ScopedLock<qpid::sys::Mutex> l(lock); DomainMap::iterator i = domains.find(name); if (i == domains.end()) { boost::shared_ptr<Domain> domain(new Domain(name, properties, broker)); domains[name] = domain; if (domain->isDurable()) broker.getStore().create(*domain); return true; } else { return false; } } else if (type == INCOMING_TYPE || type == OUTGOING_TYPE) { QPID_LOG(notice, "Creating interconnect " << name << ", " << properties); boost::shared_ptr<Domain> domain; { qpid::sys::ScopedLock<qpid::sys::Mutex> l(lock); qpid::types::Variant::Map::const_iterator p = properties.find(DOMAIN_TYPE); if (p != properties.end()) { std::string domainName = p->second; DomainMap::iterator i = domains.find(domainName); if (i != domains.end()) { domain = i->second; } else { throw qpid::Exception(QPID_MSG("No such domain: " << domainName)); } } else { throw qpid::Exception(QPID_MSG("Domain must be specified")); } } domain->connect(type == INCOMING_TYPE, name, properties, *context); return true; } else { return false; } }