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