Asterisk - The Open Source Telephony Project GIT-master-f36a736
Functions
dns_txt.h File Reference

DNS TXT Record Parsing API. More...

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void ast_dns_txt_free_strings (struct ast_vector_string *strings)
 Free strings returned by ast_dns_txt_get_strings. More...
 
size_t ast_dns_txt_get_count (const struct ast_dns_record *record)
 Get the number of character strings in a TXT record. More...
 
struct ast_vector_stringast_dns_txt_get_strings (const struct ast_dns_record *record)
 Get the character strings from this TXT record. More...
 

Detailed Description

DNS TXT Record Parsing API.

Author
Sean Bright sean..nosp@m.brig.nosp@m.ht@gm.nosp@m.ail..nosp@m.com

Definition in file dns_txt.h.

Function Documentation

◆ ast_dns_txt_free_strings()

void ast_dns_txt_free_strings ( struct ast_vector_string strings)

Free strings returned by ast_dns_txt_get_strings.

Since
16.10.0, 17.4.0
Parameters
stringsThe vector to free

Definition at line 123 of file dns_txt.c.

124{
126 AST_VECTOR_PTR_FREE(strings);
127}
#define ast_free(a)
Definition: astmm.h:180
#define AST_VECTOR_PTR_FREE(vec)
Deallocates this vector pointer.
Definition: vector.h:189
#define AST_VECTOR_CALLBACK_VOID(vec, callback,...)
Execute a callback on every element in a vector disregarding callback return.
Definition: vector.h:862

References ast_free, AST_VECTOR_CALLBACK_VOID, and AST_VECTOR_PTR_FREE.

Referenced by ast_dns_txt_get_strings().

◆ ast_dns_txt_get_count()

size_t ast_dns_txt_get_count ( const struct ast_dns_record record)

Get the number of character strings in a TXT record.

Since
16.10.0, 17.4.0
Parameters
recordThe DNS record
Returns
the number of character strings in this TXT record

Definition at line 68 of file dns_txt.c.

69{
70 struct ast_dns_txt_record *txt = (struct ast_dns_txt_record *) record;
71 ast_assert(ast_dns_record_get_rr_type(record) == T_TXT);
72 return txt->count;
73}
int ast_dns_record_get_rr_type(const struct ast_dns_record *record)
Get the resource record type of a DNS record.
Definition: dns_core.c:145
A TXT record.
Definition: dns_internal.h:64
size_t count
The number of character strings in the TXT record.
Definition: dns_internal.h:68
#define ast_assert(a)
Definition: utils.h:739

References ast_assert, ast_dns_record_get_rr_type(), and ast_dns_txt_record::count.

Referenced by ast_dns_txt_get_strings().

◆ ast_dns_txt_get_strings()

struct ast_vector_string * ast_dns_txt_get_strings ( const struct ast_dns_record record)

Get the character strings from this TXT record.

Since
16.10.0, 17.4.0
Parameters
recordThe DNS record
Return values
NULLUnable to allocate memory
Returns
Vector of strings. Free with ast_dns_txt_free_strings

Definition at line 75 of file dns_txt.c.

76{
77 struct ast_vector_string *strings;
78
79 const size_t size = ast_dns_record_get_data_size(record);
80 const char *data = ast_dns_record_get_data(record);
81 const char *end_of_record = data + size;
82
83 ast_assert(ast_dns_record_get_rr_type(record) == T_TXT);
84
85 strings = ast_malloc(sizeof(struct ast_vector_const_string));
86 if (!strings) {
87 return NULL;
88 }
89
90 if (AST_VECTOR_INIT(strings, ast_dns_txt_get_count(record))) {
91 ast_free(strings);
92 return NULL;
93 }
94
95 while (data < end_of_record) {
96 char *s;
97 uint8_t bytes = (uint8_t) *data;
98
99 s = ast_malloc(bytes + 1);
100 if (!s) {
102 return NULL;
103 }
104
105 memcpy(s, &data[1], bytes);
106 s[bytes] = 0;
107
108 /* We know the size in advance so this can't fail */
109 AST_VECTOR_APPEND(strings, s);
110
111 data += bytes + 1;
112 }
113
114 /* Sanity check */
115 if (data != end_of_record) {
117 return NULL;
118 }
119
120 return strings;
121}
#define ast_malloc(len)
A wrapper for malloc()
Definition: astmm.h:191
const char * ast_dns_record_get_data(const struct ast_dns_record *record)
Retrieve the raw DNS record.
Definition: dns_core.c:160
size_t ast_dns_record_get_data_size(const struct ast_dns_record *record)
Retrieve the size of the raw DNS record.
Definition: dns_core.c:165
size_t ast_dns_txt_get_count(const struct ast_dns_record *record)
Get the number of character strings in a TXT record.
Definition: dns_txt.c:68
void ast_dns_txt_free_strings(struct ast_vector_string *strings)
Free strings returned by ast_dns_txt_get_strings.
Definition: dns_txt.c:123
#define NULL
Definition: resample.c:96
String vector definitions.
Definition: vector.h:55
#define AST_VECTOR_INIT(vec, size)
Initialize a vector.
Definition: vector.h:113
#define AST_VECTOR_APPEND(vec, elem)
Append an element to a vector, growing the vector if needed.
Definition: vector.h:256

References ast_assert, ast_dns_record_get_data(), ast_dns_record_get_data_size(), ast_dns_record_get_rr_type(), ast_dns_txt_free_strings(), ast_dns_txt_get_count(), ast_free, ast_malloc, AST_VECTOR_APPEND, AST_VECTOR_INIT, and NULL.