diff --git a/src/stream-tcp-util.c b/src/stream-tcp-util.c index 48a6e090b9..c77173322d 100644 --- a/src/stream-tcp-util.c +++ b/src/stream-tcp-util.c @@ -70,6 +70,29 @@ void StreamTcpUTClearStream(TcpStream *s) { StreamTcpReturnStreamSegments(s); } +int StreamTcpUTAddSegmentWithPayload(ThreadVars *tv, TcpReassemblyThreadCtx *ra_ctx, TcpStream *stream, uint32_t seq, uint8_t *payload, uint16_t len) { + TcpSegment *s = StreamTcpGetSegment(tv, ra_ctx, len); + if (s == NULL) { + return -1; + } + + s->seq = seq; + s->payload_len = len; + memcpy(s->payload, payload, len); + + Packet *p = UTHBuildPacketReal(s->payload, s->payload_len, IPPROTO_TCP, "1.1.1.1", "2.2.2.2", 1024, 80); + if (p == NULL) { + return -1; + } + p->tcph->th_seq = htonl(seq); + + if (StreamTcpReassembleInsertSegment(tv, ra_ctx, stream, s, p) < 0) + return -1; + + UTHFreePacket(p); + return 0; +} + int StreamTcpUTAddSegmentWithByte(ThreadVars *tv, TcpReassemblyThreadCtx *ra_ctx, TcpStream *stream, uint32_t seq, uint8_t byte, uint16_t len) { TcpSegment *s = StreamTcpGetSegment(tv, ra_ctx, len); if (s == NULL) { @@ -80,7 +103,7 @@ int StreamTcpUTAddSegmentWithByte(ThreadVars *tv, TcpReassemblyThreadCtx *ra_ctx s->payload_len = len; memset(s->payload, byte, len); - Packet *p = UTHBuildPacketReal(s->payload, 5, IPPROTO_TCP, "1.1.1.1", "2.2.2.2", 1024, 80); + Packet *p = UTHBuildPacketReal(s->payload, s->payload_len, IPPROTO_TCP, "1.1.1.1", "2.2.2.2", 1024, 80); if (p == NULL) { return -1; }