From 5bd3795534a3e6ac1bc51138da43d6bda822deb4 Mon Sep 17 00:00:00 2001 From: Erik Brakkee Date: Wed, 24 Jul 2024 20:23:33 +0200 Subject: [PATCH] direct communication channel now setup between agent and converge server --- cmd/comms/agentserver.go | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/cmd/comms/agentserver.go b/cmd/comms/agentserver.go index f3401d2..726eb79 100644 --- a/cmd/comms/agentserver.go +++ b/cmd/comms/agentserver.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/hashicorp/yamux" "io" + "log" "net" ) @@ -20,25 +21,49 @@ const ( ) func NewCommChannel(role Role, wsConn io.ReadWriteCloser) (CommChannel, error) { + var commChannel CommChannel switch role { case Agent: listener, err := yamux.Server(wsConn, nil) if err != nil { return CommChannel{}, err } - return CommChannel{ + commChannel = CommChannel{ Peer: nil, Session: listener, - }, nil + } case ConvergeServer: clientSession, err := yamux.Client(wsConn, nil) if err != nil { return CommChannel{}, err } - return CommChannel{ + commChannel = CommChannel{ Peer: nil, Session: clientSession, - }, nil + } + default: + panic(fmt.Errorf("Undefined role %d", role)) } - return CommChannel{}, fmt.Errorf("Undefined role %d", role) + + // communication from Agent to ConvergeServer + + switch role { + case Agent: + conn, err := commChannel.Session.OpenStream() + commChannel.Peer = conn + if err != nil { + return CommChannel{}, err + } + case ConvergeServer: + conn, err := commChannel.Session.Accept() + commChannel.Peer = conn + if err != nil { + return CommChannel{}, err + } + default: + panic(fmt.Errorf("Undefined role %d", role)) + } + + log.Println("Communication channel between agent and converge server established") + return commChannel, nil }