diff --git a/CMakeLists.txt b/CMakeLists.txt index 467ad7815ab0391c2f1ac227b5bf96f27fec5c86..7ff7e868a52f958c7a304b73a022576a88039b18 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required (VERSION 3.1) project (opendht) set (opendht_VERSION_MAJOR 1) -set (opendht_VERSION_MINOR 9.1) +set (opendht_VERSION_MINOR 9.2) set (opendht_VERSION ${opendht_VERSION_MAJOR}.${opendht_VERSION_MINOR}) set (PACKAGE_VERSION ${opendht_VERSION}) set (VERSION "${opendht_VERSION}") @@ -153,6 +153,7 @@ list (APPEND opendht_SOURCES src/peer_discovery.cpp src/network_utils.h src/network_utils.cpp + src/thread_pool.cpp ) list (APPEND opendht_HEADERS @@ -177,6 +178,7 @@ list (APPEND opendht_HEADERS include/opendht/log.h include/opendht/log_enable.h include/opendht/peer_discovery.h + include/opendht/thread_pool.h include/opendht.h ) @@ -199,8 +201,6 @@ if (OPENDHT_PROXY_SERVER) include/opendht/dht_proxy_server.h ) list (APPEND opendht_SOURCES - src/thread_pool.h - src/thread_pool.cpp src/dht_proxy_server.cpp ) endif () diff --git a/MSVC/dhtchat.vcxproj b/MSVC/dhtchat.vcxproj index a840383ada92f1c1eaf7667e2bc52306c3ca8bb9..db92a2b71425fc42f90ef660c0e7027714a8b722 100644 --- a/MSVC/dhtchat.vcxproj +++ b/MSVC/dhtchat.vcxproj @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug|Win32"> <Configuration>Debug</Configuration> @@ -21,32 +21,32 @@ <PropertyGroup Label="Globals"> <ProjectGuid>{8BE7F14D-B227-4D54-9105-7E5473F2D0BA}</ProjectGuid> <RootNamespace>dhtchat</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + <WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion> </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> + <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> + <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset> <WholeProgramOptimization>true</WholeProgramOptimization> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> + <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> + <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset> <WholeProgramOptimization>true</WholeProgramOptimization> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> @@ -86,14 +86,14 @@ <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>..\..\include;..\..\msgpack-c\include;$(ProjectDir)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\include\opendht;$(ProjectDir)..\..\..\msvc\include;$(ProjectDir)..\..\include;$(ProjectDir)..\..\argon2\include;$(ProjectDir)..\..\msgpack-c\include;$(ProjectDir)..\..\jsoncpp\include;$(ProjectDir)..\..\restbed\source;$(ProjectDir)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>OPENDHT_JSONCPP;OPENDHT_PROXY_CLIENT;OPENDHT_PROXY_SERVER;OPENDHT_PUSH_NOTIFICATIONS;_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DisableSpecificWarnings>4804;4267;4244;4800;4273;</DisableSpecificWarnings> <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> </ClCompile> <Link> - <AdditionalDependencies>crypt32.lib;blake.lib;argon.lib;libgnutls.lib;opendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(ProjectDir)..\..\lib\x64</AdditionalLibraryDirectories> + <AdditionalDependencies>restbed.lib;libeay32.lib;ssleay32.lib;crypt32.lib;Argon2Ref.lib;lib_json.lib;libgnutls.lib;libopendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>$(ProjectDir)..\..\..\msvc\lib\$(PlatformTarget);$(ProjectDir)..\..\restbed\build\Release;$(ProjectDir)..\..\restbed\dependency\openssl\out32dll;$(ProjectDir)..\..\argon2\vs2015\Argon2Ref\vs2015\build</AdditionalLibraryDirectories> <AdditionalOptions>/ignore:4049 %(AdditionalOptions)</AdditionalOptions> </Link> </ItemDefinitionGroup> @@ -102,14 +102,14 @@ <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>..\..\include;..\..\msgpack-c\include;$(ProjectDir)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\include\opendht;$(ProjectDir)..\..\..\msvc\include;$(ProjectDir)..\..\include;$(ProjectDir)..\..\argon2\include;$(ProjectDir)..\..\msgpack-c\include;$(ProjectDir)..\..\jsoncpp\include;$(ProjectDir)..\..\restbed\source;$(ProjectDir)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>OPENDHT_JSONCPP;OPENDHT_PROXY_CLIENT;OPENDHT_PROXY_SERVER;OPENDHT_PUSH_NOTIFICATIONS;_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DisableSpecificWarnings>4804;4267;4244;4800;4273;</DisableSpecificWarnings> <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> </ClCompile> <Link> - <AdditionalDependencies>crypt32.lib;blake.lib;argon.lib;libgnutls.lib;opendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(ProjectDir)..\..\lib\x64</AdditionalLibraryDirectories> + <AdditionalDependencies>restbed.lib;libeay32.lib;ssleay32.lib;crypt32.lib;Argon2Ref.lib;lib_json.lib;libgnutls.lib;libopendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>$(ProjectDir)..\..\..\msvc\lib\$(PlatformTarget);$(ProjectDir)..\..\restbed\build\Release;$(ProjectDir)..\..\restbed\dependency\openssl\out32dll;$(ProjectDir)..\..\argon2\vs2015\Argon2Ref\vs2015\build</AdditionalLibraryDirectories> <AdditionalOptions>/ignore:4049 %(AdditionalOptions)</AdditionalOptions> </Link> </ItemDefinitionGroup> @@ -120,16 +120,16 @@ <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>..\..\include;..\..\msgpack-c\include;$(ProjectDir)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\include\opendht;$(ProjectDir)..\..\..\msvc\include;$(ProjectDir)..\..\include;$(ProjectDir)..\..\argon2\include;$(ProjectDir)..\..\msgpack-c\include;$(ProjectDir)..\..\jsoncpp\include;$(ProjectDir)..\..\restbed\source;$(ProjectDir)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>OPENDHT_JSONCPP;OPENDHT_PROXY_CLIENT;OPENDHT_PROXY_SERVER;OPENDHT_PUSH_NOTIFICATIONS;_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DisableSpecificWarnings>4804;4267;4244;4800;4273;</DisableSpecificWarnings> <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> </ClCompile> <Link> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> - <AdditionalDependencies>crypt32.lib;blake.lib;argon.lib;libgnutls.lib;opendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(ProjectDir)..\..\lib\x64</AdditionalLibraryDirectories> + <AdditionalDependencies>restbed.lib;libeay32.lib;ssleay32.lib;crypt32.lib;Argon2Ref.lib;lib_json.lib;libgnutls.lib;libopendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>$(ProjectDir)..\..\..\msvc\lib\$(PlatformTarget);$(ProjectDir)..\..\restbed\build\Release;$(ProjectDir)..\..\restbed\dependency\openssl\out32dll;$(ProjectDir)..\..\argon2\vs2015\Argon2Ref\vs2015\build</AdditionalLibraryDirectories> <AdditionalOptions>/ignore:4049 %(AdditionalOptions)</AdditionalOptions> </Link> </ItemDefinitionGroup> @@ -140,16 +140,16 @@ <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>..\..\include;$(ProjectDir)contrib\build\include;$(ProjectDir)contrib\build\msgpack-c\include;$(ProjectDir)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\include\opendht;$(ProjectDir)..\..\..\msvc\include;$(ProjectDir)..\..\include;$(ProjectDir)..\..\argon2\include;$(ProjectDir)..\..\msgpack-c\include;$(ProjectDir)..\..\jsoncpp\include;$(ProjectDir)..\..\restbed\source;$(ProjectDir)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>OPENDHT_JSONCPP;OPENDHT_PROXY_CLIENT;OPENDHT_PROXY_SERVER;OPENDHT_PUSH_NOTIFICATIONS;_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DisableSpecificWarnings>4804;4267;4244;4800;4273;</DisableSpecificWarnings> <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> </ClCompile> <Link> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> - <AdditionalDependencies>crypt32.lib;Argon2Ref.lib;libgnutls.lib;opendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(ProjectDir)contrib\build\lib\x64;$(ProjectDir)..\..\lib\x64;$(ProjectDir)vs2015\build</AdditionalLibraryDirectories> + <AdditionalDependencies>restbed.lib;libeay32.lib;ssleay32.lib;crypt32.lib;Argon2Ref.lib;lib_json.lib;libgnutls.lib;libopendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>$(ProjectDir)..\..\..\msvc\lib\$(PlatformTarget);$(ProjectDir)..\..\restbed\build\Release;$(ProjectDir)..\..\restbed\dependency\openssl\out32dll;$(ProjectDir)..\..\argon2\vs2015\Argon2Ref\vs2015\build</AdditionalLibraryDirectories> <AdditionalOptions>/ignore:4049 %(AdditionalOptions)</AdditionalOptions> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> </Link> diff --git a/MSVC/dhtnode.vcxproj b/MSVC/dhtnode.vcxproj index 176eb3dcbe6d1b68e7ae5233c6e5480ad30942a0..edc21387bac06e84cc5cd6cb8caa87d26b326193 100644 --- a/MSVC/dhtnode.vcxproj +++ b/MSVC/dhtnode.vcxproj @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug|Win32"> <Configuration>Debug</Configuration> @@ -21,32 +21,32 @@ <PropertyGroup Label="Globals"> <ProjectGuid>{BF92AECF-AA1D-4B05-9D00-0247E92A24B5}</ProjectGuid> <RootNamespace>dhtnode</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + <WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion> </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> + <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> + <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset> <WholeProgramOptimization>true</WholeProgramOptimization> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> + <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> + <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset> <WholeProgramOptimization>true</WholeProgramOptimization> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> @@ -86,14 +86,14 @@ <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>..\..\include;..\..\msgpack-c\include;$(ProjectDir)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\include\opendht;$(ProjectDir)..\..\..\msvc\include;$(ProjectDir)..\..\include;$(ProjectDir)..\..\argon2\include;$(ProjectDir)..\..\msgpack-c\include;$(ProjectDir)..\..\jsoncpp\include;$(ProjectDir)..\..\restbed\source;$(ProjectDir)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>OPENDHT_JSONCPP;OPENDHT_PROXY_CLIENT;OPENDHT_PROXY_SERVER;OPENDHT_PUSH_NOTIFICATIONS;_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DisableSpecificWarnings>4804;4267;4244;4800;4273;4101;</DisableSpecificWarnings> <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> </ClCompile> <Link> - <AdditionalDependencies>crypt32.lib;blake.lib;argon.lib;libgnutls.lib;opendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(ProjectDir)..\..\lib\x64</AdditionalLibraryDirectories> + <AdditionalDependencies>restbed.lib;libeay32.lib;ssleay32.lib;crypt32.lib;Argon2Ref.lib;lib_json.lib;libgnutls.lib;libopendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>$(ProjectDir)..\..\..\msvc\lib\$(PlatformTarget);$(ProjectDir)..\..\restbed\build\Release;$(ProjectDir)..\..\restbed\dependency\openssl\out32dll;$(ProjectDir)..\..\argon2\vs2015\Argon2Ref\vs2015\build</AdditionalLibraryDirectories> <AdditionalOptions>/ignore:4049 %(AdditionalOptions)</AdditionalOptions> </Link> </ItemDefinitionGroup> @@ -102,14 +102,14 @@ <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>..\..\include;..\..\msgpack-c\include;$(ProjectDir)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\include\opendht;$(ProjectDir)..\..\..\msvc\include;$(ProjectDir)..\..\include;$(ProjectDir)..\..\argon2\include;$(ProjectDir)..\..\msgpack-c\include;$(ProjectDir)..\..\jsoncpp\include;$(ProjectDir)..\..\restbed\source;$(ProjectDir)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>OPENDHT_JSONCPP;OPENDHT_PROXY_CLIENT;OPENDHT_PROXY_SERVER;OPENDHT_PUSH_NOTIFICATIONS;_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DisableSpecificWarnings>4804;4267;4244;4800;4273;4101;</DisableSpecificWarnings> <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> </ClCompile> <Link> - <AdditionalDependencies>crypt32.lib;blake.lib;argon.lib;libgnutls.lib;opendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(ProjectDir)..\..\lib\x64</AdditionalLibraryDirectories> + <AdditionalDependencies>restbed.lib;libeay32.lib;ssleay32.lib;crypt32.lib;Argon2Ref.lib;lib_json.lib;libgnutls.lib;libopendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>$(ProjectDir)..\..\..\msvc\lib\$(PlatformTarget);$(ProjectDir)..\..\restbed\build\Release;$(ProjectDir)..\..\restbed\dependency\openssl\out32dll;$(ProjectDir)..\..\argon2\vs2015\Argon2Ref\vs2015\build</AdditionalLibraryDirectories> <AdditionalOptions>/ignore:4049 %(AdditionalOptions)</AdditionalOptions> </Link> </ItemDefinitionGroup> @@ -120,16 +120,16 @@ <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>..\..\include;..\..\msgpack-c\include;$(ProjectDir)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\include\opendht;$(ProjectDir)..\..\..\msvc\include;$(ProjectDir)..\..\include;$(ProjectDir)..\..\argon2\include;$(ProjectDir)..\..\msgpack-c\include;$(ProjectDir)..\..\jsoncpp\include;$(ProjectDir)..\..\restbed\source;$(ProjectDir)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>OPENDHT_JSONCPP;OPENDHT_PROXY_CLIENT;OPENDHT_PROXY_SERVER;OPENDHT_PUSH_NOTIFICATIONS;_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DisableSpecificWarnings>4804;4267;4244;4800;4273;4101;</DisableSpecificWarnings> <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> </ClCompile> <Link> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> - <AdditionalDependencies>crypt32.lib;blake.lib;argon.lib;libgnutls.lib;opendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(ProjectDir)..\..\lib\x64</AdditionalLibraryDirectories> + <AdditionalDependencies>restbed.lib;libeay32.lib;ssleay32.lib;crypt32.lib;Argon2Ref.lib;lib_json.lib;libgnutls.lib;libopendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>$(ProjectDir)..\..\..\msvc\lib\$(PlatformTarget);$(ProjectDir)..\..\restbed\build\Release;$(ProjectDir)..\..\restbed\dependency\openssl\out32dll;$(ProjectDir)..\..\argon2\vs2015\Argon2Ref\vs2015\build</AdditionalLibraryDirectories> <AdditionalOptions>/ignore:4049 %(AdditionalOptions)</AdditionalOptions> </Link> </ItemDefinitionGroup> @@ -140,16 +140,16 @@ <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>..\..\include;$(ProjectDir)contrib\build\include;$(ProjectDir)contrib\build\msgpack-c\include;$(ProjectDir)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\include\opendht;$(ProjectDir)..\..\..\msvc\include;$(ProjectDir)..\..\include;$(ProjectDir)..\..\argon2\include;$(ProjectDir)..\..\msgpack-c\include;$(ProjectDir)..\..\jsoncpp\include;$(ProjectDir)..\..\restbed\source;$(ProjectDir)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>OPENDHT_JSONCPP;OPENDHT_PROXY_CLIENT;OPENDHT_PROXY_SERVER;OPENDHT_PUSH_NOTIFICATIONS;_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DisableSpecificWarnings>4804;4267;4244;4800;4273;4101;</DisableSpecificWarnings> <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> </ClCompile> <Link> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> - <AdditionalDependencies>crypt32.lib;Argon2Ref.lib;libgnutls.lib;opendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(ProjectDir)contrib\build\lib\x64;$(ProjectDir)..\..\lib\x64;$(ProjectDir)vs2015\build</AdditionalLibraryDirectories> + <AdditionalDependencies>restbed.lib;libeay32.lib;ssleay32.lib;crypt32.lib;Argon2Ref.lib;lib_json.lib;libgnutls.lib;libopendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>$(ProjectDir)..\..\..\msvc\lib\$(PlatformTarget);$(ProjectDir)..\..\restbed\build\Release;$(ProjectDir)..\..\restbed\dependency\openssl\out32dll;$(ProjectDir)..\..\argon2\vs2015\Argon2Ref\vs2015\build</AdditionalLibraryDirectories> <AdditionalOptions>/ignore:4049 %(AdditionalOptions)</AdditionalOptions> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> </Link> diff --git a/MSVC/dhtscanner.vcxproj b/MSVC/dhtscanner.vcxproj index 169b27e2c10a7e88a2d053bf1f52b47ed85206d0..29277fa8db3e7bd3aa16081abd8b2c9fe776c798 100644 --- a/MSVC/dhtscanner.vcxproj +++ b/MSVC/dhtscanner.vcxproj @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug|Win32"> <Configuration>Debug</Configuration> @@ -21,32 +21,32 @@ <PropertyGroup Label="Globals"> <ProjectGuid>{78443BCD-4689-4007-A246-F8F34B27F561}</ProjectGuid> <RootNamespace>dhtscanner</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + <WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion> </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> + <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> + <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset> <WholeProgramOptimization>true</WholeProgramOptimization> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> + <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> + <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset> <WholeProgramOptimization>true</WholeProgramOptimization> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> @@ -86,14 +86,14 @@ <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>..\..\include;..\..\msgpack-c\include;$(ProjectDir)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\include\opendht;$(ProjectDir)..\..\..\msvc\include;$(ProjectDir)..\..\include;$(ProjectDir)..\..\argon2\include;$(ProjectDir)..\..\msgpack-c\include;$(ProjectDir)..\..\jsoncpp\include;$(ProjectDir)..\..\restbed\source;$(ProjectDir)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>OPENDHT_JSONCPP;OPENDHT_PROXY_CLIENT;OPENDHT_PROXY_SERVER;OPENDHT_PUSH_NOTIFICATIONS;_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DisableSpecificWarnings>4804;4267;4244;4800;4273;4101;</DisableSpecificWarnings> <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> </ClCompile> <Link> - <AdditionalDependencies>crypt32.lib;blake.lib;argon.lib;libgnutls.lib;opendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(ProjectDir)..\..\lib\x64</AdditionalLibraryDirectories> + <AdditionalDependencies>restbed.lib;libeay32.lib;ssleay32.lib;crypt32.lib;Argon2Ref.lib;lib_json.lib;libgnutls.lib;libopendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>$(ProjectDir)..\..\..\msvc\lib\$(PlatformTarget);$(ProjectDir)..\..\restbed\build\Release;$(ProjectDir)..\..\restbed\dependency\openssl\out32dll;$(ProjectDir)..\..\argon2\vs2015\Argon2Ref\vs2015\build</AdditionalLibraryDirectories> <AdditionalOptions>/ignore:4049 %(AdditionalOptions)</AdditionalOptions> </Link> </ItemDefinitionGroup> @@ -102,14 +102,14 @@ <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>..\..\include;..\..\msgpack-c\include;$(ProjectDir)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\include\opendht;$(ProjectDir)..\..\..\msvc\include;$(ProjectDir)..\..\include;$(ProjectDir)..\..\argon2\include;$(ProjectDir)..\..\msgpack-c\include;$(ProjectDir)..\..\jsoncpp\include;$(ProjectDir)..\..\restbed\source;$(ProjectDir)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>OPENDHT_JSONCPP;OPENDHT_PROXY_CLIENT;OPENDHT_PROXY_SERVER;OPENDHT_PUSH_NOTIFICATIONS;_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DisableSpecificWarnings>4804;4267;4244;4800;4273;4101;</DisableSpecificWarnings> <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> </ClCompile> <Link> - <AdditionalDependencies>crypt32.lib;blake.lib;argon.lib;libgnutls.lib;opendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(ProjectDir)..\..\lib\x64</AdditionalLibraryDirectories> + <AdditionalDependencies>restbed.lib;libeay32.lib;ssleay32.lib;crypt32.lib;Argon2Ref.lib;lib_json.lib;libgnutls.lib;libopendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>$(ProjectDir)..\..\..\msvc\lib\$(PlatformTarget);$(ProjectDir)..\..\restbed\build\Release;$(ProjectDir)..\..\restbed\dependency\openssl\out32dll;$(ProjectDir)..\..\argon2\vs2015\Argon2Ref\vs2015\build</AdditionalLibraryDirectories> <AdditionalOptions>/ignore:4049 %(AdditionalOptions)</AdditionalOptions> </Link> </ItemDefinitionGroup> @@ -120,16 +120,16 @@ <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>..\..\include;..\..\msgpack-c\include;$(ProjectDir)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\include\opendht;$(ProjectDir)..\..\..\msvc\include;$(ProjectDir)..\..\include;$(ProjectDir)..\..\argon2\include;$(ProjectDir)..\..\msgpack-c\include;$(ProjectDir)..\..\jsoncpp\include;$(ProjectDir)..\..\restbed\source;$(ProjectDir)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>OPENDHT_JSONCPP;OPENDHT_PROXY_CLIENT;OPENDHT_PROXY_SERVER;OPENDHT_PUSH_NOTIFICATIONS;_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DisableSpecificWarnings>4804;4267;4244;4800;4273;4101;</DisableSpecificWarnings> <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> </ClCompile> <Link> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> - <AdditionalDependencies>crypt32.lib;blake.lib;argon.lib;libgnutls.lib;opendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(ProjectDir)..\..\lib\x64</AdditionalLibraryDirectories> + <AdditionalDependencies>restbed.lib;libeay32.lib;ssleay32.lib;crypt32.lib;Argon2Ref.lib;lib_json.lib;libgnutls.lib;libopendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>$(ProjectDir)..\..\..\msvc\lib\$(PlatformTarget);$(ProjectDir)..\..\restbed\build\Release;$(ProjectDir)..\..\restbed\dependency\openssl\out32dll;$(ProjectDir)..\..\argon2\vs2015\Argon2Ref\vs2015\build</AdditionalLibraryDirectories> <AdditionalOptions>/ignore:4049 %(AdditionalOptions)</AdditionalOptions> </Link> </ItemDefinitionGroup> @@ -140,16 +140,16 @@ <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>..\..\include;$(ProjectDir)contrib\build\include;$(ProjectDir)contrib\build\msgpack-c\include;$(ProjectDir)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\include\opendht;$(ProjectDir)..\..\..\msvc\include;$(ProjectDir)..\..\include;$(ProjectDir)..\..\argon2\include;$(ProjectDir)..\..\msgpack-c\include;$(ProjectDir)..\..\jsoncpp\include;$(ProjectDir)..\..\restbed\source;$(ProjectDir)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>OPENDHT_JSONCPP;OPENDHT_PROXY_CLIENT;OPENDHT_PROXY_SERVER;OPENDHT_PUSH_NOTIFICATIONS;_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DisableSpecificWarnings>4804;4267;4244;4800;4273;4101;</DisableSpecificWarnings> <ProgramDataBaseFileName>$(IntDir)vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> </ClCompile> <Link> <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> - <AdditionalDependencies>crypt32.lib;Argon2Ref.lib;libgnutls.lib;opendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(ProjectDir)contrib\build\lib\x64;$(ProjectDir)..\..\lib\x64;$(ProjectDir)vs2015\build</AdditionalLibraryDirectories> + <AdditionalDependencies>restbed.lib;libeay32.lib;ssleay32.lib;crypt32.lib;Argon2Ref.lib;lib_json.lib;libgnutls.lib;libopendht.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>$(ProjectDir)..\..\..\msvc\lib\$(PlatformTarget);$(ProjectDir)..\..\restbed\build\Release;$(ProjectDir)..\..\restbed\dependency\openssl\out32dll;$(ProjectDir)..\..\argon2\vs2015\Argon2Ref\vs2015\build</AdditionalLibraryDirectories> <AdditionalOptions>/ignore:4049 %(AdditionalOptions)</AdditionalOptions> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> </Link> diff --git a/MSVC/opendht.vcxproj b/MSVC/opendht.vcxproj index ef50ae5e16e2024a678dfe2b8e3d39971c76f8d4..7e55758c3b9ed53c63317945e2d01395ee294a29 100644 --- a/MSVC/opendht.vcxproj +++ b/MSVC/opendht.vcxproj @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup Label="ProjectConfigurations"> <ProjectConfiguration Include="Debug|Win32"> <Configuration>Debug</Configuration> @@ -19,6 +19,17 @@ </ProjectConfiguration> </ItemGroup> <ItemGroup> + <ClCompile Include="..\src\dht_proxy_client.cpp" /> + <ClCompile Include="..\src\network_utils.cpp" /> + <ClCompile Include="..\src\op_cache.cpp" /> + <ClCompile Include="..\src\peer_discovery.cpp" /> + <ClCompile Include="..\src\rng.cpp"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\src\thread_pool.cpp" /> <ClCompile Include="wingetopt.c" /> <ClCompile Include="..\src\base64.cpp" /> <ClCompile Include="..\src\callbacks.cpp" /> @@ -39,6 +50,8 @@ <ClCompile Include="..\src\value.cpp" /> </ItemGroup> <ItemGroup> + <ClInclude Include="..\src\network_utils.h" /> + <ClInclude Include="..\src\thread_pool.h" /> <ClInclude Include="unistd.h" /> <ClInclude Include="wingetopt.h" /> <ClInclude Include="..\include\opendht.h" /> @@ -75,32 +88,32 @@ <PropertyGroup Label="Globals"> <ProjectGuid>{711397CE-E5D5-467D-9457-8716C047E50C}</ProjectGuid> <RootNamespace>opendht</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> + <WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion> </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> + <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> + <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset> <WholeProgramOptimization>false</WholeProgramOptimization> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> + <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> + <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset> <WholeProgramOptimization>false</WholeProgramOptimization> <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> @@ -123,33 +136,34 @@ </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <OutDir>$(ProjectDir)..\..\</OutDir> + <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir> <IntDir>$(Platform)\$(Configuration)\</IntDir> - <TargetName>opendhtd</TargetName> + <TargetName>libopendht</TargetName> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(ProjectDir)..\..\</OutDir> + <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir> <IntDir>$(Platform)\$(Configuration)\</IntDir> - <TargetName>opendht</TargetName> + <TargetName>libopendht</TargetName> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <OutDir>$(ProjectDir)..\..\</OutDir> - <TargetName>opendhtd</TargetName> + <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir> + <TargetName>libopendht</TargetName> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <OutDir>$(ProjectDir)..\..\</OutDir> - <TargetName>opendht</TargetName> + <OutDir>$(ProjectDir)..\..\..\msvc\</OutDir> + <TargetName>libopendht</TargetName> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>..\..\include;..\include;..\include\opendht;..\..\msgpack-c\include;</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <DisableSpecificWarnings>4804;4800;4101;4267;4244;4503;</DisableSpecificWarnings> - <AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions> + <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\include\opendht;$(ProjectDir)..\..\..\msvc\include;$(ProjectDir)..\..\include;$(ProjectDir)..\..\argon2\include;$(ProjectDir)..\..\msgpack-c\include;$(ProjectDir)..\..\jsoncpp\include;$(ProjectDir)..\..\restbed\source</AdditionalIncludeDirectories> + <PreprocessorDefinitions>OPENDHT_JSONCPP;OPENDHT_PROXY_CLIENT;OPENDHT_PROXY_SERVER;OPENDHT_PUSH_NOTIFICATIONS;_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4804;4800;4101;4267;4244;4503;4273;</DisableSpecificWarnings> + <AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions> <SuppressStartupBanner>false</SuppressStartupBanner> + <ProgramDataBaseFileName>$(OutDir)lib\$(PlatformTarget)\$(TargetName).pdb</ProgramDataBaseFileName> </ClCompile> <PostBuildEvent> <Command>mkdir $(OutDir)\include @@ -160,7 +174,7 @@ copy ..\include\opendht\*.h $(OutDir)\include\opendht copy ..\include\opendht.h $(OutDir)\include\</Command> </PostBuildEvent> <Lib> - <OutputFile>$(OutDir)\lib\x86\$(TargetName)$(TargetExt)</OutputFile> + <OutputFile>$(OutDir)lib\$(PlatformTarget)\$(TargetName)$(TargetExt)</OutputFile> </Lib> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> @@ -168,10 +182,11 @@ copy ..\include\opendht.h $(OutDir)\include\</Command> <WarningLevel>Level3</WarningLevel> <Optimization>Disabled</Optimization> <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>..\..\include;..\include;..\include\opendht;..\..\msgpack-c\include;</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <DisableSpecificWarnings>4804;4800;4101;4267;4244;4503;</DisableSpecificWarnings> - <AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions> + <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\include\opendht;$(ProjectDir)..\..\..\msvc\include;$(ProjectDir)..\..\include;$(ProjectDir)..\..\argon2\include;$(ProjectDir)..\..\msgpack-c\include;$(ProjectDir)..\..\jsoncpp\include;$(ProjectDir)..\..\restbed\source</AdditionalIncludeDirectories> + <PreprocessorDefinitions>OPENDHT_JSONCPP;OPENDHT_PROXY_CLIENT;OPENDHT_PROXY_SERVER;OPENDHT_PUSH_NOTIFICATIONS;_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4804;4800;4101;4267;4244;4503;4273;</DisableSpecificWarnings> + <AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions> + <ProgramDataBaseFileName>$(OutDir)lib\$(PlatformTarget)\$(TargetName).pdb</ProgramDataBaseFileName> </ClCompile> <PostBuildEvent> <Command>mkdir $(OutDir)\include @@ -182,7 +197,7 @@ copy ..\include\opendht\*.h $(OutDir)\include\opendht copy ..\include\opendht.h $(OutDir)\include\</Command> </PostBuildEvent> <Lib> - <OutputFile>$(OutDir)\lib\x64\$(TargetName)$(TargetExt)</OutputFile> + <OutputFile>$(OutDir)lib\$(PlatformTarget)\$(TargetName)$(TargetExt)</OutputFile> </Lib> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> @@ -192,11 +207,11 @@ copy ..\include\opendht.h $(OutDir)\include\</Command> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>..\..\include;..\include;..\include\opendht;..\..\msgpack-c\include;</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <DisableSpecificWarnings>4804;4800;4101;4267;4244;4503;</DisableSpecificWarnings> - <AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions> - <ProgramDataBaseFileName>$(OutDir)\lib\x86\$(TargetName).pdb</ProgramDataBaseFileName> + <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\include\opendht;$(ProjectDir)..\..\..\msvc\include;$(ProjectDir)..\..\include;$(ProjectDir)..\..\argon2\include;$(ProjectDir)..\..\msgpack-c\include;$(ProjectDir)..\..\jsoncpp\include;$(ProjectDir)..\..\restbed\source</AdditionalIncludeDirectories> + <PreprocessorDefinitions>OPENDHT_JSONCPP;OPENDHT_PROXY_CLIENT;OPENDHT_PROXY_SERVER;OPENDHT_PUSH_NOTIFICATIONS;_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4804;4800;4101;4267;4244;4503;4273;</DisableSpecificWarnings> + <AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions> + <ProgramDataBaseFileName>$(OutDir)lib\$(PlatformTarget)\$(TargetName).pdb</ProgramDataBaseFileName> </ClCompile> <Link> <EnableCOMDATFolding>true</EnableCOMDATFolding> @@ -211,7 +226,7 @@ copy ..\include\opendht\*.h $(OutDir)\include\opendht copy ..\include\opendht.h $(OutDir)\include\</Command> </PostBuildEvent> <Lib> - <OutputFile>$(OutDir)\lib\x86\$(TargetName)$(TargetExt)</OutputFile> + <OutputFile>$(OutDir)lib\$(PlatformTarget)\$(TargetName)$(TargetExt)</OutputFile> <LinkTimeCodeGeneration>false</LinkTimeCodeGeneration> </Lib> </ItemDefinitionGroup> @@ -222,11 +237,11 @@ copy ..\include\opendht.h $(OutDir)\include\</Command> <FunctionLevelLinking>true</FunctionLevelLinking> <IntrinsicFunctions>true</IntrinsicFunctions> <SDLCheck>true</SDLCheck> - <AdditionalIncludeDirectories>$(ProjectDir)contrib\build\include;$(ProjectDir)..\include;$(ProjectDir)..\include\opendht;$(ProjectDir)contrib\build\msgpack-c\include;$(ProjectDir)contrib\build\argon2\include;$(ProjectDir)..\..\include;$(ProjectDir)..\..\argon2\include</AdditionalIncludeDirectories> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories>$(ProjectDir)..\include;$(ProjectDir)..\include\opendht;$(ProjectDir)..\..\..\msvc\include;$(ProjectDir)..\..\include;$(ProjectDir)..\..\argon2\include;$(ProjectDir)..\..\msgpack-c\include;$(ProjectDir)..\..\jsoncpp\include;$(ProjectDir)..\..\restbed\source</AdditionalIncludeDirectories> + <PreprocessorDefinitions>OPENDHT_JSONCPP;OPENDHT_PROXY_CLIENT;OPENDHT_PROXY_SERVER;OPENDHT_PUSH_NOTIFICATIONS;_WINSOCK_DEPRECATED_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_NATIVE;WIN32_LEAN_AND_MEAN;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <DisableSpecificWarnings>4804;4800;4101;4267;4244;4503;4273;</DisableSpecificWarnings> - <AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions> - <ProgramDataBaseFileName>$(OutDir)\lib\x64\$(TargetName).pdb</ProgramDataBaseFileName> + <AdditionalOptions>-D_SCL_SECURE_NO_WARNINGS %(AdditionalOptions)</AdditionalOptions> + <ProgramDataBaseFileName>$(OutDir)lib\$(PlatformTarget)\$(TargetName).pdb</ProgramDataBaseFileName> </ClCompile> <Link> <EnableCOMDATFolding>true</EnableCOMDATFolding> @@ -241,7 +256,7 @@ copy ..\include\opendht\*.h $(OutDir)\include\opendht copy ..\include\opendht.h $(OutDir)\include\</Command> </PostBuildEvent> <Lib> - <OutputFile>$(OutDir)\lib\x64\$(TargetName)$(TargetExt)</OutputFile> + <OutputFile>$(OutDir)lib\$(PlatformTarget)\$(TargetName)$(TargetExt)</OutputFile> <LinkTimeCodeGeneration>false</LinkTimeCodeGeneration> <AdditionalLibraryDirectories> </AdditionalLibraryDirectories> diff --git a/MSVC/opendht.vcxproj.filters b/MSVC/opendht.vcxproj.filters index c0c9bb8605695c2a58e414a0239f62ff9a1ada38..669506257ab60a281e5d37ed6451d986ce58a372 100644 --- a/MSVC/opendht.vcxproj.filters +++ b/MSVC/opendht.vcxproj.filters @@ -53,12 +53,26 @@ <Filter>Source Files\indexation</Filter> </ClCompile> <ClCompile Include="wingetopt.c" /> + <ClCompile Include="..\src\rng.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\op_cache.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\dht_proxy_client.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\peer_discovery.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\network_utils.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="..\src\thread_pool.cpp"> + <Filter>Source Files</Filter> + </ClCompile> </ItemGroup> <ItemGroup> - <ClInclude Include="..\include\opendht\def.h" /> - <ClInclude Include="..\include\opendht\sockaddr.h" /> - <ClInclude Include="..\src\net.h" /> - <ClInclude Include="..\src\parsed_message.h" /> <ClInclude Include="..\src\base64.h"> <Filter>Source Files</Filter> </ClInclude> @@ -139,6 +153,24 @@ </ClInclude> <ClInclude Include="unistd.h" /> <ClInclude Include="wingetopt.h" /> + <ClInclude Include="..\include\opendht\def.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\src\net.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\src\parsed_message.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\include\opendht\sockaddr.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="..\src\network_utils.h"> + <Filter>Header Files\opendht</Filter> + </ClInclude> + <ClInclude Include="..\src\thread_pool.h"> + <Filter>Header Files\opendht</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <Filter Include="Source Files"> diff --git a/configure.ac b/configure.ac index 7797c9ac7ed48447d5773877e9464889cedbc30a..f5b27490d2327d1096f14f3d08d2a552a42fd801 100644 --- a/configure.ac +++ b/configure.ac @@ -1,7 +1,7 @@ dnl define macros m4_define([opendht_major_version], 1) m4_define([opendht_minor_version], 9) -m4_define([opendht_patch_version], 1) +m4_define([opendht_patch_version], 2) m4_define([opendht_version], [opendht_major_version.opendht_minor_version.opendht_patch_version]) diff --git a/doc/dhtnode.1 b/doc/dhtnode.1 index a1b026384eaa894becb93abf857064308c0694b4..69e18eb4184b1ae4e22cdc36c57d3f816ec20357 100644 --- a/doc/dhtnode.1 +++ b/doc/dhtnode.1 @@ -52,6 +52,10 @@ Enable the verbose mode (log to stdout by default) \fB-l\fP \fIlog_file\fP Write log to file instead of stdout +.TP +\fB-L\fP +Write log to syslog instead of stdout + .TP \fB-i\fP Generate cryptographic identity for the node. @@ -60,6 +64,18 @@ Generate cryptographic identity for the node. \fB-d\fP Run the program in daemon mode (will fork in the background). +.TP +\fB-s\fP +Run the program in service mode (non-forking daemon). + +.TP +\fB-D\fP +Enables multicast automatic local peer discovery. + +.TP +\fB-f\fP \fIfile\fP +Specify a file path to persist/load the node state. + .TP \fB-n\fP \fInetwork_id\fP Specify the network id. This let you connect to distinct networks and prevents @@ -67,7 +83,7 @@ the merge of two different networks (available since OpenDHT v0.6.1). .TP \fB-p\fP \fIlocal_port\fP -Use port \fIlocal_port\fP for the program to bind to. +Use UDP port \fIlocal_port\fP for the program to bind to. .TP \fB-b\fP \fIbootstrap_host\fP[:\fIport\fP] diff --git a/include/opendht/dht.h b/include/opendht/dht.h index 5e420f84464ca69d3b04419ad3deea0fc5fb7621..68536db94a1759d30da814b26b240fa346bc583b 100644 --- a/include/opendht/dht.h +++ b/include/opendht/dht.h @@ -79,16 +79,16 @@ public: /** * Get the current status of the node for the given family. */ - NodeStatus getStatus(sa_family_t af) const; + NodeStatus getStatus(sa_family_t af) const override; - NodeStatus getStatus() const { + NodeStatus getStatus() const override { return std::max(getStatus(AF_INET), getStatus(AF_INET6)); } /** * Performs final operations before quitting. */ - void shutdown(ShutdownCallback cb); + void shutdown(ShutdownCallback cb) override; /** * Returns true if the node is running (have access to an open socket). @@ -96,12 +96,12 @@ public: * af: address family. If non-zero, will return true if the node * is running for the provided family. */ - bool isRunning(sa_family_t af = 0) const; + bool isRunning(sa_family_t af = 0) const override; - virtual void registerType(const ValueType& type) { + virtual void registerType(const ValueType& type) override { types.registerType(type); } - const ValueType& getType(ValueType::Id type_id) const { + const ValueType& getType(ValueType::Id type_id) const override { return types.getType(type_id); } @@ -110,18 +110,18 @@ public: * The node is not pinged, so this should be * used to bootstrap efficiently from previously known nodes. */ - void insertNode(const InfoHash& id, const SockAddr&); - void insertNode(const InfoHash& id, const sockaddr* sa, socklen_t salen) { + void insertNode(const InfoHash& id, const SockAddr&) override; + void insertNode(const InfoHash& id, const sockaddr* sa, socklen_t salen) override { insertNode(id, SockAddr(sa, salen)); } - void insertNode(const NodeExport& n) { + void insertNode(const NodeExport& n) override { insertNode(n.id, SockAddr(n.ss, n.sslen)); } - void pingNode(const sockaddr*, socklen_t, DoneCallbackSimple&& cb={}); + void pingNode(const sockaddr*, socklen_t, DoneCallbackSimple&& cb={}) override; - time_point periodic(const uint8_t *buf, size_t buflen, const SockAddr&); - time_point periodic(const uint8_t *buf, size_t buflen, const sockaddr* from, socklen_t fromlen) { + time_point periodic(const uint8_t *buf, size_t buflen, const SockAddr&) override; + time_point periodic(const uint8_t *buf, size_t buflen, const sockaddr* from, socklen_t fromlen) override { return periodic(buf, buflen, SockAddr(from, fromlen)); } @@ -135,14 +135,14 @@ public: cb and donecb won't be called again afterward. * @param f a filter function used to prefilter values. */ - virtual void get(const InfoHash& key, GetCallback cb, DoneCallback donecb={}, Value::Filter&& f={}, Where&& w = {}); - virtual void get(const InfoHash& key, GetCallback cb, DoneCallbackSimple donecb={}, Value::Filter&& f={}, Where&& w = {}) { + virtual void get(const InfoHash& key, GetCallback cb, DoneCallback donecb={}, Value::Filter&& f={}, Where&& w = {}) override; + virtual void get(const InfoHash& key, GetCallback cb, DoneCallbackSimple donecb={}, Value::Filter&& f={}, Where&& w = {}) override { get(key, cb, bindDoneCb(donecb), std::forward<Value::Filter>(f), std::forward<Where>(w)); } - virtual void get(const InfoHash& key, GetCallbackSimple cb, DoneCallback donecb={}, Value::Filter&& f={}, Where&& w = {}) { + virtual void get(const InfoHash& key, GetCallbackSimple cb, DoneCallback donecb={}, Value::Filter&& f={}, Where&& w = {}) override { get(key, bindGetCb(cb), donecb, std::forward<Value::Filter>(f), std::forward<Where>(w)); } - virtual void get(const InfoHash& key, GetCallbackSimple cb, DoneCallbackSimple donecb, Value::Filter&& f={}, Where&& w = {}) { + virtual void get(const InfoHash& key, GetCallbackSimple cb, DoneCallbackSimple donecb, Value::Filter&& f={}, Where&& w = {}) override { get(key, bindGetCb(cb), bindDoneCb(donecb), std::forward<Value::Filter>(f), std::forward<Where>(w)); } /** @@ -155,20 +155,20 @@ public: * @param q a query used to filter values on the remotes before they send a * response. */ - virtual void query(const InfoHash& key, QueryCallback cb, DoneCallback done_cb = {}, Query&& q = {}); - virtual void query(const InfoHash& key, QueryCallback cb, DoneCallbackSimple done_cb = {}, Query&& q = {}) { + virtual void query(const InfoHash& key, QueryCallback cb, DoneCallback done_cb = {}, Query&& q = {}) override; + virtual void query(const InfoHash& key, QueryCallback cb, DoneCallbackSimple done_cb = {}, Query&& q = {}) override { query(key, cb, bindDoneCb(done_cb), std::forward<Query>(q)); } /** * Get locally stored data for the given hash. */ - std::vector<Sp<Value>> getLocal(const InfoHash& key, const Value::Filter& f = {}) const; + std::vector<Sp<Value>> getLocal(const InfoHash& key, const Value::Filter& f = {}) const override; /** * Get locally stored data for the given key and value id. */ - Sp<Value> getLocalById(const InfoHash& key, Value::Id vid) const; + Sp<Value> getLocalById(const InfoHash& key, Value::Id vid) const override; /** * Announce a value on all available protocols (IPv4, IPv6). @@ -180,12 +180,12 @@ public: Sp<Value>, DoneCallback cb=nullptr, time_point created=time_point::max(), - bool permanent = false); + bool permanent = false) override; void put(const InfoHash& key, const Sp<Value>& v, DoneCallbackSimple cb, time_point created=time_point::max(), - bool permanent = false) + bool permanent = false) override { put(key, v, bindDoneCb(cb), created, permanent); } @@ -194,7 +194,7 @@ public: Value&& v, DoneCallback cb=nullptr, time_point created=time_point::max(), - bool permanent = false) + bool permanent = false) override { put(key, std::make_shared<Value>(std::move(v)), cb, created, permanent); } @@ -202,7 +202,7 @@ public: Value&& v, DoneCallbackSimple cb, time_point created=time_point::max(), - bool permanent = false) + bool permanent = false) override { put(key, std::forward<Value>(v), bindDoneCb(cb), created, permanent); } @@ -210,18 +210,18 @@ public: /** * Get data currently being put at the given hash. */ - std::vector<Sp<Value>> getPut(const InfoHash&) const; + std::vector<Sp<Value>> getPut(const InfoHash&) const override; /** * Get data currently being put at the given hash with the given id. */ - Sp<Value> getPut(const InfoHash&, const Value::Id&) const; + Sp<Value> getPut(const InfoHash&, const Value::Id&) const override; /** * Stop any put/announce operation at the given location, * for the value with the given id. */ - bool cancelPut(const InfoHash&, const Value::Id&); + bool cancelPut(const InfoHash&, const Value::Id&) override; /** * Listen on the network for any changes involving a specified hash. @@ -230,28 +230,28 @@ public: * * @return a token to cancel the listener later. */ - virtual size_t listen(const InfoHash&, ValueCallback, Value::Filter={}, Where={}); + size_t listen(const InfoHash&, ValueCallback, Value::Filter={}, Where={}) override; - virtual size_t listen(const InfoHash& key, GetCallback cb, Value::Filter f={}, Where w={}) { + size_t listen(const InfoHash& key, GetCallback cb, Value::Filter f={}, Where w={}) override { return listen(key, [cb](const std::vector<Sp<Value>>& vals, bool expired){ if (not expired) return cb(vals); return true; }, std::forward<Value::Filter>(f), std::forward<Where>(w)); } - virtual size_t listen(const InfoHash& key, GetCallbackSimple cb, Value::Filter f={}, Where w={}) { + size_t listen(const InfoHash& key, GetCallbackSimple cb, Value::Filter f={}, Where w={}) override { return listen(key, bindGetCb(cb), std::forward<Value::Filter>(f), std::forward<Where>(w)); } - virtual bool cancelListen(const InfoHash&, size_t token); + bool cancelListen(const InfoHash&, size_t token) override; /** * Inform the DHT of lower-layer connectivity changes. * This will cause the DHT to assume a public IP address change. * The DHT will recontact neighbor nodes, re-register for listen ops etc. */ - void connectivityChanged(sa_family_t); - void connectivityChanged() { + void connectivityChanged(sa_family_t) override; + void connectivityChanged() override { reported_addr.clear(); connectivityChanged(AF_INET); connectivityChanged(AF_INET6); @@ -261,32 +261,32 @@ public: * Get the list of good nodes for local storage saving purposes * The list is ordered to minimize the back-to-work delay. */ - std::vector<NodeExport> exportNodes() const; + std::vector<NodeExport> exportNodes() const override; - std::vector<ValuesExport> exportValues() const; - void importValues(const std::vector<ValuesExport>&); + std::vector<ValuesExport> exportValues() const override; + void importValues(const std::vector<ValuesExport>&) override; void saveState(const std::string& path) const; void loadState(const std::string& path); - NodeStats getNodesStats(sa_family_t af) const; + NodeStats getNodesStats(sa_family_t af) const override; - std::string getStorageLog() const; - std::string getStorageLog(const InfoHash&) const; + std::string getStorageLog() const override; + std::string getStorageLog(const InfoHash&) const override; - std::string getRoutingTablesLog(sa_family_t) const; - std::string getSearchesLog(sa_family_t) const; - std::string getSearchLog(const InfoHash&, sa_family_t af = AF_UNSPEC) const; + std::string getRoutingTablesLog(sa_family_t) const override; + std::string getSearchesLog(sa_family_t) const override; + std::string getSearchLog(const InfoHash&, sa_family_t af = AF_UNSPEC) const override; - void dumpTables() const; - std::vector<unsigned> getNodeMessageStats(bool in = false) { + void dumpTables() const override; + std::vector<unsigned> getNodeMessageStats(bool in = false) override { return network_engine.getNodeMessageStats(in); } /** * Set the in-memory storage limit in bytes */ - void setStorageLimit(size_t limit = DEFAULT_STORAGE_LIMIT) { + void setStorageLimit(size_t limit = DEFAULT_STORAGE_LIMIT) override { max_store_size = limit; } @@ -294,13 +294,13 @@ public: * Returns the total memory usage of stored values and the number * of stored values. */ - std::pair<size_t, size_t> getStoreSize() const { + std::pair<size_t, size_t> getStoreSize() const override { return {total_store_size, total_values}; } - std::vector<SockAddr> getPublicAddress(sa_family_t family = 0); + std::vector<SockAddr> getPublicAddress(sa_family_t family = 0) override; - void pushNotificationReceived(const std::map<std::string, std::string>&) {} + void pushNotificationReceived(const std::map<std::string, std::string>&) override {} void resubscribe(unsigned) {} private: diff --git a/src/thread_pool.h b/include/opendht/thread_pool.h similarity index 97% rename from src/thread_pool.h rename to include/opendht/thread_pool.h index 0ece5ac242a76df1e8ecf486cffac60db08f6505..814c14f38e35f071bf251c6383e86abf81cd4b66 100644 --- a/src/thread_pool.h +++ b/include/opendht/thread_pool.h @@ -19,6 +19,8 @@ #pragma once +#include "def.h" + #include <condition_variable> #include <vector> #include <queue> @@ -27,7 +29,7 @@ namespace dht { -class ThreadPool { +class OPENDHT_PUBLIC ThreadPool { public: static ThreadPool& computation(); static ThreadPool& io(); diff --git a/include/opendht/utils.h b/include/opendht/utils.h index 0c33160aaab9d66e25e32a30661313250cce18c9..497b62a3f88a7a525132f05190052bea91b90b71 100644 --- a/include/opendht/utils.h +++ b/include/opendht/utils.h @@ -92,6 +92,18 @@ print_dt(DT d) { return std::chrono::duration_cast<std::chrono::duration<double>>(d).count(); } +template <class DT> +static std::string +print_duration(DT d) { + if (d < std::chrono::milliseconds(1)) { + return std::to_string(std::chrono::duration_cast<std::chrono::duration<double, std::micro>>(d).count()) + " us"; + } else if (d < std::chrono::seconds(1)) { + return std::to_string(std::chrono::duration_cast<std::chrono::duration<double, std::milli>>(d).count()) + " ms"; + } else { + return std::to_string(print_dt(d)) + " s"; + } +} + template <typename Duration = duration> class uniform_duration_distribution : public std::uniform_int_distribution<typename Duration::rep> { using Base = std::uniform_int_distribution<typename Duration::rep>; diff --git a/src/Makefile.am b/src/Makefile.am index b1051fda593a5e991ec7410fe1b9943d6de51a43..01ffb1c79e0225a50f60e4967328e11612f3c039 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,7 +2,7 @@ lib_LTLIBRARIES = libopendht.la libopendht_la_CPPFLAGS = @CPPFLAGS@ -I$(top_srcdir)/include/opendht @Argon2_CFLAGS@ @JsonCpp_CFLAGS@ @MsgPack_CFLAGS@ libopendht_la_LIBADD = @Argon2_LIBS@ @JsonCpp_LIBS@ @GnuTLS_LIBS@ @Nettle_LIBS@ -libopendht_la_LDFLAGS = @LDFLAGS@ @Argon2_LDFLAGS@ +libopendht_la_LDFLAGS = @LDFLAGS@ @Argon2_LDFLAGS@ -version-number @OPENDHT_MAJOR_VERSION@:@OPENDHT_MINOR_VERSION@:@OPENDHT_PATCH_VERSION@ libopendht_la_SOURCES = \ dht.cpp \ storage.h \ @@ -29,7 +29,8 @@ libopendht_la_SOURCES = \ log.cpp \ peer_discovery.cpp \ network_utils.h \ - network_utils.cpp + network_utils.cpp \ + thread_pool.cpp if WIN32 libopendht_la_SOURCES += rng.cpp @@ -57,10 +58,11 @@ nobase_include_HEADERS = \ ../include/opendht/log.h \ ../include/opendht/log_enable.h \ ../include/opendht/peer_discovery.h \ - ../include/opendht/rng.h + ../include/opendht/rng.h \ + ../include/opendht/thread_pool.h if ENABLE_PROXY_SERVER -libopendht_la_SOURCES += dht_proxy_server.cpp thread_pool.h thread_pool.cpp +libopendht_la_SOURCES += dht_proxy_server.cpp nobase_include_HEADERS += ../include/opendht/dht_proxy_server.h endif diff --git a/src/dht_proxy_client.cpp b/src/dht_proxy_client.cpp index 1c8f0b371961586e3e35b2d164cf389b8e1ece87..5e40e94b5b608bed3938e058dabcf0a63de11679 100644 --- a/src/dht_proxy_client.cpp +++ b/src/dht_proxy_client.cpp @@ -135,7 +135,14 @@ DhtProxyClient::cancelAllOperations() while (operation != operations_.end()) { if (operation->thread.joinable()) { // Close connection to stop operation? - restbed::Http::close(operation->req); + if (operation->req) { + try { + restbed::Http::close(operation->req); + } catch (const std::exception& e) { + DHT_LOG.w("Error closing socket: %s", e.what()); + } + operation->req.reset(); + } operation->thread.join(); operation = operations_.erase(operation); } else { @@ -157,8 +164,14 @@ DhtProxyClient::cancelAllListeners() if (l->second.thread.joinable()) { // Close connection to stop listener? l->second.state->cancel = true; - if (l->second.req) - restbed::Http::close(l->second.req); + if (l->second.req) { + try { + restbed::Http::close(l->second.req); + } catch (const std::exception& e) { + DHT_LOG.w("Error closing socket: %s", e.what()); + } + l->second.req.reset(); + } l->second.thread.join(); } s.second.listeners.erase(token); @@ -210,12 +223,15 @@ DhtProxyClient::periodic(const uint8_t*, size_t, const SockAddr&) { // Exec all currently stored callbacks scheduler.syncTime(); - if (!callbacks_.empty()) { + decltype(callbacks_) callbacks; + { std::lock_guard<std::mutex> lock(lockCallbacks); - for (auto& callback : callbacks_) - callback(); - callbacks_.clear(); + callbacks = std::move(callbacks_); } + for (auto& callback : callbacks) + callback(); + callbacks.clear(); + // Remove finished operations { std::lock_guard<std::mutex> lock(lockOperations_); @@ -224,7 +240,14 @@ DhtProxyClient::periodic(const uint8_t*, size_t, const SockAddr&) if (*(operation->finished)) { if (operation->thread.joinable()) { // Close connection to stop operation? - restbed::Http::close(operation->req); + if (operation->req) { + try { + restbed::Http::close(operation->req); + } catch (const std::exception& e) { + DHT_LOG.w("Error closing socket: %s", e.what()); + } + operation->req.reset(); + } operation->thread.join(); } operation = operations_.erase(operation); @@ -277,11 +300,13 @@ DhtProxyClient::get(const InfoHash& key, GetCallback cb, DoneCallback donecb, Va if (reader->parse(char_data, char_data + body.size(), &json, &err)) { auto value = std::make_shared<Value>(json); if ((not filter or filter(*value)) and cb) { - std::lock_guard<std::mutex> lock(lockCallbacks); - callbacks_.emplace_back([cb, value, state]() { - if (not state->stop and not cb({value})) - state->stop = true; - }); + { + std::lock_guard<std::mutex> lock(lockCallbacks); + callbacks_.emplace_back([cb, value, state]() { + if (not state->stop and not cb({value})) + state->stop = true; + }); + } loopSignal_(); } } else { @@ -297,11 +322,13 @@ DhtProxyClient::get(const InfoHash& key, GetCallback cb, DoneCallback donecb, Va state->ok = false; } if (donecb) { - std::lock_guard<std::mutex> lock(lockCallbacks); - callbacks_.emplace_back([=](){ - donecb(state->ok, {}); - state->stop = true; - }); + { + std::lock_guard<std::mutex> lock(lockCallbacks); + callbacks_.emplace_back([=](){ + donecb(state->ok, {}); + state->stop = true; + }); + } loopSignal_(); } if (!state->ok) { @@ -423,10 +450,12 @@ DhtProxyClient::doPut(const InfoHash& key, Sp<Value> val, DoneCallback cb, time_ *ok = false; } if (cb) { - std::lock_guard<std::mutex> lock(lockCallbacks); - callbacks_.emplace_back([=](){ - cb(*ok, {}); - }); + { + std::lock_guard<std::mutex> lock(lockCallbacks); + callbacks_.emplace_back([=](){ + cb(*ok, {}); + }); + } loopSignal_(); } if (!ok) { @@ -802,11 +831,13 @@ void DhtProxyClient::sendListen(const std::shared_ptr<restbed::Request> &req, auto expired = json.get("expired", Json::Value(false)).asBool(); auto value = std::make_shared<Value>(json); if ((not filter or filter(*value)) and cb) { - std::lock_guard<std::mutex> lock(lockCallbacks); - callbacks_.emplace_back([cb, value, state, expired]() { - if (not state->cancel and not cb({value}, expired)) - state->cancel = true; - }); + { + std::lock_guard<std::mutex> lock(lockCallbacks); + callbacks_.emplace_back([cb, value, state, expired]() { + if (not state->cancel and not cb({value}, expired)) + state->cancel = true; + }); + } loopSignal_(); } } @@ -875,8 +906,14 @@ DhtProxyClient::doCancelListen(const InfoHash& key, size_t ltoken) // Just stop the request if (listener.thread.joinable()) { // Close connection to stop listener - if (listener.req) - restbed::Http::close(listener.req); + if (listener.req) { + try { + restbed::Http::close(listener.req); + } catch (const std::exception& e) { + DHT_LOG.w("Error closing socket: %s", e.what()); + } + listener.req.reset(); + } listener.thread.join(); } } @@ -939,11 +976,23 @@ DhtProxyClient::restartListeners() for (auto& search: searches_) { for (auto& l: search.second.listeners) { auto& listener = l.second; - auto state = listener.state; - if (listener.thread.joinable()) { + if (auto state = listener.state) state->cancel = true; - if (listener.req) + if (listener.req) { + try { restbed::Http::close(listener.req); + } catch (const std::exception& e) { + DHT_LOG.w("Error closing socket: %s", e.what()); + } + listener.req.reset(); + } + } + } + for (auto& search: searches_) { + for (auto& l: search.second.listeners) { + auto& listener = l.second; + auto state = listener.state; + if (listener.thread.joinable()) { listener.thread.join(); } // Redo listen @@ -1019,17 +1068,19 @@ DhtProxyClient::pushNotificationReceived(const std::map<std::string, std::string getline(ss, substr, ','); ids.emplace_back(std::stoull(substr)); } - std::lock_guard<std::mutex> lock(lockCallbacks); - callbacks_.emplace_back([this, key, token, state, ids]() { - if (state->cancel) return; - std::lock_guard<std::mutex> lock(searchLock_); - auto s = searches_.find(key); - if (s == searches_.end()) return; - auto l = s->second.listeners.find(token); - if (l == s->second.listeners.end()) return; - if (not state->cancel and not l->second.cache.onValuesExpired(ids)) - state->cancel = true; - }); + { + std::lock_guard<std::mutex> lock(lockCallbacks); + callbacks_.emplace_back([this, key, token, state, ids]() { + if (state->cancel) return; + std::lock_guard<std::mutex> lock(searchLock_); + auto s = searches_.find(key); + if (s == searches_.end()) return; + auto l = s->second.listeners.find(token); + if (l == s->second.listeners.end()) return; + if (not state->cancel and not l->second.cache.onValuesExpired(ids)) + state->cancel = true; + }); + } loopSignal_(); } } @@ -1053,8 +1104,14 @@ DhtProxyClient::resubscribe(const InfoHash& key, Listener& listener) auto state = listener.state; if (listener.thread.joinable()) { state->cancel = true; - if (listener.req) - restbed::Http::close(listener.req); + if (listener.req) { + try { + restbed::Http::close(listener.req); + } catch (const std::exception& e) { + DHT_LOG.w("Error closing socket: %s", e.what()); + } + listener.req.reset(); + } listener.thread.join(); } state->cancel = false; diff --git a/src/peer_discovery.cpp b/src/peer_discovery.cpp index 74b466e0d985ffc7e0ab6bda86b61d99f904f561..60fcb7b6757d34ccc711abfe7f4f016540d32996 100644 --- a/src/peer_discovery.cpp +++ b/src/peer_discovery.cpp @@ -24,6 +24,10 @@ #include <Ws2tcpip.h> // needed for ip_mreq definition for multicast #include <Windows.h> #include <cstring> +#if defined(_MSC_VER) +#include <BaseTsd.h> +typedef SSIZE_T ssize_t; +#endif #define close(x) closesocket(x) #define write(s, b, f) send(s, b, (int)strlen(b), 0) #else @@ -178,12 +182,14 @@ PeerDiscovery::DomainPeerDiscovery::listener_setup() sockAddrListen_.setAny(); unsigned int opt = 1; - if (setsockopt(sockfd_, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) < 0) { + if (setsockopt(sockfd_, SOL_SOCKET, SO_REUSEADDR, (char*)&opt, sizeof(opt)) < 0) { std::cerr << "setsockopt SO_REUSEADDR failed: " << strerror(errno) << std::endl; } - if (setsockopt(sockfd_, SOL_SOCKET, SO_REUSEPORT, &opt, sizeof(opt)) < 0) { +#ifdef SO_REUSEPORT + if (setsockopt(sockfd_, SOL_SOCKET, SO_REUSEPORT, (char*)&opt, sizeof(opt)) < 0) { std::cerr << "setsockopt SO_REUSEPORT failed: " << strerror(errno) << std::endl; } +#endif // bind to receive address if (bind(sockfd_, sockAddrListen_.get(), sockAddrListen_.getLength()) < 0){ @@ -202,14 +208,14 @@ PeerDiscovery::DomainPeerDiscovery::socketJoinMulticast(int sockfd, sa_family_t //This option can be used to set the interface for sending outbound //multicast datagrams from the sockets application. config_ipv4.imr_interface.s_addr = htonl(INADDR_ANY); - if( setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_IF, &config_ipv4.imr_interface, sizeof( struct in_addr )) < 0 ) { + if( setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_IF, (char*)&config_ipv4.imr_interface, sizeof( struct in_addr )) < 0 ) { throw std::runtime_error(std::string("Bound Network Interface IPv4 Error: ") + strerror(errno)); } //The IP_MULTICAST_TTL socket option allows the application to primarily //limit the lifetime of the packet in the Internet and prevent it from circulating indefinitely unsigned char ttl4 = 20; - if( setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl4, sizeof( ttl4 )) < 0 ) { + if( setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ttl4, sizeof( ttl4 )) < 0 ) { throw std::runtime_error(std::string("TTL Sockopt Error: ") + strerror(errno)); } @@ -230,13 +236,13 @@ PeerDiscovery::DomainPeerDiscovery::socketJoinMulticast(int sockfd, sa_family_t } */ unsigned int ttl6 = 20; - if( setsockopt(sockfd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &ttl6, sizeof( ttl6 )) < 0 ) { + if( setsockopt(sockfd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (char*)&ttl6, sizeof( ttl6 )) < 0 ) { throw std::runtime_error(std::string("Hop Count Set Error: ") + strerror(errno)); } config_ipv6.ipv6mr_interface = 0; inet_pton(AF_INET6, MULTICAST_ADDRESS_IPV6, &config_ipv6.ipv6mr_multiaddr); - if (setsockopt(sockfd, IPPROTO_IPV6, IPV6_JOIN_GROUP, &config_ipv6, sizeof(config_ipv6)) < 0){ + if (setsockopt(sockfd, IPPROTO_IPV6, IPV6_JOIN_GROUP, (char*)&config_ipv6, sizeof(config_ipv6)) < 0){ throw std::runtime_error(std::string("Member Addition IPv6 Error: ") + strerror(errno)); } break; @@ -317,7 +323,7 @@ PeerDiscovery::DomainPeerDiscovery::listenerpack_thread() if (data_coming > 0) { if (FD_ISSET(stop_readfd, &readfds)) { std::array<uint8_t, 64 * 1024> buf; - recv(stop_readfd, buf.data(), buf.size(), 0); + recv(stop_readfd, (char*)buf.data(), buf.size(), 0); } auto rcv = recvFrom(); diff --git a/src/search.h b/src/search.h index f292e5e681848746d3c55f374eb54e1667b518b3..1bfe610969a3c09a4136df3366648d91379d970f 100644 --- a/src/search.h +++ b/src/search.h @@ -545,6 +545,7 @@ struct Dht::Search { if (a.value->id == vid) return a.value; } + return {}; } bool cancelPut(Value::Id vid) { diff --git a/src/utils.cpp b/src/utils.cpp index b509cbf9bc5dd6a8e336df79f2169439bbba2edd..e267961e6370503163e2db4a798964b1330be285 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -16,6 +16,10 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include "utils.h" #include "sockaddr.h" #include "default_types.h" diff --git a/tools/dhtnode.cpp b/tools/dhtnode.cpp index 3d1937b8322fd2f71dba5a2f336219a209005001..660f3c977234d58ab30e85a1314724220c121884 100644 --- a/tools/dhtnode.cpp +++ b/tools/dhtnode.cpp @@ -308,14 +308,15 @@ void cmd_loop(std::shared_ptr<DhtRunner>& dht, dht_params& params if (op == "g") { std::string rem; std::getline(iss, rem); - dht->get(id, [start](std::shared_ptr<Value> value) { + dht->get(id, [start](const std::vector<std::shared_ptr<Value>>& values) { auto now = std::chrono::high_resolution_clock::now(); - std::cout << "Get: found value (after " << print_dt(now-start) << "s)" << std::endl; - std::cout << "\t" << *value << std::endl; + std::cout << "Get: found " << values.size() << " value(s) after " << print_duration(now-start) << std::endl; + for (const auto& value : values) + std::cout << "\t" << *value << std::endl; return true; }, [start](bool ok) { auto end = std::chrono::high_resolution_clock::now(); - std::cout << "Get: " << (ok ? "completed" : "failure") << " (took " << print_dt(end-start) << "s)" << std::endl; + std::cout << "Get: " << (ok ? "completed" : "failure") << ", took " << print_duration(end-start) << std::endl; }, {}, dht::Where {rem}); } else if (op == "q") { @@ -324,13 +325,13 @@ void cmd_loop(std::shared_ptr<DhtRunner>& dht, dht_params& params dht->query(id, [start](const std::vector<std::shared_ptr<FieldValueIndex>>& field_value_indexes) { auto now = std::chrono::high_resolution_clock::now(); for (auto& index : field_value_indexes) { - std::cout << "Query: found field value index (after " << print_dt(now-start) << "s)" << std::endl; + std::cout << "Query: found field value index after " << print_duration(now-start) << std::endl; std::cout << "\t" << *index << std::endl; } return true; }, [start](bool ok) { auto end = std::chrono::high_resolution_clock::now(); - std::cout << "Query: " << (ok ? "completed" : "failure") << " (took " << print_dt(end-start) << "s)" << std::endl; + std::cout << "Query: " << (ok ? "completed" : "failure") << ", took " << print_duration(end-start) << std::endl; }, dht::Query {rem}); } else if (op == "l") { @@ -365,7 +366,7 @@ void cmd_loop(std::shared_ptr<DhtRunner>& dht, dht_params& params std::vector<uint8_t> {v.begin(), v.end()} }, [start](bool ok) { auto end = std::chrono::high_resolution_clock::now(); - std::cout << "Put: " << (ok ? "success" : "failure") << " (took " << print_dt(end-start) << "s)" << std::endl; + std::cout << "Put: " << (ok ? "success" : "failure") << ", took " << print_duration(end-start) << std::endl; }); } else if (op == "pp") { @@ -378,7 +379,7 @@ void cmd_loop(std::shared_ptr<DhtRunner>& dht, dht_params& params dht->put(id, value, [start,value](bool ok) { auto end = std::chrono::high_resolution_clock::now(); auto flags(std::cout.flags()); - std::cout << "Put: " << (ok ? "success" : "failure") << " (took " << print_dt(end-start) << "s). Value ID: " << std::hex << value->id << std::endl; + std::cout << "Put: " << (ok ? "success" : "failure") << ", took " << print_duration(end-start) << ". Value ID: " << std::hex << value->id << std::endl; std::cout.flags(flags); }, time_point::max(), true); } @@ -399,7 +400,7 @@ void cmd_loop(std::shared_ptr<DhtRunner>& dht, dht_params& params std::vector<uint8_t> {v.begin(), v.end()} }, [start](bool ok) { auto end = std::chrono::high_resolution_clock::now(); - std::cout << "Put signed: " << (ok ? "success" : "failure") << " (took " << print_dt(end-start) << "s)" << std::endl; + std::cout << "Put signed: " << (ok ? "success" : "failure") << " (took " << print_duration(end-start) << "s)" << std::endl; }); } else if (op == "e") { @@ -415,7 +416,7 @@ void cmd_loop(std::shared_ptr<DhtRunner>& dht, dht_params& params std::vector<uint8_t> {v.begin(), v.end()} }, [start](bool ok) { auto end = std::chrono::high_resolution_clock::now(); - std::cout << "Put encrypted: " << (ok ? "success" : "failure") << " (took " << print_dt(end-start) << "s)" << std::endl; + std::cout << "Put encrypted: " << (ok ? "success" : "failure") << " (took " << print_duration(end-start) << std::endl; }); } else if (op == "a") { @@ -423,7 +424,7 @@ void cmd_loop(std::shared_ptr<DhtRunner>& dht, dht_params& params iss >> port; dht->put(id, dht::Value {dht::IpServiceAnnouncement::TYPE.id, dht::IpServiceAnnouncement(port)}, [start](bool ok) { auto end = std::chrono::high_resolution_clock::now(); - std::cout << "Announce: " << (ok ? "success" : "failure") << " (took " << print_dt(end-start) << "s)" << std::endl; + std::cout << "Announce: " << (ok ? "success" : "failure") << " (took " << print_duration(end-start) << std::endl; }); } #ifdef OPENDHT_INDEXATION @@ -446,7 +447,7 @@ void cmd_loop(std::shared_ptr<DhtRunner>& dht, dht_params& params [start](bool ok) { auto end = std::chrono::high_resolution_clock::now(); std::cout << "Pht::lookup: " << (ok ? "done." : "failed.") - << " took " << print_dt(end-start) << "s)" << std::endl; + << " took " << print_duration(end-start) << std::endl; }, exact_match.size() != 0 and exact_match == "false" ? false : true );