RIC-1044: Add array size checks
[ric-plt/e2mgr.git] / E2Manager / handlers / rmrmsghandlers / ric_service_update_handler.go
index 2f871e7..fda411f 100644 (file)
@@ -51,18 +51,20 @@ type functionDetails struct {
 }
 
 type RicServiceUpdateHandler struct {
-       logger          *logger.Logger
-       rmrSender       *rmrsender.RmrSender
-       rNibDataService services.RNibDataService
-       ranListManager  managers.RanListManager
+       logger                  *logger.Logger
+       rmrSender               *rmrsender.RmrSender
+       rNibDataService         services.RNibDataService
+       ranListManager          managers.RanListManager
+       RicServiceUpdateManager managers.IRicServiceUpdateManager
 }
 
-func NewRicServiceUpdateHandler(logger *logger.Logger, rmrSender *rmrsender.RmrSender, rNibDataService services.RNibDataService, ranListManager managers.RanListManager) *RicServiceUpdateHandler {
+func NewRicServiceUpdateHandler(logger *logger.Logger, rmrSender *rmrsender.RmrSender, rNibDataService services.RNibDataService, ranListManager managers.RanListManager, RicServiceUpdateManager managers.IRicServiceUpdateManager) *RicServiceUpdateHandler {
        return &RicServiceUpdateHandler{
-               logger:          logger,
-               rmrSender:       rmrSender,
-               rNibDataService: rNibDataService,
-               ranListManager:  ranListManager,
+               logger:                  logger,
+               rmrSender:               rmrSender,
+               rNibDataService:         rNibDataService,
+               ranListManager:          ranListManager,
+               RicServiceUpdateManager: RicServiceUpdateManager,
        }
 }
 
@@ -87,9 +89,16 @@ func (h *RicServiceUpdateHandler) Handle(request *models.NotificationRequest) {
                return
        }
        h.logger.Infof("#RicServiceUpdateHandler.Handle - RIC_SERVICE_UPDATE has been parsed successfully %+v", ricServiceUpdate)
+       h.RicServiceUpdateManager.StoreExistingRanFunctions(ranName)
+       h.logger.Infof("#RicServiceUpdate.Handle - Getting the ranFunctions before we do the RIC ServiceUpdate handling")
+
+       if len(ricServiceUpdate.E2APPDU.InitiatingMessage.Value.RICServiceUpdate.ProtocolIEs.RICServiceUpdateIEs) == 0 {
+               h.logger.Errorf("#RicServiceUpdateHandler.Handle - RAN name: %s - RICServiceUpdateIEs empty", ranName)
+               return
+       }
 
        ackFunctionIds := h.updateFunctions(ricServiceUpdate.E2APPDU.InitiatingMessage.Value.RICServiceUpdate.ProtocolIEs.RICServiceUpdateIEs, nodebInfo)
-       if len(ricServiceUpdate.E2APPDU.InitiatingMessage.Value.RICServiceUpdate.ProtocolIEs.RICServiceUpdateIEs) != 0 {
+       if len(ricServiceUpdate.E2APPDU.InitiatingMessage.Value.RICServiceUpdate.ProtocolIEs.RICServiceUpdateIEs) > 1 {
                err = h.rNibDataService.UpdateNodebInfoAndPublish(nodebInfo)
                if err != nil {
                        h.logger.Errorf("#RicServiceUpdateHandler.Handle - RAN name: %s - Failed at UpdateNodebInfoAndPublish. error: %s", nodebInfo.RanName, err)
@@ -104,7 +113,7 @@ func (h *RicServiceUpdateHandler) Handle(request *models.NotificationRequest) {
                return
        }
 
-       updateAck := models.NewServiceUpdateAck(ackFunctionIds)
+       updateAck := models.NewServiceUpdateAck(ackFunctionIds, ricServiceUpdate.E2APPDU.InitiatingMessage.Value.RICServiceUpdate.ProtocolIEs.RICServiceUpdateIEs[0].Value.TransactionID)
        err = h.sendUpdateAck(updateAck, nodebInfo, request)
        if err != nil {
                h.logger.Errorf("#RicServiceUpdate.Handle - failed to send RIC_SERVICE_UPDATE_ACK message to RMR: %s", err)
@@ -112,6 +121,8 @@ func (h *RicServiceUpdateHandler) Handle(request *models.NotificationRequest) {
        }
 
        h.logger.Infof("#RicServiceUpdate.Handle - Completed successfully")
+       models.UpdateProcedureType(ranName, models.RicServiceUpdateCompleted)
+       h.logger.Debugf("#RicServiceUpdateHandler.Handle  - updating the enum value to RicServiceUpdateCompleted completed")
 }
 
 func (h *RicServiceUpdateHandler) sendUpdateAck(updateAck models.RicServiceUpdateAckE2APPDU, nodebInfo *entities.NodebInfo, request *models.NotificationRequest) error {