diff --git a/src/dnstap/message.c b/src/dnstap/message.c index 5aadfb02d23dc3f22d88b1adfc89c40ef11dab66..bd3ff2daeb070c2e0dd2f16d84d93c5394ddc65d 100644 --- a/src/dnstap/message.c +++ b/src/dnstap/message.c @@ -22,6 +22,7 @@ #include "common/errcode.h" +#include "dnstap/convert.h" #include "dnstap/message.h" static void set_address(const struct sockaddr *sockaddr, @@ -58,44 +59,11 @@ static int get_family(const struct sockaddr *query_sa, const struct sockaddr *response_sa) { const struct sockaddr *source = query_sa ? query_sa : response_sa; - if (source == NULL) { return 0; } - switch (source->sa_family) { - case AF_INET: - return DNSTAP__SOCKET_FAMILY__INET; - case AF_INET6: - return DNSTAP__SOCKET_FAMILY__INET6; - default: - return 0; - } -} - -static bool is_query(Dnstap__Message__Type type) -{ - switch (type) { - case DNSTAP__MESSAGE__TYPE__STUB_QUERY: - case DNSTAP__MESSAGE__TYPE__CLIENT_QUERY: - case DNSTAP__MESSAGE__TYPE__RESOLVER_QUERY: - case DNSTAP__MESSAGE__TYPE__AUTH_QUERY: - return true; - default: - return false; - } -} - -static bool is_response(Dnstap__Message__Type type) -{ - switch (type) { - case DNSTAP__MESSAGE__TYPE__STUB_RESPONSE: - case DNSTAP__MESSAGE__TYPE__CLIENT_RESPONSE: - case DNSTAP__MESSAGE__TYPE__RESOLVER_RESPONSE: - case DNSTAP__MESSAGE__TYPE__AUTH_RESPONSE: - default: - return false; - } + return dt_family_encode(source->sa_family); } int dt_message_fill(Dnstap__Message *m, @@ -124,13 +92,7 @@ int dt_message_fill(Dnstap__Message *m, m->has_socket_family = m->socket_family != 0; // Message.socket_protocol - if (protocol == IPPROTO_UDP) { - m->socket_protocol = DNSTAP__SOCKET_PROTOCOL__UDP; - } else if (protocol == IPPROTO_TCP) { - m->socket_protocol = DNSTAP__SOCKET_PROTOCOL__TCP; - } else { - m->socket_protocol = 0; - } + m->socket_protocol = dt_protocol_encode(protocol); m->has_socket_protocol = m->socket_protocol != 0; // Message addresses @@ -139,12 +101,12 @@ int dt_message_fill(Dnstap__Message *m, set_address(response_sa, &m->response_address, &m->has_response_address, &m->response_port, &m->has_response_port); - if (is_query(type)) { + if (dt_message_type_is_query(type)) { // Message.query_message m->query_message.len = len_wire; m->query_message.data = (uint8_t *)wire; m->has_query_message = 1; - } else if (is_response(type)) { + } else if (dt_message_type_is_response(type)) { // Message.response_message m->response_message.len = len_wire; m->response_message.data = (uint8_t *)wire; diff --git a/src/utils/dig/dig_exec.c b/src/utils/dig/dig_exec.c index 03586cbec6c88223cca54877fbeedbc2f7935f68..6e600c9453e0e1e9bac87f0cb6352f90de1749a4 100644 --- a/src/utils/dig/dig_exec.c +++ b/src/utils/dig/dig_exec.c @@ -32,6 +32,7 @@ #include "utils/common/exec.h" // print_packet #if USE_DNSTAP +# include "dnstap/convert.h" # include "dnstap/message.h" # include "dnstap/writer.h" @@ -57,7 +58,7 @@ static int write_dnstap(dt_writer_t *writer, : DNSTAP__MESSAGE__TYPE__TOOL_QUERY; ret = dt_message_fill(&msg, msg_type, net->local_info->ai_addr, - net->srv->ai_addr, net->local_info->ai_protocol, + net->srv->ai_addr, net->srv->ai_protocol, wire, wire_len, qtime, rtime); if (ret != KNOT_EOK) { return ret; @@ -160,35 +161,21 @@ static void process_dnstap(const query_t *query) message->has_socket_family && message->has_socket_protocol) { struct sockaddr_storage ss; - int family = AF_UNSPEC, proto = 0; - - switch (message->socket_family) { - case DNSTAP__SOCKET_FAMILY__INET: - family = AF_INET; - break; - case DNSTAP__SOCKET_FAMILY__INET6: - family = AF_INET6; - break; - default: - break; - } - - switch (message->socket_protocol) { - case DNSTAP__SOCKET_PROTOCOL__UDP: - proto = SOCK_DGRAM; - break; - case DNSTAP__SOCKET_PROTOCOL__TCP: - proto = SOCK_STREAM; - break; - default: - break; + int family, proto, sock_type; + + family = dt_family_decode(message->socket_family); + proto = dt_protocol_decode(message->socket_protocol); + switch (proto) { + case IPPROTO_TCP: sock_type = SOCK_STREAM; break; + case IPPROTO_UDP: sock_type = SOCK_DGRAM; break; + default: sock_type = 0; break; } sockaddr_set_raw(&ss, family, message->response_address.data, message->response_address.len); sockaddr_port_set(&ss, message->response_port); - get_addr_str(&ss, proto, &net_ctx.remote_str); + get_addr_str(&ss, sock_type, &net_ctx.remote_str); } print_packet(pkt, &net_ctx, pkt->size, query_time,