Skip to content

Commit 380134f

Browse files
Copilotdharmab
andauthored
fix: synchronize secureCoalitionRadios access with atomic bool
Agent-Logs-Url: https://github.com/dharmab/skyeye/sessions/886ec486-f24f-4161-ac72-b67a3640af26 Co-authored-by: dharmab <4450708+dharmab@users.noreply.github.com>
1 parent fe18d12 commit 380134f

4 files changed

Lines changed: 45 additions & 5 deletions

File tree

pkg/simpleradio/client.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"fmt"
88
"net"
99
"sync"
10+
"sync/atomic"
1011
"time"
1112

1213
"github.com/dharmab/skyeye/pkg/simpleradio/types"
@@ -49,7 +50,7 @@ type Client struct {
4950
clientsLock sync.RWMutex
5051

5152
// secureCoalitionRadios indicates if the client should only receive transmissions from the same coalition.
52-
secureCoalitionRadios bool
53+
secureCoalitionRadios atomic.Bool
5354

5455
// rxChan is a channel where received transmission are published. A read-only version is available publicly.
5556
rxChan chan Transmission

pkg/simpleradio/message.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,13 @@ func (c *Client) updateServerSettings(message types.Message) {
7878
log.Debug().Any("serverSettings", message.ServerSettings).Msg("received server settings")
7979
if enabled, ok := message.ServerSettings[string(types.CoalitionAudioSecurity)]; ok {
8080
if strings.ToLower(enabled) == "true" {
81-
if !c.secureCoalitionRadios {
81+
if !c.secureCoalitionRadios.Load() {
8282
log.Info().Msg("enabling secure coalition radios")
8383
}
84-
c.secureCoalitionRadios = true
84+
c.secureCoalitionRadios.Store(true)
8585
} else {
8686
log.Info().Msg("disabling secure coalition radios")
87-
c.secureCoalitionRadios = false
87+
c.secureCoalitionRadios.Store(false)
8888
}
8989
}
9090
if enabled, ok := message.ServerSettings[string(types.ExternalAWACSMode)]; ok {

pkg/simpleradio/message_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package simpleradio
2+
3+
import (
4+
"testing"
5+
6+
"github.com/dharmab/skyeye/pkg/simpleradio/types"
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func TestUpdateServerSettingsSecureCoalitionRadios(t *testing.T) {
11+
t.Parallel()
12+
13+
t.Run("enabled", func(t *testing.T) {
14+
t.Parallel()
15+
client := &Client{}
16+
17+
client.updateServerSettings(types.Message{
18+
ServerSettings: map[string]string{
19+
string(types.CoalitionAudioSecurity): "TrUe",
20+
},
21+
})
22+
23+
assert.True(t, client.secureCoalitionRadios.Load())
24+
})
25+
26+
t.Run("disabled", func(t *testing.T) {
27+
t.Parallel()
28+
client := &Client{}
29+
client.secureCoalitionRadios.Store(true)
30+
31+
client.updateServerSettings(types.Message{
32+
ServerSettings: map[string]string{
33+
string(types.CoalitionAudioSecurity): "false",
34+
},
35+
})
36+
37+
assert.False(t, client.secureCoalitionRadios.Load())
38+
})
39+
}

pkg/simpleradio/receive.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ func (c *Client) receiveVoice(ctx context.Context, in <-chan []byte, out chan<-
104104

105105
logger := log.With().Str("GUID", string(packet.OriginGUID)).Logger()
106106

107-
if c.secureCoalitionRadios {
107+
if c.secureCoalitionRadios.Load() {
108108
client, ok := c.clients[types.GUID(packet.OriginGUID)]
109109
if !ok {
110110
logger.Warn().Msg("ignoring voice packet from unknown client")

0 commit comments

Comments
 (0)