throw std::out_of_range("xfrBlob out of range");
}
+void PacketReader::xfrBlobNoSpaces(string& blob, int length) {
+ xfrBlob(blob, length);
+}
+
void PacketReader::xfrBlob(string& blob, int length)
{
if(length) {
}
void xfrBlob(string& blob);
+ void xfrBlobNoSpaces(string& blob, int len);
void xfrBlob(string& blob, int length);
void xfrHexBlob(string& blob, bool keepReading=false);
d_record.insert(d_record.end(), ptr, ptr+blob.size());
}
+void DNSPacketWriter::xfrBlobNoSpaces(const string& blob, int )
+{
+ xfrBlob(blob);
+}
+
void DNSPacketWriter::xfrHexBlob(const string& blob, bool keepReading)
{
xfrBlob(blob);
void xfrLabel(const string& label, bool compress=false);
void xfrText(const string& text, bool multi=false);
void xfrBlob(const string& blob, int len=-1);
+ void xfrBlobNoSpaces(const string& blob, int len=-1);
void xfrHexBlob(const string& blob, bool keepReading=false);
uint16_t d_pos;
}
}
-static bool isbase64(char c)
+static bool isbase64(char c, bool acceptspace)
{
if(dns_isspace(c))
- return true;
+ return acceptspace;
if(c >= '0' && c <= '9')
return true;
if(c >= 'a' && c <= 'z')
return false;
}
+void RecordTextReader::xfrBlobNoSpaces(string& val, int len) {
+ skipSpaces();
+ int pos=(int)d_pos;
+ const char* strptr=d_string.c_str();
+ while(d_pos < d_end && isbase64(strptr[d_pos], false))
+ d_pos++;
+
+ string tmp;
+ tmp.assign(d_string.c_str()+pos, d_string.c_str() + d_pos);
+ boost::erase_all(tmp," ");
+ val.clear();
+ B64Decode(tmp, val);
+
+ if (len>-1 && val.size() != static_cast<size_t>(len))
+ throw RecordTextException("Record length "+lexical_cast<string>(val.size()) + " does not match expected length '"+lexical_cast<string>(len));
+}
+
void RecordTextReader::xfrBlob(string& val, int)
{
skipSpaces();
int pos=(int)d_pos;
const char* strptr=d_string.c_str();
- while(d_pos < d_end && isbase64(strptr[d_pos]))
+ while(d_pos < d_end && isbase64(strptr[d_pos], true))
d_pos++;
string tmp;
d_string+=val;
}
+void RecordTextWriter::xfrBlobNoSpaces(const string& val, int size)
+{
+ xfrBlob(val, size);
+}
+
void RecordTextWriter::xfrBlob(const string& val, int)
{
if(!d_string.empty())
void xfrHexBlob(string& val, bool keepReading=false);
void xfrBase32HexBlob(string& val);
+ void xfrBlobNoSpaces(string& val, int len=-1);
void xfrBlob(string& val, int len=-1);
bool eof();
void xfrType(const uint16_t& val);
void xfrLabel(const string& val, bool compress=false);
void xfrText(const string& val, bool multi=false);
+ void xfrBlobNoSpaces(const string& val, int len=-1);
void xfrBlob(const string& val, int len=-1);
void xfrHexBlob(const string& val, bool keepReading=false);
bool eof() { return true; };