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: