iter_utils.c (266114) | iter_utils.c (276605) |
---|---|
1/* 2 * iterator/iter_utils.c - iterative resolver module utility functions. 3 * 4 * Copyright (c) 2007, NLnet Labs. All rights reserved. 5 * 6 * This software is open source. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 411 unchanged lines hidden (view full) --- 420 if(!(m->rep = reply_info_copy(from->rep, NULL, region))) 421 return NULL; 422 return m; 423} 424 425void 426iter_dns_store(struct module_env* env, struct query_info* msgqinf, 427 struct reply_info* msgrep, int is_referral, time_t leeway, int pside, | 1/* 2 * iterator/iter_utils.c - iterative resolver module utility functions. 3 * 4 * Copyright (c) 2007, NLnet Labs. All rights reserved. 5 * 6 * This software is open source. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 411 unchanged lines hidden (view full) --- 420 if(!(m->rep = reply_info_copy(from->rep, NULL, region))) 421 return NULL; 422 return m; 423} 424 425void 426iter_dns_store(struct module_env* env, struct query_info* msgqinf, 427 struct reply_info* msgrep, int is_referral, time_t leeway, int pside, |
428 struct regional* region) | 428 struct regional* region, uint16_t flags) |
429{ 430 if(!dns_cache_store(env, msgqinf, msgrep, is_referral, leeway, | 429{ 430 if(!dns_cache_store(env, msgqinf, msgrep, is_referral, leeway, |
431 pside, region)) | 431 pside, region, flags)) |
432 log_err("out of memory: cannot store data in cache"); 433} 434 435int 436iter_ns_probability(struct ub_randstate* rnd, int n, int m) 437{ 438 int sel; 439 if(n == m) /* 100% chance */ --- 12 unchanged lines hidden (view full) --- 452 struct query_info qinf; 453 qinf.qname = name; 454 qinf.qname_len = namelen; 455 qinf.qtype = t; 456 qinf.qclass = c; 457 fptr_ok(fptr_whitelist_modenv_detect_cycle( 458 qstate->env->detect_cycle)); 459 return (*qstate->env->detect_cycle)(qstate, &qinf, | 432 log_err("out of memory: cannot store data in cache"); 433} 434 435int 436iter_ns_probability(struct ub_randstate* rnd, int n, int m) 437{ 438 int sel; 439 if(n == m) /* 100% chance */ --- 12 unchanged lines hidden (view full) --- 452 struct query_info qinf; 453 qinf.qname = name; 454 qinf.qname_len = namelen; 455 qinf.qtype = t; 456 qinf.qclass = c; 457 fptr_ok(fptr_whitelist_modenv_detect_cycle( 458 qstate->env->detect_cycle)); 459 return (*qstate->env->detect_cycle)(qstate, &qinf, |
460 (uint16_t)(BIT_RD|BIT_CD), qstate->is_priming); | 460 (uint16_t)(BIT_RD|BIT_CD), qstate->is_priming, 461 qstate->is_valrec); |
461} 462 463void 464iter_mark_cycle_targets(struct module_qstate* qstate, struct delegpt* dp) 465{ 466 struct delegpt_ns* ns; 467 for(ns = dp->nslist; ns; ns = ns->next) { 468 if(ns->resolved) --- 192 unchanged lines hidden (view full) --- 661 k2->entry.data; 662 size_t i, t; 663 if(k1->rk.dname_len != k2->rk.dname_len || 664 k1->rk.flags != k2->rk.flags || 665 k1->rk.type != k2->rk.type || 666 k1->rk.rrset_class != k2->rk.rrset_class || 667 query_dname_compare(k1->rk.dname, k2->rk.dname) != 0) 668 return 0; | 462} 463 464void 465iter_mark_cycle_targets(struct module_qstate* qstate, struct delegpt* dp) 466{ 467 struct delegpt_ns* ns; 468 for(ns = dp->nslist; ns; ns = ns->next) { 469 if(ns->resolved) --- 192 unchanged lines hidden (view full) --- 662 k2->entry.data; 663 size_t i, t; 664 if(k1->rk.dname_len != k2->rk.dname_len || 665 k1->rk.flags != k2->rk.flags || 666 k1->rk.type != k2->rk.type || 667 k1->rk.rrset_class != k2->rk.rrset_class || 668 query_dname_compare(k1->rk.dname, k2->rk.dname) != 0) 669 return 0; |
669 if(d1->ttl != d2->ttl || | 670 if( /* do not check ttl: d1->ttl != d2->ttl || */ |
670 d1->count != d2->count || 671 d1->rrsig_count != d2->rrsig_count || 672 d1->trust != d2->trust || 673 d1->security != d2->security) 674 return 0; 675 t = d1->count + d1->rrsig_count; 676 for(i=0; i<t; i++) { 677 if(d1->rr_len[i] != d2->rr_len[i] || | 671 d1->count != d2->count || 672 d1->rrsig_count != d2->rrsig_count || 673 d1->trust != d2->trust || 674 d1->security != d2->security) 675 return 0; 676 t = d1->count + d1->rrsig_count; 677 for(i=0; i<t; i++) { 678 if(d1->rr_len[i] != d2->rr_len[i] || |
678 d1->rr_ttl[i] != d2->rr_ttl[i] || | 679 /* no ttl check: d1->rr_ttl[i] != d2->rr_ttl[i] ||*/ |
679 memcmp(d1->rr_data[i], d2->rr_data[i], 680 d1->rr_len[i]) != 0) 681 return 0; 682 } 683 return 1; 684} 685 686int 687reply_equal(struct reply_info* p, struct reply_info* q, struct regional* region) 688{ 689 size_t i; 690 if(p->flags != q->flags || 691 p->qdcount != q->qdcount || | 680 memcmp(d1->rr_data[i], d2->rr_data[i], 681 d1->rr_len[i]) != 0) 682 return 0; 683 } 684 return 1; 685} 686 687int 688reply_equal(struct reply_info* p, struct reply_info* q, struct regional* region) 689{ 690 size_t i; 691 if(p->flags != q->flags || 692 p->qdcount != q->qdcount || |
693 /* do not check TTL, this may differ */ 694 /* |
|
692 p->ttl != q->ttl || 693 p->prefetch_ttl != q->prefetch_ttl || | 695 p->ttl != q->ttl || 696 p->prefetch_ttl != q->prefetch_ttl || |
697 */ |
|
694 p->security != q->security || 695 p->an_numrrsets != q->an_numrrsets || 696 p->ns_numrrsets != q->ns_numrrsets || 697 p->ar_numrrsets != q->ar_numrrsets || 698 p->rrset_count != q->rrset_count) 699 return 0; 700 for(i=0; i<p->rrset_count; i++) { 701 if(!rrset_equal(p->rrsets[i], q->rrsets[i])) { --- 323 unchanged lines hidden --- | 698 p->security != q->security || 699 p->an_numrrsets != q->an_numrrsets || 700 p->ns_numrrsets != q->ns_numrrsets || 701 p->ar_numrrsets != q->ar_numrrsets || 702 p->rrset_count != q->rrset_count) 703 return 0; 704 for(i=0; i<p->rrset_count; i++) { 705 if(!rrset_equal(p->rrsets[i], q->rrsets[i])) { --- 323 unchanged lines hidden --- |