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);
/*! @} */
|