rdata.h File Reference

Defines ldns_rdf and functions to manipulate those. More...

Go to the source code of this file.

Data Structures

struct  ldns_struct_rdf
 Resource record data field. More...

Defines

#define LDNS_MAX_RDFLEN   65535
#define LDNS_RDF_SIZE_BYTE   1
#define LDNS_RDF_SIZE_WORD   2
#define LDNS_RDF_SIZE_DOUBLEWORD   4
#define LDNS_RDF_SIZE_6BYTES   6
#define LDNS_RDF_SIZE_16BYTES   16
#define LDNS_NSEC3_VARS_OPTOUT_MASK   0x01

Typedefs

typedef enum ldns_enum_rdf_type ldns_rdf_type
typedef enum
ldns_enum_cert_algorithm 
ldns_cert_algorithm
typedef struct ldns_struct_rdf ldns_rdf

Enumerations

enum  ldns_enum_rdf_type {
  LDNS_RDF_TYPE_NONE, LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_INT16,
  LDNS_RDF_TYPE_INT32, LDNS_RDF_TYPE_A, LDNS_RDF_TYPE_AAAA, LDNS_RDF_TYPE_STR,
  LDNS_RDF_TYPE_APL, LDNS_RDF_TYPE_B32_EXT, LDNS_RDF_TYPE_B64, LDNS_RDF_TYPE_HEX,
  LDNS_RDF_TYPE_NSEC, LDNS_RDF_TYPE_TYPE, LDNS_RDF_TYPE_CLASS, LDNS_RDF_TYPE_CERT_ALG,
  LDNS_RDF_TYPE_ALG, LDNS_RDF_TYPE_UNKNOWN, LDNS_RDF_TYPE_TIME, LDNS_RDF_TYPE_PERIOD,
  LDNS_RDF_TYPE_TSIGTIME, LDNS_RDF_TYPE_TSIG, LDNS_RDF_TYPE_INT16_DATA, LDNS_RDF_TYPE_SERVICE,
  LDNS_RDF_TYPE_LOC, LDNS_RDF_TYPE_WKS, LDNS_RDF_TYPE_NSAP, LDNS_RDF_TYPE_IPSECKEY,
  LDNS_RDF_TYPE_NSEC3_SALT, LDNS_RDF_TYPE_NSEC3_NEXT_OWNER
}
 The different types of RDATA fields. More...
enum  ldns_enum_cert_algorithm {
  LDNS_CERT_PKIX = 1, LDNS_CERT_SPKI = 2, LDNS_CERT_PGP = 3, LDNS_CERT_URI = 253,
  LDNS_CERT_OID = 254
}
 algorithms used in CERT rrs More...

Functions

void ldns_rdf_set_size (ldns_rdf *rd, size_t size)
 sets the size of the rdf.
void ldns_rdf_set_type (ldns_rdf *rd, ldns_rdf_type type)
 sets the size of the rdf.
void ldns_rdf_set_data (ldns_rdf *rd, void *data)
 sets the size of the rdf.
size_t ldns_rdf_size (const ldns_rdf *rd)
 returns the size of the rdf.
ldns_rdf_type ldns_rdf_get_type (const ldns_rdf *rd)
 returns the type of the rdf.
uint8_t * ldns_rdf_data (const ldns_rdf *rd)
 returns the data of the rdf.
ldns_rdfldns_rdf_new (ldns_rdf_type type, size_t size, void *data)
 allocates a new rdf structure and fills it.
ldns_rdfldns_rdf_new_frm_data (ldns_rdf_type type, size_t size, const void *data)
 allocates a new rdf structure and fills it.
ldns_rdfldns_rdf_new_frm_str (ldns_rdf_type type, const char *str)
 creates a new rdf from a string.
ldns_status ldns_rdf_new_frm_fp (ldns_rdf **r, ldns_rdf_type type, FILE *fp)
 creates a new rdf from a file containing a string.
ldns_status ldns_rdf_new_frm_fp_l (ldns_rdf **r, ldns_rdf_type type, FILE *fp, int *line_nr)
 creates a new rdf from a file containing a string.
void ldns_rdf_free (ldns_rdf *rd)
 frees a rdf structure, leaving the data pointer intact.
