Bug #366 » 0001-threshold-introduce-SigGetThresholdTypeIter-function.patch
| src/detect-engine-threshold.c | ||
|---|---|---|
| 
     #include "tm-threads.h" 
   | 
||
| 
     /** 
   | 
||
| 
      * \brief Check if a certain signature has threshold option 
   | 
||
| 
      * \brief Return next DetectThresholdData for signature 
   | 
||
| 
      * 
   | 
||
| 
      * \param sig Signature pointer 
   | 
||
| 
      * \param p Packet structure 
   | 
||
| 
      * \param sm Pointer to a Signature Match pointer 
   | 
||
| 
      * 
   | 
||
| 
      * \retval tsh Return the threshold data from signature or NULL if not found 
   | 
||
| 
      * 
   | 
||
| 
      * 
   | 
||
| 
      */ 
   | 
||
| 
     DetectThresholdData *SigGetThresholdType(Signature *sig, Packet *p) 
   | 
||
| 
     DetectThresholdData *SigGetThresholdTypeIter(Signature *sig, Packet *p, SigMatch **psm) 
   | 
||
| 
     { 
   | 
||
| 
         SigMatch *sm = sig->sm_lists_tail[DETECT_SM_LIST_MATCH]; 
   | 
||
| 
         SigMatch *sm = NULL; 
   | 
||
| 
         DetectThresholdData *tsh = NULL; 
   | 
||
| 
         if (sig == NULL) 
   | 
||
| 
             return NULL; 
   | 
||
| 
         if (*psm == NULL) { 
   | 
||
| 
             sm = sig->sm_lists_tail[DETECT_SM_LIST_MATCH]; 
   | 
||
| 
         } else { 
   | 
||
| 
             /* Iteration in progress, using provided value */ 
   | 
||
| 
             sm = *psm; 
   | 
||
| 
         } 
   | 
||
| 
         if (p == NULL) 
   | 
||
| 
             return NULL; 
   | 
||
| 
         while (sm != NULL) { 
   | 
||
| 
             if (sm->type == DETECT_THRESHOLD || sm->type == DETECT_DETECTION_FILTER) { 
   | 
||
| 
                 tsh = (DetectThresholdData *)sm->ctx; 
   | 
||
| 
                 *psm = sm->prev; 
   | 
||
| 
                 return tsh; 
   | 
||
| 
             } 
   | 
||
| ... | ... | |
| 
     } 
   | 
||
| 
     /** 
   | 
||
| 
      * \brief Check if a certain signature has threshold option 
   | 
||
| 
      * 
   | 
||
| 
      * \param sig Signature pointer 
   | 
||
| 
      * \param p Packet structure 
   | 
||
| 
      * 
   | 
||
| 
      * \retval tsh Return the threshold data from signature or NULL if not found 
   | 
||
| 
      */ 
   | 
||
| 
     DetectThresholdData *SigGetThresholdType(Signature *sig, Packet *p) 
   | 
||
| 
     { 
   | 
||
| 
         return SigGetThresholdTypeIter(sig, p, NULL); 
   | 
||
| 
     } 
   | 
||
| 
     /** 
   | 
||
| 
      * \brief Search for a threshold data into threshold hash table 
   | 
||
| 
      * 
   | 
||
| 
      * \param de_ctx Dectection Context 
   | 
||
| src/detect-engine-threshold.h | ||
|---|---|---|
| 
     #define THRESHOLD_HASH_SIZE 0xffff 
   | 
||
| 
     DetectThresholdData *SigGetThresholdType(Signature *, Packet *); 
   | 
||
| 
     DetectThresholdData *SigGetThresholdTypeIter(Signature *sig, Packet *p, SigMatch **psm); 
   | 
||
| 
     int PacketAlertThreshold(DetectEngineCtx *, DetectEngineThreadCtx *, 
   | 
||
| 
                               DetectThresholdData *, Packet *, Signature *); 
   | 
||
| 
     void ThresholdFreeFunc(void *data); 
   | 
||