#include "rdata_raw.h"
using std::memcmp;
using std::strlen;
using WWWI::StringDuplicate;
RDataRaw::RDataRaw() {
m_szBuffer = 0;
m_ucpBuffer = NULL;
}
RDataPtr RDataRaw::Clone() const {
RDataRaw *rdpOut = new RDataRaw;
rdpOut->m_szBuffer = m_szBuffer;
rdpOut->m_ucpBuffer = new unsigned char[m_szBuffer];
memcpy(rdpOut->m_ucpBuffer,m_ucpBuffer,m_szBuffer);
return (RDataPtr)rdpOut;
}
bool RDataRaw::Compare(const RData &ci_rdr) const {
const RDataRaw *c_rdp = ci_rdr.As<RDataRaw>();
if (c_rdp->m_szBuffer!=m_szBuffer) return false;
return (memcmp(c_rdp->m_ucpBuffer,m_ucpBuffer,m_szBuffer)==0);
}
void RDataRaw::Dump(ostream &io_smr) const {
HexDump(io_smr,m_ucpBuffer,m_szBuffer,2,16);
}
bool RDataRaw::IsMatch(RRType i_ty, RRClass i_cl) { return true; }
void RDataRaw::ReadRData(BufferConstPtr ci_dpp) {
unsigned short us;
ci_dpp->ReadNBO(us);
m_szBuffer = (size_t)us;
m_ucpBuffer = new unsigned char[m_szBuffer];
ci_dpp->ReadData(m_ucpBuffer,m_szBuffer);
}
void RDataRaw::SetRData(const char *ci_strRData) {
m_szBuffer = strlen(ci_strRData) + 1;
m_ucpBuffer = (unsigned char*)StringDuplicate(ci_strRData);
}
void RDataRaw::WriteRData(BufferPtr io_dpp) const {
io_dpp->WriteNBO((unsigned short)m_szBuffer);
io_dpp->WriteData(m_ucpBuffer,m_szBuffer);
}
RDataRaw::~RDataRaw() {
m_szBuffer = 0;
SoftDeleteArray(m_ucpBuffer);
}