libcouchbase 0.0.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.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.gitmodules +3 -0
- data/.rspec +1 -0
- data/.travis.yml +35 -0
- data/Gemfile +4 -0
- data/LICENSE +24 -0
- data/README.md +389 -0
- data/Rakefile +75 -0
- data/ext/README.md +6 -0
- data/ext/Rakefile +20 -0
- data/ext/libcouchbase/.gitignore +130 -0
- data/ext/libcouchbase/.travis.yml +19 -0
- data/ext/libcouchbase/CMakeLists.txt +429 -0
- data/ext/libcouchbase/CONTRIBUTING.md +124 -0
- data/ext/libcouchbase/LICENSE +202 -0
- data/ext/libcouchbase/README.markdown +163 -0
- data/ext/libcouchbase/RELEASE_NOTES.markdown +2691 -0
- data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +27 -0
- data/ext/libcouchbase/cmake/Modules/CopyPDB.cmake +42 -0
- data/ext/libcouchbase/cmake/Modules/DistScript.cmake +17 -0
- data/ext/libcouchbase/cmake/Modules/DownloadLcbDep.cmake +20 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseHdrHistogram.cmake +15 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibev.cmake +73 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibevent.cmake +52 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibuv.cmake +56 -0
- data/ext/libcouchbase/cmake/Modules/FindCouchbaseSnappy.cmake +11 -0
- data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +29 -0
- data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +133 -0
- data/ext/libcouchbase/cmake/Modules/GetPlatformCCInfo.cmake +45 -0
- data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +70 -0
- data/ext/libcouchbase/cmake/config-cmake.h.in +60 -0
- data/ext/libcouchbase/cmake/configure +357 -0
- data/ext/libcouchbase/cmake/defs.mk.in +8 -0
- data/ext/libcouchbase/cmake/dtrace-instr-link.pl +38 -0
- data/ext/libcouchbase/cmake/source_files.cmake +73 -0
- data/ext/libcouchbase/configure.pl +1 -0
- data/ext/libcouchbase/contrib/cJSON/cJSON.c +624 -0
- data/ext/libcouchbase/contrib/cJSON/cJSON.h +158 -0
- data/ext/libcouchbase/contrib/cbsasl/CMakeLists.txt +9 -0
- data/ext/libcouchbase/contrib/cbsasl/COPYING +202 -0
- data/ext/libcouchbase/contrib/cbsasl/include/cbsasl/cbsasl.h +217 -0
- data/ext/libcouchbase/contrib/cbsasl/src/client.c +205 -0
- data/ext/libcouchbase/contrib/cbsasl/src/common.c +46 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.c +67 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.h +33 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.c +296 -0
- data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.h +45 -0
- data/ext/libcouchbase/contrib/cbsasl/src/hash.c +573 -0
- data/ext/libcouchbase/contrib/cbsasl/src/hash.h +15 -0
- data/ext/libcouchbase/contrib/cbsasl/src/util.h +31 -0
- data/ext/libcouchbase/contrib/cliopts/CMakeLists.txt +2 -0
- data/ext/libcouchbase/contrib/cliopts/cliopts.c +747 -0
- data/ext/libcouchbase/contrib/cliopts/cliopts.h +493 -0
- data/ext/libcouchbase/contrib/genhash/genhash.c +372 -0
- data/ext/libcouchbase/contrib/genhash/genhash.h +235 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/CHANGES +157 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/CMakeLists.txt +252 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/CONTRIBUTORS +37 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/LICENSE +28 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/MINIFY.sh +15 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/README +435 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/cmake/internal_utils.cmake +227 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-death-test.h +294 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-message.h +250 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h +1421 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h.pump +487 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-printers.h +855 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-spi.h +232 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-test-part.h +179 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-typed-test.h +259 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest.h +2291 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_pred_impl.h +358 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_prod.h +58 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-death-test-internal.h +319 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-filepath.h +206 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-internal.h +1158 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-linked_ptr.h +233 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h +5143 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h.pump +301 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util.h +619 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-port.h +1947 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-string.h +167 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h +1012 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h.pump +339 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h +3331 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h.pump +297 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-all.cc +48 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-death-test.cc +1344 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-filepath.cc +382 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-internal-inl.h +1218 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-port.cc +805 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-printers.cc +363 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-test-part.cc +110 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-typed-test.cc +110 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest.cc +5015 -0
- data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest_main.cc +38 -0
- data/ext/libcouchbase/contrib/http_parser/LICENSE-MIT +23 -0
- data/ext/libcouchbase/contrib/http_parser/README.md +178 -0
- data/ext/libcouchbase/contrib/http_parser/http_parser.c +2060 -0
- data/ext/libcouchbase/contrib/http_parser/http_parser.h +321 -0
- data/ext/libcouchbase/contrib/jsonsl/LICENSE +20 -0
- data/ext/libcouchbase/contrib/jsonsl/jsonsl.c +1452 -0
- data/ext/libcouchbase/contrib/jsonsl/jsonsl.h +971 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/CMakeLists.txt +6 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/LICENSE +55 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp-forwards.h +255 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.cpp +4892 -0
- data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.h +1961 -0
- data/ext/libcouchbase/contrib/snappy/CMakeLists.txt +8 -0
- data/ext/libcouchbase/contrib/snappy/COPYING +28 -0
- data/ext/libcouchbase/contrib/snappy/snappy-c.cc +90 -0
- data/ext/libcouchbase/contrib/snappy/snappy-c.h +138 -0
- data/ext/libcouchbase/contrib/snappy/snappy-internal.h +150 -0
- data/ext/libcouchbase/contrib/snappy/snappy-lcb-msvc.h +5 -0
- data/ext/libcouchbase/contrib/snappy/snappy-sinksource.cc +71 -0
- data/ext/libcouchbase/contrib/snappy/snappy-sinksource.h +137 -0
- data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.cc +42 -0
- data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.h +491 -0
- data/ext/libcouchbase/contrib/snappy/snappy-stubs-public.h +98 -0
- data/ext/libcouchbase/contrib/snappy/snappy.cc +1307 -0
- data/ext/libcouchbase/contrib/snappy/snappy.h +184 -0
- data/ext/libcouchbase/contrib/win32-defs/iocpdefs.h +133 -0
- data/ext/libcouchbase/contrib/win32-defs/mingwdefs.h +4396 -0
- data/ext/libcouchbase/contrib/win32-defs/win_stdint.h +258 -0
- data/ext/libcouchbase/example/CMakeLists.txt +37 -0
- data/ext/libcouchbase/example/README.markdown +47 -0
- data/ext/libcouchbase/example/db/db.c +167 -0
- data/ext/libcouchbase/example/db/vb.c +227 -0
- data/ext/libcouchbase/example/instancepool/main.cc +102 -0
- data/ext/libcouchbase/example/instancepool/pool.cc +102 -0
- data/ext/libcouchbase/example/instancepool/pool.h +69 -0
- data/ext/libcouchbase/example/libeventdirect/main.c +148 -0
- data/ext/libcouchbase/example/mcc/mcc.cc +246 -0
- data/ext/libcouchbase/example/minimal/minimal.c +130 -0
- data/ext/libcouchbase/example/observe/observe.c +146 -0
- data/ext/libcouchbase/example/subdoc/subdoc-multi.cc +132 -0
- data/ext/libcouchbase/example/subdoc/subdoc-simple.cc +191 -0
- data/ext/libcouchbase/example/tick/tick.c +119 -0
- data/ext/libcouchbase/example/views/views-example.cc +83 -0
- data/ext/libcouchbase/include/libcouchbase/_cxxwrap.h +150 -0
- data/ext/libcouchbase/include/libcouchbase/api-legacy.h +1689 -0
- data/ext/libcouchbase/include/libcouchbase/api3.h +2 -0
- data/ext/libcouchbase/include/libcouchbase/assert.h +44 -0
- data/ext/libcouchbase/include/libcouchbase/cbft.h +109 -0
- data/ext/libcouchbase/include/libcouchbase/cntl-private.h +356 -0
- data/ext/libcouchbase/include/libcouchbase/cntl.h +937 -0
- data/ext/libcouchbase/include/libcouchbase/configuration.h.in +23 -0
- data/ext/libcouchbase/include/libcouchbase/couchbase.h +3677 -0
- data/ext/libcouchbase/include/libcouchbase/deprecated.h +300 -0
- data/ext/libcouchbase/include/libcouchbase/error.h +595 -0
- data/ext/libcouchbase/include/libcouchbase/http.h +1 -0
- data/ext/libcouchbase/include/libcouchbase/iops.h +1050 -0
- data/ext/libcouchbase/include/libcouchbase/ixmgmt.h +263 -0
- data/ext/libcouchbase/include/libcouchbase/kvbuf.h +132 -0
- data/ext/libcouchbase/include/libcouchbase/n1ql.h +364 -0
- data/ext/libcouchbase/include/libcouchbase/pktfwd.h +270 -0
- data/ext/libcouchbase/include/libcouchbase/plugins/io/bsdio-inl.c +367 -0
- data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr-inl.c +76 -0
- data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr.h +199 -0
- data/ext/libcouchbase/include/libcouchbase/subdoc.h +312 -0
- data/ext/libcouchbase/include/libcouchbase/sysdefs.h +98 -0
- data/ext/libcouchbase/include/libcouchbase/vbucket.h +643 -0
- data/ext/libcouchbase/include/libcouchbase/views.h +298 -0
- data/ext/libcouchbase/include/libcouchbase/visibility.h +65 -0
- data/ext/libcouchbase/include/memcached/COPYING +30 -0
- data/ext/libcouchbase/include/memcached/README +10 -0
- data/ext/libcouchbase/include/memcached/protocol_binary.h +1916 -0
- data/ext/libcouchbase/include/memcached/vbucket.h +42 -0
- data/ext/libcouchbase/packaging/README +7 -0
- data/ext/libcouchbase/packaging/abicheck/.gitignore +4 -0
- data/ext/libcouchbase/packaging/abicheck/Makefile +17 -0
- data/ext/libcouchbase/packaging/abicheck/README.md +27 -0
- data/ext/libcouchbase/packaging/abicheck/template.xml +3 -0
- data/ext/libcouchbase/packaging/deb/compat +1 -0
- data/ext/libcouchbase/packaging/deb/control +73 -0
- data/ext/libcouchbase/packaging/deb/copyright +10 -0
- data/ext/libcouchbase/packaging/deb/libcouchbase-dev.docs +3 -0
- data/ext/libcouchbase/packaging/deb/package.mk +31 -0
- data/ext/libcouchbase/packaging/deb/rules +46 -0
- data/ext/libcouchbase/packaging/deb/source/format +1 -0
- data/ext/libcouchbase/packaging/distinfo/README +1 -0
- data/ext/libcouchbase/packaging/distinfo/distinfo.cmake.in +4 -0
- data/ext/libcouchbase/packaging/dllversion.rc.in +39 -0
- data/ext/libcouchbase/packaging/libcouchbase.pc.in +10 -0
- data/ext/libcouchbase/packaging/nuget/libcouchbase.autopkg +76 -0
- data/ext/libcouchbase/packaging/parse-git-describe.pl +166 -0
- data/ext/libcouchbase/packaging/rpm/libcouchbase.spec.in +108 -0
- data/ext/libcouchbase/packaging/rpm/package.mk +40 -0
- data/ext/libcouchbase/plugins/io/iocp/CMakeLists.txt +9 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_iops.c +466 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_iops.h +217 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_loop.c +295 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_timer.c +79 -0
- data/ext/libcouchbase/plugins/io/iocp/iocp_util.c +229 -0
- data/ext/libcouchbase/plugins/io/libev/CMakeLists.txt +29 -0
- data/ext/libcouchbase/plugins/io/libev/libev_io_opts.h +65 -0
- data/ext/libcouchbase/plugins/io/libev/plugin-libev.c +289 -0
- data/ext/libcouchbase/plugins/io/libevent/CMakeLists.txt +29 -0
- data/ext/libcouchbase/plugins/io/libevent/libevent_io_opts.h +67 -0
- data/ext/libcouchbase/plugins/io/libevent/plugin-libevent.c +292 -0
- data/ext/libcouchbase/plugins/io/libuv/CMakeLists.txt +42 -0
- data/ext/libcouchbase/plugins/io/libuv/libuv_compat.h +212 -0
- data/ext/libcouchbase/plugins/io/libuv/libuv_io_opts.h +118 -0
- data/ext/libcouchbase/plugins/io/libuv/plugin-internal.h +148 -0
- data/ext/libcouchbase/plugins/io/libuv/plugin-libuv.c +648 -0
- data/ext/libcouchbase/plugins/io/select/CMakeLists.txt +11 -0
- data/ext/libcouchbase/plugins/io/select/plugin-select.c +448 -0
- data/ext/libcouchbase/plugins/io/select/select_io_opts.h +39 -0
- data/ext/libcouchbase/src/README.md +103 -0
- data/ext/libcouchbase/src/aspend.h +106 -0
- data/ext/libcouchbase/src/auth.cc +74 -0
- data/ext/libcouchbase/src/auth.h +54 -0
- data/ext/libcouchbase/src/bootstrap.c +269 -0
- data/ext/libcouchbase/src/bootstrap.h +129 -0
- data/ext/libcouchbase/src/bucketconfig/bc_cccp.c +495 -0
- data/ext/libcouchbase/src/bucketconfig/bc_file.c +347 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.c +630 -0
- data/ext/libcouchbase/src/bucketconfig/bc_http.h +82 -0
- data/ext/libcouchbase/src/bucketconfig/bc_mcraw.c +150 -0
- data/ext/libcouchbase/src/bucketconfig/clconfig.h +681 -0
- data/ext/libcouchbase/src/bucketconfig/confmon.c +474 -0
- data/ext/libcouchbase/src/callbacks.c +378 -0
- data/ext/libcouchbase/src/cbft.cc +210 -0
- data/ext/libcouchbase/src/cntl.cc +847 -0
- data/ext/libcouchbase/src/config_static.h +159 -0
- data/ext/libcouchbase/src/connspec.cc +462 -0
- data/ext/libcouchbase/src/connspec.h +105 -0
- data/ext/libcouchbase/src/ctx-log-inl.h +27 -0
- data/ext/libcouchbase/src/dump.c +98 -0
- data/ext/libcouchbase/src/getconfig.c +100 -0
- data/ext/libcouchbase/src/gethrtime.c +109 -0
- data/ext/libcouchbase/src/handler.c +922 -0
- data/ext/libcouchbase/src/hashset.c +164 -0
- data/ext/libcouchbase/src/hashset.h +86 -0
- data/ext/libcouchbase/src/hashtable.c +75 -0
- data/ext/libcouchbase/src/hdr_timings.c +92 -0
- data/ext/libcouchbase/src/hostlist.cc +301 -0
- data/ext/libcouchbase/src/hostlist.h +171 -0
- data/ext/libcouchbase/src/http/http-priv.h +307 -0
- data/ext/libcouchbase/src/http/http.cc +633 -0
- data/ext/libcouchbase/src/http/http.h +34 -0
- data/ext/libcouchbase/src/http/http_io.cc +307 -0
- data/ext/libcouchbase/src/instance.cc +722 -0
- data/ext/libcouchbase/src/internal.h +244 -0
- data/ext/libcouchbase/src/iofactory.c +575 -0
- data/ext/libcouchbase/src/jsparse/parser.cc +519 -0
- data/ext/libcouchbase/src/jsparse/parser.h +173 -0
- data/ext/libcouchbase/src/lcbht/lcbht.c +282 -0
- data/ext/libcouchbase/src/lcbht/lcbht.h +199 -0
- data/ext/libcouchbase/src/lcbio/connect.c +557 -0
- data/ext/libcouchbase/src/lcbio/connect.h +364 -0
- data/ext/libcouchbase/src/lcbio/ctx.c +611 -0
- data/ext/libcouchbase/src/lcbio/ctx.h +405 -0
- data/ext/libcouchbase/src/lcbio/iotable.c +290 -0
- data/ext/libcouchbase/src/lcbio/iotable.h +84 -0
- data/ext/libcouchbase/src/lcbio/ioutils.c +350 -0
- data/ext/libcouchbase/src/lcbio/ioutils.h +203 -0
- data/ext/libcouchbase/src/lcbio/lcbio.h +51 -0
- data/ext/libcouchbase/src/lcbio/manager.c +584 -0
- data/ext/libcouchbase/src/lcbio/manager.h +156 -0
- data/ext/libcouchbase/src/lcbio/protoctx.c +84 -0
- data/ext/libcouchbase/src/lcbio/rw-inl.h +115 -0
- data/ext/libcouchbase/src/lcbio/ssl.h +149 -0
- data/ext/libcouchbase/src/lcbio/timer-ng.h +179 -0
- data/ext/libcouchbase/src/lcbio/timer.c +132 -0
- data/ext/libcouchbase/src/legacy.c +430 -0
- data/ext/libcouchbase/src/list.c +144 -0
- data/ext/libcouchbase/src/list.h +127 -0
- data/ext/libcouchbase/src/logging.c +244 -0
- data/ext/libcouchbase/src/logging.h +86 -0
- data/ext/libcouchbase/src/mc/compress.c +90 -0
- data/ext/libcouchbase/src/mc/compress.h +61 -0
- data/ext/libcouchbase/src/mc/forward.c +186 -0
- data/ext/libcouchbase/src/mc/forward.h +90 -0
- data/ext/libcouchbase/src/mc/iovcursor-inl.h +279 -0
- data/ext/libcouchbase/src/mc/iovcursor.h +66 -0
- data/ext/libcouchbase/src/mc/mcreq-flush-inl.h +111 -0
- data/ext/libcouchbase/src/mc/mcreq.c +954 -0
- data/ext/libcouchbase/src/mc/mcreq.h +977 -0
- data/ext/libcouchbase/src/mcserver/mcserver.c +784 -0
- data/ext/libcouchbase/src/mcserver/mcserver.h +121 -0
- data/ext/libcouchbase/src/mcserver/negotiate.c +656 -0
- data/ext/libcouchbase/src/mcserver/negotiate.h +119 -0
- data/ext/libcouchbase/src/n1ql/ixmgmt.cc +860 -0
- data/ext/libcouchbase/src/n1ql/n1ql-internal.h +22 -0
- data/ext/libcouchbase/src/n1ql/n1ql.cc +729 -0
- data/ext/libcouchbase/src/n1ql/params.cc +215 -0
- data/ext/libcouchbase/src/netbuf/netbuf-defs.h +89 -0
- data/ext/libcouchbase/src/netbuf/netbuf-mblock.h +235 -0
- data/ext/libcouchbase/src/netbuf/netbuf.c +929 -0
- data/ext/libcouchbase/src/netbuf/netbuf.h +452 -0
- data/ext/libcouchbase/src/newconfig.c +385 -0
- data/ext/libcouchbase/src/nodeinfo.cc +194 -0
- data/ext/libcouchbase/src/operations/cbflush.c +71 -0
- data/ext/libcouchbase/src/operations/counter.c +116 -0
- data/ext/libcouchbase/src/operations/durability-cas.c +224 -0
- data/ext/libcouchbase/src/operations/durability-seqno.c +157 -0
- data/ext/libcouchbase/src/operations/durability.c +668 -0
- data/ext/libcouchbase/src/operations/durability_internal.h +199 -0
- data/ext/libcouchbase/src/operations/get.c +409 -0
- data/ext/libcouchbase/src/operations/observe-seqno.c +96 -0
- data/ext/libcouchbase/src/operations/observe.c +340 -0
- data/ext/libcouchbase/src/operations/pktfwd.c +86 -0
- data/ext/libcouchbase/src/operations/remove.c +83 -0
- data/ext/libcouchbase/src/operations/stats.c +461 -0
- data/ext/libcouchbase/src/operations/store.c +360 -0
- data/ext/libcouchbase/src/operations/subdoc.cc +510 -0
- data/ext/libcouchbase/src/operations/touch.c +81 -0
- data/ext/libcouchbase/src/packetutils.c +60 -0
- data/ext/libcouchbase/src/packetutils.h +147 -0
- data/ext/libcouchbase/src/probes.d +211 -0
- data/ext/libcouchbase/src/rdb/bigalloc.c +225 -0
- data/ext/libcouchbase/src/rdb/bigalloc.h +73 -0
- data/ext/libcouchbase/src/rdb/chunkalloc.c +174 -0
- data/ext/libcouchbase/src/rdb/libcalloc.c +94 -0
- data/ext/libcouchbase/src/rdb/rope.c +419 -0
- data/ext/libcouchbase/src/rdb/rope.h +488 -0
- data/ext/libcouchbase/src/retrychk.c +113 -0
- data/ext/libcouchbase/src/retryq.c +424 -0
- data/ext/libcouchbase/src/retryq.h +157 -0
- data/ext/libcouchbase/src/ringbuffer.c +442 -0
- data/ext/libcouchbase/src/ringbuffer.h +100 -0
- data/ext/libcouchbase/src/settings.c +95 -0
- data/ext/libcouchbase/src/settings.h +188 -0
- data/ext/libcouchbase/src/simplestring.c +211 -0
- data/ext/libcouchbase/src/simplestring.h +228 -0
- data/ext/libcouchbase/src/sllist-inl.h +197 -0
- data/ext/libcouchbase/src/sllist.h +76 -0
- data/ext/libcouchbase/src/ssl/CMakeLists.txt +23 -0
- data/ext/libcouchbase/src/ssl/ssl_c.c +415 -0
- data/ext/libcouchbase/src/ssl/ssl_common.c +454 -0
- data/ext/libcouchbase/src/ssl/ssl_e.c +408 -0
- data/ext/libcouchbase/src/ssl/ssl_iot_common.h +180 -0
- data/ext/libcouchbase/src/ssobuf.h +82 -0
- data/ext/libcouchbase/src/strcodecs/base64.c +123 -0
- data/ext/libcouchbase/src/strcodecs/strcodecs.h +285 -0
- data/ext/libcouchbase/src/timings.c +208 -0
- data/ext/libcouchbase/src/trace.h +105 -0
- data/ext/libcouchbase/src/utilities.c +171 -0
- data/ext/libcouchbase/src/vbucket/CMakeLists.txt +2 -0
- data/ext/libcouchbase/src/vbucket/aliases.h +35 -0
- data/ext/libcouchbase/src/vbucket/crc32.h +83 -0
- data/ext/libcouchbase/src/vbucket/hash.h +30 -0
- data/ext/libcouchbase/src/vbucket/json-inl.h +112 -0
- data/ext/libcouchbase/src/vbucket/ketama.c +66 -0
- data/ext/libcouchbase/src/vbucket/rfc1321/global.h +32 -0
- data/ext/libcouchbase/src/vbucket/rfc1321/md5.h +35 -0
- data/ext/libcouchbase/src/vbucket/rfc1321/md5c-inl.h +335 -0
- data/ext/libcouchbase/src/vbucket/vbucket.c +1543 -0
- data/ext/libcouchbase/src/views/docreq.c +194 -0
- data/ext/libcouchbase/src/views/docreq.h +83 -0
- data/ext/libcouchbase/src/views/viewreq.c +358 -0
- data/ext/libcouchbase/src/views/viewreq.h +36 -0
- data/ext/libcouchbase/src/wait.c +161 -0
- data/ext/libcouchbase/tests/CMakeLists.txt +140 -0
- data/ext/libcouchbase/tests/basic/t_base64.cc +81 -0
- data/ext/libcouchbase/tests/basic/t_ccbc103.cc +95 -0
- data/ext/libcouchbase/tests/basic/t_connstr.cc +404 -0
- data/ext/libcouchbase/tests/basic/t_creds.cc +32 -0
- data/ext/libcouchbase/tests/basic/t_ctlcodes.cc +92 -0
- data/ext/libcouchbase/tests/basic/t_hashset.cc +262 -0
- data/ext/libcouchbase/tests/basic/t_host.cc +198 -0
- data/ext/libcouchbase/tests/basic/t_jsparse.cc +137 -0
- data/ext/libcouchbase/tests/basic/t_jsparse.h +589 -0
- data/ext/libcouchbase/tests/basic/t_list.cc +155 -0
- data/ext/libcouchbase/tests/basic/t_logger.cc +65 -0
- data/ext/libcouchbase/tests/basic/t_misc.cc +24 -0
- data/ext/libcouchbase/tests/basic/t_n1qlstrings.cc +18 -0
- data/ext/libcouchbase/tests/basic/t_netbuf.cc +446 -0
- data/ext/libcouchbase/tests/basic/t_packet.cc +222 -0
- data/ext/libcouchbase/tests/basic/t_ringbuffer.cc +278 -0
- data/ext/libcouchbase/tests/basic/t_slist.cc +429 -0
- data/ext/libcouchbase/tests/basic/t_strerror.cc +64 -0
- data/ext/libcouchbase/tests/basic/t_string.cc +112 -0
- data/ext/libcouchbase/tests/basic/t_urlencode.cc +132 -0
- data/ext/libcouchbase/tests/check-all.cc +608 -0
- data/ext/libcouchbase/tests/htparse/t_basic.cc +193 -0
- data/ext/libcouchbase/tests/ioserver/connection.cc +166 -0
- data/ext/libcouchbase/tests/ioserver/future.cc +50 -0
- data/ext/libcouchbase/tests/ioserver/ioserver.cc +104 -0
- data/ext/libcouchbase/tests/ioserver/ioserver.h +478 -0
- data/ext/libcouchbase/tests/ioserver/socket.cc +88 -0
- data/ext/libcouchbase/tests/ioserver/ssl_connection.cc +145 -0
- data/ext/libcouchbase/tests/ioserver/threads-pthreads.cc +119 -0
- data/ext/libcouchbase/tests/ioserver/threads-win32.cc +117 -0
- data/ext/libcouchbase/tests/ioserver/threads.h +66 -0
- data/ext/libcouchbase/tests/iotests/iotests.h +15 -0
- data/ext/libcouchbase/tests/iotests/mock-environment.cc +524 -0
- data/ext/libcouchbase/tests/iotests/mock-environment.h +385 -0
- data/ext/libcouchbase/tests/iotests/mock-unit-test.cc +67 -0
- data/ext/libcouchbase/tests/iotests/mock-unit-test.h +61 -0
- data/ext/libcouchbase/tests/iotests/serverparams.h +76 -0
- data/ext/libcouchbase/tests/iotests/t_arithmetic.cc +143 -0
- data/ext/libcouchbase/tests/iotests/t_behavior.cc +226 -0
- data/ext/libcouchbase/tests/iotests/t_configcache.cc +117 -0
- data/ext/libcouchbase/tests/iotests/t_confmon.cc +241 -0
- data/ext/libcouchbase/tests/iotests/t_durability.cc +1059 -0
- data/ext/libcouchbase/tests/iotests/t_forward.cc +110 -0
- data/ext/libcouchbase/tests/iotests/t_get.cc +512 -0
- data/ext/libcouchbase/tests/iotests/t_http.cc +438 -0
- data/ext/libcouchbase/tests/iotests/t_iops.cc +175 -0
- data/ext/libcouchbase/tests/iotests/t_lock.cc +275 -0
- data/ext/libcouchbase/tests/iotests/t_misc.cc +713 -0
- data/ext/libcouchbase/tests/iotests/t_mutate.cc +609 -0
- data/ext/libcouchbase/tests/iotests/t_n1ql.cc +270 -0
- data/ext/libcouchbase/tests/iotests/t_netfail.cc +654 -0
- data/ext/libcouchbase/tests/iotests/t_obseqno.cc +157 -0
- data/ext/libcouchbase/tests/iotests/t_regression.cc +321 -0
- data/ext/libcouchbase/tests/iotests/t_sched.cc +88 -0
- data/ext/libcouchbase/tests/iotests/t_serverops.cc +230 -0
- data/ext/libcouchbase/tests/iotests/t_smoke.cc +528 -0
- data/ext/libcouchbase/tests/iotests/t_subdoc.cc +822 -0
- data/ext/libcouchbase/tests/iotests/t_syncmode.cc +64 -0
- data/ext/libcouchbase/tests/iotests/t_views.cc +405 -0
- data/ext/libcouchbase/tests/iotests/testutil.cc +250 -0
- data/ext/libcouchbase/tests/iotests/testutil.h +163 -0
- data/ext/libcouchbase/tests/mc/mctest.h +119 -0
- data/ext/libcouchbase/tests/mc/pktmaker.h +101 -0
- data/ext/libcouchbase/tests/mc/t_alloc.cc +269 -0
- data/ext/libcouchbase/tests/mc/t_context.cc +100 -0
- data/ext/libcouchbase/tests/mc/t_flush.cc +185 -0
- data/ext/libcouchbase/tests/mc/t_forward.cc +239 -0
- data/ext/libcouchbase/tests/mc/t_ioflush.cc +102 -0
- data/ext/libcouchbase/tests/mc/t_iovcursor.cc +173 -0
- data/ext/libcouchbase/tests/mocksupport/procutil.c +305 -0
- data/ext/libcouchbase/tests/mocksupport/procutil.h +89 -0
- data/ext/libcouchbase/tests/mocksupport/server.c +391 -0
- data/ext/libcouchbase/tests/mocksupport/server.h +72 -0
- data/ext/libcouchbase/tests/mocksupport/timeout.c +69 -0
- data/ext/libcouchbase/tests/nonio_tests.cc +23 -0
- data/ext/libcouchbase/tests/rdb/rdbtest.h +133 -0
- data/ext/libcouchbase/tests/rdb/t_basic.cc +128 -0
- data/ext/libcouchbase/tests/rdb/t_bigalloc.cc +93 -0
- data/ext/libcouchbase/tests/rdb/t_refs.cc +112 -0
- data/ext/libcouchbase/tests/socktests/socktest.cc +347 -0
- data/ext/libcouchbase/tests/socktests/socktest.h +448 -0
- data/ext/libcouchbase/tests/socktests/t_basic.cc +143 -0
- data/ext/libcouchbase/tests/socktests/t_ctx.cc +73 -0
- data/ext/libcouchbase/tests/socktests/t_manager.cc +179 -0
- data/ext/libcouchbase/tests/socktests/t_putex.cc +256 -0
- data/ext/libcouchbase/tests/socktests/t_read.cc +187 -0
- data/ext/libcouchbase/tests/socktests/t_reentrant.cc +143 -0
- data/ext/libcouchbase/tests/socktests/t_ssl.cc +80 -0
- data/ext/libcouchbase/tests/socktests/t_write.cc +95 -0
- data/ext/libcouchbase/tests/start_mock.bat +15 -0
- data/ext/libcouchbase/tests/start_mock.sh +42 -0
- data/ext/libcouchbase/tests/unit_tests.cc +43 -0
- data/ext/libcouchbase/tests/vbucket/confdata/bad.json +101 -0
- data/ext/libcouchbase/tests/vbucket/confdata/full_25.json +363 -0
- data/ext/libcouchbase/tests/vbucket/confdata/memd_25.json +90 -0
- data/ext/libcouchbase/tests/vbucket/confdata/memd_30.json +1 -0
- data/ext/libcouchbase/tests/vbucket/confdata/memd_45.json +1 -0
- data/ext/libcouchbase/tests/vbucket/confdata/terse_25.json +291 -0
- data/ext/libcouchbase/tests/vbucket/confdata/terse_30.json +1 -0
- data/ext/libcouchbase/tests/vbucket/t_config.cc +341 -0
- data/ext/libcouchbase/tools/CMakeLists.txt +51 -0
- data/ext/libcouchbase/tools/cbc-handlers.h +462 -0
- data/ext/libcouchbase/tools/cbc-n1qlback.cc +439 -0
- data/ext/libcouchbase/tools/cbc-pillowfight.cc +822 -0
- data/ext/libcouchbase/tools/cbc.cc +1541 -0
- data/ext/libcouchbase/tools/common/histogram.cc +43 -0
- data/ext/libcouchbase/tools/common/histogram.h +23 -0
- data/ext/libcouchbase/tools/common/my_inttypes.h +22 -0
- data/ext/libcouchbase/tools/common/options.cc +420 -0
- data/ext/libcouchbase/tools/common/options.h +81 -0
- data/ext/libcouchbase/tools/docgen/docgen.h +469 -0
- data/ext/libcouchbase/tools/docgen/loc.h +210 -0
- data/ext/libcouchbase/tools/docgen/placeholders.h +211 -0
- data/ext/libcouchbase/tools/docgen/seqgen.h +94 -0
- data/lib/libcouchbase.rb +36 -0
- data/lib/libcouchbase/bucket.rb +819 -0
- data/lib/libcouchbase/callbacks.rb +72 -0
- data/lib/libcouchbase/connection.rb +790 -0
- data/lib/libcouchbase/design_docs.rb +86 -0
- data/lib/libcouchbase/error.rb +68 -0
- data/lib/libcouchbase/ext/libcouchbase.rb +1135 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdbase.rb +23 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdcounter.rb +36 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdendure.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdfts.rb +24 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdget.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdgetreplica.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdhttp.rb +58 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdn1ql.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdobseqno.rb +33 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdobserve.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdstore.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdstoredur.rb +45 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdsubdoc.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdverbosity.rb +29 -0
- data/lib/libcouchbase/ext/libcouchbase/cmdviewquery.rb +61 -0
- data/lib/libcouchbase/ext/libcouchbase/contigbuf.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st.rb +15 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st0.rb +23 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st1.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st2.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/create_st3.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/crst_u.rb +20 -0
- data/lib/libcouchbase/ext/libcouchbase/durability_opts_st_v.rb +11 -0
- data/lib/libcouchbase/ext/libcouchbase/durability_opts_t.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/durabilityopt_sv0.rb +63 -0
- data/lib/libcouchbase/ext/libcouchbase/enums.rb +991 -0
- data/lib/libcouchbase/ext/libcouchbase/fragbuf.rb +18 -0
- data/lib/libcouchbase/ext/libcouchbase/ftshandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/histogram.rb +34 -0
- data/lib/libcouchbase/ext/libcouchbase/http_request_t.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/keybuf.rb +20 -0
- data/lib/libcouchbase/ext/libcouchbase/multicmd_ctx.rb +30 -0
- data/lib/libcouchbase/ext/libcouchbase/mutation_token.rb +17 -0
- data/lib/libcouchbase/ext/libcouchbase/n1qlhandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/n1qlparams.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/respbase.rb +29 -0
- data/lib/libcouchbase/ext/libcouchbase/respcounter.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respendure.rb +49 -0
- data/lib/libcouchbase/ext/libcouchbase/respfts.rb +40 -0
- data/lib/libcouchbase/ext/libcouchbase/respget.rb +44 -0
- data/lib/libcouchbase/ext/libcouchbase/resphttp.rb +48 -0
- data/lib/libcouchbase/ext/libcouchbase/respmcversion.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respn1ql.rb +41 -0
- data/lib/libcouchbase/ext/libcouchbase/respobseqno.rb +52 -0
- data/lib/libcouchbase/ext/libcouchbase/respobserve.rb +41 -0
- data/lib/libcouchbase/ext/libcouchbase/respserverbase.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respstats.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respstore.rb +32 -0
- data/lib/libcouchbase/ext/libcouchbase/respstoredur.rb +38 -0
- data/lib/libcouchbase/ext/libcouchbase/respsubdoc.rb +35 -0
- data/lib/libcouchbase/ext/libcouchbase/respviewquery.rb +67 -0
- data/lib/libcouchbase/ext/libcouchbase/sdentry.rb +22 -0
- data/lib/libcouchbase/ext/libcouchbase/sdspec.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase/t.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase/valbuf.rb +22 -0
- data/lib/libcouchbase/ext/libcouchbase/valbuf_u_buf.rb +14 -0
- data/lib/libcouchbase/ext/libcouchbase/viewhandle.rb +7 -0
- data/lib/libcouchbase/ext/libcouchbase_iocp.rb +26 -0
- data/lib/libcouchbase/ext/libcouchbase_libuv.rb +18 -0
- data/lib/libcouchbase/ext/tasks.rb +87 -0
- data/lib/libcouchbase/n1ql.rb +73 -0
- data/lib/libcouchbase/query_full_text.rb +147 -0
- data/lib/libcouchbase/query_n1ql.rb +121 -0
- data/lib/libcouchbase/query_view.rb +129 -0
- data/lib/libcouchbase/results_fiber.rb +262 -0
- data/lib/libcouchbase/results_native.rb +211 -0
- data/lib/libcouchbase/version.rb +5 -0
- data/libcouchbase.gemspec +61 -0
- data/spec/bucket_spec.rb +270 -0
- data/spec/connection_spec.rb +277 -0
- data/spec/design_docs_spec.rb +23 -0
- data/spec/error_spec.rb +26 -0
- data/spec/fts_spec.rb +129 -0
- data/spec/n1ql_spec.rb +201 -0
- data/spec/results_libuv_spec.rb +229 -0
- data/spec/results_native_spec.rb +259 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/design.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/data-0000.cbb +0 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/failover.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/meta.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/seqno.json +1 -0
- data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/snapshot_markers.json +1 -0
- data/spec/view_spec.rb +195 -0
- metadata +775 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2014 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#ifndef LCB_IOTABLE_H
|
|
19
|
+
#define LCB_IOTABLE_H
|
|
20
|
+
|
|
21
|
+
#include <libcouchbase/couchbase.h>
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @file
|
|
25
|
+
* @brief Internal I/O Table routines
|
|
26
|
+
*
|
|
27
|
+
* @details
|
|
28
|
+
* Include this file if you are actually manipulating the I/O system (i.e.
|
|
29
|
+
* creating timers, starting/stoping loops, or writing to/from a socket).
|
|
30
|
+
*
|
|
31
|
+
* This file defines the iotable layout as well as various macros associated
|
|
32
|
+
* with its use. The actual "Public" API (i.e. just for passing it around) can
|
|
33
|
+
* be found in <lcbio/connect.h>
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
#ifdef __cplusplus
|
|
37
|
+
extern "C" {
|
|
38
|
+
#endif
|
|
39
|
+
|
|
40
|
+
typedef struct lcbio_TABLE {
|
|
41
|
+
lcb_io_opt_t p;
|
|
42
|
+
lcb_iomodel_t model;
|
|
43
|
+
lcb_timer_procs timer;
|
|
44
|
+
lcb_loop_procs loop;
|
|
45
|
+
|
|
46
|
+
union {
|
|
47
|
+
struct {
|
|
48
|
+
lcb_ev_procs ev;
|
|
49
|
+
lcb_bsd_procs io;
|
|
50
|
+
} v0;
|
|
51
|
+
lcb_completion_procs completion;
|
|
52
|
+
} u_io;
|
|
53
|
+
unsigned refcount;
|
|
54
|
+
void (*dtor)(void *);
|
|
55
|
+
} lcbio_TABLE;
|
|
56
|
+
|
|
57
|
+
/** Whether the underlying model is event-based */
|
|
58
|
+
#define IOT_IS_EVENT(iot) ((iot)->model == LCB_IOMODEL_EVENT)
|
|
59
|
+
|
|
60
|
+
/** Returns an lcb_ev_procs structure for event-based I/O */
|
|
61
|
+
#define IOT_V0EV(iot) (iot)->u_io.v0.ev
|
|
62
|
+
|
|
63
|
+
/** Returns an lcb_bsd_procs structure for event-based I/O */
|
|
64
|
+
#define IOT_V0IO(iot) (iot)->u_io.v0.io
|
|
65
|
+
|
|
66
|
+
/** Returns an lcb_completion_procs structure for completion-based I/O */
|
|
67
|
+
#define IOT_V1(iot) (iot)->u_io.completion
|
|
68
|
+
|
|
69
|
+
/** Error code of last I/O operation */
|
|
70
|
+
#define IOT_ERRNO(iot) (iot)->p->v.v0.error
|
|
71
|
+
|
|
72
|
+
/** Start the loop */
|
|
73
|
+
#define IOT_START(iot) (iot)->loop.start((iot)->p)
|
|
74
|
+
|
|
75
|
+
/** Stop the loop */
|
|
76
|
+
#define IOT_STOP(iot) (iot)->loop.stop((iot)->p)
|
|
77
|
+
|
|
78
|
+
/** First argument to IO Table */
|
|
79
|
+
#define IOT_ARG(iot) (iot)->p
|
|
80
|
+
|
|
81
|
+
#ifdef __cplusplus
|
|
82
|
+
}
|
|
83
|
+
#endif
|
|
84
|
+
#endif
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2014 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#ifndef _WIN32
|
|
19
|
+
#include <errno.h>
|
|
20
|
+
#endif
|
|
21
|
+
|
|
22
|
+
#include "connect.h"
|
|
23
|
+
#include "ioutils.h"
|
|
24
|
+
#include "hostlist.h"
|
|
25
|
+
#include "manager.h"
|
|
26
|
+
#include "iotable.h"
|
|
27
|
+
#include <stdio.h>
|
|
28
|
+
#include "ssl.h"
|
|
29
|
+
|
|
30
|
+
lcbio_CSERR
|
|
31
|
+
lcbio_mkcserr(int syserr)
|
|
32
|
+
{
|
|
33
|
+
switch (syserr) {
|
|
34
|
+
case 0:
|
|
35
|
+
return LCBIO_CSERR_CONNECTED;
|
|
36
|
+
|
|
37
|
+
case EINTR:
|
|
38
|
+
return LCBIO_CSERR_INTR;
|
|
39
|
+
|
|
40
|
+
case EWOULDBLOCK:
|
|
41
|
+
#ifdef USE_EAGAIN
|
|
42
|
+
case EAGAIN:
|
|
43
|
+
#endif
|
|
44
|
+
case EINPROGRESS:
|
|
45
|
+
case EALREADY:
|
|
46
|
+
return LCBIO_CSERR_BUSY;
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
case EISCONN:
|
|
50
|
+
return LCBIO_CSERR_CONNECTED;
|
|
51
|
+
|
|
52
|
+
#ifdef _WIN32
|
|
53
|
+
case EINVAL:
|
|
54
|
+
return LCBIO_CSERR_EINVAL;
|
|
55
|
+
#endif
|
|
56
|
+
default:
|
|
57
|
+
return LCBIO_CSERR_EFAIL;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
void
|
|
62
|
+
lcbio_mksyserr(lcbio_OSERR in, lcbio_OSERR *out)
|
|
63
|
+
{
|
|
64
|
+
switch (in) {
|
|
65
|
+
case EINTR:
|
|
66
|
+
case EWOULDBLOCK:
|
|
67
|
+
#ifdef USE_EAGAIN
|
|
68
|
+
case EAGAIN:
|
|
69
|
+
#endif
|
|
70
|
+
case EINVAL:
|
|
71
|
+
case EINPROGRESS:
|
|
72
|
+
case EISCONN:
|
|
73
|
+
case EALREADY:
|
|
74
|
+
return;
|
|
75
|
+
default:
|
|
76
|
+
*out = in;
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
static lcb_error_t
|
|
82
|
+
ioerr2lcberr(lcbio_OSERR in, const lcb_settings *settings)
|
|
83
|
+
{
|
|
84
|
+
switch (in) {
|
|
85
|
+
case 0:
|
|
86
|
+
return LCB_ESOCKSHUTDOWN;
|
|
87
|
+
case ECONNREFUSED:
|
|
88
|
+
return LCB_ECONNREFUSED;
|
|
89
|
+
case ENETUNREACH:
|
|
90
|
+
case EHOSTUNREACH:
|
|
91
|
+
case EHOSTDOWN:
|
|
92
|
+
return LCB_ENETUNREACH;
|
|
93
|
+
case EMFILE:
|
|
94
|
+
case ENFILE:
|
|
95
|
+
return LCB_EFDLIMITREACHED;
|
|
96
|
+
case EADDRINUSE:
|
|
97
|
+
case EADDRNOTAVAIL:
|
|
98
|
+
return LCB_ECANTGETPORT;
|
|
99
|
+
case ECONNRESET:
|
|
100
|
+
case ECONNABORTED:
|
|
101
|
+
return LCB_ECONNRESET;
|
|
102
|
+
default:
|
|
103
|
+
lcb_log(settings, "lcbio", LCB_LOG_WARN, __FILE__, __LINE__, "FIXME: Unknown iops/os error code %d. Using NETWORK_ERROR", in);
|
|
104
|
+
return LCB_NETWORK_ERROR;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
lcb_error_t
|
|
109
|
+
lcbio_mklcberr(lcbio_OSERR in, const lcb_settings *settings)
|
|
110
|
+
{
|
|
111
|
+
if (settings->detailed_neterr == 0) {
|
|
112
|
+
lcb_log(settings, "lcbio", LCB_LOG_INFO, __FILE__, __LINE__, "Translating errno=%d, lcb=0x%x to NETWORK_ERROR",
|
|
113
|
+
in, ioerr2lcberr(in, settings));
|
|
114
|
+
return LCB_NETWORK_ERROR;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return ioerr2lcberr(in, settings);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
lcb_socket_t
|
|
121
|
+
lcbio_E_ai2sock(lcbio_TABLE *io, struct addrinfo **ai, int *connerr)
|
|
122
|
+
{
|
|
123
|
+
lcb_socket_t ret = INVALID_SOCKET;
|
|
124
|
+
*connerr = 0;
|
|
125
|
+
|
|
126
|
+
for (; *ai; *ai = (*ai)->ai_next) {
|
|
127
|
+
ret = IOT_V0IO(io).socket0(
|
|
128
|
+
IOT_ARG(io), (*ai)->ai_family, (*ai)->ai_socktype,
|
|
129
|
+
(*ai)->ai_protocol);
|
|
130
|
+
|
|
131
|
+
if (ret != INVALID_SOCKET) {
|
|
132
|
+
return ret;
|
|
133
|
+
} else {
|
|
134
|
+
*connerr = IOT_ERRNO(io);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return ret;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
lcb_sockdata_t *
|
|
142
|
+
lcbio_C_ai2sock(lcbio_TABLE *io, struct addrinfo **ai, int *connerr)
|
|
143
|
+
{
|
|
144
|
+
lcb_sockdata_t *ret = NULL;
|
|
145
|
+
for (; *ai; *ai = (*ai)->ai_next) {
|
|
146
|
+
ret = IOT_V1(io).socket(
|
|
147
|
+
IOT_ARG(io), (*ai)->ai_family, (*ai)->ai_socktype,
|
|
148
|
+
(*ai)->ai_protocol);
|
|
149
|
+
if (ret) {
|
|
150
|
+
return ret;
|
|
151
|
+
} else {
|
|
152
|
+
*connerr = IOT_ERRNO(io);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return ret;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
struct nameinfo_common {
|
|
159
|
+
char remote[NI_MAXHOST + NI_MAXSERV + 2];
|
|
160
|
+
char local[NI_MAXHOST + NI_MAXSERV + 2];
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
static int
|
|
164
|
+
saddr_to_string(struct sockaddr *saddr, int len, char *buf, lcb_size_t nbuf)
|
|
165
|
+
{
|
|
166
|
+
char h[NI_MAXHOST + 1];
|
|
167
|
+
char p[NI_MAXSERV + 1];
|
|
168
|
+
int rv;
|
|
169
|
+
|
|
170
|
+
rv = getnameinfo(saddr, len, h, sizeof(h), p, sizeof(p),
|
|
171
|
+
NI_NUMERICHOST | NI_NUMERICSERV);
|
|
172
|
+
if (rv < 0) {
|
|
173
|
+
return 0;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (snprintf(buf, nbuf, "%s;%s", h, p) < 0) {
|
|
177
|
+
return 0;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return 1;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
void
|
|
184
|
+
lcbio__load_socknames(lcbio_SOCKET *sock)
|
|
185
|
+
{
|
|
186
|
+
int n_salocal, n_saremote, rv;
|
|
187
|
+
struct lcb_nameinfo_st ni;
|
|
188
|
+
lcbio_CONNINFO *info = sock->info;
|
|
189
|
+
|
|
190
|
+
n_salocal = sizeof(info->sa_local);
|
|
191
|
+
n_saremote = sizeof(info->sa_remote);
|
|
192
|
+
ni.local.name = (struct sockaddr *)&info->sa_local;
|
|
193
|
+
ni.local.len = &n_salocal;
|
|
194
|
+
ni.remote.name = (struct sockaddr *)&info->sa_remote;
|
|
195
|
+
ni.remote.len = &n_saremote;
|
|
196
|
+
|
|
197
|
+
if (!IOT_IS_EVENT(sock->io)) {
|
|
198
|
+
if (!sock->u.sd) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
rv = IOT_V1(sock->io).nameinfo(IOT_ARG(sock->io), sock->u.sd, &ni);
|
|
203
|
+
|
|
204
|
+
if (ni.local.len == 0 || ni.remote.len == 0 || rv < 0) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
} else {
|
|
209
|
+
socklen_t sl_tmp = sizeof(info->sa_local);
|
|
210
|
+
if (sock->u.fd == INVALID_SOCKET) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
rv = getsockname(sock->u.fd, ni.local.name, &sl_tmp);
|
|
215
|
+
n_salocal = sl_tmp;
|
|
216
|
+
if (rv < 0) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
rv = getpeername(sock->u.fd, ni.remote.name, &sl_tmp);
|
|
220
|
+
n_saremote = sl_tmp;
|
|
221
|
+
if (rv < 0) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
info->naddr = n_salocal;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
int
|
|
229
|
+
lcbio_get_nameinfo(lcbio_SOCKET *sock, struct lcbio_NAMEINFO *nistrs)
|
|
230
|
+
{
|
|
231
|
+
lcbio_CONNINFO *info = sock->info;
|
|
232
|
+
if (!info) {
|
|
233
|
+
return 0;
|
|
234
|
+
}
|
|
235
|
+
if (!info->naddr) {
|
|
236
|
+
return 0;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
if (!saddr_to_string((struct sockaddr*)&info->sa_remote, info->naddr,
|
|
240
|
+
nistrs->remote, sizeof(nistrs->remote))) {
|
|
241
|
+
return 0;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if (!saddr_to_string((struct sockaddr*)&info->sa_local, info->naddr,
|
|
245
|
+
nistrs->local, sizeof(nistrs->local))) {
|
|
246
|
+
return 0;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
return 1;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
int
|
|
253
|
+
lcbio_is_netclosed(lcbio_SOCKET *sock, int flags)
|
|
254
|
+
{
|
|
255
|
+
lcbio_pTABLE iot = sock->io;
|
|
256
|
+
|
|
257
|
+
if (IOT_IS_EVENT(iot)) {
|
|
258
|
+
return IOT_V0IO(iot).is_closed(IOT_ARG(iot), sock->u.fd, flags);
|
|
259
|
+
} else {
|
|
260
|
+
return IOT_V1(iot).is_closed(IOT_ARG(iot), sock->u.sd, flags);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
lcb_error_t
|
|
265
|
+
lcbio_disable_nagle(lcbio_SOCKET *s)
|
|
266
|
+
{
|
|
267
|
+
lcbio_pTABLE iot = s->io;
|
|
268
|
+
int val = 1, rv;
|
|
269
|
+
int is_supp = ((IOT_IS_EVENT(iot) && IOT_V0IO(iot).cntl)) ||
|
|
270
|
+
(!IOT_IS_EVENT(iot) && IOT_V1(iot).cntl);
|
|
271
|
+
|
|
272
|
+
if (!is_supp) {
|
|
273
|
+
return LCB_NOT_SUPPORTED;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
if (IOT_IS_EVENT(iot)) {
|
|
277
|
+
rv = IOT_V0IO(iot).cntl(IOT_ARG(iot), s->u.fd, LCB_IO_CNTL_SET,
|
|
278
|
+
LCB_IO_CNTL_TCP_NODELAY, &val);
|
|
279
|
+
} else {
|
|
280
|
+
rv = IOT_V1(iot).cntl(IOT_ARG(iot), s->u.sd, LCB_IO_CNTL_SET,
|
|
281
|
+
LCB_IO_CNTL_TCP_NODELAY, &val);
|
|
282
|
+
}
|
|
283
|
+
if (rv != 0) {
|
|
284
|
+
return lcbio_mklcberr(IOT_ERRNO(iot), s->settings);
|
|
285
|
+
} else {
|
|
286
|
+
return LCB_SUCCESS;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
void
|
|
291
|
+
lcbio_connreq_cancel(lcbio_CONNREQ *req)
|
|
292
|
+
{
|
|
293
|
+
if (!req->u.cs) {
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
if (req->type == LCBIO_CONNREQ_POOLED) {
|
|
298
|
+
lcbio_mgr_cancel(req->u.preq);
|
|
299
|
+
} else if (req->type == LCBIO_CONNREQ_RAW) {
|
|
300
|
+
lcbio_connect_cancel(req->u.cs);
|
|
301
|
+
} else {
|
|
302
|
+
req->dtor(req->u.p_generic);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
req->u.cs = NULL;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
int
|
|
309
|
+
lcbio_ssl_supported(void)
|
|
310
|
+
{
|
|
311
|
+
#ifdef LCB_NO_SSL
|
|
312
|
+
return 0;
|
|
313
|
+
#else
|
|
314
|
+
return 1;
|
|
315
|
+
#endif
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
lcbio_pSSLCTX
|
|
319
|
+
lcbio_ssl_new__fallback(const char *ca, int noverify, lcb_error_t *errp,
|
|
320
|
+
lcb_settings *settings)
|
|
321
|
+
{
|
|
322
|
+
(void)ca; (void)noverify; (void)settings;
|
|
323
|
+
if (errp) { *errp = LCB_CLIENT_FEATURE_UNAVAILABLE; }
|
|
324
|
+
return NULL;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
#ifdef LCB_NO_SSL
|
|
329
|
+
void lcbio_ssl_free(lcbio_pSSLCTX a) {
|
|
330
|
+
(void)a;
|
|
331
|
+
}
|
|
332
|
+
lcb_error_t lcbio_ssl_apply(lcbio_SOCKET *a, lcbio_pSSLCTX b) {
|
|
333
|
+
(void)a;(void)b;
|
|
334
|
+
return LCB_CLIENT_FEATURE_UNAVAILABLE;
|
|
335
|
+
}
|
|
336
|
+
int lcbio_ssl_check(lcbio_SOCKET *s) {
|
|
337
|
+
(void)s;
|
|
338
|
+
return 0;
|
|
339
|
+
}
|
|
340
|
+
lcb_error_t lcbio_ssl_get_error(lcbio_SOCKET *s) {
|
|
341
|
+
(void)s;
|
|
342
|
+
return LCB_SUCCESS;
|
|
343
|
+
}
|
|
344
|
+
void lcbio_ssl_global_init(void) {
|
|
345
|
+
}
|
|
346
|
+
lcb_error_t lcbio_sslify_if_needed(lcbio_SOCKET *s, lcb_settings *st) {
|
|
347
|
+
(void)s;(void)st;
|
|
348
|
+
return LCB_SUCCESS;
|
|
349
|
+
}
|
|
350
|
+
#endif
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2014 Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#ifndef LCBIO_UTILS_H
|
|
19
|
+
#define LCBIO_UTILS_H
|
|
20
|
+
|
|
21
|
+
#ifdef __cplusplus
|
|
22
|
+
extern "C" {
|
|
23
|
+
#endif
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @file
|
|
27
|
+
* @brief Various I/O-related utilities
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
typedef enum {
|
|
31
|
+
LCBIO_CSERR_BUSY, /* request pending */
|
|
32
|
+
LCBIO_CSERR_INTR, /* eintr */
|
|
33
|
+
LCBIO_CSERR_EINVAL, /* einval */
|
|
34
|
+
LCBIO_CSERR_EFAIL, /* hard failure */
|
|
35
|
+
LCBIO_CSERR_CONNECTED /* connection established */
|
|
36
|
+
} lcbio_CSERR;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Convert the system errno (indicated by 'syserr')
|
|
40
|
+
* @param syserr system error code
|
|
41
|
+
* @return a status code simplifying the error
|
|
42
|
+
*/
|
|
43
|
+
lcbio_CSERR
|
|
44
|
+
lcbio_mkcserr(int syserr);
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Assigns the target error code if it indicates a 'fatal' or 'relevant' error
|
|
48
|
+
* code.
|
|
49
|
+
*
|
|
50
|
+
* @param in Error code to inspect
|
|
51
|
+
* @param[out] out target pointer
|
|
52
|
+
*/
|
|
53
|
+
void
|
|
54
|
+
lcbio_mksyserr(lcbio_OSERR in, lcbio_OSERR *out);
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Convert a system error code into one suitable for returning to the user
|
|
58
|
+
* @param in The code received. This can be 0, for graceful shutdown
|
|
59
|
+
* @param settings The settings for the library
|
|
60
|
+
* @return An error code.
|
|
61
|
+
*/
|
|
62
|
+
lcb_error_t
|
|
63
|
+
lcbio_mklcberr(lcbio_OSERR in, const lcb_settings *settings);
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Traverse the addrinfo structure and return a socket.
|
|
67
|
+
* @param io the iotable structure used to create the socket
|
|
68
|
+
* @param[in,out] ai an addrinfo structure
|
|
69
|
+
* @param[out] connerr an error if a socket could not be established.
|
|
70
|
+
* @return a new socket, or INVALID_SOCKET
|
|
71
|
+
*
|
|
72
|
+
* The ai structure should be considered as an opaque iterator. This function
|
|
73
|
+
* will look at the first entry in the list and attempt to create a socket.
|
|
74
|
+
* It will traverse through each entry and break when either a socket has
|
|
75
|
+
* been successfully created, or no more addrinfo entries remain.
|
|
76
|
+
*/
|
|
77
|
+
lcb_socket_t
|
|
78
|
+
lcbio_E_ai2sock(lcbio_pTABLE io, struct addrinfo **ai, int *connerr);
|
|
79
|
+
|
|
80
|
+
lcb_sockdata_t *
|
|
81
|
+
lcbio_C_ai2sock(lcbio_pTABLE io, struct addrinfo **ai, int *conerr);
|
|
82
|
+
|
|
83
|
+
struct lcbio_NAMEINFO {
|
|
84
|
+
char local[NI_MAXHOST + NI_MAXSERV + 2];
|
|
85
|
+
char remote[NI_MAXHOST + NI_MAXSERV + 2];
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
int
|
|
89
|
+
lcbio_get_nameinfo(lcbio_SOCKET *sock, struct lcbio_NAMEINFO *nistrs);
|
|
90
|
+
|
|
91
|
+
/** Basic wrapper around the @ref lcb_ioE_chkclosed_fn family */
|
|
92
|
+
int
|
|
93
|
+
lcbio_is_netclosed(lcbio_SOCKET *sock, int flags);
|
|
94
|
+
|
|
95
|
+
/** Disable Nagle's algorithm on the socket */
|
|
96
|
+
lcb_error_t
|
|
97
|
+
lcbio_disable_nagle(lcbio_SOCKET *s);
|
|
98
|
+
|
|
99
|
+
void
|
|
100
|
+
lcbio__load_socknames(lcbio_SOCKET *sock);
|
|
101
|
+
|
|
102
|
+
#ifdef _WIN32
|
|
103
|
+
#define lcbio_syserrno GetLastError()
|
|
104
|
+
#else
|
|
105
|
+
#define lcbio_syserrno errno
|
|
106
|
+
#endif
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* @addtogroup lcbio
|
|
111
|
+
* @{
|
|
112
|
+
*
|
|
113
|
+
* @name Pending Requests
|
|
114
|
+
* @{
|
|
115
|
+
*
|
|
116
|
+
* The lcbio_CONNREQ structure may contain various forms of pending requests
|
|
117
|
+
* which are _cancellable_. This is useful to act as an abstraction over the
|
|
118
|
+
* various helper functions which may be employed to initiate a new connection
|
|
119
|
+
* or negotiate an existing one.
|
|
120
|
+
*
|
|
121
|
+
* The semantics of a _cancellable_ request are:
|
|
122
|
+
*
|
|
123
|
+
* <ul>
|
|
124
|
+
* <li>They represent a pending operation</li>
|
|
125
|
+
* <li>When cancelled, the pending operation is invalidated. This means that
|
|
126
|
+
* any callbacks scheduled as a result of the operation will not be invoked.
|
|
127
|
+
* </li>
|
|
128
|
+
*
|
|
129
|
+
* <li>If the pending operation has completed, the request is invalidated. This
|
|
130
|
+
* means the pointer for the request is considered invalid once the operation
|
|
131
|
+
* has completed
|
|
132
|
+
* </li>
|
|
133
|
+
* </ul>
|
|
134
|
+
*/
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* @brief Container object for various forms of cancellable requests.
|
|
138
|
+
*/
|
|
139
|
+
typedef struct {
|
|
140
|
+
int type; /**< One of the LCBIO_CONNREQ_* constants */
|
|
141
|
+
#define LCBIO_CONNREQ_RAW 1
|
|
142
|
+
#define LCBIO_CONNREQ_POOLED 2
|
|
143
|
+
#define LCBIO_CONNREQ_GENERIC 3
|
|
144
|
+
union {
|
|
145
|
+
struct lcbio_CONNSTART *cs; /**< from lcbio_connect() */
|
|
146
|
+
struct lcbio_MGRREQ *preq; /**< from lcbio_mgr_get() */
|
|
147
|
+
void *p_generic; /**< Generic pointer. Destroyed via the dtor field */
|
|
148
|
+
} u;
|
|
149
|
+
void (*dtor)(void *);
|
|
150
|
+
} lcbio_CONNREQ;
|
|
151
|
+
|
|
152
|
+
/** @brief Clear an existing request, setting the pointer to NULL */
|
|
153
|
+
#define LCBIO_CONNREQ_CLEAR(req) (req)->u.p_generic = NULL
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* @brief Initialize a connreq with an lcbio_pCONNSTART handle
|
|
157
|
+
* @param req the request to initialize
|
|
158
|
+
* @param cs the lcbio_pCONNSTART returned by lcbio_connect()
|
|
159
|
+
*/
|
|
160
|
+
#define LCBIO_CONNREQ_MKRAW(req, cs) do { \
|
|
161
|
+
(req)->u.cs = cs; \
|
|
162
|
+
(req)->type = LCBIO_CONNREQ_RAW; \
|
|
163
|
+
} while (0);
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* @brief Initialize a connreq with an lcbio_pMGRREQ
|
|
167
|
+
* @param req The request to initialize
|
|
168
|
+
* @param sreq the lcbio_pMGRREQ returned by lcbio_mgr_get()
|
|
169
|
+
*/
|
|
170
|
+
#define LCBIO_CONNREQ_MKPOOLED(req, sreq) do { \
|
|
171
|
+
(req)->u.preq = sreq; \
|
|
172
|
+
(req)->type = LCBIO_CONNREQ_POOLED; \
|
|
173
|
+
} while (0);
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Initialize a connreq with a generic pointer.
|
|
177
|
+
* @param req The request to initialize
|
|
178
|
+
* @param p the pointer representing the request
|
|
179
|
+
* @param dtorcb a callback invoked with `p` when the request has been cancelled
|
|
180
|
+
*/
|
|
181
|
+
#define LCBIO_CONNREQ_MKGENERIC(req, p, dtorcb) do { \
|
|
182
|
+
(req)->u.p_generic = p; \
|
|
183
|
+
(req)->type = LCBIO_CONNREQ_GENERIC; \
|
|
184
|
+
(req)->dtor = (void (*)(void *))dtorcb; \
|
|
185
|
+
} while (0);
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* @brief cancels a pending request, if not yet cancelled.
|
|
189
|
+
*
|
|
190
|
+
* Cancels a pending request. If the request has already been cancelled (by
|
|
191
|
+
* calling this function), then this function does nothing
|
|
192
|
+
* @param req The request to cancel
|
|
193
|
+
*/
|
|
194
|
+
void
|
|
195
|
+
lcbio_connreq_cancel(lcbio_CONNREQ *req);
|
|
196
|
+
|
|
197
|
+
/**@}*/
|
|
198
|
+
/**@}*/
|
|
199
|
+
|
|
200
|
+
#ifdef __cplusplus
|
|
201
|
+
}
|
|
202
|
+
#endif
|
|
203
|
+
#endif
|