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