laag-libczmq 4.1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +57 -0
- data/LICENSE.txt +373 -0
- data/README.org +34 -0
- data/ext/laag/libczmq/extconf.rb +24 -0
- data/laag-libczmq.gemspec +21 -0
- data/lib/laag/libczmq.rb +30 -0
- data/vendor/github.com/zeromq/czmq/.editorconfig +19 -0
- data/vendor/github.com/zeromq/czmq/.gitattributes +5 -0
- data/vendor/github.com/zeromq/czmq/.github/PULL_REQUEST_TEMPLATE.md +28 -0
- data/vendor/github.com/zeromq/czmq/.gitignore +137 -0
- data/vendor/github.com/zeromq/czmq/.travis.yml +126 -0
- data/vendor/github.com/zeromq/czmq/AUTHORS +69 -0
- data/vendor/github.com/zeromq/czmq/CMakeLists.txt +653 -0
- data/vendor/github.com/zeromq/czmq/CONTRIBUTING.md +19 -0
- data/vendor/github.com/zeromq/czmq/Dockerfile +29 -0
- data/vendor/github.com/zeromq/czmq/Findlibsodium.cmake +47 -0
- data/vendor/github.com/zeromq/czmq/Findlibzmq.cmake +49 -0
- data/vendor/github.com/zeromq/czmq/Findlz4.cmake +49 -0
- data/vendor/github.com/zeromq/czmq/Findsystemd.cmake +49 -0
- data/vendor/github.com/zeromq/czmq/Finduuid.cmake +49 -0
- data/vendor/github.com/zeromq/czmq/INSTALL.cygwin +13 -0
- data/vendor/github.com/zeromq/czmq/ISSUES.cygwin +6 -0
- data/vendor/github.com/zeromq/czmq/Jenkinsfile +439 -0
- data/vendor/github.com/zeromq/czmq/LICENSE +373 -0
- data/vendor/github.com/zeromq/czmq/Makefile.am +70 -0
- data/vendor/github.com/zeromq/czmq/NEWS +823 -0
- data/vendor/github.com/zeromq/czmq/README.cygwin +23 -0
- data/vendor/github.com/zeromq/czmq/README.md +9345 -0
- data/vendor/github.com/zeromq/czmq/README.txt +512 -0
- data/vendor/github.com/zeromq/czmq/Vagrantfile +49 -0
- data/vendor/github.com/zeromq/czmq/acinclude.m4 +7 -0
- data/vendor/github.com/zeromq/czmq/api/zactor.api +77 -0
- data/vendor/github.com/zeromq/czmq/api/zargs.api +110 -0
- data/vendor/github.com/zeromq/czmq/api/zarmour.api +103 -0
- data/vendor/github.com/zeromq/czmq/api/zcert.api +128 -0
- data/vendor/github.com/zeromq/czmq/api/zcertstore.api +80 -0
- data/vendor/github.com/zeromq/czmq/api/zchunk.api +171 -0
- data/vendor/github.com/zeromq/czmq/api/zclock.api +43 -0
- data/vendor/github.com/zeromq/czmq/api/zconfig.api +205 -0
- data/vendor/github.com/zeromq/czmq/api/zdigest.api +45 -0
- data/vendor/github.com/zeromq/czmq/api/zdir.api +124 -0
- data/vendor/github.com/zeromq/czmq/api/zdir_patch.api +62 -0
- data/vendor/github.com/zeromq/czmq/api/zfile.api +157 -0
- data/vendor/github.com/zeromq/czmq/api/zframe.api +157 -0
- data/vendor/github.com/zeromq/czmq/api/zgossip_msg.api +104 -0
- data/vendor/github.com/zeromq/czmq/api/zhash.api +184 -0
- data/vendor/github.com/zeromq/czmq/api/zhashx.api +295 -0
- data/vendor/github.com/zeromq/czmq/api/ziflist.api +73 -0
- data/vendor/github.com/zeromq/czmq/api/zlist.api +158 -0
- data/vendor/github.com/zeromq/czmq/api/zlistx.api +220 -0
- data/vendor/github.com/zeromq/czmq/api/zloop.api +176 -0
- data/vendor/github.com/zeromq/czmq/api/zmsg.api +250 -0
- data/vendor/github.com/zeromq/czmq/api/zpoller.api +71 -0
- data/vendor/github.com/zeromq/czmq/api/zproc.api +247 -0
- data/vendor/github.com/zeromq/czmq/api/zsock.api +412 -0
- data/vendor/github.com/zeromq/czmq/api/zsock_option.api +847 -0
- data/vendor/github.com/zeromq/czmq/api/zstr.api +119 -0
- data/vendor/github.com/zeromq/czmq/api/zsys.api +490 -0
- data/vendor/github.com/zeromq/czmq/api/ztimerset.api +69 -0
- data/vendor/github.com/zeromq/czmq/api/ztrie.api +80 -0
- data/vendor/github.com/zeromq/czmq/api/zuuid.api +82 -0
- data/vendor/github.com/zeromq/czmq/appveyor.yml +73 -0
- data/vendor/github.com/zeromq/czmq/autogen.sh +52 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/.gitignore +8 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/CMakeLists.txt +79 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/Findczmq.cmake +47 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/README.md +130 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/android/CMakeLists.txt +79 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/android/android_toolchain.cmake +52 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/android/build.sh +68 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/build.gradle +151 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/ci_build.sh +96 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/gradle/wrapper/gradle-wrapper.properties +6 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/gradlew +164 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/gradlew.bat +90 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/.gitignore +8 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/configure.bat +93 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/platform.h +1 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Common.props +21 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DLL.props +16 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Debug.props +29 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DebugDEXE.props +21 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DebugDLL.props +20 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DebugLEXE.props +20 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DebugLIB.props +21 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DebugLTCG.props +20 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DebugSEXE.props +21 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/EXE.props +17 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/LIB.props +16 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/LTCG.props +13 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Link.props +21 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Messages.props +15 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Output.props +30 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Release.props +41 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/ReleaseDEXE.props +20 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/ReleaseDLL.props +19 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/ReleaseLEXE.props +20 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/ReleaseLIB.props +19 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/ReleaseLTCG.props +19 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/ReleaseSEXE.props +20 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Win32.props +20 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/x64.props +23 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/resource.h +14 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/resource.rc +94 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2010/build.bat +48 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2010/call_javah.bat +84 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2010/czmq.sln +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2010/libczmqjni/libczmqjni.props +69 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2010/libczmqjni/libczmqjni.vcxproj +165 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2010/libczmqjni/libczmqjni.vcxproj.filters +210 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2012/build.bat +48 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2012/call_javah.bat +84 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2012/czmq.sln +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2012/libczmqjni/libczmqjni.props +69 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2012/libczmqjni/libczmqjni.vcxproj +165 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2012/libczmqjni/libczmqjni.vcxproj.filters +210 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2013/build.bat +48 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2013/call_javah.bat +84 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2013/czmq.sln +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2013/libczmqjni/libczmqjni.props +69 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2013/libczmqjni/libczmqjni.vcxproj +165 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2013/libczmqjni/libczmqjni.vcxproj.filters +210 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2015/build.bat +48 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2015/call_javah.bat +84 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2015/czmq.sln +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2015/libczmqjni/libczmqjni.props +69 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2015/libczmqjni/libczmqjni.vcxproj +165 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2015/libczmqjni/libczmqjni.vcxproj.filters +210 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/settings.gradle +1 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zarmour.c +132 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zcert.c +188 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zcertstore.c +69 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zchunk.c +191 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zclock.c +54 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zconfig.c +252 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zdigest.c +66 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zdir.c +116 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_ZdirPatch.c +88 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zfile.c +186 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zframe.c +199 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zhash.c +174 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zhashx.c +175 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Ziflist.c +112 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zlist.c +135 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zlistx.c +189 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zloop.c +95 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zmsg.c +261 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zpoller.c +74 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zproc.c +278 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zsock.c +1310 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zstr.c +108 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zsys.c +445 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Ztimerset.c +68 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Ztrie.c +86 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zuuid.c +125 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zarmour.java +148 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zcert.java +178 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zcertstore.java +94 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zchunk.java +204 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zclock.java +67 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zconfig.java +253 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zdigest.java +78 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zdir.java +159 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/ZdirPatch.java +96 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zfile.java +217 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zframe.java +212 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zhash.java +223 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zhashx.java +248 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Ziflist.java +124 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zlist.java +171 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zlistx.java +247 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zloop.java +134 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zmsg.java +308 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zpoller.java +105 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zproc.java +331 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsock.java +1556 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zstr.java +117 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java +534 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Ztimerset.java +87 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Ztrie.java +102 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zuuid.java +127 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZarmourTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZcertTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZcertstoreTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZchunkTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZclockTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZconfigTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZdigestTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZdirPatchTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZdirTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZfileTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZframeTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZhashTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZhashxTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZiflistTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZlistTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZlistxTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZloopTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZmsgTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZpollerTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZprocTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZsockTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZstrTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZsysTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZtimersetTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZtrieTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZuuidTest.java +25 -0
- data/vendor/github.com/zeromq/czmq/bindings/lua_ffi/czmq_ffi.lua +4079 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/.gitignore +10 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/.prebuildrc +2 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/README.md +4373 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/binding.cc +8324 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/binding.gyp +49 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/binding.h +952 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/build.sh +79 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/index.js +39 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/package.json +26 -0
- data/vendor/github.com/zeromq/czmq/bindings/nodejs/test_binding.js +32 -0
- data/vendor/github.com/zeromq/czmq/bindings/python/ci_build.sh +59 -0
- data/vendor/github.com/zeromq/czmq/bindings/python/czmq/__init__.py +3 -0
- data/vendor/github.com/zeromq/czmq/bindings/python/czmq/_czmq_ctypes.py +8344 -0
- data/vendor/github.com/zeromq/czmq/bindings/python/test.py +1078 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/README.md +28 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zactor.py +78 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zargs.py +133 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zarmour.py +124 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zcert.py +132 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zcertstore.py +84 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zchunk.py +192 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zclock.py +59 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zconfig.py +211 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zdigest.py +64 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zdir.py +144 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/ZdirPatch.py +79 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zfile.py +185 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zframe.py +160 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zhash.py +197 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zhashx.py +271 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Ziflist.py +103 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zlist.py +176 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zlistx.py +235 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zloop.py +171 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zmsg.py +250 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zpoller.py +89 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zproc.py +287 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zsock.py +1283 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zstr.py +123 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zsys.py +532 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Ztimerset.py +78 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Ztrie.py +93 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zuuid.py +100 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/__init__.py +33 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/_cdefs.inc +4081 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/build.py +345 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/cdefs.py +4086 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/dlopen.py +33 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/utils.py +50 -0
- data/vendor/github.com/zeromq/czmq/bindings/python_cffi/setup.py +23 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/.gitignore +1 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/README.md +157 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/Rakefile +34 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/qml_czmq_bindings.pro +136 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZactor.cpp +88 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZactor.h +86 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZargs.cpp +121 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZargs.h +105 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZarmour.cpp +135 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZarmour.h +108 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZcert.cpp +166 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZcert.h +122 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZcertstore.cpp +95 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZcertstore.h +93 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZchunk.cpp +214 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZchunk.h +149 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZclock.cpp +67 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZclock.h +77 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZconfig.cpp +255 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZconfig.h +165 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZdigest.cpp +70 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZdigest.h +78 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZdir.cpp +158 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZdir.h +134 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZdirPatch.cpp +89 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZdirPatch.h +84 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZfile.cpp +204 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZfile.h +152 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZframe.cpp +200 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZframe.h +143 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZhash.cpp +219 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZhash.h +174 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZhashx.cpp +308 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZhashx.h +225 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZiflist.cpp +111 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZiflist.h +96 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZlist.cpp +184 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZlist.h +148 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZlistx.cpp +244 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZlistx.h +184 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZloop.cpp +177 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZloop.h +149 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZmsg.cpp +313 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZmsg.h +209 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZpoller.cpp +95 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZpoller.h +97 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZproc.cpp +296 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZproc.h +211 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZsock.cpp +1471 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZsock.h +882 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZstr.cpp +137 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZstr.h +120 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZsys.cpp +541 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZsys.h +373 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZtimerset.cpp +84 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZtimerset.h +86 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZtrie.cpp +101 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZtrie.h +95 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZuuid.cpp +116 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZuuid.h +99 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/qml_czmq_plugin.h +174 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/src/qmldir +2 -0
- data/vendor/github.com/zeromq/czmq/bindings/qml/test/tst_QmlCZMQ.qml +16 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/README.md +87 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/buildlib/buildlib.pro +36 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/common.pri +20 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/config.pri +1 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/qczmq.pro +13 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/selftest/main.cpp +57 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/selftest/selftest.pro +19 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qczmq.h +96 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qczmq.pri +81 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzactor.cpp +98 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzactor.h +61 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzargs.cpp +130 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzargs.h +72 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzarmour.cpp +162 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzarmour.h +83 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzcert.cpp +191 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzcert.h +97 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzcertstore.cpp +105 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzcertstore.h +68 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzchunk.cpp +250 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzchunk.h +124 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzclock.cpp +78 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzclock.h +52 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzconfig.cpp +292 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzconfig.h +140 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzdigest.cpp +80 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzdigest.h +53 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzdir.cpp +176 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzdir.h +109 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzdirpatch.cpp +101 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzdirpatch.h +59 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzfile.cpp +243 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzfile.h +127 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzframe.cpp +231 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzframe.h +118 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzhash.cpp +250 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzhash.h +149 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzhashx.cpp +350 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzhashx.h +200 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qziflist.cpp +133 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qziflist.h +71 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzlist.cpp +220 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzlist.h +123 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzlistx.cpp +296 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzlistx.h +159 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzloop.cpp +211 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzloop.h +124 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzmsg.cpp +354 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzmsg.h +184 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzpoller.cpp +100 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzpoller.h +67 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzproc.cpp +365 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzproc.h +186 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzsock.cpp +1719 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzsock.h +815 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzstr.cpp +128 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzstr.h +78 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzsys.cpp +600 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzsys.h +321 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qztimerset.cpp +98 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qztimerset.h +61 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qztrie.cpp +117 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qztrie.h +70 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzuuid.cpp +135 -0
- data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzuuid.h +74 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/Rakefile +8 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi.rb +875 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/version.rb +15 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zactor.rb +219 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zargs.rb +259 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zarmour.rb +286 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zcert.rb +304 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zcertstore.rb +224 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zchunk.rb +388 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zclock.rb +140 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zconfig.rb +462 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zdigest.rb +156 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zdir.rb +283 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zdir_patch.rb +194 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zfile.rb +361 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zframe.rb +360 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zhash.rb +386 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zhashx.rb +617 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/ziflist.rb +219 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zlist.rb +365 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zlistx.rb +478 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zloop.rb +396 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zmsg.rb +515 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zpoller.rb +194 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zproc.rb +497 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zsock.rb +4673 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zstr.rb +242 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zsys.rb +836 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/ztimerset.rb +203 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/ztrie.rb +221 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zuuid.rb +227 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/spec/ffi_spec.rb +15 -0
- data/vendor/github.com/zeromq/czmq/bindings/ruby/spec/spec_helper.rb +8 -0
- data/vendor/github.com/zeromq/czmq/builds/android/android_build_helper.sh +298 -0
- data/vendor/github.com/zeromq/czmq/builds/android/build.sh +94 -0
- data/vendor/github.com/zeromq/czmq/builds/android/ci_build.sh +41 -0
- data/vendor/github.com/zeromq/czmq/builds/check_zproject/ci_build.sh +52 -0
- data/vendor/github.com/zeromq/czmq/builds/check_zproto/ci_build.sh +23 -0
- data/vendor/github.com/zeromq/czmq/builds/cmake/ci_build.sh +93 -0
- data/vendor/github.com/zeromq/czmq/builds/cygwin/Makefile.cygwin +32 -0
- data/vendor/github.com/zeromq/czmq/builds/docs/ci_build.sh +24 -0
- data/vendor/github.com/zeromq/czmq/builds/gyp/.gitignore +5 -0
- data/vendor/github.com/zeromq/czmq/builds/gyp/README.md +33 -0
- data/vendor/github.com/zeromq/czmq/builds/gyp/platform.h +46 -0
- data/vendor/github.com/zeromq/czmq/builds/gyp/project.gyp +195 -0
- data/vendor/github.com/zeromq/czmq/builds/mingw32/Makefile.mingw32 +33 -0
- data/vendor/github.com/zeromq/czmq/builds/mingw32/platform.h +0 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/.gitignore +8 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/configure.bat +93 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/nuget/package.bat +14 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/nuget/package.nuspec +92 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/nuget/package.targets +128 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/nuget/package.xml +29 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/platform.h +1 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Common.props +21 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DLL.props +16 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Debug.props +29 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DebugDEXE.props +21 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DebugDLL.props +20 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DebugLEXE.props +20 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DebugLIB.props +21 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DebugLTCG.props +20 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DebugSEXE.props +21 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/EXE.props +17 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/LIB.props +16 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/LTCG.props +13 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Link.props +21 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Messages.props +15 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Output.props +30 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Release.props +41 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/ReleaseDEXE.props +20 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/ReleaseDLL.props +19 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/ReleaseLEXE.props +20 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/ReleaseLIB.props +19 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/ReleaseLTCG.props +19 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/ReleaseSEXE.props +20 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Win32.props +20 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/properties/x64.props +23 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/resource.h +14 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/resource.rc +94 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2008/czmq/czmq.sln +65 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2008/czmq/czmq.vcproj +1411 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/.gitignore +1 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/build.bat +129 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/czmq.import.props +59 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/czmq.sln +81 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/czmq_selftest/czmq_selftest.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/czmq_selftest/czmq_selftest.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/libczmq/libczmq.import.xml +29 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/libczmq/libczmq.props +81 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/libczmq/libczmq.vcxproj +215 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/libczmq/libczmq.vcxproj.filters +203 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/test_randof/test_randof.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/test_randof/test_randof.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/zmakecert/zmakecert.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/zmakecert/zmakecert.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/zsp/zsp.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/zsp/zsp.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/.gitignore +1 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/build.bat +129 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/czmq.import.props +59 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/czmq.sln +81 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/czmq_selftest/czmq_selftest.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/czmq_selftest/czmq_selftest.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/libczmq/libczmq.import.xml +29 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/libczmq/libczmq.props +81 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/libczmq/libczmq.vcxproj +215 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/libczmq/libczmq.vcxproj.filters +203 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/test_randof/test_randof.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/test_randof/test_randof.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/zmakecert/zmakecert.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/zmakecert/zmakecert.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/zsp/zsp.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/zsp/zsp.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/build.bat +129 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/czmq.import.props +59 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/czmq.sln +81 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/czmq_selftest/czmq_selftest.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/czmq_selftest/czmq_selftest.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/libczmq/libczmq.import.xml +29 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/libczmq/libczmq.props +81 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/libczmq/libczmq.vcxproj +215 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/libczmq/libczmq.vcxproj.filters +203 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/test_randof/test_randof.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/test_randof/test_randof.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/zmakecert/zmakecert.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/zmakecert/zmakecert.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/zsp/zsp.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/zsp/zsp.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/build.bat +129 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/czmq.import.props +59 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/czmq.sln +81 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/czmq_selftest/czmq_selftest.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/czmq_selftest/czmq_selftest.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/libczmq/libczmq.import.xml +29 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/libczmq/libczmq.props +81 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/libczmq/libczmq.vcxproj +215 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/libczmq/libczmq.vcxproj.filters +203 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/test_randof/test_randof.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/test_randof/test_randof.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/zmakecert/zmakecert.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/zmakecert/zmakecert.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/zsp/zsp.props +75 -0
- data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/zsp/zsp.vcxproj +146 -0
- data/vendor/github.com/zeromq/czmq/builds/nuget/czmq.autobuild +49 -0
- data/vendor/github.com/zeromq/czmq/builds/nuget/readme.nuget +18 -0
- data/vendor/github.com/zeromq/czmq/builds/rpi/.gitignore +8 -0
- data/vendor/github.com/zeromq/czmq/builds/rpi/README.md +62 -0
- data/vendor/github.com/zeromq/czmq/builds/rpi/build.sh +142 -0
- data/vendor/github.com/zeromq/czmq/builds/rpi/build_image.sh +32 -0
- data/vendor/github.com/zeromq/czmq/builds/rpi/prepare_img.sh +111 -0
- data/vendor/github.com/zeromq/czmq/builds/stable_zmq/ci_build.sh +62 -0
- data/vendor/github.com/zeromq/czmq/builds/valgrind/ci_build.sh +43 -0
- data/vendor/github.com/zeromq/czmq/ci_build.sh +317 -0
- data/vendor/github.com/zeromq/czmq/ci_deploy.sh +29 -0
- data/vendor/github.com/zeromq/czmq/ci_deploy_obs.sh +23 -0
- data/vendor/github.com/zeromq/czmq/configure.ac +856 -0
- data/vendor/github.com/zeromq/czmq/doc/.gitignore +91 -0
- data/vendor/github.com/zeromq/czmq/doc/Makefile.am +222 -0
- data/vendor/github.com/zeromq/czmq/doc/asciidoc.conf +64 -0
- data/vendor/github.com/zeromq/czmq/doc/czmq.adoc +51 -0
- data/vendor/github.com/zeromq/czmq/doc/czmq.txt +380 -0
- data/vendor/github.com/zeromq/czmq/doc/mkman +217 -0
- data/vendor/github.com/zeromq/czmq/doc/mkmans +15 -0
- data/vendor/github.com/zeromq/czmq/doc/wdput +43 -0
- data/vendor/github.com/zeromq/czmq/examples/security/LICENSE +18 -0
- data/vendor/github.com/zeromq/czmq/examples/security/README.txt +9 -0
- data/vendor/github.com/zeromq/czmq/examples/security/grasslands.c +32 -0
- data/vendor/github.com/zeromq/czmq/examples/security/hello.c +13 -0
- data/vendor/github.com/zeromq/czmq/examples/security/ironhouse.c +64 -0
- data/vendor/github.com/zeromq/czmq/examples/security/ironhouse2.c +123 -0
- data/vendor/github.com/zeromq/czmq/examples/security/ironhouse2_v2.c +107 -0
- data/vendor/github.com/zeromq/czmq/examples/security/passwords +2 -0
- data/vendor/github.com/zeromq/czmq/examples/security/stonehouse.c +59 -0
- data/vendor/github.com/zeromq/czmq/examples/security/strawhouse.c +49 -0
- data/vendor/github.com/zeromq/czmq/examples/security/woodhouse.c +47 -0
- data/vendor/github.com/zeromq/czmq/images/README_1.png +0 -0
- data/vendor/github.com/zeromq/czmq/include/.gitignore +1 -0
- data/vendor/github.com/zeromq/czmq/include/czmq.h +39 -0
- data/vendor/github.com/zeromq/czmq/include/czmq_library.h +190 -0
- data/vendor/github.com/zeromq/czmq/include/czmq_prelude.h +735 -0
- data/vendor/github.com/zeromq/czmq/include/test_zgossip.h +44 -0
- data/vendor/github.com/zeromq/czmq/include/zactor.h +94 -0
- data/vendor/github.com/zeromq/czmq/include/zargs.h +134 -0
- data/vendor/github.com/zeromq/czmq/include/zarmour.h +114 -0
- data/vendor/github.com/zeromq/czmq/include/zauth.h +100 -0
- data/vendor/github.com/zeromq/czmq/include/zbeacon.h +86 -0
- data/vendor/github.com/zeromq/czmq/include/zcert.h +133 -0
- data/vendor/github.com/zeromq/czmq/include/zcertstore.h +101 -0
- data/vendor/github.com/zeromq/czmq/include/zchunk.h +163 -0
- data/vendor/github.com/zeromq/czmq/include/zclock.h +73 -0
- data/vendor/github.com/zeromq/czmq/include/zconfig.h +199 -0
- data/vendor/github.com/zeromq/czmq/include/zdigest.h +65 -0
- data/vendor/github.com/zeromq/czmq/include/zdir.h +149 -0
- data/vendor/github.com/zeromq/czmq/include/zdir_patch.h +82 -0
- data/vendor/github.com/zeromq/czmq/include/zfile.h +185 -0
- data/vendor/github.com/zeromq/czmq/include/zframe.h +177 -0
- data/vendor/github.com/zeromq/czmq/include/zgossip.h +95 -0
- data/vendor/github.com/zeromq/czmq/include/zhash.h +183 -0
- data/vendor/github.com/zeromq/czmq/include/zhashx.h +279 -0
- data/vendor/github.com/zeromq/czmq/include/ziflist.h +98 -0
- data/vendor/github.com/zeromq/czmq/include/zlist.h +158 -0
- data/vendor/github.com/zeromq/czmq/include/zlistx.h +205 -0
- data/vendor/github.com/zeromq/czmq/include/zloop.h +163 -0
- data/vendor/github.com/zeromq/czmq/include/zmonitor.h +73 -0
- data/vendor/github.com/zeromq/czmq/include/zmsg.h +280 -0
- data/vendor/github.com/zeromq/czmq/include/zpoller.h +87 -0
- data/vendor/github.com/zeromq/czmq/include/zproc.h +270 -0
- data/vendor/github.com/zeromq/czmq/include/zproxy.h +111 -0
- data/vendor/github.com/zeromq/czmq/include/zrex.h +82 -0
- data/vendor/github.com/zeromq/czmq/include/zsock.h +1209 -0
- data/vendor/github.com/zeromq/czmq/include/zstr.h +135 -0
- data/vendor/github.com/zeromq/czmq/include/zsys.h +439 -0
- data/vendor/github.com/zeromq/czmq/include/ztimerset.h +90 -0
- data/vendor/github.com/zeromq/czmq/include/ztrie.h +106 -0
- data/vendor/github.com/zeromq/czmq/include/zuuid.h +96 -0
- data/vendor/github.com/zeromq/czmq/issues/README.md +6 -0
- data/vendor/github.com/zeromq/czmq/issues/c +520 -0
- data/vendor/github.com/zeromq/czmq/issues/issue-407.c +146 -0
- data/vendor/github.com/zeromq/czmq/license.xml +9 -0
- data/vendor/github.com/zeromq/czmq/mkdoc +7 -0
- data/vendor/github.com/zeromq/czmq/model/chkopts.pl +47 -0
- data/vendor/github.com/zeromq/czmq/model/rename_class +42 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/changelog +5 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/compat +1 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/control +86 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/copyright +13 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/czmq.dsc.obs +20 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/czmq.install +2 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/czmq.manpages +1 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/format +1 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/libczmq-dev.install +4 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/libczmq-dev.manpages +2 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/libczmq4.install +1 -0
- data/vendor/github.com/zeromq/czmq/packaging/debian/rules +96 -0
- data/vendor/github.com/zeromq/czmq/packaging/dist/gitlog2changelog.py +125 -0
- data/vendor/github.com/zeromq/czmq/packaging/obs/_service +91 -0
- data/vendor/github.com/zeromq/czmq/packaging/redhat/czmq.spec +202 -0
- data/vendor/github.com/zeromq/czmq/project.gyp +121 -0
- data/vendor/github.com/zeromq/czmq/project.xml +99 -0
- data/vendor/github.com/zeromq/czmq/setup.py +9 -0
- data/vendor/github.com/zeromq/czmq/src/.gitignore +20 -0
- data/vendor/github.com/zeromq/czmq/src/.valgrind.supp +33 -0
- data/vendor/github.com/zeromq/czmq/src/CMakeLists-local.txt +22 -0
- data/vendor/github.com/zeromq/czmq/src/Makemodule-local.am +15 -0
- data/vendor/github.com/zeromq/czmq/src/Makemodule.am +353 -0
- data/vendor/github.com/zeromq/czmq/src/czmq_classes.h +388 -0
- data/vendor/github.com/zeromq/czmq/src/czmq_private_selftest.c +40 -0
- data/vendor/github.com/zeromq/czmq/src/czmq_selftest.c +220 -0
- data/vendor/github.com/zeromq/czmq/src/foreign/sha1/sha1.h +76 -0
- data/vendor/github.com/zeromq/czmq/src/foreign/sha1/sha1.inc_c +335 -0
- data/vendor/github.com/zeromq/czmq/src/foreign/slre/readme.txt +83 -0
- data/vendor/github.com/zeromq/czmq/src/foreign/slre/slre.h +92 -0
- data/vendor/github.com/zeromq/czmq/src/foreign/slre/slre.inc_c +660 -0
- data/vendor/github.com/zeromq/czmq/src/libczmq.pc.in +24 -0
- data/vendor/github.com/zeromq/czmq/src/python_cffi.inc +17 -0
- data/vendor/github.com/zeromq/czmq/src/selftest-ro/.gitkeep +0 -0
- data/vendor/github.com/zeromq/czmq/src/selftest.cfg +5 -0
- data/vendor/github.com/zeromq/czmq/src/sockopts.gsl +36 -0
- data/vendor/github.com/zeromq/czmq/src/sockopts.xml +193 -0
- data/vendor/github.com/zeromq/czmq/src/test_randof.c +182 -0
- data/vendor/github.com/zeromq/czmq/src/test_zgossip.c +188 -0
- data/vendor/github.com/zeromq/czmq/src/valgrind.supp +14 -0
- data/vendor/github.com/zeromq/czmq/src/zactor.c +338 -0
- data/vendor/github.com/zeromq/czmq/src/zargs.c +289 -0
- data/vendor/github.com/zeromq/czmq/src/zarmour.c +941 -0
- data/vendor/github.com/zeromq/czmq/src/zauth.c +821 -0
- data/vendor/github.com/zeromq/czmq/src/zbeacon.c +651 -0
- data/vendor/github.com/zeromq/czmq/src/zcert.c +557 -0
- data/vendor/github.com/zeromq/czmq/src/zcertstore.c +407 -0
- data/vendor/github.com/zeromq/czmq/src/zchunk.c +609 -0
- data/vendor/github.com/zeromq/czmq/src/zclock.c +237 -0
- data/vendor/github.com/zeromq/czmq/src/zconfig.c +1369 -0
- data/vendor/github.com/zeromq/czmq/src/zdigest.c +163 -0
- data/vendor/github.com/zeromq/czmq/src/zdir.c +1138 -0
- data/vendor/github.com/zeromq/czmq/src/zdir_patch.c +227 -0
- data/vendor/github.com/zeromq/czmq/src/zfile.c +920 -0
- data/vendor/github.com/zeromq/czmq/src/zframe.c +756 -0
- data/vendor/github.com/zeromq/czmq/src/zgossip.c +689 -0
- data/vendor/github.com/zeromq/czmq/src/zgossip.xml +57 -0
- data/vendor/github.com/zeromq/czmq/src/zgossip_engine.inc +1008 -0
- data/vendor/github.com/zeromq/czmq/src/zgossip_msg.bnf +43 -0
- data/vendor/github.com/zeromq/czmq/src/zgossip_msg.c +688 -0
- data/vendor/github.com/zeromq/czmq/src/zgossip_msg.h +127 -0
- data/vendor/github.com/zeromq/czmq/src/zgossip_msg.xml +46 -0
- data/vendor/github.com/zeromq/czmq/src/zhash.c +956 -0
- data/vendor/github.com/zeromq/czmq/src/zhash_primes.inc +329 -0
- data/vendor/github.com/zeromq/czmq/src/zhashx.c +1369 -0
- data/vendor/github.com/zeromq/czmq/src/ziflist.c +517 -0
- data/vendor/github.com/zeromq/czmq/src/zlist.c +634 -0
- data/vendor/github.com/zeromq/czmq/src/zlistx.c +753 -0
- data/vendor/github.com/zeromq/czmq/src/zloop.c +1000 -0
- data/vendor/github.com/zeromq/czmq/src/zmakecert.c +64 -0
- data/vendor/github.com/zeromq/czmq/src/zmonitor.c +447 -0
- data/vendor/github.com/zeromq/czmq/src/zmsg.c +1258 -0
- data/vendor/github.com/zeromq/czmq/src/zpoller.c +397 -0
- data/vendor/github.com/zeromq/czmq/src/zproc.c +1160 -0
- data/vendor/github.com/zeromq/czmq/src/zproxy.c +791 -0
- data/vendor/github.com/zeromq/czmq/src/zrex.c +310 -0
- data/vendor/github.com/zeromq/czmq/src/zsock.c +2207 -0
- data/vendor/github.com/zeromq/czmq/src/zsock_option.gsl +404 -0
- data/vendor/github.com/zeromq/czmq/src/zsock_option.inc +3946 -0
- data/vendor/github.com/zeromq/czmq/src/zsp.c +118 -0
- data/vendor/github.com/zeromq/czmq/src/zstr.c +548 -0
- data/vendor/github.com/zeromq/czmq/src/zsys.c +2225 -0
- data/vendor/github.com/zeromq/czmq/src/ztimerset.c +227 -0
- data/vendor/github.com/zeromq/czmq/src/ztrie.c +809 -0
- data/vendor/github.com/zeromq/czmq/src/zuuid.c +344 -0
- metadata +780 -0
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/* =========================================================================
|
|
2
|
+
ztimerset - timer set
|
|
3
|
+
|
|
4
|
+
Copyright (c) the Contributors as noted in the AUTHORS file.
|
|
5
|
+
This file is part of CZMQ, the high-level C binding for 0MQ:
|
|
6
|
+
http://czmq.zeromq.org.
|
|
7
|
+
|
|
8
|
+
This Source Code Form is subject to the terms of the Mozilla Public
|
|
9
|
+
License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
10
|
+
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
11
|
+
=========================================================================
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/*
|
|
15
|
+
@header
|
|
16
|
+
ztimerset - timer set
|
|
17
|
+
@discuss
|
|
18
|
+
@end
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
#include "czmq_classes.h"
|
|
22
|
+
|
|
23
|
+
// Structure of our class
|
|
24
|
+
|
|
25
|
+
struct _ztimerset_t {
|
|
26
|
+
void* zmq_timers;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
// --------------------------------------------------------------------------
|
|
31
|
+
// Create a new ztimerset
|
|
32
|
+
|
|
33
|
+
ztimerset_t *
|
|
34
|
+
ztimerset_new (void)
|
|
35
|
+
{
|
|
36
|
+
#ifdef ZMQ_HAVE_TIMERS
|
|
37
|
+
ztimerset_t *self = (ztimerset_t *) zmalloc (sizeof (ztimerset_t));
|
|
38
|
+
assert (self);
|
|
39
|
+
|
|
40
|
+
self->zmq_timers = zmq_timers_new ();
|
|
41
|
+
assert (self->zmq_timers);
|
|
42
|
+
|
|
43
|
+
return self;
|
|
44
|
+
#else
|
|
45
|
+
return NULL;
|
|
46
|
+
#endif
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
// --------------------------------------------------------------------------
|
|
51
|
+
// Destroy the ztimerset
|
|
52
|
+
|
|
53
|
+
void
|
|
54
|
+
ztimerset_destroy (ztimerset_t **self_p)
|
|
55
|
+
{
|
|
56
|
+
#ifdef ZMQ_HAVE_TIMERS
|
|
57
|
+
assert (self_p);
|
|
58
|
+
if (*self_p) {
|
|
59
|
+
ztimerset_t *self = *self_p;
|
|
60
|
+
zmq_timers_destroy (&self->zmq_timers);
|
|
61
|
+
freen (self);
|
|
62
|
+
*self_p = NULL;
|
|
63
|
+
}
|
|
64
|
+
#endif
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
// --------------------------------------------------------------------------
|
|
69
|
+
// Add a timer to the set. Returns timer id if OK, -1 on failure.
|
|
70
|
+
int
|
|
71
|
+
ztimerset_add (ztimerset_t *self, size_t interval, ztimerset_fn handler, void *arg)
|
|
72
|
+
{
|
|
73
|
+
#ifdef ZMQ_HAVE_TIMERS
|
|
74
|
+
return zmq_timers_add (self->zmq_timers, interval, handler, arg);
|
|
75
|
+
#else
|
|
76
|
+
return -1;
|
|
77
|
+
#endif
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
// --------------------------------------------------------------------------
|
|
82
|
+
// Cancel a timer. Returns 0 if OK, -1 on failure.
|
|
83
|
+
int
|
|
84
|
+
ztimerset_cancel (ztimerset_t *self, int timer_id)
|
|
85
|
+
{
|
|
86
|
+
#ifdef ZMQ_HAVE_TIMERS
|
|
87
|
+
return zmq_timers_cancel (self->zmq_timers, timer_id);
|
|
88
|
+
#else
|
|
89
|
+
return -1;
|
|
90
|
+
#endif
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
// --------------------------------------------------------------------------
|
|
95
|
+
// Set timer interval. Returns 0 if OK, -1 on failure.
|
|
96
|
+
// This method is slow, canceling the timer and adding a new one yield better performance.
|
|
97
|
+
int
|
|
98
|
+
ztimerset_set_interval (ztimerset_t *self, int timer_id, size_t interval)
|
|
99
|
+
{
|
|
100
|
+
#ifdef ZMQ_HAVE_TIMERS
|
|
101
|
+
return zmq_timers_set_interval (self->zmq_timers, timer_id, interval);
|
|
102
|
+
#else
|
|
103
|
+
return -1;
|
|
104
|
+
#endif
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
// --------------------------------------------------------------------------
|
|
109
|
+
// Reset timer to start interval counting from current time. Returns 0 if OK, -1 on failure.
|
|
110
|
+
// This method is slow, canceling the timer and adding a new one yield better performance.
|
|
111
|
+
int
|
|
112
|
+
ztimerset_reset (ztimerset_t *self, int timer_id)
|
|
113
|
+
{
|
|
114
|
+
#ifdef ZMQ_HAVE_TIMERS
|
|
115
|
+
return zmq_timers_reset (self->zmq_timers, timer_id);
|
|
116
|
+
#else
|
|
117
|
+
return -1;
|
|
118
|
+
#endif
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
// --------------------------------------------------------------------------
|
|
123
|
+
// Return the time until the next interval.
|
|
124
|
+
// Should be used as timeout parameter for the zpoller wait method.
|
|
125
|
+
// The timeout is in msec.
|
|
126
|
+
int
|
|
127
|
+
ztimerset_timeout (ztimerset_t *self)
|
|
128
|
+
{
|
|
129
|
+
#ifdef ZMQ_HAVE_TIMERS
|
|
130
|
+
return zmq_timers_timeout (self->zmq_timers);
|
|
131
|
+
#else
|
|
132
|
+
return -1;
|
|
133
|
+
#endif
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
// --------------------------------------------------------------------------
|
|
138
|
+
// Invoke callback function of all timers which their interval has elapsed.
|
|
139
|
+
// Should be call after zpoller wait method.
|
|
140
|
+
// Returns 0 if OK, -1 on failure.
|
|
141
|
+
int
|
|
142
|
+
ztimerset_execute (ztimerset_t *self)
|
|
143
|
+
{
|
|
144
|
+
#ifdef ZMQ_HAVE_TIMERS
|
|
145
|
+
return zmq_timers_execute (self->zmq_timers);
|
|
146
|
+
#else
|
|
147
|
+
return -1;
|
|
148
|
+
#endif
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
// --------------------------------------------------------------------------
|
|
153
|
+
// Self test of this class
|
|
154
|
+
|
|
155
|
+
// Avoid -Werror=unused-function
|
|
156
|
+
#ifdef ZMQ_HAVE_TIMERS
|
|
157
|
+
static void
|
|
158
|
+
handler (int timer_id, void *arg)
|
|
159
|
+
{
|
|
160
|
+
*((bool*)arg) = true;
|
|
161
|
+
}
|
|
162
|
+
#endif
|
|
163
|
+
|
|
164
|
+
void
|
|
165
|
+
ztimerset_test (bool verbose)
|
|
166
|
+
{
|
|
167
|
+
#ifdef ZMQ_HAVE_TIMERS
|
|
168
|
+
printf (" * ztimerset: ");
|
|
169
|
+
|
|
170
|
+
// @selftest
|
|
171
|
+
// Simple create/destroy test
|
|
172
|
+
ztimerset_t *self = ztimerset_new ();
|
|
173
|
+
assert (self);
|
|
174
|
+
|
|
175
|
+
// Adding timer
|
|
176
|
+
bool timer_invoked = false;
|
|
177
|
+
int timer_id = ztimerset_add (self, 100, handler, &timer_invoked);
|
|
178
|
+
assert (timer_id != -1);
|
|
179
|
+
int rc = ztimerset_execute (self);
|
|
180
|
+
assert (rc == 0);
|
|
181
|
+
assert (!timer_invoked);
|
|
182
|
+
int timeout = ztimerset_timeout (self);
|
|
183
|
+
assert (timeout > 0);
|
|
184
|
+
zclock_sleep (timeout);
|
|
185
|
+
rc = ztimerset_execute (self);
|
|
186
|
+
assert (rc == 0);
|
|
187
|
+
assert (timer_invoked);
|
|
188
|
+
|
|
189
|
+
// Cancel timer
|
|
190
|
+
timeout = ztimerset_timeout (self);
|
|
191
|
+
assert (timeout > 0);
|
|
192
|
+
rc = ztimerset_cancel (self, timer_id);
|
|
193
|
+
assert (rc == 0);
|
|
194
|
+
timeout = ztimerset_timeout (self);
|
|
195
|
+
assert(timeout == -1);
|
|
196
|
+
|
|
197
|
+
// Reset a timer
|
|
198
|
+
timer_id = ztimerset_add (self, 100, handler, &timer_invoked);
|
|
199
|
+
assert (timer_id != -1);
|
|
200
|
+
timeout = ztimerset_timeout (self);
|
|
201
|
+
assert (timeout > 0);
|
|
202
|
+
zclock_sleep (timeout / 2);
|
|
203
|
+
timeout = ztimerset_timeout (self);
|
|
204
|
+
rc = ztimerset_reset(self, timer_id);
|
|
205
|
+
assert (rc == 0);
|
|
206
|
+
int timeout2 = ztimerset_timeout (self);
|
|
207
|
+
assert (timeout2 > timeout);
|
|
208
|
+
rc = ztimerset_cancel (self, timer_id);
|
|
209
|
+
assert (rc == 0);
|
|
210
|
+
|
|
211
|
+
// Set interval
|
|
212
|
+
timer_id = ztimerset_add (self, 100, handler, &timer_invoked);
|
|
213
|
+
assert (timer_id != -1);
|
|
214
|
+
timeout = ztimerset_timeout (self);
|
|
215
|
+
rc = ztimerset_set_interval(self, timer_id, 200);
|
|
216
|
+
timeout2 = ztimerset_timeout (self);
|
|
217
|
+
assert (timeout2 > timeout);
|
|
218
|
+
|
|
219
|
+
ztimerset_destroy (&self);
|
|
220
|
+
|
|
221
|
+
#if defined (__WINDOWS__)
|
|
222
|
+
zsys_shutdown();
|
|
223
|
+
#endif
|
|
224
|
+
// @end
|
|
225
|
+
printf ("OK\n");
|
|
226
|
+
#endif
|
|
227
|
+
}
|
|
@@ -0,0 +1,809 @@
|
|
|
1
|
+
/* =========================================================================
|
|
2
|
+
ztrie - simple trie for tokenizable strings
|
|
3
|
+
|
|
4
|
+
Copyright (c) the Contributors as noted in the AUTHORS file.
|
|
5
|
+
This file is part of CZMQ, the high-level C binding for 0MQ:
|
|
6
|
+
http://czmq.zeromq.org.
|
|
7
|
+
|
|
8
|
+
This Source Code Form is subject to the terms of the Mozilla Public
|
|
9
|
+
License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
10
|
+
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
11
|
+
=========================================================================
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/*
|
|
15
|
+
@header
|
|
16
|
+
This is a variant of a trie or prefix tree where all the descendants of a
|
|
17
|
+
node have a common prefix of the string associated with that node. This
|
|
18
|
+
implementation is specialized for strings that can be tokenized by a delimiter
|
|
19
|
+
like a URL, URI or URN. Routes in the tree can be matched by regular expressions
|
|
20
|
+
and by using capturing groups parts of a matched route can be easily obtained.
|
|
21
|
+
@discuss
|
|
22
|
+
Note that the performance for pure string based matching is okay but on short
|
|
23
|
+
strings zhash and zhashx are 3-4 times faster.
|
|
24
|
+
@end
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
#include "czmq_classes.h"
|
|
28
|
+
|
|
29
|
+
#define MODE_INSERT 0
|
|
30
|
+
#define MODE_LOOKUP 1
|
|
31
|
+
#define MODE_MATCH 2
|
|
32
|
+
|
|
33
|
+
#define NODE_TYPE_STRING 0 // Node with string token
|
|
34
|
+
#define NODE_TYPE_REGEX 1 // Node with regex token
|
|
35
|
+
#define NODE_TYPE_PARAM 2 // Node with named regex token and capturing group(s)
|
|
36
|
+
#define NODE_TYPE_ASTERISK 3 // Node with an asterisk, to match routes of variable length
|
|
37
|
+
|
|
38
|
+
#define MIN_LEN(x,y) \
|
|
39
|
+
y + ((x - y) & ((x - y) >>(sizeof(int) * CHAR_BIT - 1)))
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
// TODO: Move to a more appropriate location:
|
|
43
|
+
static char *
|
|
44
|
+
s_strndup (const char *s, size_t size) {
|
|
45
|
+
char *dup;
|
|
46
|
+
char *end = (char *) memchr (s, '\0', size);
|
|
47
|
+
if (end)
|
|
48
|
+
size = end - 1 - s; // -1 to get the last char before '\0'
|
|
49
|
+
dup = (char *) zmalloc (sizeof (char) * size + 1); // +1 for trailing '\0'
|
|
50
|
+
if (size) {
|
|
51
|
+
memcpy (dup, s, size);
|
|
52
|
+
dup [size] = '\0';
|
|
53
|
+
}
|
|
54
|
+
return dup;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Trie node, used internally only
|
|
58
|
+
|
|
59
|
+
typedef struct _ztrie_node_t {
|
|
60
|
+
char *token; // Part of a path between to delemiters e.g. '/{token}/'
|
|
61
|
+
int token_type; // Type of the token, string, regex, asterisk
|
|
62
|
+
int token_len; // Number of characters of the token
|
|
63
|
+
size_t path_len; // Length of the path/route including this token
|
|
64
|
+
bool endpoint; // Has a path been added that routes to this node?
|
|
65
|
+
size_t parameter_count; // How many regex parameters does this token contain?
|
|
66
|
+
char **parameter_names; // Names of the regex parameters for easy access at matching time
|
|
67
|
+
char **parameter_values; // Values of the parameters
|
|
68
|
+
char *asterisk_match; // Matched asterisk route
|
|
69
|
+
zrex_t *regex; // Compiled regex
|
|
70
|
+
void *data; // Custom arbitrary data assoziated with a route
|
|
71
|
+
ztrie_destroy_data_fn *destroy_data_fn; // Callback to destroy custom data
|
|
72
|
+
zlistx_t *children; // List of all children to this route
|
|
73
|
+
struct _ztrie_node_t *parent; // Parent of this node
|
|
74
|
+
} ztrie_node_t;
|
|
75
|
+
|
|
76
|
+
// --------------------------------------------------------------------------
|
|
77
|
+
// Structure of our class
|
|
78
|
+
|
|
79
|
+
struct _ztrie_t {
|
|
80
|
+
char delimiter; // Character that seperates the tokens of a route
|
|
81
|
+
ztrie_node_t *root; // Root node of this tree
|
|
82
|
+
ztrie_node_t *match; // Last match made by ztrie_matches
|
|
83
|
+
zlistx_t *params; // List of regex parameters found during parsing
|
|
84
|
+
// The list is kept globally to optimize performance.
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
// Internal helper functions
|
|
88
|
+
|
|
89
|
+
static int
|
|
90
|
+
s_ztrie_node_compare (const void *item1, const void *item2) {
|
|
91
|
+
assert (item1);
|
|
92
|
+
assert (item2);
|
|
93
|
+
ztrie_node_t *node1 = (ztrie_node_t *) item1;
|
|
94
|
+
ztrie_node_t *node2 = (ztrie_node_t *) item2;
|
|
95
|
+
|
|
96
|
+
int same = node1->token_type - node2->token_type;
|
|
97
|
+
if (same == 0) {
|
|
98
|
+
if (*node1->token == *node2->token // This achieves a small performance boost
|
|
99
|
+
&& node1->token_len == node2->token_len
|
|
100
|
+
&& strncmp (node1->token, node2->token, MIN_LEN (node1->token_len, node2->token_len)) == 0)
|
|
101
|
+
return 0;
|
|
102
|
+
else
|
|
103
|
+
return -1;
|
|
104
|
+
}
|
|
105
|
+
else
|
|
106
|
+
return same;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
// Create a new ztrie_node. If parent is not NULL the child will add itself
|
|
111
|
+
// to the parents children.
|
|
112
|
+
|
|
113
|
+
static ztrie_node_t *
|
|
114
|
+
s_ztrie_node_new (ztrie_node_t *parent, char *token, int token_len, zlistx_t *param_keys, int token_type)
|
|
115
|
+
{
|
|
116
|
+
ztrie_node_t *self = (ztrie_node_t *) zmalloc (sizeof (ztrie_node_t));
|
|
117
|
+
assert (self);
|
|
118
|
+
|
|
119
|
+
// Initialize properties
|
|
120
|
+
self->token = s_strndup (token, token_len);
|
|
121
|
+
self->token_type = token_type;
|
|
122
|
+
self->token_len = token_len;
|
|
123
|
+
self->endpoint = false;
|
|
124
|
+
self->parameter_count = 0;
|
|
125
|
+
self->parameter_names = NULL;
|
|
126
|
+
self->parameter_values = NULL;
|
|
127
|
+
if (param_keys && zlistx_size (param_keys) > 0) {
|
|
128
|
+
self->parameter_count = zlistx_size (param_keys);
|
|
129
|
+
self->parameter_names = (char **) malloc (sizeof (char *) * self->parameter_count);
|
|
130
|
+
self->parameter_values = (char **) malloc (sizeof (char *) * self->parameter_count);
|
|
131
|
+
char *key = (char *) zlistx_first (param_keys);
|
|
132
|
+
size_t index;
|
|
133
|
+
for (index = 0; index < zlistx_size (param_keys); index++) {
|
|
134
|
+
self->parameter_names [index] = key;
|
|
135
|
+
self->parameter_values [index] = NULL;
|
|
136
|
+
key = (char *) zlistx_next (param_keys);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (self->token_type == NODE_TYPE_REGEX || self->token_type == NODE_TYPE_PARAM)
|
|
140
|
+
self->regex = zrex_new (self->token);
|
|
141
|
+
self->data = NULL;
|
|
142
|
+
// Initialize relationships
|
|
143
|
+
self->parent = parent;
|
|
144
|
+
if (self->parent) {
|
|
145
|
+
zlistx_add_end (self->parent->children, self);
|
|
146
|
+
// Sort regexes to the end to avoid conlficts
|
|
147
|
+
zlistx_sort (self->parent->children);
|
|
148
|
+
}
|
|
149
|
+
size_t parent_path_len = self->parent? self->parent->path_len: 0;
|
|
150
|
+
self->path_len = parent_path_len + strlen (self->token) + 1; // +1 path delimiter
|
|
151
|
+
self->children = zlistx_new ();
|
|
152
|
+
zlistx_set_comparator (self->children, s_ztrie_node_compare);
|
|
153
|
+
|
|
154
|
+
return self;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
// Destroy the ztrie_node.
|
|
159
|
+
|
|
160
|
+
static void
|
|
161
|
+
s_ztrie_node_destroy (ztrie_node_t **self_p)
|
|
162
|
+
{
|
|
163
|
+
assert (self_p);
|
|
164
|
+
if (*self_p) {
|
|
165
|
+
ztrie_node_t *self = *self_p;
|
|
166
|
+
|
|
167
|
+
// Free class properties
|
|
168
|
+
zstr_free (&self->token);
|
|
169
|
+
zstr_free (&self->asterisk_match);
|
|
170
|
+
if (self->parameter_count > 0) {
|
|
171
|
+
size_t index;
|
|
172
|
+
for (index = 0; index < self->parameter_count; index++) {
|
|
173
|
+
freen (self->parameter_names [index]);
|
|
174
|
+
if (self->parameter_values [index])
|
|
175
|
+
freen (self->parameter_values [index]);
|
|
176
|
+
}
|
|
177
|
+
freen (self->parameter_names);
|
|
178
|
+
freen (self->parameter_values);
|
|
179
|
+
}
|
|
180
|
+
if (self->token_type == NODE_TYPE_REGEX || self->token_type == NODE_TYPE_PARAM)
|
|
181
|
+
zrex_destroy (&self->regex);
|
|
182
|
+
zlistx_destroy (&self->children);
|
|
183
|
+
if (self->data && self->destroy_data_fn)
|
|
184
|
+
(self->destroy_data_fn) (&self->data);
|
|
185
|
+
|
|
186
|
+
// Free object itself
|
|
187
|
+
freen (self);
|
|
188
|
+
*self_p = NULL;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
// Update the value of a regex parameter at position.
|
|
194
|
+
|
|
195
|
+
static void
|
|
196
|
+
s_ztrie_node_update_param (ztrie_node_t *self, int pos, const char *value)
|
|
197
|
+
{
|
|
198
|
+
assert (self);
|
|
199
|
+
zstr_free (&self->parameter_values [pos - 1]);
|
|
200
|
+
self->parameter_values [pos - 1] = strdup (value);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
// --------------------------------------------------------------------------
|
|
205
|
+
// Creates a new ztrie.
|
|
206
|
+
|
|
207
|
+
ztrie_t *
|
|
208
|
+
ztrie_new (char delimiter)
|
|
209
|
+
{
|
|
210
|
+
ztrie_t *self = (ztrie_t *) zmalloc (sizeof (ztrie_t));
|
|
211
|
+
assert (self);
|
|
212
|
+
|
|
213
|
+
// Initialize properties
|
|
214
|
+
if (delimiter)
|
|
215
|
+
self->delimiter = delimiter;
|
|
216
|
+
else
|
|
217
|
+
self->delimiter = '/';
|
|
218
|
+
self->root = s_ztrie_node_new (NULL, "", 0, NULL, NODE_TYPE_STRING);
|
|
219
|
+
self->match = NULL;
|
|
220
|
+
self->params = zlistx_new ();
|
|
221
|
+
|
|
222
|
+
return self;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// Destroy all children of a node
|
|
226
|
+
|
|
227
|
+
static void
|
|
228
|
+
s_ztrie_destroy_children (ztrie_node_t *node)
|
|
229
|
+
{
|
|
230
|
+
ztrie_node_t *child = (ztrie_node_t *) zlistx_first (node->children);
|
|
231
|
+
while (child) {
|
|
232
|
+
s_ztrie_destroy_children (child);
|
|
233
|
+
s_ztrie_node_destroy (&child);
|
|
234
|
+
child = (ztrie_node_t *) zlistx_next (node->children);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// --------------------------------------------------------------------------
|
|
239
|
+
// Destroy the ztrie.
|
|
240
|
+
|
|
241
|
+
void
|
|
242
|
+
ztrie_destroy (ztrie_t **self_p)
|
|
243
|
+
{
|
|
244
|
+
assert (self_p);
|
|
245
|
+
if (*self_p) {
|
|
246
|
+
ztrie_t *self = *self_p;
|
|
247
|
+
|
|
248
|
+
// Free class properties
|
|
249
|
+
s_ztrie_destroy_children (self->root);
|
|
250
|
+
s_ztrie_node_destroy (&self->root);
|
|
251
|
+
zlistx_destroy (&self->params);
|
|
252
|
+
|
|
253
|
+
// Free object itself
|
|
254
|
+
freen (self);
|
|
255
|
+
*self_p = NULL;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// String compare token
|
|
260
|
+
|
|
261
|
+
static ztrie_node_t *
|
|
262
|
+
s_ztrie_compare_token (ztrie_node_t *parent, char *token, int len)
|
|
263
|
+
{
|
|
264
|
+
ztrie_node_t *child = (ztrie_node_t *) zlistx_first (parent->children);
|
|
265
|
+
while (child) {
|
|
266
|
+
if (child->token_len == len &&
|
|
267
|
+
strncmp (child->token, token, MIN_LEN (child->token_len, len)) == 0)
|
|
268
|
+
return child;
|
|
269
|
+
child = (ztrie_node_t *) zlistx_next (parent->children);
|
|
270
|
+
}
|
|
271
|
+
return NULL;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// String compare token or evaluate regexes
|
|
275
|
+
|
|
276
|
+
static ztrie_node_t *
|
|
277
|
+
s_ztrie_matches_token (ztrie_node_t *parent, char *token, int len)
|
|
278
|
+
{
|
|
279
|
+
char firstbyte = *token;
|
|
280
|
+
ztrie_node_t *child = (ztrie_node_t *) zlistx_first (parent->children);
|
|
281
|
+
while (child) {
|
|
282
|
+
if (child->token_type == NODE_TYPE_STRING) {
|
|
283
|
+
if (firstbyte == *child->token // This achieves a small performance boost
|
|
284
|
+
&& child->token_len == len
|
|
285
|
+
&& strncmp (child->token, token, MIN_LEN (child->token_len, len)) == 0)
|
|
286
|
+
return child;
|
|
287
|
+
}
|
|
288
|
+
else
|
|
289
|
+
if (child->token_type == NODE_TYPE_ASTERISK) {
|
|
290
|
+
child->asterisk_match = strdup (token);
|
|
291
|
+
return child;
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
// Need to copy token as zrex_matches expects '\0' terminated string
|
|
295
|
+
char *token_term = s_strndup (token, len);
|
|
296
|
+
if (zrex_matches (child->regex, token_term)) {
|
|
297
|
+
if (child->token_type == NODE_TYPE_PARAM) {
|
|
298
|
+
// One hit means no capturing group was defined
|
|
299
|
+
// More than one hit indicates that at least on capturing group.
|
|
300
|
+
// In this case only the values of the capturing groups are considered.
|
|
301
|
+
if (zrex_hits (child->regex) == 1)
|
|
302
|
+
s_ztrie_node_update_param (child, 1, zrex_hit (child->regex, 0));
|
|
303
|
+
else
|
|
304
|
+
if (zrex_hits (child->regex) > 1) {
|
|
305
|
+
int index;
|
|
306
|
+
for (index = 1; index < zrex_hits (child->regex); index++)
|
|
307
|
+
s_ztrie_node_update_param (child, index, zrex_hit (child->regex, index));
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
freen (token_term);
|
|
311
|
+
return child;
|
|
312
|
+
}
|
|
313
|
+
freen (token_term);
|
|
314
|
+
}
|
|
315
|
+
child = (ztrie_node_t *) zlistx_next (parent->children);
|
|
316
|
+
}
|
|
317
|
+
return NULL;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
// --------------------------------------------------------------------------
|
|
322
|
+
// Parses a path bytewise trying to find matches for path tokens. Depending
|
|
323
|
+
// on the mode there are different behaviors on,
|
|
324
|
+
// how the tokens are compared:
|
|
325
|
+
// MODE_INSERT: All tokens are compared as strings.
|
|
326
|
+
// MODE_LOOKUP: All tokens are compared as strings.
|
|
327
|
+
// MODE_MATCH: Node tokens of NODE_TYPE_STRING tokens are compared as strings,
|
|
328
|
+
// otherwise the tokens are matched against the nodes regex.
|
|
329
|
+
// how a mismatch is handled:
|
|
330
|
+
// MODE_INSERT: creates a new node and attaches it to the common prefix for
|
|
331
|
+
// the given path, repeat for the remaining path tokens.
|
|
332
|
+
// returns the node that has been attached last.
|
|
333
|
+
// MODE_LOOKUP: returns NULL if the comparison failed.
|
|
334
|
+
// MODE_MATCH: returns NULL if the comparison failed.
|
|
335
|
+
|
|
336
|
+
static ztrie_node_t *
|
|
337
|
+
s_ztrie_parse_path (ztrie_t *self, const char *path, int mode)
|
|
338
|
+
{
|
|
339
|
+
int state = 0;
|
|
340
|
+
char *needle, *beginToken = NULL, *beginRegex = NULL;
|
|
341
|
+
ztrie_node_t *parent = self->root;
|
|
342
|
+
if (zlistx_size (self->params) > 0)
|
|
343
|
+
zlistx_purge (self->params);
|
|
344
|
+
|
|
345
|
+
size_t len = strlen (path);
|
|
346
|
+
needle = (char *) path;
|
|
347
|
+
char *needle_stop = needle + len;
|
|
348
|
+
// Ignore trailing delimiter
|
|
349
|
+
if (needle [len-1] == self->delimiter)
|
|
350
|
+
needle_stop -= 1;
|
|
351
|
+
while (needle < needle_stop + 1) {
|
|
352
|
+
// It is valid not to have an delimiter at the end of the path
|
|
353
|
+
if (*needle == self->delimiter || needle == needle_stop) {
|
|
354
|
+
// Token starts with delimiter ignore everything that comes before
|
|
355
|
+
if (state == 0) {
|
|
356
|
+
beginToken = needle + 1;
|
|
357
|
+
state++;
|
|
358
|
+
if (mode == MODE_INSERT || mode == MODE_LOOKUP)
|
|
359
|
+
// Increment so regexes are parsed which is only relevant
|
|
360
|
+
// during INSERT or LOOKUP. Using different states gives a small
|
|
361
|
+
// performance boost for matching.
|
|
362
|
+
state++;
|
|
363
|
+
}
|
|
364
|
+
// Token ends with delimiter.
|
|
365
|
+
else
|
|
366
|
+
if (state < 3) {
|
|
367
|
+
int matchType = zlistx_size (self->params) > 0? NODE_TYPE_PARAM:
|
|
368
|
+
beginRegex? NODE_TYPE_REGEX: NODE_TYPE_STRING;
|
|
369
|
+
char *matchToken = beginRegex? beginRegex: beginToken;
|
|
370
|
+
int matchTokenLen = (int) (needle - matchToken) - (beginRegex? 1: 0);
|
|
371
|
+
// Illegal token
|
|
372
|
+
if (matchTokenLen == 0)
|
|
373
|
+
return NULL;
|
|
374
|
+
ztrie_node_t *match = NULL;
|
|
375
|
+
// Asterisk nodes are only allowed at the end of a route
|
|
376
|
+
if (needle == needle_stop && *matchToken == '*') {
|
|
377
|
+
if (zlistx_size (parent->children) == 0) {
|
|
378
|
+
matchType = NODE_TYPE_ASTERISK;
|
|
379
|
+
matchToken = needle - 1;
|
|
380
|
+
matchTokenLen = 1;
|
|
381
|
+
}
|
|
382
|
+
// Asterisk must be a leaf in the tree
|
|
383
|
+
else
|
|
384
|
+
return NULL;
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
matchType = zlistx_size (self->params) > 0? NODE_TYPE_PARAM:
|
|
388
|
+
beginRegex? NODE_TYPE_REGEX: NODE_TYPE_STRING;
|
|
389
|
+
matchToken = beginRegex? beginRegex: beginToken;
|
|
390
|
+
matchTokenLen = (int) (needle - matchToken) - (beginRegex? 1: 0);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
// In insert and lookup mode only do a string comparison
|
|
394
|
+
if (mode == MODE_INSERT || mode == MODE_LOOKUP)
|
|
395
|
+
match = s_ztrie_compare_token (parent, matchToken, matchTokenLen);
|
|
396
|
+
else
|
|
397
|
+
// Otherwise evaluate regexes
|
|
398
|
+
if (mode == MODE_MATCH)
|
|
399
|
+
match = s_ztrie_matches_token (parent, matchToken, matchTokenLen);
|
|
400
|
+
|
|
401
|
+
// Mismatch behavior depends on mode
|
|
402
|
+
if (!match) {
|
|
403
|
+
// Append to common prefix
|
|
404
|
+
if (mode == MODE_INSERT) {
|
|
405
|
+
// It's not allowed to append on asterisk
|
|
406
|
+
if (parent->token_type == NODE_TYPE_ASTERISK ||
|
|
407
|
+
(zlistx_size (parent->children) == 1 &&
|
|
408
|
+
((ztrie_node_t *) (zlistx_first (parent->children)))->token_type == NODE_TYPE_ASTERISK))
|
|
409
|
+
return NULL;
|
|
410
|
+
parent = s_ztrie_node_new (parent, matchToken, matchTokenLen, self->params, matchType);
|
|
411
|
+
}
|
|
412
|
+
else
|
|
413
|
+
// No match for path found
|
|
414
|
+
if (mode == MODE_MATCH || mode == MODE_LOOKUP)
|
|
415
|
+
return NULL;
|
|
416
|
+
}
|
|
417
|
+
// If a match has been found it becomes the parent for next path token
|
|
418
|
+
else {
|
|
419
|
+
parent = match;
|
|
420
|
+
// In case a asterisk match has been made skip the rest of the route
|
|
421
|
+
if (parent->token_type == NODE_TYPE_ASTERISK)
|
|
422
|
+
break;
|
|
423
|
+
}
|
|
424
|
+
// Cleanup for next token
|
|
425
|
+
beginRegex = NULL;
|
|
426
|
+
if (zlistx_size (self->params) > 0)
|
|
427
|
+
zlistx_purge (self->params);
|
|
428
|
+
// Token end equals token begin
|
|
429
|
+
beginToken = needle + 1;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
else
|
|
433
|
+
// regex starts with '{'
|
|
434
|
+
if (state == 2 && *needle == '{') {
|
|
435
|
+
beginRegex = needle + 1;
|
|
436
|
+
state++;
|
|
437
|
+
}
|
|
438
|
+
else
|
|
439
|
+
// in the middle of the regex. Found a named regex.
|
|
440
|
+
if (state == 3 && (*needle == ':')) {
|
|
441
|
+
zlistx_add_end (self->params, s_strndup (beginRegex, needle - beginRegex));
|
|
442
|
+
beginRegex = needle + 1;
|
|
443
|
+
|
|
444
|
+
}
|
|
445
|
+
else
|
|
446
|
+
// regex ends with {
|
|
447
|
+
if (state == 3 && *needle == '}') {
|
|
448
|
+
state--;
|
|
449
|
+
}
|
|
450
|
+
needle++;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
// In matching mode the discovered node must be an endpoint
|
|
454
|
+
if (parent && mode == MODE_MATCH && !parent->endpoint)
|
|
455
|
+
return NULL;
|
|
456
|
+
|
|
457
|
+
return parent;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
|
|
461
|
+
// --------------------------------------------------------------------------
|
|
462
|
+
// Inserts a new route into the trie and attaches the data. Returns -1
|
|
463
|
+
// if the route already exists, otherwise 0. This method takes ownership of
|
|
464
|
+
// the provided data.
|
|
465
|
+
|
|
466
|
+
int
|
|
467
|
+
ztrie_insert_route (ztrie_t *self, const char *path, void *data, ztrie_destroy_data_fn destroy_data_fn)
|
|
468
|
+
{
|
|
469
|
+
assert (self);
|
|
470
|
+
ztrie_node_t *node = s_ztrie_parse_path (self, path, MODE_INSERT);
|
|
471
|
+
// If the returned node has no endpoint, a new route can be assigned to it.
|
|
472
|
+
if (node && !node->endpoint) {
|
|
473
|
+
node->endpoint = true;
|
|
474
|
+
node->data = data;
|
|
475
|
+
node->destroy_data_fn = destroy_data_fn;
|
|
476
|
+
return 0;
|
|
477
|
+
}
|
|
478
|
+
// If the returned node has an endpoint, a route has already assigned to it.
|
|
479
|
+
else
|
|
480
|
+
return -1;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
// --------------------------------------------------------------------------
|
|
485
|
+
// Removes a route from the trie and destroys its data. Returns -1 if the
|
|
486
|
+
// route does not exists, otherwise 0.
|
|
487
|
+
|
|
488
|
+
int
|
|
489
|
+
ztrie_remove_route (ztrie_t *self, const char *path)
|
|
490
|
+
{
|
|
491
|
+
assert (self);
|
|
492
|
+
ztrie_node_t *match = s_ztrie_parse_path (self, path, MODE_LOOKUP);
|
|
493
|
+
// The path did match a node which is endpoint to a route
|
|
494
|
+
if (match && match->endpoint) {
|
|
495
|
+
// This node is part of other routes, thus it cannot destroy it
|
|
496
|
+
if (zlistx_size (match->children) > 0) {
|
|
497
|
+
match->endpoint = false;
|
|
498
|
+
if (match->data && match->destroy_data_fn)
|
|
499
|
+
(match->destroy_data_fn) (&match->data);
|
|
500
|
+
}
|
|
501
|
+
// If this node is not part of other routes, destroy it
|
|
502
|
+
else {
|
|
503
|
+
// Delete match from parent's children before destroying
|
|
504
|
+
void *handle = zlistx_find (match->parent->children, match);
|
|
505
|
+
assert (handle);
|
|
506
|
+
zlistx_delete (match->parent->children, handle);
|
|
507
|
+
s_ztrie_node_destroy (&match);
|
|
508
|
+
}
|
|
509
|
+
return 0;
|
|
510
|
+
}
|
|
511
|
+
// If there is no match or the match is not endpoint to a route, fail
|
|
512
|
+
else
|
|
513
|
+
return -1;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
// --------------------------------------------------------------------------
|
|
517
|
+
// Returns true if the path matches a route in the tree, otherwise false.
|
|
518
|
+
|
|
519
|
+
bool
|
|
520
|
+
ztrie_matches (ztrie_t *self, const char *path)
|
|
521
|
+
{
|
|
522
|
+
assert (self);
|
|
523
|
+
self->match = s_ztrie_parse_path (self, path, MODE_MATCH);
|
|
524
|
+
return self->match? true: false;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
|
|
528
|
+
// --------------------------------------------------------------------------
|
|
529
|
+
// Returns the data of a matched route from last ztrie_matches. If the path
|
|
530
|
+
// did not match, returns NULL. Do not delete the data as it's owned by
|
|
531
|
+
// ztrie.
|
|
532
|
+
|
|
533
|
+
void *
|
|
534
|
+
ztrie_hit_data (ztrie_t *self)
|
|
535
|
+
{
|
|
536
|
+
assert (self);
|
|
537
|
+
if (self->match)
|
|
538
|
+
return self->match->data;
|
|
539
|
+
return NULL;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
|
|
543
|
+
// --------------------------------------------------------------------------
|
|
544
|
+
// Returns the count of parameters that a matched route has.
|
|
545
|
+
|
|
546
|
+
size_t
|
|
547
|
+
ztrie_hit_parameter_count (ztrie_t *self)
|
|
548
|
+
{
|
|
549
|
+
size_t count = 0;
|
|
550
|
+
ztrie_node_t *node = self->match;
|
|
551
|
+
while (node) {
|
|
552
|
+
count += node->parameter_count;
|
|
553
|
+
node = node->parent;
|
|
554
|
+
}
|
|
555
|
+
return count;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
// --------------------------------------------------------------------------
|
|
559
|
+
// Returns the parameters of a matched route with named regexes from last
|
|
560
|
+
// ztrie_matches. If the path did not match or the route did not contain any
|
|
561
|
+
// named regexes, returns NULL. The caller is responseable for destroy the map.
|
|
562
|
+
|
|
563
|
+
zhashx_t *
|
|
564
|
+
ztrie_hit_parameters (ztrie_t *self)
|
|
565
|
+
{
|
|
566
|
+
assert (self);
|
|
567
|
+
if (self->match) {
|
|
568
|
+
zhashx_t *route_parameters = zhashx_new ();
|
|
569
|
+
ztrie_node_t *node = self->match;
|
|
570
|
+
while (node) {
|
|
571
|
+
size_t index;
|
|
572
|
+
for (index = 0; index < node->parameter_count; index++)
|
|
573
|
+
zhashx_insert (route_parameters,
|
|
574
|
+
node->parameter_names [index],
|
|
575
|
+
(void *) node->parameter_values [index]);
|
|
576
|
+
node = node->parent;
|
|
577
|
+
}
|
|
578
|
+
return route_parameters;
|
|
579
|
+
}
|
|
580
|
+
return NULL;
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
// --------------------------------------------------------------------------
|
|
585
|
+
// Returns the asterisk matched part of a route, if there has been no match
|
|
586
|
+
// or no asterisk match, returns NULL.
|
|
587
|
+
|
|
588
|
+
const char *
|
|
589
|
+
ztrie_hit_asterisk_match (ztrie_t *self)
|
|
590
|
+
{
|
|
591
|
+
assert (self);
|
|
592
|
+
if (self->match)
|
|
593
|
+
return self->match->asterisk_match;
|
|
594
|
+
return NULL;
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
// --------------------------------------------------------------------------
|
|
598
|
+
// Print properties of the ztrie object.
|
|
599
|
+
//
|
|
600
|
+
|
|
601
|
+
static void
|
|
602
|
+
s_ztrie_print_tree_line (ztrie_node_t *self, bool end_line)
|
|
603
|
+
{
|
|
604
|
+
if (self->parent) {
|
|
605
|
+
s_ztrie_print_tree_line (self->parent, false);
|
|
606
|
+
if (zlistx_tail (self->parent->children) == self) {
|
|
607
|
+
if (end_line)
|
|
608
|
+
printf ("`-- ");
|
|
609
|
+
else
|
|
610
|
+
printf (" ");
|
|
611
|
+
}
|
|
612
|
+
else {
|
|
613
|
+
if (end_line)
|
|
614
|
+
printf ("+-- ");
|
|
615
|
+
else
|
|
616
|
+
printf ("| ");
|
|
617
|
+
}
|
|
618
|
+
if (end_line) {
|
|
619
|
+
char *is_endpoint = self->endpoint? "true": "false";
|
|
620
|
+
printf ("%s (params: %zu, endpoint: %s, type: %d)\n",
|
|
621
|
+
self->token, self->parameter_count, is_endpoint, self->token_type);
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
static void
|
|
627
|
+
s_ztrie_print_tree (ztrie_node_t *self)
|
|
628
|
+
{
|
|
629
|
+
// Print tree like structure
|
|
630
|
+
s_ztrie_print_tree_line (self, true);
|
|
631
|
+
ztrie_node_t *child = (ztrie_node_t *) zlistx_first (self->children);
|
|
632
|
+
while (child) {
|
|
633
|
+
s_ztrie_print_tree (child);
|
|
634
|
+
child = (ztrie_node_t *) zlistx_next (self->children);
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
void
|
|
639
|
+
ztrie_print (ztrie_t *self)
|
|
640
|
+
{
|
|
641
|
+
assert (self);
|
|
642
|
+
s_ztrie_print_tree (self->root);
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
|
|
646
|
+
// --------------------------------------------------------------------------
|
|
647
|
+
// Self test of this class.
|
|
648
|
+
|
|
649
|
+
void
|
|
650
|
+
ztrie_test (bool verbose)
|
|
651
|
+
{
|
|
652
|
+
printf (" * ztrie: ");
|
|
653
|
+
// @selftest
|
|
654
|
+
// Create a new trie for matching strings that can be tokenized by a slash
|
|
655
|
+
// (e.g. URLs minus the protocol, address and port).
|
|
656
|
+
ztrie_t *self = ztrie_new ('/');
|
|
657
|
+
assert (self);
|
|
658
|
+
|
|
659
|
+
int ret = 0;
|
|
660
|
+
|
|
661
|
+
// Let's start by inserting a couple of routes into the trie.
|
|
662
|
+
// This one is for the route '/foo/bar' the slash at the beginning of the
|
|
663
|
+
// route is important because everything before the first delimiter will be
|
|
664
|
+
// discarded. A slash at the end of a route is optional though. The data
|
|
665
|
+
// associated with this node is passed without destroy function which means
|
|
666
|
+
// it must be destroyed by the caller.
|
|
667
|
+
int foo_bar_data = 10;
|
|
668
|
+
ret = ztrie_insert_route (self, "/foo/bar", &foo_bar_data, NULL);
|
|
669
|
+
assert (ret == 0);
|
|
670
|
+
|
|
671
|
+
// Now suppose we like to match all routes with two tokens that start with
|
|
672
|
+
// '/foo/' but aren't '/foo/bar'. This is possible by using regular
|
|
673
|
+
// expressions which are enclosed in an opening and closing curly bracket.
|
|
674
|
+
// Tokens that contain regular expressions are always match after string
|
|
675
|
+
// based tokens.
|
|
676
|
+
// Note: There is no order in which regular expressions are sorted thus
|
|
677
|
+
// if you enter multiple expressions for a route you will have to make
|
|
678
|
+
// sure they don't have overlapping results. For example '/foo/{[^/]+}'
|
|
679
|
+
// and '/foo/{\d+} having could turn out badly.
|
|
680
|
+
int foo_other_data = 100;
|
|
681
|
+
ret = ztrie_insert_route (self, "/foo/{[^/]+}", &foo_other_data, NULL);
|
|
682
|
+
assert (ret == 0);
|
|
683
|
+
|
|
684
|
+
// Regular expression are only matched against tokens of the same level.
|
|
685
|
+
// This allows us to append to are route with a regular expression as if
|
|
686
|
+
// it were a string.
|
|
687
|
+
ret = ztrie_insert_route (self, "/foo/{[^/]+}/gulp", NULL, NULL);
|
|
688
|
+
assert (ret == 0);
|
|
689
|
+
|
|
690
|
+
// Routes are identified by their endpoint, which is the last token of the route.
|
|
691
|
+
// It is possible to insert routes for a node that already exists but isn't an
|
|
692
|
+
// endpoint yet. The delimiter at the end of a route is optional and has no effect.
|
|
693
|
+
ret = ztrie_insert_route (self, "/foo/", NULL, NULL);
|
|
694
|
+
assert (ret == 0);
|
|
695
|
+
|
|
696
|
+
// If you try to insert a route which already exists the method will return -1.
|
|
697
|
+
ret = ztrie_insert_route (self, "/foo", NULL, NULL);
|
|
698
|
+
assert (ret == -1);
|
|
699
|
+
|
|
700
|
+
// It is not allowed to insert routes with empty tokens.
|
|
701
|
+
ret = ztrie_insert_route (self, "//foo", NULL, NULL);
|
|
702
|
+
assert (ret == -1);
|
|
703
|
+
|
|
704
|
+
// Everything before the first delimiter is ignored so 'foo/bar/baz' is equivalent
|
|
705
|
+
// to '/bar/baz'.
|
|
706
|
+
ret = ztrie_insert_route (self, "foo/bar/baz", NULL, NULL);
|
|
707
|
+
assert (ret == 0);
|
|
708
|
+
ret = ztrie_insert_route (self, "/bar/baz", NULL, NULL);
|
|
709
|
+
assert (ret == -1);
|
|
710
|
+
|
|
711
|
+
// Of course you are allowed to remove routes, in case there is data associated with a
|
|
712
|
+
// route and a destroy data function has been supplied that data will be destroyed.
|
|
713
|
+
ret = ztrie_remove_route (self, "/foo");
|
|
714
|
+
assert (ret == 0);
|
|
715
|
+
|
|
716
|
+
// Removing a non existent route will as well return -1.
|
|
717
|
+
ret = ztrie_remove_route (self, "/foo");
|
|
718
|
+
assert (ret == -1);
|
|
719
|
+
|
|
720
|
+
// Removing a route with a regular expression must exactly match the entered one.
|
|
721
|
+
ret = ztrie_remove_route (self, "/foo/{[^/]+}");
|
|
722
|
+
assert (ret == 0);
|
|
723
|
+
|
|
724
|
+
// Next we like to match a path by regular expressions and also extract matched
|
|
725
|
+
// parts of a route. This can be done by naming the regular expression. The name of a
|
|
726
|
+
// regular expression is entered at the beginning of the curly brackets and separated
|
|
727
|
+
// by a colon from the regular expression. The first one in this examples is named
|
|
728
|
+
// 'name' and names the expression '[^/]'. If there is no capturing group defined in
|
|
729
|
+
// the expression the whole matched string will be associated with this parameter. In
|
|
730
|
+
// case you don't like the get the whole matched string use a capturing group, like
|
|
731
|
+
// it has been done for the 'id' parameter. This is nice but you can even match as
|
|
732
|
+
// many parameter for a token as you like. Therefore simply put the parameter names
|
|
733
|
+
// separated by colons in front of the regular expression and make sure to add a
|
|
734
|
+
// capturing group for each parameter. The first parameter will be associated with
|
|
735
|
+
// the first capturing and so on.
|
|
736
|
+
char *data = (char *) malloc (80);
|
|
737
|
+
sprintf (data, "%s", "Hello World!");
|
|
738
|
+
ret = ztrie_insert_route (self, "/baz/{name:[^/]+}/{id:--(\\d+)}/{street:nr:(\\a+)(\\d+)}", data, NULL);
|
|
739
|
+
assert (ret == 0);
|
|
740
|
+
|
|
741
|
+
// There is a lot you can do with regular expression but matching routes
|
|
742
|
+
// of arbitrary length wont work. Therefore we make use of the asterisk
|
|
743
|
+
// operator. Just place it at the end of your route, e.g. '/config/bar/*'.
|
|
744
|
+
ret = ztrie_insert_route (self, "/config/bar/*", NULL, NULL);
|
|
745
|
+
assert (ret == 0);
|
|
746
|
+
|
|
747
|
+
// Appending to an asterisk as you would to with a regular expression
|
|
748
|
+
// isn't valid.
|
|
749
|
+
ret = ztrie_insert_route (self, "/config/bar/*/bar", NULL, NULL);
|
|
750
|
+
assert (ret == -1);
|
|
751
|
+
|
|
752
|
+
// The asterisk operator will only work as a leaf in the tree. If you
|
|
753
|
+
// enter an asterisk in the middle of your route it will simply be
|
|
754
|
+
// interpreted as a string.
|
|
755
|
+
ret = ztrie_insert_route (self, "/test/*/bar", NULL, NULL);
|
|
756
|
+
assert (ret == 0);
|
|
757
|
+
|
|
758
|
+
// If a parent has an asterisk as child it is not allowed to have
|
|
759
|
+
// other siblings.
|
|
760
|
+
ret = ztrie_insert_route (self, "/config/bar/foo/glup", NULL, NULL);
|
|
761
|
+
assert (ret != 0);
|
|
762
|
+
|
|
763
|
+
// Test matches
|
|
764
|
+
bool hasMatch = false;
|
|
765
|
+
|
|
766
|
+
// The route '/bar/foo' will fail to match as this route has never been inserted.
|
|
767
|
+
hasMatch = ztrie_matches (self, "/bar/foo");
|
|
768
|
+
assert (!hasMatch);
|
|
769
|
+
|
|
770
|
+
// The route '/foo/bar' will match and we can obtain the data associated with it.
|
|
771
|
+
hasMatch = ztrie_matches (self, "/foo/bar");
|
|
772
|
+
assert (hasMatch);
|
|
773
|
+
int foo_bar_hit_data = *((int *) ztrie_hit_data (self));
|
|
774
|
+
assert (foo_bar_data == foo_bar_hit_data);
|
|
775
|
+
|
|
776
|
+
// This route is part of another but is no endpoint itself thus the matches will fail.
|
|
777
|
+
hasMatch = ztrie_matches (self, "/baz/blub");
|
|
778
|
+
assert (!hasMatch);
|
|
779
|
+
|
|
780
|
+
// This route will match our named regular expressions route. Thus we can extract data
|
|
781
|
+
// from the route by their names.
|
|
782
|
+
hasMatch = ztrie_matches (self, "/baz/blub/--11/abc23");
|
|
783
|
+
assert (hasMatch);
|
|
784
|
+
char *match_data = (char *) ztrie_hit_data (self);
|
|
785
|
+
assert (streq ("Hello World!", match_data));
|
|
786
|
+
zhashx_t *parameters = ztrie_hit_parameters (self);
|
|
787
|
+
assert (zhashx_size (parameters) == 4);
|
|
788
|
+
assert (streq ("blub", (char *) zhashx_lookup (parameters, "name")));
|
|
789
|
+
assert (streq ("11", (char *) zhashx_lookup (parameters, "id")));
|
|
790
|
+
assert (streq ("abc", (char *) zhashx_lookup (parameters, "street")));
|
|
791
|
+
assert (streq ("23", (char *) zhashx_lookup (parameters, "nr")));
|
|
792
|
+
zhashx_destroy (¶meters);
|
|
793
|
+
|
|
794
|
+
// This will match our asterisk route '/config/bar/*'. As the result we
|
|
795
|
+
// can obtain the asterisk matched part of the route.
|
|
796
|
+
hasMatch = ztrie_matches (self, "/config/bar/foo/bar");
|
|
797
|
+
assert (hasMatch);
|
|
798
|
+
assert (streq (ztrie_hit_asterisk_match (self), "foo/bar"));
|
|
799
|
+
|
|
800
|
+
zstr_free (&data);
|
|
801
|
+
ztrie_destroy (&self);
|
|
802
|
+
|
|
803
|
+
#if defined (__WINDOWS__)
|
|
804
|
+
zsys_shutdown();
|
|
805
|
+
#endif
|
|
806
|
+
// @end
|
|
807
|
+
|
|
808
|
+
printf ("OK\n");
|
|
809
|
+
}
|