E2AP Abstraction Changes
[ric-app/hw.git] / src / xapp.cc
index 4fe395c..1753661 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,66 @@ 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__);
+
+   std::string sub_id = "1";
 
    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);
+
+        unsigned char buf[1024];
+        size_t buf_size = 1024;
+
+
+        HWEventTriggerDefinition eventObj;
+        eventObj.set_triggerNature(0);
+
+        //creating Action Definition
+        HWActionDefinition e2sm_actdefn1;
+        e2sm_actdefn1.add(HWActionDefinition::RANParamIEs().set_param_id(1).set_param_name("ENodeBID").set_param_test(1).set_param_value("SR123"));
+
+        //first Action Object
+        E2APAction<HWActionDefinition> actionObj;
+        actionObj.add(E2APAction<HWActionDefinition>::ActionIEs().set_ricActionID(1).set_ricActionType(1).set_ricActionDefinition(e2sm_actdefn1));
+
+        E2APSubscriptionRequest<HWEventTriggerDefinition, HWActionDefinition> requestObj(E2APSubscriptionRequest<HWEventTriggerDefinition, HWActionDefinition>::SubscriptionRequestIEs().set_ranFunctionID(1).set_ricInstanceID(1).set_ricRequestorID(3).set_ricAction_ToBeSetup_List(actionObj).set_ricEventTriggerDefinition(eventObj));
+
+        bool res = requestObj.encode(&buf[0], &buf_size);
+        if(!res)
+                 mdclog_write(MDCLOG_ERR,"SubscriptionRequest ENCODING Error: %s",requestObj.get_error().c_str());
+        else
+                 mdclog_write(MDCLOG_INFO,"SubscriptionRequest ENCODING SUCESS");
+
+
 
         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
 
-        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);
+        strcpy((char*)rmr_header.sid,sub_id.c_str());
+        strcpy((char*)rmr_header.meid,gnblist[i].c_str());
 
-     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);
+        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*)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 +193,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 +219,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;