Factor building a MessageHeader out

We want to reuse this for message_bridge.

Change-Id: I7f45c83d0d40496273ad8987d4627b7ccb78913a
diff --git a/aos/events/logging/logger.cc b/aos/events/logging/logger.cc
index 584c68d..01f75ec 100644
--- a/aos/events/logging/logger.cc
+++ b/aos/events/logging/logger.cc
@@ -155,6 +155,25 @@
   });
 }
 
+flatbuffers::Offset<MessageHeader> PackMessage(
+    flatbuffers::FlatBufferBuilder *fbb, const Context &context,
+    int channel_index) {
+  flatbuffers::Offset<flatbuffers::Vector<uint8_t>> data_offset =
+      fbb->CreateVector(static_cast<uint8_t *>(context.data), context.size);
+
+  MessageHeader::Builder message_header_builder(*fbb);
+  message_header_builder.add_channel_index(channel_index);
+  message_header_builder.add_monotonic_sent_time(
+      context.monotonic_sent_time.time_since_epoch().count());
+  message_header_builder.add_realtime_sent_time(
+      context.realtime_sent_time.time_since_epoch().count());
+
+  message_header_builder.add_queue_index(context.queue_index);
+
+  message_header_builder.add_data(data_offset);
+  return message_header_builder.Finish();
+}
+
 void Logger::DoLogData() {
   // We want to guarentee that messages aren't out of order by more than
   // max_out_of_order_duration.  To do this, we need sync points.  Every write
@@ -200,31 +219,12 @@
                                              max_header_size_);
           fbb.ForceDefaults(1);
 
-          flatbuffers::Offset<flatbuffers::Vector<uint8_t>> data_offset =
-              fbb.CreateVector(
-                  static_cast<uint8_t *>(f.fetcher->context().data),
-                  f.fetcher->context().size);
+          fbb.FinishSizePrefixed(
+              PackMessage(&fbb, f.fetcher->context(), channel_index));
 
           VLOG(1) << "Writing data for channel "
                   << FlatbufferToJson(f.fetcher->channel());
 
-          MessageHeader::Builder message_header_builder(fbb);
-          message_header_builder.add_channel_index(channel_index);
-          message_header_builder.add_monotonic_sent_time(
-              f.fetcher->context()
-                  .monotonic_sent_time.time_since_epoch()
-                  .count());
-          message_header_builder.add_realtime_sent_time(
-              f.fetcher->context()
-                  .realtime_sent_time.time_since_epoch()
-                  .count());
-
-          message_header_builder.add_queue_index(
-              f.fetcher->context().queue_index);
-
-          message_header_builder.add_data(data_offset);
-
-          fbb.FinishSizePrefixed(message_header_builder.Finish());
           max_header_size_ = std::max(
               max_header_size_, fbb.GetSize() - f.fetcher->context().size);
           writer_->QueueSizedFlatbuffer(&fbb);
diff --git a/aos/events/logging/logger.h b/aos/events/logging/logger.h
index f03aa64..db23767 100644
--- a/aos/events/logging/logger.h
+++ b/aos/events/logging/logger.h
@@ -45,6 +45,11 @@
   std::vector<struct iovec> iovec_;
 };
 
+// Packes a message pointed to by the context into a MessageHeader.
+flatbuffers::Offset<MessageHeader> PackMessage(
+    flatbuffers::FlatBufferBuilder *fbb, const Context &context,
+    int channel_index);
+
 // Logs all channels available in the event loop to disk every 100 ms.
 // Start by logging one message per channel to capture any state and
 // configuration that is sent rately on a channel and would affect execution.