diff --git a/include/server.h b/include/server.h index bd96ed664..d1981c8c2 100644 --- a/include/server.h +++ b/include/server.h @@ -36,7 +36,7 @@ namespace kiwix * * @param library The library to serve. */ - Server(std::shared_ptr library, NameMapper* nameMapper=nullptr); + Server(std::shared_ptr library, std::shared_ptr nameMapper=nullptr); virtual ~Server(); @@ -67,7 +67,7 @@ namespace kiwix protected: std::shared_ptr mp_library; - NameMapper* mp_nameMapper; + std::shared_ptr mp_nameMapper; std::string m_root = ""; std::string m_addr = ""; std::string m_indexTemplateString = ""; diff --git a/src/server.cpp b/src/server.cpp index 1c331a406..2e258245f 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -29,7 +29,7 @@ namespace kiwix { -Server::Server(std::shared_ptr library, NameMapper* nameMapper) : +Server::Server(std::shared_ptr library, std::shared_ptr nameMapper) : mp_library(library), mp_nameMapper(nameMapper), mp_server(nullptr) diff --git a/src/server/internalServer.cpp b/src/server/internalServer.cpp index 098f476c5..11bdd0971 100644 --- a/src/server/internalServer.cpp +++ b/src/server/internalServer.cpp @@ -254,6 +254,11 @@ get_matching_if_none_match_etag(const RequestContext& r, const std::string& etag } } +struct NoDelete +{ + template void operator()(T*) {} +}; + } // unnamed namespace std::pair InternalServer::selectBooks(const RequestContext& request) const @@ -407,7 +412,7 @@ public: InternalServer::InternalServer(std::shared_ptr library, - NameMapper* nameMapper, + std::shared_ptr nameMapper, std::string addr, int port, std::string root, @@ -433,7 +438,7 @@ InternalServer::InternalServer(std::shared_ptr library, m_ipConnectionLimit(ipConnectionLimit), mp_daemon(nullptr), mp_library(library), - mp_nameMapper(nameMapper ? nameMapper : &defaultNameMapper), + mp_nameMapper(nameMapper ? nameMapper : std::shared_ptr(&defaultNameMapper, NoDelete())), searchCache(getEnvVar("KIWIX_SEARCH_CACHE_SIZE", DEFAULT_CACHE_SIZE)), suggestionSearcherCache(getEnvVar("KIWIX_SUGGESTION_SEARCHER_CACHE_SIZE", std::max((unsigned int) (mp_library->getBookCount(true, true)*0.1), 1U))), m_customizedResources(new CustomizedResources) @@ -787,7 +792,7 @@ std::unique_ptr InternalServer::handle_no_js(const RequestContext& req { const auto url = request.get_url(); const auto urlParts = kiwix::split(url, "/", true, false); - HTMLDumper htmlDumper(mp_library.get(), mp_nameMapper); + HTMLDumper htmlDumper(mp_library.get(), mp_nameMapper.get()); htmlDumper.setRootLocation(m_root); htmlDumper.setLibraryId(getLibraryId()); auto userLang = request.get_user_language(); @@ -958,7 +963,7 @@ std::unique_ptr InternalServer::handle_search_request(const RequestCon const auto pageLength = getSearchPageSize(request); /* Get the results */ - SearchRenderer renderer(search->getResults(start-1, pageLength), mp_nameMapper, mp_library.get(), start, + SearchRenderer renderer(search->getResults(start-1, pageLength), mp_nameMapper.get(), mp_library.get(), start, search->getEstimatedMatches()); renderer.setSearchPattern(searchInfo.pattern); renderer.setSearchBookQuery(searchInfo.bookFilterQuery); diff --git a/src/server/internalServer.h b/src/server/internalServer.h index 149bda5a8..e11c690b5 100644 --- a/src/server/internalServer.h +++ b/src/server/internalServer.h @@ -93,7 +93,7 @@ class OPDSDumper; class InternalServer { public: InternalServer(std::shared_ptr library, - NameMapper* nameMapper, + std::shared_ptr nameMapper, std::string addr, int port, std::string root, @@ -179,7 +179,7 @@ class InternalServer { struct MHD_Daemon* mp_daemon; std::shared_ptr mp_library; - NameMapper* mp_nameMapper; + std::shared_ptr mp_nameMapper; SearchCache searchCache; SuggestionSearcherCache suggestionSearcherCache; diff --git a/src/server/internalServer_catalog.cpp b/src/server/internalServer_catalog.cpp index f4b8d096b..fa50450a9 100644 --- a/src/server/internalServer_catalog.cpp +++ b/src/server/internalServer_catalog.cpp @@ -82,7 +82,7 @@ std::unique_ptr InternalServer::handle_catalog(const RequestContext& r } zim::Uuid uuid; - kiwix::OPDSDumper opdsDumper(mp_library.get(), mp_nameMapper); + kiwix::OPDSDumper opdsDumper(mp_library.get(), mp_nameMapper.get()); opdsDumper.setRootLocation(m_root); opdsDumper.setLibraryId(getLibraryId()); std::vector bookIdsToDump; @@ -164,7 +164,7 @@ std::unique_ptr InternalServer::handle_catalog_v2_root(const RequestCo std::unique_ptr InternalServer::handle_catalog_v2_entries(const RequestContext& request, bool partial) { - OPDSDumper opdsDumper(mp_library.get(), mp_nameMapper); + OPDSDumper opdsDumper(mp_library.get(), mp_nameMapper.get()); opdsDumper.setRootLocation(m_root); opdsDumper.setLibraryId(getLibraryId()); const auto bookIds = search_catalog(request, opdsDumper); @@ -185,7 +185,7 @@ std::unique_ptr InternalServer::handle_catalog_v2_complete_entry(const + urlNotFoundMsg; } - OPDSDumper opdsDumper(mp_library.get(), mp_nameMapper); + OPDSDumper opdsDumper(mp_library.get(), mp_nameMapper.get()); opdsDumper.setRootLocation(m_root); opdsDumper.setLibraryId(getLibraryId()); const auto opdsFeed = opdsDumper.dumpOPDSCompleteEntry(entryId); @@ -198,7 +198,7 @@ std::unique_ptr InternalServer::handle_catalog_v2_complete_entry(const std::unique_ptr InternalServer::handle_catalog_v2_categories(const RequestContext& request) { - OPDSDumper opdsDumper(mp_library.get(), mp_nameMapper); + OPDSDumper opdsDumper(mp_library.get(), mp_nameMapper.get()); opdsDumper.setRootLocation(m_root); opdsDumper.setLibraryId(getLibraryId()); return ContentResponse::build( @@ -210,7 +210,7 @@ std::unique_ptr InternalServer::handle_catalog_v2_categories(const Req std::unique_ptr InternalServer::handle_catalog_v2_languages(const RequestContext& request) { - OPDSDumper opdsDumper(mp_library.get(), mp_nameMapper); + OPDSDumper opdsDumper(mp_library.get(), mp_nameMapper.get()); opdsDumper.setRootLocation(m_root); opdsDumper.setLibraryId(getLibraryId()); return ContentResponse::build( diff --git a/test/server_testing_tools.h b/test/server_testing_tools.h index 575b0841d..3ea10ab57 100644 --- a/test/server_testing_tools.h +++ b/test/server_testing_tools.h @@ -100,7 +100,7 @@ private: private: // data std::shared_ptr library; kiwix::Manager manager; - std::unique_ptr nameMapper; + std::shared_ptr nameMapper; std::unique_ptr server; std::unique_ptr client; const Cfg cfg; @@ -140,7 +140,7 @@ void ZimFileServer::run(int serverPort, std::string indexTemplateString) } else { nameMapper.reset(new kiwix::HumanReadableNameMapper(*library, false)); } - server.reset(new kiwix::Server(library, nameMapper.get())); + server.reset(new kiwix::Server(library, nameMapper)); server->setRoot(cfg.root); server->setAddress(address); server->setPort(serverPort);