ldns documentation

- Main Page
- Related Pages
- Data Structures
- Files

- File List
- Globals

Functions
rdata.c File Reference

Go to the source code of this file.

## Functions
size_t | ldns_rdf_size (const ldns_rdf *rd)
| returns the size of the rdf. More...
ldns_rdf_type | ldns_rdf_get_type (const ldns_rdf *rd)
| returns the type of the rdf. More...
uint8_t * | ldns_rdf_data (const ldns_rdf *rd)
| returns the data of the rdf. More...
void | ldns_rdf_set_size (ldns_rdf *rd, size_t size)
| sets the size of the rdf. More...
void | ldns_rdf_set_type (ldns_rdf *rd, ldns_rdf_type type)
| sets the size of the rdf. More...
void | ldns_rdf_set_data (ldns_rdf *rd, void *data)
| sets the size of the rdf. More...
uint8_t | ldns_rdf2native_int8 (const ldns_rdf *rd)
| returns the native uint8_t representation from the rdf. More...
uint16_t | ldns_rdf2native_int16 (const ldns_rdf *rd)
| returns the native uint16_t representation from the rdf. More...
uint32_t | ldns_rdf2native_int32 (const ldns_rdf *rd)
| returns the native uint32_t representation from the rdf. More...
time_t | ldns_rdf2native_time_t (const ldns_rdf *rd)
| returns the native time_t representation from the rdf. More...
ldns_rdf * | ldns_native2rdf_int8 (ldns_rdf_type type, uint8_t value)
| returns the rdf containing the native uint8_t repr. More...
ldns_rdf * | ldns_native2rdf_int16 (ldns_rdf_type type, uint16_t value)
| returns the rdf containing the native uint16_t representation. More...
ldns_rdf * | ldns_native2rdf_int32 (ldns_rdf_type type, uint32_t value)
| returns an rdf that contains the given int32 value. More...
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. More...
ldns_rdf * | ldns_rdf_new (ldns_rdf_type type, size_t size, void *data)
| allocates a new rdf structure and fills it. More...
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. More...
ldns_rdf * | ldns_rdf_clone (const ldns_rdf *rd)
| clones a rdf structure. More...
void | ldns_rdf_deep_free (ldns_rdf *rd)
| frees a rdf structure and frees the data. More...
void | ldns_rdf_free (ldns_rdf *rd)
| frees a rdf structure, leaving the data pointer intact. More...
ldns_rdf * | ldns_rdf_new_frm_str (ldns_rdf_type type, const char *str)
| creates a new rdf from a string. More...
ldns_status | ldns_rdf_new_frm_fp (ldns_rdf **rdf, ldns_rdf_type type, FILE *fp)
| creates a new rdf from a file containing a string. More...
ldns_status | ldns_rdf_new_frm_fp_l (ldns_rdf **rdf, ldns_rdf_type type, FILE *fp, int *line_nr)
| creates a new rdf from a file containing a string. More...
ldns_rdf * | ldns_rdf_address_reverse (ldns_rdf *rd)
| reverses an rdf, only actually useful for AAAA and A records. More...
ldns_status | ldns_rdf_hip_get_alg_hit_pk (ldns_rdf *rdf, uint8_t *alg, uint8_t *hit_size, uint8_t **hit, uint16_t *pk_size, uint8_t **pk)
| Gets the algorithm value, the HIT and Public Key data from the rdf with type LDNS_RDF_TYPE_HIP. More...
ldns_status | ldns_rdf_hip_new_frm_alg_hit_pk (ldns_rdf **rdf, uint8_t alg, uint8_t hit_size, uint8_t *hit, uint16_t pk_size, uint8_t *pk)
| Creates a new LDNS_RDF_TYPE_HIP rdf from given data. More...
ldns_status | ldns_octet (char *word, size_t *length)
| removes \DDD, \[space] and other escapes from the input. More...
int | ldns_rdf_compare (const ldns_rdf *rd1, const ldns_rdf *rd2)
| compares two rdf's on their wire formats. More...
uint32_t | ldns_str2period (const char *nptr, const char **endptr)
| converts a ttl value (like 5d2h) to a long. More...

## Function Documentation

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.

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.

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(), ldns_rdf_size(), LDNS_RDF_SIZE_DOUBLEWORD, and LDNS_RDF_TYPE_TIME.

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_FREE, 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 147 of file rdata.c.

References LDNS_FREE, 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 162 of file rdata.c.

References LDNS_FREE, ldns_rdf_new(), LDNS_RDF_TYPE_INT16_DATA, and LDNS_XMALLOC.

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 179 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 193 of file rdata.c.

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

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 222 of file rdata.c.

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

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 230 of file rdata.c.

References ldns_struct_rdf::_data, and LDNS_FREE.

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 241 of file rdata.c.

References LDNS_FREE.

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

creates a new rdf from a string.

Parameters

  [in] | type | type to use
  [in] | str | string to use

Returns
  ldns_rdf* or NULL in case of an error

Definition at line 249 of file rdata.c.

