|
|
|
|
@ -798,6 +798,13 @@ static int StreamTcpPacketIsRetransmission(TcpStream *stream, Packet *p)
|
|
|
|
|
if (p->payload_len == 0)
|
|
|
|
|
SCReturnInt(0);
|
|
|
|
|
|
|
|
|
|
/* retransmission of already partially ack'd data */
|
|
|
|
|
if (SEQ_LT(TCP_GET_SEQ(p), stream->last_ack) && SEQ_GT((TCP_GET_SEQ(p) + p->payload_len), stream->last_ack))
|
|
|
|
|
{
|
|
|
|
|
StreamTcpSetEvent(p, STREAM_PKT_RETRANSMISSION);
|
|
|
|
|
SCReturnInt(1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* retransmission of already ack'd data */
|
|
|
|
|
if (SEQ_LEQ((TCP_GET_SEQ(p) + p->payload_len), stream->last_ack)) {
|
|
|
|
|
StreamTcpSetEvent(p, STREAM_PKT_RETRANSMISSION);
|
|
|
|
|
@ -810,8 +817,8 @@ static int StreamTcpPacketIsRetransmission(TcpStream *stream, Packet *p)
|
|
|
|
|
SCReturnInt(2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SCLogDebug("seq %u payload_len %u => %u, last_ack %u", TCP_GET_SEQ(p),
|
|
|
|
|
p->payload_len, (TCP_GET_SEQ(p) + p->payload_len), stream->last_ack);
|
|
|
|
|
SCLogDebug("seq %u payload_len %u => %u, last_ack %u, next_seq %u", TCP_GET_SEQ(p),
|
|
|
|
|
p->payload_len, (TCP_GET_SEQ(p) + p->payload_len), stream->last_ack, stream->next_seq);
|
|
|
|
|
SCReturnInt(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|