+ responsePayload = replaceEmptyTagsWithSelfClosing(responsePayload)
+
+ msg := models.NewRmrMessage(rmrCgo.RIC_E2_SETUP_FAILURE, nodebInfo.RanName, responsePayload, req.TransactionId, req.GetMsgSrc())
+ h.logger.Infof("#E2SetupRequestNotificationHandler.handleUnsuccessfulResponse - RAN name: %s - RIC_E2_SETUP_RESP message has been built successfully. Message: %x", nodebInfo.RanName, msg)
+ _ = h.rmrSender.WhSend(msg)
+
+}
+
+func (h E2SetupRequestNotificationHandler) handleSuccessfulResponse(ranName string, req *models.NotificationRequest, setupRequest *models.E2SetupRequestMessage) {
+
+ ricNearRtId, err := convertTo20BitString(h.config.GlobalRicId.RicNearRtId)
+ if err != nil {
+ h.logger.Errorf("#E2SetupRequestNotificationHandler.handleSuccessfulResponse - RAN name: %s - failed to convert RicNearRtId value %s to 20 bit string . Error: %s", ranName, h.config.GlobalRicId.RicNearRtId, err)
+ return
+ }
+ successResponse := models.NewE2SetupSuccessResponseMessage(h.config.GlobalRicId.PlmnId, ricNearRtId, setupRequest)
+ h.logger.Debugf("#E2SetupRequestNotificationHandler.handleSuccessfulResponse - E2_SETUP_RESPONSE has been built successfully %+v", successResponse)
+
+ responsePayload, err := xml.Marshal(&successResponse.E2APPDU)
+ if err != nil {
+ h.logger.Warnf("#E2SetupRequestNotificationHandler.handleSuccessfulResponse - RAN name: %s - Error marshalling RIC_E2_SETUP_RESP. Payload: %s", ranName, responsePayload)
+ }
+
+ responsePayload = replaceEmptyTagsWithSelfClosing(responsePayload)
+
+ msg := models.NewRmrMessage(rmrCgo.RIC_E2_SETUP_RESP, ranName, responsePayload, req.TransactionId, req.GetMsgSrc())
+ h.logger.Infof("#E2SetupRequestNotificationHandler.handleSuccessfulResponse - RAN name: %s - RIC_E2_SETUP_RESP message has been built successfully. Message: %x", ranName, msg)
+ _ = h.rmrSender.Send(msg)
+}
+
+func replaceEmptyTagsWithSelfClosing(responsePayload []byte) []byte {
+ responseString := strings.NewReplacer(
+ "<reject></reject>", "<reject/>",
+ "<ignore></ignore>", "<ignore/>",
+ "<transport-resource-unavailable></transport-resource-unavailable>", "<transport-resource-unavailable/>",
+ "<v60s></v60s>", "<v60s/>",
+ "<v20s></v20s>", "<v20s/>",
+ "<v10s></v10s>", "<v10s/>",
+ "<v5s></v5s>", "<v5s/>",
+ "<v2s></v2s>", "<v2s/>",
+ "<v1s></v1s>", "<v1s/>",
+ ).Replace(string(responsePayload))
+ return []byte(responseString)
+}
+
+func convertTo20BitString(ricNearRtId string) (string, error) {
+ r, err := strconv.ParseUint(ricNearRtId, 16, 32)
+ if err != nil {
+ return "", err
+ }
+ return fmt.Sprintf("%020b", r)[:20], nil
+}
+
+func (h E2SetupRequestNotificationHandler) parseSetupRequest(payload []byte) (*models.E2SetupRequestMessage, string, error) {
+