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: