#include "dns-storage.hh" using namespace std; bool dnsname::makeRelative(const dnsname& root) { auto us = d_name, them=root.d_name; while(!them.empty()) { if(us.empty()) return false; if(us.back() == them.back()) { us.pop_back(); them.pop_back(); } else return false; } d_name = us; return true; } const DNSNode* DNSNode::find(dnsname& name, dnsname& last, const DNSNode** passedZonecut, dnsname* zonecutname) const { cout<<"find for '"< 1) { last.push_front(name.back()); name.pop_back(); } } } cout<<" Had match, continuing to child '"<first<<"'"<second.find(name, last, passedZonecut, zonecutname); } DNSNode* DNSNode::add(dnsname name) { cout<<"Add called for '"<second.add(name); } dnsname operator+(const dnsname& a, const dnsname& b) { dnsname ret=a; for(const auto& l : b.d_name) ret.d_name.push_back(l); return ret; } void DNSNode::visit(std::function visitor, dnsname name) const { visitor(name, this); for(const auto& c : children) c.second.visit(visitor, dnsname{c.first}+name); } // this should perform escaping rules! std::ostream & operator<<(std::ostream &os, const dnslabel& d) { os<&&a) { rrsets[a->getType()].add(std::move(a)); }