+func (r *Registry) RouteCreate(subs *Subscription, c *Control) (ErrorInfo, error) {
+ errorInfo := ErrorInfo{}
+ subRouteAction := SubRouteInfo{subs.EpList, uint16(subs.ReqId.InstanceId)}
+ err := r.rtmgrClient.SubscriptionRequestCreate(subRouteAction)
+ if err != nil {
+ if strings.Contains(err.Error(), "status 400") {
+ errorInfo.TimeoutType = models.SubscriptionInstanceTimeoutTypeRTMGRTimeout
+ } else {
+ errorInfo.ErrorSource = models.SubscriptionInstanceErrorSourceRTMGR
+ }
+ errorInfo.ErrorCause = err.Error()
+ c.UpdateCounter(cRouteCreateFail)
+ xapp.Logger.Error("%s", err.Error())
+ err = fmt.Errorf("RTMGR route create failure")
+ }
+ return errorInfo, err
+}
+
+func (r *Registry) RouteCreateUpdate(subs *Subscription, c *Control) (ErrorInfo, error) {
+ errorInfo := ErrorInfo{}
+ subRouteAction := SubRouteInfo{subs.EpList, uint16(subs.ReqId.InstanceId)}
+ err := r.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
+ if err != nil {
+ if strings.Contains(err.Error(), "status 400") {
+ errorInfo.TimeoutType = models.SubscriptionInstanceTimeoutTypeRTMGRTimeout
+ } else {
+ errorInfo.ErrorSource = models.SubscriptionInstanceErrorSourceRTMGR
+ }
+ errorInfo.ErrorCause = err.Error()
+ c.UpdateCounter(cRouteCreateUpdateFail)
+ xapp.Logger.Error("%s", err.Error())
+ err = fmt.Errorf("RTMGR route update failure")
+ return errorInfo, err
+ }
+ c.UpdateCounter(cMergedSubscriptions)
+ return errorInfo, err
+}
+
+func (r *Registry) CheckActionTypes(subReqMsg *e2ap.E2APSubscriptionRequest) (uint64, error) {
+ var reportFound bool = false
+ var policyFound bool = false
+ var insertFound bool = false
+
+ for _, acts := range subReqMsg.ActionSetups {
+ if acts.ActionType == e2ap.E2AP_ActionTypeReport {
+ reportFound = true
+ }
+ if acts.ActionType == e2ap.E2AP_ActionTypePolicy {
+ policyFound = true
+ }
+ if acts.ActionType == e2ap.E2AP_ActionTypeInsert {
+ insertFound = true
+ }
+ }
+ if reportFound == true && policyFound == true || reportFound == true && insertFound == true || policyFound == true && insertFound == true {
+ return e2ap.E2AP_ActionTypeInvalid, fmt.Errorf("Different action types (Report, Policy or Insert) in same RICactions-ToBeSetup-List")
+ }
+ if reportFound == true {
+ return e2ap.E2AP_ActionTypeReport, nil
+ }
+ if policyFound == true {
+ return e2ap.E2AP_ActionTypePolicy, nil
+ }
+ if insertFound == true {
+ return e2ap.E2AP_ActionTypeInsert, nil
+ }
+ return e2ap.E2AP_ActionTypeInvalid, fmt.Errorf("Invalid action type in RICactions-ToBeSetup-List")
+}
+
+// TODO: Works with concurrent calls, but check if can be improved
+func (r *Registry) RemoveFromSubscription(subs *Subscription, trans *TransactionXapp, waitRouteClean time.Duration, c *Control) error {