Browse Source

channeld: Send messages if instructed to by lightningd

travis-debug
Christian Decker 5 years ago
parent
commit
e9fc9aef34
  1. 10
      channeld/channeld.c
  2. 16
      tests/test_misc.py

10
channeld/channeld.c

@ -2852,6 +2852,14 @@ static void handle_dev_memleak(struct peer *peer, const u8 *msg)
take(towire_channel_dev_memleak_reply(NULL, take(towire_channel_dev_memleak_reply(NULL,
found_leak))); found_leak)));
} }
/* We were told to send a custommsg to the peer by `lightningd`. All the
* verification is done on the side of `lightningd` so we should be good to
* just forward it here. */
static void channeld_send_custommsg(struct peer *peer, const u8 *msg)
{
sync_crypto_write(peer->pps, take(msg));
}
#endif /* DEVELOPER */ #endif /* DEVELOPER */
static void req_in(struct peer *peer, const u8 *msg) static void req_in(struct peer *peer, const u8 *msg)
@ -2917,7 +2925,7 @@ static void req_in(struct peer *peer, const u8 *msg)
switch ((enum common_wire_type)t) { switch ((enum common_wire_type)t) {
#if DEVELOPER #if DEVELOPER
case WIRE_CUSTOMMSG_OUT: case WIRE_CUSTOMMSG_OUT:
/* TODO(cdecker) Add handling of custom messages. */ channeld_send_custommsg(peer, msg);
return; return;
#else #else
case WIRE_CUSTOMMSG_OUT: case WIRE_CUSTOMMSG_OUT:

16
tests/test_misc.py

@ -2096,11 +2096,23 @@ def test_sendcustommsg(node_factory):
with pytest.raises(RpcError, match=r'Cannot send messages of type 18 .WIRE_PING.'): with pytest.raises(RpcError, match=r'Cannot send messages of type 18 .WIRE_PING.'):
l2.rpc.dev_sendcustommsg(l2.info['id'], r'0012') l2.rpc.dev_sendcustommsg(l2.info['id'], r'0012')
# This should work since the peer is currently owned by `channeld`
l2.rpc.dev_sendcustommsg(l1.info['id'], msg) l2.rpc.dev_sendcustommsg(l1.info['id'], msg)
l2.daemon.wait_for_log(
r'{peer_id}-{owner}-chan#[0-9]: \[OUT\] {serialized}'.format(
owner='channeld', serialized=serialized, peer_id=l1.info['id']
)
)
l1.daemon.wait_for_log(r'\[IN\] {}'.format(serialized))
l1.daemon.wait_for_log(
r'Got a custom message {serialized} from peer {peer_id}'.format(
serialized=serialized, peer_id=l2.info['id']))
# This should work since the peer is currently owned by `openingd`
l2.rpc.dev_sendcustommsg(l4.info['id'], msg) l2.rpc.dev_sendcustommsg(l4.info['id'], msg)
l2.daemon.wait_for_log( l2.daemon.wait_for_log(
r'{peer_id}-openingd-chan#[0-9]: \[OUT\] {serialized}'.format( r'{peer_id}-{owner}-chan#[0-9]: \[OUT\] {serialized}'.format(
serialized=serialized, peer_id=l4.info['id'] owner='openingd', serialized=serialized, peer_id=l4.info['id']
) )
) )
l4.daemon.wait_for_log(r'\[IN\] {}'.format(serialized)) l4.daemon.wait_for_log(r'\[IN\] {}'.format(serialized))

Loading…
Cancel
Save