void StreamTcpReassembleIncrMemuse(uint64_t size)
{
(void) SC_ATOMIC_ADD(ra_memuse, size);
+ SCLogDebug("REASSEMBLY %"PRIu64", incr %"PRIu64, StreamTcpReassembleMemuseGlobalCounter(), size);
return;
}
*/
void StreamTcpReassembleDecrMemuse(uint64_t size)
{
+#ifdef UNITTESTS
+ uint64_t presize = SC_ATOMIC_GET(ra_memuse);
+ if (RunmodeIsUnittests()) {
+ BUG_ON(presize > UINT_MAX);
+ }
+#endif
+
(void) SC_ATOMIC_SUB(ra_memuse, size);
+
+#ifdef UNITTESTS
+ if (RunmodeIsUnittests()) {
+ uint64_t postsize = SC_ATOMIC_GET(ra_memuse);
+ BUG_ON(postsize > presize);
+ }
+#endif
+ SCLogDebug("REASSEMBLY %"PRIu64", decr %"PRIu64, StreamTcpReassembleMemuseGlobalCounter(), size);
return;
}
\
TcpStream *stream = &ssn.client;
-#define MISSED_END \
+#define MISSED_END \
+ StreamTcpUTClearSession(&ssn); \
+ StreamTcpUTDeinit(ra_ctx); \
PASS
#define MISSED_STEP(seq, seg, seglen, buf, buflen) \
{
TcpSession ssn;
Packet *p = PacketGetFromAlloc();
- if (unlikely(p == NULL))
- return 0;
+ FAIL_IF(unlikely(p == NULL));
Flow f;
TCPHdr tcph;
- TcpReassemblyThreadCtx *ra_ctx = StreamTcpReassembleInitThreadCtx(NULL);
- TcpStream stream;
- memset(&stream, 0, sizeof (TcpStream));
- stream.os_policy = OS_POLICY_BSD;
+ TcpReassemblyThreadCtx *ra_ctx = NULL;
+ ssn.client.os_policy = OS_POLICY_BSD;
uint8_t packet[1460] = "";
- StreamTcpInitConfig(TRUE);
-
- /* prevent L7 from kicking in */
- StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOSERVER, 4096);
- StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOCLIENT, 4096);
+ StreamTcpUTInit(&ra_ctx);
+ StreamTcpUTSetupSession(&ssn);
PacketQueue pq;
memset(&pq,0,sizeof(PacketQueue));
- memset(&ssn, 0, sizeof (TcpSession));
memset(&f, 0, sizeof (Flow));
memset(&tcph, 0, sizeof (TCPHdr));
ThreadVars tv;
p->tcph->th_ack = htonl(31);
p->payload_len = 10;
- if (StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &stream, p, &pq) == -1) {
- SCFree(p);
- return 0;
- }
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &ssn.client, p, &pq) == -1);
p->tcph->th_seq = htonl(20);
p->tcph->th_ack = htonl(31);
p->payload_len = 10;
- if (StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &stream, p, &pq) == -1) {
- SCFree(p);
- return 0;
- }
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &ssn.client, p, &pq) == -1);
p->tcph->th_seq = htonl(40);
p->tcph->th_ack = htonl(31);
p->payload_len = 10;
- if (StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &stream, p, &pq) == -1) {
- SCFree(p);
- return 0;
- }
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &ssn.client, p, &pq) == -1);
p->tcph->th_seq = htonl(5);
p->tcph->th_ack = htonl(31);
p->payload_len = 30;
- if (StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &stream, p, &pq) == -1) {
- SCFree(p);
- return 0;
- }
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &ssn.client, p, &pq) == -1);
- StreamTcpFreeConfig(TRUE);
+ StreamTcpUTClearSession(&ssn);
+ StreamTcpUTDeinit(ra_ctx);
SCFree(p);
- return 1;
+ PASS;
}
static int StreamTcpReassembleTest34(void)
{
TcpSession ssn;
Packet *p = PacketGetFromAlloc();
- if (unlikely(p == NULL))
- return 0;
+ FAIL_IF(unlikely(p == NULL));
Flow f;
TCPHdr tcph;
- TcpReassemblyThreadCtx *ra_ctx = StreamTcpReassembleInitThreadCtx(NULL);
- TcpStream stream;
- memset(&stream, 0, sizeof (TcpStream));
- stream.os_policy = OS_POLICY_BSD;
+ TcpReassemblyThreadCtx *ra_ctx = NULL;
+ ssn.client.os_policy = OS_POLICY_BSD;
uint8_t packet[1460] = "";
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&ra_ctx);
+ StreamTcpUTSetupSession(&ssn);
/* prevent L7 from kicking in */
StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOSERVER, 4096);
PacketQueue pq;
memset(&pq,0,sizeof(PacketQueue));
- memset(&ssn, 0, sizeof (TcpSession));
memset(&f, 0, sizeof (Flow));
memset(&tcph, 0, sizeof (TCPHdr));
ThreadVars tv;
p->tcph = &tcph;
p->flowflags = FLOW_PKT_TOSERVER;
p->payload = packet;
- SET_ISN(&stream, 857961230);
+ SET_ISN(&ssn.client, 857961230);
p->tcph->th_seq = htonl(857961230);
p->tcph->th_ack = htonl(31);
p->payload_len = 304;
- if (StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &stream, p, &pq) == -1) {
- SCFree(p);
- return 0;
- }
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &ssn.client, p, &pq) == -1);
p->tcph->th_seq = htonl(857961534);
p->tcph->th_ack = htonl(31);
p->payload_len = 1460;
- if (StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &stream, p, &pq) == -1) {
- SCFree(p);
- return 0;
- }
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &ssn.client, p, &pq) == -1);
p->tcph->th_seq = htonl(857963582);
p->tcph->th_ack = htonl(31);
p->payload_len = 1460;
- if (StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &stream, p, &pq) == -1) {
- SCFree(p);
- return 0;
- }
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &ssn.client, p, &pq) == -1);
p->tcph->th_seq = htonl(857960946);
p->tcph->th_ack = htonl(31);
p->payload_len = 1460;
- if (StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &stream, p, &pq) == -1) {
- SCFree(p);
- return 0;
- }
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &ssn.client, p, &pq) == -1);
- StreamTcpFreeConfig(TRUE);
+ StreamTcpUTClearSession(&ssn);
+ StreamTcpUTDeinit(ra_ctx);
SCFree(p);
- return 1;
+ PASS;
}
/** \test Test the bug 76 condition */
TcpSession ssn;
Flow f;
TCPHdr tcph;
- TcpReassemblyThreadCtx *ra_ctx = StreamTcpReassembleInitThreadCtx(NULL);
- TcpStream stream;
+ TcpReassemblyThreadCtx *ra_ctx = NULL;
uint8_t packet[1460] = "";
PacketQueue pq;
ThreadVars tv;
Packet *p = PacketGetFromAlloc();
- if (unlikely(p == NULL))
- return 0;
+ FAIL_IF(unlikely(p == NULL));
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&ra_ctx);
+ StreamTcpUTSetupSession(&ssn);
/* prevent L7 from kicking in */
StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOSERVER, 10);
StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOCLIENT, 10);
- memset(&stream, 0, sizeof (TcpStream));
memset(&pq,0,sizeof(PacketQueue));
- memset(&ssn, 0, sizeof (TcpSession));
memset(&f, 0, sizeof (Flow));
memset(&tcph, 0, sizeof (TCPHdr));
memset(&tv, 0, sizeof (ThreadVars));
p->tcph = &tcph;
p->flowflags = FLOW_PKT_TOSERVER;
p->payload = packet;
- stream.os_policy = OS_POLICY_BSD;
+ ssn.client.os_policy = OS_POLICY_BSD;
p->tcph->th_seq = htonl(3061088537UL);
p->tcph->th_ack = htonl(1729548549UL);
p->payload_len = 1391;
- stream.last_ack = 3061091137UL;
- SET_ISN(&stream, 3061091309UL);
+ ssn.client.last_ack = 3061091137UL;
+ SET_ISN(&ssn.client, 3061091309UL);
/* pre base_seq, so should be rejected */
- if (StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &stream, p, &pq) != -1) {
- SCFree(p);
- return 0;
- }
+ FAIL_IF (StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &ssn.client, p, &pq) != -1);
p->tcph->th_seq = htonl(3061089928UL);
p->tcph->th_ack = htonl(1729548549UL);
p->payload_len = 1391;
- stream.last_ack = 3061091137UL;
+ ssn.client.last_ack = 3061091137UL;
- if (StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &stream, p, &pq) == -1) {
- SCFree(p);
- return 0;
- }
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &ssn.client, p, &pq) == -1);
p->tcph->th_seq = htonl(3061091319UL);
p->tcph->th_ack = htonl(1729548549UL);
p->payload_len = 1391;
- stream.last_ack = 3061091137UL;
+ ssn.client.last_ack = 3061091137UL;
- if (StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &stream, p, &pq) == -1) {
- SCFree(p);
- return 0;
- }
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &ssn.client, p, &pq) == -1);
- StreamTcpFreeConfig(TRUE);
+ StreamTcpUTClearSession(&ssn);
+ StreamTcpUTDeinit(ra_ctx);
SCFree(p);
- return 1;
+ PASS;
}
/**
*/
static int StreamTcpReassembleTest38 (void)
{
- int ret = 0;
Packet *p = PacketGetFromAlloc();
- if (unlikely(p == NULL))
- return 0;
+ FAIL_IF(unlikely(p == NULL));
Flow f;
TCPHdr tcph;
Port sp;
memset(&pq,0,sizeof(PacketQueue));
memset(&f, 0, sizeof (Flow));
memset(&tcph, 0, sizeof (TCPHdr));
- memset(&ssn, 0, sizeof(TcpSession));
ThreadVars tv;
memset(&tv, 0, sizeof (ThreadVars));
+ TcpReassemblyThreadCtx *ra_ctx = NULL;
- StreamTcpInitConfig(TRUE);
- TcpReassemblyThreadCtx *ra_ctx = StreamTcpReassembleInitThreadCtx(NULL);
+ StreamTcpUTInit(&ra_ctx);
+ StreamTcpUTSetupSession(&ssn);
uint8_t httpbuf2[] = "POST / HTTP/1.0\r\nUser-Agent: Victor/1.0\r\n\r\n";
uint32_t httplen2 = sizeof(httpbuf2) - 1; /* minus the \0 */
uint32_t httplen1 = sizeof(httpbuf1) - 1; /* minus the \0 */
FLOW_INITIALIZE(&f);
- if (inet_pton(AF_INET, "1.2.3.4", &in) != 1)
- goto end;
+ FAIL_IF(inet_pton(AF_INET, "1.2.3.4", &in) != 1);
f.src.addr_data32[0] = in.s_addr;
- if (inet_pton(AF_INET, "1.2.3.5", &in) != 1)
- goto end;
+ FAIL_IF(inet_pton(AF_INET, "1.2.3.5", &in) != 1);
f.dst.addr_data32[0] = in.s_addr;
sp = 200;
dp = 220;
TcpStream *s = NULL;
s = &ssn.server;
- FLOWLOCK_WRLOCK(&f);
- if (StreamTcpReassembleHandleSegment(&tv, ra_ctx, &ssn, s, p, &pq) == -1) {
- printf("failed in segments reassembly, while processing toserver packet (1): ");
- goto end;
- }
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx, &ssn, s, p, &pq) == -1);
/* Check if we have stream smsgs in queue */
- if (UtSsnSmsgCnt(&ssn, STREAM_TOSERVER) > 0) {
- printf("there shouldn't be any stream smsgs in the queue (2): ");
- goto end;
- }
+ FAIL_IF(UtSsnSmsgCnt(&ssn, STREAM_TOSERVER) > 0);
p->flowflags = FLOW_PKT_TOCLIENT;
p->payload = httpbuf1;
tcph.th_ack = htonl(55);
s = &ssn.client;
- if (StreamTcpReassembleHandleSegment(&tv, ra_ctx, &ssn, s, p, &pq) == -1) {
- printf("failed in segments reassembly, while processing toserver packet (3): ");
- goto end;
- }
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx, &ssn, s, p, &pq) == -1);
/* Check if we have stream smsgs in queue */
- if (UtSsnSmsgCnt(&ssn, STREAM_TOSERVER) != 1) {
- printf("there should one stream smsg in the queue (6): ");
- goto end;
- }
+ FAIL_IF(UtSsnSmsgCnt(&ssn, STREAM_TOSERVER) != 1);
- ret = 1;
-end:
- StreamTcpReassembleFreeThreadCtx(ra_ctx);
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
+ StreamTcpUTClearSession(&ssn);
+ StreamTcpUTDeinit(ra_ctx);
SCFree(p);
- return ret;
+ PASS;
}
/**
static int StreamTcpReassembleTest39 (void)
{
Packet *p = PacketGetFromAlloc();
- if (unlikely(p == NULL))
- return 0;
+ FAIL_IF(unlikely(p == NULL));
Flow f;
ThreadVars tv;
- StreamTcpThread *stt = NULL;
+ StreamTcpThread stt;
TCPHdr tcph;
PacketQueue pq;
memset(&pq,0,sizeof(PacketQueue));
memset (&f, 0, sizeof(Flow));
memset(&tv, 0, sizeof (ThreadVars));
- StreamTcpThreadInit(&tv, NULL, (void **)&stt);
+ memset(&stt, 0, sizeof (stt));
memset(&tcph, 0, sizeof (TCPHdr));
+ TcpSession *ssn = NULL;
FLOW_INITIALIZE(&f);
f.flags = FLOW_IPV4;
FLOWLOCK_WRLOCK(&f);
int ret = 0;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
/* handshake */
tcph.th_win = htons(5480);
p->flowflags = FLOW_PKT_TOSERVER;
p->payload_len = 0;
p->payload = NULL;
- if (StreamTcpPacket(&tv, p, stt, &pq) == -1)
+ if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
- TcpSession *ssn = (TcpSession *)f.protoctx;
+ ssn = (TcpSession *)f.protoctx;
if (StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->server) ||
StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->client) ||
p->flowflags = FLOW_PKT_TOCLIENT;
p->payload_len = 0;
p->payload = NULL;
- if (StreamTcpPacket(&tv, p, stt, &pq) == -1)
+ if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
if (StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->server) ||
StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->client) ||
p->flowflags = FLOW_PKT_TOSERVER;
p->payload_len = 0;
p->payload = NULL;
- if (StreamTcpPacket(&tv, p, stt, &pq) == -1)
+ if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
if (StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->server) ||
StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->client) ||
p->flowflags = FLOW_PKT_TOSERVER;
p->payload_len = sizeof(request1);
p->payload = request1;
- if (StreamTcpPacket(&tv, p, stt, &pq) == -1)
+ if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
if (StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->server) ||
StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->client) ||
p->flowflags = FLOW_PKT_TOCLIENT;
p->payload_len = 0;
p->payload = NULL;
- if (StreamTcpPacket(&tv, p, stt, &pq) == -1)
+ if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
if (StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->server) ||
StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->client) ||
p->flowflags = FLOW_PKT_TOSERVER;
p->payload_len = sizeof(request2);
p->payload = request2;
- if (StreamTcpPacket(&tv, p, stt, &pq) == -1)
+ if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
if (StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->server) ||
StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->client) ||
p->payload_len = sizeof(response);
p->payload = response;
- if (StreamTcpPacket(&tv, p, stt, &pq) == -1)
+ if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
if (StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->server) ||
!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->client) ||
p->flowflags = FLOW_PKT_TOSERVER;
p->payload_len = 0;
p->payload = NULL;
- if (StreamTcpPacket(&tv, p, stt, &pq) == -1)
+ if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
if (!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->server) ||
!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->client) ||
p->flowflags = FLOW_PKT_TOCLIENT;
p->payload_len = 0;
p->payload = NULL;
- if (StreamTcpPacket(&tv, p, stt, &pq) == -1)
+ if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
if (!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->server) ||
!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->client) ||
p->flowflags = FLOW_PKT_TOSERVER;
p->payload_len = 0;
p->payload = NULL;
- if (StreamTcpPacket(&tv, p, stt, &pq) == -1)
+ if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
if (!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->server) ||
!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->client) ||
p->flowflags = FLOW_PKT_TOCLIENT;
p->payload_len = 0;
p->payload = NULL;
- if (StreamTcpPacket(&tv, p, stt, &pq) == -1)
+ if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
if (!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->server) ||
!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->client) ||
p->flowflags = FLOW_PKT_TOSERVER;
p->payload_len = sizeof(request1);
p->payload = request1;
- if (StreamTcpPacket(&tv, p, stt, &pq) == -1)
+ if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
if (!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->server) ||
!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->client) ||
p->flowflags = FLOW_PKT_TOCLIENT;
p->payload_len = 0;
p->payload = NULL;
- if (StreamTcpPacket(&tv, p, stt, &pq) == -1)
+ if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
if (!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->server) ||
!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->client) ||
p->flowflags = FLOW_PKT_TOSERVER;
p->payload_len = sizeof(request2);
p->payload = request2;
- if (StreamTcpPacket(&tv, p, stt, &pq) == -1)
+ if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
if (!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->server) ||
!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->client) ||
p->flowflags = FLOW_PKT_TOCLIENT;
p->payload_len = 0;
p->payload = NULL;
- if (StreamTcpPacket(&tv, p, stt, &pq) == -1)
+ if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
if (!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->server) ||
!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->client) ||
p->flowflags = FLOW_PKT_TOCLIENT;
p->payload_len = 0;
p->payload = NULL;
- if (StreamTcpPacket(&tv, p, stt, &pq) == -1)
+ if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
SCLogDebug("StreamTcpIsSetStreamFlagAppProtoDetectionCompleted %s, "
p->flowflags = FLOW_PKT_TOSERVER;
p->payload_len = 0;
p->payload = NULL;
- if (StreamTcpPacket(&tv, p, stt, &pq) == -1)
+ if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
if (//!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->server) ||
//!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->client) ||
ret = 1;
end:
- StreamTcpThreadDeinit(&tv, (void *)stt);
- StreamTcpSessionClear(p->flow->protoctx);
- StreamTcpFreeConfig(TRUE);
+ StreamTcpSessionClear(ssn);
+ StreamTcpUTDeinit(stt.ra_ctx);
SCFree(p);
FLOWLOCK_UNLOCK(&f);
return ret;
PacketQueue pq;
memset(&pq,0,sizeof(PacketQueue));
memset(&tcph, 0, sizeof (TCPHdr));
- memset(&ssn, 0, sizeof(TcpSession));
ThreadVars tv;
memset(&tv, 0, sizeof (ThreadVars));
StreamTcpInitConfig(TRUE);
+ StreamTcpUTSetupSession(&ssn);
StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOSERVER, 130);
TcpReassemblyThreadCtx *ra_ctx = StreamTcpReassembleInitThreadCtx(NULL);
ret = 1;
end:
+ StreamTcpUTClearSession(&ssn);
StreamTcpReassembleFreeThreadCtx(ra_ctx);
StreamTcpFreeConfig(TRUE);
SCFree(p);
PacketQueue pq;
memset(&pq,0,sizeof(PacketQueue));
memset(&tcph, 0, sizeof (TCPHdr));
- memset(&ssn, 0, sizeof(TcpSession));
ThreadVars tv;
memset(&tv, 0, sizeof (ThreadVars));
StreamTcpInitConfig(TRUE);
+ StreamTcpUTSetupSession(&ssn);
TcpReassemblyThreadCtx *ra_ctx = StreamTcpReassembleInitThreadCtx(NULL);
uint8_t httpbuf1[] = "/ HTTP/1.0\r\nUser-Agent: Victor/1.0";
ret = 1;
end:
+ StreamTcpUTClearSession(&ssn);
StreamTcpReassembleFreeThreadCtx(ra_ctx);
StreamTcpFreeConfig(TRUE);
SCFree(p);
static int StreamTcpReassembleTest47 (void)
{
- int ret = 0;
Packet *p = PacketGetFromAlloc();
- if (unlikely(p == NULL))
- return 0;
+ FAIL_IF(unlikely(p == NULL));
Flow *f = NULL;
TCPHdr tcph;
TcpSession ssn;
PacketQueue pq;
memset(&pq,0,sizeof(PacketQueue));
memset(&tcph, 0, sizeof (TCPHdr));
- memset(&ssn, 0, sizeof(TcpSession));
memset(&tv, 0, sizeof (ThreadVars));
/* prevent L7 from kicking in */
StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOCLIENT, 0);
StreamTcpInitConfig(TRUE);
+ StreamTcpUTSetupSession(&ssn);
TcpReassemblyThreadCtx *ra_ctx = StreamTcpReassembleInitThreadCtx(NULL);
uint8_t httpbuf1[] = "GET /EVILSUFF HTTP/1.1\r\n\r\n";
ssn.client.last_ack = 21;
f = UTHBuildFlow(AF_INET, "1.2.3.4", "1.2.3.5", 200, 220);
- if (f == NULL)
- goto end;
+ FAIL_IF(f == NULL);
f->protoctx = &ssn;
f->proto = IPPROTO_TCP;
p->flow = f;
TcpStream *s = NULL;
uint8_t cnt = 0;
- FLOWLOCK_WRLOCK(f);
for (cnt=0; cnt < httplen1; cnt++) {
tcph.th_seq = htonl(ssn.client.isn + 1 + cnt);
tcph.th_ack = htonl(572799782UL);
p->payload_len = 1;
s = &ssn.client;
- if (StreamTcpReassembleHandleSegment(&tv, ra_ctx, &ssn, s, p, &pq) == -1) {
- printf("failed in segments reassembly, while processing toserver "
- "packet\n");
- goto end;
- }
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx, &ssn, s, p, &pq) == -1);
p->flowflags = FLOW_PKT_TOCLIENT;
p->payload = NULL;
p->tcph = &tcph;
s = &ssn.server;
- if (StreamTcpReassembleHandleSegment(&tv, ra_ctx, &ssn, s, p, &pq) == -1) {
- printf("failed in segments reassembly, while processing toserver "
- "packet\n");
- goto end;
- }
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx, &ssn, s, p, &pq) == -1);
}
- if (f->alproto != ALPROTO_HTTP) {
- printf("App layer protocol (HTTP) should have been detected\n");
- goto end;
- }
+ FAIL_IF(f->alproto != ALPROTO_HTTP);
- ret = 1;
-end:
+ StreamTcpUTClearSession(&ssn);
StreamTcpReassembleFreeThreadCtx(ra_ctx);
StreamTcpFreeConfig(TRUE);
SCFree(p);
- FLOWLOCK_UNLOCK(f);
UTHFreeFlow(f);
- return ret;
+ PASS;
}
/** \test 3 in order segments in inline reassembly */
-/* Copyright (C) 2007-2013 Open Information Security Foundation
+/* Copyright (C) 2007-2016 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
static uint64_t ssn_pool_cnt = 0; /** counts ssns, protected by ssn_pool_mutex */
#endif
+uint64_t StreamTcpMemuseCounter(void);
uint64_t StreamTcpReassembleMemuseGlobalCounter(void);
SC_ATOMIC_DECLARE(uint64_t, st_memuse);
void StreamTcpIncrMemuse(uint64_t size)
{
(void) SC_ATOMIC_ADD(st_memuse, size);
+ SCLogDebug("STREAM %"PRIu64", incr %"PRIu64, StreamTcpMemuseCounter(), size);
return;
}
void StreamTcpDecrMemuse(uint64_t size)
{
+#ifdef DEBUG_VALIDATION
+ uint64_t presize = SC_ATOMIC_GET(st_memuse);
+ if (RunmodeIsUnittests()) {
+ BUG_ON(presize > UINT_MAX);
+ }
+#endif
+
(void) SC_ATOMIC_SUB(st_memuse, size);
+
+#ifdef DEBUG_VALIDATION
+ if (RunmodeIsUnittests()) {
+ uint64_t postsize = SC_ATOMIC_GET(st_memuse);
+ BUG_ON(postsize > presize);
+ }
+#endif
+ SCLogDebug("STREAM %"PRIu64", decr %"PRIu64, StreamTcpMemuseCounter(), size);
return;
}
static int StreamTcpTest01 (void)
{
+ StreamTcpThread stt;
Packet *p = SCMalloc(SIZE_OF_PACKET);
if (unlikely(p == NULL))
return 0;
p->flow = &f;
int ret = 0;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
TcpSession *ssn = StreamTcpNewSession(p, 0);
if (ssn == NULL) {
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
static int StreamTcpTest02 (void)
{
Packet *p = SCMalloc(SIZE_OF_PACKET);
- if (unlikely(p == NULL))
- return 0;
- int ret = 0;
+ FAIL_IF(unlikely(p == NULL));
Flow f;
ThreadVars tv;
StreamTcpThread stt;
uint8_t payload[4];
- TcpReassemblyThreadCtx *ra_ctx = NULL;;
TCPHdr tcph;
PacketQueue pq;
memset(&pq,0,sizeof(PacketQueue));
memset(&stt, 0, sizeof (StreamTcpThread));
memset(&tcph, 0, sizeof (TCPHdr));
- ra_ctx = StreamTcpReassembleInitThreadCtx(NULL);
- if (ra_ctx == NULL) {
- goto end;
- }
FLOW_INITIALIZE(&f);
p->flow = &f;
tcph.th_win = htons(5480);
tcph.th_flags = TH_SYN;
p->tcph = &tcph;
p->flowflags = FLOW_PKT_TOSERVER;
- stt.ra_ctx = ra_ctx;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
- FLOWLOCK_WRLOCK(&f);
- if (StreamTcpPacket(&tv, p, &stt, &pq) == -1) {
- goto end;
- }
+ FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
p->tcph->th_ack = htonl(1);
p->tcph->th_flags = TH_SYN | TH_ACK;
p->flowflags = FLOW_PKT_TOCLIENT;
- if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
- goto end;
+ FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
p->tcph->th_ack = htonl(1);
p->tcph->th_seq = htonl(1);
p->tcph->th_flags = TH_ACK;
p->flowflags = FLOW_PKT_TOSERVER;
- if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
- goto end;
+ FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
p->tcph->th_ack = htonl(1);
p->tcph->th_seq = htonl(2);
p->payload = payload;
p->payload_len = 3;
- if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
- goto end;
+ FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
p->flowflags = FLOW_PKT_TOCLIENT;
- if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
- goto end;
+ FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
p->tcph->th_ack = htonl(1);
p->tcph->th_seq = htonl(6);
p->payload = payload;
p->payload_len = 3;
- if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
- goto end;
+ FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
p->flowflags = FLOW_PKT_TOCLIENT;
- if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
- goto end;
+ FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
StreamTcpSessionClear(p->flow->protoctx);
+ //StreamTcpUTClearSession(p->flow->protoctx);
- ret = 1;
-end:
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
- return ret;
+ StreamTcpUTDeinit(stt.ra_ctx);
+ PASS;
}
/**
FLOW_INITIALIZE(&f);
p->flow = &f;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
tcph.th_win = htons(5480);
tcph.th_seq = htonl(10);
p->tcph = &tcph;
int ret = 0;
- FLOWLOCK_WRLOCK(&f);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
FLOW_INITIALIZE(&f);
p->flow = &f;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
tcph.th_win = htons(5480);
tcph.th_seq = htonl(10);
int ret = 0;
- FLOWLOCK_WRLOCK(&f);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
p->flow = &f;
int ret = 0;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
/* prevent L7 from kicking in */
StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOSERVER, 4096);
p->payload = payload;
p->payload_len = 3;
- FLOWLOCK_WRLOCK(&f);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
p->flow = &f;
int ret = 0;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
tcph.th_flags = TH_FIN;
p->tcph = &tcph;
- FLOWLOCK_WRLOCK(&f);
/* StreamTcpPacket returns -1 on unsolicited FIN */
if (StreamTcpPacket(&tv, p, &stt, &pq) != -1) {
printf("StreamTcpPacket failed: ");
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
/**
* \test Test the working on PAWS. The packet will be dropped by stream, as
* its timestamp is old, although the segment is in the window.
- *
- * \retval On success it returns 1 and on failure 0.
*/
static int StreamTcpTest07 (void)
FLOW_INITIALIZE(&f);
p->flow = &f;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
stream_config.midstream = TRUE;
- /* prevent L7 from kicking in */
- StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOSERVER, 4096);
- StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOCLIENT, 4096);
-
tcph.th_win = htons(5480);
tcph.th_seq = htonl(10);
tcph.th_ack = htonl(20);
p->payload = payload;
p->payload_len = 1;
- FLOWLOCK_WRLOCK(&f);
FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
p->tcph->th_seq = htonl(11);
FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) != -1);
- FAIL_IF (((TcpSession *) (p->flow->protoctx))->client.next_seq != 11);
+ FAIL_IF(((TcpSession *) (p->flow->protoctx))->client.next_seq != 11);
StreamTcpSessionClear(p->flow->protoctx);
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
PASS;
}
/**
* \test Test the working on PAWS. The packet will be accpeted by engine as
* the timestamp is valid and it is in window.
- *
- * \retval On success it returns 1 and on failure 0.
*/
static int StreamTcpTest08 (void)
FLOW_INITIALIZE(&f);
p->flow = &f;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
stream_config.midstream = TRUE;
- /* prevent L7 from kicking in */
- StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOSERVER, 4096);
- StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOCLIENT, 4096);
-
tcph.th_win = htons(5480);
tcph.th_seq = htonl(10);
tcph.th_ack = htonl(20);
p->payload = payload;
p->payload_len = 1;
- FLOWLOCK_WRLOCK(&f);
FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
p->tcph->th_seq = htonl(11);
StreamTcpSessionClear(p->flow->protoctx);
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
PASS;
}
/**
* \test Test the working of No stream reassembly flag. The stream will not
* reassemble the segment if the flag is set.
- *
- * \retval On success it returns 1 and on failure 0.
*/
static int StreamTcpTest09 (void)
{
-
Packet *p = SCMalloc(SIZE_OF_PACKET);
- if (unlikely(p == NULL))
- return 0;
+ FAIL_IF(unlikely(p == NULL));
Flow f;
ThreadVars tv;
StreamTcpThread stt;
FLOW_INITIALIZE(&f);
p->flow = &f;
- int ret = 0;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
stream_config.midstream = TRUE;
- //prevent L7 from kicking in
- StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOSERVER, 4096);
- StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOCLIENT, 4096);
-
tcph.th_win = htons(5480);
tcph.th_seq = htonl(10);
tcph.th_ack = htonl(20);
p->payload = payload;
p->payload_len = 1;
- FLOWLOCK_WRLOCK(&f);
- if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
- goto end;
+ FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
p->tcph->th_seq = htonl(12);
p->tcph->th_ack = htonl(23);
p->tcph->th_flags = TH_ACK|TH_PUSH;
p->flowflags = FLOW_PKT_TOSERVER;
+ FAIL_IF(p->flow->protoctx == NULL);
+
StreamTcpSetSessionNoReassemblyFlag(((TcpSession *)(p->flow->protoctx)), 0);
- if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
- goto end;
+ FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
p->tcph->th_seq = htonl(11);
p->tcph->th_ack = htonl(23);
p->tcph->th_flags = TH_ACK|TH_PUSH;
p->flowflags = FLOW_PKT_TOSERVER;
- if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
- goto end;
+ FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
- if (((TcpSession *) (p->flow->protoctx))->client.seg_list->next == NULL)
- ret = 1;
+ FAIL_IF(((TcpSession *) (p->flow->protoctx))->client.seg_list->next != NULL);
StreamTcpSessionClear(p->flow->protoctx);
-end:
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
- return ret;
+ StreamTcpUTDeinit(stt.ra_ctx);
+ PASS;
}
/**
* \test Test the setting up a TCP session when we are seeing asynchronous
* stream, while we see all the packets in that stream from start.
- *
- * \retval On success it returns 1 and on failure 0.
*/
static int StreamTcpTest10 (void)
{
Packet *p = SCMalloc(SIZE_OF_PACKET);
- if (unlikely(p == NULL))
- return 0;
+ FAIL_IF(unlikely(p == NULL));
Flow f;
ThreadVars tv;
StreamTcpThread stt;
FLOW_INITIALIZE(&f);
p->flow = &f;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
+ stream_config.async_oneside = TRUE;
tcph.th_win = htons(5480);
tcph.th_seq = htonl(10);
tcph.th_ack = htonl(11);
tcph.th_flags = TH_SYN;
p->tcph = &tcph;
- int ret = 0;
- FLOWLOCK_WRLOCK(&f);
- if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
- goto end;
+ FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
p->tcph->th_seq = htonl(11);
p->tcph->th_ack = htonl(11);
p->tcph->th_flags = TH_ACK;
p->flowflags = FLOW_PKT_TOSERVER;
- if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
- goto end;
+ FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
p->tcph->th_seq = htonl(11);
p->tcph->th_ack = htonl(11);
p->payload = payload;
p->payload_len = 3;
- if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
- goto end;
+ FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
p->tcph->th_seq = htonl(6);
p->tcph->th_ack = htonl(11);
p->payload = payload;
p->payload_len = 3;
- if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
- goto end;
+ FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
- if (stream_config.async_oneside != TRUE) {
- ret = 1;
- goto end;
- }
- if (((TcpSession *)(p->flow->protoctx))->state != TCP_ESTABLISHED) {
- printf("failed in setting state\n");
- goto end;
- }
+ FAIL_IF(((TcpSession *)(p->flow->protoctx))->state != TCP_ESTABLISHED);
- if (! (((TcpSession *)(p->flow->protoctx))->flags & STREAMTCP_FLAG_ASYNC)) {
- printf("failed in setting asynchronous session\n");
- goto end;
- }
+ FAIL_IF(! (((TcpSession *)(p->flow->protoctx))->flags & STREAMTCP_FLAG_ASYNC));
- if (((TcpSession *)(p->flow->protoctx))->client.last_ack != 6 &&
- ((TcpSession *)(p->flow->protoctx))->server.next_seq != 11) {
- printf("failed in seq %"PRIu32" match\n",
- ((TcpSession *)(p->flow->protoctx))->client.last_ack);
- goto end;
- }
+ FAIL_IF(((TcpSession *)(p->flow->protoctx))->client.last_ack != 6 &&
+ ((TcpSession *)(p->flow->protoctx))->server.next_seq != 11);
StreamTcpSessionClear(p->flow->protoctx);
- ret = 1;
-end:
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
- return ret;
+ StreamTcpUTDeinit(stt.ra_ctx);
+ PASS;
}
/**
* \test Test the setting up a TCP session when we are seeing asynchronous
* stream, while we missed the SYN packet of that stream.
- *
- * \retval On success it returns 1 and on failure 0.
*/
static int StreamTcpTest11 (void)
{
Packet *p = SCMalloc(SIZE_OF_PACKET);
- if (unlikely(p == NULL))
- return 0;
+ FAIL_IF(unlikely(p == NULL));
Flow f;
ThreadVars tv;
StreamTcpThread stt;
FLOW_INITIALIZE(&f);
p->flow = &f;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
+ stream_config.async_oneside = TRUE;
tcph.th_win = htons(5480);
tcph.th_seq = htonl(10);
tcph.th_ack = htonl(1);
tcph.th_flags = TH_SYN|TH_ACK;
p->tcph = &tcph;
- int ret = 0;
- FLOWLOCK_WRLOCK(&f);
- if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
- goto end;
+ FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
p->tcph->th_seq = htonl(11);
p->tcph->th_ack = htonl(1);
p->tcph->th_flags = TH_ACK;
p->flowflags = FLOW_PKT_TOSERVER;
- if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
- goto end;
+ FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
p->tcph->th_seq = htonl(11);
p->tcph->th_ack = htonl(1);
p->payload = payload;
p->payload_len = 3;
- if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
- goto end;
+ FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
p->tcph->th_seq = htonl(2);
p->tcph->th_ack = htonl(1);
p->payload = payload;
p->payload_len = 3;
- if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
- goto end;
+ FAIL_IF(StreamTcpPacket(&tv, p, &stt, &pq) == -1);
- if (stream_config.async_oneside != TRUE) {
- ret = 1;
- goto end;
- }
+ FAIL_IF(! (((TcpSession *)(p->flow->protoctx))->flags & STREAMTCP_FLAG_ASYNC));
- if (! (((TcpSession *)(p->flow->protoctx))->flags & STREAMTCP_FLAG_ASYNC)) {
- printf("failed in setting asynchronous session\n");
- goto end;
- }
+ FAIL_IF(((TcpSession *)(p->flow->protoctx))->state != TCP_ESTABLISHED);
- if (((TcpSession *)(p->flow->protoctx))->state != TCP_ESTABLISHED) {
- printf("failed in setting state\n");
- goto end;
- }
-
- if (((TcpSession *)(p->flow->protoctx))->server.last_ack != 2 &&
- ((TcpSession *)(p->flow->protoctx))->client.next_seq != 1) {
- printf("failed in seq %"PRIu32" match\n",
- ((TcpSession *)(p->flow->protoctx))->server.last_ack);
- goto end;
- }
+ FAIL_IF(((TcpSession *)(p->flow->protoctx))->server.last_ack != 2 &&
+ ((TcpSession *)(p->flow->protoctx))->client.next_seq != 1);
StreamTcpSessionClear(p->flow->protoctx);
-
- ret = 1;
-end:
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
- return ret;
+ StreamTcpUTDeinit(stt.ra_ctx);
+ PASS;
}
/**
FLOW_INITIALIZE(&f);
p->flow = &f;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
tcph.th_win = htons(5480);
tcph.th_seq = htonl(10);
p->tcph = &tcph;
int ret = 0;
- FLOWLOCK_WRLOCK(&f);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
FLOW_INITIALIZE(&f);
p->flow = &f;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
tcph.th_win = htons(5480);
tcph.th_seq = htonl(10);
p->tcph = &tcph;
int ret = 0;
- FLOWLOCK_WRLOCK(&f);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
p->flow = &f;
int ret = 0;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
/* Load the config string in to parser */
ConfCreateContextBackup();
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
ConfDeInit();
ConfRestoreContextBackup();
FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
FLOW_INITIALIZE(&f);
p->flow = &f;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
tcph.th_win = htons(5480);
tcph.th_seq = htonl(10);
tcph.th_flags = TH_SYN;
p->tcph = &tcph;
- FLOWLOCK_WRLOCK(&f);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
ret = 1;
end:
StreamTcpSessionClear(p->flow->protoctx);
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
FLOW_INITIALIZE(&f);
p->flow = &f;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
tcph.th_win = htons(5480);
tcph.th_seq = htonl(10);
tcph.th_flags = TH_SYN;
p->tcph = &tcph;
- FLOWLOCK_WRLOCK(&f);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
ret = 1;
end:
StreamTcpSessionClear(p->flow->protoctx);
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
{
int ret = 0;
Packet *p = SCMalloc(SIZE_OF_PACKET);
- if (unlikely(p == NULL))
- return 0;
+ FAIL_IF(unlikely(p == NULL));
Flow f;
ThreadVars tv;
StreamTcpThread stt;
FLOW_INITIALIZE(&f);
p->flow = &f;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
tcph.th_win = htons(5480);
tcph.th_seq = htonl(10);
tcph.th_flags = TH_SYN;
p->tcph = &tcph;
- FLOWLOCK_WRLOCK(&f);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
ret = 1;
end:
StreamTcpSessionClear(p->flow->protoctx);
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
p->flow = &f;
int ret = 0;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
/* Load the config string in to parser */
ConfCreateContextBackup();
p->payload = payload;
p->payload_len = 3;
- FLOWLOCK_WRLOCK(&f);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
ConfDeInit();
ConfRestoreContextBackup();
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
p->flow = &f;
int ret = 0;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
/* Load the config string in to parser */
ConfCreateContextBackup();
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
ConfDeInit();
ConfRestoreContextBackup();
FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
p->flow = &f;
int ret = 0;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
/* Load the config string in to parser */
ConfCreateContextBackup();
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
ConfDeInit();
ConfRestoreContextBackup();
FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
confuguration defined in 'dummy_conf_string1' */
static int StreamTcpTest18 (void)
{
-
+ StreamTcpThread stt;
struct in_addr addr;
char os_policy_name[10] = "windows";
char *ip_addr;
memset(p, 0, SIZE_OF_PACKET);
memset(&ipv4h, 0, sizeof(ipv4h));
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
SCHInfoCleanResources();
/* Load the config string in to parser */
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
ConfDeInit();
ConfRestoreContextBackup();
SCFree(p);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
/** \test Test the various OS policies based on different IP addresses from
confuguration defined in 'dummy_conf_string1' */
static int StreamTcpTest19 (void)
{
-
+ StreamTcpThread stt;
struct in_addr addr;
char os_policy_name[10] = "windows";
char *ip_addr;
memset(p, 0, SIZE_OF_PACKET);
memset(&ipv4h, 0, sizeof(ipv4h));
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
SCHInfoCleanResources();
/* Load the config string in to parser */
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
ConfDeInit();
ConfRestoreContextBackup();
SCFree(p);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
/** \test Test the various OS policies based on different IP addresses from
confuguration defined in 'dummy_conf_string1' */
static int StreamTcpTest20 (void)
{
-
+ StreamTcpThread stt;
struct in_addr addr;
char os_policy_name[10] = "linux";
char *ip_addr;
memset(p, 0, SIZE_OF_PACKET);
memset(&ipv4h, 0, sizeof(ipv4h));
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
SCHInfoCleanResources();
/* Load the config string in to parser */
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
ConfDeInit();
ConfRestoreContextBackup();
SCFree(p);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
/** \test Test the various OS policies based on different IP addresses from
confuguration defined in 'dummy_conf_string1' */
static int StreamTcpTest21 (void)
{
-
+ StreamTcpThread stt;
struct in_addr addr;
char os_policy_name[10] = "linux";
char *ip_addr;
memset(p, 0, SIZE_OF_PACKET);
memset(&ipv4h, 0, sizeof(ipv4h));
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
SCHInfoCleanResources();
/* Load the config string in to parser */
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
ConfDeInit();
ConfRestoreContextBackup();
SCFree(p);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
/** \test Test the various OS policies based on different IP addresses from
confuguration defined in 'dummy_conf_string1' */
static int StreamTcpTest22 (void)
{
-
+ StreamTcpThread stt;
struct in_addr addr;
char os_policy_name[10] = "windows";
char *ip_addr;
memset(p, 0, SIZE_OF_PACKET);
memset(&ipv4h, 0, sizeof(ipv4h));
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
SCHInfoCleanResources();
/* Load the config string in to parser */
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
ConfDeInit();
ConfRestoreContextBackup();
SCFree(p);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
/** \test Test the stream mem leaks conditions. */
static int StreamTcpTest23(void)
{
+ StreamTcpThread stt;
TcpSession ssn;
Flow f;
TCPHdr tcph;
- TcpReassemblyThreadCtx *ra_ctx = StreamTcpReassembleInitThreadCtx(NULL);
uint8_t packet[1460] = "";
ThreadVars tv;
PacketQueue pq;
FAIL_IF(p == NULL);
memset(&pq,0,sizeof(PacketQueue));
- memset(&ssn, 0, sizeof (TcpSession));
memset(p, 0, SIZE_OF_PACKET);
memset(&f, 0, sizeof (Flow));
memset(&tcph, 0, sizeof (TCPHdr));
memset(&tv, 0, sizeof (ThreadVars));
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
+ StreamTcpUTSetupSession(&ssn);
/* prevent L7 from kicking in */
StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOSERVER, 4096);
p->tcph->th_ack = htonl(3373419609UL);
p->payload_len = 2;
- FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &ssn.client, p, &pq) == -1);
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, stt.ra_ctx, &ssn, &ssn.client, p, &pq) == -1);
p->tcph->th_seq = htonl(3184324455UL);
p->tcph->th_ack = htonl(3373419621UL);
p->payload_len = 2;
- FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &ssn.client, p, &pq) == -1);
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, stt.ra_ctx, &ssn, &ssn.client, p, &pq) == -1);
p->tcph->th_seq = htonl(3184324453UL);
p->tcph->th_ack = htonl(3373419621UL);
p->payload_len = 6;
- FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &ssn.client, p, &pq) == -1);
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, stt.ra_ctx, &ssn, &ssn.client, p, &pq) == -1);
FAIL_IF(ssn.client.seg_list_tail == NULL);
FAIL_IF(TCP_SEG_LEN(ssn.client.seg_list_tail) != 2);
- StreamTcpReturnStreamSegments(&ssn.client);
- StreamTcpFreeConfig(TRUE);
- FAIL_IF(SC_ATOMIC_GET(st_memuse) > 0);
+ StreamTcpUTClearSession(&ssn);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
+ FAIL_IF(SC_ATOMIC_GET(st_memuse) > 0);
PASS;
}
/** \test Test the stream mem leaks conditions. */
static int StreamTcpTest24(void)
{
+ StreamTcpThread stt;
TcpSession ssn;
Packet *p = SCMalloc(SIZE_OF_PACKET);
FAIL_IF (p == NULL);
Flow f;
TCPHdr tcph;
- TcpReassemblyThreadCtx *ra_ctx = StreamTcpReassembleInitThreadCtx(NULL);
uint8_t packet[1460] = "";
ThreadVars tv;
PacketQueue pq;
memset(&pq,0,sizeof(PacketQueue));
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
+ StreamTcpUTSetupSession(&ssn);
- /* prevent L7 from kicking in */
- StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOSERVER, 4096);
- StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOCLIENT, 4096);
-
- memset(&ssn, 0, sizeof (TcpSession));
memset(p, 0, SIZE_OF_PACKET);
memset(&f, 0, sizeof (Flow));
memset(&tv, 0, sizeof (ThreadVars));
p->tcph->th_ack = htonl(3373419621UL);
p->payload_len = 4;
- FAIL_IF (StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &ssn.client, p, &pq) == -1);
+ FAIL_IF (StreamTcpReassembleHandleSegment(&tv, stt.ra_ctx, &ssn, &ssn.client, p, &pq) == -1);
p->tcph->th_seq = htonl(3184324459UL);
p->tcph->th_ack = htonl(3373419633UL);
p->payload_len = 2;
- FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &ssn.client, p, &pq) == -1);
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, stt.ra_ctx, &ssn, &ssn.client, p, &pq) == -1);
p->tcph->th_seq = htonl(3184324459UL);
p->tcph->th_ack = htonl(3373419657UL);
p->payload_len = 4;
- FAIL_IF(StreamTcpReassembleHandleSegment(&tv, ra_ctx,&ssn, &ssn.client, p, &pq) == -1);
+ FAIL_IF(StreamTcpReassembleHandleSegment(&tv, stt.ra_ctx, &ssn, &ssn.client, p, &pq) == -1);
FAIL_IF(ssn.client.seg_list_tail == NULL);
FAIL_IF(TCP_SEG_LEN(ssn.client.seg_list_tail) != 4);
- StreamTcpReturnStreamSegments(&ssn.client);
- StreamTcpFreeConfig(TRUE);
- FAIL_IF(SC_ATOMIC_GET(st_memuse) > 0);
+ StreamTcpUTClearSession(&ssn);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
+ FAIL_IF(SC_ATOMIC_GET(st_memuse) > 0);
PASS;
}
StreamTcpThread stt;
uint8_t payload[4];
TCPHdr tcph;
- TcpReassemblyThreadCtx *ra_ctx = StreamTcpReassembleInitThreadCtx(NULL);
int ret = 0;
PacketQueue pq;
memset(&pq,0,sizeof(PacketQueue));
memset(&tcph, 0, sizeof (TCPHdr));
FLOW_INITIALIZE(&f);
- stt.ra_ctx = ra_ctx;
p->flow = &f;
tcph.th_win = htons(5480);
tcph.th_flags = TH_SYN | TH_CWR;
StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOSERVER, 4096);
StreamMsgQueueSetMinChunkLen(FLOW_PKT_TOCLIENT, 4096);
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
- FLOWLOCK_WRLOCK(&f);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
StreamTcpThread stt;
uint8_t payload[4];
TCPHdr tcph;
- TcpReassemblyThreadCtx *ra_ctx = StreamTcpReassembleInitThreadCtx(NULL);
int ret = 0;
PacketQueue pq;
memset(&pq,0,sizeof(PacketQueue));
memset(&tcph, 0, sizeof (TCPHdr));
FLOW_INITIALIZE(&f);
- stt.ra_ctx = ra_ctx;
p->flow = &f;
tcph.th_win = htons(5480);
tcph.th_flags = TH_SYN | TH_ECN;
p->tcph = &tcph;
p->flowflags = FLOW_PKT_TOSERVER;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
- FLOWLOCK_WRLOCK(&f);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
StreamTcpThread stt;
uint8_t payload[4];
TCPHdr tcph;
- TcpReassemblyThreadCtx *ra_ctx = StreamTcpReassembleInitThreadCtx(NULL);
int ret = 0;
PacketQueue pq;
memset(&pq,0,sizeof(PacketQueue));
memset(&tcph, 0, sizeof (TCPHdr));
FLOW_INITIALIZE(&f);
- stt.ra_ctx = ra_ctx;
p->flow = &f;
tcph.th_win = htons(5480);
tcph.th_flags = TH_SYN | TH_CWR | TH_ECN;
p->tcph = &tcph;
p->flowflags = FLOW_PKT_TOSERVER;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
- FLOWLOCK_WRLOCK(&f);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
/** \test Test the memcap incrementing/decrementing and memcap check */
static int StreamTcpTest28(void)
{
- uint8_t ret = 0;
- StreamTcpInitConfig(TRUE);
+ StreamTcpThread stt;
+ StreamTcpUTInit(&stt.ra_ctx);
+
uint32_t memuse = SC_ATOMIC_GET(st_memuse);
StreamTcpIncrMemuse(500);
- if (SC_ATOMIC_GET(st_memuse) != (memuse+500)) {
- printf("failed in incrementing the memory");
- goto end;
- }
+ FAIL_IF(SC_ATOMIC_GET(st_memuse) != (memuse+500));
StreamTcpDecrMemuse(500);
- if (SC_ATOMIC_GET(st_memuse) != memuse) {
- printf("failed in decrementing the memory");
- goto end;
- }
-
- if (StreamTcpCheckMemcap(500) != 1) {
- printf("failed in validating the memcap");
- goto end;
- }
+ FAIL_IF(SC_ATOMIC_GET(st_memuse) != memuse);
- if (StreamTcpCheckMemcap((memuse + stream_config.memcap)) != 0) {
- printf("failed in validating the overflowed memcap");
- goto end;
- }
+ FAIL_IF(StreamTcpCheckMemcap(500) != 1);
- StreamTcpFreeConfig(TRUE);
+ FAIL_IF(StreamTcpCheckMemcap((memuse + stream_config.memcap)) != 0);
- if (SC_ATOMIC_GET(st_memuse) != 0) {
- printf("failed in clearing the memory");
- goto end;
- }
+ StreamTcpUTDeinit(stt.ra_ctx);
- ret = 1;
- return ret;
-end:
- StreamTcpFreeConfig(TRUE);
- return ret;
+ FAIL_IF(SC_ATOMIC_GET(st_memuse) != 0);
+ PASS;
}
#if 0
TCPHdr tcph;
TcpSession ssn;
IPV4Hdr ipv4h;
- TcpReassemblyThreadCtx *ra_ctx = StreamTcpReassembleInitThreadCtx(NULL);
struct in_addr addr;
struct in_addr addr1;
TCPCache tcpc;
TCPHdr tcph;
TcpSession ssn;
IPV4Hdr ipv4h;
- TcpReassemblyThreadCtx *ra_ctx = StreamTcpReassembleInitThreadCtx(NULL);
struct in_addr addr;
struct in_addr addr1;
TCPCache tcpc;
StreamTcpThread stt;
uint8_t payload[4];
TCPHdr tcph;
- TcpReassemblyThreadCtx *ra_ctx = StreamTcpReassembleInitThreadCtx(NULL);
int ret = 0;
PacketQueue pq;
memset(&pq,0,sizeof(PacketQueue));
FLOW_INITIALIZE(&f);
- stt.ra_ctx = ra_ctx;
p->flow = &f;
tcph.th_win = htons(5480);
tcph.th_flags = TH_SYN;
p->tcph = &tcph;
p->flowflags = FLOW_PKT_TOSERVER;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
- FLOWLOCK_WRLOCK(&f);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1) {
printf("failed in processing packet\n");
goto end;
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
TCPHdr tcph;
PacketQueue pq;
- TcpReassemblyThreadCtx *ra_ctx = StreamTcpReassembleInitThreadCtx(NULL);
memset (&f, 0, sizeof(Flow));
memset(&tv, 0, sizeof (ThreadVars));
memset(&stt, 0, sizeof (StreamTcpThread));
tcph.th_flags = TH_SYN;
p->tcph = &tcph;
p->flowflags = FLOW_PKT_TOSERVER;
- stt.ra_ctx = ra_ctx;
- StreamTcpInitConfig(TRUE);
- FLOWLOCK_WRLOCK(&f);
+ StreamTcpUTInit(&stt.ra_ctx);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1) {
printf("failed in processing packet in StreamTcpPacket\n");
goto end;
end:
StreamTcpSessionClear(p->flow->protoctx);
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
- if (stt.ra_ctx != NULL)
- StreamTcpReassembleFreeThreadCtx(stt.ra_ctx);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
TCPHdr tcph;
PacketQueue pq;
- TcpReassemblyThreadCtx *ra_ctx = StreamTcpReassembleInitThreadCtx(NULL);
memset (&f, 0, sizeof(Flow));
memset(&tv, 0, sizeof (ThreadVars));
memset(&stt, 0, sizeof (StreamTcpThread));
p->tcph = &tcph;
p->flowflags = FLOW_PKT_TOSERVER;
int ret = 0;
- stt.ra_ctx = ra_ctx;
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
- FLOWLOCK_WRLOCK(&f);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1) {
printf("failed in processing packet in StreamTcpPacket\n");
goto end;
end:
StreamTcpSessionClear(p->flow->protoctx);
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
- if (stt.ra_ctx != NULL)
- StreamTcpReassembleFreeThreadCtx(stt.ra_ctx);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
0x00, 0x04, 0xf0, 0xc8, 0x01, 0x99, 0xa3, 0xf3
};
Packet *p = SCMalloc(SIZE_OF_PACKET);
- if (unlikely(p == NULL))
- return 0;
+ FAIL_IF(unlikely(p == NULL));
ThreadVars tv;
DecodeThreadVars dtv;
DecodeVLAN(&tv, &dtv, p, GET_PKT_DATA(p), GET_PKT_LEN(p), NULL);
- if(p->vlanh[0] == NULL) {
- SCFree(p);
- return 0;
- }
+ FAIL_IF(p->vlanh[0] == NULL);
- if(p->tcph == NULL) {
- SCFree(p);
- return 0;
- }
+ FAIL_IF(p->tcph == NULL);
Packet *np = StreamTcpPseudoSetup(p, GET_PKT_DATA(p), GET_PKT_LEN(p));
- if (np == NULL) {
- printf("the packet received from packet allocation is NULL: ");
- return 0;
- }
+ FAIL_IF(np == NULL);
StreamTcpPseudoPacketSetupHeader(np,p);
- if (((uint8_t *)p->tcph - (uint8_t *)p->ip4h) != ((uint8_t *)np->tcph - (uint8_t *)np->ip4h)) {
- return 0;
- }
+ FAIL_IF(((uint8_t *)p->tcph - (uint8_t *)p->ip4h) != ((uint8_t *)np->tcph - (uint8_t *)np->ip4h));
- PACKET_RECYCLE(np);
- PACKET_RECYCLE(p);
+ PACKET_DESTRUCTOR(np);
+ PACKET_DESTRUCTOR(p);
FlowShutdown();
-
- return 1;
+ PacketFree(np);
+ PacketFree(p);
+ PASS;
}
static int StreamTcpTest41(void)
memset(&stt, 0, sizeof (StreamTcpThread));
memset(&tcph, 0, sizeof (TCPHdr));
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
FLOW_INITIALIZE(&f);
p->tcph = &tcph;
tcph.th_seq = htonl(100);
p->flowflags = FLOW_PKT_TOSERVER;
- FLOWLOCK_WRLOCK(&f);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
memset(&stt, 0, sizeof (StreamTcpThread));
memset(&tcph, 0, sizeof (TCPHdr));
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
FLOW_INITIALIZE(&f);
p->tcph = &tcph;
tcph.th_seq = htonl(100);
p->flowflags = FLOW_PKT_TOSERVER;
- FLOWLOCK_WRLOCK(&f);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
memset(&stt, 0, sizeof (StreamTcpThread));
memset(&tcph, 0, sizeof (TCPHdr));
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
FLOW_INITIALIZE(&f);
p->tcph = &tcph;
tcph.th_seq = htonl(100);
p->flowflags = FLOW_PKT_TOSERVER;
- FLOWLOCK_WRLOCK(&f);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
FLOW_DESTROY(&f);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}
memset(&stt, 0, sizeof (StreamTcpThread));
memset(&tcph, 0, sizeof (TCPHdr));
- StreamTcpInitConfig(TRUE);
+ StreamTcpUTInit(&stt.ra_ctx);
stream_config.max_synack_queued = 2;
FLOW_INITIALIZE(&f);
tcph.th_seq = htonl(100);
p->flowflags = FLOW_PKT_TOSERVER;
- FLOWLOCK_WRLOCK(&f);
if (StreamTcpPacket(&tv, p, &stt, &pq) == -1)
goto end;
ret = 1;
end:
- StreamTcpFreeConfig(TRUE);
- FLOWLOCK_UNLOCK(&f);
SCFree(p);
+ StreamTcpUTDeinit(stt.ra_ctx);
return ret;
}