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> 18 #if defined(__ANDROID__) 19 #include <sys/select.h> 29 Tracer(
unsigned int level) : m_level(level) {}
34 virtual void Trace(
unsigned int n, std::string
const& s) = 0;
40 virtual bool UsingDefaults()
const {
return true; }
45 void TraceIf(
unsigned int n, std::string
const&s)
46 {
if (n) Trace(n, s); }
52 unsigned int Tracing(
unsigned int nr,
unsigned int minLevel)
const 53 {
return (UsingDefaults() && m_level >= minLevel) ? nr : 0; }
62 #define CRYPTOPP_TRACER_CONSTRUCTOR(DERIVED) \ 63 public: DERIVED(unsigned int level = 0) : Tracer(level) {} 65 #define CRYPTOPP_BEGIN_TRACER_CLASS_1(DERIVED, BASE1) \ 66 class DERIVED : virtual public BASE1, public NotCopyable { CRYPTOPP_TRACER_CONSTRUCTOR(DERIVED) 68 #define CRYPTOPP_BEGIN_TRACER_CLASS_2(DERIVED, BASE1, BASE2) \ 69 class DERIVED : virtual public BASE1, virtual public BASE2, public NotCopyable { CRYPTOPP_TRACER_CONSTRUCTOR(DERIVED) 71 #define CRYPTOPP_END_TRACER_CLASS }; 76 #define CRYPTOPP_BEGIN_TRACER_EVENTS(UNIQUENR) enum { EVENTBASE = UNIQUENR, 77 #define CRYPTOPP_TRACER_EVENT(EVENTNAME) EventNr_##EVENTNAME, 78 #define CRYPTOPP_END_TRACER_EVENTS }; 90 #define CRYPTOPP_TRACER_EVENT_METHODS(EVENTNAME, LOGLEVEL) \ 91 virtual unsigned int Trace##EVENTNAME() const { return Tracing(EventNr_##EVENTNAME, LOGLEVEL); } \ 92 virtual void Trace##EVENTNAME(std::string const& s) { TraceIf(Trace##EVENTNAME(), s); } 110 CallStack const* Prev()
const {
return m_prev; }
111 virtual std::string Format()
const;
123 std::string Format()
const;
134 std::string Format()
const;
142 CRYPTOPP_BEGIN_TRACER_EVENTS(0x48752841)
143 CRYPTOPP_TRACER_EVENT(NoWaitLoop)
144 CRYPTOPP_END_TRACER_EVENTS
145 CRYPTOPP_TRACER_EVENT_METHODS(NoWaitLoop, 1)
146 CRYPTOPP_END_TRACER_CLASS
161 static unsigned int MaxWaitObjects();
166 void SetNoWait(
CallStack const& callStack);
167 void ScheduleEvent(
double milliseconds,
CallStack const& callStack);
169 bool Wait(
unsigned long milliseconds);
171 #ifdef USE_WINDOWS_STYLE_SOCKETS 172 # ifndef CRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY_562 177 void AddHandle(HANDLE handle,
CallStack const& callStack);
179 void AddReadFd(
int fd,
CallStack const& callStack);
180 void AddWriteFd(
int fd,
CallStack const& callStack);
186 #ifdef USE_WINDOWS_STYLE_SOCKETS 187 void CreateThreads(
unsigned int count);
188 std::vector<HANDLE> m_handles;
189 std::vector<WaitingThreadData *> m_threads;
190 HANDLE m_startWaiting;
191 HANDLE m_stopWaiting;
193 fd_set m_readfds, m_writefds;
197 double m_firstEventTime;
200 #ifdef USE_WINDOWS_STYLE_SOCKETS 201 typedef size_t LastResultType;
203 typedef int LastResultType;
205 enum { LASTRESULT_NOWAIT = -1, LASTRESULT_SCHEDULED = -2, LASTRESULT_TIMEOUT = -3 };
206 LastResultType m_lastResult;
207 unsigned int m_sameResultCount;
209 void SetLastResult(LastResultType result);
210 void DetectNoWait(LastResultType result,
CallStack const& callStack);
Base class for all exceptions thrown by Crypto++.
container of wait objects
Utility functions for the Crypto++ library.
Abstract base classes that provide a uniform interface to this library.
Library configuration file.
exception thrown by WaitObjectContainer
Crypto++ library namespace.
Ensures an object is not copyable.