5 DnstapMessage::DnstapMessage(const std::string
& identity
, const ComboAddress
* requestor
, const ComboAddress
* responder
, bool isTCP
, const char* packet
, const size_t len
, const struct timespec
* queryTime
, const struct timespec
* responseTime
)
8 const struct dnsheader
* dh
= reinterpret_cast<const struct dnsheader
*>(packet
);
10 proto_message
.set_identity(identity
);
11 proto_message
.set_version(PACKAGE_STRING
);
12 proto_message
.set_type(dnstap::Dnstap::MESSAGE
);
14 dnstap::Message
* message
= proto_message
.mutable_message();
16 message
->set_type(!dh
->qr
? dnstap::Message_Type_CLIENT_QUERY
: dnstap::Message_Type_CLIENT_RESPONSE
);
17 message
->set_socket_protocol(isTCP
? dnstap::TCP
: dnstap::UDP
);
19 if (requestor
!= nullptr) {
20 message
->set_socket_family(requestor
->sin4
.sin_family
== AF_INET
? dnstap::INET
: dnstap::INET6
);
21 if (requestor
->sin4
.sin_family
== AF_INET
) {
22 message
->set_query_address(&requestor
->sin4
.sin_addr
.s_addr
, sizeof(requestor
->sin4
.sin_addr
.s_addr
));
23 } else if (requestor
->sin4
.sin_family
== AF_INET6
) {
24 message
->set_query_address(&requestor
->sin6
.sin6_addr
.s6_addr
, sizeof(requestor
->sin6
.sin6_addr
.s6_addr
));
26 message
->set_query_port(ntohs(requestor
->sin4
.sin_port
));
28 if (responder
!= nullptr) {
29 message
->set_socket_family(responder
->sin4
.sin_family
== AF_INET
? dnstap::INET
: dnstap::INET6
);
30 if (responder
->sin4
.sin_family
== AF_INET
) {
31 message
->set_response_address(&responder
->sin4
.sin_addr
.s_addr
, sizeof(responder
->sin4
.sin_addr
.s_addr
));
32 } else if (responder
->sin4
.sin_family
== AF_INET6
) {
33 message
->set_response_address(&responder
->sin6
.sin6_addr
.s6_addr
, sizeof(responder
->sin6
.sin6_addr
.s6_addr
));
35 message
->set_response_port(ntohs(responder
->sin4
.sin_port
));
37 if (queryTime
!= nullptr) {
38 message
->set_query_time_sec(queryTime
->tv_sec
);
39 message
->set_query_time_nsec(queryTime
->tv_nsec
);
41 if (responseTime
!= nullptr) {
42 message
->set_response_time_sec(responseTime
->tv_sec
);
43 message
->set_response_time_nsec(responseTime
->tv_nsec
);
47 message
->set_query_message(packet
, len
);
49 message
->set_response_message(packet
, len
);
51 #endif /* HAVE_PROTOBUF */
54 void DnstapMessage::serialize(std::string
& data
) const
57 proto_message
.SerializeToString(&data
);
58 #endif /* HAVE_PROTOBUF */
61 std::string
DnstapMessage::toDebugString() const
65 proto_message
.DebugString();
68 #endif /* HAVE_PROTOBUF */
71 void DnstapMessage::setExtra(const std::string
& extra
)
74 proto_message
.set_extra(extra
);
75 #endif /* HAVE_PROTOBUF */