49 static void DetectStreamSizeRegisterTests(
void);
52 static bool PrefilterStreamSizeIsPrefilterable(
const Signature *s);
73 static int DetectStreamSizeMatchAux(
const DetectStreamSizeData *sd,
const TcpSession *ssn)
79 if (sd->flags == StreamSizeServer) {
84 }
else if (sd->flags == StreamSizeClient) {
89 }
else if (sd->flags == StreamSizeBoth) {
96 }
else if (sd->flags == StreamSizeEither) {
118 static int DetectStreamSizeMatch(
121 const DetectStreamSizeData *sd = (
const DetectStreamSizeData *)
ctx;
123 if (!(PacketIsTCP(p)))
145 DetectStreamSizeData *sd = SCDetectStreamSizeParse(streamstr);
164 SCDetectStreamSizeFree(ptr);
169 static void PrefilterPacketStreamsizeMatch(
172 if (!(PacketIsTCP(p)))
181 if (!PrefilterPacketHeaderExtraMatch(
ctx, p))
184 DetectStreamSizeData dsd;
185 dsd.du32.mode =
ctx->v1.u8[0];
186 dsd.flags =
ctx->v1.u8[1];
187 dsd.du32.arg1 =
ctx->v1.u32[2];
191 if (DetectStreamSizeMatchAux(&dsd, ssn)) {
192 PrefilterAddSids(&det_ctx->
pmq,
ctx->sigs_array,
ctx->sigs_cnt);
198 const DetectStreamSizeData *a = smctx;
199 v->
u8[0] = a->du32.mode;
201 v->
u32[2] = a->du32.arg1;
206 const DetectStreamSizeData *a = smctx;
207 return v.
u8[0] == a->du32.mode && v.
u8[1] == a->flags && v.
u32[2] == a->du32.arg1;
213 PrefilterPacketStreamSizeSet, PrefilterPacketStreamSizeCompare,
214 PrefilterPacketStreamsizeMatch);
217 static bool PrefilterStreamSizeIsPrefilterable(
const Signature *s)
235 static int DetectStreamSizeParseTest01 (
void)
238 DetectStreamSizeData *sd = NULL;
239 sd = SCDetectStreamSizeParse(
"server,<,6");
241 if (sd->flags & StreamSizeServer && sd->du32.mode ==
DETECT_UINT_LT && sd->du32.arg1 == 6)
254 static int DetectStreamSizeParseTest02 (
void)
257 DetectStreamSizeData *sd = NULL;
258 sd = SCDetectStreamSizeParse(
"invalidoption,<,6");
260 printf(
"expected: NULL got 0x%02X %" PRIu32
": ", sd->flags, sd->du32.arg1);
273 static int DetectStreamSizeParseTest03 (
void)
292 memset(&f, 0,
sizeof(
Flow));
293 memset(&tcph, 0,
sizeof(
TCPHdr));
295 DetectStreamSizeData *sd = SCDetectStreamSizeParse(
"client,>,8");
306 PacketSetTCP(p, (uint8_t *)&tcph);
309 int result = DetectStreamSizeMatch(&dtx, p, &s, sm.
ctx);
321 static int DetectStreamSizeParseTest04 (
void)
340 memset(&f, 0,
sizeof(
Flow));
341 memset(&ip4h, 0,
sizeof(
IPV4Hdr));
343 DetectStreamSizeData *sd = SCDetectStreamSizeParse(
" client , > , 8 ");
357 FAIL_IF(DetectStreamSizeMatch(&dtx, p, &s, sm.
ctx));
367 void DetectStreamSizeRegisterTests(
void)
369 UtRegisterTest(
"DetectStreamSizeParseTest01", DetectStreamSizeParseTest01);
370 UtRegisterTest(
"DetectStreamSizeParseTest02", DetectStreamSizeParseTest02);
371 UtRegisterTest(
"DetectStreamSizeParseTest03", DetectStreamSizeParseTest03);
372 UtRegisterTest(
"DetectStreamSizeParseTest04", DetectStreamSizeParseTest04);