Home | History | Annotate | Line # | Download | only in sldns
      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 LDNS_STR2WIRE_H
     16 #define LDNS_STR2WIRE_H
     17 
     18 /* include rrdef for MAX_DOMAINLEN constant */
     19 #include <sldns/rrdef.h>
     20 
     21 #ifdef __cplusplus
     22 extern "C" {
     23 #endif
     24 struct sldns_struct_lookup_table;
     25 
     26 #define LDNS_IP4ADDRLEN      (32/8)
     27 #define LDNS_IP6ADDRLEN      (128/8)
     28 
     29 /** buffer to read an RR, cannot be larger than 64K because of packet size */
     30 #define LDNS_RR_BUF_SIZE 65535 /* bytes */
     31 #define LDNS_DEFAULT_TTL	3600
     32 
     33 /* SVCB keys currently defined in draft-ietf-dnsop-svcb-https */
     34 #define SVCB_KEY_MANDATORY		0
     35 #define SVCB_KEY_ALPN			1
     36 #define SVCB_KEY_NO_DEFAULT_ALPN	2
     37 #define SVCB_KEY_PORT			3
     38 #define SVCB_KEY_IPV4HINT		4
     39 #define SVCB_KEY_ECH			5
     40 #define SVCB_KEY_IPV6HINT		6
     41 #define SVCB_KEY_DOHPATH		7
     42 #define SVCPARAMKEY_COUNT		8
     43 
     44 #define MAX_NUMBER_OF_SVCPARAMS	64
     45 
     46 #define SVCB_MAX_COMMA_SEPARATED_VALUES	1000
     47 
     48 /*
     49  * To convert class and type to string see
     50  * sldns_get_rr_class_by_name(str)
     51  * sldns_get_rr_type_by_name(str)
     52  * from rrdef.h
     53  */
     54 
     55 /**
     56  * Convert text string into dname wireformat, mallocless, with user buffer.
     57  * @param str: the text string with the domain name.
     58  * @param buf: the result buffer, suggested size LDNS_MAX_DOMAINLEN+1
     59  * @param len: length of the buffer on input, length of the result on output.
     60  * @return 0 on success, otherwise an error.
     61  */
     62 int sldns_str2wire_dname_buf(const char* str, uint8_t* buf, size_t* len);
     63 
     64 /**
     65  * Same as sldns_str2wire_dname_buf, but concatenates origin if the domain
     66  * name is relative (does not end in '.').
     67  * @param str: the text string with the domain name.
     68  * @param buf: the result buffer, suggested size LDNS_MAX_DOMAINLEN+1
     69  * @param len: length of the buffer on input, length of the result on output.
     70  * @param origin: the origin to append or NULL (nothing is appended).
     71  * @param origin_len: length of origin.
     72  * @return 0 on success, otherwise an error.
     73  */
     74 int sldns_str2wire_dname_buf_origin(const char* str, uint8_t* buf, size_t* len,
     75 	uint8_t* origin, size_t origin_len);
     76 
     77 /**
     78  * Convert text string into dname wireformat
     79  * @param str: the text string with the domain name.
     80  * @param len: returned length of wireformat.
     81  * @return wireformat dname (malloced) or NULL on failure.
     82  */
     83 uint8_t* sldns_str2wire_dname(const char* str, size_t* len);
     84 
     85 /**
     86  * Convert text RR to wireformat, with user buffer.
     87  * @param str: the RR data in text presentation format.
     88  * @param rr: the buffer where the result is stored into.  This buffer has
     89  * 	the wire-dname(uncompressed), type, class, ttl, rdatalen, rdata.
     90  * 	These values are probably not aligned, and in network format.
     91  * 	Use the sldns_wirerr_get_xxx functions to access them safely.
     92  * 	buffer size LDNS_RR_BUF_SIZE is suggested.
     93  * @param len: on input the length of the buffer, on output the amount of
     94  * 	the buffer used for the rr.
     95  * @param dname_len: if non-NULL, filled with the dname length as result.
     96  * 	Because after the dname you find the type, class, ttl, rdatalen, rdata.
     97  * @param default_ttl: TTL used if no TTL available.
     98  * @param origin: used for origin dname (if not NULL)
     99  * @param origin_len: length of origin.
    100  * @param prev: used for prev_rr dname (if not NULL)
    101  * @param prev_len: length of prev.
    102  * @return 0 on success, an error on failure.
    103  */
    104 int sldns_str2wire_rr_buf(const char* str, uint8_t* rr, size_t* len,
    105 	size_t* dname_len, uint32_t default_ttl, uint8_t* origin,
    106 	size_t origin_len, uint8_t* prev, size_t prev_len);
    107 
    108 /**
    109  * Same as sldns_str2wire_rr_buf, but there is no rdata, it returns an RR
    110  * with zero rdata and no ttl.  It has name, type, class.
    111  * You can access those with the sldns_wirerr_get_type and class functions.
    112  * @param str: the RR data in text presentation format.
    113  * @param rr: the buffer where the result is stored into.
    114  * @param len: on input the length of the buffer, on output the amount of
    115  * 	the buffer used for the rr.
    116  * @param dname_len: if non-NULL, filled with the dname length as result.
    117  * 	Because after the dname you find the type, class, ttl, rdatalen, rdata.
    118  * @param origin: used for origin dname (if not NULL)
    119  * @param origin_len: length of origin.
    120  * @param prev: used for prev_rr dname (if not NULL)
    121  * @param prev_len: length of prev.
    122  * @return 0 on success, an error on failure.
    123  */
    124 int sldns_str2wire_rr_question_buf(const char* str, uint8_t* rr, size_t* len,
    125 	size_t* dname_len, uint8_t* origin, size_t origin_len, uint8_t* prev,
    126 	size_t prev_len);
    127 
    128 /**
    129  * Get the type 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 type in host byteorder
    134  */
    135 uint16_t sldns_wirerr_get_type(uint8_t* rr, size_t len, size_t dname_len);
    136 
    137 /**
    138  * Get the class 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 class in host byteorder
    143  */
    144 uint16_t sldns_wirerr_get_class(uint8_t* rr, size_t len, size_t dname_len);
    145 
    146 /**
    147  * Get the ttl of the RR.
    148  * @param rr: the RR in wire format.
    149  * @param len: rr length.
    150  * @param dname_len: dname length to skip.
    151  * @return ttl in host byteorder
    152  */
    153 uint32_t sldns_wirerr_get_ttl(uint8_t* rr, size_t len, size_t dname_len);
    154 
    155 /**
    156  * Get the rdata length of the RR.
    157  * @param rr: the RR in wire format.
    158  * @param len: rr length.
    159  * @param dname_len: dname length to skip.
    160  * @return rdata length in host byteorder
    161  * 	If the rdata length is larger than the rr-len allows, it is truncated.
    162  * 	So, that it is safe to read the data length returned
    163  * 	from this function from the rdata pointer of sldns_wirerr_get_rdata.
    164  */
    165 uint16_t sldns_wirerr_get_rdatalen(uint8_t* rr, size_t len, size_t dname_len);
    166 
    167 /**
    168  * Get the rdata pointer of the RR.
    169  * @param rr: the RR in wire format.
    170  * @param len: rr length.
    171  * @param dname_len: dname length to skip.
    172  * @return rdata pointer
    173  */
    174 uint8_t* sldns_wirerr_get_rdata(uint8_t* rr, size_t len, size_t dname_len);
    175 
    176 /**
    177  * Get the rdata pointer of the RR. prefixed with rdata length.
    178  * @param rr: the RR in wire format.
    179  * @param len: rr length.
    180  * @param dname_len: dname length to skip.
    181  * @return pointer to rdatalength, followed by the rdata.
    182  */
    183 uint8_t* sldns_wirerr_get_rdatawl(uint8_t* rr, size_t len, size_t dname_len);
    184 
    185 /**
    186  * Parse result codes
    187  */
    188 #define LDNS_WIREPARSE_MASK 0x0fff
    189 #define LDNS_WIREPARSE_SHIFT 12
    190 #define LDNS_WIREPARSE_ERROR(e) ((e)&LDNS_WIREPARSE_MASK)
    191 #define LDNS_WIREPARSE_OFFSET(e) ((((unsigned)(e))&~LDNS_WIREPARSE_MASK)>>LDNS_WIREPARSE_SHIFT)
    192 /* use lookuptable to get error string, sldns_wireparse_errors */
    193 #define LDNS_WIREPARSE_ERR_OK 0
    194 #define LDNS_WIREPARSE_ERR_GENERAL 342
    195 #define LDNS_WIREPARSE_ERR_DOMAINNAME_OVERFLOW 343
    196 #define LDNS_WIREPARSE_ERR_DOMAINNAME_UNDERFLOW 344
    197 #define LDNS_WIREPARSE_ERR_BUFFER_TOO_SMALL 345
    198 #define LDNS_WIREPARSE_ERR_LABEL_OVERFLOW 346
    199 #define LDNS_WIREPARSE_ERR_EMPTY_LABEL 347
    200 #define LDNS_WIREPARSE_ERR_SYNTAX_BAD_ESCAPE 348
    201 #define LDNS_WIREPARSE_ERR_SYNTAX 349
    202 #define LDNS_WIREPARSE_ERR_SYNTAX_TTL 350
    203 #define LDNS_WIREPARSE_ERR_SYNTAX_TYPE 351
    204 #define LDNS_WIREPARSE_ERR_SYNTAX_CLASS 352
    205 #define LDNS_WIREPARSE_ERR_SYNTAX_RDATA 353
    206 #define LDNS_WIREPARSE_ERR_SYNTAX_MISSING_VALUE 354
    207 #define LDNS_WIREPARSE_ERR_INVALID_STR 355
    208 #define LDNS_WIREPARSE_ERR_SYNTAX_B64 356
    209 #define LDNS_WIREPARSE_ERR_SYNTAX_B32_EXT 357
    210 #define LDNS_WIREPARSE_ERR_SYNTAX_HEX 358
    211 #define LDNS_WIREPARSE_ERR_CERT_BAD_ALGORITHM 359
    212 #define LDNS_WIREPARSE_ERR_SYNTAX_TIME 360
    213 #define LDNS_WIREPARSE_ERR_SYNTAX_PERIOD 361
    214 #define LDNS_WIREPARSE_ERR_SYNTAX_ILNP64 362
    215 #define LDNS_WIREPARSE_ERR_SYNTAX_EUI48 363
    216 #define LDNS_WIREPARSE_ERR_SYNTAX_EUI64 364
    217 #define LDNS_WIREPARSE_ERR_SYNTAX_TAG 365
    218 #define LDNS_WIREPARSE_ERR_NOT_IMPL 366
    219 #define LDNS_WIREPARSE_ERR_SYNTAX_INT 367
    220 #define LDNS_WIREPARSE_ERR_SYNTAX_IP4 368
    221 #define LDNS_WIREPARSE_ERR_SYNTAX_IP6 369
    222 #define LDNS_WIREPARSE_ERR_SYNTAX_INTEGER_OVERFLOW 370
    223 #define LDNS_WIREPARSE_ERR_INCLUDE 371
    224 #define LDNS_WIREPARSE_ERR_PARENTHESIS 372
    225 #define LDNS_WIREPARSE_ERR_SVCB_UNKNOWN_KEY 373
    226 #define LDNS_WIREPARSE_ERR_SVCB_MISSING_PARAM 374
    227 #define LDNS_WIREPARSE_ERR_SVCB_TOO_MANY_PARAMS 375
    228 #define LDNS_WIREPARSE_ERR_SVCB_DUPLICATE_KEYS 376
    229 #define LDNS_WIREPARSE_ERR_SVCB_MANDATORY_TOO_MANY_KEYS 377
    230 #define LDNS_WIREPARSE_ERR_SVCB_MANDATORY_MISSING_PARAM 378
    231 #define LDNS_WIREPARSE_ERR_SVCB_MANDATORY_DUPLICATE_KEY 379
    232 #define LDNS_WIREPARSE_ERR_SVCB_MANDATORY_IN_MANDATORY 380
    233 #define LDNS_WIREPARSE_ERR_SVCB_PORT_VALUE_SYNTAX 381
    234 #define LDNS_WIREPARSE_ERR_SVCB_IPV4_TOO_MANY_ADDRESSES 382
    235 #define LDNS_WIREPARSE_ERR_SVCB_IPV6_TOO_MANY_ADDRESSES 383
    236 #define LDNS_WIREPARSE_ERR_SVCB_ALPN_KEY_TOO_LARGE 384
    237 #define LDNS_WIREPARSE_ERR_SVCB_NO_DEFAULT_ALPN_VALUE 385
    238 #define LDNS_WIREPARSE_ERR_SVCPARAM_BROKEN_RDATA 386
    239 
    240 
    241 /**
    242  * Get reference to a constant string for the (parse) error.
    243  * @param e: error return value
    244  * @return string.
    245  */
    246 const char* sldns_get_errorstr_parse(int e);
    247 
    248 /**
    249  * wire parse state for parsing files
    250  */
    251 struct sldns_file_parse_state {
    252 	/** the origin domain name, if len!=0. uncompressed wireformat */
    253 	uint8_t origin[LDNS_MAX_DOMAINLEN+1];
    254 	/** length of origin domain name, in bytes. 0 if not set. */
    255 	size_t origin_len;
    256 	/** the previous domain name, if len!=0. uncompressed wireformat*/
    257 	uint8_t prev_rr[LDNS_MAX_DOMAINLEN+1];
    258 	/** length of the previous domain name, in bytes. 0 if not set. */
    259 	size_t prev_rr_len;
    260 	/** default TTL, this is used if the text does not specify a TTL,
    261 	 * host byteorder */
    262 	uint32_t default_ttl;
    263 	/** line number information */
    264 	int lineno;
    265 };
    266 
    267 /**
    268  * Read one RR from zonefile with buffer for the data.
    269  * @param in: file that is read from (one RR, multiple lines if it spans them).
    270  * @param rr: this is malloced by the user and the result is stored here,
    271  * 	if an RR is read.  If no RR is read this is signalled with the
    272  * 	return len set to 0 (for ORIGIN, TTL directives).
    273  * 	The read line is available in the rr_buf (zero terminated), for
    274  * 	$DIRECTIVE style elements.
    275  * @param len: on input, the length of the rr buffer.  on output the rr len.
    276  * 	Buffer size of 64k should be enough.
    277  * @param dname_len: returns the length of the dname initial part of the rr.
    278  * @param parse_state: pass a pointer to user-allocated struct.
    279  * 	Contents are maintained by this function.
    280  * 	If you pass NULL then ORIGIN and TTL directives are not honored.
    281  * 	You can start out with a particular origin by pre-filling it.
    282  * 	otherwise, zero the structure before passing it.
    283  * 	lineno is incremented when a newline is passed by the parser,
    284  * 	you should initialize it at 1 at the start of the file.
    285  * @return 0 on success, error on failure.
    286  */
    287 int sldns_fp2wire_rr_buf(FILE* in, uint8_t* rr, size_t* len, size_t* dname_len,
    288 	struct sldns_file_parse_state* parse_state);
    289 
    290 /**
    291  * Convert one rdf in rdata to wireformat and parse from string.
    292  * @param str: the text to convert for this rdata element.
    293  * @param rd: rdata buffer for the wireformat.
    294  * @param len: length of rd buffer on input, used length on output.
    295  * @param rdftype: the type of the rdf.
    296  * @return 0 on success, error on failure.
    297  */
    298 int sldns_str2wire_rdf_buf(const char* str, uint8_t* rd, size_t* len,
    299 	sldns_rdf_type rdftype);
    300 
    301 /**
    302  * Convert rdf of type LDNS_RDF_TYPE_INT8 from string to wireformat.
    303  * @param str: the text to convert for this rdata element.
    304  * @param rd: rdata buffer for the wireformat.
    305  * @param len: length of rd buffer on input, used length on output.
    306  * @return 0 on success, error on failure.
    307  */
    308 int sldns_str2wire_int8_buf(const char* str, uint8_t* rd, size_t* len);
    309 
    310 /**
    311  * Convert rdf of type LDNS_RDF_TYPE_INT16 from string to wireformat.
    312  * @param str: the text to convert for this rdata element.
    313  * @param rd: rdata buffer for the wireformat.
    314  * @param len: length of rd buffer on input, used length on output.
    315  * @return 0 on success, error on failure.
    316  */
    317 int sldns_str2wire_int16_buf(const char* str, uint8_t* rd, size_t* len);
    318 
    319 /**
    320  * Convert rdf of type LDNS_RDF_TYPE_INT32 from string to wireformat.
    321  * @param str: the text to convert for this rdata element.
    322  * @param rd: rdata buffer for the wireformat.
    323  * @param len: length of rd buffer on input, used length on output.
    324  * @return 0 on success, error on failure.
    325  */
    326 int sldns_str2wire_int32_buf(const char* str, uint8_t* rd, size_t* len);
    327 
    328 /**
    329  * Convert rdf of type LDNS_RDF_TYPE_A from string to wireformat.
    330  * @param str: the text to convert for this rdata element.
    331  * @param rd: rdata buffer for the wireformat.
    332  * @param len: length of rd buffer on input, used length on output.
    333  * @return 0 on success, error on failure.
    334  */
    335 int sldns_str2wire_a_buf(const char* str, uint8_t* rd, size_t* len);
    336 
    337 /**
    338  * Convert rdf of type LDNS_RDF_TYPE_AAAA from string to wireformat.
    339  * @param str: the text to convert for this rdata element.
    340  * @param rd: rdata buffer for the wireformat.
    341  * @param len: length of rd buffer on input, used length on output.
    342  * @return 0 on success, error on failure.
    343  */
    344 int sldns_str2wire_aaaa_buf(const char* str, uint8_t* rd, size_t* len);
    345 
    346 /**
    347  * Convert rdf of type LDNS_RDF_TYPE_STR from string to wireformat.
    348  * @param str: the text to convert for this rdata element.
    349  * @param rd: rdata buffer for the wireformat.
    350  * @param len: length of rd buffer on input, used length on output.
    351  * @return 0 on success, error on failure.
    352  */
    353 int sldns_str2wire_str_buf(const char* str, uint8_t* rd, size_t* len);
    354 
    355 /**
    356  * Convert rdf of type LDNS_RDF_TYPE_APL from string to wireformat.
    357  * @param str: the text to convert for this rdata element.
    358  * @param rd: rdata buffer for the wireformat.
    359  * @param len: length of rd buffer on input, used length on output.
    360  * @return 0 on success, error on failure.
    361  */
    362 int sldns_str2wire_apl_buf(const char* str, uint8_t* rd, size_t* len);
    363 
    364 /**
    365  * Convert rdf of type LDNS_RDF_TYPE_B64 from string to wireformat.
    366  * @param str: the text to convert for this rdata element.
    367  * @param rd: rdata buffer for the wireformat.
    368  * @param len: length of rd buffer on input, used length on output.
    369  * @return 0 on success, error on failure.
    370  */
    371 int sldns_str2wire_b64_buf(const char* str, uint8_t* rd, size_t* len);
    372 
    373 /**
    374  * Convert rdf of type LDNS_RDF_TYPE_B32_EXT from string to wireformat.
    375  * And also LDNS_RDF_TYPE_NSEC3_NEXT_OWNER.
    376  * @param str: the text to convert for this rdata element.
    377  * @param rd: rdata buffer for the wireformat.
    378  * @param len: length of rd buffer on input, used length on output.
    379  * @return 0 on success, error on failure.
    380  */
    381 int sldns_str2wire_b32_ext_buf(const char* str, uint8_t* rd, size_t* len);
    382 
    383 /**
    384  * Convert rdf of type LDNS_RDF_TYPE_HEX from string to wireformat.
    385  * @param str: the text to convert for this rdata element.
    386  * @param rd: rdata buffer for the wireformat.
    387  * @param len: length of rd buffer on input, used length on output.
    388  * @return 0 on success, error on failure.
    389  */
    390 int sldns_str2wire_hex_buf(const char* str, uint8_t* rd, size_t* len);
    391 
    392 /**
    393  * Convert rdf of type LDNS_RDF_TYPE_NSEC from string to wireformat.
    394  * @param str: the text to convert for this rdata element.
    395  * @param rd: rdata buffer for the wireformat.
    396  * @param len: length of rd buffer on input, used length on output.
    397  * @return 0 on success, error on failure.
    398  */
    399 int sldns_str2wire_nsec_buf(const char* str, uint8_t* rd, size_t* len);
    400 
    401 /**
    402  * Convert rdf of type LDNS_RDF_TYPE_TYPE from string to wireformat.
    403  * @param str: the text to convert for this rdata element.
    404  * @param rd: rdata buffer for the wireformat.
    405  * @param len: length of rd buffer on input, used length on output.
    406  * @return 0 on success, error on failure.
    407  */
    408 int sldns_str2wire_type_buf(const char* str, uint8_t* rd, size_t* len);
    409 
    410 /**
    411  * Convert rdf of type LDNS_RDF_TYPE_CLASS from string to wireformat.
    412  * @param str: the text to convert for this rdata element.
    413  * @param rd: rdata buffer for the wireformat.
    414  * @param len: length of rd buffer on input, used length on output.
    415  * @return 0 on success, error on failure.
    416  */
    417 int sldns_str2wire_class_buf(const char* str, uint8_t* rd, size_t* len);
    418 
    419 /**
    420  * Convert rdf of type LDNS_RDF_TYPE_CERT_ALG from string to wireformat.
    421  * @param str: the text to convert for this rdata element.
    422  * @param rd: rdata buffer for the wireformat.
    423  * @param len: length of rd buffer on input, used length on output.
    424  * @return 0 on success, error on failure.
    425  */
    426 int sldns_str2wire_cert_alg_buf(const char* str, uint8_t* rd, size_t* len);
    427 
    428 /**
    429  * Convert rdf of type LDNS_RDF_TYPE_ALG from string to wireformat.
    430  * @param str: the text to convert for this rdata element.
    431  * @param rd: rdata buffer for the wireformat.
    432  * @param len: length of rd buffer on input, used length on output.
    433  * @return 0 on success, error on failure.
    434  */
    435 int sldns_str2wire_alg_buf(const char* str, uint8_t* rd, size_t* len);
    436 
    437 /**
    438  * Convert rdf of type LDNS_RDF_TYPE_TIME from string to wireformat.
    439  * @param str: the text to convert for this rdata element.
    440  * @param rd: rdata buffer for the wireformat.
    441  * @param len: length of rd buffer on input, used length on output.
    442  * @return 0 on success, error on failure.
    443  */
    444 int sldns_str2wire_time_buf(const char* str, uint8_t* rd, size_t* len);
    445 
    446 /**
    447  * Convert rdf of type LDNS_RDF_TYPE_PERIOD from string to wireformat.
    448  * @param str: the text to convert for this rdata element.
    449  * @param rd: rdata buffer for the wireformat.
    450  * @param len: length of rd buffer on input, used length on output.
    451  * @return 0 on success, error on failure.
    452  */
    453 int sldns_str2wire_period_buf(const char* str, uint8_t* rd, size_t* len);
    454 
    455 /**
    456  * Convert rdf of type LDNS_RDF_TYPE_TSIGTIME from string to wireformat.
    457  * @param str: the text to convert for this rdata element.
    458  * @param rd: rdata buffer for the wireformat.
    459  * @param len: length of rd buffer on input, used length on output.
    460  * @return 0 on success, error on failure.
    461  */
    462 int sldns_str2wire_tsigtime_buf(const char* str, uint8_t* rd, size_t* len);
    463 
    464 /**
    465  * Convert rdf of type LDNS_RDF_TYPE_TSIGERROR from string to wireformat.
    466  * @param str: the text to convert for this rdata element.
    467  * @param rd: rdata buffer for the wireformat.
    468  * @param len: length of rd buffer on input, used length on output.
    469  * @return 0 on success, error on failure.
    470  */
    471 int sldns_str2wire_tsigerror_buf(const char* str, uint8_t* rd, size_t* len);
    472 
    473 /**
    474  * Convert rdf of type LDNS_RDF_TYPE_LOC from string to wireformat.
    475  * @param str: the text to convert for this rdata element.
    476  * @param rd: rdata buffer for the wireformat.
    477  * @param len: length of rd buffer on input, used length on output.
    478  * @return 0 on success, error on failure.
    479  */
    480 int sldns_str2wire_loc_buf(const char* str, uint8_t* rd, size_t* len);
    481 
    482 /**
    483  * Convert rdf of type LDNS_RDF_TYPE_WKS from string to wireformat.
    484  * @param str: the text to convert for this rdata element.
    485  * @param rd: rdata buffer for the wireformat.
    486  * @param len: length of rd buffer on input, used length on output.
    487  * @return 0 on success, error on failure.
    488  */
    489 int sldns_str2wire_wks_buf(const char* str, uint8_t* rd, size_t* len);
    490 
    491 /**
    492  * Convert rdf of type LDNS_RDF_TYPE_NSAP from string to wireformat.
    493  * @param str: the text to convert for this rdata element.
    494  * @param rd: rdata buffer for the wireformat.
    495  * @param len: length of rd buffer on input, used length on output.
    496  * @return 0 on success, error on failure.
    497  */
    498 int sldns_str2wire_nsap_buf(const char* str, uint8_t* rd, size_t* len);
    499 
    500 /**
    501  * Convert rdf of type LDNS_RDF_TYPE_ATMA from string to wireformat.
    502  * @param str: the text to convert for this rdata element.
    503  * @param rd: rdata buffer for the wireformat.
    504  * @param len: length of rd buffer on input, used length on output.
    505  * @return 0 on success, error on failure.
    506  */
    507 int sldns_str2wire_atma_buf(const char* str, uint8_t* rd, size_t* len);
    508 
    509 /**
    510  * Convert rdf of type LDNS_RDF_TYPE_IPSECKEY from string to wireformat.
    511  * @param str: the text to convert for this rdata element.
    512  * @param rd: rdata buffer for the wireformat.
    513  * @param len: length of rd buffer on input, used length on output.
    514  * @return 0 on success, error on failure.
    515  */
    516 int sldns_str2wire_ipseckey_buf(const char* str, uint8_t* rd, size_t* len);
    517 
    518 /**
    519  * Convert rdf of type LDNS_RDF_TYPE_NSEC3_SALT from string to wireformat.
    520  * @param str: the text to convert for this rdata element.
    521  * @param rd: rdata buffer for the wireformat.
    522  * @param len: length of rd buffer on input, used length on output.
    523  * @return 0 on success, error on failure.
    524  */
    525 int sldns_str2wire_nsec3_salt_buf(const char* str, uint8_t* rd, size_t* len);
    526 
    527 /**
    528  * Convert rdf of type LDNS_RDF_TYPE_ILNP64 from string to wireformat.
    529  * @param str: the text to convert for this rdata element.
    530  * @param rd: rdata buffer for the wireformat.
    531  * @param len: length of rd buffer on input, used length on output.
    532  * @return 0 on success, error on failure.
    533  */
    534 int sldns_str2wire_ilnp64_buf(const char* str, uint8_t* rd, size_t* len);
    535 
    536 /**
    537  * Convert rdf of type LDNS_RDF_TYPE_EUI48 from string to wireformat.
    538  * @param str: the text to convert for this rdata element.
    539  * @param rd: rdata buffer for the wireformat.
    540  * @param len: length of rd buffer on input, used length on output.
    541  * @return 0 on success, error on failure.
    542  */
    543 int sldns_str2wire_eui48_buf(const char* str, uint8_t* rd, size_t* len);
    544 
    545 /**
    546  * Convert rdf of type LDNS_RDF_TYPE_EUI64 from string to wireformat.
    547  * @param str: the text to convert for this rdata element.
    548  * @param rd: rdata buffer for the wireformat.
    549  * @param len: length of rd buffer on input, used length on output.
    550  * @return 0 on success, error on failure.
    551  */
    552 int sldns_str2wire_eui64_buf(const char* str, uint8_t* rd, size_t* len);
    553 
    554 /**
    555  * Convert rdf of type LDNS_RDF_TYPE_UNQUOTED from string to wireformat.
    556  * @param str: the text to convert for this rdata element.
    557  * @param rd: rdata buffer for the wireformat.
    558  * @param len: length of rd buffer on input, used length on output.
    559  * @return 0 on success, error on failure.
    560  */
    561 int sldns_str2wire_unquoted_buf(const char* str, uint8_t* rd, size_t* len);
    562 
    563 /**
    564  * Convert rdf of type LDNS_RDF_TYPE_TAG from string to wireformat.
    565  * @param str: the text to convert for this rdata element.
    566  * @param rd: rdata buffer for the wireformat.
    567  * @param len: length of rd buffer on input, used length on output.
    568  * @return 0 on success, error on failure.
    569  */
    570 int sldns_str2wire_tag_buf(const char* str, uint8_t* rd, size_t* len);
    571 
    572 /**
    573  * Convert rdf of type LDNS_RDF_TYPE_LONG_STR from string to wireformat.
    574  * @param str: the text to convert for this rdata element.
    575  * @param rd: rdata buffer for the wireformat.
    576  * @param len: length of rd buffer on input, used length on output.
    577  * @return 0 on success, error on failure.
    578  */
    579 int sldns_str2wire_long_str_buf(const char* str, uint8_t* rd, size_t* len);
    580 
    581 /**
    582  * Convert rdf of type LDNS_RDF_TYPE_HIP from string to wireformat.
    583  * @param str: the text to convert for this rdata element.
    584  * @param rd: rdata buffer for the wireformat.
    585  * @param len: length of rd buffer on input, used length on output.
    586  * @return 0 on success, error on failure.
    587  */
    588 int sldns_str2wire_hip_buf(const char* str, uint8_t* rd, size_t* len);
    589 
    590 /**
    591  * Convert rdf of type LDNS_RDF_TYPE_INT16_DATA from string to wireformat.
    592  * @param str: the text to convert for this rdata element.
    593  * @param rd: rdata buffer for the wireformat.
    594  * @param len: length of rd buffer on input, used length on output.
    595  * @return 0 on success, error on failure.
    596  */
    597 int sldns_str2wire_int16_data_buf(const char* str, uint8_t* rd, size_t* len);
    598 
    599 /**
    600  * Strip whitespace from the start and the end of line.
    601  * @param line: modified with 0 to shorten it.
    602  * @return new start with spaces skipped.
    603  */
    604 char * sldns_strip_ws(char *line);
    605 #ifdef __cplusplus
    606 }
    607 #endif
    608 
    609 #endif /* LDNS_STR2WIRE_H */
    610