References LDNS_FREE, ldns_rdf_set_type(), LDNS_RDF_TYPE_A, LDNS_RDF_TYPE_AAAA, LDNS_RDF_TYPE_ALG, LDNS_RDF_TYPE_APL, LDNS_RDF_TYPE_ATMA, LDNS_RDF_TYPE_B32_EXT, LDNS_RDF_TYPE_B64, LDNS_RDF_TYPE_CERT_ALG, LDNS_RDF_TYPE_CLASS, LDNS_RDF_TYPE_DNAME, LDNS_RDF_TYPE_EUI48, LDNS_RDF_TYPE_EUI64, LDNS_RDF_TYPE_HEX, LDNS_RDF_TYPE_HIP, LDNS_RDF_TYPE_ILNP64, LDNS_RDF_TYPE_INT16, LDNS_RDF_TYPE_INT32, LDNS_RDF_TYPE_INT8, LDNS_RDF_TYPE_IPSECKEY, LDNS_RDF_TYPE_LOC, LDNS_RDF_TYPE_LONG_STR, LDNS_RDF_TYPE_NONE, LDNS_RDF_TYPE_NSAP, LDNS_RDF_TYPE_NSEC, LDNS_RDF_TYPE_NSEC3_NEXT_OWNER, LDNS_RDF_TYPE_NSEC3_SALT, LDNS_RDF_TYPE_PERIOD, LDNS_RDF_TYPE_SERVICE, LDNS_RDF_TYPE_STR, LDNS_RDF_TYPE_TAG, LDNS_RDF_TYPE_TIME, LDNS_RDF_TYPE_TYPE, LDNS_RDF_TYPE_UNKNOWN, LDNS_RDF_TYPE_WKS, LDNS_STATUS_ERR, LDNS_STATUS_OK, ldns_str2rdf_a(), ldns_str2rdf_aaaa(), ldns_str2rdf_alg(), ldns_str2rdf_apl(), ldns_str2rdf_atma(), ldns_str2rdf_b32_ext(), ldns_str2rdf_b64(), ldns_str2rdf_cert_alg(), ldns_str2rdf_class(), ldns_str2rdf_dname(), ldns_str2rdf_eui48(), ldns_str2rdf_eui64(), ldns_str2rdf_hex(), ldns_str2rdf_hip(), ldns_str2rdf_ilnp64(), ldns_str2rdf_int16(), ldns_str2rdf_int32(), ldns_str2rdf_int8(), ldns_str2rdf_ipseckey(), ldns_str2rdf_loc(), ldns_str2rdf_long_str(), ldns_str2rdf_nsap(), ldns_str2rdf_nsec(), ldns_str2rdf_nsec3_salt(), ldns_str2rdf_period(), ldns_str2rdf_service(), ldns_str2rdf_str(), ldns_str2rdf_tag(), ldns_str2rdf_time(), ldns_str2rdf_type(), ldns_str2rdf_unknown(), and ldns_str2rdf_wks().

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 371 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 377 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.

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 404 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.

ldns_status ldns_rdf_hip_get_alg_hit_pk | ( | ldns_rdf * | rdf,
|  | uint8_t * | alg,
|  | uint8_t * | hit_size,
|  | uint8_t ** | hit,
|  | uint16_t * | pk_size,
|  | uint8_t ** | pk
| ) |  |

Gets the algorithm value, the HIT and Public Key data from the rdf with type LDNS_RDF_TYPE_HIP.

Parameters

  [in] | rdf | the rdf with type LDNS_RDF_TYPE_HIP
  [out] | alg | the algorithm
  [out] | hit_size | the size of the HIT data
  [out] | hit | the hit data
  [out] | pk_size | the size of the Public Key data
  [out] | pk | the Public Key data

Returns
  LDNS_STATUS_OK on success, and the error otherwise

Definition at line 522 of file rdata.c.

References ldns_rdf_data(), ldns_rdf_get_type(), ldns_rdf_size(), LDNS_RDF_TYPE_HIP, LDNS_STATUS_INVALID_POINTER, LDNS_STATUS_INVALID_RDF_TYPE, LDNS_STATUS_OK, and LDNS_STATUS_WIRE_RDATA_ERR.

ldns_status ldns_rdf_hip_new_frm_alg_hit_pk | ( | ldns_rdf ** | rdf,
|  | uint8_t | alg,
|  | uint8_t | hit_size,
|  | uint8_t * | hit,
|  | uint16_t | pk_size,
|  | uint8_t * | pk
| ) |  |

Creates a new LDNS_RDF_TYPE_HIP rdf from given data.

Parameters

  [out] | rdf | the newly created LDNS_RDF_TYPE_HIP rdf
  [in] | alg | the algorithm
  [in] | hit_size | the size of the HIT data
  [in] | hit | the hit data
  [in] | pk_size | the size of the Public Key data
  [in] | pk | the Public Key data

Returns
  LDNS_STATUS_OK on success, and the error otherwise

Definition at line 550 of file rdata.c.

References LDNS_FREE, LDNS_MAX_RDFLEN, ldns_rdf_new(), LDNS_RDF_TYPE_HIP, LDNS_STATUS_INVALID_POINTER, LDNS_STATUS_MEM_ERR, LDNS_STATUS_OK, LDNS_STATUS_RDATA_OVERFLOW, and LDNS_XMALLOC.

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 580 of file rdata.c.

References LDNS_STATUS_DDD_OVERFLOW, LDNS_STATUS_EMPTY_LABEL, and LDNS_STATUS_OK.

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 642 of file rdata.c.

References ldns_rdf_data(), and ldns_rdf_size().

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 676 of file rdata.c.