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