1: 
   2: 
   3: /*********************
   4: *                    *
   5: *  PROJECT INCLUDES  *
   6: *                    *
   7: *********************/
   8: 
   9: 
  10: #include "rdata_name.h" 
  11: 
  12: 
  13: /**************************
  14: *                         *
  15: *  RDATANAME CONSTRUCTOR  *
  16: *                         *
  17: **************************/
  18: 
  19: 
  20: RDataName::RDataName() {
  21:   m_llp = NULL;
  22: }
  23: 
  24: 
  25: /*****************
  26: *                *
  27: *  METHOD CLONE  *
  28: *                *
  29: *****************/
  30: 
  31: 
  32: RDataPtr RDataName::Clone() const {
  33:   RDataName *rdpOut = new RDataName;
  34:   rdpOut->m_llp = new LabelList(*m_llp);
  35:   return (RDataPtr)rdpOut;
  36: }
  37: 
  38: 
  39: /*******************
  40: *                  *
  41: *  METHOD COMPARE  *
  42: *                  *
  43: *******************/
  44: 
  45: 
  46: bool RDataName::Compare(const RData &ci_rdr) const {
  47:   LabelListConstPtr c_llpFar = ci_rdr.As<RDataName>()->GetRDName();
  48:   return ((*c_llpFar)==(*m_llp));
  49: }
  50: 
  51:  
  52: /****************
  53: *               *
  54: *  METHOD DUMP  *
  55: *               *
  56: ****************/
  57: 
  58: 
  59: void RDataName::Dump(ostream &io_smr) const {
  60:   io_smr << this->GetRDName();
  61: }
  62: 
  63: 
  64: /*********************
  65: *                    *
  66: *  METHOD GETRDNAME  *
  67: *                    *
  68: *********************/
  69: 
  70: 
  71: LabelListConstPtr RDataName::GetRDName() const { return m_llp; }
  72: 
  73: 
  74: /*******************
  75: *                  *
  76: *  METHOD ISMATCH  *
  77: *                  *
  78: *******************/
  79: 
  80: 
  81: bool RDataName::IsMatch(RRType i_ty, RRClass i_cl) {
  82:   switch(i_ty) {
  83: //  RFC 1035 "Well Known" types that do not require class IN
  84:   case TY_NS:
  85:   case TY_MD:
  86:   case TY_MF:
  87:   case TY_CNAME:
  88:   case TY_MB:
  89:   case TY_MG:
  90:   case TY_MR:
  91:   case TY_PTR:
  92:     return true;
  93:   default: break;
  94:   }
  95: // If there were any IN-specific name types, they would go here.
  96:   return false;
  97: }           
  98: 
  99: 
 100: /*********************
 101: *                    *
 102: *  METHOD READRDATA  *
 103: *                    *
 104: *********************/
 105: 
 106: 
 107: void RDataName::ReadRData(BufferConstPtr ci_dpp) {
 108:   unsigned short us;
 109: 
 110:   ci_dpp->ReadNBO(us);
 111:   ci_dpp->ReadLabelList(m_llp,true);
 112: }
 113: 
 114: 
 115: /********************
 116: *                   *
 117: *  METHOD SETRDATA  *
 118: *                   *
 119: ********************/
 120: 
 121: 
 122: void RDataName::SetRData(const char *ci_strRData) {
 123:   m_llp = new LabelList(ci_strRData);
 124: }
 125: 
 126: 
 127: /**********************
 128: *                     *
 129: *  METHOD WRITERDATA  *
 130: *                     *
 131: **********************/
 132: 
 133: 
 134: void RDataName::WriteRData(BufferPtr io_dpp) const {
 135:   unsigned short us;
 136:   off_t ofPos;
 137: 
 138:   ofPos = io_dpp->GetPos();
 139:   io_dpp->WriteNBO((unsigned short)0);
 140:   us = io_dpp->WriteLabelList(m_llp,true);
 141:   io_dpp->PWriteNBO(us,ofPos);
 142: }
 143: 
 144: 
 145: /*************************
 146: *                        *
 147: *  RDATANAME DESTRUCTOR  *
 148: *                        *
 149: *************************/
 150: 
 151: 
 152: RDataName::~RDataName() {
 153:   SoftDelete(m_llp);
 154: }
 155: 
 156: 
 157: