direct communication channel now setup between agent and converge server

This commit is contained in:
Erik Brakkee 2024-07-24 20:23:33 +02:00
parent 20ce37a1cb
commit 5bd3795534

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"github.com/hashicorp/yamux" "github.com/hashicorp/yamux"
"io" "io"
"log"
"net" "net"
) )
@ -20,25 +21,49 @@ const (
) )
func NewCommChannel(role Role, wsConn io.ReadWriteCloser) (CommChannel, error) { func NewCommChannel(role Role, wsConn io.ReadWriteCloser) (CommChannel, error) {
var commChannel CommChannel
switch role { switch role {
case Agent: case Agent:
listener, err := yamux.Server(wsConn, nil) listener, err := yamux.Server(wsConn, nil)
if err != nil { if err != nil {
return CommChannel{}, err return CommChannel{}, err
} }
return CommChannel{ commChannel = CommChannel{
Peer: nil, Peer: nil,
Session: listener, Session: listener,
}, nil }
case ConvergeServer: case ConvergeServer:
clientSession, err := yamux.Client(wsConn, nil) clientSession, err := yamux.Client(wsConn, nil)
if err != nil { if err != nil {
return CommChannel{}, err return CommChannel{}, err
} }
return CommChannel{ commChannel = CommChannel{
Peer: nil, Peer: nil,
Session: clientSession, 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
} }