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.
Files changed (697) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +57 -0
  3. data/LICENSE.txt +373 -0
  4. data/README.org +34 -0
  5. data/ext/laag/libczmq/extconf.rb +24 -0
  6. data/laag-libczmq.gemspec +21 -0
  7. data/lib/laag/libczmq.rb +30 -0
  8. data/vendor/github.com/zeromq/czmq/.editorconfig +19 -0
  9. data/vendor/github.com/zeromq/czmq/.gitattributes +5 -0
  10. data/vendor/github.com/zeromq/czmq/.github/PULL_REQUEST_TEMPLATE.md +28 -0
  11. data/vendor/github.com/zeromq/czmq/.gitignore +137 -0
  12. data/vendor/github.com/zeromq/czmq/.travis.yml +126 -0
  13. data/vendor/github.com/zeromq/czmq/AUTHORS +69 -0
  14. data/vendor/github.com/zeromq/czmq/CMakeLists.txt +653 -0
  15. data/vendor/github.com/zeromq/czmq/CONTRIBUTING.md +19 -0
  16. data/vendor/github.com/zeromq/czmq/Dockerfile +29 -0
  17. data/vendor/github.com/zeromq/czmq/Findlibsodium.cmake +47 -0
  18. data/vendor/github.com/zeromq/czmq/Findlibzmq.cmake +49 -0
  19. data/vendor/github.com/zeromq/czmq/Findlz4.cmake +49 -0
  20. data/vendor/github.com/zeromq/czmq/Findsystemd.cmake +49 -0
  21. data/vendor/github.com/zeromq/czmq/Finduuid.cmake +49 -0
  22. data/vendor/github.com/zeromq/czmq/INSTALL.cygwin +13 -0
  23. data/vendor/github.com/zeromq/czmq/ISSUES.cygwin +6 -0
  24. data/vendor/github.com/zeromq/czmq/Jenkinsfile +439 -0
  25. data/vendor/github.com/zeromq/czmq/LICENSE +373 -0
  26. data/vendor/github.com/zeromq/czmq/Makefile.am +70 -0
  27. data/vendor/github.com/zeromq/czmq/NEWS +823 -0
  28. data/vendor/github.com/zeromq/czmq/README.cygwin +23 -0
  29. data/vendor/github.com/zeromq/czmq/README.md +9345 -0
  30. data/vendor/github.com/zeromq/czmq/README.txt +512 -0
  31. data/vendor/github.com/zeromq/czmq/Vagrantfile +49 -0
  32. data/vendor/github.com/zeromq/czmq/acinclude.m4 +7 -0
  33. data/vendor/github.com/zeromq/czmq/api/zactor.api +77 -0
  34. data/vendor/github.com/zeromq/czmq/api/zargs.api +110 -0
  35. data/vendor/github.com/zeromq/czmq/api/zarmour.api +103 -0
  36. data/vendor/github.com/zeromq/czmq/api/zcert.api +128 -0
  37. data/vendor/github.com/zeromq/czmq/api/zcertstore.api +80 -0
  38. data/vendor/github.com/zeromq/czmq/api/zchunk.api +171 -0
  39. data/vendor/github.com/zeromq/czmq/api/zclock.api +43 -0
  40. data/vendor/github.com/zeromq/czmq/api/zconfig.api +205 -0
  41. data/vendor/github.com/zeromq/czmq/api/zdigest.api +45 -0
  42. data/vendor/github.com/zeromq/czmq/api/zdir.api +124 -0
  43. data/vendor/github.com/zeromq/czmq/api/zdir_patch.api +62 -0
  44. data/vendor/github.com/zeromq/czmq/api/zfile.api +157 -0
  45. data/vendor/github.com/zeromq/czmq/api/zframe.api +157 -0
  46. data/vendor/github.com/zeromq/czmq/api/zgossip_msg.api +104 -0
  47. data/vendor/github.com/zeromq/czmq/api/zhash.api +184 -0
  48. data/vendor/github.com/zeromq/czmq/api/zhashx.api +295 -0
  49. data/vendor/github.com/zeromq/czmq/api/ziflist.api +73 -0
  50. data/vendor/github.com/zeromq/czmq/api/zlist.api +158 -0
  51. data/vendor/github.com/zeromq/czmq/api/zlistx.api +220 -0
  52. data/vendor/github.com/zeromq/czmq/api/zloop.api +176 -0
  53. data/vendor/github.com/zeromq/czmq/api/zmsg.api +250 -0
  54. data/vendor/github.com/zeromq/czmq/api/zpoller.api +71 -0
  55. data/vendor/github.com/zeromq/czmq/api/zproc.api +247 -0
  56. data/vendor/github.com/zeromq/czmq/api/zsock.api +412 -0
  57. data/vendor/github.com/zeromq/czmq/api/zsock_option.api +847 -0
  58. data/vendor/github.com/zeromq/czmq/api/zstr.api +119 -0
  59. data/vendor/github.com/zeromq/czmq/api/zsys.api +490 -0
  60. data/vendor/github.com/zeromq/czmq/api/ztimerset.api +69 -0
  61. data/vendor/github.com/zeromq/czmq/api/ztrie.api +80 -0
  62. data/vendor/github.com/zeromq/czmq/api/zuuid.api +82 -0
  63. data/vendor/github.com/zeromq/czmq/appveyor.yml +73 -0
  64. data/vendor/github.com/zeromq/czmq/autogen.sh +52 -0
  65. data/vendor/github.com/zeromq/czmq/bindings/jni/.gitignore +8 -0
  66. data/vendor/github.com/zeromq/czmq/bindings/jni/CMakeLists.txt +79 -0
  67. data/vendor/github.com/zeromq/czmq/bindings/jni/Findczmq.cmake +47 -0
  68. data/vendor/github.com/zeromq/czmq/bindings/jni/README.md +130 -0
  69. data/vendor/github.com/zeromq/czmq/bindings/jni/android/CMakeLists.txt +79 -0
  70. data/vendor/github.com/zeromq/czmq/bindings/jni/android/android_toolchain.cmake +52 -0
  71. data/vendor/github.com/zeromq/czmq/bindings/jni/android/build.sh +68 -0
  72. data/vendor/github.com/zeromq/czmq/bindings/jni/build.gradle +151 -0
  73. data/vendor/github.com/zeromq/czmq/bindings/jni/ci_build.sh +96 -0
  74. data/vendor/github.com/zeromq/czmq/bindings/jni/gradle/wrapper/gradle-wrapper.jar +0 -0
  75. data/vendor/github.com/zeromq/czmq/bindings/jni/gradle/wrapper/gradle-wrapper.properties +6 -0
  76. data/vendor/github.com/zeromq/czmq/bindings/jni/gradlew +164 -0
  77. data/vendor/github.com/zeromq/czmq/bindings/jni/gradlew.bat +90 -0
  78. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/.gitignore +8 -0
  79. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/configure.bat +93 -0
  80. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/platform.h +1 -0
  81. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Common.props +21 -0
  82. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DLL.props +16 -0
  83. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Debug.props +29 -0
  84. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DebugDEXE.props +21 -0
  85. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DebugDLL.props +20 -0
  86. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DebugLEXE.props +20 -0
  87. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DebugLIB.props +21 -0
  88. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DebugLTCG.props +20 -0
  89. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/DebugSEXE.props +21 -0
  90. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/EXE.props +17 -0
  91. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/LIB.props +16 -0
  92. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/LTCG.props +13 -0
  93. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Link.props +21 -0
  94. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Messages.props +15 -0
  95. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Output.props +30 -0
  96. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Release.props +41 -0
  97. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/ReleaseDEXE.props +20 -0
  98. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/ReleaseDLL.props +19 -0
  99. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/ReleaseLEXE.props +20 -0
  100. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/ReleaseLIB.props +19 -0
  101. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/ReleaseLTCG.props +19 -0
  102. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/ReleaseSEXE.props +20 -0
  103. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/Win32.props +20 -0
  104. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/properties/x64.props +23 -0
  105. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/resource.h +14 -0
  106. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/resource.rc +94 -0
  107. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2010/build.bat +48 -0
  108. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2010/call_javah.bat +84 -0
  109. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2010/czmq.sln +25 -0
  110. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2010/libczmqjni/libczmqjni.props +69 -0
  111. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2010/libczmqjni/libczmqjni.vcxproj +165 -0
  112. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2010/libczmqjni/libczmqjni.vcxproj.filters +210 -0
  113. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2012/build.bat +48 -0
  114. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2012/call_javah.bat +84 -0
  115. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2012/czmq.sln +25 -0
  116. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2012/libczmqjni/libczmqjni.props +69 -0
  117. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2012/libczmqjni/libczmqjni.vcxproj +165 -0
  118. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2012/libczmqjni/libczmqjni.vcxproj.filters +210 -0
  119. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2013/build.bat +48 -0
  120. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2013/call_javah.bat +84 -0
  121. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2013/czmq.sln +25 -0
  122. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2013/libczmqjni/libczmqjni.props +69 -0
  123. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2013/libczmqjni/libczmqjni.vcxproj +165 -0
  124. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2013/libczmqjni/libczmqjni.vcxproj.filters +210 -0
  125. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2015/build.bat +48 -0
  126. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2015/call_javah.bat +84 -0
  127. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2015/czmq.sln +25 -0
  128. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2015/libczmqjni/libczmqjni.props +69 -0
  129. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2015/libczmqjni/libczmqjni.vcxproj +165 -0
  130. data/vendor/github.com/zeromq/czmq/bindings/jni/msvc/vs2015/libczmqjni/libczmqjni.vcxproj.filters +210 -0
  131. data/vendor/github.com/zeromq/czmq/bindings/jni/settings.gradle +1 -0
  132. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zarmour.c +132 -0
  133. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zcert.c +188 -0
  134. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zcertstore.c +69 -0
  135. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zchunk.c +191 -0
  136. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zclock.c +54 -0
  137. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zconfig.c +252 -0
  138. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zdigest.c +66 -0
  139. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zdir.c +116 -0
  140. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_ZdirPatch.c +88 -0
  141. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zfile.c +186 -0
  142. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zframe.c +199 -0
  143. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zhash.c +174 -0
  144. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zhashx.c +175 -0
  145. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Ziflist.c +112 -0
  146. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zlist.c +135 -0
  147. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zlistx.c +189 -0
  148. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zloop.c +95 -0
  149. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zmsg.c +261 -0
  150. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zpoller.c +74 -0
  151. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zproc.c +278 -0
  152. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zsock.c +1310 -0
  153. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zstr.c +108 -0
  154. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zsys.c +445 -0
  155. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Ztimerset.c +68 -0
  156. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Ztrie.c +86 -0
  157. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/c/org_zeromq_czmq_Zuuid.c +125 -0
  158. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zarmour.java +148 -0
  159. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zcert.java +178 -0
  160. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zcertstore.java +94 -0
  161. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zchunk.java +204 -0
  162. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zclock.java +67 -0
  163. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zconfig.java +253 -0
  164. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zdigest.java +78 -0
  165. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zdir.java +159 -0
  166. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/ZdirPatch.java +96 -0
  167. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zfile.java +217 -0
  168. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zframe.java +212 -0
  169. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zhash.java +223 -0
  170. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zhashx.java +248 -0
  171. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Ziflist.java +124 -0
  172. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zlist.java +171 -0
  173. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zlistx.java +247 -0
  174. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zloop.java +134 -0
  175. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zmsg.java +308 -0
  176. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zpoller.java +105 -0
  177. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zproc.java +331 -0
  178. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsock.java +1556 -0
  179. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zstr.java +117 -0
  180. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zsys.java +534 -0
  181. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Ztimerset.java +87 -0
  182. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Ztrie.java +102 -0
  183. data/vendor/github.com/zeromq/czmq/bindings/jni/src/main/java/org/zeromq/czmq/Zuuid.java +127 -0
  184. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZarmourTest.java +25 -0
  185. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZcertTest.java +25 -0
  186. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZcertstoreTest.java +25 -0
  187. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZchunkTest.java +25 -0
  188. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZclockTest.java +25 -0
  189. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZconfigTest.java +25 -0
  190. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZdigestTest.java +25 -0
  191. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZdirPatchTest.java +25 -0
  192. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZdirTest.java +25 -0
  193. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZfileTest.java +25 -0
  194. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZframeTest.java +25 -0
  195. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZhashTest.java +25 -0
  196. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZhashxTest.java +25 -0
  197. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZiflistTest.java +25 -0
  198. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZlistTest.java +25 -0
  199. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZlistxTest.java +25 -0
  200. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZloopTest.java +25 -0
  201. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZmsgTest.java +25 -0
  202. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZpollerTest.java +25 -0
  203. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZprocTest.java +25 -0
  204. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZsockTest.java +25 -0
  205. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZstrTest.java +25 -0
  206. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZsysTest.java +25 -0
  207. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZtimersetTest.java +25 -0
  208. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZtrieTest.java +25 -0
  209. data/vendor/github.com/zeromq/czmq/bindings/jni/src/test/java/org/zeromq/czmq/ZuuidTest.java +25 -0
  210. data/vendor/github.com/zeromq/czmq/bindings/lua_ffi/czmq_ffi.lua +4079 -0
  211. data/vendor/github.com/zeromq/czmq/bindings/nodejs/.gitignore +10 -0
  212. data/vendor/github.com/zeromq/czmq/bindings/nodejs/.prebuildrc +2 -0
  213. data/vendor/github.com/zeromq/czmq/bindings/nodejs/README.md +4373 -0
  214. data/vendor/github.com/zeromq/czmq/bindings/nodejs/binding.cc +8324 -0
  215. data/vendor/github.com/zeromq/czmq/bindings/nodejs/binding.gyp +49 -0
  216. data/vendor/github.com/zeromq/czmq/bindings/nodejs/binding.h +952 -0
  217. data/vendor/github.com/zeromq/czmq/bindings/nodejs/build.sh +79 -0
  218. data/vendor/github.com/zeromq/czmq/bindings/nodejs/index.js +39 -0
  219. data/vendor/github.com/zeromq/czmq/bindings/nodejs/package.json +26 -0
  220. data/vendor/github.com/zeromq/czmq/bindings/nodejs/test_binding.js +32 -0
  221. data/vendor/github.com/zeromq/czmq/bindings/python/ci_build.sh +59 -0
  222. data/vendor/github.com/zeromq/czmq/bindings/python/czmq/__init__.py +3 -0
  223. data/vendor/github.com/zeromq/czmq/bindings/python/czmq/_czmq_ctypes.py +8344 -0
  224. data/vendor/github.com/zeromq/czmq/bindings/python/test.py +1078 -0
  225. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/README.md +28 -0
  226. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zactor.py +78 -0
  227. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zargs.py +133 -0
  228. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zarmour.py +124 -0
  229. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zcert.py +132 -0
  230. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zcertstore.py +84 -0
  231. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zchunk.py +192 -0
  232. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zclock.py +59 -0
  233. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zconfig.py +211 -0
  234. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zdigest.py +64 -0
  235. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zdir.py +144 -0
  236. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/ZdirPatch.py +79 -0
  237. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zfile.py +185 -0
  238. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zframe.py +160 -0
  239. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zhash.py +197 -0
  240. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zhashx.py +271 -0
  241. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Ziflist.py +103 -0
  242. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zlist.py +176 -0
  243. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zlistx.py +235 -0
  244. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zloop.py +171 -0
  245. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zmsg.py +250 -0
  246. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zpoller.py +89 -0
  247. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zproc.py +287 -0
  248. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zsock.py +1283 -0
  249. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zstr.py +123 -0
  250. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zsys.py +532 -0
  251. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Ztimerset.py +78 -0
  252. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Ztrie.py +93 -0
  253. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/Zuuid.py +100 -0
  254. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/__init__.py +33 -0
  255. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/_cdefs.inc +4081 -0
  256. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/build.py +345 -0
  257. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/cdefs.py +4086 -0
  258. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/dlopen.py +33 -0
  259. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/czmq_cffi/utils.py +50 -0
  260. data/vendor/github.com/zeromq/czmq/bindings/python_cffi/setup.py +23 -0
  261. data/vendor/github.com/zeromq/czmq/bindings/qml/.gitignore +1 -0
  262. data/vendor/github.com/zeromq/czmq/bindings/qml/README.md +157 -0
  263. data/vendor/github.com/zeromq/czmq/bindings/qml/Rakefile +34 -0
  264. data/vendor/github.com/zeromq/czmq/bindings/qml/qml_czmq_bindings.pro +136 -0
  265. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZactor.cpp +88 -0
  266. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZactor.h +86 -0
  267. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZargs.cpp +121 -0
  268. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZargs.h +105 -0
  269. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZarmour.cpp +135 -0
  270. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZarmour.h +108 -0
  271. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZcert.cpp +166 -0
  272. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZcert.h +122 -0
  273. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZcertstore.cpp +95 -0
  274. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZcertstore.h +93 -0
  275. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZchunk.cpp +214 -0
  276. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZchunk.h +149 -0
  277. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZclock.cpp +67 -0
  278. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZclock.h +77 -0
  279. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZconfig.cpp +255 -0
  280. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZconfig.h +165 -0
  281. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZdigest.cpp +70 -0
  282. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZdigest.h +78 -0
  283. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZdir.cpp +158 -0
  284. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZdir.h +134 -0
  285. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZdirPatch.cpp +89 -0
  286. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZdirPatch.h +84 -0
  287. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZfile.cpp +204 -0
  288. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZfile.h +152 -0
  289. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZframe.cpp +200 -0
  290. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZframe.h +143 -0
  291. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZhash.cpp +219 -0
  292. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZhash.h +174 -0
  293. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZhashx.cpp +308 -0
  294. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZhashx.h +225 -0
  295. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZiflist.cpp +111 -0
  296. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZiflist.h +96 -0
  297. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZlist.cpp +184 -0
  298. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZlist.h +148 -0
  299. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZlistx.cpp +244 -0
  300. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZlistx.h +184 -0
  301. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZloop.cpp +177 -0
  302. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZloop.h +149 -0
  303. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZmsg.cpp +313 -0
  304. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZmsg.h +209 -0
  305. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZpoller.cpp +95 -0
  306. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZpoller.h +97 -0
  307. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZproc.cpp +296 -0
  308. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZproc.h +211 -0
  309. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZsock.cpp +1471 -0
  310. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZsock.h +882 -0
  311. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZstr.cpp +137 -0
  312. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZstr.h +120 -0
  313. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZsys.cpp +541 -0
  314. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZsys.h +373 -0
  315. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZtimerset.cpp +84 -0
  316. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZtimerset.h +86 -0
  317. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZtrie.cpp +101 -0
  318. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZtrie.h +95 -0
  319. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZuuid.cpp +116 -0
  320. data/vendor/github.com/zeromq/czmq/bindings/qml/src/QmlZuuid.h +99 -0
  321. data/vendor/github.com/zeromq/czmq/bindings/qml/src/qml_czmq_plugin.h +174 -0
  322. data/vendor/github.com/zeromq/czmq/bindings/qml/src/qmldir +2 -0
  323. data/vendor/github.com/zeromq/czmq/bindings/qml/test/tst_QmlCZMQ.qml +16 -0
  324. data/vendor/github.com/zeromq/czmq/bindings/qt/README.md +87 -0
  325. data/vendor/github.com/zeromq/czmq/bindings/qt/buildlib/buildlib.pro +36 -0
  326. data/vendor/github.com/zeromq/czmq/bindings/qt/common.pri +20 -0
  327. data/vendor/github.com/zeromq/czmq/bindings/qt/config.pri +1 -0
  328. data/vendor/github.com/zeromq/czmq/bindings/qt/qczmq.pro +13 -0
  329. data/vendor/github.com/zeromq/czmq/bindings/qt/selftest/main.cpp +57 -0
  330. data/vendor/github.com/zeromq/czmq/bindings/qt/selftest/selftest.pro +19 -0
  331. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qczmq.h +96 -0
  332. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qczmq.pri +81 -0
  333. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzactor.cpp +98 -0
  334. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzactor.h +61 -0
  335. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzargs.cpp +130 -0
  336. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzargs.h +72 -0
  337. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzarmour.cpp +162 -0
  338. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzarmour.h +83 -0
  339. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzcert.cpp +191 -0
  340. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzcert.h +97 -0
  341. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzcertstore.cpp +105 -0
  342. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzcertstore.h +68 -0
  343. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzchunk.cpp +250 -0
  344. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzchunk.h +124 -0
  345. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzclock.cpp +78 -0
  346. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzclock.h +52 -0
  347. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzconfig.cpp +292 -0
  348. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzconfig.h +140 -0
  349. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzdigest.cpp +80 -0
  350. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzdigest.h +53 -0
  351. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzdir.cpp +176 -0
  352. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzdir.h +109 -0
  353. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzdirpatch.cpp +101 -0
  354. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzdirpatch.h +59 -0
  355. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzfile.cpp +243 -0
  356. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzfile.h +127 -0
  357. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzframe.cpp +231 -0
  358. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzframe.h +118 -0
  359. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzhash.cpp +250 -0
  360. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzhash.h +149 -0
  361. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzhashx.cpp +350 -0
  362. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzhashx.h +200 -0
  363. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qziflist.cpp +133 -0
  364. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qziflist.h +71 -0
  365. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzlist.cpp +220 -0
  366. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzlist.h +123 -0
  367. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzlistx.cpp +296 -0
  368. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzlistx.h +159 -0
  369. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzloop.cpp +211 -0
  370. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzloop.h +124 -0
  371. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzmsg.cpp +354 -0
  372. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzmsg.h +184 -0
  373. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzpoller.cpp +100 -0
  374. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzpoller.h +67 -0
  375. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzproc.cpp +365 -0
  376. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzproc.h +186 -0
  377. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzsock.cpp +1719 -0
  378. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzsock.h +815 -0
  379. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzstr.cpp +128 -0
  380. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzstr.h +78 -0
  381. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzsys.cpp +600 -0
  382. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzsys.h +321 -0
  383. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qztimerset.cpp +98 -0
  384. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qztimerset.h +61 -0
  385. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qztrie.cpp +117 -0
  386. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qztrie.h +70 -0
  387. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzuuid.cpp +135 -0
  388. data/vendor/github.com/zeromq/czmq/bindings/qt/src/qzuuid.h +74 -0
  389. data/vendor/github.com/zeromq/czmq/bindings/ruby/Rakefile +8 -0
  390. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi.rb +875 -0
  391. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/version.rb +15 -0
  392. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zactor.rb +219 -0
  393. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zargs.rb +259 -0
  394. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zarmour.rb +286 -0
  395. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zcert.rb +304 -0
  396. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zcertstore.rb +224 -0
  397. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zchunk.rb +388 -0
  398. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zclock.rb +140 -0
  399. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zconfig.rb +462 -0
  400. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zdigest.rb +156 -0
  401. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zdir.rb +283 -0
  402. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zdir_patch.rb +194 -0
  403. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zfile.rb +361 -0
  404. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zframe.rb +360 -0
  405. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zhash.rb +386 -0
  406. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zhashx.rb +617 -0
  407. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/ziflist.rb +219 -0
  408. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zlist.rb +365 -0
  409. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zlistx.rb +478 -0
  410. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zloop.rb +396 -0
  411. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zmsg.rb +515 -0
  412. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zpoller.rb +194 -0
  413. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zproc.rb +497 -0
  414. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zsock.rb +4673 -0
  415. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zstr.rb +242 -0
  416. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zsys.rb +836 -0
  417. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/ztimerset.rb +203 -0
  418. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/ztrie.rb +221 -0
  419. data/vendor/github.com/zeromq/czmq/bindings/ruby/lib/czmq/ffi/zuuid.rb +227 -0
  420. data/vendor/github.com/zeromq/czmq/bindings/ruby/spec/ffi_spec.rb +15 -0
  421. data/vendor/github.com/zeromq/czmq/bindings/ruby/spec/spec_helper.rb +8 -0
  422. data/vendor/github.com/zeromq/czmq/builds/android/android_build_helper.sh +298 -0
  423. data/vendor/github.com/zeromq/czmq/builds/android/build.sh +94 -0
  424. data/vendor/github.com/zeromq/czmq/builds/android/ci_build.sh +41 -0
  425. data/vendor/github.com/zeromq/czmq/builds/check_zproject/ci_build.sh +52 -0
  426. data/vendor/github.com/zeromq/czmq/builds/check_zproto/ci_build.sh +23 -0
  427. data/vendor/github.com/zeromq/czmq/builds/cmake/ci_build.sh +93 -0
  428. data/vendor/github.com/zeromq/czmq/builds/cygwin/Makefile.cygwin +32 -0
  429. data/vendor/github.com/zeromq/czmq/builds/docs/ci_build.sh +24 -0
  430. data/vendor/github.com/zeromq/czmq/builds/gyp/.gitignore +5 -0
  431. data/vendor/github.com/zeromq/czmq/builds/gyp/README.md +33 -0
  432. data/vendor/github.com/zeromq/czmq/builds/gyp/platform.h +46 -0
  433. data/vendor/github.com/zeromq/czmq/builds/gyp/project.gyp +195 -0
  434. data/vendor/github.com/zeromq/czmq/builds/mingw32/Makefile.mingw32 +33 -0
  435. data/vendor/github.com/zeromq/czmq/builds/mingw32/platform.h +0 -0
  436. data/vendor/github.com/zeromq/czmq/builds/msvc/.gitignore +8 -0
  437. data/vendor/github.com/zeromq/czmq/builds/msvc/configure.bat +93 -0
  438. data/vendor/github.com/zeromq/czmq/builds/msvc/nuget/package.bat +14 -0
  439. data/vendor/github.com/zeromq/czmq/builds/msvc/nuget/package.nuspec +92 -0
  440. data/vendor/github.com/zeromq/czmq/builds/msvc/nuget/package.targets +128 -0
  441. data/vendor/github.com/zeromq/czmq/builds/msvc/nuget/package.xml +29 -0
  442. data/vendor/github.com/zeromq/czmq/builds/msvc/platform.h +1 -0
  443. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Common.props +21 -0
  444. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DLL.props +16 -0
  445. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Debug.props +29 -0
  446. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DebugDEXE.props +21 -0
  447. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DebugDLL.props +20 -0
  448. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DebugLEXE.props +20 -0
  449. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DebugLIB.props +21 -0
  450. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DebugLTCG.props +20 -0
  451. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/DebugSEXE.props +21 -0
  452. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/EXE.props +17 -0
  453. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/LIB.props +16 -0
  454. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/LTCG.props +13 -0
  455. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Link.props +21 -0
  456. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Messages.props +15 -0
  457. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Output.props +30 -0
  458. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Release.props +41 -0
  459. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/ReleaseDEXE.props +20 -0
  460. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/ReleaseDLL.props +19 -0
  461. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/ReleaseLEXE.props +20 -0
  462. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/ReleaseLIB.props +19 -0
  463. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/ReleaseLTCG.props +19 -0
  464. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/ReleaseSEXE.props +20 -0
  465. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/Win32.props +20 -0
  466. data/vendor/github.com/zeromq/czmq/builds/msvc/properties/x64.props +23 -0
  467. data/vendor/github.com/zeromq/czmq/builds/msvc/resource.h +14 -0
  468. data/vendor/github.com/zeromq/czmq/builds/msvc/resource.rc +94 -0
  469. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2008/czmq/czmq.sln +65 -0
  470. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2008/czmq/czmq.vcproj +1411 -0
  471. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/.gitignore +1 -0
  472. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/build.bat +129 -0
  473. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/czmq.import.props +59 -0
  474. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/czmq.sln +81 -0
  475. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/czmq_selftest/czmq_selftest.props +75 -0
  476. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/czmq_selftest/czmq_selftest.vcxproj +146 -0
  477. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/libczmq/libczmq.import.xml +29 -0
  478. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/libczmq/libczmq.props +81 -0
  479. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/libczmq/libczmq.vcxproj +215 -0
  480. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/libczmq/libczmq.vcxproj.filters +203 -0
  481. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/test_randof/test_randof.props +75 -0
  482. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/test_randof/test_randof.vcxproj +146 -0
  483. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/zmakecert/zmakecert.props +75 -0
  484. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/zmakecert/zmakecert.vcxproj +146 -0
  485. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/zsp/zsp.props +75 -0
  486. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2010/zsp/zsp.vcxproj +146 -0
  487. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/.gitignore +1 -0
  488. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/build.bat +129 -0
  489. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/czmq.import.props +59 -0
  490. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/czmq.sln +81 -0
  491. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/czmq_selftest/czmq_selftest.props +75 -0
  492. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/czmq_selftest/czmq_selftest.vcxproj +146 -0
  493. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/libczmq/libczmq.import.xml +29 -0
  494. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/libczmq/libczmq.props +81 -0
  495. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/libczmq/libczmq.vcxproj +215 -0
  496. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/libczmq/libczmq.vcxproj.filters +203 -0
  497. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/test_randof/test_randof.props +75 -0
  498. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/test_randof/test_randof.vcxproj +146 -0
  499. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/zmakecert/zmakecert.props +75 -0
  500. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/zmakecert/zmakecert.vcxproj +146 -0
  501. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/zsp/zsp.props +75 -0
  502. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2012/zsp/zsp.vcxproj +146 -0
  503. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/build.bat +129 -0
  504. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/czmq.import.props +59 -0
  505. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/czmq.sln +81 -0
  506. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/czmq_selftest/czmq_selftest.props +75 -0
  507. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/czmq_selftest/czmq_selftest.vcxproj +146 -0
  508. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/libczmq/libczmq.import.xml +29 -0
  509. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/libczmq/libczmq.props +81 -0
  510. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/libczmq/libczmq.vcxproj +215 -0
  511. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/libczmq/libczmq.vcxproj.filters +203 -0
  512. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/test_randof/test_randof.props +75 -0
  513. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/test_randof/test_randof.vcxproj +146 -0
  514. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/zmakecert/zmakecert.props +75 -0
  515. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/zmakecert/zmakecert.vcxproj +146 -0
  516. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/zsp/zsp.props +75 -0
  517. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2013/zsp/zsp.vcxproj +146 -0
  518. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/build.bat +129 -0
  519. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/czmq.import.props +59 -0
  520. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/czmq.sln +81 -0
  521. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/czmq_selftest/czmq_selftest.props +75 -0
  522. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/czmq_selftest/czmq_selftest.vcxproj +146 -0
  523. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/libczmq/libczmq.import.xml +29 -0
  524. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/libczmq/libczmq.props +81 -0
  525. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/libczmq/libczmq.vcxproj +215 -0
  526. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/libczmq/libczmq.vcxproj.filters +203 -0
  527. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/test_randof/test_randof.props +75 -0
  528. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/test_randof/test_randof.vcxproj +146 -0
  529. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/zmakecert/zmakecert.props +75 -0
  530. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/zmakecert/zmakecert.vcxproj +146 -0
  531. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/zsp/zsp.props +75 -0
  532. data/vendor/github.com/zeromq/czmq/builds/msvc/vs2015/zsp/zsp.vcxproj +146 -0
  533. data/vendor/github.com/zeromq/czmq/builds/nuget/czmq.autobuild +49 -0
  534. data/vendor/github.com/zeromq/czmq/builds/nuget/readme.nuget +18 -0
  535. data/vendor/github.com/zeromq/czmq/builds/rpi/.gitignore +8 -0
  536. data/vendor/github.com/zeromq/czmq/builds/rpi/README.md +62 -0
  537. data/vendor/github.com/zeromq/czmq/builds/rpi/build.sh +142 -0
  538. data/vendor/github.com/zeromq/czmq/builds/rpi/build_image.sh +32 -0
  539. data/vendor/github.com/zeromq/czmq/builds/rpi/prepare_img.sh +111 -0
  540. data/vendor/github.com/zeromq/czmq/builds/stable_zmq/ci_build.sh +62 -0
  541. data/vendor/github.com/zeromq/czmq/builds/valgrind/ci_build.sh +43 -0
  542. data/vendor/github.com/zeromq/czmq/ci_build.sh +317 -0
  543. data/vendor/github.com/zeromq/czmq/ci_deploy.sh +29 -0
  544. data/vendor/github.com/zeromq/czmq/ci_deploy_obs.sh +23 -0
  545. data/vendor/github.com/zeromq/czmq/configure.ac +856 -0
  546. data/vendor/github.com/zeromq/czmq/doc/.gitignore +91 -0
  547. data/vendor/github.com/zeromq/czmq/doc/Makefile.am +222 -0
  548. data/vendor/github.com/zeromq/czmq/doc/asciidoc.conf +64 -0
  549. data/vendor/github.com/zeromq/czmq/doc/czmq.adoc +51 -0
  550. data/vendor/github.com/zeromq/czmq/doc/czmq.txt +380 -0
  551. data/vendor/github.com/zeromq/czmq/doc/mkman +217 -0
  552. data/vendor/github.com/zeromq/czmq/doc/mkmans +15 -0
  553. data/vendor/github.com/zeromq/czmq/doc/wdput +43 -0
  554. data/vendor/github.com/zeromq/czmq/examples/security/LICENSE +18 -0
  555. data/vendor/github.com/zeromq/czmq/examples/security/README.txt +9 -0
  556. data/vendor/github.com/zeromq/czmq/examples/security/grasslands.c +32 -0
  557. data/vendor/github.com/zeromq/czmq/examples/security/hello.c +13 -0
  558. data/vendor/github.com/zeromq/czmq/examples/security/ironhouse.c +64 -0
  559. data/vendor/github.com/zeromq/czmq/examples/security/ironhouse2.c +123 -0
  560. data/vendor/github.com/zeromq/czmq/examples/security/ironhouse2_v2.c +107 -0
  561. data/vendor/github.com/zeromq/czmq/examples/security/passwords +2 -0
  562. data/vendor/github.com/zeromq/czmq/examples/security/stonehouse.c +59 -0
  563. data/vendor/github.com/zeromq/czmq/examples/security/strawhouse.c +49 -0
  564. data/vendor/github.com/zeromq/czmq/examples/security/woodhouse.c +47 -0
  565. data/vendor/github.com/zeromq/czmq/images/README_1.png +0 -0
  566. data/vendor/github.com/zeromq/czmq/include/.gitignore +1 -0
  567. data/vendor/github.com/zeromq/czmq/include/czmq.h +39 -0
  568. data/vendor/github.com/zeromq/czmq/include/czmq_library.h +190 -0
  569. data/vendor/github.com/zeromq/czmq/include/czmq_prelude.h +735 -0
  570. data/vendor/github.com/zeromq/czmq/include/test_zgossip.h +44 -0
  571. data/vendor/github.com/zeromq/czmq/include/zactor.h +94 -0
  572. data/vendor/github.com/zeromq/czmq/include/zargs.h +134 -0
  573. data/vendor/github.com/zeromq/czmq/include/zarmour.h +114 -0
  574. data/vendor/github.com/zeromq/czmq/include/zauth.h +100 -0
  575. data/vendor/github.com/zeromq/czmq/include/zbeacon.h +86 -0
  576. data/vendor/github.com/zeromq/czmq/include/zcert.h +133 -0
  577. data/vendor/github.com/zeromq/czmq/include/zcertstore.h +101 -0
  578. data/vendor/github.com/zeromq/czmq/include/zchunk.h +163 -0
  579. data/vendor/github.com/zeromq/czmq/include/zclock.h +73 -0
  580. data/vendor/github.com/zeromq/czmq/include/zconfig.h +199 -0
  581. data/vendor/github.com/zeromq/czmq/include/zdigest.h +65 -0
  582. data/vendor/github.com/zeromq/czmq/include/zdir.h +149 -0
  583. data/vendor/github.com/zeromq/czmq/include/zdir_patch.h +82 -0
  584. data/vendor/github.com/zeromq/czmq/include/zfile.h +185 -0
  585. data/vendor/github.com/zeromq/czmq/include/zframe.h +177 -0
  586. data/vendor/github.com/zeromq/czmq/include/zgossip.h +95 -0
  587. data/vendor/github.com/zeromq/czmq/include/zhash.h +183 -0
  588. data/vendor/github.com/zeromq/czmq/include/zhashx.h +279 -0
  589. data/vendor/github.com/zeromq/czmq/include/ziflist.h +98 -0
  590. data/vendor/github.com/zeromq/czmq/include/zlist.h +158 -0
  591. data/vendor/github.com/zeromq/czmq/include/zlistx.h +205 -0
  592. data/vendor/github.com/zeromq/czmq/include/zloop.h +163 -0
  593. data/vendor/github.com/zeromq/czmq/include/zmonitor.h +73 -0
  594. data/vendor/github.com/zeromq/czmq/include/zmsg.h +280 -0
  595. data/vendor/github.com/zeromq/czmq/include/zpoller.h +87 -0
  596. data/vendor/github.com/zeromq/czmq/include/zproc.h +270 -0
  597. data/vendor/github.com/zeromq/czmq/include/zproxy.h +111 -0
  598. data/vendor/github.com/zeromq/czmq/include/zrex.h +82 -0
  599. data/vendor/github.com/zeromq/czmq/include/zsock.h +1209 -0
  600. data/vendor/github.com/zeromq/czmq/include/zstr.h +135 -0
  601. data/vendor/github.com/zeromq/czmq/include/zsys.h +439 -0
  602. data/vendor/github.com/zeromq/czmq/include/ztimerset.h +90 -0
  603. data/vendor/github.com/zeromq/czmq/include/ztrie.h +106 -0
  604. data/vendor/github.com/zeromq/czmq/include/zuuid.h +96 -0
  605. data/vendor/github.com/zeromq/czmq/issues/README.md +6 -0
  606. data/vendor/github.com/zeromq/czmq/issues/c +520 -0
  607. data/vendor/github.com/zeromq/czmq/issues/issue-407.c +146 -0
  608. data/vendor/github.com/zeromq/czmq/license.xml +9 -0
  609. data/vendor/github.com/zeromq/czmq/mkdoc +7 -0
  610. data/vendor/github.com/zeromq/czmq/model/chkopts.pl +47 -0
  611. data/vendor/github.com/zeromq/czmq/model/rename_class +42 -0
  612. data/vendor/github.com/zeromq/czmq/packaging/debian/changelog +5 -0
  613. data/vendor/github.com/zeromq/czmq/packaging/debian/compat +1 -0
  614. data/vendor/github.com/zeromq/czmq/packaging/debian/control +86 -0
  615. data/vendor/github.com/zeromq/czmq/packaging/debian/copyright +13 -0
  616. data/vendor/github.com/zeromq/czmq/packaging/debian/czmq.dsc.obs +20 -0
  617. data/vendor/github.com/zeromq/czmq/packaging/debian/czmq.install +2 -0
  618. data/vendor/github.com/zeromq/czmq/packaging/debian/czmq.manpages +1 -0
  619. data/vendor/github.com/zeromq/czmq/packaging/debian/format +1 -0
  620. data/vendor/github.com/zeromq/czmq/packaging/debian/libczmq-dev.install +4 -0
  621. data/vendor/github.com/zeromq/czmq/packaging/debian/libczmq-dev.manpages +2 -0
  622. data/vendor/github.com/zeromq/czmq/packaging/debian/libczmq4.install +1 -0
  623. data/vendor/github.com/zeromq/czmq/packaging/debian/rules +96 -0
  624. data/vendor/github.com/zeromq/czmq/packaging/dist/gitlog2changelog.py +125 -0
  625. data/vendor/github.com/zeromq/czmq/packaging/obs/_service +91 -0
  626. data/vendor/github.com/zeromq/czmq/packaging/redhat/czmq.spec +202 -0
  627. data/vendor/github.com/zeromq/czmq/project.gyp +121 -0
  628. data/vendor/github.com/zeromq/czmq/project.xml +99 -0
  629. data/vendor/github.com/zeromq/czmq/setup.py +9 -0
  630. data/vendor/github.com/zeromq/czmq/src/.gitignore +20 -0
  631. data/vendor/github.com/zeromq/czmq/src/.valgrind.supp +33 -0
  632. data/vendor/github.com/zeromq/czmq/src/CMakeLists-local.txt +22 -0
  633. data/vendor/github.com/zeromq/czmq/src/Makemodule-local.am +15 -0
  634. data/vendor/github.com/zeromq/czmq/src/Makemodule.am +353 -0
  635. data/vendor/github.com/zeromq/czmq/src/czmq_classes.h +388 -0
  636. data/vendor/github.com/zeromq/czmq/src/czmq_private_selftest.c +40 -0
  637. data/vendor/github.com/zeromq/czmq/src/czmq_selftest.c +220 -0
  638. data/vendor/github.com/zeromq/czmq/src/foreign/sha1/sha1.h +76 -0
  639. data/vendor/github.com/zeromq/czmq/src/foreign/sha1/sha1.inc_c +335 -0
  640. data/vendor/github.com/zeromq/czmq/src/foreign/slre/readme.txt +83 -0
  641. data/vendor/github.com/zeromq/czmq/src/foreign/slre/slre.h +92 -0
  642. data/vendor/github.com/zeromq/czmq/src/foreign/slre/slre.inc_c +660 -0
  643. data/vendor/github.com/zeromq/czmq/src/libczmq.pc.in +24 -0
  644. data/vendor/github.com/zeromq/czmq/src/python_cffi.inc +17 -0
  645. data/vendor/github.com/zeromq/czmq/src/selftest-ro/.gitkeep +0 -0
  646. data/vendor/github.com/zeromq/czmq/src/selftest.cfg +5 -0
  647. data/vendor/github.com/zeromq/czmq/src/sockopts.gsl +36 -0
  648. data/vendor/github.com/zeromq/czmq/src/sockopts.xml +193 -0
  649. data/vendor/github.com/zeromq/czmq/src/test_randof.c +182 -0
  650. data/vendor/github.com/zeromq/czmq/src/test_zgossip.c +188 -0
  651. data/vendor/github.com/zeromq/czmq/src/valgrind.supp +14 -0
  652. data/vendor/github.com/zeromq/czmq/src/zactor.c +338 -0
  653. data/vendor/github.com/zeromq/czmq/src/zargs.c +289 -0
  654. data/vendor/github.com/zeromq/czmq/src/zarmour.c +941 -0
  655. data/vendor/github.com/zeromq/czmq/src/zauth.c +821 -0
  656. data/vendor/github.com/zeromq/czmq/src/zbeacon.c +651 -0
  657. data/vendor/github.com/zeromq/czmq/src/zcert.c +557 -0
  658. data/vendor/github.com/zeromq/czmq/src/zcertstore.c +407 -0
  659. data/vendor/github.com/zeromq/czmq/src/zchunk.c +609 -0
  660. data/vendor/github.com/zeromq/czmq/src/zclock.c +237 -0
  661. data/vendor/github.com/zeromq/czmq/src/zconfig.c +1369 -0
  662. data/vendor/github.com/zeromq/czmq/src/zdigest.c +163 -0
  663. data/vendor/github.com/zeromq/czmq/src/zdir.c +1138 -0
  664. data/vendor/github.com/zeromq/czmq/src/zdir_patch.c +227 -0
  665. data/vendor/github.com/zeromq/czmq/src/zfile.c +920 -0
  666. data/vendor/github.com/zeromq/czmq/src/zframe.c +756 -0
  667. data/vendor/github.com/zeromq/czmq/src/zgossip.c +689 -0
  668. data/vendor/github.com/zeromq/czmq/src/zgossip.xml +57 -0
  669. data/vendor/github.com/zeromq/czmq/src/zgossip_engine.inc +1008 -0
  670. data/vendor/github.com/zeromq/czmq/src/zgossip_msg.bnf +43 -0
  671. data/vendor/github.com/zeromq/czmq/src/zgossip_msg.c +688 -0
  672. data/vendor/github.com/zeromq/czmq/src/zgossip_msg.h +127 -0
  673. data/vendor/github.com/zeromq/czmq/src/zgossip_msg.xml +46 -0
  674. data/vendor/github.com/zeromq/czmq/src/zhash.c +956 -0
  675. data/vendor/github.com/zeromq/czmq/src/zhash_primes.inc +329 -0
  676. data/vendor/github.com/zeromq/czmq/src/zhashx.c +1369 -0
  677. data/vendor/github.com/zeromq/czmq/src/ziflist.c +517 -0
  678. data/vendor/github.com/zeromq/czmq/src/zlist.c +634 -0
  679. data/vendor/github.com/zeromq/czmq/src/zlistx.c +753 -0
  680. data/vendor/github.com/zeromq/czmq/src/zloop.c +1000 -0
  681. data/vendor/github.com/zeromq/czmq/src/zmakecert.c +64 -0
  682. data/vendor/github.com/zeromq/czmq/src/zmonitor.c +447 -0
  683. data/vendor/github.com/zeromq/czmq/src/zmsg.c +1258 -0
  684. data/vendor/github.com/zeromq/czmq/src/zpoller.c +397 -0
  685. data/vendor/github.com/zeromq/czmq/src/zproc.c +1160 -0
  686. data/vendor/github.com/zeromq/czmq/src/zproxy.c +791 -0
  687. data/vendor/github.com/zeromq/czmq/src/zrex.c +310 -0
  688. data/vendor/github.com/zeromq/czmq/src/zsock.c +2207 -0
  689. data/vendor/github.com/zeromq/czmq/src/zsock_option.gsl +404 -0
  690. data/vendor/github.com/zeromq/czmq/src/zsock_option.inc +3946 -0
  691. data/vendor/github.com/zeromq/czmq/src/zsp.c +118 -0
  692. data/vendor/github.com/zeromq/czmq/src/zstr.c +548 -0
  693. data/vendor/github.com/zeromq/czmq/src/zsys.c +2225 -0
  694. data/vendor/github.com/zeromq/czmq/src/ztimerset.c +227 -0
  695. data/vendor/github.com/zeromq/czmq/src/ztrie.c +809 -0
  696. data/vendor/github.com/zeromq/czmq/src/zuuid.c +344 -0
  697. metadata +780 -0
