88 "math"
99 "sync"
1010 "time"
11+
12+ "github.com/btcsuite/btclog"
13+ "github.com/lightningnetwork/lnd/build"
1114)
1215
1316var (
@@ -75,7 +78,7 @@ type GoBackNConn struct {
7578 recvTimeout time.Duration
7679 recvTimeoutMu sync.RWMutex
7780
78- isServer bool
81+ log btclog. Logger
7982
8083 // handshakeTimeout is the time after which the server or client
8184 // will abort and restart the handshake if the expected response is
@@ -118,6 +121,14 @@ func newGoBackNConn(ctx context.Context, sendFunc sendBytesFunc,
118121
119122 ctxc , cancel := context .WithCancel (ctx )
120123
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+
121132 return & GoBackNConn {
122133 n : n ,
123134 s : n + 1 ,
@@ -126,8 +137,7 @@ func newGoBackNConn(ctx context.Context, sendFunc sendBytesFunc,
126137 sendToStream : sendFunc ,
127138 recvDataChan : make (chan * PacketData , n ),
128139 sendDataChan : make (chan * PacketData ),
129- isServer : isServer ,
130- sendQueue : newQueue (n + 1 , defaultHandshakeTimeout ),
140+ sendQueue : newQueue (n + 1 , defaultHandshakeTimeout , plog ),
131141 handshakeTimeout : defaultHandshakeTimeout ,
132142 recvTimeout : DefaultRecvTimeout ,
133143 sendTimeout : DefaultSendTimeout ,
@@ -136,6 +146,7 @@ func newGoBackNConn(ctx context.Context, sendFunc sendBytesFunc,
136146 remoteClosed : make (chan struct {}),
137147 ctx : ctxc ,
138148 cancel : cancel ,
149+ log : plog ,
139150 quit : make (chan struct {}),
140151 }
141152}
@@ -146,7 +157,7 @@ func (g *GoBackNConn) setN(n uint8) {
146157 g .n = n
147158 g .s = n + 1
148159 g .recvDataChan = make (chan * PacketData , n )
149- g .sendQueue = newQueue (n + 1 , defaultHandshakeTimeout )
160+ g .sendQueue = newQueue (n + 1 , defaultHandshakeTimeout , g . log )
150161}
151162
152163// SetSendTimeout sets the timeout used in the Send function.
@@ -262,7 +273,7 @@ func (g *GoBackNConn) Recv() ([]byte, error) {
262273// start kicks off the various goroutines needed by GoBackNConn.
263274// start should only be called once the handshake has been completed.
264275func (g * GoBackNConn ) start () {
265- log .Debugf ("Starting (isServer=%v)" , g . isServer )
276+ g . log .Debugf ("Starting" )
266277
267278 pingTime := time .Duration (math .MaxInt64 )
268279 if g .pingTime != 0 {
@@ -286,43 +297,43 @@ func (g *GoBackNConn) start() {
286297 defer func () {
287298 g .wg .Done ()
288299 if err := g .Close (); err != nil {
289- log .Errorf ("error closing GoBackNConn: %v" , err )
300+ g .log .Errorf ("Error closing GoBackNConn: %v" ,
301+ err )
290302 }
291303 }()
292304
293305 err := g .receivePacketsForever ()
294306 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 )
297308 }
298- log . Debugf ( "receivePacketsForever stopped (isServer=%v)" ,
299- g . isServer )
309+
310+ g . log . Debugf ( "receivePacketsForever stopped" )
300311 }()
301312
302313 g .wg .Add (1 )
303314 go func () {
304315 defer func () {
305316 g .wg .Done ()
306317 if err := g .Close (); err != nil {
307- log .Errorf ("error closing GoBackNConn: %v" , err )
318+ g .log .Errorf ("Error closing GoBackNConn: %v" ,
319+ err )
308320 }
309321 }()
310322
311323 err := g .sendPacketsForever ()
312324 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 )
315326
316327 }
317- log . Debugf ( "sendPacketsForever stopped (isServer=%v)" ,
318- g . isServer )
328+
329+ g . log . Debugf ( "sendPacketsForever stopped" )
319330 }()
320331}
321332
322333// Close attempts to cleanly close the connection by sending a FIN message.
323334func (g * GoBackNConn ) Close () error {
324335 g .closeOnce .Do (func () {
325- log .Debugf ("Closing GoBackNConn, isServer=%v" , g . isServer )
336+ g . log .Debugf ("Closing GoBackNConn" )
326337
327338 // We close the quit channel to stop the usual operations of the
328339 // server.
@@ -333,13 +344,14 @@ func (g *GoBackNConn) Close() error {
333344 select {
334345 case <- g .remoteClosed :
335346 default :
336- log .Tracef ("Try sending FIN, isServer=%v" , g .isServer )
347+ g .log .Tracef ("Try sending FIN" )
348+
337349 ctxc , cancel := context .WithTimeout (
338350 g .ctx , finSendTimeout ,
339351 )
340352 defer cancel ()
341353 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 )
343355 }
344356 }
345357
@@ -357,7 +369,7 @@ func (g *GoBackNConn) Close() error {
357369 g .resendTicker .Stop ()
358370 }
359371
360- log .Debugf ("GBN is closed, isServer=%v" , g . isServer )
372+ g . log .Debugf ("GBN is closed" )
361373 })
362374
363375 return nil
@@ -420,8 +432,7 @@ func (g *GoBackNConn) sendPacketsForever() error {
420432 g .pongTicker .Reset ()
421433 g .pongTicker .Resume ()
422434
423- log .Tracef ("Sending a PING packet (isServer=%v)" ,
424- g .isServer )
435+ g .log .Tracef ("Sending a PING packet" )
425436
426437 packet = & PacketData {
427438 IsPing : true ,
@@ -437,7 +448,7 @@ func (g *GoBackNConn) sendPacketsForever() error {
437448 // send.
438449 g .sendQueue .addPacket (packet )
439450
440- log .Tracef ("Sending data %d" , packet .Seq )
451+ g . log .Tracef ("Sending data %d" , packet .Seq )
441452 if err := g .sendPacket (g .ctx , packet ); err != nil {
442453 return err
443454 }
@@ -449,7 +460,7 @@ func (g *GoBackNConn) sendPacketsForever() error {
449460 break
450461 }
451462
452- log .Tracef ("The queue is full." )
463+ g . log .Tracef ("The queue is full." )
453464
454465 // The queue is full. We wait for a ACKs to arrive or
455466 // resend the queue after a timeout.
@@ -516,7 +527,7 @@ func (g *GoBackNConn) receivePacketsForever() error { // nolint:gocyclo
516527 // an ACK message with that sequence number
517528 // and we bump the sequence number that we
518529 // 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 )
520531
521532 ack := & PacketACK {
522533 Seq : m .Seq ,
@@ -551,7 +562,7 @@ func (g *GoBackNConn) receivePacketsForever() error { // nolint:gocyclo
551562 // it could be that we missed a previous packet.
552563 // In either case, we send a NACK with the
553564 // 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 )
555566
556567 // If we recently sent a NACK for the same
557568 // sequence number then back off.
@@ -561,7 +572,7 @@ func (g *GoBackNConn) receivePacketsForever() error { // nolint:gocyclo
561572 continue
562573 }
563574
564- log .Tracef ("Sending NACK %d" , g .recvSeq )
575+ g . log .Tracef ("Sending NACK %d" , g .recvSeq )
565576
566577 // Send a NACK with the expected sequence
567578 // number.
@@ -603,9 +614,9 @@ func (g *GoBackNConn) receivePacketsForever() error { // nolint:gocyclo
603614 // then we ignore it. We must have received the ACK
604615 // for the sequence number in the meantime.
605616 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+
609620 continue
610621 }
611622
@@ -618,8 +629,7 @@ func (g *GoBackNConn) receivePacketsForever() error { // nolint:gocyclo
618629 }
619630 }
620631
621- log .Tracef ("Sending a resend signal (isServer=%v)" ,
622- g .isServer )
632+ g .log .Tracef ("Sending a resend signal" )
623633
624634 // Send a signal to indicate that new sends should pause
625635 // and the current queue should be resent instead.
@@ -631,16 +641,15 @@ func (g *GoBackNConn) receivePacketsForever() error { // nolint:gocyclo
631641 case * PacketFIN :
632642 // A FIN packet indicates that the peer would like to
633643 // close the connection.
634-
635- log .Tracef ("Received a FIN packet (isServer=%v)" ,
636- g .isServer )
644+ g .log .Tracef ("Received a FIN packet" )
637645
638646 close (g .remoteClosed )
639647
640648 return errTransportClosing
641649
642650 default :
643- return fmt .Errorf ("received unexpected message: %T" , msg )
651+ return fmt .Errorf ("received unexpected message: %T" ,
652+ msg )
644653 }
645654 }
646655}
0 commit comments