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.
- data/VERSION.yml +1 -1
- data/examples/monitored_cloud.rb +1 -1
- data/examples/thrift/thrift_example.rb +1 -1
- data/lib/proto/command_interface_handler.rb +1 -1
- data/vendor/gems/thrift/CHANGES +35 -0
- data/vendor/gems/thrift/CONTRIBUTORS +77 -0
- data/vendor/gems/thrift/DISCLAIMER +6 -0
- data/vendor/gems/thrift/LICENSE +202 -0
- data/vendor/gems/thrift/Makefile.am +28 -0
- data/vendor/gems/thrift/NEWS +79 -0
- data/vendor/gems/thrift/NOTICE +26 -0
- data/vendor/gems/thrift/README +137 -0
- data/vendor/gems/thrift/aclocal/ax_boost_base.m4 +198 -0
- data/vendor/gems/thrift/aclocal/ax_javac_and_java.m4 +107 -0
- data/vendor/gems/thrift/aclocal/ax_lib_event.m4 +194 -0
- data/vendor/gems/thrift/aclocal/ax_lib_zlib.m4 +173 -0
- data/vendor/gems/thrift/aclocal/ax_signed_right_shift.m4 +127 -0
- data/vendor/gems/thrift/aclocal/ax_thrift_internal.m4 +39 -0
- data/vendor/gems/thrift/bootstrap.sh +35 -0
- data/vendor/gems/thrift/cleanup.sh +58 -0
- data/vendor/gems/thrift/compiler/cpp/Makefile.am +136 -0
- data/vendor/gems/thrift/compiler/cpp/README +39 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_cocoa_generator.cc +2331 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_cpp_generator.cc +3003 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_csharp_generator.cc +1700 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_erl_generator.cc +932 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.cc +173 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.h +321 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_hs_generator.cc +1445 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_html_generator.cc +637 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_java_generator.cc +3069 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_ocaml_generator.cc +1673 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_oop_generator.h +77 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_perl_generator.cc +1812 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_php_generator.cc +2281 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_py_generator.cc +2310 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_rb_generator.cc +1114 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_st_generator.cc +1071 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_xsd_generator.cc +354 -0
- data/vendor/gems/thrift/compiler/cpp/src/globals.h +117 -0
- data/vendor/gems/thrift/compiler/cpp/src/main.cc +1207 -0
- data/vendor/gems/thrift/compiler/cpp/src/main.h +103 -0
- data/vendor/gems/thrift/compiler/cpp/src/md5.c +381 -0
- data/vendor/gems/thrift/compiler/cpp/src/md5.h +91 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_base_type.h +137 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_const.h +59 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_const_value.h +121 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_container.h +56 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_doc.h +51 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum.h +59 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum_value.h +64 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_field.h +150 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_function.h +93 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_list.h +56 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_map.h +64 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_program.h +223 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_scope.h +86 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_service.h +68 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_set.h +55 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_struct.h +127 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_type.h +176 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_typedef.h +70 -0
- data/vendor/gems/thrift/compiler/cpp/src/platform.h +36 -0
- data/vendor/gems/thrift/compiler/cpp/src/thriftl.ll +303 -0
- data/vendor/gems/thrift/compiler/cpp/src/thrifty.yy +1140 -0
- data/vendor/gems/thrift/configure.ac +255 -0
- data/vendor/gems/thrift/contrib/fb303/LICENSE +16 -0
- data/vendor/gems/thrift/contrib/fb303/Makefile.am +31 -0
- data/vendor/gems/thrift/contrib/fb303/README +37 -0
- data/vendor/gems/thrift/contrib/fb303/acinclude.m4 +258 -0
- data/vendor/gems/thrift/contrib/fb303/aclocal/ax_boost_base.m4 +198 -0
- data/vendor/gems/thrift/contrib/fb303/bootstrap.sh +26 -0
- data/vendor/gems/thrift/contrib/fb303/configure.ac +115 -0
- data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.cpp +124 -0
- data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.h +103 -0
- data/vendor/gems/thrift/contrib/fb303/cpp/Makefile.am +84 -0
- data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.cpp +481 -0
- data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.h +215 -0
- data/vendor/gems/thrift/contrib/fb303/global_footer.mk +21 -0
- data/vendor/gems/thrift/contrib/fb303/global_header.mk +38 -0
- data/vendor/gems/thrift/contrib/fb303/if/fb303.thrift +112 -0
- data/vendor/gems/thrift/contrib/fb303/java/FacebookBase.java +103 -0
- data/vendor/gems/thrift/contrib/fb303/java/build.xml +84 -0
- data/vendor/gems/thrift/contrib/fb303/php/FacebookBase.php +89 -0
- data/vendor/gems/thrift/contrib/fb303/py/Makefile.am +44 -0
- data/vendor/gems/thrift/contrib/fb303/py/fb303/FacebookBase.py +82 -0
- data/vendor/gems/thrift/contrib/fb303/py/fb303_scripts/__init__.py +20 -0
- data/vendor/gems/thrift/contrib/fb303/py/fb303_scripts/fb303_simple_mgmt.py +195 -0
- data/vendor/gems/thrift/contrib/fb303/py/setup.py +27 -0
- data/vendor/gems/thrift/contrib/thrift.el +126 -0
- data/vendor/gems/thrift/contrib/thrift.spec +206 -0
- data/vendor/gems/thrift/contrib/thrift.vim +91 -0
- data/vendor/gems/thrift/contrib/thrift_dump.cpp +91 -0
- data/vendor/gems/thrift/doc/lgpl-2.1.txt +504 -0
- data/vendor/gems/thrift/doc/otp-base-license.txt +20 -0
- data/vendor/gems/thrift/doc/thrift.bnf +96 -0
- data/vendor/gems/thrift/doc/thrift.tex +1057 -0
- data/vendor/gems/thrift/lib/Makefile.am +55 -0
- data/vendor/gems/thrift/lib/cocoa/README +21 -0
- data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.h +44 -0
- data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.m +130 -0
- data/vendor/gems/thrift/lib/cocoa/src/TException.h +34 -0
- data/vendor/gems/thrift/lib/cocoa/src/TException.m +64 -0
- data/vendor/gems/thrift/lib/cocoa/src/TProcessor.h +29 -0
- data/vendor/gems/thrift/lib/cocoa/src/TProcessorFactory.h +27 -0
- data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.h +27 -0
- data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.m +51 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.h +51 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.m +477 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocol.h +148 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolException.h +25 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolException.m +23 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolFactory.h +29 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.h +29 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.m +104 -0
- data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.h +50 -0
- data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.m +153 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.h +42 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.m +159 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.h +35 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.m +91 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.h +38 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.m +89 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.h +32 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.m +58 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TTransport.h +36 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.h +30 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.m +43 -0
- data/vendor/gems/thrift/lib/cpp/Makefile.am +158 -0
- data/vendor/gems/thrift/lib/cpp/README +67 -0
- data/vendor/gems/thrift/lib/cpp/src/TLogging.h +163 -0
- data/vendor/gems/thrift/lib/cpp/src/TProcessor.h +53 -0
- data/vendor/gems/thrift/lib/cpp/src/TReflectionLocal.h +96 -0
- data/vendor/gems/thrift/lib/cpp/src/Thrift.cpp +148 -0
- data/vendor/gems/thrift/lib/cpp/src/Thrift.h +191 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Exception.h +60 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/FunctionRunner.h +77 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.cpp +137 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.h +84 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.cpp +160 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.h +114 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.cpp +314 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.h +130 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Thread.h +125 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.cpp +493 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.h +169 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.cpp +284 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.h +122 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.cpp +55 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.h +100 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/test/Tests.cpp +155 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadFactoryTests.h +354 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadManagerTests.h +379 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/test/TimerManagerTests.h +155 -0
- data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.cpp +122 -0
- data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.h +77 -0
- data/vendor/gems/thrift/lib/cpp/src/processor/StatsProcessor.h +264 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.cpp +79 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.h +42 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.cpp +394 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.h +254 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.cpp +736 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.h +279 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.cpp +346 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.h +225 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.cpp +762 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.h +253 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.cpp +998 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.h +340 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TOneWayProtocol.h +304 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocol.h +438 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolException.h +104 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolTap.h +187 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.cpp +750 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.h +435 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TServer.cpp +38 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TServer.h +213 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.cpp +118 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.h +70 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.cpp +217 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.h +79 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.cpp +243 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.h +74 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.cpp +370 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.h +667 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.cpp +77 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.h +73 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.cpp +953 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.h +442 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.cpp +348 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.h +111 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.cpp +368 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.h +76 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TServerTransport.h +92 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TShortReadTransport.h +96 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.cpp +54 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.h +41 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.cpp +591 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.h +242 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.cpp +235 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.h +191 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TTransport.h +224 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.cpp +31 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.h +117 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.cpp +178 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.h +287 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.cpp +299 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.h +219 -0
- data/vendor/gems/thrift/lib/cpp/thrift-nb.pc.in +30 -0
- data/vendor/gems/thrift/lib/cpp/thrift-z.pc.in +30 -0
- data/vendor/gems/thrift/lib/cpp/thrift.pc.in +29 -0
- data/vendor/gems/thrift/lib/csharp/Makefile.am +70 -0
- data/vendor/gems/thrift/lib/csharp/README +26 -0
- data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs +55 -0
- data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftBuild.cs +242 -0
- data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftMSBuildTask.csproj +62 -0
- data/vendor/gems/thrift/lib/csharp/src/Collections/THashSet.cs +142 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TBase.cs +34 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TBinaryProtocol.cs +392 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TField.cs +58 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TList.cs +50 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TMap.cs +58 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TMessage.cs +58 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TMessageType.cs +31 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocol.cs +87 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolException.cs +61 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolFactory.cs +29 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolUtil.cs +94 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TSet.cs +50 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TStruct.cs +42 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TType.cs +40 -0
- data/vendor/gems/thrift/lib/csharp/src/Server/TServer.cs +135 -0
- data/vendor/gems/thrift/lib/csharp/src/Server/TSimpleServer.cs +148 -0
- data/vendor/gems/thrift/lib/csharp/src/Server/TThreadPoolServer.cs +186 -0
- data/vendor/gems/thrift/lib/csharp/src/Server/TThreadedServer.cs +234 -0
- data/vendor/gems/thrift/lib/csharp/src/TApplicationException.cs +131 -0
- data/vendor/gems/thrift/lib/csharp/src/TProcessor.cs +29 -0
- data/vendor/gems/thrift/lib/csharp/src/Thrift.csproj +73 -0
- data/vendor/gems/thrift/lib/csharp/src/Thrift.sln +35 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TBufferedTransport.cs +100 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TServerSocket.cs +157 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TServerTransport.cs +39 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TSocket.cs +144 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TStreamTransport.cs +103 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TTransport.cs +66 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportException.cs +64 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportFactory.cs +38 -0
- data/vendor/gems/thrift/lib/erl/Makefile +37 -0
- data/vendor/gems/thrift/lib/erl/README +56 -0
- data/vendor/gems/thrift/lib/erl/build/beamver +59 -0
- data/vendor/gems/thrift/lib/erl/build/buildtargets.mk +15 -0
- data/vendor/gems/thrift/lib/erl/build/colors.mk +24 -0
- data/vendor/gems/thrift/lib/erl/build/docs.mk +12 -0
- data/vendor/gems/thrift/lib/erl/build/mime.types +98 -0
- data/vendor/gems/thrift/lib/erl/build/otp.mk +146 -0
- data/vendor/gems/thrift/lib/erl/build/otp_subdir.mk +85 -0
- data/vendor/gems/thrift/lib/erl/build/raw_test.mk +29 -0
- data/vendor/gems/thrift/lib/erl/include/thrift_constants.hrl +54 -0
- data/vendor/gems/thrift/lib/erl/include/thrift_protocol.hrl +31 -0
- data/vendor/gems/thrift/lib/erl/src/Makefile +116 -0
- data/vendor/gems/thrift/lib/erl/src/test_handler.erl +26 -0
- data/vendor/gems/thrift/lib/erl/src/test_service.erl +29 -0
- data/vendor/gems/thrift/lib/erl/src/thrift.app.src +44 -0
- data/vendor/gems/thrift/lib/erl/src/thrift.appup.src +1 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_base64_transport.erl +64 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_binary_protocol.erl +325 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_buffered_transport.erl +180 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_client.erl +384 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_disk_log_transport.erl +118 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_file_transport.erl +87 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_framed_transport.erl +208 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_http_transport.erl +199 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_memory_buffer.erl +164 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_processor.erl +188 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_protocol.erl +356 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_server.erl +183 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_service.erl +25 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_socket_server.erl +249 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_socket_transport.erl +119 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_transport.erl +57 -0
- data/vendor/gems/thrift/lib/erl/vsn.mk +1 -0
- data/vendor/gems/thrift/lib/hs/README +82 -0
- data/vendor/gems/thrift/lib/hs/Setup.lhs +23 -0
- data/vendor/gems/thrift/lib/hs/TODO +2 -0
- data/vendor/gems/thrift/lib/hs/Thrift.cabal +20 -0
- data/vendor/gems/thrift/lib/hs/src/Thrift.hs +111 -0
- data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol.hs +191 -0
- data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol/Binary.hs +147 -0
- data/vendor/gems/thrift/lib/hs/src/Thrift/Server.hs +65 -0
- data/vendor/gems/thrift/lib/hs/src/Thrift/Transport.hs +60 -0
- data/vendor/gems/thrift/lib/hs/src/Thrift/Transport/Handle.hs +58 -0
- data/vendor/gems/thrift/lib/java/Makefile.am +38 -0
- data/vendor/gems/thrift/lib/java/README +43 -0
- data/vendor/gems/thrift/lib/java/build.xml +195 -0
- data/vendor/gems/thrift/lib/java/ivy.xml +8 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/IntRangeSet.java +171 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TApplicationException.java +123 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBase.java +66 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBaseHelper.java +102 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TByteArrayOutputStream.java +46 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TDeserializer.java +94 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TException.java +45 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TFieldRequirementType.java +30 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessor.java +32 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessorFactory.java +39 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TSerializer.java +110 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldMetaData.java +69 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java +42 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/ListMetaData.java +29 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/MapMetaData.java +31 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/SetMetaData.java +29 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/StructMetaData.java +31 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBase64Utils.java +128 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBinaryProtocol.java +331 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TCompactProtocol.java +741 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TField.java +48 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TJSONProtocol.java +927 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TList.java +38 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMap.java +40 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessage.java +48 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessageType.java +31 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocol.java +146 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolException.java +81 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolFactory.java +30 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolUtil.java +158 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSet.java +42 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSimpleJSONProtocol.java +384 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TStruct.java +36 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TType.java +40 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/THsHaServer.java +304 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TNonblockingServer.java +772 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TServer.java +126 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TSimpleServer.java +145 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java +271 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TFramedTransport.java +126 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/THttpClient.java +157 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TIOStreamTransport.java +159 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TMemoryBuffer.java +98 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerSocket.java +160 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerTransport.java +31 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingSocket.java +213 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingTransport.java +31 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TServerSocket.java +145 -0
- metadata +348 -37
- data/vendor/gems/trollop/FAQ.txt +0 -35
- data/vendor/gems/trollop/History.txt +0 -84
- data/vendor/gems/trollop/Manifest.txt +0 -7
- data/vendor/gems/trollop/README.txt +0 -38
- data/vendor/gems/trollop/Rakefile +0 -36
- data/vendor/gems/trollop/lib/trollop.rb +0 -695
- data/vendor/gems/trollop/release-script.txt +0 -13
- data/vendor/gems/trollop/test/test_trollop.rb +0 -957
- 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
|