diff --git a/src/app-layer.c b/src/app-layer.c index fbde53bc56..648c245d6d 100644 --- a/src/app-layer.c +++ b/src/app-layer.c @@ -188,7 +188,8 @@ int AppLayerHandleTCPData(ThreadVars *tv, TcpReassemblyThreadCtx *ra_ctx, FlowSetSessionNoApplayerInspectionFlag(f); StreamTcpSetStreamFlagAppProtoDetectionCompleted(&ssn->client); StreamTcpSetStreamFlagAppProtoDetectionCompleted(&ssn->server); - if (ssn->data_first_seen_dir == 0x01) { + /* it indicates some data has already been sent to the parser */ + if (ssn->data_first_seen_dir == APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { f->alproto = *alproto = *alproto_otherdir; } else { if (flags & STREAM_TOCLIENT) @@ -228,7 +229,7 @@ int AppLayerHandleTCPData(ThreadVars *tv, TcpReassemblyThreadCtx *ra_ctx, } } - if (ssn->data_first_seen_dir != 0x01) { + if (ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { if (al_proto_table[*alproto].flags && !(al_proto_table[*alproto].flags & ssn->data_first_seen_dir)) { AppLayerDecoderEventsSetEventRaw(p->app_layer_events, APPLAYER_WRONG_DIRECTION_FIRST_DATA); @@ -238,13 +239,13 @@ int AppLayerHandleTCPData(ThreadVars *tv, TcpReassemblyThreadCtx *ra_ctx, StreamTcpSetStreamFlagAppProtoDetectionCompleted(&ssn->server); StreamTcpSetStreamFlagAppProtoDetectionCompleted(&ssn->client); /* Set a value that is neither STREAM_TOSERVER, nor STREAM_TOCLIENT */ - ssn->data_first_seen_dir = 0x01; + ssn->data_first_seen_dir = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER; goto end; } } /* Set a value that is neither STREAM_TOSERVER, nor STREAM_TOCLIENT */ - ssn->data_first_seen_dir = 0x01; + ssn->data_first_seen_dir = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER; PACKET_PROFILING_APP_START(dp_ctx, *alproto); r = AppLayerParse(dp_ctx->alproto_local_storage[*alproto], f, *alproto, flags, data + data_al_so_far, data_len - data_al_so_far); @@ -269,7 +270,7 @@ int AppLayerHandleTCPData(ThreadVars *tv, TcpReassemblyThreadCtx *ra_ctx, FLOW_IS_PM_DONE(f, STREAM_TOCLIENT) && FLOW_IS_PP_DONE(f, STREAM_TOCLIENT)) { StreamTcpSetStreamFlagAppProtoDetectionCompleted(&ssn->server); StreamTcpSetStreamFlagAppProtoDetectionCompleted(&ssn->client); - ssn->data_first_seen_dir = 0x01; + ssn->data_first_seen_dir = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER; FlowSetSessionNoApplayerInspectionFlag(f); } } @@ -668,7 +669,7 @@ static int AppLayerTest01(void) f.flags & FLOW_NO_APPLAYER_INSPECTION || !FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 5\n"); goto end; } @@ -692,7 +693,7 @@ static int AppLayerTest01(void) f.flags & FLOW_NO_APPLAYER_INSPECTION || !FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || !FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 6\n"); goto end; } @@ -955,7 +956,7 @@ static int AppLayerTest02(void) f.flags & FLOW_NO_APPLAYER_INSPECTION || !FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || !FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 7\n"); goto end; } @@ -979,7 +980,7 @@ static int AppLayerTest02(void) f.flags & FLOW_NO_APPLAYER_INSPECTION || !FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || !FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || !FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 8\n"); goto end; } @@ -1192,7 +1193,7 @@ end: f.flags & FLOW_NO_APPLAYER_INSPECTION || !FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 5\n"); goto end; } @@ -1216,7 +1217,7 @@ end: f.flags & FLOW_NO_APPLAYER_INSPECTION || !FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || !FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || !FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 6\n"); goto end; } @@ -1388,7 +1389,7 @@ static int AppLayerTest04(void) f.flags & FLOW_NO_APPLAYER_INSPECTION || !FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 5\n"); goto end; } @@ -1412,7 +1413,7 @@ static int AppLayerTest04(void) f.flags & FLOW_NO_APPLAYER_INSPECTION || !FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || !FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 6\n"); goto end; } @@ -1478,7 +1479,7 @@ static int AppLayerTest04(void) f.flags & FLOW_NO_APPLAYER_INSPECTION || !FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || !FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 7\n"); goto end; } @@ -1502,7 +1503,7 @@ static int AppLayerTest04(void) f.flags & FLOW_NO_APPLAYER_INSPECTION || !FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || !FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || !FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 8\n"); goto end; } @@ -1740,7 +1741,7 @@ static int AppLayerTest05(void) f.flags & FLOW_NO_APPLAYER_INSPECTION || !FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || !FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || !FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 6\n"); goto end; } @@ -1954,7 +1955,7 @@ static int AppLayerTest06(void) !(f.flags & FLOW_NO_APPLAYER_INSPECTION) || FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || !FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 5\n"); goto end; } @@ -2168,7 +2169,7 @@ static int AppLayerTest07(void) f.flags & FLOW_NO_APPLAYER_INSPECTION || !FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 5\n"); goto end; } @@ -2192,7 +2193,7 @@ static int AppLayerTest07(void) !(f.flags & FLOW_NO_APPLAYER_INSPECTION) || !FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || !FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 6\n"); goto end; } @@ -2406,7 +2407,7 @@ static int AppLayerTest08(void) f.flags & FLOW_NO_APPLAYER_INSPECTION || !FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 5\n"); goto end; } @@ -2430,7 +2431,7 @@ static int AppLayerTest08(void) !(f.flags & FLOW_NO_APPLAYER_INSPECTION) || !FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || !FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 6\n"); goto end; } @@ -2710,7 +2711,7 @@ static int AppLayerTest09(void) !(f.flags & FLOW_NO_APPLAYER_INSPECTION) || !FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || !FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || !FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || !FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 8\n"); goto end; } @@ -2964,7 +2965,7 @@ static int AppLayerTest10(void) !(f.flags & FLOW_NO_APPLAYER_INSPECTION) || !FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || !FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || !FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || !FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 8\n"); goto end; } @@ -3268,7 +3269,7 @@ static int AppLayerTest11(void) !(f.flags & FLOW_NO_APPLAYER_INSPECTION) || !FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || !FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) || !FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || !FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 9\n"); goto end; } diff --git a/src/app-layer.h b/src/app-layer.h index 047aca9433..142835ae6a 100644 --- a/src/app-layer.h +++ b/src/app-layer.h @@ -35,6 +35,8 @@ #include "stream.h" +#define APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER (~STREAM_TOSERVER & ~STREAM_TOCLIENT) + uint16_t AppLayerGetProtoFromPacket(Packet *); void *AppLayerGetProtoStateFromPacket(Packet *); void *AppLayerGetProtoStateFromFlow(Flow *); diff --git a/src/stream-tcp-reassemble.c b/src/stream-tcp-reassemble.c index 1054c3bc0d..94acf652e8 100644 --- a/src/stream-tcp-reassemble.c +++ b/src/stream-tcp-reassemble.c @@ -6400,7 +6400,7 @@ static int StreamTcpReassembleTest39 (void) { ssn->client.seg_list->next->next != NULL || ssn->server.seg_list == NULL || ssn->server.seg_list->next != NULL || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 7\n"); goto end; } @@ -6429,7 +6429,7 @@ static int StreamTcpReassembleTest39 (void) { ssn->client.seg_list->next->next != NULL || ssn->server.seg_list == NULL || ssn->server.seg_list->next != NULL || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 8\n"); goto end; } @@ -6457,7 +6457,7 @@ static int StreamTcpReassembleTest39 (void) { ssn->client.seg_list->next != NULL || ssn->server.seg_list == NULL || ssn->server.seg_list->next != NULL || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 9\n"); goto end; } @@ -6485,7 +6485,7 @@ static int StreamTcpReassembleTest39 (void) { ssn->client.seg_list->next != NULL || ssn->server.seg_list == NULL || ssn->server.seg_list->next != NULL || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 10\n"); goto end; } @@ -6513,7 +6513,7 @@ static int StreamTcpReassembleTest39 (void) { ssn->client.seg_list->next != NULL || ssn->server.seg_list == NULL || ssn->server.seg_list->next != NULL || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 11\n"); goto end; } @@ -6544,7 +6544,7 @@ static int StreamTcpReassembleTest39 (void) { ssn->client.seg_list->next->next != NULL || ssn->server.seg_list == NULL || ssn->server.seg_list->next != NULL || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 12\n"); goto end; } @@ -6574,7 +6574,7 @@ static int StreamTcpReassembleTest39 (void) { ssn->client.seg_list->next->next != NULL || ssn->server.seg_list == NULL || ssn->server.seg_list->next != NULL || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 13\n"); goto end; } @@ -6604,7 +6604,7 @@ static int StreamTcpReassembleTest39 (void) { ssn->client.seg_list->next->next->next != NULL || ssn->server.seg_list == NULL || ssn->server.seg_list->next != NULL || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 14\n"); goto end; } @@ -6633,7 +6633,7 @@ static int StreamTcpReassembleTest39 (void) { ssn->client.seg_list->next->next->next != NULL || ssn->server.seg_list == NULL || ssn->server.seg_list->next != NULL || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 15\n"); goto end; } @@ -6674,7 +6674,7 @@ static int StreamTcpReassembleTest39 (void) { ssn->client.seg_list != NULL || ssn->server.seg_list == NULL || ssn->server.seg_list->next != NULL || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 15\n"); goto end; } @@ -6700,7 +6700,7 @@ static int StreamTcpReassembleTest39 (void) { !FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) || ssn->client.seg_list != NULL || ssn->server.seg_list != NULL || - ssn->data_first_seen_dir != 0x01) { + ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER) { printf("failure 15\n"); goto end; }