static void ncrx_build_resp()

in ncrx/libncrx.c [588:616]


static void ncrx_build_resp(struct ncrx_slot *slot, struct ncrx *ncrx)
{
	/* no msg received? */
	if (!ncrx->head_seq)
		return;

	/* "ncrx<ack-seq>" */
	if (!ncrx->resp_len) {
		ncrx->acked_seq = tail_seq(ncrx) - 1;
		ncrx->acked_at = ncrx->now_mono;

		ncrx->resp_len = snprintf(ncrx->resp_buf, NCRX_PKT_MAX,
					  "ncrx%"PRIu64, ncrx->acked_seq);
	}

	/* " <missing-seq>..." truncated to NCRX_PKT_MAX */
	if (slot) {
		int idx = slot - ncrx->slots;
		int len;

		len = snprintf(ncrx->resp_buf + ncrx->resp_len,
			       NCRX_PKT_MAX - ncrx->resp_len, " %"PRIu64,
			       ncrx->head_seq - slot_dist(idx, ncrx));
		if (ncrx->resp_len + len <= NCRX_PKT_MAX) {
			ncrx->resp_len += len;
			ncrx->resp_buf[ncrx->resp_len] = '\0';
		}
	}
}