TcpSegment *next_seg = seg->next;
next_seq = seg->seq + seg->payload_len;
if (partial == FALSE) {
- SCLogDebug("fully done with segment in app layer reassembly");
+ SCLogDebug("fully done with segment in app layer reassembly (seg %p seq %"PRIu32")",
+ seg, seg->seq);
seg->flags |= SEGMENTTCP_FLAG_APPLAYER_PROCESSED;
+ SCLogDebug("flags now %02x", seg->flags);
} else {
SCLogDebug("not yet fully done with segment in app layer reassembly");
}
/* loop through the segments and fill one or more msgs */
for (; seg != NULL && SEQ_LT(seg->seq, stream->last_ack);)
{
- SCLogDebug("seg %p, SEQ %"PRIu32", LEN %"PRIu16", SUM %"PRIu32,
+ SCLogDebug("seg %p, SEQ %"PRIu32", LEN %"PRIu16", SUM %"PRIu32", flags %02x",
seg, seg->seq, seg->payload_len,
- (uint32_t)(seg->seq + seg->payload_len));
+ (uint32_t)(seg->seq + seg->payload_len), seg->flags);
if ((p->flow->flags & FLOW_NO_APPLAYER_INSPECTION) ||
(stream->flags & STREAMTCP_STREAM_FLAG_APPPROTO_DETECTION_COMPLETED) ||
}
}
+ int partial = FALSE;
+
/* if the segment ends beyond ra_base_seq we need to consider it */
if (SEQ_GT((seg->seq + seg->payload_len), ra_base_seq+1)) {
SCLogDebug("seg->seq %" PRIu32 ", seg->payload_len %" PRIu32 ", "
} else {
payload_len = (stream->last_ack - seg->seq) - payload_offset;
}
+ partial = TRUE;
} else {
payload_len = seg->payload_len - payload_offset;
}
if (SEQ_LT(stream->last_ack, (seg->seq + seg->payload_len))) {
payload_len = stream->last_ack - seg->seq;
+ partial = TRUE;
} else {
payload_len = seg->payload_len;
}
/* done with this segment, return it to the pool */
TcpSegment *next_seg = seg->next;
- seg->flags |= SEGMENTTCP_FLAG_RAW_PROCESSED;
next_seq = seg->seq + seg->payload_len;
+ if (partial == FALSE) {
+ SCLogDebug("fully done with segment in raw reassembly (seg %p seq %"PRIu32")",
+ seg, seg->seq);
+ seg->flags |= SEGMENTTCP_FLAG_RAW_PROCESSED;
+ SCLogDebug("flags now %02x", seg->flags);
+ } else {
+ SCLogDebug("not yet fully done with segment in raw reassembly");
+ }
seg = next_seg;
}