-/*
-Checks if a tranascation with similar type has been ongoing. If not then creates one.
-Returns error if there is similar transatcion ongoing.
-*/
-func (t *Tracker) Track_transaction(key Transaction_key, xact Transaction) error{
- if _, ok := t.transaction_table[key]; ok {
- // TODO: Implement merge related check here. If the key is same but the value is different.
- err := fmt.Errorf("Transaction tracker: Similar transaction with sub id %d and type %s is ongoing", key.SubID, key.trans_type )
+func (t *Tracker) initTransaction(transBase *Transaction) {
+ t.mutex.Lock()
+ defer t.mutex.Unlock()
+ transBase.EventChan = make(chan interface{})
+ transBase.tracker = t
+ transBase.Seq = t.transSeq
+ t.transSeq++
+}
+
+func (t *Tracker) NewSubsTransaction(subs *Subscription) *TransactionSubs {
+ trans := &TransactionSubs{}
+ trans.Meid = subs.GetMeid()
+ t.initTransaction(&trans.Transaction)
+ xapp.Logger.Debug("CREATE %s", trans.String())
+ return trans
+}
+
+func (t *Tracker) NewXappTransaction(
+ endpoint *xapp.RmrEndpoint,
+ xid string,
+ requestId e2ap.RequestId,
+ meid *xapp.RMRMeid) *TransactionXapp {
+
+ trans := &TransactionXapp{}
+ trans.XappKey = &TransactionXappKey{requestId.Id, *endpoint, xid}
+ trans.Meid = meid
+ trans.RequestId = requestId
+ t.initTransaction(&trans.Transaction)
+ xapp.Logger.Debug("CREATE %s", trans.String())
+ return trans
+}
+
+func (t *Tracker) Track(trans *TransactionXapp) error {
+
+ if trans.GetEndpoint() == nil {
+ err := fmt.Errorf("Tracker: No valid endpoint given in %s", trans.String())