Lines Matching refs:pkt
58 smart_compare(sldns_buffer* pkt, uint8_t* dnow, in smart_compare() argument
65 >= sldns_buffer_limit(pkt)) in smart_compare()
67 p = sldns_buffer_at(pkt, PTR_OFFSET(dnow[0], dnow[1])); in smart_compare()
75 return dname_pkt_compare(pkt, dnow, dprlast); in smart_compare()
115 nsec_at_apex(sldns_buffer* pkt) in nsec_at_apex() argument
118 size_t pos = sldns_buffer_position(pkt); in nsec_at_apex()
120 if(sldns_buffer_remaining(pkt) < 7) /* ttl+len+root */ in nsec_at_apex()
122 sldns_buffer_skip(pkt, 4); /* ttl */; in nsec_at_apex()
123 rdatalen = sldns_buffer_read_u16(pkt); in nsec_at_apex()
124 if(sldns_buffer_remaining(pkt) < rdatalen) { in nsec_at_apex()
125 sldns_buffer_set_position(pkt, pos); in nsec_at_apex()
129 if(pkt_dname_len(pkt) == 0) { in nsec_at_apex()
130 sldns_buffer_set_position(pkt, pos); in nsec_at_apex()
135 if(sldns_buffer_position(pkt) < pos+4+rdatalen) { in nsec_at_apex()
139 if(sldns_buffer_position(pkt)+3 > pos+4+rdatalen) { in nsec_at_apex()
140 sldns_buffer_set_position(pkt, pos); in nsec_at_apex()
143 win = sldns_buffer_read_u8(pkt); in nsec_at_apex()
144 blen = sldns_buffer_read_u8(pkt); in nsec_at_apex()
145 bits = sldns_buffer_read_u8(pkt); in nsec_at_apex()
149 sldns_buffer_set_position(pkt, pos); in nsec_at_apex()
154 sldns_buffer_set_position(pkt, pos); in nsec_at_apex()
160 pkt_rrset_flags(sldns_buffer* pkt, uint16_t type, sldns_pkt_section sec) in pkt_rrset_flags() argument
163 if(type == LDNS_RR_TYPE_NSEC && nsec_at_apex(pkt)) { in pkt_rrset_flags()
172 pkt_hash_rrset(sldns_buffer* pkt, uint8_t* dname, uint16_t type, in pkt_hash_rrset() argument
178 h = dname_pkt_hash(pkt, dname, h); in pkt_hash_rrset()
187 pkt_hash_rrset_first(sldns_buffer* pkt, uint8_t* dname) in pkt_hash_rrset_first() argument
193 h = dname_pkt_hash(pkt, dname, h); in pkt_hash_rrset_first()
213 rrset_parse_equals(struct rrset_parse* p, sldns_buffer* pkt, hashvalue_type h, in rrset_parse_equals() argument
219 dname_pkt_compare(pkt, dname, p->dname) == 0) in rrset_parse_equals()
226 msgparse_hashtable_lookup(struct msg_parse* msg, sldns_buffer* pkt, in msgparse_hashtable_lookup() argument
232 if(rrset_parse_equals(p, pkt, h, rrset_flags, dname, dnamelen, in msgparse_hashtable_lookup()
242 pkt_rrsig_covered(sldns_buffer* pkt, uint8_t* here, uint16_t* type) in pkt_rrsig_covered() argument
244 size_t pos = sldns_buffer_position(pkt); in pkt_rrsig_covered()
245 sldns_buffer_set_position(pkt, (size_t)(here-sldns_buffer_begin(pkt))); in pkt_rrsig_covered()
247 if(sldns_buffer_remaining(pkt) < 4+2+19) in pkt_rrsig_covered()
249 sldns_buffer_skip(pkt, 4); /* ttl */ in pkt_rrsig_covered()
250 if(sldns_buffer_read_u16(pkt) < 19) /* too short */ { in pkt_rrsig_covered()
251 sldns_buffer_set_position(pkt, pos); in pkt_rrsig_covered()
254 *type = sldns_buffer_read_u16(pkt); in pkt_rrsig_covered()
255 sldns_buffer_set_position(pkt, pos); in pkt_rrsig_covered()
261 pkt_rrsig_covered_equals(sldns_buffer* pkt, uint8_t* here, uint16_t type) in pkt_rrsig_covered_equals() argument
264 if(pkt_rrsig_covered(pkt, here, &t) && t == type) in pkt_rrsig_covered_equals()
329 rrset_has_sigover(sldns_buffer* pkt, struct rrset_parse* rrset, uint16_t type, in rrset_has_sigover() argument
336 if(pkt_rrsig_covered_equals(pkt, rr->ttl_data, type)) in rrset_has_sigover()
346 moveover_rrsigs(sldns_buffer* pkt, struct regional* region, in moveover_rrsigs() argument
355 if(pkt_rrsig_covered_equals(pkt, sig->ttl_data, in moveover_rrsigs()
396 sldns_buffer* pkt, uint16_t datatype, uint32_t rrset_flags, in change_rrsig_rrset() argument
400 hashvalue_type hash = pkt_hash_rrset(pkt, sigset->dname, datatype, in change_rrsig_rrset()
417 if(!moveover_rrsigs(pkt, region, sigset, dataset, in change_rrsig_rrset()
466 find_rrset(struct msg_parse* msg, sldns_buffer* pkt, uint8_t* dname, in find_rrset() argument
474 hashvalue_type dname_h = pkt_hash_rrset_first(pkt, dname); in find_rrset()
480 smart_compare(pkt, dname, *prev_dname_first, in find_rrset()
489 pkt_rrsig_covered_equals(pkt, sldns_buffer_current(pkt), in find_rrset()
491 smart_compare(pkt, dname, *prev_dname_first, in find_rrset()
499 *rrset_flags = pkt_rrset_flags(pkt, type, section); in find_rrset()
502 if(type == LDNS_RR_TYPE_RRSIG && pkt_rrsig_covered(pkt, in find_rrset()
503 sldns_buffer_current(pkt), &covtype)) { in find_rrset()
506 *rrset_prev = msgparse_hashtable_lookup(msg, pkt, *hash, in find_rrset()
513 *rrset_prev = msgparse_hashtable_lookup(msg, pkt, in find_rrset()
524 *rrset_prev = msgparse_hashtable_lookup(msg, pkt, in find_rrset()
544 *rrset_prev = msgparse_hashtable_lookup(msg, pkt, *hash, in find_rrset()
547 if(*rrset_prev && rrset_has_sigover(pkt, *rrset_prev, type, in find_rrset()
556 pkt, type, *rrset_flags, hasother, section, in find_rrset()
564 *rrset_prev = msgparse_hashtable_lookup(msg, pkt, *hash, *rrset_flags, in find_rrset()
584 parse_query_section(sldns_buffer* pkt, struct msg_parse* msg) in parse_query_section() argument
591 if(sldns_buffer_remaining(pkt) <= 0) in parse_query_section()
593 msg->qname = sldns_buffer_current(pkt); in parse_query_section()
594 if((msg->qname_len = pkt_dname_len(pkt)) == 0) in parse_query_section()
596 if(sldns_buffer_remaining(pkt) < sizeof(uint16_t)*2) in parse_query_section()
598 msg->qtype = sldns_buffer_read_u16(pkt); in parse_query_section()
599 msg->qclass = sldns_buffer_read_u16(pkt); in parse_query_section()
639 calc_size(sldns_buffer* pkt, uint16_t type, struct rr_parse* rr) in calc_size() argument
644 sldns_buffer_skip(pkt, 4); /* skip ttl */ in calc_size()
645 pkt_len = sldns_buffer_read_u16(pkt); in calc_size()
646 if(sldns_buffer_remaining(pkt) < pkt_len) in calc_size()
659 oldpos = sldns_buffer_position(pkt); in calc_size()
660 if((len = pkt_dname_len(pkt)) == 0) in calc_size()
662 if(sldns_buffer_position(pkt)-oldpos > pkt_len) in calc_size()
664 pkt_len -= sldns_buffer_position(pkt)-oldpos; in calc_size()
674 len = sldns_buffer_current(pkt)[0] + 1; in calc_size()
683 sldns_buffer_skip(pkt, (ssize_t)len); in calc_size()
691 sldns_buffer_skip(pkt, (ssize_t)pkt_len); in calc_size()
697 skip_ttl_rdata(sldns_buffer* pkt) in skip_ttl_rdata() argument
700 if(sldns_buffer_remaining(pkt) < 6) /* ttl + rdatalen */ in skip_ttl_rdata()
702 sldns_buffer_skip(pkt, 4); /* ttl */ in skip_ttl_rdata()
703 rdatalen = sldns_buffer_read_u16(pkt); in skip_ttl_rdata()
704 if(sldns_buffer_remaining(pkt) < rdatalen) in skip_ttl_rdata()
706 sldns_buffer_skip(pkt, (ssize_t)rdatalen); in skip_ttl_rdata()
712 sig_is_double(sldns_buffer* pkt, struct rrset_parse* rrset, uint8_t* ttldata) in sig_is_double() argument
715 size_t pos = sldns_buffer_position(pkt); in sig_is_double()
717 if(sldns_buffer_remaining(pkt) < 6) in sig_is_double()
719 sldns_buffer_skip(pkt, 4); /* ttl */ in sig_is_double()
720 rlen = sldns_buffer_read_u16(pkt); in sig_is_double()
721 if(sldns_buffer_remaining(pkt) < rlen) { in sig_is_double()
722 sldns_buffer_set_position(pkt, pos); in sig_is_double()
725 sldns_buffer_set_position(pkt, pos); in sig_is_double()
754 add_rr_to_rrset(struct rrset_parse* rrset, sldns_buffer* pkt, in add_rr_to_rrset() argument
773 if(!skip_ttl_rdata(pkt)) in add_rr_to_rrset()
780 && sig_is_double(pkt, rrset, sldns_buffer_current(pkt))) { in add_rr_to_rrset()
781 if(!skip_ttl_rdata(pkt)) in add_rr_to_rrset()
790 rr->ttl_data = sldns_buffer_current(pkt); in add_rr_to_rrset()
807 if(!calc_size(pkt, type, rr)) in add_rr_to_rrset()
826 parse_section(sldns_buffer* pkt, struct msg_parse* msg, in parse_section() argument
842 if(sldns_buffer_remaining(pkt) <= 0) in parse_section()
846 dname = sldns_buffer_current(pkt); in parse_section()
847 if((dnamelen = pkt_dname_len(pkt)) == 0) in parse_section()
849 if(sldns_buffer_remaining(pkt) < 10) /* type, class, ttl, len */ in parse_section()
851 type = sldns_buffer_read_u16(pkt); in parse_section()
852 sldns_buffer_read(pkt, &dclass, sizeof(dclass)); in parse_section()
857 if(pkt_rrsig_covered(pkt, in parse_section()
858 sldns_buffer_current(pkt), &t)) in parse_section()
876 dname_print(stderr, pkt, dname); in parse_section()
881 if(!find_rrset(msg, pkt, dname, dnamelen, type, dclass, &hash, in parse_section()
896 dname_print(stderr, pkt, rrset->dname); in parse_section()
903 if((r=add_rr_to_rrset(rrset, pkt, msg, region, section, in parse_section()
911 parse_packet(sldns_buffer* pkt, struct msg_parse* msg, struct regional* region) in parse_packet() argument
914 if(sldns_buffer_remaining(pkt) < LDNS_HEADER_SIZE) in parse_packet()
917 sldns_buffer_read(pkt, &msg->id, sizeof(uint16_t)); in parse_packet()
918 msg->flags = sldns_buffer_read_u16(pkt); in parse_packet()
919 msg->qdcount = sldns_buffer_read_u16(pkt); in parse_packet()
920 msg->ancount = sldns_buffer_read_u16(pkt); in parse_packet()
921 msg->nscount = sldns_buffer_read_u16(pkt); in parse_packet()
922 msg->arcount = sldns_buffer_read_u16(pkt); in parse_packet()
925 if((ret = parse_query_section(pkt, msg)) != 0) in parse_packet()
927 if((ret = parse_section(pkt, msg, region, LDNS_SECTION_ANSWER, in parse_packet()
930 if((ret = parse_section(pkt, msg, region, LDNS_SECTION_AUTHORITY, in parse_packet()
933 if(sldns_buffer_remaining(pkt) == 0 && msg->arcount == 1) { in parse_packet()
936 } else if((ret = parse_section(pkt, msg, region, in parse_packet()
1215 skip_pkt_rr(sldns_buffer* pkt) in skip_pkt_rr() argument
1217 if(sldns_buffer_remaining(pkt) < 1) return 0; in skip_pkt_rr()
1218 if(!pkt_dname_len(pkt)) in skip_pkt_rr()
1220 if(sldns_buffer_remaining(pkt) < 4) return 0; in skip_pkt_rr()
1221 sldns_buffer_skip(pkt, 4); /* type and class */ in skip_pkt_rr()
1222 if(!skip_ttl_rdata(pkt)) in skip_pkt_rr()
1229 skip_pkt_rrs(sldns_buffer* pkt, int num) in skip_pkt_rrs() argument
1233 if(!skip_pkt_rr(pkt)) in skip_pkt_rrs()
1240 parse_edns_from_query_pkt(sldns_buffer* pkt, struct edns_data* edns, in parse_edns_from_query_pkt() argument
1246 log_assert(LDNS_QDCOUNT(sldns_buffer_begin(pkt)) == 1); in parse_edns_from_query_pkt()
1248 if(LDNS_ANCOUNT(sldns_buffer_begin(pkt)) != 0 || in parse_edns_from_query_pkt()
1249 LDNS_NSCOUNT(sldns_buffer_begin(pkt)) != 0) { in parse_edns_from_query_pkt()
1250 if(!skip_pkt_rrs(pkt, ((int)LDNS_ANCOUNT(sldns_buffer_begin(pkt)))+ in parse_edns_from_query_pkt()
1251 ((int)LDNS_NSCOUNT(sldns_buffer_begin(pkt))))) in parse_edns_from_query_pkt()
1255 if(LDNS_ARCOUNT(sldns_buffer_begin(pkt)) > 1) { in parse_edns_from_query_pkt()
1258 if(LDNS_ARCOUNT(sldns_buffer_begin(pkt)) == 0) { in parse_edns_from_query_pkt()
1263 if(pkt_dname_len(pkt) != 1) in parse_edns_from_query_pkt()
1265 if(sldns_buffer_remaining(pkt) < 10) /* type, class, ttl, rdatalen */ in parse_edns_from_query_pkt()
1267 if(sldns_buffer_read_u16(pkt) != LDNS_RR_TYPE_OPT) in parse_edns_from_query_pkt()
1270 edns->udp_size = sldns_buffer_read_u16(pkt); /* class is udp size */ in parse_edns_from_query_pkt()
1271 edns->ext_rcode = sldns_buffer_read_u8(pkt); /* ttl used for bits */ in parse_edns_from_query_pkt()
1272 edns->edns_version = sldns_buffer_read_u8(pkt); in parse_edns_from_query_pkt()
1273 edns->bits = sldns_buffer_read_u16(pkt); in parse_edns_from_query_pkt()
1282 rdata_len = sldns_buffer_read_u16(pkt); in parse_edns_from_query_pkt()
1283 if(sldns_buffer_remaining(pkt) < rdata_len) in parse_edns_from_query_pkt()
1285 rdata_ptr = sldns_buffer_current(pkt); in parse_edns_from_query_pkt()
1312 msgparse_rrset_remove_rr(const char* str, sldns_buffer* pkt, struct rrset_parse* rrset, in msgparse_rrset_remove_rr() argument
1317 dname_pkt_copy(pkt, buf, rrset->dname); in msgparse_rrset_remove_rr()