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