Lines Matching full:msg
2 * services/cache/dns.c - Cache services for DNS using msg and rrset caches.
178 verbose(VERB_ALGO, "TTL 0: dropped msg from cache");
180 /* if the message is in the cache, remove that msg,
196 /* store msg in the cache */
271 struct dns_msg* msg, time_t now)
273 if((msg->rep->rrsets[msg->rep->rrset_count] =
275 msg->rep->ar_numrrsets++;
276 msg->rep->rrset_count++;
309 struct dns_msg** msg)
322 if(msg)
323 addr_to_additional(akey, region, *msg, now);
342 if(msg)
343 addr_to_additional(akey, region, *msg, now);
432 /** find and add DS or NSEC to delegation msg */
435 struct dns_msg* msg, struct delegpt* dp, time_t now)
440 msg->qinfo.qclass, 0, now, 0);
445 dp->namelen, LDNS_RR_TYPE_NSEC, msg->qinfo.qclass,
457 if((msg->rep->rrsets[msg->rep->rrset_count] =
459 msg->rep->ns_numrrsets++;
460 msg->rep->rrset_count++;
470 struct dns_msg* msg = (struct dns_msg*)regional_alloc(region,
472 if(!msg)
474 msg->qinfo.qname = regional_alloc_init(region, qname, qnamelen);
475 if(!msg->qinfo.qname)
477 msg->qinfo.qname_len = qnamelen;
478 msg->qinfo.qtype = qtype;
479 msg->qinfo.qclass = qclass;
480 msg->qinfo.local_alias = NULL;
482 msg->rep = (struct reply_info*)regional_alloc_zero(region,
484 if(!msg->rep)
488 msg->rep->flags = BIT_QR; /* with QR, no AA */
489 msg->rep->qdcount = 1;
490 msg->rep->reason_bogus = LDNS_EDE_NONE;
491 msg->rep->rrsets = (struct ub_packed_rrset_key**)
494 if(!msg->rep->rrsets)
496 return msg;
500 dns_msg_authadd(struct dns_msg* msg, struct regional* region,
503 if(!(msg->rep->rrsets[msg->rep->rrset_count++] =
506 msg->rep->ns_numrrsets++;
511 dns_msg_ansadd(struct dns_msg* msg, struct regional* region,
514 if(!(msg->rep->rrsets[msg->rep->rrset_count++] =
517 msg->rep->an_numrrsets++;
524 struct regional* region, struct dns_msg** msg, time_t now,
545 if(msg) {
551 *msg = dns_msg_create(qname, qnamelen, qtype, qclass, region,
553 if(!*msg || !dns_msg_authadd(*msg, region, nskey, now)) {
563 if(msg)
564 find_add_ds(env, region, *msg, dp, now);
566 if(!find_add_addrs(env, qclass, region, dp, now, msg))
575 struct dns_msg* msg = (struct dns_msg*)regional_alloc(region,
577 if(!msg)
579 memcpy(&msg->qinfo, q, sizeof(struct query_info));
580 msg->qinfo.qname = regional_alloc_init(region, q->qname, q->qname_len);
581 if(!msg->qinfo.qname)
584 msg->rep = (struct reply_info*)regional_alloc(region,
586 if(!msg->rep)
588 msg->rep->reason_bogus = LDNS_EDE_NONE;
589 msg->rep->reason_bogus_str = NULL;
592 msg->rep->rrsets = (struct ub_packed_rrset_key**)
595 if(!msg->rep->rrsets)
597 return msg;
605 struct dns_msg* msg;
619 msg = gen_dns_msg(region, q, r->rrset_count);
620 if(!msg) return NULL;
621 msg->rep->flags = r->flags;
622 msg->rep->qdcount = r->qdcount;
623 msg->rep->ttl = is_expired
627 msg->rep->prefetch_ttl = r->prefetch_ttl - now;
629 msg->rep->prefetch_ttl = PREFETCH_TTL_CALC(msg->rep->ttl);
630 msg->rep->serve_expired_ttl = msg->rep->ttl + SERVE_EXPIRED_TTL;
631 msg->rep->serve_expired_norec_ttl = 0;
632 msg->rep->security = r->security;
633 msg->rep->an_numrrsets = r->an_numrrsets;
634 msg->rep->ns_numrrsets = r->ns_numrrsets;
635 msg->rep->ar_numrrsets = r->ar_numrrsets;
636 msg->rep->rrset_count = r->rrset_count;
637 msg->rep->authoritative = r->authoritative;
638 msg->rep->reason_bogus = r->reason_bogus;
640 msg->rep->reason_bogus_str = regional_strdup(region, r->reason_bogus_str);
649 /* cname chain is now invalid, reconstruct msg */
658 for(i=0; i<msg->rep->rrset_count; i++) {
659 msg->rep->rrsets[i] = packed_rrset_copy_region(r->rrsets[i],
661 if(!msg->rep->rrsets[i]) {
671 return msg;
701 struct dns_msg* msg;
706 msg = gen_dns_msg(region, q, 1); /* only the CNAME (or other) RRset */
707 if(!msg)
709 msg->rep->flags = BIT_QR; /* reply, no AA, no error */
710 msg->rep->authoritative = 0; /* reply stored in cache can't be authoritative */
711 msg->rep->qdcount = 1;
712 msg->rep->ttl = d->ttl - now;
713 msg->rep->prefetch_ttl = PREFETCH_TTL_CALC(msg->rep->ttl);
714 msg->rep->serve_expired_ttl = msg->rep->ttl + SERVE_EXPIRED_TTL;
715 msg->rep->serve_expired_norec_ttl = 0;
716 msg->rep->security = sec_status_unchecked;
717 msg->rep->an_numrrsets = 1;
718 msg->rep->ns_numrrsets = 0;
719 msg->rep->ar_numrrsets = 0;
720 msg->rep->rrset_count = 1;
721 msg->rep->reason_bogus = LDNS_EDE_NONE;
722 msg->rep->rrsets[0] = packed_rrset_copy_region(rrset, region, now);
723 if(!msg->rep->rrsets[0]) /* copy CNAME */
725 return msg;
733 struct dns_msg* msg;
746 msg = gen_dns_msg(region, q, 2); /* DNAME + CNAME RRset */
747 if(!msg)
749 msg->rep->flags = BIT_QR; /* reply, no AA, no error */
750 msg->rep->authoritative = 0; /* reply stored in cache can't be authoritative */
751 msg->rep->qdcount = 1;
752 msg->rep->ttl = d->ttl - now;
753 msg->rep->prefetch_ttl = PREFETCH_TTL_CALC(msg->rep->ttl);
754 msg->rep->serve_expired_ttl = msg->rep->ttl + SERVE_EXPIRED_TTL;
755 msg->rep->serve_expired_norec_ttl = 0;
756 msg->rep->security = sec_status_unchecked;
757 msg->rep->an_numrrsets = 1;
758 msg->rep->ns_numrrsets = 0;
759 msg->rep->ar_numrrsets = 0;
760 msg->rep->rrset_count = 1;
761 msg->rep->reason_bogus = LDNS_EDE_NONE;
762 msg->rep->rrsets[0] = packed_rrset_copy_region(rrset, region, now);
763 if(!msg->rep->rrsets[0]) /* copy DNAME */
771 msg->rep->flags |= LDNS_RCODE_YXDOMAIN;
772 return msg;
787 msg->rep->rrsets[1] = ck;
813 msg->rep->ttl = newd->ttl;
814 msg->rep->prefetch_ttl = PREFETCH_TTL_CALC(newd->ttl);
815 msg->rep->serve_expired_ttl = newd->ttl + SERVE_EXPIRED_TTL;
818 msg->rep->an_numrrsets ++;
819 msg->rep->rrset_count ++;
820 return msg;
830 struct dns_msg* msg = NULL;
839 msg = dns_msg_create(qname, qnamelen, qtype, qclass,
841 if(!msg) {
845 msg->rep->flags |= LDNS_RCODE_NOTIMPL;
846 msg->rep->security = sec_status_indeterminate;
847 return msg;
869 /* create msg if none */
870 if(!msg) {
871 msg = dns_msg_create(qname, qnamelen, qtype, qclass,
873 if(!msg) {
880 if(!dns_msg_ansadd(msg, region, rrset, now)) {
886 return msg;
912 struct dns_msg* msg = tomsg(env, &key->key, data, region, now, 0,
914 if(msg) {
916 return msg;
918 /* could be msg==NULL; due to TTL or not all rrsets available */
930 struct dns_msg* msg = synth_dname_msg(rrset, region, now, &k,
932 if(msg) {
941 return msg;
953 * straight up return the msg */
955 return msg;
973 struct dns_msg* msg = rrset_msg(rrset, region, now, &k);
974 if(msg) {
976 return msg;
987 * signatures have fallen off, then do not synthesize a msg
1000 struct dns_msg* msg = rrset_msg(rrset, region, now, &k);
1001 if(msg) {
1003 return msg;
1029 struct dns_msg* msg;
1034 && (msg=tomsg(env, &k, data, region, now, 0, scratch))) {
1036 msg->qinfo.qname=qname;
1037 msg->qinfo.qname_len=qnamelen;
1039 msg->rep->security = sec_status_unchecked;
1040 iter_scrub_nxdomain(msg);
1041 return msg;
1129 /* alloc, malloc properly (not in region, like msg is) */
1155 /* store msg, and rrsets */
1184 struct msgreply_entry* msg;
1185 msg = msg_cache_lookup(env, qinfo->qname, qinfo->qname_len,
1187 if(msg) {
1188 struct reply_info* rep = (struct reply_info*)msg->entry.data;
1191 lock_rw_unlock(&msg->entry.lock);
1194 lock_rw_unlock(&msg->entry.lock);