-/* Copyright (C) 2013-2021 Open Information Security Foundation
+/* Copyright (C) 2013-2022 Open Information Security Foundation
*
* You can copy, redistribute or modify this Program under the terms of
* the GNU General Public License version 2 as published by the Free
stream = &ssn->server;
frames = &frames_container->toclient;
}
+ Frame *frame = FrameGetById(frames, frame_id);
+ if (frame != NULL) {
+ FrameJsonLogOneFrame(IPPROTO_TCP, frame, p->flow, stream, p, jb);
+ }
} else if (p->proto == IPPROTO_UDP) {
if (PKT_IS_TOSERVER(p)) {
frames = &frames_container->toserver;
} else {
frames = &frames_container->toclient;
}
- }
-
- if (frames) {
Frame *frame = FrameGetById(frames, frame_id);
if (frame != NULL) {
- FrameJsonLogOneFrame(frame, p->flow, stream, p, jb);
+ FrameJsonLogOneFrame(IPPROTO_UDP, frame, p->flow, NULL, p, jb);
}
}
}
}
// TODO separate between stream_offset and frame_offset
-void FrameJsonLogOneFrame(const Frame *frame, const Flow *f, const TcpStream *stream,
- const Packet *p, JsonBuilder *jb)
+/** \brief log a single frame
+ * \note ipproto argument is passed to assist static code analyzers
+ */
+void FrameJsonLogOneFrame(const uint8_t ipproto, const Frame *frame, const Flow *f,
+ const TcpStream *stream, const Packet *p, JsonBuilder *jb)
{
+ DEBUG_VALIDATE_BUG_ON(ipproto != p->proto);
+ DEBUG_VALIDATE_BUG_ON(ipproto != f->proto);
+
jb_open_object(jb, "frame");
- jb_set_string(jb, "type", AppLayerParserGetFrameNameById(f->proto, f->alproto, frame->type));
+ jb_set_string(jb, "type", AppLayerParserGetFrameNameById(ipproto, f->alproto, frame->type));
jb_set_uint(jb, "id", frame->id);
jb_set_string(jb, "direction", PKT_IS_TOSERVER(p) ? "toserver" : "toclient");
- if (f->proto == IPPROTO_TCP) {
+ if (ipproto == IPPROTO_TCP) {
DEBUG_VALIDATE_BUG_ON(stream == NULL);
int64_t abs_offset = frame->rel_offset + (int64_t)STREAM_BASE_OFFSET(stream);
jb_set_uint(jb, "stream_offset", (uint64_t)abs_offset);
- if (f->proto == IPPROTO_TCP && frame->len < 0) {
+ if (frame->len < 0) {
uint64_t usable = StreamTcpGetUsable(stream, true);
uint64_t len = usable - abs_offset;
jb_set_uint(jb, "length", len);
return TM_ECODE_OK;
jb_set_string(jb, "app_proto", AppProtoToString(f->alproto));
- FrameJsonLogOneFrame(frame, p->flow, NULL, p, jb);
+ FrameJsonLogOneFrame(IPPROTO_UDP, frame, p->flow, NULL, p, jb);
OutputJsonBuilderBuffer(jb, aft->ctx);
jb_free(jb);
frame->flags |= FRAME_FLAG_LOGGED;
return TM_ECODE_OK;
jb_set_string(jb, "app_proto", AppProtoToString(p->flow->alproto));
- FrameJsonLogOneFrame(frame, p->flow, stream, p, jb);
+ FrameJsonLogOneFrame(IPPROTO_TCP, frame, p->flow, stream, p, jb);
OutputJsonBuilderBuffer(jb, aft->ctx);
jb_free(jb);
frame->flags |= FRAME_FLAG_LOGGED;
#ifndef __OUTPUT_JSON_FRAME_H__
#define __OUTPUT_JSON_FRAME_H__
-void FrameJsonLogOneFrame(const Frame *frame, const Flow *f, const TcpStream *stream,
- const Packet *p, JsonBuilder *jb);
+void FrameJsonLogOneFrame(const uint8_t ipproto, const Frame *frame, const Flow *f,
+ const TcpStream *stream, const Packet *p, JsonBuilder *jb);
void JsonFrameLogRegister(void);
#endif /* __OUTPUT_JSON_FRAME_H__ */