mirror of
https://github.com/zeek/zeek.git
synced 2025-10-06 16:48:19 +00:00
IOSource reorg.
A bunch of infrastructure work to move IOSource, IOSourceRegistry (now iosource::Manager) and PktSrc/PktDumper code into iosource/, and over to a plugin structure. Other IOSources aren't touched yet, they are still in src/*. It compiles and does something with a small trace, but that's all I've tested so far. There are quite certainly a number of problems left, as well as various TODOs and cleanup; and nothing's cast in stone yet. Will continue to work on this.
This commit is contained in:
parent
6c20df11cc
commit
93d9dde969
52 changed files with 2223 additions and 1306 deletions
75
src/iosource/Manager.h
Normal file
75
src/iosource/Manager.h
Normal file
|
@ -0,0 +1,75 @@
|
|||
// See the file "COPYING" in the main distribution directory for copyright.
|
||||
|
||||
#ifndef IOSOURCE_MANAGER_H
|
||||
#define IOSOURCE_MANAGER_H
|
||||
|
||||
#include <string>
|
||||
#include <list>
|
||||
|
||||
namespace iosource {
|
||||
|
||||
class IOSource;
|
||||
class PktSrc;
|
||||
class PktDumper;
|
||||
|
||||
class Manager {
|
||||
public:
|
||||
Manager() { call_count = 0; dont_counts = 0; }
|
||||
~Manager();
|
||||
|
||||
// If dont_count is true, this source does not contribute to the
|
||||
// number of IOSources returned by Size(). The effect is that
|
||||
// if all sources but the non-counting ones have gone dry,
|
||||
// processing will shut down.
|
||||
void Register(IOSource* src, bool dont_count = false);
|
||||
|
||||
// This may block for some time.
|
||||
IOSource* FindSoonest(double* ts);
|
||||
|
||||
int Size() const { return sources.size() - dont_counts; }
|
||||
|
||||
typedef std::list<PktSrc *> PktSrcList;
|
||||
const PktSrcList& GetPktSrcs() const { return pkt_srcs; }
|
||||
|
||||
// Terminate IOSource processing immediately by removing all
|
||||
// sources (and therefore returning a Size() of zero).
|
||||
void Terminate() { RemoveAll(); }
|
||||
|
||||
PktSrc* OpenPktSrc(const std::string& path, const std::string& filter, bool is_live);
|
||||
PktDumper* OpenPktDumper(const std::string& path, bool append);
|
||||
|
||||
protected:
|
||||
void Register(PktSrc* src);
|
||||
|
||||
// When looking for a source with something to process,
|
||||
// every SELECT_FREQUENCY calls we will go ahead and
|
||||
// block on a select().
|
||||
static const int SELECT_FREQUENCY = 25;
|
||||
|
||||
// Microseconds to wait in an empty select if no source is ready.
|
||||
static const int SELECT_TIMEOUT = 50;
|
||||
|
||||
void RemoveAll();
|
||||
|
||||
unsigned int call_count;
|
||||
int dont_counts;
|
||||
|
||||
struct Source {
|
||||
IOSource* src;
|
||||
int fd_read;
|
||||
int fd_write;
|
||||
int fd_except;
|
||||
};
|
||||
|
||||
typedef std::list<Source*> SourceList;
|
||||
SourceList sources;
|
||||
|
||||
PktSrcList pkt_srcs;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
extern iosource::Manager* iosource_mgr;
|
||||
|
||||
#endif
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue