@@ -23,23 +23,28 @@ import (
23
23
"tailscale.com/tailcfg"
24
24
"tailscale.com/types/key"
25
25
26
+ "github.com/coder/pretty"
26
27
"github.com/coder/wush/cliui"
27
28
)
28
29
29
- func NewReceiveOverlay (logger * slog.Logger , dm * tailcfg.DERPMap ) * Receive {
30
+ type Logf func (format string , args ... any )
31
+
32
+ func NewReceiveOverlay (logger * slog.Logger , hlog Logf , dm * tailcfg.DERPMap ) * Receive {
30
33
return & Receive {
31
- Logger : logger ,
32
- DerpMap : dm ,
33
- SelfPriv : key .NewNode (),
34
- PeerPriv : key .NewNode (),
35
- in : make (chan * tailcfg.Node , 8 ),
36
- out : make (chan * tailcfg.Node , 8 ),
34
+ Logger : logger ,
35
+ HumanLogf : hlog ,
36
+ DerpMap : dm ,
37
+ SelfPriv : key .NewNode (),
38
+ PeerPriv : key .NewNode (),
39
+ in : make (chan * tailcfg.Node , 8 ),
40
+ out : make (chan * tailcfg.Node , 8 ),
37
41
}
38
42
}
39
43
40
44
type Receive struct {
41
- Logger * slog.Logger
42
- DerpMap * tailcfg.DERPMap
45
+ Logger * slog.Logger
46
+ HumanLogf Logf
47
+ DerpMap * tailcfg.DERPMap
43
48
// SelfPriv is the private key that peers will encrypt overlay messages to.
44
49
// The public key of this is sent in the auth key.
45
50
SelfPriv key.NodePrivate
@@ -83,10 +88,10 @@ func (r *Receive) PickDERPHome(ctx context.Context) error {
83
88
}
84
89
85
90
if report .PreferredDERP == 0 {
86
- fmt . Println ("Failed to determine overlay DERP region, defaulting to" , cliui .Code ("NYC" ), "." )
91
+ r . HumanLogf ("Failed to determine overlay DERP region, defaulting to %s. " , cliui .Code ("NYC" ))
87
92
r .derpRegionID = 1
88
93
} else {
89
- fmt . Println ("Picked DERP region" , cliui .Code (r .DerpMap .Regions [report .PreferredDERP ].RegionName ), "as overlay home" )
94
+ r . HumanLogf ("Picked DERP region %s as overlay home " , cliui .Code (r .DerpMap .Regions [report .PreferredDERP ].RegionName ))
90
95
r .derpRegionID = uint16 (report .PreferredDERP )
91
96
}
92
97
@@ -139,7 +144,7 @@ func (r *Receive) ListenOverlaySTUN(ctx context.Context) (<-chan struct{}, error
139
144
case <- restun .C :
140
145
_ , err = conn .WriteToUDP (m .Raw , srvAddr )
141
146
if err != nil {
142
- fmt . Println ( cliui . Timestamp ( time . Now ()), " Failed to write STUN request on overlay:" , err )
147
+ r . HumanLogf ( "%s Failed to write STUN request on overlay: %s" , cliui . Timestamp ( time . Now ()) , err )
143
148
}
144
149
restun .Reset (30 * time .Second )
145
150
}
@@ -169,7 +174,7 @@ func (r *Receive) ListenOverlaySTUN(ctx context.Context) (<-chan struct{}, error
169
174
peers .Range (func (_ key.NodePublic , addr netip.AddrPort ) bool {
170
175
_ , err := conn .WriteToUDPAddrPort (sealed , addr )
171
176
if err != nil {
172
- fmt . Println ( " send response over udp:" , err )
177
+ r . HumanLogf ( "%s Failed to send updated node over udp: %s" , cliui . Timestamp ( time . Now ()) , err )
173
178
return false
174
179
}
175
180
return true
@@ -216,14 +221,11 @@ func (r *Receive) ListenOverlaySTUN(ctx context.Context) (<-chan struct{}, error
216
221
217
222
// our first STUN response
218
223
if ! r .stunIP .IsValid () {
219
- fmt . Println ( cliui . Timestamp ( time . Now ()), "STUN address is" , cliui .Code (stunAddrPort .String ()))
224
+ r . HumanLogf ( "STUN address is %s " , cliui .Code (stunAddrPort .String ()))
220
225
}
221
226
222
227
if r .stunIP .IsValid () && r .stunIP .Compare (stunAddrPort ) != 0 {
223
- r .Logger .Warn ("STUN address changed, this may cause issues" ,
224
- "old_ip" , r .stunIP .String (),
225
- "new_ip" , stunAddrPort .String (),
226
- )
228
+ r .HumanLogf (pretty .Sprintf (cliui .DefaultStyles .Warn , "STUN address changed, this may cause issues; %s->%s" , r .stunIP .String (), stunAddrPort .String ()))
227
229
}
228
230
r .stunIP = stunAddrPort
229
231
closeIPChanOnce .Do (func () {
@@ -234,7 +236,7 @@ func (r *Receive) ListenOverlaySTUN(ctx context.Context) (<-chan struct{}, error
234
236
235
237
res , key , err := r .handleNextMessage (buf , "STUN" )
236
238
if err != nil {
237
- fmt . Println ( cliui . Timestamp ( time . Now ()), "Failed to handle overlay message:" , err .Error ())
239
+ r . HumanLogf ( "Failed to handle overlay message: %s " , err .Error ())
238
240
continue
239
241
}
240
242
@@ -243,7 +245,7 @@ func (r *Receive) ListenOverlaySTUN(ctx context.Context) (<-chan struct{}, error
243
245
if res != nil {
244
246
_ , err = conn .WriteToUDPAddrPort (res , addr )
245
247
if err != nil {
246
- fmt . Println ( cliui . Timestamp ( time . Now ()), "Failed to send overlay response over STUN:" , err .Error ())
248
+ r . HumanLogf ( "Failed to send overlay response over STUN: %s " , err .Error ())
247
249
return
248
250
}
249
251
}
@@ -285,7 +287,7 @@ func (r *Receive) ListenOverlayDERP(ctx context.Context) error {
285
287
peers .Range (func (_ , derpKey key.NodePublic ) bool {
286
288
err = c .Send (derpKey , sealed )
287
289
if err != nil {
288
- fmt . Println ( "send response over derp: " , err )
290
+ r . HumanLogf ( "Send updated node over DERP: %s " , err )
289
291
return false
290
292
}
291
293
return true
@@ -304,7 +306,7 @@ func (r *Receive) ListenOverlayDERP(ctx context.Context) error {
304
306
case derp.ReceivedPacket :
305
307
res , key , err := r .handleNextMessage (msg .Data , "DERP" )
306
308
if err != nil {
307
- fmt . Println ( cliui . Timestamp ( time . Now ()), "Failed to handle overlay message:" , err .Error ())
309
+ r . HumanLogf ( "Failed to handle overlay message: %s " , err .Error ())
308
310
continue
309
311
}
310
312
@@ -313,7 +315,7 @@ func (r *Receive) ListenOverlayDERP(ctx context.Context) error {
313
315
if res != nil {
314
316
err = c .Send (msg .Source , res )
315
317
if err != nil {
316
- fmt . Println ( cliui . Timestamp ( time . Now ()), "Failed to send overlay response over derp:" , err .Error ())
318
+ r . HumanLogf ( "Failed to send overlay response over derp: %s " , err .Error ())
317
319
return err
318
320
}
319
321
}
@@ -350,9 +352,9 @@ func (r *Receive) handleNextMessage(msg []byte, system string) (resRaw []byte, n
350
352
if h := ovMsg .HostInfo .Hostname ; h != "" {
351
353
hostname = h
352
354
}
353
- fmt . Println ( cliui . Timestamp ( time . Now ()), " Received connection request over" , system , "from" , cliui .Keyword (fmt .Sprintf ("%s@%s" , username , hostname )))
355
+ r . HumanLogf ( "%s Received connection request over %s from %s " , cliui . Timestamp ( time . Now ()), system , cliui .Keyword (fmt .Sprintf ("%s@%s" , username , hostname )))
354
356
case messageTypeNodeUpdate :
355
- fmt . Println ( cliui .Timestamp (time .Now ()), "Received updated node from" , cliui .Code (ovMsg .Node .Key .String ()))
357
+ r . HumanLogf ( "%s Received updated node from %s" , cliui .Timestamp (time .Now ()), cliui .Code (ovMsg .Node .Key .String ()))
356
358
r .in <- & ovMsg .Node
357
359
res .Typ = messageTypeNodeUpdate
358
360
if lastNode := r .lastNode .Load (); lastNode != nil {
0 commit comments