Lines Matching refs:rep
104 struct reply_info* rep;
110 rep = (struct reply_info*)regional_alloc(region, s);
111 else rep = (struct reply_info*)malloc(s +
113 if(!rep)
115 rep->flags = flags;
116 rep->qdcount = qd;
117 rep->ttl = ttl;
118 rep->prefetch_ttl = prettl;
119 rep->serve_expired_ttl = expttl;
120 rep->serve_expired_norec_ttl = norecttl;
121 rep->an_numrrsets = an;
122 rep->ns_numrrsets = ns;
123 rep->ar_numrrsets = ar;
124 rep->rrset_count = total;
125 rep->security = sec;
126 rep->reason_bogus = reason_bogus;
128 rep->reason_bogus_str = NULL;
129 rep->authoritative = 0;
132 rep->rrsets = (struct ub_packed_rrset_key**)&(rep->ref[0]);
133 else rep->rrsets = (struct ub_packed_rrset_key**)&(rep->ref[total]);
135 memset( rep->rrsets, 0, sizeof(struct ub_packed_rrset_key*) * total);
137 memset( &rep->ref[0], 0, sizeof(struct rrset_ref) * total);
138 return rep;
143 parse_create_repinfo(struct msg_parse* msg, struct reply_info** rep,
146 *rep = construct_reply_info_base(region, msg->flags, msg->qdcount, 0,
149 if(!*rep)
155 reply_info_alloc_rrset_keys(struct reply_info* rep, struct alloc_cache* alloc,
159 for(i=0; i<rep->rrset_count; i++) {
161 rep->rrsets[i] = (struct ub_packed_rrset_key*)
164 if(rep->rrsets[i]) {
165 memset(rep->rrsets[i], 0,
167 rep->rrsets[i]->entry.key = rep->rrsets[i];
170 else rep->rrsets[i] = alloc_special_obtain(alloc);
171 if(!rep->rrsets[i])
173 rep->rrsets[i]->entry.data = NULL;
179 reply_info_can_answer_expired(struct reply_info* rep, time_t timenow)
181 log_assert(rep->ttl < timenow);
183 if(SERVE_EXPIRED_TTL && rep->serve_expired_ttl < timenow) return 0;
185 if(FLAGS_GET_RCODE(rep->flags) != LDNS_RCODE_NOERROR &&
186 FLAGS_GET_RCODE(rep->flags) != LDNS_RCODE_NXDOMAIN &&
187 FLAGS_GET_RCODE(rep->flags) != LDNS_RCODE_YXDOMAIN) return 0;
191 int reply_info_could_use_expired(struct reply_info* rep, time_t timenow)
193 log_assert(rep->ttl < timenow);
195 if(SERVE_EXPIRED_TTL && rep->serve_expired_ttl < timenow &&
198 if(FLAGS_GET_RCODE(rep->flags) != LDNS_RCODE_NOERROR &&
199 FLAGS_GET_RCODE(rep->flags) != LDNS_RCODE_NXDOMAIN &&
200 FLAGS_GET_RCODE(rep->flags) != LDNS_RCODE_YXDOMAIN) return 0;
205 make_new_reply_info(const struct reply_info* rep, struct regional* region,
216 new_rep = construct_reply_info_base(region, rep->flags,
217 rep->qdcount, rep->ttl, rep->prefetch_ttl,
218 rep->serve_expired_ttl, rep->serve_expired_norec_ttl,
226 new_rep->rrsets[i] = rep->rrsets[i];
491 * @param rep: reply info to put rrs into.
497 struct reply_info* rep, struct regional* region)
502 log_assert(rep);
503 rep->ttl = MAX_TTL;
504 rep->security = sec_status_unchecked;
505 if(rep->rrset_count == 0)
506 rep->ttl = NORR_TTL;
508 for(i=0; i<rep->rrset_count; i++) {
510 rep->rrsets[i]))
512 data = (struct packed_rrset_data*)rep->rrsets[i]->entry.data;
513 if(data->ttl < rep->ttl)
514 rep->ttl = data->ttl;
518 rep->prefetch_ttl = PREFETCH_TTL_CALC(rep->ttl);
519 rep->serve_expired_ttl = rep->ttl + SERVE_EXPIRED_TTL;
520 /* rep->serve_expired_norec_ttl should stay at 0 */
521 log_assert(rep->serve_expired_norec_ttl == 0);
528 struct reply_info** rep, struct regional* region)
533 if(!parse_create_repinfo(msg, rep, region))
535 if(!reply_info_alloc_rrset_keys(*rep, alloc, region)) {
536 if(!region) reply_info_parsedelete(*rep, alloc);
539 if(!parse_copy_decompress(pkt, msg, *rep, region)) {
540 if(!region) reply_info_parsedelete(*rep, alloc);
547 struct query_info* qinf, struct reply_info** rep,
556 *rep = NULL;
571 if(!parse_create_msg(pkt, msg, alloc, qinf, rep, NULL)) {
573 *rep = NULL;
591 reply_info_sortref(struct reply_info* rep)
593 qsort(&rep->ref[0], rep->rrset_count, sizeof(struct rrset_ref),
598 reply_info_set_ttls(struct reply_info* rep, time_t timenow)
601 rep->ttl += timenow;
602 rep->prefetch_ttl += timenow;
603 rep->serve_expired_ttl += timenow;
604 /* Don't set rep->serve_expired_norec_ttl; this should only be set
606 log_assert(rep->serve_expired_norec_ttl == 0);
607 for(i=0; i<rep->rrset_count; i++) {
609 rep->ref[i].key->entry.data;
610 if(i>0 && rep->ref[i].key == rep->ref[i-1].key)
621 reply_info_parsedelete(struct reply_info* rep, struct alloc_cache* alloc)
624 if(!rep)
627 for(i=0; i<rep->rrset_count; i++) {
628 ub_packed_rrset_parsedelete(rep->rrsets[i], alloc);
630 if(rep->reason_bogus_str) {
631 free(rep->reason_bogus_str);
632 rep->reason_bogus_str = NULL;
634 free(rep);
796 reply_info_copy(struct reply_info* rep, struct alloc_cache* alloc,
800 cp = construct_reply_info_base(region, rep->flags, rep->qdcount,
801 rep->ttl, rep->prefetch_ttl, rep->serve_expired_ttl,
802 rep->serve_expired_norec_ttl,
803 rep->an_numrrsets, rep->ns_numrrsets, rep->ar_numrrsets,
804 rep->rrset_count, rep->security, rep->reason_bogus);
808 if(rep->reason_bogus_str && *rep->reason_bogus_str != 0) {
812 * (strlen(rep->reason_bogus_str)+1));
815 * (strlen(rep->reason_bogus_str)+1));
822 memcpy(cp->reason_bogus_str, rep->reason_bogus_str,
823 strlen(rep->reason_bogus_str)+1);
832 if(!repinfo_copy_rrsets(cp, rep, region)) {
841 reply_find_final_cname_target(struct query_info* qinfo, struct reply_info* rep)
846 for(i=0; i<rep->an_numrrsets; i++) {
847 struct ub_packed_rrset_key* s = rep->rrsets[i];
862 reply_find_answer_rrset(struct query_info* qinfo, struct reply_info* rep)
867 for(i=0; i<rep->an_numrrsets; i++) {
868 struct ub_packed_rrset_key* s = rep->rrsets[i];
887 struct ub_packed_rrset_key* reply_find_rrset_section_an(struct reply_info* rep,
891 for(i=0; i<rep->an_numrrsets; i++) {
892 struct ub_packed_rrset_key* s = rep->rrsets[i];
903 struct ub_packed_rrset_key* reply_find_rrset_section_ns(struct reply_info* rep,
907 for(i=rep->an_numrrsets; i<rep->an_numrrsets+rep->ns_numrrsets; i++) {
908 struct ub_packed_rrset_key* s = rep->rrsets[i];
919 struct ub_packed_rrset_key* reply_find_rrset(struct reply_info* rep,
923 for(i=0; i<rep->rrset_count; i++) {
924 struct ub_packed_rrset_key* s = rep->rrsets[i];
936 log_dns_msg(const char* str, struct query_info* qinfo, struct reply_info* rep)
947 if(!reply_info_encode(qinfo, rep, 0, rep->flags, buf, 0,
1051 reply_check_cname_chain(struct query_info* qinfo, struct reply_info* rep)
1058 for(i=0; i<rep->an_numrrsets; i++) {
1059 uint16_t t = ntohs(rep->rrsets[i]->rk.type);
1063 if(query_dname_compare(sname, rep->rrsets[i]->rk.dname) != 0){
1069 get_cname_target(rep->rrsets[i], &sname, &snamelen);
1076 reply_all_rrsets_secure(struct reply_info* rep)
1079 for(i=0; i<rep->rrset_count; i++) {
1080 if( ((struct packed_rrset_data*)rep->rrsets[i]->entry.data)
1091 struct reply_info* rep;
1101 if(!parse_create_msg(pkt, msg, NULL, qi, &rep, region)) {
1104 return rep;
1210 struct reply_info* rep, int rcode, struct edns_data* edns,
1224 (void)(*(inplace_cb_reply_func_type*)cb->cb)(qinfo, qstate, rep,
1232 struct module_qstate* qstate, struct reply_info* rep, int rcode,
1238 qstate, rep, rcode, edns, repinfo, region, start_time);
1243 struct reply_info* rep, int rcode, struct edns_data* edns,
1249 qinfo, qstate, rep, rcode, edns, repinfo, region, start_time);
1254 struct reply_info* rep, int rcode, struct edns_data* edns,
1260 qinfo, qstate, rep, rcode, edns, repinfo, region, start_time);
1265 struct reply_info* rep, int rcode, struct edns_data* edns,
1274 inplace_cb_reply_servfail, qinfo, qstate, rep, rcode, edns, repinfo,