From 0b0afeacf8a2ed8115dba6e4d1c17fbffb900ed3 Mon Sep 17 00:00:00 2001
From: Malte Bauch <malte.bauch@stud.h-da.de>
Date: Thu, 28 Sep 2023 15:28:51 +0200
Subject: [PATCH] Add AssignForwardingRoute method to KMS

---
 internal/kms/kms.go | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/internal/kms/kms.go b/internal/kms/kms.go
index 2cb9be31..1d49bae1 100644
--- a/internal/kms/kms.go
+++ b/internal/kms/kms.go
@@ -220,6 +220,37 @@ func (kms *EKMS) AddPeer(kmsPeerSocket string, servingQLE *QuantumElement) (*kms
 	return peer, nil
 }
 
+func (kms *EKMS) AssignForwardingRoute(pId, pHop, nHop string) error {
+	pathId, err := uuid.Parse(pId)
+	if err != nil {
+		return fmt.Errorf("The given path id %s is no uuid; err = ", pathId, err)
+	}
+
+	var previousHop *kmsPeer
+	var nextHop *kmsPeer
+	var ok bool
+	if pHop != "" {
+		previousHop, ok = kms.KmsPeers[pHop]
+		if !ok {
+			return fmt.Errorf("No peer found for %s", pHop)
+		}
+	}
+	if nHop != "" {
+		nextHop, ok = kms.KmsPeers[nHop]
+		if !ok {
+			return fmt.Errorf("No peer found for %s", nHop)
+		}
+	}
+
+	// set the route within routing table
+	kms.routingTable[pathId] = &Route{
+		Previous: previousHop,
+		Next:     nextHop,
+	}
+
+	return nil
+}
+
 // TODO/XXX error handling
 func (kms *EKMS) RemovePeer(kmsPeerSocket string) {
 	if _, there := kms.KmsPeers[kmsPeerSocket]; there {
-- 
GitLab