void ldns_rdf_deep_free (ldns_rdf *rd)
 frees a rdf structure _and_ frees the data.
ldns_rdfldns_native2rdf_int8 (ldns_rdf_type type, uint8_t value)
 returns the rdf containing the native uint8_t repr.
ldns_rdfldns_native2rdf_int16 (ldns_rdf_type type, uint16_t value)
 returns the rdf containing the native uint16_t representation.
ldns_rdfldns_native2rdf_int32 (ldns_rdf_type type, uint32_t value)
 returns an rdf that contains the given int32 value.
ldns_rdfldns_native2rdf_int16_data (size_t size, uint8_t *data)
 returns an int16_data rdf that contains the data in the given array, preceded by an int16 specifying the length.
ldns_rdfldns_rdf_address_reverse (ldns_rdf *rd)
 reverses an rdf, only actually useful for AAAA and A records.
uint8_t ldns_rdf2native_int8 (const ldns_rdf *rd)
 returns the native uint8_t representation from the rdf.
uint16_t ldns_rdf2native_int16 (const ldns_rdf *rd)
 returns the native uint16_t representation from the rdf.
uint32_t ldns_rdf2native_int32 (const ldns_rdf *rd)
 returns the native uint32_t representation from the rdf.
time_t ldns_rdf2native_time_t (const ldns_rdf *rd)
 returns the native time_t representation from the rdf.
uint32_t ldns_str2period (const char *nptr, const char **endptr)
 converts a ttl value (like 5d2h) to a long.
ldns_status ldns_octet (char *word, size_t *length)
 removes \DDD, \[space] and other escapes from the input.
ldns_rdfldns_rdf_clone (const ldns_rdf *rd)
 clones a rdf structure.
int ldns_rdf_compare (const ldns_rdf *rd1, const ldns_rdf *rd2)
 compares two rdf's on their wire formats.


Detailed Description

Defines ldns_rdf and functions to manipulate those.

Definition in file rdata.h.


Define Documentation

#define LDNS_MAX_RDFLEN   65535

Definition at line 27 of file rdata.h.

#define LDNS_RDF_SIZE_BYTE   1

Definition at line 29 of file rdata.h.

#define LDNS_RDF_SIZE_WORD   2

Definition at line 30 of file rdata.h.

#define LDNS_RDF_SIZE_DOUBLEWORD   4

Definition at line 31 of file rdata.h.

#define LDNS_RDF_SIZE_6BYTES   6

Definition at line 32 of file rdata.h.

#define LDNS_RDF_SIZE_16BYTES   16

Definition at line 33 of file rdata.h.

#define LDNS_NSEC3_VARS_OPTOUT_MASK   0x01

Definition at line 35 of file rdata.h.


Typedef Documentation

Definition at line 103 of file rdata.h.

Definition at line 116 of file rdata.h.

typedef struct ldns_struct_rdf ldns_rdf

Definition at line 136 of file rdata.h.


Enumeration Type Documentation

The different types of RDATA fields.

