1 /** 2 * str2wire.h - read 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 * Parses text to wireformat. 13 */ 14 15 #ifndef GLDNS_STR2WIRE_H 16 #define GLDNS_STR2WIRE_H 17 18 /* include rrdef for MAX_DOMAINLEN constant */ 19 #include <gldns/rrdef.h> 20 21 #ifdef __cplusplus 22 extern "C" { 23 #endif 24 struct gldns_struct_lookup_table; 25 26 /** buffer to read an RR, cannot be larger than 64K because of packet size */ 27 #define GLDNS_RR_BUF_SIZE 65535 /* bytes */ 28 #define GLDNS_DEFAULT_TTL 3600 29 30 /* 31 * To convert class and type to string see 32 * gldns_get_rr_class_by_name(str) 33 * gldns_get_rr_type_by_name(str) 34 * from rrdef.h 35 */ 36 37 /** 38 * Convert text string into dname wireformat, mallocless, with user buffer. 39 * @param str: the text string with the domain name. 40 * @param buf: the result buffer, suggested size GLDNS_MAX_DOMAINLEN+1 41 * @param len: length of the buffer on input, length of the result on output. 42 * @return 0 on success, otherwise an error. 43 */ 44 int gldns_str2wire_dname_buf(const char* str, uint8_t* buf, size_t* len); 45 46 /** 47 * Same as gldns_str2wire_dname_buf, but concatenates origin if the domain 48 * name is relative (does not end in '.'). 49 * @param str: the text string with the domain name. 50 * @param buf: the result buffer, suggested size GLDNS_MAX_DOMAINLEN+1 51 * @param len: length of the buffer on input, length of the result on output. 52 * @param origin: the origin to append or NULL (nothing is appended). 53 * @param origin_len: length of origin. 54 * @return 0 on success, otherwise an error. 55 */ 56 int gldns_str2wire_dname_buf_origin(const char* str, uint8_t* buf, size_t* len, 57 uint8_t* origin, size_t origin_len); 58 59 /** 60 * Convert text string into dname wireformat 61 * @param str: the text string with the domain name. 62 * @param len: returned length of wireformat. 63 * @return wireformat dname (malloced) or NULL on failure. 64 */ 65 uint8_t* gldns_str2wire_dname(const char* str, size_t* len); 66 67 /** 68 * Convert text RR to wireformat, with user buffer. 69 * @param str: the RR data in text presentation format. 70 * @param rr: the buffer where the result is stored into. This buffer has 71 * the wire-dname(uncompressed), type, class, ttl, rdatalen, rdata. 72 * These values are probably not aligned, and in network format. 73 * Use the gldns_wirerr_get_xxx functions to access them safely. 74 * buffer size GLDNS_RR_BUF_SIZE is suggested. 75 * @param len: on input the length of the buffer, on output the amount of 76 * the buffer used for the rr. 77 * @param dname_len: if non-NULL, filled with the dname length as result. 78 * Because after the dname you find the type, class, ttl, rdatalen, rdata. 79 * @param default_ttl: TTL used if no TTL available. 80 * @param origin: used for origin dname (if not NULL) 81 * @param origin_len: length of origin. 82 * @param prev: used for prev_rr dname (if not NULL) 83 * @param prev_len: length of prev. 84 * @return 0 on success, an error on failure. 85 */ 86 int gldns_str2wire_rr_buf(const char* str, uint8_t* rr, size_t* len, 87 size_t* dname_len, uint32_t default_ttl, uint8_t* origin, 88 size_t origin_len, uint8_t* prev, size_t prev_len); 89 90 /** 91 * Same as gldns_str2wire_rr_buf, but there is no rdata, it returns an RR 92 * with zero rdata and no ttl. It has name, type, class. 93 * You can access those with the gldns_wirerr_get_type and class functions. 94 * @param str: the RR data in text presentation format. 95 * @param rr: the buffer where the result is stored into. 96 * @param len: on input the length of the buffer, on output the amount of 97 * the buffer used for the rr. 98 * @param dname_len: if non-NULL, filled with the dname length as result. 99 * Because after the dname you find the type, class, ttl, rdatalen, rdata. 100 * @param origin: used for origin dname (if not NULL) 101 * @param origin_len: length of origin. 102 * @param prev: used for prev_rr dname (if not NULL) 103 * @param prev_len: length of prev. 104 * @return 0 on success, an error on failure. 105 */ 106 int gldns_str2wire_rr_question_buf(const char* str, uint8_t* rr, size_t* len, 107 size_t* dname_len, uint8_t* origin, size_t origin_len, uint8_t* prev, 108 size_t prev_len); 109 110 /** 111 * Get the type of the RR. 112 * @param rr: the RR in wire format. 113 * @param len: rr length. 114 * @param dname_len: dname length to skip. 115 * @return type in host byteorder 116 */ 117 uint16_t gldns_wirerr_get_type(uint8_t* rr, size_t len, size_t dname_len); 118 119 /** 120 * Get the class of the RR. 121 * @param rr: the RR in wire format. 122 * @param len: rr length. 123 * @param dname_len: dname length to skip. 124 * @return class in host byteorder 125 */ 126 uint16_t gldns_wirerr_get_class(uint8_t* rr, size_t len, size_t dname_len); 127 128 /** 129 * Get the ttl of the RR. 130 * @param rr: the RR in wire format. 131 * @param len: rr length. 132 * @param dname_len: dname length to skip. 133 * @return ttl in host byteorder 134 */ 135 uint32_t gldns_wirerr_get_ttl(uint8_t* rr, size_t len, size_t dname_len); 136 137 /** 138 * Get the rdata length of the RR. 139 * @param rr: the RR in wire format. 140 * @param len: rr length. 141 * @param dname_len: dname length to skip. 142 * @return rdata length in host byteorder 143 * If the rdata length is larger than the rr-len allows, it is truncated. 144 * So, that it is safe to read the data length returned 145 * from this function from the rdata pointer of gldns_wirerr_get_rdata. 146 */ 147 uint16_t gldns_wirerr_get_rdatalen(uint8_t* rr, size_t len, size_t dname_len); 148 149 /** 150 * Get the rdata pointer of the RR. 151 * @param rr: the RR in wire format. 152 * @param len: rr length. 153 * @param dname_len: dname length to skip. 154 * @return rdata pointer 155 */ 156 uint8_t* gldns_wirerr_get_rdata(uint8_t* rr, size_t len, size_t dname_len); 157 158 /** 159 * Get the rdata pointer of the RR. prefixed with rdata length. 160 * @param rr: the RR in wire format. 161 * @param len: rr length. 162 * @param dname_len: dname length to skip. 163 * @return pointer to rdatalength, followed by the rdata. 164 */ 165 uint8_t* gldns_wirerr_get_rdatawl(uint8_t* rr, size_t len, size_t dname_len); 166 167 /** 168 * Parse result codes 169 */ 170 #define GLDNS_WIREPARSE_MASK 0x0fff 171 #define GLDNS_WIREPARSE_SHIFT 12 172 #define GLDNS_WIREPARSE_ERROR(e) ((e)&GLDNS_WIREPARSE_MASK) 173 #define GLDNS_WIREPARSE_OFFSET(e) (((e)&~GLDNS_WIREPARSE_MASK)>>GLDNS_WIREPARSE_SHIFT) 174 /* use lookuptable to get error string, gldns_wireparse_errors */ 175 #define GLDNS_WIREPARSE_ERR_OK 0 176 #define GLDNS_WIREPARSE_ERR_GENERAL 342 177 #define GLDNS_WIREPARSE_ERR_DOMAINNAME_OVERFLOW 343 178 #define GLDNS_WIREPARSE_ERR_DOMAINNAME_UNDERFLOW 344 179 #define GLDNS_WIREPARSE_ERR_BUFFER_TOO_SMALL 345 180 #define GLDNS_WIREPARSE_ERR_LABEL_OVERFLOW 346 181 #define GLDNS_WIREPARSE_ERR_EMPTY_LABEL 347 182 #define GLDNS_WIREPARSE_ERR_SYNTAX_BAD_ESCAPE 348 183 #define GLDNS_WIREPARSE_ERR_SYNTAX 349 184 #define GLDNS_WIREPARSE_ERR_SYNTAX_TTL 350 185 #define GLDNS_WIREPARSE_ERR_SYNTAX_TYPE 351 186 #define GLDNS_WIREPARSE_ERR_SYNTAX_CLASS 352 187 #define GLDNS_WIREPARSE_ERR_SYNTAX_RDATA 353 188 #define GLDNS_WIREPARSE_ERR_SYNTAX_MISSING_VALUE 354 189 #define GLDNS_WIREPARSE_ERR_INVALID_STR 355 190 #define GLDNS_WIREPARSE_ERR_SYNTAX_B64 356 191 #define GLDNS_WIREPARSE_ERR_SYNTAX_B32_EXT 357 192 #define GLDNS_WIREPARSE_ERR_SYNTAX_HEX 358 193 #define GLDNS_WIREPARSE_ERR_CERT_BAD_ALGORITHM 359 194 #define GLDNS_WIREPARSE_ERR_SYNTAX_TIME 360 195 #define GLDNS_WIREPARSE_ERR_SYNTAX_PERIOD 361 196 #define GLDNS_WIREPARSE_ERR_SYNTAX_ILNP64 362 197 #define GLDNS_WIREPARSE_ERR_SYNTAX_EUI48 363 198 #define GLDNS_WIREPARSE_ERR_SYNTAX_EUI64 364 199 #define GLDNS_WIREPARSE_ERR_SYNTAX_TAG 365 200 #define GLDNS_WIREPARSE_ERR_NOT_IMPL 366 201 #define GLDNS_WIREPARSE_ERR_SYNTAX_INT 367 202 #define GLDNS_WIREPARSE_ERR_SYNTAX_IP4 368 203 #define GLDNS_WIREPARSE_ERR_SYNTAX_IP6 369 204 #define GLDNS_WIREPARSE_ERR_SYNTAX_INTEGER_OVERFLOW 370 205 #define GLDNS_WIREPARSE_ERR_INCLUDE 371 206 #define GLDNS_WIREPARSE_ERR_PARENTHESIS 372 207 208 /** 209 * Get reference to a constant string for the (parse) error. 210 * @param e: error return value 211 * @return string. 212 */ 213 const char* gldns_get_errorstr_parse(int e); 214 215 /** 216 * wire parse state for parsing files 217 */ 218 struct gldns_file_parse_state { 219 /** the origin domain name, if len!=0. uncompressed wireformat */ 220 uint8_t origin[GLDNS_MAX_DOMAINLEN+1]; 221 /** length of origin domain name, in bytes. 0 if not set. */ 222 size_t origin_len; 223 /** the previous domain name, if len!=0. uncompressed wireformat*/ 224 uint8_t prev_rr[GLDNS_MAX_DOMAINLEN+1]; 225 /** length of the previous domain name, in bytes. 0 if not set. */ 226 size_t prev_rr_len; 227 /** default TTL, this is used if the text does not specify a TTL, 228 * host byteorder */ 229 uint32_t default_ttl; 230 /** line number information */ 231 int lineno; 232 }; 233 234 /** 235 * Read one RR from zonefile with buffer for the data. 236 * @param in: file that is read from (one RR, multiple lines if it spans them). 237 * @param rr: this is malloced by the user and the result is stored here, 238 * if an RR is read. If no RR is read this is signalled with the 239 * return len set to 0 (for ORIGIN, TTL directives). 240 * The read line is available in the rr_buf (zero terminated), for 241 * $DIRECTIVE style elements. 242 * @param len: on input, the length of the rr buffer. on output the rr len. 243 * Buffer size of 64k should be enough. 244 * @param dname_len: returns the length of the dname initial part of the rr. 245 * @param parse_state: pass a pointer to user-allocated struct. 246 * Contents are maintained by this function. 247 * If you pass NULL then ORIGIN and TTL directives are not honored. 248 * You can start out with a particular origin by pre-filling it. 249 * otherwise, zero the structure before passing it. 250 * lineno is incremented when a newline is passed by the parser, 251 * you should initialize it at 1 at the start of the file. 252 * @return 0 on success, error on failure. 253 */ 254 int gldns_fp2wire_rr_buf(FILE* in, uint8_t* rr, size_t* len, size_t* dname_len, 255 struct gldns_file_parse_state* parse_state); 256 257 /** 258 * Convert one rdf in rdata to wireformat and parse from string. 259 * @param str: the text to convert for this rdata element. 260 * @param rd: rdata buffer for the wireformat. 261 * @param len: length of rd buffer on input, used length on output. 262 * @param rdftype: the type of the rdf. 263 * @return 0 on success, error on failure. 264 */ 265 int gldns_str2wire_rdf_buf(const char* str, uint8_t* rd, size_t* len, 266 gldns_rdf_type rdftype); 267 268 /** 269 * Convert rdf of type GLDNS_RDF_TYPE_INT8 from string to wireformat. 270 * @param str: the text to convert for this rdata element. 271 * @param rd: rdata buffer for the wireformat. 272 * @param len: length of rd buffer on input, used length on output. 273 * @return 0 on success, error on failure. 274 */ 275 int gldns_str2wire_int8_buf(const char* str, uint8_t* rd, size_t* len); 276 277 /** 278 * Convert rdf of type GLDNS_RDF_TYPE_INT16 from string to wireformat. 279 * @param str: the text to convert for this rdata element. 280 * @param rd: rdata buffer for the wireformat. 281 * @param len: length of rd buffer on input, used length on output. 282 * @return 0 on success, error on failure. 283 */ 284 int gldns_str2wire_int16_buf(const char* str, uint8_t* rd, size_t* len); 285 286 /** 287 * Convert rdf of type GLDNS_RDF_TYPE_INT32 from string to wireformat. 288 * @param str: the text to convert for this rdata element. 289 * @param rd: rdata buffer for the wireformat. 290 * @param len: length of rd buffer on input, used length on output. 291 * @return 0 on success, error on failure. 292 */ 293 int gldns_str2wire_int32_buf(const char* str, uint8_t* rd, size_t* len); 294 295 /** 296 * Convert rdf of type GLDNS_RDF_TYPE_A from string to wireformat. 297 * @param str: the text to convert for this rdata element. 298 * @param rd: rdata buffer for the wireformat. 299 * @param len: length of rd buffer on input, used length on output. 300 * @return 0 on success, error on failure. 301 */ 302 int gldns_str2wire_a_buf(const char* str, uint8_t* rd, size_t* len); 303 304 /** 305 * Convert rdf of type GLDNS_RDF_TYPE_AAAA from string to wireformat. 306 * @param str: the text to convert for this rdata element. 307 * @param rd: rdata buffer for the wireformat. 308 * @param len: length of rd buffer on input, used length on output. 309 * @return 0 on success, error on failure. 310 */ 311 int gldns_str2wire_aaaa_buf(const char* str, uint8_t* rd, size_t* len); 312 313 /** 314 * Convert rdf of type GLDNS_RDF_TYPE_STR from string to wireformat. 315 * @param str: the text to convert for this rdata element. 316 * @param rd: rdata buffer for the wireformat. 317 * @param len: length of rd buffer on input, used length on output. 318 * @return 0 on success, error on failure. 319 */ 320 int gldns_str2wire_str_buf(const char* str, uint8_t* rd, size_t* len); 321 322 /** 323 * Convert rdf of type GLDNS_RDF_TYPE_APL from string to wireformat. 324 * @param str: the text to convert for this rdata element. 325 * @param rd: rdata buffer for the wireformat. 326 * @param len: length of rd buffer on input, used length on output. 327 * @return 0 on success, error on failure. 328 */ 329 int gldns_str2wire_apl_buf(const char* str, uint8_t* rd, size_t* len); 330 331 /** 332 * Convert rdf of type GLDNS_RDF_TYPE_B64 from string to wireformat. 333 * @param str: the text to convert for this rdata element. 334 * @param rd: rdata buffer for the wireformat. 335 * @param len: length of rd buffer on input, used length on output. 336 * @return 0 on success, error on failure. 337 */ 338 int gldns_str2wire_b64_buf(const char* str, uint8_t* rd, size_t* len); 339 340 /** 341 * Convert rdf of type GLDNS_RDF_TYPE_B32_EXT from string to wireformat. 342 * And also GLDNS_RDF_TYPE_NSEC3_NEXT_OWNER. 343 * @param str: the text to convert for this rdata element. 344 * @param rd: rdata buffer for the wireformat. 345 * @param len: length of rd buffer on input, used length on output. 346 * @return 0 on success, error on failure. 347 */ 348 int gldns_str2wire_b32_ext_buf(const char* str, uint8_t* rd, size_t* len); 349 350 /** 351 * Convert rdf of type GLDNS_RDF_TYPE_HEX from string to wireformat. 352 * @param str: the text to convert for this rdata element. 353 * @param rd: rdata buffer for the wireformat. 354 * @param len: length of rd buffer on input, used length on output. 355 * @return 0 on success, error on failure. 356 */ 357 int gldns_str2wire_hex_buf(const char* str, uint8_t* rd, size_t* len); 358 359 /** 360 * Convert rdf of type GLDNS_RDF_TYPE_NSEC from string to wireformat. 361 * @param str: the text to convert for this rdata element. 362 * @param rd: rdata buffer for the wireformat. 363 * @param len: length of rd buffer on input, used length on output. 364 * @return 0 on success, error on failure. 365 */ 366 int gldns_str2wire_nsec_buf(const char* str, uint8_t* rd, size_t* len); 367 368 /** 369 * Convert rdf of type GLDNS_RDF_TYPE_TYPE from string to wireformat. 370 * @param str: the text to convert for this rdata element. 371 * @param rd: rdata buffer for the wireformat. 372 * @param len: length of rd buffer on input, used length on output. 373 * @return 0 on success, error on failure. 374 */ 375 int gldns_str2wire_type_buf(const char* str, uint8_t* rd, size_t* len); 376 377 /** 378 * Convert rdf of type GLDNS_RDF_TYPE_CLASS from string to wireformat. 379 * @param str: the text to convert for this rdata element. 380 * @param rd: rdata buffer for the wireformat. 381 * @param len: length of rd buffer on input, used length on output. 382 * @return 0 on success, error on failure. 383 */ 384 int gldns_str2wire_class_buf(const char* str, uint8_t* rd, size_t* len); 385 386 /** 387 * Convert rdf of type GLDNS_RDF_TYPE_CERT_ALG from string to wireformat. 388 * @param str: the text to convert for this rdata element. 389 * @param rd: rdata buffer for the wireformat. 390 * @param len: length of rd buffer on input, used length on output. 391 * @return 0 on success, error on failure. 392 */ 393 int gldns_str2wire_cert_alg_buf(const char* str, uint8_t* rd, size_t* len); 394 395 /** 396 * Convert rdf of type GLDNS_RDF_TYPE_ALG from string to wireformat. 397 * @param str: the text to convert for this rdata element. 398 * @param rd: rdata buffer for the wireformat. 399 * @param len: length of rd buffer on input, used length on output. 400 * @return 0 on success, error on failure. 401 */ 402 int gldns_str2wire_alg_buf(const char* str, uint8_t* rd, size_t* len); 403 404 /** 405 * Convert rdf of type GLDNS_RDF_TYPE_TIME from string to wireformat. 406 * @param str: the text to convert for this rdata element. 407 * @param rd: rdata buffer for the wireformat. 408 * @param len: length of rd buffer on input, used length on output. 409 * @return 0 on success, error on failure. 410 */ 411 int gldns_str2wire_time_buf(const char* str, uint8_t* rd, size_t* len); 412 413 /** 414 * Convert rdf of type GLDNS_RDF_TYPE_PERIOD from string to wireformat. 415 * @param str: the text to convert for this rdata element. 416 * @param rd: rdata buffer for the wireformat. 417 * @param len: length of rd buffer on input, used length on output. 418 * @return 0 on success, error on failure. 419 */ 420 int gldns_str2wire_period_buf(const char* str, uint8_t* rd, size_t* len); 421 422 /** 423 * Convert rdf of type GLDNS_RDF_TYPE_TSIGTIME from string to wireformat. 424 * @param str: the text to convert for this rdata element. 425 * @param rd: rdata buffer for the wireformat. 426 * @param len: length of rd buffer on input, used length on output. 427 * @return 0 on success, error on failure. 428 */ 429 int gldns_str2wire_tsigtime_buf(const char* str, uint8_t* rd, size_t* len); 430 431 /** 432 * Convert rdf of type GLDNS_RDF_TYPE_TSIGERROR from string to wireformat. 433 * @param str: the text to convert for this rdata element. 434 * @param rd: rdata buffer for the wireformat. 435 * @param len: length of rd buffer on input, used length on output. 436 * @return 0 on success, error on failure. 437 */ 438 int gldns_str2wire_tsigerror_buf(const char* str, uint8_t* rd, size_t* len); 439 440 /** 441 * Convert rdf of type GLDNS_RDF_TYPE_LOC from string to wireformat. 442 * @param str: the text to convert for this rdata element. 443 * @param rd: rdata buffer for the wireformat. 444 * @param len: length of rd buffer on input, used length on output. 445 * @return 0 on success, error on failure. 446 */ 447 int gldns_str2wire_loc_buf(const char* str, uint8_t* rd, size_t* len); 448 449 /** 450 * Convert rdf of type GLDNS_RDF_TYPE_WKS from string to wireformat. 451 * @param str: the text to convert for this rdata element. 452 * @param rd: rdata buffer for the wireformat. 453 * @param len: length of rd buffer on input, used length on output. 454 * @return 0 on success, error on failure. 455 */ 456 int gldns_str2wire_wks_buf(const char* str, uint8_t* rd, size_t* len); 457 458 /** 459 * Convert rdf of type GLDNS_RDF_TYPE_NSAP from string to wireformat. 460 * @param str: the text to convert for this rdata element. 461 * @param rd: rdata buffer for the wireformat. 462 * @param len: length of rd buffer on input, used length on output. 463 * @return 0 on success, error on failure. 464 */ 465 int gldns_str2wire_nsap_buf(const char* str, uint8_t* rd, size_t* len); 466 467 /** 468 * Convert rdf of type GLDNS_RDF_TYPE_ATMA from string to wireformat. 469 * @param str: the text to convert for this rdata element. 470 * @param rd: rdata buffer for the wireformat. 471 * @param len: length of rd buffer on input, used length on output. 472 * @return 0 on success, error on failure. 473 */ 474 int gldns_str2wire_atma_buf(const char* str, uint8_t* rd, size_t* len); 475 476 /** 477 * Convert rdf of type GLDNS_RDF_TYPE_IPSECKEY from string to wireformat. 478 * @param str: the text to convert for this rdata element. 479 * @param rd: rdata buffer for the wireformat. 480 * @param len: length of rd buffer on input, used length on output. 481 * @return 0 on success, error on failure. 482 */ 483 int gldns_str2wire_ipseckey_buf(const char* str, uint8_t* rd, size_t* len); 484 485 /** 486 * Convert rdf of type GLDNS_RDF_TYPE_NSEC3_SALT from string to wireformat. 487 * @param str: the text to convert for this rdata element. 488 * @param rd: rdata buffer for the wireformat. 489 * @param len: length of rd buffer on input, used length on output. 490 * @return 0 on success, error on failure. 491 */ 492 int gldns_str2wire_nsec3_salt_buf(const char* str, uint8_t* rd, size_t* len); 493 494 /** 495 * Convert rdf of type GLDNS_RDF_TYPE_ILNP64 from string to wireformat. 496 * @param str: the text to convert for this rdata element. 497 * @param rd: rdata buffer for the wireformat. 498 * @param len: length of rd buffer on input, used length on output. 499 * @return 0 on success, error on failure. 500 */ 501 int gldns_str2wire_ilnp64_buf(const char* str, uint8_t* rd, size_t* len); 502 503 /** 504 * Convert rdf of type GLDNS_RDF_TYPE_EUI48 from string to wireformat. 505 * @param str: the text to convert for this rdata element. 506 * @param rd: rdata buffer for the wireformat. 507 * @param len: length of rd buffer on input, used length on output. 508 * @return 0 on success, error on failure. 509 */ 510 int gldns_str2wire_eui48_buf(const char* str, uint8_t* rd, size_t* len); 511 512 /** 513 * Convert rdf of type GLDNS_RDF_TYPE_EUI64 from string to wireformat. 514 * @param str: the text to convert for this rdata element. 515 * @param rd: rdata buffer for the wireformat. 516 * @param len: length of rd buffer on input, used length on output. 517 * @return 0 on success, error on failure. 518 */ 519 int gldns_str2wire_eui64_buf(const char* str, uint8_t* rd, size_t* len); 520 521 /** 522 * Convert rdf of type GLDNS_RDF_TYPE_TAG from string to wireformat. 523 * @param str: the text to convert for this rdata element. 524 * @param rd: rdata buffer for the wireformat. 525 * @param len: length of rd buffer on input, used length on output. 526 * @return 0 on success, error on failure. 527 */ 528 int gldns_str2wire_tag_buf(const char* str, uint8_t* rd, size_t* len); 529 530 /** 531 * Convert rdf of type GLDNS_RDF_TYPE_LONG_STR from string to wireformat. 532 * @param str: the text to convert for this rdata element. 533 * @param rd: rdata buffer for the wireformat. 534 * @param len: length of rd buffer on input, used length on output. 535 * @return 0 on success, error on failure. 536 */ 537 int gldns_str2wire_long_str_buf(const char* str, uint8_t* rd, size_t* len); 538 539 /** 540 * Convert rdf of type GLDNS_RDF_TYPE_HIP from string to wireformat. 541 * @param str: the text to convert for this rdata element. 542 * @param rd: rdata buffer for the wireformat. 543 * @param len: length of rd buffer on input, used length on output. 544 * @return 0 on success, error on failure. 545 */ 546 int gldns_str2wire_hip_buf(const char* str, uint8_t* rd, size_t* len); 547 548 /** 549 * Convert rdf of type GLDNS_RDF_TYPE_INT16_DATA from string to wireformat. 550 * @param str: the text to convert for this rdata element. 551 * @param rd: rdata buffer for the wireformat. 552 * @param len: length of rd buffer on input, used length on output. 553 * @return 0 on success, error on failure. 554 */ 555 int gldns_str2wire_int16_data_buf(const char* str, uint8_t* rd, size_t* len); 556 557 /** 558 * Convert rdf of type GLDNS_RDF_TYPE_AMTRELAY from string to wireformat. 559 * @param str: the text to convert for this rdata element. 560 * @param rd: rdata buffer for the wireformat. 561 * @param len: length of rd buffer on input, used length on output. 562 * @return 0 on success, error on failure. 563 */ 564 int gldns_str2wire_amtrelay_buf(const char* str, uint8_t* rd, size_t* len); 565 566 /** 567 * Strip whitespace from the start and the end of line. 568 * @param line: modified with 0 to shorten it. 569 * @return new start with spaces skipped. 570 */ 571 char * gldns_strip_ws(char *line); 572 #ifdef __cplusplus 573 } 574 #endif 575 576 #endif /* GLDNS_STR2WIRE_H */ 577