mirror of
https://github.com/zeek/zeek.git
synced 2025-10-04 15:48:19 +00:00
IOSource API changes for new loop architecture
- Removed GetFD and NextTimestamp methods - Removed concept of idle sources - Renamed Init to InitSource to avoid a name clash with the thread code - Added GetNextTimeout method This commit also removes the FD_Set file since it's no longer used
This commit is contained in:
parent
eee2abf729
commit
a00d11e44d
2 changed files with 23 additions and 155 deletions
|
@ -1,101 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <set>
|
|
||||||
#include <sys/select.h>
|
|
||||||
|
|
||||||
namespace iosource {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A container holding a set of file descriptors.
|
|
||||||
*/
|
|
||||||
class FD_Set {
|
|
||||||
public:
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor. The set is initially empty.
|
|
||||||
*/
|
|
||||||
FD_Set() : max(-1), fds()
|
|
||||||
{ }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Insert a file descriptor in to the set.
|
|
||||||
* @param fd the fd to insert in the set.
|
|
||||||
* @return false if fd was already in the set, else true.
|
|
||||||
*/
|
|
||||||
bool Insert(int fd)
|
|
||||||
{
|
|
||||||
if ( max < fd )
|
|
||||||
max = fd;
|
|
||||||
|
|
||||||
return fds.insert(fd).second;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Inserts all the file descriptors from another set in to this one.
|
|
||||||
* @param other a file descriptor set to merge in to this one.
|
|
||||||
*/
|
|
||||||
void Insert(const FD_Set& other)
|
|
||||||
{
|
|
||||||
for ( std::set<int>::const_iterator it = other.fds.begin();
|
|
||||||
it != other.fds.end(); ++it )
|
|
||||||
Insert(*it);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Empties the set.
|
|
||||||
*/
|
|
||||||
void Clear()
|
|
||||||
{ max = -1; fds.clear(); }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Insert file descriptors in to a fd_set for use with select().
|
|
||||||
* @return the greatest file descriptor inserted.
|
|
||||||
*/
|
|
||||||
int Set(fd_set* set) const
|
|
||||||
{
|
|
||||||
for ( std::set<int>::const_iterator it = fds.begin(); it != fds.end();
|
|
||||||
++it )
|
|
||||||
FD_SET(*it, set);
|
|
||||||
|
|
||||||
return max;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return Whether a file descriptor belonging to this set is within the
|
|
||||||
* fd_set arugment.
|
|
||||||
*/
|
|
||||||
bool Ready(fd_set* set) const
|
|
||||||
{
|
|
||||||
for ( std::set<int>::const_iterator it = fds.begin(); it != fds.end();
|
|
||||||
++it )
|
|
||||||
{
|
|
||||||
if ( FD_ISSET(*it, set) )
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return whether any file descriptors have been added to the set.
|
|
||||||
*/
|
|
||||||
bool Empty() const
|
|
||||||
{
|
|
||||||
return fds.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the greatest file descriptor of all that have been added to the
|
|
||||||
* set, or -1 if the set is empty.
|
|
||||||
*/
|
|
||||||
int Max() const
|
|
||||||
{
|
|
||||||
return max;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
int max;
|
|
||||||
std::set<int> fds;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace bro
|
|
|
@ -7,8 +7,6 @@ extern "C" {
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "FD_Set.h"
|
|
||||||
#include "Timer.h"
|
|
||||||
|
|
||||||
namespace iosource {
|
namespace iosource {
|
||||||
|
|
||||||
|
@ -21,28 +19,28 @@ public:
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*/
|
*/
|
||||||
IOSource() { idle = false; closed = false; }
|
IOSource() { closed = false; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destructor.
|
* Destructor.
|
||||||
*/
|
*/
|
||||||
virtual ~IOSource() {}
|
virtual ~IOSource() {}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true if source has nothing ready to process.
|
|
||||||
*/
|
|
||||||
bool IsIdle() const { return idle; }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if more data is to be expected in the future.
|
* Returns true if more data is to be expected in the future.
|
||||||
* Otherwise, source may be removed.
|
* Otherwise, source may be removed.
|
||||||
*/
|
*/
|
||||||
bool IsOpen() const { return ! closed; }
|
bool IsOpen() const { return ! closed; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if this is a packet source.
|
||||||
|
*/
|
||||||
|
virtual bool IsPacketSource() const { return false; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the source. Can be overwritten by derived classes.
|
* Initializes the source. Can be overwritten by derived classes.
|
||||||
*/
|
*/
|
||||||
virtual void Init() { }
|
virtual void InitSource() { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finalizes the source when it's being closed. Can be overwritten by
|
* Finalizes the source when it's being closed. Can be overwritten by
|
||||||
|
@ -51,50 +49,29 @@ public:
|
||||||
virtual void Done() { }
|
virtual void Done() { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns select'able file descriptors for this source. Leaves the
|
* Return the next timeout value for this source. This should be
|
||||||
* passed values untouched if not available.
|
* overridden by source classes where they have a timeout value
|
||||||
|
* that can wake up the poll.
|
||||||
*
|
*
|
||||||
* @param read Pointer to container where to insert a read descriptor.
|
* Must be overriden by derived classes.
|
||||||
*
|
*
|
||||||
* @param write Pointer to container where to insert a write descriptor.
|
* @return A value for the next time that the source thinks the
|
||||||
*
|
* poll should time out in seconds from the current time. Return
|
||||||
* @param except Pointer to container where to insert a except descriptor.
|
* -1 if this source should not be considered. This should be a
|
||||||
|
* a value relative to network_time, not an absolute time.
|
||||||
*/
|
*/
|
||||||
virtual void GetFds(FD_Set* read, FD_Set* write, FD_Set* except) = 0;
|
virtual double GetNextTimeout() = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the timestamp (in \a global network time) associated with
|
* Processes and consumes next data item. This will be called by
|
||||||
* next data item from this source. If the source wants the data
|
* net_run when this IOSource has been marked ready.
|
||||||
* item to be processed with a local network time, it sets the
|
|
||||||
* argument accordingly.
|
|
||||||
*
|
|
||||||
* This method will be called only when either IsIdle() returns
|
|
||||||
* false, or select() on one of the fds returned by GetFDs()
|
|
||||||
* indicates that there's data to process.
|
|
||||||
*
|
|
||||||
* Must be overridden by derived classes.
|
|
||||||
*
|
|
||||||
* @param network_time A pointer to store the \a local network time
|
|
||||||
* associated with the next item (as opposed to global network time).
|
|
||||||
*
|
|
||||||
* @return The global network time of the next entry, or a value
|
|
||||||
* smaller than zero if none is available currently.
|
|
||||||
*/
|
|
||||||
virtual double NextTimestamp(double* network_time) = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Processes and consumes next data item.
|
|
||||||
*
|
|
||||||
* This method will be called only when either IsIdle() returns
|
|
||||||
* false, or select() on one of the fds returned by GetFDs()
|
|
||||||
* indicates that there's data to process.
|
|
||||||
*
|
*
|
||||||
* Must be overridden by derived classes.
|
* Must be overridden by derived classes.
|
||||||
*/
|
*/
|
||||||
virtual void Process() = 0;
|
virtual void Process() = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the tag of the timer manafger associated with the last
|
* Returns the tag of the timer manager associated with the last
|
||||||
* procesees data item.
|
* procesees data item.
|
||||||
*
|
*
|
||||||
* Can be overridden by derived classes.
|
* Can be overridden by derived classes.
|
||||||
|
@ -102,25 +79,18 @@ public:
|
||||||
* @return The tag, or null for the global timer manager.
|
* @return The tag, or null for the global timer manager.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
virtual TimerMgr::Tag* GetCurrentTag() { return 0; }
|
virtual std::string* GetCurrentTag() { return 0; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a descriptual tag representing the source for debugging.
|
* Returns a descriptive tag representing the source for debugging.
|
||||||
*
|
*
|
||||||
* Can be overridden by derived classes.
|
* Must be overridden by derived classes.
|
||||||
*
|
*
|
||||||
* @return The debugging name.
|
* @return The debugging name.
|
||||||
*/
|
*/
|
||||||
virtual const char* Tag() = 0;
|
virtual const char* Tag() = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/*
|
|
||||||
* Callback for derived classes to call when they have gone dry
|
|
||||||
* temporarily.
|
|
||||||
*
|
|
||||||
* @param is_idle True if the source is idle currently.
|
|
||||||
*/
|
|
||||||
void SetIdle(bool is_idle) { idle = is_idle; }
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Callback for derived class to call when they have shutdown.
|
* Callback for derived class to call when they have shutdown.
|
||||||
|
@ -130,7 +100,6 @@ protected:
|
||||||
void SetClosed(bool is_closed) { closed = is_closed; }
|
void SetClosed(bool is_closed) { closed = is_closed; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool idle;
|
|
||||||
bool closed;
|
bool closed;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue