Include fingerprint and posture info in ping

Former-commit-id: f061596e5b
This commit is contained in:
Owen
2026-01-16 12:16:51 -08:00
parent eafd816159
commit 71044165d0
2 changed files with 31 additions and 8 deletions

View File

@@ -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)

View File

@@ -99,6 +99,7 @@ type Client struct {
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()
pingMsg := WSMessage{
Type: "olm/ping",
Data: map[string]any{
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: pingData,
ConfigVersion: configVersion,
}