]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
more packet functions
authorMiek Gieben <miekg@NLnetLabs.nl>
Thu, 27 Jan 2005 15:28:09 +0000 (15:28 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Thu, 27 Jan 2005 15:28:09 +0000 (15:28 +0000)
libdns.vim
packet.c
resolver.c

index 45c13b8bf86d922056ad7007fdf0685b011286b5..a420a803fa61081dfccd27b47dad3e4effc14dec 100644 (file)
@@ -15,7 +15,6 @@ syn keyword  ldnsMacro DEP
 syn keyword  ldnsType           ldns_rdf
 syn keyword  ldnsType           ldns_rdf_type
 syn keyword  ldnsType           ldns_hdr
-syn keyword  ldnsType           ldns_pkt
 syn keyword  ldnsType           ldns_status
 syn keyword  ldnsType           ldns_rrset
 syn keyword  ldnsType           ldns_dname
@@ -47,6 +46,11 @@ syn keyword  ldnsConstant    LDNS_RDF_TYPE_LOC
 syn keyword  ldnsConstant      LDNS_RDF_TYPE_WKS
 syn keyword  ldnsConstant      LDNS_RDF_TYPE_NSAP
 
+" ldns/packet.h
+syn keyword  ldnsType           ldns_pkt
+syn keyword  ldnsType           ldns_pkt_section
+
+
 " dns/error.h
 syn keyword ldnsMacro  LDNS_STATUS_OK
 syn keyword ldnsMacro  LDNS_STATUS_EMPTY_LABEL
index b34f5224f91caba0aa4881a4c68de9ce6f531bbb..aaa6a7fca3d972f537520ea83e9bb9da61781c2d 100644 (file)
--- a/packet.c
+++ b/packet.c
@@ -129,6 +129,37 @@ ldns_pkt_additional(ldns_pkt *packet)
        return packet->_additional;
 }
 
+uint16_t
+ldns_pkt_xxcount(ldns_pkt *packet, ldns_pkt_section s)
+{
+       switch(s) {
+               case LDNS_SECTION_QUESTION:
+                       return ldns_pkt_qdcount(packet);
+               case LDNS_SECTION_ANSWER:
+                       return ldns_pkt_ancount(packet);
+               case LDNS_SECTION_AUTHORITY:
+                       return ldns_pkt_nscount(packet);
+               case LDNS_SECTION_ADDITIONAL:
+                       return ldns_pkt_arcount(packet);
+       }
+       return 0;
+}
+
+ldns_rr_list *
+ldns_pkt_xxsection(ldns_pkt *packet, ldns_pkt_section s)
+{
+       switch(s) {
+               case LDNS_SECTION_QUESTION:
+                       return ldns_pkt_question(packet);
+               case LDNS_SECTION_ANSWER:
+                       return ldns_pkt_answer(packet);
+               case LDNS_SECTION_AUTHORITY:
+                       return ldns_pkt_authority(packet);
+               case LDNS_SECTION_ADDITIONAL:
+                       return ldns_pkt_additional(packet);
+       }
+       return NULL;
+}
 
 /* write */
 void
@@ -215,10 +246,31 @@ ldns_pkt_set_arcount(ldns_pkt *packet, uint16_t arcount)
        packet->_header->_arcount = arcount;
 }
 
+/** 
+ * push an rr on a packet
+ * \param[in] packet packet to operatore on
+ * \param[in] section where to put it
+ * \param[in] rr rr to push
+ * \return ldns_status status
+ */
+bool
+ldns_pkt_push_rr(ldns_pkt *packet, ldns_pkt_section section, ldns_rr *rr)
+{
+       ldns_rr_list *rrs;
+
+       /* get the right rr list for this section */
+       rrs = ldns_pkt_xxsection(packet, section);
+       if (!rrs) {
+               return false;
+       }
+       /* push the rr */
+       ldns_rr_list_push_rr(rrs, rr);
+       return true;
+}
+
 
 /* Create/destroy/convert functions
  */
 ldns_pkt *
 ldns_pkt_new()
 {
index b90587149b7f2d42e717d238b3a285099cbf10dc..f70eda6f5acf71dcc7305b3b7180e33476db124d 100644 (file)
@@ -215,6 +215,10 @@ ldns_resolver_send(ldns_resolver *r, ldns_rdf *name, ldns_rr_type type, ldns_rr_
        if (0 == ldns_resolver_configured(r)) {
                return NULL;
        }
+       if (ldns_rdf_get_type(name) != LDNS_RDF_TYPE_DNAME) {
+               return NULL;
+       }
+       
        /* prepare a question pkt from the parameters
         * and then send this */
        /*query_pkt = somesortofconversion2qpkt(name, type, class, flags); * */