@ -132,6 +132,8 @@ static struct io_plan *peer_decrypt_body(struct io_conn *conn,
struct io_plan * plan ;
u8 * in , * decrypted ;
pcs - > reading_body = false ;
decrypted = cryptomsg_decrypt_body ( pcs - > in , & pcs - > cs , pcs - > in ) ;
if ( ! decrypted )
return io_close ( conn ) ;
@ -198,6 +200,8 @@ static struct io_plan *peer_decrypt_header(struct io_conn *conn,
tal_free ( pcs - > in ) ;
pcs - > reading_body = true ;
/* BOLT #8:
*
* * Read _exactly_ ` l + 16 ` bytes from the network buffer , let
@ -224,6 +228,7 @@ struct io_plan *peer_read_message(struct io_conn *conn,
*
* * Read _exactly_ ` 18 - bytes ` from the network buffer .
*/
pcs - > reading_body = false ;
pcs - > in = tal_arr ( conn , u8 , 18 ) ;
pcs - > next_in = next ;
return io_read ( conn , pcs - > in , 18 , peer_decrypt_header , pcs ) ;
@ -366,8 +371,23 @@ struct io_plan *peer_write_message(struct io_conn *conn,
return io_write ( conn , pcs - > out , tal_count ( pcs - > out ) , post , pcs ) ;
}
/* We write in one op, so it's all or nothing. */
bool peer_out_started ( const struct io_conn * conn ,
const struct peer_crypto_state * cs )
{
return io_plan_out_started ( conn ) ;
}
/* We read in two parts, so we might have started body. */
bool peer_in_started ( const struct io_conn * conn ,
const struct peer_crypto_state * cs )
{
return io_plan_in_started ( conn ) | | cs - > reading_body ;
}
void init_peer_crypto_state ( struct peer * peer , struct peer_crypto_state * pcs )
{
pcs - > peer = peer ;
pcs - > out = pcs - > in = NULL ;
pcs - > reading_body = false ;
}