void RemoteRegistrator::redoRegistration() { NFD_LOG_INFO("redo " << m_regEntries.size() << " registration when new Hub connection is built."); for (auto&& entry : m_regEntries) { // make copies to avoid unreasonable overwrite. ControlParameters parameters = m_controlParameters; CommandOptions options = m_commandOptions; startRegistration(parameters.setName(entry.first), options.setSigningIdentity(entry.first), m_nRetries); } }
void RemoteRegistrator::unregisterPrefix(const Name& prefix) { if (prefix == REMOTE_HUB_PREFIX) { NFD_LOG_INFO("disconnected to hub with prefix: " << prefix); // for phase 1: suppose there is at most one hub connected. // if the hub prefix has been unregistered locally, there may // be no connected hub. m_hasConnectedHub = false; clearRefreshEvents(); return; } if (!m_hasConnectedHub) { NFD_LOG_INFO("no hub connected when unregistering " << prefix); return; } std::pair<Name, size_t> identity = findIdentityForRegistration(prefix); if (0 == identity.second) { NFD_LOG_INFO("no proper identity found for unregistering " << prefix); return; } Name prefixForRegistration; if (identity.first.size() == identity.second) { prefixForRegistration = identity.first; } else { prefixForRegistration = identity.first.getPrefix(-1); } RegisteredEntryIt iRegEntry = m_regEntries.find(prefixForRegistration); if (m_regEntries.end() == iRegEntry) { NFD_LOG_INFO("no existing entry found when unregistering " << prefix); return; } for (auto&& entry : m_rib) { if (prefixForRegistration.isPrefixOf(entry.first) && findIdentityForRegistration(entry.first) == identity) { NFD_LOG_INFO("this identity should be kept for other rib entry: " << entry.first); return; } } scheduler::cancel(iRegEntry->second); m_regEntries.erase(iRegEntry); // make copies of m_controlParameters and m_commandOptions to // avoid unreasonable overwriting during concurrent registration // and unregistration. ControlParameters parameters = m_controlParameters; CommandOptions options = m_commandOptions; startUnregistration(parameters.setName(prefixForRegistration).unsetCost(), options.setSigningIdentity(identity.first), m_nRetries); }
void RemoteRegistrator::registerPrefix(const Name& prefix) { if (LOCAL_REGISTRATION_PREFIX.isPrefixOf(prefix)) { NFD_LOG_INFO("local registration only for " << prefix); return; } bool isHubPrefix = prefix == REMOTE_HUB_PREFIX; if (isHubPrefix) { NFD_LOG_INFO("this is a prefix registered by some hub: " << prefix); m_hasConnectedHub = true; redoRegistration(); return; } if (!m_hasConnectedHub) { NFD_LOG_INFO("no hub connected when registering " << prefix); return; } std::pair<Name, size_t> identity = findIdentityForRegistration(prefix); if (0 == identity.second) { NFD_LOG_INFO("no proper identity found for registering " << prefix); return; } Name prefixForRegistration; if (identity.first.size() == identity.second) { prefixForRegistration = identity.first; } else { prefixForRegistration = identity.first.getPrefix(-1); } if (m_regEntries.find(prefixForRegistration) != m_regEntries.end()) { NFD_LOG_INFO("registration already in process for " << prefix); return; } // make copies of m_controlParameters and m_commandOptions to // avoid unreasonable overwriting during concurrent registration // and unregistration. ControlParameters parameters = m_controlParameters; CommandOptions options = m_commandOptions; startRegistration(parameters.setName(prefixForRegistration), options.setSigningIdentity(identity.first), m_nRetries); }