From 8160afd7019bba52b947b721b169b7a6dcb18f8f Mon Sep 17 00:00:00 2001 From: Vijith T V Date: Thu, 19 Aug 2021 16:08:26 +0000 Subject: [PATCH] Reason for change : Replacing the stub functions introduced for handling missing symbol with proper functionality Risks : None Test Procedure : Ctrl manager should latch to a network --- ctrlm_vendor_network_factory.cpp | 36 +++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/ctrlm_vendor_network_factory.cpp b/ctrlm_vendor_network_factory.cpp index 5341fa5..b670a6f 100644 --- a/ctrlm_vendor_network_factory.cpp +++ b/ctrlm_vendor_network_factory.cpp @@ -16,10 +16,44 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - +#include +#include #include "ctrlm_vendor_network_factory.h" +#include "ctrlm_log.h" + +// vector contains vendor's network factory functions +// vector is declared as pointer, because vendor's network factory initializers objects +// constructors might be called before vector constructor if declare it as object +typedef std::vector ctrlm_vendor_network_factory_func_chain_t; +static ctrlm_vendor_network_factory_func_chain_t* ctrlm_vendor_network_factory_func_chain = 0; + +static class factory_chain_garbage_collector { + public: + ~factory_chain_garbage_collector(){ + if (0 != ctrlm_vendor_network_factory_func_chain){ + delete ctrlm_vendor_network_factory_func_chain; + ctrlm_vendor_network_factory_func_chain = 0; + } + } +} _garbage_collector;; + +// vendors should add to chain network factory function their with this call +void ctrlm_vendor_network_factory_func_add(ctrlm_vendor_network_factory_func_t* func) { + if (0 == ctrlm_vendor_network_factory_func_chain){ + ctrlm_vendor_network_factory_func_chain = new ctrlm_vendor_network_factory_func_chain_t; + } + ctrlm_vendor_network_factory_func_chain->push_back(func); +} + +// by the time of this function call, ctrlm_vendor_network_factory_func_chain will be initialized with // vendor factory functions int ctrlm_vendor_network_factory(unsigned long ignore_mask, json_t *json_config_root, networks_map_t& networks) { + if (0 == ctrlm_vendor_network_factory_func_chain){ return 0; + } + for (auto factory_func : *ctrlm_vendor_network_factory_func_chain){ + factory_func(ignore_mask, json_config_root, networks); + } + return networks.size(); }