| 394 | } |
| 395 | |
| 396 | bool query_channel_range(struct daemon *daemon, |
| 397 | struct peer *peer, |
| 398 | u32 first_blocknum, u32 number_of_blocks, |
| 399 | enum query_option_flags qflags, |
| 400 | void (*cb)(struct peer *, |
| 401 | u32, u32, |
| 402 | const struct range_query_reply *)) |
| 403 | { |
| 404 | u8 *msg; |
| 405 | struct tlv_query_channel_range_tlvs *tlvs; |
| 406 | |
| 407 | assert((qflags & ~(QUERY_ADD_TIMESTAMPS|QUERY_ADD_CHECKSUMS)) == 0); |
| 408 | assert(peer->gossip_queries_feature); |
| 409 | assert(!peer->range_replies); |
| 410 | assert(!peer->query_channel_range_cb); |
| 411 | |
| 412 | if (qflags) { |
| 413 | tlvs = tlv_query_channel_range_tlvs_new(tmpctx); |
| 414 | tlvs->query_option = tal(tlvs, bigsize_t); |
| 415 | *tlvs->query_option = qflags; |
| 416 | } else |
| 417 | tlvs = NULL; |
| 418 | status_peer_debug(&peer->id, |
| 419 | "sending query_channel_range for blocks %u+%u", |
| 420 | first_blocknum, number_of_blocks); |
| 421 | |
| 422 | msg = towire_query_channel_range(NULL, &chainparams->genesis_blockhash, |
| 423 | first_blocknum, number_of_blocks, |
| 424 | tlvs); |
| 425 | queue_peer_msg(peer->daemon, &peer->id, take(msg)); |
| 426 | peer->range_first_blocknum = first_blocknum; |
| 427 | peer->range_end_blocknum = first_blocknum + number_of_blocks; |
| 428 | peer->range_blocks_outstanding = number_of_blocks; |
| 429 | peer->range_replies = tal_arr(peer, struct range_query_reply, 0); |
| 430 | peer->query_channel_range_cb = cb; |
| 431 | |
| 432 | return true; |
| 433 | } |
no test coverage detected