@@ -440,6 +440,9 @@ static struct io_plan *encrypt_and_send(struct peer *peer,
440
440
441
441
set_urgent_flag (peer , is_urgent (type ));
442
442
443
+ status_peer_debug (& peer -> id , "encrypt_and_send -> io_write %s" ,
444
+ peer_wire_name (type ));
445
+
443
446
/* We free this and the encrypted version in next write_to_peer */
444
447
peer -> sent_to_peer = cryptomsg_encrypt_msg (peer , & peer -> cs , msg );
445
448
return io_write (peer -> to_peer ,
@@ -562,29 +565,46 @@ static void set_ping_timer(struct peer *peer)
562
565
peer -> ping_timer = NULL ;
563
566
return ;
564
567
}
568
+ status_peer_debug (& peer -> id , "set_ping_timer, peer->ping_timer = %p" ,
569
+ peer -> ping_timer );
565
570
peer -> ping_timer = new_reltimer (& peer -> daemon -> timers , peer ,
566
571
time_from_sec (15 + pseudorand (30 )),
567
572
send_ping , peer );
568
573
}
569
574
570
575
static void send_ping (struct peer * peer )
571
576
{
577
+ struct timeabs tnow = time_now ();
572
578
/* If it's still sending us traffic, maybe ping reply is backed up?
573
579
* That's OK, ping is just to make sure it's still alive, and clearly
574
580
* it is. */
575
581
if (time_before (peer -> last_recv_time ,
576
- timeabs_sub (time_now () , time_from_sec (60 )))) {
582
+ timeabs_sub (tnow , time_from_sec (60 )))) {
577
583
/* Already have a ping in flight? */
578
584
if (peer -> expecting_pong != PONG_UNEXPECTED ) {
579
- status_peer_debug (& peer -> id , "Last ping unreturned: hanging up" );
585
+ status_peer_debug (& peer -> id , "Last ping unreturned:"
586
+ " hanging up, expecting_pong: %d,"
587
+ " last_recv_time: %lu seconds,"
588
+ " tnow: %lu seconds,"
589
+ " tnow - 60: %lu seconds,"
590
+ " tnow - last_recv_time: %lu seconds" ,
591
+ peer -> expecting_pong ,
592
+ (long )peer -> last_recv_time .ts .tv_sec ,
593
+ (long )tnow .ts .tv_sec ,
594
+ (long )timeabs_sub (tnow , time_from_sec (60 )).ts .tv_sec ,
595
+ (long )tnow .ts .tv_sec - (long )peer -> last_recv_time .ts .tv_sec );
580
596
if (peer -> to_peer )
581
597
io_close (peer -> to_peer );
582
598
return ;
583
599
}
584
600
601
+ status_peer_debug (& peer -> id , "Sending a ping" );
585
602
inject_peer_msg (peer , take (make_ping (NULL , 1 , 0 )));
586
603
peer -> expecting_pong = PONG_EXPECTED_PROBING ;
587
604
}
605
+ else {
606
+ status_peer_debug (& peer -> id , "send_ping (skip) not been 60s yet" );
607
+ }
588
608
589
609
set_ping_timer (peer );
590
610
}
@@ -617,20 +637,29 @@ static void handle_ping_in(struct peer *peer, const u8 *msg)
617
637
{
618
638
u8 * pong ;
619
639
640
+ status_peer_debug (& peer -> id , "Ping recevied!" );
641
+
620
642
if (!check_ping_make_pong (NULL , msg , & pong )) {
621
643
send_warning (peer , "Invalid ping %s" , tal_hex (msg , msg ));
622
644
return ;
623
645
}
624
646
625
- if (pong )
647
+ if (pong ) {
648
+ status_peer_debug (& peer -> id , "Sending a pong!" );
626
649
inject_peer_msg (peer , take (pong ));
650
+ }
651
+ else {
652
+ status_peer_debug (& peer -> id , "We're NOT sending a pong.. why?" );
653
+ }
627
654
}
628
655
629
656
static void handle_ping_reply (struct peer * peer , const u8 * msg )
630
657
{
631
658
u8 * ignored ;
632
659
size_t i ;
633
660
661
+ status_peer_debug (& peer -> id , "Receiving a pong!" );
662
+
634
663
/* We print this out because we asked for pong, so can't spam us... */
635
664
if (!fromwire_pong (msg , msg , & ignored ))
636
665
status_peer_unusual (& peer -> id , "Got malformed ping reply %s" ,
@@ -656,6 +685,8 @@ static void handle_pong_in(struct peer *peer, const u8 *msg)
656
685
handle_ping_reply (peer , msg );
657
686
/* fall thru */
658
687
case PONG_EXPECTED_PROBING :
688
+ // TODO: set peer->last_recv_time to time_now() ?
689
+ status_peer_debug (& peer -> id , "Received and ignored a pong! (probing)" );
659
690
peer -> expecting_pong = PONG_UNEXPECTED ;
660
691
return ;
661
692
case PONG_UNEXPECTED :
@@ -1171,6 +1202,8 @@ static struct io_plan *read_body_from_peer_done(struct io_conn *peer_conn,
1171
1202
/* We got something! */
1172
1203
peer -> last_recv_time = time_now ();
1173
1204
1205
+ status_peer_debug (& peer -> id , "Setting last_recv_time to now!" );
1206
+
1174
1207
/* Don't process packets while we're closing */
1175
1208
if (peer -> draining )
1176
1209
return next_read (peer_conn , peer );
@@ -1386,6 +1419,8 @@ void send_manual_ping(struct daemon *daemon, const u8 *msg)
1386
1419
u16 len , num_pong_bytes ;
1387
1420
struct peer * peer ;
1388
1421
1422
+ status_debug ("Sending a ping manually" );
1423
+
1389
1424
if (!fromwire_connectd_ping (msg , & id , & num_pong_bytes , & len ))
1390
1425
master_badmsg (WIRE_CONNECTD_PING , msg );
1391
1426
@@ -1435,6 +1470,6 @@ void send_manual_ping(struct daemon *daemon, const u8 *msg)
1435
1470
peer -> expecting_pong = PONG_EXPECTED_COMMAND ;
1436
1471
1437
1472
/* Since we're doing this manually, kill and restart timer. */
1438
- tal_free (peer -> ping_timer );
1473
+ peer -> ping_timer = tal_free (peer -> ping_timer );
1439
1474
set_ping_timer (peer );
1440
1475
}
0 commit comments