diff --git a/build-windows/libpEpasn1/libpEpasn1.vcxproj b/build-windows/libpEpasn1/libpEpasn1.vcxproj index 8a8c7ac0..4b40f2ea 100644 --- a/build-windows/libpEpasn1/libpEpasn1.vcxproj +++ b/build-windows/libpEpasn1/libpEpasn1.vcxproj @@ -9,14 +9,6 @@ Release Win32 - - Debug - x64 - - - Release - x64 - {9A67164D-B8F8-4601-A24B-28AFE774D41C} @@ -38,19 +30,6 @@ true Unicode - - StaticLibrary - true - v141 - Unicode - - - StaticLibrary - false - v141 - true - Unicode - @@ -62,15 +41,9 @@ - - - - - - - $(ProjectDir)..\..\asn.1;$(IncludePath) + $(IncludePath) $(ProjectDir)..\..\asn.1;$(IncludePath) @@ -82,6 +55,7 @@ Level3 Disabled WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + $(ProjectDir)..\..\asn.1 Windows @@ -91,18 +65,6 @@ Generating Code for pEp Sync - - - - - Level3 - Disabled - _DEBUG;_LIB;%(PreprocessorDefinitions) - - - Windows - - Level3 @@ -112,6 +74,7 @@ true true WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + $(ProjectDir)..\..\asn.1 Windows @@ -123,22 +86,6 @@ Generating Code for pEp Sync - - - Level3 - - - MaxSpeed - true - true - NDEBUG;_LIB;%(PreprocessorDefinitions) - - - Windows - true - true - - @@ -149,6 +96,5 @@ - - + \ No newline at end of file diff --git a/build-windows/libpEpasn1/libpEpasn1.vcxproj.filters b/build-windows/libpEpasn1/libpEpasn1.vcxproj.filters index fdebf3b3..19b1114a 100644 --- a/build-windows/libpEpasn1/libpEpasn1.vcxproj.filters +++ b/build-windows/libpEpasn1/libpEpasn1.vcxproj.filters @@ -18,336 +18,975 @@ - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + Header Files - + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files diff --git a/build-windows/pEpEngine.vcxproj b/build-windows/pEpEngine.vcxproj index b400d15c..16a89550 100644 --- a/build-windows/pEpEngine.vcxproj +++ b/build-windows/pEpEngine.vcxproj @@ -43,46 +43,56 @@ true false - $(ProjectDir)\..\..\libetpan\build-windows\include;C:\Program Files %28x86%29\GnuPG\include;$(IncludePath);$(ProjectDir)\asn.1;%ASN1C%\share\asn1c - $(ProjectDir)\..\..\libetpan\build-windows\Debug;$(LibraryPath) + $(IncludePath) + $(LibraryPath) true true true C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\Rule Sets\NativeRecommendedRules.ruleset + + false - $(ProjectDir)\..\..\libetpan\build-windows\include;C:\Program Files %28x86%29\GnuPG\include;$(IncludePath);$(ProjectDir)\asn.1;%ASN1C%\share\asn1c - $(ProjectDir)\..\..\libetpan\build-windows\Release;$(LibraryPath) + $(IncludePath) + $(LibraryPath) true true true C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\Rule Sets\NativeRecommendedRules.ruleset false + + NotUsing Level3 Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;PEPENGINE_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + WIN32;_DEBUG;_WINDOWS;_USRDLL;PEPENGINE_EXPORTS;_CRT_SECURE_NO_WARNINGS;USE_SEQUOIA;%(PreprocessorDefinitions) true false - $(SolutionDir)Tools\asn1c\share\asn1c;%(AdditionalIncludeDirectories) + $(SolutionDir)libetpan\build-windows\include;$(SolutionDir)Tools\asn1c\share\asn1c;$(SolutionDir)sequoia\openpgp-ffi\include;%(AdditionalIncludeDirectories) Default + 4703 Windows true - Rpcrt4.lib;%(AdditionalDependencies) + sequoia_openpgp_ffi.lib;gmp.lib;nettle.lib;hogweed.lib;ws2_32.lib;userenv.lib;dbghelp.lib;Rpcrt4.lib;%(AdditionalDependencies) NotSet + $(SolutionDir)sequoia\target\debug;C:\msys64\mingw32\lib + false + false - - + cargo build --manifest-path="$(SolutionDir)sequoia\Cargo.toml" -p sequoia-openpgp-ffi + + xcopy "$(SolutionDir)sequoia\target\debug\sequoia_openpgp_ffi.lib" "$(TargetDir)" /Y + @@ -91,28 +101,32 @@ MaxSpeed true true - WIN32;NDEBUG;_WINDOWS;_USRDLL;PEPENGINE_EXPORTS;%(PreprocessorDefinitions) + WIN32;NDEBUG;_WINDOWS;_USRDLL;PEPENGINE_EXPORTS;USE_SEQUOIA;%(PreprocessorDefinitions) false false - $(SolutionDir)Tools\asn1c\share\asn1c;%(AdditionalIncludeDirectories) + $(SolutionDir)libetpan\build-windows\include;$(SolutionDir)Tools\asn1c\share\asn1c;$(SolutionDir)sequoia\openpgp-ffi\include;%(AdditionalIncludeDirectories) Default true Guard false + 4703 Windows true true true - Rpcrt4.lib;%(AdditionalDependencies) + sequoia_openpgp_ffi.lib;gmp.lib;nettle.lib;hogweed.lib;ws2_32.lib;userenv.lib;dbghelp.lib;Rpcrt4.lib;%(AdditionalDependencies) + $(SolutionDir)sequoia\target\release;C:\msys64\mingw32\lib - - + cargo build --manifest-path="$(SolutionDir)sequoia\Cargo.toml" --release -p sequoia-openpgp-ffi + + xcopy "$(SolutionDir)sequoia\target\release\sequoia_openpgp_ffi.lib" "$(TargetDir)" /Y + @@ -135,7 +149,7 @@ - + @@ -161,6 +175,7 @@ + @@ -175,8 +190,8 @@ - - + + @@ -205,7 +220,17 @@ {9a67164d-b8f8-4601-a24b-28afe774d41c} + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + \ No newline at end of file diff --git a/build-windows/pEpEngine.vcxproj.filters b/build-windows/pEpEngine.vcxproj.filters index 17b73531..a7947ba9 100644 --- a/build-windows/pEpEngine.vcxproj.filters +++ b/build-windows/pEpEngine.vcxproj.filters @@ -33,9 +33,6 @@ Quelldateien - - Quelldateien - Quelldateien @@ -54,9 +51,6 @@ Quelldateien - - Quelldateien - Quelldateien @@ -120,6 +114,12 @@ Quelldateien + + Quelldateien + + + Quelldateien + @@ -140,15 +140,9 @@ Headerdateien - - Headerdateien - Headerdateien - - Headerdateien - Ressourcendateien @@ -176,9 +170,6 @@ Headerdateien - - Headerdateien - Headerdateien @@ -236,12 +227,6 @@ Headerdateien - - Headerdateien - - - Headerdateien - Headerdateien @@ -257,8 +242,29 @@ Quelldateien + + Headerdateien + + + Headerdateien + + + Headerdateien + + + Headerdateien + + + Headerdateien + + + Headerdateien + + + + \ No newline at end of file diff --git a/build-windows/packages.config b/build-windows/packages.config new file mode 100644 index 00000000..a37b0a25 --- /dev/null +++ b/build-windows/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/etpan_mime.h b/src/etpan_mime.h index 2d6a0bc3..d349ae50 100644 --- a/src/etpan_mime.h +++ b/src/etpan_mime.h @@ -3,6 +3,8 @@ #pragma once +#define _EXPORT_PEP_ENGINE_DLL + #include #include #include diff --git a/src/pEpEngine.c b/src/pEpEngine.c index 6b47dbde..9af63a4b 100644 --- a/src/pEpEngine.c +++ b/src/pEpEngine.c @@ -2155,6 +2155,10 @@ DYNAMIC_API PEP_STATUS log_event( ) { +#if defined(_WIN32) && !defined(NDEBUG) + log_output_debug(title, entity, description, comment); +#endif + // N.B. If testing (so NDEBUG not defined) but this message is spam, // put -D_PEP_SERVICE_LOG_OFF into CFLAGS/CXXFLAGS #if !defined(NDEBUG) && !defined(_PEP_SERVICE_LOG_OFF) diff --git a/src/pEp_internal.h b/src/pEp_internal.h index cf014f5e..d6248712 100644 --- a/src/pEp_internal.h +++ b/src/pEp_internal.h @@ -62,6 +62,7 @@ #include "platform.h" #ifdef WIN32 +#define KEYS_DB windoze_keys_db() #define LOCAL_DB windoze_local_db() #define SYSTEM_DB windoze_system_db() #define LIBGPGME "libgpgme-11.dll" diff --git a/src/pgp_sequoia.c b/src/pgp_sequoia.c index b34914b2..e43d9fe7 100644 --- a/src/pgp_sequoia.c +++ b/src/pgp_sequoia.c @@ -7,7 +7,7 @@ #include "platform.h" #include "pEp_internal.h" -#include "pgp_gpg.h" +#include "pgp_sequoia.h" #include #include @@ -34,6 +34,13 @@ __android_log_print(ANDROID_LOG_DEBUG, "pEpEngine-sequoia", \ ##__VA_ARGS__); \ } while (0) +# elif _WIN32 +# define _T(...) do { \ + char str[256]; \ + snprintf(str, 256, ##__VA_ARGS__); \ + OutputDebugStringA(str); \ + } while (0) + # else # define _T(...) do { \ fprintf(stderr, ##__VA_ARGS__); \ @@ -182,15 +189,27 @@ PEP_STATUS pgp_init(PEP_SESSION session, bool in_first) { PEP_STATUS status = PEP_STATUS_OK; -#define PEP_KEYS_PATH "/.pEp_keys.db" - +#ifdef _WIN32 + int sqlite_result; + sqlite_result = sqlite3_open_v2(KEYS_DB, + &session->key_db, + SQLITE_OPEN_READWRITE + | SQLITE_OPEN_CREATE + | SQLITE_OPEN_FULLMUTEX + | SQLITE_OPEN_PRIVATECACHE, + NULL); +#else // Create the home directory. char *home_env = NULL; #ifndef NDEBUG home_env = getenv("PEP_HOME"); #endif + +#define PEP_KEYS_PATH "/.pEp/keys.db" + if (!home_env) home_env = getenv("HOME"); + if (!home_env) ERROR_OUT(NULL, PEP_INIT_GPGME_INIT_FAILED, "HOME unset"); @@ -201,7 +220,7 @@ PEP_STATUS pgp_init(PEP_SESSION session, bool in_first) if (!path) ERROR_OUT(NULL, PEP_OUT_OF_MEMORY, "out of memory"); - int r = snprintf(path, path_size, "%s" PEP_KEYS_PATH, home_env); + int r = snprintf(path, path_size, "%s" PEP_KEYS_PATH, home_env); assert(r >= 0 && r < path_size); if (r < 0) ERROR_OUT(NULL, PEP_UNKNOWN_ERROR, "snprintf"); @@ -215,6 +234,8 @@ PEP_STATUS pgp_init(PEP_SESSION session, bool in_first) | SQLITE_OPEN_PRIVATECACHE, NULL); free(path); +#endif + if (sqlite_result != SQLITE_OK) ERROR_OUT(NULL, PEP_INIT_CANNOT_OPEN_DB, "opening keys DB: %s", sqlite3_errmsg(session->key_db)); diff --git a/src/platform_windows.cpp b/src/platform_windows.cpp index 937c2f41..04cf1706 100644 --- a/src/platform_windows.cpp +++ b/src/platform_windows.cpp @@ -24,11 +24,15 @@ #define LOCAL_DB_FILENAME "management.db" #define SYSTEM_DB_FILENAME "system.db" +#define KEYS_DB "keys.db" +#define USER_FOLDER_PATH pEpUserFolderPath().c_str() +#define SYSTEM_FOLDER_PATH pEpSystemFolderPath().c_str() #ifndef WC_ERR_INVALID_CHARS #define WC_ERR_INVALID_CHARS 0x00000080 // error for invalid chars #endif + using namespace std; static string utf8_string(wstring wstr) { @@ -136,6 +140,38 @@ static inline string managementPath(const char *file_path, const char *file_name return path; } +static inline string pEpSystemFolderPath(void) +{ + static TCHAR tPath[PATH_BUF_SIZE]; + string path = PER_MACHINE_DIRECTORY; + + // Get SystemFolder Registry value and use if available + bool result = readRegistryString(HKEY_CURRENT_USER, + TEXT("SOFTWARE\\pEp"), TEXT("SystemFolder"), tPath, + PATH_BUF_SIZE, NULL); + + if (result) + path = utf8_string(tPath); + + return path; +} + +static inline string pEpUserFolderPath(void) +{ + static TCHAR tPath[PATH_BUF_SIZE]; + string path = PER_USER_DIRECTORY; + + // Get UserFolder Registry value and use if available + bool result = readRegistryString(HKEY_CURRENT_USER, + TEXT("SOFTWARE\\pEp"), TEXT("UserFolder"), tPath, + PATH_BUF_SIZE, NULL); + + if (result) + path = utf8_string(tPath); + + return path; +} + extern "C" { DYNAMIC_API const char *per_user_directory(void) @@ -231,6 +267,14 @@ void *dlsym(void *handle, const char *symbol) { return (void *) (intptr_t) GetProcAddress((HMODULE) handle, symbol); } +const char *windoze_keys_db(void) { + static string path; + if (path.length() == 0) { + path = managementPath(USER_FOLDER_PATH, KEYS_DB); + } + return path.c_str(); +} + const char *windoze_local_db(void) { static string path; if (path.length() == 0) @@ -397,6 +441,18 @@ void uuid_unparse_upper(pEpUUID uu, uuid_string_t out) } } +void log_output_debug(const char *title, + const char *entity, + const char *description, + const char *comment) +{ + const size_t size = 256; + char str[size]; + + snprintf(str, size, "*** %s %s %s %s\n", title, entity, description, comment); + OutputDebugStringA(str); +} + time_t timegm(struct tm* tm) { return _mkgmtime(tm); } diff --git a/src/platform_windows.h b/src/platform_windows.h index 98f8ad81..866ca93d 100644 --- a/src/platform_windows.h +++ b/src/platform_windows.h @@ -87,11 +87,14 @@ size_t strlcat(char* dst, const char* src, size_t size); char *strnstr(const char *big, const char *little, size_t len); +const char *windoze_keys_db(void); const char *windoze_local_db(void); const char *windoze_system_db(void); const char *gpg_conf(void); const char *gpg_agent_conf(void); +void log_output_debug(const char *title, const char *entity, const char *description, const char *comment); + long random(void); // on Windoze, uuid_t needs pointer semantics