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,76 @@
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_TRANSPORT_TSERVERSOCKET_H_
21
+ #define _THRIFT_TRANSPORT_TSERVERSOCKET_H_ 1
22
+
23
+ #include "TServerTransport.h"
24
+ #include <boost/shared_ptr.hpp>
25
+
26
+ namespace apache { namespace thrift { namespace transport {
27
+
28
+ class TSocket;
29
+
30
+ /**
31
+ * Server socket implementation of TServerTransport. Wrapper around a unix
32
+ * socket listen and accept calls.
33
+ *
34
+ */
35
+ class TServerSocket : public TServerTransport {
36
+ public:
37
+ TServerSocket(int port);
38
+ TServerSocket(int port, int sendTimeout, int recvTimeout);
39
+
40
+ ~TServerSocket();
41
+
42
+ void setSendTimeout(int sendTimeout);
43
+ void setRecvTimeout(int recvTimeout);
44
+
45
+ void setRetryLimit(int retryLimit);
46
+ void setRetryDelay(int retryDelay);
47
+
48
+ void setTcpSendBuffer(int tcpSendBuffer);
49
+ void setTcpRecvBuffer(int tcpRecvBuffer);
50
+
51
+ void listen();
52
+ void close();
53
+
54
+ void interrupt();
55
+
56
+ protected:
57
+ boost::shared_ptr<TTransport> acceptImpl();
58
+
59
+ private:
60
+ int port_;
61
+ int serverSocket_;
62
+ int acceptBacklog_;
63
+ int sendTimeout_;
64
+ int recvTimeout_;
65
+ int retryLimit_;
66
+ int retryDelay_;
67
+ int tcpSendBuffer_;
68
+ int tcpRecvBuffer_;
69
+
70
+ int intSock1_;
71
+ int intSock2_;
72
+ };
73
+
74
+ }}} // apache::thrift::transport
75
+
76
+ #endif // #ifndef _THRIFT_TRANSPORT_TSERVERSOCKET_H_
@@ -0,0 +1,92 @@
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_TRANSPORT_TSERVERTRANSPORT_H_
21
+ #define _THRIFT_TRANSPORT_TSERVERTRANSPORT_H_ 1
22
+
23
+ #include "TTransport.h"
24
+ #include "TTransportException.h"
25
+ #include <boost/shared_ptr.hpp>
26
+
27
+ namespace apache { namespace thrift { namespace transport {
28
+
29
+ /**
30
+ * Server transport framework. A server needs to have some facility for
31
+ * creating base transports to read/write from.
32
+ *
33
+ */
34
+ class TServerTransport {
35
+ public:
36
+ virtual ~TServerTransport() {}
37
+
38
+ /**
39
+ * Starts the server transport listening for new connections. Prior to this
40
+ * call most transports will not return anything when accept is called.
41
+ *
42
+ * @throws TTransportException if we were unable to listen
43
+ */
44
+ virtual void listen() {}
45
+
46
+ /**
47
+ * Gets a new dynamically allocated transport object and passes it to the
48
+ * caller. Note that it is the explicit duty of the caller to free the
49
+ * allocated object. The returned TTransport object must always be in the
50
+ * opened state. NULL should never be returned, instead an Exception should
51
+ * always be thrown.
52
+ *
53
+ * @return A new TTransport object
54
+ * @throws TTransportException if there is an error
55
+ */
56
+ boost::shared_ptr<TTransport> accept() {
57
+ boost::shared_ptr<TTransport> result = acceptImpl();
58
+ if (result == NULL) {
59
+ throw TTransportException("accept() may not return NULL");
60
+ }
61
+ return result;
62
+ }
63
+
64
+ /**
65
+ * For "smart" TServerTransport implementations that work in a multi
66
+ * threaded context this can be used to break out of an accept() call.
67
+ * It is expected that the transport will throw a TTransportException
68
+ * with the interrupted error code.
69
+ */
70
+ virtual void interrupt() {}
71
+
72
+ /**
73
+ * Closes this transport such that future calls to accept will do nothing.
74
+ */
75
+ virtual void close() = 0;
76
+
77
+ protected:
78
+ TServerTransport() {}
79
+
80
+ /**
81
+ * Subclasses should implement this function for accept.
82
+ *
83
+ * @return A newly allocated TTransport object
84
+ * @throw TTransportException If an error occurs
85
+ */
86
+ virtual boost::shared_ptr<TTransport> acceptImpl() = 0;
87
+
88
+ };
89
+
90
+ }}} // apache::thrift::transport
91
+
92
+ #endif // #ifndef _THRIFT_TRANSPORT_TSERVERTRANSPORT_H_
@@ -0,0 +1,96 @@
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_TRANSPORT_TSHORTREADTRANSPORT_H_
21
+ #define _THRIFT_TRANSPORT_TSHORTREADTRANSPORT_H_ 1
22
+
23
+ #include <cstdlib>
24
+
25
+ #include <transport/TTransport.h>
26
+
27
+ namespace apache { namespace thrift { namespace transport { namespace test {
28
+
29
+ /**
30
+ * This class is only meant for testing. It wraps another transport.
31
+ * Calls to read are passed through with some probability. Otherwise,
32
+ * the read amount is randomly reduced before being passed through.
33
+ *
34
+ */
35
+ class TShortReadTransport : public TTransport {
36
+ public:
37
+ TShortReadTransport(boost::shared_ptr<TTransport> transport, double full_prob)
38
+ : transport_(transport)
39
+ , fullProb_(full_prob)
40
+ {}
41
+
42
+ bool isOpen() {
43
+ return transport_->isOpen();
44
+ }
45
+
46
+ bool peek() {
47
+ return transport_->peek();
48
+ }
49
+
50
+ void open() {
51
+ transport_->open();
52
+ }
53
+
54
+ void close() {
55
+ transport_->close();
56
+ }
57
+
58
+ uint32_t read(uint8_t* buf, uint32_t len) {
59
+ if (len == 0) {
60
+ return 0;
61
+ }
62
+
63
+ if (rand()/(double)RAND_MAX >= fullProb_) {
64
+ len = 1 + rand()%len;
65
+ }
66
+ return transport_->read(buf, len);
67
+ }
68
+
69
+ void write(const uint8_t* buf, uint32_t len) {
70
+ transport_->write(buf, len);
71
+ }
72
+
73
+ void flush() {
74
+ transport_->flush();
75
+ }
76
+
77
+ const uint8_t* borrow(uint8_t* buf, uint32_t* len) {
78
+ return transport_->borrow(buf, len);
79
+ }
80
+
81
+ void consume(uint32_t len) {
82
+ return transport_->consume(len);
83
+ }
84
+
85
+ boost::shared_ptr<TTransport> getUnderlyingTransport() {
86
+ return transport_;
87
+ }
88
+
89
+ protected:
90
+ boost::shared_ptr<TTransport> transport_;
91
+ double fullProb_;
92
+ };
93
+
94
+ }}}} // apache::thrift::transport::test
95
+
96
+ #endif // #ifndef _THRIFT_TRANSPORT_TSHORTREADTRANSPORT_H_
@@ -0,0 +1,54 @@
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 "TSimpleFileTransport.h"
21
+
22
+ #include <sys/types.h>
23
+ #include <sys/stat.h>
24
+ #include <fcntl.h>
25
+
26
+ namespace apache { namespace thrift { namespace transport {
27
+
28
+ TSimpleFileTransport::
29
+ TSimpleFileTransport(const std::string& path, bool read, bool write)
30
+ : TFDTransport(-1, TFDTransport::CLOSE_ON_DESTROY) {
31
+ int flags = 0;
32
+ if (read && write) {
33
+ flags = O_RDWR;
34
+ } else if (read) {
35
+ flags = O_RDONLY;
36
+ } else if (write) {
37
+ flags = O_WRONLY;
38
+ } else {
39
+ throw TTransportException("Neither READ nor WRITE specified");
40
+ }
41
+ if (write) {
42
+ flags |= O_CREAT | O_APPEND;
43
+ }
44
+ int fd = ::open(path.c_str(),
45
+ flags,
46
+ S_IRUSR | S_IWUSR| S_IRGRP | S_IROTH);
47
+ if (fd < 0) {
48
+ throw TTransportException("failed to open file for writing: " + path);
49
+ }
50
+ setFD(fd);
51
+ open();
52
+ }
53
+
54
+ }}} // apache::thrift::transport
@@ -0,0 +1,41 @@
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_TRANSPORT_TSIMPLEFILETRANSPORT_H_
21
+ #define _THRIFT_TRANSPORT_TSIMPLEFILETRANSPORT_H_ 1
22
+
23
+ #include "TFDTransport.h"
24
+
25
+ namespace apache { namespace thrift { namespace transport {
26
+
27
+ /**
28
+ * Dead-simple wrapper around a file.
29
+ *
30
+ * Writeable files are opened with O_CREAT and O_APPEND
31
+ */
32
+ class TSimpleFileTransport : public TFDTransport {
33
+ public:
34
+ TSimpleFileTransport(const std::string& path,
35
+ bool read = true,
36
+ bool write = false);
37
+ };
38
+
39
+ }}} // apache::thrift::transport
40
+
41
+ #endif // _THRIFT_TRANSPORT_TSIMPLEFILETRANSPORT_H_
@@ -0,0 +1,591 @@
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 <config.h>
21
+ #include <cstring>
22
+ #include <sstream>
23
+ #include <sys/socket.h>
24
+ #include <sys/poll.h>
25
+ #include <sys/types.h>
26
+ #include <arpa/inet.h>
27
+ #include <netinet/in.h>
28
+ #include <netinet/tcp.h>
29
+ #include <netdb.h>
30
+ #include <unistd.h>
31
+ #include <errno.h>
32
+ #include <fcntl.h>
33
+
34
+ #include "concurrency/Monitor.h"
35
+ #include "TSocket.h"
36
+ #include "TTransportException.h"
37
+
38
+ namespace apache { namespace thrift { namespace transport {
39
+
40
+ using namespace std;
41
+
42
+ // Global var to track total socket sys calls
43
+ uint32_t g_socket_syscalls = 0;
44
+
45
+ /**
46
+ * TSocket implementation.
47
+ *
48
+ */
49
+
50
+ TSocket::TSocket(string host, int port) :
51
+ host_(host),
52
+ port_(port),
53
+ socket_(-1),
54
+ connTimeout_(0),
55
+ sendTimeout_(0),
56
+ recvTimeout_(0),
57
+ lingerOn_(1),
58
+ lingerVal_(0),
59
+ noDelay_(1),
60
+ maxRecvRetries_(5) {
61
+ recvTimeval_.tv_sec = (int)(recvTimeout_/1000);
62
+ recvTimeval_.tv_usec = (int)((recvTimeout_%1000)*1000);
63
+ }
64
+
65
+ TSocket::TSocket() :
66
+ host_(""),
67
+ port_(0),
68
+ socket_(-1),
69
+ connTimeout_(0),
70
+ sendTimeout_(0),
71
+ recvTimeout_(0),
72
+ lingerOn_(1),
73
+ lingerVal_(0),
74
+ noDelay_(1),
75
+ maxRecvRetries_(5) {
76
+ recvTimeval_.tv_sec = (int)(recvTimeout_/1000);
77
+ recvTimeval_.tv_usec = (int)((recvTimeout_%1000)*1000);
78
+ }
79
+
80
+ TSocket::TSocket(int socket) :
81
+ host_(""),
82
+ port_(0),
83
+ socket_(socket),
84
+ connTimeout_(0),
85
+ sendTimeout_(0),
86
+ recvTimeout_(0),
87
+ lingerOn_(1),
88
+ lingerVal_(0),
89
+ noDelay_(1),
90
+ maxRecvRetries_(5) {
91
+ recvTimeval_.tv_sec = (int)(recvTimeout_/1000);
92
+ recvTimeval_.tv_usec = (int)((recvTimeout_%1000)*1000);
93
+ }
94
+
95
+ TSocket::~TSocket() {
96
+ close();
97
+ }
98
+
99
+ bool TSocket::isOpen() {
100
+ return (socket_ >= 0);
101
+ }
102
+
103
+ bool TSocket::peek() {
104
+ if (!isOpen()) {
105
+ return false;
106
+ }
107
+ uint8_t buf;
108
+ int r = recv(socket_, &buf, 1, MSG_PEEK);
109
+ if (r == -1) {
110
+ int errno_copy = errno;
111
+ #if defined __FreeBSD__ || defined __MACH__
112
+ /* shigin:
113
+ * freebsd returns -1 and ECONNRESET if socket was closed by
114
+ * the other side
115
+ */
116
+ if (errno_copy == ECONNRESET)
117
+ {
118
+ close();
119
+ return false;
120
+ }
121
+ #endif
122
+ GlobalOutput.perror("TSocket::peek() recv() " + getSocketInfo(), errno_copy);
123
+ throw TTransportException(TTransportException::UNKNOWN, "recv()", errno_copy);
124
+ }
125
+ return (r > 0);
126
+ }
127
+
128
+ void TSocket::openConnection(struct addrinfo *res) {
129
+ if (isOpen()) {
130
+ throw TTransportException(TTransportException::ALREADY_OPEN);
131
+ }
132
+
133
+ socket_ = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
134
+ if (socket_ == -1) {
135
+ int errno_copy = errno;
136
+ GlobalOutput.perror("TSocket::open() socket() " + getSocketInfo(), errno_copy);
137
+ throw TTransportException(TTransportException::NOT_OPEN, "socket()", errno_copy);
138
+ }
139
+
140
+ // Send timeout
141
+ if (sendTimeout_ > 0) {
142
+ setSendTimeout(sendTimeout_);
143
+ }
144
+
145
+ // Recv timeout
146
+ if (recvTimeout_ > 0) {
147
+ setRecvTimeout(recvTimeout_);
148
+ }
149
+
150
+ // Linger
151
+ setLinger(lingerOn_, lingerVal_);
152
+
153
+ // No delay
154
+ setNoDelay(noDelay_);
155
+
156
+ // Set the socket to be non blocking for connect if a timeout exists
157
+ int flags = fcntl(socket_, F_GETFL, 0);
158
+ if (connTimeout_ > 0) {
159
+ if (-1 == fcntl(socket_, F_SETFL, flags | O_NONBLOCK)) {
160
+ int errno_copy = errno;
161
+ GlobalOutput.perror("TSocket::open() fcntl() " + getSocketInfo(), errno_copy);
162
+ throw TTransportException(TTransportException::NOT_OPEN, "fcntl() failed", errno_copy);
163
+ }
164
+ } else {
165
+ if (-1 == fcntl(socket_, F_SETFL, flags & ~O_NONBLOCK)) {
166
+ int errno_copy = errno;
167
+ GlobalOutput.perror("TSocket::open() fcntl " + getSocketInfo(), errno_copy);
168
+ throw TTransportException(TTransportException::NOT_OPEN, "fcntl() failed", errno_copy);
169
+ }
170
+ }
171
+
172
+ // Connect the socket
173
+ int ret = connect(socket_, res->ai_addr, res->ai_addrlen);
174
+
175
+ // success case
176
+ if (ret == 0) {
177
+ goto done;
178
+ }
179
+
180
+ if (errno != EINPROGRESS) {
181
+ int errno_copy = errno;
182
+ GlobalOutput.perror("TSocket::open() connect() " + getSocketInfo(), errno_copy);
183
+ throw TTransportException(TTransportException::NOT_OPEN, "connect() failed", errno_copy);
184
+ }
185
+
186
+
187
+ struct pollfd fds[1];
188
+ std::memset(fds, 0 , sizeof(fds));
189
+ fds[0].fd = socket_;
190
+ fds[0].events = POLLOUT;
191
+ ret = poll(fds, 1, connTimeout_);
192
+
193
+ if (ret > 0) {
194
+ // Ensure the socket is connected and that there are no errors set
195
+ int val;
196
+ socklen_t lon;
197
+ lon = sizeof(int);
198
+ int ret2 = getsockopt(socket_, SOL_SOCKET, SO_ERROR, (void *)&val, &lon);
199
+ if (ret2 == -1) {
200
+ int errno_copy = errno;
201
+ GlobalOutput.perror("TSocket::open() getsockopt() " + getSocketInfo(), errno_copy);
202
+ throw TTransportException(TTransportException::NOT_OPEN, "getsockopt()", errno_copy);
203
+ }
204
+ // no errors on socket, go to town
205
+ if (val == 0) {
206
+ goto done;
207
+ }
208
+ GlobalOutput.perror("TSocket::open() error on socket (after poll) " + getSocketInfo(), val);
209
+ throw TTransportException(TTransportException::NOT_OPEN, "socket open() error", val);
210
+ } else if (ret == 0) {
211
+ // socket timed out
212
+ string errStr = "TSocket::open() timed out " + getSocketInfo();
213
+ GlobalOutput(errStr.c_str());
214
+ throw TTransportException(TTransportException::NOT_OPEN, "open() timed out");
215
+ } else {
216
+ // error on poll()
217
+ int errno_copy = errno;
218
+ GlobalOutput.perror("TSocket::open() poll() " + getSocketInfo(), errno_copy);
219
+ throw TTransportException(TTransportException::NOT_OPEN, "poll() failed", errno_copy);
220
+ }
221
+
222
+ done:
223
+ // Set socket back to normal mode (blocking)
224
+ fcntl(socket_, F_SETFL, flags);
225
+ }
226
+
227
+ void TSocket::open() {
228
+ if (isOpen()) {
229
+ throw TTransportException(TTransportException::ALREADY_OPEN);
230
+ }
231
+
232
+ // Validate port number
233
+ if (port_ < 0 || port_ > 65536) {
234
+ throw TTransportException(TTransportException::NOT_OPEN, "Specified port is invalid");
235
+ }
236
+
237
+ struct addrinfo hints, *res, *res0;
238
+ res = NULL;
239
+ res0 = NULL;
240
+ int error;
241
+ char port[sizeof("65536")];
242
+ std::memset(&hints, 0, sizeof(hints));
243
+ hints.ai_family = PF_UNSPEC;
244
+ hints.ai_socktype = SOCK_STREAM;
245
+ hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;
246
+ sprintf(port, "%d", port_);
247
+
248
+ error = getaddrinfo(host_.c_str(), port, &hints, &res0);
249
+
250
+ if (error) {
251
+ string errStr = "TSocket::open() getaddrinfo() " + getSocketInfo() + string(gai_strerror(error));
252
+ GlobalOutput(errStr.c_str());
253
+ close();
254
+ throw TTransportException(TTransportException::NOT_OPEN, "Could not resolve host for client socket.");
255
+ }
256
+
257
+ // Cycle through all the returned addresses until one
258
+ // connects or push the exception up.
259
+ for (res = res0; res; res = res->ai_next) {
260
+ try {
261
+ openConnection(res);
262
+ break;
263
+ } catch (TTransportException& ttx) {
264
+ if (res->ai_next) {
265
+ close();
266
+ } else {
267
+ close();
268
+ freeaddrinfo(res0); // cleanup on failure
269
+ throw;
270
+ }
271
+ }
272
+ }
273
+
274
+ // Free address structure memory
275
+ freeaddrinfo(res0);
276
+ }
277
+
278
+ void TSocket::close() {
279
+ if (socket_ >= 0) {
280
+ shutdown(socket_, SHUT_RDWR);
281
+ ::close(socket_);
282
+ }
283
+ socket_ = -1;
284
+ }
285
+
286
+ uint32_t TSocket::read(uint8_t* buf, uint32_t len) {
287
+ if (socket_ < 0) {
288
+ throw TTransportException(TTransportException::NOT_OPEN, "Called read on non-open socket");
289
+ }
290
+
291
+ int32_t retries = 0;
292
+
293
+ // EAGAIN can be signalled both when a timeout has occurred and when
294
+ // the system is out of resources (an awesome undocumented feature).
295
+ // The following is an approximation of the time interval under which
296
+ // EAGAIN is taken to indicate an out of resources error.
297
+ uint32_t eagainThresholdMicros = 0;
298
+ if (recvTimeout_) {
299
+ // if a readTimeout is specified along with a max number of recv retries, then
300
+ // the threshold will ensure that the read timeout is not exceeded even in the
301
+ // case of resource errors
302
+ eagainThresholdMicros = (recvTimeout_*1000)/ ((maxRecvRetries_>0) ? maxRecvRetries_ : 2);
303
+ }
304
+
305
+ try_again:
306
+ // Read from the socket
307
+ struct timeval begin;
308
+ gettimeofday(&begin, NULL);
309
+ int got = recv(socket_, buf, len, 0);
310
+ int errno_copy = errno; //gettimeofday can change errno
311
+ struct timeval end;
312
+ gettimeofday(&end, NULL);
313
+ uint32_t readElapsedMicros = (((end.tv_sec - begin.tv_sec) * 1000 * 1000)
314
+ + (((uint64_t)(end.tv_usec - begin.tv_usec))));
315
+ ++g_socket_syscalls;
316
+
317
+ // Check for error on read
318
+ if (got < 0) {
319
+ if (errno_copy == EAGAIN) {
320
+ // check if this is the lack of resources or timeout case
321
+ if (!eagainThresholdMicros || (readElapsedMicros < eagainThresholdMicros)) {
322
+ if (retries++ < maxRecvRetries_) {
323
+ usleep(50);
324
+ goto try_again;
325
+ } else {
326
+ throw TTransportException(TTransportException::TIMED_OUT,
327
+ "EAGAIN (unavailable resources)");
328
+ }
329
+ } else {
330
+ // infer that timeout has been hit
331
+ throw TTransportException(TTransportException::TIMED_OUT,
332
+ "EAGAIN (timed out)");
333
+ }
334
+ }
335
+
336
+ // If interrupted, try again
337
+ if (errno_copy == EINTR && retries++ < maxRecvRetries_) {
338
+ goto try_again;
339
+ }
340
+
341
+ #if defined __FreeBSD__ || defined __MACH__
342
+ if (errno_copy == ECONNRESET) {
343
+ /* shigin: freebsd doesn't follow POSIX semantic of recv and fails with
344
+ * ECONNRESET if peer performed shutdown
345
+ */
346
+ close();
347
+ return 0;
348
+ }
349
+ #endif
350
+
351
+ // Now it's not a try again case, but a real probblez
352
+ GlobalOutput.perror("TSocket::read() recv() " + getSocketInfo(), errno_copy);
353
+
354
+ // If we disconnect with no linger time
355
+ if (errno_copy == ECONNRESET) {
356
+ throw TTransportException(TTransportException::NOT_OPEN, "ECONNRESET");
357
+ }
358
+
359
+ // This ish isn't open
360
+ if (errno_copy == ENOTCONN) {
361
+ throw TTransportException(TTransportException::NOT_OPEN, "ENOTCONN");
362
+ }
363
+
364
+ // Timed out!
365
+ if (errno_copy == ETIMEDOUT) {
366
+ throw TTransportException(TTransportException::TIMED_OUT, "ETIMEDOUT");
367
+ }
368
+
369
+ // Some other error, whatevz
370
+ throw TTransportException(TTransportException::UNKNOWN, "Unknown", errno_copy);
371
+ }
372
+
373
+ // The remote host has closed the socket
374
+ if (got == 0) {
375
+ close();
376
+ return 0;
377
+ }
378
+
379
+ // Pack data into string
380
+ return got;
381
+ }
382
+
383
+ void TSocket::write(const uint8_t* buf, uint32_t len) {
384
+ if (socket_ < 0) {
385
+ throw TTransportException(TTransportException::NOT_OPEN, "Called write on non-open socket");
386
+ }
387
+
388
+ uint32_t sent = 0;
389
+
390
+ while (sent < len) {
391
+
392
+ int flags = 0;
393
+ #ifdef MSG_NOSIGNAL
394
+ // Note the use of MSG_NOSIGNAL to suppress SIGPIPE errors, instead we
395
+ // check for the EPIPE return condition and close the socket in that case
396
+ flags |= MSG_NOSIGNAL;
397
+ #endif // ifdef MSG_NOSIGNAL
398
+
399
+ int b = send(socket_, buf + sent, len - sent, flags);
400
+ ++g_socket_syscalls;
401
+
402
+ // Fail on a send error
403
+ if (b < 0) {
404
+ int errno_copy = errno;
405
+ GlobalOutput.perror("TSocket::write() send() " + getSocketInfo(), errno_copy);
406
+
407
+ if (errno == EPIPE || errno == ECONNRESET || errno == ENOTCONN) {
408
+ close();
409
+ throw TTransportException(TTransportException::NOT_OPEN, "write() send()", errno_copy);
410
+ }
411
+
412
+ throw TTransportException(TTransportException::UNKNOWN, "write() send()", errno_copy);
413
+ }
414
+
415
+ // Fail on blocked send
416
+ if (b == 0) {
417
+ throw TTransportException(TTransportException::NOT_OPEN, "Socket send returned 0.");
418
+ }
419
+ sent += b;
420
+ }
421
+ }
422
+
423
+ std::string TSocket::getHost() {
424
+ return host_;
425
+ }
426
+
427
+ int TSocket::getPort() {
428
+ return port_;
429
+ }
430
+
431
+ void TSocket::setHost(string host) {
432
+ host_ = host;
433
+ }
434
+
435
+ void TSocket::setPort(int port) {
436
+ port_ = port;
437
+ }
438
+
439
+ void TSocket::setLinger(bool on, int linger) {
440
+ lingerOn_ = on;
441
+ lingerVal_ = linger;
442
+ if (socket_ < 0) {
443
+ return;
444
+ }
445
+
446
+ struct linger l = {(lingerOn_ ? 1 : 0), lingerVal_};
447
+ int ret = setsockopt(socket_, SOL_SOCKET, SO_LINGER, &l, sizeof(l));
448
+ if (ret == -1) {
449
+ int errno_copy = errno; // Copy errno because we're allocating memory.
450
+ GlobalOutput.perror("TSocket::setLinger() setsockopt() " + getSocketInfo(), errno_copy);
451
+ }
452
+ }
453
+
454
+ void TSocket::setNoDelay(bool noDelay) {
455
+ noDelay_ = noDelay;
456
+ if (socket_ < 0) {
457
+ return;
458
+ }
459
+
460
+ // Set socket to NODELAY
461
+ int v = noDelay_ ? 1 : 0;
462
+ int ret = setsockopt(socket_, IPPROTO_TCP, TCP_NODELAY, &v, sizeof(v));
463
+ if (ret == -1) {
464
+ int errno_copy = errno; // Copy errno because we're allocating memory.
465
+ GlobalOutput.perror("TSocket::setNoDelay() setsockopt() " + getSocketInfo(), errno_copy);
466
+ }
467
+ }
468
+
469
+ void TSocket::setConnTimeout(int ms) {
470
+ connTimeout_ = ms;
471
+ }
472
+
473
+ void TSocket::setRecvTimeout(int ms) {
474
+ if (ms < 0) {
475
+ char errBuf[512];
476
+ sprintf(errBuf, "TSocket::setRecvTimeout with negative input: %d\n", ms);
477
+ GlobalOutput(errBuf);
478
+ return;
479
+ }
480
+ recvTimeout_ = ms;
481
+
482
+ if (socket_ < 0) {
483
+ return;
484
+ }
485
+
486
+ recvTimeval_.tv_sec = (int)(recvTimeout_/1000);
487
+ recvTimeval_.tv_usec = (int)((recvTimeout_%1000)*1000);
488
+
489
+ // Copy because poll may modify
490
+ struct timeval r = recvTimeval_;
491
+ int ret = setsockopt(socket_, SOL_SOCKET, SO_RCVTIMEO, &r, sizeof(r));
492
+ if (ret == -1) {
493
+ int errno_copy = errno; // Copy errno because we're allocating memory.
494
+ GlobalOutput.perror("TSocket::setRecvTimeout() setsockopt() " + getSocketInfo(), errno_copy);
495
+ }
496
+ }
497
+
498
+ void TSocket::setSendTimeout(int ms) {
499
+ if (ms < 0) {
500
+ char errBuf[512];
501
+ sprintf(errBuf, "TSocket::setSendTimeout with negative input: %d\n", ms);
502
+ GlobalOutput(errBuf);
503
+ return;
504
+ }
505
+ sendTimeout_ = ms;
506
+
507
+ if (socket_ < 0) {
508
+ return;
509
+ }
510
+
511
+ struct timeval s = {(int)(sendTimeout_/1000),
512
+ (int)((sendTimeout_%1000)*1000)};
513
+ int ret = setsockopt(socket_, SOL_SOCKET, SO_SNDTIMEO, &s, sizeof(s));
514
+ if (ret == -1) {
515
+ int errno_copy = errno; // Copy errno because we're allocating memory.
516
+ GlobalOutput.perror("TSocket::setSendTimeout() setsockopt() " + getSocketInfo(), errno_copy);
517
+ }
518
+ }
519
+
520
+ void TSocket::setMaxRecvRetries(int maxRecvRetries) {
521
+ maxRecvRetries_ = maxRecvRetries;
522
+ }
523
+
524
+ string TSocket::getSocketInfo() {
525
+ std::ostringstream oss;
526
+ oss << "<Host: " << host_ << " Port: " << port_ << ">";
527
+ return oss.str();
528
+ }
529
+
530
+ std::string TSocket::getPeerHost() {
531
+ if (peerHost_.empty()) {
532
+ struct sockaddr_storage addr;
533
+ socklen_t addrLen = sizeof(addr);
534
+
535
+ if (socket_ < 0) {
536
+ return host_;
537
+ }
538
+
539
+ int rv = getpeername(socket_, (sockaddr*) &addr, &addrLen);
540
+
541
+ if (rv != 0) {
542
+ return peerHost_;
543
+ }
544
+
545
+ char clienthost[NI_MAXHOST];
546
+ char clientservice[NI_MAXSERV];
547
+
548
+ getnameinfo((sockaddr*) &addr, addrLen,
549
+ clienthost, sizeof(clienthost),
550
+ clientservice, sizeof(clientservice), 0);
551
+
552
+ peerHost_ = clienthost;
553
+ }
554
+ return peerHost_;
555
+ }
556
+
557
+ std::string TSocket::getPeerAddress() {
558
+ if (peerAddress_.empty()) {
559
+ struct sockaddr_storage addr;
560
+ socklen_t addrLen = sizeof(addr);
561
+
562
+ if (socket_ < 0) {
563
+ return peerAddress_;
564
+ }
565
+
566
+ int rv = getpeername(socket_, (sockaddr*) &addr, &addrLen);
567
+
568
+ if (rv != 0) {
569
+ return peerAddress_;
570
+ }
571
+
572
+ char clienthost[NI_MAXHOST];
573
+ char clientservice[NI_MAXSERV];
574
+
575
+ getnameinfo((sockaddr*) &addr, addrLen,
576
+ clienthost, sizeof(clienthost),
577
+ clientservice, sizeof(clientservice),
578
+ NI_NUMERICHOST|NI_NUMERICSERV);
579
+
580
+ peerAddress_ = clienthost;
581
+ peerPort_ = std::atoi(clientservice);
582
+ }
583
+ return peerAddress_;
584
+ }
585
+
586
+ int TSocket::getPeerPort() {
587
+ getPeerAddress();
588
+ return peerPort_;
589
+ }
590
+
591
+ }}} // apache::thrift::transport