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
49 Mtype int //Encoded message type to be send
50 Payload *e2ap.PackedData //Encoded message to be send
51 EventChan chan interface{}
54 func (t *Transaction) String() string {
55 return "trans(" + strconv.FormatUint(uint64(t.Seq), 10) + "/" + t.Meid.RanName + ")"
58 func (t *Transaction) SendEvent(event interface{}, waittime time.Duration) (bool, bool) {
61 case t.EventChan <- event:
63 case <-time.After(waittime):
72 func (t *Transaction) WaitEvent(waittime time.Duration) (interface{}, bool) {
75 case event := <-t.EventChan:
77 case <-time.After(waittime):
81 event := <-t.EventChan
85 func (t *Transaction) GetMtype() int {
87 defer t.mutex.Unlock()
91 func (t *Transaction) GetMeid() *xapp.RMRMeid {
93 defer t.mutex.Unlock()
100 func (t *Transaction) GetPayload() *e2ap.PackedData {
102 defer t.mutex.Unlock()
106 //-----------------------------------------------------------------------------
108 //-----------------------------------------------------------------------------
109 type TransactionSubs struct {
113 func (t *TransactionSubs) String() string {
114 return "transsubs(" + t.Transaction.String() + ")"
117 func (t *TransactionSubs) Release() {
119 xapp.Logger.Debug("RELEASE %s", t.String())
124 //-----------------------------------------------------------------------------
126 //-----------------------------------------------------------------------------
127 type TransactionXappKey struct {
129 Xid string // xapp xid in req
132 func (key *TransactionXappKey) String() string {
133 return "transkey(" + key.RmrEndpoint.String() + "/" + key.Xid + ")"
136 //-----------------------------------------------------------------------------
138 //-----------------------------------------------------------------------------
139 type TransactionXapp struct {
141 XappKey *TransactionXappKey
145 func (t *TransactionXapp) String() string {
146 var transkey string = "transkey(N/A)"
147 if t.XappKey != nil {
148 transkey = t.XappKey.String()
150 return "transxapp(" + t.Transaction.String() + "/" + transkey + "/" + strconv.FormatUint(uint64(t.SubId), 10) + ")"
153 func (t *TransactionXapp) GetEndpoint() *RmrEndpoint {
155 defer t.mutex.Unlock()
156 if t.XappKey != nil {
157 return &t.XappKey.RmrEndpoint
162 func (t *TransactionXapp) GetXid() string {
164 defer t.mutex.Unlock()
165 if t.XappKey != nil {
171 func (t *TransactionXapp) GetSrc() string {
173 defer t.mutex.Unlock()
174 if t.XappKey != nil {
175 return t.XappKey.RmrEndpoint.String()
180 func (t *TransactionXapp) GetSubId() uint32 {
182 defer t.mutex.Unlock()
186 func (t *TransactionXapp) Release() {
188 xapp.Logger.Debug("RELEASE %s", t.String())
194 if tracker != nil && xappkey != nil {
195 tracker.UnTrackTransaction(*xappkey)