core-lightning/common/ping.c
Rusty Russell a37c165cb9 common: move some files out of lightningd/
Basically all files shared by different daemons.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2017-08-29 17:54:14 +02:00

56 lines
1.4 KiB
C

#include <common/ping.h>
#include <wire/gen_peer_wire.h>
bool check_ping_make_pong(const tal_t *ctx, const u8 *ping, u8 **pong)
{
u16 num_pong_bytes;
u8 *ignored;
if (!fromwire_ping(ctx, ping, NULL, &num_pong_bytes, &ignored))
return false;
tal_free(ignored);
/* FIXME: */
/* BOLT #1:
*
* A node receiving a `ping` message SHOULD fail the channels if it
* has received significantly in excess of one `ping` per 30 seconds,
*/
/* BOLT #1:
*
* ... otherwise if `num_pong_bytes` is less than 65532 it MUST
* respond by sending a `pong` message with `byteslen` equal to
* `num_pong_bytes`, otherwise it MUST ignore the `ping`.
*/
if (num_pong_bytes < 65532) {
/* BOLT #1:
*
* A node sending `pong` or `ping` SHOULD set `ignored` to
* zeroes, but MUST NOT set `ignored` to sensitive data such
* as secrets, or portions of initialized memory.
*/
ignored = tal_arrz(ctx, u8, num_pong_bytes);
*pong = towire_pong(ctx, ignored);
tal_free(ignored);
} else
*pong = NULL;
return true;
}
u8 *make_ping(const tal_t *ctx, u16 num_pong_bytes, u16 padlen)
{
/* BOLT #1:
*
* A node sending `pong` or `ping` SHOULD set `ignored` to zeroes, but
* MUST NOT set `ignored` to sensitive data such as secrets, or
* portions of initialized memory.
*/
u8 *ping, *ignored = tal_arrz(ctx, u8, padlen);
ping = towire_ping(ctx, num_pong_bytes, ignored);
tal_free(ignored);
return ping;
}