xref: /freebsd/contrib/unbound/sldns/wire2str.h (revision 09a3aaf3e0da92b656e895a499863628bd6f886e)
1*09a3aaf3SDag-Erling Smørgrav /**
2*09a3aaf3SDag-Erling Smørgrav  * wire2str.h -  txt presentation of RRs
3*09a3aaf3SDag-Erling Smørgrav  *
4*09a3aaf3SDag-Erling Smørgrav  * (c) NLnet Labs, 2005-2006
5*09a3aaf3SDag-Erling Smørgrav  *
6*09a3aaf3SDag-Erling Smørgrav  * See the file LICENSE for the license
7*09a3aaf3SDag-Erling Smørgrav  */
8*09a3aaf3SDag-Erling Smørgrav 
9*09a3aaf3SDag-Erling Smørgrav /**
10*09a3aaf3SDag-Erling Smørgrav  * \file
11*09a3aaf3SDag-Erling Smørgrav  *
12*09a3aaf3SDag-Erling Smørgrav  * Contains functions to translate the wireformat to text
13*09a3aaf3SDag-Erling Smørgrav  * representation, as well as functions to print them.
14*09a3aaf3SDag-Erling Smørgrav  */
15*09a3aaf3SDag-Erling Smørgrav 
16*09a3aaf3SDag-Erling Smørgrav #ifndef LDNS_WIRE2STR_H
17*09a3aaf3SDag-Erling Smørgrav #define LDNS_WIRE2STR_H
18*09a3aaf3SDag-Erling Smørgrav 
19*09a3aaf3SDag-Erling Smørgrav #ifdef __cplusplus
20*09a3aaf3SDag-Erling Smørgrav extern "C" {
21*09a3aaf3SDag-Erling Smørgrav #endif
22*09a3aaf3SDag-Erling Smørgrav struct sldns_struct_lookup_table;
23*09a3aaf3SDag-Erling Smørgrav 
24*09a3aaf3SDag-Erling Smørgrav /* lookup tables for standard DNS stuff  */
25*09a3aaf3SDag-Erling Smørgrav /** Taken from RFC 2535, section 7.  */
26*09a3aaf3SDag-Erling Smørgrav extern struct sldns_struct_lookup_table* sldns_algorithms;
27*09a3aaf3SDag-Erling Smørgrav /** DS record hash algorithms */
28*09a3aaf3SDag-Erling Smørgrav extern struct sldns_struct_lookup_table* sldns_hashes;
29*09a3aaf3SDag-Erling Smørgrav /** Taken from RFC 2538, section 2.1.  */
30*09a3aaf3SDag-Erling Smørgrav extern struct sldns_struct_lookup_table* sldns_cert_algorithms;
31*09a3aaf3SDag-Erling Smørgrav /** Response codes */
32*09a3aaf3SDag-Erling Smørgrav extern struct sldns_struct_lookup_table* sldns_rcodes;
33*09a3aaf3SDag-Erling Smørgrav /** Operation codes */
34*09a3aaf3SDag-Erling Smørgrav extern struct sldns_struct_lookup_table* sldns_opcodes;
35*09a3aaf3SDag-Erling Smørgrav /** EDNS flags */
36*09a3aaf3SDag-Erling Smørgrav extern struct sldns_struct_lookup_table* sldns_edns_flags;
37*09a3aaf3SDag-Erling Smørgrav /** EDNS option codes */
38*09a3aaf3SDag-Erling Smørgrav extern struct sldns_struct_lookup_table* sldns_edns_options;
39*09a3aaf3SDag-Erling Smørgrav /** error string from wireparse */
40*09a3aaf3SDag-Erling Smørgrav extern struct sldns_struct_lookup_table* sldns_wireparse_errors;
41*09a3aaf3SDag-Erling Smørgrav 
42*09a3aaf3SDag-Erling Smørgrav /**
43*09a3aaf3SDag-Erling Smørgrav  * Convert wireformat packet to a string representation
44*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat packet data (starting at ID bytes).
45*09a3aaf3SDag-Erling Smørgrav  * @param len: length of packet.
46*09a3aaf3SDag-Erling Smørgrav  * @return string(malloced) or NULL on failure.
47*09a3aaf3SDag-Erling Smørgrav  */
48*09a3aaf3SDag-Erling Smørgrav char* sldns_wire2str_pkt(uint8_t* data, size_t len);
49*09a3aaf3SDag-Erling Smørgrav 
50*09a3aaf3SDag-Erling Smørgrav /**
51*09a3aaf3SDag-Erling Smørgrav  * Convert wireformat RR to a string representation.
52*09a3aaf3SDag-Erling Smørgrav  * @param rr: the wireformat RR, in uncompressed form.  Starts at the domain
53*09a3aaf3SDag-Erling Smørgrav  * 	name start, ends with the rdata of the RR.
54*09a3aaf3SDag-Erling Smørgrav  * @param len: length of the rr wireformat.
55*09a3aaf3SDag-Erling Smørgrav  * @return string(malloced) or NULL on failure.
56*09a3aaf3SDag-Erling Smørgrav  */
57*09a3aaf3SDag-Erling Smørgrav char* sldns_wire2str_rr(uint8_t* rr, size_t len);
58*09a3aaf3SDag-Erling Smørgrav 
59*09a3aaf3SDag-Erling Smørgrav /**
60*09a3aaf3SDag-Erling Smørgrav  * Conver wire dname to a string.
61*09a3aaf3SDag-Erling Smørgrav  * @param dname: the dname in uncompressed wireformat.
62*09a3aaf3SDag-Erling Smørgrav  * @param dname_len: length of the dname.
63*09a3aaf3SDag-Erling Smørgrav  * @return string or NULL on failure.
64*09a3aaf3SDag-Erling Smørgrav  */
65*09a3aaf3SDag-Erling Smørgrav char* sldns_wire2str_dname(uint8_t* dname, size_t dname_len);
66*09a3aaf3SDag-Erling Smørgrav 
67*09a3aaf3SDag-Erling Smørgrav /**
68*09a3aaf3SDag-Erling Smørgrav  * Convert wire RR type to a string, 'MX', 'TYPE1234'...
69*09a3aaf3SDag-Erling Smørgrav  * @param rrtype: the RR type in host order.
70*09a3aaf3SDag-Erling Smørgrav  * @return malloced string with the RR type or NULL on malloc failure.
71*09a3aaf3SDag-Erling Smørgrav  */
72*09a3aaf3SDag-Erling Smørgrav char* sldns_wire2str_type(uint16_t rrtype);
73*09a3aaf3SDag-Erling Smørgrav 
74*09a3aaf3SDag-Erling Smørgrav /**
75*09a3aaf3SDag-Erling Smørgrav  * Convert wire RR class to a string, 'IN', 'CLASS1'.
76*09a3aaf3SDag-Erling Smørgrav  * @param rrclass: the RR class in host order.
77*09a3aaf3SDag-Erling Smørgrav  * @return malloced string with the RR class or NULL on malloc failure.
78*09a3aaf3SDag-Erling Smørgrav  */
79*09a3aaf3SDag-Erling Smørgrav char* sldns_wire2str_class(uint16_t rrclass);
80*09a3aaf3SDag-Erling Smørgrav 
81*09a3aaf3SDag-Erling Smørgrav /**
82*09a3aaf3SDag-Erling Smørgrav  * Convert wire packet rcode to a string, 'NOERROR', 'NXDOMAIN'...
83*09a3aaf3SDag-Erling Smørgrav  * @param rcode: as integer, host order
84*09a3aaf3SDag-Erling Smørgrav  * @return malloced string with the rcode or NULL on malloc failure.
85*09a3aaf3SDag-Erling Smørgrav  */
86*09a3aaf3SDag-Erling Smørgrav char* sldns_wire2str_rcode(int rcode);
87*09a3aaf3SDag-Erling Smørgrav 
88*09a3aaf3SDag-Erling Smørgrav /**
89*09a3aaf3SDag-Erling Smørgrav  * Print to string, move string along for next content. With va_list.
90*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.  Adjusted at end to after the output.
91*09a3aaf3SDag-Erling Smørgrav  * @param slen: length of the string buffer.  Adjusted at end.
92*09a3aaf3SDag-Erling Smørgrav  * @param format: printf format string.
93*09a3aaf3SDag-Erling Smørgrav  * @param args: arguments for printf.
94*09a3aaf3SDag-Erling Smørgrav  * @return number of characters needed. Can be larger than slen.
95*09a3aaf3SDag-Erling Smørgrav  */
96*09a3aaf3SDag-Erling Smørgrav int sldns_str_vprint(char** str, size_t* slen, const char* format, va_list args);
97*09a3aaf3SDag-Erling Smørgrav 
98*09a3aaf3SDag-Erling Smørgrav /**
99*09a3aaf3SDag-Erling Smørgrav  * Print to string, move string along for next content.
100*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.  Adjusted at end to after the output.
101*09a3aaf3SDag-Erling Smørgrav  * @param slen: length of the string buffer.  Adjusted at end.
102*09a3aaf3SDag-Erling Smørgrav  * @param format: printf format string and arguments for it.
103*09a3aaf3SDag-Erling Smørgrav  * @return number of characters needed. Can be larger than slen.
104*09a3aaf3SDag-Erling Smørgrav  */
105*09a3aaf3SDag-Erling Smørgrav int sldns_str_print(char** str, size_t* slen, const char* format, ...)
106*09a3aaf3SDag-Erling Smørgrav 	ATTR_FORMAT(printf, 3, 4);
107*09a3aaf3SDag-Erling Smørgrav 
108*09a3aaf3SDag-Erling Smørgrav /**
109*09a3aaf3SDag-Erling Smørgrav  * Convert wireformat packet to a string representation with user buffer
110*09a3aaf3SDag-Erling Smørgrav  * It appends every RR with default comments.
111*09a3aaf3SDag-Erling Smørgrav  * For more formatter options use the function: TBD(TODO)
112*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat packet data (starting at ID bytes).
113*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of packet.
114*09a3aaf3SDag-Erling Smørgrav  * @param str: the string buffer for the output.
115*09a3aaf3SDag-Erling Smørgrav  * 	If you pass NULL as the str the return value of the function is
116*09a3aaf3SDag-Erling Smørgrav  * 	the str_len you need for the entire packet.  It does not include
117*09a3aaf3SDag-Erling Smørgrav  * 	the 0 byte at the end.
118*09a3aaf3SDag-Erling Smørgrav  * @param str_len: the size of the string buffer.  If more is needed, it'll
119*09a3aaf3SDag-Erling Smørgrav  * 	silently truncate the output to fit in the buffer.
120*09a3aaf3SDag-Erling Smørgrav  * @return the number of characters for this element, excluding zerobyte.
121*09a3aaf3SDag-Erling Smørgrav  * 	Is larger than str_len if output was truncated.
122*09a3aaf3SDag-Erling Smørgrav  */
123*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_pkt_buf(uint8_t* data, size_t data_len, char* str,
124*09a3aaf3SDag-Erling Smørgrav 	size_t str_len);
125*09a3aaf3SDag-Erling Smørgrav 
126*09a3aaf3SDag-Erling Smørgrav /**
127*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat packet to a string representation with user buffer
128*09a3aaf3SDag-Erling Smørgrav  * It appends every RR with default comments.
129*09a3aaf3SDag-Erling Smørgrav  * For more formatter options use the function: TBD(TODO)
130*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat packet data (starting at ID bytes).
131*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of packet.
132*09a3aaf3SDag-Erling Smørgrav  * @param str: the string buffer for the output.
133*09a3aaf3SDag-Erling Smørgrav  * @param str_len: the size of the string buffer.
134*09a3aaf3SDag-Erling Smørgrav  * @return number of characters for string.
135*09a3aaf3SDag-Erling Smørgrav  * returns the number of characters that are needed (except terminating null),
136*09a3aaf3SDag-Erling Smørgrav  * so it may return a value larger than str_len.
137*09a3aaf3SDag-Erling Smørgrav  * On error you get less output (i.e. shorter output in str (null terminated))
138*09a3aaf3SDag-Erling Smørgrav  * On exit the data, data_len, str and str_len values are adjusted to move them
139*09a3aaf3SDag-Erling Smørgrav  * from their original position along the input and output for the content
140*09a3aaf3SDag-Erling Smørgrav  * that has been consumed (and produced) by this function.  If the end of the
141*09a3aaf3SDag-Erling Smørgrav  * output string is reached, *str_len is set to 0.  The output string is null
142*09a3aaf3SDag-Erling Smørgrav  * terminated (shortening the output if necessary).  If the end of the input
143*09a3aaf3SDag-Erling Smørgrav  * is reached *data_len is set to 0.
144*09a3aaf3SDag-Erling Smørgrav  */
145*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_pkt_scan(uint8_t** data, size_t* data_len, char** str,
146*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
147*09a3aaf3SDag-Erling Smørgrav 
148*09a3aaf3SDag-Erling Smørgrav /**
149*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat rr to string, with user buffers.  It shifts the arguments
150*09a3aaf3SDag-Erling Smørgrav  * to move along (see sldns_wire2str_pkt_scan).
151*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
152*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
153*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
154*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
155*09a3aaf3SDag-Erling Smørgrav  * @param pkt: packet for decompression, if NULL no decompression.
156*09a3aaf3SDag-Erling Smørgrav  * @param pktlen: length of packet buffer.
157*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
158*09a3aaf3SDag-Erling Smørgrav  */
159*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_rr_scan(uint8_t** data, size_t* data_len, char** str,
160*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len, uint8_t* pkt, size_t pktlen);
161*09a3aaf3SDag-Erling Smørgrav 
162*09a3aaf3SDag-Erling Smørgrav /**
163*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat question rr to string, with user buffers.
164*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
165*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
166*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
167*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
168*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
169*09a3aaf3SDag-Erling Smørgrav  * @param pkt: packet for decompression, if NULL no decompression.
170*09a3aaf3SDag-Erling Smørgrav  * @param pktlen: length of packet buffer.
171*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
172*09a3aaf3SDag-Erling Smørgrav  */
173*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_rrquestion_scan(uint8_t** data, size_t* data_len, char** str,
174*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len, uint8_t* pkt, size_t pktlen);
175*09a3aaf3SDag-Erling Smørgrav 
176*09a3aaf3SDag-Erling Smørgrav /**
177*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat RR to string in unknown RR format, with user buffers.
178*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
179*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
180*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
181*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
182*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
183*09a3aaf3SDag-Erling Smørgrav  * @param pkt: packet for decompression, if NULL no decompression.
184*09a3aaf3SDag-Erling Smørgrav  * @param pktlen: length of packet buffer.
185*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
186*09a3aaf3SDag-Erling Smørgrav  */
187*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_rr_unknown_scan(uint8_t** data, size_t* data_len, char** str,
188*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len, uint8_t* pkt, size_t pktlen);
189*09a3aaf3SDag-Erling Smørgrav 
190*09a3aaf3SDag-Erling Smørgrav /**
191*09a3aaf3SDag-Erling Smørgrav  * Print to string the RR-information comment in default format,
192*09a3aaf3SDag-Erling Smørgrav  * with user buffers.  Moves string along.
193*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
194*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
195*09a3aaf3SDag-Erling Smørgrav  * @param rr: wireformat data.
196*09a3aaf3SDag-Erling Smørgrav  * @param rrlen: length of data buffer.
197*09a3aaf3SDag-Erling Smørgrav  * @param dname_off: offset in buffer behind owner dname, the compressed size
198*09a3aaf3SDag-Erling Smørgrav  * 	of the owner name.
199*09a3aaf3SDag-Erling Smørgrav  * @param rrtype: type of the RR, host format.
200*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
201*09a3aaf3SDag-Erling Smørgrav  */
202*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_rr_comment_print(char** str, size_t* str_len, uint8_t* rr,
203*09a3aaf3SDag-Erling Smørgrav 	size_t rrlen, size_t dname_off, uint16_t rrtype);
204*09a3aaf3SDag-Erling Smørgrav 
205*09a3aaf3SDag-Erling Smørgrav /**
206*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat packet header to string, with user buffers.
207*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
208*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
209*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
210*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
211*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
212*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
213*09a3aaf3SDag-Erling Smørgrav  */
214*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_header_scan(uint8_t** data, size_t* data_len, char** str,
215*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
216*09a3aaf3SDag-Erling Smørgrav 
217*09a3aaf3SDag-Erling Smørgrav /**
218*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat rdata to string, with user buffers.
219*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
220*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
221*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.  The length of the rdata in the
222*09a3aaf3SDag-Erling Smørgrav  * 	buffer.  The rdatalen itself has already been scanned, the data
223*09a3aaf3SDag-Erling Smørgrav  * 	points to the rdata after the rdatalen.
224*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
225*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
226*09a3aaf3SDag-Erling Smørgrav  * @param rrtype: RR type of Rdata, host format.
227*09a3aaf3SDag-Erling Smørgrav  * @param pkt: packet for decompression, if NULL no decompression.
228*09a3aaf3SDag-Erling Smørgrav  * @param pktlen: length of packet buffer.
229*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
230*09a3aaf3SDag-Erling Smørgrav  */
231*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_rdata_scan(uint8_t** data, size_t* data_len, char** str,
232*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len, uint16_t rrtype, uint8_t* pkt, size_t pktlen);
233*09a3aaf3SDag-Erling Smørgrav 
234*09a3aaf3SDag-Erling Smørgrav /**
235*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat rdata to string in unknown format, with user buffers.
236*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
237*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
238*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer, the length of the rdata in buffer.
239*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
240*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
241*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
242*09a3aaf3SDag-Erling Smørgrav  */
243*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_rdata_unknown_scan(uint8_t** data, size_t* data_len,
244*09a3aaf3SDag-Erling Smørgrav 	char** str, size_t* str_len);
245*09a3aaf3SDag-Erling Smørgrav 
246*09a3aaf3SDag-Erling Smørgrav /**
247*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat domain name to string, with user buffers.
248*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
249*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
250*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
251*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
252*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
253*09a3aaf3SDag-Erling Smørgrav  * @param pkt: packet for decompression, if NULL no decompression.
254*09a3aaf3SDag-Erling Smørgrav  * @param pktlen: length of packet buffer.
255*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
256*09a3aaf3SDag-Erling Smørgrav  */
257*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_dname_scan(uint8_t** data, size_t* data_len, char** str,
258*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len, uint8_t* pkt, size_t pktlen);
259*09a3aaf3SDag-Erling Smørgrav 
260*09a3aaf3SDag-Erling Smørgrav /**
261*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat rr type to string, with user buffers.
262*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
263*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
264*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
265*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
266*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
267*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
268*09a3aaf3SDag-Erling Smørgrav  */
269*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_type_scan(uint8_t** data, size_t* data_len, char** str,
270*09a3aaf3SDag-Erling Smørgrav         size_t* str_len);
271*09a3aaf3SDag-Erling Smørgrav 
272*09a3aaf3SDag-Erling Smørgrav /**
273*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat rr class to string, with user buffers.
274*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
275*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
276*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
277*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
278*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
279*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
280*09a3aaf3SDag-Erling Smørgrav  */
281*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_class_scan(uint8_t** data, size_t* data_len, char** str,
282*09a3aaf3SDag-Erling Smørgrav         size_t* str_len);
283*09a3aaf3SDag-Erling Smørgrav 
284*09a3aaf3SDag-Erling Smørgrav /**
285*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat rr ttl to string, with user buffers.
286*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
287*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
288*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
289*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
290*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
291*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
292*09a3aaf3SDag-Erling Smørgrav  */
293*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_ttl_scan(uint8_t** data, size_t* data_len, char** str,
294*09a3aaf3SDag-Erling Smørgrav         size_t* str_len);
295*09a3aaf3SDag-Erling Smørgrav 
296*09a3aaf3SDag-Erling Smørgrav 
297*09a3aaf3SDag-Erling Smørgrav /**
298*09a3aaf3SDag-Erling Smørgrav  * Print host format rr type to string.  Moves string along, user buffers.
299*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
300*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
301*09a3aaf3SDag-Erling Smørgrav  * @param rrtype: host format rr type.
302*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
303*09a3aaf3SDag-Erling Smørgrav  */
304*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_type_print(char** str, size_t* str_len, uint16_t rrtype);
305*09a3aaf3SDag-Erling Smørgrav 
306*09a3aaf3SDag-Erling Smørgrav /**
307*09a3aaf3SDag-Erling Smørgrav  * Print host format rr class to string.  Moves string along, user buffers.
308*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
309*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
310*09a3aaf3SDag-Erling Smørgrav  * @param rrclass: host format rr class.
311*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
312*09a3aaf3SDag-Erling Smørgrav  */
313*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_class_print(char** str, size_t* str_len, uint16_t rrclass);
314*09a3aaf3SDag-Erling Smørgrav 
315*09a3aaf3SDag-Erling Smørgrav /**
316*09a3aaf3SDag-Erling Smørgrav  * Print host format rcode to string.  Moves string along, user buffers.
317*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
318*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
319*09a3aaf3SDag-Erling Smørgrav  * @param rcode: host format rcode number.
320*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
321*09a3aaf3SDag-Erling Smørgrav  */
322*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_rcode_print(char** str, size_t* str_len, int rcode);
323*09a3aaf3SDag-Erling Smørgrav 
324*09a3aaf3SDag-Erling Smørgrav /**
325*09a3aaf3SDag-Erling Smørgrav  * Print host format opcode to string.  Moves string along, user buffers.
326*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
327*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
328*09a3aaf3SDag-Erling Smørgrav  * @param opcode: host format opcode number.
329*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
330*09a3aaf3SDag-Erling Smørgrav  */
331*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_opcode_print(char** str, size_t* str_len, int opcode);
332*09a3aaf3SDag-Erling Smørgrav 
333*09a3aaf3SDag-Erling Smørgrav /**
334*09a3aaf3SDag-Erling Smørgrav  * Print host format EDNS0 option to string.  Moves string along, user buffers.
335*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
336*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
337*09a3aaf3SDag-Erling Smørgrav  * @param opcode: host format option number.
338*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
339*09a3aaf3SDag-Erling Smørgrav  */
340*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_edns_option_code_print(char** str, size_t* str_len,
341*09a3aaf3SDag-Erling Smørgrav 	uint16_t opcode);
342*09a3aaf3SDag-Erling Smørgrav 
343*09a3aaf3SDag-Erling Smørgrav /**
344*09a3aaf3SDag-Erling Smørgrav  * Convert RR to string presentation format, on one line.  User buffer.
345*09a3aaf3SDag-Erling Smørgrav  * @param rr: wireformat RR data
346*09a3aaf3SDag-Erling Smørgrav  * @param rr_len: length of the rr wire data.
347*09a3aaf3SDag-Erling Smørgrav  * @param str: the string buffer to write to.
348*09a3aaf3SDag-Erling Smørgrav  * 	If you pass NULL as the str, the return value of the function is
349*09a3aaf3SDag-Erling Smørgrav  * 	the str_len you need for the entire packet.  It does not include
350*09a3aaf3SDag-Erling Smørgrav  * 	the 0 byte at the end.
351*09a3aaf3SDag-Erling Smørgrav  * @param str_len: the size of the string buffer.  If more is needed, it'll
352*09a3aaf3SDag-Erling Smørgrav  * 	silently truncate the output to fit in the buffer.
353*09a3aaf3SDag-Erling Smørgrav  * @return the number of characters for this element, excluding zerobyte.
354*09a3aaf3SDag-Erling Smørgrav  * 	Is larger than str_len if output was truncated.
355*09a3aaf3SDag-Erling Smørgrav  */
356*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_rr_buf(uint8_t* rr, size_t rr_len, char* str,
357*09a3aaf3SDag-Erling Smørgrav 	size_t str_len);
358*09a3aaf3SDag-Erling Smørgrav 
359*09a3aaf3SDag-Erling Smørgrav /**
360*09a3aaf3SDag-Erling Smørgrav  * 3597 printout of an RR in unknown rr format.
361*09a3aaf3SDag-Erling Smørgrav  * There are more format and comment options available for printout
362*09a3aaf3SDag-Erling Smørgrav  * with the function: TBD(TODO)
363*09a3aaf3SDag-Erling Smørgrav  * @param rr: wireformat RR data
364*09a3aaf3SDag-Erling Smørgrav  * @param rr_len: length of the rr wire data.
365*09a3aaf3SDag-Erling Smørgrav  * @param str: the string buffer to write to.
366*09a3aaf3SDag-Erling Smørgrav  * 	If you pass NULL as the str, the return value of the function is
367*09a3aaf3SDag-Erling Smørgrav  * 	the str_len you need for the entire rr.  It does not include
368*09a3aaf3SDag-Erling Smørgrav  * 	the 0 byte at the end.
369*09a3aaf3SDag-Erling Smørgrav  * @param str_len: the size of the string buffer.  If more is needed, it'll
370*09a3aaf3SDag-Erling Smørgrav  * 	silently truncate the output to fit in the buffer.
371*09a3aaf3SDag-Erling Smørgrav  * @return the number of characters for this element, excluding zerobyte.
372*09a3aaf3SDag-Erling Smørgrav  * 	Is larger than str_len if output was truncated.
373*09a3aaf3SDag-Erling Smørgrav  */
374*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_rr_unknown_buf(uint8_t* rr, size_t rr_len, char* str,
375*09a3aaf3SDag-Erling Smørgrav 	size_t str_len);
376*09a3aaf3SDag-Erling Smørgrav 
377*09a3aaf3SDag-Erling Smørgrav /**
378*09a3aaf3SDag-Erling Smørgrav  * This creates the comment to print after the RR. ; keytag=... , and other
379*09a3aaf3SDag-Erling Smørgrav  * basic comments for RRs.
380*09a3aaf3SDag-Erling Smørgrav  * There are more format and comment options available for printout
381*09a3aaf3SDag-Erling Smørgrav  * with the function: TBD(TODO)
382*09a3aaf3SDag-Erling Smørgrav  * @param rr: wireformat RR data
383*09a3aaf3SDag-Erling Smørgrav  * @param rr_len: length of the rr wire data.
384*09a3aaf3SDag-Erling Smørgrav  * @param dname_len: length of the dname in front of the RR.
385*09a3aaf3SDag-Erling Smørgrav  * @param str: the string buffer to write to.
386*09a3aaf3SDag-Erling Smørgrav  * 	If you pass NULL as the str, the return value of the function is
387*09a3aaf3SDag-Erling Smørgrav  * 	the str_len you need for the entire comment.  It does not include
388*09a3aaf3SDag-Erling Smørgrav  * 	the 0 byte at the end.
389*09a3aaf3SDag-Erling Smørgrav  * @param str_len: the size of the string buffer.  If more is needed, it'll
390*09a3aaf3SDag-Erling Smørgrav  * 	silently truncate the output to fit in the buffer.
391*09a3aaf3SDag-Erling Smørgrav  * @return the number of characters for this element, excluding zerobyte.
392*09a3aaf3SDag-Erling Smørgrav  * 	Is larger than str_len if output was truncated.
393*09a3aaf3SDag-Erling Smørgrav  */
394*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_rr_comment_buf(uint8_t* rr, size_t rr_len, size_t dname_len,
395*09a3aaf3SDag-Erling Smørgrav 	char* str, size_t str_len);
396*09a3aaf3SDag-Erling Smørgrav 
397*09a3aaf3SDag-Erling Smørgrav /**
398*09a3aaf3SDag-Erling Smørgrav  * Convert RDATA to string presentation format, on one line.  User buffer.
399*09a3aaf3SDag-Erling Smørgrav  * @param rdata: wireformat rdata part of an RR.
400*09a3aaf3SDag-Erling Smørgrav  * @param rdata_len: length of the rr wire data.
401*09a3aaf3SDag-Erling Smørgrav  * @param str: the string buffer to write to.
402*09a3aaf3SDag-Erling Smørgrav  * 	If you pass NULL as the str, the return value of the function is
403*09a3aaf3SDag-Erling Smørgrav  * 	the str_len you need for the entire packet.  It does not include
404*09a3aaf3SDag-Erling Smørgrav  * 	the 0 byte at the end.
405*09a3aaf3SDag-Erling Smørgrav  * @param str_len: the size of the string buffer.  If more is needed, it'll
406*09a3aaf3SDag-Erling Smørgrav  * 	silently truncate the output to fit in the buffer.
407*09a3aaf3SDag-Erling Smørgrav  * @param rrtype: rr type of the data
408*09a3aaf3SDag-Erling Smørgrav  * @return the number of characters for this element, excluding zerobyte.
409*09a3aaf3SDag-Erling Smørgrav  * 	Is larger than str_len if output was truncated.
410*09a3aaf3SDag-Erling Smørgrav  */
411*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_rdata_buf(uint8_t* rdata, size_t rdata_len, char* str,
412*09a3aaf3SDag-Erling Smørgrav 	size_t str_len, uint16_t rrtype);
413*09a3aaf3SDag-Erling Smørgrav 
414*09a3aaf3SDag-Erling Smørgrav /**
415*09a3aaf3SDag-Erling Smørgrav  * Convert wire RR type to a string, 'MX', 'TYPE12'.  With user buffer.
416*09a3aaf3SDag-Erling Smørgrav  * @param rrtype: the RR type in host order.
417*09a3aaf3SDag-Erling Smørgrav  * @param str: the string to write to.
418*09a3aaf3SDag-Erling Smørgrav  * @param len: length of str.
419*09a3aaf3SDag-Erling Smørgrav  * @return the number of characters for this element, excluding zerobyte.
420*09a3aaf3SDag-Erling Smørgrav  * 	Is larger than str_len if output was truncated.
421*09a3aaf3SDag-Erling Smørgrav  */
422*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_type_buf(uint16_t rrtype, char* str, size_t len);
423*09a3aaf3SDag-Erling Smørgrav 
424*09a3aaf3SDag-Erling Smørgrav /**
425*09a3aaf3SDag-Erling Smørgrav  * Convert wire RR class to a string, 'IN', 'CLASS12'.  With user buffer.
426*09a3aaf3SDag-Erling Smørgrav  * @param rrclass: the RR class in host order.
427*09a3aaf3SDag-Erling Smørgrav  * @param str: the string to write to.
428*09a3aaf3SDag-Erling Smørgrav  * @param len: length of str.
429*09a3aaf3SDag-Erling Smørgrav  * @return the number of characters for this element, excluding zerobyte.
430*09a3aaf3SDag-Erling Smørgrav  * 	Is larger than str_len if output was truncated.
431*09a3aaf3SDag-Erling Smørgrav  */
432*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_class_buf(uint16_t rrclass, char* str, size_t len);
433*09a3aaf3SDag-Erling Smørgrav 
434*09a3aaf3SDag-Erling Smørgrav /**
435*09a3aaf3SDag-Erling Smørgrav  * Convert wire RR rcode to a string, 'NOERROR', 'NXDOMAIN'.  With user buffer.
436*09a3aaf3SDag-Erling Smørgrav  * @param rcode: rcode as integer in host order
437*09a3aaf3SDag-Erling Smørgrav  * @param str: the string to write to.
438*09a3aaf3SDag-Erling Smørgrav  * @param len: length of str.
439*09a3aaf3SDag-Erling Smørgrav  * @return the number of characters for this element, excluding zerobyte.
440*09a3aaf3SDag-Erling Smørgrav  * 	Is larger than str_len if output was truncated.
441*09a3aaf3SDag-Erling Smørgrav  */
442*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_rcode_buf(int rcode, char* str, size_t len);
443*09a3aaf3SDag-Erling Smørgrav 
444*09a3aaf3SDag-Erling Smørgrav /**
445*09a3aaf3SDag-Erling Smørgrav  * Convert wire dname to a string, "example.com.".  With user buffer.
446*09a3aaf3SDag-Erling Smørgrav  * @param dname: the dname in uncompressed wireformat.
447*09a3aaf3SDag-Erling Smørgrav  * @param dname_len: length of the dname.
448*09a3aaf3SDag-Erling Smørgrav  * @param str: the string to write to.
449*09a3aaf3SDag-Erling Smørgrav  * @param len: length of string.
450*09a3aaf3SDag-Erling Smørgrav  * @return the number of characters for this element, excluding zerobyte.
451*09a3aaf3SDag-Erling Smørgrav  * 	Is larger than str_len if output was truncated.
452*09a3aaf3SDag-Erling Smørgrav  */
453*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_dname_buf(uint8_t* dname, size_t dname_len, char* str,
454*09a3aaf3SDag-Erling Smørgrav 	size_t len);
455*09a3aaf3SDag-Erling Smørgrav 
456*09a3aaf3SDag-Erling Smørgrav /**
457*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat rdf field to string, with user buffers.
458*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
459*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
460*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
461*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
462*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
463*09a3aaf3SDag-Erling Smørgrav  * @param rdftype: the type of the rdata field, enum sldns_rdf_type.
464*09a3aaf3SDag-Erling Smørgrav  * @param pkt: packet for decompression, if NULL no decompression.
465*09a3aaf3SDag-Erling Smørgrav  * @param pktlen: length of packet buffer.
466*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
467*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
468*09a3aaf3SDag-Erling Smørgrav  */
469*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_rdf_scan(uint8_t** data, size_t* data_len, char** str,
470*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len, int rdftype, uint8_t* pkt, size_t pktlen);
471*09a3aaf3SDag-Erling Smørgrav 
472*09a3aaf3SDag-Erling Smørgrav /**
473*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat int8 field to string, with user buffers.
474*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
475*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
476*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
477*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
478*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
479*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
480*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
481*09a3aaf3SDag-Erling Smørgrav  */
482*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_int8_scan(uint8_t** data, size_t* data_len, char** str,
483*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
484*09a3aaf3SDag-Erling Smørgrav 
485*09a3aaf3SDag-Erling Smørgrav /**
486*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat int16 field to string, with user buffers.
487*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
488*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
489*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
490*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
491*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
492*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
493*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
494*09a3aaf3SDag-Erling Smørgrav  */
495*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_int16_scan(uint8_t** data, size_t* data_len, char** str,
496*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
497*09a3aaf3SDag-Erling Smørgrav 
498*09a3aaf3SDag-Erling Smørgrav /**
499*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat int32 field to string, with user buffers.
500*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
501*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
502*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
503*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
504*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
505*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
506*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
507*09a3aaf3SDag-Erling Smørgrav  */
508*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_int32_scan(uint8_t** data, size_t* data_len, char** str,
509*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
510*09a3aaf3SDag-Erling Smørgrav 
511*09a3aaf3SDag-Erling Smørgrav /**
512*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat period field to string, with user buffers.
513*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
514*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
515*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
516*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
517*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
518*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
519*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
520*09a3aaf3SDag-Erling Smørgrav  */
521*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_period_scan(uint8_t** data, size_t* data_len, char** str,
522*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
523*09a3aaf3SDag-Erling Smørgrav 
524*09a3aaf3SDag-Erling Smørgrav /**
525*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat tsigtime field to string, with user buffers.
526*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
527*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
528*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
529*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
530*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
531*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
532*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
533*09a3aaf3SDag-Erling Smørgrav  */
534*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_tsigtime_scan(uint8_t** data, size_t* data_len, char** str,
535*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
536*09a3aaf3SDag-Erling Smørgrav 
537*09a3aaf3SDag-Erling Smørgrav /**
538*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat ip4 A field to string, with user buffers.
539*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
540*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
541*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
542*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
543*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
544*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
545*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
546*09a3aaf3SDag-Erling Smørgrav  */
547*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_a_scan(uint8_t** data, size_t* data_len, char** str,
548*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
549*09a3aaf3SDag-Erling Smørgrav 
550*09a3aaf3SDag-Erling Smørgrav /**
551*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat ip6 AAAA field to string, with user buffers.
552*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
553*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
554*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
555*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
556*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
557*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
558*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
559*09a3aaf3SDag-Erling Smørgrav  */
560*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_aaaa_scan(uint8_t** data, size_t* data_len, char** str,
561*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
562*09a3aaf3SDag-Erling Smørgrav 
563*09a3aaf3SDag-Erling Smørgrav /**
564*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat str field to string, with user buffers.
565*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
566*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
567*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
568*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
569*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
570*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
571*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
572*09a3aaf3SDag-Erling Smørgrav  */
573*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_str_scan(uint8_t** data, size_t* data_len, char** str,
574*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
575*09a3aaf3SDag-Erling Smørgrav 
576*09a3aaf3SDag-Erling Smørgrav /**
577*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat apl field to string, with user buffers.
578*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
579*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
580*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
581*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
582*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
583*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
584*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
585*09a3aaf3SDag-Erling Smørgrav  */
586*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_apl_scan(uint8_t** data, size_t* data_len, char** str,
587*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
588*09a3aaf3SDag-Erling Smørgrav 
589*09a3aaf3SDag-Erling Smørgrav /**
590*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat b32_ext field to string, with user buffers.
591*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
592*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
593*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
594*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
595*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
596*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
597*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
598*09a3aaf3SDag-Erling Smørgrav  */
599*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_b32_ext_scan(uint8_t** data, size_t* data_len, char** str,
600*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
601*09a3aaf3SDag-Erling Smørgrav 
602*09a3aaf3SDag-Erling Smørgrav /**
603*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat b64 field to string, with user buffers.
604*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
605*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
606*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
607*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
608*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
609*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
610*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
611*09a3aaf3SDag-Erling Smørgrav  */
612*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_b64_scan(uint8_t** data, size_t* data_len, char** str,
613*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
614*09a3aaf3SDag-Erling Smørgrav 
615*09a3aaf3SDag-Erling Smørgrav /**
616*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat hex field to string, with user buffers.
617*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
618*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
619*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
620*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
621*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
622*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
623*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
624*09a3aaf3SDag-Erling Smørgrav  */
625*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_hex_scan(uint8_t** data, size_t* data_len, char** str,
626*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
627*09a3aaf3SDag-Erling Smørgrav 
628*09a3aaf3SDag-Erling Smørgrav /**
629*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat nsec bitmap field to string, with user buffers.
630*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
631*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
632*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
633*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
634*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
635*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
636*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
637*09a3aaf3SDag-Erling Smørgrav  */
638*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_nsec_scan(uint8_t** data, size_t* data_len, char** str,
639*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
640*09a3aaf3SDag-Erling Smørgrav 
641*09a3aaf3SDag-Erling Smørgrav /**
642*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat nsec3_salt field to string, with user buffers.
643*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
644*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
645*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
646*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
647*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
648*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
649*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
650*09a3aaf3SDag-Erling Smørgrav  */
651*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_nsec3_salt_scan(uint8_t** data, size_t* data_len, char** str,
652*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
653*09a3aaf3SDag-Erling Smørgrav 
654*09a3aaf3SDag-Erling Smørgrav /**
655*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat cert_alg field to string, with user buffers.
656*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
657*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
658*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
659*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
660*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
661*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
662*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
663*09a3aaf3SDag-Erling Smørgrav  */
664*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_cert_alg_scan(uint8_t** data, size_t* data_len, char** str,
665*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
666*09a3aaf3SDag-Erling Smørgrav 
667*09a3aaf3SDag-Erling Smørgrav /**
668*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat alg field to string, with user buffers.
669*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
670*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
671*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
672*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
673*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
674*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
675*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
676*09a3aaf3SDag-Erling Smørgrav  */
677*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_alg_scan(uint8_t** data, size_t* data_len, char** str,
678*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
679*09a3aaf3SDag-Erling Smørgrav 
680*09a3aaf3SDag-Erling Smørgrav /**
681*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat type unknown field to string, with user buffers.
682*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
683*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
684*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
685*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
686*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
687*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
688*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
689*09a3aaf3SDag-Erling Smørgrav  */
690*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_unknown_scan(uint8_t** data, size_t* data_len, char** str,
691*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
692*09a3aaf3SDag-Erling Smørgrav 
693*09a3aaf3SDag-Erling Smørgrav /**
694*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat time field to string, with user buffers.
695*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
696*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
697*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
698*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
699*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
700*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
701*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
702*09a3aaf3SDag-Erling Smørgrav  */
703*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_time_scan(uint8_t** data, size_t* data_len, char** str,
704*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
705*09a3aaf3SDag-Erling Smørgrav 
706*09a3aaf3SDag-Erling Smørgrav /**
707*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat LOC field to string, with user buffers.
708*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
709*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
710*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
711*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
712*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
713*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
714*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
715*09a3aaf3SDag-Erling Smørgrav  */
716*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_loc_scan(uint8_t** data, size_t* data_len, char** str,
717*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
718*09a3aaf3SDag-Erling Smørgrav 
719*09a3aaf3SDag-Erling Smørgrav /**
720*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat WKS field to string, with user buffers.
721*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
722*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
723*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
724*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
725*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
726*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
727*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
728*09a3aaf3SDag-Erling Smørgrav  */
729*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_wks_scan(uint8_t** data, size_t* data_len, char** str,
730*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
731*09a3aaf3SDag-Erling Smørgrav 
732*09a3aaf3SDag-Erling Smørgrav /**
733*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat NSAP field to string, with user buffers.
734*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
735*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
736*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
737*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
738*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
739*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
740*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
741*09a3aaf3SDag-Erling Smørgrav  */
742*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_nsap_scan(uint8_t** data, size_t* data_len, char** str,
743*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
744*09a3aaf3SDag-Erling Smørgrav 
745*09a3aaf3SDag-Erling Smørgrav /**
746*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat ATMA field to string, with user buffers.
747*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
748*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
749*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
750*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
751*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
752*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
753*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
754*09a3aaf3SDag-Erling Smørgrav  */
755*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_atma_scan(uint8_t** data, size_t* data_len, char** str,
756*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
757*09a3aaf3SDag-Erling Smørgrav 
758*09a3aaf3SDag-Erling Smørgrav /**
759*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat IPSECKEY field to string, with user buffers.
760*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
761*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
762*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
763*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
764*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
765*09a3aaf3SDag-Erling Smørgrav  * @param pkt: packet for decompression, if NULL no decompression.
766*09a3aaf3SDag-Erling Smørgrav  * @param pktlen: length of packet buffer.
767*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
768*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
769*09a3aaf3SDag-Erling Smørgrav  */
770*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_ipseckey_scan(uint8_t** data, size_t* data_len, char** str,
771*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len, uint8_t* pkt, size_t pktlen);
772*09a3aaf3SDag-Erling Smørgrav 
773*09a3aaf3SDag-Erling Smørgrav /**
774*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat HIP (algo, HIT, pubkey) field to string, with user buffers.
775*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
776*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
777*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
778*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
779*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
780*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
781*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
782*09a3aaf3SDag-Erling Smørgrav  */
783*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_hip_scan(uint8_t** data, size_t* data_len, char** str,
784*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
785*09a3aaf3SDag-Erling Smørgrav 
786*09a3aaf3SDag-Erling Smørgrav /**
787*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat int16_data field to string, with user buffers.
788*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
789*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
790*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
791*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
792*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
793*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
794*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
795*09a3aaf3SDag-Erling Smørgrav  */
796*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_int16_data_scan(uint8_t** data, size_t* data_len, char** str,
797*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
798*09a3aaf3SDag-Erling Smørgrav 
799*09a3aaf3SDag-Erling Smørgrav /**
800*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat nsec3_next_owner field to string, with user buffers.
801*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
802*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
803*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
804*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
805*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
806*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
807*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
808*09a3aaf3SDag-Erling Smørgrav  */
809*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_nsec3_next_owner_scan(uint8_t** data, size_t* data_len,
810*09a3aaf3SDag-Erling Smørgrav 	char** str, size_t* str_len);
811*09a3aaf3SDag-Erling Smørgrav 
812*09a3aaf3SDag-Erling Smørgrav /**
813*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat ILNP64 field to string, with user buffers.
814*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
815*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
816*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
817*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
818*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
819*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
820*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
821*09a3aaf3SDag-Erling Smørgrav  */
822*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_ilnp64_scan(uint8_t** data, size_t* data_len, char** str,
823*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
824*09a3aaf3SDag-Erling Smørgrav 
825*09a3aaf3SDag-Erling Smørgrav /**
826*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat EUI48 field to string, with user buffers.
827*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
828*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
829*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
830*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
831*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
832*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
833*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
834*09a3aaf3SDag-Erling Smørgrav  */
835*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_eui48_scan(uint8_t** data, size_t* data_len, char** str,
836*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
837*09a3aaf3SDag-Erling Smørgrav 
838*09a3aaf3SDag-Erling Smørgrav /**
839*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat EUI64 field to string, with user buffers.
840*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
841*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
842*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
843*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
844*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
845*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
846*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
847*09a3aaf3SDag-Erling Smørgrav  */
848*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_eui64_scan(uint8_t** data, size_t* data_len, char** str,
849*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
850*09a3aaf3SDag-Erling Smørgrav 
851*09a3aaf3SDag-Erling Smørgrav /**
852*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat TAG field to string, with user buffers.
853*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
854*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
855*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
856*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
857*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
858*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
859*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
860*09a3aaf3SDag-Erling Smørgrav  */
861*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_tag_scan(uint8_t** data, size_t* data_len, char** str,
862*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
863*09a3aaf3SDag-Erling Smørgrav 
864*09a3aaf3SDag-Erling Smørgrav /**
865*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat long_str field to string, with user buffers.
866*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
867*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
868*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
869*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
870*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
871*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
872*09a3aaf3SDag-Erling Smørgrav  * 	Can return -1 on failure.
873*09a3aaf3SDag-Erling Smørgrav  */
874*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_long_str_scan(uint8_t** data, size_t* data_len, char** str,
875*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len);
876*09a3aaf3SDag-Erling Smørgrav 
877*09a3aaf3SDag-Erling Smørgrav /**
878*09a3aaf3SDag-Erling Smørgrav  * Print EDNS LLQ option data to string.  User buffers, moves string pointers.
879*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
880*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
881*09a3aaf3SDag-Erling Smørgrav  * @param option_data: buffer with EDNS option code data.
882*09a3aaf3SDag-Erling Smørgrav  * @param option_len: length of the data for this option.
883*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
884*09a3aaf3SDag-Erling Smørgrav  */
885*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_edns_llq_print(char** str, size_t* str_len,
886*09a3aaf3SDag-Erling Smørgrav 	uint8_t* option_data, size_t option_len);
887*09a3aaf3SDag-Erling Smørgrav 
888*09a3aaf3SDag-Erling Smørgrav /**
889*09a3aaf3SDag-Erling Smørgrav  * Print EDNS UL option data to string.  User buffers, moves string pointers.
890*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
891*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
892*09a3aaf3SDag-Erling Smørgrav  * @param option_data: buffer with EDNS option code data.
893*09a3aaf3SDag-Erling Smørgrav  * @param option_len: length of the data for this option.
894*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
895*09a3aaf3SDag-Erling Smørgrav  */
896*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_edns_ul_print(char** str, size_t* str_len,
897*09a3aaf3SDag-Erling Smørgrav 	uint8_t* option_data, size_t option_len);
898*09a3aaf3SDag-Erling Smørgrav 
899*09a3aaf3SDag-Erling Smørgrav /**
900*09a3aaf3SDag-Erling Smørgrav  * Print EDNS NSID option data to string.  User buffers, moves string pointers.
901*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
902*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
903*09a3aaf3SDag-Erling Smørgrav  * @param option_data: buffer with EDNS option code data.
904*09a3aaf3SDag-Erling Smørgrav  * @param option_len: length of the data for this option.
905*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
906*09a3aaf3SDag-Erling Smørgrav  */
907*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_edns_nsid_print(char** str, size_t* str_len,
908*09a3aaf3SDag-Erling Smørgrav 	uint8_t* option_data, size_t option_len);
909*09a3aaf3SDag-Erling Smørgrav 
910*09a3aaf3SDag-Erling Smørgrav /**
911*09a3aaf3SDag-Erling Smørgrav  * Print EDNS DAU option data to string.  User buffers, moves string pointers.
912*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
913*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
914*09a3aaf3SDag-Erling Smørgrav  * @param option_data: buffer with EDNS option code data.
915*09a3aaf3SDag-Erling Smørgrav  * @param option_len: length of the data for this option.
916*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
917*09a3aaf3SDag-Erling Smørgrav  */
918*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_edns_dau_print(char** str, size_t* str_len,
919*09a3aaf3SDag-Erling Smørgrav 	uint8_t* option_data, size_t option_len);
920*09a3aaf3SDag-Erling Smørgrav 
921*09a3aaf3SDag-Erling Smørgrav /**
922*09a3aaf3SDag-Erling Smørgrav  * Print EDNS DHU option data to string.  User buffers, moves string pointers.
923*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
924*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
925*09a3aaf3SDag-Erling Smørgrav  * @param option_data: buffer with EDNS option code data.
926*09a3aaf3SDag-Erling Smørgrav  * @param option_len: length of the data for this option.
927*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
928*09a3aaf3SDag-Erling Smørgrav  */
929*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_edns_dhu_print(char** str, size_t* str_len,
930*09a3aaf3SDag-Erling Smørgrav 	uint8_t* option_data, size_t option_len);
931*09a3aaf3SDag-Erling Smørgrav 
932*09a3aaf3SDag-Erling Smørgrav /**
933*09a3aaf3SDag-Erling Smørgrav  * Print EDNS N3U option data to string.  User buffers, moves string pointers.
934*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
935*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
936*09a3aaf3SDag-Erling Smørgrav  * @param option_data: buffer with EDNS option code data.
937*09a3aaf3SDag-Erling Smørgrav  * @param option_len: length of the data for this option.
938*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
939*09a3aaf3SDag-Erling Smørgrav  */
940*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_edns_n3u_print(char** str, size_t* str_len,
941*09a3aaf3SDag-Erling Smørgrav 	uint8_t* option_data, size_t option_len);
942*09a3aaf3SDag-Erling Smørgrav 
943*09a3aaf3SDag-Erling Smørgrav /**
944*09a3aaf3SDag-Erling Smørgrav  * Print EDNS SUBNET option data to string. User buffers, moves string pointers.
945*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
946*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
947*09a3aaf3SDag-Erling Smørgrav  * @param option_data: buffer with EDNS option code data.
948*09a3aaf3SDag-Erling Smørgrav  * @param option_len: length of the data for this option.
949*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
950*09a3aaf3SDag-Erling Smørgrav  */
951*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_edns_subnet_print(char** str, size_t* str_len,
952*09a3aaf3SDag-Erling Smørgrav 	uint8_t* option_data, size_t option_len);
953*09a3aaf3SDag-Erling Smørgrav 
954*09a3aaf3SDag-Erling Smørgrav /**
955*09a3aaf3SDag-Erling Smørgrav  * Print an EDNS option as OPT: VALUE.  User buffers, moves string pointers.
956*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
957*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
958*09a3aaf3SDag-Erling Smørgrav  * @param option_code: host format EDNS option code.
959*09a3aaf3SDag-Erling Smørgrav  * @param option_data: buffer with EDNS option code data.
960*09a3aaf3SDag-Erling Smørgrav  * @param option_len: length of the data for this option.
961*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
962*09a3aaf3SDag-Erling Smørgrav  */
963*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_edns_option_print(char** str, size_t* str_len,
964*09a3aaf3SDag-Erling Smørgrav 	uint16_t option_code, uint8_t* option_data, size_t option_len);
965*09a3aaf3SDag-Erling Smørgrav 
966*09a3aaf3SDag-Erling Smørgrav /**
967*09a3aaf3SDag-Erling Smørgrav  * Scan wireformat EDNS OPT to string, with user buffers.
968*09a3aaf3SDag-Erling Smørgrav  * It shifts the arguments to move along (see sldns_wire2str_pkt_scan).
969*09a3aaf3SDag-Erling Smørgrav  * @param data: wireformat data.
970*09a3aaf3SDag-Erling Smørgrav  * @param data_len: length of data buffer.
971*09a3aaf3SDag-Erling Smørgrav  * @param str: string buffer.
972*09a3aaf3SDag-Erling Smørgrav  * @param str_len: length of string buffer.
973*09a3aaf3SDag-Erling Smørgrav  * @param pkt: packet with header and other info (may be NULL)
974*09a3aaf3SDag-Erling Smørgrav  * @param pktlen: length of packet buffer.
975*09a3aaf3SDag-Erling Smørgrav  * @return number of characters (except null) needed to print.
976*09a3aaf3SDag-Erling Smørgrav  */
977*09a3aaf3SDag-Erling Smørgrav int sldns_wire2str_edns_scan(uint8_t** data, size_t* data_len, char** str,
978*09a3aaf3SDag-Erling Smørgrav 	size_t* str_len, uint8_t* pkt, size_t pktlen);
979*09a3aaf3SDag-Erling Smørgrav 
980*09a3aaf3SDag-Erling Smørgrav #ifdef __cplusplus
981*09a3aaf3SDag-Erling Smørgrav }
982*09a3aaf3SDag-Erling Smørgrav #endif
983*09a3aaf3SDag-Erling Smørgrav 
984*09a3aaf3SDag-Erling Smørgrav #endif /* LDNS_WIRE2STR_H */
985