RAII.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #include "hplatform.h"
  2. #ifdef OS_WIN
  3. #ifdef ENABLE_WINDUMP
  4. #include <dbghelp.h>
  5. #ifdef _MSC_VER
  6. #pragma comment(lib,"dbghelp.lib")
  7. #endif
  8. static LONG UnhandledException(EXCEPTION_POINTERS *pException) {
  9. char modulefile[256];
  10. GetModuleFileName(NULL, modulefile, sizeof(modulefile));
  11. char* pos = strrchr(modulefile, '\\');
  12. char* modulefilename = pos + 1;
  13. SYSTEMTIME st;
  14. GetLocalTime(&st);
  15. char filename[256];
  16. snprintf(filename, sizeof(filename), "core_%s_%04d%02d%02d_%02d%02d%02d_%03d.dump",
  17. modulefilename,
  18. st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
  19. HANDLE hDumpFile = CreateFile(filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
  20. MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
  21. dumpInfo.ExceptionPointers = pException;
  22. dumpInfo.ThreadId = GetCurrentThreadId();
  23. dumpInfo.ClientPointers = TRUE;
  24. MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);
  25. CloseHandle(hDumpFile);
  26. return EXCEPTION_EXECUTE_HANDLER;
  27. }
  28. #endif
  29. class WsaRAII {
  30. public:
  31. WsaRAII() {
  32. WSADATA wsadata;
  33. WSAStartup(MAKEWORD(2,2), &wsadata);
  34. #ifdef ENABLE_WINDUMP
  35. SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)UnhandledException);
  36. #endif
  37. }
  38. ~WsaRAII() {
  39. WSACleanup();
  40. }
  41. };
  42. static WsaRAII s_wsa;
  43. #endif
  44. #ifdef WITH_CURL
  45. #include "curl/curl.h"
  46. #ifdef _MSC_VER
  47. //#pragma comment(lib, "libcurl.a")
  48. #pragma comment(lib, "ws2_32.lib")
  49. #pragma comment(lib, "wldap32.lib")
  50. #pragma comment(lib, "advapi32.lib")
  51. #pragma comment(lib, "crypt32.lib")
  52. #endif
  53. class CurlRAII {
  54. public:
  55. CurlRAII() {
  56. curl_global_init(CURL_GLOBAL_ALL);
  57. }
  58. ~CurlRAII() {
  59. curl_global_cleanup();
  60. }
  61. };
  62. static CurlRAII s_curl;
  63. #endif
  64. #ifdef WITH_OPENSSL
  65. #include "openssl/ssl.h"
  66. #include "openssl/err.h"
  67. #ifdef _MSC_VER
  68. //#pragma comment(lib, "libssl.a")
  69. //#pragma comment(lib, "libcrypto.a")
  70. #endif
  71. class OpensslRAII {
  72. public:
  73. OpensslRAII() {
  74. //OPENSSL_init_ssl(OPENSSL_INIT_SSL_DEFAULT, NULL);
  75. SSL_load_error_strings();
  76. SSL_library_init();
  77. }
  78. ~OpensslRAII() {
  79. }
  80. };
  81. static OpensslRAII s_openssl;
  82. #endif