48 static void DetectStreamSizeRegisterTests(
void);
51 static bool PrefilterStreamSizeIsPrefilterable(
const Signature *s);
72 static int DetectStreamSizeMatchAux(
const DetectStreamSizeData *sd,
const TcpSession *
ssn)
78 if (sd->flags == StreamSizeServer) {
83 }
else if (sd->flags == StreamSizeClient) {
88 }
else if (sd->flags == StreamSizeBoth) {
95 }
else if (sd->flags == StreamSizeEither) {
117 static int DetectStreamSizeMatch(
120 const DetectStreamSizeData *sd = (
const DetectStreamSizeData *)
ctx;
122 if (!(PacketIsTCP(
p)))
144 DetectStreamSizeData *sd = SCDetectStreamSizeParse(streamstr);
163 SCDetectStreamSizeFree(ptr);
168 static void PrefilterPacketStreamsizeMatch(
171 if (!(PacketIsTCP(
p)))
180 if (!PrefilterPacketHeaderExtraMatch(
ctx,
p))
183 DetectStreamSizeData dsd;
184 dsd.du32.mode =
ctx->v1.u8[0];
185 dsd.flags =
ctx->v1.u8[1];
186 dsd.du32.arg1 =
ctx->v1.u32[2];
190 if (DetectStreamSizeMatchAux(&dsd,
ssn)) {
191 PrefilterAddSids(&det_ctx->
pmq,
ctx->sigs_array,
ctx->sigs_cnt);
197 const DetectStreamSizeData *a = smctx;
198 v->
u8[0] = a->du32.mode;
200 v->
u32[2] = a->du32.arg1;
205 const DetectStreamSizeData *a = smctx;
206 return v.
u8[0] == a->du32.mode && v.
u8[1] == a->flags && v.
u32[2] == a->du32.arg1;
212 PrefilterPacketStreamSizeSet, PrefilterPacketStreamSizeCompare,
213 PrefilterPacketStreamsizeMatch);
216 static bool PrefilterStreamSizeIsPrefilterable(
const Signature *s)
234 static int DetectStreamSizeParseTest01 (
void)
237 DetectStreamSizeData *sd = NULL;
238 sd = SCDetectStreamSizeParse(
"server,<,6");
240 if (sd->flags & StreamSizeServer && sd->du32.mode ==
DETECT_UINT_LT && sd->du32.arg1 == 6)
253 static int DetectStreamSizeParseTest02 (
void)
256 DetectStreamSizeData *sd = NULL;
257 sd = SCDetectStreamSizeParse(
"invalidoption,<,6");
259 printf(
"expected: NULL got 0x%02X %" PRIu32
": ", sd->flags, sd->du32.arg1);
272 static int DetectStreamSizeParseTest03 (
void)
291 memset(&
f, 0,
sizeof(
Flow));
292 memset(&tcph, 0,
sizeof(
TCPHdr));
294 DetectStreamSizeData *sd = SCDetectStreamSizeParse(
"client,>,8");
305 PacketSetTCP(
p, (uint8_t *)&tcph);
308 int result = DetectStreamSizeMatch(&dtx,
p, &s, sm.
ctx);
320 static int DetectStreamSizeParseTest04 (
void)
339 memset(&
f, 0,
sizeof(
Flow));
340 memset(&ip4h, 0,
sizeof(
IPV4Hdr));
342 DetectStreamSizeData *sd = SCDetectStreamSizeParse(
" client , > , 8 ");
356 FAIL_IF(DetectStreamSizeMatch(&dtx,
p, &s, sm.
ctx));
366 void DetectStreamSizeRegisterTests(
void)
368 UtRegisterTest(
"DetectStreamSizeParseTest01", DetectStreamSizeParseTest01);
369 UtRegisterTest(
"DetectStreamSizeParseTest02", DetectStreamSizeParseTest02);
370 UtRegisterTest(
"DetectStreamSizeParseTest03", DetectStreamSizeParseTest03);
371 UtRegisterTest(
"DetectStreamSizeParseTest04", DetectStreamSizeParseTest04);