FARGOS/VISTA Object Management Environment Core  ..
FARGOS/VISTA Object Management Environment Core Table of Contents
poll_monitor.hpp
Go to the documentation of this file.
1 #ifndef _POLL_MONITOR_HPP_
2 #define _POLL_MONITOR_HPP_ "$Id: poll_monitor.hpp 318 2020-03-26 17:44:18Z geoff $"
4 /* Copyright (C) 2014 - 2019 FARGOS Development, LLC
6  */
7 
8 #include <stdint.h>
9 #ifndef _WIN32
10 #if __MACH__ == 1 || __OpenBSD__ == 1 /* MacOS or OpenBSD */
11 #include <sys/types.h>
12 #include <sys/event.h>
13 #include <sys/time.h>
14 #include <vector>
15 #elif __linux__ == 1
16 #include <sys/epoll.h>
17 #endif
18 #ifndef INVALID_HANDLE_VALUE
19 #define INVALID_HANDLE_VALUE -1
20 #endif
21 #endif /* end ifndef _WIN32 */
22 
23 #ifndef OS_HANDLE_TYPE
24 #ifdef _WIN32
25 #define OS_HANDLE_TYPE HANDLE
26 #else
27 #define OS_HANDLE_TYPE int
28 #endif
29 #endif /* OS_HANDLE_TYPE */
30 
41 class PollMonitor {
42 protected:
43 #ifndef _WIN32
44  int getInotifyResults(OS_HANDLE_TYPE *interestingFds, int *eventType);
45 #if __MACH__ == 1 || __OpenBSD__ == 1 /* MacOS or OpenBSD */
46  int addKevent(const struct kevent &ev);
47 #endif
48 #endif
50 
52 
53 public:
54  enum {
59  };
61  struct PollResult {
64  void *extraData;
65  int whyReady;
66  int watchId;
67  };
68  enum { MAX_FDS=2048 };
69  uint32_t fdsInUse;
70 #if __linux__ == 1 /* Linux */
71  int epoll_fd;
72  int inotify_fd;
73 #elif __MACH__ == 1 || __OpenBSD__ == 1 /* MacOS or OpenBSD */
74  int kqueue_fd;
75  int kevent_fd;
76 #endif
78 #ifndef _WIN32
82 #if __linux__ == 1 /* Linux */
83  struct epoll_event eventInfo[MAX_FDS];
84 #elif __MACH__ == 1 || __OpenBSD__ == 1 /* MacOS or OpenBSD */
85  std::vector<struct kevent> wantedEvents;
86 #endif
87 #endif /* end ifndef _WIN32 */
88 
89  PollMonitor();
90 
91  ~PollMonitor();
92 
95  int addFile(const char *fileName, int connType=0, void *extraInfo=nullptr,
97 
100  int addDescriptor(OS_HANDLE_TYPE openedFD, int connType=0, void *extraInfo=nullptr) {
101  int rc = addFile("", connType, extraInfo, openedFD);
102  return (rc);
103  }
104 
107  int addWatchDirectoryForNewFiles(const char *dirName);
108 
111  int addWatchFileForAddedContent(const char *fileName, OS_HANDLE_TYPE openedFD);
112 
114 
115  int doPoll(PollResult interestingFds[MAX_FDS], int timeout=-1);
116 
117 }; // end class PollMonitor
118 
120 #endif
121 /* vim: set expandtab shiftwidth=4 tabstop=4: */
PollMonitor::NEW_FILE_DATA_AVAILABLE
@ NEW_FILE_DATA_AVAILABLE
Indicates new data available.
Definition: poll_monitor.hpp:55
PollMonitor::doPoll
int doPoll(PollResult interestingFds[MAX_FDS], int timeout=-1)
Definition: poll_monitor.cpp:231
PollMonitor::addFile
int addFile(const char *fileName, int connType=0, void *extraInfo=nullptr, OS_HANDLE_TYPE openedFD=INVALID_HANDLE_VALUE)
Monitor a file for changes.
Definition: poll_monitor.cpp:126
main
main()
Definition: pamtest.c:28
OMEmakeSHA1hash
OMEstring * OMEmakeSHA1hash(const OMEstring &message)
Compute Secure Hash Algorithm 1 over an OMEstring.
Definition: pkRoutines.cpp:83
DEtype
OMEtype DEtype
Definition: perfTest.cpp:14
OMEstring.h
OME string implementation.
PollMonitor::PollResult::whyReady
int whyReady
Definition: poll_monitor.hpp:65
PollMonitor::fdToWatchID
int fdToWatchID[MAX_FDS]
Definition: poll_monitor.hpp:80
PollMonitor::watchIdToFd
int watchIdToFd[MAX_FDS]
Definition: poll_monitor.hpp:79
PollMonitor::addDescriptor
int addDescriptor(OS_HANDLE_TYPE openedFD, int connType=0, void *extraInfo=nullptr)
Monitor an open descriptor.
Definition: poll_monitor.hpp:100
OMEstring
Implements text and binary string storage.
Definition: OMEstring.h:305
PollMonitor::PollMonitor
PollMonitor()
Definition: poll_monitor.cpp:21
t_ARRAY
#define t_ARRAY
Definition: perfTest.cpp:15
PollMonitor::fdInfo
PollResult fdInfo[MAX_FDS]
Definition: poll_monitor.hpp:77
OMEtype
Fundamental ANY type for FARGOS/VISTA Object Management Environment.
Definition: OMEbaseType.h:250
OMEmakePublicKey
OMEstring * OMEmakePublicKey(const OMEstring &privateKey)
Definition: pkRoutines.cpp:192
OMEstring::determineCharacterSet
void determineCharacterSet()
Definition: OMEstring.h:391
OMEmakeMD5hash
OMEstring * OMEmakeMD5hash(const OMEstring &message)
Compute Message Digest 5 over an OMEstring.
Definition: pkRoutines.cpp:100
OMEmakeSessionKeyFromPublicKey
OMEstring * OMEmakeSessionKeyFromPublicKey(const OMEstring &publicKey, OMEstring &randomDataInSessionKeyOut)
Definition: pkRoutines.cpp:255
INVALID_HANDLE_VALUE
#define INVALID_HANDLE_VALUE
Definition: poll_monitor.hpp:19
md5global.h
PollMonitor
Monitor files and directories for changes.
Definition: poll_monitor.hpp:41
ntohs
#define ntohs(x)
Definition: tmp.o.cpp:3103
crypt
char * crypt(const char *, const char *)
PollMonitor::PollResult::connectionType
int connectionType
Definition: poll_monitor.hpp:63
PollMonitor::WRITER_CLOSED
@ WRITER_CLOSED
Indicates writer closed file.
Definition: poll_monitor.hpp:56
srcID
const char srcID[]
Definition: catSym.c:17
poll_monitor.hpp
Polling monitor.
PollMonitor::findFDentry
int findFDentry(OS_HANDLE_TYPE fd)
Definition: poll_monitor.cpp:53
OMEdecryptSessionKeyWithPrivateKey
OMEstring * OMEdecryptSessionKeyWithPrivateKey(const OMEstring &privateKey, const OMEstring &data)
Definition: pkRoutines.cpp:296
OMEmakePrivateKey
OMEstring * OMEmakePrivateKey(const OMEstring &secretPhrase)
Definition: pkRoutines.cpp:156
PollMonitor::~PollMonitor
~PollMonitor()
Definition: poll_monitor.cpp:39
OMEcrypto.h
PollMonitor::WATCHED_BY_INOTIFY
@ WATCHED_BY_INOTIFY
Being watched via inotify()
Definition: poll_monitor.hpp:58
PollMonitor::PollResult::watchId
int watchId
Definition: poll_monitor.hpp:66
OME_INIT_VEC_LEN_IN_HEX_BYTES
@ OME_INIT_VEC_LEN_IN_HEX_BYTES
Definition: OMEcrypto.h:14
htons
#define htons(x)
Definition: tmp.o.cpp:3100
OMEtype.h
OME fundamental type implementation.
OMEstring::length
size_t length() const
Definition: OMEstring.h:401
PollMonitor::getInotifyResults
int getInotifyResults(OS_HANDLE_TYPE *interestingFds, int *eventType)
EPERM
#define EPERM
Definition: tmp.o.cpp:139
main
main()
Definition: perfTest.cpp:19
PollMonitor::PollResult
Return result from polling monitor.
Definition: poll_monitor.hpp:61
PollMonitor::addWatchFileForAddedContent
int addWatchFileForAddedContent(const char *fileName, OS_HANDLE_TYPE openedFD)
Watch file for increase in size.
Definition: poll_monitor.cpp:100
OME_USED
const char srcID[] OME_USED
Definition: tick_time.cpp:24
OMEstring::outputOnStreamAsHex
STREAMTYPE & outputOnStreamAsHex(STREAMTYPE &outputStream, int_fast16_t indent=0, bool dense=false) const
Output the contents of an OMEstring object to an output stream as a collection of hexadecimal charact...
Definition: OMEstring.h:564
PollMonitor::POLLING_STOPPED
@ POLLING_STOPPED
Polling stopped.
Definition: poll_monitor.hpp:57
PollMonitor::fdsInUse
uint32_t fdsInUse
Definition: poll_monitor.hpp:69
md5.h
PollMonitor::dropDescriptor
int dropDescriptor(OS_HANDLE_TYPE fd)
Definition: poll_monitor.cpp:201
errno
int errno
Definition: ethers.c:41
PollMonitor::PollResult::extraData
void * extraData
Definition: poll_monitor.hpp:64
PollMonitor::MAX_FDS
@ MAX_FDS
Definition: poll_monitor.hpp:68
PollMonitor::getFileSizeForDescriptor
static uint64_t getFileSizeForDescriptor(OS_HANDLE_TYPE fd)
Definition: poll_monitor.cpp:70
PollMonitor::addWatchDirectoryForNewFiles
int addWatchDirectoryForNewFiles(const char *dirName)
Watch directory for appearance of new files.
Definition: poll_monitor.cpp:176
malloc
char * malloc(unsigned int bytes)
Definition: test_malloc.c:441
pamConvFunc
int pamConvFunc(int numMess, struct pam_message **msg, struct pam_response **pam_resp, void *appData)
Definition: pamtest.c:10
LOG_ENDLINE
#define LOG_ENDLINE
Closing clause for text line output using << operators.
Definition: logging_api.hpp:2956
OMEmakeRandomKey
OMEstring * OMEmakeRandomKey(int32_t desiredBits)
Generate a random sequence of bits.
Definition: pkRoutines.cpp:46
OS_HANDLE_TYPE
#define OS_HANDLE_TYPE
Definition: io_processor.hpp:48
OS_HANDLE_TYPE
#define OS_HANDLE_TYPE
Definition: poll_monitor.hpp:27
PollMonitor::PollResult::fd
OS_HANDLE_TYPE fd
Definition: poll_monitor.hpp:62
PollMonitor::fdToEntry
int fdToEntry[MAX_FDS]
Definition: poll_monitor.hpp:81
RAND_MAX
#define RAND_MAX
Definition: tmp.o.cpp:455
htonl
#define htonl(x)
Definition: tmp.o.cpp:3098
OMEhexDigits
const unsigned char OMEhexDigits[]
Definition: OMEstring.cpp:19
main
int main(int argc, const char *argv[])
Definition: tick_test.cpp:5
fd
int fd
Definition: ethers.c:41
LOG_CERR
#define LOG_CERR(lvl)
Convenience macro that uses LOG_INTO() to conditionally log a message to standard error.
Definition: logging_api.hpp:3014
logging_api.hpp
FARGOS Logging API.
Generated: Tue Jul 28 2020 16:03:26
Support Information