From ab2a8a7493245ed9db3d13e59ec21a8721a9dbf7 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Mon, 15 Mar 2021 09:58:52 -0700 Subject: [PATCH] derp: return keep-alive message up to callers To be used by health checking, which wants to see activity, even if idle. Signed-off-by: Brad Fitzpatrick --- derp/derp_client.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/derp/derp_client.go b/derp/derp_client.go index 11979d93f..58205a361 100644 --- a/derp/derp_client.go +++ b/derp/derp_client.go @@ -351,6 +351,13 @@ func (ServerInfoMessage) msg() {} func (PingMessage) msg() {} +// KeepAliveMessage is a one-way empty message from server to client, just to +// keep the connection alive. It's like a PingMessage, but doesn't solicit +// a reply from the client. +type KeepAliveMessage struct{} + +func (KeepAliveMessage) msg() {} + // Recv reads a message from the DERP server. // // The returned message may alias memory owned by the Client; it @@ -431,7 +438,7 @@ func (c *Client) recvTimeout(timeout time.Duration) (m ReceivedMessage, err erro case frameKeepAlive: // A one-way keep-alive message that doesn't require an acknowledgement. // This predated framePing/framePong. - continue + return KeepAliveMessage{}, nil case framePeerGone: if n < keyLen { c.logf("[unexpected] dropping short peerGone frame from DERP server")