mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
42 lines
1.3 KiB
C++
42 lines
1.3 KiB
C++
// See the file "COPYING" in the main distribution directory for copyright.
|
|
|
|
#include "zeek/file_analysis/FileTimer.h"
|
|
|
|
#include "zeek/file_analysis/File.h"
|
|
#include "zeek/file_analysis/Manager.h"
|
|
|
|
namespace zeek::file_analysis::detail {
|
|
|
|
FileTimer::FileTimer(double t, std::string id, double interval)
|
|
: zeek::detail::Timer(t + interval, zeek::detail::TIMER_FILE_ANALYSIS_INACTIVITY), file_id(std::move(id)) {
|
|
DBG_LOG(DBG_FILE_ANALYSIS, "New %f second timeout timer for %s", interval, file_id.c_str());
|
|
}
|
|
|
|
void FileTimer::Dispatch(double t, bool is_expire) {
|
|
File* file = file_mgr->LookupFile(file_id);
|
|
|
|
if ( ! file )
|
|
return;
|
|
|
|
double last_active = file->GetLastActivityTime();
|
|
double inactive_time = t > last_active ? t - last_active : 0.0;
|
|
|
|
DBG_LOG(DBG_FILE_ANALYSIS,
|
|
"Checking inactivity for %s, last active at %f, "
|
|
"inactive for %f",
|
|
file_id.c_str(), last_active, inactive_time);
|
|
|
|
if ( last_active == 0.0 ) {
|
|
// was created when network_time was zero, so re-schedule w/ valid time
|
|
file->UpdateLastActivityTime();
|
|
file->ScheduleInactivityTimer();
|
|
return;
|
|
}
|
|
|
|
if ( inactive_time >= file->GetTimeoutInterval() )
|
|
file_mgr->Timeout(file_id);
|
|
else if ( ! is_expire )
|
|
file->ScheduleInactivityTimer();
|
|
}
|
|
|
|
} // namespace zeek::file_analysis::detail
|