auser-poolparty 1.3.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
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,253 @@
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_TDENSEPROTOCOL_H_
21
+ #define _THRIFT_PROTOCOL_TDENSEPROTOCOL_H_ 1
22
+
23
+ #include "TBinaryProtocol.h"
24
+
25
+ namespace apache { namespace thrift { namespace protocol {
26
+
27
+ /**
28
+ * !!!WARNING!!!
29
+ * This class is still highly experimental. Incompatible changes
30
+ * WILL be made to it without notice. DO NOT USE IT YET unless
31
+ * you are coordinating your testing with the author.
32
+ *
33
+ * The dense protocol is designed to use as little space as possible.
34
+ *
35
+ * There are two types of dense protocol instances. Standalone instances
36
+ * are not used for RPC and just encoded and decode structures of
37
+ * a predetermined type. Non-standalone instances are used for RPC.
38
+ * Currently, only standalone instances exist.
39
+ *
40
+ * To use a standalone dense protocol object, you must set the type_spec
41
+ * property (either in the constructor, or with setTypeSpec) to the local
42
+ * reflection TypeSpec of the structures you will write to (or read from) the
43
+ * protocol instance.
44
+ *
45
+ * BEST PRACTICES:
46
+ * - Never use optional for primitives or containers.
47
+ * - Only use optional for structures if they are very big and very rarely set.
48
+ * - All integers are variable-length, so you can use i64 without bloating.
49
+ * - NEVER EVER change the struct definitions IN ANY WAY without either
50
+ * changing your cache keys or talking to dreiss.
51
+ *
52
+ * TODO(dreiss): New class write with old meta.
53
+ *
54
+ * We override all of TBinaryProtocol's methods.
55
+ * We inherit so that we can can explicitly call TBPs's primitive-writing
56
+ * methods within our versions.
57
+ *
58
+ */
59
+ class TDenseProtocol : public TBinaryProtocol {
60
+ protected:
61
+ static const int32_t VERSION_MASK = 0xffff0000;
62
+ // VERSION_1 (0x80010000) is taken by TBinaryProtocol.
63
+ static const int32_t VERSION_2 = 0x80020000;
64
+
65
+ public:
66
+ typedef apache::thrift::reflection::local::TypeSpec TypeSpec;
67
+ static const int FP_PREFIX_LEN;
68
+
69
+ /**
70
+ * @param tran The transport to use.
71
+ * @param type_spec The TypeSpec of the structures using this protocol.
72
+ */
73
+ TDenseProtocol(boost::shared_ptr<TTransport> trans,
74
+ TypeSpec* type_spec = NULL) :
75
+ TBinaryProtocol(trans),
76
+ type_spec_(type_spec),
77
+ standalone_(true)
78
+ {}
79
+
80
+ void setTypeSpec(TypeSpec* type_spec) {
81
+ type_spec_ = type_spec;
82
+ }
83
+ TypeSpec* getTypeSpec() {
84
+ return type_spec_;
85
+ }
86
+
87
+
88
+ /*
89
+ * Writing functions.
90
+ */
91
+
92
+ virtual uint32_t writeMessageBegin(const std::string& name,
93
+ const TMessageType messageType,
94
+ const int32_t seqid);
95
+
96
+ virtual uint32_t writeMessageEnd();
97
+
98
+
99
+ virtual uint32_t writeStructBegin(const char* name);
100
+
101
+ virtual uint32_t writeStructEnd();
102
+
103
+ virtual uint32_t writeFieldBegin(const char* name,
104
+ const TType fieldType,
105
+ const int16_t fieldId);
106
+
107
+ virtual uint32_t writeFieldEnd();
108
+
109
+ virtual uint32_t writeFieldStop();
110
+
111
+ virtual uint32_t writeMapBegin(const TType keyType,
112
+ const TType valType,
113
+ const uint32_t size);
114
+
115
+ virtual uint32_t writeMapEnd();
116
+
117
+ virtual uint32_t writeListBegin(const TType elemType,
118
+ const uint32_t size);
119
+
120
+ virtual uint32_t writeListEnd();
121
+
122
+ virtual uint32_t writeSetBegin(const TType elemType,
123
+ const uint32_t size);
124
+
125
+ virtual uint32_t writeSetEnd();
126
+
127
+ virtual uint32_t writeBool(const bool value);
128
+
129
+ virtual uint32_t writeByte(const int8_t byte);
130
+
131
+ virtual uint32_t writeI16(const int16_t i16);
132
+
133
+ virtual uint32_t writeI32(const int32_t i32);
134
+
135
+ virtual uint32_t writeI64(const int64_t i64);
136
+
137
+ virtual uint32_t writeDouble(const double dub);
138
+
139
+ virtual uint32_t writeString(const std::string& str);
140
+
141
+ virtual uint32_t writeBinary(const std::string& str);
142
+
143
+
144
+ /*
145
+ * Helper writing functions (don't do state transitions).
146
+ */
147
+ inline uint32_t subWriteI32(const int32_t i32);
148
+
149
+ inline uint32_t subWriteString(const std::string& str);
150
+
151
+ uint32_t subWriteBool(const bool value) {
152
+ return TBinaryProtocol::writeBool(value);
153
+ }
154
+
155
+
156
+ /*
157
+ * Reading functions
158
+ */
159
+
160
+ uint32_t readMessageBegin(std::string& name,
161
+ TMessageType& messageType,
162
+ int32_t& seqid);
163
+
164
+ uint32_t readMessageEnd();
165
+
166
+ uint32_t readStructBegin(std::string& name);
167
+
168
+ uint32_t readStructEnd();
169
+
170
+ uint32_t readFieldBegin(std::string& name,
171
+ TType& fieldType,
172
+ int16_t& fieldId);
173
+
174
+ uint32_t readFieldEnd();
175
+
176
+ uint32_t readMapBegin(TType& keyType,
177
+ TType& valType,
178
+ uint32_t& size);
179
+
180
+ uint32_t readMapEnd();
181
+
182
+ uint32_t readListBegin(TType& elemType,
183
+ uint32_t& size);
184
+
185
+ uint32_t readListEnd();
186
+
187
+ uint32_t readSetBegin(TType& elemType,
188
+ uint32_t& size);
189
+
190
+ uint32_t readSetEnd();
191
+
192
+ uint32_t readBool(bool& value);
193
+
194
+ uint32_t readByte(int8_t& byte);
195
+
196
+ uint32_t readI16(int16_t& i16);
197
+
198
+ uint32_t readI32(int32_t& i32);
199
+
200
+ uint32_t readI64(int64_t& i64);
201
+
202
+ uint32_t readDouble(double& dub);
203
+
204
+ uint32_t readString(std::string& str);
205
+
206
+ uint32_t readBinary(std::string& str);
207
+
208
+ /*
209
+ * Helper reading functions (don't do state transitions).
210
+ */
211
+ inline uint32_t subReadI32(int32_t& i32);
212
+
213
+ inline uint32_t subReadString(std::string& str);
214
+
215
+ uint32_t subReadBool(bool& value) {
216
+ return TBinaryProtocol::readBool(value);
217
+ }
218
+
219
+
220
+ private:
221
+
222
+ // Implementation functions, documented in the .cpp.
223
+ inline void checkTType(const TType ttype);
224
+ inline void stateTransition();
225
+
226
+ // Read and write variable-length integers.
227
+ // Uses the same technique as the MIDI file format.
228
+ inline uint32_t vlqRead(uint64_t& vlq);
229
+ inline uint32_t vlqWrite(uint64_t vlq);
230
+
231
+ // Called before throwing an exception to make the object reusable.
232
+ void resetState() {
233
+ ts_stack_.clear();
234
+ idx_stack_.clear();
235
+ mkv_stack_.clear();
236
+ }
237
+
238
+ // TypeSpec of the top-level structure to write,
239
+ // for standalone protocol objects.
240
+ TypeSpec* type_spec_;
241
+
242
+ std::vector<TypeSpec*> ts_stack_; // TypeSpec stack.
243
+ std::vector<int> idx_stack_; // InDeX stack.
244
+ std::vector<bool> mkv_stack_; // Map Key/Vlue stack.
245
+ // True = key, False = value.
246
+
247
+ // True iff this is a standalone instance (no RPC).
248
+ bool standalone_;
249
+ };
250
+
251
+ }}} // apache::thrift::protocol
252
+
253
+ #endif // #ifndef _THRIFT_PROTOCOL_TDENSEPROTOCOL_H_
@@ -0,0 +1,998 @@
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 "TJSONProtocol.h"
21
+
22
+ #include <math.h>
23
+ #include <boost/lexical_cast.hpp>
24
+ #include "TBase64Utils.h"
25
+ #include <transport/TTransportException.h>
26
+
27
+ using namespace apache::thrift::transport;
28
+
29
+ namespace apache { namespace thrift { namespace protocol {
30
+
31
+
32
+ // Static data
33
+
34
+ static const uint8_t kJSONObjectStart = '{';
35
+ static const uint8_t kJSONObjectEnd = '}';
36
+ static const uint8_t kJSONArrayStart = '[';
37
+ static const uint8_t kJSONArrayEnd = ']';
38
+ static const uint8_t kJSONNewline = '\n';
39
+ static const uint8_t kJSONPairSeparator = ':';
40
+ static const uint8_t kJSONElemSeparator = ',';
41
+ static const uint8_t kJSONBackslash = '\\';
42
+ static const uint8_t kJSONStringDelimiter = '"';
43
+ static const uint8_t kJSONZeroChar = '0';
44
+ static const uint8_t kJSONEscapeChar = 'u';
45
+
46
+ static const std::string kJSONEscapePrefix("\\u00");
47
+
48
+ static const uint32_t kThriftVersion1 = 1;
49
+
50
+ static const std::string kThriftNan("NaN");
51
+ static const std::string kThriftInfinity("Infinity");
52
+ static const std::string kThriftNegativeInfinity("-Infinity");
53
+
54
+ static const std::string kTypeNameBool("tf");
55
+ static const std::string kTypeNameByte("i8");
56
+ static const std::string kTypeNameI16("i16");
57
+ static const std::string kTypeNameI32("i32");
58
+ static const std::string kTypeNameI64("i64");
59
+ static const std::string kTypeNameDouble("dbl");
60
+ static const std::string kTypeNameStruct("rec");
61
+ static const std::string kTypeNameString("str");
62
+ static const std::string kTypeNameMap("map");
63
+ static const std::string kTypeNameList("lst");
64
+ static const std::string kTypeNameSet("set");
65
+
66
+ static const std::string &getTypeNameForTypeID(TType typeID) {
67
+ switch (typeID) {
68
+ case T_BOOL:
69
+ return kTypeNameBool;
70
+ case T_BYTE:
71
+ return kTypeNameByte;
72
+ case T_I16:
73
+ return kTypeNameI16;
74
+ case T_I32:
75
+ return kTypeNameI32;
76
+ case T_I64:
77
+ return kTypeNameI64;
78
+ case T_DOUBLE:
79
+ return kTypeNameDouble;
80
+ case T_STRING:
81
+ return kTypeNameString;
82
+ case T_STRUCT:
83
+ return kTypeNameStruct;
84
+ case T_MAP:
85
+ return kTypeNameMap;
86
+ case T_SET:
87
+ return kTypeNameSet;
88
+ case T_LIST:
89
+ return kTypeNameList;
90
+ default:
91
+ throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
92
+ "Unrecognized type");
93
+ }
94
+ }
95
+
96
+ static TType getTypeIDForTypeName(const std::string &name) {
97
+ TType result = T_STOP; // Sentinel value
98
+ if (name.length() > 1) {
99
+ switch (name[0]) {
100
+ case 'd':
101
+ result = T_DOUBLE;
102
+ break;
103
+ case 'i':
104
+ switch (name[1]) {
105
+ case '8':
106
+ result = T_BYTE;
107
+ break;
108
+ case '1':
109
+ result = T_I16;
110
+ break;
111
+ case '3':
112
+ result = T_I32;
113
+ break;
114
+ case '6':
115
+ result = T_I64;
116
+ break;
117
+ }
118
+ break;
119
+ case 'l':
120
+ result = T_LIST;
121
+ break;
122
+ case 'm':
123
+ result = T_MAP;
124
+ break;
125
+ case 'r':
126
+ result = T_STRUCT;
127
+ break;
128
+ case 's':
129
+ if (name[1] == 't') {
130
+ result = T_STRING;
131
+ }
132
+ else if (name[1] == 'e') {
133
+ result = T_SET;
134
+ }
135
+ break;
136
+ case 't':
137
+ result = T_BOOL;
138
+ break;
139
+ }
140
+ }
141
+ if (result == T_STOP) {
142
+ throw TProtocolException(TProtocolException::NOT_IMPLEMENTED,
143
+ "Unrecognized type");
144
+ }
145
+ return result;
146
+ }
147
+
148
+
149
+ // This table describes the handling for the first 0x30 characters
150
+ // 0 : escape using "\u00xx" notation
151
+ // 1 : just output index
152
+ // <other> : escape using "\<other>" notation
153
+ static const uint8_t kJSONCharTable[0x30] = {
154
+ // 0 1 2 3 4 5 6 7 8 9 A B C D E F
155
+ 0, 0, 0, 0, 0, 0, 0, 0,'b','t','n', 0,'f','r', 0, 0, // 0
156
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1
157
+ 1, 1,'"', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 2
158
+ };
159
+
160
+
161
+ // This string's characters must match up with the elements in kEscapeCharVals.
162
+ // I don't have '/' on this list even though it appears on www.json.org --
163
+ // it is not in the RFC
164
+ const static std::string kEscapeChars("\"\\bfnrt");
165
+
166
+ // The elements of this array must match up with the sequence of characters in
167
+ // kEscapeChars
168
+ const static uint8_t kEscapeCharVals[7] = {
169
+ '"', '\\', '\b', '\f', '\n', '\r', '\t',
170
+ };
171
+
172
+
173
+ // Static helper functions
174
+
175
+ // Read 1 character from the transport trans and verify that it is the
176
+ // expected character ch.
177
+ // Throw a protocol exception if it is not.
178
+ static uint32_t readSyntaxChar(TJSONProtocol::LookaheadReader &reader,
179
+ uint8_t ch) {
180
+ uint8_t ch2 = reader.read();
181
+ if (ch2 != ch) {
182
+ throw TProtocolException(TProtocolException::INVALID_DATA,
183
+ "Expected \'" + std::string((char *)&ch, 1) +
184
+ "\'; got \'" + std::string((char *)&ch2, 1) +
185
+ "\'.");
186
+ }
187
+ return 1;
188
+ }
189
+
190
+ // Return the integer value of a hex character ch.
191
+ // Throw a protocol exception if the character is not [0-9a-f].
192
+ static uint8_t hexVal(uint8_t ch) {
193
+ if ((ch >= '0') && (ch <= '9')) {
194
+ return ch - '0';
195
+ }
196
+ else if ((ch >= 'a') && (ch <= 'f')) {
197
+ return ch - 'a';
198
+ }
199
+ else {
200
+ throw TProtocolException(TProtocolException::INVALID_DATA,
201
+ "Expected hex val ([0-9a-f]); got \'"
202
+ + std::string((char *)&ch, 1) + "\'.");
203
+ }
204
+ }
205
+
206
+ // Return the hex character representing the integer val. The value is masked
207
+ // to make sure it is in the correct range.
208
+ static uint8_t hexChar(uint8_t val) {
209
+ val &= 0x0F;
210
+ if (val < 10) {
211
+ return val + '0';
212
+ }
213
+ else {
214
+ return val + 'a';
215
+ }
216
+ }
217
+
218
+ // Return true if the character ch is in [-+0-9.Ee]; false otherwise
219
+ static bool isJSONNumeric(uint8_t ch) {
220
+ switch (ch) {
221
+ case '+':
222
+ case '-':
223
+ case '.':
224
+ case '0':
225
+ case '1':
226
+ case '2':
227
+ case '3':
228
+ case '4':
229
+ case '5':
230
+ case '6':
231
+ case '7':
232
+ case '8':
233
+ case '9':
234
+ case 'E':
235
+ case 'e':
236
+ return true;
237
+ }
238
+ return false;
239
+ }
240
+
241
+
242
+ /**
243
+ * Class to serve as base JSON context and as base class for other context
244
+ * implementations
245
+ */
246
+ class TJSONContext {
247
+
248
+ public:
249
+
250
+ TJSONContext() {};
251
+
252
+ virtual ~TJSONContext() {};
253
+
254
+ /**
255
+ * Write context data to the transport. Default is to do nothing.
256
+ */
257
+ virtual uint32_t write(TTransport &trans) {
258
+ return 0;
259
+ };
260
+
261
+ /**
262
+ * Read context data from the transport. Default is to do nothing.
263
+ */
264
+ virtual uint32_t read(TJSONProtocol::LookaheadReader &reader) {
265
+ return 0;
266
+ };
267
+
268
+ /**
269
+ * Return true if numbers need to be escaped as strings in this context.
270
+ * Default behavior is to return false.
271
+ */
272
+ virtual bool escapeNum() {
273
+ return false;
274
+ }
275
+ };
276
+
277
+ // Context class for object member key-value pairs
278
+ class JSONPairContext : public TJSONContext {
279
+
280
+ public:
281
+
282
+ JSONPairContext() :
283
+ first_(true),
284
+ colon_(true) {
285
+ }
286
+
287
+ uint32_t write(TTransport &trans) {
288
+ if (first_) {
289
+ first_ = false;
290
+ colon_ = true;
291
+ return 0;
292
+ }
293
+ else {
294
+ trans.write(colon_ ? &kJSONPairSeparator : &kJSONElemSeparator, 1);
295
+ colon_ = !colon_;
296
+ return 1;
297
+ }
298
+ }
299
+
300
+ uint32_t read(TJSONProtocol::LookaheadReader &reader) {
301
+ if (first_) {
302
+ first_ = false;
303
+ colon_ = true;
304
+ return 0;
305
+ }
306
+ else {
307
+ uint8_t ch = (colon_ ? kJSONPairSeparator : kJSONElemSeparator);
308
+ colon_ = !colon_;
309
+ return readSyntaxChar(reader, ch);
310
+ }
311
+ }
312
+
313
+ // Numbers must be turned into strings if they are the key part of a pair
314
+ virtual bool escapeNum() {
315
+ return colon_;
316
+ }
317
+
318
+ private:
319
+
320
+ bool first_;
321
+ bool colon_;
322
+ };
323
+
324
+ // Context class for lists
325
+ class JSONListContext : public TJSONContext {
326
+
327
+ public:
328
+
329
+ JSONListContext() :
330
+ first_(true) {
331
+ }
332
+
333
+ uint32_t write(TTransport &trans) {
334
+ if (first_) {
335
+ first_ = false;
336
+ return 0;
337
+ }
338
+ else {
339
+ trans.write(&kJSONElemSeparator, 1);
340
+ return 1;
341
+ }
342
+ }
343
+
344
+ uint32_t read(TJSONProtocol::LookaheadReader &reader) {
345
+ if (first_) {
346
+ first_ = false;
347
+ return 0;
348
+ }
349
+ else {
350
+ return readSyntaxChar(reader, kJSONElemSeparator);
351
+ }
352
+ }
353
+
354
+ private:
355
+ bool first_;
356
+ };
357
+
358
+
359
+ TJSONProtocol::TJSONProtocol(boost::shared_ptr<TTransport> ptrans) :
360
+ TProtocol(ptrans),
361
+ context_(new TJSONContext()),
362
+ reader_(*ptrans) {
363
+ }
364
+
365
+ TJSONProtocol::~TJSONProtocol() {}
366
+
367
+ void TJSONProtocol::pushContext(boost::shared_ptr<TJSONContext> c) {
368
+ contexts_.push(context_);
369
+ context_ = c;
370
+ }
371
+
372
+ void TJSONProtocol::popContext() {
373
+ context_ = contexts_.top();
374
+ contexts_.pop();
375
+ }
376
+
377
+ // Write the character ch as a JSON escape sequence ("\u00xx")
378
+ uint32_t TJSONProtocol::writeJSONEscapeChar(uint8_t ch) {
379
+ trans_->write((const uint8_t *)kJSONEscapePrefix.c_str(),
380
+ kJSONEscapePrefix.length());
381
+ uint8_t outCh = hexChar(ch >> 4);
382
+ trans_->write(&outCh, 1);
383
+ outCh = hexChar(ch);
384
+ trans_->write(&outCh, 1);
385
+ return 6;
386
+ }
387
+
388
+ // Write the character ch as part of a JSON string, escaping as appropriate.
389
+ uint32_t TJSONProtocol::writeJSONChar(uint8_t ch) {
390
+ if (ch >= 0x30) {
391
+ if (ch == kJSONBackslash) { // Only special character >= 0x30 is '\'
392
+ trans_->write(&kJSONBackslash, 1);
393
+ trans_->write(&kJSONBackslash, 1);
394
+ return 2;
395
+ }
396
+ else {
397
+ trans_->write(&ch, 1);
398
+ return 1;
399
+ }
400
+ }
401
+ else {
402
+ uint8_t outCh = kJSONCharTable[ch];
403
+ // Check if regular character, backslash escaped, or JSON escaped
404
+ if (outCh == 1) {
405
+ trans_->write(&ch, 1);
406
+ return 1;
407
+ }
408
+ else if (outCh > 1) {
409
+ trans_->write(&kJSONBackslash, 1);
410
+ trans_->write(&outCh, 1);
411
+ return 2;
412
+ }
413
+ else {
414
+ return writeJSONEscapeChar(ch);
415
+ }
416
+ }
417
+ }
418
+
419
+ // Write out the contents of the string str as a JSON string, escaping
420
+ // characters as appropriate.
421
+ uint32_t TJSONProtocol::writeJSONString(const std::string &str) {
422
+ uint32_t result = context_->write(*trans_);
423
+ result += 2; // For quotes
424
+ trans_->write(&kJSONStringDelimiter, 1);
425
+ std::string::const_iterator iter(str.begin());
426
+ std::string::const_iterator end(str.end());
427
+ while (iter != end) {
428
+ result += writeJSONChar(*iter++);
429
+ }
430
+ trans_->write(&kJSONStringDelimiter, 1);
431
+ return result;
432
+ }
433
+
434
+ // Write out the contents of the string as JSON string, base64-encoding
435
+ // the string's contents, and escaping as appropriate
436
+ uint32_t TJSONProtocol::writeJSONBase64(const std::string &str) {
437
+ uint32_t result = context_->write(*trans_);
438
+ result += 2; // For quotes
439
+ trans_->write(&kJSONStringDelimiter, 1);
440
+ uint8_t b[4];
441
+ const uint8_t *bytes = (const uint8_t *)str.c_str();
442
+ uint32_t len = str.length();
443
+ while (len >= 3) {
444
+ // Encode 3 bytes at a time
445
+ base64_encode(bytes, 3, b);
446
+ trans_->write(b, 4);
447
+ result += 4;
448
+ bytes += 3;
449
+ len -=3;
450
+ }
451
+ if (len) { // Handle remainder
452
+ base64_encode(bytes, len, b);
453
+ trans_->write(b, len + 1);
454
+ result += len + 1;
455
+ }
456
+ trans_->write(&kJSONStringDelimiter, 1);
457
+ return result;
458
+ }
459
+
460
+ // Convert the given integer type to a JSON number, or a string
461
+ // if the context requires it (eg: key in a map pair).
462
+ template <typename NumberType>
463
+ uint32_t TJSONProtocol::writeJSONInteger(NumberType num) {
464
+ uint32_t result = context_->write(*trans_);
465
+ std::string val(boost::lexical_cast<std::string>(num));
466
+ bool escapeNum = context_->escapeNum();
467
+ if (escapeNum) {
468
+ trans_->write(&kJSONStringDelimiter, 1);
469
+ result += 1;
470
+ }
471
+ trans_->write((const uint8_t *)val.c_str(), val.length());
472
+ result += val.length();
473
+ if (escapeNum) {
474
+ trans_->write(&kJSONStringDelimiter, 1);
475
+ result += 1;
476
+ }
477
+ return result;
478
+ }
479
+
480
+ // Convert the given double to a JSON string, which is either the number,
481
+ // "NaN" or "Infinity" or "-Infinity".
482
+ uint32_t TJSONProtocol::writeJSONDouble(double num) {
483
+ uint32_t result = context_->write(*trans_);
484
+ std::string val(boost::lexical_cast<std::string>(num));
485
+
486
+ // Normalize output of boost::lexical_cast for NaNs and Infinities
487
+ bool special = false;
488
+ switch (val[0]) {
489
+ case 'N':
490
+ case 'n':
491
+ val = kThriftNan;
492
+ special = true;
493
+ break;
494
+ case 'I':
495
+ case 'i':
496
+ val = kThriftInfinity;
497
+ special = true;
498
+ break;
499
+ case '-':
500
+ if ((val[1] == 'I') || (val[1] == 'i')) {
501
+ val = kThriftNegativeInfinity;
502
+ special = true;
503
+ }
504
+ break;
505
+ }
506
+
507
+ bool escapeNum = special || context_->escapeNum();
508
+ if (escapeNum) {
509
+ trans_->write(&kJSONStringDelimiter, 1);
510
+ result += 1;
511
+ }
512
+ trans_->write((const uint8_t *)val.c_str(), val.length());
513
+ result += val.length();
514
+ if (escapeNum) {
515
+ trans_->write(&kJSONStringDelimiter, 1);
516
+ result += 1;
517
+ }
518
+ return result;
519
+ }
520
+
521
+ uint32_t TJSONProtocol::writeJSONObjectStart() {
522
+ uint32_t result = context_->write(*trans_);
523
+ trans_->write(&kJSONObjectStart, 1);
524
+ pushContext(boost::shared_ptr<TJSONContext>(new JSONPairContext()));
525
+ return result + 1;
526
+ }
527
+
528
+ uint32_t TJSONProtocol::writeJSONObjectEnd() {
529
+ popContext();
530
+ trans_->write(&kJSONObjectEnd, 1);
531
+ return 1;
532
+ }
533
+
534
+ uint32_t TJSONProtocol::writeJSONArrayStart() {
535
+ uint32_t result = context_->write(*trans_);
536
+ trans_->write(&kJSONArrayStart, 1);
537
+ pushContext(boost::shared_ptr<TJSONContext>(new JSONListContext()));
538
+ return result + 1;
539
+ }
540
+
541
+ uint32_t TJSONProtocol::writeJSONArrayEnd() {
542
+ popContext();
543
+ trans_->write(&kJSONArrayEnd, 1);
544
+ return 1;
545
+ }
546
+
547
+ uint32_t TJSONProtocol::writeMessageBegin(const std::string& name,
548
+ const TMessageType messageType,
549
+ const int32_t seqid) {
550
+ uint32_t result = writeJSONArrayStart();
551
+ result += writeJSONInteger(kThriftVersion1);
552
+ result += writeJSONString(name);
553
+ result += writeJSONInteger(messageType);
554
+ result += writeJSONInteger(seqid);
555
+ return result;
556
+ }
557
+
558
+ uint32_t TJSONProtocol::writeMessageEnd() {
559
+ return writeJSONArrayEnd();
560
+ }
561
+
562
+ uint32_t TJSONProtocol::writeStructBegin(const char* name) {
563
+ return writeJSONObjectStart();
564
+ }
565
+
566
+ uint32_t TJSONProtocol::writeStructEnd() {
567
+ return writeJSONObjectEnd();
568
+ }
569
+
570
+ uint32_t TJSONProtocol::writeFieldBegin(const char* name,
571
+ const TType fieldType,
572
+ const int16_t fieldId) {
573
+ uint32_t result = writeJSONInteger(fieldId);
574
+ result += writeJSONObjectStart();
575
+ result += writeJSONString(getTypeNameForTypeID(fieldType));
576
+ return result;
577
+ }
578
+
579
+ uint32_t TJSONProtocol::writeFieldEnd() {
580
+ return writeJSONObjectEnd();
581
+ }
582
+
583
+ uint32_t TJSONProtocol::writeFieldStop() {
584
+ return 0;
585
+ }
586
+
587
+ uint32_t TJSONProtocol::writeMapBegin(const TType keyType,
588
+ const TType valType,
589
+ const uint32_t size) {
590
+ uint32_t result = writeJSONArrayStart();
591
+ result += writeJSONString(getTypeNameForTypeID(keyType));
592
+ result += writeJSONString(getTypeNameForTypeID(valType));
593
+ result += writeJSONInteger((int64_t)size);
594
+ result += writeJSONObjectStart();
595
+ return result;
596
+ }
597
+
598
+ uint32_t TJSONProtocol::writeMapEnd() {
599
+ return writeJSONObjectEnd() + writeJSONArrayEnd();
600
+ }
601
+
602
+ uint32_t TJSONProtocol::writeListBegin(const TType elemType,
603
+ const uint32_t size) {
604
+ uint32_t result = writeJSONArrayStart();
605
+ result += writeJSONString(getTypeNameForTypeID(elemType));
606
+ result += writeJSONInteger((int64_t)size);
607
+ return result;
608
+ }
609
+
610
+ uint32_t TJSONProtocol::writeListEnd() {
611
+ return writeJSONArrayEnd();
612
+ }
613
+
614
+ uint32_t TJSONProtocol::writeSetBegin(const TType elemType,
615
+ const uint32_t size) {
616
+ uint32_t result = writeJSONArrayStart();
617
+ result += writeJSONString(getTypeNameForTypeID(elemType));
618
+ result += writeJSONInteger((int64_t)size);
619
+ return result;
620
+ }
621
+
622
+ uint32_t TJSONProtocol::writeSetEnd() {
623
+ return writeJSONArrayEnd();
624
+ }
625
+
626
+ uint32_t TJSONProtocol::writeBool(const bool value) {
627
+ return writeJSONInteger(value);
628
+ }
629
+
630
+ uint32_t TJSONProtocol::writeByte(const int8_t byte) {
631
+ // writeByte() must be handled specially becuase boost::lexical cast sees
632
+ // int8_t as a text type instead of an integer type
633
+ return writeJSONInteger((int16_t)byte);
634
+ }
635
+
636
+ uint32_t TJSONProtocol::writeI16(const int16_t i16) {
637
+ return writeJSONInteger(i16);
638
+ }
639
+
640
+ uint32_t TJSONProtocol::writeI32(const int32_t i32) {
641
+ return writeJSONInteger(i32);
642
+ }
643
+
644
+ uint32_t TJSONProtocol::writeI64(const int64_t i64) {
645
+ return writeJSONInteger(i64);
646
+ }
647
+
648
+ uint32_t TJSONProtocol::writeDouble(const double dub) {
649
+ return writeJSONDouble(dub);
650
+ }
651
+
652
+ uint32_t TJSONProtocol::writeString(const std::string& str) {
653
+ return writeJSONString(str);
654
+ }
655
+
656
+ uint32_t TJSONProtocol::writeBinary(const std::string& str) {
657
+ return writeJSONBase64(str);
658
+ }
659
+
660
+ /**
661
+ * Reading functions
662
+ */
663
+
664
+ // Reads 1 byte and verifies that it matches ch.
665
+ uint32_t TJSONProtocol::readJSONSyntaxChar(uint8_t ch) {
666
+ return readSyntaxChar(reader_, ch);
667
+ }
668
+
669
+ // Decodes the four hex parts of a JSON escaped string character and returns
670
+ // the character via out. The first two characters must be "00".
671
+ uint32_t TJSONProtocol::readJSONEscapeChar(uint8_t *out) {
672
+ uint8_t b[2];
673
+ readJSONSyntaxChar(kJSONZeroChar);
674
+ readJSONSyntaxChar(kJSONZeroChar);
675
+ b[0] = reader_.read();
676
+ b[1] = reader_.read();
677
+ *out = (hexVal(b[0]) << 4) + hexVal(b[1]);
678
+ return 4;
679
+ }
680
+
681
+ // Decodes a JSON string, including unescaping, and returns the string via str
682
+ uint32_t TJSONProtocol::readJSONString(std::string &str, bool skipContext) {
683
+ uint32_t result = (skipContext ? 0 : context_->read(reader_));
684
+ result += readJSONSyntaxChar(kJSONStringDelimiter);
685
+ uint8_t ch;
686
+ str.clear();
687
+ while (true) {
688
+ ch = reader_.read();
689
+ ++result;
690
+ if (ch == kJSONStringDelimiter) {
691
+ break;
692
+ }
693
+ if (ch == kJSONBackslash) {
694
+ ch = reader_.read();
695
+ ++result;
696
+ if (ch == kJSONEscapeChar) {
697
+ result += readJSONEscapeChar(&ch);
698
+ }
699
+ else {
700
+ size_t pos = kEscapeChars.find(ch);
701
+ if (pos == std::string::npos) {
702
+ throw TProtocolException(TProtocolException::INVALID_DATA,
703
+ "Expected control char, got '" +
704
+ std::string((const char *)&ch, 1) + "'.");
705
+ }
706
+ ch = kEscapeCharVals[pos];
707
+ }
708
+ }
709
+ str += ch;
710
+ }
711
+ return result;
712
+ }
713
+
714
+ // Reads a block of base64 characters, decoding it, and returns via str
715
+ uint32_t TJSONProtocol::readJSONBase64(std::string &str) {
716
+ std::string tmp;
717
+ uint32_t result = readJSONString(tmp);
718
+ uint8_t *b = (uint8_t *)tmp.c_str();
719
+ uint32_t len = tmp.length();
720
+ str.clear();
721
+ while (len >= 4) {
722
+ base64_decode(b, 4);
723
+ str.append((const char *)b, 3);
724
+ b += 4;
725
+ len -= 4;
726
+ }
727
+ // Don't decode if we hit the end or got a single leftover byte (invalid
728
+ // base64 but legal for skip of regular string type)
729
+ if (len > 1) {
730
+ base64_decode(b, len);
731
+ str.append((const char *)b, len - 1);
732
+ }
733
+ return result;
734
+ }
735
+
736
+ // Reads a sequence of characters, stopping at the first one that is not
737
+ // a valid JSON numeric character.
738
+ uint32_t TJSONProtocol::readJSONNumericChars(std::string &str) {
739
+ uint32_t result = 0;
740
+ str.clear();
741
+ while (true) {
742
+ uint8_t ch = reader_.peek();
743
+ if (!isJSONNumeric(ch)) {
744
+ break;
745
+ }
746
+ reader_.read();
747
+ str += ch;
748
+ ++result;
749
+ }
750
+ return result;
751
+ }
752
+
753
+ // Reads a sequence of characters and assembles them into a number,
754
+ // returning them via num
755
+ template <typename NumberType>
756
+ uint32_t TJSONProtocol::readJSONInteger(NumberType &num) {
757
+ uint32_t result = context_->read(reader_);
758
+ if (context_->escapeNum()) {
759
+ result += readJSONSyntaxChar(kJSONStringDelimiter);
760
+ }
761
+ std::string str;
762
+ result += readJSONNumericChars(str);
763
+ try {
764
+ num = boost::lexical_cast<NumberType>(str);
765
+ }
766
+ catch (boost::bad_lexical_cast e) {
767
+ throw new TProtocolException(TProtocolException::INVALID_DATA,
768
+ "Expected numeric value; got \"" + str +
769
+ "\"");
770
+ }
771
+ if (context_->escapeNum()) {
772
+ result += readJSONSyntaxChar(kJSONStringDelimiter);
773
+ }
774
+ return result;
775
+ }
776
+
777
+ // Reads a JSON number or string and interprets it as a double.
778
+ uint32_t TJSONProtocol::readJSONDouble(double &num) {
779
+ uint32_t result = context_->read(reader_);
780
+ std::string str;
781
+ if (reader_.peek() == kJSONStringDelimiter) {
782
+ result += readJSONString(str, true);
783
+ // Check for NaN, Infinity and -Infinity
784
+ if (str == kThriftNan) {
785
+ num = HUGE_VAL/HUGE_VAL; // generates NaN
786
+ }
787
+ else if (str == kThriftInfinity) {
788
+ num = HUGE_VAL;
789
+ }
790
+ else if (str == kThriftNegativeInfinity) {
791
+ num = -HUGE_VAL;
792
+ }
793
+ else {
794
+ if (!context_->escapeNum()) {
795
+ // Throw exception -- we should not be in a string in this case
796
+ throw new TProtocolException(TProtocolException::INVALID_DATA,
797
+ "Numeric data unexpectedly quoted");
798
+ }
799
+ try {
800
+ num = boost::lexical_cast<double>(str);
801
+ }
802
+ catch (boost::bad_lexical_cast e) {
803
+ throw new TProtocolException(TProtocolException::INVALID_DATA,
804
+ "Expected numeric value; got \"" + str +
805
+ "\"");
806
+ }
807
+ }
808
+ }
809
+ else {
810
+ if (context_->escapeNum()) {
811
+ // This will throw - we should have had a quote if escapeNum == true
812
+ readJSONSyntaxChar(kJSONStringDelimiter);
813
+ }
814
+ result += readJSONNumericChars(str);
815
+ try {
816
+ num = boost::lexical_cast<double>(str);
817
+ }
818
+ catch (boost::bad_lexical_cast e) {
819
+ throw new TProtocolException(TProtocolException::INVALID_DATA,
820
+ "Expected numeric value; got \"" + str +
821
+ "\"");
822
+ }
823
+ }
824
+ return result;
825
+ }
826
+
827
+ uint32_t TJSONProtocol::readJSONObjectStart() {
828
+ uint32_t result = context_->read(reader_);
829
+ result += readJSONSyntaxChar(kJSONObjectStart);
830
+ pushContext(boost::shared_ptr<TJSONContext>(new JSONPairContext()));
831
+ return result;
832
+ }
833
+
834
+ uint32_t TJSONProtocol::readJSONObjectEnd() {
835
+ uint32_t result = readJSONSyntaxChar(kJSONObjectEnd);
836
+ popContext();
837
+ return result;
838
+ }
839
+
840
+ uint32_t TJSONProtocol::readJSONArrayStart() {
841
+ uint32_t result = context_->read(reader_);
842
+ result += readJSONSyntaxChar(kJSONArrayStart);
843
+ pushContext(boost::shared_ptr<TJSONContext>(new JSONListContext()));
844
+ return result;
845
+ }
846
+
847
+ uint32_t TJSONProtocol::readJSONArrayEnd() {
848
+ uint32_t result = readJSONSyntaxChar(kJSONArrayEnd);
849
+ popContext();
850
+ return result;
851
+ }
852
+
853
+ uint32_t TJSONProtocol::readMessageBegin(std::string& name,
854
+ TMessageType& messageType,
855
+ int32_t& seqid) {
856
+ uint32_t result = readJSONArrayStart();
857
+ uint64_t tmpVal = 0;
858
+ result += readJSONInteger(tmpVal);
859
+ if (tmpVal != kThriftVersion1) {
860
+ throw TProtocolException(TProtocolException::BAD_VERSION,
861
+ "Message contained bad version.");
862
+ }
863
+ result += readJSONString(name);
864
+ result += readJSONInteger(tmpVal);
865
+ messageType = (TMessageType)tmpVal;
866
+ result += readJSONInteger(tmpVal);
867
+ seqid = tmpVal;
868
+ return result;
869
+ }
870
+
871
+ uint32_t TJSONProtocol::readMessageEnd() {
872
+ return readJSONArrayEnd();
873
+ }
874
+
875
+ uint32_t TJSONProtocol::readStructBegin(std::string& name) {
876
+ return readJSONObjectStart();
877
+ }
878
+
879
+ uint32_t TJSONProtocol::readStructEnd() {
880
+ return readJSONObjectEnd();
881
+ }
882
+
883
+ uint32_t TJSONProtocol::readFieldBegin(std::string& name,
884
+ TType& fieldType,
885
+ int16_t& fieldId) {
886
+ uint32_t result = 0;
887
+ // Check if we hit the end of the list
888
+ uint8_t ch = reader_.peek();
889
+ if (ch == kJSONObjectEnd) {
890
+ fieldType = apache::thrift::protocol::T_STOP;
891
+ }
892
+ else {
893
+ uint64_t tmpVal = 0;
894
+ std::string tmpStr;
895
+ result += readJSONInteger(tmpVal);
896
+ fieldId = tmpVal;
897
+ result += readJSONObjectStart();
898
+ result += readJSONString(tmpStr);
899
+ fieldType = getTypeIDForTypeName(tmpStr);
900
+ }
901
+ return result;
902
+ }
903
+
904
+ uint32_t TJSONProtocol::readFieldEnd() {
905
+ return readJSONObjectEnd();
906
+ }
907
+
908
+ uint32_t TJSONProtocol::readMapBegin(TType& keyType,
909
+ TType& valType,
910
+ uint32_t& size) {
911
+ uint64_t tmpVal = 0;
912
+ std::string tmpStr;
913
+ uint32_t result = readJSONArrayStart();
914
+ result += readJSONString(tmpStr);
915
+ keyType = getTypeIDForTypeName(tmpStr);
916
+ result += readJSONString(tmpStr);
917
+ valType = getTypeIDForTypeName(tmpStr);
918
+ result += readJSONInteger(tmpVal);
919
+ size = tmpVal;
920
+ result += readJSONObjectStart();
921
+ return result;
922
+ }
923
+
924
+ uint32_t TJSONProtocol::readMapEnd() {
925
+ return readJSONObjectEnd() + readJSONArrayEnd();
926
+ }
927
+
928
+ uint32_t TJSONProtocol::readListBegin(TType& elemType,
929
+ uint32_t& size) {
930
+ uint64_t tmpVal = 0;
931
+ std::string tmpStr;
932
+ uint32_t result = readJSONArrayStart();
933
+ result += readJSONString(tmpStr);
934
+ elemType = getTypeIDForTypeName(tmpStr);
935
+ result += readJSONInteger(tmpVal);
936
+ size = tmpVal;
937
+ return result;
938
+ }
939
+
940
+ uint32_t TJSONProtocol::readListEnd() {
941
+ return readJSONArrayEnd();
942
+ }
943
+
944
+ uint32_t TJSONProtocol::readSetBegin(TType& elemType,
945
+ uint32_t& size) {
946
+ uint64_t tmpVal = 0;
947
+ std::string tmpStr;
948
+ uint32_t result = readJSONArrayStart();
949
+ result += readJSONString(tmpStr);
950
+ elemType = getTypeIDForTypeName(tmpStr);
951
+ result += readJSONInteger(tmpVal);
952
+ size = tmpVal;
953
+ return result;
954
+ }
955
+
956
+ uint32_t TJSONProtocol::readSetEnd() {
957
+ return readJSONArrayEnd();
958
+ }
959
+
960
+ uint32_t TJSONProtocol::readBool(bool& value) {
961
+ return readJSONInteger(value);
962
+ }
963
+
964
+ // readByte() must be handled properly becuase boost::lexical cast sees int8_t
965
+ // as a text type instead of an integer type
966
+ uint32_t TJSONProtocol::readByte(int8_t& byte) {
967
+ int16_t tmp = (int16_t) byte;
968
+ uint32_t result = readJSONInteger(tmp);
969
+ assert(tmp < 256);
970
+ byte = (int8_t)tmp;
971
+ return result;
972
+ }
973
+
974
+ uint32_t TJSONProtocol::readI16(int16_t& i16) {
975
+ return readJSONInteger(i16);
976
+ }
977
+
978
+ uint32_t TJSONProtocol::readI32(int32_t& i32) {
979
+ return readJSONInteger(i32);
980
+ }
981
+
982
+ uint32_t TJSONProtocol::readI64(int64_t& i64) {
983
+ return readJSONInteger(i64);
984
+ }
985
+
986
+ uint32_t TJSONProtocol::readDouble(double& dub) {
987
+ return readJSONDouble(dub);
988
+ }
989
+
990
+ uint32_t TJSONProtocol::readString(std::string &str) {
991
+ return readJSONString(str);
992
+ }
993
+
994
+ uint32_t TJSONProtocol::readBinary(std::string &str) {
995
+ return readJSONBase64(str);
996
+ }
997
+
998
+ }}} // apache::thrift::protocol