-//-----------------------------------------------------------------------------
-//
-//-----------------------------------------------------------------------------
-type Registry struct {
- register map[uint16]*Subscription
- counter uint16
- mutex sync.Mutex
+ //
+ // Find possible existing Policy subscription
+ //
+ if actionType == e2ap.E2AP_ActionTypePolicy {
+ if subs, ok := r.register[subReqMsg.RequestId.Seq]; ok {
+ xapp.Logger.Debug("CREATE %s. Existing subscription for Policy found", subs.String())
+ subs.SetCachedResponse(nil, true)
+ return subs, nil
+ }
+ }
+
+ subs := r.findExistingSubs(trans, subReqMsg)
+ if subs == nil {
+ subs, err = r.allocateSubs(trans, subReqMsg)
+ if err != nil {
+ return nil, err
+ }
+ newAlloc = true
+ }
+
+ //
+ // Add to subscription
+ //
+ subs.mutex.Lock()
+ defer subs.mutex.Unlock()
+
+ epamount := subs.EpList.Size()
+
+ r.mutex.Unlock()
+ //
+ // Subscription route updates
+ //
+ if epamount == 1 {
+ subRouteAction := SubRouteInfo{subs.EpList, uint16(subs.ReqId.Seq)}
+ err = r.rtmgrClient.SubscriptionRequestCreate(subRouteAction)
+ } else {
+ subRouteAction := SubRouteInfo{subs.EpList, uint16(subs.ReqId.Seq)}
+ err = r.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
+ }
+ r.mutex.Lock()
+
+ if err != nil {
+ if newAlloc {
+ r.subIds = append(r.subIds, subs.ReqId.Seq)
+ }
+ return nil, err
+ }
+
+ if newAlloc {
+ r.register[subs.ReqId.Seq] = subs
+ }
+ xapp.Logger.Debug("CREATE %s", subs.String())
+ xapp.Logger.Debug("Registry: substable=%v", r.register)
+ return subs, nil