From: Miek Gieben Date: Thu, 27 Jan 2005 15:28:09 +0000 (+0000) Subject: more packet functions X-Git-Tag: release-0.50~512 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d20fc984fb0c2b5ed11249df18a7173bd016afef;p=thirdparty%2Fldns.git more packet functions --- diff --git a/libdns.vim b/libdns.vim index 45c13b8b..a420a803 100644 --- a/libdns.vim +++ b/libdns.vim @@ -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 diff --git a/packet.c b/packet.c index b34f5224..aaa6a7fc 100644 --- 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() { diff --git a/resolver.c b/resolver.c index b9058714..f70eda6f 100644 --- a/resolver.c +++ b/resolver.c @@ -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); * */