auser-poolparty 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. data/VERSION.yml +1 -1
  2. data/examples/monitored_cloud.rb +1 -1
  3. data/examples/thrift/thrift_example.rb +1 -1
  4. data/lib/proto/command_interface_handler.rb +1 -1
  5. data/vendor/gems/thrift/CHANGES +35 -0
  6. data/vendor/gems/thrift/CONTRIBUTORS +77 -0
  7. data/vendor/gems/thrift/DISCLAIMER +6 -0
  8. data/vendor/gems/thrift/LICENSE +202 -0
  9. data/vendor/gems/thrift/Makefile.am +28 -0
  10. data/vendor/gems/thrift/NEWS +79 -0
  11. data/vendor/gems/thrift/NOTICE +26 -0
  12. data/vendor/gems/thrift/README +137 -0
  13. data/vendor/gems/thrift/aclocal/ax_boost_base.m4 +198 -0
  14. data/vendor/gems/thrift/aclocal/ax_javac_and_java.m4 +107 -0
  15. data/vendor/gems/thrift/aclocal/ax_lib_event.m4 +194 -0
  16. data/vendor/gems/thrift/aclocal/ax_lib_zlib.m4 +173 -0
  17. data/vendor/gems/thrift/aclocal/ax_signed_right_shift.m4 +127 -0
  18. data/vendor/gems/thrift/aclocal/ax_thrift_internal.m4 +39 -0
  19. data/vendor/gems/thrift/bootstrap.sh +35 -0
  20. data/vendor/gems/thrift/cleanup.sh +58 -0
  21. data/vendor/gems/thrift/compiler/cpp/Makefile.am +136 -0
  22. data/vendor/gems/thrift/compiler/cpp/README +39 -0
  23. data/vendor/gems/thrift/compiler/cpp/src/generate/t_cocoa_generator.cc +2331 -0
  24. data/vendor/gems/thrift/compiler/cpp/src/generate/t_cpp_generator.cc +3003 -0
  25. data/vendor/gems/thrift/compiler/cpp/src/generate/t_csharp_generator.cc +1700 -0
  26. data/vendor/gems/thrift/compiler/cpp/src/generate/t_erl_generator.cc +932 -0
  27. data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.cc +173 -0
  28. data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.h +321 -0
  29. data/vendor/gems/thrift/compiler/cpp/src/generate/t_hs_generator.cc +1445 -0
  30. data/vendor/gems/thrift/compiler/cpp/src/generate/t_html_generator.cc +637 -0
  31. data/vendor/gems/thrift/compiler/cpp/src/generate/t_java_generator.cc +3069 -0
  32. data/vendor/gems/thrift/compiler/cpp/src/generate/t_ocaml_generator.cc +1673 -0
  33. data/vendor/gems/thrift/compiler/cpp/src/generate/t_oop_generator.h +77 -0
  34. data/vendor/gems/thrift/compiler/cpp/src/generate/t_perl_generator.cc +1812 -0
  35. data/vendor/gems/thrift/compiler/cpp/src/generate/t_php_generator.cc +2281 -0
  36. data/vendor/gems/thrift/compiler/cpp/src/generate/t_py_generator.cc +2310 -0
  37. data/vendor/gems/thrift/compiler/cpp/src/generate/t_rb_generator.cc +1114 -0
  38. data/vendor/gems/thrift/compiler/cpp/src/generate/t_st_generator.cc +1071 -0
  39. data/vendor/gems/thrift/compiler/cpp/src/generate/t_xsd_generator.cc +354 -0
  40. data/vendor/gems/thrift/compiler/cpp/src/globals.h +117 -0
  41. data/vendor/gems/thrift/compiler/cpp/src/main.cc +1207 -0
  42. data/vendor/gems/thrift/compiler/cpp/src/main.h +103 -0
  43. data/vendor/gems/thrift/compiler/cpp/src/md5.c +381 -0
  44. data/vendor/gems/thrift/compiler/cpp/src/md5.h +91 -0
  45. data/vendor/gems/thrift/compiler/cpp/src/parse/t_base_type.h +137 -0
  46. data/vendor/gems/thrift/compiler/cpp/src/parse/t_const.h +59 -0
  47. data/vendor/gems/thrift/compiler/cpp/src/parse/t_const_value.h +121 -0
  48. data/vendor/gems/thrift/compiler/cpp/src/parse/t_container.h +56 -0
  49. data/vendor/gems/thrift/compiler/cpp/src/parse/t_doc.h +51 -0
  50. data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum.h +59 -0
  51. data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum_value.h +64 -0
  52. data/vendor/gems/thrift/compiler/cpp/src/parse/t_field.h +150 -0
  53. data/vendor/gems/thrift/compiler/cpp/src/parse/t_function.h +93 -0
  54. data/vendor/gems/thrift/compiler/cpp/src/parse/t_list.h +56 -0
  55. data/vendor/gems/thrift/compiler/cpp/src/parse/t_map.h +64 -0
  56. data/vendor/gems/thrift/compiler/cpp/src/parse/t_program.h +223 -0
  57. data/vendor/gems/thrift/compiler/cpp/src/parse/t_scope.h +86 -0
  58. data/vendor/gems/thrift/compiler/cpp/src/parse/t_service.h +68 -0
  59. data/vendor/gems/thrift/compiler/cpp/src/parse/t_set.h +55 -0
  60. data/vendor/gems/thrift/compiler/cpp/src/parse/t_struct.h +127 -0
  61. data/vendor/gems/thrift/compiler/cpp/src/parse/t_type.h +176 -0
  62. data/vendor/gems/thrift/compiler/cpp/src/parse/t_typedef.h +70 -0
  63. data/vendor/gems/thrift/compiler/cpp/src/platform.h +36 -0
  64. data/vendor/gems/thrift/compiler/cpp/src/thriftl.ll +303 -0
  65. data/vendor/gems/thrift/compiler/cpp/src/thrifty.yy +1140 -0
  66. data/vendor/gems/thrift/configure.ac +255 -0
  67. data/vendor/gems/thrift/contrib/fb303/LICENSE +16 -0
  68. data/vendor/gems/thrift/contrib/fb303/Makefile.am +31 -0
  69. data/vendor/gems/thrift/contrib/fb303/README +37 -0
  70. data/vendor/gems/thrift/contrib/fb303/acinclude.m4 +258 -0
  71. data/vendor/gems/thrift/contrib/fb303/aclocal/ax_boost_base.m4 +198 -0
  72. data/vendor/gems/thrift/contrib/fb303/bootstrap.sh +26 -0
  73. data/vendor/gems/thrift/contrib/fb303/configure.ac +115 -0
  74. data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.cpp +124 -0
  75. data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.h +103 -0
  76. data/vendor/gems/thrift/contrib/fb303/cpp/Makefile.am +84 -0
  77. data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.cpp +481 -0
  78. data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.h +215 -0
  79. data/vendor/gems/thrift/contrib/fb303/global_footer.mk +21 -0
  80. data/vendor/gems/thrift/contrib/fb303/global_header.mk +38 -0
  81. data/vendor/gems/thrift/contrib/fb303/if/fb303.thrift +112 -0
  82. data/vendor/gems/thrift/contrib/fb303/java/FacebookBase.java +103 -0
  83. data/vendor/gems/thrift/contrib/fb303/java/build.xml +84 -0
  84. data/vendor/gems/thrift/contrib/fb303/php/FacebookBase.php +89 -0
  85. data/vendor/gems/thrift/contrib/fb303/py/Makefile.am +44 -0
  86. data/vendor/gems/thrift/contrib/fb303/py/fb303/FacebookBase.py +82 -0
  87. data/vendor/gems/thrift/contrib/fb303/py/fb303_scripts/__init__.py +20 -0
  88. data/vendor/gems/thrift/contrib/fb303/py/fb303_scripts/fb303_simple_mgmt.py +195 -0
  89. data/vendor/gems/thrift/contrib/fb303/py/setup.py +27 -0
  90. data/vendor/gems/thrift/contrib/thrift.el +126 -0
  91. data/vendor/gems/thrift/contrib/thrift.spec +206 -0
  92. data/vendor/gems/thrift/contrib/thrift.vim +91 -0
  93. data/vendor/gems/thrift/contrib/thrift_dump.cpp +91 -0
  94. data/vendor/gems/thrift/doc/lgpl-2.1.txt +504 -0
  95. data/vendor/gems/thrift/doc/otp-base-license.txt +20 -0
  96. data/vendor/gems/thrift/doc/thrift.bnf +96 -0
  97. data/vendor/gems/thrift/doc/thrift.tex +1057 -0
  98. data/vendor/gems/thrift/lib/Makefile.am +55 -0
  99. data/vendor/gems/thrift/lib/cocoa/README +21 -0
  100. data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.h +44 -0
  101. data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.m +130 -0
  102. data/vendor/gems/thrift/lib/cocoa/src/TException.h +34 -0
  103. data/vendor/gems/thrift/lib/cocoa/src/TException.m +64 -0
  104. data/vendor/gems/thrift/lib/cocoa/src/TProcessor.h +29 -0
  105. data/vendor/gems/thrift/lib/cocoa/src/TProcessorFactory.h +27 -0
  106. data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.h +27 -0
  107. data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.m +51 -0
  108. data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.h +51 -0
  109. data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.m +477 -0
  110. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocol.h +148 -0
  111. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolException.h +25 -0
  112. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolException.m +23 -0
  113. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolFactory.h +29 -0
  114. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.h +29 -0
  115. data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.m +104 -0
  116. data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.h +50 -0
  117. data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.m +153 -0
  118. data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.h +42 -0
  119. data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.m +159 -0
  120. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.h +35 -0
  121. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.m +91 -0
  122. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.h +38 -0
  123. data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.m +89 -0
  124. data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.h +32 -0
  125. data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.m +58 -0
  126. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransport.h +36 -0
  127. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.h +30 -0
  128. data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.m +43 -0
  129. data/vendor/gems/thrift/lib/cpp/Makefile.am +158 -0
  130. data/vendor/gems/thrift/lib/cpp/README +67 -0
  131. data/vendor/gems/thrift/lib/cpp/src/TLogging.h +163 -0
  132. data/vendor/gems/thrift/lib/cpp/src/TProcessor.h +53 -0
  133. data/vendor/gems/thrift/lib/cpp/src/TReflectionLocal.h +96 -0
  134. data/vendor/gems/thrift/lib/cpp/src/Thrift.cpp +148 -0
  135. data/vendor/gems/thrift/lib/cpp/src/Thrift.h +191 -0
  136. data/vendor/gems/thrift/lib/cpp/src/concurrency/Exception.h +60 -0
  137. data/vendor/gems/thrift/lib/cpp/src/concurrency/FunctionRunner.h +77 -0
  138. data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.cpp +137 -0
  139. data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.h +84 -0
  140. data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.cpp +160 -0
  141. data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.h +114 -0
  142. data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.cpp +314 -0
  143. data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.h +130 -0
  144. data/vendor/gems/thrift/lib/cpp/src/concurrency/Thread.h +125 -0
  145. data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.cpp +493 -0
  146. data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.h +169 -0
  147. data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.cpp +284 -0
  148. data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.h +122 -0
  149. data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.cpp +55 -0
  150. data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.h +100 -0
  151. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/Tests.cpp +155 -0
  152. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadFactoryTests.h +354 -0
  153. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadManagerTests.h +379 -0
  154. data/vendor/gems/thrift/lib/cpp/src/concurrency/test/TimerManagerTests.h +155 -0
  155. data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.cpp +122 -0
  156. data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.h +77 -0
  157. data/vendor/gems/thrift/lib/cpp/src/processor/StatsProcessor.h +264 -0
  158. data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.cpp +79 -0
  159. data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.h +42 -0
  160. data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.cpp +394 -0
  161. data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.h +254 -0
  162. data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.cpp +736 -0
  163. data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.h +279 -0
  164. data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.cpp +346 -0
  165. data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.h +225 -0
  166. data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.cpp +762 -0
  167. data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.h +253 -0
  168. data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.cpp +998 -0
  169. data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.h +340 -0
  170. data/vendor/gems/thrift/lib/cpp/src/protocol/TOneWayProtocol.h +304 -0
  171. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocol.h +438 -0
  172. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolException.h +104 -0
  173. data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolTap.h +187 -0
  174. data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.cpp +750 -0
  175. data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.h +435 -0
  176. data/vendor/gems/thrift/lib/cpp/src/server/TServer.cpp +38 -0
  177. data/vendor/gems/thrift/lib/cpp/src/server/TServer.h +213 -0
  178. data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.cpp +118 -0
  179. data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.h +70 -0
  180. data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.cpp +217 -0
  181. data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.h +79 -0
  182. data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.cpp +243 -0
  183. data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.h +74 -0
  184. data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.cpp +370 -0
  185. data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.h +667 -0
  186. data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.cpp +77 -0
  187. data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.h +73 -0
  188. data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.cpp +953 -0
  189. data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.h +442 -0
  190. data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.cpp +348 -0
  191. data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.h +111 -0
  192. data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.cpp +368 -0
  193. data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.h +76 -0
  194. data/vendor/gems/thrift/lib/cpp/src/transport/TServerTransport.h +92 -0
  195. data/vendor/gems/thrift/lib/cpp/src/transport/TShortReadTransport.h +96 -0
  196. data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.cpp +54 -0
  197. data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.h +41 -0
  198. data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.cpp +591 -0
  199. data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.h +242 -0
  200. data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.cpp +235 -0
  201. data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.h +191 -0
  202. data/vendor/gems/thrift/lib/cpp/src/transport/TTransport.h +224 -0
  203. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.cpp +31 -0
  204. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.h +117 -0
  205. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.cpp +178 -0
  206. data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.h +287 -0
  207. data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.cpp +299 -0
  208. data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.h +219 -0
  209. data/vendor/gems/thrift/lib/cpp/thrift-nb.pc.in +30 -0
  210. data/vendor/gems/thrift/lib/cpp/thrift-z.pc.in +30 -0
  211. data/vendor/gems/thrift/lib/cpp/thrift.pc.in +29 -0
  212. data/vendor/gems/thrift/lib/csharp/Makefile.am +70 -0
  213. data/vendor/gems/thrift/lib/csharp/README +26 -0
  214. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs +55 -0
  215. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftBuild.cs +242 -0
  216. data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftMSBuildTask.csproj +62 -0
  217. data/vendor/gems/thrift/lib/csharp/src/Collections/THashSet.cs +142 -0
  218. data/vendor/gems/thrift/lib/csharp/src/Protocol/TBase.cs +34 -0
  219. data/vendor/gems/thrift/lib/csharp/src/Protocol/TBinaryProtocol.cs +392 -0
  220. data/vendor/gems/thrift/lib/csharp/src/Protocol/TField.cs +58 -0
  221. data/vendor/gems/thrift/lib/csharp/src/Protocol/TList.cs +50 -0
  222. data/vendor/gems/thrift/lib/csharp/src/Protocol/TMap.cs +58 -0
  223. data/vendor/gems/thrift/lib/csharp/src/Protocol/TMessage.cs +58 -0
  224. data/vendor/gems/thrift/lib/csharp/src/Protocol/TMessageType.cs +31 -0
  225. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocol.cs +87 -0
  226. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolException.cs +61 -0
  227. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolFactory.cs +29 -0
  228. data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolUtil.cs +94 -0
  229. data/vendor/gems/thrift/lib/csharp/src/Protocol/TSet.cs +50 -0
  230. data/vendor/gems/thrift/lib/csharp/src/Protocol/TStruct.cs +42 -0
  231. data/vendor/gems/thrift/lib/csharp/src/Protocol/TType.cs +40 -0
  232. data/vendor/gems/thrift/lib/csharp/src/Server/TServer.cs +135 -0
  233. data/vendor/gems/thrift/lib/csharp/src/Server/TSimpleServer.cs +148 -0
  234. data/vendor/gems/thrift/lib/csharp/src/Server/TThreadPoolServer.cs +186 -0
  235. data/vendor/gems/thrift/lib/csharp/src/Server/TThreadedServer.cs +234 -0
  236. data/vendor/gems/thrift/lib/csharp/src/TApplicationException.cs +131 -0
  237. data/vendor/gems/thrift/lib/csharp/src/TProcessor.cs +29 -0
  238. data/vendor/gems/thrift/lib/csharp/src/Thrift.csproj +73 -0
  239. data/vendor/gems/thrift/lib/csharp/src/Thrift.sln +35 -0
  240. data/vendor/gems/thrift/lib/csharp/src/Transport/TBufferedTransport.cs +100 -0
  241. data/vendor/gems/thrift/lib/csharp/src/Transport/TServerSocket.cs +157 -0
  242. data/vendor/gems/thrift/lib/csharp/src/Transport/TServerTransport.cs +39 -0
  243. data/vendor/gems/thrift/lib/csharp/src/Transport/TSocket.cs +144 -0
  244. data/vendor/gems/thrift/lib/csharp/src/Transport/TStreamTransport.cs +103 -0
  245. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransport.cs +66 -0
  246. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportException.cs +64 -0
  247. data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportFactory.cs +38 -0
  248. data/vendor/gems/thrift/lib/erl/Makefile +37 -0
  249. data/vendor/gems/thrift/lib/erl/README +56 -0
  250. data/vendor/gems/thrift/lib/erl/build/beamver +59 -0
  251. data/vendor/gems/thrift/lib/erl/build/buildtargets.mk +15 -0
  252. data/vendor/gems/thrift/lib/erl/build/colors.mk +24 -0
  253. data/vendor/gems/thrift/lib/erl/build/docs.mk +12 -0
  254. data/vendor/gems/thrift/lib/erl/build/mime.types +98 -0
  255. data/vendor/gems/thrift/lib/erl/build/otp.mk +146 -0
  256. data/vendor/gems/thrift/lib/erl/build/otp_subdir.mk +85 -0
  257. data/vendor/gems/thrift/lib/erl/build/raw_test.mk +29 -0
  258. data/vendor/gems/thrift/lib/erl/include/thrift_constants.hrl +54 -0
  259. data/vendor/gems/thrift/lib/erl/include/thrift_protocol.hrl +31 -0
  260. data/vendor/gems/thrift/lib/erl/src/Makefile +116 -0
  261. data/vendor/gems/thrift/lib/erl/src/test_handler.erl +26 -0
  262. data/vendor/gems/thrift/lib/erl/src/test_service.erl +29 -0
  263. data/vendor/gems/thrift/lib/erl/src/thrift.app.src +44 -0
  264. data/vendor/gems/thrift/lib/erl/src/thrift.appup.src +1 -0
  265. data/vendor/gems/thrift/lib/erl/src/thrift_base64_transport.erl +64 -0
  266. data/vendor/gems/thrift/lib/erl/src/thrift_binary_protocol.erl +325 -0
  267. data/vendor/gems/thrift/lib/erl/src/thrift_buffered_transport.erl +180 -0
  268. data/vendor/gems/thrift/lib/erl/src/thrift_client.erl +384 -0
  269. data/vendor/gems/thrift/lib/erl/src/thrift_disk_log_transport.erl +118 -0
  270. data/vendor/gems/thrift/lib/erl/src/thrift_file_transport.erl +87 -0
  271. data/vendor/gems/thrift/lib/erl/src/thrift_framed_transport.erl +208 -0
  272. data/vendor/gems/thrift/lib/erl/src/thrift_http_transport.erl +199 -0
  273. data/vendor/gems/thrift/lib/erl/src/thrift_memory_buffer.erl +164 -0
  274. data/vendor/gems/thrift/lib/erl/src/thrift_processor.erl +188 -0
  275. data/vendor/gems/thrift/lib/erl/src/thrift_protocol.erl +356 -0
  276. data/vendor/gems/thrift/lib/erl/src/thrift_server.erl +183 -0
  277. data/vendor/gems/thrift/lib/erl/src/thrift_service.erl +25 -0
  278. data/vendor/gems/thrift/lib/erl/src/thrift_socket_server.erl +249 -0
  279. data/vendor/gems/thrift/lib/erl/src/thrift_socket_transport.erl +119 -0
  280. data/vendor/gems/thrift/lib/erl/src/thrift_transport.erl +57 -0
  281. data/vendor/gems/thrift/lib/erl/vsn.mk +1 -0
  282. data/vendor/gems/thrift/lib/hs/README +82 -0
  283. data/vendor/gems/thrift/lib/hs/Setup.lhs +23 -0
  284. data/vendor/gems/thrift/lib/hs/TODO +2 -0
  285. data/vendor/gems/thrift/lib/hs/Thrift.cabal +20 -0
  286. data/vendor/gems/thrift/lib/hs/src/Thrift.hs +111 -0
  287. data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol.hs +191 -0
  288. data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol/Binary.hs +147 -0
  289. data/vendor/gems/thrift/lib/hs/src/Thrift/Server.hs +65 -0
  290. data/vendor/gems/thrift/lib/hs/src/Thrift/Transport.hs +60 -0
  291. data/vendor/gems/thrift/lib/hs/src/Thrift/Transport/Handle.hs +58 -0
  292. data/vendor/gems/thrift/lib/java/Makefile.am +38 -0
  293. data/vendor/gems/thrift/lib/java/README +43 -0
  294. data/vendor/gems/thrift/lib/java/build.xml +195 -0
  295. data/vendor/gems/thrift/lib/java/ivy.xml +8 -0
  296. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/IntRangeSet.java +171 -0
  297. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TApplicationException.java +123 -0
  298. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBase.java +66 -0
  299. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBaseHelper.java +102 -0
  300. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TByteArrayOutputStream.java +46 -0
  301. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TDeserializer.java +94 -0
  302. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TException.java +45 -0
  303. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TFieldRequirementType.java +30 -0
  304. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessor.java +32 -0
  305. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessorFactory.java +39 -0
  306. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TSerializer.java +110 -0
  307. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldMetaData.java +69 -0
  308. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java +42 -0
  309. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/ListMetaData.java +29 -0
  310. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/MapMetaData.java +31 -0
  311. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/SetMetaData.java +29 -0
  312. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/StructMetaData.java +31 -0
  313. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBase64Utils.java +128 -0
  314. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBinaryProtocol.java +331 -0
  315. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TCompactProtocol.java +741 -0
  316. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TField.java +48 -0
  317. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TJSONProtocol.java +927 -0
  318. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TList.java +38 -0
  319. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMap.java +40 -0
  320. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessage.java +48 -0
  321. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessageType.java +31 -0
  322. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocol.java +146 -0
  323. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolException.java +81 -0
  324. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolFactory.java +30 -0
  325. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolUtil.java +158 -0
  326. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSet.java +42 -0
  327. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSimpleJSONProtocol.java +384 -0
  328. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TStruct.java +36 -0
  329. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TType.java +40 -0
  330. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/THsHaServer.java +304 -0
  331. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TNonblockingServer.java +772 -0
  332. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TServer.java +126 -0
  333. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TSimpleServer.java +145 -0
  334. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java +271 -0
  335. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TFramedTransport.java +126 -0
  336. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/THttpClient.java +157 -0
  337. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TIOStreamTransport.java +159 -0
  338. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TMemoryBuffer.java +98 -0
  339. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerSocket.java +160 -0
  340. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerTransport.java +31 -0
  341. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingSocket.java +213 -0
  342. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingTransport.java +31 -0
  343. data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TServerSocket.java +145 -0
  344. metadata +348 -37
  345. data/vendor/gems/trollop/FAQ.txt +0 -35
  346. data/vendor/gems/trollop/History.txt +0 -84
  347. data/vendor/gems/trollop/Manifest.txt +0 -7
  348. data/vendor/gems/trollop/README.txt +0 -38
  349. data/vendor/gems/trollop/Rakefile +0 -36
  350. data/vendor/gems/trollop/lib/trollop.rb +0 -695
  351. data/vendor/gems/trollop/release-script.txt +0 -13
  352. data/vendor/gems/trollop/test/test_trollop.rb +0 -957
  353. data/vendor/gems/trollop/www/index.html +0 -167
@@ -0,0 +1,187 @@
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one
3
+ * or more contributor license agreements. See the NOTICE file
4
+ * distributed with this work for additional information
5
+ * regarding copyright ownership. The ASF licenses this file
6
+ * to you under the Apache License, Version 2.0 (the
7
+ * "License"); you may not use this file except in compliance
8
+ * with the License. You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an
14
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ * KIND, either express or implied. See the License for the
16
+ * specific language governing permissions and limitations
17
+ * under the License.
18
+ */
19
+
20
+ #ifndef _THRIFT_PROTOCOL_TPROTOCOLTAP_H_
21
+ #define _THRIFT_PROTOCOL_TPROTOCOLTAP_H_ 1
22
+
23
+ #include <protocol/TOneWayProtocol.h>
24
+
25
+ namespace apache { namespace thrift { namespace protocol {
26
+
27
+ using apache::thrift::transport::TTransport;
28
+
29
+ /**
30
+ * Puts a wiretap on a protocol object. Any reads to this class are passed
31
+ * through to an enclosed protocol object, but also mirrored as write to a
32
+ * second protocol object.
33
+ *
34
+ */
35
+ class TProtocolTap : public TReadOnlyProtocol {
36
+ public:
37
+ TProtocolTap(boost::shared_ptr<TProtocol> source,
38
+ boost::shared_ptr<TProtocol> sink)
39
+ : TReadOnlyProtocol(source->getTransport(), "TProtocolTap")
40
+ , source_(source)
41
+ , sink_(sink)
42
+ {}
43
+
44
+ virtual uint32_t readMessageBegin(std::string& name,
45
+ TMessageType& messageType,
46
+ int32_t& seqid) {
47
+ uint32_t rv = source_->readMessageBegin(name, messageType, seqid);
48
+ sink_->writeMessageBegin(name, messageType, seqid);
49
+ return rv;
50
+ }
51
+
52
+ virtual uint32_t readMessageEnd() {
53
+ uint32_t rv = source_->readMessageEnd();
54
+ sink_->writeMessageEnd();
55
+ return rv;
56
+ }
57
+
58
+ virtual uint32_t readStructBegin(std::string& name) {
59
+ uint32_t rv = source_->readStructBegin(name);
60
+ sink_->writeStructBegin(name.c_str());
61
+ return rv;
62
+ }
63
+
64
+ virtual uint32_t readStructEnd() {
65
+ uint32_t rv = source_->readStructEnd();
66
+ sink_->writeStructEnd();
67
+ return rv;
68
+ }
69
+
70
+ virtual uint32_t readFieldBegin(std::string& name,
71
+ TType& fieldType,
72
+ int16_t& fieldId) {
73
+ uint32_t rv = source_->readFieldBegin(name, fieldType, fieldId);
74
+ if (fieldType == T_STOP) {
75
+ sink_->writeFieldStop();
76
+ } else {
77
+ sink_->writeFieldBegin(name.c_str(), fieldType, fieldId);
78
+ }
79
+ return rv;
80
+ }
81
+
82
+
83
+ virtual uint32_t readFieldEnd() {
84
+ uint32_t rv = source_->readFieldEnd();
85
+ sink_->writeFieldEnd();
86
+ return rv;
87
+ }
88
+
89
+ virtual uint32_t readMapBegin(TType& keyType,
90
+ TType& valType,
91
+ uint32_t& size) {
92
+ uint32_t rv = source_->readMapBegin(keyType, valType, size);
93
+ sink_->writeMapBegin(keyType, valType, size);
94
+ return rv;
95
+ }
96
+
97
+
98
+ virtual uint32_t readMapEnd() {
99
+ uint32_t rv = source_->readMapEnd();
100
+ sink_->writeMapEnd();
101
+ return rv;
102
+ }
103
+
104
+ virtual uint32_t readListBegin(TType& elemType,
105
+ uint32_t& size) {
106
+ uint32_t rv = source_->readListBegin(elemType, size);
107
+ sink_->writeListBegin(elemType, size);
108
+ return rv;
109
+ }
110
+
111
+
112
+ virtual uint32_t readListEnd() {
113
+ uint32_t rv = source_->readListEnd();
114
+ sink_->writeListEnd();
115
+ return rv;
116
+ }
117
+
118
+ virtual uint32_t readSetBegin(TType& elemType,
119
+ uint32_t& size) {
120
+ uint32_t rv = source_->readSetBegin(elemType, size);
121
+ sink_->writeSetBegin(elemType, size);
122
+ return rv;
123
+ }
124
+
125
+
126
+ virtual uint32_t readSetEnd() {
127
+ uint32_t rv = source_->readSetEnd();
128
+ sink_->writeSetEnd();
129
+ return rv;
130
+ }
131
+
132
+ virtual uint32_t readBool(bool& value) {
133
+ uint32_t rv = source_->readBool(value);
134
+ sink_->writeBool(value);
135
+ return rv;
136
+ }
137
+
138
+ virtual uint32_t readByte(int8_t& byte) {
139
+ uint32_t rv = source_->readByte(byte);
140
+ sink_->writeByte(byte);
141
+ return rv;
142
+ }
143
+
144
+ virtual uint32_t readI16(int16_t& i16) {
145
+ uint32_t rv = source_->readI16(i16);
146
+ sink_->writeI16(i16);
147
+ return rv;
148
+ }
149
+
150
+ virtual uint32_t readI32(int32_t& i32) {
151
+ uint32_t rv = source_->readI32(i32);
152
+ sink_->writeI32(i32);
153
+ return rv;
154
+ }
155
+
156
+ virtual uint32_t readI64(int64_t& i64) {
157
+ uint32_t rv = source_->readI64(i64);
158
+ sink_->writeI64(i64);
159
+ return rv;
160
+ }
161
+
162
+ virtual uint32_t readDouble(double& dub) {
163
+ uint32_t rv = source_->readDouble(dub);
164
+ sink_->writeDouble(dub);
165
+ return rv;
166
+ }
167
+
168
+ virtual uint32_t readString(std::string& str) {
169
+ uint32_t rv = source_->readString(str);
170
+ sink_->writeString(str);
171
+ return rv;
172
+ }
173
+
174
+ virtual uint32_t readBinary(std::string& str) {
175
+ uint32_t rv = source_->readBinary(str);
176
+ sink_->writeBinary(str);
177
+ return rv;
178
+ }
179
+
180
+ private:
181
+ boost::shared_ptr<TProtocol> source_;
182
+ boost::shared_ptr<TProtocol> sink_;
183
+ };
184
+
185
+ }}} // apache::thrift::protocol
186
+
187
+ #endif // #define _THRIFT_PROTOCOL_TPROTOCOLTAP_H_ 1
@@ -0,0 +1,750 @@
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one
3
+ * or more contributor license agreements. See the NOTICE file
4
+ * distributed with this work for additional information
5
+ * regarding copyright ownership. The ASF licenses this file
6
+ * to you under the Apache License, Version 2.0 (the
7
+ * "License"); you may not use this file except in compliance
8
+ * with the License. You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an
14
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ * KIND, either express or implied. See the License for the
16
+ * specific language governing permissions and limitations
17
+ * under the License.
18
+ */
19
+
20
+ #include "TNonblockingServer.h"
21
+ #include <concurrency/Exception.h>
22
+
23
+ #include <iostream>
24
+ #include <sys/socket.h>
25
+ #include <netinet/in.h>
26
+ #include <netinet/tcp.h>
27
+ #include <netdb.h>
28
+ #include <fcntl.h>
29
+ #include <errno.h>
30
+ #include <assert.h>
31
+
32
+ namespace apache { namespace thrift { namespace server {
33
+
34
+ using namespace apache::thrift::protocol;
35
+ using namespace apache::thrift::transport;
36
+ using namespace apache::thrift::concurrency;
37
+ using namespace std;
38
+
39
+ class TConnection::Task: public Runnable {
40
+ public:
41
+ Task(boost::shared_ptr<TProcessor> processor,
42
+ boost::shared_ptr<TProtocol> input,
43
+ boost::shared_ptr<TProtocol> output,
44
+ int taskHandle) :
45
+ processor_(processor),
46
+ input_(input),
47
+ output_(output),
48
+ taskHandle_(taskHandle) {}
49
+
50
+ void run() {
51
+ try {
52
+ while (processor_->process(input_, output_)) {
53
+ if (!input_->getTransport()->peek()) {
54
+ break;
55
+ }
56
+ }
57
+ } catch (TTransportException& ttx) {
58
+ cerr << "TNonblockingServer client died: " << ttx.what() << endl;
59
+ } catch (TException& x) {
60
+ cerr << "TNonblockingServer exception: " << x.what() << endl;
61
+ } catch (...) {
62
+ cerr << "TNonblockingServer uncaught exception." << endl;
63
+ }
64
+
65
+ // Signal completion back to the libevent thread via a socketpair
66
+ int8_t b = 0;
67
+ if (-1 == send(taskHandle_, &b, sizeof(int8_t), 0)) {
68
+ GlobalOutput.perror("TNonblockingServer::Task: send ", errno);
69
+ }
70
+ if (-1 == ::close(taskHandle_)) {
71
+ GlobalOutput.perror("TNonblockingServer::Task: close, possible resource leak ", errno);
72
+ }
73
+ }
74
+
75
+ private:
76
+ boost::shared_ptr<TProcessor> processor_;
77
+ boost::shared_ptr<TProtocol> input_;
78
+ boost::shared_ptr<TProtocol> output_;
79
+ int taskHandle_;
80
+ };
81
+
82
+ void TConnection::init(int socket, short eventFlags, TNonblockingServer* s) {
83
+ socket_ = socket;
84
+ server_ = s;
85
+ appState_ = APP_INIT;
86
+ eventFlags_ = 0;
87
+
88
+ readBufferPos_ = 0;
89
+ readWant_ = 0;
90
+
91
+ writeBuffer_ = NULL;
92
+ writeBufferSize_ = 0;
93
+ writeBufferPos_ = 0;
94
+
95
+ socketState_ = SOCKET_RECV;
96
+ appState_ = APP_INIT;
97
+
98
+ taskHandle_ = -1;
99
+
100
+ // Set flags, which also registers the event
101
+ setFlags(eventFlags);
102
+
103
+ // get input/transports
104
+ factoryInputTransport_ = s->getInputTransportFactory()->getTransport(inputTransport_);
105
+ factoryOutputTransport_ = s->getOutputTransportFactory()->getTransport(outputTransport_);
106
+
107
+ // Create protocol
108
+ inputProtocol_ = s->getInputProtocolFactory()->getProtocol(factoryInputTransport_);
109
+ outputProtocol_ = s->getOutputProtocolFactory()->getProtocol(factoryOutputTransport_);
110
+ }
111
+
112
+ void TConnection::workSocket() {
113
+ int flags=0, got=0, left=0, sent=0;
114
+ uint32_t fetch = 0;
115
+
116
+ switch (socketState_) {
117
+ case SOCKET_RECV:
118
+ // It is an error to be in this state if we already have all the data
119
+ assert(readBufferPos_ < readWant_);
120
+
121
+ // Double the buffer size until it is big enough
122
+ if (readWant_ > readBufferSize_) {
123
+ while (readWant_ > readBufferSize_) {
124
+ readBufferSize_ *= 2;
125
+ }
126
+ readBuffer_ = (uint8_t*)std::realloc(readBuffer_, readBufferSize_);
127
+ if (readBuffer_ == NULL) {
128
+ GlobalOutput("TConnection::workSocket() realloc");
129
+ close();
130
+ return;
131
+ }
132
+ }
133
+
134
+ // Read from the socket
135
+ fetch = readWant_ - readBufferPos_;
136
+ got = recv(socket_, readBuffer_ + readBufferPos_, fetch, 0);
137
+
138
+ if (got > 0) {
139
+ // Move along in the buffer
140
+ readBufferPos_ += got;
141
+
142
+ // Check that we did not overdo it
143
+ assert(readBufferPos_ <= readWant_);
144
+
145
+ // We are done reading, move onto the next state
146
+ if (readBufferPos_ == readWant_) {
147
+ transition();
148
+ }
149
+ return;
150
+ } else if (got == -1) {
151
+ // Blocking errors are okay, just move on
152
+ if (errno == EAGAIN || errno == EWOULDBLOCK) {
153
+ return;
154
+ }
155
+
156
+ if (errno != ECONNRESET) {
157
+ GlobalOutput.perror("TConnection::workSocket() recv -1 ", errno);
158
+ }
159
+ }
160
+
161
+ // Whenever we get down here it means a remote disconnect
162
+ close();
163
+
164
+ return;
165
+
166
+ case SOCKET_SEND:
167
+ // Should never have position past size
168
+ assert(writeBufferPos_ <= writeBufferSize_);
169
+
170
+ // If there is no data to send, then let us move on
171
+ if (writeBufferPos_ == writeBufferSize_) {
172
+ GlobalOutput("WARNING: Send state with no data to send\n");
173
+ transition();
174
+ return;
175
+ }
176
+
177
+ flags = 0;
178
+ #ifdef MSG_NOSIGNAL
179
+ // Note the use of MSG_NOSIGNAL to suppress SIGPIPE errors, instead we
180
+ // check for the EPIPE return condition and close the socket in that case
181
+ flags |= MSG_NOSIGNAL;
182
+ #endif // ifdef MSG_NOSIGNAL
183
+
184
+ left = writeBufferSize_ - writeBufferPos_;
185
+ sent = send(socket_, writeBuffer_ + writeBufferPos_, left, flags);
186
+
187
+ if (sent <= 0) {
188
+ // Blocking errors are okay, just move on
189
+ if (errno == EAGAIN || errno == EWOULDBLOCK) {
190
+ return;
191
+ }
192
+ if (errno != EPIPE) {
193
+ GlobalOutput.perror("TConnection::workSocket() send -1 ", errno);
194
+ }
195
+ close();
196
+ return;
197
+ }
198
+
199
+ writeBufferPos_ += sent;
200
+
201
+ // Did we overdo it?
202
+ assert(writeBufferPos_ <= writeBufferSize_);
203
+
204
+ // We are done!
205
+ if (writeBufferPos_ == writeBufferSize_) {
206
+ transition();
207
+ }
208
+
209
+ return;
210
+
211
+ default:
212
+ GlobalOutput.printf("Shit Got Ill. Socket State %d", socketState_);
213
+ assert(0);
214
+ }
215
+ }
216
+
217
+ /**
218
+ * This is called when the application transitions from one state into
219
+ * another. This means that it has finished writing the data that it needed
220
+ * to, or finished receiving the data that it needed to.
221
+ */
222
+ void TConnection::transition() {
223
+
224
+ int sz = 0;
225
+
226
+ // Switch upon the state that we are currently in and move to a new state
227
+ switch (appState_) {
228
+
229
+ case APP_READ_REQUEST:
230
+ // We are done reading the request, package the read buffer into transport
231
+ // and get back some data from the dispatch function
232
+ // If we've used these transport buffers enough times, reset them to avoid bloating
233
+
234
+ inputTransport_->resetBuffer(readBuffer_, readBufferPos_);
235
+ ++numReadsSinceReset_;
236
+ if (numWritesSinceReset_ < 512) {
237
+ outputTransport_->resetBuffer();
238
+ } else {
239
+ // reset the capacity of the output transport if we used it enough times that it might be bloated
240
+ try {
241
+ outputTransport_->resetBuffer(true);
242
+ numWritesSinceReset_ = 0;
243
+ } catch (TTransportException &ttx) {
244
+ GlobalOutput.printf("TTransportException: TMemoryBuffer::resetBuffer() %s", ttx.what());
245
+ close();
246
+ return;
247
+ }
248
+ }
249
+
250
+ // Prepend four bytes of blank space to the buffer so we can
251
+ // write the frame size there later.
252
+ outputTransport_->getWritePtr(4);
253
+ outputTransport_->wroteBytes(4);
254
+
255
+ if (server_->isThreadPoolProcessing()) {
256
+ // We are setting up a Task to do this work and we will wait on it
257
+ int sv[2];
258
+ if (-1 == socketpair(AF_LOCAL, SOCK_STREAM, 0, sv)) {
259
+ GlobalOutput.perror("TConnection::socketpair() failed ", errno);
260
+ // Now we will fall through to the APP_WAIT_TASK block with no response
261
+ } else {
262
+ // Create task and dispatch to the thread manager
263
+ boost::shared_ptr<Runnable> task =
264
+ boost::shared_ptr<Runnable>(new Task(server_->getProcessor(),
265
+ inputProtocol_,
266
+ outputProtocol_,
267
+ sv[1]));
268
+ // The application is now waiting on the task to finish
269
+ appState_ = APP_WAIT_TASK;
270
+
271
+ // Create an event to be notified when the task finishes
272
+ event_set(&taskEvent_,
273
+ taskHandle_ = sv[0],
274
+ EV_READ,
275
+ TConnection::taskHandler,
276
+ this);
277
+
278
+ // Attach to the base
279
+ event_base_set(server_->getEventBase(), &taskEvent_);
280
+
281
+ // Add the event and start up the server
282
+ if (-1 == event_add(&taskEvent_, 0)) {
283
+ GlobalOutput("TNonblockingServer::serve(): coult not event_add");
284
+ return;
285
+ }
286
+ try {
287
+ server_->addTask(task);
288
+ } catch (IllegalStateException & ise) {
289
+ // The ThreadManager is not ready to handle any more tasks (it's probably shutting down).
290
+ GlobalOutput.printf("IllegalStateException: Server::process() %s", ise.what());
291
+ close();
292
+ }
293
+
294
+ // Set this connection idle so that libevent doesn't process more
295
+ // data on it while we're still waiting for the threadmanager to
296
+ // finish this task
297
+ setIdle();
298
+ return;
299
+ }
300
+ } else {
301
+ try {
302
+ // Invoke the processor
303
+ server_->getProcessor()->process(inputProtocol_, outputProtocol_);
304
+ } catch (TTransportException &ttx) {
305
+ GlobalOutput.printf("TTransportException: Server::process() %s", ttx.what());
306
+ close();
307
+ return;
308
+ } catch (TException &x) {
309
+ GlobalOutput.printf("TException: Server::process() %s", x.what());
310
+ close();
311
+ return;
312
+ } catch (...) {
313
+ GlobalOutput.printf("Server::process() unknown exception");
314
+ close();
315
+ return;
316
+ }
317
+ }
318
+
319
+ // Intentionally fall through here, the call to process has written into
320
+ // the writeBuffer_
321
+
322
+ case APP_WAIT_TASK:
323
+ // We have now finished processing a task and the result has been written
324
+ // into the outputTransport_, so we grab its contents and place them into
325
+ // the writeBuffer_ for actual writing by the libevent thread
326
+
327
+ // Get the result of the operation
328
+ outputTransport_->getBuffer(&writeBuffer_, &writeBufferSize_);
329
+
330
+ // If the function call generated return data, then move into the send
331
+ // state and get going
332
+ // 4 bytes were reserved for frame size
333
+ if (writeBufferSize_ > 4) {
334
+
335
+ // Move into write state
336
+ writeBufferPos_ = 0;
337
+ socketState_ = SOCKET_SEND;
338
+
339
+ // Put the frame size into the write buffer
340
+ int32_t frameSize = (int32_t)htonl(writeBufferSize_ - 4);
341
+ memcpy(writeBuffer_, &frameSize, 4);
342
+
343
+ // Socket into write mode
344
+ appState_ = APP_SEND_RESULT;
345
+ setWrite();
346
+
347
+ // Try to work the socket immediately
348
+ // workSocket();
349
+
350
+ return;
351
+ }
352
+
353
+ // In this case, the request was oneway and we should fall through
354
+ // right back into the read frame header state
355
+ goto LABEL_APP_INIT;
356
+
357
+ case APP_SEND_RESULT:
358
+
359
+ ++numWritesSinceReset_;
360
+
361
+ // N.B.: We also intentionally fall through here into the INIT state!
362
+
363
+ LABEL_APP_INIT:
364
+ case APP_INIT:
365
+
366
+ // reset the input buffer if we used it enough times that it might be bloated
367
+ if (numReadsSinceReset_ > 512)
368
+ {
369
+ void * new_buffer = std::realloc(readBuffer_, 1024);
370
+ if (new_buffer == NULL) {
371
+ GlobalOutput("TConnection::transition() realloc");
372
+ close();
373
+ return;
374
+ }
375
+ readBuffer_ = (uint8_t*) new_buffer;
376
+ readBufferSize_ = 1024;
377
+ numReadsSinceReset_ = 0;
378
+ }
379
+
380
+ // Clear write buffer variables
381
+ writeBuffer_ = NULL;
382
+ writeBufferPos_ = 0;
383
+ writeBufferSize_ = 0;
384
+
385
+ // Set up read buffer for getting 4 bytes
386
+ readBufferPos_ = 0;
387
+ readWant_ = 4;
388
+
389
+ // Into read4 state we go
390
+ socketState_ = SOCKET_RECV;
391
+ appState_ = APP_READ_FRAME_SIZE;
392
+
393
+ // Register read event
394
+ setRead();
395
+
396
+ // Try to work the socket right away
397
+ // workSocket();
398
+
399
+ return;
400
+
401
+ case APP_READ_FRAME_SIZE:
402
+ // We just read the request length, deserialize it
403
+ sz = *(int32_t*)readBuffer_;
404
+ sz = (int32_t)ntohl(sz);
405
+
406
+ if (sz <= 0) {
407
+ GlobalOutput.printf("TConnection:transition() Negative frame size %d, remote side not using TFramedTransport?", sz);
408
+ close();
409
+ return;
410
+ }
411
+
412
+ // Reset the read buffer
413
+ readWant_ = (uint32_t)sz;
414
+ readBufferPos_= 0;
415
+
416
+ // Move into read request state
417
+ appState_ = APP_READ_REQUEST;
418
+
419
+ // Work the socket right away
420
+ // workSocket();
421
+
422
+ return;
423
+
424
+ default:
425
+ GlobalOutput.printf("Totally Fucked. Application State %d", appState_);
426
+ assert(0);
427
+ }
428
+ }
429
+
430
+ void TConnection::setFlags(short eventFlags) {
431
+ // Catch the do nothing case
432
+ if (eventFlags_ == eventFlags) {
433
+ return;
434
+ }
435
+
436
+ // Delete a previously existing event
437
+ if (eventFlags_ != 0) {
438
+ if (event_del(&event_) == -1) {
439
+ GlobalOutput("TConnection::setFlags event_del");
440
+ return;
441
+ }
442
+ }
443
+
444
+ // Update in memory structure
445
+ eventFlags_ = eventFlags;
446
+
447
+ // Do not call event_set if there are no flags
448
+ if (!eventFlags_) {
449
+ return;
450
+ }
451
+
452
+ /**
453
+ * event_set:
454
+ *
455
+ * Prepares the event structure &event to be used in future calls to
456
+ * event_add() and event_del(). The event will be prepared to call the
457
+ * eventHandler using the 'sock' file descriptor to monitor events.
458
+ *
459
+ * The events can be either EV_READ, EV_WRITE, or both, indicating
460
+ * that an application can read or write from the file respectively without
461
+ * blocking.
462
+ *
463
+ * The eventHandler will be called with the file descriptor that triggered
464
+ * the event and the type of event which will be one of: EV_TIMEOUT,
465
+ * EV_SIGNAL, EV_READ, EV_WRITE.
466
+ *
467
+ * The additional flag EV_PERSIST makes an event_add() persistent until
468
+ * event_del() has been called.
469
+ *
470
+ * Once initialized, the &event struct can be used repeatedly with
471
+ * event_add() and event_del() and does not need to be reinitialized unless
472
+ * the eventHandler and/or the argument to it are to be changed. However,
473
+ * when an ev structure has been added to libevent using event_add() the
474
+ * structure must persist until the event occurs (assuming EV_PERSIST
475
+ * is not set) or is removed using event_del(). You may not reuse the same
476
+ * ev structure for multiple monitored descriptors; each descriptor needs
477
+ * its own ev.
478
+ */
479
+ event_set(&event_, socket_, eventFlags_, TConnection::eventHandler, this);
480
+ event_base_set(server_->getEventBase(), &event_);
481
+
482
+ // Add the event
483
+ if (event_add(&event_, 0) == -1) {
484
+ GlobalOutput("TConnection::setFlags(): could not event_add");
485
+ }
486
+ }
487
+
488
+ /**
489
+ * Closes a connection
490
+ */
491
+ void TConnection::close() {
492
+ // Delete the registered libevent
493
+ if (event_del(&event_) == -1) {
494
+ GlobalOutput("TConnection::close() event_del");
495
+ }
496
+
497
+ // Close the socket
498
+ if (socket_ > 0) {
499
+ ::close(socket_);
500
+ }
501
+ socket_ = 0;
502
+
503
+ // close any factory produced transports
504
+ factoryInputTransport_->close();
505
+ factoryOutputTransport_->close();
506
+
507
+ // Give this object back to the server that owns it
508
+ server_->returnConnection(this);
509
+ }
510
+
511
+ void TConnection::checkIdleBufferMemLimit(uint32_t limit) {
512
+ if (readBufferSize_ > limit) {
513
+ readBufferSize_ = limit;
514
+ readBuffer_ = (uint8_t*)std::realloc(readBuffer_, readBufferSize_);
515
+ if (readBuffer_ == NULL) {
516
+ GlobalOutput("TConnection::checkIdleBufferMemLimit() realloc");
517
+ close();
518
+ }
519
+ }
520
+ }
521
+
522
+ /**
523
+ * Creates a new connection either by reusing an object off the stack or
524
+ * by allocating a new one entirely
525
+ */
526
+ TConnection* TNonblockingServer::createConnection(int socket, short flags) {
527
+ // Check the stack
528
+ if (connectionStack_.empty()) {
529
+ return new TConnection(socket, flags, this);
530
+ } else {
531
+ TConnection* result = connectionStack_.top();
532
+ connectionStack_.pop();
533
+ result->init(socket, flags, this);
534
+ return result;
535
+ }
536
+ }
537
+
538
+ /**
539
+ * Returns a connection to the stack
540
+ */
541
+ void TNonblockingServer::returnConnection(TConnection* connection) {
542
+ if (connectionStackLimit_ &&
543
+ (connectionStack_.size() >= connectionStackLimit_)) {
544
+ delete connection;
545
+ } else {
546
+ connection->checkIdleBufferMemLimit(idleBufferMemLimit_);
547
+ connectionStack_.push(connection);
548
+ }
549
+ }
550
+
551
+ /**
552
+ * Server socket had something happen. We accept all waiting client
553
+ * connections on fd and assign TConnection objects to handle those requests.
554
+ */
555
+ void TNonblockingServer::handleEvent(int fd, short which) {
556
+ // Make sure that libevent didn't fuck up the socket handles
557
+ assert(fd == serverSocket_);
558
+
559
+ // Server socket accepted a new connection
560
+ socklen_t addrLen;
561
+ struct sockaddr addr;
562
+ addrLen = sizeof(addr);
563
+
564
+ // Going to accept a new client socket
565
+ int clientSocket;
566
+
567
+ // Accept as many new clients as possible, even though libevent signaled only
568
+ // one, this helps us to avoid having to go back into the libevent engine so
569
+ // many times
570
+ while ((clientSocket = accept(fd, &addr, &addrLen)) != -1) {
571
+
572
+ // Explicitly set this socket to NONBLOCK mode
573
+ int flags;
574
+ if ((flags = fcntl(clientSocket, F_GETFL, 0)) < 0 ||
575
+ fcntl(clientSocket, F_SETFL, flags | O_NONBLOCK) < 0) {
576
+ GlobalOutput.perror("thriftServerEventHandler: set O_NONBLOCK (fcntl) ", errno);
577
+ close(clientSocket);
578
+ return;
579
+ }
580
+
581
+ // Create a new TConnection for this client socket.
582
+ TConnection* clientConnection =
583
+ createConnection(clientSocket, EV_READ | EV_PERSIST);
584
+
585
+ // Fail fast if we could not create a TConnection object
586
+ if (clientConnection == NULL) {
587
+ GlobalOutput.printf("thriftServerEventHandler: failed TConnection factory");
588
+ close(clientSocket);
589
+ return;
590
+ }
591
+
592
+ // Put this client connection into the proper state
593
+ clientConnection->transition();
594
+ }
595
+
596
+ // Done looping accept, now we have to make sure the error is due to
597
+ // blocking. Any other error is a problem
598
+ if (errno != EAGAIN && errno != EWOULDBLOCK) {
599
+ GlobalOutput.perror("thriftServerEventHandler: accept() ", errno);
600
+ }
601
+ }
602
+
603
+ /**
604
+ * Creates a socket to listen on and binds it to the local port.
605
+ */
606
+ void TNonblockingServer::listenSocket() {
607
+ int s;
608
+ struct addrinfo hints, *res, *res0;
609
+ int error;
610
+
611
+ char port[sizeof("65536") + 1];
612
+ memset(&hints, 0, sizeof(hints));
613
+ hints.ai_family = PF_UNSPEC;
614
+ hints.ai_socktype = SOCK_STREAM;
615
+ hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;
616
+ sprintf(port, "%d", port_);
617
+
618
+ // Wildcard address
619
+ error = getaddrinfo(NULL, port, &hints, &res0);
620
+ if (error) {
621
+ string errStr = "TNonblockingServer::serve() getaddrinfo " + string(gai_strerror(error));
622
+ GlobalOutput(errStr.c_str());
623
+ return;
624
+ }
625
+
626
+ // Pick the ipv6 address first since ipv4 addresses can be mapped
627
+ // into ipv6 space.
628
+ for (res = res0; res; res = res->ai_next) {
629
+ if (res->ai_family == AF_INET6 || res->ai_next == NULL)
630
+ break;
631
+ }
632
+
633
+ // Create the server socket
634
+ s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
635
+ if (s == -1) {
636
+ freeaddrinfo(res0);
637
+ throw TException("TNonblockingServer::serve() socket() -1");
638
+ }
639
+
640
+ #ifdef IPV6_V6ONLY
641
+ int zero = 0;
642
+ if (-1 == setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero))) {
643
+ GlobalOutput("TServerSocket::listen() IPV6_V6ONLY");
644
+ }
645
+ #endif // #ifdef IPV6_V6ONLY
646
+
647
+
648
+ int one = 1;
649
+
650
+ // Set reuseaddr to avoid 2MSL delay on server restart
651
+ setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
652
+
653
+ if (bind(s, res->ai_addr, res->ai_addrlen) == -1) {
654
+ close(s);
655
+ freeaddrinfo(res0);
656
+ throw TException("TNonblockingServer::serve() bind");
657
+ }
658
+
659
+ // Done with the addr info
660
+ freeaddrinfo(res0);
661
+
662
+ // Set up this file descriptor for listening
663
+ listenSocket(s);
664
+ }
665
+
666
+ /**
667
+ * Takes a socket created by listenSocket() and sets various options on it
668
+ * to prepare for use in the server.
669
+ */
670
+ void TNonblockingServer::listenSocket(int s) {
671
+ // Set socket to nonblocking mode
672
+ int flags;
673
+ if ((flags = fcntl(s, F_GETFL, 0)) < 0 ||
674
+ fcntl(s, F_SETFL, flags | O_NONBLOCK) < 0) {
675
+ close(s);
676
+ throw TException("TNonblockingServer::serve() O_NONBLOCK");
677
+ }
678
+
679
+ int one = 1;
680
+ struct linger ling = {0, 0};
681
+
682
+ // Keepalive to ensure full result flushing
683
+ setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, &one, sizeof(one));
684
+
685
+ // Turn linger off to avoid hung sockets
686
+ setsockopt(s, SOL_SOCKET, SO_LINGER, &ling, sizeof(ling));
687
+
688
+ // Set TCP nodelay if available, MAC OS X Hack
689
+ // See http://lists.danga.com/pipermail/memcached/2005-March/001240.html
690
+ #ifndef TCP_NOPUSH
691
+ setsockopt(s, IPPROTO_TCP, TCP_NODELAY, &one, sizeof(one));
692
+ #endif
693
+
694
+ if (listen(s, LISTEN_BACKLOG) == -1) {
695
+ close(s);
696
+ throw TException("TNonblockingServer::serve() listen");
697
+ }
698
+
699
+ // Cool, this socket is good to go, set it as the serverSocket_
700
+ serverSocket_ = s;
701
+ }
702
+
703
+ /**
704
+ * Register the core libevent events onto the proper base.
705
+ */
706
+ void TNonblockingServer::registerEvents(event_base* base) {
707
+ assert(serverSocket_ != -1);
708
+ assert(!eventBase_);
709
+ eventBase_ = base;
710
+
711
+ // Print some libevent stats
712
+ GlobalOutput.printf("libevent %s method %s",
713
+ event_get_version(),
714
+ event_get_method());
715
+
716
+ // Register the server event
717
+ event_set(&serverEvent_,
718
+ serverSocket_,
719
+ EV_READ | EV_PERSIST,
720
+ TNonblockingServer::eventHandler,
721
+ this);
722
+ event_base_set(eventBase_, &serverEvent_);
723
+
724
+ // Add the event and start up the server
725
+ if (-1 == event_add(&serverEvent_, 0)) {
726
+ throw TException("TNonblockingServer::serve(): coult not event_add");
727
+ }
728
+ }
729
+
730
+ /**
731
+ * Main workhorse function, starts up the server listening on a port and
732
+ * loops over the libevent handler.
733
+ */
734
+ void TNonblockingServer::serve() {
735
+ // Init socket
736
+ listenSocket();
737
+
738
+ // Initialize libevent core
739
+ registerEvents(static_cast<event_base*>(event_init()));
740
+
741
+ // Run the preServe event
742
+ if (eventHandler_ != NULL) {
743
+ eventHandler_->preServe();
744
+ }
745
+
746
+ // Run libevent engine, never returns, invokes calls to eventHandler
747
+ event_base_loop(eventBase_, 0);
748
+ }
749
+
750
+ }}} // apache::thrift::server