1: 
   2: 
   3: /*********************
   4: *                    *
   5: *  PROJECT INCLUDES  *
   6: *                    *
   7: *********************/
   8: 
   9: 
  10: #include "rdata_soa.h" 
  11: 
  12: 
  13: /*************************
  14: *                        *
  15: *  RDATASOA CONSTRUCTOR  *
  16: *                        *
  17: *************************/
  18: 
  19: 
  20: RDataSOA::RDataSOA() {
  21:   m_llpMName = NULL;
  22:   m_llpRName = NULL;
  23:   m_uSerial = 0;
  24:   m_uRefresh = 0;
  25:   m_uRetry = 0;
  26:   m_uExpire = 0;
  27:   m_uMinimum = 0;
  28: }
  29: 
  30: 
  31: /*****************
  32: *                *
  33: *  METHOD CLONE  *
  34: *                *
  35: *****************/
  36: 
  37: 
  38: RDataPtr RDataSOA::Clone() const {
  39:   RDataSOA *rdpOut = new RDataSOA;
  40:   rdpOut->m_llpMName = new LabelList(*m_llpMName);
  41:   rdpOut->m_llpRName = new LabelList(*m_llpRName);
  42:   rdpOut->m_uSerial = m_uSerial;
  43:   rdpOut->m_uRefresh = m_uRefresh;
  44:   rdpOut->m_uRetry = m_uRetry;
  45:   rdpOut->m_uExpire = m_uExpire;
  46:   rdpOut->m_uMinimum = m_uMinimum;
  47:   return (RDataPtr)rdpOut;
  48: }
  49: 
  50: 
  51: /*******************
  52: *                  *
  53: *  METHOD COMPARE  *
  54: *                  *
  55: *******************/
  56: 
  57: 
  58: bool RDataSOA::Compare(const RData &ci_rdr) const {
  59:   const RDataSOA *c_rdp = ci_rdr.As<RDataSOA>();
  60:   if (c_rdp->m_uSerial!=m_uSerial) return false;
  61:   if (c_rdp->m_uRefresh!=m_uRefresh) return false;
  62:   if (c_rdp->m_uRetry!=m_uRetry) return false;
  63:   if (c_rdp->m_uExpire!=m_uExpire) return false;
  64:   if (c_rdp->m_uMinimum!=m_uMinimum) return false;
  65:   if ((*c_rdp->m_llpMName)!=(*m_llpMName)) return false;
  66:   if ((*c_rdp->m_llpRName)!=(*m_llpRName)) return false;
  67:   return true;
  68: }
  69: 
  70:  
  71: /****************
  72: *               *
  73: *  METHOD DUMP  *
  74: *               *
  75: ****************/
  76: 
  77: 
  78: void RDataSOA::Dump(ostream &io_smr) const {
  79:   io_smr << m_llpMName << " " << m_llpRName << " ( "
  80:          << m_uSerial << " " << m_uRefresh << " "
  81:          << m_uRetry << " " << m_uExpire << " " << m_uMinimum << ")";
  82: }
  83: 
  84: 
  85: /*******************
  86: *                  *
  87: *  METHOD ISMATCH  *
  88: *                  *
  89: *******************/
  90: 
  91: 
  92: bool RDataSOA::IsMatch(RRType i_ty, RRClass i_cl) {
  93:   // RFC 1035 says SOA is class-independent.
  94:   return (i_ty==TY_SOA);
  95: }           
  96: 
  97: 
  98: /*********************
  99: *                    *
 100: *  METHOD READRDATA  *
 101: *                    *
 102: *********************/
 103: 
 104: 
 105: void RDataSOA::ReadRData(BufferConstPtr ci_dpp) {
 106:   unsigned short us;
 107: 
 108:   ci_dpp->ReadNBO(us);
 109:   ci_dpp->ReadLabelList(m_llpMName,true);
 110:   ci_dpp->ReadLabelList(m_llpRName,true);
 111:   ci_dpp->ReadNBO(m_uSerial);
 112:   ci_dpp->ReadNBO(m_uRefresh);
 113:   ci_dpp->ReadNBO(m_uRetry);
 114:   ci_dpp->ReadNBO(m_uExpire);
 115:   ci_dpp->ReadNBO(m_uMinimum);
 116: }
 117: 
 118: 
 119: /********************
 120: *                   *
 121: *  METHOD SETRDATA  *
 122: *                   *
 123: ********************/
 124: 
 125: 
 126: void RDataSOA::SetRData(const char *ci_strRData) {
 127:   EX_MIND("RDataSOA::SetRData: I am too lazy to do this.");
 128: }
 129: 
 130: 
 131: /**********************
 132: *                     *
 133: *  METHOD WRITERDATA  *
 134: *                     *
 135: **********************/
 136: 
 137: 
 138: void RDataSOA::WriteRData(BufferPtr io_dpp) const {
 139:   unsigned short us;
 140:   off_t ofSave;
 141: 
 142:   ofSave = io_dpp->GetPos();
 143:   io_dpp->WriteNBO((unsigned short)0);
 144:   io_dpp->WriteLabelList(m_llpMName,true);
 145:   io_dpp->WriteLabelList(m_llpRName,true);
 146:   io_dpp->WriteNBO(m_uSerial);
 147:   io_dpp->WriteNBO(m_uRefresh);
 148:   io_dpp->WriteNBO(m_uRetry);
 149:   io_dpp->WriteNBO(m_uExpire);
 150:   io_dpp->WriteNBO(m_uMinimum);
 151: 
 152:   us = (unsigned short)(io_dpp->GetPos() - ofSave - 2);
 153:   io_dpp->PWriteNBO(us,ofSave);
 154: 
 155: }
 156: 
 157: 
 158: /************************
 159: *                       *
 160: *  RDATASOA DESTRUCTOR  *
 161: *                       *
 162: ************************/
 163: 
 164: 
 165: RDataSOA::~RDataSOA() {
 166:   SoftDelete(m_llpMName);
 167:   SoftDelete(m_llpRName);
 168: }
 169: 
 170: 
 171: