LIBDNS_SOURCES = rdata.c util.c rr.c packet.c wire2host.c \
host2str.c buffer.c str2host.c resolver.c \
- net.c
+ net.c
LIBDNS_HEADERS = ldns/error.h \
ldns/packet.h \
ldns/prototype.h \
#include "util.h"
+#define B64BUFSIZE 65535 /* Buffer size for b64 conversion */
+
typedef struct buffer ldns_buffer;
struct buffer
LDNS_STATUS_INT_EXP,
LDNS_STATUS_INVALID_IP4,
LDNS_STATUS_INVALID_IP6,
- LDNS_STATUS_INVALID_STR
+ LDNS_STATUS_INVALID_STR,
+ LDNS_STATUS_INVALID_B64
};
typedef enum ldns_enum_status ldns_status;
void ldns_rdf_set_data(ldns_rdf *, void *);
ldns_rdf_type ldns_rdf_get_type(ldns_rdf *);
ldns_rdf *ldns_rdf_new(uint16_t, ldns_rdf_type, void *);
+ldns_rdf *ldns_rdf_new_frm_data(uint16_t, ldns_rdf_type, void *);
uint8_t *ldns_rdf_data(ldns_rdf *);
void ldns_rdf_free(ldns_rdf *);
+void ldns_rdf_free_data(ldns_rdf *);
#endif /* !_LDNS_RDATA_H */
syn keyword ldnsMacro LDNS_STATUS_INVALID_IP4
syn keyword ldnsMacro LDNS_STATUS_INVALID_IP6
syn keyword ldnsMacro LDNS_STATUS_INVALID_STR
+syn keyword ldnsMacro LDNS_STATUS_INVALID_B64
" ldns/resolver.h
syn keyword ldnsType ldns_resolver
if (!rd) {
return NULL;
}
-
ldns_rdf_set_size(rd, s);
ldns_rdf_set_type(rd, t);
ldns_rdf_set_data(rd, d);
return rd;
}
+/**
+ * Allocate a new rdf structure and fill it.
+ * This function _does_ copy the contents from
+ * the buffer, unlinke ldns_rdf_new()
+ * \param[in] s size of the buffer
+ * \param[in] t type of the rdf
+ * \param[in] d pointer to the buffer to be copied
+ * \return the new rdf structure or NULL on failure
+ */
+ldns_rdf *
+ldns_rdf_new_frm_data(uint16_t s, ldns_rdf_type t, void *buf)
+{
+ ldns_rdf *rd;
+ rd = MALLOC(ldns_rdf);
+ if (!rd) {
+ return NULL;
+ }
+ ldns_rdf_set_size(rd, s);
+ ldns_rdf_set_type(rd, t);
+ memcpy(rd->_data, buf, s);
+ return rd;
+}
+
+/**
+ * free a rdf structure _and_ free the
+ * data. rdf should be created with _new_frm_data
+ * \param[in] rd the rdf structure to be freed
+ * \return void
+ */
+void
+ldns_rdf_free_data(ldns_rdf *rd)
+{
+ FREE(rd->_data);
+ FREE(rd);
+}
+
+/**
+ * Free a rdf structure leave the
+ * data pointer intact
+ * \param[in] rd the pointer to be freed
+ * \return void
+ */
void
ldns_rdf_free(ldns_rdf *rd)
{
ldns_status
ldns_str2rdf_b64(ldns_rdf **rd, const uint8_t* str)
{
+ uint8_t buffer[B64BUFSIZE];
+ int i;
+
+ i = b64_pton(str, buffer, B64BUFSIZE);
+ if (-1 == i) {
+ return LDNS_STATUS_INVALID_B64;
+ } else {
+ *rd = ldns_rdf_new_frm_data(i, LDNS_RDF_TYPE_B64, buffer);
+ }
return LDNS_STATUS_OK;
}