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/e2ap/pkg/packer"
25 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
30 //-----------------------------------------------------------------------------
32 //-----------------------------------------------------------------------------
33 type TransactionXappKey struct {
35 Xid string // xapp xid in req
38 func (key *TransactionXappKey) String() string {
39 return key.RmrEndpoint.String() + "/" + key.Xid
42 //-----------------------------------------------------------------------------
44 //-----------------------------------------------------------------------------
45 type Transaction struct {
47 tracker *Tracker //tracker instance
48 Subs *Subscription //related subscription
49 RmrEndpoint RmrEndpoint //xapp endpoint
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 SubFailMsg *e2ap.E2APSubscriptionFailure //SubFail TODO: maybe own transactions per type
55 SubDelReqMsg *e2ap.E2APSubscriptionDeleteRequest //SubDelReq TODO: maybe own transactions per type
56 SubDelRespMsg *e2ap.E2APSubscriptionDeleteResponse //SubDelResp TODO: maybe own transactions per type
57 SubDelFailMsg *e2ap.E2APSubscriptionDeleteFailure //SubDelFail TODO: maybe own transactions per type
58 Mtype int //Encoded message type to be send
59 Payload *packer.PackedData //Encoded message to be send
61 ForwardRespToXapp bool
64 func (t *Transaction) String() string {
66 defer t.mutex.Unlock()
67 var subId string = "?"
69 subId = strconv.FormatUint(uint64(t.Subs.Seq), 10)
71 return subId + "/" + t.RmrEndpoint.String() + "/" + t.Xid
74 func (t *Transaction) GetXid() string {
76 defer t.mutex.Unlock()
80 func (t *Transaction) GetMtype() int {
82 defer t.mutex.Unlock()
86 func (t *Transaction) GetMeid() *xapp.RMRMeid {
88 defer t.mutex.Unlock()
95 func (t *Transaction) GetSrc() string {
97 defer t.mutex.Unlock()
98 return t.RmrEndpoint.String()
101 func (t *Transaction) CheckResponseReceived() bool {
103 defer t.mutex.Unlock()
104 if t.RespReceived == false {
105 t.RespReceived = true
111 func (t *Transaction) RetryTransaction() {
113 defer t.mutex.Unlock()
114 t.RespReceived = false
117 func (t *Transaction) Release() {
118 xapp.Logger.Info("Transaction: Releasing %s", t)
120 defer t.mutex.Unlock()
122 t.Subs.UnSetTransaction(t)
124 if t.tracker != nil {
125 xappkey := TransactionXappKey{t.RmrEndpoint, t.Xid}
126 t.tracker.UnTrackTransaction(xappkey)