]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
some concatenate functions added. More accesor stuff
authorMiek Gieben <miekg@NLnetLabs.nl>
Mon, 28 Feb 2005 10:44:41 +0000 (10:44 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Mon, 28 Feb 2005 10:44:41 +0000 (10:44 +0000)
dname.c
ldns/dname.h
ldns/rr.h
packet.c
resolver.c
rr.c
run-test1.c

diff --git a/dname.c b/dname.c
index 62a8ffc39ffba13e0f44bd56e4a100a7e17488f9..d9490656fb7ae35672015b5a0d2a1c20c198d173 100644 (file)
--- a/dname.c
+++ b/dname.c
@@ -32,7 +32,7 @@
  * \return a new rdf with leftside/rightside
  */
 ldns_rdf *
-ldns_dname_concat(ldns_rdf *rd1, ldns_rdf *rd2)
+ldns_dname_cat(ldns_rdf *rd1, ldns_rdf *rd2)
 {
        ldns_rdf *new;
        uint16_t new_size;
index 6e7e18468d85b365a1b44d7900434134875d9812..ea052510fccdec334e18d92946323c1586e115d0 100644 (file)
@@ -20,6 +20,6 @@
 /* prototypes */
 uint8_t         ldns_rdf_dname_label_count(ldns_rdf *);
 ldns_rdf       *ldns_dname_new_frm_str(const char *);
-ldns_rdf       *ldns_dname_concat(ldns_rdf *, ldns_rdf *);
+ldns_rdf       *ldns_dname_cat(ldns_rdf *, ldns_rdf *);
 
 #endif /* !_LDNS_DNAME_H */
index 8fa96874b4bf2f2fac69697174284e1f2ce481b6..db1246c6888763905eb2928df23403fb103377cc 100644 (file)
--- a/ldns/rr.h
+++ b/ldns/rr.h
@@ -273,5 +273,6 @@ ldns_rr *ldns_rr_clone(ldns_rr *rr);
 ldns_rr *ldns_rr_new_frm_str(const char *);
 ldns_rr *ldns_rr_list_pop_rr(ldns_rr_list *);
 ldns_rr *ldns_rr_set_pop_rr(ldns_rr_list *);
+ldns_rr_list *ldns_rr_list_cat(ldns_rr_list *, ldns_rr_list *);
 
 #endif /* _LDNS_RR_H */
index 60b09faf339231f3833e2b1628c43d0e24c39b40..770fa992d6f1a536c4138bb47e09bb1d248adcb1 100644 (file)
--- a/packet.c
+++ b/packet.c
@@ -134,11 +134,19 @@ ldns_pkt_additional(const ldns_pkt *packet)
 
 /* return ALL section concatenated */
 ldns_rr_list *
-ldns_pkt_all(const ldns_pkt *packet)
-{
-       ldns_pkt_print(stdout, packet);
-       return NULL;
-       /* TODO Miek */
+ldns_pkt_all(ldns_pkt *packet)
+{
+       /* mem leaks?? :( */
+       ldns_rr_list *all;
+
+       all = ldns_rr_list_cat(
+                       ldns_pkt_xxsection(packet, LDNS_SECTION_QUESTION),
+                       ldns_pkt_xxsection(packet, LDNS_SECTION_ANSWER));
+       all = ldns_rr_list_cat(all,
+                       ldns_pkt_xxsection(packet, LDNS_SECTION_AUTHORITY));
+       all = ldns_rr_list_cat(all,
+                       ldns_pkt_xxsection(packet, LDNS_SECTION_ADDITIONAL));
+       return all;
 }
 
 size_t
index 58b599cccbe513125db557d1dc1fa2da6cdef7dd..b9428ceb61d320173c410b92cf7cc27fa2db95d8 100644 (file)
@@ -311,7 +311,7 @@ ldns_resolver_query(ldns_resolver *r, ldns_rdf *name, ldns_rr_type type, ldns_rr
                return ldns_resolver_send(r, name, type, class, flags);
        }
 
-       newname = ldns_dname_concat(name, ldns_resolver_domain(r));
+       newname = ldns_dname_cat(name, ldns_resolver_domain(r));
 
        if (!newname) {
                return NULL;
diff --git a/rr.c b/rr.c
index 4f4b056d872910976e35df4dbe9ba10df313c9bb..1d736a264ff4699b9c4c8a0cecf583298eea2994 100644 (file)
--- a/rr.c
+++ b/rr.c
@@ -365,7 +365,50 @@ ldns_rr_list_free(ldns_rr_list *rr_list)
        FREE(rr_list);
 }
 
-/* need a pop here too */
+
+/**
+ * concatenate two ldns_rr_lists together
+ * \param[in] left the leftside
+ * \param[in] right the rightside
+ * \return a new rr_list with leftside/rightside concatenated
+ */
+ldns_rr_list *
+ldns_rr_list_cat(ldns_rr_list *left, ldns_rr_list *right)
+{
+       uint16_t l_rr_count;
+       uint16_t r_rr_count;
+       uint16_t i;
+       ldns_rr_list *cat;
+
+       l_rr_count = ldns_rr_list_rr_count(left);
+       r_rr_count = ldns_rr_list_rr_count(right);
+
+       /* check it not exceeding uint16_t size XXX XXX MIEK TODO */
+       cat = ldns_rr_list_new();
+
+       if (!cat) {
+               return NULL;
+       }
+
+       /* left */
+       for(i = 0; i < l_rr_count; i++) {
+               ldns_rr_list_push_rr(cat, 
+                               ldns_rr_list_rr(left, i));
+       }
+       /* right */
+       for(i = 0; i < r_rr_count; i++) {
+               ldns_rr_list_push_rr(cat, 
+                               ldns_rr_list_rr(right, i));
+       }
+       return cat;
+}
+
+/**
+ * push an  rr to a rrlist
+ * \param[in] rr_list the rr_list to push to 
+ * \param[in] rr the rr to push 
+ * \return NULL on error, otherwise true
+ */
 bool
 ldns_rr_list_push_rr(ldns_rr_list *rr_list, ldns_rr *rr)
 {
@@ -446,6 +489,7 @@ bool
 ldns_rr_set_push_rr(ldns_rr_list *rr_list, ldns_rr *rr)
 {
        uint16_t rr_count;
+       uint16_t i;
        ldns_rr *last;
 
        rr_count = ldns_rr_list_rr_count(rr_list);
@@ -474,7 +518,15 @@ ldns_rr_set_push_rr(ldns_rr_list *rr_list, ldns_rr *rr)
                                        ldns_rr_owner(rr)) != 0) {
                        return false;
                }
-               /* ok, still alive */
+               /* ok, still alive - check if the rr already
+                * exists - if so, dont' add it */
+               for(i = 0; i < rr_count; i++) {
+                       if(ldns_rr_compare(
+                                       ldns_rr_list_rr(rr_list, i), rr) == 0) {
+                               return false;
+                       }
+               }
+               /* it's safe, push it */
                return ldns_rr_list_push_rr(rr_list, rr);
        }
 }
index ea7880b096a29b93d3c580880379be42c67ca9f6..45b4cbb49a2ea6c409e50208303f6d569c834a16 100644 (file)
@@ -92,7 +92,7 @@ printf("counting: %s\n", ldns_rdf2str(cnt_test));
        /* concat tests */
        cat_test1 = ldns_dname_new_frm_str("www");
        cat_test2 = ldns_dname_new_frm_str("miek.nl.");
-       concat = ldns_dname_concat(cat_test1, cat_test2);
+       concat = ldns_dname_cat(cat_test1, cat_test2);
 
        ldns_rdf_print(stdout, concat);