1: 
   2: 
   3: /**********************
   4: *                     *
   5: *  COMPILER INCLUDES  *
   6: *                     *
   7: **********************/
   8: 
   9: 
  10: #include <cassert> 
  11: 
  12: 
  13: /*********************
  14: *                    *
  15: *  PROJECT INCLUDES  *
  16: *                    *
  17: *********************/
  18: 
  19: 
  20: #include "dnsutil.h" 
  21: #include "ex.h" 
  22: #include "format.h" 
  23: 
  24: 
  25: using WWWI::HexDump;
  26: using WWWI::HTON;
  27: using WWWI::NTOH;
  28: 
  29: 
  30: /*********************
  31: *                    *
  32: *  METHOD DUMPRANGE  *
  33: *                    *
  34: *********************/
  35: 
  36: 
  37: template <class SM> void Buffer::DumpRange(SM &io_smr, off_t i_of, size_t i_sz) const {
  38:   ::HexDump(io_smr,m_ucpBuffer+i_of,i_sz,2,8);
  39: }
  40: 
  41: 
  42: /***************
  43: *              *
  44: *  METHOD GET  *
  45: *              *
  46: ***************/
  47: 
  48: 
  49: inline unsigned char Buffer::Get(off_t i_of) const {
  50:   if (i_of>=(off_t)m_szBuffer) 
  51:     throw BadParseEx(FOUT("Buffer::Get: buffer overrun at ",i_of," max ",m_szBuffer));
  52:   return m_ucpBuffer[i_of];
  53: }
  54: 
  55: 
  56: /*******************
  57: *                  *
  58: *  METHODS GETXXX  *
  59: *                  *
  60: *******************/
  61: 
  62: 
  63: inline const unsigned char *Buffer::GetBuffer() const { return m_ucpBuffer; }
  64: inline off_t Buffer::GetPos() const { return m_ofPos; }
  65: inline size_t Buffer::GetSize() const { return m_szBuffer; }
  66: 
  67: 
  68: /********************
  69: *                   *
  70: *  METHOD PREADNBO  *
  71: *                   *
  72: ********************/
  73: 
  74: 
  75: template <class T> void Buffer::PReadNBO(T &o_tr, off_t i_off) const {
  76:   this->ReadData(&o_tr,sizeof(T),i_off);
  77:   o_tr = NTOH(o_tr);
  78: }
  79: 
  80: 
  81: /*********************
  82: *                    *
  83: *  METHOD PWRITENBO  *
  84: *                    *
  85: *********************/
  86: 
  87: 
  88: template <class T> void Buffer::PWriteNBO(const T &ci_tr, off_t i_of) {
  89:   T t = HTON(ci_tr);
  90:   this->WriteData(&t,sizeof(T),i_of);
  91: }
  92: 
  93: 
  94: /****************
  95: *               *
  96: *  METHOD READ  *
  97: *               *
  98: ****************/
  99: 
 100: 
 101: template <class T> void Buffer::Read(T &o_tr) const {
 102:   this->ReadData(&o_tr,sizeof(T),m_ofPos);
 103: }
 104: 
 105: 
 106: /*******************
 107: *                  *
 108: *  METHOD READNBO  *
 109: *                  *
 110: *******************/
 111: 
 112: 
 113: template <class T> void Buffer::ReadNBO(T &o_tr) const {
 114:   T tTemp;
 115:   this->ReadData(&tTemp,sizeof(T),m_ofPos);
 116:   o_tr = NTOH(tTemp);
 117: }
 118: 
 119: 
 120: /****************
 121: *               *
 122: *  SET METHODS  *
 123: *               *
 124: ****************/
 125: 
 126: 
 127: inline void Buffer::SetPos(off_t i_ofPos) { assert(i_ofPos<(off_t)m_szBufferMax); m_ofPos = i_ofPos; }
 128: 
 129: 
 130: /********************
 131: *                   *
 132: *  METHOD TRUNCATE  *
 133: *                   *
 134: ********************/
 135: 
 136: 
 137: inline void Buffer::Truncate() { m_szBuffer = (size_t)m_ofPos; }
 138: 
 139: 
 140: /*****************
 141: *                *
 142: *  METHOD WRITE  *
 143: *                *
 144: *****************/
 145: 
 146: 
 147: template <class T> void Buffer::Write(const T &ci_tr) {
 148:   return this->WriteData(&ci_tr,sizeof(T));
 149: }
 150: 
 151: 
 152: /********************
 153: *                   *
 154: *  METHOD WRITENBO  *
 155: *                   *
 156: ********************/
 157: 
 158: 
 159: template <class T> void Buffer::WriteNBO(const T &ci_tr) {
 160:   T t = HTON(ci_tr);
 161:   this->WriteData(&t,sizeof(T));
 162: }
 163: 
 164: 
 165: