Kea  2.3.5-git
d2_update_message.h
Go to the documentation of this file.
1 // Copyright (C) 2013-2021 Internet Systems Consortium, Inc. ("ISC")
2 //
3 // This Source Code Form is subject to the terms of the Mozilla Public
4 // License, v. 2.0. If a copy of the MPL was not distributed with this
5 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 
7 #ifndef D2_UPDATE_MESSAGE_H
8 #define D2_UPDATE_MESSAGE_H
9 
10 #include <d2srv/d2_zone.h>
11 #include <dns/message.h>
12 #include <dns/name.h>
13 #include <dns/rcode.h>
14 #include <dns/rrclass.h>
15 #include <dns/rrset.h>
16 #include <dns/tsig.h>
17 
18 #include <map>
19 
20 namespace isc {
21 namespace d2 {
22 
29 class InvalidZoneSection : public Exception {
30 public:
31  InvalidZoneSection(const char* file, size_t line, const char* what) :
32  isc::Exception(file, line, what) {}
33 };
34 
43 class InvalidQRFlag : public Exception {
44 public:
45  InvalidQRFlag(const char* file, size_t line, const char* what) :
46  isc::Exception(file, line, what) {}
47 };
48 
53 class NotUpdateMessage : public Exception {
54 public:
55  NotUpdateMessage(const char* file, size_t line, const char* what) :
56  isc::Exception(file, line, what) {}
57 };
58 
63 class TSIGVerifyError : public Exception {
64 public:
65  TSIGVerifyError(const char* file, size_t line, const char* what) :
66  isc::Exception(file, line, what) {}
67 };
68 
69 
71 
73 typedef boost::shared_ptr<D2UpdateMessage> D2UpdateMessagePtr;
74 
90 public:
91 
94  enum Direction {
96  OUTBOUND
97  };
98 
100  enum QRFlag {
102  RESPONSE
103  };
104 
121  SECTION_ADDITIONAL
122  };
123 
124 public:
137  D2UpdateMessage(const Direction direction = OUTBOUND);
138 
144 
145 private:
146  D2UpdateMessage(const D2UpdateMessage& source);
147  D2UpdateMessage& operator=(const D2UpdateMessage& source);
149 
150 public:
151 
162  QRFlag getQRFlag() const;
163 
167  uint16_t getId() const;
168 
172  void setId(const uint16_t id);
173 
177  const dns::Rcode& getRcode() const;
178 
182  void setRcode(const dns::Rcode& rcode);
183 
190  unsigned int getRRCount(const UpdateMsgSection section) const;
191 
194 
195  const dns::RRsetIterator beginSection(const UpdateMsgSection section) const;
204 
213  const dns::RRsetIterator endSection(const UpdateMsgSection section) const;
215 
225  void setZone(const dns::Name& zone, const dns::RRClass& rrclass);
226 
230  D2ZonePtr getZone() const;
231 
241  void addRRset(const UpdateMsgSection section, const dns::RRsetPtr& rrset);
242 
245 
246  void toWire(dns::AbstractMessageRenderer& renderer,
273  dns::TSIGContext* const tsig_ctx = NULL);
274 
301  void fromWire(const void* received_data, size_t bytes_received,
302  dns::TSIGContext* const tsig_context = NULL);
304 
305 private:
316  static
317  dns::Message::Section ddnsToDnsSection(const UpdateMsgSection section);
318 
334  void validateResponse() const;
335 
346  dns::Message message_;
347 
350  D2ZonePtr zone_;
351 
352 };
353 
354 } // namespace d2
355 } // namespace isc
356 
357 #endif // D2_UPDATE_MESSAGE_H
The Name class encapsulates DNS names.
Definition: name.h:223
The D2UpdateMessage encapsulates a DNS Update message.
TSIG session context.
Definition: tsig.h:171
Exception indicating that QR flag has invalid value.
boost::shared_ptr< D2UpdateMessage > D2UpdateMessagePtr
Pointer to the DNS Update Message.
Exception indicating that the parsed message is not DNS Update.
TSIGVerifyError(const char *file, size_t line, const char *what)
boost::shared_ptr< D2Zone > D2ZonePtr
Definition: d2_zone.h:93
DNS Response Codes (RCODEs) class.
Definition: rcode.h:40
The Message class encapsulates a standard DNS message.
Definition: message.h:150
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
The RRClass class encapsulates DNS resource record classes.
Definition: rrclass.h:98
Exception indicating that Zone section contains invalid content.
The AbstractMessageRenderer class is an abstract base class that provides common interfaces for rende...
QRFlag
Indicates whether DNS Update message is a REQUEST or RESPONSE.
Defines the logger used by the top-level component of kea-lfc.
SectionIterator is a templated class to provide standard-compatible iterators for Questions and RRset...
Definition: message.h:91
Section
Constants to specify sections of a DNS message.
Definition: message.h:240
InvalidZoneSection(const char *file, size_t line, const char *what)
UpdateMsgSection
Identifies sections in the DNS Update Message.
Direction
Indicates if the D2UpdateMessage object encapsulates Inbound or Outbound message. ...
boost::shared_ptr< AbstractRRset > RRsetPtr
A pointer-like type pointing to an RRset object.
Definition: rrset.h:47
Exception indicating that a signed, inbound message failed to verify.
InvalidQRFlag(const char *file, size_t line, const char *what)
NotUpdateMessage(const char *file, size_t line, const char *what)