if (stream->flags & STREAMTCP_STREAM_FLAG_DEPTH_REACHED) {
/* increment stream depth counter */
StatsIncr(tv, ra_ctx->counter_tcp_stream_depth);
-
- stream->flags |= STREAMTCP_STREAM_FLAG_NOREASSEMBLY;
- SCLogDebug("ssn %p: reassembly depth reached, "
- "STREAMTCP_STREAM_FLAG_NOREASSEMBLY set", ssn);
}
if (size == 0) {
SCLogDebug("ssn %p: depth reached, not reassembling", ssn);
/* if any of these flags is set we always inspect immediately */
#define STREAMTCP_STREAM_FLAG_FLUSH_FLAGS \
- ( STREAMTCP_STREAM_FLAG_NOREASSEMBLY \
+ ( STREAMTCP_STREAM_FLAG_DEPTH_REACHED \
| STREAMTCP_STREAM_FLAG_TRIGGER_RAW \
| STREAMTCP_STREAM_FLAG_NEW_RAW_DISABLED)
if (stream->flags & STREAMTCP_STREAM_FLAG_FLUSH_FLAGS) {
- if (stream->flags & STREAMTCP_STREAM_FLAG_NOREASSEMBLY) {
- SCLogDebug("reassembling now as STREAMTCP_STREAM_FLAG_NOREASSEMBLY "
- "is set, so not expecting any new packets");
+ if (stream->flags & STREAMTCP_STREAM_FLAG_DEPTH_REACHED) {
+ SCLogDebug("reassembling now as STREAMTCP_STREAM_FLAG_DEPTH_REACHED "
+ "is set, so not expecting any new data segments");
}
if (stream->flags & STREAMTCP_STREAM_FLAG_TRIGGER_RAW) {
SCLogDebug("reassembling now as STREAMTCP_STREAM_FLAG_TRIGGER_RAW is set");
stream = &ssn->server;
}
+ if (stream->flags & STREAMTCP_STREAM_FLAG_NOREASSEMBLY)
+ return false;
+
if (StreamTcpInlineMode() == FALSE) {
if (StreamTcpReassembleRawCheckLimit(ssn, stream, p) == 1) {
return true;
(uint)STREAM_RAW_PROGRESS(stream), (uint)stream->window);
}
+ if (stream->flags & STREAMTCP_STREAM_FLAG_NEW_RAW_DISABLED) {
+ stream->flags |= STREAMTCP_STREAM_FLAG_DISABLE_RAW;
+ SCLogDebug("ssn %p: STREAMTCP_STREAM_FLAG_NEW_RAW_DISABLED set, "
+ "now that detect ran also set STREAMTCP_STREAM_FLAG_DISABLE_RAW", ssn);
+ }
+
SCLogDebug("stream raw progress now %"PRIu64, STREAM_RAW_PROGRESS(stream));
}
stream = &ssn->server;
}
- if (p->payload_len == 0 || (p->flags & PKT_STREAM_ADD) == 0) {
+ if (p->payload_len == 0 || (p->flags & PKT_STREAM_ADD) == 0 ||
+ (stream->flags & STREAMTCP_STREAM_FLAG_NOREASSEMBLY))
+ {
*progress_out = STREAM_RAW_PROGRESS(stream);
return 0;
}
stream = &ssn->server;
}
- if (StreamTcpReassembleRawCheckLimit(ssn, stream, p) == 0) {
+ if ((stream->flags & STREAMTCP_STREAM_FLAG_NOREASSEMBLY) ||
+ StreamTcpReassembleRawCheckLimit(ssn, stream, p) == 0)
+ {
*progress_out = STREAM_RAW_PROGRESS(stream);
return 0;
}
int r = StreamTcpUTAddPayload(&tv, ra_ctx, &ssn, &ssn.client, 101, payload, payload_size);
FAIL_IF(r != 0);
- FAIL_IF(ssn.client.flags & STREAMTCP_STREAM_FLAG_NOREASSEMBLY);
+ FAIL_IF(ssn.client.flags & STREAMTCP_STREAM_FLAG_DEPTH_REACHED);
r = StreamTcpUTAddPayload(&tv, ra_ctx, &ssn, &ssn.client, 201, payload, payload_size);
FAIL_IF(r != 0);
- FAIL_IF(!(ssn.client.flags & STREAMTCP_STREAM_FLAG_NOREASSEMBLY));
+ FAIL_IF(!(ssn.client.flags & STREAMTCP_STREAM_FLAG_DEPTH_REACHED));
StreamTcpUTClearStream(&ssn.server);
StreamTcpUTClearStream(&ssn.client);