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