Enumerator:
LDNS_RDF_TYPE_NONE  none
LDNS_RDF_TYPE_DNAME  domain name
LDNS_RDF_TYPE_INT8  8 bits
LDNS_RDF_TYPE_INT16  16 bits
LDNS_RDF_TYPE_INT32  32 bits
LDNS_RDF_TYPE_A  A record.
LDNS_RDF_TYPE_AAAA  AAAA record.
LDNS_RDF_TYPE_STR  txt string
LDNS_RDF_TYPE_APL  apl data
LDNS_RDF_TYPE_B32_EXT  b32 string
LDNS_RDF_TYPE_B64  b64 string
LDNS_RDF_TYPE_HEX  hex string
LDNS_RDF_TYPE_NSEC  nsec type codes
LDNS_RDF_TYPE_TYPE  a RR type
LDNS_RDF_TYPE_CLASS  a class
LDNS_RDF_TYPE_CERT_ALG  certificate algorithm
LDNS_RDF_TYPE_ALG  a key algorithm
LDNS_RDF_TYPE_UNKNOWN  unknown types
LDNS_RDF_TYPE_TIME  time (32 bits)
LDNS_RDF_TYPE_PERIOD  period
LDNS_RDF_TYPE_TSIGTIME  tsig time 48 bits
LDNS_RDF_TYPE_TSIG 
LDNS_RDF_TYPE_INT16_DATA  variable length any type rdata where the length is specified by the first 2 bytes
LDNS_RDF_TYPE_SERVICE  protocol and port bitmaps
LDNS_RDF_TYPE_LOC  location data
LDNS_RDF_TYPE_WKS  well known services
LDNS_RDF_TYPE_NSAP  NSAP.
LDNS_RDF_TYPE_IPSECKEY  IPSECKEY.
LDNS_RDF_TYPE_NSEC3_SALT  nsec3 hash salt
LDNS_RDF_TYPE_NSEC3_NEXT_OWNER  nsec3 base32 string (with length byte on wire

Definition at line 40 of file rdata.h.

algorithms used in CERT rrs

Enumerator:
LDNS_CERT_PKIX 
LDNS_CERT_SPKI 
LDNS_CERT_PGP 
LDNS_CERT_URI 
LDNS_CERT_OID 

Definition at line 108 of file rdata.h.


Function Documentation

void ldns_rdf_set_size ( ldns_rdf rd,
size_t  size 
)

sets the size of the rdf.

Parameters:
[in] *rd the rdf to operate on
[in] size the new size
Returns:
void

Definition at line 46 of file rdata.c.

References ldns_struct_rdf::_size.

void ldns_rdf_set_type ( ldns_rdf rd,
ldns_rdf_type  type 
)

sets the size of the rdf.

Parameters:
[in] *rd the rdf to operate on
[in] type the new type
Returns:
void

Definition at line 53 of file rdata.c.

References ldns_struct_rdf::_type.

void ldns_rdf_set_data ( ldns_rdf rd,
void *  data 
)

sets the size of the rdf.

Parameters:
[in] *rd the rdf to operate on
[in] *data pointer to the new data
Returns:
void

Definition at line 60 of file rdata.c.

References ldns_struct_rdf::_data.

size_t ldns_rdf_size ( const ldns_rdf rd  ) 

returns the size of the rdf.

Parameters:
[in] *rd the rdf to read from
Returns:
uint16_t with the size

Definition at line 24 of file rdata.c.

References ldns_struct_rdf::_size.

ldns_rdf_type ldns_rdf_get_type ( const ldns_rdf rd  ) 

returns the type of the rdf.

We need to insert _get_ here to prevent conflict the the rdf_type TYPE.

Parameters:
[in] *rd the rdf to read from
Returns:
ldns_rdf_type with the type

Definition at line 31 of file rdata.c.

References ldns_struct_rdf::_type.

uint8_t* ldns_rdf_data ( const ldns_rdf rd  ) 

returns the data of the rdf.

Parameters:
[in] *rd the rdf to read from
Returns:
uint8_t* pointer to the rdf's data

Definition at line 38 of file rdata.c.

References ldns_struct_rdf::_data.

ldns_rdf* ldns_rdf_new ( ldns_rdf_type  type,
size_t  size,
void *  data 
)

allocates a new rdf structure and fills it.

This function DOES NOT copy the contents from the buffer, unlinke ldns_rdf_new_frm_data()

Parameters:
[in] type type of the rdf
[in] size size of the buffer
[in] data pointer to the buffer to be copied
Returns:
the new rdf structure or NULL on failure

Definition at line 157 of file rdata.c.

References LDNS_MALLOC, ldns_rdf_set_data(), ldns_rdf_set_size(), and ldns_rdf_set_type().

ldns_rdf* ldns_rdf_new_frm_data ( ldns_rdf_type  type,
size_t  size,
const void *  data 
)

allocates a new rdf structure and fills it.

This function _does_ copy the contents from the buffer, unlinke ldns_rdf_new()

Parameters:
[in] type type of the rdf
[in] size size of the buffer
[in] data pointer to the buffer to be copied
Returns:
the new rdf structure or NULL on failure

Definition at line 171 of file rdata.c.

References ldns_struct_rdf::_data, LDNS_MALLOC, LDNS_MAX_RDFLEN, ldns_rdf_set_size(), ldns_rdf_set_type(), and LDNS_XMALLOC.

ldns_rdf* ldns_rdf_new_frm_str ( ldns_rdf_type  type,
const char *  str 
)

ldns_status ldns_rdf_new_frm_fp ( ldns_rdf **  r,
ldns_rdf_type  type,
FILE *  fp 
)

creates a new rdf from a file containing a string.

Parameters:
[out] r the new rdf
[in] type type to use
[in] fp the file pointer to use
Returns:
LDNS_STATUS_OK or the error

Definition at line 322 of file rdata.c.

References ldns_rdf_new_frm_fp_l().

ldns_status ldns_rdf_new_frm_fp_l ( ldns_rdf **  r,
ldns_rdf_type  type,
FILE *  fp,
int *  line_nr 
)

creates a new rdf from a file containing a string.

Parameters:
[out] r the new rdf
[in] type type to use
[in] fp the file pointer to use
[in] line_nr pointer to an integer containing the current line number (for debugging purposes)
Returns:
LDNS_STATUS_OK or the error

Definition at line 328 of file rdata.c.

References ldns_fget_token_l(), LDNS_FREE, LDNS_MAX_LINELEN, LDNS_PARSE_SKIP_SPACE, ldns_rdf_new_frm_str(), LDNS_STATUS_MEM_ERR, LDNS_STATUS_NULL, LDNS_STATUS_OK, LDNS_STATUS_SYNTAX_RDATA_ERR, and LDNS_XMALLOC.

void ldns_rdf_free ( ldns_rdf rd  ) 

frees a rdf structure, leaving the data pointer intact.

Parameters:
[in] rd the pointer to be freed
Returns:
void

Definition at line 214 of file rdata.c.

References LDNS_FREE.

void ldns_rdf_deep_free ( ldns_rdf rd  ) 

frees a rdf structure _and_ frees the data.

rdf should be created with _new_frm_data

Parameters:
[in] rd the rdf structure to be freed
Returns:
void

Definition at line 203 of file rdata.c.

References ldns_struct_rdf::_data, and LDNS_FREE.

ldns_rdf* ldns_native2rdf_int8 ( ldns_rdf_type  type,
uint8_t  value 
)

returns the rdf containing the native uint8_t repr.

Parameters:
[in] type the ldns_rdf type to use
[in] value the uint8_t to use
Returns:
ldns_rdf* with the converted value

Definition at line 126 of file rdata.c.

References ldns_rdf_new_frm_data(), and LDNS_RDF_SIZE_BYTE.

ldns_rdf* ldns_native2rdf_int16 ( ldns_rdf_type  type,
uint16_t  value 
)

returns the rdf containing the native uint16_t representation.

Parameters:
[in] type the ldns_rdf type to use
[in] value the uint16_t to use
Returns:
ldns_rdf* with the converted value

Definition at line 132 of file rdata.c.

References ldns_rdf_new(), LDNS_RDF_SIZE_WORD, and LDNS_XMALLOC.

ldns_rdf* ldns_native2rdf_int32 ( ldns_rdf_type  type,
uint32_t  value 
)

returns an rdf that contains the given int32 value.

Because multiple rdf types can contain an int32, the type must be specified

Parameters:
[in] type the ldns_rdf type to use
[in] value the uint32_t to use
Returns:
ldns_rdf* with the converted value

Definition at line 140 of file rdata.c.

References ldns_rdf_new(), LDNS_RDF_SIZE_DOUBLEWORD, and LDNS_XMALLOC.

ldns_rdf* ldns_native2rdf_int16_data ( size_t  size,
uint8_t *  data 
)

returns an int16_data rdf that contains the data in the given array, preceded by an int16 specifying the length.

The memory is copied, and an LDNS_RDF_TYPE_INT16DATA is returned

Parameters:
[in] size the size of the data
[in] *data pointer to the actual data
Returns:
ldns_rd* the rdf with the data

Definition at line 148 of file rdata.c.

References ldns_rdf_new(), LDNS_RDF_TYPE_INT16_DATA, and LDNS_XMALLOC.

ldns_rdf* ldns_rdf_address_reverse ( ldns_rdf rd  ) 

reverses an rdf, only actually useful for AAAA and A records.

The returned rdf has the type LDNS_RDF_TYPE_DNAME!

Parameters:
[in] *rd rdf to be reversed
Returns:
the reversed rdf (a newly created rdf)

Definition at line 355 of file rdata.c.

References ldns_dname_cat_clone(), ldns_dname_new_frm_str(), LDNS_FREE, ldns_int_to_hexdigit(), LDNS_IP4ADDRLEN, LDNS_IP6ADDRLEN, ldns_rdf2str(), ldns_rdf_data(), ldns_rdf_deep_free(), ldns_rdf_get_type(), ldns_rdf_new_frm_data(), LDNS_RDF_TYPE_A, LDNS_RDF_TYPE_AAAA, and LDNS_XMALLOC.

uint8_t ldns_rdf2native_int8 ( const ldns_rdf rd  ) 

returns the native uint8_t representation from the rdf.

Parameters:
[in] rd the ldns_rdf to operate on
Returns:
uint8_t the value extracted

Definition at line 70 of file rdata.c.

References ldns_rdf_data(), ldns_rdf_size(), and LDNS_RDF_SIZE_BYTE.

uint16_t ldns_rdf2native_int16 ( const ldns_rdf rd  ) 

returns the native uint16_t representation from the rdf.

Parameters:
[in] rd the ldns_rdf to operate on
Returns:
uint16_t the value extracted

Definition at line 84 of file rdata.c.

References ldns_rdf_data(), ldns_rdf_size(), and LDNS_RDF_SIZE_WORD.

uint32_t ldns_rdf2native_int32 ( const ldns_rdf rd  ) 

returns the native uint32_t representation from the rdf.

Parameters:
[in] rd the ldns_rdf to operate on
Returns:
uint32_t the value extracted

Definition at line 98 of file rdata.c.

References ldns_rdf_data(), ldns_rdf_size(), and LDNS_RDF_SIZE_DOUBLEWORD.

time_t ldns_rdf2native_time_t ( const ldns_rdf rd  ) 

returns the native time_t representation from the rdf.

Parameters:
[in] rd the ldns_rdf to operate on
Returns:
time_t the value extracted (32 bits currently)

Definition at line 112 of file rdata.c.

References ldns_rdf_data(), ldns_rdf_get_type(), and LDNS_RDF_TYPE_TIME.

uint32_t ldns_str2period ( const char *  nptr,
const char **  endptr 
)

converts a ttl value (like 5d2h) to a long.

Parameters:
[in] nptr the start of the string
[out] endptr points to the last char in case of error
Returns:
the convert duration value

Definition at line 558 of file rdata.c.

ldns_status ldns_octet ( char *  word,
size_t *  length 
)

removes \DDD, \[space] and other escapes from the input.

See RFC 1035, section 5.1.

Parameters:
[in] word what to check
[in] length the string
Returns:
ldns_status mesg

Definition at line 462 of file rdata.c.

References LDNS_STATUS_DDD_OVERFLOW, LDNS_STATUS_EMPTY_LABEL, and LDNS_STATUS_OK.

ldns_rdf* ldns_rdf_clone ( const ldns_rdf rd  ) 

clones a rdf structure.

The data is copied.

Parameters:
[in] rd rdf to be copied
Returns:
a new rdf structure

Definition at line 195 of file rdata.c.

References ldns_rdf_data(), ldns_rdf_get_type(), ldns_rdf_new_frm_data(), and ldns_rdf_size().

int ldns_rdf_compare ( const ldns_rdf rd1,
const ldns_rdf rd2 
)

compares two rdf's on their wire formats.

(To order dnames according to rfc4034, use ldns_dname_compare)

Parameters:
[in] rd1 the first one
[in] rd2 the second one
Returns:
0 if equal

-1 if rd1 comes before rd2

+1 if rd2 comes before rd1

Definition at line 524 of file rdata.c.

References ldns_rdf_data(), and ldns_rdf_size().


Generated on Fri Aug 8 02:52:42 2008 for ldns by  doxygen 1.5.6