8
8
"math"
9
9
"sync"
10
10
"time"
11
+
12
+ "github.com/btcsuite/btclog"
13
+ "github.com/lightningnetwork/lnd/build"
11
14
)
12
15
13
16
var (
@@ -75,7 +78,7 @@ type GoBackNConn struct {
75
78
recvTimeout time.Duration
76
79
recvTimeoutMu sync.RWMutex
77
80
78
- isServer bool
81
+ log btclog. Logger
79
82
80
83
// handshakeTimeout is the time after which the server or client
81
84
// will abort and restart the handshake if the expected response is
@@ -118,6 +121,14 @@ func newGoBackNConn(ctx context.Context, sendFunc sendBytesFunc,
118
121
119
122
ctxc , cancel := context .WithCancel (ctx )
120
123
124
+ // Construct a new prefixed logger.
125
+ identifier := "client"
126
+ if isServer {
127
+ identifier = "server"
128
+ }
129
+ prefix := fmt .Sprintf ("(%s)" , identifier )
130
+ plog := build .NewPrefixLog (prefix , log )
131
+
121
132
return & GoBackNConn {
122
133
n : n ,
123
134
s : n + 1 ,
@@ -126,8 +137,7 @@ func newGoBackNConn(ctx context.Context, sendFunc sendBytesFunc,
126
137
sendToStream : sendFunc ,
127
138
recvDataChan : make (chan * PacketData , n ),
128
139
sendDataChan : make (chan * PacketData ),
129
- isServer : isServer ,
130
- sendQueue : newQueue (n + 1 , defaultHandshakeTimeout ),
140
+ sendQueue : newQueue (n + 1 , defaultHandshakeTimeout , plog ),
131
141
handshakeTimeout : defaultHandshakeTimeout ,
132
142
recvTimeout : DefaultRecvTimeout ,
133
143
sendTimeout : DefaultSendTimeout ,
@@ -136,6 +146,7 @@ func newGoBackNConn(ctx context.Context, sendFunc sendBytesFunc,
136
146
remoteClosed : make (chan struct {}),
137
147
ctx : ctxc ,
138
148
cancel : cancel ,
149
+ log : plog ,
139
150
quit : make (chan struct {}),
140
151
}
141
152
}
@@ -146,7 +157,7 @@ func (g *GoBackNConn) setN(n uint8) {
146
157
g .n = n
147
158
g .s = n + 1
148
159
g .recvDataChan = make (chan * PacketData , n )
149
- g .sendQueue = newQueue (n + 1 , defaultHandshakeTimeout )
160
+ g .sendQueue = newQueue (n + 1 , defaultHandshakeTimeout , g . log )
150
161
}
151
162
152
163
// SetSendTimeout sets the timeout used in the Send function.
@@ -262,7 +273,7 @@ func (g *GoBackNConn) Recv() ([]byte, error) {
262
273
// start kicks off the various goroutines needed by GoBackNConn.
263
274
// start should only be called once the handshake has been completed.
264
275
func (g * GoBackNConn ) start () {
265
- log .Debugf ("Starting (isServer=%v)" , g . isServer )
276
+ g . log .Debugf ("Starting" )
266
277
267
278
pingTime := time .Duration (math .MaxInt64 )
268
279
if g .pingTime != 0 {
@@ -286,43 +297,43 @@ func (g *GoBackNConn) start() {
286
297
defer func () {
287
298
g .wg .Done ()
288
299
if err := g .Close (); err != nil {
289
- log .Errorf ("error closing GoBackNConn: %v" , err )
300
+ g .log .Errorf ("error closing GoBackNConn: %v" ,
301
+ err )
290
302
}
291
303
}()
292
304
293
305
err := g .receivePacketsForever ()
294
306
if err != nil {
295
- log .Debugf ("Error in receivePacketsForever " +
296
- "(isServer=%v): %v" , g .isServer , err )
307
+ g .log .Debugf ("Error in receivePacketsForever: %v" , err )
297
308
}
298
- log . Debugf ( "receivePacketsForever stopped (isServer=%v)" ,
299
- g . isServer )
309
+
310
+ g . log . Debugf ( "receivePacketsForever stopped" )
300
311
}()
301
312
302
313
g .wg .Add (1 )
303
314
go func () {
304
315
defer func () {
305
316
g .wg .Done ()
306
317
if err := g .Close (); err != nil {
307
- log .Errorf ("error closing GoBackNConn: %v" , err )
318
+ g .log .Errorf ("error closing GoBackNConn: %v" ,
319
+ err )
308
320
}
309
321
}()
310
322
311
323
err := g .sendPacketsForever ()
312
324
if err != nil {
313
- log .Debugf ("Error in sendPacketsForever " +
314
- "(isServer=%v): %v" , g .isServer , err )
325
+ g .log .Debugf ("Error in sendPacketsForever: %v" , err )
315
326
316
327
}
317
- log . Debugf ( "sendPacketsForever stopped (isServer=%v)" ,
318
- g . isServer )
328
+
329
+ g . log . Debugf ( "sendPacketsForever stopped" )
319
330
}()
320
331
}
321
332
322
333
// Close attempts to cleanly close the connection by sending a FIN message.
323
334
func (g * GoBackNConn ) Close () error {
324
335
g .closeOnce .Do (func () {
325
- log .Debugf ("Closing GoBackNConn, isServer=%v" , g . isServer )
336
+ g . log .Debugf ("Closing GoBackNConn" )
326
337
327
338
// We close the quit channel to stop the usual operations of the
328
339
// server.
@@ -333,13 +344,14 @@ func (g *GoBackNConn) Close() error {
333
344
select {
334
345
case <- g .remoteClosed :
335
346
default :
336
- log .Tracef ("Try sending FIN, isServer=%v" , g .isServer )
347
+ g .log .Tracef ("Try sending FIN" )
348
+
337
349
ctxc , cancel := context .WithTimeout (
338
350
g .ctx , finSendTimeout ,
339
351
)
340
352
defer cancel ()
341
353
if err := g .sendPacket (ctxc , & PacketFIN {}); err != nil {
342
- log .Errorf ("Error sending FIN: %v" , err )
354
+ g . log .Errorf ("Error sending FIN: %v" , err )
343
355
}
344
356
}
345
357
@@ -357,7 +369,7 @@ func (g *GoBackNConn) Close() error {
357
369
g .resendTicker .Stop ()
358
370
}
359
371
360
- log .Debugf ("GBN is closed, isServer=%v" , g . isServer )
372
+ g . log .Debugf ("GBN is closed" )
361
373
})
362
374
363
375
return nil
@@ -420,8 +432,7 @@ func (g *GoBackNConn) sendPacketsForever() error {
420
432
g .pongTicker .Reset ()
421
433
g .pongTicker .Resume ()
422
434
423
- log .Tracef ("Sending a PING packet (isServer=%v)" ,
424
- g .isServer )
435
+ g .log .Tracef ("Sending a PING packet" )
425
436
426
437
packet = & PacketData {
427
438
IsPing : true ,
@@ -437,7 +448,7 @@ func (g *GoBackNConn) sendPacketsForever() error {
437
448
// send.
438
449
g .sendQueue .addPacket (packet )
439
450
440
- log .Tracef ("Sending data %d" , packet .Seq )
451
+ g . log .Tracef ("Sending data %d" , packet .Seq )
441
452
if err := g .sendPacket (g .ctx , packet ); err != nil {
442
453
return err
443
454
}
@@ -449,7 +460,7 @@ func (g *GoBackNConn) sendPacketsForever() error {
449
460
break
450
461
}
451
462
452
- log .Tracef ("The queue is full." )
463
+ g . log .Tracef ("The queue is full." )
453
464
454
465
// The queue is full. We wait for a ACKs to arrive or
455
466
// resend the queue after a timeout.
@@ -516,7 +527,7 @@ func (g *GoBackNConn) receivePacketsForever() error { // nolint:gocyclo
516
527
// an ACK message with that sequence number
517
528
// and we bump the sequence number that we
518
529
// expect of the next data packet.
519
- log .Tracef ("Got expected data %d" , m .Seq )
530
+ g . log .Tracef ("Got expected data %d" , m .Seq )
520
531
521
532
ack := & PacketACK {
522
533
Seq : m .Seq ,
@@ -551,7 +562,7 @@ func (g *GoBackNConn) receivePacketsForever() error { // nolint:gocyclo
551
562
// it could be that we missed a previous packet.
552
563
// In either case, we send a NACK with the
553
564
// sequence number that we were expecting.
554
- log .Tracef ("Got unexpected data %d" , m .Seq )
565
+ g . log .Tracef ("Got unexpected data %d" , m .Seq )
555
566
556
567
// If we recently sent a NACK for the same
557
568
// sequence number then back off.
@@ -561,7 +572,7 @@ func (g *GoBackNConn) receivePacketsForever() error { // nolint:gocyclo
561
572
continue
562
573
}
563
574
564
- log .Tracef ("Sending NACK %d" , g .recvSeq )
575
+ g . log .Tracef ("Sending NACK %d" , g .recvSeq )
565
576
566
577
// Send a NACK with the expected sequence
567
578
// number.
@@ -603,9 +614,9 @@ func (g *GoBackNConn) receivePacketsForever() error { // nolint:gocyclo
603
614
// then we ignore it. We must have received the ACK
604
615
// for the sequence number in the meantime.
605
616
if ! inQueue {
606
- log .Tracef ("NACK seq %d is not in the queue. " +
607
- "Ignoring. (isServer=%v) " , m .Seq ,
608
- g . isServer )
617
+ g . log .Tracef ("NACK seq %d is not in the " +
618
+ "queue. Ignoring " , m .Seq )
619
+
609
620
continue
610
621
}
611
622
@@ -618,8 +629,7 @@ func (g *GoBackNConn) receivePacketsForever() error { // nolint:gocyclo
618
629
}
619
630
}
620
631
621
- log .Tracef ("Sending a resend signal (isServer=%v)" ,
622
- g .isServer )
632
+ g .log .Tracef ("Sending a resend signal" )
623
633
624
634
// Send a signal to indicate that new sends should pause
625
635
// and the current queue should be resent instead.
@@ -631,16 +641,15 @@ func (g *GoBackNConn) receivePacketsForever() error { // nolint:gocyclo
631
641
case * PacketFIN :
632
642
// A FIN packet indicates that the peer would like to
633
643
// close the connection.
634
-
635
- log .Tracef ("Received a FIN packet (isServer=%v)" ,
636
- g .isServer )
644
+ g .log .Tracef ("Received a FIN packet (isServer=%v)" )
637
645
638
646
close (g .remoteClosed )
639
647
640
648
return errTransportClosing
641
649
642
650
default :
643
- return fmt .Errorf ("received unexpected message: %T" , msg )
651
+ return fmt .Errorf ("received unexpected message: %T" ,
652
+ msg )
644
653
}
645
654
}
646
655
}
0 commit comments