laag-libczmq 4.1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ }