]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
B64 define in buffer
authorMiek Gieben <miekg@NLnetLabs.nl>
Mon, 24 Jan 2005 10:24:25 +0000 (10:24 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Mon, 24 Jan 2005 10:24:25 +0000 (10:24 +0000)
added _frm_data to rdf_new to copy pointer contents
moved to new function in str2host

Makefile.in
ldns/buffer.h
ldns/error.h
ldns/rdata.h
libdns.vim
rdata.c
str2host.c

index 478541abc2bb77a4928f4b54fe322ff0af2a910a..f3dfdc1ab8b3d936462a9efd348a4e929e40a306 100644 (file)
@@ -22,7 +22,7 @@ LINTFLAGS     = +quiet +posixlib -weak -warnposix -unrecog -Din_addr_t=uint32_t -Du_
 
 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        \
index 136e22c7630f18b4b54a3bfdf34f1c6682bb0f39..e75afdbf5fc8d263d6b9d855573048b1005b1c4c 100644 (file)
@@ -19,6 +19,8 @@
 
 #include "util.h"
 
+#define B64BUFSIZE      65535           /* Buffer size for b64 conversion */
+
 typedef struct buffer ldns_buffer;
 
 struct buffer
index 1dfaf2662dce9a037a0f8958fc36ef2d9547cd97..39673d67c56491f2e9ba23a6ca43d531b1420150 100644 (file)
@@ -28,7 +28,8 @@ enum ldns_enum_status
        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;
 
index 835670f69823652d953e1d3b797206616bd03154..7f0092602beeebd1124c4063bf0ca9e07ed3e668 100644 (file)
@@ -111,7 +111,9 @@ void            ldns_rdf_set_type(ldns_rdf *, ldns_rdf_type);
 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 */
index a418c78c86c12390d7fc9962cf71f2ca8953f604..289909d13750320983a19fbb266a9d8bc029af6f 100644 (file)
@@ -62,6 +62,7 @@ syn keyword ldnsMacro LDNS_STATUS_ERR
 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
diff --git a/rdata.c b/rdata.c
index 784eb2ed0f095c6515b08e125c000397056f86b3..0a0e7c4b2110667f28d158345d82cfdac2599010 100644 (file)
--- a/rdata.c
+++ b/rdata.c
@@ -74,13 +74,54 @@ ldns_rdf_new(uint16_t s, ldns_rdf_type t, void *d)
        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)
 {
index ac6a708b45e42064e6eb398e2530a339ad299c35..6db0e6048874bce2478cdf59aba63aece7a86d0f 100644 (file)
@@ -221,6 +221,15 @@ ldns_str2rdf_apl(ldns_rdf **rd, const uint8_t* str)
 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;
 }