|
@@ -7,6 +7,7 @@ import (
|
|
|
mqtt "github.com/eclipse/paho.mqtt.golang"
|
|
|
"github.com/google/uuid"
|
|
|
"github.com/gravitl/netmaker/database"
|
|
|
+ "github.com/gravitl/netmaker/logger"
|
|
|
"github.com/gravitl/netmaker/logic"
|
|
|
"github.com/gravitl/netmaker/logic/hostactions"
|
|
|
"github.com/gravitl/netmaker/models"
|
|
@@ -193,6 +194,8 @@ func UpdateHost(client mqtt.Client, msg mqtt.Message) {
|
|
|
return
|
|
|
}
|
|
|
sendPeerUpdate = true
|
|
|
+ case models.SignalHost:
|
|
|
+ signalPeer(hostUpdate.Signal)
|
|
|
|
|
|
}
|
|
|
|
|
@@ -204,6 +207,29 @@ func UpdateHost(client mqtt.Client, msg mqtt.Message) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+func signalPeer(signal models.Signal) {
|
|
|
+
|
|
|
+ if signal.ToHostPubKey == "" {
|
|
|
+ msg := "insufficient data to signal peer"
|
|
|
+ logger.Log(0, msg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ signal.IsPro = servercfg.IsPro
|
|
|
+ peerHost, err := logic.GetHost(signal.ToHostID)
|
|
|
+ if err != nil {
|
|
|
+ slog.Error("failed to signal, peer not found", "error", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ err = HostUpdate(&models.HostUpdate{
|
|
|
+ Action: models.SignalHost,
|
|
|
+ Host: *peerHost,
|
|
|
+ Signal: signal,
|
|
|
+ })
|
|
|
+ if err != nil {
|
|
|
+ slog.Error("failed to publish signal to peer", "error", err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
// ClientPeerUpdate message handler -- handles updating peers after signal from client nodes
|
|
|
func ClientPeerUpdate(client mqtt.Client, msg mqtt.Message) {
|
|
|
id, err := GetID(msg.Topic())
|