RICPLT-2985 Route update via registry/subscription entry
Change-Id: I5aa4b71290e5405b9bf995b8528e49e900375cbc
Signed-off-by: Juha Hyttinen <juha.hyttinen@nokia.com>
diff --git a/pkg/control/transaction.go b/pkg/control/transaction.go
new file mode 100644
index 0000000..f686b44
--- /dev/null
+++ b/pkg/control/transaction.go
@@ -0,0 +1,92 @@
+/*
+==================================================================================
+ Copyright (c) 2019 AT&T Intellectual Property.
+ Copyright (c) 2019 Nokia
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================================
+*/
+
+package control
+
+import (
+ "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
+ "strconv"
+ "sync"
+)
+
+//-----------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------
+type TransactionXappKey struct {
+ RmrEndpoint
+ Xid string // xapp xid in req
+}
+
+func (key *TransactionXappKey) String() string {
+ return key.RmrEndpoint.String() + "/" + key.Xid
+}
+
+//-----------------------------------------------------------------------------
+//
+//-----------------------------------------------------------------------------
+type Transaction struct {
+ mutex sync.Mutex
+ tracker *Tracker // tracker instance
+ Subs *Subscription
+ RmrEndpoint RmrEndpoint
+ Xid string // xapp xid in req
+ OrigParams *xapp.RMRParams // request orginal params
+ RespReceived bool
+ ForwardRespToXapp bool
+}
+
+func (t *Transaction) String() string {
+ t.mutex.Lock()
+ defer t.mutex.Unlock()
+ var subId string = "?"
+ if t.Subs != nil {
+ subId = strconv.FormatUint(uint64(t.Subs.Seq), 10)
+ }
+ return subId + "/" + t.RmrEndpoint.String() + "/" + t.Xid
+}
+
+func (t *Transaction) CheckResponseReceived() bool {
+ t.mutex.Lock()
+ defer t.mutex.Unlock()
+ if t.RespReceived == false {
+ t.RespReceived = true
+ return false
+ }
+ return true
+}
+
+func (t *Transaction) RetryTransaction() {
+ t.mutex.Lock()
+ defer t.mutex.Unlock()
+ t.RespReceived = false
+}
+
+func (t *Transaction) Release() {
+ t.mutex.Lock()
+ defer t.mutex.Unlock()
+ if t.Subs != nil {
+ t.Subs.UnSetTransaction(t)
+ }
+ if t.tracker != nil {
+ xappkey := TransactionXappKey{t.RmrEndpoint, t.Xid}
+ t.tracker.UnTrackTransaction(xappkey)
+ }
+ t.Subs = nil
+ t.tracker = nil
+}