@ -327,12 +327,13 @@ static bool peer_comms_err(struct peer *peer, Pkt *err)
return false ;
return false ;
}
}
void peer_unexpected_pkt ( struct peer * peer , const Pkt * pkt )
void peer_unexpected_pkt ( struct peer * peer , const Pkt * pkt , const char * where )
{
{
const char * p ;
const char * p ;
log_unusual ( peer - > log , " Received unexpected pkt %u (%s) " ,
log_unusual ( peer - > log , " %s: received unexpected pkt %u (%s) in %s " ,
pkt - > pkt_case , pkt_name ( pkt - > pkt_case ) ) ;
where , pkt - > pkt_case , pkt_name ( pkt - > pkt_case ) ,
state_name ( peer - > state ) ) ;
if ( pkt - > pkt_case ! = PKT__PKT_ERROR )
if ( pkt - > pkt_case ! = PKT__PKT_ERROR )
return ;
return ;
@ -352,12 +353,20 @@ void peer_unexpected_pkt(struct peer *peer, const Pkt *pkt)
}
}
/* Unexpected packet received: stop listening, start breakdown procedure. */
/* Unexpected packet received: stop listening, start breakdown procedure. */
static bool peer_received_unexpected_pkt ( struct peer * peer , const Pkt * pkt )
static bool peer_received_unexpected_pkt ( struct peer * peer , const Pkt * pkt ,
const char * where )
{
{
peer_unexpected_pkt ( peer , pkt ) ;
peer_unexpected_pkt ( peer , pkt , where ) ;
return peer_comms_err ( peer , pkt_err_unexpected ( peer , pkt ) ) ;
return peer_comms_err ( peer , pkt_err_unexpected ( peer , pkt ) ) ;
}
}
void set_htlc_rval ( struct peer * peer ,
struct htlc * htlc , const struct rval * rval )
{
assert ( ! htlc - > r ) ;
htlc - > r = tal_dup ( htlc , struct rval , rval ) ;
}
static void route_htlc_onwards ( struct peer * peer ,
static void route_htlc_onwards ( struct peer * peer ,
struct htlc * htlc ,
struct htlc * htlc ,
u64 msatoshis ,
u64 msatoshis ,
@ -486,8 +495,7 @@ static void their_htlc_added(struct peer *peer, struct htlc *htlc,
log_info ( peer - > log , " Immediately resolving HTLC % " PRIu64 ,
log_info ( peer - > log , " Immediately resolving HTLC % " PRIu64 ,
htlc - > id ) ;
htlc - > id ) ;
assert ( ! htlc - > r ) ;
set_htlc_rval ( peer , htlc , & payment - > r ) ;
htlc - > r = tal_dup ( htlc , struct rval , & payment - > r ) ;
command_htlc_fulfill ( peer , htlc ) ;
command_htlc_fulfill ( peer , htlc ) ;
goto free_rest ;
goto free_rest ;
@ -517,8 +525,7 @@ static void our_htlc_fulfilled(struct peer *peer, struct htlc *htlc,
const struct rval * preimage )
const struct rval * preimage )
{
{
if ( htlc - > src ) {
if ( htlc - > src ) {
assert ( ! htlc - > src - > r ) ;
set_htlc_rval ( htlc - > src - > peer , htlc - > src , htlc - > r ) ;
htlc - > src - > r = tal_dup ( htlc - > src , struct rval , htlc - > r ) ;
command_htlc_fulfill ( htlc - > src - > peer , htlc - > src ) ;
command_htlc_fulfill ( htlc - > src - > peer , htlc - > src ) ;
} else {
} else {
complete_pay_command ( peer , htlc ) ;
complete_pay_command ( peer , htlc ) ;
@ -650,7 +657,7 @@ static bool closing_pkt_in(struct peer *peer, const Pkt *pkt)
assert ( peer - > state = = STATE_MUTUAL_CLOSING ) ;
assert ( peer - > state = = STATE_MUTUAL_CLOSING ) ;
if ( pkt - > pkt_case ! = PKT__PKT_CLOSE_SIGNATURE )
if ( pkt - > pkt_case ! = PKT__PKT_CLOSE_SIGNATURE )
return peer_received_unexpected_pkt ( peer , pkt ) ;
return peer_received_unexpected_pkt ( peer , pkt , __func__ ) ;
log_info ( peer - > log , " closing_pkt_in: they offered close fee % " PRIu64 ,
log_info ( peer - > log , " closing_pkt_in: they offered close fee % " PRIu64 ,
c - > close_fee ) ;
c - > close_fee ) ;
@ -1033,7 +1040,7 @@ static bool shutdown_pkt_in(struct peer *peer, const Pkt *pkt)
err = handle_pkt_commit ( peer , pkt ) ;
err = handle_pkt_commit ( peer , pkt ) ;
break ;
break ;
case PKT__PKT_ERROR :
case PKT__PKT_ERROR :
peer_unexpected_pkt ( peer , pkt ) ;
peer_unexpected_pkt ( peer , pkt , __func__ ) ;
return peer_comms_err ( peer , NULL ) ;
return peer_comms_err ( peer , NULL ) ;
case PKT__PKT_AUTH :
case PKT__PKT_AUTH :
@ -1043,7 +1050,7 @@ static bool shutdown_pkt_in(struct peer *peer, const Pkt *pkt)
case PKT__PKT_OPEN_COMPLETE :
case PKT__PKT_OPEN_COMPLETE :
case PKT__PKT_CLOSE_SIGNATURE :
case PKT__PKT_CLOSE_SIGNATURE :
default :
default :
peer_unexpected_pkt ( peer , pkt ) ;
peer_unexpected_pkt ( peer , pkt , __func__ ) ;
err = pkt_err_unexpected ( peer , pkt ) ;
err = pkt_err_unexpected ( peer , pkt ) ;
break ;
break ;
}
}
@ -1144,7 +1151,7 @@ static bool normal_pkt_in(struct peer *peer, const Pkt *pkt)
}
}
/* Fall thru. */
/* Fall thru. */
default :
default :
return peer_received_unexpected_pkt ( peer , pkt ) ;
return peer_received_unexpected_pkt ( peer , pkt , __func__ ) ;
}
}
if ( err ) {
if ( err ) {
@ -2105,7 +2112,7 @@ struct htlc *peer_new_htlc(struct peer *peer,
static struct io_plan * reconnect_pkt_in ( struct io_conn * conn , struct peer * peer )
static struct io_plan * reconnect_pkt_in ( struct io_conn * conn , struct peer * peer )
{
{
if ( peer - > inpkt - > pkt_case ! = PKT__PKT_RECONNECT ) {
if ( peer - > inpkt - > pkt_case ! = PKT__PKT_RECONNECT ) {
peer_received_unexpected_pkt ( peer , peer - > inpkt ) ;
peer_received_unexpected_pkt ( peer , peer - > inpkt , __func__ ) ;
return pkt_out ( conn , peer ) ;
return pkt_out ( conn , peer ) ;
}
}
@ -3920,9 +3927,7 @@ static void json_fulfillhtlc(struct command *cmd,
return ;
return ;
}
}
assert ( ! htlc - > r ) ;
set_htlc_rval ( peer , htlc , & r ) ;
htlc - > r = tal_dup ( htlc , struct rval , & r ) ;
if ( command_htlc_fulfill ( peer , htlc ) )
if ( command_htlc_fulfill ( peer , htlc ) )
command_success ( cmd , null_response ( cmd ) ) ;
command_success ( cmd , null_response ( cmd ) ) ;
else
else