Changeset 119

Show
Ignore:
Timestamp:
11.12.2005 14:41:27 (3 years ago)
Author:
tibob
Message:
  • Optimized the check on dump time (closes #9)
Location:
trunk/source
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/source/init.c

    r118 r119  
    6868extern FILE *yyin; 
    6969extern int yyfailed; 
     70extern time_t NextDumpGlobal; 
    7071 
    7172struct OptionsType Options; 
     
    346347  struct AllLogsType *pNextLog; 
    347348 
     349/* NextDumpGlobal check will at least be done within next 
     350   DEFAULT_OPTIONS_DUMPINTERVAL */ 
     351  NextDumpGlobal = time(NULL) + DEFAULT_OPTIONS_DUMPINTERVAL; 
     352   
    348353  pPrevLog = NULL; 
    349   for (pTempLog = pAllLogs; NULL != pTempLog; pTempLog = pNextLog) 
    350   { 
     354  for (pTempLog = pAllLogs; NULL != pTempLog; pTempLog = pNextLog) { 
    351355    pNextLog = pTempLog->Next; 
    352     if (NULL == pTempLog->Filter) 
     356    if (NULL == pTempLog->Filter) { 
    353357      /* wipe this entry out*/ 
    354     { 
    355358      if (pTempLog->LogFile) { 
    356359        xfree (pTempLog->LogFile); 
     
    364367 
    365368      xfree (pTempLog); 
     369 
    366370    } else { 
    367       /* this entry is kept, adjust NextClear */ 
     371      /* this entry is kept */ 
     372      pPrevLog = pTempLog; 
     373 
     374      /* make latest initialisations */ 
    368375      pTempLog->NextClear = pTempLog->NextDump + pTempLog->DumpInterval * (pTempLog->ClearCounter - 1); 
    369376 
    370       pPrevLog = pTempLog; 
     377      if (NextDumpGlobal > pTempLog->NextDump) { 
     378        NextDumpGlobal = pTempLog->NextDump; 
     379      } 
    371380    } 
    372381  } 
  • trunk/source/ipfm.c

    r118 r119  
    6060extern int run_as_daemon; 
    6161extern struct OptionsType Options; 
     62time_t NextDumpGlobal=0; 
    6263 
    6364int main(int argc, char *argv[]) { 
     
    121122 
    122123    /* Well that's an approximation. I should perhaps use an alarm() */ 
    123     for (pTempLog = pAllLogs; NULL != pTempLog; pTempLog = pTempLog->Next) { 
    124 /* DEBUG_MSG("time %d nextdump %d delta %d\n", time(NULL), pTempLog->NextDump, pTempLog->NextDump - time(NULL));*/ 
    125       if (time(NULL) > pTempLog->NextDump) { 
    126         data_dump(pTempLog); 
    127         /* Check if we have to clear the logs as well */ 
    128         if (0 != pTempLog->ClearInterval) { 
    129           pTempLog->ClearCounter--; 
    130           if (0 >= pTempLog->ClearCounter) { 
    131             data_clear(pTempLog); 
    132             pTempLog->PrevClear = pTempLog->NextDump; 
    133             pTempLog->NextClear = pTempLog->NextDump + pTempLog->ClearInterval * pTempLog->DumpInterval; 
    134             pTempLog->ClearCounter = pTempLog->ClearInterval; 
     124    if (NextDumpGlobal < time(NULL)) { 
     125      /* NextDumpGlobal check will at least be done within next 
     126         DEFAULT_OPTIONS_DUMPINTERVAL */ 
     127      NextDumpGlobal = time(NULL) + DEFAULT_OPTIONS_DUMPINTERVAL; 
     128      for (pTempLog = pAllLogs; NULL != pTempLog; pTempLog = pTempLog->Next) { 
     129      DEBUG_MSG("time %d nextdump %d delta %d\n", time(NULL), pTempLog->NextDump, pTempLog->NextDump - time(NULL)); 
     130        if (time(NULL) > pTempLog->NextDump) { 
     131          data_dump(pTempLog); 
     132          /* Check if we have to clear the logs as well */ 
     133          if (0 != pTempLog->ClearInterval) { 
     134            pTempLog->ClearCounter--; 
     135            if (0 >= pTempLog->ClearCounter) { 
     136              data_clear(pTempLog); 
     137              pTempLog->PrevClear = pTempLog->NextDump; 
     138              pTempLog->NextClear = pTempLog->NextDump + 
     139                            pTempLog->ClearInterval * pTempLog->DumpInterval; 
     140              pTempLog->ClearCounter = pTempLog->ClearInterval; 
     141            } 
     142          } 
     143          pTempLog->PrevDump = pTempLog->NextDump; 
     144          pTempLog->NextDump += pTempLog->DumpInterval; 
     145          /* Set NextDumpGlobal to the right time */ 
     146          if (NextDumpGlobal > pTempLog->NextDump) { 
     147            NextDumpGlobal = pTempLog->NextDump; 
    135148          } 
    136149        } 
    137         pTempLog->PrevDump = pTempLog->NextDump; 
    138         pTempLog->NextDump += pTempLog->DumpInterval; 
    139150      } 
    140151    } 
  • trunk/source/pcap.c

    r118 r119  
    241241} 
    242242 
    243 u_char *getnextippkt() 
    244 { 
     243u_char *getnextippkt() { 
    245244  /* these are allocated by pcap (I think they are saved in pcap_global_descriptor allocated by me...) */ 
    246245  struct pcap_pkthdr *header; 
     
    256255  for (;;) { 
    257256    pcap_result = pcap_next_ex(pcap_global_descriptor, &header, (const u_char **) &packet); 
    258     /*    DEBUG_MSG("pcap_next_ex returned %i\n", pcap_result); */ 
     257    DEBUG_MSG("pcap_next_ex returned %i\n", pcap_result); 
    259258    switch (pcap_result) { 
    260259      case 1: 
    261260        /* A packet was received, nothing to do! */ 
    262         /* DEBUG_MSG("packet time/length/size %i %i %i\n", header->ts, header->caplen, header->len); */ 
     261        DEBUG_MSG("packet time/length/size %i %i %i\n", header->ts, header->caplen, header->len); 
    263262        break; 
    264263      case 0: 
    265264        /* pcap_next_ex reached a time out, check if there is someting to dump and if not, continue */ 
    266         /* FIXME: ungly code duplication here! */ 
     265        /* FIXME: ugly code duplication here! */ 
    267266        /* handle HUP signal */ 
    268267        if (SigHup) {