#include <limits.h>
DNSPacketWriter::DNSPacketWriter(vector<uint8_t>& content, const DNSName& qname, uint16_t qtype, uint16_t qclass, uint8_t opcode)
- : d_pos(0), d_content(content), d_qname(qname), d_canonic(false), d_lowerCase(false)
+ : d_content(content), d_qname(qname), d_canonic(false), d_lowerCase(false)
{
d_content.clear();
dnsheader dnsheader;
memcpy(dptr, ptr, sizeof(dnsheader));
d_stuff=0;
- d_positions.reserve(16);
+ d_namepositions.reserve(16);
xfrName(qname, false);
len=d_content.size();
}
if(l_verbose)
- cout<<"Have "<<d_positions.size()<<" to ponder"<<endl;
+ cout<<"Have "<<d_namepositions.size()<<" to ponder"<<endl;
int counter=1;
- for(auto p : d_positions) {
+ for(auto p : d_namepositions) {
vector<uint8_t>* source=0;
if(p < d_content.size())
source = &d_content;
if(l_verbose) {
if(source == &d_content) {
DNSName pname((const char*)&(*source)[0], (*source).size(), p, true); // only for debugging
- cout<<"Looking at '"<<pname<<"' in packet at position "<<p<<"/"<<(*source).size()<<", option "<<counter<<"/"<<d_positions.size()<<endl;
+ cout<<"Looking at '"<<pname<<"' in packet at position "<<p<<"/"<<(*source).size()<<", option "<<counter<<"/"<<d_namepositions.size()<<endl;
}
else
{
- cout<<"Looking at *record* at position "<<p<<"/"<<(*source).size()<<", option "<<counter<<"/"<<d_positions.size()<<endl;
+ cout<<"Looking at *record* at position "<<p<<"/"<<(*source).size()<<", option "<<counter<<"/"<<d_namepositions.size()<<endl;
}
++counter;
}
if(pos < 16384 && matchlen != dns.size()) {
if(l_verbose)
cout<<"Inserting pos "<<pos<<" for "<<name<<" for compressed case"<<endl;
- d_positions.push_back(pos);
+ d_namepositions.push_back(pos);
}
if(l_verbose)
if(pos < 16384) {
if(l_verbose)
cout<<"Inserting pos "<<pos<<" for "<<name<<" for uncompressed case"<<endl;
- d_positions.push_back(pos);
+ d_namepositions.push_back(pos);
}
std::unique_ptr<DNSName> lc;
void xfrBlobNoSpaces(const string& blob, int len=-1);
void xfrHexBlob(const string& blob, bool keepReading=false);
- uint16_t d_pos;
-
dnsheader* getHeader();
void getRecords(string& records);
const vector<uint8_t>& getRecordBeingWritten() { return d_record; }
private:
uint16_t lookupName(const DNSName& name, uint16_t* matchlen);
- vector<uint16_t> d_positions;
+ vector<uint16_t> d_namepositions;
// We declare 1 uint_16 in the public section, these 3 align on a 8-byte boundry
uint16_t d_stuff;
uint16_t d_sor;