summaryrefslogtreecommitdiffstats
path: root/src/libknot/rrset-dump.h
blob: d15e9908cfc87770842a41151e61edd6698ecacd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
/*  Copyright (C) 2023 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

/*!
 * \file
 *
 * \brief RRset text dump facility.
 *
 * \addtogroup rr
 * @{
 */

#pragma once

#include <stdbool.h>

#include "libknot/rrset.h"

/*! \brief Text output settings. */
typedef struct {
	/*!< Wrap long records. */
	bool	wrap;
	/*!< Show class. */
	bool	show_class;
	/*!< Show TTL. */
	bool	show_ttl;
	/*!< Print extra information. */
	bool	verbose;
	/*!< Print RRSIG original TTL instead of rrset TTL. */
	bool	original_ttl;
	/*!< Show empty TTL value (keep indentation). */
	bool	empty_ttl;
	/*!< Format TTL as DHMS. */
	bool	human_ttl;
	/*!< Format timestamp as YYYYMMDDHHmmSS. */
	bool	human_timestamp;
	/*!< Force generic data representation. */
	bool	generic;
	/*!< Hide binary parts of RRSIGs and DNSKEYs. */
	bool	hide_crypto;
	/*!< ASCII string to IDN string transformation callback. */
	void (*ascii_to_idn)(char **name);
	/*!< Optional color control sequence which is put before every output line.
	 *   Not compatible with wrap. */
	const char *color;
	/*!< Time context for correct > 32 bit timestamp conversion. */
	uint64_t now;
} knot_dump_style_t;

/*! \brief Default dump style. */
extern const knot_dump_style_t KNOT_DUMP_STYLE_DEFAULT;

/*!
 * \brief Dumps rrset header.
 *
 * \param rrset		RRset to dump.
 * \param ttl		TTL to dump.
 * \param dst		Output buffer.
 * \param maxlen	Output buffer size.
 * \param style		Output style.
 *
 * \retval output length	if success.
 * \retval < 0			if error.
 */
int knot_rrset_txt_dump_header(const knot_rrset_t      *rrset,
                               const uint32_t          ttl,
                               char                    *dst,
                               const size_t            maxlen,
                               const knot_dump_style_t *style);

/*!
 * \brief Dumps rrset data.
 *
 * \param rrset		RRset to dump.
 * \param pos		Position of the record to dump.
 * \param dst		Output buffer.
 * \param maxlen	Output buffer size.
 * \param style		Output style.
 *
 * \retval output length	if success.
 * \retval < 0			if error.
 */
int knot_rrset_txt_dump_data(const knot_rrset_t      *rrset,
                             const size_t            pos,
                             char                    *dst,
                             const size_t            maxlen,
                             const knot_dump_style_t *style);

/*!
 * \brief Dumps ENDS(0) OPT record.
 *
 * \param rrset		OPT record.
 * \param hdr_rcode	The four lower bits of RCODE from the message header.
 * 			If set to 0xffff, UNKNOWNRCODE### is dumped.
 * \param dst		Output buffer.
 * \param maxlen	Output buffer size.
 * \param style		Output style.
 *
 * \retval output length	if success.
 * \retval < 0			if error.
 */
int knot_rrset_txt_dump_edns(const knot_rrset_t      *rrset,
                             const uint16_t          hdr_rcode,
                             char                    *dst,
                             const size_t            maxlen,
                             const knot_dump_style_t *style);

/*!
 * \brief Dumps rrset, re-allocates dst to double (4x, 8x, ...) if too small.
 *
 * \param rrset		RRset to dump.
 * \param dst		Output buffer.
 * \param dst_size	Output buffer size (changed if *dst re-allocated).
 * \param style		Output style.
 *
 * \retval output length	if success.
 * \retval < 0			if error.
 */
int knot_rrset_txt_dump(const knot_rrset_t      *rrset,
                        char                    **dst,
                        size_t                  *dst_size,
                        const knot_dump_style_t *style);

/*! @} */