// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// This header file defines wire format to transfer logs to listening service.

#ifndef LIB_SYSLOG_WIRE_FORMAT_H_
#define LIB_SYSLOG_WIRE_FORMAT_H_

#include <lib/syslog/logger.h>
#include <zircon/types.h>

// Defines max length for storing log_metadata, tags and msgbuffer.
// TODO(anmittal): Increase it when zircon sockets are able to support a higher
// buffer.
#define FX_LOG_MAX_DATAGRAM_LEN (2032)

typedef struct fx_log_metadata {
  zx_koid_t pid;
  zx_koid_t tid;
  zx_time_t time;
  fx_log_severity_t severity;

  // Increment this field whenever there is a socket write error and client
  // drops the log and send it with next log msg.
  uint32_t dropped_logs;
} fx_log_metadata_t;

// Packet to transfer over socket.
typedef struct fx_log_packet {
  fx_log_metadata_t metadata;

  // Contains concatenated tags and message and a null terminating character at
  // the end.
  char data[FX_LOG_MAX_DATAGRAM_LEN - sizeof(fx_log_metadata_t)];
} fx_log_packet_t;

#endif  // LIB_SYSLOG_WIRE_FORMAT_H_
