-func (t *Tracker) TrackTransaction(endpoint RmrEndpoint, params *RMRParams, respReceived bool, forwardRespToXapp bool) (*Transaction, error) {
-
- trans := &Transaction{
- tracker: nil,
- Subs: nil,
- RmrEndpoint: endpoint,
- Mtype: params.Mtype,
- Xid: params.Xid,
- OrigParams: params,
- RespReceived: respReceived,
- ForwardRespToXapp: forwardRespToXapp,
+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())
+ return err