rugged 1.6.3 → 1.9.0
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 +4 -4
- data/ext/rugged/rugged_allocator.c +0 -54
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/AUTHORS +1 -0
- data/vendor/libgit2/CMakeLists.txt +25 -17
- data/vendor/libgit2/COPYING +195 -1
- data/vendor/libgit2/cmake/CheckPrototypeDefinitionSafe.cmake +16 -0
- data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
- data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
- data/vendor/libgit2/cmake/SelectGSSAPI.cmake +4 -4
- data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +34 -6
- data/vendor/libgit2/cmake/SelectHashes.cmake +32 -11
- data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
- data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
- data/vendor/libgit2/cmake/SelectXdiff.cmake +9 -0
- data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
- data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
- data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
- data/vendor/libgit2/deps/llhttp/api.c +510 -0
- data/vendor/libgit2/deps/llhttp/http.c +170 -0
- data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
- data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
- data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
- data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
- data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
- data/vendor/libgit2/deps/pcre/LICENCE +5 -5
- data/vendor/libgit2/deps/pcre/pcre.h +2 -2
- data/vendor/libgit2/deps/pcre/pcre_compile.c +6 -3
- data/vendor/libgit2/deps/pcre/pcre_exec.c +2 -2
- data/vendor/libgit2/deps/xdiff/CMakeLists.txt +28 -0
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/git-xdiff.h +4 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.c +19 -18
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiffi.h +2 -4
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.c +3 -3
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xhistogram.c +7 -18
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmacros.h +18 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xmerge.c +22 -20
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xpatience.c +21 -30
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.c +13 -30
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.c +18 -1
- data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xutils.h +2 -1
- data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
- data/vendor/libgit2/deps/zlib/LICENSE +22 -0
- data/vendor/libgit2/deps/zlib/adler32.c +5 -27
- data/vendor/libgit2/deps/zlib/crc32.c +94 -167
- data/vendor/libgit2/deps/zlib/deflate.c +358 -435
- data/vendor/libgit2/deps/zlib/deflate.h +41 -10
- data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
- data/vendor/libgit2/deps/zlib/infback.c +17 -30
- data/vendor/libgit2/deps/zlib/inffast.c +1 -4
- data/vendor/libgit2/deps/zlib/inffast.h +1 -1
- data/vendor/libgit2/deps/zlib/inflate.c +36 -102
- data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
- data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
- data/vendor/libgit2/deps/zlib/trees.c +287 -352
- data/vendor/libgit2/deps/zlib/zconf.h +23 -14
- data/vendor/libgit2/deps/zlib/zlib.h +202 -202
- data/vendor/libgit2/deps/zlib/zutil.c +18 -44
- data/vendor/libgit2/deps/zlib/zutil.h +13 -33
- data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
- data/vendor/libgit2/include/git2/apply.h +27 -6
- data/vendor/libgit2/include/git2/attr.h +17 -4
- data/vendor/libgit2/include/git2/blame.h +133 -28
- data/vendor/libgit2/include/git2/blob.h +71 -28
- data/vendor/libgit2/include/git2/branch.h +22 -15
- data/vendor/libgit2/include/git2/buffer.h +6 -4
- data/vendor/libgit2/include/git2/cert.h +2 -1
- data/vendor/libgit2/include/git2/checkout.h +83 -32
- data/vendor/libgit2/include/git2/cherrypick.h +10 -3
- data/vendor/libgit2/include/git2/clone.h +25 -9
- data/vendor/libgit2/include/git2/commit.h +132 -3
- data/vendor/libgit2/include/git2/common.h +138 -56
- data/vendor/libgit2/include/git2/config.h +93 -23
- data/vendor/libgit2/include/git2/credential.h +30 -2
- data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
- data/vendor/libgit2/include/git2/deprecated.h +133 -3
- data/vendor/libgit2/include/git2/describe.h +13 -1
- data/vendor/libgit2/include/git2/diff.h +77 -9
- data/vendor/libgit2/include/git2/email.h +9 -29
- data/vendor/libgit2/include/git2/errors.h +49 -74
- data/vendor/libgit2/include/git2/filter.h +14 -7
- data/vendor/libgit2/include/git2/global.h +8 -1
- data/vendor/libgit2/include/git2/graph.h +3 -2
- data/vendor/libgit2/include/git2/ignore.h +10 -0
- data/vendor/libgit2/include/git2/index.h +100 -6
- data/vendor/libgit2/include/git2/indexer.h +21 -4
- data/vendor/libgit2/include/git2/mailmap.h +7 -1
- data/vendor/libgit2/include/git2/merge.h +46 -1
- data/vendor/libgit2/include/git2/message.h +2 -2
- data/vendor/libgit2/include/git2/net.h +3 -1
- data/vendor/libgit2/include/git2/notes.h +9 -6
- data/vendor/libgit2/include/git2/object.h +9 -8
- data/vendor/libgit2/include/git2/odb.h +91 -49
- data/vendor/libgit2/include/git2/odb_backend.h +80 -52
- data/vendor/libgit2/include/git2/oid.h +24 -25
- data/vendor/libgit2/include/git2/oidarray.h +7 -1
- data/vendor/libgit2/include/git2/pack.h +13 -1
- data/vendor/libgit2/include/git2/patch.h +2 -3
- data/vendor/libgit2/include/git2/pathspec.h +9 -0
- data/vendor/libgit2/include/git2/proxy.h +10 -0
- data/vendor/libgit2/include/git2/rebase.h +9 -6
- data/vendor/libgit2/include/git2/refdb.h +2 -2
- data/vendor/libgit2/include/git2/reflog.h +3 -2
- data/vendor/libgit2/include/git2/refs.h +9 -6
- data/vendor/libgit2/include/git2/refspec.h +14 -4
- data/vendor/libgit2/include/git2/remote.h +112 -18
- data/vendor/libgit2/include/git2/repository.h +61 -15
- data/vendor/libgit2/include/git2/reset.h +16 -3
- data/vendor/libgit2/include/git2/revert.h +9 -4
- data/vendor/libgit2/include/git2/revparse.h +3 -3
- data/vendor/libgit2/include/git2/revwalk.h +3 -2
- data/vendor/libgit2/include/git2/signature.h +46 -1
- data/vendor/libgit2/include/git2/stash.h +17 -3
- data/vendor/libgit2/include/git2/status.h +10 -6
- data/vendor/libgit2/include/git2/stdint.h +87 -85
- data/vendor/libgit2/include/git2/strarray.h +2 -3
- data/vendor/libgit2/include/git2/submodule.h +20 -9
- data/vendor/libgit2/include/git2/sys/alloc.h +12 -34
- data/vendor/libgit2/include/git2/sys/commit.h +77 -3
- data/vendor/libgit2/include/git2/sys/commit_graph.h +109 -58
- data/vendor/libgit2/include/git2/sys/config.h +80 -4
- data/vendor/libgit2/include/git2/sys/credential.h +4 -3
- data/vendor/libgit2/include/git2/sys/diff.h +21 -1
- data/vendor/libgit2/include/git2/sys/email.h +7 -0
- data/vendor/libgit2/include/git2/sys/errors.h +76 -0
- data/vendor/libgit2/include/git2/sys/filter.h +66 -3
- data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
- data/vendor/libgit2/include/git2/sys/index.h +3 -2
- data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
- data/vendor/libgit2/include/git2/sys/merge.h +55 -7
- data/vendor/libgit2/include/git2/sys/midx.h +47 -4
- data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
- data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
- data/vendor/libgit2/include/git2/sys/path.h +12 -1
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
- data/vendor/libgit2/include/git2/sys/refs.h +3 -2
- data/vendor/libgit2/include/git2/sys/remote.h +8 -1
- data/vendor/libgit2/include/git2/sys/repository.h +63 -3
- data/vendor/libgit2/include/git2/sys/stream.h +25 -2
- data/vendor/libgit2/include/git2/sys/transport.h +44 -5
- data/vendor/libgit2/include/git2/tag.h +3 -1
- data/vendor/libgit2/include/git2/trace.h +9 -3
- data/vendor/libgit2/include/git2/transaction.h +3 -2
- data/vendor/libgit2/include/git2/transport.h +11 -3
- data/vendor/libgit2/include/git2/tree.h +16 -5
- data/vendor/libgit2/include/git2/types.h +19 -3
- data/vendor/libgit2/include/git2/version.h +44 -8
- data/vendor/libgit2/include/git2/worktree.h +19 -7
- data/vendor/libgit2/src/CMakeLists.txt +40 -15
- data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
- data/vendor/libgit2/src/cli/cmd.c +1 -1
- data/vendor/libgit2/src/cli/cmd.h +4 -0
- data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
- data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
- data/vendor/libgit2/src/cli/cmd_clone.c +27 -13
- data/vendor/libgit2/src/cli/cmd_config.c +241 -0
- data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
- data/vendor/libgit2/src/cli/cmd_help.c +6 -7
- data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
- data/vendor/libgit2/src/cli/cmd_init.c +102 -0
- data/vendor/libgit2/src/cli/common.c +168 -0
- data/vendor/libgit2/src/cli/common.h +63 -0
- data/vendor/libgit2/src/cli/error.h +1 -1
- data/vendor/libgit2/src/cli/main.c +52 -24
- data/vendor/libgit2/src/cli/opt.c +29 -3
- data/vendor/libgit2/src/cli/opt.h +21 -3
- data/vendor/libgit2/src/cli/opt_usage.c +102 -33
- data/vendor/libgit2/src/cli/opt_usage.h +6 -1
- data/vendor/libgit2/src/cli/progress.c +60 -10
- data/vendor/libgit2/src/cli/progress.h +16 -4
- data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
- data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
- data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +27 -27
- data/vendor/libgit2/src/libgit2/annotated_commit.c +2 -2
- data/vendor/libgit2/src/libgit2/annotated_commit.h +1 -1
- data/vendor/libgit2/src/libgit2/apply.c +14 -16
- data/vendor/libgit2/src/libgit2/attr.c +30 -13
- data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
- data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
- data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
- data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
- data/vendor/libgit2/src/libgit2/blame.c +152 -59
- data/vendor/libgit2/src/libgit2/blame.h +1 -0
- data/vendor/libgit2/src/libgit2/blame_git.c +0 -1
- data/vendor/libgit2/src/libgit2/branch.c +2 -2
- data/vendor/libgit2/src/libgit2/cache.c +22 -17
- data/vendor/libgit2/src/libgit2/cache.h +7 -9
- data/vendor/libgit2/src/libgit2/checkout.c +34 -24
- data/vendor/libgit2/src/libgit2/checkout.h +0 -2
- data/vendor/libgit2/src/libgit2/cherrypick.c +4 -5
- data/vendor/libgit2/src/libgit2/clone.c +186 -164
- data/vendor/libgit2/src/libgit2/clone.h +4 -1
- data/vendor/libgit2/src/libgit2/commit.c +123 -9
- data/vendor/libgit2/src/libgit2/commit_graph.c +166 -88
- data/vendor/libgit2/src/libgit2/commit_graph.h +21 -6
- data/vendor/libgit2/src/libgit2/commit_list.c +12 -5
- data/vendor/libgit2/src/libgit2/commit_list.h +1 -0
- data/vendor/libgit2/src/libgit2/config.c +394 -300
- data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
- data/vendor/libgit2/src/libgit2/config.h +9 -4
- data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
- data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
- data/vendor/libgit2/src/libgit2/config_file.c +113 -96
- data/vendor/libgit2/src/libgit2/config_list.c +285 -0
- data/vendor/libgit2/src/libgit2/config_list.h +32 -0
- data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
- data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
- data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
- data/vendor/libgit2/src/libgit2/describe.c +34 -31
- data/vendor/libgit2/src/libgit2/diff.c +17 -8
- data/vendor/libgit2/src/libgit2/diff.h +6 -6
- data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
- data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
- data/vendor/libgit2/src/libgit2/diff_file.c +7 -7
- data/vendor/libgit2/src/libgit2/diff_generate.c +39 -18
- data/vendor/libgit2/src/libgit2/diff_parse.c +22 -6
- data/vendor/libgit2/src/libgit2/diff_print.c +88 -13
- data/vendor/libgit2/src/libgit2/diff_tform.c +40 -12
- data/vendor/libgit2/src/libgit2/diff_xdiff.h +1 -1
- data/vendor/libgit2/src/libgit2/email.c +5 -3
- data/vendor/libgit2/src/libgit2/fetch.c +39 -9
- data/vendor/libgit2/src/libgit2/fetch.h +0 -2
- data/vendor/libgit2/src/libgit2/fetchhead.c +11 -9
- data/vendor/libgit2/src/libgit2/filter.c +5 -5
- data/vendor/libgit2/src/libgit2/git2.rc +3 -3
- data/vendor/libgit2/src/libgit2/grafts.c +270 -0
- data/vendor/libgit2/src/libgit2/grafts.h +35 -0
- data/vendor/libgit2/src/libgit2/graph.c +1 -1
- data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
- data/vendor/libgit2/src/libgit2/ident.c +3 -3
- data/vendor/libgit2/src/libgit2/ignore.c +9 -5
- data/vendor/libgit2/src/libgit2/index.c +392 -208
- data/vendor/libgit2/src/libgit2/index.h +16 -3
- data/vendor/libgit2/src/libgit2/index_map.c +95 -0
- data/vendor/libgit2/src/libgit2/index_map.h +28 -0
- data/vendor/libgit2/src/libgit2/indexer.c +44 -41
- data/vendor/libgit2/src/libgit2/iterator.c +34 -13
- data/vendor/libgit2/src/libgit2/iterator.h +3 -0
- data/vendor/libgit2/src/libgit2/libgit2.c +155 -331
- data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
- data/vendor/libgit2/src/libgit2/merge.c +56 -46
- data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
- data/vendor/libgit2/src/libgit2/merge_file.c +0 -2
- data/vendor/libgit2/src/libgit2/midx.c +86 -44
- data/vendor/libgit2/src/libgit2/midx.h +13 -3
- data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
- data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
- data/vendor/libgit2/src/libgit2/notes.c +9 -8
- data/vendor/libgit2/src/libgit2/object.c +42 -16
- data/vendor/libgit2/src/libgit2/object.h +6 -0
- data/vendor/libgit2/src/libgit2/odb.c +16 -9
- data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
- data/vendor/libgit2/src/libgit2/odb_pack.c +28 -7
- data/vendor/libgit2/src/libgit2/oid.c +35 -2
- data/vendor/libgit2/src/libgit2/oid.h +11 -0
- data/vendor/libgit2/src/libgit2/oidarray.c +49 -3
- data/vendor/libgit2/src/libgit2/oidarray.h +5 -1
- data/vendor/libgit2/src/libgit2/pack-objects.c +77 -43
- data/vendor/libgit2/src/libgit2/pack-objects.h +17 -6
- data/vendor/libgit2/src/libgit2/pack.c +33 -27
- data/vendor/libgit2/src/libgit2/pack.h +15 -10
- data/vendor/libgit2/src/libgit2/parse.c +7 -4
- data/vendor/libgit2/src/libgit2/parse.h +1 -1
- data/vendor/libgit2/src/libgit2/patch.h +7 -1
- data/vendor/libgit2/src/libgit2/patch_generate.c +24 -5
- data/vendor/libgit2/src/libgit2/patch_parse.c +18 -10
- data/vendor/libgit2/src/libgit2/path.c +1 -1
- data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
- data/vendor/libgit2/src/libgit2/push.c +81 -30
- data/vendor/libgit2/src/libgit2/push.h +1 -0
- data/vendor/libgit2/src/libgit2/reader.c +1 -1
- data/vendor/libgit2/src/libgit2/rebase.c +72 -84
- data/vendor/libgit2/src/libgit2/refdb_fs.c +146 -70
- data/vendor/libgit2/src/libgit2/reflog.c +1 -2
- data/vendor/libgit2/src/libgit2/reflog.h +2 -0
- data/vendor/libgit2/src/libgit2/refs.c +34 -8
- data/vendor/libgit2/src/libgit2/refs.h +6 -1
- data/vendor/libgit2/src/libgit2/refspec.c +28 -1
- data/vendor/libgit2/src/libgit2/refspec.h +8 -0
- data/vendor/libgit2/src/libgit2/remote.c +136 -67
- data/vendor/libgit2/src/libgit2/remote.h +1 -0
- data/vendor/libgit2/src/libgit2/repository.c +789 -330
- data/vendor/libgit2/src/libgit2/repository.h +22 -3
- data/vendor/libgit2/src/libgit2/reset.c +2 -2
- data/vendor/libgit2/src/libgit2/revert.c +9 -13
- data/vendor/libgit2/src/libgit2/revparse.c +6 -3
- data/vendor/libgit2/src/libgit2/revwalk.c +36 -11
- data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
- data/vendor/libgit2/src/libgit2/settings.c +468 -0
- data/vendor/libgit2/src/libgit2/settings.h +6 -2
- data/vendor/libgit2/src/libgit2/signature.c +132 -15
- data/vendor/libgit2/src/libgit2/signature.h +0 -1
- data/vendor/libgit2/src/libgit2/stash.c +9 -8
- data/vendor/libgit2/src/libgit2/status.c +1 -1
- data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -61
- data/vendor/libgit2/src/libgit2/streams/openssl.c +40 -23
- data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
- data/vendor/libgit2/src/libgit2/streams/schannel.c +715 -0
- data/vendor/libgit2/src/libgit2/streams/schannel.h +28 -0
- data/vendor/libgit2/src/libgit2/streams/socket.c +237 -51
- data/vendor/libgit2/src/libgit2/streams/socket.h +3 -1
- data/vendor/libgit2/src/libgit2/streams/stransport.c +79 -19
- data/vendor/libgit2/src/libgit2/streams/tls.c +5 -0
- data/vendor/libgit2/src/libgit2/submodule.c +106 -63
- data/vendor/libgit2/src/libgit2/submodule.h +9 -10
- data/vendor/libgit2/src/libgit2/tag.c +1 -1
- data/vendor/libgit2/src/libgit2/trailer.c +6 -6
- data/vendor/libgit2/src/libgit2/transaction.c +26 -20
- data/vendor/libgit2/src/libgit2/transaction.h +4 -1
- data/vendor/libgit2/src/libgit2/transport.c +4 -1
- data/vendor/libgit2/src/libgit2/transports/auth.h +1 -2
- data/vendor/libgit2/src/libgit2/transports/{auth_negotiate.c → auth_gssapi.c} +32 -32
- data/vendor/libgit2/src/libgit2/transports/auth_negotiate.h +1 -1
- data/vendor/libgit2/src/libgit2/transports/auth_ntlm.h +1 -1
- data/vendor/libgit2/src/libgit2/transports/{auth_ntlm.c → auth_ntlmclient.c} +12 -12
- data/vendor/libgit2/src/libgit2/transports/auth_sspi.c +341 -0
- data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
- data/vendor/libgit2/src/libgit2/transports/git.c +7 -8
- data/vendor/libgit2/src/libgit2/transports/http.c +8 -4
- data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
- data/vendor/libgit2/src/libgit2/transports/httpclient.c +117 -72
- data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
- data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
- data/vendor/libgit2/src/libgit2/transports/local.c +21 -11
- data/vendor/libgit2/src/libgit2/transports/smart.c +50 -32
- data/vendor/libgit2/src/libgit2/transports/smart.h +26 -9
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +139 -18
- data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +209 -57
- data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
- data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
- data/vendor/libgit2/src/libgit2/transports/winhttp.c +48 -21
- data/vendor/libgit2/src/libgit2/tree-cache.c +26 -16
- data/vendor/libgit2/src/libgit2/tree-cache.h +5 -3
- data/vendor/libgit2/src/libgit2/tree.c +35 -27
- data/vendor/libgit2/src/libgit2/tree.h +3 -2
- data/vendor/libgit2/src/libgit2/worktree.c +39 -27
- data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
- data/vendor/libgit2/src/util/alloc.c +69 -7
- data/vendor/libgit2/src/util/alloc.h +34 -9
- data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
- data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
- data/vendor/libgit2/src/util/allocators/failalloc.c +0 -60
- data/vendor/libgit2/src/util/allocators/failalloc.h +0 -6
- data/vendor/libgit2/src/util/allocators/stdalloc.c +2 -115
- data/vendor/libgit2/src/util/allocators/win32_leakcheck.c +0 -68
- data/vendor/libgit2/src/util/array.h +24 -18
- data/vendor/libgit2/src/util/cc-compat.h +4 -0
- data/vendor/libgit2/src/util/ctype_compat.h +70 -0
- data/vendor/libgit2/src/util/date.c +22 -14
- data/vendor/libgit2/src/util/date.h +12 -0
- data/vendor/libgit2/src/util/errors.c +401 -0
- data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
- data/vendor/libgit2/src/util/filebuf.c +6 -1
- data/vendor/libgit2/src/util/filebuf.h +19 -6
- data/vendor/libgit2/src/util/fs_path.c +16 -5
- data/vendor/libgit2/src/util/fs_path.h +23 -0
- data/vendor/libgit2/src/util/futils.c +14 -10
- data/vendor/libgit2/src/util/futils.h +13 -4
- data/vendor/libgit2/src/util/git2_features.h.in +21 -4
- data/vendor/libgit2/src/util/git2_util.h +6 -0
- data/vendor/libgit2/src/util/hash/openssl.c +152 -0
- data/vendor/libgit2/src/util/hash/openssl.h +17 -1
- data/vendor/libgit2/src/util/hash/sha.h +4 -1
- data/vendor/libgit2/src/util/hashmap.h +424 -0
- data/vendor/libgit2/src/util/hashmap_str.h +43 -0
- data/vendor/libgit2/src/util/integer.h +3 -1
- data/vendor/libgit2/src/util/net.c +318 -161
- data/vendor/libgit2/src/util/net.h +27 -0
- data/vendor/libgit2/src/util/pool.c +1 -1
- data/vendor/libgit2/src/util/pool.h +5 -0
- data/vendor/libgit2/src/util/posix.c +54 -0
- data/vendor/libgit2/src/util/posix.h +22 -0
- data/vendor/libgit2/src/util/pqueue.h +1 -1
- data/vendor/libgit2/src/util/process.h +222 -0
- data/vendor/libgit2/src/util/rand.c +6 -10
- data/vendor/libgit2/src/util/regexp.c +1 -1
- data/vendor/libgit2/src/util/sortedcache.c +14 -13
- data/vendor/libgit2/src/util/sortedcache.h +3 -3
- data/vendor/libgit2/src/util/staticstr.h +66 -0
- data/vendor/libgit2/src/util/str.c +2 -2
- data/vendor/libgit2/src/util/strlist.c +108 -0
- data/vendor/libgit2/src/util/strlist.h +36 -0
- data/vendor/libgit2/src/util/unix/posix.h +0 -2
- data/vendor/libgit2/src/util/unix/process.c +629 -0
- data/vendor/libgit2/src/util/unix/realpath.c +23 -5
- data/vendor/libgit2/src/util/util.c +17 -12
- data/vendor/libgit2/src/util/util.h +28 -54
- data/vendor/libgit2/src/util/vector.c +3 -3
- data/vendor/libgit2/src/util/vector.h +2 -2
- data/vendor/libgit2/src/util/win32/error.c +1 -1
- data/vendor/libgit2/src/util/win32/path_w32.c +8 -8
- data/vendor/libgit2/src/util/win32/posix_w32.c +30 -7
- data/vendor/libgit2/src/util/win32/process.c +506 -0
- data/vendor/libgit2/src/util/win32/utf-conv.c +73 -75
- data/vendor/libgit2/src/util/win32/utf-conv.h +81 -14
- data/vendor/libgit2/src/util/win32/w32_util.c +1 -1
- metadata +72 -49
- data/vendor/libgit2/cmake/SelectWinHTTP.cmake +0 -17
- data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
- data/vendor/libgit2/deps/http-parser/COPYING +0 -23
- data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
- data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
- data/vendor/libgit2/deps/zlib/COPYING +0 -27
- data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
- data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
- data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
- data/vendor/libgit2/src/libgit2/errors.c +0 -238
- data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
- data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
- data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
- data/vendor/libgit2/src/libgit2/netops.c +0 -124
- data/vendor/libgit2/src/libgit2/netops.h +0 -68
- data/vendor/libgit2/src/libgit2/offmap.c +0 -101
- data/vendor/libgit2/src/libgit2/offmap.h +0 -133
- data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
- data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
- data/vendor/libgit2/src/libgit2/threadstate.c +0 -84
- data/vendor/libgit2/src/libgit2/threadstate.h +0 -24
- data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
- data/vendor/libgit2/src/util/khash.h +0 -615
- data/vendor/libgit2/src/util/strmap.c +0 -100
- data/vendor/libgit2/src/util/strmap.h +0 -131
- /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xdiff.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xemit.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xinclude.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xprepare.h +0 -0
- /data/vendor/libgit2/{src/libgit2 → deps}/xdiff/xtypes.h +0 -0
@@ -0,0 +1,510 @@
|
|
1
|
+
#include <stdlib.h>
|
2
|
+
#include <stdio.h>
|
3
|
+
#include <string.h>
|
4
|
+
|
5
|
+
#include "llhttp.h"
|
6
|
+
|
7
|
+
#define CALLBACK_MAYBE(PARSER, NAME) \
|
8
|
+
do { \
|
9
|
+
const llhttp_settings_t* settings; \
|
10
|
+
settings = (const llhttp_settings_t*) (PARSER)->settings; \
|
11
|
+
if (settings == NULL || settings->NAME == NULL) { \
|
12
|
+
err = 0; \
|
13
|
+
break; \
|
14
|
+
} \
|
15
|
+
err = settings->NAME((PARSER)); \
|
16
|
+
} while (0)
|
17
|
+
|
18
|
+
#define SPAN_CALLBACK_MAYBE(PARSER, NAME, START, LEN) \
|
19
|
+
do { \
|
20
|
+
const llhttp_settings_t* settings; \
|
21
|
+
settings = (const llhttp_settings_t*) (PARSER)->settings; \
|
22
|
+
if (settings == NULL || settings->NAME == NULL) { \
|
23
|
+
err = 0; \
|
24
|
+
break; \
|
25
|
+
} \
|
26
|
+
err = settings->NAME((PARSER), (START), (LEN)); \
|
27
|
+
if (err == -1) { \
|
28
|
+
err = HPE_USER; \
|
29
|
+
llhttp_set_error_reason((PARSER), "Span callback error in " #NAME); \
|
30
|
+
} \
|
31
|
+
} while (0)
|
32
|
+
|
33
|
+
void llhttp_init(llhttp_t* parser, llhttp_type_t type,
|
34
|
+
const llhttp_settings_t* settings) {
|
35
|
+
llhttp__internal_init(parser);
|
36
|
+
|
37
|
+
parser->type = type;
|
38
|
+
parser->settings = (void*) settings;
|
39
|
+
}
|
40
|
+
|
41
|
+
|
42
|
+
#if defined(__wasm__)
|
43
|
+
|
44
|
+
extern int wasm_on_message_begin(llhttp_t * p);
|
45
|
+
extern int wasm_on_url(llhttp_t* p, const char* at, size_t length);
|
46
|
+
extern int wasm_on_status(llhttp_t* p, const char* at, size_t length);
|
47
|
+
extern int wasm_on_header_field(llhttp_t* p, const char* at, size_t length);
|
48
|
+
extern int wasm_on_header_value(llhttp_t* p, const char* at, size_t length);
|
49
|
+
extern int wasm_on_headers_complete(llhttp_t * p, int status_code,
|
50
|
+
uint8_t upgrade, int should_keep_alive);
|
51
|
+
extern int wasm_on_body(llhttp_t* p, const char* at, size_t length);
|
52
|
+
extern int wasm_on_message_complete(llhttp_t * p);
|
53
|
+
|
54
|
+
static int wasm_on_headers_complete_wrap(llhttp_t* p) {
|
55
|
+
return wasm_on_headers_complete(p, p->status_code, p->upgrade,
|
56
|
+
llhttp_should_keep_alive(p));
|
57
|
+
}
|
58
|
+
|
59
|
+
const llhttp_settings_t wasm_settings = {
|
60
|
+
wasm_on_message_begin,
|
61
|
+
wasm_on_url,
|
62
|
+
wasm_on_status,
|
63
|
+
NULL,
|
64
|
+
NULL,
|
65
|
+
wasm_on_header_field,
|
66
|
+
wasm_on_header_value,
|
67
|
+
NULL,
|
68
|
+
NULL,
|
69
|
+
wasm_on_headers_complete_wrap,
|
70
|
+
wasm_on_body,
|
71
|
+
wasm_on_message_complete,
|
72
|
+
NULL,
|
73
|
+
NULL,
|
74
|
+
NULL,
|
75
|
+
NULL,
|
76
|
+
NULL,
|
77
|
+
NULL,
|
78
|
+
NULL,
|
79
|
+
NULL,
|
80
|
+
NULL,
|
81
|
+
NULL,
|
82
|
+
NULL,
|
83
|
+
};
|
84
|
+
|
85
|
+
|
86
|
+
llhttp_t* llhttp_alloc(llhttp_type_t type) {
|
87
|
+
llhttp_t* parser = malloc(sizeof(llhttp_t));
|
88
|
+
llhttp_init(parser, type, &wasm_settings);
|
89
|
+
return parser;
|
90
|
+
}
|
91
|
+
|
92
|
+
void llhttp_free(llhttp_t* parser) {
|
93
|
+
free(parser);
|
94
|
+
}
|
95
|
+
|
96
|
+
#endif /* defined(__wasm__) */
|
97
|
+
|
98
|
+
/* Some getters required to get stuff from the parser */
|
99
|
+
|
100
|
+
uint8_t llhttp_get_type(llhttp_t* parser) {
|
101
|
+
return parser->type;
|
102
|
+
}
|
103
|
+
|
104
|
+
uint8_t llhttp_get_http_major(llhttp_t* parser) {
|
105
|
+
return parser->http_major;
|
106
|
+
}
|
107
|
+
|
108
|
+
uint8_t llhttp_get_http_minor(llhttp_t* parser) {
|
109
|
+
return parser->http_minor;
|
110
|
+
}
|
111
|
+
|
112
|
+
uint8_t llhttp_get_method(llhttp_t* parser) {
|
113
|
+
return parser->method;
|
114
|
+
}
|
115
|
+
|
116
|
+
int llhttp_get_status_code(llhttp_t* parser) {
|
117
|
+
return parser->status_code;
|
118
|
+
}
|
119
|
+
|
120
|
+
uint8_t llhttp_get_upgrade(llhttp_t* parser) {
|
121
|
+
return parser->upgrade;
|
122
|
+
}
|
123
|
+
|
124
|
+
|
125
|
+
void llhttp_reset(llhttp_t* parser) {
|
126
|
+
llhttp_type_t type = parser->type;
|
127
|
+
const llhttp_settings_t* settings = parser->settings;
|
128
|
+
void* data = parser->data;
|
129
|
+
uint16_t lenient_flags = parser->lenient_flags;
|
130
|
+
|
131
|
+
llhttp__internal_init(parser);
|
132
|
+
|
133
|
+
parser->type = type;
|
134
|
+
parser->settings = (void*) settings;
|
135
|
+
parser->data = data;
|
136
|
+
parser->lenient_flags = lenient_flags;
|
137
|
+
}
|
138
|
+
|
139
|
+
|
140
|
+
llhttp_errno_t llhttp_execute(llhttp_t* parser, const char* data, size_t len) {
|
141
|
+
return llhttp__internal_execute(parser, data, data + len);
|
142
|
+
}
|
143
|
+
|
144
|
+
|
145
|
+
void llhttp_settings_init(llhttp_settings_t* settings) {
|
146
|
+
memset(settings, 0, sizeof(*settings));
|
147
|
+
}
|
148
|
+
|
149
|
+
|
150
|
+
llhttp_errno_t llhttp_finish(llhttp_t* parser) {
|
151
|
+
int err;
|
152
|
+
|
153
|
+
/* We're in an error state. Don't bother doing anything. */
|
154
|
+
if (parser->error != 0) {
|
155
|
+
return 0;
|
156
|
+
}
|
157
|
+
|
158
|
+
switch (parser->finish) {
|
159
|
+
case HTTP_FINISH_SAFE_WITH_CB:
|
160
|
+
CALLBACK_MAYBE(parser, on_message_complete);
|
161
|
+
if (err != HPE_OK) return err;
|
162
|
+
|
163
|
+
/* FALLTHROUGH */
|
164
|
+
case HTTP_FINISH_SAFE:
|
165
|
+
return HPE_OK;
|
166
|
+
case HTTP_FINISH_UNSAFE:
|
167
|
+
parser->reason = "Invalid EOF state";
|
168
|
+
return HPE_INVALID_EOF_STATE;
|
169
|
+
default:
|
170
|
+
abort();
|
171
|
+
}
|
172
|
+
}
|
173
|
+
|
174
|
+
|
175
|
+
void llhttp_pause(llhttp_t* parser) {
|
176
|
+
if (parser->error != HPE_OK) {
|
177
|
+
return;
|
178
|
+
}
|
179
|
+
|
180
|
+
parser->error = HPE_PAUSED;
|
181
|
+
parser->reason = "Paused";
|
182
|
+
}
|
183
|
+
|
184
|
+
|
185
|
+
void llhttp_resume(llhttp_t* parser) {
|
186
|
+
if (parser->error != HPE_PAUSED) {
|
187
|
+
return;
|
188
|
+
}
|
189
|
+
|
190
|
+
parser->error = 0;
|
191
|
+
}
|
192
|
+
|
193
|
+
|
194
|
+
void llhttp_resume_after_upgrade(llhttp_t* parser) {
|
195
|
+
if (parser->error != HPE_PAUSED_UPGRADE) {
|
196
|
+
return;
|
197
|
+
}
|
198
|
+
|
199
|
+
parser->error = 0;
|
200
|
+
}
|
201
|
+
|
202
|
+
|
203
|
+
llhttp_errno_t llhttp_get_errno(const llhttp_t* parser) {
|
204
|
+
return parser->error;
|
205
|
+
}
|
206
|
+
|
207
|
+
|
208
|
+
const char* llhttp_get_error_reason(const llhttp_t* parser) {
|
209
|
+
return parser->reason;
|
210
|
+
}
|
211
|
+
|
212
|
+
|
213
|
+
void llhttp_set_error_reason(llhttp_t* parser, const char* reason) {
|
214
|
+
parser->reason = reason;
|
215
|
+
}
|
216
|
+
|
217
|
+
|
218
|
+
const char* llhttp_get_error_pos(const llhttp_t* parser) {
|
219
|
+
return parser->error_pos;
|
220
|
+
}
|
221
|
+
|
222
|
+
|
223
|
+
const char* llhttp_errno_name(llhttp_errno_t err) {
|
224
|
+
#define HTTP_ERRNO_GEN(CODE, NAME, _) case HPE_##NAME: return "HPE_" #NAME;
|
225
|
+
switch (err) {
|
226
|
+
HTTP_ERRNO_MAP(HTTP_ERRNO_GEN)
|
227
|
+
default: abort();
|
228
|
+
}
|
229
|
+
#undef HTTP_ERRNO_GEN
|
230
|
+
}
|
231
|
+
|
232
|
+
|
233
|
+
const char* llhttp_method_name(llhttp_method_t method) {
|
234
|
+
#define HTTP_METHOD_GEN(NUM, NAME, STRING) case HTTP_##NAME: return #STRING;
|
235
|
+
switch (method) {
|
236
|
+
HTTP_ALL_METHOD_MAP(HTTP_METHOD_GEN)
|
237
|
+
default: abort();
|
238
|
+
}
|
239
|
+
#undef HTTP_METHOD_GEN
|
240
|
+
}
|
241
|
+
|
242
|
+
const char* llhttp_status_name(llhttp_status_t status) {
|
243
|
+
#define HTTP_STATUS_GEN(NUM, NAME, STRING) case HTTP_STATUS_##NAME: return #STRING;
|
244
|
+
switch (status) {
|
245
|
+
HTTP_STATUS_MAP(HTTP_STATUS_GEN)
|
246
|
+
default: abort();
|
247
|
+
}
|
248
|
+
#undef HTTP_STATUS_GEN
|
249
|
+
}
|
250
|
+
|
251
|
+
|
252
|
+
void llhttp_set_lenient_headers(llhttp_t* parser, int enabled) {
|
253
|
+
if (enabled) {
|
254
|
+
parser->lenient_flags |= LENIENT_HEADERS;
|
255
|
+
} else {
|
256
|
+
parser->lenient_flags &= ~LENIENT_HEADERS;
|
257
|
+
}
|
258
|
+
}
|
259
|
+
|
260
|
+
|
261
|
+
void llhttp_set_lenient_chunked_length(llhttp_t* parser, int enabled) {
|
262
|
+
if (enabled) {
|
263
|
+
parser->lenient_flags |= LENIENT_CHUNKED_LENGTH;
|
264
|
+
} else {
|
265
|
+
parser->lenient_flags &= ~LENIENT_CHUNKED_LENGTH;
|
266
|
+
}
|
267
|
+
}
|
268
|
+
|
269
|
+
|
270
|
+
void llhttp_set_lenient_keep_alive(llhttp_t* parser, int enabled) {
|
271
|
+
if (enabled) {
|
272
|
+
parser->lenient_flags |= LENIENT_KEEP_ALIVE;
|
273
|
+
} else {
|
274
|
+
parser->lenient_flags &= ~LENIENT_KEEP_ALIVE;
|
275
|
+
}
|
276
|
+
}
|
277
|
+
|
278
|
+
void llhttp_set_lenient_transfer_encoding(llhttp_t* parser, int enabled) {
|
279
|
+
if (enabled) {
|
280
|
+
parser->lenient_flags |= LENIENT_TRANSFER_ENCODING;
|
281
|
+
} else {
|
282
|
+
parser->lenient_flags &= ~LENIENT_TRANSFER_ENCODING;
|
283
|
+
}
|
284
|
+
}
|
285
|
+
|
286
|
+
void llhttp_set_lenient_version(llhttp_t* parser, int enabled) {
|
287
|
+
if (enabled) {
|
288
|
+
parser->lenient_flags |= LENIENT_VERSION;
|
289
|
+
} else {
|
290
|
+
parser->lenient_flags &= ~LENIENT_VERSION;
|
291
|
+
}
|
292
|
+
}
|
293
|
+
|
294
|
+
void llhttp_set_lenient_data_after_close(llhttp_t* parser, int enabled) {
|
295
|
+
if (enabled) {
|
296
|
+
parser->lenient_flags |= LENIENT_DATA_AFTER_CLOSE;
|
297
|
+
} else {
|
298
|
+
parser->lenient_flags &= ~LENIENT_DATA_AFTER_CLOSE;
|
299
|
+
}
|
300
|
+
}
|
301
|
+
|
302
|
+
void llhttp_set_lenient_optional_lf_after_cr(llhttp_t* parser, int enabled) {
|
303
|
+
if (enabled) {
|
304
|
+
parser->lenient_flags |= LENIENT_OPTIONAL_LF_AFTER_CR;
|
305
|
+
} else {
|
306
|
+
parser->lenient_flags &= ~LENIENT_OPTIONAL_LF_AFTER_CR;
|
307
|
+
}
|
308
|
+
}
|
309
|
+
|
310
|
+
void llhttp_set_lenient_optional_crlf_after_chunk(llhttp_t* parser, int enabled) {
|
311
|
+
if (enabled) {
|
312
|
+
parser->lenient_flags |= LENIENT_OPTIONAL_CRLF_AFTER_CHUNK;
|
313
|
+
} else {
|
314
|
+
parser->lenient_flags &= ~LENIENT_OPTIONAL_CRLF_AFTER_CHUNK;
|
315
|
+
}
|
316
|
+
}
|
317
|
+
|
318
|
+
void llhttp_set_lenient_optional_cr_before_lf(llhttp_t* parser, int enabled) {
|
319
|
+
if (enabled) {
|
320
|
+
parser->lenient_flags |= LENIENT_OPTIONAL_CR_BEFORE_LF;
|
321
|
+
} else {
|
322
|
+
parser->lenient_flags &= ~LENIENT_OPTIONAL_CR_BEFORE_LF;
|
323
|
+
}
|
324
|
+
}
|
325
|
+
|
326
|
+
void llhttp_set_lenient_spaces_after_chunk_size(llhttp_t* parser, int enabled) {
|
327
|
+
if (enabled) {
|
328
|
+
parser->lenient_flags |= LENIENT_SPACES_AFTER_CHUNK_SIZE;
|
329
|
+
} else {
|
330
|
+
parser->lenient_flags &= ~LENIENT_SPACES_AFTER_CHUNK_SIZE;
|
331
|
+
}
|
332
|
+
}
|
333
|
+
|
334
|
+
/* Callbacks */
|
335
|
+
|
336
|
+
|
337
|
+
int llhttp__on_message_begin(llhttp_t* s, const char* p, const char* endp) {
|
338
|
+
int err;
|
339
|
+
CALLBACK_MAYBE(s, on_message_begin);
|
340
|
+
return err;
|
341
|
+
}
|
342
|
+
|
343
|
+
|
344
|
+
int llhttp__on_url(llhttp_t* s, const char* p, const char* endp) {
|
345
|
+
int err;
|
346
|
+
SPAN_CALLBACK_MAYBE(s, on_url, p, endp - p);
|
347
|
+
return err;
|
348
|
+
}
|
349
|
+
|
350
|
+
|
351
|
+
int llhttp__on_url_complete(llhttp_t* s, const char* p, const char* endp) {
|
352
|
+
int err;
|
353
|
+
CALLBACK_MAYBE(s, on_url_complete);
|
354
|
+
return err;
|
355
|
+
}
|
356
|
+
|
357
|
+
|
358
|
+
int llhttp__on_status(llhttp_t* s, const char* p, const char* endp) {
|
359
|
+
int err;
|
360
|
+
SPAN_CALLBACK_MAYBE(s, on_status, p, endp - p);
|
361
|
+
return err;
|
362
|
+
}
|
363
|
+
|
364
|
+
|
365
|
+
int llhttp__on_status_complete(llhttp_t* s, const char* p, const char* endp) {
|
366
|
+
int err;
|
367
|
+
CALLBACK_MAYBE(s, on_status_complete);
|
368
|
+
return err;
|
369
|
+
}
|
370
|
+
|
371
|
+
|
372
|
+
int llhttp__on_method(llhttp_t* s, const char* p, const char* endp) {
|
373
|
+
int err;
|
374
|
+
SPAN_CALLBACK_MAYBE(s, on_method, p, endp - p);
|
375
|
+
return err;
|
376
|
+
}
|
377
|
+
|
378
|
+
|
379
|
+
int llhttp__on_method_complete(llhttp_t* s, const char* p, const char* endp) {
|
380
|
+
int err;
|
381
|
+
CALLBACK_MAYBE(s, on_method_complete);
|
382
|
+
return err;
|
383
|
+
}
|
384
|
+
|
385
|
+
|
386
|
+
int llhttp__on_version(llhttp_t* s, const char* p, const char* endp) {
|
387
|
+
int err;
|
388
|
+
SPAN_CALLBACK_MAYBE(s, on_version, p, endp - p);
|
389
|
+
return err;
|
390
|
+
}
|
391
|
+
|
392
|
+
|
393
|
+
int llhttp__on_version_complete(llhttp_t* s, const char* p, const char* endp) {
|
394
|
+
int err;
|
395
|
+
CALLBACK_MAYBE(s, on_version_complete);
|
396
|
+
return err;
|
397
|
+
}
|
398
|
+
|
399
|
+
|
400
|
+
int llhttp__on_header_field(llhttp_t* s, const char* p, const char* endp) {
|
401
|
+
int err;
|
402
|
+
SPAN_CALLBACK_MAYBE(s, on_header_field, p, endp - p);
|
403
|
+
return err;
|
404
|
+
}
|
405
|
+
|
406
|
+
|
407
|
+
int llhttp__on_header_field_complete(llhttp_t* s, const char* p, const char* endp) {
|
408
|
+
int err;
|
409
|
+
CALLBACK_MAYBE(s, on_header_field_complete);
|
410
|
+
return err;
|
411
|
+
}
|
412
|
+
|
413
|
+
|
414
|
+
int llhttp__on_header_value(llhttp_t* s, const char* p, const char* endp) {
|
415
|
+
int err;
|
416
|
+
SPAN_CALLBACK_MAYBE(s, on_header_value, p, endp - p);
|
417
|
+
return err;
|
418
|
+
}
|
419
|
+
|
420
|
+
|
421
|
+
int llhttp__on_header_value_complete(llhttp_t* s, const char* p, const char* endp) {
|
422
|
+
int err;
|
423
|
+
CALLBACK_MAYBE(s, on_header_value_complete);
|
424
|
+
return err;
|
425
|
+
}
|
426
|
+
|
427
|
+
|
428
|
+
int llhttp__on_headers_complete(llhttp_t* s, const char* p, const char* endp) {
|
429
|
+
int err;
|
430
|
+
CALLBACK_MAYBE(s, on_headers_complete);
|
431
|
+
return err;
|
432
|
+
}
|
433
|
+
|
434
|
+
|
435
|
+
int llhttp__on_message_complete(llhttp_t* s, const char* p, const char* endp) {
|
436
|
+
int err;
|
437
|
+
CALLBACK_MAYBE(s, on_message_complete);
|
438
|
+
return err;
|
439
|
+
}
|
440
|
+
|
441
|
+
|
442
|
+
int llhttp__on_body(llhttp_t* s, const char* p, const char* endp) {
|
443
|
+
int err;
|
444
|
+
SPAN_CALLBACK_MAYBE(s, on_body, p, endp - p);
|
445
|
+
return err;
|
446
|
+
}
|
447
|
+
|
448
|
+
|
449
|
+
int llhttp__on_chunk_header(llhttp_t* s, const char* p, const char* endp) {
|
450
|
+
int err;
|
451
|
+
CALLBACK_MAYBE(s, on_chunk_header);
|
452
|
+
return err;
|
453
|
+
}
|
454
|
+
|
455
|
+
|
456
|
+
int llhttp__on_chunk_extension_name(llhttp_t* s, const char* p, const char* endp) {
|
457
|
+
int err;
|
458
|
+
SPAN_CALLBACK_MAYBE(s, on_chunk_extension_name, p, endp - p);
|
459
|
+
return err;
|
460
|
+
}
|
461
|
+
|
462
|
+
|
463
|
+
int llhttp__on_chunk_extension_name_complete(llhttp_t* s, const char* p, const char* endp) {
|
464
|
+
int err;
|
465
|
+
CALLBACK_MAYBE(s, on_chunk_extension_name_complete);
|
466
|
+
return err;
|
467
|
+
}
|
468
|
+
|
469
|
+
|
470
|
+
int llhttp__on_chunk_extension_value(llhttp_t* s, const char* p, const char* endp) {
|
471
|
+
int err;
|
472
|
+
SPAN_CALLBACK_MAYBE(s, on_chunk_extension_value, p, endp - p);
|
473
|
+
return err;
|
474
|
+
}
|
475
|
+
|
476
|
+
|
477
|
+
int llhttp__on_chunk_extension_value_complete(llhttp_t* s, const char* p, const char* endp) {
|
478
|
+
int err;
|
479
|
+
CALLBACK_MAYBE(s, on_chunk_extension_value_complete);
|
480
|
+
return err;
|
481
|
+
}
|
482
|
+
|
483
|
+
|
484
|
+
int llhttp__on_chunk_complete(llhttp_t* s, const char* p, const char* endp) {
|
485
|
+
int err;
|
486
|
+
CALLBACK_MAYBE(s, on_chunk_complete);
|
487
|
+
return err;
|
488
|
+
}
|
489
|
+
|
490
|
+
|
491
|
+
int llhttp__on_reset(llhttp_t* s, const char* p, const char* endp) {
|
492
|
+
int err;
|
493
|
+
CALLBACK_MAYBE(s, on_reset);
|
494
|
+
return err;
|
495
|
+
}
|
496
|
+
|
497
|
+
|
498
|
+
/* Private */
|
499
|
+
|
500
|
+
|
501
|
+
void llhttp__debug(llhttp_t* s, const char* p, const char* endp,
|
502
|
+
const char* msg) {
|
503
|
+
if (p == endp) {
|
504
|
+
fprintf(stderr, "p=%p type=%d flags=%02x next=null debug=%s\n", s, s->type,
|
505
|
+
s->flags, msg);
|
506
|
+
} else {
|
507
|
+
fprintf(stderr, "p=%p type=%d flags=%02x next=%02x debug=%s\n", s,
|
508
|
+
s->type, s->flags, *p, msg);
|
509
|
+
}
|
510
|
+
}
|
@@ -0,0 +1,170 @@
|
|
1
|
+
#include <stdio.h>
|
2
|
+
#ifndef LLHTTP__TEST
|
3
|
+
# include "llhttp.h"
|
4
|
+
#else
|
5
|
+
# define llhttp_t llparse_t
|
6
|
+
#endif /* */
|
7
|
+
|
8
|
+
int llhttp_message_needs_eof(const llhttp_t* parser);
|
9
|
+
int llhttp_should_keep_alive(const llhttp_t* parser);
|
10
|
+
|
11
|
+
int llhttp__before_headers_complete(llhttp_t* parser, const char* p,
|
12
|
+
const char* endp) {
|
13
|
+
/* Set this here so that on_headers_complete() callbacks can see it */
|
14
|
+
if ((parser->flags & F_UPGRADE) &&
|
15
|
+
(parser->flags & F_CONNECTION_UPGRADE)) {
|
16
|
+
/* For responses, "Upgrade: foo" and "Connection: upgrade" are
|
17
|
+
* mandatory only when it is a 101 Switching Protocols response,
|
18
|
+
* otherwise it is purely informational, to announce support.
|
19
|
+
*/
|
20
|
+
parser->upgrade =
|
21
|
+
(parser->type == HTTP_REQUEST || parser->status_code == 101);
|
22
|
+
} else {
|
23
|
+
parser->upgrade = (parser->method == HTTP_CONNECT);
|
24
|
+
}
|
25
|
+
return 0;
|
26
|
+
}
|
27
|
+
|
28
|
+
|
29
|
+
/* Return values:
|
30
|
+
* 0 - No body, `restart`, message_complete
|
31
|
+
* 1 - CONNECT request, `restart`, message_complete, and pause
|
32
|
+
* 2 - chunk_size_start
|
33
|
+
* 3 - body_identity
|
34
|
+
* 4 - body_identity_eof
|
35
|
+
* 5 - invalid transfer-encoding for request
|
36
|
+
*/
|
37
|
+
int llhttp__after_headers_complete(llhttp_t* parser, const char* p,
|
38
|
+
const char* endp) {
|
39
|
+
int hasBody;
|
40
|
+
|
41
|
+
hasBody = parser->flags & F_CHUNKED || parser->content_length > 0;
|
42
|
+
if (
|
43
|
+
(parser->upgrade && (parser->method == HTTP_CONNECT ||
|
44
|
+
(parser->flags & F_SKIPBODY) || !hasBody)) ||
|
45
|
+
/* See RFC 2616 section 4.4 - 1xx e.g. Continue */
|
46
|
+
(parser->type == HTTP_RESPONSE && parser->status_code == 101)
|
47
|
+
) {
|
48
|
+
/* Exit, the rest of the message is in a different protocol. */
|
49
|
+
return 1;
|
50
|
+
}
|
51
|
+
|
52
|
+
if (parser->type == HTTP_RESPONSE && parser->status_code == 100) {
|
53
|
+
/* No body, restart as the message is complete */
|
54
|
+
return 0;
|
55
|
+
}
|
56
|
+
|
57
|
+
/* See RFC 2616 section 4.4 */
|
58
|
+
if (
|
59
|
+
parser->flags & F_SKIPBODY || /* response to a HEAD request */
|
60
|
+
(
|
61
|
+
parser->type == HTTP_RESPONSE && (
|
62
|
+
parser->status_code == 102 || /* Processing */
|
63
|
+
parser->status_code == 103 || /* Early Hints */
|
64
|
+
parser->status_code == 204 || /* No Content */
|
65
|
+
parser->status_code == 304 /* Not Modified */
|
66
|
+
)
|
67
|
+
)
|
68
|
+
) {
|
69
|
+
return 0;
|
70
|
+
} else if (parser->flags & F_CHUNKED) {
|
71
|
+
/* chunked encoding - ignore Content-Length header, prepare for a chunk */
|
72
|
+
return 2;
|
73
|
+
} else if (parser->flags & F_TRANSFER_ENCODING) {
|
74
|
+
if (parser->type == HTTP_REQUEST &&
|
75
|
+
(parser->lenient_flags & LENIENT_CHUNKED_LENGTH) == 0 &&
|
76
|
+
(parser->lenient_flags & LENIENT_TRANSFER_ENCODING) == 0) {
|
77
|
+
/* RFC 7230 3.3.3 */
|
78
|
+
|
79
|
+
/* If a Transfer-Encoding header field
|
80
|
+
* is present in a request and the chunked transfer coding is not
|
81
|
+
* the final encoding, the message body length cannot be determined
|
82
|
+
* reliably; the server MUST respond with the 400 (Bad Request)
|
83
|
+
* status code and then close the connection.
|
84
|
+
*/
|
85
|
+
return 5;
|
86
|
+
} else {
|
87
|
+
/* RFC 7230 3.3.3 */
|
88
|
+
|
89
|
+
/* If a Transfer-Encoding header field is present in a response and
|
90
|
+
* the chunked transfer coding is not the final encoding, the
|
91
|
+
* message body length is determined by reading the connection until
|
92
|
+
* it is closed by the server.
|
93
|
+
*/
|
94
|
+
return 4;
|
95
|
+
}
|
96
|
+
} else {
|
97
|
+
if (!(parser->flags & F_CONTENT_LENGTH)) {
|
98
|
+
if (!llhttp_message_needs_eof(parser)) {
|
99
|
+
/* Assume content-length 0 - read the next */
|
100
|
+
return 0;
|
101
|
+
} else {
|
102
|
+
/* Read body until EOF */
|
103
|
+
return 4;
|
104
|
+
}
|
105
|
+
} else if (parser->content_length == 0) {
|
106
|
+
/* Content-Length header given but zero: Content-Length: 0\r\n */
|
107
|
+
return 0;
|
108
|
+
} else {
|
109
|
+
/* Content-Length header given and non-zero */
|
110
|
+
return 3;
|
111
|
+
}
|
112
|
+
}
|
113
|
+
}
|
114
|
+
|
115
|
+
|
116
|
+
int llhttp__after_message_complete(llhttp_t* parser, const char* p,
|
117
|
+
const char* endp) {
|
118
|
+
int should_keep_alive;
|
119
|
+
|
120
|
+
should_keep_alive = llhttp_should_keep_alive(parser);
|
121
|
+
parser->finish = HTTP_FINISH_SAFE;
|
122
|
+
parser->flags = 0;
|
123
|
+
|
124
|
+
/* NOTE: this is ignored in loose parsing mode */
|
125
|
+
return should_keep_alive;
|
126
|
+
}
|
127
|
+
|
128
|
+
|
129
|
+
int llhttp_message_needs_eof(const llhttp_t* parser) {
|
130
|
+
if (parser->type == HTTP_REQUEST) {
|
131
|
+
return 0;
|
132
|
+
}
|
133
|
+
|
134
|
+
/* See RFC 2616 section 4.4 */
|
135
|
+
if (parser->status_code / 100 == 1 || /* 1xx e.g. Continue */
|
136
|
+
parser->status_code == 204 || /* No Content */
|
137
|
+
parser->status_code == 304 || /* Not Modified */
|
138
|
+
(parser->flags & F_SKIPBODY)) { /* response to a HEAD request */
|
139
|
+
return 0;
|
140
|
+
}
|
141
|
+
|
142
|
+
/* RFC 7230 3.3.3, see `llhttp__after_headers_complete` */
|
143
|
+
if ((parser->flags & F_TRANSFER_ENCODING) &&
|
144
|
+
(parser->flags & F_CHUNKED) == 0) {
|
145
|
+
return 1;
|
146
|
+
}
|
147
|
+
|
148
|
+
if (parser->flags & (F_CHUNKED | F_CONTENT_LENGTH)) {
|
149
|
+
return 0;
|
150
|
+
}
|
151
|
+
|
152
|
+
return 1;
|
153
|
+
}
|
154
|
+
|
155
|
+
|
156
|
+
int llhttp_should_keep_alive(const llhttp_t* parser) {
|
157
|
+
if (parser->http_major > 0 && parser->http_minor > 0) {
|
158
|
+
/* HTTP/1.1 */
|
159
|
+
if (parser->flags & F_CONNECTION_CLOSE) {
|
160
|
+
return 0;
|
161
|
+
}
|
162
|
+
} else {
|
163
|
+
/* HTTP/1.0 or earlier */
|
164
|
+
if (!(parser->flags & F_CONNECTION_KEEP_ALIVE)) {
|
165
|
+
return 0;
|
166
|
+
}
|
167
|
+
}
|
168
|
+
|
169
|
+
return !llhttp_message_needs_eof(parser);
|
170
|
+
}
|