HttpClientHelpers.h 938 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #ifndef UTIL_HTTPCLIENTHELPERS_H
  2. #define UTIL_HTTPCLIENTHELPERS_H
  3. #include <memory>
  4. #include <mutex>
  5. #include <vector>
  6. #include <openssl/crypto.h>
  7. namespace PresenceDetection {
  8. namespace Util {
  9. static std::vector<std::shared_ptr<std::mutex> > g_mutexes;
  10. static void LockCallback(int mode, int type, const char* /*file*/, int /*line*/)
  11. {
  12. if (mode & CRYPTO_LOCK)
  13. g_mutexes[type]->lock();
  14. else
  15. g_mutexes[type]->unlock();
  16. }
  17. static unsigned long ThreadId(void)
  18. {
  19. return (unsigned long)pthread_self();
  20. }
  21. static void InitializeLocks(void)
  22. {
  23. g_mutexes.resize(CRYPTO_num_locks());
  24. for (int i = 0; i < CRYPTO_num_locks(); ++i)
  25. g_mutexes[i] = std::shared_ptr<std::mutex>(new std::mutex());
  26. CRYPTO_set_id_callback(ThreadId);
  27. CRYPTO_set_locking_callback(LockCallback);
  28. }
  29. static void FreeLocks(void)
  30. {
  31. CRYPTO_set_locking_callback(NULL);
  32. }
  33. } // namespace Util
  34. } // namespace PresenceDetection
  35. #endif // UTIL_HTTPCLIENTHELPERS_H