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
22extern "C" {
23#endif
24struct 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 */
62int 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 */
74int 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 */
83uint8_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 */
104int 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 */
124int 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 */
135uint16_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 */
144uint16_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 */
153uint32_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 */
165uint16_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 */
174uint8_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 */
183uint8_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 */
246const char* sldns_get_errorstr_parse(int e);
247
248/**
249 * wire parse state for parsing files
250 */
251struct 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 */
287int 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 */
298int 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 */
308int 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 */
317int 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 */
326int 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 */
335int 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 */
344int 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 */
353int 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 */
362int 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 */
371int 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 */
381int 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 */
390int 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 */
399int 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 */
408int 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 */
417int 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 */
426int 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 */
435int 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 */
444int 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 */
453int 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 */
462int 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 */
471int 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 */
480int 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 */
489int 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 */
498int 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 */
507int 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 */
516int 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 */
525int 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 */
534int 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 */
543int 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 */
552int sldns_str2wire_eui64_buf(const char* str, uint8_t* rd, size_t* len);
553
554/**
555 * Convert rdf of type LDNS_RDF_TYPE_TAG 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 */
561int sldns_str2wire_tag_buf(const char* str, uint8_t* rd, size_t* len);
562
563/**
564 * Convert rdf of type LDNS_RDF_TYPE_LONG_STR 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 */
570int sldns_str2wire_long_str_buf(const char* str, uint8_t* rd, size_t* len);
571
572/**
573 * Convert rdf of type LDNS_RDF_TYPE_HIP 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 */
579int sldns_str2wire_hip_buf(const char* str, uint8_t* rd, size_t* len);
580
581/**
582 * Convert rdf of type LDNS_RDF_TYPE_INT16_DATA 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 */
588int sldns_str2wire_int16_data_buf(const char* str, uint8_t* rd, size_t* len);
589
590/**
591 * Strip whitespace from the start and the end of line.
592 * @param line: modified with 0 to shorten it.
593 * @return new start with spaces skipped.
594 */
595char * sldns_strip_ws(char *line);
596#ifdef __cplusplus
597}
598#endif
599
600#endif /* LDNS_STR2WIRE_H */
601