blob: 7c26c1e46a4e12a250c3f641a24b6bff4b14d445 [file]
/** @file
Reference decoder for the self-describing v3 binary log format.
@section license License
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#pragma once
struct LogEntryHeader;
struct LogBufferHeader;
/** Self-describing decode of a single v3 binary-log entry to JSON.
The reference an out-of-tree decoder mirrors against the v3 spec
(doc/developer-guide/logging-architecture/binary-log-v3-format.en.rst):
dispatches purely on the schema's LogField::Type codes, with no global field
table or symbol->type map.
Framing, not semantics: each value is emitted in its type's generic form
(sINT/dINT as JSON number(s), STRING as text, IP as address string). Do NOT
render field semantics here -- alias maps ("TCP_HIT"), date/hex variants,
slicing, or anything symbol-specific; the symbol is only the JSON key. That
is what keeps this a faithful file-only reference.
The segment may be untrusted, so every read is bounded; a malformed segment
yields -1 rather than an out-of-bounds read.
@return bytes written to @a buf (excluding the trailing NUL), or -1 on
error, on a v2 segment lacking the schema, or on insufficient space.
*/
int log_entry_to_json(LogEntryHeader *entry, LogBufferHeader *header, char *buf, int buf_len);