Add custom headers to MPinSDK

Added custom headers that MPinSDK will send upon each request.
Added visual studio 2015 project.
Fixed CvTime compilation issue with windows platform sdk v14.


Project: 
http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/commit/50a8169a
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/tree/50a8169a
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/diff/50a8169a

Branch: refs/heads/master
Commit: 50a8169a7062b963e39e9fd0dc895719d51e261b
Parents: ac6536c
Author: Slav Klenov <[email protected]>
Authored: Thu Jul 7 17:42:16 2016 +0300
Committer: Slav Klenov <[email protected]>
Committed: Thu Jul 7 17:42:16 2016 +0300

----------------------------------------------------------------------
 .gitignore                                      |   3 +
 ext/cvshared/cpp/include/CvTime.h               |  15 +-
 project/visual_studio_2015/mpin_sdk.sln         |  41 ++++
 project/visual_studio_2015/mpin_sdk.vcxproj     | 145 +++++++++++++
 .../visual_studio_2015/mpin_sdk.vcxproj.filters | 204 +++++++++++++++++++
 .../visual_studio_2015/mpin_sdk_test.vcxproj    |  93 +++++++++
 .../mpin_sdk_test.vcxproj.filters               |  24 +++
 .../mpin_sdk_test_common.vcxproj                |  90 ++++++++
 .../mpin_sdk_test_common.vcxproj.filters        |  36 ++++
 project/visual_studio_2015/unit_tests.vcxproj   |  94 +++++++++
 .../unit_tests.vcxproj.filters                  |  24 +++
 src/mpin_sdk.cpp                                |  16 +-
 src/mpin_sdk.h                                  |   2 +
 13 files changed, 776 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/50a8169a/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 3e0ce62..c32d55d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,9 @@ dist/
 *.opensdf
 *.suo
 *.user
+.vs/
+*.VC.db
+*.VC.opendb
 *tokens.json
 *users.json
 cvlog.txt

http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/50a8169a/ext/cvshared/cpp/include/CvTime.h
----------------------------------------------------------------------
diff --git a/ext/cvshared/cpp/include/CvTime.h 
b/ext/cvshared/cpp/include/CvTime.h
index 3401b43..4ca6268 100644
--- a/ext/cvshared/cpp/include/CvTime.h
+++ b/ext/cvshared/cpp/include/CvTime.h
@@ -48,11 +48,6 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY 
WAY OUT OF THE USE OF
        #include "windows.h"
 
        #define CLOCK_REALTIME  0
