X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=Bouncer%2Fsrc%2Fxapp.cc;fp=Bouncer%2Fsrc%2Fxapp.cc;h=0000000000000000000000000000000000000000;hb=fbc7e3ad84fc7269233a2f0b5d416cb1c6f8a6ea;hp=2a07ff410339258fd0f92d95f7d70cbf9bcd7216;hpb=eb27c05c05b5042d115480c40cffa16e7d473d80;p=ric-app%2Fbouncer.git diff --git a/Bouncer/src/xapp.cc b/Bouncer/src/xapp.cc deleted file mode 100644 index 2a07ff4..0000000 --- a/Bouncer/src/xapp.cc +++ /dev/null @@ -1,481 +0,0 @@ -/* -# ================================================================================== -# Copyright (c) 2020 HCL Technologies Limited. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ================================================================================== -*/ - -#include "xapp.hpp" -#include -#include -#include -#include -#include -#include -#include -using namespace utility; -using namespace web; -using namespace web::http; -using namespace web::http::client; -using namespace concurrency::streams; -using jsonn = nlohmann::json; -#define BUFFER_SIZE 1024 -extern std::vectorSubscriptionIds; - Xapp::Xapp(XappSettings &config, XappRmr &rmr){ - - rmr_ref = &rmr; - config_ref = &config; - xapp_mutex = NULL; - subhandler_ref = NULL; - return; - } - -Xapp::~Xapp(void){ - - //Joining the threads - int threadcnt = xapp_rcv_thread.size(); - for(int i=0; i~mutex(); - delete xapp_mutex; - } -}; - -//Stop the xapp. Note- To be run only from unit test scripts. -void Xapp::stop(void){ - // Get the mutex lock - std::lock_guard guard(*xapp_mutex); - rmr_ref->set_listen(false); - rmr_ref->~XappRmr(); - - //Detaching the threads....not sure if this is the right way to stop the receiver threads. - //Hence function should be called only in Unit Tests - int threadcnt = xapp_rcv_thread.size(); - for(int i=0; iset_listen(true); - if(xapp_mutex == NULL){ - xapp_mutex = new std::mutex(); - } - std::lock_guard guard(*xapp_mutex); - - for(int j=0; j < _callbacks.size(); j++){ - std::thread th_recv([&](){ rmr_ref->xapp_rmr_receive(std::move(_callbacks[j]), rmr_ref);}); - xapp_rcv_thread.push_back(std::move(th_recv)); - } - - return; -} - -//Starting a seperate single receiver -void Xapp::start_xapp_receiver(XappMsgHandler& mp_handler){ - //start a receiver thread. Can be multiple receiver threads for more than 1 listening port. - rmr_ref->set_listen(true); - if(xapp_mutex == NULL){ - xapp_mutex = new std::mutex(); - } - - mdclog_write(MDCLOG_INFO,"Receiver Thread file= %s, line=%d",__FILE__,__LINE__); - std::lock_guard guard(*xapp_mutex); - std::thread th_recv([&](){ rmr_ref->xapp_rmr_receive(std::move(mp_handler), rmr_ref);}); - xapp_rcv_thread.push_back(std::move(th_recv)); - return; -} - -void Xapp::shutdown(){ - - sleep(70); - //send subscriptions delete. - shutdown_subscribe_deletes(); - return; -} - -void Xapp::shutdown_subscribe_deletes(void ) -{ - - bool res; - size_t data_size = ASN_BUFF_MAX_SIZE; - unsigned char data[data_size]; - //unsigned char meid[RMR_MAX_MEID]; - char meid[RMR_MAX_MEID]; - std::string xapp_id = config_ref->operator [](XappSettings::SettingName::XAPP_ID); - - mdclog_write(MDCLOG_INFO,"Preparing to send subscription Delete in file= %s, line=%d",__FILE__,__LINE__); - - auto gnblist = get_rnib_gnblist(); - - int sz = gnblist.size(); - mdclog_write(MDCLOG_INFO,"GNBList size : %d", sz); - - if(sz <= 0) - mdclog_write(MDCLOG_INFO,"Subscriptions Delete cannot be sent as GNBList in RNIB is NULL"); - - for(int i = 0; i0) - { - auto delJson = pplx::create_task([i,meid]() { - utility::string_t port = U("8088"); - utility::string_t address = U("http://service-ricplt-submgr-http.ricplt.svc.cluster.local:"); - address.append(port); - address.append(U("/ric/v1/subscriptions/")); - address.append( utility::string_t(SubscriptionIds.back())); - SubscriptionIds.pop_back(); - uri_builder uri(address); - auto addr = uri.to_uri().to_string(); - http_client client(addr); - ucout << utility::string_t(U("making requests at: ")) << addr <manage_subscription_delete_request(gnblist[i], transmitter); - - if(result==SUBSCR_SUCCESS) - { - - mdclog_write(MDCLOG_INFO,"Subscription Delete SUCCESSFUL in file= %s, line=%d for MEID %s",__FILE__,__LINE__, meid); - } - else - { - mdclog_write(MDCLOG_ERR,"Subscription Delete FAILED in file= %s, line=%d for MEID %s",__FILE__,__LINE__, meid); - } - */ - } -} - -void Xapp::startup_subscribe_requests(void ){ - bool res; - size_t data_size = ASN_BUFF_MAX_SIZE; - unsigned char data[data_size]; - char meid[RMR_MAX_MEID]; - std::string xapp_id = config_ref->operator [](XappSettings::SettingName::XAPP_ID); - //int a =std::stoi(xapp_id); - mdclog_write(MDCLOG_INFO,"Preparing to send subscription in file= %s, line=%d",__FILE__,__LINE__); - - auto gnblist = get_rnib_gnblist(); - - int sz = gnblist.size(); - mdclog_write(MDCLOG_INFO,"GNBList size : %d", sz); - if(sz <= 0) - mdclog_write(MDCLOG_INFO,"Subscriptions cannot be sent as GNBList in RNIB is NULL"); - - for(int i = 0; imanage_subscription_request(gnblist[i], transmitter); - - if(result==SUBSCR_SUCCESS){ - - mdclog_write(MDCLOG_INFO,"Subscription SUCCESSFUL in file= %s, line=%d for MEID %s",__FILE__,__LINE__, meid); - } - else { - mdclog_write(MDCLOG_ERR,"Subscription FAILED in file= %s, line=%d for MEID %s",__FILE__,__LINE__, meid); - } - */ - } - std::cout<<"\n SubscriptionIds vector size= "<xapp_rmr_send(&header, (void *)message); - free(message); - -} - -void Xapp::set_rnib_gnblist(void) { - - openSdl(); - - void *result = getListGnbIds(); - if(strlen((char*)result) < 1){ - mdclog_write(MDCLOG_ERR, "ERROR: no data from getListGnbIds\n"); - return; - } - - mdclog_write(MDCLOG_INFO, "GNB List in R-NIB %s\n", (char*)result); - - - Document doc; - ParseResult parseJson = doc.Parse((char*)result); - if (!parseJson) { - std::cerr << "JSON parse error: %s (%u)", GetParseErrorFunc(parseJson.Code()); - return; - } - - if(!doc.HasMember("gnb_list")){ - mdclog_write(MDCLOG_INFO, "JSON Has No GNB List Object"); - return; - } - assert(doc.HasMember("gnb_list")); - - const Value& gnblist = doc["gnb_list"]; - if (gnblist.IsNull()) - return; - - if(!gnblist.IsArray()){ - mdclog_write(MDCLOG_INFO, "GNB List is not an array"); - return; - } - - - assert(gnblist.IsArray()); - for (SizeType i = 0; i < gnblist.Size(); i++) // Uses SizeType instead of size_t - { - assert(gnblist[i].IsObject()); - const Value& gnbobj = gnblist[i]; - assert(gnbobj.HasMember("inventory_name")); - assert(gnbobj["inventory_name"].IsString()); - std::string name = gnbobj["inventory_name"].GetString(); - rnib_gnblist.push_back(name); - - } - closeSdl(); - return; - -} -