1 #ifndef CRYPTOPP_WAIT_H 2 #define CRYPTOPP_WAIT_H 6 #ifdef SOCKETS_AVAILABLE 12 #ifdef USE_WINDOWS_STYLE_SOCKETS 15 #include <sys/types.h> 20 NAMESPACE_BEGIN(CryptoPP)
25 Tracer(
unsigned int level) : m_level(level) {}
30 virtual void Trace(
unsigned int n, std::string
const& s) = 0;
41 void TraceIf(
unsigned int n, std::string
const&s)
42 {
if (n) Trace(n, s); }
48 unsigned int Tracing(
unsigned int nr,
unsigned int minLevel)
const 49 {
return (UsingDefaults() && m_level >= minLevel) ? nr : 0; }
58 #define CRYPTOPP_TRACER_CONSTRUCTOR(DERIVED) \ 59 public: DERIVED(unsigned int level = 0) : Tracer(level) {} 61 #define CRYPTOPP_BEGIN_TRACER_CLASS_1(DERIVED, BASE1) \ 62 class DERIVED : virtual public BASE1 { CRYPTOPP_TRACER_CONSTRUCTOR(DERIVED) 64 #define CRYPTOPP_BEGIN_TRACER_CLASS_2(DERIVED, BASE1, BASE2) \ 65 class DERIVED : virtual public BASE1, virtual public BASE2 { CRYPTOPP_TRACER_CONSTRUCTOR(DERIVED) 67 #define CRYPTOPP_END_TRACER_CLASS }; 72 #define CRYPTOPP_BEGIN_TRACER_EVENTS(UNIQUENR) enum { EVENTBASE = UNIQUENR, 73 #define CRYPTOPP_TRACER_EVENT(EVENTNAME) EventNr_##EVENTNAME, 74 #define CRYPTOPP_END_TRACER_EVENTS }; 86 #define CRYPTOPP_TRACER_EVENT_METHODS(EVENTNAME, LOGLEVEL) \ 87 virtual unsigned int Trace##EVENTNAME() const { return Tracing(EventNr_##EVENTNAME, LOGLEVEL); } \ 88 virtual void Trace##EVENTNAME(std::string const& s) { TraceIf(Trace##EVENTNAME(), s); } 106 CallStack const* Prev()
const {
return m_prev; }
107 virtual std::string Format()
const;
119 std::string Format()
const;
130 std::string Format()
const;
137 CRYPTOPP_BEGIN_TRACER_EVENTS(0x48752841)
138 CRYPTOPP_TRACER_EVENT(NoWaitLoop)
139 CRYPTOPP_END_TRACER_EVENTS
140 CRYPTOPP_TRACER_EVENT_METHODS(NoWaitLoop, 1)
141 CRYPTOPP_END_TRACER_CLASS
143 struct WaitingThreadData;
156 static unsigned int MaxWaitObjects();
161 void SetNoWait(
CallStack const& callStack);
162 void ScheduleEvent(
double milliseconds,
CallStack const& callStack);
164 bool Wait(
unsigned long milliseconds);
166 #ifdef USE_WINDOWS_STYLE_SOCKETS 168 void AddHandle(HANDLE handle,
CallStack const& callStack);
170 void AddReadFd(
int fd,
CallStack const& callStack);
171 void AddWriteFd(
int fd,
CallStack const& callStack);
177 #ifdef USE_WINDOWS_STYLE_SOCKETS 178 void CreateThreads(
unsigned int count);
179 std::vector<HANDLE> m_handles;
180 std::vector<WaitingThreadData *> m_threads;
181 HANDLE m_startWaiting;
182 HANDLE m_stopWaiting;
184 fd_set m_readfds, m_writefds;
188 double m_firstEventTime;
191 #ifdef USE_WINDOWS_STYLE_SOCKETS 192 typedef size_t LastResultType;
194 typedef int LastResultType;
196 enum { LASTRESULT_NOWAIT = -1, LASTRESULT_SCHEDULED = -2, LASTRESULT_TIMEOUT = -3 };
197 LastResultType m_lastResult;
198 unsigned int m_sameResultCount;
200 void SetLastResult(LastResultType result);
201 void DetectNoWait(LastResultType result,
CallStack const& callStack);
base class for all exceptions thrown by Crypto++
container of wait objects
unsigned int Tracing(unsigned int nr, unsigned int minLevel) const
exception thrown by WaitObjectContainer
virtual bool UsingDefaults() const