+ }
+ 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 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) {
+ swaggerSpec, err := loads.Embedded(restapi.SwaggerJSON, restapi.FlatSwaggerJSON)
+ if err != nil {
+ //log.Fatalln(err)
+ xapp.Logger.Error(err.Error())
+ os.Exit(1)
+ }
+ nbiUrl, err := url.Parse(*nbiif)
+ if err != nil {
+ xapp.Logger.Error(err.Error())
+ os.Exit(1)
+ }
+ api := operations.NewRoutingManagerAPI(swaggerSpec)
+ server := restapi.NewServer(api)
+ defer server.Shutdown()
+
+ server.Port, err = strconv.Atoi(nbiUrl.Port())
+ if err != nil {
+ xapp.Logger.Error("Invalid NBI RestAPI port")
+ os.Exit(1)
+ }
+ server.Host = "0.0.0.0"
+ // set handlers
+ api.HandleProvideXappHandleHandler = handle.ProvideXappHandleHandlerFunc(
+ func(params handle.ProvideXappHandleParams) middleware.Responder {
+ xapp.Logger.Info("Data received on Http interface")
+ err := provideXappHandleHandlerImpl(datach, params.XappCallbackData)
+ if err != nil {
+ xapp.Logger.Error("Invalid XApp callback data: " + err.Error())
+ return handle.NewProvideXappHandleBadRequest()
+ } else {
+ return handle.NewGetHandlesOK()
+ }
+ })