2 ==================================================================================
3 Copyright (c) 2019 AT&T Intellectual Property.
4 Copyright (c) 2019 Nokia
6 Licensed under the Apache License, Version 2.0 (the "License");
7 you may not use this file except in compliance with the License.
8 You may obtain a copy of the License at
10 http://www.apache.org/licenses/LICENSE-2.0
12 Unless required by applicable law or agreed to in writing, software
13 distributed under the License is distributed on an "AS IS" BASIS,
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 See the License for the specific language governing permissions and
16 limitations under the License.
17 ==================================================================================
23 "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/e2ap"
24 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
30 //-----------------------------------------------------------------------------
32 //-----------------------------------------------------------------------------
33 type TransactionIf interface {
36 SendEvent(interface{}, time.Duration) (bool, bool)
37 WaitEvent(time.Duration) (interface{}, bool)
40 //-----------------------------------------------------------------------------
42 //-----------------------------------------------------------------------------
44 type Transaction struct {
46 Seq uint64 //transaction sequence
47 tracker *Tracker //tracker instance
48 Meid *xapp.RMRMeid //meid transaction related
50 Mtype int //Encoded message type to be send
51 Payload *e2ap.PackedData //Encoded message to be send
52 EventChan chan interface{}
55 func (t *Transaction) String() string {
56 return "trans(" + strconv.FormatUint(uint64(t.Seq), 10) + "/" + t.Meid.RanName + "/" + t.ReqId.String() + ")"
59 func (t *Transaction) SendEvent(event interface{}, waittime time.Duration) (bool, bool) {
62 case t.EventChan <- event:
64 case <-time.After(waittime):
73 func (t *Transaction) WaitEvent(waittime time.Duration) (interface{}, bool) {
76 case event := <-t.EventChan:
78 case <-time.After(waittime):
82 event := <-t.EventChan
86 func (t *Transaction) GetReqId() *RequestId {
88 defer t.mutex.Unlock()
92 func (t *Transaction) GetMtype() int {
94 defer t.mutex.Unlock()
98 func (t *Transaction) GetMeid() *xapp.RMRMeid {
100 defer t.mutex.Unlock()
107 func (t *Transaction) GetPayload() *e2ap.PackedData {
109 defer t.mutex.Unlock()
113 //-----------------------------------------------------------------------------
115 //-----------------------------------------------------------------------------
116 type TransactionSubs struct {
120 func (t *TransactionSubs) String() string {
121 return "transsubs(" + t.Transaction.String() + ")"
124 func (t *TransactionSubs) Release() {
126 xapp.Logger.Debug("RELEASE %s", t.String())
131 //-----------------------------------------------------------------------------
133 //-----------------------------------------------------------------------------
134 type TransactionXappKey struct {
136 Xid string // xapp xid in req
139 func (key *TransactionXappKey) String() string {
140 return "transkey(" + key.RmrEndpoint.String() + "/" + key.Xid + ")"
143 //-----------------------------------------------------------------------------
145 //-----------------------------------------------------------------------------
146 type TransactionXapp struct {
148 XappKey *TransactionXappKey //
151 func (t *TransactionXapp) String() string {
152 var transkey string = "transkey(N/A)"
153 if t.XappKey != nil {
154 transkey = t.XappKey.String()
156 return "transxapp(" + t.Transaction.String() + "/" + transkey + ")"
159 func (t *TransactionXapp) GetEndpoint() *RmrEndpoint {
161 defer t.mutex.Unlock()
162 if t.XappKey != nil {
163 return &t.XappKey.RmrEndpoint
168 func (t *TransactionXapp) GetXid() string {
170 defer t.mutex.Unlock()
171 if t.XappKey != nil {
177 func (t *TransactionXapp) GetSrc() string {
179 defer t.mutex.Unlock()
180 if t.XappKey != nil {
181 return t.XappKey.RmrEndpoint.String()
186 func (t *TransactionXapp) Release() {
188 xapp.Logger.Debug("RELEASE %s", t.String())
194 if tracker != nil && xappkey != nil {
195 tracker.UnTrackTransaction(*xappkey)