X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fxapp.cc;h=c9cd5dafeda6d5a2fff48529135945e4d95274d9;hb=3baf0b7442b45212ad859904fb061c3de4daef69;hp=ca737e62a720e74890c7233177dc01049b4faded;hpb=433b7b2a72c174c75ce2c0c75b225fa0bb813d32;p=ric-app%2Fhw.git diff --git a/src/xapp.cc b/src/xapp.cc index ca737e6..c9cd5da 100644 --- a/src/xapp.cc +++ b/src/xapp.cc @@ -20,7 +20,6 @@ * xapp.cc * * Created on: Mar, 2020 - * Author: Shraboni Jana */ #include "xapp.hpp" @@ -32,43 +31,56 @@ Xapp::Xapp(XappSettings &config, XappRmr &rmr){ return; } - -Xapp::Xapp(XappSettings &config, XappRmr &rmr, XappSDL &sdl){ - rmr_ref = &rmr; - config_ref = &config; - sdl_ref = &sdl; - //sdl_ref.insert_data(); - xapp_mutex = NULL; - - return; -} Xapp::~Xapp(void){ //Joining the threads int threadcnt = xapp_rcv_thread.size(); - for(int i=0; i~mutex(); + delete xapp_mutex; } - delete xapp_mutex; }; + +//stop the xapp. +void Xapp::stop(void){ + // Get the mutex lock + std::lock_guard guard(*xapp_mutex); + rmr_ref->set_listen(false); + rmr_ref->~XappRmr(); + +} + +void Xapp::init() { + + //get rnib information + get_rnib_gnblist(); + + +} void Xapp::startup() { //send subscriptions and read A1 policies. startup_subscribe_requests(); - startup_get_policies(); + //startup_get_policies(); return; } -void Xapp::start_xapp_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); xapp_mutex = new std::mutex(); - std::vector> message_procs; mdclog_write(MDCLOG_INFO,"Receiver Thread file= %s, line=%d",__FILE__,__LINE__); - std::unique_ptr mp_handler = std::make_unique(); + //std::unique_ptr mp_handler = std::make_unique(); + //auto mp_handler = _callbacks[0]; std::lock_guard guard(*xapp_mutex); - std::thread th_recv([&](){ rmr_ref->xapp_rmr_receive(std::move(*mp_handler.get()), rmr_ref);}); + std::thread th_recv([&](){ rmr_ref->xapp_rmr_receive(std::move(mp_handler), rmr_ref);}); + xapp_rcv_thread.push_back(std::move(th_recv)); @@ -87,17 +99,13 @@ void Xapp::shutdown(){ void Xapp::startup_subscribe_requests(void ){ size_t data_size = ASN_BUFF_MAX_SIZE; unsigned char data[data_size]; - - std::vector gNodeBs; - gNodeBs.push_back("GNB1001"); //this line should come from RNIB - - - for(auto &it: gNodeBs){ + std::string xapp_id = config_ref->operator [](XappSettings::SettingName::XAPP_ID); + for(auto &it: rnib_gnblist){ int attempt = 0; - XappMsgHandler msg; + XappMsgHandler msg = XappMsgHandler(xapp_id); - /* bool res_encode = msg.encode_subscription_request(data, &data_size); - if(!res_encode) exit(0);*/ + //bool res_encode = msg.encode_subscription_request(data, &data_size); + //if(!res_encode) exit(0); char *strMsg = "HelloWorld\0"; strncpy((char *)data,strMsg,strlen(strMsg)); data_size = sizeof(data); @@ -109,6 +117,8 @@ void Xapp::startup_subscribe_requests(void ){ auto transmitter = std::bind(&XappRmr::xapp_rmr_send,rmr_ref, &rmr_header, (void*)data); transmitter(); //this will go to subscription manager. + //rmr_ref->xapp_rmr_call(&rmr_header,(char*)strMsg); + break; } } @@ -129,25 +139,44 @@ void Xapp::startup_get_policies(void){ free(message); } -void Xapp::sdl_data(void) { - sdl_ref->insert_data(); -} -/*void Xapp::rnib_data(void) { - printf("Using rnibreader lib from C:\n"); - open(); +void Xapp::set_rnib_gnblist(void) { + + openSdl(); void *result = getListGnbIds(); if(result == NULL){ - - printf("ERROR: no data from getListGnbIds\n"); + mdclog_write(MDCLOG_ERR, "ERROR: no data from getListGnbIds\n"); return; } - printf("getListGnbIds response: %s\n", (char *)result); - close(); - free(result); + + mdclog_write(MDCLOG_INFO, "GNB List in R-NIB %s\n", (char*)result); + + Document doc; + doc.Parse((char*)result); + assert(doc.HasMember("gnb_list")); + + + const Value& gnblist = doc["gnb_list"]; + if (gnblist.IsNull()) 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()); + rnib_gnblist.push_back(gnbobj["inventory_name"].GetString()); + + } + closeSdl(); + + //delete result; + return; + +}