#include #include #include #include #include #include #include #include /* We only support one channel per peer anyway */ void peer_failed(int peer_fd, struct crypto_state *cs, const struct channel_id *channel_id, u16 error_code, const char *fmt, ...) { va_list ap; const char *errmsg; struct channel_id all_channels; u8 *msg; /* BOLT #1: * * The channel is referred to by `channel-id` unless `channel-id` is * zero (ie. all bytes zero), in which case it refers to all channels. */ if (!channel_id) { memset(&all_channels, 0, sizeof(all_channels)); channel_id = &all_channels; } va_start(ap, fmt); errmsg = tal_vfmt(NULL, fmt, ap); va_end(ap); msg = towire_error(errmsg, channel_id, (const u8 *)errmsg); /* This is only best-effort; don't block. */ fcntl(peer_fd, F_SETFL, fcntl(peer_fd, F_GETFL) | O_NONBLOCK); sync_crypto_write(cs, peer_fd, msg); status_failed(error_code, "%s", errmsg); }