UdpProcessor: virtual method HandleOne() for preprocessing. The new method is a general-purpose hook that is run over all received datagrams. It may opt to not process a datagram as a Roughtime message. Change-Id: I7fdcaabb32fac5e0cc26a18a9ca9e3e09c83350c
diff --git a/udp_processor.cc b/udp_processor.cc index 5a82a04..de57f6d 100644 --- a/udp_processor.cc +++ b/udp_processor.cc
@@ -138,6 +138,11 @@ } #endif +bool UdpProcessor::HandleOne(const struct msghdr *from, const uint8_t *packet, + size_t len, Server *server) { + return server->AddRequest(packet, len); +} + bool UdpProcessor::ProcessBatch(int fd, Server *server, Stats *out_stats) { server->Reset(); memset(out_stats, 0, sizeof(Stats)); @@ -166,7 +171,8 @@ out_stats->requests_truncated++; continue; } - if (!server->AddRequest(recv_buf_[i], recv_mmsghdrs_[i].msg_len)) { + if (!HandleOne(recv_header, recv_buf_[i], recv_mmsghdrs_[i].msg_len, + server)) { out_stats->requests_invalid++; continue; }
diff --git a/udp_processor.h b/udp_processor.h index 2f6d6e4..a418fe0 100644 --- a/udp_processor.h +++ b/udp_processor.h
@@ -63,6 +63,11 @@ // errors.) virtual bool ProcessBatch(int fd, Server* server, Stats* out_stats); + // HandleOne processes a single |packet| of length |len| received from |from|. + // It should return true if the message was accepted by |server|. + virtual bool HandleOne(const struct msghdr* from, const uint8_t* packet, + size_t len, Server* server); + // MakeSocket sets |*out_sock| to a UDP socket bound to the given port and // sets |*out_port| to the bound port number. If |port| is zero then a free // port number is used. It returns true on success or false on error.