xref: /dragonfly/contrib/ldns/ldns/host2str.h (revision 335b9e93)
1 /**
2  * host2str.h -  txt presentation of RRs
3  *
4  * a Net::DNS like library for C
5  *
6  * (c) NLnet Labs, 2005-2006
7  *
8  * See the file LICENSE for the license
9  */
10 
11 /**
12  * \file
13  *
14  * Contains functions to translate the main structures to their text
15  * representation, as well as functions to print them.
16  */
17 
18 #ifndef LDNS_HOST2STR_H
19 #define LDNS_HOST2STR_H
20 
21 #include <ldns/common.h>
22 #include <ldns/error.h>
23 #include <ldns/rr.h>
24 #include <ldns/rdata.h>
25 #include <ldns/packet.h>
26 #include <ldns/buffer.h>
27 #include <ldns/resolver.h>
28 #include <ldns/zone.h>
29 #include <ctype.h>
30 
31 #include "ldns/util.h"
32 
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36 
37 #define LDNS_APL_IP4            1
38 #define LDNS_APL_IP6            2
39 #define LDNS_APL_MASK           0x7f
40 #define LDNS_APL_NEGATION       0x80
41 
42 /**
43  * Represent a NULL pointer (instead of a pointer to a ldns_rr as "; (null)"
44  * as opposed to outputting nothing at all in such a case.
45  */
46 /*	Flag Name			Flag Nr.	Has data associated
47 	---------------------------------------------------------------------*/
48 #define LDNS_COMMENT_NULLS		(1 <<  0)
49 /** Show key id with DNSKEY RR's as comment */
50 #define LDNS_COMMENT_KEY_ID		(1 <<  1)
51 /** Show if a DNSKEY is a ZSK or KSK as comment */
52 #define LDNS_COMMENT_KEY_TYPE		(1 <<  2)
53 /** Show DNSKEY key size as comment */
54 #define LDNS_COMMENT_KEY_SIZE		(1 <<  3)
55 /** Provide bubblebabble representation for DS RR's as comment */
56 #define LDNS_COMMENT_BUBBLEBABBLE	(1 <<  4)
57 /** Show when a NSEC3 RR has the optout flag set as comment */
58 #define LDNS_COMMENT_FLAGS		(1 <<  5)
59 /** Show the unhashed owner and next owner names for NSEC3 RR's as comment */
60 #define LDNS_COMMENT_NSEC3_CHAIN	(1 <<  6)	/* yes */
61 /** Print mark up */
62 #define LDNS_COMMENT_LAYOUT		(1 <<  7)
63 /** Also comment KEY_ID with RRSIGS **/
64 #define LDNS_COMMENT_RRSIGS		(1 <<  8)
65 #define LDNS_FMT_ZEROIZE_RRSIGS		(1 <<  9)
66 #define LDNS_FMT_PAD_SOA_SERIAL		(1 << 10)
67 #define LDNS_FMT_RFC3597		(1 << 11)	/* yes */
68 
69 #define LDNS_FMT_FLAGS_WITH_DATA			    2
70 
71 /** Show key id, type and size as comment for DNSKEY RR's */
72 #define LDNS_COMMENT_KEY		(LDNS_COMMENT_KEY_ID  \
73 					|LDNS_COMMENT_KEY_TYPE\
74 					|LDNS_COMMENT_KEY_SIZE)
75 
76 /**
77  * Output format specifier
78  *
79  * Determines how Packets, Resource Records and Resource record data fiels are
80  * formatted when printing or converting to string.
81  * Currently it is only used to specify what aspects of a Resource Record are
82  * annotated in the comment section of the textual representation the record.
83  * This is speciefed with flags and potential exra data (such as for example
84  * a lookup map of hashes to real names for annotation NSEC3 records).
85  */
86 struct ldns_struct_output_format
87 {
88 	/** Specification of how RR's should be formatted in text */
89 	int   flags;
90 	/** Potential extra data to be used with formatting RR's in text */
91 	void *data;
92 };
93 typedef struct ldns_struct_output_format ldns_output_format;
94 
95 /**
96  * Output format struct with additional data for flags that use them.
97  * This struct may not be initialized directly. Use ldns_output_format_init
98  * to initialize.
99  */
100 struct ldns_struct_output_format_storage
101 {	int   flags;
102 	ldns_rbtree_t* hashmap;    /* for LDNS_COMMENT_NSEC3_CHAIN */
103 	ldns_rdf*      bitmap;     /* for LDNS_FMT_RFC3597     */
104 };
105 typedef struct ldns_struct_output_format_storage ldns_output_format_storage;
106 
107 /**
108  * Standard output format record that disables commenting in the textual
109  * representation of Resource Records completely.
110  */
111 extern const ldns_output_format *ldns_output_format_nocomments;
112 /**
113  * Standard output format record that annotated only DNSKEY RR's with commenti
114  * text.
115  */
116 extern const ldns_output_format *ldns_output_format_onlykeyids;
117 /**
118  * The default output format record. Same as ldns_output_format_onlykeyids.
119  */
120 extern const ldns_output_format *ldns_output_format_default;
121 /**
122  * Standard output format record that shows all DNSKEY related information in
123  * the comment text, plus the optout flag when set with NSEC3's, plus the
124  * bubblebabble representation of DS RR's.
125  */
126 extern const ldns_output_format *ldns_output_format_bubblebabble;
127 
128 /**
129  * Initialize output format storage to the default value.
130  * \param[in] fmt A reference to an output_format_ storage struct
131  * \return The initialized storage struct typecasted to ldns_output_format
132  */
133 INLINE
134 ldns_output_format* ldns_output_format_init(ldns_output_format_storage* fmt) {
135 	fmt->flags   = ldns_output_format_default->flags;
136 	fmt->hashmap = NULL;
137 	fmt->bitmap  = NULL;
138 	return (ldns_output_format*)fmt;
139 }
140 
141 /**
142  * Set an output format flag.
143  */
144 INLINE void ldns_output_format_set(ldns_output_format* fmt, int flag) {
145         fmt->flags |= flag;
146 }
147 
148 /**
149  * Clear an output format flag.
150  */
151 INLINE void ldns_output_format_clear(ldns_output_format* fmt, int flag) {
152         fmt->flags &= !flag;
153 }
154 
155 /**
156  * Makes sure the LDNS_FMT_RFC3597 is set in the output format.
157  * Marks the type to be printed in RFC3597 format.
158  * /param[in] fmt the output format to update
159  * /param[in] the type to be printed in RFC3597 format
160  * /return LDNS_STATUS_OK on success
161  */
162 ldns_status
163 ldns_output_format_set_type(ldns_output_format* fmt, ldns_rr_type type);
164 
165 /**
166  * Makes sure the LDNS_FMT_RFC3597 is set in the output format.
167  * Marks the type to not be printed in RFC3597 format. When no other types
168  * have been marked before, all known types (except the given one) will be
169  * marked for printing in RFC3597 format.
170  * /param[in] fmt the output format to update
171  * /param[in] the type not to be printed in RFC3597 format
172  * /return LDNS_STATUS_OK on success
173  */
174 ldns_status
175 ldns_output_format_clear_type(ldns_output_format* fmt, ldns_rr_type type);
176 
177 /**
178  * Converts an ldns packet opcode value to its mnemonic, and adds that
179  * to the output buffer
180  * \param[in] *output the buffer to add the data to
181  * \param[in] opcode to find the string representation of
182  * \return LDNS_STATUS_OK on success, or a buffer failure mode on error
183  */
184 ldns_status
185 ldns_pkt_opcode2buffer_str(ldns_buffer *output, ldns_pkt_opcode opcode);
186 
187 /**
188  * Converts an ldns packet rcode value to its mnemonic, and adds that
189  * to the output buffer
190  * \param[in] *output the buffer to add the data to
191  * \param[in] rcode to find the string representation of
192  * \return LDNS_STATUS_OK on success, or a buffer failure mode on error
193  */
194 ldns_status
195 ldns_pkt_rcode2buffer_str(ldns_buffer *output, ldns_pkt_rcode rcode);
196 
197 /**
198  * Converts an ldns algorithm type to its mnemonic, and adds that
199  * to the output buffer
200  * \param[in] *output the buffer to add the data to
201  * \param[in] algorithm to find the string representation of
202  * \return LDNS_STATUS_OK on success, or a buffer failure mode on error
203  */
204 ldns_status
205 ldns_algorithm2buffer_str(ldns_buffer *output,
206                           ldns_algorithm algorithm);
207 
208 /**
209  * Converts an ldns certificate algorithm type to its mnemonic,
210  * and adds that to the output buffer
211  * \param[in] *output the buffer to add the data to
212  * \param[in] cert_algorithm to find the string representation of
213  * \return LDNS_STATUS_OK on success, or a buffer failure mode on error
214  */
215 ldns_status
216 ldns_cert_algorithm2buffer_str(ldns_buffer *output,
217                                ldns_cert_algorithm cert_algorithm);
218 
219 
220 /**
221  * Converts a packet opcode to its mnemonic and returns that as
222  * an allocated null-terminated string.
223  * Remember to free it.
224  *
225  * \param[in] opcode the opcode to convert to text
226  * \return null terminated char * data, or NULL on error
227  */
228 char *ldns_pkt_opcode2str(ldns_pkt_opcode opcode);
229 
230 /**
231  * Converts a packet rcode to its mnemonic and returns that as
232  * an allocated null-terminated string.
233  * Remember to free it.
234  *
235  * \param[in] rcode the rcode to convert to text
236  * \return null terminated char * data, or NULL on error
237  */
238 char *ldns_pkt_rcode2str(ldns_pkt_rcode rcode);
239 
240 /**
241  * Converts a signing algorithms to its mnemonic and returns that as
242  * an allocated null-terminated string.
243  * Remember to free it.
244  *
245  * \param[in] algorithm the algorithm to convert to text
246  * \return null terminated char * data, or NULL on error
247  */
248 char *ldns_pkt_algorithm2str(ldns_algorithm algorithm);
249 
250 /**
251  * Converts a cert algorithm to its mnemonic and returns that as
252  * an allocated null-terminated string.
253  * Remember to free it.
254  *
255  * \param[in] cert_algorithm to convert to text
256  * \return null terminated char * data, or NULL on error
257  */
258 char *ldns_pkt_cert_algorithm2str(ldns_cert_algorithm cert_algorithm);
259 
260 /**
261  * Converts an LDNS_RDF_TYPE_A rdata element to string format and adds it to the output buffer
262  * \param[in] *rdf The rdata to convert
263  * \param[in] *output The buffer to add the data to
264  * \return LDNS_STATUS_OK on success, and error status on failure
265  */
266 ldns_status ldns_rdf2buffer_str_a(ldns_buffer *output, const ldns_rdf *rdf);
267 
268 /**
269  * Converts an LDNS_RDF_TYPE_AAAA rdata element to string format and adds it to the output buffer
270  * \param[in] *rdf The rdata to convert
271  * \param[in] *output The buffer to add the data to
272  * \return LDNS_STATUS_OK on success, and error status on failure
273  */
274 ldns_status ldns_rdf2buffer_str_aaaa(ldns_buffer *output, const ldns_rdf *rdf);
275 
276 /**
277  * Converts an LDNS_RDF_TYPE_STR rdata element to string format and adds it to the output buffer
278  * \param[in] *rdf The rdata to convert
279  * \param[in] *output The buffer to add the data to
280  * \return LDNS_STATUS_OK on success, and error status on failure
281  */
282 ldns_status ldns_rdf2buffer_str_str(ldns_buffer *output, const ldns_rdf *rdf);
283 
284 /**
285  * Converts an LDNS_RDF_TYPE_B64 rdata element to string format and adds it to the output buffer
286  * \param[in] *rdf The rdata to convert
287  * \param[in] *output The buffer to add the data to
288  * \return LDNS_STATUS_OK on success, and error status on failure
289  */
290 ldns_status ldns_rdf2buffer_str_b64(ldns_buffer *output, const ldns_rdf *rdf);
291 
292 /**
293  * Converts an LDNS_RDF_TYPE_B32_EXT rdata element to string format and adds it to the output buffer
294  * \param[in] *rdf The rdata to convert
295  * \param[in] *output The buffer to add the data to
296  * \return LDNS_STATUS_OK on success, and error status on failure
297  */
298 ldns_status ldns_rdf2buffer_str_b32_ext(ldns_buffer *output, const ldns_rdf *rdf);
299 
300 /**
301  * Converts an LDNS_RDF_TYPE_HEX rdata element to string format and adds it to the output buffer
302  * \param[in] *rdf The rdata to convert
303  * \param[in] *output The buffer to add the data to
304  * \return LDNS_STATUS_OK on success, and error status on failure
305  */
306 ldns_status ldns_rdf2buffer_str_hex(ldns_buffer *output, const ldns_rdf *rdf);
307 
308 /**
309  * Converts an LDNS_RDF_TYPE_TYPE rdata element to string format and adds it to the output buffer
310  * \param[in] *rdf The rdata to convert
311  * \param[in] *output The buffer to add the data to
312  * \return LDNS_STATUS_OK on success, and error status on failure
313  */
314 ldns_status ldns_rdf2buffer_str_type(ldns_buffer *output, const ldns_rdf *rdf);
315 
316 /**
317  * Converts an LDNS_RDF_TYPE_CLASS rdata element to string format and adds it to the output buffer
318  * \param[in] *rdf The rdata to convert
319  * \param[in] *output The buffer to add the data to
320  * \return LDNS_STATUS_OK on success, and error status on failure
321  */
322 ldns_status ldns_rdf2buffer_str_class(ldns_buffer *output, const ldns_rdf *rdf);
323 
324 /**
325  * Converts an LDNS_RDF_TYPE_ALG rdata element to string format and adds it to the output buffer
326  * \param[in] *rdf The rdata to convert
327  * \param[in] *output The buffer to add the data to
328  * \return LDNS_STATUS_OK on success, and error status on failure
329  */
330 ldns_status ldns_rdf2buffer_str_alg(ldns_buffer *output, const ldns_rdf *rdf);
331 
332 /**
333  * Converts an ldns_rr_type value to its string representation,
334  * and places it in the given buffer
335  * \param[in] *output The buffer to add the data to
336  * \param[in] type the ldns_rr_type to convert
337  * \return LDNS_STATUS_OK on success, and error status on failure
338  */
339 ldns_status ldns_rr_type2buffer_str(ldns_buffer *output,
340                                     const ldns_rr_type type);
341 
342 /**
343  * Converts an ldns_rr_type value to its string representation,
344  * and returns that string. For unknown types, the string
345  * "TYPE<id>" is returned. This function allocates data that must be
346  * freed by the caller
347  * \param[in] type the ldns_rr_type to convert
348  * \return a newly allocated string
349  */
350 char *ldns_rr_type2str(const ldns_rr_type type);
351 
352 /**
353  * Converts an ldns_rr_class value to its string representation,
354  * and places it in the given buffer
355  * \param[in] *output The buffer to add the data to
356  * \param[in] klass the ldns_rr_class to convert
357  * \return LDNS_STATUS_OK on success, and error status on failure
358  */
359 ldns_status ldns_rr_class2buffer_str(ldns_buffer *output,
360                                      const ldns_rr_class klass);
361 
362 /**
363  * Converts an ldns_rr_class value to its string representation,
364  * and returns that string. For unknown types, the string
365  * "CLASS<id>" is returned. This function allocates data that must be
366  * freed by the caller
367  * \param[in] klass the ldns_rr_class to convert
368  * \return a newly allocated string
369  */
370 char *ldns_rr_class2str(const ldns_rr_class klass);
371 
372 
373 /**
374  * Converts an LDNS_RDF_TYPE_CERT rdata element to string format and adds it to the output buffer
375  * \param[in] *rdf The rdata to convert
376  * \param[in] *output The buffer to add the data to
377  * \return LDNS_STATUS_OK on success, and error status on failure
378  */
379 ldns_status ldns_rdf2buffer_str_cert_alg(ldns_buffer *output, const ldns_rdf *rdf);
380 
381 /**
382  * Converts an LDNS_RDF_TYPE_LOC rdata element to string format and adds it to the output buffer
383  * \param[in] *rdf The rdata to convert
384  * \param[in] *output The buffer to add the data to
385  * \return LDNS_STATUS_OK on success, and error status on failure
386  */
387 ldns_status ldns_rdf2buffer_str_loc(ldns_buffer *output, const ldns_rdf *rdf);
388 
389 /**
390  * Converts an LDNS_RDF_TYPE_UNKNOWN rdata element to string format and adds it to the output buffer
391  * \param[in] *rdf The rdata to convert
392  * \param[in] *output The buffer to add the data to
393  * \return LDNS_STATUS_OK on success, and error status on failure
394  */
395 ldns_status ldns_rdf2buffer_str_unknown(ldns_buffer *output, const ldns_rdf *rdf);
396 
397 /**
398  * Converts an LDNS_RDF_TYPE_NSAP rdata element to string format and adds it to the output buffer
399  * \param[in] *rdf The rdata to convert
400  * \param[in] *output The buffer to add the data to
401  * \return LDNS_STATUS_OK on success, and error status on failure
402  */
403 ldns_status ldns_rdf2buffer_str_nsap(ldns_buffer *output, const ldns_rdf *rdf);
404 
405 /**
406  * Converts an LDNS_RDF_TYPE_ATMA rdata element to string format and adds it to the output buffer
407  * \param[in] *rdf The rdata to convert
408  * \param[in] *output The buffer to add the data to
409  * \return LDNS_STATUS_OK on success, and error status on failure
410  */
411 ldns_status ldns_rdf2buffer_str_atma(ldns_buffer *output, const ldns_rdf *rdf);
412 
413 /**
414  * Converts an LDNS_RDF_TYPE_WKS rdata element to string format and adds it to the output buffer
415  * \param[in] *rdf The rdata to convert
416  * \param[in] *output The buffer to add the data to
417  * \return LDNS_STATUS_OK on success, and error status on failure
418  */
419 ldns_status ldns_rdf2buffer_str_wks(ldns_buffer *output, const ldns_rdf *rdf);
420 
421 /**
422  * Converts an LDNS_RDF_TYPE_NSEC rdata element to string format and adds it to the output buffer
423  * \param[in] *rdf The rdata to convert
424  * \param[in] *output The buffer to add the data to
425  * \return LDNS_STATUS_OK on success, and error status on failure
426  */
427 ldns_status ldns_rdf2buffer_str_nsec(ldns_buffer *output, const ldns_rdf *rdf);
428 
429 /**
430  * Converts an LDNS_RDF_TYPE_PERIOD rdata element to string format and adds it to the output buffer
431  * \param[in] *rdf The rdata to convert
432  * \param[in] *output The buffer to add the data to
433  * \return LDNS_STATUS_OK on success, and error status on failure
434  */
435 ldns_status ldns_rdf2buffer_str_period(ldns_buffer *output, const ldns_rdf *rdf);
436 
437 /**
438  * Converts an LDNS_RDF_TYPE_TSIGTIME rdata element to string format and adds it to the output buffer
439  * \param[in] *rdf The rdata to convert
440  * \param[in] *output The buffer to add the data to
441  * \return LDNS_STATUS_OK on success, and error status on failure
442  */
443 ldns_status ldns_rdf2buffer_str_tsigtime(ldns_buffer *output, const ldns_rdf *rdf);
444 
445 /**
446  * Converts an LDNS_RDF_TYPE_APL rdata element to string format and adds it to the output buffer
447  * \param[in] *rdf The rdata to convert
448  * \param[in] *output The buffer to add the data to
449  * \return LDNS_STATUS_OK on success, and error status on failure
450  */
451 ldns_status ldns_rdf2buffer_str_apl(ldns_buffer *output, const ldns_rdf *rdf);
452 
453 /**
454  * Converts an LDNS_RDF_TYPE_INT16_DATA rdata element to string format and adds it to the output buffer
455  * \param[in] *rdf The rdata to convert
456  * \param[in] *output The buffer to add the data to
457  * \return LDNS_STATUS_OK on success, and error status on failure
458  */
459 ldns_status ldns_rdf2buffer_str_int16_data(ldns_buffer *output, const ldns_rdf *rdf);
460 
461 /**
462  * Converts an LDNS_RDF_TYPE_IPSECKEY rdata element to string format and adds it to the output buffer
463  * \param[in] *rdf The rdata to convert
464  * \param[in] *output The buffer to add the data to
465  * \return LDNS_STATUS_OK on success, and error status on failure
466  */
467 ldns_status ldns_rdf2buffer_str_ipseckey(ldns_buffer *output, const ldns_rdf *rdf);
468 
469 /**
470  * Converts the data in the rdata field to presentation
471  * format (as char *) and appends it to the given buffer
472  *
473  * \param[in] output pointer to the buffer to append the data to
474  * \param[in] rdf the pointer to the rdafa field containing the data
475  * \return status
476  */
477 ldns_status ldns_rdf2buffer_str(ldns_buffer *output, const ldns_rdf *rdf);
478 
479 /**
480  * Converts the data in the resource record to presentation
481  * format (as char *) and appends it to the given buffer.
482  * The presentation format of DNSKEY record is annotated with comments giving
483  * the id, type and size of the key.
484  *
485  * \param[in] output pointer to the buffer to append the data to
486  * \param[in] rr the pointer to the rr field to convert
487  * \return status
488  */
489 ldns_status ldns_rr2buffer_str(ldns_buffer *output, const ldns_rr *rr);
490 
491 /**
492  * Converts the data in the resource record to presentation
493  * format (as char *) and appends it to the given buffer.
494  * The presentation format is annotated with comments giving
495  * additional information on the record.
496  *
497  * \param[in] output pointer to the buffer to append the data to
498  * \param[in] fmt how to format the textual representation of the
499  *            resource record.
500  * \param[in] rr the pointer to the rr field to convert
501  * \return status
502  */
503 ldns_status ldns_rr2buffer_str_fmt(ldns_buffer *output,
504 		const ldns_output_format *fmt, const ldns_rr *rr);
505 
506 /**
507  * Converts the data in the DNS packet to presentation
508  * format (as char *) and appends it to the given buffer
509  *
510  * \param[in] output pointer to the buffer to append the data to
511  * \param[in] pkt the pointer to the packet to convert
512  * \return status
513  */
514 ldns_status ldns_pkt2buffer_str(ldns_buffer *output, const ldns_pkt *pkt);
515 
516 /**
517  * Converts the data in the DNS packet to presentation
518  * format (as char *) and appends it to the given buffer
519  *
520  * \param[in] output pointer to the buffer to append the data to
521  * \param[in] fmt how to format the textual representation of the packet
522  * \param[in] pkt the pointer to the packet to convert
523  * \return status
524  */
525 ldns_status ldns_pkt2buffer_str_fmt(ldns_buffer *output,
526 		const ldns_output_format *fmt, const ldns_pkt *pkt);
527 
528 /**
529  * Converts an LDNS_RDF_TYPE_NSEC3_SALT rdata element to string format and adds it to the output buffer
530  * \param[in] *rdf The rdata to convert
531  * \param[in] *output The buffer to add the data to
532  * \return LDNS_STATUS_OK on success, and error status on failure
533  */
534 ldns_status ldns_rdf2buffer_str_nsec3_salt(ldns_buffer *output, const ldns_rdf *rdf);
535 
536 
537 /**
538  * Converts the data in the DNS packet to presentation
539  * format (as char *) and appends it to the given buffer
540  *
541  * \param[in] output pointer to the buffer to append the data to
542  * \param[in] k the pointer to the private key to convert
543  * \return status
544  */
545 ldns_status ldns_key2buffer_str(ldns_buffer *output, const ldns_key *k);
546 
547 /**
548  * Converts an LDNS_RDF_TYPE_INT8 rdata element to string format and adds it to the output buffer
549  * \param[in] *rdf The rdata to convert
550  * \param[in] *output The buffer to add the data to
551  * \return LDNS_STATUS_OK on success, and error status on failure
552  */
553 ldns_status ldns_rdf2buffer_str_int8(ldns_buffer *output, const ldns_rdf *rdf);
554 
555 /**
556  * Converts an LDNS_RDF_TYPE_INT16 rdata element to string format and adds it to the output buffer
557  * \param[in] *rdf The rdata to convert
558  * \param[in] *output The buffer to add the data to
559  * \return LDNS_STATUS_OK on success, and error status on failure
560  */
561 ldns_status ldns_rdf2buffer_str_int16(ldns_buffer *output, const ldns_rdf *rdf);
562 
563 /**
564  * Converts an LDNS_RDF_TYPE_INT32 rdata element to string format and adds it to the output buffer
565  * \param[in] *rdf The rdata to convert
566  * \param[in] *output The buffer to add the data to
567  * \return LDNS_STATUS_OK on success, and error status on failure
568  */
569 ldns_status ldns_rdf2buffer_str_int32(ldns_buffer *output, const ldns_rdf *rdf);
570 
571 /**
572  * Converts an LDNS_RDF_TYPE_TIME rdata element to string format and adds it to the output buffer
573  * \param[in] *rdf The rdata to convert
574  * \param[in] *output The buffer to add the data to
575  * \return LDNS_STATUS_OK on success, and error status on failure
576  */
577 ldns_status ldns_rdf2buffer_str_time(ldns_buffer *output, const ldns_rdf *rdf);
578 
579 /**
580  * Converts an LDNS_RDF_TYPE_ILNP64 rdata element to 4 hexadecimal numbers
581  * separated by colons and adds it to the output buffer
582  * \param[in] *rdf The rdata to convert
583  * \param[in] *output The buffer to add the data to
584  * \return LDNS_STATUS_OK on success, and error status on failure
585  */
586 ldns_status ldns_rdf2buffer_str_ilnp64(ldns_buffer *output,
587 		const ldns_rdf *rdf);
588 
589 /**
590  * Converts an LDNS_RDF_TYPE_EUI48 rdata element to 6 hexadecimal numbers
591  * separated by dashes and adds it to the output buffer
592  * \param[in] *rdf The rdata to convert
593  * \param[in] *output The buffer to add the data to
594  * \return LDNS_STATUS_OK on success, and error status on failure
595  */
596 ldns_status ldns_rdf2buffer_str_eui48(ldns_buffer *output,
597 		const ldns_rdf *rdf);
598 
599 /**
600  * Converts an LDNS_RDF_TYPE_EUI64 rdata element to 8 hexadecimal numbers
601  * separated by dashes and adds it to the output buffer
602  * \param[in] *rdf The rdata to convert
603  * \param[in] *output The buffer to add the data to
604  * \return LDNS_STATUS_OK on success, and error status on failure
605  */
606 ldns_status ldns_rdf2buffer_str_eui64(ldns_buffer *output,
607 		const ldns_rdf *rdf);
608 
609 /**
610  * Adds the LDNS_RDF_TYPE_TAG rdata to the output buffer,
611  * provided it contains only alphanumeric characters.
612  * \param[in] *rdf The rdata to convert
613  * \param[in] *output The buffer to add the data to
614  * \return LDNS_STATUS_OK on success, and error status on failure
615  */
616 ldns_status ldns_rdf2buffer_str_tag(ldns_buffer *output,
617 		const ldns_rdf *rdf);
618 
619 /**
620  * Adds the LDNS_RDF_TYPE_LONG_STR rdata to the output buffer, in-between
621  * double quotes and all non printable characters properly escaped.
622  * \param[in] *rdf The rdata to convert
623  * \param[in] *output The buffer to add the data to
624  * \return LDNS_STATUS_OK on success, and error status on failure
625  */
626 ldns_status ldns_rdf2buffer_str_long_str(ldns_buffer *output,
627 	       	const ldns_rdf *rdf);
628 
629 /**
630  * Converts an LDNS_RDF_TYPE_HIP rdata element to presentation format for
631  * the algorithm, HIT and Public Key and adds it the output buffer .
632  * \param[in] *rdf The rdata to convert
633  * \param[in] *output The buffer to add the data to
634  * \return LDNS_STATUS_OK on success, and error status on failure
635  */
636 ldns_status ldns_rdf2buffer_str_hip(ldns_buffer *output,
637 		const ldns_rdf *rdf);
638 
639 /**
640  * Converts the data in the rdata field to presentation format and
641  * returns that as a char *.
642  * Remember to free it.
643  *
644  * \param[in] rdf The rdata field to convert
645  * \return null terminated char * data, or NULL on error
646  */
647 char *ldns_rdf2str(const ldns_rdf *rdf);
648 
649 /**
650  * Converts the data in the resource record to presentation format and
651  * returns that as a char *.
652  * Remember to free it.
653  *
654  * \param[in] rr The rdata field to convert
655  * \return null terminated char * data, or NULL on error
656  */
657 char *ldns_rr2str(const ldns_rr *rr);
658 
659 /**
660  * Converts the data in the resource record to presentation format and
661  * returns that as a char *.
662  * Remember to free it.
663  *
664  * \param[in] fmt how to format the resource record
665  * \param[in] rr The rdata field to convert
666  * \return null terminated char * data, or NULL on error
667  */
668 char *ldns_rr2str_fmt(const ldns_output_format *fmt, const ldns_rr *rr);
669 
670 /**
671  * Converts the data in the DNS packet to presentation format and
672  * returns that as a char *.
673  * Remember to free it.
674  *
675  * \param[in] pkt The rdata field to convert
676  * \return null terminated char * data, or NULL on error
677  */
678 char *ldns_pkt2str(const ldns_pkt *pkt);
679 
680 /**
681  * Converts the data in the DNS packet to presentation format and
682  * returns that as a char *.
683  * Remember to free it.
684  *
685  * \param[in] fmt how to format the packet
686  * \param[in] pkt The rdata field to convert
687  * \return null terminated char * data, or NULL on error
688  */
689 char *ldns_pkt2str_fmt(const ldns_output_format *fmt, const ldns_pkt *pkt);
690 
691 /**
692  * Converts a private key to the test presentation fmt and
693  * returns that as a char *.
694  * Remember to free it.
695  *
696  * \param[in] k the key to convert to text
697  * \return null terminated char * data, or NULL on error
698  */
699 char *ldns_key2str(const ldns_key *k);
700 
701 /**
702  * Converts a list of resource records to presentation format
703  * and returns that as a char *.
704  * Remember to free it.
705  *
706  * \param[in] rr_list the rr_list to convert to text
707  * \return null terminated char * data, or NULL on error
708  */
709 char *ldns_rr_list2str(const ldns_rr_list *rr_list);
710 
711 /**
712  * Converts a list of resource records to presentation format
713  * and returns that as a char *.
714  * Remember to free it.
715  *
716  * \param[in] fmt how to format the list of resource records
717  * \param[in] rr_list the rr_list to convert to text
718  * \return null terminated char * data, or NULL on error
719  */
720 char *ldns_rr_list2str_fmt(
721 		const ldns_output_format *fmt, const ldns_rr_list *rr_list);
722 
723 /**
724  * Returns a copy of the data in the buffer as a null terminated
725  * char * string. The returned string must be freed by the caller.
726  * The buffer must be in write modus and may thus not have been flipped.
727  *
728  * \param[in] buffer buffer containing char * data
729  * \return null terminated char * data, or NULL on error
730  */
731 char *ldns_buffer2str(ldns_buffer *buffer);
732 
733 /**
734  * Exports and returns the data in the buffer as a null terminated
735  * char * string. The returned string must be freed by the caller.
736  * The buffer must be in write modus and may thus not have been flipped.
737  * The buffer is fixed after this function returns.
738  *
739  * \param[in] buffer buffer containing char * data
740  * \return null terminated char * data, or NULL on error
741  */
742 char *ldns_buffer_export2str(ldns_buffer *buffer);
743 
744 /**
745  * Prints the data in the rdata field to the given file stream
746  * (in presentation format)
747  *
748  * \param[in] output the file stream to print to
749  * \param[in] rdf the rdata field to print
750  * \return void
751  */
752 void ldns_rdf_print(FILE *output, const ldns_rdf *rdf);
753 
754 /**
755  * Prints the data in the resource record to the given file stream
756  * (in presentation format)
757  *
758  * \param[in] output the file stream to print to
759  * \param[in] rr the resource record to print
760  * \return void
761  */
762 void ldns_rr_print(FILE *output, const ldns_rr *rr);
763 
764 /**
765  * Prints the data in the resource record to the given file stream
766  * (in presentation format)
767  *
768  * \param[in] output the file stream to print to
769  * \param[in] fmt format of the textual representation
770  * \param[in] rr the resource record to print
771  * \return void
772  */
773 void ldns_rr_print_fmt(FILE *output,
774 		const ldns_output_format *fmt, const ldns_rr *rr);
775 
776 /**
777  * Prints the data in the DNS packet to the given file stream
778  * (in presentation format)
779  *
780  * \param[in] output the file stream to print to
781  * \param[in] pkt the packet to print
782  * \return void
783  */
784 void ldns_pkt_print(FILE *output, const ldns_pkt *pkt);
785 
786 /**
787  * Prints the data in the DNS packet to the given file stream
788  * (in presentation format)
789  *
790  * \param[in] output the file stream to print to
791  * \param[in] fmt format of the textual representation
792  * \param[in] pkt the packet to print
793  * \return void
794  */
795 void ldns_pkt_print_fmt(FILE *output,
796 		const ldns_output_format *fmt, const ldns_pkt *pkt);
797 
798 /**
799  * Converts a rr_list to presentation format and appends it to
800  * the output buffer
801  * \param[in] output the buffer to append output to
802  * \param[in] list the ldns_rr_list to print
803  * \return ldns_status
804  */
805 ldns_status ldns_rr_list2buffer_str(ldns_buffer *output, const ldns_rr_list *list);
806 
807 /**
808  * Converts a rr_list to presentation format and appends it to
809  * the output buffer
810  * \param[in] output the buffer to append output to
811  * \param[in] fmt format of the textual representation
812  * \param[in] list the ldns_rr_list to print
813  * \return ldns_status
814  */
815 ldns_status ldns_rr_list2buffer_str_fmt(ldns_buffer *output,
816 		const ldns_output_format *fmt, const ldns_rr_list *list);
817 
818 /**
819  * Converts the header of a packet to presentation format and appends it to
820  * the output buffer
821  * \param[in] output the buffer to append output to
822  * \param[in] pkt the packet to convert the header of
823  * \return ldns_status
824  */
825 ldns_status ldns_pktheader2buffer_str(ldns_buffer *output, const ldns_pkt *pkt);
826 
827 /**
828  * print a rr_list to output
829  * \param[in] output the fd to print to
830  * \param[in] list the rr_list to print
831  */
832 void ldns_rr_list_print(FILE *output, const ldns_rr_list *list);
833 
834 /**
835  * print a rr_list to output
836  * \param[in] output the fd to print to
837  * \param[in] fmt format of the textual representation
838  * \param[in] list the rr_list to print
839  */
840 void ldns_rr_list_print_fmt(FILE *output,
841 		const ldns_output_format *fmt, const ldns_rr_list *list);
842 
843 /**
844  * Print a resolver (in sofar that is possible) state
845  * to output.
846  * \param[in] output the fd to print to
847  * \param[in] r the resolver to print
848  */
849 void ldns_resolver_print(FILE *output, const ldns_resolver *r);
850 
851 /**
852  * Print a resolver (in sofar that is possible) state
853  * to output.
854  * \param[in] output the fd to print to
855  * \param[in] fmt format of the textual representation
856  * \param[in] r the resolver to print
857  */
858 void ldns_resolver_print_fmt(FILE *output,
859 		const ldns_output_format *fmt, const ldns_resolver *r);
860 
861 /**
862  * Print a zone structure * to output. Note the SOA record
863  * is included in this output
864  * \param[in] output the fd to print to
865  * \param[in] z the zone to print
866  */
867 void ldns_zone_print(FILE *output, const ldns_zone *z);
868 
869 /**
870  * Print a zone structure * to output. Note the SOA record
871  * is included in this output
872  * \param[in] output the fd to print to
873  * \param[in] fmt format of the textual representation
874  * \param[in] z the zone to print
875  */
876 void ldns_zone_print_fmt(FILE *output,
877 		const ldns_output_format *fmt, const ldns_zone *z);
878 
879 /**
880  * Print the ldns_rdf containing a dname to the buffer
881  * \param[in] output the buffer to print to
882  * \param[in] dname the dname to print
883  * \return ldns_status message if the printing succeeded
884  */
885 ldns_status ldns_rdf2buffer_str_dname(ldns_buffer *output, const ldns_rdf *dname);
886 
887 #ifdef __cplusplus
888 }
889 #endif
890 
891 #endif /* LDNS_HOST2STR_H */
892