From 5c23fcf14ab7342be57244731b80937c0dad27f3 Mon Sep 17 00:00:00 2001 From: Cecylia Bocovich Date: Tue, 18 Oct 2022 15:43:30 -0400 Subject: [PATCH] Add timeout for webRTCConn --- proxy/lib/webrtcconn.go | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/proxy/lib/webrtcconn.go b/proxy/lib/webrtcconn.go index 0a851df..c243449 100644 --- a/proxy/lib/webrtcconn.go +++ b/proxy/lib/webrtcconn.go @@ -32,20 +32,41 @@ type webRTCConn struct { bytesLogger bytesLogger eventLogger event.SnowflakeEventReceiver + + inactivityTimeout time.Duration + activity chan struct{} } -func newWebRTCConn(pc *webrtc.PeerConnection, dc *webrtc.DataChannel, pr *io.PipeReader, eventLogger event.SnowflakeEventReceiver) (*webRTCConn) { +func newWebRTCConn(pc *webrtc.PeerConnection, dc *webrtc.DataChannel, pr *io.PipeReader, eventLogger event.SnowflakeEventReceiver) *webRTCConn { conn := &webRTCConn{pc: pc, dc: dc, pr: pr, eventLogger: eventLogger} conn.bytesLogger = newBytesSyncLogger() + conn.activity = make(chan struct{}, 100) + conn.inactivityTimeout = 30 * time.Second + go conn.timeoutLoop() return conn } +func (c *webRTCConn) timeoutLoop() { + for { + select { + case <-time.After(c.inactivityTimeout): + c.Close() + log.Println("Closed connection due to inactivity") + return + case <-c.activity: + continue + } + } + +} + func (c *webRTCConn) Read(b []byte) (int, error) { return c.pr.Read(b) } func (c *webRTCConn) Write(b []byte) (int, error) { c.bytesLogger.AddInbound(int64(len(b))) + c.activity <- struct{}{} c.lock.Lock() defer c.lock.Unlock() if c.dc != nil {