File Coverage

include/ldns/host2str.h
Criterion Covered Total %
statement 0 3 0.0
branch n/a
condition n/a
subroutine n/a
pod n/a
total 0 3 0.0


line stmt bran cond sub pod time code
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
22             #include
23             #include
24             #include
25             #include
26             #include
27             #include
28             #include
29             #include
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 ouput format flag.
143             */
144 0           INLINE void ldns_output_format_set(ldns_output_format* fmt, int flag) {
145 0           fmt->flags |= flag;
146 0           }
147              
148             /**
149             * Clear an ouput 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" 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" 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 */