+ xapp.Logger.Info("SubDelResp received from Src: %s, Mtype: %v, SubId: %v, Meid: %v", params.Src, params.Mtype, params.SubId, params.Meid)
+ xapp.Rmr.Free(params.Mbuf)
+ params.Mbuf = nil
+
+ payloadSeqNum, err := c.e2ap.GetSubscriptionDeleteResponseSequenceNumber(params.Payload)
+ if err != nil {
+ xapp.Logger.Error("SubDelResp: Unable to get Sequence Number from Payload. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
+ return
+ }
+ xapp.Logger.Info("SubDelResp: Received payloadSeqNum: %v", payloadSeqNum)
+
+ c.timerMap.StopTimer("RIC_SUB_DEL_REQ", int(payloadSeqNum))
+
+ transaction, err := c.tracker.RetriveTransaction(payloadSeqNum, DELETE)
+ if err != nil {
+ xapp.Logger.Error("SubDelResp: Failed to retrive transaction record. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
+ return
+ }
+ xapp.Logger.Info("SubDelResp: SubId: %v, from address: %v:%v. Forwarding response to xApp", int(payloadSeqNum), transaction.Xappkey.Addr, transaction.Xappkey.Port)
+
+ params.SubId = int(payloadSeqNum)
+ params.Xid = transaction.OrigParams.Xid
+ xapp.Logger.Info("Forwarding SubDelResp to xApp: Mtype: %v, SubId: %v, Xid: %v, Meid: %v", params.Mtype, params.SubId, params.Xid, params.Meid)
+ err = c.rmrReplyToSender(params)
+ if err != nil {
+ xapp.Logger.Error("SubDelResp: Failed to send response to xApp. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
+ // return
+ }
+
+ time.Sleep(3 * time.Second)
+
+ xapp.Logger.Info("SubDelResp: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
+ subRouteAction := SubRouteInfo{DELETE, transaction.Xappkey.Addr, transaction.Xappkey.Port, payloadSeqNum}
+ err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
+ if err != nil {
+ xapp.Logger.Error("SubDelResp: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
+ return
+ }
+
+ xapp.Logger.Info("SubDelResp: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
+ if c.registry.releaseSequenceNumber(payloadSeqNum) {
+ transaction, err = c.tracker.completeTransaction(payloadSeqNum, DELETE)
+ if err != nil {
+ xapp.Logger.Error("SubDelResp: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
+ return
+ }
+ } else {
+ xapp.Logger.Error("SubDelResp: Failed to release sequency number. SubId: %v, Xid: %s", params.SubId, params.Xid)
+ return
+ }
+ return
+}
+
+func (c *Control) handleSubscriptionDeleteFailure(params *xapp.RMRParams) {
+ xapp.Logger.Info("SubDelFail received from Src: %s, Mtype: %v, SubId: %v, Meid: %v", params.Src, params.Mtype, params.SubId, params.Meid)
+ xapp.Rmr.Free(params.Mbuf)
+ params.Mbuf = nil
+
+ payloadSeqNum, err := c.e2ap.GetSubscriptionDeleteFailureSequenceNumber(params.Payload)
+ if err != nil {
+ xapp.Logger.Error("SubDelFail: Unable to get Sequence Number from Payload. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
+ return
+ }
+ xapp.Logger.Info("SubDelFail: Received payloadSeqNum: %v", payloadSeqNum)
+
+ c.timerMap.StopTimer("RIC_SUB_DEL_REQ", int(payloadSeqNum))
+
+ transaction, err := c.tracker.RetriveTransaction(payloadSeqNum, DELETE)
+ if err != nil {
+ xapp.Logger.Error("SubDelFail: Failed to retrive transaction record. Dropping msg. Err %v, SubId: %v", err, params.SubId)
+ return
+ }
+ xapp.Logger.Info("SubDelFail: SubId: %v, from address: %v:%v. Forwarding response to xApp", int(payloadSeqNum), transaction.Xappkey.Addr, transaction.Xappkey.Port)
+
+ params.SubId = int(payloadSeqNum)
+ params.Xid = transaction.OrigParams.Xid
+ xapp.Logger.Info("Forwarding SubDelFail to xApp: Mtype: %v, SubId: %v, Xid: %v, Meid: %v", params.Mtype, params.SubId, params.Xid, params.Meid)
+ err = c.rmrReplyToSender(params)
+ if err != nil {
+ xapp.Logger.Error("Failed to send SubDelFail to xApp. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
+ // return
+ }
+
+ time.Sleep(3 * time.Second)
+
+ xapp.Logger.Info("SubDelFail: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
+ subRouteAction := SubRouteInfo{DELETE, transaction.Xappkey.Addr, transaction.Xappkey.Port, payloadSeqNum}
+ c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
+ if err != nil {
+ xapp.Logger.Error("SubDelFail: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
+ return
+ }
+
+ xapp.Logger.Info("SubDelFail: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
+ if c.registry.releaseSequenceNumber(payloadSeqNum) {
+ transaction, err = c.tracker.completeTransaction(payloadSeqNum, DELETE)
+ if err != nil {
+ xapp.Logger.Error("SubDelFail: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
+ return
+ }
+ } else {
+ xapp.Logger.Error("SubDelFail: Failed to release sequency number. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
+ return
+ }
+ return
+}
+
+func (c *Control) handleSubscriptionDeleteRequestTimer(strId string, nbrId int) {
+ newSubId := uint16(nbrId)
+ xapp.Logger.Info("SubDelReq timer expired. newSubId: %v", newSubId)
+ // var causeContent uint8 = 1 // just some random cause. To be checked later. Should be no respose or something
+ // var causeVal uint8 = 1 // just some random val. To be checked later. Should be no respose or something
+ // c.sendSubscriptionDeleteFailure(newSubId, causeContent, causeVal)
+}
+
+/*
+func (c *Control) sendSubscriptionDeleteFailure(subId uint16, causeContent uint8, causeVal uint8) {
+ transaction, err := c.tracker.completeTransaction(subId, DELETE)