+func updateXappSubscriptionHandleImpl(subupdatechan chan<- *rtmgr.XappList, data *models.XappList, subid uint16) error {
+ xapp.Logger.Debug("Invoked updateXappSubscriptionHandleImpl")
+
+ var fqdnlist []rtmgr.FqDn
+ for _, item := range *data {
+ fqdnlist = append(fqdnlist, rtmgr.FqDn(*item))
+ }
+ xapplist := rtmgr.XappList{SubscriptionID: subid, FqdnList: fqdnlist}
+ var subdata models.XappSubscriptionData
+ var id int32
+ id = int32(subid)
+ subdata.SubscriptionID = &id
+ for _, items := range fqdnlist {
+ subdata.Address = items.Address
+ subdata.Port = items.Port
+ err := validateXappSubscriptionData(&subdata)
+ if err != nil {
+ xapp.Logger.Error(err.Error())
+ return err
+ }
+ }
+ subupdatechan <- &xapplist
+ return nil
+}
+
+func createNewE2tHandleHandlerImpl(e2taddchan chan<- *models.E2tData,
+ data *models.E2tData) error {
+ xapp.Logger.Debug("Invoked createNewE2tHandleHandlerImpl")
+ err := validateE2tData(data)
+ if err != nil {
+ xapp.Logger.Error(err.Error())
+ return err
+ }
+ e2taddchan <- data
+ return nil
+}
+
+func validateE2TAddressRANListData(assRanE2tData models.RanE2tMap) error {
+
+ xapp.Logger.Debug("Invoked.validateE2TAddressRANListData : %v", assRanE2tData)
+
+ for _, element := range assRanE2tData {
+ if *element.E2TAddress == "" {
+ return fmt.Errorf("E2T Instance - E2TAddress is empty!!!")
+ }
+
+ e2taddress_key := *element.E2TAddress
+ if !checkValidaE2TAddress(e2taddress_key) {
+ return fmt.Errorf("E2TAddress doesn't exist!!!, E2TAddress: %v", e2taddress_key)
+ }
+
+ }
+ return nil
+}
+
+func associateRanToE2THandlerImpl(assranchan chan<- models.RanE2tMap,
+ data models.RanE2tMap) error {
+ xapp.Logger.Debug("Invoked associateRanToE2THandlerImpl")
+ err := validateE2TAddressRANListData(data)
+ if err != nil {
+ xapp.Logger.Warn(" Association of RAN to E2T Instance data validation failed: " + err.Error())
+ return err
+ }
+ assranchan <- data
+ return nil
+}
+
+func disassociateRanToE2THandlerImpl(disassranchan chan<- models.RanE2tMap,
+ data models.RanE2tMap) error {
+ xapp.Logger.Debug("Invoked disassociateRanToE2THandlerImpl")
+ err := validateE2TAddressRANListData(data)
+ if err != nil {
+ xapp.Logger.Warn(" Disassociation of RAN List from E2T Instance data validation failed: " + err.Error())
+ return err
+ }
+ disassranchan <- data
+ return nil
+}
+
+func deleteE2tHandleHandlerImpl(e2tdelchan chan<- *models.E2tDeleteData,
+ data *models.E2tDeleteData) error {
+ xapp.Logger.Debug("Invoked deleteE2tHandleHandlerImpl")
+
+ err := validateDeleteE2tData(data)
+ if err != nil {
+ xapp.Logger.Error(err.Error())
+ return err
+ }
+
+ e2tdelchan <- data
+ return nil
+}
+
+func dumpDebugData() (models.Debuginfo, error) {
+ var response models.Debuginfo
+ sdlEngine, _ := sdl.GetSdl("file")
+ rpeEngine, _ := rpe.GetRpe("rmrpush")
+ data, err := sdlEngine.ReadAll(xapp.Config.GetString("rtfile"))
+ if err != nil || data == nil {
+ xapp.Logger.Error("Cannot get data from sdl interface due to: " + err.Error())
+ return response, err
+ }
+ response.RouteTable = *rpeEngine.GeneratePolicies(rtmgr.Eps, data)
+
+ prettyJSON, err := json.MarshalIndent(data, "", "")
+ response.RouteConfigs = string(prettyJSON)
+
+ return response, err
+}
+
+func launchRest(nbiif *string, datach chan<- *models.XappCallbackData, subchan chan<- *models.XappSubscriptionData, subupdatechan chan<- *rtmgr.XappList,
+ subdelchan chan<- *models.XappSubscriptionData, e2taddchan chan<- *models.E2tData, assranchan chan<- models.RanE2tMap, disassranchan chan<- models.RanE2tMap, e2tdelchan chan<- *models.E2tDeleteData) {