+
+func (c *Control) trackDeleteTransaction(params *xapp.RMRParams, payloadSeqNum uint16) (err error) {
+ srcAddr, srcPort, err := c.rtmgrClient.SplitSource(params.Src)
+ if err != nil {
+ xapp.Logger.Error("Failed to update routing-manager about the subscription delete request with reason: %s", err)
+ }
+ xactKey := TransactionKey{payloadSeqNum, DELETE}
+ xactValue := Transaction{*srcAddr, *srcPort, params}
+ err = c.tracker.TrackTransaction(xactKey, xactValue)
+ return
+}
+
+func (c *Control) handleSubscriptionDeleteResponse(params *xapp.RMRParams) (err error) {
+ xapp.Logger.Info("Subscription Delete Response 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 {
+ err = errors.New("Unable to get Subscription Sequence Number from Payload due to: " + err.Error())
+ return
+ }
+ xapp.Logger.Info("Received payloadSeqNum: %v", payloadSeqNum)
+
+ // should here be IsValidSequenceNumber check?
+// c.timerMap.StopTimer(payloadSeqNum)
+
+ var transaction Transaction
+ transaction, err = c.tracker.RetriveTransaction(payloadSeqNum, DELETE)
+ if err != nil {
+ xapp.Logger.Error("Failed to retrive transaction record. Err %v", err)
+ xapp.Logger.Info("Further processing of this Subscription Delete Response stopped. SubId: %v, Xid: %s",params.SubId, params.Xid)
+ return
+ }
+ xapp.Logger.Info("Subscription ID: %v, from address: %v:%v. Forwarding response to requestor...", int(payloadSeqNum), transaction.XappInstanceAddress, transaction.XappPort)
+
+ params.SubId = int(payloadSeqNum)
+ params.Xid = transaction.OrigParams.Xid
+ xapp.Logger.Info("Forwarding Subscription Delete Response to UEEC: 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 response to requestor %v. SubId: %v, Xid: %s", err, params.SubId, params.Xid)
+// return
+ }
+
+ time.Sleep(3 * time.Second)
+
+ xapp.Logger.Info("Starting routing manager update")
+ subRouteAction := SubRouteInfo{DELETE, transaction.XappInstanceAddress, transaction.XappPort, payloadSeqNum}
+ c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
+
+ xapp.Logger.Info("Deleting trancaction record")
+ if c.registry.releaseSequenceNumber(payloadSeqNum) {
+ transaction, err = c.tracker.completeTransaction(payloadSeqNum, DELETE)
+ if err != nil {
+ xapp.Logger.Error("Failed to delete a Subscription Delete Request transaction record due to %v", err)
+ return
+ }
+ }
+ return
+}
+
+func (c *Control) handleSubscriptionDeleteFailure(params *xapp.RMRParams) (err error) {
+ xapp.Logger.Info("Subscription Delete Failure 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 {
+ err = errors.New("Unable to get Subscription Sequence Number from Payload due to: " + err.Error())
+ return
+ }
+ xapp.Logger.Info("Received payloadSeqNum: %v", payloadSeqNum)
+
+ // should here be IsValidSequenceNumber check?
+// c.timerMap.StopTimer(payloadSeqNum)
+
+ var transaction Transaction
+ transaction, err = c.tracker.RetriveTransaction(payloadSeqNum, DELETE)
+ if err != nil {
+ xapp.Logger.Error("Failed to retrive transaction record. Err %v", err)
+ xapp.Logger.Info("Further processing of this Subscription Delete Failure stopped. SubId: %v, Xid: %s",params.SubId, params.Xid)
+ return
+ }
+ xapp.Logger.Info("Subscription ID: %v, from address: %v:%v. Forwarding response to requestor...", int(payloadSeqNum), transaction.XappInstanceAddress, transaction.XappPort)
+
+ params.SubId = int(payloadSeqNum)
+ params.Xid = transaction.OrigParams.Xid
+ xapp.Logger.Info("Forwarding Subscription Delete Failure to UEEC: 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 response to requestor %v. SubId: %v, Xid: %s", err, params.SubId, params.Xid)
+// return
+ }
+
+ time.Sleep(3 * time.Second)
+
+ xapp.Logger.Info("Starting routing manager update")
+ subRouteAction := SubRouteInfo{DELETE, transaction.XappInstanceAddress, transaction.XappPort, payloadSeqNum}
+ c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
+
+ xapp.Logger.Info("Deleting trancaction record")
+ if c.registry.releaseSequenceNumber(payloadSeqNum) {
+ transaction, err = c.tracker.completeTransaction(payloadSeqNum, DELETE)
+ if err != nil {
+ xapp.Logger.Error("Failed to delete a Subscription Delete Request transaction record due to %v", err)
+ return
+ }
+ }
+ return
+}
+
+func (c *Control) handleSubscriptionDeleteRequestTimer(subId uint16) {
+ xapp.Logger.Info("Subscription Delete Request timer expired. SubId: %v",subId)
+/*
+ transaction, err := c.tracker.completeTransaction(subId, DELETE)
+ if err != nil {
+ xapp.Logger.Error("Failed to delete a Subscription Delete Request transaction record due to %v", err)
+ return
+ }
+ xapp.Logger.Info("SubId: %v, Xid %v, Meid: %v",subId, transaction.OrigParams.Xid, transaction.OrigParams.Meid)
+
+ var params xapp.RMRParams
+ params.Mtype = 12022 //xapp.RICMessageTypes["RIC_SUB_DEL_FAILURE"]
+ params.SubId = int(subId)
+ params.Meid = transaction.OrigParams.Meid
+ params.Xid = transaction.OrigParams.Xid
+ payload := []byte("40CA4018000003EA7E00050000010016EA6300020021EA74000200C0")
+ params.PayloadLen = len(payload)
+ params.Payload = payload
+
+ xapp.Logger.Info("Forwarding Subscription Delete Failure to UEEC: Mtype: %v, SubId: %v, Xid: %s, Meid: %v",params.Mtype, params.SubId, params.Xid, params.Meid)
+ err = c.rmrReplyToSender(¶ms)
+ if err != nil {
+ xapp.Logger.Error("Failed to send response to requestor %v. SubId: %v, Xid: %s", err, params.SubId, params.Xid)
+ }
+*/
+/*
+ time.Sleep(3 * time.Second)
+ xapp.Logger.Info("Subscription ID: %v, from address: %v:%v. Deleting transaction record", int(subId), transaction.XappInstanceAddress, transaction.XappPort)
+
+ xapp.Logger.Info("Starting routing manager update")
+ subRouteAction := SubRouteInfo{DELETE, transaction.XappInstanceAddress, transaction.XappPort, payloadSeqNum}
+ c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
+
+ xapp.Logger.Info("Deleting trancaction record")
+ if c.registry.releaseSequenceNumber(payloadSeqNum) {
+ transaction, err = c.tracker.completeTransaction(payloadSeqNum, DELETE)
+ if err != nil {
+ xapp.Logger.Error("Failed to delete a Subscription Delete Request transaction record due to %v", err)
+ return
+ }
+ }
+*/
+ return
+ }