|
|
|
@ -47,48 +47,6 @@ int PmqSetup(PatternMatcherQueue *pmq, uint32_t maxid) {
|
|
|
|
|
SCReturnInt(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** \brief Reset a Pmq for reusage. Meant to be called after a single search.
|
|
|
|
|
* \param pmq Pattern matcher to be reset.
|
|
|
|
|
*/
|
|
|
|
|
void PmqReset(PatternMatcherQueue *pmq) {
|
|
|
|
|
uint32_t u;
|
|
|
|
|
for (u = 0; u < pmq->sig_id_array_cnt; u++) {
|
|
|
|
|
pmq->sig_bitarray[(pmq->sig_id_array[u] / 8)] &= ~(1<<(pmq->sig_id_array[u] % 8));
|
|
|
|
|
}
|
|
|
|
|
pmq->sig_id_array_cnt = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** \brief Cleanup a Pmq
|
|
|
|
|
* \param pmq Pattern matcher queue to be cleaned up.
|
|
|
|
|
*/
|
|
|
|
|
void PmqCleanup(PatternMatcherQueue *pmq) {
|
|
|
|
|
if (pmq == NULL)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (pmq->sig_id_array != NULL) {
|
|
|
|
|
SCFree(pmq->sig_id_array);
|
|
|
|
|
pmq->sig_id_array = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pmq->sig_bitarray != NULL) {
|
|
|
|
|
SCFree(pmq->sig_bitarray);
|
|
|
|
|
pmq->sig_bitarray = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pmq->sig_id_array_cnt = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** \brief Cleanup and free a Pmq
|
|
|
|
|
* \param pmq Pattern matcher queue to be free'd.
|
|
|
|
|
*/
|
|
|
|
|
void PmqFree(PatternMatcherQueue *pmq) {
|
|
|
|
|
if (pmq == NULL)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
PmqCleanup(pmq);
|
|
|
|
|
SCFree(pmq);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** \brief Verify and store a match
|
|
|
|
|
*
|
|
|
|
|
* used at search runtime
|
|
|
|
@ -102,7 +60,7 @@ void PmqFree(PatternMatcherQueue *pmq) {
|
|
|
|
|
* \retval 0 no match after all
|
|
|
|
|
* \retval 1 (new) match
|
|
|
|
|
*/
|
|
|
|
|
inline int
|
|
|
|
|
int
|
|
|
|
|
MpmVerifyMatch(MpmThreadCtx *thread_ctx, PatternMatcherQueue *pmq, MpmEndMatch *list, uint16_t offset, uint16_t patlen)
|
|
|
|
|
{
|
|
|
|
|
SCEnter();
|
|
|
|
@ -143,6 +101,48 @@ MpmVerifyMatch(MpmThreadCtx *thread_ctx, PatternMatcherQueue *pmq, MpmEndMatch *
|
|
|
|
|
SCReturnInt(ret);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** \brief Reset a Pmq for reusage. Meant to be called after a single search.
|
|
|
|
|
* \param pmq Pattern matcher to be reset.
|
|
|
|
|
*/
|
|
|
|
|
void PmqReset(PatternMatcherQueue *pmq) {
|
|
|
|
|
uint32_t u;
|
|
|
|
|
for (u = 0; u < pmq->sig_id_array_cnt; u++) {
|
|
|
|
|
pmq->sig_bitarray[(pmq->sig_id_array[u] / 8)] &= ~(1<<(pmq->sig_id_array[u] % 8));
|
|
|
|
|
}
|
|
|
|
|
pmq->sig_id_array_cnt = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** \brief Cleanup a Pmq
|
|
|
|
|
* \param pmq Pattern matcher queue to be cleaned up.
|
|
|
|
|
*/
|
|
|
|
|
void PmqCleanup(PatternMatcherQueue *pmq) {
|
|
|
|
|
if (pmq == NULL)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (pmq->sig_id_array != NULL) {
|
|
|
|
|
SCFree(pmq->sig_id_array);
|
|
|
|
|
pmq->sig_id_array = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pmq->sig_bitarray != NULL) {
|
|
|
|
|
SCFree(pmq->sig_bitarray);
|
|
|
|
|
pmq->sig_bitarray = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pmq->sig_id_array_cnt = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** \brief Cleanup and free a Pmq
|
|
|
|
|
* \param pmq Pattern matcher queue to be free'd.
|
|
|
|
|
*/
|
|
|
|
|
void PmqFree(PatternMatcherQueue *pmq) {
|
|
|
|
|
if (pmq == NULL)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
PmqCleanup(pmq);
|
|
|
|
|
SCFree(pmq);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* allocate an endmatch
|
|
|
|
|
*
|
|
|
|
|
* Only used in the initialization phase */
|
|
|
|
|