0.7.1 Version of submgr

Introducing Routing Manager integration from 0.6.0
Transaction handling for Subscription Requests
DeleteRequest Handling

Change-Id: I029ee51c16e00feb90f61277135b06e784657002
Signed-off-by: kalnagy <kalman.nagy@nokia.com>
diff --git a/pkg/control/tracker.go b/pkg/control/tracker.go
new file mode 100644
index 0000000..bd062da
--- /dev/null
+++ b/pkg/control/tracker.go
@@ -0,0 +1,73 @@
+/*
+==================================================================================
+  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 (
+	"fmt"
+//	"gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
+)
+
+/*
+Implements a record of ongoing transactions and helper functions to CRUD the records.
+*/
+type Tracker struct {
+	transaction_table map[Transaction_key]*Transaction
+}
+
+/*
+Checks if a tranascation with similar type has been ongoing. If not then creates one.
+Returns error if there is similar transatcion ongoing.
+*/
+func (t *Tracker) Track_transaction(key Transaction_key, xact *Transaction) error{
+	if _, ok := t.transaction_table[key]; ok {
+		// TODO: Implement merge related check here. If the key is same but the value is different.
+		err := fmt.Errorf("Transaction tracker: Similar transaction with sub id %d and type %s is ongoing", key.SubID, key.trans_type )
+		return err
+	}
+	t.transaction_table[key] = xact
+	return nil
+}
+
+/*
+Retreives the transaction table entry for the given request.
+Returns error in case the transaction cannot be found.
+*/
+func (t *Tracker) Retrive_transaction(subID uint16, act Action) (*Transaction, error){
+	key := Transaction_key{subID, act}
+	if xact, ok := t.transaction_table[key]; ok {
+		return xact, nil
+	}
+	err := fmt.Errorf("Tranaction record for Subscription ID %d and action %s does not exist", subID, act)
+	return nil, err
+}
+
+/*
+Deletes the transaction table entry for the given request and returns the deleted xapp's address and port for reference.
+Returns error in case the transaction cannot be found.
+*/
+func (t *Tracker) complete_transaction(subID uint16, act Action) (*string, *uint16, error){
+	key := Transaction_key{subID, act}
+	if xact, ok := t.transaction_table[key]; ok {
+		delete(t.transaction_table, key)
+		return &(xact.Xapp_instance_address), &(xact.Xapp_port), nil
+	}
+	err := fmt.Errorf("Tranaction record for Subscription ID %d and action %s does not exist", subID, act)
+	return nil, nil, err
+}