mirror of
https://github.com/zeromq/libzmq.git
synced 2024-12-12 10:33:52 +01:00
Merge pull request #4554 from bluca/relicense
Problem: cannot relicense due to missing agreement from 3 authors
This commit is contained in:
commit
87bb4db114
8
.github/workflows/CI.yaml
vendored
8
.github/workflows/CI.yaml
vendored
@ -26,22 +26,18 @@ jobs:
|
|||||||
- os: ubuntu-latest
|
- os: ubuntu-latest
|
||||||
BUILD_TYPE: default
|
BUILD_TYPE: default
|
||||||
PACKAGES: asciidoc xmlto
|
PACKAGES: asciidoc xmlto
|
||||||
CURVE: tweetnacl
|
|
||||||
DRAFT: disabled
|
DRAFT: disabled
|
||||||
POLLER: select
|
POLLER: select
|
||||||
- os: ubuntu-latest
|
- os: ubuntu-latest
|
||||||
BUILD_TYPE: default
|
BUILD_TYPE: default
|
||||||
CURVE: tweetnacl
|
|
||||||
DRAFT: disabled
|
DRAFT: disabled
|
||||||
POLLER: poll
|
POLLER: poll
|
||||||
- os: ubuntu-latest
|
- os: ubuntu-latest
|
||||||
BUILD_TYPE: android
|
BUILD_TYPE: android
|
||||||
CURVE: tweetnacl
|
|
||||||
DRAFT: disabled
|
DRAFT: disabled
|
||||||
- os: ubuntu-latest
|
- os: ubuntu-latest
|
||||||
BUILD_TYPE: coverage
|
BUILD_TYPE: coverage
|
||||||
PACKAGES: libkrb5-dev libnorm-dev libpgm-dev libgnutls28-dev lcov
|
PACKAGES: libkrb5-dev libnorm-dev libpgm-dev libgnutls28-dev lcov
|
||||||
CURVE: tweetnacl
|
|
||||||
DRAFT: enabled
|
DRAFT: enabled
|
||||||
GSSAPI: enabled
|
GSSAPI: enabled
|
||||||
PGM: enabled
|
PGM: enabled
|
||||||
@ -52,7 +48,6 @@ jobs:
|
|||||||
- os: ubuntu-latest
|
- os: ubuntu-latest
|
||||||
BUILD_TYPE: valgrind
|
BUILD_TYPE: valgrind
|
||||||
PACKAGES: valgrind libgnutls28-dev
|
PACKAGES: valgrind libgnutls28-dev
|
||||||
CURVE: tweetnacl
|
|
||||||
DRAFT: enabled
|
DRAFT: enabled
|
||||||
- os: ubuntu-latest
|
- os: ubuntu-latest
|
||||||
BUILD_TYPE: cmake
|
BUILD_TYPE: cmake
|
||||||
@ -102,18 +97,15 @@ jobs:
|
|||||||
- os: ubuntu-latest
|
- os: ubuntu-latest
|
||||||
BUILD_TYPE: abi-compliance-checker
|
BUILD_TYPE: abi-compliance-checker
|
||||||
PACKAGES: abi-dumper abi-compliance-checker
|
PACKAGES: abi-dumper abi-compliance-checker
|
||||||
CURVE: tweetnacl
|
|
||||||
DRAFT: disabled
|
DRAFT: disabled
|
||||||
- os: ubuntu-latest
|
- os: ubuntu-latest
|
||||||
BUILD_TYPE: cmake
|
BUILD_TYPE: cmake
|
||||||
PACKAGES: clang-tidy clang-tools
|
PACKAGES: clang-tidy clang-tools
|
||||||
CURVE: tweetnacl
|
|
||||||
DRAFT: enabled
|
DRAFT: enabled
|
||||||
CXX: clang++
|
CXX: clang++
|
||||||
- os: macos-latest
|
- os: macos-latest
|
||||||
BUILD_TYPE: default
|
BUILD_TYPE: default
|
||||||
PACKAGES: automake autoconf
|
PACKAGES: automake autoconf
|
||||||
CURVE: tweetnacl
|
|
||||||
DRAFT: enabled
|
DRAFT: enabled
|
||||||
- os: macos-latest
|
- os: macos-latest
|
||||||
BUILD_TYPE: default
|
BUILD_TYPE: default
|
||||||
|
1
AUTHORS
1
AUTHORS
@ -69,7 +69,6 @@ Jon Dyte
|
|||||||
Kamil Shakirov
|
Kamil Shakirov
|
||||||
Ken Steele
|
Ken Steele
|
||||||
Kouhei Sutou
|
Kouhei Sutou
|
||||||
Laurent Alebarde
|
|
||||||
Leonardo J. Consoni
|
Leonardo J. Consoni
|
||||||
Lionel Flandrin
|
Lionel Flandrin
|
||||||
Lourens Naudé
|
Lourens Naudé
|
||||||
|
@ -255,13 +255,13 @@ if(NOT MSVC)
|
|||||||
check_cxx_symbol_exists(strlcpy string.h ZMQ_HAVE_STRLCPY)
|
check_cxx_symbol_exists(strlcpy string.h ZMQ_HAVE_STRLCPY)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Select curve encryption library, defaults to tweetnacl To use libsodium instead, use --with-libsodium(must be
|
# Select curve encryption library, defaults to disabled To use libsodium instead, use --with-libsodium(must be
|
||||||
# installed) To disable curve, use --disable-curve
|
# installed) To disable curve, use --disable-curve
|
||||||
|
|
||||||
option(WITH_LIBSODIUM "Use libsodium instead of built-in tweetnacl" ON)
|
option(WITH_LIBSODIUM "Use libsodium" OFF)
|
||||||
option(WITH_LIBSODIUM_STATIC "Use static libsodium library" OFF)
|
option(WITH_LIBSODIUM_STATIC "Use static libsodium library" OFF)
|
||||||
option(ENABLE_LIBSODIUM_RANDOMBYTES_CLOSE "Automatically close libsodium randombytes. Not threadsafe without getrandom()" ON)
|
option(ENABLE_LIBSODIUM_RANDOMBYTES_CLOSE "Automatically close libsodium randombytes. Not threadsafe without getrandom()" ON)
|
||||||
option(ENABLE_CURVE "Enable CURVE security" ON)
|
option(ENABLE_CURVE "Enable CURVE security" OFF)
|
||||||
|
|
||||||
if(ENABLE_CURVE)
|
if(ENABLE_CURVE)
|
||||||
if(WITH_LIBSODIUM)
|
if(WITH_LIBSODIUM)
|
||||||
@ -280,17 +280,11 @@ if(ENABLE_CURVE)
|
|||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
message(
|
message(
|
||||||
WARNING
|
ERROR
|
||||||
"libsodium not installed, instead using builtin tweetnacl, you may want to install libsodium and run cmake again"
|
"libsodium not installed, you may want to install libsodium and run cmake again"
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
if(NOT ZMQ_HAVE_CURVE)
|
|
||||||
message(STATUS "Using tweetnacl for CURVE security")
|
|
||||||
list(APPEND sources ${CMAKE_CURRENT_SOURCE_DIR}/src/tweetnacl.c)
|
|
||||||
set(ZMQ_USE_TWEETNACL 1)
|
|
||||||
set(ZMQ_HAVE_CURVE 1)
|
|
||||||
endif()
|
|
||||||
else()
|
else()
|
||||||
message(STATUS "CURVE security is disabled")
|
message(STATUS "CURVE security is disabled")
|
||||||
endif()
|
endif()
|
||||||
|
11
Makefile.am
11
Makefile.am
@ -283,12 +283,6 @@ src_libzmq_la_SOURCES += \
|
|||||||
external/wepoll/wepoll.h
|
external/wepoll/wepoll.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if USE_TWEETNACL
|
|
||||||
src_libzmq_la_SOURCES += \
|
|
||||||
src/tweetnacl.c \
|
|
||||||
src/tweetnacl.h
|
|
||||||
endif
|
|
||||||
|
|
||||||
if HAVE_WS
|
if HAVE_WS
|
||||||
src_libzmq_la_SOURCES += \
|
src_libzmq_la_SOURCES += \
|
||||||
src/ws_address.cpp \
|
src/ws_address.cpp \
|
||||||
@ -847,11 +841,6 @@ tests_test_security_curve_SOURCES = \
|
|||||||
src/err.hpp \
|
src/err.hpp \
|
||||||
src/err.cpp
|
src/err.cpp
|
||||||
|
|
||||||
if USE_TWEETNACL
|
|
||||||
tests_test_security_curve_SOURCES += \
|
|
||||||
src/tweetnacl.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
tests_test_security_curve_LDADD = \
|
tests_test_security_curve_LDADD = \
|
||||||
${TESTUTIL_LIBS} src/libzmq.la $(LIBUNWIND_LIBS) $(LIBBSD_LIBS)
|
${TESTUTIL_LIBS} src/libzmq.la $(LIBUNWIND_LIBS) $(LIBBSD_LIBS)
|
||||||
tests_test_security_curve_CPPFLAGS = \
|
tests_test_security_curve_CPPFLAGS = \
|
||||||
|
@ -22,7 +22,7 @@ environment:
|
|||||||
- platform: Win32
|
- platform: Win32
|
||||||
configuration: Release
|
configuration: Release
|
||||||
WITH_LIBSODIUM: OFF # unavailable build files for VS2008
|
WITH_LIBSODIUM: OFF # unavailable build files for VS2008
|
||||||
ENABLE_CURVE: ON
|
ENABLE_CURVE: OFF
|
||||||
CMAKE_GENERATOR: "Visual Studio 9 2008"
|
CMAKE_GENERATOR: "Visual Studio 9 2008"
|
||||||
MSVCVERSION: "v90"
|
MSVCVERSION: "v90"
|
||||||
MSVCYEAR: "vs2008"
|
MSVCYEAR: "vs2008"
|
||||||
@ -111,12 +111,12 @@ environment:
|
|||||||
ARTIFACT_NAME: v141-x64
|
ARTIFACT_NAME: v141-x64
|
||||||
- platform: cygwin64
|
- platform: cygwin64
|
||||||
WITH_LIBSODIUM: OFF
|
WITH_LIBSODIUM: OFF
|
||||||
ENABLE_CURVE: ON
|
ENABLE_CURVE: OFF
|
||||||
CMAKE_GENERATOR: "Unix Makefiles"
|
CMAKE_GENERATOR: "Unix Makefiles"
|
||||||
ARTIFACT_NAME: cygwin64
|
ARTIFACT_NAME: cygwin64
|
||||||
- platform: mingw64
|
- platform: mingw64
|
||||||
WITH_LIBSODIUM: OFF
|
WITH_LIBSODIUM: OFF
|
||||||
ENABLE_CURVE: ON
|
ENABLE_CURVE: OFF
|
||||||
CMAKE_GENERATOR: "MSYS Makefiles"
|
CMAKE_GENERATOR: "MSYS Makefiles"
|
||||||
ARTIFACT_NAME: mingw64
|
ARTIFACT_NAME: mingw64
|
||||||
- platform: Win32-uwp
|
- platform: Win32-uwp
|
||||||
|
@ -93,11 +93,10 @@ do not forget to disable [Android cleanup](#android-build-cleanup).
|
|||||||
|
|
||||||
### Cryptographic configuration
|
### Cryptographic configuration
|
||||||
|
|
||||||
The variable CURVE accepts 3 different values:
|
The variable CURVE accepts 2 different values:
|
||||||
|
|
||||||
"" : LIBZMQ is built without any encryption support.
|
"" : LIBZMQ is built without any encryption support.
|
||||||
"libsodium" : LIBZMQ is built with LIBSODIUM encryption support (see below).
|
"libsodium" : LIBZMQ is built with LIBSODIUM encryption support (see below).
|
||||||
"tweetnacl" : LIBZMQ is build with embedded encryption support.
|
|
||||||
|
|
||||||
### Other configuration variables
|
### Other configuration variables
|
||||||
|
|
||||||
|
@ -38,7 +38,6 @@ export CI_CONFIG_QUIET="${CI_CONFIG_QUIET:-no}"
|
|||||||
# Select CURVE implementation:
|
# Select CURVE implementation:
|
||||||
# - "" # Do not use any CURVE implementation.
|
# - "" # Do not use any CURVE implementation.
|
||||||
# - "libsodium" # Use LIBSODIUM implementation.
|
# - "libsodium" # Use LIBSODIUM implementation.
|
||||||
# - "tweetnacl" # Use internal TWEETNACL implementation.
|
|
||||||
export CURVE="${CURVE:-}"
|
export CURVE="${CURVE:-}"
|
||||||
|
|
||||||
# By default, dependencies will be cloned to /tmp/tmp-deps.
|
# By default, dependencies will be cloned to /tmp/tmp-deps.
|
||||||
@ -123,9 +122,6 @@ elif [ "${CURVE}" == "libsodium" ]; then
|
|||||||
android_build_library "LIBSODIUM" "${LIBSODIUM_ROOT}"
|
android_build_library "LIBSODIUM" "${LIBSODIUM_ROOT}"
|
||||||
) || exit 1
|
) || exit 1
|
||||||
}
|
}
|
||||||
elif [ $CURVE == "tweetnacl" ]; then
|
|
||||||
# Default
|
|
||||||
CURVE=""
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -75,7 +75,6 @@
|
|||||||
#cmakedefine ZMQ_MAKE_VALGRIND_HAPPY
|
#cmakedefine ZMQ_MAKE_VALGRIND_HAPPY
|
||||||
|
|
||||||
#cmakedefine ZMQ_HAVE_CURVE
|
#cmakedefine ZMQ_HAVE_CURVE
|
||||||
#cmakedefine ZMQ_USE_TWEETNACL
|
|
||||||
#cmakedefine ZMQ_USE_LIBSODIUM
|
#cmakedefine ZMQ_USE_LIBSODIUM
|
||||||
#cmakedefine SODIUM_STATIC
|
#cmakedefine SODIUM_STATIC
|
||||||
#cmakedefine ZMQ_USE_GNUTLS
|
#cmakedefine ZMQ_USE_GNUTLS
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
|
|
||||||
<ItemDefinitionGroup>
|
<ItemDefinitionGroup>
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-tweet)' == 'true'">ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
@ -61,4 +60,4 @@
|
|||||||
<Message Text="Copying libzmq.pdb -> $(TargetDir)libzmq.pdb" Importance="high" Condition="$(Configuration.IndexOf('Debug')) != -1" />
|
<Message Text="Copying libzmq.pdb -> $(TargetDir)libzmq.pdb" Importance="high" Condition="$(Configuration.IndexOf('Debug')) != -1" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
||||||
<Rule Name="libzmq-options-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
<Rule Name="libzmq-options-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
||||||
<Rule.Categories>
|
<Rule.Categories>
|
||||||
<Category Name="tweet" DisplayName="tweet" />
|
|
||||||
<Category Name="sodium" DisplayName="sodium" />
|
<Category Name="sodium" DisplayName="sodium" />
|
||||||
<Category Name="openpgm" DisplayName="openpgm" />
|
<Category Name="openpgm" DisplayName="openpgm" />
|
||||||
<Category Name="gssapi" DisplayName="gssapi" />
|
<Category Name="gssapi" DisplayName="gssapi" />
|
||||||
@ -11,10 +10,6 @@
|
|||||||
<Rule.DataSource>
|
<Rule.DataSource>
|
||||||
<DataSource Persistence="ProjectFile" ItemType="" />
|
<DataSource Persistence="ProjectFile" ItemType="" />
|
||||||
</Rule.DataSource>
|
</Rule.DataSource>
|
||||||
<EnumProperty Name="Option-tweet" DisplayName="Enable Tweet NaCl" Description="Enable the Tweet NaCl build option" Category="tweet">
|
|
||||||
<EnumValue Name="" DisplayName="No" />
|
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
|
||||||
</EnumProperty>
|
|
||||||
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable the Sodium build option" Category="sodium">
|
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable the Sodium build option" Category="sodium">
|
||||||
<EnumValue Name="" DisplayName="No" />
|
<EnumValue Name="" DisplayName="No" />
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
<EnumValue Name="true" DisplayName="Yes" />
|
||||||
@ -46,4 +41,4 @@
|
|||||||
<EnumValue Name="ltcg" DisplayName="Static using link time compile generation (LTCG)" />
|
<EnumValue Name="ltcg" DisplayName="Static using link time compile generation (LTCG)" />
|
||||||
</EnumProperty>
|
</EnumProperty>
|
||||||
</Rule>
|
</Rule>
|
||||||
</ProjectSchemaDefinitions>
|
</ProjectSchemaDefinitions>
|
||||||
|
@ -22,9 +22,8 @@
|
|||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<PrecompiledHeaderFile>precompiled.hpp</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>precompiled.hpp</PrecompiledHeaderFile>
|
||||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_WINSOCK_DEPRECATED_NO_WARNINGS;FD_SETSIZE=16384;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_WINSOCK_DEPRECATED_NO_WARNINGS;FD_SETSIZE=16384;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-tweet)' == 'true'">ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-tweet)' == 'true' Or '$(Option-sodium)' == 'true'">ZMQ_HAVE_CURVE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_HAVE_CURVE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-draftapi)' == 'true'">ZMQ_BUILD_DRAFT_API;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-draftapi)' == 'true'">ZMQ_BUILD_DRAFT_API;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
@ -61,7 +60,6 @@
|
|||||||
<!-- Messages -->
|
<!-- Messages -->
|
||||||
|
|
||||||
<Target Name="OptionInfo" BeforeTargets="PrepareForBuild">
|
<Target Name="OptionInfo" BeforeTargets="PrepareForBuild">
|
||||||
<Message Text="Option-tweet : $(Option-tweet)" Importance="high"/>
|
|
||||||
<Message Text="Option-sodium : $(Option-sodium)" Importance="high"/>
|
<Message Text="Option-sodium : $(Option-sodium)" Importance="high"/>
|
||||||
<Message Text="Option-openpgm : $(Option-openpgm)" Importance="high"/>
|
<Message Text="Option-openpgm : $(Option-openpgm)" Importance="high"/>
|
||||||
<Message Text="Option-gssapi : $(Option-gssapi)" Importance="high"/>
|
<Message Text="Option-gssapi : $(Option-gssapi)" Importance="high"/>
|
||||||
@ -73,4 +71,4 @@
|
|||||||
<Message Text="Linkage-libsodium : $(Linkage-libsodium)" Importance="high" Condition="'$(Option-sodium)' == 'true'"/>
|
<Message Text="Linkage-libsodium : $(Linkage-libsodium)" Importance="high" Condition="'$(Option-sodium)' == 'true'"/>
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -66,9 +66,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
<ClInclude Include="..\..\resource.h" />
|
<ClInclude Include="..\..\resource.h" />
|
||||||
@ -159,7 +156,6 @@
|
|||||||
<ClInclude Include="..\..\..\..\src\timers.hpp" />
|
<ClInclude Include="..\..\..\..\src\timers.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\thread.hpp" />
|
<ClInclude Include="..\..\..\..\src\thread.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\trie.hpp" />
|
<ClInclude Include="..\..\..\..\src\trie.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\tweetnacl.h" />
|
|
||||||
<ClInclude Include="..\..\..\..\src\udp_address.hpp" />
|
<ClInclude Include="..\..\..\..\src\udp_address.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\udp_engine.hpp" />
|
<ClInclude Include="..\..\..\..\src\udp_engine.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\v1_decoder.hpp" />
|
<ClInclude Include="..\..\..\..\src\v1_decoder.hpp" />
|
||||||
@ -257,7 +253,6 @@
|
|||||||
<ClCompile Include="..\..\..\..\src\thread.cpp" />
|
<ClCompile Include="..\..\..\..\src\thread.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\timers.cpp" />
|
<ClCompile Include="..\..\..\..\src\timers.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\trie.cpp" />
|
<ClCompile Include="..\..\..\..\src\trie.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\tweetnacl.c">
|
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\..\..\src\udp_address.cpp" />
|
<ClCompile Include="..\..\..\..\src\udp_address.cpp" />
|
||||||
@ -286,4 +281,4 @@
|
|||||||
<ResourceCompile Include="..\..\resource.rc" />
|
<ResourceCompile Include="..\..\resource.rc" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -265,9 +265,6 @@
|
|||||||
<ClCompile Include="..\..\..\..\src\timers.cpp">
|
<ClCompile Include="..\..\..\..\src\timers.cpp">
|
||||||
<Filter>src</Filter>
|
<Filter>src</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\..\..\src\tweetnacl.c">
|
|
||||||
<Filter>src</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\..\..\include\zmq.h">
|
<ClInclude Include="..\..\..\..\include\zmq.h">
|
||||||
@ -573,9 +570,6 @@
|
|||||||
<ClInclude Include="..\..\..\..\src\timers.hpp">
|
<ClInclude Include="..\..\..\..\src\timers.hpp">
|
||||||
<Filter>src\include</Filter>
|
<Filter>src\include</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\..\..\src\tweetnacl.h">
|
|
||||||
<Filter>src\include</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\..\..\src\zmq_draft.h">
|
<ClInclude Include="..\..\..\..\src\zmq_draft.h">
|
||||||
<Filter>src\include</Filter>
|
<Filter>src\include</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
@ -624,4 +618,4 @@
|
|||||||
<Filter>resource</Filter>
|
<Filter>resource</Filter>
|
||||||
</ResourceCompile>
|
</ResourceCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
||||||
<Rule Name="libzmq-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
<Rule Name="libzmq-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
||||||
<Rule.Categories>
|
<Rule.Categories>
|
||||||
<Category Name="tweet" DisplayName="tweet" />
|
|
||||||
<Category Name="sodium" DisplayName="sodium" />
|
<Category Name="sodium" DisplayName="sodium" />
|
||||||
<Category Name="openpgm" DisplayName="openpgm" />
|
<Category Name="openpgm" DisplayName="openpgm" />
|
||||||
<Category Name="gssapi" DisplayName="gssapi" />
|
<Category Name="gssapi" DisplayName="gssapi" />
|
||||||
@ -12,10 +11,6 @@
|
|||||||
<Rule.DataSource>
|
<Rule.DataSource>
|
||||||
<DataSource Persistence="ProjectFile" ItemType="" />
|
<DataSource Persistence="ProjectFile" ItemType="" />
|
||||||
</Rule.DataSource>
|
</Rule.DataSource>
|
||||||
<EnumProperty Name="Option-tweet" DisplayName="Enable Tweet NaCl" Description="Enable Tweet NaCl build option (overrides Sodium)" Category="tweet">
|
|
||||||
<EnumValue Name="" DisplayName="No" />
|
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
|
||||||
</EnumProperty>
|
|
||||||
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable Sodium build option" Category="sodium">
|
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable Sodium build option" Category="sodium">
|
||||||
<EnumValue Name="" DisplayName="No" />
|
<EnumValue Name="" DisplayName="No" />
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
<EnumValue Name="true" DisplayName="Yes" />
|
||||||
@ -37,4 +32,4 @@
|
|||||||
<EnumValue Name="true" DisplayName="Yes" />
|
<EnumValue Name="true" DisplayName="Yes" />
|
||||||
</EnumProperty>
|
</EnumProperty>
|
||||||
</Rule>
|
</Rule>
|
||||||
</ProjectSchemaDefinitions>
|
</ProjectSchemaDefinitions>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
|
|
||||||
<ItemDefinitionGroup>
|
<ItemDefinitionGroup>
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-tweet)' == 'true'">ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
@ -61,4 +60,4 @@
|
|||||||
<Message Text="Copying libzmq.pdb -> $(TargetDir)libzmq.pdb" Importance="high" Condition="$(Configuration.IndexOf('Debug')) != -1" />
|
<Message Text="Copying libzmq.pdb -> $(TargetDir)libzmq.pdb" Importance="high" Condition="$(Configuration.IndexOf('Debug')) != -1" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
||||||
<Rule Name="libzmq-options-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
<Rule Name="libzmq-options-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
||||||
<Rule.Categories>
|
<Rule.Categories>
|
||||||
<Category Name="tweet" DisplayName="tweet" />
|
|
||||||
<Category Name="sodium" DisplayName="sodium" />
|
<Category Name="sodium" DisplayName="sodium" />
|
||||||
<Category Name="openpgm" DisplayName="openpgm" />
|
<Category Name="openpgm" DisplayName="openpgm" />
|
||||||
<Category Name="gssapi" DisplayName="gssapi" />
|
<Category Name="gssapi" DisplayName="gssapi" />
|
||||||
@ -11,10 +10,6 @@
|
|||||||
<Rule.DataSource>
|
<Rule.DataSource>
|
||||||
<DataSource Persistence="ProjectFile" ItemType="" />
|
<DataSource Persistence="ProjectFile" ItemType="" />
|
||||||
</Rule.DataSource>
|
</Rule.DataSource>
|
||||||
<EnumProperty Name="Option-tweet" DisplayName="Enable Tweet NaCl" Description="Enable the Tweet NaCl build option" Category="tweet">
|
|
||||||
<EnumValue Name="" DisplayName="No" />
|
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
|
||||||
</EnumProperty>
|
|
||||||
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable the Sodium build option" Category="sodium">
|
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable the Sodium build option" Category="sodium">
|
||||||
<EnumValue Name="" DisplayName="No" />
|
<EnumValue Name="" DisplayName="No" />
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
<EnumValue Name="true" DisplayName="Yes" />
|
||||||
@ -46,4 +41,4 @@
|
|||||||
<EnumValue Name="ltcg" DisplayName="Static using link time compile generation (LTCG)" />
|
<EnumValue Name="ltcg" DisplayName="Static using link time compile generation (LTCG)" />
|
||||||
</EnumProperty>
|
</EnumProperty>
|
||||||
</Rule>
|
</Rule>
|
||||||
</ProjectSchemaDefinitions>
|
</ProjectSchemaDefinitions>
|
||||||
|
@ -22,9 +22,8 @@
|
|||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<PrecompiledHeaderFile>precompiled.hpp</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>precompiled.hpp</PrecompiledHeaderFile>
|
||||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_WINSOCK_DEPRECATED_NO_WARNINGS;FD_SETSIZE=16384;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_WINSOCK_DEPRECATED_NO_WARNINGS;FD_SETSIZE=16384;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-tweet)' == 'true'">ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-tweet)' == 'true' Or '$(Option-sodium)' == 'true'">ZMQ_HAVE_CURVE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_HAVE_CURVE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-draftapi)' == 'true'">ZMQ_BUILD_DRAFT_API;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-draftapi)' == 'true'">ZMQ_BUILD_DRAFT_API;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
@ -61,7 +60,6 @@
|
|||||||
<!-- Messages -->
|
<!-- Messages -->
|
||||||
|
|
||||||
<Target Name="OptionInfo" BeforeTargets="PrepareForBuild">
|
<Target Name="OptionInfo" BeforeTargets="PrepareForBuild">
|
||||||
<Message Text="Option-tweet : $(Option-tweet)" Importance="high"/>
|
|
||||||
<Message Text="Option-sodium : $(Option-sodium)" Importance="high"/>
|
<Message Text="Option-sodium : $(Option-sodium)" Importance="high"/>
|
||||||
<Message Text="Option-openpgm : $(Option-openpgm)" Importance="high"/>
|
<Message Text="Option-openpgm : $(Option-openpgm)" Importance="high"/>
|
||||||
<Message Text="Option-gssapi : $(Option-gssapi)" Importance="high"/>
|
<Message Text="Option-gssapi : $(Option-gssapi)" Importance="high"/>
|
||||||
@ -73,4 +71,4 @@
|
|||||||
<Message Text="Linkage-libsodium : $(Linkage-libsodium)" Importance="high" Condition="'$(Option-sodium)' == 'true'"/>
|
<Message Text="Linkage-libsodium : $(Linkage-libsodium)" Importance="high" Condition="'$(Option-sodium)' == 'true'"/>
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -66,9 +66,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
<ClInclude Include="..\..\resource.h" />
|
<ClInclude Include="..\..\resource.h" />
|
||||||
@ -159,7 +156,6 @@
|
|||||||
<ClInclude Include="..\..\..\..\src\timers.hpp" />
|
<ClInclude Include="..\..\..\..\src\timers.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\thread.hpp" />
|
<ClInclude Include="..\..\..\..\src\thread.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\trie.hpp" />
|
<ClInclude Include="..\..\..\..\src\trie.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\tweetnacl.h" />
|
|
||||||
<ClInclude Include="..\..\..\..\src\udp_address.hpp" />
|
<ClInclude Include="..\..\..\..\src\udp_address.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\udp_engine.hpp" />
|
<ClInclude Include="..\..\..\..\src\udp_engine.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\v1_decoder.hpp" />
|
<ClInclude Include="..\..\..\..\src\v1_decoder.hpp" />
|
||||||
@ -257,9 +253,6 @@
|
|||||||
<ClCompile Include="..\..\..\..\src\thread.cpp" />
|
<ClCompile Include="..\..\..\..\src\thread.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\timers.cpp" />
|
<ClCompile Include="..\..\..\..\src\timers.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\trie.cpp" />
|
<ClCompile Include="..\..\..\..\src\trie.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\tweetnacl.c">
|
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\..\..\src\udp_address.cpp" />
|
<ClCompile Include="..\..\..\..\src\udp_address.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\udp_engine.cpp" />
|
<ClCompile Include="..\..\..\..\src\udp_engine.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\v1_decoder.cpp" />
|
<ClCompile Include="..\..\..\..\src\v1_decoder.cpp" />
|
||||||
@ -286,4 +279,4 @@
|
|||||||
<ResourceCompile Include="..\..\resource.rc" />
|
<ResourceCompile Include="..\..\resource.rc" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -265,9 +265,6 @@
|
|||||||
<ClCompile Include="..\..\..\..\src\timers.cpp">
|
<ClCompile Include="..\..\..\..\src\timers.cpp">
|
||||||
<Filter>src</Filter>
|
<Filter>src</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\..\..\src\tweetnacl.c">
|
|
||||||
<Filter>src</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\..\..\include\zmq.h">
|
<ClInclude Include="..\..\..\..\include\zmq.h">
|
||||||
@ -573,9 +570,6 @@
|
|||||||
<ClInclude Include="..\..\..\..\src\timers.hpp">
|
<ClInclude Include="..\..\..\..\src\timers.hpp">
|
||||||
<Filter>src\include</Filter>
|
<Filter>src\include</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\..\..\src\tweetnacl.h">
|
|
||||||
<Filter>src\include</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\..\..\src\zmq_draft.h">
|
<ClInclude Include="..\..\..\..\src\zmq_draft.h">
|
||||||
<Filter>src\include</Filter>
|
<Filter>src\include</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
@ -624,4 +618,4 @@
|
|||||||
<Filter>resource</Filter>
|
<Filter>resource</Filter>
|
||||||
</ResourceCompile>
|
</ResourceCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
||||||
<Rule Name="libzmq-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
<Rule Name="libzmq-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
||||||
<Rule.Categories>
|
<Rule.Categories>
|
||||||
<Category Name="tweet" DisplayName="tweet" />
|
|
||||||
<Category Name="sodium" DisplayName="sodium" />
|
<Category Name="sodium" DisplayName="sodium" />
|
||||||
<Category Name="openpgm" DisplayName="openpgm" />
|
<Category Name="openpgm" DisplayName="openpgm" />
|
||||||
<Category Name="gssapi" DisplayName="gssapi" />
|
<Category Name="gssapi" DisplayName="gssapi" />
|
||||||
@ -12,10 +11,6 @@
|
|||||||
<Rule.DataSource>
|
<Rule.DataSource>
|
||||||
<DataSource Persistence="ProjectFile" ItemType="" />
|
<DataSource Persistence="ProjectFile" ItemType="" />
|
||||||
</Rule.DataSource>
|
</Rule.DataSource>
|
||||||
<EnumProperty Name="Option-tweet" DisplayName="Enable Tweet NaCl" Description="Enable Tweet NaCl build option (overrides Sodium)" Category="tweet">
|
|
||||||
<EnumValue Name="" DisplayName="No" />
|
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
|
||||||
</EnumProperty>
|
|
||||||
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable Sodium build option" Category="sodium">
|
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable Sodium build option" Category="sodium">
|
||||||
<EnumValue Name="" DisplayName="No" />
|
<EnumValue Name="" DisplayName="No" />
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
<EnumValue Name="true" DisplayName="Yes" />
|
||||||
@ -37,4 +32,4 @@
|
|||||||
<EnumValue Name="true" DisplayName="Yes" />
|
<EnumValue Name="true" DisplayName="Yes" />
|
||||||
</EnumProperty>
|
</EnumProperty>
|
||||||
</Rule>
|
</Rule>
|
||||||
</ProjectSchemaDefinitions>
|
</ProjectSchemaDefinitions>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
|
|
||||||
<ItemDefinitionGroup>
|
<ItemDefinitionGroup>
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-tweet)' == 'true'">ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
@ -61,4 +60,4 @@
|
|||||||
<Message Text="Copying libzmq.pdb -> $(TargetDir)libzmq.pdb" Importance="high" Condition="$(Configuration.IndexOf('Debug')) != -1" />
|
<Message Text="Copying libzmq.pdb -> $(TargetDir)libzmq.pdb" Importance="high" Condition="$(Configuration.IndexOf('Debug')) != -1" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
||||||
<Rule Name="libzmq-options-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
<Rule Name="libzmq-options-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
||||||
<Rule.Categories>
|
<Rule.Categories>
|
||||||
<Category Name="tweet" DisplayName="tweet" />
|
|
||||||
<Category Name="sodium" DisplayName="sodium" />
|
<Category Name="sodium" DisplayName="sodium" />
|
||||||
<Category Name="openpgm" DisplayName="openpgm" />
|
<Category Name="openpgm" DisplayName="openpgm" />
|
||||||
<Category Name="gssapi" DisplayName="gssapi" />
|
<Category Name="gssapi" DisplayName="gssapi" />
|
||||||
@ -11,10 +10,6 @@
|
|||||||
<Rule.DataSource>
|
<Rule.DataSource>
|
||||||
<DataSource Persistence="ProjectFile" ItemType="" />
|
<DataSource Persistence="ProjectFile" ItemType="" />
|
||||||
</Rule.DataSource>
|
</Rule.DataSource>
|
||||||
<EnumProperty Name="Option-tweet" DisplayName="Enable Tweet NaCl" Description="Enable the Tweet NaCl build option" Category="tweet">
|
|
||||||
<EnumValue Name="" DisplayName="No" />
|
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
|
||||||
</EnumProperty>
|
|
||||||
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable the Sodium build option" Category="sodium">
|
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable the Sodium build option" Category="sodium">
|
||||||
<EnumValue Name="" DisplayName="No" />
|
<EnumValue Name="" DisplayName="No" />
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
<EnumValue Name="true" DisplayName="Yes" />
|
||||||
@ -46,4 +41,4 @@
|
|||||||
<EnumValue Name="ltcg" DisplayName="Static using link time compile generation (LTCG)" />
|
<EnumValue Name="ltcg" DisplayName="Static using link time compile generation (LTCG)" />
|
||||||
</EnumProperty>
|
</EnumProperty>
|
||||||
</Rule>
|
</Rule>
|
||||||
</ProjectSchemaDefinitions>
|
</ProjectSchemaDefinitions>
|
||||||
|
@ -22,9 +22,8 @@
|
|||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<PrecompiledHeaderFile>precompiled.hpp</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>precompiled.hpp</PrecompiledHeaderFile>
|
||||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_WINSOCK_DEPRECATED_NO_WARNINGS;FD_SETSIZE=16384;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_WINSOCK_DEPRECATED_NO_WARNINGS;FD_SETSIZE=16384;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-tweet)' == 'true'">ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-tweet)' == 'true' Or '$(Option-sodium)' == 'true'">ZMQ_HAVE_CURVE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_HAVE_CURVE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-draftapi)' == 'true'">ZMQ_BUILD_DRAFT_API;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-draftapi)' == 'true'">ZMQ_BUILD_DRAFT_API;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
@ -61,7 +60,6 @@
|
|||||||
<!-- Messages -->
|
<!-- Messages -->
|
||||||
|
|
||||||
<Target Name="OptionInfo" BeforeTargets="PrepareForBuild">
|
<Target Name="OptionInfo" BeforeTargets="PrepareForBuild">
|
||||||
<Message Text="Option-tweet : $(Option-tweet)" Importance="high"/>
|
|
||||||
<Message Text="Option-sodium : $(Option-sodium)" Importance="high"/>
|
<Message Text="Option-sodium : $(Option-sodium)" Importance="high"/>
|
||||||
<Message Text="Option-openpgm : $(Option-openpgm)" Importance="high"/>
|
<Message Text="Option-openpgm : $(Option-openpgm)" Importance="high"/>
|
||||||
<Message Text="Option-gssapi : $(Option-gssapi)" Importance="high"/>
|
<Message Text="Option-gssapi : $(Option-gssapi)" Importance="high"/>
|
||||||
@ -73,4 +71,4 @@
|
|||||||
<Message Text="Linkage-libsodium : $(Linkage-libsodium)" Importance="high" Condition="'$(Option-sodium)' == 'true'"/>
|
<Message Text="Linkage-libsodium : $(Linkage-libsodium)" Importance="high" Condition="'$(Option-sodium)' == 'true'"/>
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -66,9 +66,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
<ClInclude Include="..\..\resource.h" />
|
<ClInclude Include="..\..\resource.h" />
|
||||||
@ -159,7 +156,6 @@
|
|||||||
<ClInclude Include="..\..\..\..\src\timers.hpp" />
|
<ClInclude Include="..\..\..\..\src\timers.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\thread.hpp" />
|
<ClInclude Include="..\..\..\..\src\thread.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\trie.hpp" />
|
<ClInclude Include="..\..\..\..\src\trie.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\tweetnacl.h" />
|
|
||||||
<ClInclude Include="..\..\..\..\src\udp_address.hpp" />
|
<ClInclude Include="..\..\..\..\src\udp_address.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\udp_engine.hpp" />
|
<ClInclude Include="..\..\..\..\src\udp_engine.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\v1_decoder.hpp" />
|
<ClInclude Include="..\..\..\..\src\v1_decoder.hpp" />
|
||||||
@ -257,9 +253,6 @@
|
|||||||
<ClCompile Include="..\..\..\..\src\thread.cpp" />
|
<ClCompile Include="..\..\..\..\src\thread.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\timers.cpp" />
|
<ClCompile Include="..\..\..\..\src\timers.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\trie.cpp" />
|
<ClCompile Include="..\..\..\..\src\trie.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\tweetnacl.c">
|
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\..\..\src\udp_address.cpp" />
|
<ClCompile Include="..\..\..\..\src\udp_address.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\udp_engine.cpp" />
|
<ClCompile Include="..\..\..\..\src\udp_engine.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\v1_decoder.cpp" />
|
<ClCompile Include="..\..\..\..\src\v1_decoder.cpp" />
|
||||||
@ -286,4 +279,4 @@
|
|||||||
<ResourceCompile Include="..\..\resource.rc" />
|
<ResourceCompile Include="..\..\resource.rc" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -265,9 +265,6 @@
|
|||||||
<ClCompile Include="..\..\..\..\src\timers.cpp">
|
<ClCompile Include="..\..\..\..\src\timers.cpp">
|
||||||
<Filter>src</Filter>
|
<Filter>src</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\..\..\src\tweetnacl.c">
|
|
||||||
<Filter>src</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\..\..\include\zmq.h">
|
<ClInclude Include="..\..\..\..\include\zmq.h">
|
||||||
@ -573,9 +570,6 @@
|
|||||||
<ClInclude Include="..\..\..\..\src\timers.hpp">
|
<ClInclude Include="..\..\..\..\src\timers.hpp">
|
||||||
<Filter>src\include</Filter>
|
<Filter>src\include</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\..\..\src\tweetnacl.h">
|
|
||||||
<Filter>src\include</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\..\..\src\zmq_draft.h">
|
<ClInclude Include="..\..\..\..\src\zmq_draft.h">
|
||||||
<Filter>src\include</Filter>
|
<Filter>src\include</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
@ -624,4 +618,4 @@
|
|||||||
<Filter>resource</Filter>
|
<Filter>resource</Filter>
|
||||||
</ResourceCompile>
|
</ResourceCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
||||||
<Rule Name="libzmq-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
<Rule Name="libzmq-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
||||||
<Rule.Categories>
|
<Rule.Categories>
|
||||||
<Category Name="tweet" DisplayName="tweet" />
|
|
||||||
<Category Name="sodium" DisplayName="sodium" />
|
<Category Name="sodium" DisplayName="sodium" />
|
||||||
<Category Name="openpgm" DisplayName="openpgm" />
|
<Category Name="openpgm" DisplayName="openpgm" />
|
||||||
<Category Name="gssapi" DisplayName="gssapi" />
|
<Category Name="gssapi" DisplayName="gssapi" />
|
||||||
@ -12,10 +11,6 @@
|
|||||||
<Rule.DataSource>
|
<Rule.DataSource>
|
||||||
<DataSource Persistence="ProjectFile" ItemType="" />
|
<DataSource Persistence="ProjectFile" ItemType="" />
|
||||||
</Rule.DataSource>
|
</Rule.DataSource>
|
||||||
<EnumProperty Name="Option-tweet" DisplayName="Enable Tweet NaCl" Description="Enable Tweet NaCl build option (overrides Sodium)" Category="tweet">
|
|
||||||
<EnumValue Name="" DisplayName="No" />
|
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
|
||||||
</EnumProperty>
|
|
||||||
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable Sodium build option" Category="sodium">
|
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable Sodium build option" Category="sodium">
|
||||||
<EnumValue Name="" DisplayName="No" />
|
<EnumValue Name="" DisplayName="No" />
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
<EnumValue Name="true" DisplayName="Yes" />
|
||||||
@ -37,4 +32,4 @@
|
|||||||
<EnumValue Name="true" DisplayName="Yes" />
|
<EnumValue Name="true" DisplayName="Yes" />
|
||||||
</EnumProperty>
|
</EnumProperty>
|
||||||
</Rule>
|
</Rule>
|
||||||
</ProjectSchemaDefinitions>
|
</ProjectSchemaDefinitions>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
|
|
||||||
<ItemDefinitionGroup>
|
<ItemDefinitionGroup>
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-tweet)' == 'true'">ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
@ -61,4 +60,4 @@
|
|||||||
<Message Text="Copying libzmq.pdb -> $(TargetDir)libzmq.pdb" Importance="high" Condition="$(Configuration.IndexOf('Debug')) != -1" />
|
<Message Text="Copying libzmq.pdb -> $(TargetDir)libzmq.pdb" Importance="high" Condition="$(Configuration.IndexOf('Debug')) != -1" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
||||||
<Rule Name="libzmq-options-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
<Rule Name="libzmq-options-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
||||||
<Rule.Categories>
|
<Rule.Categories>
|
||||||
<Category Name="tweet" DisplayName="tweet" />
|
|
||||||
<Category Name="sodium" DisplayName="sodium" />
|
<Category Name="sodium" DisplayName="sodium" />
|
||||||
<Category Name="openpgm" DisplayName="openpgm" />
|
<Category Name="openpgm" DisplayName="openpgm" />
|
||||||
<Category Name="gssapi" DisplayName="gssapi" />
|
<Category Name="gssapi" DisplayName="gssapi" />
|
||||||
@ -11,10 +10,6 @@
|
|||||||
<Rule.DataSource>
|
<Rule.DataSource>
|
||||||
<DataSource Persistence="ProjectFile" ItemType="" />
|
<DataSource Persistence="ProjectFile" ItemType="" />
|
||||||
</Rule.DataSource>
|
</Rule.DataSource>
|
||||||
<EnumProperty Name="Option-tweet" DisplayName="Enable Tweet NaCl" Description="Enable the Tweet NaCl build option" Category="tweet">
|
|
||||||
<EnumValue Name="" DisplayName="No" />
|
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
|
||||||
</EnumProperty>
|
|
||||||
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable the Sodium build option" Category="sodium">
|
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable the Sodium build option" Category="sodium">
|
||||||
<EnumValue Name="" DisplayName="No" />
|
<EnumValue Name="" DisplayName="No" />
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
<EnumValue Name="true" DisplayName="Yes" />
|
||||||
@ -46,4 +41,4 @@
|
|||||||
<EnumValue Name="ltcg" DisplayName="Static using link time compile generation (LTCG)" />
|
<EnumValue Name="ltcg" DisplayName="Static using link time compile generation (LTCG)" />
|
||||||
</EnumProperty>
|
</EnumProperty>
|
||||||
</Rule>
|
</Rule>
|
||||||
</ProjectSchemaDefinitions>
|
</ProjectSchemaDefinitions>
|
||||||
|
@ -22,9 +22,8 @@
|
|||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<PrecompiledHeaderFile>precompiled.hpp</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>precompiled.hpp</PrecompiledHeaderFile>
|
||||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_WINSOCK_DEPRECATED_NO_WARNINGS;FD_SETSIZE=16384;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_WINSOCK_DEPRECATED_NO_WARNINGS;FD_SETSIZE=16384;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-tweet)' == 'true'">ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-tweet)' == 'true' Or '$(Option-sodium)' == 'true'">ZMQ_HAVE_CURVE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_HAVE_CURVE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-draftapi)' == 'true'">ZMQ_BUILD_DRAFT_API;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-draftapi)' == 'true'">ZMQ_BUILD_DRAFT_API;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
@ -61,7 +60,6 @@
|
|||||||
<!-- Messages -->
|
<!-- Messages -->
|
||||||
|
|
||||||
<Target Name="OptionInfo" BeforeTargets="PrepareForBuild">
|
<Target Name="OptionInfo" BeforeTargets="PrepareForBuild">
|
||||||
<Message Text="Option-tweet : $(Option-tweet)" Importance="high"/>
|
|
||||||
<Message Text="Option-sodium : $(Option-sodium)" Importance="high"/>
|
<Message Text="Option-sodium : $(Option-sodium)" Importance="high"/>
|
||||||
<Message Text="Option-openpgm : $(Option-openpgm)" Importance="high"/>
|
<Message Text="Option-openpgm : $(Option-openpgm)" Importance="high"/>
|
||||||
<Message Text="Option-gssapi : $(Option-gssapi)" Importance="high"/>
|
<Message Text="Option-gssapi : $(Option-gssapi)" Importance="high"/>
|
||||||
@ -73,4 +71,4 @@
|
|||||||
<Message Text="Linkage-libsodium : $(Linkage-libsodium)" Importance="high" Condition="'$(Option-sodium)' == 'true'"/>
|
<Message Text="Linkage-libsodium : $(Linkage-libsodium)" Importance="high" Condition="'$(Option-sodium)' == 'true'"/>
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -66,9 +66,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
<ClInclude Include="..\..\resource.h" />
|
<ClInclude Include="..\..\resource.h" />
|
||||||
@ -160,7 +157,6 @@
|
|||||||
<ClInclude Include="..\..\..\..\src\timers.hpp" />
|
<ClInclude Include="..\..\..\..\src\timers.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\thread.hpp" />
|
<ClInclude Include="..\..\..\..\src\thread.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\trie.hpp" />
|
<ClInclude Include="..\..\..\..\src\trie.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\tweetnacl.h" />
|
|
||||||
<ClInclude Include="..\..\..\..\src\udp_address.hpp" />
|
<ClInclude Include="..\..\..\..\src\udp_address.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\udp_engine.hpp" />
|
<ClInclude Include="..\..\..\..\src\udp_engine.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\v1_decoder.hpp" />
|
<ClInclude Include="..\..\..\..\src\v1_decoder.hpp" />
|
||||||
@ -259,9 +255,6 @@
|
|||||||
<ClCompile Include="..\..\..\..\src\thread.cpp" />
|
<ClCompile Include="..\..\..\..\src\thread.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\timers.cpp" />
|
<ClCompile Include="..\..\..\..\src\timers.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\trie.cpp" />
|
<ClCompile Include="..\..\..\..\src\trie.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\tweetnacl.c">
|
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\..\..\src\udp_address.cpp" />
|
<ClCompile Include="..\..\..\..\src\udp_address.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\udp_engine.cpp" />
|
<ClCompile Include="..\..\..\..\src\udp_engine.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\v1_decoder.cpp" />
|
<ClCompile Include="..\..\..\..\src\v1_decoder.cpp" />
|
||||||
@ -288,4 +281,4 @@
|
|||||||
<ResourceCompile Include="..\..\resource.rc" />
|
<ResourceCompile Include="..\..\resource.rc" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -265,9 +265,6 @@
|
|||||||
<ClCompile Include="..\..\..\..\src\timers.cpp">
|
<ClCompile Include="..\..\..\..\src\timers.cpp">
|
||||||
<Filter>src</Filter>
|
<Filter>src</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\..\..\src\tweetnacl.c">
|
|
||||||
<Filter>src</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\..\..\include\zmq.h">
|
<ClInclude Include="..\..\..\..\include\zmq.h">
|
||||||
@ -573,9 +570,6 @@
|
|||||||
<ClInclude Include="..\..\..\..\src\timers.hpp">
|
<ClInclude Include="..\..\..\..\src\timers.hpp">
|
||||||
<Filter>src\include</Filter>
|
<Filter>src\include</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\..\..\src\tweetnacl.h">
|
|
||||||
<Filter>src\include</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\..\..\src\zmq_draft.h">
|
<ClInclude Include="..\..\..\..\src\zmq_draft.h">
|
||||||
<Filter>src\include</Filter>
|
<Filter>src\include</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
@ -624,4 +618,4 @@
|
|||||||
<Filter>resource</Filter>
|
<Filter>resource</Filter>
|
||||||
</ResourceCompile>
|
</ResourceCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
||||||
<Rule Name="libzmq-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
<Rule Name="libzmq-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
||||||
<Rule.Categories>
|
<Rule.Categories>
|
||||||
<Category Name="tweet" DisplayName="tweet" />
|
|
||||||
<Category Name="sodium" DisplayName="sodium" />
|
<Category Name="sodium" DisplayName="sodium" />
|
||||||
<Category Name="openpgm" DisplayName="openpgm" />
|
<Category Name="openpgm" DisplayName="openpgm" />
|
||||||
<Category Name="gssapi" DisplayName="gssapi" />
|
<Category Name="gssapi" DisplayName="gssapi" />
|
||||||
@ -12,10 +11,6 @@
|
|||||||
<Rule.DataSource>
|
<Rule.DataSource>
|
||||||
<DataSource Persistence="ProjectFile" ItemType="" />
|
<DataSource Persistence="ProjectFile" ItemType="" />
|
||||||
</Rule.DataSource>
|
</Rule.DataSource>
|
||||||
<EnumProperty Name="Option-tweet" DisplayName="Enable Tweet NaCl" Description="Enable Tweet NaCl build option (overrides Sodium)" Category="tweet">
|
|
||||||
<EnumValue Name="" DisplayName="No" />
|
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
|
||||||
</EnumProperty>
|
|
||||||
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable Sodium build option" Category="sodium">
|
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable Sodium build option" Category="sodium">
|
||||||
<EnumValue Name="" DisplayName="No" />
|
<EnumValue Name="" DisplayName="No" />
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
<EnumValue Name="true" DisplayName="Yes" />
|
||||||
@ -37,4 +32,4 @@
|
|||||||
<EnumValue Name="true" DisplayName="Yes" />
|
<EnumValue Name="true" DisplayName="Yes" />
|
||||||
</EnumProperty>
|
</EnumProperty>
|
||||||
</Rule>
|
</Rule>
|
||||||
</ProjectSchemaDefinitions>
|
</ProjectSchemaDefinitions>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
|
|
||||||
<ItemDefinitionGroup>
|
<ItemDefinitionGroup>
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-tweet)' == 'true'">ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
@ -61,4 +60,4 @@
|
|||||||
<Message Text="Copying libzmq.pdb -> $(TargetDir)libzmq.pdb" Importance="high" Condition="$(Configuration.IndexOf('Debug')) != -1" />
|
<Message Text="Copying libzmq.pdb -> $(TargetDir)libzmq.pdb" Importance="high" Condition="$(Configuration.IndexOf('Debug')) != -1" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
||||||
<Rule Name="libzmq-options-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
<Rule Name="libzmq-options-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
||||||
<Rule.Categories>
|
<Rule.Categories>
|
||||||
<Category Name="tweet" DisplayName="tweet" />
|
|
||||||
<Category Name="sodium" DisplayName="sodium" />
|
<Category Name="sodium" DisplayName="sodium" />
|
||||||
<Category Name="openpgm" DisplayName="openpgm" />
|
<Category Name="openpgm" DisplayName="openpgm" />
|
||||||
<Category Name="gssapi" DisplayName="gssapi" />
|
<Category Name="gssapi" DisplayName="gssapi" />
|
||||||
@ -11,10 +10,6 @@
|
|||||||
<Rule.DataSource>
|
<Rule.DataSource>
|
||||||
<DataSource Persistence="ProjectFile" ItemType="" />
|
<DataSource Persistence="ProjectFile" ItemType="" />
|
||||||
</Rule.DataSource>
|
</Rule.DataSource>
|
||||||
<EnumProperty Name="Option-tweet" DisplayName="Enable Tweet NaCl" Description="Enable the Tweet NaCl build option" Category="tweet">
|
|
||||||
<EnumValue Name="" DisplayName="No" />
|
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
|
||||||
</EnumProperty>
|
|
||||||
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable the Sodium build option" Category="sodium">
|
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable the Sodium build option" Category="sodium">
|
||||||
<EnumValue Name="" DisplayName="No" />
|
<EnumValue Name="" DisplayName="No" />
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
<EnumValue Name="true" DisplayName="Yes" />
|
||||||
@ -46,4 +41,4 @@
|
|||||||
<EnumValue Name="ltcg" DisplayName="Static using link time compile generation (LTCG)" />
|
<EnumValue Name="ltcg" DisplayName="Static using link time compile generation (LTCG)" />
|
||||||
</EnumProperty>
|
</EnumProperty>
|
||||||
</Rule>
|
</Rule>
|
||||||
</ProjectSchemaDefinitions>
|
</ProjectSchemaDefinitions>
|
||||||
|
@ -22,9 +22,8 @@
|
|||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<PrecompiledHeaderFile>precompiled.hpp</PrecompiledHeaderFile>
|
<PrecompiledHeaderFile>precompiled.hpp</PrecompiledHeaderFile>
|
||||||
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_WINSOCK_DEPRECATED_NO_WARNINGS;FD_SETSIZE=16384;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_WINSOCK_DEPRECATED_NO_WARNINGS;FD_SETSIZE=16384;WIN32_LEAN_AND_MEAN;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-tweet)' == 'true'">ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_USE_LIBSODIUM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-tweet)' == 'true' Or '$(Option-sodium)' == 'true'">ZMQ_HAVE_CURVE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-sodium)' == 'true'">ZMQ_HAVE_CURVE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-openpgm)' == 'true'">ZMQ_HAVE_OPENPGM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-gssapi)' == 'true'">HAVE_LIBGSSAPI_KRB5;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<PreprocessorDefinitions Condition="'$(Option-draftapi)' == 'true'">ZMQ_BUILD_DRAFT_API;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions Condition="'$(Option-draftapi)' == 'true'">ZMQ_BUILD_DRAFT_API;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
@ -61,7 +60,6 @@
|
|||||||
<!-- Messages -->
|
<!-- Messages -->
|
||||||
|
|
||||||
<Target Name="OptionInfo" BeforeTargets="PrepareForBuild">
|
<Target Name="OptionInfo" BeforeTargets="PrepareForBuild">
|
||||||
<Message Text="Option-tweet : $(Option-tweet)" Importance="high"/>
|
|
||||||
<Message Text="Option-sodium : $(Option-sodium)" Importance="high"/>
|
<Message Text="Option-sodium : $(Option-sodium)" Importance="high"/>
|
||||||
<Message Text="Option-openpgm : $(Option-openpgm)" Importance="high"/>
|
<Message Text="Option-openpgm : $(Option-openpgm)" Importance="high"/>
|
||||||
<Message Text="Option-gssapi : $(Option-gssapi)" Importance="high"/>
|
<Message Text="Option-gssapi : $(Option-gssapi)" Importance="high"/>
|
||||||
@ -73,4 +71,4 @@
|
|||||||
<Message Text="Linkage-libsodium : $(Linkage-libsodium)" Importance="high" Condition="'$(Option-sodium)' == 'true'"/>
|
<Message Text="Linkage-libsodium : $(Linkage-libsodium)" Importance="high" Condition="'$(Option-sodium)' == 'true'"/>
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -66,9 +66,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
<ClInclude Include="..\..\resource.h" />
|
<ClInclude Include="..\..\resource.h" />
|
||||||
@ -159,7 +156,6 @@
|
|||||||
<ClInclude Include="..\..\..\..\src\timers.hpp" />
|
<ClInclude Include="..\..\..\..\src\timers.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\thread.hpp" />
|
<ClInclude Include="..\..\..\..\src\thread.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\trie.hpp" />
|
<ClInclude Include="..\..\..\..\src\trie.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\tweetnacl.h" />
|
|
||||||
<ClInclude Include="..\..\..\..\src\udp_address.hpp" />
|
<ClInclude Include="..\..\..\..\src\udp_address.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\udp_engine.hpp" />
|
<ClInclude Include="..\..\..\..\src\udp_engine.hpp" />
|
||||||
<ClInclude Include="..\..\..\..\src\v1_decoder.hpp" />
|
<ClInclude Include="..\..\..\..\src\v1_decoder.hpp" />
|
||||||
@ -257,9 +253,6 @@
|
|||||||
<ClCompile Include="..\..\..\..\src\thread.cpp" />
|
<ClCompile Include="..\..\..\..\src\thread.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\timers.cpp" />
|
<ClCompile Include="..\..\..\..\src\timers.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\trie.cpp" />
|
<ClCompile Include="..\..\..\..\src\trie.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\tweetnacl.c">
|
|
||||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\..\..\src\udp_address.cpp" />
|
<ClCompile Include="..\..\..\..\src\udp_address.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\udp_engine.cpp" />
|
<ClCompile Include="..\..\..\..\src\udp_engine.cpp" />
|
||||||
<ClCompile Include="..\..\..\..\src\v1_decoder.cpp" />
|
<ClCompile Include="..\..\..\..\src\v1_decoder.cpp" />
|
||||||
@ -286,4 +279,4 @@
|
|||||||
<ResourceCompile Include="..\..\resource.rc" />
|
<ResourceCompile Include="..\..\resource.rc" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -265,9 +265,6 @@
|
|||||||
<ClCompile Include="..\..\..\..\src\timers.cpp">
|
<ClCompile Include="..\..\..\..\src\timers.cpp">
|
||||||
<Filter>src</Filter>
|
<Filter>src</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\..\..\src\tweetnacl.c">
|
|
||||||
<Filter>src</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\..\..\include\zmq.h">
|
<ClInclude Include="..\..\..\..\include\zmq.h">
|
||||||
@ -573,9 +570,6 @@
|
|||||||
<ClInclude Include="..\..\..\..\src\timers.hpp">
|
<ClInclude Include="..\..\..\..\src\timers.hpp">
|
||||||
<Filter>src\include</Filter>
|
<Filter>src\include</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\..\..\..\src\tweetnacl.h">
|
|
||||||
<Filter>src\include</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\..\..\src\zmq_draft.h">
|
<ClInclude Include="..\..\..\..\src\zmq_draft.h">
|
||||||
<Filter>src\include</Filter>
|
<Filter>src\include</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
@ -624,4 +618,4 @@
|
|||||||
<Filter>resource</Filter>
|
<Filter>resource</Filter>
|
||||||
</ResourceCompile>
|
</ResourceCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
<ProjectSchemaDefinitions xmlns="clr-namespace:Microsoft.Build.Framework.XamlTypes;assembly=Microsoft.Build.Framework">
|
||||||
<Rule Name="libzmq-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
<Rule Name="libzmq-uiextension" PageTemplate="tool" DisplayName="ZMQ Options" SwitchPrefix="/" Order="1">
|
||||||
<Rule.Categories>
|
<Rule.Categories>
|
||||||
<Category Name="tweet" DisplayName="tweet" />
|
|
||||||
<Category Name="sodium" DisplayName="sodium" />
|
<Category Name="sodium" DisplayName="sodium" />
|
||||||
<Category Name="openpgm" DisplayName="openpgm" />
|
<Category Name="openpgm" DisplayName="openpgm" />
|
||||||
<Category Name="gssapi" DisplayName="gssapi" />
|
<Category Name="gssapi" DisplayName="gssapi" />
|
||||||
@ -12,10 +11,6 @@
|
|||||||
<Rule.DataSource>
|
<Rule.DataSource>
|
||||||
<DataSource Persistence="ProjectFile" ItemType="" />
|
<DataSource Persistence="ProjectFile" ItemType="" />
|
||||||
</Rule.DataSource>
|
</Rule.DataSource>
|
||||||
<EnumProperty Name="Option-tweet" DisplayName="Enable Tweet NaCl" Description="Enable Tweet NaCl build option (overrides Sodium)" Category="tweet">
|
|
||||||
<EnumValue Name="" DisplayName="No" />
|
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
|
||||||
</EnumProperty>
|
|
||||||
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable Sodium build option" Category="sodium">
|
<EnumProperty Name="Option-sodium" DisplayName="Enable Sodium" Description="Enable Sodium build option" Category="sodium">
|
||||||
<EnumValue Name="" DisplayName="No" />
|
<EnumValue Name="" DisplayName="No" />
|
||||||
<EnumValue Name="true" DisplayName="Yes" />
|
<EnumValue Name="true" DisplayName="Yes" />
|
||||||
@ -37,4 +32,4 @@
|
|||||||
<EnumValue Name="true" DisplayName="Yes" />
|
<EnumValue Name="true" DisplayName="Yes" />
|
||||||
</EnumProperty>
|
</EnumProperty>
|
||||||
</Rule>
|
</Rule>
|
||||||
</ProjectSchemaDefinitions>
|
</ProjectSchemaDefinitions>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -63,9 +63,6 @@
|
|||||||
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
<Import Project="$(ProjectDir)..\..\properties\Output.props" />
|
||||||
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
<Import Project="$(ProjectDir)$(ProjectName).props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<Option-tweet>true</Option-tweet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\platform.hpp" />
|
<ClInclude Include="..\..\platform.hpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -79,4 +76,4 @@
|
|||||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -40,7 +40,6 @@
|
|||||||
|
|
||||||
// Set for all platforms
|
// Set for all platforms
|
||||||
#define ZMQ_HAVE_CURVE 1
|
#define ZMQ_HAVE_CURVE 1
|
||||||
#define ZMQ_USE_TWEETNACL 1
|
|
||||||
|
|
||||||
#if defined ZMQ_HAVE_WINDOWS
|
#if defined ZMQ_HAVE_WINDOWS
|
||||||
# define ZMQ_USE_SELECT 1
|
# define ZMQ_USE_SELECT 1
|
||||||
|
@ -245,8 +245,6 @@
|
|||||||
'../../src/tipc_listener.hpp',
|
'../../src/tipc_listener.hpp',
|
||||||
'../../src/trie.cpp',
|
'../../src/trie.cpp',
|
||||||
'../../src/trie.hpp',
|
'../../src/trie.hpp',
|
||||||
'../../src/tweetnacl.c',
|
|
||||||
'../../src/tweetnacl.h',
|
|
||||||
'../../src/udp_address.cpp',
|
'../../src/udp_address.cpp',
|
||||||
'../../src/udp_address.hpp',
|
'../../src/udp_address.hpp',
|
||||||
'../../src/udp_engine.cpp',
|
'../../src/udp_engine.cpp',
|
||||||
|
11
configure.ac
11
configure.ac
@ -558,12 +558,12 @@ if test "x$have_gssapi_library" = "xyes"; then
|
|||||||
fi
|
fi
|
||||||
AM_CONDITIONAL(BUILD_GSSAPI, test "x$have_gssapi_library" = "xyes")
|
AM_CONDITIONAL(BUILD_GSSAPI, test "x$have_gssapi_library" = "xyes")
|
||||||
|
|
||||||
# Select curve encryption library, defaults to tweetnacl
|
# Select curve encryption library, defaults to disabled
|
||||||
# To use libsodium instead, use --with-libsodium (must be installed)
|
# To use libsodium instead, use --with-libsodium (must be installed)
|
||||||
# To disable curve, use --disable-curve
|
# To disable curve, use --disable-curve
|
||||||
|
|
||||||
AC_ARG_WITH([libsodium],
|
AC_ARG_WITH([libsodium],
|
||||||
[AS_HELP_STRING([--with-libsodium], [use libsodium instead of built-in tweetnacl [default=no]])])
|
[AS_HELP_STRING([--with-libsodium], [use libsodium [default=no]])])
|
||||||
|
|
||||||
AS_IF([test "x$with_libsodium" = "xyes"], [
|
AS_IF([test "x$with_libsodium" = "xyes"], [
|
||||||
PKG_CHECK_MODULES([sodium], [libsodium], [libsodium_found=yes], [
|
PKG_CHECK_MODULES([sodium], [libsodium], [libsodium_found=yes], [
|
||||||
@ -620,18 +620,11 @@ elif test "x$with_libsodium" = "xyes"; then
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE libsodium"
|
PKGCFG_NAMES_PRIVATE="$PKGCFG_NAMES_PRIVATE libsodium"
|
||||||
else
|
|
||||||
AC_MSG_NOTICE([Using tweetnacl for CURVE security])
|
|
||||||
AC_DEFINE(ZMQ_HAVE_CURVE, [1], [Using curve encryption])
|
|
||||||
AC_DEFINE(ZMQ_USE_TWEETNACL, [1], [Using tweetnacl for curve encryption])
|
|
||||||
curve_library="tweetnacl"
|
|
||||||
enable_curve="yes"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AM_CONDITIONAL(ENABLE_CURVE_KEYGEN, test "x$enable_curve" = "xyes" -a "x$zmq_enable_curve_keygen" = "xyes")
|
AM_CONDITIONAL(ENABLE_CURVE_KEYGEN, test "x$enable_curve" = "xyes" -a "x$zmq_enable_curve_keygen" = "xyes")
|
||||||
|
|
||||||
AM_CONDITIONAL(USE_LIBSODIUM, test "$curve_library" = "libsodium")
|
AM_CONDITIONAL(USE_LIBSODIUM, test "$curve_library" = "libsodium")
|
||||||
AM_CONDITIONAL(USE_TWEETNACL, test "$curve_library" = "tweetnacl")
|
|
||||||
AM_CONDITIONAL(HAVE_CURVE, test "x$curve_library" != "x")
|
AM_CONDITIONAL(HAVE_CURVE, test "x$curve_library" != "x")
|
||||||
AM_CONDITIONAL(USE_WEPOLL, test "$poller" = "wepoll")
|
AM_CONDITIONAL(USE_WEPOLL, test "$poller" = "wepoll")
|
||||||
|
|
||||||
|
@ -619,23 +619,11 @@ Default value:: 100
|
|||||||
Applicable socket types:: all, only for connection-oriented transports
|
Applicable socket types:: all, only for connection-oriented transports
|
||||||
|
|
||||||
|
|
||||||
ZMQ_RECONNECT_IVL_MAX: Retrieve maximum reconnection interval
|
ZMQ_RECONNECT_IVL_MAX: DEPRECATED
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
The 'ZMQ_RECONNECT_IVL_MAX' option shall retrieve the maximum reconnection
|
The 'ZMQ_RECONNECT_IVL_MAX option is an empty stub that only returns an
|
||||||
interval for the specified 'socket'. This is the maximum period 0MQ shall wait
|
*EOPNOTSUPP* error, as the author did not provide a relicense agreement for
|
||||||
between attempts to reconnect. On each reconnect attempt, the previous interval
|
the Mozilla Public License v2 relicense of libzmq.
|
||||||
shall be doubled until ZMQ_RECONNECT_IVL_MAX is reached. This allows for
|
|
||||||
exponential backoff strategy. Default value means no exponential backoff is
|
|
||||||
performed and reconnect interval calculations are only based on
|
|
||||||
ZMQ_RECONNECT_IVL.
|
|
||||||
|
|
||||||
NOTE: Values less than ZMQ_RECONNECT_IVL will be ignored.
|
|
||||||
|
|
||||||
[horizontal]
|
|
||||||
Option value type:: int
|
|
||||||
Option value unit:: milliseconds
|
|
||||||
Default value:: 0 (only use ZMQ_RECONNECT_IVL)
|
|
||||||
Applicable socket types:: all, only for connection-oriented transport
|
|
||||||
|
|
||||||
|
|
||||||
ZMQ_RECONNECT_STOP: Retrieve condition where reconnection will stop
|
ZMQ_RECONNECT_STOP: Retrieve condition where reconnection will stop
|
||||||
@ -985,8 +973,8 @@ Applicable socket types:: All, when using TCP, IPC, PGM or NORM transport.
|
|||||||
|
|
||||||
ZMQ_TOPICS_COUNT: Number of topic subscriptions received
|
ZMQ_TOPICS_COUNT: Number of topic subscriptions received
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Gets the number of topic (prefix) subscriptions either
|
Gets the number of topic (prefix) subscriptions either
|
||||||
* received on a (X)PUB socket from all the connected (X)SUB sockets or
|
* received on a (X)PUB socket from all the connected (X)SUB sockets or
|
||||||
* acknowledged on an (X)SUB socket from all the connected (X)PUB sockets
|
* acknowledged on an (X)SUB socket from all the connected (X)PUB sockets
|
||||||
|
|
||||||
NOTE: in DRAFT state, not yet available in stable releases.
|
NOTE: in DRAFT state, not yet available in stable releases.
|
||||||
|
@ -3,7 +3,7 @@ zmq_proxy_steerable(3)
|
|||||||
|
|
||||||
NAME
|
NAME
|
||||||
----
|
----
|
||||||
zmq_proxy_steerable - built-in 0MQ proxy with control flow
|
zmq_proxy_steerable - DEPRECATED
|
||||||
|
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
@ -14,101 +14,9 @@ SYNOPSIS
|
|||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
The _zmq_proxy_steerable()_ function starts the built-in 0MQ proxy in the
|
The _zmq_proxy_steerable()_ function is an empty stub that only returns an
|
||||||
current application thread, as _zmq_proxy()_ do. Please, refer to this function
|
*EOPNOTSUPP* error, as the author did not provide a relicense agreement for
|
||||||
for the general description and usage. We describe here only the additional
|
the Mozilla Public License v2 relicense of libzmq.
|
||||||
control flow provided by the socket passed as the fourth argument "control".
|
|
||||||
|
|
||||||
If the control socket is not NULL, the proxy supports control flow. If
|
|
||||||
'PAUSE' is received on this socket, the proxy suspends its activities. If
|
|
||||||
'RESUME' is received, it goes on. If 'TERMINATE' is received, it terminates
|
|
||||||
smoothly. If 'STATISTICS' is received, the proxy will reply on the control socket
|
|
||||||
sending a multipart message with 8 frames, each with an unsigned integer 64-bit
|
|
||||||
wide that provide in the following order:
|
|
||||||
- number of messages received by the frontend socket
|
|
||||||
- number of bytes received by the frontend socket
|
|
||||||
- number of messages sent out the frontend socket
|
|
||||||
- number of bytes sent out the frontend socket
|
|
||||||
- number of messages received by the backend socket
|
|
||||||
- number of bytes received by the backend socket
|
|
||||||
- number of messages sent out the backend socket
|
|
||||||
- number of bytes sent out the backend socket
|
|
||||||
|
|
||||||
At start, the proxy runs normally as if zmq_proxy was used.
|
|
||||||
|
|
||||||
If the control socket is NULL, the function behave exactly as if linkzmq:zmq_proxy[3]
|
|
||||||
had been called.
|
|
||||||
|
|
||||||
|
|
||||||
Refer to linkzmq:zmq_socket[3] for a description of the available socket types.
|
|
||||||
Refer to linkzmq:zmq_proxy[3] for a description of the zmq_proxy.
|
|
||||||
|
|
||||||
EXAMPLE USAGE
|
|
||||||
-------------
|
|
||||||
cf zmq_proxy
|
|
||||||
|
|
||||||
RETURN VALUE
|
|
||||||
------------
|
|
||||||
The _zmq_proxy_steerable()_ function returns 0 if TERMINATE is sent to its
|
|
||||||
control socket. Otherwise, it returns `-1` and 'errno' set to *ETERM* or
|
|
||||||
*EINTR* (the 0MQ 'context' associated with either of the specified sockets was
|
|
||||||
terminated) or *EFAULT* (the provided 'frontend' or 'backend' was invalid).
|
|
||||||
|
|
||||||
|
|
||||||
EXAMPLE
|
|
||||||
-------
|
|
||||||
.Creating a shared queue proxy
|
|
||||||
----
|
|
||||||
// Create frontend, backend and control sockets
|
|
||||||
void *frontend = zmq_socket (context, ZMQ_ROUTER);
|
|
||||||
assert (frontend);
|
|
||||||
void *backend = zmq_socket (context, ZMQ_DEALER);
|
|
||||||
assert (backend);
|
|
||||||
void *control = zmq_socket (context, ZMQ_SUB);
|
|
||||||
assert (control);
|
|
||||||
|
|
||||||
// Bind sockets to TCP ports
|
|
||||||
assert (zmq_bind (frontend, "tcp://*:5555") == 0);
|
|
||||||
assert (zmq_bind (backend, "tcp://*:5556") == 0);
|
|
||||||
assert (zmq_connect (control, "tcp://*:5557") == 0);
|
|
||||||
|
|
||||||
// Subscribe to the control socket since we have chosen SUB here
|
|
||||||
assert (zmq_setsockopt (control, ZMQ_SUBSCRIBE, "", 0));
|
|
||||||
|
|
||||||
// Start the queue proxy, which runs until ETERM or "TERMINATE"
|
|
||||||
// received on the control socket
|
|
||||||
zmq_proxy_steerable (frontend, backend, NULL, control);
|
|
||||||
----
|
|
||||||
.Set up a controller in another node, process or whatever
|
|
||||||
----
|
|
||||||
void *control = zmq_socket (context, ZMQ_PUB);
|
|
||||||
assert (control);
|
|
||||||
assert (zmq_bind (control, "tcp://*:5557") == 0);
|
|
||||||
|
|
||||||
// pause the proxy
|
|
||||||
assert (zmq_send (control, "PAUSE", 5, 0) == 0);
|
|
||||||
|
|
||||||
// resume the proxy
|
|
||||||
assert (zmq_send (control, "RESUME", 6, 0) == 0);
|
|
||||||
|
|
||||||
// terminate the proxy
|
|
||||||
assert (zmq_send (control, "TERMINATE", 9, 0) == 0);
|
|
||||||
|
|
||||||
// check statistics
|
|
||||||
assert (zmq_send (control, "STATISTICS", 10, 0) == 0);
|
|
||||||
zmq_msg_t stats_msg;
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
assert (zmq_msg_init (&stats_msg) == 0);
|
|
||||||
assert (zmq_recvmsg (control, &stats_msg, 0) == sizeof (uint64_t));
|
|
||||||
assert (rc == sizeof (uint64_t));
|
|
||||||
printf ("Stat: %lu\n", *(unsigned long int *)zmq_msg_data (&stats_msg));
|
|
||||||
if (!zmq_msg_get (&stats_msg, ZMQ_MORE))
|
|
||||||
break;
|
|
||||||
assert (zmq_msg_close (&stats_msg) == 0);
|
|
||||||
}
|
|
||||||
assert (zmq_msg_close (&stats_msg) == 0);
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
|
@ -750,22 +750,11 @@ Default value:: 100
|
|||||||
Applicable socket types:: all, only for connection-oriented transports
|
Applicable socket types:: all, only for connection-oriented transports
|
||||||
|
|
||||||
|
|
||||||
ZMQ_RECONNECT_IVL_MAX: Set maximum reconnection interval
|
ZMQ_RECONNECT_IVL_MAX: DEPRECATED
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
The 'ZMQ_RECONNECT_IVL_MAX' option shall set the maximum reconnection interval
|
The 'ZMQ_RECONNECT_IVL_MAX option is an empty stub that only returns an
|
||||||
for the specified 'socket'. This is the maximum period 0MQ shall wait between
|
*EOPNOTSUPP* error, as the author did not provide a relicense agreement for
|
||||||
attempts to reconnect. On each reconnect attempt, the previous interval shall be
|
the Mozilla Public License v2 relicense of libzmq.
|
||||||
doubled until ZMQ_RECONNECT_IVL_MAX is reached. This allows for exponential
|
|
||||||
backoff strategy. Default value means no exponential backoff is performed and
|
|
||||||
reconnect interval calculations are only based on ZMQ_RECONNECT_IVL.
|
|
||||||
|
|
||||||
NOTE: Values less than ZMQ_RECONNECT_IVL will be ignored.
|
|
||||||
|
|
||||||
[horizontal]
|
|
||||||
Option value type:: int
|
|
||||||
Option value unit:: milliseconds
|
|
||||||
Default value:: 0 (only use ZMQ_RECONNECT_IVL)
|
|
||||||
Applicable socket types:: all, only for connection-oriented transports
|
|
||||||
|
|
||||||
|
|
||||||
ZMQ_RECONNECT_STOP: Set condition where reconnection will stop
|
ZMQ_RECONNECT_STOP: Set condition where reconnection will stop
|
||||||
@ -784,7 +773,7 @@ connection attempts to non-0MQ sockets. Note that when specifying this option
|
|||||||
you may also want to set `ZMQ_HANDSHAKE_IVL` -- the default handshake interval
|
you may also want to set `ZMQ_HANDSHAKE_IVL` -- the default handshake interval
|
||||||
is 30000 (30 seconds), which is typically too large.
|
is 30000 (30 seconds), which is typically too large.
|
||||||
|
|
||||||
The 'ZMQ_RECONNECT_STOP_AFTER_DISCONNECT' option will stop reconnection when
|
The 'ZMQ_RECONNECT_STOP_AFTER_DISCONNECT' option will stop reconnection when
|
||||||
zmq_disconnect() has been called. This can be useful when the user's request failed
|
zmq_disconnect() has been called. This can be useful when the user's request failed
|
||||||
(server not ready), as the socket does not need to continue to reconnect after
|
(server not ready), as the socket does not need to continue to reconnect after
|
||||||
user disconnect actively.
|
user disconnect actively.
|
||||||
|
@ -566,7 +566,7 @@ zmq_z85_encode (char *dest_, const uint8_t *data_, size_t size_);
|
|||||||
/* Decode data with Z85 encoding. Returns decoded data */
|
/* Decode data with Z85 encoding. Returns decoded data */
|
||||||
ZMQ_EXPORT uint8_t *zmq_z85_decode (uint8_t *dest_, const char *string_);
|
ZMQ_EXPORT uint8_t *zmq_z85_decode (uint8_t *dest_, const char *string_);
|
||||||
|
|
||||||
/* Generate z85-encoded public and private keypair with tweetnacl/libsodium. */
|
/* Generate z85-encoded public and private keypair with libsodium. */
|
||||||
/* Returns 0 on success. */
|
/* Returns 0 on success. */
|
||||||
ZMQ_EXPORT int zmq_curve_keypair (char *z85_public_key_, char *z85_secret_key_);
|
ZMQ_EXPORT int zmq_curve_keypair (char *z85_public_key_, char *z85_secret_key_);
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
<requireLicenseAcceptance>true</requireLicenseAcceptance>
|
<requireLicenseAcceptance>true</requireLicenseAcceptance>
|
||||||
<developmentDependency>false</developmentDependency>
|
<developmentDependency>false</developmentDependency>
|
||||||
<description>The 0MQ lightweight messaging kernel is a library which extends the standard socket interfaces with features traditionally provided by specialised messaging middleware products. 0MQ sockets provide an abstraction of asynchronous message queues, multiple messaging patterns, message filtering (subscriptions), seamless access to multiple transport protocols and more.</description>
|
<description>The 0MQ lightweight messaging kernel is a library which extends the standard socket interfaces with features traditionally provided by specialised messaging middleware products. 0MQ sockets provide an abstraction of asynchronous message queues, multiple messaging patterns, message filtering (subscriptions), seamless access to multiple transport protocols and more.</description>
|
||||||
<summary>The 0MQ lightweight messaging kernel, with tweetnacl integrated, packaged for specific Visual Studio compiler.</summary>
|
<summary>The 0MQ lightweight messaging kernel, packaged for specific Visual Studio compiler.</summary>
|
||||||
<releaseNotes>https://raw.github.com/zeromq/libzmq/master/NEWS</releaseNotes>
|
<releaseNotes>https://raw.github.com/zeromq/libzmq/master/NEWS</releaseNotes>
|
||||||
<copyright>GNU Lesser GPL v3</copyright>
|
<copyright>GNU Lesser GPL v3</copyright>
|
||||||
<tags>native, libzmq, zmq, 0MQ, messaging, sockets, C++</tags>
|
<tags>native, libzmq, zmq, 0MQ, messaging, sockets, C++</tags>
|
||||||
@ -125,8 +125,6 @@
|
|||||||
<!-- general -->
|
<!-- general -->
|
||||||
<ItemDefinitionGroup>
|
<ItemDefinitionGroup>
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<!-- ZMQ_USE_TWEETNACL defined in packaged builds and must be defined for package consumer. -->
|
|
||||||
<PreprocessorDefinitions>ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<AdditionalIncludeDirectories>$\(MSBuildThisFileDirectory)include\\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$\(MSBuildThisFileDirectory)include\\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
@ -261,4 +259,4 @@
|
|||||||
<EnumValue Name="ltcg" DisplayName="Static using link time compile generation (LTCG)" />
|
<EnumValue Name="ltcg" DisplayName="Static using link time compile generation (LTCG)" />
|
||||||
</EnumProperty>
|
</EnumProperty>
|
||||||
</Rule>
|
</Rule>
|
||||||
</ProjectSchemaDefinitions>
|
</ProjectSchemaDefinitions>
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
<requireLicenseAcceptance>true</requireLicenseAcceptance>
|
<requireLicenseAcceptance>true</requireLicenseAcceptance>
|
||||||
<developmentDependency>false</developmentDependency>
|
<developmentDependency>false</developmentDependency>
|
||||||
<description>The 0MQ lightweight messaging kernel is a library which extends the standard socket interfaces with features traditionally provided by specialised messaging middleware products. 0MQ sockets provide an abstraction of asynchronous message queues, multiple messaging patterns, message filtering (subscriptions), seamless access to multiple transport protocols and more.</description>
|
<description>The 0MQ lightweight messaging kernel is a library which extends the standard socket interfaces with features traditionally provided by specialised messaging middleware products. 0MQ sockets provide an abstraction of asynchronous message queues, multiple messaging patterns, message filtering (subscriptions), seamless access to multiple transport protocols and more.</description>
|
||||||
<summary>The 0MQ lightweight messaging kernel, with tweetnacl integrated, packaged for specific Visual Studio compiler.</summary>
|
<summary>The 0MQ lightweight messaging kernel, packaged for specific Visual Studio compiler.</summary>
|
||||||
<releaseNotes>https://raw.github.com/zeromq/libzmq/master/NEWS</releaseNotes>
|
<releaseNotes>https://raw.github.com/zeromq/libzmq/master/NEWS</releaseNotes>
|
||||||
<copyright>GNU Lesser GPL v3</copyright>
|
<copyright>GNU Lesser GPL v3</copyright>
|
||||||
<tags>native, libzmq, zmq, 0MQ, messaging, sockets, C++</tags>
|
<tags>native, libzmq, zmq, 0MQ, messaging, sockets, C++</tags>
|
||||||
|
@ -14,8 +14,6 @@
|
|||||||
<!-- general -->
|
<!-- general -->
|
||||||
<ItemDefinitionGroup>
|
<ItemDefinitionGroup>
|
||||||
<ClCompile>
|
<ClCompile>
|
||||||
<!-- ZMQ_USE_TWEETNACL defined in packaged builds and must be defined for package consumer. -->
|
|
||||||
<PreprocessorDefinitions>ZMQ_USE_TWEETNACL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
|
@ -32,9 +32,7 @@
|
|||||||
|
|
||||||
#ifdef ZMQ_HAVE_CURVE
|
#ifdef ZMQ_HAVE_CURVE
|
||||||
|
|
||||||
#if defined(ZMQ_USE_TWEETNACL)
|
#if defined(ZMQ_USE_LIBSODIUM)
|
||||||
#include "tweetnacl.h"
|
|
||||||
#elif defined(ZMQ_USE_LIBSODIUM)
|
|
||||||
#include "sodium.h"
|
#include "sodium.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -32,9 +32,7 @@
|
|||||||
|
|
||||||
#ifdef ZMQ_HAVE_CURVE
|
#ifdef ZMQ_HAVE_CURVE
|
||||||
|
|
||||||
#if defined(ZMQ_USE_TWEETNACL)
|
#if defined(ZMQ_USE_LIBSODIUM)
|
||||||
#include "tweetnacl.h"
|
|
||||||
#elif defined(ZMQ_USE_LIBSODIUM)
|
|
||||||
#include "sodium.h"
|
#include "sodium.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -213,7 +213,6 @@ zmq::options_t::options_t () :
|
|||||||
tcp_maxrt (0),
|
tcp_maxrt (0),
|
||||||
reconnect_stop (0),
|
reconnect_stop (0),
|
||||||
reconnect_ivl (100),
|
reconnect_ivl (100),
|
||||||
reconnect_ivl_max (0),
|
|
||||||
backlog (100),
|
backlog (100),
|
||||||
maxmsgsize (-1),
|
maxmsgsize (-1),
|
||||||
rcvtimeo (-1),
|
rcvtimeo (-1),
|
||||||
@ -428,11 +427,11 @@ int zmq::options_t::setsockopt (int option_,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case ZMQ_RECONNECT_IVL_MAX:
|
case ZMQ_RECONNECT_IVL_MAX:
|
||||||
if (is_int && value >= 0) {
|
#ifdef ZMQ_HAVE_WINDOWS
|
||||||
reconnect_ivl_max = value;
|
return WSAEOPNOTSUPP;
|
||||||
return 0;
|
#else
|
||||||
}
|
return -EOPNOTSUPP;
|
||||||
break;
|
#endif
|
||||||
|
|
||||||
case ZMQ_BACKLOG:
|
case ZMQ_BACKLOG:
|
||||||
if (is_int && value >= 0) {
|
if (is_int && value >= 0) {
|
||||||
@ -1076,11 +1075,11 @@ int zmq::options_t::getsockopt (int option_,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case ZMQ_RECONNECT_IVL_MAX:
|
case ZMQ_RECONNECT_IVL_MAX:
|
||||||
if (is_int) {
|
#ifdef ZMQ_HAVE_WINDOWS
|
||||||
*value = reconnect_ivl_max;
|
return WSAEOPNOTSUPP;
|
||||||
return 0;
|
#else
|
||||||
}
|
return -EOPNOTSUPP;
|
||||||
break;
|
#endif
|
||||||
|
|
||||||
case ZMQ_BACKLOG:
|
case ZMQ_BACKLOG:
|
||||||
if (is_int) {
|
if (is_int) {
|
||||||
|
@ -127,10 +127,6 @@ struct options_t
|
|||||||
// Default 100ms
|
// Default 100ms
|
||||||
int reconnect_ivl;
|
int reconnect_ivl;
|
||||||
|
|
||||||
// Maximum interval between attempts to reconnect, in milliseconds.
|
|
||||||
// Default 0 (unused)
|
|
||||||
int reconnect_ivl_max;
|
|
||||||
|
|
||||||
// Maximum backlog for pending connections.
|
// Maximum backlog for pending connections.
|
||||||
int backlog;
|
int backlog;
|
||||||
|
|
||||||
|
227
src/proxy.cpp
227
src/proxy.cpp
@ -56,7 +56,6 @@
|
|||||||
do { \
|
do { \
|
||||||
delete poller_all; \
|
delete poller_all; \
|
||||||
delete poller_in; \
|
delete poller_in; \
|
||||||
delete poller_control; \
|
|
||||||
delete poller_receive_blocked; \
|
delete poller_receive_blocked; \
|
||||||
delete poller_send_blocked; \
|
delete poller_send_blocked; \
|
||||||
delete poller_both_blocked; \
|
delete poller_both_blocked; \
|
||||||
@ -75,20 +74,6 @@
|
|||||||
|
|
||||||
#endif // ZMQ_HAVE_POLLER
|
#endif // ZMQ_HAVE_POLLER
|
||||||
|
|
||||||
|
|
||||||
// Control socket messages
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
uint64_t msg_in;
|
|
||||||
uint64_t bytes_in;
|
|
||||||
uint64_t msg_out;
|
|
||||||
uint64_t bytes_out;
|
|
||||||
} zmq_socket_stats_t;
|
|
||||||
|
|
||||||
|
|
||||||
// Utility functions
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
capture (class zmq::socket_base_t *capture_, zmq::msg_t *msg_, int more_ = 0)
|
capture (class zmq::socket_base_t *capture_, zmq::msg_t *msg_, int more_ = 0)
|
||||||
{
|
{
|
||||||
@ -109,9 +94,7 @@ capture (class zmq::socket_base_t *capture_, zmq::msg_t *msg_, int more_ = 0)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int forward (class zmq::socket_base_t *from_,
|
static int forward (class zmq::socket_base_t *from_,
|
||||||
zmq_socket_stats_t *from_stats_,
|
|
||||||
class zmq::socket_base_t *to_,
|
class zmq::socket_base_t *to_,
|
||||||
zmq_socket_stats_t *to_stats_,
|
|
||||||
class zmq::socket_base_t *capture_,
|
class zmq::socket_base_t *capture_,
|
||||||
zmq::msg_t *msg_)
|
zmq::msg_t *msg_)
|
||||||
{
|
{
|
||||||
@ -119,7 +102,6 @@ static int forward (class zmq::socket_base_t *from_,
|
|||||||
for (unsigned int i = 0; i < zmq::proxy_burst_size; i++) {
|
for (unsigned int i = 0; i < zmq::proxy_burst_size; i++) {
|
||||||
int more;
|
int more;
|
||||||
size_t moresz;
|
size_t moresz;
|
||||||
size_t complete_msg_size = 0;
|
|
||||||
|
|
||||||
// Forward all the parts of one message
|
// Forward all the parts of one message
|
||||||
while (true) {
|
while (true) {
|
||||||
@ -131,8 +113,6 @@ static int forward (class zmq::socket_base_t *from_,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
complete_msg_size += msg_->size ();
|
|
||||||
|
|
||||||
moresz = sizeof more;
|
moresz = sizeof more;
|
||||||
rc = from_->getsockopt (ZMQ_RCVMORE, &more, &moresz);
|
rc = from_->getsockopt (ZMQ_RCVMORE, &more, &moresz);
|
||||||
if (unlikely (rc < 0))
|
if (unlikely (rc < 0))
|
||||||
@ -150,76 +130,15 @@ static int forward (class zmq::socket_base_t *from_,
|
|||||||
if (more == 0)
|
if (more == 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// A multipart message counts as 1 packet:
|
|
||||||
from_stats_->msg_in++;
|
|
||||||
from_stats_->bytes_in += complete_msg_size;
|
|
||||||
to_stats_->msg_out++;
|
|
||||||
to_stats_->bytes_out += complete_msg_size;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int loop_and_send_multipart_stat (zmq::socket_base_t *control_,
|
|
||||||
uint64_t stat_,
|
|
||||||
bool first_,
|
|
||||||
bool more_)
|
|
||||||
{
|
|
||||||
int rc;
|
|
||||||
zmq::msg_t msg;
|
|
||||||
|
|
||||||
// VSM of 8 bytes can't fail to init
|
|
||||||
msg.init_size (sizeof (uint64_t));
|
|
||||||
memcpy (msg.data (), &stat_, sizeof (uint64_t));
|
|
||||||
|
|
||||||
// if the first message is handed to the pipe successfully then the HWM
|
|
||||||
// is not full, which means failures are due to interrupts (on Windows pipes
|
|
||||||
// are TCP sockets), so keep retrying
|
|
||||||
do {
|
|
||||||
rc = control_->send (&msg, more_ ? ZMQ_SNDMORE : 0);
|
|
||||||
} while (!first_ && rc != 0 && errno == EAGAIN);
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int reply_stats (zmq::socket_base_t *control_,
|
|
||||||
const zmq_socket_stats_t *frontend_stats_,
|
|
||||||
const zmq_socket_stats_t *backend_stats_)
|
|
||||||
{
|
|
||||||
// first part: frontend stats - the first send might fail due to HWM
|
|
||||||
if (loop_and_send_multipart_stat (control_, frontend_stats_->msg_in, true,
|
|
||||||
true)
|
|
||||||
!= 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
loop_and_send_multipart_stat (control_, frontend_stats_->bytes_in, false,
|
|
||||||
true);
|
|
||||||
loop_and_send_multipart_stat (control_, frontend_stats_->msg_out, false,
|
|
||||||
true);
|
|
||||||
loop_and_send_multipart_stat (control_, frontend_stats_->bytes_out, false,
|
|
||||||
true);
|
|
||||||
|
|
||||||
// second part: backend stats
|
|
||||||
loop_and_send_multipart_stat (control_, backend_stats_->msg_in, false,
|
|
||||||
true);
|
|
||||||
loop_and_send_multipart_stat (control_, backend_stats_->bytes_in, false,
|
|
||||||
true);
|
|
||||||
loop_and_send_multipart_stat (control_, backend_stats_->msg_out, false,
|
|
||||||
true);
|
|
||||||
loop_and_send_multipart_stat (control_, backend_stats_->bytes_out, false,
|
|
||||||
false);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef ZMQ_HAVE_POLLER
|
#ifdef ZMQ_HAVE_POLLER
|
||||||
|
|
||||||
int zmq::proxy (class socket_base_t *frontend_,
|
int zmq::proxy (class socket_base_t *frontend_,
|
||||||
class socket_base_t *backend_,
|
class socket_base_t *backend_,
|
||||||
class socket_base_t *capture_,
|
class socket_base_t *capture_)
|
||||||
class socket_base_t *control_)
|
|
||||||
{
|
{
|
||||||
msg_t msg;
|
msg_t msg;
|
||||||
int rc = msg.init ();
|
int rc = msg.init ();
|
||||||
@ -229,9 +148,6 @@ int zmq::proxy (class socket_base_t *frontend_,
|
|||||||
// The algorithm below assumes ratio of requests and replies processed
|
// The algorithm below assumes ratio of requests and replies processed
|
||||||
// under full load to be 1:1.
|
// under full load to be 1:1.
|
||||||
|
|
||||||
int more;
|
|
||||||
size_t moresz = sizeof (more);
|
|
||||||
|
|
||||||
// Proxy can be in these three states
|
// Proxy can be in these three states
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@ -245,12 +161,7 @@ int zmq::proxy (class socket_base_t *frontend_,
|
|||||||
bool frontend_out = false;
|
bool frontend_out = false;
|
||||||
bool backend_in = false;
|
bool backend_in = false;
|
||||||
bool backend_out = false;
|
bool backend_out = false;
|
||||||
bool control_in = false;
|
|
||||||
zmq::socket_poller_t::event_t events[3];
|
zmq::socket_poller_t::event_t events[3];
|
||||||
zmq_socket_stats_t frontend_stats;
|
|
||||||
zmq_socket_stats_t backend_stats;
|
|
||||||
memset (&frontend_stats, 0, sizeof (frontend_stats));
|
|
||||||
memset (&backend_stats, 0, sizeof (backend_stats));
|
|
||||||
|
|
||||||
// Don't allocate these pollers from stack because they will take more than 900 kB of stack!
|
// Don't allocate these pollers from stack because they will take more than 900 kB of stack!
|
||||||
// On Windows this blows up default stack of 1 MB and aborts the program.
|
// On Windows this blows up default stack of 1 MB and aborts the program.
|
||||||
@ -259,8 +170,6 @@ int zmq::proxy (class socket_base_t *frontend_,
|
|||||||
new (std::nothrow) zmq::socket_poller_t; // Poll for everything.
|
new (std::nothrow) zmq::socket_poller_t; // Poll for everything.
|
||||||
zmq::socket_poller_t *poller_in = new (std::nothrow) zmq::
|
zmq::socket_poller_t *poller_in = new (std::nothrow) zmq::
|
||||||
socket_poller_t; // Poll only 'ZMQ_POLLIN' on all sockets. Initial blocking poll in loop.
|
socket_poller_t; // Poll only 'ZMQ_POLLIN' on all sockets. Initial blocking poll in loop.
|
||||||
zmq::socket_poller_t *poller_control = new (std::nothrow) zmq::
|
|
||||||
socket_poller_t; // Poll only for 'ZMQ_POLLIN' on 'control_', when proxy is paused.
|
|
||||||
zmq::socket_poller_t *poller_receive_blocked = new (std::nothrow)
|
zmq::socket_poller_t *poller_receive_blocked = new (std::nothrow)
|
||||||
zmq::socket_poller_t; // All except 'ZMQ_POLLIN' on 'frontend_'.
|
zmq::socket_poller_t; // All except 'ZMQ_POLLIN' on 'frontend_'.
|
||||||
|
|
||||||
@ -290,7 +199,7 @@ int zmq::proxy (class socket_base_t *frontend_,
|
|||||||
} else
|
} else
|
||||||
frontend_equal_to_backend = true;
|
frontend_equal_to_backend = true;
|
||||||
|
|
||||||
if (poller_all == NULL || poller_in == NULL || poller_control == NULL
|
if (poller_all == NULL || poller_in == NULL
|
||||||
|| poller_receive_blocked == NULL
|
|| poller_receive_blocked == NULL
|
||||||
|| ((poller_send_blocked == NULL || poller_both_blocked == NULL)
|
|| ((poller_send_blocked == NULL || poller_both_blocked == NULL)
|
||||||
&& !frontend_equal_to_backend)) {
|
&& !frontend_equal_to_backend)) {
|
||||||
@ -350,30 +259,6 @@ int zmq::proxy (class socket_base_t *frontend_,
|
|||||||
CHECK_RC_EXIT_ON_FAILURE ();
|
CHECK_RC_EXIT_ON_FAILURE ();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register 'control_' with pollers.
|
|
||||||
if (control_ != NULL) {
|
|
||||||
rc = poller_all->add (control_, NULL, ZMQ_POLLIN);
|
|
||||||
CHECK_RC_EXIT_ON_FAILURE ();
|
|
||||||
rc = poller_in->add (control_, NULL, ZMQ_POLLIN);
|
|
||||||
CHECK_RC_EXIT_ON_FAILURE ();
|
|
||||||
rc = poller_control->add (
|
|
||||||
control_, NULL,
|
|
||||||
ZMQ_POLLIN); // When proxy is paused we wait only for ZMQ_POLLIN on 'control_' socket.
|
|
||||||
CHECK_RC_EXIT_ON_FAILURE ();
|
|
||||||
rc = poller_receive_blocked->add (control_, NULL, ZMQ_POLLIN);
|
|
||||||
CHECK_RC_EXIT_ON_FAILURE ();
|
|
||||||
if (!frontend_equal_to_backend) {
|
|
||||||
rc = poller_send_blocked->add (control_, NULL, ZMQ_POLLIN);
|
|
||||||
CHECK_RC_EXIT_ON_FAILURE ();
|
|
||||||
rc = poller_both_blocked->add (control_, NULL, ZMQ_POLLIN);
|
|
||||||
CHECK_RC_EXIT_ON_FAILURE ();
|
|
||||||
rc = poller_frontend_only->add (control_, NULL, ZMQ_POLLIN);
|
|
||||||
CHECK_RC_EXIT_ON_FAILURE ();
|
|
||||||
rc = poller_backend_only->add (control_, NULL, ZMQ_POLLIN);
|
|
||||||
CHECK_RC_EXIT_ON_FAILURE ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool request_processed, reply_processed;
|
bool request_processed, reply_processed;
|
||||||
|
|
||||||
while (state != terminated) {
|
while (state != terminated) {
|
||||||
@ -402,58 +287,14 @@ int zmq::proxy (class socket_base_t *frontend_,
|
|||||||
if (events[i].socket == backend_) {
|
if (events[i].socket == backend_) {
|
||||||
backend_in = (events[i].events & ZMQ_POLLIN) != 0;
|
backend_in = (events[i].events & ZMQ_POLLIN) != 0;
|
||||||
backend_out = (events[i].events & ZMQ_POLLOUT) != 0;
|
backend_out = (events[i].events & ZMQ_POLLOUT) != 0;
|
||||||
} else if (events[i].socket == control_)
|
|
||||||
control_in = (events[i].events & ZMQ_POLLIN) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Process a control command if any.
|
|
||||||
if (control_in) {
|
|
||||||
rc = control_->recv (&msg, 0);
|
|
||||||
CHECK_RC_EXIT_ON_FAILURE ();
|
|
||||||
rc = control_->getsockopt (ZMQ_RCVMORE, &more, &moresz);
|
|
||||||
if (unlikely (rc < 0) || more) {
|
|
||||||
PROXY_CLEANUP ();
|
|
||||||
return close_and_return (&msg, -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copy message to capture socket if any.
|
|
||||||
rc = capture (capture_, &msg);
|
|
||||||
CHECK_RC_EXIT_ON_FAILURE ();
|
|
||||||
|
|
||||||
if (msg.size () == 5 && memcmp (msg.data (), "PAUSE", 5) == 0) {
|
|
||||||
state = paused;
|
|
||||||
poller_wait = poller_control;
|
|
||||||
} else if (msg.size () == 6
|
|
||||||
&& memcmp (msg.data (), "RESUME", 6) == 0) {
|
|
||||||
state = active;
|
|
||||||
poller_wait = poller_in;
|
|
||||||
} else {
|
|
||||||
if (msg.size () == 9
|
|
||||||
&& memcmp (msg.data (), "TERMINATE", 9) == 0)
|
|
||||||
state = terminated;
|
|
||||||
else {
|
|
||||||
if (msg.size () == 10
|
|
||||||
&& memcmp (msg.data (), "STATISTICS", 10) == 0) {
|
|
||||||
rc = reply_stats (control_, &frontend_stats,
|
|
||||||
&backend_stats);
|
|
||||||
CHECK_RC_EXIT_ON_FAILURE ();
|
|
||||||
} else {
|
|
||||||
// This is an API error, we assert
|
|
||||||
puts ("E: invalid command sent to proxy");
|
|
||||||
zmq_assert (false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
control_in = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state == active) {
|
if (state == active) {
|
||||||
// Process a request, 'ZMQ_POLLIN' on 'frontend_' and 'ZMQ_POLLOUT' on 'backend_'.
|
// Process a request, 'ZMQ_POLLIN' on 'frontend_' and 'ZMQ_POLLOUT' on 'backend_'.
|
||||||
// In case of frontend_==backend_ there's no 'ZMQ_POLLOUT' event.
|
// In case of frontend_==backend_ there's no 'ZMQ_POLLOUT' event.
|
||||||
if (frontend_in && (backend_out || frontend_equal_to_backend)) {
|
if (frontend_in && (backend_out || frontend_equal_to_backend)) {
|
||||||
rc = forward (frontend_, &frontend_stats, backend_,
|
rc = forward (frontend_, backend_, capture_, &msg);
|
||||||
&backend_stats, capture_, &msg);
|
|
||||||
CHECK_RC_EXIT_ON_FAILURE ();
|
CHECK_RC_EXIT_ON_FAILURE ();
|
||||||
request_processed = true;
|
request_processed = true;
|
||||||
frontend_in = backend_out = false;
|
frontend_in = backend_out = false;
|
||||||
@ -465,8 +306,7 @@ int zmq::proxy (class socket_base_t *frontend_,
|
|||||||
// covers all of the cases. 'backend_in' is always false if frontend_==backend_ due to
|
// covers all of the cases. 'backend_in' is always false if frontend_==backend_ due to
|
||||||
// design in 'for' event processing loop.
|
// design in 'for' event processing loop.
|
||||||
if (backend_in && frontend_out) {
|
if (backend_in && frontend_out) {
|
||||||
rc = forward (backend_, &backend_stats, frontend_,
|
rc = forward (backend_, frontend_, capture_, &msg);
|
||||||
&frontend_stats, capture_, &msg);
|
|
||||||
CHECK_RC_EXIT_ON_FAILURE ();
|
CHECK_RC_EXIT_ON_FAILURE ();
|
||||||
reply_processed = true;
|
reply_processed = true;
|
||||||
backend_in = frontend_out = false;
|
backend_in = frontend_out = false;
|
||||||
@ -535,8 +375,7 @@ int zmq::proxy (class socket_base_t *frontend_,
|
|||||||
|
|
||||||
int zmq::proxy (class socket_base_t *frontend_,
|
int zmq::proxy (class socket_base_t *frontend_,
|
||||||
class socket_base_t *backend_,
|
class socket_base_t *backend_,
|
||||||
class socket_base_t *capture_,
|
class socket_base_t *capture_)
|
||||||
class socket_base_t *control_)
|
|
||||||
{
|
{
|
||||||
msg_t msg;
|
msg_t msg;
|
||||||
int rc = msg.init ();
|
int rc = msg.init ();
|
||||||
@ -546,20 +385,12 @@ int zmq::proxy (class socket_base_t *frontend_,
|
|||||||
// The algorithm below assumes ratio of requests and replies processed
|
// The algorithm below assumes ratio of requests and replies processed
|
||||||
// under full load to be 1:1.
|
// under full load to be 1:1.
|
||||||
|
|
||||||
int more;
|
|
||||||
size_t moresz;
|
|
||||||
zmq_pollitem_t items[] = {{frontend_, 0, ZMQ_POLLIN, 0},
|
zmq_pollitem_t items[] = {{frontend_, 0, ZMQ_POLLIN, 0},
|
||||||
{backend_, 0, ZMQ_POLLIN, 0},
|
{backend_, 0, ZMQ_POLLIN, 0}};
|
||||||
{control_, 0, ZMQ_POLLIN, 0}};
|
int qt_poll_items = 2;
|
||||||
int qt_poll_items = (control_ ? 3 : 2);
|
|
||||||
zmq_pollitem_t itemsout[] = {{frontend_, 0, ZMQ_POLLOUT, 0},
|
zmq_pollitem_t itemsout[] = {{frontend_, 0, ZMQ_POLLOUT, 0},
|
||||||
{backend_, 0, ZMQ_POLLOUT, 0}};
|
{backend_, 0, ZMQ_POLLOUT, 0}};
|
||||||
|
|
||||||
zmq_socket_stats_t frontend_stats;
|
|
||||||
memset (&frontend_stats, 0, sizeof (frontend_stats));
|
|
||||||
zmq_socket_stats_t backend_stats;
|
|
||||||
memset (&backend_stats, 0, sizeof (backend_stats));
|
|
||||||
|
|
||||||
// Proxy can be in these three states
|
// Proxy can be in these three states
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@ -584,48 +415,9 @@ int zmq::proxy (class socket_base_t *frontend_,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process a control command if any
|
|
||||||
if (control_ && items[2].revents & ZMQ_POLLIN) {
|
|
||||||
rc = control_->recv (&msg, 0);
|
|
||||||
if (unlikely (rc < 0))
|
|
||||||
return close_and_return (&msg, -1);
|
|
||||||
|
|
||||||
moresz = sizeof more;
|
|
||||||
rc = control_->getsockopt (ZMQ_RCVMORE, &more, &moresz);
|
|
||||||
if (unlikely (rc < 0) || more)
|
|
||||||
return close_and_return (&msg, -1);
|
|
||||||
|
|
||||||
// Copy message to capture socket if any
|
|
||||||
rc = capture (capture_, &msg);
|
|
||||||
if (unlikely (rc < 0))
|
|
||||||
return close_and_return (&msg, -1);
|
|
||||||
|
|
||||||
if (msg.size () == 5 && memcmp (msg.data (), "PAUSE", 5) == 0)
|
|
||||||
state = paused;
|
|
||||||
else if (msg.size () == 6 && memcmp (msg.data (), "RESUME", 6) == 0)
|
|
||||||
state = active;
|
|
||||||
else if (msg.size () == 9
|
|
||||||
&& memcmp (msg.data (), "TERMINATE", 9) == 0)
|
|
||||||
state = terminated;
|
|
||||||
else {
|
|
||||||
if (msg.size () == 10
|
|
||||||
&& memcmp (msg.data (), "STATISTICS", 10) == 0) {
|
|
||||||
rc =
|
|
||||||
reply_stats (control_, &frontend_stats, &backend_stats);
|
|
||||||
if (unlikely (rc < 0))
|
|
||||||
return close_and_return (&msg, -1);
|
|
||||||
} else {
|
|
||||||
// This is an API error, we assert
|
|
||||||
puts ("E: invalid command sent to proxy");
|
|
||||||
zmq_assert (false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Process a request
|
|
||||||
if (state == active && items[0].revents & ZMQ_POLLIN
|
if (state == active && items[0].revents & ZMQ_POLLIN
|
||||||
&& (frontend_ == backend_ || itemsout[1].revents & ZMQ_POLLOUT)) {
|
&& (frontend_ == backend_ || itemsout[1].revents & ZMQ_POLLOUT)) {
|
||||||
rc = forward (frontend_, &frontend_stats, backend_, &backend_stats,
|
rc = forward (frontend_, backend_, capture_, &msg);
|
||||||
capture_, &msg);
|
|
||||||
if (unlikely (rc < 0))
|
if (unlikely (rc < 0))
|
||||||
return close_and_return (&msg, -1);
|
return close_and_return (&msg, -1);
|
||||||
}
|
}
|
||||||
@ -633,8 +425,7 @@ int zmq::proxy (class socket_base_t *frontend_,
|
|||||||
if (state == active && frontend_ != backend_
|
if (state == active && frontend_ != backend_
|
||||||
&& items[1].revents & ZMQ_POLLIN
|
&& items[1].revents & ZMQ_POLLIN
|
||||||
&& itemsout[0].revents & ZMQ_POLLOUT) {
|
&& itemsout[0].revents & ZMQ_POLLOUT) {
|
||||||
rc = forward (backend_, &backend_stats, frontend_, &frontend_stats,
|
rc = forward (backend_, frontend_, capture_, &msg);
|
||||||
capture_, &msg);
|
|
||||||
if (unlikely (rc < 0))
|
if (unlikely (rc < 0))
|
||||||
return close_and_return (&msg, -1);
|
return close_and_return (&msg, -1);
|
||||||
}
|
}
|
||||||
|
@ -34,9 +34,7 @@ namespace zmq
|
|||||||
{
|
{
|
||||||
int proxy (class socket_base_t *frontend_,
|
int proxy (class socket_base_t *frontend_,
|
||||||
class socket_base_t *backend_,
|
class socket_base_t *backend_,
|
||||||
class socket_base_t *capture_,
|
class socket_base_t *capture_);
|
||||||
class socket_base_t *control_ =
|
|
||||||
NULL); // backward compatibility without this argument
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -40,9 +40,7 @@
|
|||||||
#include "mutex.hpp"
|
#include "mutex.hpp"
|
||||||
#include "macros.hpp"
|
#include "macros.hpp"
|
||||||
|
|
||||||
#if defined(ZMQ_USE_TWEETNACL)
|
#if defined(ZMQ_USE_LIBSODIUM)
|
||||||
#include "tweetnacl.h"
|
|
||||||
#elif defined(ZMQ_USE_LIBSODIUM)
|
|
||||||
#include "sodium.h"
|
#include "sodium.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -65,90 +63,11 @@ uint32_t zmq::generate_random ()
|
|||||||
return high | low;
|
return high | low;
|
||||||
}
|
}
|
||||||
|
|
||||||
// When different threads have their own context the file descriptor
|
|
||||||
// variable is shared and is subject to race conditions in tweetnacl,
|
|
||||||
// that lead to file descriptors leaks. In long-running programs with
|
|
||||||
// ephemeral threads this is a problem as it accumulates.
|
|
||||||
// thread-local storage cannot be used to initialise the file descriptor
|
|
||||||
// as it is perfectly legal to share a context among many threads, each
|
|
||||||
// of which might call curve APIs.
|
|
||||||
// Also libsodium documentation specifically states that sodium_init
|
|
||||||
// must not be called concurrently from multiple threads, for the
|
|
||||||
// same reason. Inspecting the code also reveals that the close API is
|
|
||||||
// not thread safe.
|
|
||||||
// The context class cannot be used with static variables as the curve
|
|
||||||
// utility APIs like zmq_curve_keypair also call into the crypto
|
|
||||||
// library.
|
|
||||||
// The safest solution for all use cases therefore is to have a
|
|
||||||
// static lock to serialize calls into an initialiser and a finaliser,
|
|
||||||
// using refcounts to make sure that a thread does not close the library
|
|
||||||
// while another is still using it. To avoid the static initialization
|
|
||||||
// order fiasco, this is done using function-local statics, if the
|
|
||||||
// compiler implementation supports thread-safe initialization of those.
|
|
||||||
// Otherwise, we fall back to global statics.
|
|
||||||
// HOWEVER, this initialisation code imposes ordering constraints, which
|
|
||||||
// are not obvious to users of libzmq, and may lead to problems if atexit
|
|
||||||
// or similar methods are used for cleanup.
|
|
||||||
// In that case, a strict ordering is imposed whereas the contexts MUST
|
|
||||||
// be initialised BEFORE registering the cleanup with atexit. CZMQ is an
|
|
||||||
// example. Hence we make the choice to restrict this global transition
|
|
||||||
// mechanism ONLY to Tweenacl + *NIX (when using /dev/urandom) as it is
|
|
||||||
// the less risky option.
|
|
||||||
|
|
||||||
// TODO if there is some other user of libsodium besides libzmq, this must
|
|
||||||
// be synchronized by the application. This should probably also be
|
|
||||||
// configurable via config.h
|
|
||||||
|
|
||||||
// TODO this should probably be done via config.h
|
|
||||||
#if __cplusplus >= 201103L \
|
|
||||||
|| (defined(__cpp_threadsafe_static_init) \
|
|
||||||
&& __cpp_threadsafe_static_init >= 200806) \
|
|
||||||
|| (defined(_MSC_VER) && _MSC_VER >= 1900)
|
|
||||||
#define ZMQ_HAVE_THREADSAFE_STATIC_LOCAL_INIT 1
|
|
||||||
// TODO this might probably also be set if a sufficiently recent gcc is used
|
|
||||||
// without -fno-threadsafe-statics, but this cannot be determined at
|
|
||||||
// compile-time, so it must be set via config.h
|
|
||||||
#else
|
|
||||||
#define ZMQ_HAVE_THREADSAFE_STATIC_LOCAL_INIT 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !ZMQ_HAVE_THREADSAFE_STATIC_LOCAL_INIT \
|
|
||||||
&& (defined(ZMQ_USE_TWEETNACL) && !defined(ZMQ_HAVE_WINDOWS) \
|
|
||||||
&& !defined(ZMQ_HAVE_GETRANDOM))
|
|
||||||
static unsigned int random_refcount = 0;
|
|
||||||
static zmq::mutex_t random_sync;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void manage_random (bool init_)
|
static void manage_random (bool init_)
|
||||||
{
|
{
|
||||||
#if defined(ZMQ_USE_TWEETNACL) && !defined(ZMQ_HAVE_WINDOWS) \
|
#if defined(ZMQ_USE_LIBSODIUM)
|
||||||
&& !defined(ZMQ_HAVE_GETRANDOM)
|
|
||||||
|
|
||||||
#if ZMQ_HAVE_THREADSAFE_STATIC_LOCAL_INIT
|
|
||||||
static int random_refcount = 0;
|
|
||||||
static zmq::mutex_t random_sync;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (init_) {
|
|
||||||
zmq::scoped_lock_t locker (random_sync);
|
|
||||||
|
|
||||||
if (random_refcount == 0) {
|
|
||||||
int rc = sodium_init ();
|
|
||||||
zmq_assert (rc != -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
++random_refcount;
|
|
||||||
} else {
|
|
||||||
zmq::scoped_lock_t locker (random_sync);
|
|
||||||
--random_refcount;
|
|
||||||
|
|
||||||
if (random_refcount == 0) {
|
|
||||||
randombytes_close ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#elif defined(ZMQ_USE_LIBSODIUM)
|
|
||||||
if (init_) {
|
if (init_) {
|
||||||
|
// sodium_init() is now documented as thread-safe in recent versions
|
||||||
int rc = sodium_init ();
|
int rc = sodium_init ();
|
||||||
zmq_assert (rc != -1);
|
zmq_assert (rc != -1);
|
||||||
#if defined(ZMQ_LIBSODIUM_RANDOMBYTES_CLOSE)
|
#if defined(ZMQ_LIBSODIUM_RANDOMBYTES_CLOSE)
|
||||||
|
@ -123,17 +123,6 @@ int zmq::stream_connecter_base_t::get_new_reconnect_ivl ()
|
|||||||
? _current_reconnect_ivl + random_jitter
|
? _current_reconnect_ivl + random_jitter
|
||||||
: std::numeric_limits<int>::max ();
|
: std::numeric_limits<int>::max ();
|
||||||
|
|
||||||
// Only change the new current reconnect interval if the maximum reconnect
|
|
||||||
// interval was set and if it's larger than the reconnect interval.
|
|
||||||
if (options.reconnect_ivl_max > 0
|
|
||||||
&& options.reconnect_ivl_max > options.reconnect_ivl) {
|
|
||||||
// Calculate the next interval
|
|
||||||
_current_reconnect_ivl =
|
|
||||||
_current_reconnect_ivl < std::numeric_limits<int>::max () / 2
|
|
||||||
? std::min (_current_reconnect_ivl * 2, options.reconnect_ivl_max)
|
|
||||||
: options.reconnect_ivl_max;
|
|
||||||
}
|
|
||||||
|
|
||||||
return interval;
|
return interval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
993
src/tweetnacl.c
993
src/tweetnacl.c
@ -1,993 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2016-2017 Contributors as noted in the AUTHORS file
|
|
||||||
|
|
||||||
This file is part of libzmq, the ZeroMQ core engine in C++.
|
|
||||||
|
|
||||||
libzmq is free software; you can redistribute it and/or modify it under
|
|
||||||
the terms of the GNU Lesser General Public License (LGPL) as published
|
|
||||||
by the Free Software Foundation; either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
As a special exception, the Contributors give you permission to link
|
|
||||||
this library with independent modules to produce an executable,
|
|
||||||
regardless of the license terms of these independent modules, and to
|
|
||||||
copy and distribute the resulting executable under terms of your choice,
|
|
||||||
provided that you also meet, for each linked independent module, the
|
|
||||||
terms and conditions of the license of that module. An independent
|
|
||||||
module is a module which is not derived from or based on this library.
|
|
||||||
If you modify this library, you must extend this exception to your
|
|
||||||
version of the library.
|
|
||||||
|
|
||||||
libzmq is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
|
||||||
License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
The precompiled header is not used for c files so this is required here.
|
|
||||||
*/
|
|
||||||
#include "platform.hpp"
|
|
||||||
|
|
||||||
#if defined(ZMQ_USE_TWEETNACL)
|
|
||||||
|
|
||||||
/*
|
|
||||||
Disable warnings for this source only, rather than for the whole
|
|
||||||
codebase when building with C99 (gcc >= 4.2) or with Microsoft's compiler
|
|
||||||
*/
|
|
||||||
#if defined __GNUC__ \
|
|
||||||
&& (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)) \
|
|
||||||
&& __STDC_VERSION__ < 201112L
|
|
||||||
#pragma GCC diagnostic ignored "-Wsign-compare"
|
|
||||||
#elif defined _MSC_VER
|
|
||||||
#pragma warning(disable : 4018 4244 4146)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* clang-format off */
|
|
||||||
|
|
||||||
#include "tweetnacl.h"
|
|
||||||
|
|
||||||
#define FOR(i,n) for (i = 0;i < n;++i)
|
|
||||||
#define sv static void
|
|
||||||
|
|
||||||
static const u8
|
|
||||||
_0[16],
|
|
||||||
_9[32] = {9};
|
|
||||||
static const gf
|
|
||||||
gf0,
|
|
||||||
gf1 = {1},
|
|
||||||
_121665 = {0xDB41,1},
|
|
||||||
D = {0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203},
|
|
||||||
D2 = {0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406},
|
|
||||||
X = {0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169},
|
|
||||||
Y = {0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666},
|
|
||||||
I = {0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83};
|
|
||||||
|
|
||||||
static u32 L32(u32 x,int c) { return (x << c) | ((x&0xffffffff) >> (32 - c)); }
|
|
||||||
|
|
||||||
static u32 ld32(const u8 *x)
|
|
||||||
{
|
|
||||||
u32 u = x[3];
|
|
||||||
u = (u<<8)|x[2];
|
|
||||||
u = (u<<8)|x[1];
|
|
||||||
return (u<<8)|x[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
static u64 dl64(const u8 *x)
|
|
||||||
{
|
|
||||||
u64 i,u=0;
|
|
||||||
FOR(i,8) u=(u<<8)|x[i];
|
|
||||||
return u;
|
|
||||||
}
|
|
||||||
|
|
||||||
sv st32(u8 *x,u32 u)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
FOR(i,4) { x[i] = u; u >>= 8; }
|
|
||||||
}
|
|
||||||
|
|
||||||
sv ts64(u8 *x,u64 u)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for (i = 7;i >= 0;--i) { x[i] = u; u >>= 8; }
|
|
||||||
}
|
|
||||||
|
|
||||||
static int vn(const u8 *x,const u8 *y,int n)
|
|
||||||
{
|
|
||||||
u32 i,d = 0;
|
|
||||||
FOR(i,n) d |= x[i]^y[i];
|
|
||||||
return (1 & ((d - 1) >> 8)) - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_verify_16(const u8 *x,const u8 *y)
|
|
||||||
{
|
|
||||||
return vn(x,y,16);
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_verify_32(const u8 *x,const u8 *y)
|
|
||||||
{
|
|
||||||
return vn(x,y,32);
|
|
||||||
}
|
|
||||||
|
|
||||||
sv core(u8 *out,const u8 *in,const u8 *k,const u8 *c,int h)
|
|
||||||
{
|
|
||||||
u32 w[16],x[16],y[16],t[4];
|
|
||||||
int i,j,m;
|
|
||||||
|
|
||||||
FOR(i,4) {
|
|
||||||
x[5*i] = ld32(c+4*i);
|
|
||||||
x[1+i] = ld32(k+4*i);
|
|
||||||
x[6+i] = ld32(in+4*i);
|
|
||||||
x[11+i] = ld32(k+16+4*i);
|
|
||||||
}
|
|
||||||
|
|
||||||
FOR(i,16) y[i] = x[i];
|
|
||||||
|
|
||||||
FOR(i,20) {
|
|
||||||
FOR(j,4) {
|
|
||||||
FOR(m,4) t[m] = x[(5*j+4*m)%16];
|
|
||||||
t[1] ^= L32(t[0]+t[3], 7);
|
|
||||||
t[2] ^= L32(t[1]+t[0], 9);
|
|
||||||
t[3] ^= L32(t[2]+t[1],13);
|
|
||||||
t[0] ^= L32(t[3]+t[2],18);
|
|
||||||
FOR(m,4) w[4*j+(j+m)%4] = t[m];
|
|
||||||
}
|
|
||||||
FOR(m,16) x[m] = w[m];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (h) {
|
|
||||||
FOR(i,16) x[i] += y[i];
|
|
||||||
FOR(i,4) {
|
|
||||||
x[5*i] -= ld32(c+4*i);
|
|
||||||
x[6+i] -= ld32(in+4*i);
|
|
||||||
}
|
|
||||||
FOR(i,4) {
|
|
||||||
st32(out+4*i,x[5*i]);
|
|
||||||
st32(out+16+4*i,x[6+i]);
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
FOR(i,16) st32(out + 4 * i,x[i] + y[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_core_salsa20(u8 *out,const u8 *in,const u8 *k,const u8 *c)
|
|
||||||
{
|
|
||||||
core(out,in,k,c,0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_core_hsalsa20(u8 *out,const u8 *in,const u8 *k,const u8 *c)
|
|
||||||
{
|
|
||||||
core(out,in,k,c,1);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const u8 sigma[16] = "expand 32-byte k";
|
|
||||||
|
|
||||||
int crypto_stream_salsa20_xor(u8 *c,const u8 *m,u64 b,const u8 *n,const u8 *k)
|
|
||||||
{
|
|
||||||
u8 z[16],x[64];
|
|
||||||
u32 u,i;
|
|
||||||
if (!b) return 0;
|
|
||||||
FOR(i,16) z[i] = 0;
|
|
||||||
FOR(i,8) z[i] = n[i];
|
|
||||||
while (b >= 64) {
|
|
||||||
crypto_core_salsa20(x,z,k,sigma);
|
|
||||||
FOR(i,64) c[i] = (m?m[i]:0) ^ x[i];
|
|
||||||
u = 1;
|
|
||||||
for (i = 8;i < 16;++i) {
|
|
||||||
u += (u32) z[i];
|
|
||||||
z[i] = u;
|
|
||||||
u >>= 8;
|
|
||||||
}
|
|
||||||
b -= 64;
|
|
||||||
c += 64;
|
|
||||||
if (m) m += 64;
|
|
||||||
}
|
|
||||||
if (b) {
|
|
||||||
crypto_core_salsa20(x,z,k,sigma);
|
|
||||||
FOR(i,b) c[i] = (m?m[i]:0) ^ x[i];
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_stream_salsa20(u8 *c,u64 d,const u8 *n,const u8 *k)
|
|
||||||
{
|
|
||||||
return crypto_stream_salsa20_xor(c,0,d,n,k);
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_stream(u8 *c,u64 d,const u8 *n,const u8 *k)
|
|
||||||
{
|
|
||||||
u8 s[32];
|
|
||||||
crypto_core_hsalsa20(s,n,k,sigma);
|
|
||||||
return crypto_stream_salsa20(c,d,n+16,s);
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_stream_xor(u8 *c,const u8 *m,u64 d,const u8 *n,const u8 *k)
|
|
||||||
{
|
|
||||||
u8 s[32];
|
|
||||||
crypto_core_hsalsa20(s,n,k,sigma);
|
|
||||||
return crypto_stream_salsa20_xor(c,m,d,n+16,s);
|
|
||||||
}
|
|
||||||
|
|
||||||
sv add1305(u32 *h,const u32 *c)
|
|
||||||
{
|
|
||||||
u32 j,u = 0;
|
|
||||||
FOR(j,17) {
|
|
||||||
u += h[j] + c[j];
|
|
||||||
h[j] = u & 255;
|
|
||||||
u >>= 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static const u32 minusp[17] = {
|
|
||||||
5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252
|
|
||||||
} ;
|
|
||||||
|
|
||||||
int crypto_onetimeauth(u8 *out,const u8 *m,u64 n,const u8 *k)
|
|
||||||
{
|
|
||||||
u32 s,i,j,u,x[17],r[17],h[17],c[17],g[17];
|
|
||||||
|
|
||||||
FOR(j,17) r[j]=h[j]=0;
|
|
||||||
FOR(j,16) r[j]=k[j];
|
|
||||||
r[3]&=15;
|
|
||||||
r[4]&=252;
|
|
||||||
r[7]&=15;
|
|
||||||
r[8]&=252;
|
|
||||||
r[11]&=15;
|
|
||||||
r[12]&=252;
|
|
||||||
r[15]&=15;
|
|
||||||
|
|
||||||
while (n > 0) {
|
|
||||||
FOR(j,17) c[j] = 0;
|
|
||||||
for (j = 0;(j < 16) && (j < n);++j) c[j] = m[j];
|
|
||||||
c[j] = 1;
|
|
||||||
m += j; n -= j;
|
|
||||||
add1305(h,c);
|
|
||||||
FOR(i,17) {
|
|
||||||
x[i] = 0;
|
|
||||||
FOR(j,17) x[i] += h[j] * ((j <= i) ? r[i - j] : 320 * r[i + 17 - j]);
|
|
||||||
}
|
|
||||||
FOR(i,17) h[i] = x[i];
|
|
||||||
u = 0;
|
|
||||||
FOR(j,16) {
|
|
||||||
u += h[j];
|
|
||||||
h[j] = u & 255;
|
|
||||||
u >>= 8;
|
|
||||||
}
|
|
||||||
u += h[16]; h[16] = u & 3;
|
|
||||||
u = 5 * (u >> 2);
|
|
||||||
FOR(j,16) {
|
|
||||||
u += h[j];
|
|
||||||
h[j] = u & 255;
|
|
||||||
u >>= 8;
|
|
||||||
}
|
|
||||||
u += h[16]; h[16] = u;
|
|
||||||
}
|
|
||||||
|
|
||||||
FOR(j,17) g[j] = h[j];
|
|
||||||
add1305(h,minusp);
|
|
||||||
s = -(h[16] >> 7);
|
|
||||||
FOR(j,17) h[j] ^= s & (g[j] ^ h[j]);
|
|
||||||
|
|
||||||
FOR(j,16) c[j] = k[j + 16];
|
|
||||||
c[16] = 0;
|
|
||||||
add1305(h,c);
|
|
||||||
FOR(j,16) out[j] = h[j];
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_onetimeauth_verify(const u8 *h,const u8 *m,u64 n,const u8 *k)
|
|
||||||
{
|
|
||||||
u8 x[16];
|
|
||||||
crypto_onetimeauth(x,m,n,k);
|
|
||||||
return crypto_verify_16(h,x);
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_secretbox(u8 *c,const u8 *m,u64 d,const u8 *n,const u8 *k)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
if (d < 32) return -1;
|
|
||||||
crypto_stream_xor(c,m,d,n,k);
|
|
||||||
crypto_onetimeauth(c + 16,c + 32,d - 32,c);
|
|
||||||
FOR(i,16) c[i] = 0;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_secretbox_open(u8 *m,const u8 *c,u64 d,const u8 *n,const u8 *k)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
u8 x[32];
|
|
||||||
if (d < 32) return -1;
|
|
||||||
crypto_stream(x,32,n,k);
|
|
||||||
if (crypto_onetimeauth_verify(c + 16,c + 32,d - 32,x) != 0) return -1;
|
|
||||||
crypto_stream_xor(m,c,d,n,k);
|
|
||||||
FOR(i,32) m[i] = 0;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
sv set25519(gf r, const gf a)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
FOR(i,16) r[i]=a[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
sv car25519(gf o)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
i64 c;
|
|
||||||
FOR(i,16) {
|
|
||||||
o[i]+=(1LL<<16);
|
|
||||||
c=o[i]>>16;
|
|
||||||
o[(i+1)*(i<15)]+=c-1+37*(c-1)*(i==15);
|
|
||||||
o[i]-=c<<16;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sv sel25519(gf p,gf q,int b)
|
|
||||||
{
|
|
||||||
i64 t,i,c=~(b-1);
|
|
||||||
FOR(i,16) {
|
|
||||||
t= c&(p[i]^q[i]);
|
|
||||||
p[i]^=t;
|
|
||||||
q[i]^=t;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sv pack25519(u8 *o,const gf n)
|
|
||||||
{
|
|
||||||
int i,j,b;
|
|
||||||
gf m,t;
|
|
||||||
FOR(i,16) t[i]=n[i];
|
|
||||||
car25519(t);
|
|
||||||
car25519(t);
|
|
||||||
car25519(t);
|
|
||||||
FOR(j,2) {
|
|
||||||
m[0]=t[0]-0xffed;
|
|
||||||
for(i=1;i<15;i++) {
|
|
||||||
m[i]=t[i]-0xffff-((m[i-1]>>16)&1);
|
|
||||||
m[i-1]&=0xffff;
|
|
||||||
}
|
|
||||||
m[15]=t[15]-0x7fff-((m[14]>>16)&1);
|
|
||||||
b=(m[15]>>16)&1;
|
|
||||||
m[14]&=0xffff;
|
|
||||||
sel25519(t,m,1-b);
|
|
||||||
}
|
|
||||||
FOR(i,16) {
|
|
||||||
o[2*i]=t[i]&0xff;
|
|
||||||
o[2*i+1]=t[i]>>8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int neq25519(const gf a, const gf b)
|
|
||||||
{
|
|
||||||
u8 c[32],d[32];
|
|
||||||
pack25519(c,a);
|
|
||||||
pack25519(d,b);
|
|
||||||
return crypto_verify_32(c,d);
|
|
||||||
}
|
|
||||||
|
|
||||||
static u8 par25519(const gf a)
|
|
||||||
{
|
|
||||||
u8 d[32];
|
|
||||||
pack25519(d,a);
|
|
||||||
return d[0]&1;
|
|
||||||
}
|
|
||||||
|
|
||||||
sv unpack25519(gf o, const u8 *n)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
FOR(i,16) o[i]=n[2*i]+((i64)n[2*i+1]<<8);
|
|
||||||
o[15]&=0x7fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
sv A(gf o,const gf a,const gf b)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
FOR(i,16) o[i]=a[i]+b[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
sv Z(gf o,const gf a,const gf b)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
FOR(i,16) o[i]=a[i]-b[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
sv M(gf o,const gf a,const gf b)
|
|
||||||
{
|
|
||||||
i64 i,j,t[31];
|
|
||||||
FOR(i,31) t[i]=0;
|
|
||||||
FOR(i,16) FOR(j,16) t[i+j]+=a[i]*b[j];
|
|
||||||
FOR(i,15) t[i]+=38*t[i+16];
|
|
||||||
FOR(i,16) o[i]=t[i];
|
|
||||||
car25519(o);
|
|
||||||
car25519(o);
|
|
||||||
}
|
|
||||||
|
|
||||||
sv S(gf o,const gf a)
|
|
||||||
{
|
|
||||||
M(o,a,a);
|
|
||||||
}
|
|
||||||
|
|
||||||
sv inv25519(gf o,const gf i)
|
|
||||||
{
|
|
||||||
gf c;
|
|
||||||
int a;
|
|
||||||
FOR(a,16) c[a]=i[a];
|
|
||||||
for(a=253;a>=0;a--) {
|
|
||||||
S(c,c);
|
|
||||||
if(a!=2&&a!=4) M(c,c,i);
|
|
||||||
}
|
|
||||||
FOR(a,16) o[a]=c[a];
|
|
||||||
}
|
|
||||||
|
|
||||||
sv pow2523(gf o,const gf i)
|
|
||||||
{
|
|
||||||
gf c;
|
|
||||||
int a;
|
|
||||||
FOR(a,16) c[a]=i[a];
|
|
||||||
for(a=250;a>=0;a--) {
|
|
||||||
S(c,c);
|
|
||||||
if(a!=1) M(c,c,i);
|
|
||||||
}
|
|
||||||
FOR(a,16) o[a]=c[a];
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_scalarmult(u8 *q,const u8 *n,const u8 *p)
|
|
||||||
{
|
|
||||||
u8 z[32];
|
|
||||||
i64 x[80],r,i;
|
|
||||||
gf a,b,c,d,e,f;
|
|
||||||
FOR(i,31) z[i]=n[i];
|
|
||||||
z[31]=(n[31]&127)|64;
|
|
||||||
z[0]&=248;
|
|
||||||
unpack25519(x,p);
|
|
||||||
FOR(i,16) {
|
|
||||||
b[i]=x[i];
|
|
||||||
d[i]=a[i]=c[i]=0;
|
|
||||||
}
|
|
||||||
a[0]=d[0]=1;
|
|
||||||
for(i=254;i>=0;--i) {
|
|
||||||
r=(z[i>>3]>>(i&7))&1;
|
|
||||||
sel25519(a,b,r);
|
|
||||||
sel25519(c,d,r);
|
|
||||||
A(e,a,c);
|
|
||||||
Z(a,a,c);
|
|
||||||
A(c,b,d);
|
|
||||||
Z(b,b,d);
|
|
||||||
S(d,e);
|
|
||||||
S(f,a);
|
|
||||||
M(a,c,a);
|
|
||||||
M(c,b,e);
|
|
||||||
A(e,a,c);
|
|
||||||
Z(a,a,c);
|
|
||||||
S(b,a);
|
|
||||||
Z(c,d,f);
|
|
||||||
M(a,c,_121665);
|
|
||||||
A(a,a,d);
|
|
||||||
M(c,c,a);
|
|
||||||
M(a,d,f);
|
|
||||||
M(d,b,x);
|
|
||||||
S(b,e);
|
|
||||||
sel25519(a,b,r);
|
|
||||||
sel25519(c,d,r);
|
|
||||||
}
|
|
||||||
FOR(i,16) {
|
|
||||||
x[i+16]=a[i];
|
|
||||||
x[i+32]=c[i];
|
|
||||||
x[i+48]=b[i];
|
|
||||||
x[i+64]=d[i];
|
|
||||||
}
|
|
||||||
inv25519(x+32,x+32);
|
|
||||||
M(x+16,x+16,x+32);
|
|
||||||
pack25519(q,x+16);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_scalarmult_base(u8 *q,const u8 *n)
|
|
||||||
{
|
|
||||||
return crypto_scalarmult(q,n,_9);
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_box_keypair(u8 *y,u8 *x)
|
|
||||||
{
|
|
||||||
randombytes(x,32);
|
|
||||||
return crypto_scalarmult_base(y,x);
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_box_beforenm(u8 *k,const u8 *y,const u8 *x)
|
|
||||||
{
|
|
||||||
u8 s[32];
|
|
||||||
crypto_scalarmult(s,x,y);
|
|
||||||
return crypto_core_hsalsa20(k,_0,s,sigma);
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_box_afternm(u8 *c,const u8 *m,u64 d,const u8 *n,const u8 *k)
|
|
||||||
{
|
|
||||||
return crypto_secretbox(c,m,d,n,k);
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_box_open_afternm(u8 *m,const u8 *c,u64 d,const u8 *n,const u8 *k)
|
|
||||||
{
|
|
||||||
return crypto_secretbox_open(m,c,d,n,k);
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_box(u8 *c,const u8 *m,u64 d,const u8 *n,const u8 *y,const u8 *x)
|
|
||||||
{
|
|
||||||
u8 k[32];
|
|
||||||
crypto_box_beforenm(k,y,x);
|
|
||||||
return crypto_box_afternm(c,m,d,n,k);
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_box_open(u8 *m,const u8 *c,u64 d,const u8 *n,const u8 *y,const u8 *x)
|
|
||||||
{
|
|
||||||
u8 k[32];
|
|
||||||
crypto_box_beforenm(k,y,x);
|
|
||||||
return crypto_box_open_afternm(m,c,d,n,k);
|
|
||||||
}
|
|
||||||
|
|
||||||
static u64 R(u64 x,int c) { return (x >> c) | (x << (64 - c)); }
|
|
||||||
static u64 Ch(u64 x,u64 y,u64 z) { return (x & y) ^ (~x & z); }
|
|
||||||
static u64 Maj(u64 x,u64 y,u64 z) { return (x & y) ^ (x & z) ^ (y & z); }
|
|
||||||
static u64 Sigma0(u64 x) { return R(x,28) ^ R(x,34) ^ R(x,39); }
|
|
||||||
static u64 Sigma1(u64 x) { return R(x,14) ^ R(x,18) ^ R(x,41); }
|
|
||||||
static u64 sigma0(u64 x) { return R(x, 1) ^ R(x, 8) ^ (x >> 7); }
|
|
||||||
static u64 sigma1(u64 x) { return R(x,19) ^ R(x,61) ^ (x >> 6); }
|
|
||||||
|
|
||||||
static const u64 K[80] =
|
|
||||||
{
|
|
||||||
0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
|
|
||||||
0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL,
|
|
||||||
0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
|
|
||||||
0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL,
|
|
||||||
0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL,
|
|
||||||
0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
|
|
||||||
0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL,
|
|
||||||
0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL,
|
|
||||||
0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
|
|
||||||
0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL,
|
|
||||||
0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL,
|
|
||||||
0xd192e819d6ef5218ULL, 0xd69906245565a910ULL, 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
|
|
||||||
0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL,
|
|
||||||
0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL,
|
|
||||||
0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
|
|
||||||
0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL,
|
|
||||||
0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL,
|
|
||||||
0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, 0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
|
|
||||||
0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL,
|
|
||||||
0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL
|
|
||||||
};
|
|
||||||
|
|
||||||
int crypto_hashblocks(u8 *x,const u8 *m,u64 n)
|
|
||||||
{
|
|
||||||
u64 z[8],b[8],a[8],w[16],t;
|
|
||||||
int i,j;
|
|
||||||
|
|
||||||
FOR(i,8) z[i] = a[i] = dl64(x + 8 * i);
|
|
||||||
|
|
||||||
while (n >= 128) {
|
|
||||||
FOR(i,16) w[i] = dl64(m + 8 * i);
|
|
||||||
|
|
||||||
FOR(i,80) {
|
|
||||||
FOR(j,8) b[j] = a[j];
|
|
||||||
t = a[7] + Sigma1(a[4]) + Ch(a[4],a[5],a[6]) + K[i] + w[i%16];
|
|
||||||
b[7] = t + Sigma0(a[0]) + Maj(a[0],a[1],a[2]);
|
|
||||||
b[3] += t;
|
|
||||||
FOR(j,8) a[(j+1)%8] = b[j];
|
|
||||||
if (i%16 == 15)
|
|
||||||
FOR(j,16)
|
|
||||||
w[j] += w[(j+9)%16] + sigma0(w[(j+1)%16]) + sigma1(w[(j+14)%16]);
|
|
||||||
}
|
|
||||||
|
|
||||||
FOR(i,8) { a[i] += z[i]; z[i] = a[i]; }
|
|
||||||
|
|
||||||
m += 128;
|
|
||||||
n -= 128;
|
|
||||||
}
|
|
||||||
|
|
||||||
FOR(i,8) ts64(x+8*i,z[i]);
|
|
||||||
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const u8 iv[64] = {
|
|
||||||
0x6a,0x09,0xe6,0x67,0xf3,0xbc,0xc9,0x08,
|
|
||||||
0xbb,0x67,0xae,0x85,0x84,0xca,0xa7,0x3b,
|
|
||||||
0x3c,0x6e,0xf3,0x72,0xfe,0x94,0xf8,0x2b,
|
|
||||||
0xa5,0x4f,0xf5,0x3a,0x5f,0x1d,0x36,0xf1,
|
|
||||||
0x51,0x0e,0x52,0x7f,0xad,0xe6,0x82,0xd1,
|
|
||||||
0x9b,0x05,0x68,0x8c,0x2b,0x3e,0x6c,0x1f,
|
|
||||||
0x1f,0x83,0xd9,0xab,0xfb,0x41,0xbd,0x6b,
|
|
||||||
0x5b,0xe0,0xcd,0x19,0x13,0x7e,0x21,0x79
|
|
||||||
} ;
|
|
||||||
|
|
||||||
int crypto_hash(u8 *out,const u8 *m,u64 n)
|
|
||||||
{
|
|
||||||
u8 h[64],x[256];
|
|
||||||
u64 i,b = n;
|
|
||||||
|
|
||||||
FOR(i,64) h[i] = iv[i];
|
|
||||||
|
|
||||||
crypto_hashblocks(h,m,n);
|
|
||||||
m += n;
|
|
||||||
n &= 127;
|
|
||||||
m -= n;
|
|
||||||
|
|
||||||
FOR(i,256) x[i] = 0;
|
|
||||||
FOR(i,n) x[i] = m[i];
|
|
||||||
x[n] = 128;
|
|
||||||
|
|
||||||
n = 256-128*(n<112);
|
|
||||||
x[n-9] = b >> 61;
|
|
||||||
ts64(x+n-8,b<<3);
|
|
||||||
crypto_hashblocks(h,x,n);
|
|
||||||
|
|
||||||
FOR(i,64) out[i] = h[i];
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
sv add(gf p[4],gf q[4])
|
|
||||||
{
|
|
||||||
gf a,b,c,d,t,e,f,g,h;
|
|
||||||
|
|
||||||
Z(a, p[1], p[0]);
|
|
||||||
Z(t, q[1], q[0]);
|
|
||||||
M(a, a, t);
|
|
||||||
A(b, p[0], p[1]);
|
|
||||||
A(t, q[0], q[1]);
|
|
||||||
M(b, b, t);
|
|
||||||
M(c, p[3], q[3]);
|
|
||||||
M(c, c, D2);
|
|
||||||
M(d, p[2], q[2]);
|
|
||||||
A(d, d, d);
|
|
||||||
Z(e, b, a);
|
|
||||||
Z(f, d, c);
|
|
||||||
A(g, d, c);
|
|
||||||
A(h, b, a);
|
|
||||||
|
|
||||||
M(p[0], e, f);
|
|
||||||
M(p[1], h, g);
|
|
||||||
M(p[2], g, f);
|
|
||||||
M(p[3], e, h);
|
|
||||||
}
|
|
||||||
|
|
||||||
sv cswap(gf p[4],gf q[4],u8 b)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
FOR(i,4)
|
|
||||||
sel25519(p[i],q[i],b);
|
|
||||||
}
|
|
||||||
|
|
||||||
sv pack(u8 *r,gf p[4])
|
|
||||||
{
|
|
||||||
gf tx, ty, zi;
|
|
||||||
inv25519(zi, p[2]);
|
|
||||||
M(tx, p[0], zi);
|
|
||||||
M(ty, p[1], zi);
|
|
||||||
pack25519(r, ty);
|
|
||||||
r[31] ^= par25519(tx) << 7;
|
|
||||||
}
|
|
||||||
|
|
||||||
sv scalarmult(gf p[4],gf q[4],const u8 *s)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
set25519(p[0],gf0);
|
|
||||||
set25519(p[1],gf1);
|
|
||||||
set25519(p[2],gf1);
|
|
||||||
set25519(p[3],gf0);
|
|
||||||
for (i = 255;i >= 0;--i) {
|
|
||||||
const u8 b = (s[i/8]>>(i&7))&1;
|
|
||||||
cswap(p,q,b);
|
|
||||||
add(q,p);
|
|
||||||
add(p,p);
|
|
||||||
cswap(p,q,b);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sv scalarbase(gf p[4],const u8 *s)
|
|
||||||
{
|
|
||||||
gf q[4];
|
|
||||||
set25519(q[0],X);
|
|
||||||
set25519(q[1],Y);
|
|
||||||
set25519(q[2],gf1);
|
|
||||||
M(q[3],X,Y);
|
|
||||||
scalarmult(p,q,s);
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_sign_keypair(u8 *pk, u8 *sk)
|
|
||||||
{
|
|
||||||
u8 d[64];
|
|
||||||
gf p[4];
|
|
||||||
int i;
|
|
||||||
|
|
||||||
randombytes(sk, 32);
|
|
||||||
crypto_hash(d, sk, 32);
|
|
||||||
d[0] &= 248;
|
|
||||||
d[31] &= 127;
|
|
||||||
d[31] |= 64;
|
|
||||||
|
|
||||||
scalarbase(p,d);
|
|
||||||
pack(pk,p);
|
|
||||||
|
|
||||||
FOR(i,32) sk[32 + i] = pk[i];
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const u64 L[32] = {0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10};
|
|
||||||
|
|
||||||
sv modL(u8 *r,i64 x[64])
|
|
||||||
{
|
|
||||||
i64 carry,i,j;
|
|
||||||
for (i = 63;i >= 32;--i) {
|
|
||||||
carry = 0;
|
|
||||||
for (j = i - 32;j < i - 12;++j) {
|
|
||||||
x[j] += carry - 16 * x[i] * L[j - (i - 32)];
|
|
||||||
carry = (x[j] + 128) >> 8;
|
|
||||||
x[j] -= carry << 8;
|
|
||||||
}
|
|
||||||
x[j] += carry;
|
|
||||||
x[i] = 0;
|
|
||||||
}
|
|
||||||
carry = 0;
|
|
||||||
FOR(j,32) {
|
|
||||||
x[j] += carry - (x[31] >> 4) * L[j];
|
|
||||||
carry = x[j] >> 8;
|
|
||||||
x[j] &= 255;
|
|
||||||
}
|
|
||||||
FOR(j,32) x[j] -= carry * L[j];
|
|
||||||
FOR(i,32) {
|
|
||||||
x[i+1] += x[i] >> 8;
|
|
||||||
r[i] = x[i] & 255;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sv reduce(u8 *r)
|
|
||||||
{
|
|
||||||
i64 x[64],i;
|
|
||||||
FOR(i,64) x[i] = (u64) r[i];
|
|
||||||
FOR(i,64) r[i] = 0;
|
|
||||||
modL(r,x);
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_sign(u8 *sm,u64 *smlen,const u8 *m,u64 n,const u8 *sk)
|
|
||||||
{
|
|
||||||
u8 d[64],h[64],r[64];
|
|
||||||
i64 i,j,x[64];
|
|
||||||
gf p[4];
|
|
||||||
|
|
||||||
crypto_hash(d, sk, 32);
|
|
||||||
d[0] &= 248;
|
|
||||||
d[31] &= 127;
|
|
||||||
d[31] |= 64;
|
|
||||||
|
|
||||||
*smlen = n+64;
|
|
||||||
FOR(i,n) sm[64 + i] = m[i];
|
|
||||||
FOR(i,32) sm[32 + i] = d[32 + i];
|
|
||||||
|
|
||||||
crypto_hash(r, sm+32, n+32);
|
|
||||||
reduce(r);
|
|
||||||
scalarbase(p,r);
|
|
||||||
pack(sm,p);
|
|
||||||
|
|
||||||
FOR(i,32) sm[i+32] = sk[i+32];
|
|
||||||
crypto_hash(h,sm,n + 64);
|
|
||||||
reduce(h);
|
|
||||||
|
|
||||||
FOR(i,64) x[i] = 0;
|
|
||||||
FOR(i,32) x[i] = (u64) r[i];
|
|
||||||
FOR(i,32) FOR(j,32) x[i+j] += h[i] * (u64) d[j];
|
|
||||||
modL(sm + 32,x);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int unpackneg(gf r[4],const u8 p[32])
|
|
||||||
{
|
|
||||||
gf t, chk, num, den, den2, den4, den6;
|
|
||||||
set25519(r[2],gf1);
|
|
||||||
unpack25519(r[1],p);
|
|
||||||
S(num,r[1]);
|
|
||||||
M(den,num,D);
|
|
||||||
Z(num,num,r[2]);
|
|
||||||
A(den,r[2],den);
|
|
||||||
|
|
||||||
S(den2,den);
|
|
||||||
S(den4,den2);
|
|
||||||
M(den6,den4,den2);
|
|
||||||
M(t,den6,num);
|
|
||||||
M(t,t,den);
|
|
||||||
|
|
||||||
pow2523(t,t);
|
|
||||||
M(t,t,num);
|
|
||||||
M(t,t,den);
|
|
||||||
M(t,t,den);
|
|
||||||
M(r[0],t,den);
|
|
||||||
|
|
||||||
S(chk,r[0]);
|
|
||||||
M(chk,chk,den);
|
|
||||||
if (neq25519(chk, num)) M(r[0],r[0],I);
|
|
||||||
|
|
||||||
S(chk,r[0]);
|
|
||||||
M(chk,chk,den);
|
|
||||||
if (neq25519(chk, num)) return -1;
|
|
||||||
|
|
||||||
if (par25519(r[0]) == (p[31]>>7)) Z(r[0],gf0,r[0]);
|
|
||||||
|
|
||||||
M(r[3],r[0],r[1]);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int crypto_sign_open(u8 *m,u64 *mlen,const u8 *sm,u64 n,const u8 *pk)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
u8 t[32],h[64];
|
|
||||||
gf p[4],q[4];
|
|
||||||
|
|
||||||
*mlen = -1;
|
|
||||||
if (n < 64) return -1;
|
|
||||||
|
|
||||||
if (unpackneg(q,pk)) return -1;
|
|
||||||
|
|
||||||
FOR(i,n) m[i] = sm[i];
|
|
||||||
FOR(i,32) m[i+32] = pk[i];
|
|
||||||
crypto_hash(h,m,n);
|
|
||||||
reduce(h);
|
|
||||||
scalarmult(p,q,h);
|
|
||||||
|
|
||||||
scalarbase(q,sm + 32);
|
|
||||||
add(p,q);
|
|
||||||
pack(t,p);
|
|
||||||
|
|
||||||
n -= 64;
|
|
||||||
if (crypto_verify_32(sm, t)) {
|
|
||||||
FOR(i,n) m[i] = 0;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
FOR(i,n) m[i] = sm[i + 64];
|
|
||||||
*mlen = n;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef ZMQ_HAVE_WINDOWS
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
#include <wincrypt.h>
|
|
||||||
|
|
||||||
#define NCP ((HCRYPTPROV) 0)
|
|
||||||
|
|
||||||
HCRYPTPROV hProvider = NCP;
|
|
||||||
|
|
||||||
void randombytes(unsigned char *x,unsigned long long xlen)
|
|
||||||
{
|
|
||||||
unsigned i;
|
|
||||||
BOOL ret;
|
|
||||||
|
|
||||||
if (hProvider == NCP) {
|
|
||||||
for (;;) {
|
|
||||||
ret = CryptAcquireContext(&hProvider, NULL, NULL,
|
|
||||||
PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT);
|
|
||||||
if (ret != FALSE)
|
|
||||||
break;
|
|
||||||
Sleep (1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
while (xlen > 0) {
|
|
||||||
if (xlen < 1048576)
|
|
||||||
i = (unsigned) xlen;
|
|
||||||
else
|
|
||||||
i = 1048576;
|
|
||||||
|
|
||||||
ret = CryptGenRandom(hProvider, i, x);
|
|
||||||
if (ret == FALSE) {
|
|
||||||
Sleep(1);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
x += i;
|
|
||||||
xlen -= i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int randombytes_close(void)
|
|
||||||
{
|
|
||||||
int rc = -1;
|
|
||||||
if ((hProvider != NCP) && (CryptReleaseContext(hProvider, 0) != FALSE)) {
|
|
||||||
hProvider = NCP;
|
|
||||||
rc = 0;
|
|
||||||
}
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
int sodium_init (void)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
#ifdef ZMQ_HAVE_GETRANDOM
|
|
||||||
#include <sys/random.h>
|
|
||||||
#else
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
|
|
||||||
static int fd = -1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void randombytes (unsigned char *x,unsigned long long xlen)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
#ifndef ZMQ_HAVE_GETRANDOM
|
|
||||||
/* Require that random_open has already been called, to avoid
|
|
||||||
race conditions. */
|
|
||||||
assert (fd != -1);
|
|
||||||
#endif
|
|
||||||
while (xlen > 0) {
|
|
||||||
if (xlen < 1048576)
|
|
||||||
i = xlen;
|
|
||||||
else
|
|
||||||
i = 1048576;
|
|
||||||
|
|
||||||
#ifdef ZMQ_HAVE_GETRANDOM
|
|
||||||
i = getrandom (x, i, 0);
|
|
||||||
#else
|
|
||||||
i = read(fd,x,i);
|
|
||||||
#endif
|
|
||||||
if (i < 1) {
|
|
||||||
sleep (1);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
x += i;
|
|
||||||
xlen -= i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Do not call manually! Use random_close from random.hpp */
|
|
||||||
int randombytes_close (void)
|
|
||||||
{
|
|
||||||
int rc = -1;
|
|
||||||
#ifndef ZMQ_HAVE_GETRANDOM
|
|
||||||
if (fd != -1 && close(fd) == 0) {
|
|
||||||
fd = -1;
|
|
||||||
rc = 0;
|
|
||||||
}
|
|
||||||
#endif /* ZMQ_HAVE_GETRANDOM */
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Do not call manually! Use random_open from random.hpp */
|
|
||||||
int sodium_init (void)
|
|
||||||
{
|
|
||||||
#ifndef ZMQ_HAVE_GETRANDOM
|
|
||||||
if (fd == -1) {
|
|
||||||
for (;;) {
|
|
||||||
int flags = O_RDONLY;
|
|
||||||
#ifdef ZMQ_HAVE_O_CLOEXEC
|
|
||||||
flags |= O_CLOEXEC;
|
|
||||||
#endif
|
|
||||||
fd = open ("/dev/urandom", flags);
|
|
||||||
if (fd != -1)
|
|
||||||
break;
|
|
||||||
sleep (1);
|
|
||||||
}
|
|
||||||
#if !defined ZMQ_HAVE_O_CLOEXEC && defined FD_CLOEXEC
|
|
||||||
int rc = fcntl (fd, F_SETFD, FD_CLOEXEC);
|
|
||||||
assert (rc != -1);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif /* ZMQ_HAVE_GETRANDOM */
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
/* clang-format on */
|
|
@ -1,80 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2016-2017 Contributors as noted in the AUTHORS file
|
|
||||||
|
|
||||||
This file is part of libzmq, the ZeroMQ core engine in C++.
|
|
||||||
|
|
||||||
libzmq is free software; you can redistribute it and/or modify it under
|
|
||||||
the terms of the GNU Lesser General Public License (LGPL) as published
|
|
||||||
by the Free Software Foundation; either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
As a special exception, the Contributors give you permission to link
|
|
||||||
this library with independent modules to produce an executable,
|
|
||||||
regardless of the license terms of these independent modules, and to
|
|
||||||
copy and distribute the resulting executable under terms of your choice,
|
|
||||||
provided that you also meet, for each linked independent module, the
|
|
||||||
terms and conditions of the license of that module. An independent
|
|
||||||
module is a module which is not derived from or based on this library.
|
|
||||||
If you modify this library, you must extend this exception to your
|
|
||||||
version of the library.
|
|
||||||
|
|
||||||
libzmq is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
|
||||||
License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef TWEETNACL_H
|
|
||||||
#define TWEETNACL_H
|
|
||||||
|
|
||||||
#if defined(ZMQ_USE_TWEETNACL)
|
|
||||||
|
|
||||||
#define crypto_box_SECRETKEYBYTES 32
|
|
||||||
#define crypto_box_BOXZEROBYTES 16
|
|
||||||
#define crypto_box_NONCEBYTES 24
|
|
||||||
#define crypto_box_ZEROBYTES 32
|
|
||||||
#define crypto_box_PUBLICKEYBYTES 32
|
|
||||||
#define crypto_box_BEFORENMBYTES 32
|
|
||||||
#define crypto_secretbox_KEYBYTES 32
|
|
||||||
#define crypto_secretbox_NONCEBYTES 24
|
|
||||||
#define crypto_secretbox_ZEROBYTES 32
|
|
||||||
#define crypto_secretbox_BOXZEROBYTES 16
|
|
||||||
typedef unsigned char u8;
|
|
||||||
typedef unsigned long u32;
|
|
||||||
typedef unsigned long long u64;
|
|
||||||
typedef long long i64;
|
|
||||||
typedef i64 gf[16];
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
void randombytes (unsigned char *, unsigned long long);
|
|
||||||
/* Do not call manually! Use random_close from random.hpp */
|
|
||||||
int randombytes_close (void);
|
|
||||||
/* Do not call manually! Use random_open from random.hpp */
|
|
||||||
int sodium_init (void);
|
|
||||||
|
|
||||||
int crypto_box_keypair (u8 *y_, u8 *x_);
|
|
||||||
int crypto_box_afternm (
|
|
||||||
u8 *c_, const u8 *m_, u64 d_, const u8 *n_, const u8 *k_);
|
|
||||||
int crypto_box_open_afternm (
|
|
||||||
u8 *m_, const u8 *c_, u64 d_, const u8 *n_, const u8 *k_);
|
|
||||||
int crypto_box (
|
|
||||||
u8 *c_, const u8 *m_, u64 d_, const u8 *n_, const u8 *y_, const u8 *x_);
|
|
||||||
int crypto_box_open (
|
|
||||||
u8 *m_, const u8 *c_, u64 d_, const u8 *n_, const u8 *y_, const u8 *x_);
|
|
||||||
int crypto_box_beforenm (u8 *k_, const u8 *y_, const u8 *x_);
|
|
||||||
int crypto_scalarmult_base (u8 *q_, const u8 *n_);
|
|
||||||
int crypto_secretbox (u8 *c_, const u8 *m_, u64 d_, const u8 *n_, const u8 *k_);
|
|
||||||
int crypto_secretbox_open (
|
|
||||||
u8 *m_, const u8 *c_, u64 d_, const u8 *n_, const u8 *k_);
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
10
src/zmq.cpp
10
src/zmq.cpp
@ -1770,10 +1770,12 @@ int zmq_proxy_steerable (void *frontend_,
|
|||||||
errno = EFAULT;
|
errno = EFAULT;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return zmq::proxy (static_cast<zmq::socket_base_t *> (frontend_),
|
#ifdef ZMQ_HAVE_WINDOWS
|
||||||
static_cast<zmq::socket_base_t *> (backend_),
|
errno = WSAEOPNOTSUPP;
|
||||||
static_cast<zmq::socket_base_t *> (capture_),
|
#else
|
||||||
static_cast<zmq::socket_base_t *> (control_));
|
errno = EOPNOTSUPP;
|
||||||
|
#endif
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The deprecated device functionality
|
// The deprecated device functionality
|
||||||
|
@ -43,9 +43,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(ZMQ_USE_TWEETNACL)
|
#if defined(ZMQ_USE_LIBSODIUM)
|
||||||
#include "tweetnacl.h"
|
|
||||||
#elif defined(ZMQ_USE_LIBSODIUM)
|
|
||||||
#include "sodium.h"
|
#include "sodium.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -211,7 +209,7 @@ error_inval:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
// Generate a public/private keypair with tweetnacl or libsodium.
|
// Generate a public/private keypair with libsodium.
|
||||||
// Generated keys will be 40 byte z85-encoded strings.
|
// Generated keys will be 40 byte z85-encoded strings.
|
||||||
// Returns 0 on success, -1 on failure, setting errno.
|
// Returns 0 on success, -1 on failure, setting errno.
|
||||||
// Sets errno = ENOTSUP in the absence of a CURVE library.
|
// Sets errno = ENOTSUP in the absence of a CURVE library.
|
||||||
@ -243,7 +241,7 @@ int zmq_curve_keypair (char *z85_public_key_, char *z85_secret_key_)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
// Derive the public key from a private key using tweetnacl or libsodium.
|
// Derive the public key from a private key using libsodium.
|
||||||
// Derived key will be 40 byte z85-encoded string.
|
// Derived key will be 40 byte z85-encoded string.
|
||||||
// Returns 0 on success, -1 on failure, setting errno.
|
// Returns 0 on success, -1 on failure, setting errno.
|
||||||
// Sets errno = ENOTSUP in the absence of a CURVE library.
|
// Sets errno = ENOTSUP in the absence of a CURVE library.
|
||||||
|
@ -260,7 +260,7 @@ endif()
|
|||||||
foreach(test ${tests})
|
foreach(test ${tests})
|
||||||
# target_sources not supported before CMake 3.1
|
# target_sources not supported before CMake 3.1
|
||||||
if(ZMQ_HAVE_CURVE AND ${test} MATCHES test_security_curve)
|
if(ZMQ_HAVE_CURVE AND ${test} MATCHES test_security_curve)
|
||||||
add_executable(${test} ${test}.cpp "../src/tweetnacl.c" "../src/err.cpp" "../src/random.cpp" "../src/clock.cpp")
|
add_executable(${test} ${test}.cpp "../src/err.cpp" "../src/random.cpp" "../src/clock.cpp")
|
||||||
else()
|
else()
|
||||||
add_executable(${test} ${test}.cpp)
|
add_executable(${test} ${test}.cpp)
|
||||||
endif()
|
endif()
|
||||||
@ -323,11 +323,6 @@ if(NOT CMAKE_SYSTEM_NAME MATCHES "Linux")
|
|||||||
if(ZMQ_HAVE_CURVE)
|
if(ZMQ_HAVE_CURVE)
|
||||||
set_tests_properties(test_security_curve PROPERTIES TIMEOUT 60)
|
set_tests_properties(test_security_curve PROPERTIES TIMEOUT 60)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# add additional required flags ZMQ_USE_TWEETNACL will already be defined when not using sodium
|
|
||||||
if(ZMQ_HAVE_CURVE AND NOT ZMQ_USE_TWEETNACL)
|
|
||||||
target_compile_definitions(test_security_curve PRIVATE "-DZMQ_USE_TWEETNACL")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set_tests_properties(test_security_zap PROPERTIES TIMEOUT 60)
|
set_tests_properties(test_security_zap PROPERTIES TIMEOUT 60)
|
||||||
|
@ -33,8 +33,6 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
SETUP_TEARDOWN_TESTCONTEXT
|
|
||||||
|
|
||||||
#define CONTENT_SIZE 13
|
#define CONTENT_SIZE 13
|
||||||
#define CONTENT_SIZE_MAX 32
|
#define CONTENT_SIZE_MAX 32
|
||||||
#define ROUTING_ID_SIZE 10
|
#define ROUTING_ID_SIZE 10
|
||||||
@ -48,22 +46,15 @@ struct thread_data
|
|||||||
int id;
|
int id;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
uint64_t msg_in;
|
|
||||||
uint64_t bytes_in;
|
|
||||||
uint64_t msg_out;
|
|
||||||
uint64_t bytes_out;
|
|
||||||
} zmq_socket_stats_t;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
zmq_socket_stats_t frontend;
|
|
||||||
zmq_socket_stats_t backend;
|
|
||||||
} zmq_proxy_stats_t;
|
|
||||||
|
|
||||||
void *g_clients_pkts_out = NULL;
|
void *g_clients_pkts_out = NULL;
|
||||||
void *g_workers_pkts_out = NULL;
|
void *g_workers_pkts_out = NULL;
|
||||||
|
void *control_context = NULL;
|
||||||
|
|
||||||
|
void setUp ()
|
||||||
|
{
|
||||||
|
setup_test_context ();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Asynchronous client-to-server (DEALER to ROUTER) - pure libzmq
|
// Asynchronous client-to-server (DEALER to ROUTER) - pure libzmq
|
||||||
//
|
//
|
||||||
@ -98,7 +89,7 @@ static void client_task (void *db_)
|
|||||||
TEST_ASSERT_NOT_NULL (client);
|
TEST_ASSERT_NOT_NULL (client);
|
||||||
|
|
||||||
// Control socket receives terminate command from main over inproc
|
// Control socket receives terminate command from main over inproc
|
||||||
void *control = zmq_socket (get_test_context (), ZMQ_SUB);
|
void *control = zmq_socket (control_context, ZMQ_SUB);
|
||||||
TEST_ASSERT_NOT_NULL (control);
|
TEST_ASSERT_NOT_NULL (control);
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (zmq_setsockopt (control, ZMQ_SUBSCRIBE, "", 0));
|
TEST_ASSERT_SUCCESS_ERRNO (zmq_setsockopt (control, ZMQ_SUBSCRIBE, "", 0));
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (
|
TEST_ASSERT_SUCCESS_ERRNO (
|
||||||
@ -210,13 +201,6 @@ void server_task (void * /*unused_*/)
|
|||||||
zmq_setsockopt (backend, ZMQ_LINGER, &linger, sizeof (linger)));
|
zmq_setsockopt (backend, ZMQ_LINGER, &linger, sizeof (linger)));
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (backend, "inproc://backend"));
|
TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (backend, "inproc://backend"));
|
||||||
|
|
||||||
// Control socket receives terminate command from main over inproc
|
|
||||||
void *control = zmq_socket (get_test_context (), ZMQ_REP);
|
|
||||||
TEST_ASSERT_NOT_NULL (control);
|
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (
|
|
||||||
zmq_setsockopt (control, ZMQ_LINGER, &linger, sizeof (linger)));
|
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (zmq_connect (control, "inproc://control_proxy"));
|
|
||||||
|
|
||||||
// Launch pool of worker threads, precise number is not critical
|
// Launch pool of worker threads, precise number is not critical
|
||||||
int thread_nbr;
|
int thread_nbr;
|
||||||
void *threads[5];
|
void *threads[5];
|
||||||
@ -242,15 +226,13 @@ void server_task (void * /*unused_*/)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Connect backend to frontend via a proxy
|
// Connect backend to frontend via a proxy
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (
|
zmq_proxy (frontend, backend, NULL);
|
||||||
zmq_proxy_steerable (frontend, backend, NULL, control));
|
|
||||||
|
|
||||||
for (thread_nbr = 0; thread_nbr < QT_WORKERS; thread_nbr++)
|
for (thread_nbr = 0; thread_nbr < QT_WORKERS; thread_nbr++)
|
||||||
zmq_threadclose (threads[thread_nbr]);
|
zmq_threadclose (threads[thread_nbr]);
|
||||||
|
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (zmq_close (frontend));
|
TEST_ASSERT_SUCCESS_ERRNO (zmq_close (frontend));
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (zmq_close (backend));
|
TEST_ASSERT_SUCCESS_ERRNO (zmq_close (backend));
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (zmq_close (control));
|
|
||||||
for (int i = 0; i < QT_CLIENTS; ++i) {
|
for (int i = 0; i < QT_CLIENTS; ++i) {
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (zmq_close (endpoint_receivers[i]));
|
TEST_ASSERT_SUCCESS_ERRNO (zmq_close (endpoint_receivers[i]));
|
||||||
}
|
}
|
||||||
@ -270,7 +252,7 @@ static void server_worker (void * /*unused_*/)
|
|||||||
TEST_ASSERT_SUCCESS_ERRNO (zmq_connect (worker, "inproc://backend"));
|
TEST_ASSERT_SUCCESS_ERRNO (zmq_connect (worker, "inproc://backend"));
|
||||||
|
|
||||||
// Control socket receives terminate command from main over inproc
|
// Control socket receives terminate command from main over inproc
|
||||||
void *control = zmq_socket (get_test_context (), ZMQ_SUB);
|
void *control = zmq_socket (control_context, ZMQ_SUB);
|
||||||
TEST_ASSERT_NOT_NULL (control);
|
TEST_ASSERT_NOT_NULL (control);
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (zmq_setsockopt (control, ZMQ_SUBSCRIBE, "", 0));
|
TEST_ASSERT_SUCCESS_ERRNO (zmq_setsockopt (control, ZMQ_SUBSCRIBE, "", 0));
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (
|
TEST_ASSERT_SUCCESS_ERRNO (
|
||||||
@ -332,82 +314,6 @@ static void server_worker (void * /*unused_*/)
|
|||||||
TEST_ASSERT_SUCCESS_ERRNO (zmq_close (control));
|
TEST_ASSERT_SUCCESS_ERRNO (zmq_close (control));
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t recv_stat (void *sock_, bool last_)
|
|
||||||
{
|
|
||||||
uint64_t res;
|
|
||||||
zmq_msg_t stats_msg;
|
|
||||||
|
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (zmq_msg_init (&stats_msg));
|
|
||||||
TEST_ASSERT_EQUAL_INT (sizeof (uint64_t),
|
|
||||||
zmq_recvmsg (sock_, &stats_msg, 0));
|
|
||||||
memcpy (&res, zmq_msg_data (&stats_msg), zmq_msg_size (&stats_msg));
|
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (zmq_msg_close (&stats_msg));
|
|
||||||
|
|
||||||
int more;
|
|
||||||
size_t moresz = sizeof more;
|
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (
|
|
||||||
zmq_getsockopt (sock_, ZMQ_RCVMORE, &more, &moresz));
|
|
||||||
TEST_ASSERT_TRUE ((last_ && !more) || (!last_ && more));
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Utility function to interrogate the proxy:
|
|
||||||
|
|
||||||
void check_proxy_stats (void *control_proxy_)
|
|
||||||
{
|
|
||||||
zmq_proxy_stats_t total_stats;
|
|
||||||
|
|
||||||
send_string_expect_success (control_proxy_, "STATISTICS", 0);
|
|
||||||
|
|
||||||
// first frame of the reply contains FRONTEND stats:
|
|
||||||
total_stats.frontend.msg_in = recv_stat (control_proxy_, false);
|
|
||||||
total_stats.frontend.bytes_in = recv_stat (control_proxy_, false);
|
|
||||||
total_stats.frontend.msg_out = recv_stat (control_proxy_, false);
|
|
||||||
total_stats.frontend.bytes_out = recv_stat (control_proxy_, false);
|
|
||||||
|
|
||||||
// second frame of the reply contains BACKEND stats:
|
|
||||||
total_stats.backend.msg_in = recv_stat (control_proxy_, false);
|
|
||||||
total_stats.backend.bytes_in = recv_stat (control_proxy_, false);
|
|
||||||
total_stats.backend.msg_out = recv_stat (control_proxy_, false);
|
|
||||||
total_stats.backend.bytes_out = recv_stat (control_proxy_, true);
|
|
||||||
|
|
||||||
// check stats
|
|
||||||
|
|
||||||
if (is_verbose) {
|
|
||||||
printf (
|
|
||||||
"frontend: pkts_in=%lu bytes_in=%lu pkts_out=%lu bytes_out=%lu\n",
|
|
||||||
static_cast<unsigned long int> (total_stats.frontend.msg_in),
|
|
||||||
static_cast<unsigned long int> (total_stats.frontend.bytes_in),
|
|
||||||
static_cast<unsigned long int> (total_stats.frontend.msg_out),
|
|
||||||
static_cast<unsigned long int> (total_stats.frontend.bytes_out));
|
|
||||||
printf (
|
|
||||||
"backend: pkts_in=%lu bytes_in=%lu pkts_out=%lu bytes_out=%lu\n",
|
|
||||||
static_cast<unsigned long int> (total_stats.backend.msg_in),
|
|
||||||
static_cast<unsigned long int> (total_stats.backend.bytes_in),
|
|
||||||
static_cast<unsigned long int> (total_stats.backend.msg_out),
|
|
||||||
static_cast<unsigned long int> (total_stats.backend.bytes_out));
|
|
||||||
|
|
||||||
printf ("clients sent out %d requests\n",
|
|
||||||
zmq_atomic_counter_value (g_clients_pkts_out));
|
|
||||||
printf ("workers sent out %d replies\n",
|
|
||||||
zmq_atomic_counter_value (g_workers_pkts_out));
|
|
||||||
}
|
|
||||||
TEST_ASSERT_EQUAL_UINT (
|
|
||||||
(unsigned) zmq_atomic_counter_value (g_clients_pkts_out),
|
|
||||||
total_stats.frontend.msg_in);
|
|
||||||
TEST_ASSERT_EQUAL_UINT (
|
|
||||||
(unsigned) zmq_atomic_counter_value (g_workers_pkts_out),
|
|
||||||
total_stats.frontend.msg_out);
|
|
||||||
TEST_ASSERT_EQUAL_UINT (
|
|
||||||
(unsigned) zmq_atomic_counter_value (g_workers_pkts_out),
|
|
||||||
total_stats.backend.msg_in);
|
|
||||||
TEST_ASSERT_EQUAL_UINT (
|
|
||||||
(unsigned) zmq_atomic_counter_value (g_clients_pkts_out),
|
|
||||||
total_stats.backend.msg_out);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// The main thread simply starts several clients and a server, and then
|
// The main thread simply starts several clients and a server, and then
|
||||||
// waits for the server to finish.
|
// waits for the server to finish.
|
||||||
|
|
||||||
@ -415,21 +321,16 @@ void test_proxy ()
|
|||||||
{
|
{
|
||||||
g_clients_pkts_out = zmq_atomic_counter_new ();
|
g_clients_pkts_out = zmq_atomic_counter_new ();
|
||||||
g_workers_pkts_out = zmq_atomic_counter_new ();
|
g_workers_pkts_out = zmq_atomic_counter_new ();
|
||||||
|
control_context = zmq_ctx_new ();
|
||||||
|
TEST_ASSERT_NOT_NULL (control_context);
|
||||||
|
|
||||||
// Control socket receives terminate command from main over inproc
|
// Control socket receives terminate command from main over inproc
|
||||||
void *control = test_context_socket (ZMQ_PUB);
|
void *control = zmq_socket (control_context, ZMQ_PUB);
|
||||||
int linger = 0;
|
int linger = 0;
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (
|
TEST_ASSERT_SUCCESS_ERRNO (
|
||||||
zmq_setsockopt (control, ZMQ_LINGER, &linger, sizeof (linger)));
|
zmq_setsockopt (control, ZMQ_LINGER, &linger, sizeof (linger)));
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (control, "inproc://control"));
|
TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (control, "inproc://control"));
|
||||||
|
|
||||||
// Control socket receives terminate command from main over inproc
|
|
||||||
void *control_proxy = test_context_socket (ZMQ_REQ);
|
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (
|
|
||||||
zmq_setsockopt (control_proxy, ZMQ_LINGER, &linger, sizeof (linger)));
|
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (
|
|
||||||
zmq_bind (control_proxy, "inproc://control_proxy"));
|
|
||||||
|
|
||||||
void *threads[QT_CLIENTS + 1];
|
void *threads[QT_CLIENTS + 1];
|
||||||
struct thread_data databags[QT_CLIENTS + 1];
|
struct thread_data databags[QT_CLIENTS + 1];
|
||||||
for (int i = 0; i < QT_CLIENTS; i++) {
|
for (int i = 0; i < QT_CLIENTS; i++) {
|
||||||
@ -445,23 +346,19 @@ void test_proxy ()
|
|||||||
|
|
||||||
msleep (500); // Wait for all clients and workers to STOP
|
msleep (500); // Wait for all clients and workers to STOP
|
||||||
|
|
||||||
if (is_verbose)
|
|
||||||
printf ("retrieving stats from the proxy\n");
|
|
||||||
check_proxy_stats (control_proxy);
|
|
||||||
|
|
||||||
if (is_verbose)
|
if (is_verbose)
|
||||||
printf ("shutting down all clients and server workers\n");
|
printf ("shutting down all clients and server workers\n");
|
||||||
send_string_expect_success (control, "TERMINATE", 0);
|
send_string_expect_success (control, "TERMINATE", 0);
|
||||||
|
|
||||||
if (is_verbose)
|
msleep (500); // Wait for all clients and workers to terminate
|
||||||
printf ("shutting down the proxy\n");
|
|
||||||
send_string_expect_success (control_proxy, "TERMINATE", 0);
|
|
||||||
|
|
||||||
test_context_socket_close (control);
|
teardown_test_context ();
|
||||||
test_context_socket_close (control_proxy);
|
|
||||||
|
|
||||||
for (int i = 0; i < QT_CLIENTS + 1; i++)
|
for (int i = 0; i < QT_CLIENTS + 1; i++)
|
||||||
zmq_threadclose (threads[i]);
|
zmq_threadclose (threads[i]);
|
||||||
|
|
||||||
|
TEST_ASSERT_SUCCESS_ERRNO (zmq_close (control));
|
||||||
|
TEST_ASSERT_SUCCESS_ERRNO (zmq_ctx_destroy (control_context));
|
||||||
}
|
}
|
||||||
|
|
||||||
int main (void)
|
int main (void)
|
||||||
|
@ -192,80 +192,6 @@ static void subscriber_thread_main (void *pvoid_)
|
|||||||
zmq_close (subsocket);
|
zmq_close (subsocket);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool recv_stat (void *sock_, bool last_, uint64_t *res_)
|
|
||||||
{
|
|
||||||
zmq_msg_t stats_msg;
|
|
||||||
|
|
||||||
int rc = zmq_msg_init (&stats_msg);
|
|
||||||
assert (rc == 0);
|
|
||||||
|
|
||||||
rc = zmq_msg_recv (&stats_msg, sock_, 0); //ZMQ_DONTWAIT);
|
|
||||||
if (rc == -1 && errno == EAGAIN) {
|
|
||||||
rc = zmq_msg_close (&stats_msg);
|
|
||||||
assert (rc == 0);
|
|
||||||
return false; // cannot retrieve the stat
|
|
||||||
}
|
|
||||||
|
|
||||||
assert (rc == sizeof (uint64_t));
|
|
||||||
memcpy (res_, zmq_msg_data (&stats_msg), zmq_msg_size (&stats_msg));
|
|
||||||
|
|
||||||
rc = zmq_msg_close (&stats_msg);
|
|
||||||
assert (rc == 0);
|
|
||||||
|
|
||||||
int more;
|
|
||||||
size_t moresz = sizeof more;
|
|
||||||
rc = zmq_getsockopt (sock_, ZMQ_RCVMORE, &more, &moresz);
|
|
||||||
assert (rc == 0);
|
|
||||||
assert ((last_ && !more) || (!last_ && more));
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Utility function to interrogate the proxy:
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
uint64_t msg_in;
|
|
||||||
uint64_t bytes_in;
|
|
||||||
uint64_t msg_out;
|
|
||||||
uint64_t bytes_out;
|
|
||||||
} zmq_socket_stats_t;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
zmq_socket_stats_t frontend;
|
|
||||||
zmq_socket_stats_t backend;
|
|
||||||
} zmq_proxy_stats_t;
|
|
||||||
|
|
||||||
bool check_proxy_stats (void *control_proxy_)
|
|
||||||
{
|
|
||||||
zmq_proxy_stats_t total_stats;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
rc = zmq_send (control_proxy_, "STATISTICS", 10, ZMQ_DONTWAIT);
|
|
||||||
assert (rc == 10 || (rc == -1 && errno == EAGAIN));
|
|
||||||
if (rc == -1 && errno == EAGAIN) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// first frame of the reply contains FRONTEND stats:
|
|
||||||
if (!recv_stat (control_proxy_, false, &total_stats.frontend.msg_in)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
recv_stat (control_proxy_, false, &total_stats.frontend.bytes_in);
|
|
||||||
recv_stat (control_proxy_, false, &total_stats.frontend.msg_out);
|
|
||||||
recv_stat (control_proxy_, false, &total_stats.frontend.bytes_out);
|
|
||||||
|
|
||||||
// second frame of the reply contains BACKEND stats:
|
|
||||||
recv_stat (control_proxy_, false, &total_stats.backend.msg_in);
|
|
||||||
recv_stat (control_proxy_, false, &total_stats.backend.bytes_in);
|
|
||||||
recv_stat (control_proxy_, false, &total_stats.backend.msg_out);
|
|
||||||
recv_stat (control_proxy_, true, &total_stats.backend.bytes_out);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void proxy_stats_asker_thread_main (void *pvoid_)
|
static void proxy_stats_asker_thread_main (void *pvoid_)
|
||||||
{
|
{
|
||||||
const proxy_hwm_cfg_t *const cfg =
|
const proxy_hwm_cfg_t *const cfg =
|
||||||
@ -305,16 +231,9 @@ static void proxy_stats_asker_thread_main (void *pvoid_)
|
|||||||
// Start!
|
// Start!
|
||||||
|
|
||||||
while (!zmq_atomic_counter_value (cfg->subscriber_received_all)) {
|
while (!zmq_atomic_counter_value (cfg->subscriber_received_all)) {
|
||||||
check_proxy_stats (control_req);
|
|
||||||
usleep (1000); // 1ms -> in best case we will get 1000updates/second
|
usleep (1000); // 1ms -> in best case we will get 1000updates/second
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Ask the proxy to exit: the subscriber has received all messages
|
|
||||||
|
|
||||||
rc = zmq_send (control_req, "TERMINATE", 9, 0);
|
|
||||||
assert (rc == 9);
|
|
||||||
|
|
||||||
zmq_close (control_req);
|
zmq_close (control_req);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -371,7 +290,7 @@ static void proxy_thread_main (void *pvoid_)
|
|||||||
|
|
||||||
// start proxying!
|
// start proxying!
|
||||||
|
|
||||||
zmq_proxy_steerable (frontend_xsub, backend_xpub, NULL, control_rep);
|
zmq_proxy (frontend_xsub, backend_xpub, NULL);
|
||||||
|
|
||||||
zmq_close (frontend_xsub);
|
zmq_close (frontend_xsub);
|
||||||
zmq_close (backend_xpub);
|
zmq_close (backend_xpub);
|
||||||
@ -415,11 +334,12 @@ int main (void)
|
|||||||
zmq_threadclose (publisher);
|
zmq_threadclose (publisher);
|
||||||
zmq_threadclose (subscriber);
|
zmq_threadclose (subscriber);
|
||||||
zmq_threadclose (asker);
|
zmq_threadclose (asker);
|
||||||
zmq_threadclose (proxy);
|
|
||||||
|
|
||||||
int rc = zmq_ctx_term (context);
|
int rc = zmq_ctx_term (context);
|
||||||
assert (rc == 0);
|
assert (rc == 0);
|
||||||
|
|
||||||
|
zmq_threadclose (proxy);
|
||||||
|
|
||||||
zmq_atomic_counter_destroy (&cfg.subscriber_received_all);
|
zmq_atomic_counter_destroy (&cfg.subscriber_received_all);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -32,7 +32,10 @@
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
SETUP_TEARDOWN_TESTCONTEXT
|
void setUp ()
|
||||||
|
{
|
||||||
|
setup_test_context ();
|
||||||
|
}
|
||||||
|
|
||||||
// This is our server task.
|
// This is our server task.
|
||||||
// It runs a proxy with a single REP socket as both frontend and backend.
|
// It runs a proxy with a single REP socket as both frontend and backend.
|
||||||
@ -51,7 +54,7 @@ void server_task (void * /*unused_*/)
|
|||||||
send_string_expect_success (control, my_endpoint, 0);
|
send_string_expect_success (control, my_endpoint, 0);
|
||||||
|
|
||||||
// Use rep as both frontend and backend
|
// Use rep as both frontend and backend
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (zmq_proxy_steerable (rep, rep, NULL, control));
|
zmq_proxy (rep, rep, NULL);
|
||||||
|
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (zmq_close (rep));
|
TEST_ASSERT_SUCCESS_ERRNO (zmq_close (rep));
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (zmq_close (control));
|
TEST_ASSERT_SUCCESS_ERRNO (zmq_close (control));
|
||||||
@ -82,10 +85,9 @@ void test_proxy_single_socket ()
|
|||||||
send_string_expect_success (req, "msg22", 0);
|
send_string_expect_success (req, "msg22", 0);
|
||||||
recv_string_expect_success (req, "msg22", 0);
|
recv_string_expect_success (req, "msg22", 0);
|
||||||
|
|
||||||
send_string_expect_success (control, "TERMINATE", 0);
|
|
||||||
|
|
||||||
test_context_socket_close (control);
|
test_context_socket_close (control);
|
||||||
test_context_socket_close (req);
|
test_context_socket_close (req);
|
||||||
|
teardown_test_context ();
|
||||||
free (my_endpoint);
|
free (my_endpoint);
|
||||||
|
|
||||||
zmq_threadclose (server_thread);
|
zmq_threadclose (server_thread);
|
||||||
|
@ -32,7 +32,10 @@
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
SETUP_TEARDOWN_TESTCONTEXT
|
void setUp ()
|
||||||
|
{
|
||||||
|
setup_test_context ();
|
||||||
|
}
|
||||||
|
|
||||||
// This is a test for issue #1382. The server thread creates a SUB-PUSH
|
// This is a test for issue #1382. The server thread creates a SUB-PUSH
|
||||||
// steerable proxy. The main process then sends messages to the SUB
|
// steerable proxy. The main process then sends messages to the SUB
|
||||||
@ -60,8 +63,7 @@ void server_task (void * /*unused_*/)
|
|||||||
send_string_expect_success (control, my_endpoint, 0);
|
send_string_expect_success (control, my_endpoint, 0);
|
||||||
|
|
||||||
// Connect backend to frontend via a proxy
|
// Connect backend to frontend via a proxy
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (
|
zmq_proxy (frontend, backend, NULL);
|
||||||
zmq_proxy_steerable (frontend, backend, NULL, control));
|
|
||||||
|
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (zmq_close (frontend));
|
TEST_ASSERT_SUCCESS_ERRNO (zmq_close (frontend));
|
||||||
TEST_ASSERT_SUCCESS_ERRNO (zmq_close (backend));
|
TEST_ASSERT_SUCCESS_ERRNO (zmq_close (backend));
|
||||||
@ -97,10 +99,10 @@ void test_proxy_terminate ()
|
|||||||
|
|
||||||
msleep (50);
|
msleep (50);
|
||||||
send_string_expect_success (publisher, "This is a test", 0);
|
send_string_expect_success (publisher, "This is a test", 0);
|
||||||
send_string_expect_success (control, "TERMINATE", 0);
|
|
||||||
|
|
||||||
test_context_socket_close (publisher);
|
test_context_socket_close (publisher);
|
||||||
test_context_socket_close (control);
|
test_context_socket_close (control);
|
||||||
|
teardown_test_context ();
|
||||||
free (my_endpoint);
|
free (my_endpoint);
|
||||||
|
|
||||||
zmq_threadclose (thread);
|
zmq_threadclose (thread);
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TODO remove this workaround for handling libsodium/tweetnacl
|
// TODO remove this workaround for handling libsodium
|
||||||
|
|
||||||
// To define SIZE_MAX with older compilers
|
// To define SIZE_MAX with older compilers
|
||||||
#define __STDC_LIMIT_MACROS
|
#define __STDC_LIMIT_MACROS
|
||||||
@ -38,18 +38,14 @@
|
|||||||
#include "../src/platform.hpp"
|
#include "../src/platform.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ZMQ_USE_TWEETNACL
|
#ifndef ZMQ_USE_LIBSODIUM
|
||||||
#define ZMQ_USE_TWEETNACL
|
#define ZMQ_USE_LIBSODIUM
|
||||||
#endif
|
|
||||||
#ifdef ZMQ_USE_LIBSODIUM
|
|
||||||
#undef ZMQ_USE_LIBSODIUM
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "testutil.hpp"
|
#include "testutil.hpp"
|
||||||
#include "testutil_security.hpp"
|
#include "testutil_security.hpp"
|
||||||
#include <unity.h>
|
#include <unity.h>
|
||||||
|
|
||||||
#include "../src/tweetnacl.h"
|
|
||||||
#include "../src/curve_client_tools.hpp"
|
#include "../src/curve_client_tools.hpp"
|
||||||
#include "../src/random.hpp"
|
#include "../src/random.hpp"
|
||||||
|
|
||||||
|
@ -84,13 +84,14 @@ void test_roundtrip (zmq::msg_t *msg_)
|
|||||||
TEST_ASSERT_EQUAL_UINT8_ARRAY (&original[0], msg_->data (),
|
TEST_ASSERT_EQUAL_UINT8_ARRAY (&original[0], msg_->data (),
|
||||||
original.size ());
|
original.size ());
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
TEST_IGNORE_MESSAGE ("CURVE support is disabled");
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_roundtrip_empty ()
|
void test_roundtrip_empty ()
|
||||||
{
|
{
|
||||||
|
#ifndef ZMQ_HAVE_CURVE
|
||||||
|
TEST_IGNORE_MESSAGE ("CURVE support is disabled");
|
||||||
|
#endif
|
||||||
zmq::msg_t msg;
|
zmq::msg_t msg;
|
||||||
msg.init ();
|
msg.init ();
|
||||||
|
|
||||||
@ -101,6 +102,9 @@ void test_roundtrip_empty ()
|
|||||||
|
|
||||||
void test_roundtrip_small ()
|
void test_roundtrip_small ()
|
||||||
{
|
{
|
||||||
|
#ifndef ZMQ_HAVE_CURVE
|
||||||
|
TEST_IGNORE_MESSAGE ("CURVE support is disabled");
|
||||||
|
#endif
|
||||||
zmq::msg_t msg;
|
zmq::msg_t msg;
|
||||||
msg.init_size (32);
|
msg.init_size (32);
|
||||||
memcpy (msg.data (), "0123456789ABCDEF0123456789ABCDEF", 32);
|
memcpy (msg.data (), "0123456789ABCDEF0123456789ABCDEF", 32);
|
||||||
@ -112,6 +116,9 @@ void test_roundtrip_small ()
|
|||||||
|
|
||||||
void test_roundtrip_large ()
|
void test_roundtrip_large ()
|
||||||
{
|
{
|
||||||
|
#ifndef ZMQ_HAVE_CURVE
|
||||||
|
TEST_IGNORE_MESSAGE ("CURVE support is disabled");
|
||||||
|
#endif
|
||||||
zmq::msg_t msg;
|
zmq::msg_t msg;
|
||||||
msg.init_size (2048);
|
msg.init_size (2048);
|
||||||
for (size_t pos = 0; pos < 2048; pos += 32) {
|
for (size_t pos = 0; pos < 2048; pos += 32) {
|
||||||
@ -126,6 +133,9 @@ void test_roundtrip_large ()
|
|||||||
|
|
||||||
void test_roundtrip_empty_more ()
|
void test_roundtrip_empty_more ()
|
||||||
{
|
{
|
||||||
|
#ifndef ZMQ_HAVE_CURVE
|
||||||
|
TEST_IGNORE_MESSAGE ("CURVE support is disabled");
|
||||||
|
#endif
|
||||||
zmq::msg_t msg;
|
zmq::msg_t msg;
|
||||||
msg.init ();
|
msg.init ();
|
||||||
msg.set_flags (zmq::msg_t::more);
|
msg.set_flags (zmq::msg_t::more);
|
||||||
|
Loading…
Reference in New Issue
Block a user