Branch data Line data Source code
1 : : // Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
2 : : //
3 : : // Permission to use, copy, modify, and/or distribute this software for any
4 : : // purpose with or without fee is hereby granted, provided that the above
5 : : // copyright notice and this permission notice appear in all copies.
6 : : //
7 : : // THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
8 : : // REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
9 : : // AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
10 : : // INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
11 : : // LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
12 : : // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
13 : : // PERFORMANCE OF THIS SOFTWARE.
14 : :
15 : : #include <resolve/resolve.h>
16 : :
17 : : #include <dns/message.h>
18 : : #include <dns/opcode.h>
19 : :
20 : : using namespace isc::dns;
21 : :
22 : : namespace {
23 : : class SectionInserter {
24 : : public:
25 : : SectionInserter(MessagePtr message, const Message::Section sect) :
26 : : message_(message), section_(sect)
27 : : {}
28 : : void operator()(const RRsetPtr rrset) {
29 : : message_->addRRset(section_, rrset, true);
30 : : }
31 : : MessagePtr message_;
32 : : const Message::Section section_;
33 : : };
34 : : }
35 : :
36 : : namespace isc {
37 : : namespace resolve {
38 : :
39 : : void
40 : 7 : makeErrorMessage(MessagePtr answer_message,
41 : : const Rcode& error_code)
42 : : {
43 : 7 : answer_message->clearSection(Message::SECTION_ANSWER);
44 : 7 : answer_message->clearSection(Message::SECTION_AUTHORITY);
45 : 7 : answer_message->clearSection(Message::SECTION_ADDITIONAL);
46 : :
47 : 7 : answer_message->setRcode(error_code);
48 : 7 : }
49 : :
50 : 2 : void initResponseMessage(const isc::dns::Message& query_message,
51 : : isc::dns::Message& response_message)
52 : : {
53 : 2 : response_message.setOpcode(query_message.getOpcode());
54 : 1 : response_message.setQid(query_message.getQid());
55 [ - + ]: 1 : assert(response_message.getRRCount(Message::SECTION_QUESTION) == 0);
56 : : response_message.appendSection(Message::SECTION_QUESTION,
57 : 1 : query_message);
58 : 1 : }
59 : :
60 : 12 : void initResponseMessage(const isc::dns::Question& question,
61 : : isc::dns::Message& response_message)
62 : : {
63 : 12 : response_message.setOpcode(isc::dns::Opcode::QUERY());
64 : 11 : response_message.addQuestion(question);
65 : 11 : }
66 : :
67 : 3 : void copyResponseMessage(const Message& source, MessagePtr target) {
68 : 3 : target->setRcode(source.getRcode());
69 : :
70 : 3 : target->appendSection(Message::SECTION_ANSWER, source);
71 : 3 : target->appendSection(Message::SECTION_AUTHORITY, source);
72 : 3 : target->appendSection(Message::SECTION_ADDITIONAL, source);
73 : 3 : }
74 : :
75 : :
76 : : } // namespace resolve
77 : 2 : } // namespace isc
78 : :
|