From f061596e5b12552feaedb4b7079111cd6734bc0e Mon Sep 17 00:00:00 2001 From: Owen Date: Fri, 16 Jan 2026 12:16:51 -0800 Subject: [PATCH] Include fingerprint and posture info in ping --- olm/olm.go | 8 ++++++++ websocket/client.go | 31 +++++++++++++++++++++++-------- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/olm/olm.go b/olm/olm.go index e1d9a7f..bc06602 100644 --- a/olm/olm.go +++ b/olm/olm.go @@ -315,6 +315,14 @@ func (o *Olm) StartTunnel(config TunnelConfig) { config.Endpoint, 30, // 30 seconds config.PingTimeoutDuration, + websocket.WithPingDataProvider(func() map[string]any { + o.metaMu.Lock() + defer o.metaMu.Unlock() + return map[string]any{ + "fingerprint": o.fingerprint, + "postures": o.postures, + } + }), ) if err != nil { logger.Error("Failed to create olm: %v", err) diff --git a/websocket/client.go b/websocket/client.go index 024d915..d0ac73b 100644 --- a/websocket/client.go +++ b/websocket/client.go @@ -96,9 +96,10 @@ type Client struct { exitNodes []ExitNode // Cached exit nodes from token response tokenMux sync.RWMutex // Protects token and exitNodes forceNewToken bool // Flag to force fetching a new token on next connection - processingMessage bool // Flag to track if a message is currently being processed - processingMux sync.RWMutex // Protects processingMessage - processingWg sync.WaitGroup // WaitGroup to wait for message processing to complete + processingMessage bool // Flag to track if a message is currently being processed + processingMux sync.RWMutex // Protects processingMessage + processingWg sync.WaitGroup // WaitGroup to wait for message processing to complete + getPingData func() map[string]any // Callback to get additional ping data } type ClientOption func(*Client) @@ -134,6 +135,13 @@ func WithTLSConfig(config TLSConfig) ClientOption { } } +// WithPingDataProvider sets a callback to provide additional data for ping messages +func WithPingDataProvider(fn func() map[string]any) ClientOption { + return func(c *Client) { + c.getPingData = fn + } +} + func (c *Client) OnConnect(callback func() error) { c.onConnect = callback } @@ -670,12 +678,19 @@ func (c *Client) pingMonitor() { configVersion := c.configVersion c.configVersionMux.RUnlock() + pingData := map[string]any{ + "timestamp": time.Now().Unix(), + "userToken": c.config.UserToken, + } + if c.getPingData != nil { + for k, v := range c.getPingData() { + pingData[k] = v + } + } + pingMsg := WSMessage{ - Type: "olm/ping", - Data: map[string]any{ - "timestamp": time.Now().Unix(), - "userToken": c.config.UserToken, - }, + Type: "olm/ping", + Data: pingData, ConfigVersion: configVersion, }