-       struct timespec
-       {
-               time_t  tv_sec;         /* seconds */
-               time_t  tv_nsec;        /* nanoseconds */
-       };
 
        namespace CvShared
        {
@@ -595,14 +590,14 @@ bool Days::operator>( const Days& aOther ) const  { 
return m_value > aOther.m_val
 
 TimeSpec::TimeSpec()                                                           
{ tv_sec = 0; tv_nsec = 0; }
 TimeSpec::TimeSpec( const struct timespec& aTimespec ) { tv_sec = 
aTimespec.tv_sec; tv_nsec = aTimespec.tv_nsec; }
-TimeSpec::TimeSpec( const Nanosecs& aNanosecs )                { tv_sec = 
aNanosecs.ToSeconds(); tv_nsec = aNanosecs.Value() % Seconds(1).ToNanosecs(); }
-TimeSpec::TimeSpec( const Microsecs& aMicrosecs )      { tv_sec = 
aMicrosecs.ToSeconds(); tv_nsec = Microsecs( aMicrosecs.Value() % 
Seconds(1).ToMicrosecs() ).ToNanosecs(); }
-TimeSpec::TimeSpec( const Millisecs& aMillisecs )      { tv_sec = 
aMillisecs.ToSeconds(); tv_nsec = Millisecs( aMillisecs.Value() % 
Seconds(1).ToMillisecs() ).ToNanosecs(); }
+TimeSpec::TimeSpec( const Nanosecs& aNanosecs )                { tv_sec = 
aNanosecs.ToSeconds(); tv_nsec = (long) aNanosecs.Value() % 
Seconds(1).ToNanosecs(); }
+TimeSpec::TimeSpec( const Microsecs& aMicrosecs )      { tv_sec = 
aMicrosecs.ToSeconds(); tv_nsec = (long) Microsecs( aMicrosecs.Value() % 
Seconds(1).ToMicrosecs() ).ToNanosecs(); }
+TimeSpec::TimeSpec( const Millisecs& aMillisecs )      { tv_sec = 
aMillisecs.ToSeconds(); tv_nsec = (long) Millisecs( aMillisecs.Value() % 
Seconds(1).ToMillisecs() ).ToNanosecs(); }
 TimeSpec::TimeSpec( const Seconds& aSeconds )          { tv_sec = 
aSeconds.Value(); tv_nsec = 0; }
 TimeSpec::TimeSpec( const Minutes& aMinutes )          { tv_sec = 
aMinutes.ToSeconds(); tv_nsec = 0; }
 TimeSpec::TimeSpec( const Hours& aHours )                      { tv_sec = 
aHours.ToSeconds(); tv_nsec = 0; }
 TimeSpec::TimeSpec( const Days& aDays )                                { 
tv_sec = aDays.ToSeconds(); tv_nsec = 0; }
-TimeSpec::TimeSpec( const TimeVal& aTimeval )          { tv_sec = 
aTimeval.tv_sec; tv_nsec = Microsecs( aTimeval.tv_usec ).ToNanosecs(); }     
+TimeSpec::TimeSpec( const TimeVal& aTimeval )          { tv_sec = 
aTimeval.tv_sec; tv_nsec = (long) Microsecs( aTimeval.tv_usec ).ToNanosecs(); } 
     
 
 TimeValue_t TimeSpec::ToNanosecs() const                       { return 
Seconds(tv_sec).ToNanosecs() + Nanosecs(tv_nsec).Value(); }
 TimeValue_t TimeSpec::ToMicrosecs() const                      { return 
Seconds(tv_sec).ToMicrosecs() + Nanosecs(tv_nsec).ToMicrosecs(); }     
@@ -642,7 +637,7 @@ TimeSpec& TimeSpec::operator-=( const TimeSpec& aOther )
                if ( tv_nsec < 0 )
                {
                        --tv_sec;
-                       tv_nsec += Seconds(1).ToNanosecs();
+                       tv_nsec += (long) Seconds(1).ToNanosecs();
                }
        }
        else

http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/50a8169a/project/visual_studio_2015/mpin_sdk.sln
----------------------------------------------------------------------
diff --git a/project/visual_studio_2015/mpin_sdk.sln 
b/project/visual_studio_2015/mpin_sdk.sln
new file mode 100644
index 0000000..b4a1c59
--- /dev/null
+++ b/project/visual_studio_2015/mpin_sdk.sln
@@ -0,0 +1,41 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mpin_sdk", 
"mpin_sdk.vcxproj", "{C47BB154-F9DF-4C88-81C0-A27510A16840}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit_tests", 
"unit_tests.vcxproj", "{A08A5798-A25B-4F9F-88A0-F196222A74F3}"
+       ProjectSection(ProjectDependencies) = postProject
+               {C47BB154-F9DF-4C88-81C0-A27510A16840} = 
{C47BB154-F9DF-4C88-81C0-A27510A16840}
+       EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mpin_sdk_test", 
"mpin_sdk_test.vcxproj", "{39536C4B-3293-4AD4-951F-0C4D5BCE7219}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mpin_sdk_test_common", 
"mpin_sdk_test_common.vcxproj", "{AB7741C8-A26B-4D8D-A0BC-806B5AC86CD9}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               Debug|Win32 = Debug|Win32
+               Release|Win32 = Release|Win32
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {C47BB154-F9DF-4C88-81C0-A27510A16840}.Debug|Win32.ActiveCfg = 
Debug|Win32
+               {C47BB154-F9DF-4C88-81C0-A27510A16840}.Debug|Win32.Build.0 = 
Debug|Win32
+               {C47BB154-F9DF-4C88-81C0-A27510A16840}.Release|Win32.ActiveCfg 
= Release|Win32
+               {C47BB154-F9DF-4C88-81C0-A27510A16840}.Release|Win32.Build.0 = 
Release|Win32
+               {A08A5798-A25B-4F9F-88A0-F196222A74F3}.Debug|Win32.ActiveCfg = 
Debug|Win32
+               {A08A5798-A25B-4F9F-88A0-F196222A74F3}.Debug|Win32.Build.0 = 
Debug|Win32
+               {A08A5798-A25B-4F9F-88A0-F196222A74F3}.Release|Win32.ActiveCfg 
= Release|Win32
+               {A08A5798-A25B-4F9F-88A0-F196222A74F3}.Release|Win32.Build.0 = 
Release|Win32
+               {39536C4B-3293-4AD4-951F-0C4D5BCE7219}.Debug|Win32.ActiveCfg = 
Debug|Win32
+               {39536C4B-3293-4AD4-951F-0C4D5BCE7219}.Debug|Win32.Build.0 = 
Debug|Win32
+               {39536C4B-3293-4AD4-951F-0C4D5BCE7219}.Release|Win32.ActiveCfg 
= Release|Win32
+               {39536C4B-3293-4AD4-951F-0C4D5BCE7219}.Release|Win32.Build.0 = 
Release|Win32
+               {AB7741C8-A26B-4D8D-A0BC-806B5AC86CD9}.Debug|Win32.ActiveCfg = 
Debug|Win32
+               {AB7741C8-A26B-4D8D-A0BC-806B5AC86CD9}.Debug|Win32.Build.0 = 
Debug|Win32
+               {AB7741C8-A26B-4D8D-A0BC-806B5AC86CD9}.Release|Win32.ActiveCfg 
= Release|Win32
+               {AB7741C8-A26B-4D8D-A0BC-806B5AC86CD9}.Release|Win32.Build.0 = 
Release|Win32
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal

http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/50a8169a/project/visual_studio_2015/mpin_sdk.vcxproj
----------------------------------------------------------------------
diff --git a/project/visual_studio_2015/mpin_sdk.vcxproj 
b/project/visual_studio_2015/mpin_sdk.vcxproj
new file mode 100644
index 0000000..123ddfe
--- /dev/null
+++ b/project/visual_studio_2015/mpin_sdk.vcxproj
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" 
xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{C47BB154-F9DF-4C88-81C0-A27510A16840}</ProjectGuid>
+    <RootNamespace>mpin_sdk</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" 
Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" 
Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" 
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" 
Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" 
Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" 
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" 
Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" 
Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)bin\$(ProjectName)\$(Configuration)\</OutDir>
+    <IntDir>bin\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)bin\$(ProjectName)\$(Configuration)\</OutDir>
+    <IntDir>bin\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup 
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      
<AdditionalIncludeDirectories>../../ext/cvshared/cpp/include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;WinHttp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup 
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      
<AdditionalIncludeDirectories>../../ext/cvshared/cpp/include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;WinHttp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\ext\cvshared\cpp\CvString.cpp" />
+    <ClCompile Include="..\..\ext\cvshared\cpp\CvTime.cpp" />
+    <ClCompile Include="..\..\ext\cvshared\cpp\CvXcode.cpp" />
+    <ClCompile Include="..\..\ext\cvshared\cpp\windows\CvHttpRequest.cpp" />
+    <ClCompile Include="..\..\ext\cvshared\cpp\windows\CvLogger.cpp" />
+    <ClCompile Include="..\..\ext\cvshared\cpp\windows\CvMutex.cpp" />
+    <ClCompile Include="..\..\ext\cvshared\cpp\windows\CvThread.cpp" />
+    <ClCompile Include="..\..\src\crypto\aes.c" />
+    <ClCompile Include="..\..\src\crypto\big.c" />
+    <ClCompile Include="..\..\src\crypto\ecp.c" />
+    <ClCompile Include="..\..\src\crypto\ecp2.c" />
+    <ClCompile Include="..\..\src\crypto\ff.c" />
+    <ClCompile Include="..\..\src\crypto\fp.c" />
+    <ClCompile Include="..\..\src\crypto\fp12.c" />
+    <ClCompile Include="..\..\src\crypto\fp2.c" />
+    <ClCompile Include="..\..\src\crypto\fp4.c" />
+    <ClCompile Include="..\..\src\crypto\gcm.c" />
+    <ClCompile Include="..\..\src\crypto\hash.c" />
+    <ClCompile Include="..\..\src\crypto\mpin.c" />
+    <ClCompile Include="..\..\src\crypto\oct.c" />
+    <ClCompile Include="..\..\src\crypto\pair.c" />
+    <ClCompile Include="..\..\src\crypto\rand.c" />
+    <ClCompile Include="..\..\src\crypto\rom.c" />
+    <ClCompile Include="..\..\src\crypto\version.c" />
+    <ClCompile Include="..\..\src\mpin_crypto_non_tee.cpp" />
+    <ClCompile Include="..\..\src\mpin_sdk.cpp" />
+    <ClCompile Include="..\..\src\utils.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\ext\cvshared\cpp\include\CvCommon.h" />
+    <ClInclude Include="..\..\ext\cvshared\cpp\include\CvHttpCommon.h" />
+    <ClInclude Include="..\..\ext\cvshared\cpp\include\CvHttpRequest.h" />
+    <ClInclude Include="..\..\ext\cvshared\cpp\include\CvLogger.h" />
+    <ClInclude Include="..\..\ext\cvshared\cpp\include\CvMutex.h" />
+    <ClInclude Include="..\..\ext\cvshared\cpp\include\CvString.h" />
+    <ClInclude Include="..\..\ext\cvshared\cpp\include\CvThread.h" />
+    <ClInclude Include="..\..\ext\cvshared\cpp\include\CvTime.h" />
+    <ClInclude Include="..\..\ext\cvshared\cpp\include\CvXcode.h" />
+    <ClInclude Include="..\..\src\crypto\clint.h" />
+    <ClInclude Include="..\..\src\crypto\DLLDefines.h" />
+    <ClInclude Include="..\..\src\crypto\mpin.h" />
+    <ClInclude Include="..\..\src\crypto\platform.h" />
+    <ClInclude Include="..\..\src\crypto\version.h" />
+    <ClInclude Include="..\..\src\cv_shared_ptr.h" />
+    <ClInclude Include="..\..\src\json\elements.h" />
+    <ClInclude Include="..\..\src\json\reader.h" />
+    <ClInclude Include="..\..\src\json\visitor.h" />
+    <ClInclude Include="..\..\src\json\writer.h" />
+    <ClInclude Include="..\..\src\mpin_crypto.h" />
+    <ClInclude Include="..\..\src\mpin_crypto_non_tee.h" />
+    <ClInclude Include="..\..\src\mpin_sdk.h" />
+    <ClInclude Include="..\..\src\utf8.h" />
+    <ClInclude Include="..\..\src\utf8\checked.h" />
+    <ClInclude Include="..\..\src\utf8\core.h" />
+    <ClInclude Include="..\..\src\utf8\unchecked.h" />
+    <ClInclude Include="..\..\src\utils.h" />
+    <ClInclude Include="..\..\src\version.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\..\src\json\elements.inl" />
+    <None Include="..\..\src\json\reader.inl" />
+    <None Include="..\..\src\json\writer.inl" />
+    <None Include="unit_tests.vcxproj.filters" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/50a8169a/project/visual_studio_2015/mpin_sdk.vcxproj.filters
----------------------------------------------------------------------
diff --git a/project/visual_studio_2015/mpin_sdk.vcxproj.filters 
b/project/visual_studio_2015/mpin_sdk.vcxproj.filters
new file mode 100644
index 0000000..ee68199
--- /dev/null
+++ b/project/visual_studio_2015/mpin_sdk.vcxproj.filters
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" 
xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+  <ItemGroup>
+    <Filter Include="src">
+      
<UniqueIdentifier>{1f2b4e9c-59f9-4a1f-ad54-75881b53a336}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\crypto">
+      
<UniqueIdentifier>{cd1eafab-bcdb-4e59-aa36-87cd6762cfe3}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\json">
+      
<UniqueIdentifier>{dde06548-f846-45f7-9f2e-2db976eda377}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\utf8">
+      
<UniqueIdentifier>{733f58c9-cbd3-42f6-a6d3-cb6c0bc53272}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="ext">
+      
<UniqueIdentifier>{40bf2383-eb37-43aa-89b4-3292a44ee00c}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="ext\cvshared">
+      
<UniqueIdentifier>{1dc90bf8-1a9d-4f94-bb96-30318d0f9197}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\src\mpin_crypto_non_tee.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\mpin_sdk.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\cvshared\cpp\windows\CvHttpRequest.cpp">
+      <Filter>ext\cvshared</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\cvshared\cpp\windows\CvMutex.cpp">
+      <Filter>ext\cvshared</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\cvshared\cpp\CvTime.cpp">
+      <Filter>ext\cvshared</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\cvshared\cpp\CvString.cpp">
+      <Filter>ext\cvshared</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\cvshared\cpp\windows\CvLogger.cpp">
+      <Filter>ext\cvshared</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\cvshared\cpp\CvXcode.cpp">
+      <Filter>ext\cvshared</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\ext\cvshared\cpp\windows\CvThread.cpp">
+      <Filter>ext\cvshared</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\crypto\aes.c">
+      <Filter>src\crypto</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\crypto\big.c">
+      <Filter>src\crypto</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\crypto\ecp.c">
+      <Filter>src\crypto</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\crypto\ecp2.c">
+      <Filter>src\crypto</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\crypto\ff.c">
+      <Filter>src\crypto</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\crypto\fp.c">
+      <Filter>src\crypto</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\crypto\fp2.c">
+      <Filter>src\crypto</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\crypto\fp4.c">
+      <Filter>src\crypto</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\crypto\fp12.c">
+      <Filter>src\crypto</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\crypto\gcm.c">
+      <Filter>src\crypto</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\crypto\hash.c">
+      <Filter>src\crypto</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\crypto\mpin.c">
+      <Filter>src\crypto</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\crypto\oct.c">
+      <Filter>src\crypto</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\crypto\pair.c">
+      <Filter>src\crypto</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\crypto\rand.c">
+      <Filter>src\crypto</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\crypto\rom.c">
+      <Filter>src\crypto</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\crypto\version.c">
+      <Filter>src\crypto</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\src\utils.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\src\mpin_crypto.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\mpin_crypto_non_tee.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\mpin_sdk.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\json\elements.h">
+      <Filter>src\json</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\json\reader.h">
+      <Filter>src\json</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\json\visitor.h">
+      <Filter>src\json</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\json\writer.h">
+      <Filter>src\json</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\cv_shared_ptr.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\utf8.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\utf8\checked.h">
+      <Filter>src\utf8</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\utf8\core.h">
+      <Filter>src\utf8</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\utf8\unchecked.h">
+      <Filter>src\utf8</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\cvshared\cpp\include\CvCommon.h">
+      <Filter>ext\cvshared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\cvshared\cpp\include\CvHttpCommon.h">
+      <Filter>ext\cvshared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\cvshared\cpp\include\CvHttpRequest.h">
+      <Filter>ext\cvshared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\cvshared\cpp\include\CvMutex.h">
+      <Filter>ext\cvshared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\cvshared\cpp\include\CvTime.h">
+      <Filter>ext\cvshared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\cvshared\cpp\include\CvString.h">
+      <Filter>ext\cvshared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\cvshared\cpp\include\CvLogger.h">
+      <Filter>ext\cvshared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\cvshared\cpp\include\CvXcode.h">
+      <Filter>ext\cvshared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\version.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\ext\cvshared\cpp\include\CvThread.h">
+      <Filter>ext\cvshared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\crypto\clint.h">
+      <Filter>src\crypto</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\crypto\DLLDefines.h">
+      <Filter>src\crypto</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\crypto\mpin.h">
+      <Filter>src\crypto</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\crypto\version.h">
+      <Filter>src\crypto</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\crypto\platform.h">
+      <Filter>src\crypto</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\src\utils.h">
+      <Filter>src</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="..\..\src\json\elements.inl">
+      <Filter>src\json</Filter>
+    </None>
+    <None Include="..\..\src\json\reader.inl">
+      <Filter>src\json</Filter>
+    </None>
+    <None Include="..\..\src\json\writer.inl">
+      <Filter>src\json</Filter>
+    </None>
+    <None Include="unit_tests.vcxproj.filters" />
+  </ItemGroup>
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/50a8169a/project/visual_studio_2015/mpin_sdk_test.vcxproj
----------------------------------------------------------------------
diff --git a/project/visual_studio_2015/mpin_sdk_test.vcxproj 
b/project/visual_studio_2015/mpin_sdk_test.vcxproj
new file mode 100644
index 0000000..0b2a43f
--- /dev/null
+++ b/project/visual_studio_2015/mpin_sdk_test.vcxproj
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" 
xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{39536C4B-3293-4AD4-951F-0C4D5BCE7219}</ProjectGuid>
+    <RootNamespace>mpin_sdk_test</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" 
Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" 
Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" 
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" 
Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" 
Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" 
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" 
Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" 
Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)bin\$(ProjectName)\$(Configuration)\</OutDir>
+    <IntDir>bin\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)bin\$(ProjectName)\$(Configuration)\</OutDir>
+    <IntDir>bin\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup 
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../../src; 
../../ext/cvshared/cpp/include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;WinHttp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup 
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>../../src; 
../../ext/cvshared/cpp/include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;WinHttp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\tests\cmdline_test.cpp" />
+    <ClCompile Include="..\..\tests\contexts\cmdline_context.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="mpin_sdk.vcxproj">
+      <Project>{c47bb154-f9df-4c88-81c0-a27510a16840}</Project>
+    </ProjectReference>
+    <ProjectReference Include="mpin_sdk_test_common.vcxproj">
+      <Project>{ab7741c8-a26b-4d8d-a0bc-806b5ac86cd9}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\tests\contexts\cmdline_context.h" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/50a8169a/project/visual_studio_2015/mpin_sdk_test.vcxproj.filters
----------------------------------------------------------------------
diff --git a/project/visual_studio_2015/mpin_sdk_test.vcxproj.filters 
b/project/visual_studio_2015/mpin_sdk_test.vcxproj.filters
new file mode 100644
index 0000000..8ba0e25
--- /dev/null
+++ b/project/visual_studio_2015/mpin_sdk_test.vcxproj.filters
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" 
xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+  <ItemGroup>
+    <Filter Include="src">
+      
<UniqueIdentifier>{8d8eb6a0-6fa5-40bc-98d7-c54ff7d5cef3}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\contexts">
+      
<UniqueIdentifier>{1f200816-1a1d-4f18-8207-e039c8911a1a}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\tests\cmdline_test.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\tests\contexts\cmdline_context.cpp">
+      <Filter>src\contexts</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\tests\contexts\cmdline_context.h">
+      <Filter>src\contexts</Filter>
+    </ClInclude>
+  </ItemGroup>
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/50a8169a/project/visual_studio_2015/mpin_sdk_test_common.vcxproj
----------------------------------------------------------------------
diff --git a/project/visual_studio_2015/mpin_sdk_test_common.vcxproj 
b/project/visual_studio_2015/mpin_sdk_test_common.vcxproj
new file mode 100644
index 0000000..45face2
--- /dev/null
+++ b/project/visual_studio_2015/mpin_sdk_test_common.vcxproj
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" 
xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{AB7741C8-A26B-4D8D-A0BC-806B5AC86CD9}</ProjectGuid>
+    <RootNamespace>mpin_sdk_test_common</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" 
Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" 
Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" 
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" 
Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" 
Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" 
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" 
Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" 
Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)bin\$(ProjectName)\$(Configuration)\</OutDir>
+    <IntDir>bin\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)bin\$(ProjectName)\$(Configuration)\</OutDir>
+    <IntDir>bin\$(ProjectName)\$(Configuration)\</IntDir>
+    <TargetName>$(ProjectName)</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup 
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../../src; 
../../ext/cvshared/cpp/include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup 
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>../../src; 
../../ext/cvshared/cpp/include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\tests\common\access_number_thread.cpp" />
+    <ClCompile Include="..\..\tests\common\file_storage.cpp" />
+    <ClCompile Include="..\..\tests\common\http_request.cpp" />
+    <ClCompile Include="..\..\tests\common\memory_storage.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\tests\common\access_number_thread.h" />
+    <ClInclude Include="..\..\tests\common\file_storage.h" />
+    <ClInclude Include="..\..\tests\common\http_request.h" />
+    <ClInclude Include="..\..\tests\common\memory_storage.h" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/50a8169a/project/visual_studio_2015/mpin_sdk_test_common.vcxproj.filters
----------------------------------------------------------------------
diff --git a/project/visual_studio_2015/mpin_sdk_test_common.vcxproj.filters 
b/project/visual_studio_2015/mpin_sdk_test_common.vcxproj.filters
new file mode 100644
index 0000000..9c5aefc
--- /dev/null
+++ b/project/visual_studio_2015/mpin_sdk_test_common.vcxproj.filters
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" 
xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+  <ItemGroup>
+    <Filter Include="src">
+      
<UniqueIdentifier>{929ee623-bfc7-49e0-b7cb-71a4eb695eb2}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\tests\common\file_storage.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\tests\common\http_request.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\tests\common\memory_storage.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\tests\common\access_number_thread.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\tests\common\file_storage.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\tests\common\http_request.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\tests\common\memory_storage.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="..\..\tests\common\access_number_thread.h">
+      <Filter>src</Filter>
+    </ClInclude>
+  </ItemGroup>
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/50a8169a/project/visual_studio_2015/unit_tests.vcxproj
----------------------------------------------------------------------
diff --git a/project/visual_studio_2015/unit_tests.vcxproj 
b/project/visual_studio_2015/unit_tests.vcxproj
new file mode 100644
index 0000000..be27489
--- /dev/null
+++ b/project/visual_studio_2015/unit_tests.vcxproj
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" 
xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{A08A5798-A25B-4F9F-88A0-F196222A74F3}</ProjectGuid>
+    <RootNamespace>unit_tests</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" 
Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" 
Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" 
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" 
Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" 
Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" 
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" 
Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" 
Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)bin\$(ProjectName)\$(Configuration)\</OutDir>
+    <IntDir>bin\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)bin\$(ProjectName)\$(Configuration)\</OutDir>
+    <IntDir>bin\$(ProjectName)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup 
Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <AdditionalIncludeDirectories>../../ext/boost; ../../src; 
../../ext/cvshared/cpp/include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;WinHttp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup 
Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <AdditionalIncludeDirectories>../../ext/boost; ../../src; 
../../ext/cvshared/cpp/include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;WinHttp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\tests\contexts\auto_context.cpp" />
+    <ClCompile Include="..\..\tests\unit_tests.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="mpin_sdk.vcxproj">
+      <Project>{c47bb154-f9df-4c88-81c0-a27510a16840}</Project>
+    </ProjectReference>
+    <ProjectReference Include="mpin_sdk_test_common.vcxproj">
+      <Project>{ab7741c8-a26b-4d8d-a0bc-806b5ac86cd9}</Project>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\tests\contexts\auto_context.h" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/50a8169a/project/visual_studio_2015/unit_tests.vcxproj.filters
----------------------------------------------------------------------
diff --git a/project/visual_studio_2015/unit_tests.vcxproj.filters 
b/project/visual_studio_2015/unit_tests.vcxproj.filters
new file mode 100644
index 0000000..93a6d97
--- /dev/null
+++ b/project/visual_studio_2015/unit_tests.vcxproj.filters
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" 
xmlns="http://schemas.microsoft.com/developer/msbuild/2003";>
+  <ItemGroup>
+    <Filter Include="src">
+      
<UniqueIdentifier>{10ea346d-7f81-4894-93cf-de1a2517e2e9}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\contexts">
+      
<UniqueIdentifier>{9f1c3291-16ce-47a2-8ec0-15d6731b6edc}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\tests\unit_tests.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="..\..\tests\contexts\auto_context.cpp">
+      <Filter>src\contexts</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\..\tests\contexts\auto_context.h">
+      <Filter>src\contexts</Filter>
+    </ClInclude>
+  </ItemGroup>
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/50a8169a/src/mpin_sdk.cpp
----------------------------------------------------------------------
diff --git a/src/mpin_sdk.cpp b/src/mpin_sdk.cpp
index 41d34b3..5cfe7a4 100644
--- a/src/mpin_sdk.cpp
+++ b/src/mpin_sdk.cpp
@@ -540,12 +540,20 @@ MPinSDK::HttpResponse MPinSDK::MakeRequest(const String& 
url, HttpMethod method,
     String requestBody = bodyJson.ToString();
     HttpResponse response(url, requestBody);
 
+    StringMap headers = m_customHeaders;
     if(method != IHttpRequest::GET)
     {
-        StringMap headers;
         headers.Put(IHttpRequest::CONTENT_TYPE_HEADER, 
IHttpRequest::JSON_CONTENT_TYPE);
         headers.Put(IHttpRequest::ACCEPT_HEADER, 
IHttpRequest::TEXT_PLAIN_CONTENT_TYPE);
+    }
+
+    if(!headers.empty())
+    {
         r->SetHeaders(headers);
+    }
+
+    if(method != IHttpRequest::GET)
+    {
         r->SetContent(requestBody);
     }
 
@@ -630,12 +638,18 @@ Status MPinSDK::RewriteRelativeUrls()
 
 Status MPinSDK::Init(const StringMap& config, IContext* ctx)
 {
+    return Init(config, ctx, StringMap());
+}
+
+Status MPinSDK::Init(const StringMap& config, IContext* ctx, const StringMap& 
customHeaders)
+{
     if(IsInitilized())
     {
         return Status(Status::OK);
     }
 
     m_context = ctx;
+    m_customHeaders = customHeaders;
 
     if(ctx->GetMPinCryptoType() == CRYPTO_NON_TEE)
     {

http://git-wip-us.apache.org/repos/asf/incubator-milagro-mfa-sdk-core/blob/50a8169a/src/mpin_sdk.h
----------------------------------------------------------------------
diff --git a/src/mpin_sdk.h b/src/mpin_sdk.h
index 77ca6f6..fdaa2ba 100644
--- a/src/mpin_sdk.h
+++ b/src/mpin_sdk.h
@@ -238,6 +238,7 @@ public:
     MPinSDK();
     ~MPinSDK();
     Status Init(const StringMap& config, IN IContext* ctx);
+    Status Init(const StringMap& config, IN IContext* ctx, const StringMap& 
customHeaders);
     void Destroy();
     void ClearUsers();
 
@@ -381,6 +382,7 @@ private:
     util::JsonObject m_clientSettings;
     UsersMap m_users;
     LogoutDataMap m_logoutData;
+    StringMap m_customHeaders;
 };
 
 #endif // _MPIN_SDK_H_


Reply via email to