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: