diff --git a/MSVC/config.h b/MSVC/config.h index 70f6085abfbd71789e66e39daccb492b1bf4e57a..7b7f9b4a922c73d9e7e05317b330c9f8e09ce676 100644 --- a/MSVC/config.h +++ b/MSVC/config.h @@ -62,7 +62,7 @@ systems. This function is required for `alloca.c' support on those systems. #define HAVE_LIBINTL_H 0 /* Define if you have libupnp */ -#define HAVE_LIBUPNP 0 +#define HAVE_LIBUPNP 1 /* Define to 1 if you have the <limits.h> header file. */ #define HAVE_LIMITS_H 1 diff --git a/MSVC/ring-daemon.vcxproj b/MSVC/ring-daemon.vcxproj index 19635e1b9babd61e37c3e4402951cdf5a6e26fc1..af72c609dc5b31d2127c82b38949d874b7d5c877 100644 --- a/MSVC/ring-daemon.vcxproj +++ b/MSVC/ring-daemon.vcxproj @@ -442,7 +442,7 @@ </Command> </PreBuildEvent> <Lib> - <AdditionalDependencies>ws2_32.lib;iphlpapi.lib;kernel32.lib;advapi32.lib;avcodec.lib;avdevice.lib;avfilter.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;libsamplerate.lib;libsndfile.lib;libgnutls.lib;lib_json.lib;opendht.lib;argon.lib;blake.lib;pcre.lib;pjlib.lib;pjlib_util.lib;pjmedia.lib;pjmedia_codec.lib;pjnath.lib;pjsip_core.lib;pjsip_simple.lib;pjsip_ua.lib;pjsua2_lib.lib;pjsua_lib.lib;yaml-cpp.lib;PA_UWP_TEST.lib;libspeex-pj.lib;cryptlib.lib;libboost_random-vc140-mt-1_61.lib;libboost_random-vc140-mt-gd-1_61.lib;libboost_system-vc140-mt-1_61.lib;libboost_system-vc140-mt-gd-1_61.lib;libboost_thread-vc140-mt-1_61.lib;libboost_thread-vc140-mt-gd-1_61.lib;libboost_date_time-vc140-mt-1_61.lib;libboost_date_time-vc140-mt-gd-1_61.lib;libboost_chrono-vc140-mt-1_61.lib;libboost_chrono-vc140-mt-gd-1_61.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalDependencies>ws2_32.lib;iphlpapi.lib;kernel32.lib;advapi32.lib;avcodec.lib;avdevice.lib;avfilter.lib;avformat.lib;avutil.lib;swresample.lib;swscale.lib;libsamplerate.lib;libsndfile.lib;libgnutls.lib;lib_json.lib;opendht.lib;argon.lib;blake.lib;pcre.lib;pjlib.lib;pjlib_util.lib;pjmedia.lib;pjmedia_codec.lib;pjnath.lib;pjsip_core.lib;pjsip_simple.lib;pjsip_ua.lib;pjsua2_lib.lib;pjsua_lib.lib;yaml-cpp.lib;PA_UWP_TEST.lib;libupnp.lib;libspeex-pj.lib;cryptlib.lib;system.lib;random.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalLibraryDirectories>..\..\FFmpegInterop\ffmpeg\Build\Windows10\x64\bin;..\contrib\lib\x64;..\contrib\boost\stage\lib</AdditionalLibraryDirectories> <AdditionalOptions>/ignore:4006 /ignore:4221 %(AdditionalOptions)</AdditionalOptions> <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration> diff --git a/src/client/ring_signal.cpp b/src/client/ring_signal.cpp index b57fbdfb7f90c21ce35287950f9a92bc7ad1955d..86f6de1ed09f40fc61b95cabe1ac315858dd5782 100644 --- a/src/client/ring_signal.cpp +++ b/src/client/ring_signal.cpp @@ -77,6 +77,7 @@ getSignalHandlers() #endif #ifdef WIN32_NATIVE exported_callback<DRing::ConfigurationSignal::GetAppDataPath>(), + exported_callback<DRing::ConfigurationSignal::GetAppUserName>(), #endif /* Presence */ diff --git a/src/dring/configurationmanager_interface.h b/src/dring/configurationmanager_interface.h index 050290b7b330706b1039f59c4ca1423052bc018a..6e2f24154b580310c654d86981d72643e6d4dba8 100644 --- a/src/dring/configurationmanager_interface.h +++ b/src/dring/configurationmanager_interface.h @@ -259,6 +259,10 @@ struct ConfigurationSignal { constexpr static const char* name = "GetAppDataPath"; using cb_type = void(std::vector<std::string>* paths); }; + struct GetAppUserName { + constexpr static const char* name = "GetAppUserName"; + using cb_type = void(std::vector<std::string>* names); + }; #endif }; diff --git a/src/fileutils.cpp b/src/fileutils.cpp index 7b3a61c13c74845c4f46bef19e2d1e920d90c792..6cc11bfab4c5365900041d023fcfc41585860798 100644 --- a/src/fileutils.cpp +++ b/src/fileutils.cpp @@ -247,8 +247,12 @@ writeTime(const std::string& path) if (ret) throw std::runtime_error("Can't check write time for: " + path); return std::chrono::system_clock::from_time_t(s.st_mtime); +#else +#if WIN32_NATIVE + HANDLE h = CreateFile2(ring::to_wstring(path).c_str(), GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, nullptr); #else HANDLE h = CreateFileW(ring::to_wstring(path).c_str(), GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr); +#endif if (h == INVALID_HANDLE_VALUE) throw std::runtime_error("Can't open: " + path); FILETIME lastWriteTime; diff --git a/src/fileutils.h b/src/fileutils.h index 454f7d7e814a7b8eeefda99e35965f3ca4b9e300..95c0e2e6f0d51d046fb48ec9af8818f7ddd37d5b 100644 --- a/src/fileutils.h +++ b/src/fileutils.h @@ -25,8 +25,12 @@ #include <vector> #include <chrono> +#ifndef WIN32_NATIVE #define PROTECTED_GETENV(str) ({char *envvar_ = getenv((str)); \ envvar_ ? envvar_ : "";}) +#else +#define PROTECTED_GETENV(str) ({char *envvar_ = "" }) +#endif #define XDG_DATA_HOME (PROTECTED_GETENV("XDG_DATA_HOME")) #define XDG_CONFIG_HOME (PROTECTED_GETENV("XDG_CONFIG_HOME")) diff --git a/src/hooks/urlhook.cpp b/src/hooks/urlhook.cpp index dedfc563bedcccdc815613e2a519763d2eadb7fd..f2fecb1bcc9ae7c8fbe16c76211be9c8993fdcde 100644 --- a/src/hooks/urlhook.cpp +++ b/src/hooks/urlhook.cpp @@ -28,7 +28,11 @@ int UrlHook::runAction(const std::string &command, const std::string &args) //FIXME : use fork and execve, so no need to escape shell arguments const std::string cmd = command + (args.empty() ? "" : " ") + "\"" + args + "\" &"; +#ifndef WIN32_NATIVE return system(cmd.c_str()); +#else + return 0; +#endif } } // namespace ring diff --git a/src/logger.cpp b/src/logger.cpp index 222ee91374a800c5b60d4c9c3e21176287741faf..ac8859494377f4cb7e162053baf5643c50fcffdd 100644 --- a/src/logger.cpp +++ b/src/logger.cpp @@ -174,12 +174,12 @@ vlogger(const int level, const char *format, va_list ap) WORD color_prefix = LIGHT_GREEN; #else WORD color_prefix = FOREGROUND_GREEN; -#endif - WORD color_header = CYAN; HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO consoleInfo; WORD saved_attributes; #endif + WORD color_header = CYAN; +#endif switch (level) { case LOG_ERR: @@ -191,8 +191,10 @@ vlogger(const int level, const char *format, va_list ap) } #ifdef _WIN32 +#if !defined(WIN32_NATIVE) GetConsoleScreenBufferInfo(hConsole, &consoleInfo); saved_attributes = consoleInfo.wAttributes; +#endif #endif // must exist, check LOG_FORMAT @@ -201,7 +203,9 @@ vlogger(const int level, const char *format, va_list ap) #ifndef _WIN32 fputs(color_header, stderr); #else +#if !defined(WIN32_NATIVE) SetConsoleTextAttribute(hConsole, color_header); +#endif #endif std::string ctx(format, sep - format); format = sep + 2; @@ -214,13 +218,17 @@ vlogger(const int level, const char *format, va_list ap) #ifndef _WIN32 fputs(END_COLOR, stderr); #else +#if !defined(WIN32_NATIVE) SetConsoleTextAttribute(hConsole, saved_attributes); +#endif #endif } #ifndef _WIN32 fputs(color_prefix, stderr); #else +#if !defined(WIN32_NATIVE) SetConsoleTextAttribute(hConsole, color_prefix); +#endif #endif vfprintf(stderr, format, ap); @@ -230,7 +238,9 @@ vlogger(const int level, const char *format, va_list ap) #ifndef _WIN32 fputs(END_COLOR, stderr); #else +#if !defined(WIN32_NATIVE) SetConsoleTextAttribute(hConsole, saved_attributes); +#endif #endif } else { diff --git a/src/manager.cpp b/src/manager.cpp index a1db1e23df757958fa39726cae8d6723aee90968..ab0bd13ce8bab264f2c98ddc1d205c53b44324c0 100644 --- a/src/manager.cpp +++ b/src/manager.cpp @@ -141,7 +141,9 @@ static constexpr const char* SIPLOGLEVEL = "SIPLOGLEVEL"; static void setSipLogLevel() { +#ifndef WIN32_NATIVE char* envvar = getenv(SIPLOGLEVEL); + int level = 0; if (envvar != nullptr) { @@ -153,6 +155,9 @@ setSipLogLevel() } pj_log_set_level(level); +#else + pj_log_set_level(0); +#endif } /** @@ -172,6 +177,7 @@ tls_print_logs(int level, const char* msg) static void setGnuTlsLogLevel() { +#ifndef WIN32_NATIVE char* envvar = getenv("RING_TLS_LOGLEVEL"); int level = RING_TLS_LOGLEVEL; @@ -185,6 +191,9 @@ setGnuTlsLogLevel() } gnutls_global_set_log_level(level); +#else + gnutls_global_set_log_level(RING_TLS_LOGLEVEL); +#endif gnutls_global_set_log_function(tls_print_logs); } diff --git a/src/media/libav_utils.cpp b/src/media/libav_utils.cpp index e5072748977349c46f7c98fcde313bd2a781247d..76f73b0a8879cc5dd5ce99ef4b407ad5e4cd5ab2 100644 --- a/src/media/libav_utils.cpp +++ b/src/media/libav_utils.cpp @@ -76,6 +76,7 @@ static constexpr const char* AVLOGLEVEL = "AVLOGLEVEL"; static void setAvLogLevel() { +#ifndef WIN32_NATIVE char* envvar = getenv(AVLOGLEVEL); signed level = AV_LOG_WARNING; @@ -86,6 +87,9 @@ setAvLogLevel() level = std::max(AV_LOG_QUIET, std::min(level, AV_LOG_DEBUG)); } av_log_set_level(level); +#else + av_log_set_level(AV_LOG_WARNING); +#endif } static void diff --git a/src/sip/sipaccount.cpp b/src/sip/sipaccount.cpp index 61311bafcf1236be9d2c24cd267bf37687ccbdee..96142e2ad3573803ca0784329375f354ba45bde6 100644 --- a/src/sip/sipaccount.cpp +++ b/src/sip/sipaccount.cpp @@ -1294,13 +1294,9 @@ std::string SIPAccount::getLoginName() struct passwd * user_info = getpwuid(getuid()); return user_info ? user_info->pw_name : ""; #elif defined (WIN32_NATIVE) - TCHAR username[UNLEN + 1]; - DWORD size = UNLEN + 1; - std::string uname; - if (GetUserName((TCHAR*)username, &size)) { - uname = username; - } - return uname; + std::vector<std::string> unames; + emitSignal<DRing::ConfigurationSignal::GetAppUserName>(&unames); + return unames[0]; #else TCHAR username[UNLEN + 1]; DWORD size = UNLEN + 1; diff --git a/src/winsyslog.c b/src/winsyslog.c index 66235b5b96dd3562bd15d0885162036b1cd66944..dd9522a42a61f8f646f32631759658856bc49b24 100644 --- a/src/winsyslog.c +++ b/src/winsyslog.c @@ -65,7 +65,9 @@ getLastErrorText( // converts "Lasr Error" code into text void closelog(void) { +#ifndef WIN32_NATIVE DeregisterEventSource(loghdl); +#endif free(loghdr); } @@ -83,6 +85,7 @@ void closelog(void) vsprintf(tmp, format, arglist); +#ifndef WIN32_NATIVE arr[0] = tmp; BOOL err = ReportEvent(loghdl, (unsigned short) level, (unsigned short)level, level, NULL, 1, 0, arr, NULL); @@ -92,6 +95,7 @@ void closelog(void) CHAR errText[1024]; puts(getLastErrorText(errText, 1024)); } +#endif } /* Emulator for BSD openlog() routine @@ -106,7 +110,9 @@ void closelog(void) if (loghdl) { closelog(); } +#ifndef WIN32_NATIVE loghdl = RegisterEventSource(NULL, ident); +#endif sprintf(tmp, (logopt & WINLOG_PID) ? "%s[%d]" : "%s", ident, getpid()); loghdr = _strdup(tmp); /* save header for later */ }