diff --git a/main_windows.go b/main_windows.go index 6617a14..c4134e8 100644 --- a/main_windows.go +++ b/main_windows.go @@ -176,6 +176,7 @@ func main() { // Create TUN device and network stack var dev *device.Device var wgData WgData + var holePunchData HolePunchData var uapi net.Listener var tdev tun.Device @@ -320,16 +321,36 @@ persistent_keepalive_interval=1`, fixKey(privateKey.String()), fixKey(wgData.Pub logger.Info("WireGuard device created.") }) + olm.RegisterHandler("olm/wg/holepunch", func(msg websocket.WSMessage) { + logger.Info("Received message: %v", msg.Data) + + jsonData, err := json.Marshal(msg.Data) + if err != nil { + logger.Info("Error marshaling data: %v", err) + return + } + + if err := json.Unmarshal(jsonData, &holePunchData); err != nil { + logger.Info("Error unmarshaling target data: %v", err) + return + } + + gerbilServerPubKey = holePunchData.ServerPubKey + }) + olm.OnConnect(func() error { publicKey := privateKey.PublicKey() logger.Debug("Public key: %s", publicKey) + go keepSendingRegistration(olm, publicKey.String()) + logger.Info("Sent registration message") return nil }) - // start sending UDP hole punch - go keepSendingUDPHolePunch(endpoint, id, sourcePort) + olm.OnTokenUpdate(func(token string) { + olmToken = token + }) // Connect to the WebSocket server if err := olm.Connect(); err != nil { @@ -337,6 +358,8 @@ persistent_keepalive_interval=1`, fixKey(privateKey.String()), fixKey(wgData.Pub } defer olm.Close() + go keepSendingUDPHolePunch(endpoint, id, sourcePort) + // Wait for interrupt signal sigCh := make(chan os.Signal, 1) signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM, windows.SIGTERM)