bugfix for subscription
[ric-app/hw.git] / src / xapp.cc
index 4fe395c..7d5d2b3 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 #include "xapp.hpp"
+#define BUFFER_SIZE 1024
 
  Xapp::Xapp(XappSettings &config, XappRmr &rmr){
 
          return;
   }
 
-Xapp::Xapp(XappSettings &config, XappRmr &rmr, SubscriptionHandler &sub_ref){
-               rmr_ref = &rmr;
-               config_ref = &config;
-               xapp_mutex = NULL;
-               subhandler_ref = &sub_ref;
-               set_rnib_gnblist();
-
-               return;
-       };
-
 Xapp::~Xapp(void){
 
        //Joining the threads
@@ -75,7 +66,11 @@ void Xapp::stop(void){
        sleep(10);
 }
 
-void Xapp::startup() {
+void Xapp::startup(SubscriptionHandler &sub_ref) {
+
+       subhandler_ref = &sub_ref;
+       set_rnib_gnblist();
+
        //send subscriptions.
        startup_subscribe_requests();
 
@@ -129,32 +124,64 @@ void Xapp::startup_subscribe_requests(void ){
    unsigned char meid[RMR_MAX_MEID];
    std::string xapp_id = config_ref->operator [](XappSettings::SettingName::XAPP_ID);
 
-   mdclog_write(MDCLOG_INFO,"Sending subscription in file= %s, line=%d",__FILE__,__LINE__);
+   mdclog_write(MDCLOG_INFO,"Preparing to send subscription in file= %s, line=%d",__FILE__,__LINE__);
 
    auto gnblist = get_rnib_gnblist();
+
    int sz = gnblist.size();
 
+   if(sz <= 0)
+          mdclog_write(MDCLOG_INFO,"Subscriptions cannot be sent as GNBList in RNIB is NULL");
+
    for(int i = 0; i<sz; i++){
 
         //give the message to subscription handler, along with the transmitter.
         strcpy((char*)meid,gnblist[i].c_str());
 
-        char *strMsg = "Subscription Request from HelloWorld XApp\0";
-        strncpy((char *)data,strMsg,strlen(strMsg));
-        data_size = strlen(strMsg);
+       // char *strMsg = "Subscription Request from HelloWorld XApp\0";
+       // strncpy((char *)data,strMsg,strlen(strMsg));
+       // data_size = strlen(strMsg);
+
+        subscription_helper  din;
+        subscription_helper  dout;
+
+        subscription_request sub_req;
+        subscription_request sub_recv;
+
+        unsigned char buf[BUFFER_SIZE];
+        size_t buf_size = BUFFER_SIZE;
+        bool res;
+
+
+        //Random Data  for request
+        int request_id = 1;
+        int function_id = 0;
+        std::string event_def = "HelloWorld Event Definition";
+
+        din.set_request(request_id);
+        din.set_function_id(function_id);
+        din.set_event_def(event_def.c_str(), event_def.length());
+
+        std::string act_def = "HelloWorld Action Definition";
+
+        din.add_action(1,1,(void*)act_def.c_str(), act_def.length(), 0);
+
+        res = sub_req.encode_e2ap_subscription(&buf[0], &buf_size, din);
 
         xapp_rmr_header rmr_header;
         rmr_header.message_type = RIC_SUB_REQ;
-        rmr_header.payload_length = data_size;
-        strcpy((char*)rmr_header.meid,gnblist[i].c_str());
+        rmr_header.payload_length = buf_size; //data_size
+        strcpy((char*)rmr_header.meid,gnblist[i].c_str());
 
         mdclog_write(MDCLOG_INFO,"Sending subscription in file= %s, line=%d for MEID %s",__FILE__,__LINE__, meid);
-     auto transmitter = std::bind(&XappRmr::xapp_rmr_send,rmr_ref, &rmr_header, (void*)data);
-
-     int res = subhandler_ref->manage_subscription_request(meid, transmitter);
-     if(res){
-        mdclog_write(MDCLOG_INFO,"Subscription SUCCESSFUL in file= %s, line=%d for MEID %s",__FILE__,__LINE__, meid);
+     auto transmitter = std::bind(&XappRmr::xapp_rmr_send,rmr_ref, &rmr_header, (void*)buf );//(void*)data);
 
+     int result = subhandler_ref->manage_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);
      }
    }
 
@@ -164,7 +191,7 @@ void Xapp::startup_get_policies(void){
 
   int policy_id = HELLOWORLD_POLICY_ID;
 
-  std::string policy_query = "{\"policy_id\":" + std::to_string(policy_id) + "}";
+  std::string policy_query = "{\"policy_type_id\":" + std::to_string(policy_id) + "}";
   unsigned char * message = (unsigned char *)calloc(policy_query.length(), sizeof(unsigned char));
   memcpy(message, policy_query.c_str(),  policy_query.length());
   xapp_rmr_header header;
@@ -190,7 +217,7 @@ void Xapp::set_rnib_gnblist(void) {
 
 
            Document doc;
-           ParseResult parseJson = doc.Parse((char*)result);
+           ParseResult parseJson = doc.Parse<kParseStopWhenDoneFlag>((char*)result);
            if (!parseJson) {
                std::cerr << "JSON parse error: %s (%u)", GetParseErrorFunc(parseJson.Code());
                return;