From f4305180b9f11b3d592fff5bb88f731726ed4e3b Mon Sep 17 00:00:00 2001 From: Neel Chauhan Date: Sun, 13 Oct 2024 21:37:48 -0400 Subject: [PATCH] Remove the pollInterval loop from SignalingServer.pollOffer in the standalone proxy Closes #40210. --- proxy/lib/proxy-go_test.go | 4 +-- proxy/lib/snowflake.go | 61 ++++++++++++++++---------------------- 2 files changed, 27 insertions(+), 38 deletions(-) diff --git a/proxy/lib/proxy-go_test.go b/proxy/lib/proxy-go_test.go index 9021387..422a374 100644 --- a/proxy/lib/proxy-go_test.go +++ b/proxy/lib/proxy-go_test.go @@ -364,7 +364,7 @@ func TestBrokerInteractions(t *testing.T) { b, } - sdp, _ := broker.pollOffer(sampleOffer, DefaultProxyType, "", DefaultPollInterval, nil) + sdp, _ := broker.pollOffer(sampleOffer, DefaultProxyType, "") expectedSDP, _ := strconv.Unquote(sampleSDP) So(sdp.SDP, ShouldResemble, expectedSDP) }) @@ -378,7 +378,7 @@ func TestBrokerInteractions(t *testing.T) { b, } - sdp, _ := broker.pollOffer(sampleOffer, DefaultProxyType, "", DefaultPollInterval, nil) + sdp, _ := broker.pollOffer(sampleOffer, DefaultProxyType, "") So(sdp, ShouldBeNil) }) Convey("sends answer to broker", func() { diff --git a/proxy/lib/snowflake.go b/proxy/lib/snowflake.go index 7897200..9041f60 100644 --- a/proxy/lib/snowflake.go +++ b/proxy/lib/snowflake.go @@ -234,46 +234,35 @@ func (s *SignalingServer) Post(path string, payload io.Reader) ([]byte, error) { // pollOffer communicates the proxy's capabilities with broker // and retrieves a compatible SDP offer and relay URL. -func (s *SignalingServer) pollOffer(sid string, proxyType string, acceptedRelayPattern string, pollInterval time.Duration, shutdown chan struct{}) (*webrtc.SessionDescription, string) { +func (s *SignalingServer) pollOffer(sid string, proxyType string, acceptedRelayPattern string) (*webrtc.SessionDescription, string) { brokerPath := s.url.ResolveReference(&url.URL{Path: "proxy"}) - ticker := time.NewTicker(pollInterval) - defer ticker.Stop() + numClients := int((tokens.count() / 8) * 8) // Round down to 8 + currentNATTypeLoaded := getCurrentNATType() + body, err := messages.EncodeProxyPollRequestWithRelayPrefix(sid, proxyType, currentNATTypeLoaded, numClients, acceptedRelayPattern) + if err != nil { + log.Printf("Error encoding poll message: %s", err.Error()) + return nil, "" + } - // Run the loop once before hitting the ticker - for ; true; <-ticker.C { - select { - case <-shutdown: + resp, err := s.Post(brokerPath.String(), bytes.NewBuffer(body)) + if err != nil { + log.Printf("error polling broker: %s", err.Error()) + } + + offer, _, relayURL, err := messages.DecodePollResponseWithRelayURL(resp) + if err != nil { + log.Printf("Error reading broker response: %s", err.Error()) + log.Printf("body: %s", resp) + return nil, "" + } + if offer != "" { + offer, err := util.DeserializeSessionDescription(offer) + if err != nil { + log.Printf("Error processing session description: %s", err.Error()) return nil, "" - default: - numClients := int((tokens.count() / 8) * 8) // Round down to 8 - currentNATTypeLoaded := getCurrentNATType() - body, err := messages.EncodeProxyPollRequestWithRelayPrefix(sid, proxyType, currentNATTypeLoaded, numClients, acceptedRelayPattern) - if err != nil { - log.Printf("Error encoding poll message: %s", err.Error()) - return nil, "" - } - - resp, err := s.Post(brokerPath.String(), bytes.NewBuffer(body)) - if err != nil { - log.Printf("error polling broker: %s", err.Error()) - } - - offer, _, relayURL, err := messages.DecodePollResponseWithRelayURL(resp) - if err != nil { - log.Printf("Error reading broker response: %s", err.Error()) - log.Printf("body: %s", resp) - return nil, "" - } - if offer != "" { - offer, err := util.DeserializeSessionDescription(offer) - if err != nil { - log.Printf("Error processing session description: %s", err.Error()) - return nil, "" - } - return offer, relayURL - } } + return offer, relayURL } return nil, "" } @@ -609,7 +598,7 @@ func (sf *SnowflakeProxy) makeNewPeerConnection( } func (sf *SnowflakeProxy) runSession(sid string) { - offer, relayURL := broker.pollOffer(sid, sf.ProxyType, sf.RelayDomainNamePattern, sf.PollInterval, sf.shutdown) + offer, relayURL := broker.pollOffer(sid, sf.ProxyType, sf.RelayDomainNamePattern) if offer == nil { log.Printf("bad offer from broker") tokens.ret()