/* */ #include "Platform.h" #include /* _fmode */ #include /* _O_BINARY */ #include // For setlocale, LC_* #include #ifdef HAVE_WINSOCK2_H #ifndef _WIN32_WINNT # define _WIN32_WINNT 0x501u #endif // _WIN32_WINNT #include #undef ERROR #ifdef HAVE_WS2TCPIP_H # include #endif // HAVE_WS2TCPIP_H #endif // HAVE_WINSOCK2_H #ifdef HAVE_OPENSSL # include # include #endif // HAVE_OPENSSL #ifdef HAVE_LIBGCRYPT # include #endif // HAVE_LIBGCRYPT #ifdef HAVE_LIBGNUTLS # include #endif // HAVE_LIBGNUTLS #ifdef ENABLE_ASYNC_DNS # include #endif // ENABLE_ASYNC_DNS #include "DlAbortEx.h" #include "message.h" #include "fmt.h" #include "console.h" namespace aria2 { bool Platform::initialized_ = false; Platform::Platform() { setUp(); } Platform::~Platform() { tearDown(); } bool Platform::setUp() { if (initialized_) { return false; } initialized_ = true; #ifdef ENABLE_NLS setlocale (LC_CTYPE, ""); setlocale (LC_MESSAGES, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); #endif // ENABLE_NLS #ifdef HAVE_OPENSSL // for SSL initialization SSL_load_error_strings(); SSL_library_init(); #endif // HAVE_OPENSSL #ifdef HAVE_LIBGCRYPT if(!gcry_check_version(GCRYPT_VERSION)) { throw DL_ABORT_EX("gcry_check_version() failed."); } gcry_control(GCRYCTL_DISABLE_SECMEM, 0); gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0); #endif // HAVE_LIBGCRYPT #ifdef HAVE_LIBGNUTLS { int r = gnutls_global_init(); if(r != GNUTLS_E_SUCCESS) { throw DL_ABORT_EX(fmt("gnutls_global_init() failed, cause:%s", gnutls_strerror(r))); } } #endif // HAVE_LIBGNUTLS #ifdef CARES_HAVE_ARES_LIBRARY_INIT int aresErrorCode; if((aresErrorCode = ares_library_init(ARES_LIB_INIT_ALL)) != 0) { global::cerr()->printf("ares_library_init() failed:%s\n", ares_strerror(aresErrorCode)); } #endif // CARES_HAVE_ARES_LIBRARY_INIT #ifdef HAVE_WINSOCK2_H WSADATA wsaData; memset(reinterpret_cast(&wsaData), 0, sizeof(wsaData)); if (WSAStartup(MAKEWORD(1, 1), &wsaData)) { throw DL_ABORT_EX(MSG_WINSOCK_INIT_FAILD); } #endif // HAVE_WINSOCK2_H #ifdef __MINGW32__ unsigned int _CRT_fmode = _O_BINARY; #endif // __MINGW32__ return true; } bool Platform::tearDown() { if (!initialized_) { return false; } initialized_ = false; #ifdef HAVE_LIBGNUTLS gnutls_global_deinit(); #endif // HAVE_LIBGNUTLS #ifdef CARES_HAVE_ARES_LIBRARY_CLEANUP ares_library_cleanup(); #endif // CARES_HAVE_ARES_LIBRARY_CLEANUP #ifdef HAVE_WINSOCK2_H WSACleanup(); #endif // HAVE_WINSOCK2_H return true; } bool Platform::isInitialized() { return initialized_; } } // namespace aria2