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,397 @@
1
+ /* =========================================================================
2
+ zpoller - trivial socket poller class
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 zpoller class provides a minimalist interface to ZeroMQ's zmq_poll
16
+ API, for the very common case of reading from a number of sockets.
17
+ It does not provide polling for output, nor polling on file handles.
18
+ If you need either of these, use the zmq_poll API directly.
19
+ @discuss
20
+ The class implements the poller using the zmq_poller API if that exists,
21
+ else does the work itself.
22
+ @end
23
+ */
24
+
25
+ #include "czmq_classes.h"
26
+
27
+ // Structure of our class
28
+
29
+ struct _zpoller_t {
30
+ #ifdef ZMQ_HAVE_POLLER
31
+ void *zmq_poller; // ZMQ poller structure
32
+ #else
33
+ zlist_t *reader_list; // List of sockets to read from
34
+ zmq_pollitem_t *poll_set; // Current zmq_poll set
35
+ void **poll_readers; // Matching table of socket readers
36
+ size_t poll_size; // Size of poll set
37
+ bool need_rebuild; // Does pollset need rebuilding?
38
+ #endif
39
+ bool expired; // Did poll timer expire?
40
+ bool terminated; // Did poll call end with EINTR?
41
+ bool nonstop; // Don't stop running on Ctrl-C
42
+ };
43
+
44
+
45
+ #ifndef ZMQ_HAVE_POLLER
46
+ static int
47
+ s_rebuild_poll_set (zpoller_t *self)
48
+ {
49
+ freen (self->poll_set);
50
+ self->poll_set = NULL;
51
+ freen (self->poll_readers);
52
+ self->poll_readers = NULL;
53
+
54
+ self->poll_size = zlist_size (self->reader_list);
55
+ self->poll_set = (zmq_pollitem_t *)
56
+ zmalloc (self->poll_size * sizeof (zmq_pollitem_t));
57
+ self->poll_readers = (void **) zmalloc (self->poll_size * sizeof (void *));
58
+ if (!self->poll_set || !self->poll_readers)
59
+ return -1;
60
+
61
+ uint reader_nbr = 0;
62
+ void *reader = zlist_first (self->reader_list);
63
+ while (reader) {
64
+ self->poll_readers [reader_nbr] = reader;
65
+ void *socket = zsock_resolve (reader);
66
+ if (socket == NULL) {
67
+ self->poll_set [reader_nbr].socket = NULL;
68
+ self->poll_set [reader_nbr].fd = *(SOCKET *) reader;
69
+ }
70
+ else
71
+ self->poll_set [reader_nbr].socket = socket;
72
+ self->poll_set [reader_nbr].events = ZMQ_POLLIN;
73
+
74
+ reader_nbr++;
75
+ reader = zlist_next (self->reader_list);
76
+ }
77
+ self->need_rebuild = false;
78
+ return 0;
79
+ }
80
+ #endif
81
+
82
+
83
+ // --------------------------------------------------------------------------
84
+ // Create new poller, specifying zero or more readers. The list of
85
+ // readers ends in a NULL. Each reader can be a zsock_t instance, a
86
+ // zactor_t instance, a libzmq socket (void *), or a file handle.
87
+
88
+ zpoller_t *
89
+ zpoller_new (void *reader, ...)
90
+ {
91
+ zpoller_t *self = (zpoller_t *) zmalloc (sizeof (zpoller_t));
92
+ assert (self);
93
+ #ifdef ZMQ_HAVE_POLLER
94
+ self->zmq_poller = zmq_poller_new ();
95
+ assert (self->zmq_poller);
96
+ #else
97
+ self->reader_list = zlist_new ();
98
+ assert (self->reader_list);
99
+ #endif
100
+ va_list args;
101
+ va_start (args, reader);
102
+ while (reader) {
103
+ if (zpoller_add (self, reader)) {
104
+ zpoller_destroy (&self);
105
+ break;
106
+ }
107
+ reader = va_arg (args, void *);
108
+ }
109
+ va_end (args);
110
+ return self;
111
+ }
112
+
113
+
114
+ // --------------------------------------------------------------------------
115
+ // Destroy a poller
116
+
117
+ void
118
+ zpoller_destroy (zpoller_t **self_p)
119
+ {
120
+ assert (self_p);
121
+ if (*self_p) {
122
+ zpoller_t *self = *self_p;
123
+ #ifdef ZMQ_HAVE_POLLER
124
+ zmq_poller_destroy (&self->zmq_poller);
125
+ #else
126
+ zlist_destroy (&self->reader_list);
127
+ freen (self->poll_readers);
128
+ freen (self->poll_set);
129
+ #endif
130
+ freen (self);
131
+ *self_p = NULL;
132
+ }
133
+ }
134
+
135
+
136
+ // --------------------------------------------------------------------------
137
+ // Add a reader to be polled. Returns 0 if OK, -1 on failure. The reader may
138
+ // be a libzmq void * socket, a zsock_t instance, or a zactor_t instance.
139
+
140
+ int
141
+ zpoller_add (zpoller_t *self, void *reader)
142
+ {
143
+ assert (self);
144
+ assert (reader);
145
+ int rc = 0;
146
+ #ifdef ZMQ_HAVE_POLLER
147
+ void *socket = zsock_resolve (reader);
148
+ if (socket)
149
+ rc = zmq_poller_add (self->zmq_poller, socket, reader, ZMQ_POLLIN);
150
+ else
151
+ rc = zmq_poller_add_fd (self->zmq_poller, *(SOCKET *) reader, reader, ZMQ_POLLIN);
152
+ #else
153
+ zlist_append (self->reader_list, reader);
154
+ self->need_rebuild = true;
155
+ #endif
156
+ return rc;
157
+ }
158
+
159
+
160
+ // --------------------------------------------------------------------------
161
+ // Remove a reader from the poller; returns 0 if OK, -1 on failure. The reader
162
+ // must have been passed during construction, or in an zpoller_add () call.
163
+
164
+ int
165
+ zpoller_remove (zpoller_t *self, void *reader)
166
+ {
167
+ assert (self);
168
+ assert (reader);
169
+ int rc = 0;
170
+ #ifdef ZMQ_HAVE_POLLER
171
+ void *socket = zsock_resolve (reader);
172
+ if (socket)
173
+ rc = zmq_poller_remove (self->zmq_poller, socket);
174
+ else
175
+ rc = zmq_poller_remove_fd (self->zmq_poller, *(SOCKET *) reader);
176
+ #else
177
+ size_t num_readers_before = zlist_size (self->reader_list);
178
+ zlist_remove (self->reader_list, reader); // won't fail with non-existent reader
179
+ size_t num_readers_after = zlist_size (self->reader_list);
180
+ if (num_readers_before != num_readers_after)
181
+ self->need_rebuild = true;
182
+ else {
183
+ errno = EINVAL;
184
+ rc = -1;
185
+ }
186
+ #endif
187
+ return rc;
188
+ }
189
+
190
+
191
+ // --------------------------------------------------------------------------
192
+ // By default the poller stops if the process receives a SIGINT or SIGTERM
193
+ // signal. This makes it impossible to shut-down message based architectures
194
+ // like zactors. This method lets you switch off break handling. The default
195
+ // nonstop setting is off (false).
196
+
197
+ void
198
+ zpoller_set_nonstop (zpoller_t *self, bool nonstop)
199
+ {
200
+ assert (self);
201
+ self->nonstop = nonstop;
202
+ }
203
+
204
+
205
+ // --------------------------------------------------------------------------
206
+ // Poll the registered readers for I/O, return first reader that has input.
207
+ // The reader will be a libzmq void * socket, or a zsock_t or zactor_t
208
+ // instance as specified in zpoller_new/zpoller_add. The timeout should be
209
+ // zero or greater, or -1 to wait indefinitely. Socket priority is defined
210
+ // by their order in the poll list. If you need a balanced poll, use the low
211
+ // level zmq_poll method directly. If the poll call was interrupted (SIGINT),
212
+ // or the ZMQ context was destroyed, or the timeout expired, returns NULL.
213
+ // You can test the actual exit condition by calling zpoller_expired () and
214
+ // zpoller_terminated (). The timeout is in msec.
215
+
216
+ void *
217
+ zpoller_wait (zpoller_t *self, int timeout)
218
+ {
219
+ assert (self);
220
+ self->expired = false;
221
+ if (zsys_interrupted && !self->nonstop) {
222
+ self->terminated = true;
223
+ return NULL;
224
+ }
225
+ else
226
+ self->terminated = false;
227
+
228
+ #ifdef ZMQ_HAVE_POLLER
229
+ zmq_poller_event_t event;
230
+ if (!zmq_poller_wait (self->zmq_poller, &event, timeout * ZMQ_POLL_MSEC))
231
+ return event.user_data;
232
+ else
233
+ if (errno == ETIMEDOUT || errno == EAGAIN)
234
+ self->expired = true;
235
+ else
236
+ if (zsys_interrupted && !self->nonstop)
237
+ self->terminated = true;
238
+
239
+ return NULL;
240
+ #else
241
+ if (self->need_rebuild)
242
+ s_rebuild_poll_set (self);
243
+ int rc = zmq_poll (self->poll_set, (int) self->poll_size, timeout * ZMQ_POLL_MSEC);
244
+ if (rc > 0) {
245
+ uint reader = 0;
246
+ for (reader = 0; reader < self->poll_size; reader++)
247
+ if (self->poll_set [reader].revents & ZMQ_POLLIN)
248
+ return self->poll_readers [reader];
249
+ }
250
+ else
251
+ if (rc == -1 || (zsys_interrupted && !self->nonstop))
252
+ self->terminated = true;
253
+ else
254
+ if (rc == 0)
255
+ self->expired = true;
256
+
257
+ return NULL;
258
+ #endif
259
+ }
260
+
261
+
262
+ // --------------------------------------------------------------------------
263
+ // Return true if the last zpoller_wait () call ended because the timeout
264
+ // expired, without any error.
265
+
266
+ bool
267
+ zpoller_expired (zpoller_t *self)
268
+ {
269
+ assert (self);
270
+ return self->expired;
271
+ }
272
+
273
+
274
+ // --------------------------------------------------------------------------
275
+ // Return true if the last zpoller_wait () call ended because the process
276
+ // was interrupted, or the parent context was destroyed.
277
+
278
+ bool
279
+ zpoller_terminated (zpoller_t *self)
280
+ {
281
+ assert (self);
282
+ return self->terminated;
283
+ }
284
+
285
+
286
+ // --------------------------------------------------------------------------
287
+ // Self test of this class
288
+
289
+ void
290
+ zpoller_test (bool verbose)
291
+ {
292
+ printf (" * zpoller: ");
293
+
294
+ // @selftest
295
+ // Create a few sockets
296
+ zsock_t *vent = zsock_new (ZMQ_PUSH);
297
+ assert (vent);
298
+ int port_nbr = zsock_bind (vent, "tcp://127.0.0.1:*");
299
+ assert (port_nbr != -1);
300
+ zsock_t *sink = zsock_new (ZMQ_PULL);
301
+ assert (sink);
302
+ int rc = zsock_connect (sink, "tcp://127.0.0.1:%d", port_nbr);
303
+ assert (rc != -1);
304
+ zsock_t *bowl = zsock_new (ZMQ_PULL);
305
+ assert (bowl);
306
+ zsock_t *dish = zsock_new (ZMQ_PULL);
307
+ assert (dish);
308
+
309
+ // Set up poller
310
+ zpoller_t *poller = zpoller_new (bowl, dish, NULL);
311
+ assert (poller);
312
+
313
+ // Add a reader to the existing poller
314
+ rc = zpoller_add (poller, sink);
315
+ assert (rc == 0);
316
+
317
+ zstr_send (vent, "Hello, World");
318
+
319
+ // We expect a message only on the sink
320
+ zsock_t *which = (zsock_t *) zpoller_wait (poller, -1);
321
+ assert (which == sink);
322
+ assert (zpoller_expired (poller) == false);
323
+ assert (zpoller_terminated (poller) == false);
324
+ char *message = zstr_recv (which);
325
+ assert (streq (message, "Hello, World"));
326
+ zstr_free (&message);
327
+
328
+ // Stop polling reader
329
+ rc = zpoller_remove (poller, sink);
330
+ assert (rc == 0);
331
+
332
+ // Removing a non-existent reader shall fail
333
+ rc = zpoller_remove (poller, sink);
334
+ assert (rc == -1);
335
+ assert (errno == EINVAL);
336
+
337
+ // Check we can poll an FD
338
+ rc = zsock_connect (bowl, "tcp://127.0.0.1:%d", port_nbr);
339
+ assert (rc != -1);
340
+ SOCKET fd = zsock_fd (bowl);
341
+ rc = zpoller_add (poller, (void *) &fd);
342
+ assert (rc != -1);
343
+ zstr_send (vent, "Hello again, world");
344
+ assert (zpoller_wait (poller, 500) == &fd);
345
+
346
+ // Check zpoller_set_nonstop ()
347
+ zsys_interrupted = 1;
348
+ zpoller_wait (poller, 0);
349
+ assert (zpoller_terminated (poller));
350
+ zpoller_set_nonstop (poller, true);
351
+ zpoller_wait (poller, 0);
352
+ assert (!zpoller_terminated (poller));
353
+ zsys_interrupted = 0;
354
+
355
+ zpoller_destroy (&poller);
356
+ zsock_destroy (&vent);
357
+ zsock_destroy (&sink);
358
+ zsock_destroy (&bowl);
359
+ zsock_destroy (&dish);
360
+
361
+ #ifdef ZMQ_SERVER
362
+ // Check thread safe sockets
363
+ zpoller_destroy (&poller);
364
+ zsock_t *client = zsock_new (ZMQ_CLIENT);
365
+ assert (client);
366
+ zsock_t *server = zsock_new (ZMQ_SERVER);
367
+ assert (server);
368
+ poller = zpoller_new (client, server, NULL);
369
+ assert (poller);
370
+ port_nbr = zsock_bind (server, "tcp://127.0.0.1:*");
371
+ assert (port_nbr != -1);
372
+ rc = zsock_connect (client, "tcp://127.0.0.1:%d", port_nbr);
373
+ assert (rc != -1);
374
+
375
+ zstr_send (client, "Hello, World");
376
+
377
+ // We expect a message only on the server
378
+ which = (zsock_t *) zpoller_wait (poller, -1);
379
+ assert (which == server);
380
+ assert (zpoller_expired (poller) == false);
381
+ assert (zpoller_terminated (poller) == false);
382
+ message = zstr_recv (which);
383
+ assert (streq (message, "Hello, World"));
384
+ zstr_free (&message);
385
+
386
+ zpoller_destroy (&poller);
387
+ zsock_destroy (&client);
388
+ zsock_destroy (&server);
389
+ #endif
390
+
391
+ #if defined (__WINDOWS__)
392
+ zsys_shutdown();
393
+ #endif
394
+ // @end
395
+
396
+ printf ("OK\n");
397
+ }
@@ -0,0 +1,1160 @@
1
+ /* =========================================================================
2
+ zproc - process configuration and status
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
+ zproc - process configuration and status, plus unix pipes on steroids
17
+
18
+ WARNING: zproc class have several limitations atm
19
+ * is tested on zmq4 on Linux and OSX.
20
+ * does not work on Windows, where you get empty stubs for most of the methods
21
+ * does not work on libzmq3 and libzmq2. We have experienced stalls and timeouts
22
+ when running tests against such old version
23
+
24
+ Note: zproc is not yet stable, so there are no guarantees regarding API stability.
25
+ Some methods can have weird semantics or strange API.
26
+
27
+ Class zproc run an external process and to use ZeroMQ sockets to communicate
28
+ with it. In other words standard input and outputs MAY be connected with appropriate
29
+ zeromq socket and data flow is managed by zproc itself. This makes zproc
30
+ the best in class way how to run and manage sub processes.
31
+
32
+ Data are sent and received as zframes (zframe_t), so zproc does not try to interpret
33
+ content of the messages in any way. See test example on how to use it.
34
+
35
+ +----------------------------------------+
36
+ | /bin/cat cat /etc/passwd |
37
+ | stdin | stdout | stderr |
38
+ |------||--------||---------------||-----|
39
+ | fd1 fd2 fd3 |
40
+ | ^ v v |
41
+ |zmq://stdin |zmq://stdout |zmq://stderr |
42
+ | [zproc supervisor] |
43
+ +----------------------------------------+
44
+
45
+ ----------> zeromq magic here <-----------
46
+
47
+ +----------------------------------------+
48
+ |zmq://stdin |zmq://stdout |zmq://stderr |
49
+ | |
50
+ | consumer |
51
+ | |
52
+ | |
53
+ +----------------------------------------+
54
+
55
+ @discuss
56
+ @end
57
+ */
58
+
59
+ #include "czmq_classes.h"
60
+
61
+ // For getcwd() variants
62
+ #if (defined (WIN32))
63
+ # include <direct.h>
64
+ #else
65
+ # include <unistd.h>
66
+ #endif
67
+
68
+ #define ZPROC_RUNNING -42
69
+
70
+ // ####### internal helpers for zproc #######
71
+ // vvvvvvv vvvvvvv
72
+ typedef struct _zpair_t zpair_t;
73
+
74
+ struct _zpair_t {
75
+ char *endpoint;
76
+ bool write_owned;
77
+ void *write;
78
+ bool read_owned;
79
+ void *read;
80
+ };
81
+
82
+ static zpair_t*
83
+ zpair_new (char* endpoint) {
84
+ zpair_t *self = (zpair_t*) zmalloc (sizeof (zpair_t));
85
+ self->endpoint = endpoint;
86
+ return self;
87
+ }
88
+
89
+ static void
90
+ zpair_destroy (zpair_t **self_p) {
91
+ assert (self_p);
92
+ if (*self_p) {
93
+ zpair_t *self = *self_p;
94
+ if (self->write_owned)
95
+ zsock_destroy ((zsock_t**)&self->write);
96
+ if (self->read_owned)
97
+ zsock_destroy ((zsock_t**)&self->read);
98
+ zstr_free (&self->endpoint);
99
+ freen (self);
100
+ *self_p = NULL;
101
+ }
102
+ }
103
+
104
+ static void
105
+ zpair_set_read (zpair_t *self, void *sock, bool owned) {
106
+ self->read = sock;
107
+ self->read_owned = owned;
108
+ }
109
+
110
+ static void
111
+ zpair_set_write (zpair_t *self, void *sock, bool owned) {
112
+ self->write = sock;
113
+ self->write_owned = owned;
114
+ }
115
+
116
+ static void *
117
+ zpair_read (zpair_t *self) {
118
+ return self->read;
119
+ }
120
+
121
+ static void *
122
+ zpair_write (zpair_t *self) {
123
+ return self->write;
124
+ }
125
+
126
+ static void
127
+ zpair_mkpair (zpair_t *self) {
128
+ self->endpoint[0] = '>';
129
+ self->read = zsock_new_pair (self->endpoint);
130
+ self->read_owned = true;
131
+ self->endpoint [0] = '@';
132
+ self->write = zsock_new_pair (self->endpoint);
133
+ self->write_owned = true;
134
+ self->endpoint [0] = '#';
135
+ }
136
+
137
+ static void
138
+ zpair_print (zpair_t *self) {
139
+ assert (self);
140
+ zsys_debug ("pair<%p> {.read = <%p>, .write = <%p>}",
141
+ (void*) self,
142
+ self->read,
143
+ self->write);
144
+ }
145
+
146
+ static char **
147
+ arr_new (size_t len) {
148
+ // we allocate one entry more, because there must be NULL at the end!
149
+ char **ret = (char**) zmalloc (sizeof (char*) * (len + 1));
150
+ return ret;
151
+ }
152
+
153
+ static void
154
+ arr_free (char **self) {
155
+ assert (self);
156
+ char **foo = self;
157
+ while (*self) {
158
+ freen (*(self++));
159
+ }
160
+ freen (foo);
161
+ }
162
+
163
+ static void
164
+ arr_add_ref (char **self, size_t i, char *s) {
165
+ assert (self);
166
+ self [i] = s;
167
+ }
168
+
169
+ static void
170
+ arr_print (char**self) {
171
+ assert (self);
172
+ size_t i = 0;
173
+ while (self [i]) {
174
+ zsys_debug ("%zu:\t%s<%p>", i, self [i], (void*) *self);
175
+ i += 1;
176
+ }
177
+ }
178
+
179
+ // ^^^^^^^ ^^^^^^^
180
+ // ####### internal helpers for zproc #######
181
+
182
+ struct _zproc_t {
183
+ #if ! defined (__WINDOWS__)
184
+ //TODO: there is no windows port, so lets exclude pid from struct
185
+ // zproc wasn't ported there, so no reason to do so
186
+ pid_t pid;
187
+ #endif
188
+ int return_code;
189
+ bool running;
190
+ bool verbose;
191
+
192
+ zactor_t *actor;
193
+ zloop_t *loop_ref;
194
+ zsock_t *pipe; // destroy actor pipe in a case of execve fail
195
+ int stdinpipe [2]; // stdin pipe
196
+ int stdoutpipe [2]; // stdout pipe
197
+ int stderrpipe [2]; // stderr pipe
198
+
199
+ zpair_t *stdinpair; // stdin socketpair
200
+ zpair_t *stdoutpair; // stdout socketpair
201
+ zpair_t *stderrpair; // stderr socketpair
202
+
203
+ zlistx_t *args; // command line arguments
204
+ zhashx_t *env; // environment
205
+ };
206
+
207
+ zproc_t*
208
+ zproc_new ()
209
+ {
210
+ #if defined (__WINDOWS__)
211
+ zsys_error ("zproc_set_stdin not implemented for Windows");
212
+ return NULL;
213
+ #elif ZMQ_VERSION_MAJOR < 4
214
+ zsys_error ("Cannot use zproc with zmq older than 4");
215
+ return NULL;
216
+ #endif
217
+ int major, minor, patch;
218
+ zsys_version (&major, &minor, &patch);
219
+ if (major < 4) {
220
+ zsys_error ("Cannot use zproc with zmq older than 4");
221
+ return NULL;
222
+ }
223
+
224
+ zproc_t *self = (zproc_t*) zmalloc (sizeof (zproc_t));
225
+ self->verbose = false;
226
+
227
+ zuuid_t *uuid = zuuid_new ();
228
+ self->stdinpair = zpair_new (
229
+ zsys_sprintf ("#inproc://zproc-%s-stdin", zuuid_str_canonical (uuid))
230
+ );
231
+ self->stdoutpair = zpair_new (
232
+ zsys_sprintf ("#inproc://zproc-%s-stdout", zuuid_str_canonical (uuid))
233
+ );
234
+ self->stderrpair = zpair_new (
235
+ zsys_sprintf ("#inproc://zproc-%s-stderr", zuuid_str_canonical (uuid))
236
+ );
237
+ zuuid_destroy (&uuid);
238
+
239
+ return self;
240
+ }
241
+
242
+ void
243
+ zproc_destroy (zproc_t **self_p) {
244
+ assert (self_p);
245
+ if (*self_p) {
246
+ zproc_t *self = *self_p;
247
+ zproc_wait (self, true);
248
+ zactor_destroy (&self->actor);
249
+
250
+ close (self->stdinpipe [0]);
251
+ close (self->stdinpipe [1]);
252
+ close (self->stdoutpipe [0]);
253
+ close (self->stdoutpipe [1]);
254
+ close (self->stderrpipe [0]);
255
+ close (self->stderrpipe [1]);
256
+
257
+ zpair_destroy (&self->stdinpair);
258
+ zpair_destroy (&self->stdoutpair);
259
+ zpair_destroy (&self->stderrpair);
260
+
261
+ zlistx_destroy (&self->args);
262
+ zhashx_destroy (&self->env);
263
+ freen (self);
264
+ *self_p = NULL;
265
+ }
266
+ }
267
+
268
+ void
269
+ zproc_set_args (zproc_t *self, zlistx_t *args) {
270
+ assert (self);
271
+ zlistx_destroy (&self->args);
272
+ self->args = args;
273
+ }
274
+
275
+ void
276
+ zproc_set_env (zproc_t *self, zhashx_t *env) {
277
+ assert (self);
278
+ zhashx_destroy (&self->env);
279
+ self->env = env;
280
+ }
281
+
282
+ void
283
+ zproc_set_stdin (zproc_t *self, void* socket) {
284
+ assert (self);
285
+ #if defined (__WINDOWS__)
286
+ zsys_error ("zproc_set_stdin not implemented for Windows");
287
+ return;
288
+ #else
289
+ assert (self->stdinpipe [0] == 0);
290
+ int r = pipe (self->stdinpipe);
291
+ assert (r == 0);
292
+
293
+ if (!socket)
294
+ zpair_mkpair (self->stdinpair);
295
+ else
296
+ zpair_set_read (self->stdinpair, socket, false);
297
+ #endif
298
+ }
299
+
300
+ void
301
+ zproc_set_stdout (zproc_t *self, void* socket) {
302
+ assert (self);
303
+ #if defined (__WINDOWS__)
304
+ zsys_error ("zproc_set_stdout not implemented for Windows");
305
+ return;
306
+ #else
307
+ assert (self->stdoutpipe [0] == 0);
308
+ int r = pipe (self->stdoutpipe);
309
+ assert (r == 0);
310
+
311
+ if (!socket)
312
+ zpair_mkpair (self->stdoutpair);
313
+ else
314
+ zpair_set_write (self->stdoutpair, socket, false);
315
+ #endif
316
+ }
317
+
318
+ void
319
+ zproc_set_stderr (zproc_t *self, void* socket) {
320
+ assert (self);
321
+ #if defined (__WINDOWS__)
322
+ zsys_error ("zproc_set_stdout not implemented for Windows");
323
+ return;
324
+ #else
325
+ assert (self->stderrpipe [0] == 0);
326
+ int r = pipe (self->stderrpipe);
327
+ assert (r == 0);
328
+
329
+ if (!socket)
330
+ zpair_mkpair (self->stderrpair);
331
+ else
332
+ zpair_set_write (self->stderrpair, socket, false);
333
+ #endif
334
+ }
335
+
336
+ void*
337
+ zproc_stdin (zproc_t *self) {
338
+ return zpair_write (self->stdinpair);
339
+ }
340
+
341
+ void*
342
+ zproc_stdout (zproc_t *self) {
343
+ return zpair_read (self->stdoutpair);
344
+ }
345
+
346
+ void*
347
+ zproc_stderr (zproc_t *self) {
348
+ return zpair_read (self->stderrpair);
349
+ }
350
+
351
+ int
352
+ zproc_returncode (zproc_t *self) {
353
+ assert (self);
354
+ #if defined (__WINDOWS__)
355
+ zsys_error ("zproc_returncode not implemented on Windows");
356
+ return -1;
357
+ #else
358
+ assert (self->pid);
359
+ zproc_wait (self, false);
360
+ return self->return_code;
361
+ #endif
362
+ }
363
+
364
+ int
365
+ zproc_pid (zproc_t *self) {
366
+ assert (self);
367
+ #if defined (__WINDOWS__)
368
+ zsys_error ("zproc_pid not implemented on Windows");
369
+ return -1;
370
+ #else
371
+ return self->pid;
372
+ #endif
373
+ }
374
+
375
+
376
+ static int
377
+ s_fd_in_handler (zloop_t *self, zmq_pollitem_t *item, void *socket)
378
+ {
379
+ #define BUF_SIZE 1024
380
+ byte buf [BUF_SIZE];
381
+ ssize_t r = 1;
382
+
383
+ while (r > 0) {
384
+ r = read (item->fd, buf, BUF_SIZE);
385
+ if (r == -1) {
386
+ zsys_error ("read from fd %d: %s", item->fd, strerror (errno));
387
+ break;
388
+ }
389
+ else
390
+ if (r == 0)
391
+ break;
392
+ zframe_t *frame = zframe_new (buf, r);
393
+ zsock_bsend (socket, "f", frame, NULL);
394
+ zframe_destroy (&frame);
395
+ }
396
+ return 0;
397
+ #undef BUF_SIZE
398
+ }
399
+
400
+ static int
401
+ s_fd_out_handler (zloop_t *self, zmq_pollitem_t *item, void *socket)
402
+ {
403
+ ssize_t r = 1;
404
+
405
+ while (r > 0) {
406
+
407
+ zframe_t *frame;
408
+ r = zsock_brecv (socket, "f", &frame);
409
+ if (r == -1) {
410
+ zsys_error ("read from socket <%p>: %s", socket, strerror (errno));
411
+ break;
412
+ }
413
+
414
+ r = write (item->fd, zframe_data (frame), zframe_size (frame));
415
+ zframe_destroy (&frame);
416
+
417
+ if (r == -1) {
418
+ zsys_error ("write to fd %d: %s", item->fd, strerror (errno));
419
+ break;
420
+ }
421
+ }
422
+ return 0;
423
+ }
424
+
425
+ static int
426
+ s_zproc_addfd (zproc_t *self, int fd, void* socket, int flags) {
427
+ assert (self);
428
+ #if defined (__WINDOWS__)
429
+ zsys_error ("s_zproc_addfd not implemented for Windows");
430
+ return -1;
431
+ #else
432
+ zmq_pollitem_t it = {NULL, fd, flags, 0};
433
+ return zloop_poller (
434
+ self->loop_ref,
435
+ &it,
436
+ flags == ZMQ_POLLIN ? s_fd_in_handler : s_fd_out_handler,
437
+ socket);
438
+ #endif
439
+ }
440
+
441
+ static int
442
+ s_zproc_alive (zloop_t *loop, int timer_id, void *args)
443
+ {
444
+ zproc_t *self = (zproc_t*) args;
445
+ if (zsys_interrupted)
446
+ return -1;
447
+ if (zproc_pid (self) && zproc_running (self))
448
+ return 0;
449
+ return -1;
450
+ }
451
+
452
+ static int
453
+ s_zproc_execve (zproc_t *self)
454
+ {
455
+ #if defined(__WINDOWS__)
456
+ zsys_debug ("s_zproc_execve not implemented on Windows");
457
+ return -1;
458
+ #else
459
+ assert (self);
460
+ int r;
461
+
462
+ char *filename = (char*) zlistx_first (self->args);
463
+ self->pid = fork ();
464
+ if (self->pid == 0) {
465
+
466
+ if (self->stdinpipe [0] != 0) {
467
+ int o_flags = fcntl (self->stdinpipe [0], F_GETFL);
468
+ int n_flags = o_flags & (~O_NONBLOCK);
469
+ fcntl (self->stdinpipe [0], F_SETFL, n_flags);
470
+ dup2 (self->stdinpipe [0], STDIN_FILENO);
471
+ close (self->stdinpipe [1]);
472
+ }
473
+
474
+ // redirect stdout if set_stdout was called
475
+ if (self->stdoutpipe [0] != 0) {
476
+ close (self->stdoutpipe [0]);
477
+ dup2 (self->stdoutpipe [1], STDOUT_FILENO);
478
+ }
479
+
480
+ // redirect stdout if set_stderr was called
481
+ if (self->stderrpipe [0] != 0) {
482
+ close (self->stderrpipe [0]);
483
+ dup2 (self->stderrpipe [1], STDERR_FILENO);
484
+ }
485
+
486
+ // build argv for now and use self->args
487
+ char **argv2 = arr_new (zlistx_size (self->args) + 1);
488
+
489
+ size_t i = 0;
490
+ for (char *arg = (char*) zlistx_first (self->args);
491
+ arg != NULL;
492
+ arg = (char*) zlistx_next (self->args)) {
493
+ arr_add_ref (argv2, i, arg);
494
+ i++;
495
+ }
496
+ arr_add_ref (argv2, i, NULL);
497
+
498
+ // build environ for a new process
499
+ char **env = arr_new (zhashx_size (self->env) + 1);
500
+
501
+ i = 0;
502
+ for (char *arg = (char*) zhashx_first (self->env);
503
+ arg != NULL;
504
+ arg = (char*) zhashx_next (self->env)) {
505
+ char *name = (char*) zhashx_cursor (self->env);
506
+ arr_add_ref (env, i, zsys_sprintf ("%s=%s", name, arg));
507
+ i++;
508
+ }
509
+ arr_add_ref (env, i, NULL);
510
+
511
+ r = execve (filename, argv2, env);
512
+ if (r == -1) {
513
+ zsys_error ("fail to run %s: %s", filename, strerror (errno));
514
+ zproc_destroy (&self);
515
+ zsock_destroy (&self->pipe);
516
+ arr_free (argv2);
517
+ exit (errno);
518
+ }
519
+ }
520
+ else
521
+ if (self->pid == -1) {
522
+ zsys_error ("error fork: %s", strerror (errno));
523
+ exit (EXIT_FAILURE);
524
+ }
525
+ else {
526
+ if (self->verbose)
527
+ zsys_debug ("process %s with pid %d started", filename, self->pid);
528
+
529
+ if (self->stdinpipe [0] != 0) {
530
+ s_zproc_addfd (self, self->stdinpipe [1], zpair_read (self->stdinpair), ZMQ_POLLOUT);
531
+ close (self->stdinpipe [0]);
532
+ }
533
+
534
+ // add a handler for read end of stdout
535
+ if (self->stdoutpipe [1] != 0) {
536
+ s_zproc_addfd (self, self->stdoutpipe [0], zpair_write (self->stdoutpair), ZMQ_POLLIN);
537
+ close(self->stdoutpipe[1]);
538
+ }
539
+ // add a handler for read end of stderr
540
+ if (self->stderrpipe [1] != 0) {
541
+ s_zproc_addfd (self, self->stderrpipe [0], zpair_write (self->stderrpair), ZMQ_POLLIN);
542
+ close(self->stderrpipe[1]);
543
+ }
544
+ }
545
+
546
+ return 0;
547
+ #endif
548
+ }
549
+
550
+ static int
551
+ s_pipe_handler (zloop_t *loop, zsock_t *pipe, void *args) {
552
+ zproc_t *self = (zproc_t*) args;
553
+
554
+ int ret = 0;
555
+
556
+ zmsg_t *msg = zmsg_recv (pipe);
557
+ char *command = zmsg_popstr (msg);
558
+ if (self->verbose)
559
+ zsys_debug ("API command=%s", command);
560
+
561
+ if (streq (command, "$TERM"))
562
+ ret = -1;
563
+ else
564
+ if (streq (command, "RUN")) {
565
+
566
+ if (zproc_pid (self) > 0) {
567
+ zsys_error ("Can't run command twice!!");
568
+ goto end;
569
+ }
570
+
571
+ s_zproc_execve (self);
572
+ }
573
+
574
+ end:
575
+ zstr_free(&command);
576
+ zmsg_destroy (&msg);
577
+
578
+ return ret;
579
+ }
580
+
581
+ static void
582
+ s_zproc_actor (zsock_t *pipe, void *args)
583
+ {
584
+
585
+ zproc_t *self = (zproc_t*) args;
586
+ zloop_t *loop = zloop_new ();
587
+ assert (loop);
588
+ self->loop_ref = loop;
589
+ self->pipe = pipe;
590
+
591
+ zloop_reader (loop, pipe, s_pipe_handler, (void*) self);
592
+ zloop_timer (loop, 500, 0, s_zproc_alive, (void*) self);
593
+
594
+ zsock_signal (pipe, 0);
595
+ zloop_start (loop);
596
+ zloop_destroy (&loop);
597
+ zsock_signal (pipe, 0);
598
+ }
599
+
600
+ int
601
+ zproc_run (zproc_t *self)
602
+ {
603
+ #if defined (__WINDOWS__)
604
+ zsys_error ("zproc not yet implemented for Windows");
605
+ return -1;
606
+ #endif
607
+ assert (self);
608
+ assert (!self->actor);
609
+
610
+ if (!self->args || zlistx_size (self->args) == 0) {
611
+ zsys_error ("No arguments, nothing to run. Call zproc_set_args before");
612
+ return -1;
613
+ }
614
+
615
+ self->actor = zactor_new (s_zproc_actor, (void*) self);
616
+ self->running = true;
617
+ self->return_code = ZPROC_RUNNING;
618
+
619
+ zstr_send (self->actor, "RUN");
620
+ return 0;
621
+ }
622
+
623
+ int
624
+ zproc_wait (zproc_t *self, bool wait) {
625
+ #if defined (__WINDOWS__)
626
+ zsys_error ("zproc not yet implemented for Windows");
627
+ return -1;
628
+ #else
629
+ assert (self);
630
+ if (!self->pid)
631
+ return 0;
632
+
633
+ if (self->verbose)
634
+ zsys_debug ("zproc_wait [%d]: wait=%s", self->pid, wait ? "true" : "false");
635
+ int status = -1;
636
+ int options = !wait ? WNOHANG : 0;
637
+ if (self->verbose)
638
+ zsys_debug ("zproc_wait [%d]:\t!self->running=%s", self->pid, self->running ? "true" : "false");
639
+ if (!self->running)
640
+ return self->return_code;
641
+
642
+ if (self->verbose)
643
+ zsys_debug ("zproc_wait [%d]:\twaitpid", self->pid);
644
+ int r = waitpid (self->pid, &status, options);
645
+ if (self->verbose)
646
+ zsys_debug ("zproc_wait [%d]:\twaitpid, r=%d", self->pid, r);
647
+ if (!wait && r == 0)
648
+ return self->return_code;
649
+
650
+ if (WIFEXITED(status)) {
651
+ if (self->verbose)
652
+ zsys_debug ("zproc_wait [%d]:\tWIFEXITED", self->pid);
653
+ self->running = false;
654
+ self->return_code = WEXITSTATUS(status);
655
+ }
656
+ else if (WIFSIGNALED(status)) {
657
+ if (self->verbose)
658
+ zsys_debug ("zproc_wait [%d]:\tWIFSIGNALED", self->pid);
659
+ self->running = false;
660
+ self->return_code = - WTERMSIG(status);
661
+
662
+ /*
663
+ if (WCOREDUMP(status)) {
664
+ self->core_dumped = true;
665
+ }
666
+ */
667
+ }
668
+ if (self->verbose)
669
+ zsys_debug ("zproc_wait [%d]: self->return_code=%d", self->pid, self->return_code);
670
+ return ZPROC_RUNNING;
671
+ #endif
672
+ }
673
+
674
+ bool
675
+ zproc_running (zproc_t *self) {
676
+ assert (self);
677
+ #if defined (__WINDOWS__)
678
+ zsys_debug ("zproc_running not implemented on Windows");
679
+ return false;
680
+ #else
681
+ assert (self->pid);
682
+ return zproc_wait (self, false) == ZPROC_RUNNING;
683
+ #endif
684
+ }
685
+
686
+ void *
687
+ zproc_actor (zproc_t *self) {
688
+ assert (self);
689
+ return self->actor;
690
+ }
691
+
692
+ // send a signal to the subprocess
693
+ void
694
+ zproc_kill (zproc_t *self, int signum) {
695
+ assert (self);
696
+ #if defined (__WINDOWS__)
697
+ zsys_debug ("zproc_kill not implemented on Windows");
698
+ return;
699
+ #else
700
+ int r = kill (self->pid, signum);
701
+ if (r != 0)
702
+ zsys_error ("kill of pid=%d failed: %s", self->pid, strerror (errno));
703
+ zproc_wait (self, false);
704
+ #endif
705
+ }
706
+
707
+ void
708
+ zproc_set_verbose (zproc_t *self, bool verbose) {
709
+ assert (self);
710
+ self->verbose = verbose;
711
+ }
712
+
713
+ // --------------------------------------------------------------------------
714
+ // Returns CZMQ version as a single 6-digit integer encoding the major
715
+ // version (x 10000), the minor version (x 100) and the patch.
716
+
717
+ int
718
+ zproc_czmq_version (void)
719
+ {
720
+ return CZMQ_VERSION;
721
+ }
722
+
723
+
724
+ // --------------------------------------------------------------------------
725
+ // Returns true if the process received a SIGINT or SIGTERM signal.
726
+ // It is good practice to use this method to exit any infinite loop
727
+ // processing messages.
728
+
729
+ bool
730
+ zproc_interrupted (void)
731
+ {
732
+ return zsys_interrupted == 1;
733
+ }
734
+
735
+ // --------------------------------------------------------------------------
736
+ // Returns true if the underlying libzmq supports CURVE security.
737
+
738
+ bool
739
+ zproc_has_curve (void)
740
+ {
741
+ return zsys_has_curve ();
742
+ }
743
+
744
+
745
+ // --------------------------------------------------------------------------
746
+ // Return current host name, for use in public tcp:// endpoints.
747
+ // If the host name is not resolvable, returns NULL. The caller is
748
+ // responsible for destroying the return value when finished with it.
749
+
750
+ char *
751
+ zproc_hostname (void)
752
+ {
753
+ return zsys_hostname ();
754
+ }
755
+
756
+
757
+ // --------------------------------------------------------------------------
758
+ // Move the current process into the background. The precise effect
759
+ // depends on the operating system. On POSIX boxes, moves to a specified
760
+ // working directory (if specified), closes all file handles, reopens
761
+ // stdin, stdout, and stderr to the null device, and sets the process to
762
+ // ignore SIGHUP. On Windows, does nothing. Returns 0 if OK, -1 if there
763
+ // was an error.
764
+
765
+ void
766
+ zproc_daemonize (const char *workdir)
767
+ {
768
+ zsys_daemonize (workdir);
769
+ }
770
+
771
+
772
+ // --------------------------------------------------------------------------
773
+ // Drop the process ID into the lockfile, with exclusive lock, and
774
+ // switch the process to the specified group and/or user. Any of the
775
+ // arguments may be null, indicating a no-op. Returns 0 on success,
776
+ // -1 on failure. Note if you combine this with zsys_daemonize, run
777
+ // after, not before that method, or the lockfile will hold the wrong
778
+ // process ID.
779
+
780
+ void
781
+ zproc_run_as (const char *lockfile, const char *group, const char *user)
782
+ {
783
+ zsys_run_as (lockfile, group, user);
784
+ }
785
+
786
+
787
+ // --------------------------------------------------------------------------
788
+ // Configure the number of I/O threads that ZeroMQ will use. A good
789
+ // rule of thumb is one thread per gigabit of traffic in or out. The
790
+ // default is 1, sufficient for most applications. If the environment
791
+ // variable ZSYS_IO_THREADS is defined, that provides the default.
792
+ // Note that this method is valid only before any socket is created.
793
+
794
+ void
795
+ zproc_set_io_threads (size_t io_threads)
796
+ {
797
+ zsys_set_io_threads (io_threads);
798
+ }
799
+
800
+
801
+ // --------------------------------------------------------------------------
802
+ // Configure the number of sockets that ZeroMQ will allow. The default
803
+ // is 1024. The actual limit depends on the system, and you can query it
804
+ // by using zsys_socket_limit (). A value of zero means "maximum".
805
+ // Note that this method is valid only before any socket is created.
806
+
807
+ void
808
+ zproc_set_max_sockets (size_t max_sockets)
809
+ {
810
+ zsys_set_max_sockets (max_sockets);
811
+ }
812
+
813
+
814
+ // --------------------------------------------------------------------------
815
+ // Set network interface name to use for broadcasts, particularly zbeacon.
816
+ // This lets the interface be configured for test environments where required.
817
+ // For example, on Mac OS X, zbeacon cannot bind to 255.255.255.255 which is
818
+ // the default when there is no specified interface. If the environment
819
+ // variable ZSYS_INTERFACE is set, use that as the default interface name.
820
+ // Setting the interface to "*" means "use all available interfaces".
821
+
822
+ void
823
+ zproc_set_biface (const char *value)
824
+ {
825
+ zsys_set_interface (value);
826
+ }
827
+
828
+
829
+ // --------------------------------------------------------------------------
830
+ // Return network interface to use for broadcasts, or "" if none was set.
831
+
832
+ const char *
833
+ zproc_biface (void)
834
+ {
835
+ return zsys_interface ();
836
+ }
837
+
838
+
839
+ // --------------------------------------------------------------------------
840
+ // Set log identity, which is a string that prefixes all log messages sent
841
+ // by this process. The log identity defaults to the environment variable
842
+ // ZSYS_LOGIDENT, if that is set.
843
+
844
+ void
845
+ zproc_set_log_ident (const char *value)
846
+ {
847
+ zsys_set_logident (value);
848
+ }
849
+
850
+
851
+ // --------------------------------------------------------------------------
852
+ // Sends log output to a PUB socket bound to the specified endpoint. To
853
+ // collect such log output, create a SUB socket, subscribe to the traffic
854
+ // you care about, and connect to the endpoint. Log traffic is sent as a
855
+ // single string frame, in the same format as when sent to stdout. The
856
+ // log system supports a single sender; multiple calls to this method will
857
+ // bind the same sender to multiple endpoints. To disable the sender, call
858
+ // this method with a null argument.
859
+
860
+ void
861
+ zproc_set_log_sender (const char *endpoint)
862
+ {
863
+ zsys_set_logsender (endpoint);
864
+ }
865
+
866
+
867
+ // --------------------------------------------------------------------------
868
+ // Enable or disable logging to the system facility (syslog on POSIX boxes,
869
+ // event log on Windows). By default this is disabled.
870
+
871
+ void
872
+ zproc_set_log_system (bool logsystem)
873
+ {
874
+ zsys_set_logsystem (logsystem);
875
+ }
876
+
877
+
878
+ // --------------------------------------------------------------------------
879
+ // Log error condition - highest priority
880
+
881
+ void
882
+ zproc_log_error (const char *format, ...)
883
+ {
884
+ va_list argptr;
885
+ va_start (argptr, format);
886
+ char *string = zsys_vprintf (format, argptr);
887
+ va_end (argptr);
888
+ zsys_error (string);
889
+ zstr_free (&string);
890
+ }
891
+
892
+
893
+ // --------------------------------------------------------------------------
894
+ // Log warning condition - high priority
895
+
896
+ void
897
+ zproc_log_warning (const char *format, ...)
898
+ {
899
+ va_list argptr;
900
+ va_start (argptr, format);
901
+ char *string = zsys_vprintf (format, argptr);
902
+ va_end (argptr);
903
+ zsys_warning (string);
904
+ zstr_free (&string);
905
+ }
906
+
907
+
908
+ // --------------------------------------------------------------------------
909
+ // Log normal, but significant, condition - normal priority
910
+
911
+ void
912
+ zproc_log_notice (const char *format, ...)
913
+ {
914
+ va_list argptr;
915
+ va_start (argptr, format);
916
+ char *string = zsys_vprintf (format, argptr);
917
+ va_end (argptr);
918
+ zsys_notice (string);
919
+ zstr_free (&string);
920
+ }
921
+
922
+
923
+ // --------------------------------------------------------------------------
924
+ // Log informational message - low priority
925
+
926
+ void
927
+ zproc_log_info (const char *format, ...)
928
+ {
929
+ va_list argptr;
930
+ va_start (argptr, format);
931
+ char *string = zsys_vprintf (format, argptr);
932
+ va_end (argptr);
933
+ zsys_info (string);
934
+ zstr_free (&string);
935
+ }
936
+
937
+
938
+ // --------------------------------------------------------------------------
939
+ // Log debug-level message - lowest priority
940
+
941
+ void
942
+ zproc_log_debug (const char *format, ...)
943
+ {
944
+ va_list argptr;
945
+ va_start (argptr, format);
946
+ char *string = zsys_vprintf (format, argptr);
947
+ va_end (argptr);
948
+ zsys_debug (string);
949
+ zstr_free (&string);
950
+ }
951
+
952
+
953
+ // --------------------------------------------------------------------------
954
+ // Self test of this class.
955
+
956
+ void
957
+ zproc_test (bool verbose)
958
+ {
959
+ printf (" * zproc: ");
960
+
961
+ // @selftest
962
+ #if defined (__WINDOWS__)
963
+ printf ("SKIPPED (on Windows)\n");
964
+ return;
965
+ #endif
966
+ #if ZMQ_VERSION_MAJOR < 4
967
+ printf ("SKIPPED (on zmq pre-4)\n");
968
+ return;
969
+ #endif
970
+ int major, minor, patch;
971
+ zsys_version (&major, &minor, &patch);
972
+ if (major < 4) {
973
+ printf ("SKIPPED (on zmq pre-4)\n");
974
+ return;
975
+ }
976
+
977
+ // @selftest
978
+ // 0. initialization
979
+
980
+ if (verbose) {
981
+ printf("\n");
982
+ }
983
+
984
+ // find the right binary for current build (in-tree, distcheck, etc.)
985
+ char *file = NULL;
986
+ if (zsys_file_exists ("src/zsp") || zsys_file_exists ("./src/zsp"))
987
+ file = "./src/zsp";
988
+ else
989
+ if (zsys_file_exists ("../zsp"))
990
+ // WHOA: zproc: zproc_test() : current working directory is
991
+ // /home/travis/build/username/czmq/czmq-4.0.3/_build/src/selftest-rw
992
+ file = "../zsp";
993
+ else
994
+ if (zsys_file_exists ("_build/../src/zsp"))
995
+ file = "_build/../src/zsp";
996
+ else
997
+ if (zsys_file_exists ("_build/src/zsp"))
998
+ file = "_build/src/zsp";
999
+ else
1000
+ if (zsys_file_exists ("../_build/src/zsp"))
1001
+ file = "../_build/src/zsp";
1002
+ else
1003
+ if (zsys_file_exists ("../../_build/src/zsp"))
1004
+ file = "../../_build/src/zsp";
1005
+ else
1006
+ if (zsys_file_exists ("_build/sub/src/zsp"))
1007
+ file = "_build/sub/src/zsp";
1008
+ else
1009
+ if (zsys_file_exists ("../_build/sub/src/zsp"))
1010
+ file = "../_build/sub/src/zsp";
1011
+ else
1012
+ if (zsys_file_exists ("../../_build/sub/src/zsp"))
1013
+ file = "../../_build/sub/src/zsp";
1014
+ else
1015
+ if (zsys_file_exists ("zsp") || zsys_file_exists ("./zsp"))
1016
+ file = "./zsp";
1017
+ else
1018
+ if (zsys_file_exists ("../src/zsp"))
1019
+ file = "../src/zsp";
1020
+
1021
+ if (file == NULL || !zsys_file_exists (file)) {
1022
+ zsys_warning ("cannot detect zsp binary, %s does not exist", file ? file : "<null>");
1023
+
1024
+ printf ("SKIPPED (zsp helper not found)\n");
1025
+
1026
+ #if (defined (PATH_MAX))
1027
+ char cwd[PATH_MAX];
1028
+ #else
1029
+ # if (defined (_MAX_PATH))
1030
+ char cwd[_MAX_PATH];
1031
+ # else
1032
+ char cwd[1024];
1033
+ # endif
1034
+ #endif
1035
+ memset (cwd, 0, sizeof (cwd));
1036
+ #if (defined (WIN32))
1037
+ if (_getcwd(cwd, sizeof(cwd)) != NULL)
1038
+ #else
1039
+ if (getcwd(cwd, sizeof(cwd)) != NULL)
1040
+ #endif
1041
+ printf ("zproc_test() : current working directory is %s\n", cwd);
1042
+
1043
+ return;
1044
+ }
1045
+ if (verbose) {
1046
+ zsys_info ("zproc_test() : detected a zsp binary at %s\n", file);
1047
+ }
1048
+
1049
+ // Create new subproc instance
1050
+ zproc_t *self = zproc_new ();
1051
+ zproc_set_verbose (self, verbose);
1052
+ assert (self);
1053
+ // join stdout of the process to zeromq socket
1054
+ // all data will be readable from zproc_stdout socket
1055
+ zproc_set_stdout (self, NULL);
1056
+
1057
+ zlistx_t *args = zlistx_new ();
1058
+ zlistx_add_end (args, file);
1059
+ zlistx_add_end (args, "--stdout");
1060
+ zproc_set_args (self, args);
1061
+
1062
+ zhashx_t *env = zhashx_new ();
1063
+ zhashx_insert (env, "ZSP_MESSAGE", "czmq is great\n");
1064
+ zproc_set_env (self, env);
1065
+
1066
+ // execute the binary. It runs in own actor, which monitor the process and
1067
+ // pass data accross pipes and zeromq sockets
1068
+ if (verbose)
1069
+ zsys_debug("zproc_test() : launching helper '%s'", file );
1070
+ zproc_run (self);
1071
+ zpoller_t *poller = zpoller_new (zproc_stdout (self), NULL);
1072
+
1073
+ // kill the binary, it never ends, but the test must:
1074
+ // termination also flushes the output streams so we can
1075
+ // read them entirely; note that other process runs in
1076
+ // parallel to this thread
1077
+ if (verbose)
1078
+ zsys_debug("zproc_test() : sleeping 4000 msec to gather some output from helper");
1079
+ zclock_sleep (4000);
1080
+ zproc_kill (self, SIGTERM);
1081
+ zproc_wait (self, true);
1082
+
1083
+ // read the content from zproc_stdout - use zpoller and a loop
1084
+ bool stdout_read = false;
1085
+ int64_t zproc_timeout_msec = 10000;
1086
+ int64_t zproc_test_start_msec = zclock_mono();
1087
+ int64_t zproc_test_elapsed_msec = 0;
1088
+
1089
+ while (!zsys_interrupted) {
1090
+ void *which = zpoller_wait (poller, 800);
1091
+ zproc_test_elapsed_msec = zclock_mono() - zproc_test_start_msec;
1092
+
1093
+ if (!which) {
1094
+ if (stdout_read) {
1095
+ if (verbose)
1096
+ zsys_debug("zproc_test() : did not get stdout from helper, but we already have some (%" PRIi64 " msec remaining to retry)", (zproc_timeout_msec - zproc_test_elapsed_msec) );
1097
+ break;
1098
+ }
1099
+ if (zproc_timeout_msec > zproc_test_elapsed_msec) {
1100
+ if (verbose)
1101
+ zsys_debug("zproc_test() : did not get stdout from helper, %" PRIi64 " msec remaining to retry", (zproc_timeout_msec - zproc_test_elapsed_msec) );
1102
+ continue;
1103
+ }
1104
+ // ...else : we've slept a lot and got no response; kill the helper
1105
+ if (verbose)
1106
+ zsys_debug("zproc_test() : did not get stdout from helper, patience expired (%" PRIi64 " msec remaining to retry)", (zproc_timeout_msec - zproc_test_elapsed_msec) );
1107
+ break;
1108
+ }
1109
+
1110
+ if (which == zproc_stdout (self)) {
1111
+ // it suffices for us to have read something
1112
+ // we only check the first frame, others may start with the
1113
+ // expected key string broken mid-way due to alignment etc.,
1114
+ // but we drain the whole incoming queue of stdout frames.
1115
+ zframe_t *frame;
1116
+ zsock_brecv (zproc_stdout (self), "f", &frame);
1117
+ assert (frame);
1118
+ assert (zframe_data (frame));
1119
+ if (!stdout_read) {
1120
+ if (verbose)
1121
+ zsys_debug("zproc_test() : got stdout from helper, %" PRIi64 " msec was remaining to retry", (zproc_timeout_msec - zproc_test_elapsed_msec));
1122
+ assert (!strncmp(
1123
+ "czmq is great\n",
1124
+ (char*) zframe_data (frame),
1125
+ 14));
1126
+ stdout_read = true;
1127
+ }
1128
+
1129
+ if (verbose)
1130
+ zframe_print (frame, "zproc_test");
1131
+
1132
+ zframe_destroy (&frame);
1133
+ continue;
1134
+ }
1135
+
1136
+ // should not get there
1137
+ if (verbose)
1138
+ zsys_debug("zproc_test() : reached the unreachable point (unexpected zpoller result), %" PRIi64 " msec was remaining to retry", (zproc_timeout_msec - zproc_test_elapsed_msec) );
1139
+ assert (false);
1140
+ }
1141
+
1142
+ assert (stdout_read);
1143
+ zpoller_destroy (&poller);
1144
+ zproc_destroy (&self);
1145
+ // @end
1146
+
1147
+ // to have zpair print and arr print methods
1148
+ zpair_t *pair = zpair_new (strdup ("e"));
1149
+ assert (pair);
1150
+ if (verbose)
1151
+ zpair_print (pair);
1152
+ zpair_destroy (&pair);
1153
+
1154
+ char ** a = arr_new (1);
1155
+ if (verbose)
1156
+ arr_print (a);
1157
+ arr_free (a);
1158
+
1159
+ printf ("OK\n");
1160
+ }