Kea 2.5.8
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
20namespace isc {
21namespace d2 {
22
30public:
31 InvalidZoneSection(const char* file, size_t line, const char* what) :
32 isc::Exception(file, line, what) {}
33};
34
43class InvalidQRFlag : public Exception {
44public:
45 InvalidQRFlag(const char* file, size_t line, const char* what) :
46 isc::Exception(file, line, what) {}
47};
48
54public:
55 NotUpdateMessage(const char* file, size_t line, const char* what) :
56 isc::Exception(file, line, what) {}
57};
58
63class TSIGVerifyError : public Exception {
64public:
65 TSIGVerifyError(const char* file, size_t line, const char* what) :
66 isc::Exception(file, line, what) {}
67};
68
69
70class D2UpdateMessage;
71
73typedef boost::shared_ptr<D2UpdateMessage> D2UpdateMessagePtr;
74
90public:
91
94 enum Direction {
97 };
98
100 enum QRFlag {
103 };
104
122 };
123
124public:
137 D2UpdateMessage(const Direction direction = OUTBOUND);
138
144
145private:
146 D2UpdateMessage(const D2UpdateMessage& source);
147 D2UpdateMessage& operator=(const D2UpdateMessage& source);
149
150public:
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
203 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
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
305private:
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
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
The D2UpdateMessage encapsulates a DNS Update message.
D2ZonePtr getZone() const
Returns a pointer to the object representing Zone record.
void setId(const uint16_t id)
Sets message ID.
UpdateMsgSection
Identifies sections in the DNS Update Message.
QRFlag
Indicates whether DNS Update message is a REQUEST or RESPONSE.
unsigned int getRRCount(const UpdateMsgSection section) const
Returns number of RRsets in the specified message section.
const dns::RRsetIterator beginSection(const UpdateMsgSection section) const
Return iterators pointing to the beginning of the list of RRsets, which belong to the specified secti...
void fromWire(const void *received_data, size_t bytes_received, dns::TSIGContext *const tsig_context=NULL)
Decode incoming message from the wire format.
const dns::RRsetIterator endSection(const UpdateMsgSection section) const
Return iterators pointing to the end of the list of RRsets, which belong to the specified section.
void toWire(dns::AbstractMessageRenderer &renderer, dns::TSIGContext *const tsig_ctx=NULL)
Encode outgoing message into wire format.
Direction
Indicates if the D2UpdateMessage object encapsulates Inbound or Outbound message.
QRFlag getQRFlag() const
Returns enum value indicating if the message is a REQUEST or RESPONSE.
void setRcode(const dns::Rcode &rcode)
Sets message RCode.
uint16_t getId() const
Returns message ID.
void addRRset(const UpdateMsgSection section, const dns::RRsetPtr &rrset)
Adds an RRset to the specified section.
void setZone(const dns::Name &zone, const dns::RRClass &rrclass)
Sets the Zone record.
const dns::Rcode & getRcode() const
Returns an object representing message RCode.
Exception indicating that QR flag has invalid value.
InvalidQRFlag(const char *file, size_t line, const char *what)
Exception indicating that Zone section contains invalid content.
InvalidZoneSection(const char *file, size_t line, const char *what)
Exception indicating that the parsed message is not DNS Update.
NotUpdateMessage(const char *file, size_t line, const char *what)
Exception indicating that a signed, inbound message failed to verify.
TSIGVerifyError(const char *file, size_t line, const char *what)
The AbstractMessageRenderer class is an abstract base class that provides common interfaces for rende...
The Message class encapsulates a standard DNS message.
Definition: message.h:152
Section
Constants to specify sections of a DNS message.
Definition: message.h:242
The Name class encapsulates DNS names.
Definition: name.h:219
The RRClass class encapsulates DNS resource record classes.
Definition: rrclass.h:89
DNS Response Codes (RCODEs) class.
Definition: rcode.h:40
SectionIterator is a templated class to provide standard-compatible iterators for Questions and RRset...
Definition: message.h:88
TSIG session context.
Definition: tsig.h:171
boost::shared_ptr< D2UpdateMessage > D2UpdateMessagePtr
Pointer to the DNS Update Message.
boost::shared_ptr< D2Zone > D2ZonePtr
Definition: d2_zone.h:93
boost::shared_ptr< AbstractRRset > RRsetPtr
A pointer-like type pointing to an RRset object.
Definition: rrset.h:50
Defines the logger used by the top-level component of kea-lfc.