@@ -0,0 +1,237 @@
1
+ /* =========================================================================
2
+ zclock - millisecond clocks and delays
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
+ @header
15
+ The zclock class provides essential sleep and system time functions,
16
+ used to slow down threads for testing, and calculate timers for polling.
17
+ Wraps the non-portable system calls in a simple portable API.
18
+ @discuss
19
+ The Win32 Sleep() call defaults to 16ms resolution unless the system
20
+ timer resolution is increased with a call to timeBeginPeriod() permitting
21
+ 1ms granularity.
22
+ @end
23
+ */
24
+
25
+ #include "czmq_classes.h"
26
+
27
+ #if defined (__WINDOWS__)
28
+ // --------------------------------------------------------------------------
29
+ // Convert FILETIME "Contains a 64-bit value representing the number of
30
+ // 100-nanosecond intervals since January 1, 1601 (UTC)."
31
+
32
+ static int64_t
33
+ s_filetime_to_msec (const FILETIME *ft)
34
+ {
35
+ // As per Windows documentation for FILETIME, copy the resulting FILETIME
36
+ // structure to a ULARGE_INTEGER structure using memcpy (using memcpy
37
+ // instead of direct assignment can prevent alignment faults on 64-bit
38
+ // Windows).
39
+ ULARGE_INTEGER dateTime;
40
+ memcpy (&dateTime, ft, sizeof (dateTime));
41
+
42
+ return (int64_t) (dateTime.QuadPart / 10000);
43
+ }
44
+
45
+ #endif
46
+
47
+
48
+ // --------------------------------------------------------------------------
49
+ // Sleep for a number of milliseconds
50
+
51
+ void
52
+ zclock_sleep (int msecs)
53
+ {
54
+ #if defined (__UNIX__)
55
+ struct timespec t;
56
+ t.tv_sec = msecs / 1000;
57
+ t.tv_nsec = (msecs % 1000) * 1000000;
58
+ nanosleep (&t, NULL);
59
+ #elif (defined (__WINDOWS__))
60
+ // Windows XP/2000: A value of zero causes the thread to relinquish the
61
+ // remainder of its time slice to any other thread of equal priority that
62
+ // is ready to run. If there are no other threads of equal priority ready
63
+ // to run, the function returns immediately, and the thread continues
64
+ // execution. This behavior changed starting with Windows Server 2003.
65
+
66
+ # if defined (NTDDI_VERSION) && defined (NTDDI_WS03) && (NTDDI_VERSION >= NTDDI_WS03)
67
+ Sleep (msecs);
68
+ # else
69
+ if (msecs > 0)
70
+ Sleep (msecs);
71
+ # endif
72
+ #endif
73
+ }
74
+
75
+
76
+ // --------------------------------------------------------------------------
77
+ // Return current system clock as milliseconds. Note that this clock can
78
+ // jump backwards (if the system clock is changed) so is unsafe to use for
79
+ // timers and time offsets. Use zclock_mono for that instead.
80
+
81
+ int64_t
82
+ zclock_time (void)
83
+ {
84
+ #if defined (__UNIX__)
85
+ struct timeval tv;
86
+ gettimeofday (&tv, NULL);
87
+
88
+ return (int64_t) ((int64_t) tv.tv_sec * 1000 + (int64_t) tv.tv_usec / 1000);
89
+ #elif (defined (__WINDOWS__))
90
+ FILETIME ft;
91
+ GetSystemTimeAsFileTime (&ft);
92
+ return s_filetime_to_msec (&ft);
93
+ #endif
94
+ }
95
+
96
+
97
+ // --------------------------------------------------------------------------
98
+ // Return current monotonic clock in milliseconds. Use this when you compute
99
+ // time offsets. The monotonic clock is not affected by system changes and
100
+ // so will never be reset backwards, unlike a system clock.
101
+
102
+ int64_t
103
+ zclock_mono (void)
104
+ {
105
+ #if (defined (__UTYPE_OSX) || defined (__UTYPE_IOS))
106
+ clock_serv_t cclock;
107
+ mach_timespec_t mts;
108
+ host_get_clock_service (mach_host_self (), SYSTEM_CLOCK, &cclock);
109
+ clock_get_time (cclock, &mts);
110
+ mach_port_deallocate (mach_task_self (), cclock);
111
+ return (int64_t) ((int64_t) mts.tv_sec * 1000 + (int64_t) mts.tv_nsec / 1000000);
112
+
113
+ #elif defined (__UNIX__)
114
+ struct timespec ts;
115
+ clock_gettime (CLOCK_MONOTONIC, &ts);
116
+ return (int64_t) ((int64_t) ts.tv_sec * 1000 + (int64_t) ts.tv_nsec / 1000000);
117
+
118
+ #elif (defined (__WINDOWS__))
119
+ // System frequency does not change at run-time, cache it
120
+ static int64_t frequency = 0;
121
+ if (frequency == 0) {
122
+ LARGE_INTEGER freq;
123
+ QueryPerformanceFrequency (&freq);
124
+ // Windows documentation says that XP and later will always return non-zero
125
+ assert (freq.QuadPart != 0);
126
+ frequency = freq.QuadPart;
127
+ }
128
+ LARGE_INTEGER count;
129
+ QueryPerformanceCounter (&count);
130
+ return (int64_t) (count.QuadPart * 1000) / frequency;
131
+ #endif
132
+ }
133
+
134
+
135
+ // --------------------------------------------------------------------------
136
+ // Return current monotonic clock in microseconds. Use this when you compute
137
+ // time offsets. The monotonic clock is not affected by system changes and
138
+ // so will never be reset backwards, unlike a system clock.
139
+
140
+ int64_t
141
+ zclock_usecs (void)
142
+ {
143
+ #if (defined (__UTYPE_OSX) || defined (__UTYPE_IOS))
144
+ clock_serv_t cclock;
145
+ mach_timespec_t mts;
146
+ host_get_clock_service (mach_host_self (), SYSTEM_CLOCK, &cclock);
147
+ clock_get_time (cclock, &mts);
148
+ mach_port_deallocate (mach_task_self (), cclock);
149
+ return (int64_t) ((int64_t) mts.tv_sec * 1000000 + (int64_t) mts.tv_nsec / 1000);
150
+
151
+ #elif defined (__UNIX__)
152
+ struct timespec ts;
153
+ clock_gettime (CLOCK_MONOTONIC, &ts);
154
+ return (int64_t) ((int64_t) ts.tv_sec * 1000000 + (int64_t) ts.tv_nsec / 1000);
155
+
156
+ #elif (defined (__WINDOWS__))
157
+ // System frequency does not change at run-time, cache it
158
+ static int64_t frequency = 0;
159
+ if (frequency == 0) {
160
+ LARGE_INTEGER freq;
161
+ QueryPerformanceFrequency (&freq);
162
+ // Windows documentation says that XP and later will always return non-zero
163
+ assert (freq.QuadPart != 0);
164
+ frequency = freq.QuadPart;
165
+ }
166
+ LARGE_INTEGER count;
167
+ QueryPerformanceCounter (&count);
168
+ return (int64_t) (count.QuadPart * 1000000) / frequency;
169
+ #endif
170
+ }
171
+
172
+
173
+ // --------------------------------------------------------------------------
174
+ // Return formatted date/time as fresh string. Free using zstr_free().
175
+
176
+ char *
177
+ zclock_timestr (void)
178
+ {
179
+ time_t curtime = time (NULL);
180
+ struct tm *loctime = localtime (&curtime);
181
+ char formatted [20];
182
+ strftime (formatted, 20, "%Y-%m-%d %H:%M:%S", loctime);
183
+ return strdup (formatted);
184
+ }
185
+
186
+
187
+ // --------------------------------------------------------------------------
188
+ // DEPRECATED in favor of zsys logging, see issue #519
189
+ // Print formatted string to stdout, prefixed by date/time and
190
+ // terminated with a newline.
191
+
192
+ void
193
+ zclock_log (const char *format, ...)
194
+ {
195
+ time_t curtime = time (NULL);
196
+ struct tm *loctime = localtime (&curtime);
197
+ char formatted [20];
198
+ strftime (formatted, 20, "%y-%m-%d %H:%M:%S ", loctime);
199
+ printf ("%s", formatted);
200
+
201
+ va_list argptr;
202
+ va_start (argptr, format);
203
+ vprintf (format, argptr);
204
+ va_end (argptr);
205
+ printf ("\n");
206
+ fflush (stdout);
207
+ }
208
+
209
+
210
+ // --------------------------------------------------------------------------
211
+ // Self test of this class
212
+ void
213
+ zclock_test (bool verbose)
214
+ {
215
+ printf (" * zclock: ");
216
+
217
+ // @selftest
218
+ int64_t start = zclock_time ();
219
+ zclock_sleep (10);
220
+ assert ((zclock_time () - start) >= 10);
221
+ start = zclock_mono ();
222
+ int64_t usecs = zclock_usecs ();
223
+ zclock_sleep (10);
224
+ assert ((zclock_mono () - start) >= 10);
225
+ assert ((zclock_usecs () - usecs) >= 10000);
226
+ char *timestr = zclock_timestr ();
227
+ if (verbose)
228
+ puts (timestr);
229
+ freen (timestr);
230
+
231
+ #if defined (__WINDOWS__)
232
+ zsys_shutdown();
233
+ #endif
234
+ // @end
235
+
236
+ printf ("OK\n");
237
+ }
@@ -0,0 +1,1369 @@
1
+ /* =========================================================================
2
+ zconfig - work with config files written in rfc.zeromq.org/spec:4/ZPL.
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
+ Lets applications load, work with, and save configuration files.
17
+ This implements rfc.zeromq.org/spec:4/ZPL, which is a simple structured
18
+ text format for configuration files.
19
+ @discuss
20
+ Here is an example ZPL stream and corresponding config structure:
21
+
22
+ context
23
+ iothreads = 1
24
+ verbose = 1 # Ask for a trace
25
+ main
26
+ type = zqueue # ZMQ_DEVICE type
27
+ frontend
28
+ option
29
+ hwm = 1000
30
+ swap = 25000000 # 25MB
31
+ bind = 'inproc://addr1'
32
+ bind = 'ipc://addr2'
33
+ backend
34
+ bind = inproc://addr3
35
+
36
+ root Down = child
37
+ | Across = next
38
+ v
39
+ context-->main
40
+ | |
41
+ | v
42
+ | type=queue-->frontend-->backend
43
+ | | |
44
+ | | v
45
+ | | bind=inproc://addr3
46
+ | v
47
+ | option-->bind=inproc://addr1-->bind=ipc://addr2
48
+ | |
49
+ | v
50
+ | hwm=1000-->swap=25000000
51
+ v
52
+ iothreads=1-->verbose=false
53
+ @end
54
+ */
55
+
56
+ #include "czmq_classes.h"
57
+
58
+ // Structure of our class
59
+
60
+ struct _zconfig_t {
61
+ char *name; // Property name if any
62
+ char *value; // Property value, if any
63
+ struct _zconfig_t
64
+ *child, // First child if any
65
+ *next, // Next sibling if any
66
+ *parent; // Parent if any
67
+ zlist_t *comments; // Comments if any
68
+ zfile_t *file; // Config file handle
69
+ };
70
+
71
+ // Local functions for parsing and saving ZPL tokens
72
+
73
+ static int
74
+ s_collect_level (char **start, int lineno);
75
+ static char *
76
+ s_collect_name (char **start, int lineno);
77
+ static int
78
+ s_verify_eoln (char *readptr, int lineno);
79
+ static char *
80
+ s_collect_value (char **start, int lineno);
81
+ static int
82
+ s_config_save (zconfig_t *self, void *arg, int level);
83
+ static int
84
+ s_config_execute (zconfig_t *self, zconfig_fct handler, void *arg, int level);
85
+
86
+
87
+ // --------------------------------------------------------------------------
88
+ // Constructor
89
+ //
90
+ // Optionally attach new config to parent config, as first or next child.
91
+
92
+ zconfig_t *
93
+ zconfig_new (const char *name, zconfig_t *parent)
94
+ {
95
+ zconfig_t *self = (zconfig_t *) zmalloc (sizeof (zconfig_t));
96
+ assert (self);
97
+
98
+ zconfig_set_name (self, name);
99
+ if (parent) {
100
+ if (parent->child) {
101
+ // Attach as last child of parent
102
+ zconfig_t *last = parent->child;
103
+ while (last->next)
104
+ last = last->next;
105
+ last->next = self;
106
+ }
107
+ else
108
+ // Attach as first child of parent
109
+ parent->child = self;
110
+ }
111
+ self->parent = parent;
112
+ return self;
113
+ }
114
+
115
+
116
+ // --------------------------------------------------------------------------
117
+ // Destructor
118
+
119
+ void
120
+ zconfig_destroy (zconfig_t **self_p)
121
+ {
122
+ assert (self_p);
123
+ if (*self_p) {
124
+ zconfig_t *self = *self_p;
125
+
126
+ // Destroy all children and siblings recursively
127
+ zconfig_destroy (&self->child);
128
+ zconfig_destroy (&self->next);
129
+
130
+ // Destroy other properties and then self
131
+ zlist_destroy (&self->comments);
132
+ zfile_destroy (&self->file);
133
+ freen (self->name);
134
+ freen (self->value);
135
+ freen (self);
136
+ *self_p = NULL;
137
+ }
138
+ }
139
+
140
+
141
+ // --------------------------------------------------------------------------
142
+ // Destroy node and subtree (all children)
143
+
144
+ void
145
+ zconfig_remove (zconfig_t **self_p)
146
+ {
147
+ assert (self_p);
148
+
149
+ if (*self_p == NULL)
150
+ return;
151
+
152
+ zconfig_t *self = *self_p;
153
+
154
+ // Destroy all children
155
+ zconfig_remove_subtree (self);
156
+
157
+ if (self->parent) {
158
+ if (self->parent->child == self) {
159
+ self->parent->child = self->next;
160
+ }
161
+ else {
162
+ zconfig_t *prev = self->parent->child;
163
+ while (prev->next != self) {
164
+ prev = prev->next;
165
+ }
166
+ prev->next = self->next;
167
+ }
168
+ }
169
+
170
+ // Destroy other properties and then self
171
+ zlist_destroy (&self->comments);
172
+ zfile_destroy (&self->file);
173
+ freen (self->name);
174
+ freen (self->value);
175
+ freen (self);
176
+ *self_p = NULL;
177
+ }
178
+
179
+
180
+ // --------------------------------------------------------------------------
181
+ // Destroy subtree (all children)
182
+
183
+ void
184
+ zconfig_remove_subtree (zconfig_t *self)
185
+ {
186
+ assert (self);
187
+
188
+ // Destroy all children
189
+ zconfig_destroy (&self->child);
190
+ self->child = NULL;
191
+ }
192
+
193
+ // --------------------------------------------------------------------------
194
+ // Return name of config item
195
+
196
+ char *
197
+ zconfig_name (zconfig_t *self)
198
+ {
199
+ assert (self);
200
+ return self->name;
201
+ }
202
+
203
+
204
+ // --------------------------------------------------------------------------
205
+ // Return value of config item
206
+
207
+ char *
208
+ zconfig_value (zconfig_t *self)
209
+ {
210
+ assert (self);
211
+ return self->value;
212
+ }
213
+
214
+
215
+ // --------------------------------------------------------------------------
216
+ // Insert or update configuration key with value; leading slash is optional
217
+ // and ignored.
218
+
219
+ void
220
+ zconfig_put (zconfig_t *self, const char *path, const char *value)
221
+ {
222
+ if (*path == '/')
223
+ path++;
224
+
225
+ // Check length of next path segment
226
+ const char *slash = strchr (path, '/');
227
+ size_t length = strlen (path);
228
+ if (slash)
229
+ length = slash - path;
230
+
231
+ // Find or create items starting at first child of root
232
+ zconfig_t *child = self->child;
233
+ while (child) {
234
+ if (strlen (child->name) == length
235
+ && memcmp (child->name, path, length) == 0) {
236
+ // This segment exists
237
+ if (slash) // Recurse to next level
238
+ zconfig_put (child, slash + 1, value);
239
+ else
240
+ zconfig_set_value (child, "%s", value);
241
+ return;
242
+ }
243
+ child = child->next;
244
+ }
245
+ // This segment doesn't exist, create it
246
+ child = zconfig_new (path, self);
247
+ assert (child);
248
+ child->name [length] = 0;
249
+ if (slash) // Recurse down further
250
+ zconfig_put (child, slash, value);
251
+ else
252
+ zconfig_set_value (child, "%s", value);
253
+ }
254
+
255
+
256
+ // --------------------------------------------------------------------------
257
+ // Equivalent to zconfig_put, accepting a format specifier and variable
258
+ // argument list, instead of a single string value.
259
+
260
+ void
261
+ zconfig_putf (zconfig_t *self, const char *path, const char *format, ...)
262
+ {
263
+ assert (self);
264
+ va_list argptr;
265
+ va_start (argptr, format);
266
+ char *value = zsys_vprintf (format, argptr);
267
+ va_end (argptr);
268
+ zconfig_put (self, path, value);
269
+ zstr_free (&value);
270
+ }
271
+
272
+
273
+ // --------------------------------------------------------------------------
274
+ // Set new name for config item; this may be null.
275
+
276
+ void
277
+ zconfig_set_name (zconfig_t *self, const char *name)
278
+ {
279
+ assert (self);
280
+ freen (self->name);
281
+ self->name = name? strdup (name): NULL;
282
+ }
283
+
284
+
285
+ // --------------------------------------------------------------------------
286
+ // Set new value for config item. The new value may be a string, a printf
287
+ // format, or NULL. Note that if string may possibly contain '%', or if it
288
+ // comes from an insecure source, you must use '%s' as the format, followed
289
+ // by the string.
290
+
291
+ void
292
+ zconfig_set_value (zconfig_t *self, const char *format, ...)
293
+ {
294
+ assert (self);
295
+ zstr_free (&self->value);
296
+ if (format) {
297
+ va_list argptr;
298
+ va_start (argptr, format);
299
+ self->value = zsys_vprintf (format, argptr);
300
+ va_end (argptr);
301
+ }
302
+ else
303
+ self->value = NULL;
304
+ }
305
+
306
+
307
+ // --------------------------------------------------------------------------
308
+ // Find our first child, if any
309
+
310
+ zconfig_t *
311
+ zconfig_child (zconfig_t *self)
312
+ {
313
+ assert (self);
314
+ return self->child;
315
+ }
316
+
317
+
318
+ // --------------------------------------------------------------------------
319
+ // Find our first sibling, if any
320
+
321
+ zconfig_t *
322
+ zconfig_next (zconfig_t *self)
323
+ {
324
+ assert (self);
325
+ return self->next;
326
+ }
327
+
328
+
329
+ // --------------------------------------------------------------------------
330
+ // Find a config item along a path; leading slash is optional and ignored.
331
+
332
+ zconfig_t *
333
+ zconfig_locate (zconfig_t *self, const char *path)
334
+ {
335
+ assert (self);
336
+
337
+ // Check length of next path segment
338
+ if (*path == '/')
339
+ path++;
340
+ const char *slash = strchr (path, '/');
341
+ size_t length = strlen (path);
342
+ if (slash)
343
+ length = slash - path;
344
+
345
+ // Find matching name starting at first child of root
346
+ zconfig_t *child = self->child;
347
+ while (child) {
348
+ if (strlen (child->name) == length
349
+ && memcmp (child->name, path, length) == 0) {
350
+ if (slash) // Look deeper
351
+ return zconfig_locate (child, slash);
352
+ else
353
+ return child;
354
+ }
355
+ child = child->next;
356
+ }
357
+ return NULL;
358
+ }
359
+
360
+
361
+ // --------------------------------------------------------------------------
362
+ // Get value for config item into a string value; leading slash is optional
363
+ // and ignored.
364
+
365
+ char *
366
+ zconfig_get (zconfig_t *self, const char *path, const char *default_value)
367
+ {
368
+ assert (self);
369
+ zconfig_t *item = zconfig_locate (self, path);
370
+ if (item)
371
+ return zconfig_value (item);
372
+ else
373
+ return (char *) default_value;
374
+ }
375
+
376
+
377
+ // --------------------------------------------------------------------------
378
+ // Finds the latest node at the specified depth, where 0 is the root. If no
379
+ // such node exists, returns NULL.
380
+
381
+ zconfig_t *
382
+ zconfig_at_depth (zconfig_t *self, int level)
383
+ {
384
+ assert (self);
385
+
386
+ while (level > 0) {
387
+ if (self->child) {
388
+ self = self->child;
389
+ while (self->next)
390
+ self = self->next;
391
+ level--;
392
+ }
393
+ else
394
+ return NULL;
395
+ }
396
+ return self;
397
+ }
398
+
399
+
400
+ // --------------------------------------------------------------------------
401
+ // Execute a callback for each config item in the tree; returns zero if
402
+ // successful, else -1.
403
+
404
+ int
405
+ zconfig_execute (zconfig_t *self, zconfig_fct handler, void *arg)
406
+ {
407
+ // Execute top level config at level zero
408
+ assert (self);
409
+ return s_config_execute (self, handler, arg, 0) >= 0? 0: -1;
410
+ }
411
+
412
+
413
+ // Return number of bytes processed if successful, otherwise -1.
414
+
415
+ static int
416
+ s_config_execute (zconfig_t *self, zconfig_fct handler, void *arg, int level)
417
+ {
418
+ assert (self);
419
+ int size = handler (self, arg, level);
420
+ if (size == -1)
421
+ return -1; // fail early
422
+
423
+ // Process all children in one go, as a list
424
+ zconfig_t *child = self->child;
425
+ while (child) {
426
+ int rc = s_config_execute (child, handler, arg, level + 1);
427
+ if (rc == -1)
428
+ return -1;
429
+ size += rc;
430
+ child = child->next;
431
+ }
432
+ return size;
433
+ }
434
+
435
+ // --------------------------------------------------------------------------
436
+ // Load a config tree from a specified ZPL text file; returns a zconfig_t
437
+ // reference for the root, if the file exists and is readable. Returns NULL
438
+ // if the file does not exist.
439
+
440
+ zconfig_t *
441
+ zconfig_load (const char *filename)
442
+ {
443
+ // Load entire file into memory as a chunk, then process it
444
+ zconfig_t *self = NULL;
445
+ zfile_t *file = zfile_new (NULL, filename);
446
+ if (!file)
447
+ return NULL;
448
+
449
+ if (zfile_input (file) == 0) {
450
+ zchunk_t *chunk = zfile_read (file, zfile_cursize (file), 0);
451
+ if (chunk) {
452
+ self = zconfig_chunk_load (chunk);
453
+ zchunk_destroy (&chunk);
454
+ if (self)
455
+ self->file = file;
456
+ zfile_close (file);
457
+ file = NULL; // Config tree now owns file handle
458
+ }
459
+ }
460
+ zfile_destroy (&file);
461
+ return self;
462
+ }
463
+
464
+
465
+ // --------------------------------------------------------------------------
466
+ // Save a config tree to a specified ZPL text file, where a filename
467
+ // "-" means dump to standard output.
468
+
469
+ int
470
+ zconfig_save (zconfig_t *self, const char *filename)
471
+ {
472
+ assert (self);
473
+
474
+ int rc = 0;
475
+ if (streq (filename, "-"))
476
+ // "-" means write to stdout
477
+ rc = zconfig_execute (self, s_config_save, stdout);
478
+ else {
479
+ FILE *file;
480
+ file = fopen (filename, "w");
481
+ if (file) {
482
+ rc = zconfig_execute (self, s_config_save, file);
483
+ fflush (file);
484
+ fclose (file);
485
+
486
+ // If we saved back to original file, restat it so that
487
+ // the file does not appear as "changed"
488
+ if (self->file && streq (filename, zconfig_filename (self)))
489
+ zfile_restat (self->file);
490
+ }
491
+ else
492
+ rc = -1; // File not writeable
493
+ }
494
+ return rc;
495
+ }
496
+
497
+ // Save an item, polymorphic: if arg is a zchunk_t *, appends the
498
+ // data to the chunk; else if arg is not null, writes data to the
499
+ // arg as FILE *, or appends to the chunk data. If arg is null,
500
+ // stores nothing. Returns data size, or -1 if memory is exhausted.
501
+
502
+ static int
503
+ s_config_printf (zconfig_t *self, void *arg, char *format, ...)
504
+ {
505
+ va_list argptr;
506
+ va_start (argptr, format);
507
+ char *string = zsys_vprintf (format, argptr);
508
+ va_end (argptr);
509
+ if (!string)
510
+ return -1;
511
+
512
+ if (arg) {
513
+ if (zchunk_is (arg))
514
+ zchunk_append ((zchunk_t *) arg, string, strlen (string));
515
+ else
516
+ fprintf ((FILE *) arg, "%s", string);
517
+ }
518
+ size_t size = strlen (string);
519
+ zstr_free (&string);
520
+ if (size > INT_MAX)
521
+ return -1;
522
+
523
+ return (int) size;
524
+ }
525
+
526
+
527
+ static int
528
+ s_config_save (zconfig_t *self, void *arg, int level)
529
+ {
530
+ assert (self);
531
+
532
+ // Store any comments on the item
533
+ int size = 0;
534
+ if (self->comments) {
535
+ char *comment = (char *) zlist_first (self->comments);
536
+ while (comment) {
537
+ size += s_config_printf (self, arg, "#%s\n", comment);
538
+ comment = (char *) zlist_next (self->comments);
539
+ }
540
+ size += s_config_printf (self, arg, "\n");
541
+ }
542
+ if (level > 0) {
543
+ if (self->value)
544
+ size += s_config_printf (self, arg,
545
+ "%*s%s = \"%s\"\n", (level - 1) * 4, "",
546
+ self->name? self->name: "(Unnamed)", self->value);
547
+ else
548
+ size += s_config_printf (self, arg,
549
+ "%*s%s\n", (level - 1) * 4, "",
550
+ self->name? self->name: "(Unnamed)");
551
+ }
552
+ return size;
553
+ }
554
+
555
+
556
+ // --------------------------------------------------------------------------
557
+ // Equivalent to zconfig_load, taking a format string instead of a fixed
558
+ // filename.
559
+
560
+ zconfig_t *
561
+ zconfig_loadf (const char *format, ...)
562
+ {
563
+ va_list argptr;
564
+ va_start (argptr, format);
565
+ char *filename = zsys_vprintf (format, argptr);
566
+ va_end (argptr);
567
+ if (filename) {
568
+ zconfig_t *config = zconfig_load (filename);
569
+ freen (filename);
570
+ return config;
571
+ }
572
+ else
573
+ return NULL;
574
+ }
575
+
576
+
577
+ // --------------------------------------------------------------------------
578
+ // Equivalent to zconfig_save, taking a format string instead of a fixed
579
+ // filename.
580
+
581
+ int
582
+ zconfig_savef (zconfig_t *self, const char *format, ...)
583
+ {
584
+ assert (self);
585
+ va_list argptr;
586
+ va_start (argptr, format);
587
+ char *filename = zsys_vprintf (format, argptr);
588
+ va_end (argptr);
589
+ if (filename) {
590
+ int rc = zconfig_save (self, filename);
591
+ zstr_free (&filename);
592
+ return rc;
593
+ }
594
+ else
595
+ return -1;
596
+ }
597
+
598
+
599
+ // --------------------------------------------------------------------------
600
+ // Report filename used during zconfig_load, or NULL if none
601
+
602
+ const char *
603
+ zconfig_filename (zconfig_t *self)
604
+ {
605
+ assert (self);
606
+ if (self->file)
607
+ return (zfile_filename (self->file, NULL));
608
+ else
609
+ return NULL;
610
+ }
611
+
612
+
613
+ // --------------------------------------------------------------------------
614
+ // Reload config tree from same file that it was previously loaded from.
615
+ // Returns 0 if OK, -1 if there was an error (and then does not change
616
+ // existing data).
617
+
618
+ int
619
+ zconfig_reload (zconfig_t **self_p)
620
+ {
621
+ assert (self_p);
622
+ zconfig_t *self = *self_p;
623
+
624
+ if (self->file) {
625
+ zconfig_t *copy = zconfig_load (zfile_filename (self->file, NULL));
626
+ if (copy) {
627
+ // Destroy old tree and install new one
628
+ zconfig_destroy (self_p);
629
+ *self_p = copy;
630
+ return 0;
631
+ }
632
+ }
633
+ return -1; // Not successful
634
+ }
635
+
636
+
637
+ // --------------------------------------------------------------------------
638
+ // Load a config tree from a memory chunk
639
+
640
+ zconfig_t *
641
+ zconfig_chunk_load (zchunk_t *chunk)
642
+ {
643
+ // Parse the chunk line by line
644
+ zconfig_t *self = zconfig_new ("root", NULL);
645
+ if (!self)
646
+ return NULL;
647
+
648
+ bool valid = true;
649
+ int lineno = 0;
650
+ char *data_ptr = (char *) zchunk_data (chunk);
651
+ size_t remaining = zchunk_size (chunk);
652
+
653
+ while (remaining) {
654
+ // Copy stuff into cur_line; not fastest but safest option
655
+ // since chunk may not be null terminated, etc.
656
+ char *eoln = (char *) memchr (data_ptr, '\n', remaining);
657
+ size_t cur_size;
658
+ if (eoln)
659
+ cur_size = eoln - data_ptr;
660
+ else
661
+ cur_size = remaining;
662
+
663
+ if (cur_size > 1024)
664
+ cur_size = 1024;
665
+ char cur_line [1024 + 1];
666
+ memcpy (cur_line, data_ptr, cur_size);
667
+ cur_line [cur_size] = '\0';
668
+ data_ptr = eoln? eoln + 1: NULL;
669
+ remaining -= cur_size + (eoln? 1: 0);
670
+
671
+ // Trim line
672
+ size_t length = strlen (cur_line);
673
+ while (length && isspace ((byte) cur_line [length - 1]))
674
+ cur_line [--length] = 0;
675
+
676
+ // Collect indentation level and name, if any
677
+ lineno++;
678
+ // Handle whole-line comment if present
679
+ if (cur_line [0] == '#') {
680
+ if (!self->comments) {
681
+ self->comments = zlist_new ();
682
+ assert (self->comments);
683
+ zlist_autofree (self->comments);
684
+ }
685
+ zlist_append (self->comments, cur_line + 1);
686
+ }
687
+ char *scanner = cur_line;
688
+ int level = s_collect_level (&scanner, lineno);
689
+ if (level == -1) {
690
+ valid = false;
691
+ break;
692
+ }
693
+ char *name = s_collect_name (&scanner, lineno);
694
+ if (name == NULL) {
695
+ valid = false;
696
+ break;
697
+ }
698
+ // If name is not empty, collect property value
699
+ if (*name) {
700
+ char *value = s_collect_value (&scanner, lineno);
701
+ if (value == NULL)
702
+ valid = false;
703
+ else {
704
+ // Navigate to parent for this element
705
+ zconfig_t *parent = zconfig_at_depth (self, level);
706
+ if (parent) {
707
+ zconfig_t *item = zconfig_new (name, parent);
708
+ assert (item);
709
+ item->value = value;
710
+ }
711
+ else {
712
+ zclock_log ("E (zconfig): (%d) indentation error", lineno);
713
+ freen (value);
714
+ valid = false;
715
+ }
716
+ }
717
+ }
718
+ else
719
+ if (s_verify_eoln (scanner, lineno))
720
+ valid = false;
721
+
722
+ freen (name);
723
+ if (!valid)
724
+ break;
725
+ }
726
+ // Either the whole ZPL stream is valid or none of it is
727
+ if (!valid)
728
+ zconfig_destroy (&self);
729
+ return self;
730
+ }
731
+
732
+
733
+ // Count and verify indentation level, -1 means a syntax error or overflow
734
+
735
+ static int
736
+ s_collect_level (char **start, int lineno)
737
+ {
738
+ char *readptr = *start;
739
+ while (*readptr == ' ')
740
+ readptr++;
741
+ ptrdiff_t level = (readptr - *start) / 4;
742
+ if (level * 4 != readptr - *start) {
743
+ zclock_log ("E (zconfig): (%d) indent 4 spaces at once", lineno);
744
+ level = -1;
745
+ }
746
+ *start = readptr;
747
+ if (level > INT_MAX)
748
+ return -1;
749
+
750
+ return (int) level;
751
+ }
752
+
753
+ // Collect property name
754
+
755
+ static bool
756
+ s_is_namechar (char thischar)
757
+ {
758
+ return ( isalnum (thischar)
759
+ || thischar == '$'
760
+ || thischar == '-'
761
+ || thischar == '_'
762
+ || thischar == '@'
763
+ || thischar == '.'
764
+ || thischar == '&'
765
+ || thischar == '+'
766
+ || thischar == '/');
767
+ }
768
+
769
+ static char *
770
+ s_collect_name (char **start, int lineno)
771
+ {
772
+ char *readptr = *start;
773
+ while (s_is_namechar ((char) **start))
774
+ (*start)++;
775
+
776
+ size_t length = *start - readptr;
777
+ char *name = (char *) zmalloc (length + 1);
778
+ if (!name)
779
+ return NULL;
780
+
781
+ memcpy (name, readptr, length);
782
+ name [length] = 0;
783
+
784
+ if (length > 0
785
+ && (name [0] == '/'
786
+ || name [length - 1] == '/')) {
787
+ zclock_log ("E (zconfig): (%d) '/' not valid at name start or end", lineno);
788
+ freen (name);
789
+ name = NULL;
790
+ }
791
+ return name;
792
+ }
793
+
794
+ // Check there's no junk after value on line, returns 0 if OK else -1.
795
+
796
+ static int
797
+ s_verify_eoln (char *readptr, int lineno)
798
+ {
799
+ while (*readptr) {
800
+ if (isspace ((byte) *readptr))
801
+ readptr++;
802
+ else
803
+ if (*readptr == '#')
804
+ break;
805
+ else {
806
+ zclock_log ("E (zconfig): (%d) invalid syntax '%s'", lineno, readptr);
807
+ return -1;
808
+ break;
809
+ }
810
+ }
811
+ return 0;
812
+ }
813
+
814
+ // Return value for name, or "" - if syntax error, returns NULL.
815
+
816
+ static char *
817
+ s_collect_value (char **start, int lineno)
818
+ {
819
+ char *value = NULL;
820
+ char *readptr = *start;
821
+ int rc = 0;
822
+
823
+ while (isspace ((byte) *readptr))
824
+ readptr++;
825
+
826
+ if (*readptr == '=') {
827
+ readptr++;
828
+ while (isspace ((byte) *readptr))
829
+ readptr++;
830
+
831
+ // If value starts with quote or apost, collect it
832
+ if (*readptr == '"' || *readptr == '\'') {
833
+ char *endquote = strchr (readptr + 1, *readptr);
834
+ if (endquote) {
835
+ size_t value_length = endquote - readptr - 1;
836
+ value = (char *) zmalloc (value_length + 1);
837
+ if (!value)
838
+ return NULL;
839
+
840
+ memcpy (value, readptr + 1, value_length);
841
+ value [value_length] = 0;
842
+ rc = s_verify_eoln (endquote + 1, lineno);
843
+ }
844
+ else {
845
+ zclock_log ("E (zconfig): (%d) missing %c", lineno, *readptr);
846
+ rc = -1;
847
+ }
848
+ }
849
+ else {
850
+ // Collect unquoted value up to comment
851
+ char *comment = strchr (readptr, '#');
852
+ if (comment) {
853
+ while (isspace ((byte) comment [-1]))
854
+ comment--;
855
+ *comment = 0;
856
+ }
857
+ value = strdup (readptr);
858
+ }
859
+ }
860
+ else {
861
+ value = strdup ("");
862
+ rc = s_verify_eoln (readptr, lineno);
863
+ }
864
+ // If we had an error, drop value and return NULL
865
+ if (rc) {
866
+ freen (value);
867
+ value = NULL;
868
+ }
869
+ return value;
870
+ }
871
+
872
+
873
+ // --------------------------------------------------------------------------
874
+ // Save a config tree to a new memory chunk; the chunk
875
+
876
+ zchunk_t *
877
+ zconfig_chunk_save (zconfig_t *self)
878
+ {
879
+ assert (self);
880
+
881
+ int size = s_config_execute (self, s_config_save, NULL, 0);
882
+ // Allow an extra byte so we can null-terminate the data
883
+ zchunk_t *chunk = zchunk_new (NULL, size + 1);
884
+ if (chunk) {
885
+ s_config_execute (self, s_config_save, chunk, 0);
886
+ // This lets us treat the chunk data as a string
887
+ zchunk_data (chunk) [zchunk_size (chunk)] = 0;
888
+ }
889
+ return chunk;
890
+ }
891
+
892
+
893
+ // --------------------------------------------------------------------------
894
+ // Create a new config tree from a null-terminated string
895
+
896
+ zconfig_t *
897
+ zconfig_str_load (const char *string)
898
+ {
899
+ zchunk_t *chunk = zchunk_new (string, strlen (string));
900
+ zconfig_t *config = zconfig_chunk_load (chunk);
901
+ zchunk_destroy (&chunk);
902
+ return config;
903
+ }
904
+
905
+
906
+ // --------------------------------------------------------------------------
907
+ // Save a config tree to a new null terminated string
908
+
909
+ char *
910
+ zconfig_str_save (zconfig_t *self)
911
+ {
912
+ zchunk_t *chunk = zconfig_chunk_save (self);
913
+ char *string = strdup ((char *) zchunk_data (chunk));
914
+ zchunk_destroy (&chunk);
915
+ return string;
916
+ }
917
+
918
+
919
+ // --------------------------------------------------------------------------
920
+ // Return true if a configuration tree was loaded from a file and that
921
+ // file has changed in since the tree was loaded.
922
+
923
+ bool
924
+ zconfig_has_changed (zconfig_t *self)
925
+ {
926
+ assert (self);
927
+ if (self->file && zfile_has_changed (self->file))
928
+ return true;
929
+ else
930
+ return false;
931
+ }
932
+
933
+
934
+ // --------------------------------------------------------------------------
935
+ // Add comment to config item before saving to disk. You can add as many
936
+ // comment lines as you like. If you use a null format, all comments are
937
+ // deleted.
938
+
939
+ void
940
+ zconfig_set_comment (zconfig_t *self, const char *format, ...)
941
+ {
942
+ if (format) {
943
+ if (!self->comments) {
944
+ self->comments = zlist_new ();
945
+ assert (self->comments);
946
+ zlist_autofree (self->comments);
947
+ }
948
+ va_list argptr;
949
+ va_start (argptr, format);
950
+ char *string = zsys_vprintf (format, argptr);
951
+ va_end (argptr);
952
+
953
+ zlist_append (self->comments, string);
954
+ zstr_free (&string);
955
+ }
956
+ else
957
+ zlist_destroy (&self->comments);
958
+ }
959
+
960
+
961
+ // --------------------------------------------------------------------------
962
+ // Return comments of config item, as zlist.
963
+
964
+ zlist_t *
965
+ zconfig_comments (zconfig_t *self)
966
+ {
967
+ assert (self);
968
+ return self->comments;
969
+ }
970
+
971
+
972
+ // --------------------------------------------------------------------------
973
+ // Print the config file to open stream
974
+
975
+ void
976
+ zconfig_fprint (zconfig_t *self, FILE *file)
977
+ {
978
+ zconfig_execute (self, s_config_save, file);
979
+ }
980
+
981
+
982
+ // --------------------------------------------------------------------------
983
+ // Print the config file to stdout
984
+
985
+ void
986
+ zconfig_print (zconfig_t *self)
987
+ {
988
+ zconfig_fprint (self, stdout);
989
+ }
990
+
991
+
992
+ // --------------------------------------------------------------------------
993
+ // Self test of this class
994
+
995
+ void
996
+ zconfig_test (bool verbose)
997
+ {
998
+ printf (" * zconfig: ");
999
+
1000
+ // @selftest
1001
+
1002
+ const char *SELFTEST_DIR_RW = "src/selftest-rw";
1003
+
1004
+ const char *testbasedir = ".test_zconfig";
1005
+ const char *testfile = "test.cfg";
1006
+ char *basedirpath = NULL; // subdir in a test, under SELFTEST_DIR_RW
1007
+ char *filepath = NULL; // pathname to testfile in a test, in dirpath
1008
+
1009
+ basedirpath = zsys_sprintf ("%s/%s", SELFTEST_DIR_RW, testbasedir);
1010
+ assert (basedirpath);
1011
+ filepath = zsys_sprintf ("%s/%s", basedirpath, testfile);
1012
+ assert (filepath);
1013
+
1014
+ // Make sure old aborted tests do not hinder us
1015
+ zdir_t *dir = zdir_new (basedirpath, NULL);
1016
+ if (dir) {
1017
+ zdir_remove (dir, true);
1018
+ zdir_destroy (&dir);
1019
+ }
1020
+ zsys_file_delete (filepath);
1021
+ zsys_dir_delete (basedirpath);
1022
+
1023
+ // Create temporary directory for test files
1024
+ zsys_dir_create (basedirpath);
1025
+
1026
+ zconfig_t *root = zconfig_new ("root", NULL);
1027
+ assert (root);
1028
+ zconfig_t *section, *item;
1029
+
1030
+ section = zconfig_new ("headers", root);
1031
+ assert (section);
1032
+ item = zconfig_new ("email", section);
1033
+ assert (item);
1034
+ zconfig_set_value (item, "some@random.com");
1035
+ item = zconfig_new ("name", section);
1036
+ assert (item);
1037
+ zconfig_set_value (item, "Justin Kayce");
1038
+ zconfig_putf (root, "/curve/secret-key", "%s", "Top Secret");
1039
+ zconfig_set_comment (root, " CURVE certificate");
1040
+ zconfig_set_comment (root, " -----------------");
1041
+ assert (zconfig_comments (root));
1042
+ zconfig_save (root, filepath);
1043
+ zconfig_destroy (&root);
1044
+ root = zconfig_load (filepath);
1045
+ if (verbose)
1046
+ zconfig_save (root, "-");
1047
+ assert (streq (zconfig_filename (root), filepath));
1048
+
1049
+ char *email = zconfig_get (root, "/headers/email", NULL);
1050
+ assert (email);
1051
+ assert (streq (email, "some@random.com"));
1052
+ char *passwd = zconfig_get (root, "/curve/secret-key", NULL);
1053
+ assert (passwd);
1054
+ assert (streq (passwd, "Top Secret"));
1055
+
1056
+ zconfig_savef (root, "%s/%s", basedirpath, testfile);
1057
+ assert (!zconfig_has_changed (root));
1058
+ int rc = zconfig_reload (&root);
1059
+ assert (rc == 0);
1060
+ assert (!zconfig_has_changed (root));
1061
+ zconfig_destroy (&root);
1062
+
1063
+ // Test chunk load/save
1064
+ root = zconfig_new ("root", NULL);
1065
+ assert (root);
1066
+ section = zconfig_new ("section", root);
1067
+ assert (section);
1068
+ item = zconfig_new ("value", section);
1069
+ assert (item);
1070
+ zconfig_set_value (item, "somevalue");
1071
+ zconfig_t *search = zconfig_locate (root, "section/value");
1072
+ assert (search == item);
1073
+ zchunk_t *chunk = zconfig_chunk_save (root);
1074
+ assert (strlen ((char *) zchunk_data (chunk)) == 32);
1075
+ char *string = zconfig_str_save (root);
1076
+ assert (string);
1077
+ assert (streq (string, (char *) zchunk_data (chunk)));
1078
+ freen (string);
1079
+ assert (chunk);
1080
+ zconfig_destroy (&root);
1081
+
1082
+ root = zconfig_chunk_load (chunk);
1083
+ assert (root);
1084
+ char *value = zconfig_get (root, "/section/value", NULL);
1085
+ assert (value);
1086
+ assert (streq (value, "somevalue"));
1087
+
1088
+ // Test config can't be saved to a file in a path that doesn't
1089
+ // exist or isn't writable
1090
+ rc = zconfig_savef (root, "%s/path/that/doesnt/exist/%s", basedirpath, testfile);
1091
+ assert (rc == -1);
1092
+
1093
+ zconfig_destroy (&root);
1094
+ zchunk_destroy (&chunk);
1095
+
1096
+ // Test str_load
1097
+ zconfig_t *config = zconfig_str_load (
1098
+ "malamute\n"
1099
+ " endpoint = ipc://@/malamute\n"
1100
+ " producer = STREAM\n"
1101
+ " consumer\n"
1102
+ " STREAM2 = .*\n"
1103
+ " STREAM3 = HAM\n"
1104
+ "server\n"
1105
+ " verbose = true\n"
1106
+ );
1107
+ assert (config);
1108
+ assert (streq (zconfig_get (config, "malamute/endpoint", NULL), "ipc://@/malamute"));
1109
+ assert (streq (zconfig_get (config, "malamute/producer", NULL), "STREAM"));
1110
+ assert (zconfig_locate (config, "malamute/consumer"));
1111
+
1112
+ zconfig_t *c = zconfig_child (zconfig_locate (config, "malamute/consumer"));
1113
+ assert (c);
1114
+ assert (streq (zconfig_name (c), "STREAM2"));
1115
+ assert (streq (zconfig_value (c), ".*"));
1116
+
1117
+ c = zconfig_next (c);
1118
+ assert (c);
1119
+ assert (streq (zconfig_name (c), "STREAM3"));
1120
+ assert (streq (zconfig_value (c), "HAM"));
1121
+
1122
+ c = zconfig_next (c);
1123
+ assert (!c);
1124
+
1125
+ assert (streq (zconfig_get (config, "server/verbose", NULL), "true"));
1126
+
1127
+ zconfig_destroy (&config);
1128
+
1129
+ // Test subtree removal
1130
+ {
1131
+ zconfig_t *root = zconfig_str_load (
1132
+ "context\n"
1133
+ " iothreads = 1\n"
1134
+ " verbose = 1 # Ask for a trace\n"
1135
+ "main\n"
1136
+ " type = zqueue # ZMQ_DEVICE type\n"
1137
+ " frontend\n"
1138
+ " option\n"
1139
+ " hwm = 1000\n"
1140
+ " swap = 25000000 # 25MB\n"
1141
+ " bind = 'inproc://addr1'\n"
1142
+ " bind = 'ipc://addr2'\n"
1143
+ " backend\n"
1144
+ " bind = inproc://addr3\n"
1145
+ );
1146
+
1147
+ // no subtree
1148
+ zconfig_t *to_delete = zconfig_locate (root, "context/iothreads");
1149
+ assert (to_delete);
1150
+
1151
+ zconfig_remove_subtree (to_delete);
1152
+
1153
+ zconfig_t *check = zconfig_locate (root, "context/iothreads");
1154
+ assert (check);
1155
+ assert (streq (zconfig_value (check), "1"));
1156
+
1157
+ check = zconfig_locate (root, "context/verbose");
1158
+ assert (check);
1159
+ assert (streq (zconfig_value (check), "1"));
1160
+
1161
+ // existing subtree
1162
+ to_delete = zconfig_locate (root, "main/frontend/option");
1163
+ assert (to_delete);
1164
+
1165
+ zconfig_remove_subtree (to_delete);
1166
+
1167
+ check = zconfig_locate (root, "main/frontend/option/hwm");
1168
+ assert (check == NULL);
1169
+ check = zconfig_locate (root, "main/frontend/option/swap");
1170
+ assert (check == NULL);
1171
+ check = zconfig_locate (root, "main/frontend/option");
1172
+ assert (check);
1173
+ assert (streq (zconfig_value (check), ""));
1174
+ check = zconfig_next (check);
1175
+ assert (check);
1176
+ assert (streq (zconfig_name (check), "bind"));
1177
+ assert (streq (zconfig_value (check), "inproc://addr1"));
1178
+ check = zconfig_next (check);
1179
+ assert (check);
1180
+ assert (streq (zconfig_name (check), "bind"));
1181
+ assert (streq (zconfig_value (check), "ipc://addr2"));
1182
+ assert (zconfig_next (check) == NULL);
1183
+
1184
+ to_delete = zconfig_locate (root, "main/frontend");
1185
+ assert (to_delete);
1186
+
1187
+ zconfig_remove_subtree (to_delete);
1188
+
1189
+ check = zconfig_locate (root, "main/frontend/option/hwm");
1190
+ assert (check == NULL);
1191
+ check = zconfig_locate (root, "main/frontend/option/swap");
1192
+ assert (check == NULL);
1193
+ check = zconfig_locate (root, "main/frontend/option");
1194
+ assert (check == NULL);
1195
+ check = zconfig_locate (root, "main/frontend/bind");
1196
+ assert (check == NULL);
1197
+ check = zconfig_locate (root, "main/frontend");
1198
+ assert (check);
1199
+ assert (streq (zconfig_value (check), ""));
1200
+ assert (zconfig_child (check) == NULL);
1201
+ check = zconfig_next (check);
1202
+ assert (check);
1203
+ assert (streq (zconfig_name (check), "backend"));
1204
+ assert (streq (zconfig_value (check), ""));
1205
+
1206
+ to_delete = zconfig_locate (root, "main");
1207
+ assert (to_delete);
1208
+
1209
+ zconfig_remove_subtree (to_delete);
1210
+
1211
+ check = zconfig_locate (root, "main/type");
1212
+ assert (check == NULL);
1213
+ check = zconfig_locate (root, "main/frontend");
1214
+ assert (check == NULL);
1215
+ check = zconfig_locate (root, "main/backend");
1216
+ assert (check == NULL);
1217
+ check = zconfig_locate (root, "main");
1218
+ assert (check);
1219
+
1220
+ // root
1221
+ zconfig_remove_subtree (root);
1222
+
1223
+ assert (root);
1224
+ assert (zconfig_child (root) == NULL);
1225
+ check = zconfig_locate (root, "main");
1226
+ assert (check == NULL);
1227
+ check = zconfig_locate (root, "context");
1228
+ assert (check == NULL);
1229
+
1230
+ zconfig_destroy (&root);
1231
+ }
1232
+
1233
+ // Test node and subtree removal
1234
+ {
1235
+ zconfig_t *root = zconfig_str_load (
1236
+ "A1 = abc\n"
1237
+ " x\n"
1238
+ " 1\n"
1239
+ " 2\n"
1240
+ " y = 1 # Ask for a trace\n"
1241
+ "A2\n"
1242
+ " B1 = zqueue # ZMQ_DEVICE type\n"
1243
+ " B2\n"
1244
+ " C1\n"
1245
+ " hwm = 1000\n"
1246
+ " swap = 25000000 # 25MB\n"
1247
+ " C2 = 50\n"
1248
+ " C3\n"
1249
+ " bind = addr3\n"
1250
+ " B3\n"
1251
+ " bind = inproc://addr4\n"
1252
+ " B4 = Ignac\n"
1253
+ " z = 5\n"
1254
+ "A3\n"
1255
+ "A4\n"
1256
+ );
1257
+
1258
+ zconfig_t *to_delete = zconfig_locate (root, "A2/B2/C3");
1259
+ assert (to_delete);
1260
+
1261
+ zconfig_remove (&to_delete);
1262
+
1263
+ zconfig_t *check = zconfig_locate (root, "A2/B2/C2");
1264
+ assert (check);
1265
+ assert (streq (zconfig_value (check), "50"));
1266
+ assert (zconfig_next (check) == NULL);
1267
+ assert (zconfig_locate (root, "A2/B2/C3/bind") == NULL);
1268
+ assert (zconfig_locate (root, "A2/B2/C3") == NULL);
1269
+
1270
+ to_delete = zconfig_locate (root, "A2/B2");
1271
+ assert (to_delete);
1272
+
1273
+ zconfig_remove (&to_delete);
1274
+
1275
+ check = zconfig_locate (root, "A2");
1276
+ assert (check);
1277
+ check = zconfig_child (check);
1278
+ assert (check);
1279
+ assert (streq (zconfig_name (check), "B1"));
1280
+ assert (streq (zconfig_value (check), "zqueue"));
1281
+ check = zconfig_next (check);
1282
+ assert (check);
1283
+ assert (streq (zconfig_name (check), "B3"));
1284
+ assert (streq (zconfig_value (check), ""));
1285
+ assert (zconfig_locate (root, "A2/B2/C1") == NULL);
1286
+ assert (zconfig_locate (root, "A2/B2/C2") == NULL);
1287
+ assert (zconfig_locate (root, "A2/B2") == NULL);
1288
+ assert (zconfig_locate (root, "A2/B4"));
1289
+
1290
+ to_delete = zconfig_locate (root, "A2/B1");
1291
+ assert (to_delete);
1292
+
1293
+ zconfig_remove (&to_delete);
1294
+
1295
+ check = zconfig_locate (root, "A2");
1296
+ assert (check);
1297
+ check = zconfig_child (check);
1298
+ assert (check);
1299
+ assert (streq (zconfig_name (check), "B3"));
1300
+ assert (streq (zconfig_value (check), ""));
1301
+ check = zconfig_next (check);
1302
+ assert (check);
1303
+ assert (streq (zconfig_name (check), "B4"));
1304
+ assert (streq (zconfig_value (check), "Ignac"));
1305
+ assert (zconfig_next (check) == NULL);
1306
+ assert (zconfig_locate (root, "A2/B1") == NULL);
1307
+ assert (zconfig_locate (root, "A2/B2") == NULL);
1308
+
1309
+ to_delete = zconfig_locate (root, "A2/B3");
1310
+ assert (to_delete);
1311
+
1312
+ zconfig_remove (&to_delete);
1313
+
1314
+ check = zconfig_locate (root, "A2");
1315
+ assert (check);
1316
+ check = zconfig_child (check);
1317
+ assert (check);
1318
+ assert (streq (zconfig_name (check), "B4"));
1319
+ assert (streq (zconfig_value (check), "Ignac"));
1320
+ assert (zconfig_next (check) == NULL);
1321
+
1322
+ to_delete = zconfig_locate (root, "A2");
1323
+ assert (to_delete);
1324
+
1325
+ zconfig_remove (&to_delete);
1326
+
1327
+ check = zconfig_locate (root, "A1");
1328
+ assert (check);
1329
+ check = zconfig_next (check);
1330
+ assert (check);
1331
+ assert (streq (zconfig_name (check), "A3"));
1332
+ assert (zconfig_locate (root, "A2/B4") == NULL);
1333
+ assert (zconfig_locate (root, "A2") == NULL);
1334
+
1335
+ to_delete = zconfig_locate (root, "A1");
1336
+ assert (to_delete);
1337
+
1338
+ zconfig_remove (&to_delete);
1339
+
1340
+ check = zconfig_child (root);
1341
+ assert (check);
1342
+ assert (streq (zconfig_name (check), "A3"));
1343
+ assert (zconfig_locate (root, "A1/x/1") == NULL);
1344
+ assert (zconfig_locate (root, "A1/x") == NULL);
1345
+ assert (zconfig_locate (root, "A1/y") == NULL);
1346
+ assert (zconfig_locate (root, "A3"));
1347
+ assert (zconfig_locate (root, "A4"));
1348
+
1349
+ // called on root should be equivalent to zconfig_destroy (&root)
1350
+ zconfig_remove (&root);
1351
+ }
1352
+
1353
+ // Delete all test files
1354
+ dir = zdir_new (basedirpath, NULL);
1355
+ assert (dir);
1356
+ zdir_remove (dir, true);
1357
+ zdir_destroy (&dir);
1358
+
1359
+ zstr_free (&basedirpath);
1360
+ zstr_free (&filepath);
1361
+
1362
+ #if defined (__WINDOWS__)
1363
+ zsys_shutdown();
1364
+ #endif
1365
+ // @end
1366
+
1367
+ printf ("OK\n");
1368
+ }
1369
+