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"
29 //-----------------------------------------------------------------------------
31 //-----------------------------------------------------------------------------
32 type TransactionXappKey struct {
34 Xid string // xapp xid in req
37 func (key *TransactionXappKey) String() string {
38 return key.RmrEndpoint.String() + "/" + key.Xid
41 //-----------------------------------------------------------------------------
43 //-----------------------------------------------------------------------------
44 type Transaction struct {
46 tracker *Tracker //tracker instance
47 Subs *Subscription //related subscription
48 RmrEndpoint RmrEndpoint //xapp endpoint
49 Mtype int //type of initiating message
50 Xid string //xapp xid in req
51 Meid *xapp.RMRMeid //meid transaction related
52 SubReqMsg *e2ap.E2APSubscriptionRequest //SubReq TODO: maybe own transactions per type
53 SubRespMsg *e2ap.E2APSubscriptionResponse //SubResp TODO: maybe own transactions per type
54 SubDelReqMsg *e2ap.E2APSubscriptionDeleteRequest //SubDelReq TODO: maybe own transactions per type
55 Payload []byte //packed message to optimize retransmissions
56 PayloadLen int //packed message len to optimize retransmissions
58 ForwardRespToXapp bool
61 func (t *Transaction) String() string {
63 defer t.mutex.Unlock()
64 var subId string = "?"
66 subId = strconv.FormatUint(uint64(t.Subs.Seq), 10)
68 return subId + "/" + t.RmrEndpoint.String() + "/" + t.Xid
71 func (t *Transaction) GetXid() string {
73 defer t.mutex.Unlock()
77 func (t *Transaction) GetMtype() int {
79 defer t.mutex.Unlock()
83 func (t *Transaction) GetMeid() *xapp.RMRMeid {
85 defer t.mutex.Unlock()
92 func (t *Transaction) GetSrc() string {
94 defer t.mutex.Unlock()
95 return t.RmrEndpoint.String()
98 func (t *Transaction) CheckResponseReceived() bool {
100 defer t.mutex.Unlock()
101 if t.RespReceived == false {
102 t.RespReceived = true
108 func (t *Transaction) RetryTransaction() {
110 defer t.mutex.Unlock()
111 t.RespReceived = false
114 func (t *Transaction) Release() {
116 defer t.mutex.Unlock()
118 t.Subs.UnSetTransaction(t)
120 if t.tracker != nil {
121 xappkey := TransactionXappKey{t.RmrEndpoint, t.Xid}
122 t.tracker.UnTrackTransaction(xappkey)