diff --git a/common.go b/common.go index f1c4efd..7bb14d9 100644 --- a/common.go +++ b/common.go @@ -311,6 +311,18 @@ func keepSendingUDPHolePunch(endpoint string, olmID string, sourcePort uint16) { } } +func sendRelay(olm *websocket.Client) error { + err := olm.SendMessage("olm/wg/relay", map[string]interface{}{ + "doIt": "now", + }) + if err != nil { + logger.Error("Failed to send registration message: %v", err) + return err + } + logger.Info("Sent relay message") + return nil +} + func sendRegistration(olm *websocket.Client, publicKey string) error { err := olm.SendMessage("olm/wg/register", map[string]interface{}{ "publicKey": publicKey, diff --git a/main.go b/main.go index 930025c..251991f 100644 --- a/main.go +++ b/main.go @@ -254,10 +254,18 @@ func main() { } }) + connectTimes := 0 // Register handlers for different message types olm.RegisterHandler("olm/wg/connect", func(msg websocket.WSMessage) { logger.Info("Received message: %v", msg.Data) + if connectTimes > 0 { + logger.Info("Already connected. Ignoring new connection request.") + return + } + + connectTimes++ + close(stopRegister) // if there is an existing tunnel then close it @@ -422,6 +430,8 @@ persistent_keepalive_interval=1`, fixKey(privateKey.String()), fixKey(wgData.Pub } logger.Info("Adjusted to point to relay!") + + sendRelay(olm) }) logger.Info("WireGuard device created.")