From 4af1a7d61d2ba6efcba4ce464d813d8bd80de8a3 Mon Sep 17 00:00:00 2001 From: Aman Menda Date: Fri, 3 May 2024 20:59:19 +0100 Subject: [PATCH] fix: project tree --- Stuckfish.vcxproj | 92 +- include/App/Logic.hpp | 46 + include/App/Stuckfish.hpp | 96 + include/UI/GamesPlayedPage.hpp | 32 + include/UI/Page.hpp | 97 + include/UI/UserInfosPage.hpp | 29 + include/UI/fonts.hpp | 23 + packages/libcpr.1.10.5/.signature.p7s | Bin 0 -> 11509 bytes packages/libcpr.1.10.5/README.md | 173 + .../build/native/Win32/Debug/bin/curl-config | 196 + .../Win32/Debug/include/cpr/accept_encoding.h | 41 + .../native/Win32/Debug/include/cpr/api.h | 392 + .../native/Win32/Debug/include/cpr/async.h | 50 + .../Win32/Debug/include/cpr/async_wrapper.h | 140 + .../native/Win32/Debug/include/cpr/auth.h | 32 + .../native/Win32/Debug/include/cpr/bearer.h | 34 + .../native/Win32/Debug/include/cpr/body.h | 54 + .../native/Win32/Debug/include/cpr/buffer.h | 33 + .../native/Win32/Debug/include/cpr/callback.h | 111 + .../Win32/Debug/include/cpr/cert_info.h | 35 + .../Win32/Debug/include/cpr/connect_timeout.h | 18 + .../native/Win32/Debug/include/cpr/cookies.h | 92 + .../native/Win32/Debug/include/cpr/cpr.h | 46 + .../native/Win32/Debug/include/cpr/cprtypes.h | 144 + .../native/Win32/Debug/include/cpr/cprver.h | 30 + .../Win32/Debug/include/cpr/curl_container.h | 51 + .../Win32/Debug/include/cpr/curlholder.h | 54 + .../Win32/Debug/include/cpr/curlmultiholder.h | 18 + .../native/Win32/Debug/include/cpr/error.h | 53 + .../native/Win32/Debug/include/cpr/file.h | 59 + .../Win32/Debug/include/cpr/filesystem.h | 26 + .../Win32/Debug/include/cpr/http_version.h | 67 + .../Win32/Debug/include/cpr/interceptor.h | 74 + .../Win32/Debug/include/cpr/interface.h | 32 + .../Win32/Debug/include/cpr/limit_rate.h | 18 + .../Win32/Debug/include/cpr/local_port.h | 23 + .../Debug/include/cpr/local_port_range.h | 23 + .../Win32/Debug/include/cpr/low_speed.h | 18 + .../Win32/Debug/include/cpr/multipart.h | 43 + .../Win32/Debug/include/cpr/multiperform.h | 137 + .../Win32/Debug/include/cpr/parameters.h | 18 + .../native/Win32/Debug/include/cpr/payload.h | 23 + .../native/Win32/Debug/include/cpr/proxies.h | 23 + .../Win32/Debug/include/cpr/proxyauth.h | 43 + .../native/Win32/Debug/include/cpr/range.h | 44 + .../native/Win32/Debug/include/cpr/redirect.h | 84 + .../Win32/Debug/include/cpr/reserve_size.h | 17 + .../native/Win32/Debug/include/cpr/resolve.h | 23 + .../native/Win32/Debug/include/cpr/response.h | 58 + .../native/Win32/Debug/include/cpr/session.h | 308 + .../Win32/Debug/include/cpr/singleton.h | 47 + .../native/Win32/Debug/include/cpr/ssl_ctx.h | 26 + .../Win32/Debug/include/cpr/ssl_options.h | 622 + .../Win32/Debug/include/cpr/status_codes.h | 100 + .../Win32/Debug/include/cpr/threadpool.h | 122 + .../native/Win32/Debug/include/cpr/timeout.h | 27 + .../Win32/Debug/include/cpr/unix_socket.h | 21 + .../Win32/Debug/include/cpr/user_agent.h | 31 + .../native/Win32/Debug/include/cpr/util.h | 45 + .../native/Win32/Debug/include/cpr/verbose.h | 18 + .../native/Win32/Debug/include/curl/curl.h | 3241 ++ .../native/Win32/Debug/include/curl/curlver.h | 79 + .../native/Win32/Debug/include/curl/easy.h | 125 + .../native/Win32/Debug/include/curl/header.h | 74 + .../native/Win32/Debug/include/curl/mprintf.h | 70 + .../native/Win32/Debug/include/curl/multi.h | 471 + .../native/Win32/Debug/include/curl/options.h | 70 + .../Win32/Debug/include/curl/stdcheaders.h | 35 + .../native/Win32/Debug/include/curl/system.h | 521 + .../Win32/Debug/include/curl/typecheck-gcc.h | 717 + .../native/Win32/Debug/include/curl/urlapi.h | 150 + .../Win32/Debug/include/curl/websockets.h | 84 + .../Debug/lib/cmake/CURL/CURLConfig.cmake | 62 + .../lib/cmake/CURL/CURLConfigVersion.cmake | 70 + .../lib/cmake/CURL/CURLTargets-debug.cmake | 19 + .../lib/cmake/CURL/CURLTargets-release.cmake | 19 + .../Debug/lib/cmake/CURL/CURLTargets.cmake | 102 + .../Win32/Debug/lib/pkgconfig/libcurl.pc | 41 + .../native/Win32/Release/bin/curl-config | 196 + .../Release/include/cpr/accept_encoding.h | 41 + .../native/Win32/Release/include/cpr/api.h | 392 + .../native/Win32/Release/include/cpr/async.h | 50 + .../Win32/Release/include/cpr/async_wrapper.h | 140 + .../native/Win32/Release/include/cpr/auth.h | 32 + .../native/Win32/Release/include/cpr/bearer.h | 34 + .../native/Win32/Release/include/cpr/body.h | 54 + .../native/Win32/Release/include/cpr/buffer.h | 33 + .../Win32/Release/include/cpr/callback.h | 111 + .../Win32/Release/include/cpr/cert_info.h | 35 + .../Release/include/cpr/connect_timeout.h | 18 + .../Win32/Release/include/cpr/cookies.h | 92 + .../native/Win32/Release/include/cpr/cpr.h | 46 + .../Win32/Release/include/cpr/cprtypes.h | 144 + .../native/Win32/Release/include/cpr/cprver.h | 30 + .../Release/include/cpr/curl_container.h | 51 + .../Win32/Release/include/cpr/curlholder.h | 54 + .../Release/include/cpr/curlmultiholder.h | 18 + .../native/Win32/Release/include/cpr/error.h | 53 + .../native/Win32/Release/include/cpr/file.h | 59 + .../Win32/Release/include/cpr/filesystem.h | 26 + .../Win32/Release/include/cpr/http_version.h | 67 + .../Win32/Release/include/cpr/interceptor.h | 74 + .../Win32/Release/include/cpr/interface.h | 32 + .../Win32/Release/include/cpr/limit_rate.h | 18 + .../Win32/Release/include/cpr/local_port.h | 23 + .../Release/include/cpr/local_port_range.h | 23 + .../Win32/Release/include/cpr/low_speed.h | 18 + .../Win32/Release/include/cpr/multipart.h | 43 + .../Win32/Release/include/cpr/multiperform.h | 137 + .../Win32/Release/include/cpr/parameters.h | 18 + .../Win32/Release/include/cpr/payload.h | 23 + .../Win32/Release/include/cpr/proxies.h | 23 + .../Win32/Release/include/cpr/proxyauth.h | 43 + .../native/Win32/Release/include/cpr/range.h | 44 + .../Win32/Release/include/cpr/redirect.h | 84 + .../Win32/Release/include/cpr/reserve_size.h | 17 + .../Win32/Release/include/cpr/resolve.h | 23 + .../Win32/Release/include/cpr/response.h | 58 + .../Win32/Release/include/cpr/session.h | 308 + .../Win32/Release/include/cpr/singleton.h | 47 + .../Win32/Release/include/cpr/ssl_ctx.h | 26 + .../Win32/Release/include/cpr/ssl_options.h | 622 + .../Win32/Release/include/cpr/status_codes.h | 100 + .../Win32/Release/include/cpr/threadpool.h | 122 + .../Win32/Release/include/cpr/timeout.h | 27 + .../Win32/Release/include/cpr/unix_socket.h | 21 + .../Win32/Release/include/cpr/user_agent.h | 31 + .../native/Win32/Release/include/cpr/util.h | 45 + .../Win32/Release/include/cpr/verbose.h | 18 + .../native/Win32/Release/include/curl/curl.h | 3241 ++ .../Win32/Release/include/curl/curlver.h | 79 + .../native/Win32/Release/include/curl/easy.h | 125 + .../Win32/Release/include/curl/header.h | 74 + .../Win32/Release/include/curl/mprintf.h | 70 + .../native/Win32/Release/include/curl/multi.h | 471 + .../Win32/Release/include/curl/options.h | 70 + .../Win32/Release/include/curl/stdcheaders.h | 35 + .../Win32/Release/include/curl/system.h | 521 + .../Release/include/curl/typecheck-gcc.h | 717 + .../Win32/Release/include/curl/urlapi.h | 150 + .../Win32/Release/include/curl/websockets.h | 84 + .../Release/lib/cmake/CURL/CURLConfig.cmake | 62 + .../lib/cmake/CURL/CURLConfigVersion.cmake | 70 + .../lib/cmake/CURL/CURLTargets-release.cmake | 19 + .../Release/lib/cmake/CURL/CURLTargets.cmake | 102 + .../Win32/Release/lib/pkgconfig/libcurl.pc | 41 + .../libcpr.1.10.5/build/native/libcpr.props | 26 + .../libcpr.1.10.5/build/native/libcpr.targets | 11 + .../build/native/x64/Debug/bin/curl-config | 196 + .../x64/Debug/include/cpr/accept_encoding.h | 41 + .../build/native/x64/Debug/include/cpr/api.h | 392 + .../native/x64/Debug/include/cpr/async.h | 50 + .../x64/Debug/include/cpr/async_wrapper.h | 140 + .../build/native/x64/Debug/include/cpr/auth.h | 32 + .../native/x64/Debug/include/cpr/bearer.h | 34 + .../build/native/x64/Debug/include/cpr/body.h | 54 + .../native/x64/Debug/include/cpr/buffer.h | 33 + .../native/x64/Debug/include/cpr/callback.h | 111 + .../native/x64/Debug/include/cpr/cert_info.h | 35 + .../x64/Debug/include/cpr/connect_timeout.h | 18 + .../native/x64/Debug/include/cpr/cookies.h | 92 + .../build/native/x64/Debug/include/cpr/cpr.h | 46 + .../native/x64/Debug/include/cpr/cprtypes.h | 144 + .../native/x64/Debug/include/cpr/cprver.h | 30 + .../x64/Debug/include/cpr/curl_container.h | 51 + .../native/x64/Debug/include/cpr/curlholder.h | 54 + .../x64/Debug/include/cpr/curlmultiholder.h | 18 + .../native/x64/Debug/include/cpr/error.h | 53 + .../build/native/x64/Debug/include/cpr/file.h | 59 + .../native/x64/Debug/include/cpr/filesystem.h | 26 + .../x64/Debug/include/cpr/http_version.h | 67 + .../x64/Debug/include/cpr/interceptor.h | 74 + .../native/x64/Debug/include/cpr/interface.h | 32 + .../native/x64/Debug/include/cpr/limit_rate.h | 18 + .../native/x64/Debug/include/cpr/local_port.h | 23 + .../x64/Debug/include/cpr/local_port_range.h | 23 + .../native/x64/Debug/include/cpr/low_speed.h | 18 + .../native/x64/Debug/include/cpr/multipart.h | 43 + .../x64/Debug/include/cpr/multiperform.h | 137 + .../native/x64/Debug/include/cpr/parameters.h | 18 + .../native/x64/Debug/include/cpr/payload.h | 23 + .../native/x64/Debug/include/cpr/proxies.h | 23 + .../native/x64/Debug/include/cpr/proxyauth.h | 43 + .../native/x64/Debug/include/cpr/range.h | 44 + .../native/x64/Debug/include/cpr/redirect.h | 84 + .../x64/Debug/include/cpr/reserve_size.h | 17 + .../native/x64/Debug/include/cpr/resolve.h | 23 + .../native/x64/Debug/include/cpr/response.h | 58 + .../native/x64/Debug/include/cpr/session.h | 308 + .../native/x64/Debug/include/cpr/singleton.h | 47 + .../native/x64/Debug/include/cpr/ssl_ctx.h | 26 + .../x64/Debug/include/cpr/ssl_options.h | 622 + .../x64/Debug/include/cpr/status_codes.h | 100 + .../native/x64/Debug/include/cpr/threadpool.h | 122 + .../native/x64/Debug/include/cpr/timeout.h | 27 + .../x64/Debug/include/cpr/unix_socket.h | 21 + .../native/x64/Debug/include/cpr/user_agent.h | 31 + .../build/native/x64/Debug/include/cpr/util.h | 45 + .../native/x64/Debug/include/cpr/verbose.h | 18 + .../native/x64/Debug/include/curl/curl.h | 3241 ++ .../native/x64/Debug/include/curl/curlver.h | 79 + .../native/x64/Debug/include/curl/easy.h | 125 + .../native/x64/Debug/include/curl/header.h | 74 + .../native/x64/Debug/include/curl/mprintf.h | 70 + .../native/x64/Debug/include/curl/multi.h | 471 + .../native/x64/Debug/include/curl/options.h | 70 + .../x64/Debug/include/curl/stdcheaders.h | 35 + .../native/x64/Debug/include/curl/system.h | 521 + .../x64/Debug/include/curl/typecheck-gcc.h | 717 + .../native/x64/Debug/include/curl/urlapi.h | 150 + .../x64/Debug/include/curl/websockets.h | 84 + .../x64/Debug/lib/cmake/CURL/CURLConfig.cmake | 62 + .../lib/cmake/CURL/CURLConfigVersion.cmake | 70 + .../lib/cmake/CURL/CURLTargets-debug.cmake | 19 + .../lib/cmake/CURL/CURLTargets-release.cmake | 19 + .../Debug/lib/cmake/CURL/CURLTargets.cmake | 102 + .../native/x64/Debug/lib/pkgconfig/libcurl.pc | 41 + .../build/native/x64/Release/bin/curl-config | 196 + .../x64/Release/include/cpr/accept_encoding.h | 41 + .../native/x64/Release/include/cpr/api.h | 392 + .../native/x64/Release/include/cpr/async.h | 50 + .../x64/Release/include/cpr/async_wrapper.h | 140 + .../native/x64/Release/include/cpr/auth.h | 32 + .../native/x64/Release/include/cpr/bearer.h | 34 + .../native/x64/Release/include/cpr/body.h | 54 + .../native/x64/Release/include/cpr/buffer.h | 33 + .../native/x64/Release/include/cpr/callback.h | 111 + .../x64/Release/include/cpr/cert_info.h | 35 + .../x64/Release/include/cpr/connect_timeout.h | 18 + .../native/x64/Release/include/cpr/cookies.h | 92 + .../native/x64/Release/include/cpr/cpr.h | 46 + .../native/x64/Release/include/cpr/cprtypes.h | 144 + .../native/x64/Release/include/cpr/cprver.h | 30 + .../x64/Release/include/cpr/curl_container.h | 51 + .../x64/Release/include/cpr/curlholder.h | 54 + .../x64/Release/include/cpr/curlmultiholder.h | 18 + .../native/x64/Release/include/cpr/error.h | 53 + .../native/x64/Release/include/cpr/file.h | 59 + .../x64/Release/include/cpr/filesystem.h | 26 + .../x64/Release/include/cpr/http_version.h | 67 + .../x64/Release/include/cpr/interceptor.h | 74 + .../x64/Release/include/cpr/interface.h | 32 + .../x64/Release/include/cpr/limit_rate.h | 18 + .../x64/Release/include/cpr/local_port.h | 23 + .../Release/include/cpr/local_port_range.h | 23 + .../x64/Release/include/cpr/low_speed.h | 18 + .../x64/Release/include/cpr/multipart.h | 43 + .../x64/Release/include/cpr/multiperform.h | 137 + .../x64/Release/include/cpr/parameters.h | 18 + .../native/x64/Release/include/cpr/payload.h | 23 + .../native/x64/Release/include/cpr/proxies.h | 23 + .../x64/Release/include/cpr/proxyauth.h | 43 + .../native/x64/Release/include/cpr/range.h | 44 + .../native/x64/Release/include/cpr/redirect.h | 84 + .../x64/Release/include/cpr/reserve_size.h | 17 + .../native/x64/Release/include/cpr/resolve.h | 23 + .../native/x64/Release/include/cpr/response.h | 58 + .../native/x64/Release/include/cpr/session.h | 308 + .../x64/Release/include/cpr/singleton.h | 47 + .../native/x64/Release/include/cpr/ssl_ctx.h | 26 + .../x64/Release/include/cpr/ssl_options.h | 622 + .../x64/Release/include/cpr/status_codes.h | 100 + .../x64/Release/include/cpr/threadpool.h | 122 + .../native/x64/Release/include/cpr/timeout.h | 27 + .../x64/Release/include/cpr/unix_socket.h | 21 + .../x64/Release/include/cpr/user_agent.h | 31 + .../native/x64/Release/include/cpr/util.h | 45 + .../native/x64/Release/include/cpr/verbose.h | 18 + .../native/x64/Release/include/curl/curl.h | 3241 ++ .../native/x64/Release/include/curl/curlver.h | 79 + .../native/x64/Release/include/curl/easy.h | 125 + .../native/x64/Release/include/curl/header.h | 74 + .../native/x64/Release/include/curl/mprintf.h | 70 + .../native/x64/Release/include/curl/multi.h | 471 + .../native/x64/Release/include/curl/options.h | 70 + .../x64/Release/include/curl/stdcheaders.h | 35 + .../native/x64/Release/include/curl/system.h | 521 + .../x64/Release/include/curl/typecheck-gcc.h | 717 + .../native/x64/Release/include/curl/urlapi.h | 150 + .../x64/Release/include/curl/websockets.h | 84 + .../Release/lib/cmake/CURL/CURLConfig.cmake | 62 + .../lib/cmake/CURL/CURLConfigVersion.cmake | 70 + .../lib/cmake/CURL/CURLTargets-debug.cmake | 19 + .../lib/cmake/CURL/CURLTargets-release.cmake | 19 + .../Release/lib/cmake/CURL/CURLTargets.cmake | 102 + .../x64/Release/lib/pkgconfig/libcurl.pc | 41 + .../build/native/x86/Debug/bin/curl-config | 196 + .../x86/Debug/include/cpr/accept_encoding.h | 41 + .../build/native/x86/Debug/include/cpr/api.h | 392 + .../native/x86/Debug/include/cpr/async.h | 50 + .../x86/Debug/include/cpr/async_wrapper.h | 140 + .../build/native/x86/Debug/include/cpr/auth.h | 32 + .../native/x86/Debug/include/cpr/bearer.h | 34 + .../build/native/x86/Debug/include/cpr/body.h | 54 + .../native/x86/Debug/include/cpr/buffer.h | 33 + .../native/x86/Debug/include/cpr/callback.h | 111 + .../native/x86/Debug/include/cpr/cert_info.h | 35 + .../x86/Debug/include/cpr/connect_timeout.h | 18 + .../native/x86/Debug/include/cpr/cookies.h | 92 + .../build/native/x86/Debug/include/cpr/cpr.h | 46 + .../native/x86/Debug/include/cpr/cprtypes.h | 144 + .../native/x86/Debug/include/cpr/cprver.h | 30 + .../x86/Debug/include/cpr/curl_container.h | 51 + .../native/x86/Debug/include/cpr/curlholder.h | 54 + .../x86/Debug/include/cpr/curlmultiholder.h | 18 + .../native/x86/Debug/include/cpr/error.h | 53 + .../build/native/x86/Debug/include/cpr/file.h | 59 + .../native/x86/Debug/include/cpr/filesystem.h | 26 + .../x86/Debug/include/cpr/http_version.h | 67 + .../x86/Debug/include/cpr/interceptor.h | 74 + .../native/x86/Debug/include/cpr/interface.h | 32 + .../native/x86/Debug/include/cpr/limit_rate.h | 18 + .../native/x86/Debug/include/cpr/local_port.h | 23 + .../x86/Debug/include/cpr/local_port_range.h | 23 + .../native/x86/Debug/include/cpr/low_speed.h | 18 + .../native/x86/Debug/include/cpr/multipart.h | 43 + .../x86/Debug/include/cpr/multiperform.h | 137 + .../native/x86/Debug/include/cpr/parameters.h | 18 + .../native/x86/Debug/include/cpr/payload.h | 23 + .../native/x86/Debug/include/cpr/proxies.h | 23 + .../native/x86/Debug/include/cpr/proxyauth.h | 43 + .../native/x86/Debug/include/cpr/range.h | 44 + .../native/x86/Debug/include/cpr/redirect.h | 84 + .../x86/Debug/include/cpr/reserve_size.h | 17 + .../native/x86/Debug/include/cpr/resolve.h | 23 + .../native/x86/Debug/include/cpr/response.h | 58 + .../native/x86/Debug/include/cpr/session.h | 308 + .../native/x86/Debug/include/cpr/singleton.h | 47 + .../native/x86/Debug/include/cpr/ssl_ctx.h | 26 + .../x86/Debug/include/cpr/ssl_options.h | 622 + .../x86/Debug/include/cpr/status_codes.h | 100 + .../native/x86/Debug/include/cpr/threadpool.h | 122 + .../native/x86/Debug/include/cpr/timeout.h | 27 + .../x86/Debug/include/cpr/unix_socket.h | 21 + .../native/x86/Debug/include/cpr/user_agent.h | 31 + .../build/native/x86/Debug/include/cpr/util.h | 45 + .../native/x86/Debug/include/cpr/verbose.h | 18 + .../native/x86/Debug/include/curl/curl.h | 3241 ++ .../native/x86/Debug/include/curl/curlver.h | 79 + .../native/x86/Debug/include/curl/easy.h | 125 + .../native/x86/Debug/include/curl/header.h | 74 + .../native/x86/Debug/include/curl/mprintf.h | 70 + .../native/x86/Debug/include/curl/multi.h | 471 + .../native/x86/Debug/include/curl/options.h | 70 + .../x86/Debug/include/curl/stdcheaders.h | 35 + .../native/x86/Debug/include/curl/system.h | 521 + .../x86/Debug/include/curl/typecheck-gcc.h | 717 + .../native/x86/Debug/include/curl/urlapi.h | 150 + .../x86/Debug/include/curl/websockets.h | 84 + .../x86/Debug/lib/cmake/CURL/CURLConfig.cmake | 62 + .../lib/cmake/CURL/CURLConfigVersion.cmake | 70 + .../lib/cmake/CURL/CURLTargets-debug.cmake | 19 + .../lib/cmake/CURL/CURLTargets-release.cmake | 19 + .../Debug/lib/cmake/CURL/CURLTargets.cmake | 102 + .../native/x86/Debug/lib/pkgconfig/libcurl.pc | 41 + .../build/native/x86/Release/bin/curl-config | 196 + .../x86/Release/include/cpr/accept_encoding.h | 41 + .../native/x86/Release/include/cpr/api.h | 392 + .../native/x86/Release/include/cpr/async.h | 50 + .../x86/Release/include/cpr/async_wrapper.h | 140 + .../native/x86/Release/include/cpr/auth.h | 32 + .../native/x86/Release/include/cpr/bearer.h | 34 + .../native/x86/Release/include/cpr/body.h | 54 + .../native/x86/Release/include/cpr/buffer.h | 33 + .../native/x86/Release/include/cpr/callback.h | 111 + .../x86/Release/include/cpr/cert_info.h | 35 + .../x86/Release/include/cpr/connect_timeout.h | 18 + .../native/x86/Release/include/cpr/cookies.h | 92 + .../native/x86/Release/include/cpr/cpr.h | 46 + .../native/x86/Release/include/cpr/cprtypes.h | 144 + .../native/x86/Release/include/cpr/cprver.h | 30 + .../x86/Release/include/cpr/curl_container.h | 51 + .../x86/Release/include/cpr/curlholder.h | 54 + .../x86/Release/include/cpr/curlmultiholder.h | 18 + .../native/x86/Release/include/cpr/error.h | 53 + .../native/x86/Release/include/cpr/file.h | 59 + .../x86/Release/include/cpr/filesystem.h | 26 + .../x86/Release/include/cpr/http_version.h | 67 + .../x86/Release/include/cpr/interceptor.h | 74 + .../x86/Release/include/cpr/interface.h | 32 + .../x86/Release/include/cpr/limit_rate.h | 18 + .../x86/Release/include/cpr/local_port.h | 23 + .../Release/include/cpr/local_port_range.h | 23 + .../x86/Release/include/cpr/low_speed.h | 18 + .../x86/Release/include/cpr/multipart.h | 43 + .../x86/Release/include/cpr/multiperform.h | 137 + .../x86/Release/include/cpr/parameters.h | 18 + .../native/x86/Release/include/cpr/payload.h | 23 + .../native/x86/Release/include/cpr/proxies.h | 23 + .../x86/Release/include/cpr/proxyauth.h | 43 + .../native/x86/Release/include/cpr/range.h | 44 + .../native/x86/Release/include/cpr/redirect.h | 84 + .../x86/Release/include/cpr/reserve_size.h | 17 + .../native/x86/Release/include/cpr/resolve.h | 23 + .../native/x86/Release/include/cpr/response.h | 58 + .../native/x86/Release/include/cpr/session.h | 308 + .../x86/Release/include/cpr/singleton.h | 47 + .../native/x86/Release/include/cpr/ssl_ctx.h | 26 + .../x86/Release/include/cpr/ssl_options.h | 622 + .../x86/Release/include/cpr/status_codes.h | 100 + .../x86/Release/include/cpr/threadpool.h | 122 + .../native/x86/Release/include/cpr/timeout.h | 27 + .../x86/Release/include/cpr/unix_socket.h | 21 + .../x86/Release/include/cpr/user_agent.h | 31 + .../native/x86/Release/include/cpr/util.h | 45 + .../native/x86/Release/include/cpr/verbose.h | 18 + .../native/x86/Release/include/curl/curl.h | 3241 ++ .../native/x86/Release/include/curl/curlver.h | 79 + .../native/x86/Release/include/curl/easy.h | 125 + .../native/x86/Release/include/curl/header.h | 74 + .../native/x86/Release/include/curl/mprintf.h | 70 + .../native/x86/Release/include/curl/multi.h | 471 + .../native/x86/Release/include/curl/options.h | 70 + .../x86/Release/include/curl/stdcheaders.h | 35 + .../native/x86/Release/include/curl/system.h | 521 + .../x86/Release/include/curl/typecheck-gcc.h | 717 + .../native/x86/Release/include/curl/urlapi.h | 150 + .../x86/Release/include/curl/websockets.h | 84 + .../Release/lib/cmake/CURL/CURLConfig.cmake | 62 + .../lib/cmake/CURL/CURLConfigVersion.cmake | 70 + .../lib/cmake/CURL/CURLTargets-release.cmake | 19 + .../Release/lib/cmake/CURL/CURLTargets.cmake | 102 + .../x86/Release/lib/pkgconfig/libcurl.pc | 41 + packages/libcpr.1.10.5/libcpr.1.10.5.nupkg | Bin 0 -> 5103200 bytes packages/libcpr.1.10.5/resources/cpr.png | Bin 0 -> 6047 bytes src/App/Logic.cpp | 138 + src/App/Stuckfish.cpp | 212 + src/Main.cpp | 16 + src/UI/Fonts.cpp | 28105 ++++++++++++++++ src/UI/GamesPlayedPage.cpp | 90 + src/UI/UserInfosPage.cpp | 102 + src/glad.cpp | 1140 + thirdparty/GLFW/glfw3.h | 6547 ++++ thirdparty/GLFW/glfw3native.h | 663 + thirdparty/KHR/khrplatform.h | 311 + thirdparty/glad/glad.h | 2129 ++ thirdparty/imgui/imconfig.h | 131 + thirdparty/imgui/imgui.cpp | 15791 +++++++++ thirdparty/imgui/imgui.h | 3326 ++ thirdparty/imgui/imgui_demo.cpp | 8567 +++++ thirdparty/imgui/imgui_draw.cpp | 4622 +++ thirdparty/imgui/imgui_impl_glfw.cpp | 854 + thirdparty/imgui/imgui_impl_glfw.h | 58 + thirdparty/imgui/imgui_impl_opengl3.cpp | 955 + thirdparty/imgui/imgui_impl_opengl3.h | 66 + thirdparty/imgui/imgui_impl_opengl3_loader.h | 816 + thirdparty/imgui/imgui_internal.h | 3586 ++ thirdparty/imgui/imgui_stdlib.cpp | 85 + thirdparty/imgui/imgui_stdlib.h | 21 + thirdparty/imgui/imgui_tables.cpp | 4397 +++ thirdparty/imgui/imgui_widgets.cpp | 8972 +++++ thirdparty/imgui/imstb_rectpack.h | 627 + thirdparty/imgui/imstb_textedit.h | 1441 + thirdparty/imgui/imstb_truetype.h | 5085 +++ thirdparty/rapidjson/allocators.h | 693 + thirdparty/rapidjson/cursorstreamwrapper.h | 78 + thirdparty/rapidjson/document.h | 3043 ++ thirdparty/rapidjson/encodedstream.h | 299 + thirdparty/rapidjson/encodings.h | 716 + thirdparty/rapidjson/error/en.h | 176 + thirdparty/rapidjson/error/error.h | 285 + thirdparty/rapidjson/filereadstream.h | 99 + thirdparty/rapidjson/filewritestream.h | 104 + thirdparty/rapidjson/fwd.h | 151 + thirdparty/rapidjson/internal/biginteger.h | 297 + thirdparty/rapidjson/internal/clzll.h | 71 + thirdparty/rapidjson/internal/diyfp.h | 261 + thirdparty/rapidjson/internal/dtoa.h | 249 + thirdparty/rapidjson/internal/ieee754.h | 78 + thirdparty/rapidjson/internal/itoa.h | 308 + thirdparty/rapidjson/internal/meta.h | 186 + thirdparty/rapidjson/internal/pow10.h | 55 + thirdparty/rapidjson/internal/regex.h | 739 + thirdparty/rapidjson/internal/stack.h | 232 + thirdparty/rapidjson/internal/strfunc.h | 83 + thirdparty/rapidjson/internal/strtod.h | 293 + thirdparty/rapidjson/internal/swap.h | 46 + thirdparty/rapidjson/istreamwrapper.h | 128 + thirdparty/rapidjson/memorybuffer.h | 70 + thirdparty/rapidjson/memorystream.h | 71 + thirdparty/rapidjson/msinttypes/inttypes.h | 316 + thirdparty/rapidjson/msinttypes/stdint.h | 300 + thirdparty/rapidjson/ostreamwrapper.h | 81 + thirdparty/rapidjson/pointer.h | 1476 + thirdparty/rapidjson/prettywriter.h | 277 + thirdparty/rapidjson/rapidjson.h | 741 + thirdparty/rapidjson/reader.h | 2246 ++ thirdparty/rapidjson/schema.h | 3262 ++ thirdparty/rapidjson/stream.h | 223 + thirdparty/rapidjson/stringbuffer.h | 121 + thirdparty/rapidjson/uri.h | 481 + thirdparty/rapidjson/writer.h | 721 + 492 files changed, 177213 insertions(+), 47 deletions(-) create mode 100644 include/App/Logic.hpp create mode 100644 include/App/Stuckfish.hpp create mode 100644 include/UI/GamesPlayedPage.hpp create mode 100644 include/UI/Page.hpp create mode 100644 include/UI/UserInfosPage.hpp create mode 100644 include/UI/fonts.hpp create mode 100644 packages/libcpr.1.10.5/.signature.p7s create mode 100644 packages/libcpr.1.10.5/README.md create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/bin/curl-config create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/accept_encoding.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/api.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/async.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/async_wrapper.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/auth.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/bearer.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/body.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/buffer.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/callback.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cert_info.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/connect_timeout.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cookies.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cpr.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cprtypes.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cprver.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/curl_container.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/curlholder.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/curlmultiholder.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/error.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/file.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/filesystem.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/http_version.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/interceptor.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/interface.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/limit_rate.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/local_port.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/local_port_range.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/low_speed.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/multipart.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/multiperform.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/parameters.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/payload.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/proxies.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/proxyauth.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/range.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/redirect.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/reserve_size.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/resolve.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/response.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/session.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/singleton.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/ssl_ctx.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/ssl_options.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/status_codes.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/threadpool.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/timeout.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/unix_socket.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/user_agent.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/util.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/verbose.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/curl.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/curlver.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/easy.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/header.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/mprintf.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/multi.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/options.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/stdcheaders.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/system.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/typecheck-gcc.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/urlapi.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/websockets.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLConfig.cmake create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLConfigVersion.cmake create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLTargets-debug.cmake create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLTargets-release.cmake create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLTargets.cmake create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Debug/lib/pkgconfig/libcurl.pc create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/bin/curl-config create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/accept_encoding.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/api.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/async.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/async_wrapper.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/auth.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/bearer.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/body.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/buffer.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/callback.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cert_info.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/connect_timeout.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cookies.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cpr.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cprtypes.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cprver.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/curl_container.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/curlholder.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/curlmultiholder.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/error.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/file.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/filesystem.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/http_version.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/interceptor.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/interface.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/limit_rate.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/local_port.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/local_port_range.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/low_speed.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/multipart.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/multiperform.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/parameters.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/payload.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/proxies.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/proxyauth.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/range.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/redirect.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/reserve_size.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/resolve.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/response.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/session.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/singleton.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/ssl_ctx.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/ssl_options.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/status_codes.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/threadpool.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/timeout.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/unix_socket.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/user_agent.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/util.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/verbose.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/curl.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/curlver.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/easy.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/header.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/mprintf.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/multi.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/options.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/stdcheaders.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/system.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/typecheck-gcc.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/urlapi.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/websockets.h create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/lib/cmake/CURL/CURLConfig.cmake create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/lib/cmake/CURL/CURLConfigVersion.cmake create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/lib/cmake/CURL/CURLTargets-release.cmake create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/lib/cmake/CURL/CURLTargets.cmake create mode 100644 packages/libcpr.1.10.5/build/native/Win32/Release/lib/pkgconfig/libcurl.pc create mode 100644 packages/libcpr.1.10.5/build/native/libcpr.props create mode 100644 packages/libcpr.1.10.5/build/native/libcpr.targets create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/bin/curl-config create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/accept_encoding.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/api.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/async.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/async_wrapper.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/auth.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/bearer.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/body.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/buffer.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/callback.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cert_info.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/connect_timeout.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cookies.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cpr.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cprtypes.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cprver.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/curl_container.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/curlholder.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/curlmultiholder.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/error.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/file.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/filesystem.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/http_version.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/interceptor.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/interface.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/limit_rate.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/local_port.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/local_port_range.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/low_speed.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/multipart.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/multiperform.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/parameters.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/payload.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/proxies.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/proxyauth.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/range.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/redirect.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/reserve_size.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/resolve.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/response.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/session.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/singleton.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/ssl_ctx.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/ssl_options.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/status_codes.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/threadpool.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/timeout.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/unix_socket.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/user_agent.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/util.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/verbose.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/curl.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/curlver.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/easy.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/header.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/mprintf.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/multi.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/options.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/stdcheaders.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/system.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/typecheck-gcc.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/urlapi.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/websockets.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLConfig.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLConfigVersion.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLTargets-debug.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLTargets-release.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLTargets.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x64/Debug/lib/pkgconfig/libcurl.pc create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/bin/curl-config create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/accept_encoding.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/api.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/async.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/async_wrapper.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/auth.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/bearer.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/body.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/buffer.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/callback.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cert_info.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/connect_timeout.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cookies.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cpr.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cprtypes.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cprver.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/curl_container.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/curlholder.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/curlmultiholder.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/error.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/file.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/filesystem.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/http_version.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/interceptor.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/interface.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/limit_rate.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/local_port.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/local_port_range.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/low_speed.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/multipart.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/multiperform.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/parameters.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/payload.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/proxies.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/proxyauth.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/range.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/redirect.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/reserve_size.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/resolve.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/response.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/session.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/singleton.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/ssl_ctx.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/ssl_options.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/status_codes.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/threadpool.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/timeout.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/unix_socket.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/user_agent.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/util.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/verbose.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/curl/curl.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/curl/curlver.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/curl/easy.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/curl/header.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/curl/mprintf.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/curl/multi.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/curl/options.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/curl/stdcheaders.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/curl/system.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/curl/typecheck-gcc.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/curl/urlapi.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/include/curl/websockets.h create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLConfig.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLConfigVersion.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLTargets-debug.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLTargets-release.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLTargets.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x64/Release/lib/pkgconfig/libcurl.pc create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/bin/curl-config create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/accept_encoding.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/api.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/async.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/async_wrapper.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/auth.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/bearer.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/body.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/buffer.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/callback.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cert_info.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/connect_timeout.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cookies.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cpr.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cprtypes.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cprver.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/curl_container.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/curlholder.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/curlmultiholder.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/error.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/file.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/filesystem.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/http_version.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/interceptor.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/interface.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/limit_rate.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/local_port.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/local_port_range.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/low_speed.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/multipart.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/multiperform.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/parameters.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/payload.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/proxies.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/proxyauth.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/range.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/redirect.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/reserve_size.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/resolve.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/response.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/session.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/singleton.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/ssl_ctx.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/ssl_options.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/status_codes.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/threadpool.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/timeout.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/unix_socket.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/user_agent.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/util.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/verbose.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/curl.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/curlver.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/easy.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/header.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/mprintf.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/multi.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/options.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/stdcheaders.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/system.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/typecheck-gcc.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/urlapi.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/websockets.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLConfig.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLConfigVersion.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLTargets-debug.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLTargets-release.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLTargets.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x86/Debug/lib/pkgconfig/libcurl.pc create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/bin/curl-config create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/accept_encoding.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/api.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/async.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/async_wrapper.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/auth.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/bearer.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/body.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/buffer.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/callback.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cert_info.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/connect_timeout.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cookies.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cpr.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cprtypes.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cprver.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/curl_container.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/curlholder.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/curlmultiholder.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/error.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/file.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/filesystem.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/http_version.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/interceptor.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/interface.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/limit_rate.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/local_port.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/local_port_range.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/low_speed.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/multipart.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/multiperform.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/parameters.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/payload.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/proxies.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/proxyauth.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/range.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/redirect.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/reserve_size.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/resolve.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/response.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/session.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/singleton.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/ssl_ctx.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/ssl_options.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/status_codes.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/threadpool.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/timeout.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/unix_socket.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/user_agent.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/util.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/verbose.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/curl/curl.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/curl/curlver.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/curl/easy.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/curl/header.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/curl/mprintf.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/curl/multi.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/curl/options.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/curl/stdcheaders.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/curl/system.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/curl/typecheck-gcc.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/curl/urlapi.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/include/curl/websockets.h create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/lib/cmake/CURL/CURLConfig.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/lib/cmake/CURL/CURLConfigVersion.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/lib/cmake/CURL/CURLTargets-release.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/lib/cmake/CURL/CURLTargets.cmake create mode 100644 packages/libcpr.1.10.5/build/native/x86/Release/lib/pkgconfig/libcurl.pc create mode 100644 packages/libcpr.1.10.5/libcpr.1.10.5.nupkg create mode 100644 packages/libcpr.1.10.5/resources/cpr.png create mode 100644 src/App/Logic.cpp create mode 100644 src/App/Stuckfish.cpp create mode 100644 src/Main.cpp create mode 100644 src/UI/Fonts.cpp create mode 100644 src/UI/GamesPlayedPage.cpp create mode 100644 src/UI/UserInfosPage.cpp create mode 100644 src/glad.cpp create mode 100644 thirdparty/GLFW/glfw3.h create mode 100644 thirdparty/GLFW/glfw3native.h create mode 100644 thirdparty/KHR/khrplatform.h create mode 100644 thirdparty/glad/glad.h create mode 100644 thirdparty/imgui/imconfig.h create mode 100644 thirdparty/imgui/imgui.cpp create mode 100644 thirdparty/imgui/imgui.h create mode 100644 thirdparty/imgui/imgui_demo.cpp create mode 100644 thirdparty/imgui/imgui_draw.cpp create mode 100644 thirdparty/imgui/imgui_impl_glfw.cpp create mode 100644 thirdparty/imgui/imgui_impl_glfw.h create mode 100644 thirdparty/imgui/imgui_impl_opengl3.cpp create mode 100644 thirdparty/imgui/imgui_impl_opengl3.h create mode 100644 thirdparty/imgui/imgui_impl_opengl3_loader.h create mode 100644 thirdparty/imgui/imgui_internal.h create mode 100644 thirdparty/imgui/imgui_stdlib.cpp create mode 100644 thirdparty/imgui/imgui_stdlib.h create mode 100644 thirdparty/imgui/imgui_tables.cpp create mode 100644 thirdparty/imgui/imgui_widgets.cpp create mode 100644 thirdparty/imgui/imstb_rectpack.h create mode 100644 thirdparty/imgui/imstb_textedit.h create mode 100644 thirdparty/imgui/imstb_truetype.h create mode 100644 thirdparty/rapidjson/allocators.h create mode 100644 thirdparty/rapidjson/cursorstreamwrapper.h create mode 100644 thirdparty/rapidjson/document.h create mode 100644 thirdparty/rapidjson/encodedstream.h create mode 100644 thirdparty/rapidjson/encodings.h create mode 100644 thirdparty/rapidjson/error/en.h create mode 100644 thirdparty/rapidjson/error/error.h create mode 100644 thirdparty/rapidjson/filereadstream.h create mode 100644 thirdparty/rapidjson/filewritestream.h create mode 100644 thirdparty/rapidjson/fwd.h create mode 100644 thirdparty/rapidjson/internal/biginteger.h create mode 100644 thirdparty/rapidjson/internal/clzll.h create mode 100644 thirdparty/rapidjson/internal/diyfp.h create mode 100644 thirdparty/rapidjson/internal/dtoa.h create mode 100644 thirdparty/rapidjson/internal/ieee754.h create mode 100644 thirdparty/rapidjson/internal/itoa.h create mode 100644 thirdparty/rapidjson/internal/meta.h create mode 100644 thirdparty/rapidjson/internal/pow10.h create mode 100644 thirdparty/rapidjson/internal/regex.h create mode 100644 thirdparty/rapidjson/internal/stack.h create mode 100644 thirdparty/rapidjson/internal/strfunc.h create mode 100644 thirdparty/rapidjson/internal/strtod.h create mode 100644 thirdparty/rapidjson/internal/swap.h create mode 100644 thirdparty/rapidjson/istreamwrapper.h create mode 100644 thirdparty/rapidjson/memorybuffer.h create mode 100644 thirdparty/rapidjson/memorystream.h create mode 100644 thirdparty/rapidjson/msinttypes/inttypes.h create mode 100644 thirdparty/rapidjson/msinttypes/stdint.h create mode 100644 thirdparty/rapidjson/ostreamwrapper.h create mode 100644 thirdparty/rapidjson/pointer.h create mode 100644 thirdparty/rapidjson/prettywriter.h create mode 100644 thirdparty/rapidjson/rapidjson.h create mode 100644 thirdparty/rapidjson/reader.h create mode 100644 thirdparty/rapidjson/schema.h create mode 100644 thirdparty/rapidjson/stream.h create mode 100644 thirdparty/rapidjson/stringbuffer.h create mode 100644 thirdparty/rapidjson/uri.h create mode 100644 thirdparty/rapidjson/writer.h diff --git a/Stuckfish.vcxproj b/Stuckfish.vcxproj index 24ea28c..7ca21d7 100644 --- a/Stuckfish.vcxproj +++ b/Stuckfish.vcxproj @@ -20,39 +20,37 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -111,24 +109,24 @@ - Libraries\include - Libraries\lib;$(LibraryPath) - Sources;Sources\App;Sources\UI;$(SourcePath) + C:\Users\Aman\source\repos\stuckfish\include\App;C:\Users\Aman\source\repos\stuckfish\include\UI;$(IncludePath) + include\lib;$(LibraryPath) + C:\Users\Aman\source\repos\stuckfish\src\UI;C:\Users\Aman\source\repos\stuckfish\src\App;C:\Users\Aman\source\repos\stuckfish\src - Libraries\include - Libraries\lib;$(LibraryPath) - Sources;Sources\App;Sources\UI;$(SourcePath) + C:\Users\Aman\source\repos\stuckfish\include\App;C:\Users\Aman\source\repos\stuckfish\include\UI;$(IncludePath) + include\lib;$(LibraryPath) + C:\Users\Aman\source\repos\stuckfish\src\UI;C:\Users\Aman\source\repos\stuckfish\src\App;C:\Users\Aman\source\repos\stuckfish\src - Libraries\include;$(IncludePath) - Libraries\lib;$(LibraryPath) - Sources\UI;Sources\App;Sources;$(SourcePath) + include\UI;include\App;$(IncludePath) + include\lib;$(LibraryPath) + src\UI;src\App;src;$(SourcePath) - Libraries\include;$(IncludePath) - Libraries\lib;$(LibraryPath) - Sources\UI;Sources\App;Sources;$(SourcePath) + include\UI;include\App;$(IncludePath) + include\lib;$(LibraryPath) + src\UI;src\App;src;$(SourcePath) true @@ -142,7 +140,7 @@ true WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - imgui;%(AdditionalIncludeDirectories) + thirdparty\imgui;thirdparty\;%(AdditionalIncludeDirectories) stdcpp17 @@ -159,7 +157,7 @@ true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true - imgui;%(AdditionalIncludeDirectories) + thirdparty\imgui;thirdparty;%(AdditionalIncludeDirectories) stdcpp17 @@ -177,7 +175,7 @@ true _DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - imgui;%(AdditionalIncludeDirectories) + thirdparty\imgui;thirdparty\;%(AdditionalIncludeDirectories) stdcpp17 @@ -194,7 +192,7 @@ true NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true - imgui;%(AdditionalIncludeDirectories) + thirdparty\imgui;thirdparty;%(AdditionalIncludeDirectories) stdcpp17 diff --git a/include/App/Logic.hpp b/include/App/Logic.hpp new file mode 100644 index 0000000..d07af11 --- /dev/null +++ b/include/App/Logic.hpp @@ -0,0 +1,46 @@ +/****************************************************************************** + * File: Logic.hpp + * Authors: see AUTHORS file + * Date: May 3, 2024 + * Description: This file contains the API requests methods + *****************************************************************************/ + +#pragma once + +#include +#include +#include +#include "rapidjson/document.h" +#include "rapidjson/error/en.h" + +using namespace rapidjson; + +namespace Stuckfish +{ + // consider creating a C-style structure to hold games data and a vector of this structure in Logic. + struct GamesData + { + std::string pgn; + std::string timeClass; + std::string gameResult; + std::string whiteRating; + std::string blackRating; + std::string whiteUsername; + std::string blackUsername; + }; + + class Logic + { + public: + Logic() : _gamesData() + {}; + + bool IsChessDotComUser(const std::string& username); + void GamesPlayedWithinPeriod(const std::string& username, const std::string& year, const std::string& month); + void GetInfosFromListOfGamesPlayed(const std::string& username, const Document& doc); + + private: + std::vector _gamesData; + }; +} + diff --git a/include/App/Stuckfish.hpp b/include/App/Stuckfish.hpp new file mode 100644 index 0000000..83be76b --- /dev/null +++ b/include/App/Stuckfish.hpp @@ -0,0 +1,96 @@ +/****************************************************************************** + * File: Stuckfish.hpp + * Authors: see AUTHORS file + * Date: May 3, 2024 + * Description: This file contains the Core class and setup methods + *****************************************************************************/ + +#pragma once + +#include +#include +#include +#include + +#include "imgui.h" +#include "imgui_impl_glfw.h" +#include "imgui_impl_opengl3.h" +#include "imgui_stdlib.h" + +#include "fonts.hpp" +#include "Page.hpp" + +#include + +#if defined(IMGUI_IMPL_OPENGL_ES2) +#include +#endif + +#include // Will drag system OpenGL headers + + +#ifdef __EMSCRIPTEN__ + #include "../emscripten/emscripten_mainloop_stub.h" +#endif + +#define GLSL_VERSION "#version 330" + + +namespace Stuckfish +{ + struct WindowSpecs + { + std::string name = "Stuckfish"; + uint32_t width = 1500; + uint32_t height = 800; + }; + + class Core + { + public: + Core(const WindowSpecs& win_specs = WindowSpecs()); + ~Core(); + + void Run(void); + + static Core& Get(void); + + template + void PushLayer(Args&&... args) { + static_assert(std::is_base_of::value, "Pushed type is not subclass of Page!"); + _pageStack.emplace_back(std::make_shared(std::forward(args)...)); + } + + /*template + T& GetLayer() { + return dynamic_cast(*(_pageStack.front())); + }*/ + + std::vector>& GetPageStack(void) + { + return _pageStack; + } + + void DisplayErrorPopup(const char *error_message); + void RemoveErrorPopup(void); + + public: + ImFont* _robotoFontHeader = nullptr; + ImFont* _robotoFontBody = nullptr; + ImFont* _robotoFontBodyMedium = nullptr; + + WindowSpecs _specs; + Logic _appLogic; + UserData _userData; + private: + void Init(void); + void Quit(void); + + private: + GLFWwindow* _window = nullptr; + + std::vector> _pageStack; + }; + + std::unique_ptr CreateApplication(void); +}; \ No newline at end of file diff --git a/include/UI/GamesPlayedPage.hpp b/include/UI/GamesPlayedPage.hpp new file mode 100644 index 0000000..70ea3bc --- /dev/null +++ b/include/UI/GamesPlayedPage.hpp @@ -0,0 +1,32 @@ +/****************************************************************************** + * File: GamesPlayedPage.hpp + * Authors: see AUTHORS file + * Date: May 3, 2024 + * Description: This file contains the required method to render the 2nd Page + *****************************************************************************/ + +#pragma once + +#include "Stuckfish.hpp" + +namespace Stuckfish +{ + class GamesPlayedPage : public Page + { + public: + GamesPlayedPage(Core& app, Logic& logic, UserData& userData) : _app(app), _logic(logic), _userdata(userData) + {}; + + void OnUpdate() override; + void OnUIRender() override; + void OnAttach() override; + void OnDetach() override; + + private: + Core& _app; + Logic& _logic; + UserData& _userdata; + + bool _hasRetrievedGames = false; + }; +} diff --git a/include/UI/Page.hpp b/include/UI/Page.hpp new file mode 100644 index 0000000..49fd717 --- /dev/null +++ b/include/UI/Page.hpp @@ -0,0 +1,97 @@ +/****************************************************************************** + * File: Page.hpp + * Authors: see AUTHORS file + * Date: May 3, 2024 + * Description: Page was meant to be an interface for other pages... + *****************************************************************************/ + +#pragma once + +#include "Logic.hpp" +#include + +namespace Stuckfish +{ + class Core; +} + +namespace Stuckfish +{ + const float confirmButtonSizeX = 200.0f; + const float confirmButtonSizeY = 35.0f; + const float popupConfirmButtonSizeX = 50.0f; + const float popupConfirmButtonSizeY = 0.0f; + + const float roundingValue = 5.0f; + + const float inputFieldWidth = 400; + + enum class WindowTitle + { + USERINFO_PAGE, + LOADING_PAGE, + GAMESPLAYED_PAGE, + ERROR_POPUP + }; + + enum class Buttons + { + CONFIRM, + OK + }; + + enum class Errors + { + EMPTY_USERNAME, + USERNAME_NOT_FOUND + }; + + inline const char* WindowTitlesToString(WindowTitle t) { + switch (t) { + case WindowTitle::USERINFO_PAGE: return "User Info Page"; + case WindowTitle::LOADING_PAGE: return "Loading Page"; + case WindowTitle::GAMESPLAYED_PAGE: return "Games Played Page"; + case WindowTitle::ERROR_POPUP: return "Error Popup"; + default: return "[Unknown Page]"; + } + } + + inline const char* ButtonsToString(Buttons b) { + switch (b) { + case Buttons::CONFIRM: return "Confirm"; + case Buttons::OK: return "OK"; + default: return "[Unknown Button]"; + } + } + + inline const char* ErrorsToString(Errors e) { + switch (e) { + case Errors::EMPTY_USERNAME: return "Empty username."; + case Errors::USERNAME_NOT_FOUND: return "Cannot find the username on Chess.com"; + default: return "[Unknown Error]"; + } + } + + struct UserData + { + UserData(const std::string& name = "") : username(name) + {}; + + std::string username; + }; + + class Page + { + public: + + virtual ~Page() = default; // virtual destructor as the class will be inherited. + virtual void OnUpdate() {}; + virtual void OnUIRender() {}; + virtual void OnAttach() {}; + virtual void OnDetach() {}; + + public: + bool _errorOccured = false; + std::string _errorMessage = ""; + }; +} \ No newline at end of file diff --git a/include/UI/UserInfosPage.hpp b/include/UI/UserInfosPage.hpp new file mode 100644 index 0000000..c585bf3 --- /dev/null +++ b/include/UI/UserInfosPage.hpp @@ -0,0 +1,29 @@ +/****************************************************************************** + * File: UserInfosPage.hpp + * Authors: see AUTHORS file + * Date: May 3, 2024 + * Description: This file contains the required methods to render the 1st page + *****************************************************************************/ + +#include "Page.hpp" + +namespace Stuckfish +{ + class UserInfosPage : public Page + { + public: + UserInfosPage(Core& app, Logic& logic, UserData& userData) : _app(app), _logic(logic), _userdata(userData) + {} + + void OnUpdate() override; + void OnUIRender() override; + void OnAttach() override; + void OnDetach() override; + + private: + Core& _app; + Logic& _logic; + UserData& _userdata; + }; +} + diff --git a/include/UI/fonts.hpp b/include/UI/fonts.hpp new file mode 100644 index 0000000..b3068b9 --- /dev/null +++ b/include/UI/fonts.hpp @@ -0,0 +1,23 @@ +/****************************************************************************** + * File: fonts.hpp + * Authors: see AUTHORS file + * Date: May 3, 2024 + * Description: This file contains all the data related to the fonts we are using + *****************************************************************************/ + +#pragma once + +extern unsigned char roboto_regular[168260]; +extern unsigned char roboto_medium[168644]; + +class FontSizes +{ +public: + static const float LargeHeaderFontSize; + static const float MediumHeaderFontSize; + static const float SmallHeaderFontSize; + + static const float LargeBodyFontSize; + static const float MediumBodyFontSize; + static const float SmallBodyFontSize; +}; diff --git a/packages/libcpr.1.10.5/.signature.p7s b/packages/libcpr.1.10.5/.signature.p7s new file mode 100644 index 0000000000000000000000000000000000000000..f0de70235cb2b09f6c257b7a168e9d2d4806b3df GIT binary patch literal 11509 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 i?gDlB&3u80<^*9JtN> + +[![Documentation](https://img.shields.io/badge/docs-online-informational?style=flat&link=https://docs.libcpr.org/)](https://docs.libcpr.org/) +![CI](https://github.com/libcpr/cpr/workflows/CI/badge.svg) +[![Gitter](https://badges.gitter.im/libcpr/community.svg)](https://gitter.im/libcpr/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) + +## Announcements + +* This project is being maintained by [Fabian Sauter](https://github.com/com8) and [Kilian Traub](https://github.com/KingKili). +* For quick help, and discussion libcpr also offer a [gitter](https://gitter.im/libcpr/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link) chat. + +## Supported Releases +| Release | Min. C++ Standard | Status | Notes | +|----------|-------------------|--------|-------| +| master | `cpp17` | ![alt text][preview] | | +| 1.10.x | `cpp17` | ![alt text][supported] | | +| 1.9.x | `cpp11` | ![alt text][supported] | Supported until 01.01.2025 | +| <= 1.8.x | `cpp11` | ![alt text][unsupported] | | + +[unsupported]: https://img.shields.io/badge/-unsupported-red "unsupported" +[supported]: https://img.shields.io/badge/-supported-green "supported" +[preview]: https://img.shields.io/badge/-preview-orange "preview" + +## TLDR + +C++ Requests is a simple wrapper around [libcurl](http://curl.haxx.se/libcurl) inspired by the excellent [Python Requests](https://github.com/kennethreitz/requests) project. + +Despite its name, libcurl's easy interface is anything but, and making mistakes, misusing it is a common source of error and frustration. Using the more expressive language facilities of `C++17` (or `C++11` in case you use cpr < 1.10.0), this library captures the essence of making network calls into a few concise idioms. + +Here's a quick GET request: + +```c++ +#include + +int main(int argc, char** argv) { + cpr::Response r = cpr::Get(cpr::Url{"https://api.github.com/repos/whoshuu/cpr/contributors"}, + cpr::Authentication{"user", "pass", cpr::AuthMode::BASIC}, + cpr::Parameters{{"anon", "true"}, {"key", "value"}}); + r.status_code; // 200 + r.header["content-type"]; // application/json; charset=utf-8 + r.text; // JSON text string + return 0; +} +``` + +And here's [less functional, more complicated code, without cpr](https://gist.github.com/whoshuu/2dc858b8730079602044). + +## Documentation + +[![Documentation](https://img.shields.io/badge/docs-online-informational?style=for-the-badge&link=https://docs.libcpr.org/)](https://docs.libcpr.org/) +You can find the latest documentation [here](https://docs.libcpr.org/). It's a work in progress, but it should give you a better idea of how to use the library than the [tests](https://github.com/libcpr/cpr/tree/master/test) currently do. + +## Features + +C++ Requests currently supports: + +* Custom headers +* Url encoded parameters +* Url encoded POST values +* Multipart form POST upload +* File POST upload +* Basic authentication +* Bearer authentication +* Digest authentication +* NTLM authentication +* Connection and request timeout specification +* Timeout for low speed connection +* Asynchronous requests +* :cookie: support! +* Proxy support +* Callback interfaces +* PUT methods +* DELETE methods +* HEAD methods +* OPTIONS methods +* PATCH methods +* Thread Safe access to [libCurl](https://curl.haxx.se/libcurl/c/threadsafe.html) +* OpenSSL and WinSSL support for HTTPS requests + +## Planned + +For a quick overview about the planed features, have a look at the next [Milestones](https://github.com/libcpr/cpr/milestones). + +## Usage + +### CMake + +#### fetch_content: +If you already have a CMake project you need to integrate C++ Requests with, the primary way is to use `fetch_content`. +Add the following to your `CMakeLists.txt`. + + +```cmake +include(FetchContent) +FetchContent_Declare(cpr GIT_REPOSITORY https://github.com/libcpr/cpr.git + GIT_TAG 0817715923c9705e68994eb52ef9df3f6845beba) # The commit hash for 1.10.x. Replace with the latest from: https://github.com/libcpr/cpr/releases +FetchContent_MakeAvailable(cpr) +``` + +This will produce the target `cpr::cpr` which you can link against the typical way: + +```cmake +target_link_libraries(your_target_name PRIVATE cpr::cpr) +``` + +That should do it! +There's no need to handle `libcurl` yourself. All dependencies are taken care of for you. +All of this can be found in an example [**here**](https://github.com/libcpr/example-cmake-fetch-content). + +#### find_package(): +If you prefer not to use `fetch_content`, you can download, build, and install the library and then use CMake `find_package()` function to integrate it into a project. + +**Note:** this feature is feasible only if CPR_USE_SYSTEM_CURL is set. (see [#645](https://github.com/libcpr/cpr/pull/645)) +```Bash +$ git clone https://github.com/libcpr/cpr.git +$ cd cpr && mkdir build && cd build +$ cmake .. -DCPR_USE_SYSTEM_CURL=ON +$ cmake --build . +$ sudo cmake --install . +``` +In your `CMakeLists.txt`: +```cmake +find_package(cpr REQUIRED) +add_executable(your_target_name your_target_name.cpp) +target_link_libraries(your_target_name PRIVATE cpr::cpr) +``` + +### Bazel + +Please refer to [hedronvision/bazel-make-cc-https-easy](https://github.com/hedronvision/bazel-make-cc-https-easy). + +### Packages for Linux Distributions + +Alternatively, you may install a package specific to your Linux distribution. Since so few distributions currently have a package for cpr, most users will not be able to run your program with this approach. + +Currently, we are aware of packages for the following distributions: + +* [Arch Linux (AUR)](https://aur.archlinux.org/packages/cpr) + +If there's no package for your distribution, try making one! If you do, and it is added to your distribution's repositories, please submit a pull request to add it to the list above. However, please only do this if you plan to actively maintain the package. + +### NuGet Package + +For Windows, there is also a libcpr NuGet package available. Currently, x86 and x64 builds are supported with release and debug configuration. + +The package can be found here: [NuGet.org](https://www.nuget.org/packages/libcpr/) + +## Requirements + +The only explicit requirements are: + +* a `C++17` compatible compiler such as Clang or GCC. The minimum required version of GCC is unknown, so if anyone has trouble building this library with a specific version of GCC, do let us know +* in case you only have a `C++11` compatible compiler available, all versions below cpr 1.9.x are for you. The 1.10.0 release of cpr switches to `C++17` as a requirement. +* If you would like to perform https requests `OpenSSL` and its development libraries are required. + +## Building cpr - Using vcpkg + +You can download and install cpr using the [vcpkg](https://github.com/Microsoft/vcpkg) dependency manager: +```Bash +git clone https://github.com/Microsoft/vcpkg.git +cd vcpkg +./bootstrap-vcpkg.sh +./vcpkg integrate install +./vcpkg install cpr +``` +The `cpr` port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository. + +## Building cpr - Using Conan + +You can download and install `cpr` using the [Conan](https://conan.io/) package manager. Setup your CMakeLists.txt (see [Conan documentation](https://docs.conan.io/en/latest/integrations/build_system.html) on how to use MSBuild, Meson and others). +An example can be found [**here**](https://github.com/libcpr/example-cmake-conan). + +The `cpr` package in Conan is kept up to date by Conan contributors. If the version is out of date, please [create an issue or pull request](https://github.com/conan-io/conan-center-index) on the `conan-center-index` repository. diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/bin/curl-config b/packages/libcpr.1.10.5/build/native/Win32/Debug/bin/curl-config new file mode 100644 index 0000000..d235fbd --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/bin/curl-config @@ -0,0 +1,196 @@ +#! /bin/sh +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +prefix="C:/Program Files (x86)/cpr" +exec_prefix=${prefix} +includedir=${prefix}/include +cppflag_curl_staticlib= + +usage() +{ + cat <&2 + exit 1 + fi + ;; + + --configure) + echo + ;; + + *) + echo "unknown option: $1" + usage 1 + ;; + esac + shift +done + +exit 0 diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/accept_encoding.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/accept_encoding.h new file mode 100644 index 0000000..167d7c2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/accept_encoding.h @@ -0,0 +1,41 @@ +#ifndef CPR_ACCEPT_ENCODING_H +#define CPR_ACCEPT_ENCODING_H + +#include +#include +#include +#include +#include + +namespace cpr { + +enum class AcceptEncodingMethods { + identity, + deflate, + zlib, + gzip, + disabled, +}; + +// NOLINTNEXTLINE(cert-err58-cpp) +static const std::map AcceptEncodingMethodsStringMap{{AcceptEncodingMethods::identity, "identity"}, {AcceptEncodingMethods::deflate, "deflate"}, {AcceptEncodingMethods::zlib, "zlib"}, {AcceptEncodingMethods::gzip, "gzip"}, {AcceptEncodingMethods::disabled, "disabled"}}; + +class AcceptEncoding { + public: + AcceptEncoding() = default; + // NOLINTNEXTLINE(google-explicit-constructor) + AcceptEncoding(const std::initializer_list& methods); + // NOLINTNEXTLINE(google-explicit-constructor) + AcceptEncoding(const std::initializer_list& methods); + + [[nodiscard]] bool empty() const noexcept; + [[nodiscard]] const std::string getString() const; + [[nodiscard]] bool disabled() const; + + private: + std::unordered_set methods_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/api.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/api.h new file mode 100644 index 0000000..ba9c64e --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/api.h @@ -0,0 +1,392 @@ +#ifndef CPR_API_H +#define CPR_API_H + +#include +#include +#include +#include +#include + +#include "cpr/async.h" +#include "cpr/async_wrapper.h" +#include "cpr/auth.h" +#include "cpr/bearer.h" +#include "cpr/cprtypes.h" +#include "cpr/multipart.h" +#include "cpr/multiperform.h" +#include "cpr/payload.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include + +namespace cpr { + +using AsyncResponse = AsyncWrapper; + +namespace priv { + +template +void set_option_internal(Session& session, CurrentType&& current_option) { + session.SetOption(std::forward(current_option)); +} + +template <> +inline void set_option_internal(Session& session, Header&& current_option) { + // Header option was already provided -> Update previous header + session.UpdateHeader(std::forward
(current_option)); +} + +template +void set_option_internal(Session& session, CurrentType&& current_option, Ts&&... ts) { + set_option_internal(session, std::forward(current_option)); + + if (std::is_same::value) { + set_option_internal(session, std::forward(ts)...); + } else { + set_option_internal(session, std::forward(ts)...); + } +} + +template +void set_option(Session& session, Ts&&... ts) { + set_option_internal(session, std::forward(ts)...); +} + +// Idea: https://stackoverflow.com/a/19060157 +template +void apply_set_option_internal(Session& session, Tuple&& t, std::index_sequence) { + set_option(session, std::get(std::forward(t))...); +} + +// Idea: https://stackoverflow.com/a/19060157 +template +void apply_set_option(Session& session, Tuple&& t) { + using Indices = std::make_index_sequence>::value>; + apply_set_option_internal(session, std::forward(t), Indices()); +} + +template +void setup_multiperform_internal(MultiPerform& multiperform, T&& t) { + std::shared_ptr session = std::make_shared(); + apply_set_option(*session, t); + multiperform.AddSession(session); +} + +template +void setup_multiperform_internal(MultiPerform& multiperform, T&& t, Ts&&... ts) { + std::shared_ptr session = std::make_shared(); + apply_set_option(*session, t); + multiperform.AddSession(session); + setup_multiperform_internal(multiperform, std::forward(ts)...); +} + +template +void setup_multiperform(MultiPerform& multiperform, Ts&&... ts) { + setup_multiperform_internal(multiperform, std::forward(ts)...); +} + +using session_action_t = cpr::Response (cpr::Session::*)(); + +template +void setup_multiasync(std::vector>& responses, T&& parameters) { + std::shared_ptr cancellation_state = std::make_shared(false); + + std::function execFn{[cancellation_state](T params) { + if (cancellation_state->load()) { + return Response{}; + } + cpr::Session s{}; + s.SetCancellationParam(cancellation_state); + apply_set_option(s, std::forward(params)); + return std::invoke(SessionAction, s); + }}; + responses.emplace_back(GlobalThreadPool::GetInstance()->Submit(std::move(execFn), std::forward(parameters)), std::move(cancellation_state)); +} + +template +void setup_multiasync(std::vector>& responses, T&& head, Ts&&... tail) { + setup_multiasync(responses, std::forward(head)); + if constexpr (sizeof...(Ts) > 0) { + setup_multiasync(responses, std::forward(tail)...); + } +} + +} // namespace priv + +// Get methods +template +Response Get(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Get(); +} + +// Get async methods +template +AsyncResponse GetAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Get(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Get callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto GetCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Get(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Post methods +template +Response Post(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Post(); +} + +// Post async methods +template +AsyncResponse PostAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Post(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Post callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto PostCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Post(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Put methods +template +Response Put(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Put(); +} + +// Put async methods +template +AsyncResponse PutAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Put(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Put callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto PutCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Put(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Head methods +template +Response Head(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Head(); +} + +// Head async methods +template +AsyncResponse HeadAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Head(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Head callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto HeadCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Head(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Delete methods +template +Response Delete(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Delete(); +} + +// Delete async methods +template +AsyncResponse DeleteAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Delete(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Delete callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto DeleteCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Delete(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Options methods +template +Response Options(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Options(); +} + +// Options async methods +template +AsyncResponse OptionsAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Options(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Options callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto OptionsCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Options(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Patch methods +template +Response Patch(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Patch(); +} + +// Patch async methods +template +AsyncResponse PatchAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Patch(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Patch callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto PatchCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Patch(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Download methods +template +Response Download(std::ofstream& file, Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Download(file); +} + +// Download async method +template +AsyncResponse DownloadAsync(fs::path local_path, Ts... ts) { + return AsyncWrapper{std::async( + std::launch::async, + [](fs::path local_path_, Ts... ts_) { + std::ofstream f(local_path_.c_str()); + return Download(f, std::move(ts_)...); + }, + std::move(local_path), std::move(ts)...)}; +} + +// Download with user callback +template +Response Download(const WriteCallback& write, Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Download(write); +} + +// Multi requests +template +std::vector MultiGet(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Get(); +} + +template +std::vector MultiDelete(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Delete(); +} + +template +std::vector MultiPut(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Put(); +} + +template +std::vector MultiHead(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Head(); +} + +template +std::vector MultiOptions(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Options(); +} + +template +std::vector MultiPatch(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Patch(); +} + +template +std::vector MultiPost(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Post(); +} + +template +std::vector> MultiGetAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Get>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiDeleteAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Delete>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiHeadAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Head>(ret, std::forward(ts)...); + return ret; +} +template +std::vector> MultiOptionsAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Options>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiPatchAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Patch>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiPostAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Post>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiPutAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Put>(ret, std::forward(ts)...); + return ret; +} + + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/async.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/async.h new file mode 100644 index 0000000..1305834 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/async.h @@ -0,0 +1,50 @@ +#ifndef CPR_ASYNC_H +#define CPR_ASYNC_H + +#include "async_wrapper.h" +#include "singleton.h" +#include "threadpool.h" + +namespace cpr { + +class GlobalThreadPool : public ThreadPool { + CPR_SINGLETON_DECL(GlobalThreadPool) + protected: + GlobalThreadPool() = default; + + public: + ~GlobalThreadPool() override = default; +}; + +/** + * Return a wrapper for a future, calling future.get() will wait until the task is done and return RetType. + * async(fn, args...) + * async(std::bind(&Class::mem_fn, &obj)) + * async(std::mem_fn(&Class::mem_fn, &obj)) + **/ +template +auto async(Fn&& fn, Args&&... args) { + return AsyncWrapper{GlobalThreadPool::GetInstance()->Submit(std::forward(fn), std::forward(args)...)}; +} + +class async { + public: + static void startup(size_t min_threads = CPR_DEFAULT_THREAD_POOL_MIN_THREAD_NUM, size_t max_threads = CPR_DEFAULT_THREAD_POOL_MAX_THREAD_NUM, std::chrono::milliseconds max_idle_ms = CPR_DEFAULT_THREAD_POOL_MAX_IDLE_TIME) { + GlobalThreadPool* gtp = GlobalThreadPool::GetInstance(); + if (gtp->IsStarted()) { + return; + } + gtp->SetMinThreadNum(min_threads); + gtp->SetMaxThreadNum(max_threads); + gtp->SetMaxIdleTime(max_idle_ms); + gtp->Start(); + } + + static void cleanup() { + GlobalThreadPool::ExitInstance(); + } +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/async_wrapper.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/async_wrapper.h new file mode 100644 index 0000000..bb46bf9 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/async_wrapper.h @@ -0,0 +1,140 @@ +#ifndef CPR_ASYNC_WRAPPER_H +#define CPR_ASYNC_WRAPPER_H + +#include +#include +#include + +#include "cpr/response.h" + +namespace cpr { +enum class [[nodiscard]] CancellationResult { failure, success, invalid_operation }; + +/** + * A class template intended to wrap results of async operations (instances of std::future) + * and also provide extended capablilities relaed to these requests, for example cancellation. + * + * The RAII semantics are the same as std::future - moveable, not copyable. + */ +template +class AsyncWrapper { + private: + std::future future; + std::shared_ptr is_cancelled; + + public: + // Constructors + explicit AsyncWrapper(std::future&& f) : future{std::move(f)} {} + AsyncWrapper(std::future&& f, std::shared_ptr&& cancelledState) : future{std::move(f)}, is_cancelled{std::move(cancelledState)} {} + + // Copy Semantics + AsyncWrapper(const AsyncWrapper&) = delete; + AsyncWrapper& operator=(const AsyncWrapper&) = delete; + + // Move Semantics + AsyncWrapper(AsyncWrapper&&) noexcept = default; + AsyncWrapper& operator=(AsyncWrapper&&) noexcept = default; + + // Destructor + ~AsyncWrapper() { + if constexpr (isCancellable) { + if(is_cancelled) { + is_cancelled->store(true); + } + } + } + // These methods replicate the behaviour of std::future + [[nodiscard]] T get() { + if constexpr (isCancellable) { + if (IsCancelled()) { + throw std::logic_error{"Calling AsyncWrapper::get on a cancelled request!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::get when the associated future instance is invalid!"}; + } + return future.get(); + } + + [[nodiscard]] bool valid() const noexcept { + if constexpr (isCancellable) { + return !is_cancelled->load() && future.valid(); + } else { + return future.valid(); + } + } + + void wait() const { + if constexpr (isCancellable) { + if (is_cancelled->load()) { + throw std::logic_error{"Calling AsyncWrapper::wait when the associated future is invalid or cancelled!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is invalid!"}; + } + future.wait(); + } + + template + std::future_status wait_for(const std::chrono::duration& timeout_duration) const { + if constexpr (isCancellable) { + if (IsCancelled()) { + throw std::logic_error{"Calling AsyncWrapper::wait_for when the associated future is cancelled!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is invalid!"}; + } + return future.wait_for(timeout_duration); + } + + template + std::future_status wait_until(const std::chrono::time_point& timeout_time) const { + if constexpr (isCancellable) { + if (IsCancelled()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is cancelled!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is invalid!"}; + } + return future.wait_until(timeout_time); + } + + std::shared_future share() noexcept { + return future.share(); + } + + // Cancellation-related methods + CancellationResult Cancel() { + if constexpr (!isCancellable) { + return CancellationResult::invalid_operation; + } + if (!future.valid() || is_cancelled->load()) { + return CancellationResult::invalid_operation; + } + is_cancelled->store(true); + return CancellationResult::success; + } + + [[nodiscard]] bool IsCancelled() const { + if constexpr (isCancellable) { + return is_cancelled->load(); + } else { + return false; + } + } +}; + +// Deduction guides +template +AsyncWrapper(std::future&&) -> AsyncWrapper; + +template +AsyncWrapper(std::future&&, std::shared_ptr&&) -> AsyncWrapper; + +} // namespace cpr + + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/auth.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/auth.h new file mode 100644 index 0000000..e783969 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/auth.h @@ -0,0 +1,32 @@ +#ifndef CPR_AUTH_H +#define CPR_AUTH_H + +#include + +#include + +namespace cpr { + +enum class AuthMode { BASIC, DIGEST, NTLM }; + +class Authentication { + public: + Authentication(std::string username, std::string password, AuthMode auth_mode) : auth_string_{std::move(username) + ":" + std::move(password)}, auth_mode_{std::move(auth_mode)} {} + Authentication(const Authentication& other) = default; + Authentication(Authentication&& old) noexcept = default; + ~Authentication() noexcept; + + Authentication& operator=(Authentication&& old) noexcept = default; + Authentication& operator=(const Authentication& other) = default; + + const char* GetAuthString() const noexcept; + AuthMode GetAuthMode() const noexcept; + + private: + std::string auth_string_; + AuthMode auth_mode_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/bearer.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/bearer.h new file mode 100644 index 0000000..5e58a7d --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/bearer.h @@ -0,0 +1,34 @@ +#ifndef CPR_BEARER_H +#define CPR_BEARER_H + +#include +#include + +#include + +namespace cpr { + +// Only supported with libcurl >= 7.61.0. +// As an alternative use SetHeader and add the token manually. +#if LIBCURL_VERSION_NUM >= 0x073D00 +class Bearer { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Bearer(std::string token) : token_string_{std::move(token)} {} + Bearer(const Bearer& other) = default; + Bearer(Bearer&& old) noexcept = default; + virtual ~Bearer() noexcept; + + Bearer& operator=(Bearer&& old) noexcept = default; + Bearer& operator=(const Bearer& other) = default; + + virtual const char* GetToken() const noexcept; + + protected: + std::string token_string_; +}; +#endif + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/body.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/body.h new file mode 100644 index 0000000..f691d9c --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/body.h @@ -0,0 +1,54 @@ +#ifndef CPR_BODY_H +#define CPR_BODY_H + +#include +#include +#include +#include +#include + +#include "cpr/buffer.h" +#include "cpr/cprtypes.h" +#include "cpr/file.h" + +namespace cpr { + +class Body : public StringHolder { + public: + Body() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Body(std::string body) : StringHolder(std::move(body)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Body(std::string_view body) : StringHolder(body) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Body(const char* body) : StringHolder(body) {} + Body(const char* str, size_t len) : StringHolder(str, len) {} + Body(const std::initializer_list args) : StringHolder(args) {} + // NOLINTNEXTLINE(google-explicit-constructor, cppcoreguidelines-pro-type-reinterpret-cast) + Body(const Buffer& buffer) : StringHolder(reinterpret_cast(buffer.data), static_cast(buffer.datalen)) {} + // NOLINTNEXTLINE(google-explicit-constructor) + Body(const File& file) { + std::ifstream is(file.filepath, std::ifstream::binary); + if (!is) { + throw std::invalid_argument("Can't open the file for HTTP request body!"); + } + + is.seekg(0, std::ios::end); + const std::streampos length = is.tellg(); + is.seekg(0, std::ios::beg); + std::string buffer; + buffer.resize(static_cast(length)); + is.read(buffer.data(), length); + str_ = std::move(buffer); + } + Body(const Body& other) = default; + Body(Body&& old) noexcept = default; + ~Body() override = default; + + Body& operator=(Body&& old) noexcept = default; + Body& operator=(const Body& other) = default; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/buffer.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/buffer.h new file mode 100644 index 0000000..5665faa --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/buffer.h @@ -0,0 +1,33 @@ +#ifndef CPR_BUFFER_H +#define CPR_BUFFER_H + +#include + +#include + +namespace cpr { + +struct Buffer { + using data_t = const char*; + + template + Buffer(Iterator begin, Iterator end, fs::path&& p_filename) + // Ignored here since libcurl reqires a long. + // There is also no way around the reinterpret_cast. + // NOLINTNEXTLINE(google-runtime-int, cppcoreguidelines-pro-type-reinterpret-cast) + : data{reinterpret_cast(&(*begin))}, datalen{static_cast(std::distance(begin, end))}, filename(std::move(p_filename)) { + is_random_access_iterator(begin, end); + static_assert(sizeof(*begin) == 1, "Only byte buffers can be used"); + } + + template + typename std::enable_if::iterator_category, std::random_access_iterator_tag>::value>::type is_random_access_iterator(Iterator /* begin */, Iterator /* end */) {} + + data_t data; + size_t datalen; + const fs::path filename; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/callback.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/callback.h new file mode 100644 index 0000000..dc1c6ee --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/callback.h @@ -0,0 +1,111 @@ +#ifndef CPR_CALLBACK_H +#define CPR_CALLBACK_H + +#include "cprtypes.h" + +#include +#include +#include +#include + +namespace cpr { + +class ReadCallback { + public: + ReadCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ReadCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), size{-1}, callback{std::move(p_callback)} {} + ReadCallback(cpr_off_t p_size, std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), size{p_size}, callback{std::move(p_callback)} {} + bool operator()(char* buffer, size_t& buffer_size) const { + return callback(buffer, buffer_size, userdata); + } + + intptr_t userdata{}; + cpr_off_t size{}; + std::function callback; +}; + +class HeaderCallback { + public: + HeaderCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + HeaderCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + bool operator()(std::string header) const { + return callback(std::move(header), userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +class WriteCallback { + public: + WriteCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + WriteCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + bool operator()(std::string data) const { + return callback(std::move(data), userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +class ProgressCallback { + public: + ProgressCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ProgressCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + bool operator()(cpr_pf_arg_t downloadTotal, cpr_pf_arg_t downloadNow, cpr_pf_arg_t uploadTotal, cpr_pf_arg_t uploadNow) const { + return callback(downloadTotal, downloadNow, uploadTotal, uploadNow, userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +class DebugCallback { + public: + enum class InfoType { + TEXT = 0, + HEADER_IN = 1, + HEADER_OUT = 2, + DATA_IN = 3, + DATA_OUT = 4, + SSL_DATA_IN = 5, + SSL_DATA_OUT = 6, + }; + DebugCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + DebugCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + void operator()(InfoType type, std::string data) const { + callback(type, std::move(data), userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +/** + * Functor class for progress functions that will be used in cancellable requests. + */ +class CancellationCallback { + public: + CancellationCallback() = default; + explicit CancellationCallback(std::shared_ptr&& cs) : cancellation_state{std::move(cs)} {} + + CancellationCallback(std::shared_ptr&& cs, ProgressCallback& u_cb) : cancellation_state{std::move(cs)}, user_cb{std::reference_wrapper{u_cb}} {} + + bool operator()(cpr_pf_arg_t dltotal, cpr_pf_arg_t dlnow, cpr_pf_arg_t ultotal, cpr_pf_arg_t ulnow) const; + + void SetProgressCallback(ProgressCallback& u_cb); + + private: + std::shared_ptr cancellation_state; + std::optional> user_cb; +}; + + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cert_info.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cert_info.h new file mode 100644 index 0000000..6c328ee --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cert_info.h @@ -0,0 +1,35 @@ +#ifndef CPR_CERT_INFO_H +#define CPR_CERT_INFO_H + +#include +#include +#include + +namespace cpr { + +class CertInfo { + private: + std::vector cert_info_; + + public: + CertInfo() = default; + CertInfo(const std::initializer_list& entry) : cert_info_{entry} {}; + ~CertInfo() noexcept = default; + + using iterator = std::vector::iterator; + using const_iterator = std::vector::const_iterator; + + std::string& operator[](const size_t& pos); + iterator begin(); + iterator end(); + const_iterator begin() const; + const_iterator end() const; + const_iterator cbegin() const; + const_iterator cend() const; + void emplace_back(const std::string& str); + void push_back(const std::string& str); + void pop_back(); +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/connect_timeout.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/connect_timeout.h new file mode 100644 index 0000000..546e8a5 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/connect_timeout.h @@ -0,0 +1,18 @@ +#ifndef CPR_CONNECT_TIMEOUT_H +#define CPR_CONNECT_TIMEOUT_H + +#include "cpr/timeout.h" + +namespace cpr { + +class ConnectTimeout : public Timeout { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ConnectTimeout(const std::chrono::milliseconds& duration) : Timeout{duration} {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ConnectTimeout(const std::int32_t& milliseconds) : Timeout{milliseconds} {} +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cookies.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cookies.h new file mode 100644 index 0000000..c018ea4 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cookies.h @@ -0,0 +1,92 @@ +#ifndef CPR_COOKIES_H +#define CPR_COOKIES_H + +#include "cpr/curlholder.h" +#include +#include +#include +#include +#include + +namespace cpr { +/** + * EXPIRES_STRING_SIZE is an explicitly static and const variable that could be only accessed within the same namespace and is immutable. + * To be used for "std::array", the expression must have a constant value, so EXPIRES_STRING_SIZE must be a const value. + **/ +static const std::size_t EXPIRES_STRING_SIZE = 100; + +class Cookie { + public: + Cookie() = default; + /** + * Some notes for the default value used by expires: + * std::chrono::system_clock::time_point::min() won't work on Windows due to the min, max clash there. + * So we fall back to std::chrono::system_clock::from_time_t(0) for the minimum value here. + **/ + Cookie(const std::string& name, const std::string& value, const std::string& domain = "", bool p_isIncludingSubdomains = false, const std::string& path = "/", bool p_isHttpsOnly = false, std::chrono::system_clock::time_point expires = std::chrono::system_clock::from_time_t(0)) : name_{name}, value_{value}, domain_{domain}, includeSubdomains_{p_isIncludingSubdomains}, path_{path}, httpsOnly_{p_isHttpsOnly}, expires_{expires} {}; + const std::string GetDomain() const; + bool IsIncludingSubdomains() const; + const std::string GetPath() const; + bool IsHttpsOnly() const; + const std::chrono::system_clock::time_point GetExpires() const; + const std::string GetExpiresString() const; + const std::string GetName() const; + const std::string GetValue() const; + + private: + std::string name_; + std::string value_; + std::string domain_; + bool includeSubdomains_{}; + std::string path_; + bool httpsOnly_{}; + /** + * TODO: Update the implementation using `std::chrono::utc_clock` of C++20 + **/ + std::chrono::system_clock::time_point expires_{}; +}; + +class Cookies { + public: + /** + * Should we URL-encode cookies when making a request. + * Based on RFC6265, it is recommended but not mandatory to encode cookies. + * + * ------- + * To maximize compatibility with user agents, servers that wish to + * store arbitrary data in a cookie-value SHOULD encode that data, for + * example, using Base64 [RFC4648]. + * ------- + * Source: RFC6265 (https://www.ietf.org/rfc/rfc6265.txt) + **/ + bool encode{true}; + + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Cookies(bool p_encode = true) : encode{p_encode} {}; + Cookies(const std::initializer_list& cookies, bool p_encode = true) : encode{p_encode}, cookies_{cookies} {}; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Cookies(const cpr::Cookie& cookie, bool p_encode = true) : encode{p_encode}, cookies_{cookie} {}; + + cpr::Cookie& operator[](size_t pos); + const std::string GetEncoded(const CurlHolder& holder) const; + + using iterator = std::vector::iterator; + using const_iterator = std::vector::const_iterator; + + iterator begin(); + iterator end(); + const_iterator begin() const; + const_iterator end() const; + const_iterator cbegin() const; + const_iterator cend() const; + void emplace_back(const Cookie& str); + void push_back(const Cookie& str); + void pop_back(); + + private: + std::vector cookies_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cpr.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cpr.h new file mode 100644 index 0000000..fbad172 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cpr.h @@ -0,0 +1,46 @@ +#ifndef CPR_CPR_H +#define CPR_CPR_H + +#include "cpr/api.h" +#include "cpr/auth.h" +#include "cpr/bearer.h" +#include "cpr/callback.h" +#include "cpr/cert_info.h" +#include "cpr/connect_timeout.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/cprver.h" +#include "cpr/curl_container.h" +#include "cpr/curlholder.h" +#include "cpr/error.h" +#include "cpr/http_version.h" +#include "cpr/interceptor.h" +#include "cpr/interface.h" +#include "cpr/limit_rate.h" +#include "cpr/local_port.h" +#include "cpr/local_port_range.h" +#include "cpr/low_speed.h" +#include "cpr/multipart.h" +#include "cpr/multiperform.h" +#include "cpr/parameters.h" +#include "cpr/payload.h" +#include "cpr/proxies.h" +#include "cpr/proxyauth.h" +#include "cpr/range.h" +#include "cpr/redirect.h" +#include "cpr/reserve_size.h" +#include "cpr/resolve.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include "cpr/ssl_ctx.h" +#include "cpr/ssl_options.h" +#include "cpr/status_codes.h" +#include "cpr/timeout.h" +#include "cpr/unix_socket.h" +#include "cpr/user_agent.h" +#include "cpr/util.h" +#include "cpr/verbose.h" + +#define CPR_LIBCURL_VERSION_NUM LIBCURL_VERSION_NUM + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cprtypes.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cprtypes.h new file mode 100644 index 0000000..65da738 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cprtypes.h @@ -0,0 +1,144 @@ +#ifndef CPR_CPR_TYPES_H +#define CPR_CPR_TYPES_H + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace cpr { + +/** + * Wrapper around "curl_off_t" to prevent applications from having to link against libcurl. + **/ +using cpr_off_t = curl_off_t; + +/** + * The argument type for progress functions, dependent on libcurl version + **/ +#if LIBCURL_VERSION_NUM < 0x072000 +using cpr_pf_arg_t = double; +#else +using cpr_pf_arg_t = cpr_off_t; +#endif + +template +class StringHolder { + public: + StringHolder() = default; + explicit StringHolder(std::string str) : str_(std::move(str)) {} + explicit StringHolder(std::string_view str) : str_(str) {} + explicit StringHolder(const char* str) : str_(str) {} + StringHolder(const char* str, size_t len) : str_(str, len) {} + StringHolder(const std::initializer_list args) { + str_ = std::accumulate(args.begin(), args.end(), str_); + } + StringHolder(const StringHolder& other) = default; + StringHolder(StringHolder&& old) noexcept = default; + virtual ~StringHolder() = default; + + StringHolder& operator=(StringHolder&& old) noexcept = default; + + StringHolder& operator=(const StringHolder& other) = default; + + explicit operator std::string() const { + return str_; + } + + T operator+(const char* rhs) const { + return T(str_ + rhs); + } + + T operator+(const std::string& rhs) const { + return T(str_ + rhs); + } + + T operator+(const StringHolder& rhs) const { + return T(str_ + rhs.str_); + } + + void operator+=(const char* rhs) { + str_ += rhs; + } + void operator+=(const std::string& rhs) { + str_ += rhs; + } + void operator+=(const StringHolder& rhs) { + str_ += rhs; + } + + bool operator==(const char* rhs) const { + return str_ == rhs; + } + bool operator==(const std::string& rhs) const { + return str_ == rhs; + } + bool operator==(const StringHolder& rhs) const { + return str_ == rhs.str_; + } + + bool operator!=(const char* rhs) const { + return str_.c_str() != rhs; + } + bool operator!=(const std::string& rhs) const { + return str_ != rhs; + } + bool operator!=(const StringHolder& rhs) const { + return str_ != rhs.str_; + } + + const std::string& str() { + return str_; + } + const std::string& str() const { + return str_; + } + const char* c_str() const { + return str_.c_str(); + } + const char* data() const { + return str_.data(); + } + + protected: + std::string str_{}; +}; + +template +std::ostream& operator<<(std::ostream& os, const StringHolder& s) { + os << s.str(); + return os; +} + +class Url : public StringHolder { + public: + Url() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Url(std::string url) : StringHolder(std::move(url)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Url(std::string_view url) : StringHolder(url) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Url(const char* url) : StringHolder(url) {} + Url(const char* str, size_t len) : StringHolder(std::string(str, len)) {} + Url(const std::initializer_list args) : StringHolder(args) {} + Url(const Url& other) = default; + Url(Url&& old) noexcept = default; + ~Url() override = default; + + Url& operator=(Url&& old) noexcept = default; + Url& operator=(const Url& other) = default; +}; + +struct CaseInsensitiveCompare { + bool operator()(const std::string& a, const std::string& b) const noexcept; +}; + +using Header = std::map; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cprver.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cprver.h new file mode 100644 index 0000000..aaa4f9f --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/cprver.h @@ -0,0 +1,30 @@ +#ifndef CPR_CPRVER_H +#define CPR_CPRVER_H + +/** + * CPR version as a string. + **/ +#define CPR_VERSION "1.10.5" + +/** + * CPR version split up into parts. + **/ +#define CPR_VERSION_MAJOR 1 +#define CPR_VERSION_MINOR 10 +#define CPR_VERSION_PATCH 5 + +/** + * CPR version as a single hex digit. + * it can be split up into three parts: + * 0xAABBCC + * AA: The current CPR major version number in a hex format. + * BB: The current CPR minor version number in a hex format. + * CC: The current CPR patch version number in a hex format. + * + * Examples: + * '0x010702' -> 01.07.02 -> CPR_VERSION: 1.7.2 + * '0xA13722' -> A1.37.22 -> CPR_VERSION: 161.55.34 + **/ +#define CPR_VERSION_NUM 0x10a05 + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/curl_container.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/curl_container.h new file mode 100644 index 0000000..c2409b2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/curl_container.h @@ -0,0 +1,51 @@ +#ifndef CURL_CONTAINER_H +#define CURL_CONTAINER_H + +#include +#include +#include +#include + +#include "cpr/curlholder.h" + + +namespace cpr { + +struct Parameter { + Parameter(std::string p_key, std::string p_value) : key{std::move(p_key)}, value{std::move(p_value)} {} + + std::string key; + std::string value; +}; + +struct Pair { + Pair(std::string p_key, std::string p_value) : key(std::move(p_key)), value(std::move(p_value)) {} + + std::string key; + std::string value; +}; + + +template +class CurlContainer { + public: + /** + * Enables or disables URL encoding for keys and values when calling GetContent(...). + **/ + bool encode = true; + + CurlContainer() = default; + CurlContainer(const std::initializer_list&); + + void Add(const std::initializer_list&); + void Add(const T&); + + const std::string GetContent(const CurlHolder&) const; + + protected: + std::vector containerList_; +}; + +} // namespace cpr + +#endif // diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/curlholder.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/curlholder.h new file mode 100644 index 0000000..a9e1dc8 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/curlholder.h @@ -0,0 +1,54 @@ +#ifndef CPR_CURL_HOLDER_H +#define CPR_CURL_HOLDER_H + +#include +#include +#include + +#include + +namespace cpr { +struct CurlHolder { + private: + /** + * Mutex for curl_easy_init(). + * curl_easy_init() is not thread save. + * References: + * https://curl.haxx.se/libcurl/c/curl_easy_init.html + * https://curl.haxx.se/libcurl/c/threadsafe.html + **/ + + // Avoids initalization order problems in a static build + static std::mutex& curl_easy_init_mutex_() { + static std::mutex curl_easy_init_mutex_; + return curl_easy_init_mutex_; + } + + public: + CURL* handle{nullptr}; + struct curl_slist* chunk{nullptr}; + struct curl_slist* resolveCurlList{nullptr}; + curl_mime* multipart{nullptr}; + std::array error{}; + + CurlHolder(); + CurlHolder(const CurlHolder& other) = default; + CurlHolder(CurlHolder&& old) noexcept = default; + ~CurlHolder(); + + CurlHolder& operator=(CurlHolder&& old) noexcept = default; + CurlHolder& operator=(const CurlHolder& other) = default; + + /** + * Uses curl_easy_escape(...) for escaping the given string. + **/ + std::string urlEncode(const std::string& s) const; + + /** + * Uses curl_easy_unescape(...) for unescaping the given string. + **/ + std::string urlDecode(const std::string& s) const; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/curlmultiholder.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/curlmultiholder.h new file mode 100644 index 0000000..ccd504b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/curlmultiholder.h @@ -0,0 +1,18 @@ +#ifndef CPR_CURLMULTIHOLDER_H +#define CPR_CURLMULTIHOLDER_H + +#include + +namespace cpr { + +class CurlMultiHolder { + public: + CurlMultiHolder(); + ~CurlMultiHolder(); + + CURLM* handle{nullptr}; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/error.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/error.h new file mode 100644 index 0000000..bb59a4c --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/error.h @@ -0,0 +1,53 @@ +#ifndef CPR_ERROR_H +#define CPR_ERROR_H + +#include +#include + +#include "cpr/cprtypes.h" +#include + +namespace cpr { + +enum class ErrorCode { + OK = 0, + CONNECTION_FAILURE, + EMPTY_RESPONSE, + HOST_RESOLUTION_FAILURE, + INTERNAL_ERROR, + INVALID_URL_FORMAT, + NETWORK_RECEIVE_ERROR, + NETWORK_SEND_FAILURE, + OPERATION_TIMEDOUT, + PROXY_RESOLUTION_FAILURE, + SSL_CONNECT_ERROR, + SSL_LOCAL_CERTIFICATE_ERROR, + SSL_REMOTE_CERTIFICATE_ERROR, + SSL_CACERT_ERROR, + GENERIC_SSL_ERROR, + UNSUPPORTED_PROTOCOL, + REQUEST_CANCELLED, + TOO_MANY_REDIRECTS, + UNKNOWN_ERROR = 1000, +}; + +class Error { + public: + ErrorCode code = ErrorCode::OK; + std::string message{}; + + Error() = default; + + Error(const std::int32_t& curl_code, std::string&& p_error_message) : code{getErrorCodeForCurlError(curl_code)}, message(std::move(p_error_message)) {} + + explicit operator bool() const { + return code != ErrorCode::OK; + } + + private: + static ErrorCode getErrorCodeForCurlError(std::int32_t curl_code); +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/file.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/file.h new file mode 100644 index 0000000..b39914a --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/file.h @@ -0,0 +1,59 @@ +#ifndef CPR_FILE_H +#define CPR_FILE_H + +#include +#include +#include + +#include + +namespace cpr { + +struct File { + explicit File(std::string p_filepath, const std::string& p_overriden_filename = {}) : filepath(std::move(p_filepath)), overriden_filename(p_overriden_filename) {} + + std::string filepath; + std::string overriden_filename; + + [[nodiscard]] bool hasOverridenFilename() const noexcept { + return !overriden_filename.empty(); + }; +}; + +class Files { + public: + Files() = default; + // NOLINTNEXTLINE(google-explicit-constructor) + Files(const File& p_file) : files{p_file} {}; + + Files(const Files& other) = default; + Files(Files&& old) noexcept = default; + + Files(const std::initializer_list& p_files) : files{p_files} {}; + Files(const std::initializer_list& p_filepaths); + + ~Files() noexcept = default; + + Files& operator=(const Files& other); + Files& operator=(Files&& old) noexcept; + + using iterator = std::vector::iterator; + using const_iterator = std::vector::const_iterator; + + iterator begin(); + iterator end(); + [[nodiscard]] const_iterator begin() const; + [[nodiscard]] const_iterator end() const; + [[nodiscard]] const_iterator cbegin() const; + [[nodiscard]] const_iterator cend() const; + void emplace_back(const File& file); + void push_back(const File& file); + void pop_back(); + + private: + std::vector files; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/filesystem.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/filesystem.h new file mode 100644 index 0000000..f296770 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/filesystem.h @@ -0,0 +1,26 @@ +#ifndef CPR_FILESYSTEM_H +#define CPR_FILESYSTEM_H + +// Include filesystem into the namespace "fs" from either "filesystem" or "experimental/filesystem" or "boost/filesystem" +#ifdef CPR_USE_BOOST_FILESYSTEM +#define BOOST_FILESYSTEM_VERSION 4 // Use the latest, with the closest behavior to std::filesystem. +#include +namespace cpr { +namespace fs = boost::filesystem; +} +// cppcheck-suppress preprocessorErrorDirective +#elif __has_include() +#include +namespace cpr { +namespace fs = std::filesystem; +} +#elif __has_include("experimental/filesystem") +#include +namespace cpr { +namespace fs = std::experimental::filesystem; +} +#else +#error "Failed to include header!" +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/http_version.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/http_version.h new file mode 100644 index 0000000..45b5028 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/http_version.h @@ -0,0 +1,67 @@ +#ifndef CPR_HTTP_VERSION_H +#define CPR_HTTP_VERSION_H + +#include + +namespace cpr { +enum class HttpVersionCode { + /** + * Let libcurl decide which version is the best. + **/ + VERSION_NONE, + /** + * Enforce HTTP 1.0 requests. + **/ + VERSION_1_0, + /** + * Enforce HTTP 1.1 requests. + **/ + VERSION_1_1, +#if LIBCURL_VERSION_NUM >= 0x072100 // 7.33.0 + /** + * Attempt HTTP 2.0 requests. + * Fallback to HTTP 1.1 if negotiation fails. + **/ + VERSION_2_0, +#endif +#if LIBCURL_VERSION_NUM >= 0x072F00 // 7.47.0 + /** + * Attempt HTTP 2.0 for HTTPS requests only. + * Fallback to HTTP 1.1 if negotiation fails. + * HTTP 1.1 will be used for HTTP connections. + **/ + VERSION_2_0_TLS, +#endif +#if LIBCURL_VERSION_NUM >= 0x073100 // 7.49.0 + /** + * Start HTTP 2.0 for HTTP requests. + * Requires prior knowledge that the server supports HTTP 2.0. + * For HTTPS requests we will negotiate the protocol version in the TLS handshake. + **/ + VERSION_2_0_PRIOR_KNOWLEDGE, +#endif +#if LIBCURL_VERSION_NUM >= 0x074200 // 7.66.0 + /** + * Attempt HTTP 3.0 requests. + * Requires prior knowledge that the server supports HTTP 3.0 since there is no gracefully downgrade. + * Fallback to HTTP 1.1 if negotiation fails. + **/ + VERSION_3_0 +#endif +}; + +class HttpVersion { + public: + /** + * The HTTP version that should be used by libcurl when initiating a HTTP(S) connection. + * Default: HttpVersionCode::VERSION_NONE + **/ + HttpVersionCode code = HttpVersionCode::VERSION_NONE; + + HttpVersion() = default; + explicit HttpVersion(HttpVersionCode _code) : code(_code) {} +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/interceptor.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/interceptor.h new file mode 100644 index 0000000..34cfe50 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/interceptor.h @@ -0,0 +1,74 @@ +#ifndef CPR_INTERCEPTOR_H +#define CPR_INTERCEPTOR_H + +#include "cpr/multiperform.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include + +namespace cpr { +class Interceptor { + public: + enum class ProceedHttpMethod { + GET_REQUEST = 0, + POST_REQUEST, + PUT_REQUEST, + DELETE_REQUEST, + PATCH_REQUEST, + HEAD_REQUEST, + OPTIONS_REQUEST, + DOWNLOAD_CALLBACK_REQUEST, + DOWNLOAD_FILE_REQUEST, + }; + + Interceptor() = default; + Interceptor(const Interceptor& other) = default; + Interceptor(Interceptor&& old) = default; + virtual ~Interceptor() = default; + + Interceptor& operator=(const Interceptor& other) = default; + Interceptor& operator=(Interceptor&& old) = default; + + virtual Response intercept(Session& session) = 0; + + protected: + static Response proceed(Session& session); + static Response proceed(Session& session, ProceedHttpMethod httpMethod); + static Response proceed(Session& session, ProceedHttpMethod httpMethod, std::ofstream& file); + static Response proceed(Session& session, ProceedHttpMethod httpMethod, const WriteCallback& write); +}; + +class InterceptorMulti { + public: + enum class ProceedHttpMethod { + GET_REQUEST = 0, + POST_REQUEST, + PUT_REQUEST, + DELETE_REQUEST, + PATCH_REQUEST, + HEAD_REQUEST, + OPTIONS_REQUEST, + DOWNLOAD_CALLBACK_REQUEST, + DOWNLOAD_FILE_REQUEST, + }; + + InterceptorMulti() = default; + InterceptorMulti(const InterceptorMulti& other) = default; + InterceptorMulti(InterceptorMulti&& old) = default; + virtual ~InterceptorMulti() = default; + + InterceptorMulti& operator=(const InterceptorMulti& other) = default; + InterceptorMulti& operator=(InterceptorMulti&& old) = default; + + virtual std::vector intercept(MultiPerform& multi) = 0; + + protected: + static std::vector proceed(MultiPerform& multi); + + static void PrepareDownloadSession(MultiPerform& multi, size_t sessions_index, const WriteCallback& write); +}; + +} // namespace cpr + + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/interface.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/interface.h new file mode 100644 index 0000000..b98940e --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/interface.h @@ -0,0 +1,32 @@ +#ifndef CPR_INTERFACE_H +#define CPR_INTERFACE_H + +#include +#include + +#include "cpr/cprtypes.h" + +namespace cpr { + +class Interface : public StringHolder { + public: + Interface() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Interface(std::string iface) : StringHolder(std::move(iface)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Interface(std::string_view iface) : StringHolder(iface) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Interface(const char* iface) : StringHolder(iface) {} + Interface(const char* str, size_t len) : StringHolder(str, len) {} + Interface(const std::initializer_list args) : StringHolder(args) {} + Interface(const Interface& other) = default; + Interface(Interface&& old) noexcept = default; + ~Interface() override = default; + + Interface& operator=(Interface&& old) noexcept = default; + Interface& operator=(const Interface& other) = default; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/limit_rate.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/limit_rate.h new file mode 100644 index 0000000..2b0e8a2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/limit_rate.h @@ -0,0 +1,18 @@ +#ifndef CPR_SPEED_LIMIT_H +#define CPR_SPEED_LIMIT_H + +#include + +namespace cpr { + +class LimitRate { + public: + LimitRate(const std::int64_t p_downrate, const std::int64_t p_uprate) : downrate(p_downrate), uprate(p_uprate) {} + + std::int64_t downrate = 0; + std::int64_t uprate = 0; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/local_port.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/local_port.h new file mode 100644 index 0000000..e853425 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/local_port.h @@ -0,0 +1,23 @@ +#ifndef CPR_LOCAL_PORT_H +#define CPR_LOCAL_PORT_H + +#include + +namespace cpr { + +class LocalPort { + public: + // NOLINTNEXTLINE(google-explicit-constructor) + LocalPort(const std::uint16_t p_localport) : localport_(p_localport) {} + + operator std::uint16_t() const { + return localport_; + } + + private: + std::uint16_t localport_ = 0; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/local_port_range.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/local_port_range.h new file mode 100644 index 0000000..cc2d7e2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/local_port_range.h @@ -0,0 +1,23 @@ +#ifndef CPR_LOCAL_PORT_RANGE_H +#define CPR_LOCAL_PORT_RANGE_H + +#include + +namespace cpr { + +class LocalPortRange { + public: + // NOLINTNEXTLINE(google-explicit-constructor) + LocalPortRange(const std::uint16_t p_localportrange) : localportrange_(p_localportrange) {} + + operator std::uint16_t() const { + return localportrange_; + } + + private: + std::uint16_t localportrange_ = 0; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/low_speed.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/low_speed.h new file mode 100644 index 0000000..ff77fd2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/low_speed.h @@ -0,0 +1,18 @@ +#ifndef CPR_LOW_SPEED_H +#define CPR_LOW_SPEED_H + +#include + +namespace cpr { + +class LowSpeed { + public: + LowSpeed(const std::int32_t p_limit, const std::int32_t p_time) : limit(p_limit), time(p_time) {} + + std::int32_t limit; + std::int32_t time; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/multipart.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/multipart.h new file mode 100644 index 0000000..3eaaea7 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/multipart.h @@ -0,0 +1,43 @@ +#ifndef CPR_MULTIPART_H +#define CPR_MULTIPART_H + +#include +#include +#include +#include +#include + +#include "buffer.h" +#include "file.h" + +namespace cpr { + +struct Part { + Part(const std::string& p_name, const std::string& p_value, const std::string& p_content_type = {}) : name{p_name}, value{p_value}, content_type{p_content_type}, is_file{false}, is_buffer{false} {} + Part(const std::string& p_name, const std::int32_t& p_value, const std::string& p_content_type = {}) : name{p_name}, value{std::to_string(p_value)}, content_type{p_content_type}, is_file{false}, is_buffer{false} {} + Part(const std::string& p_name, const Files& p_files, const std::string& p_content_type = {}) : name{p_name}, content_type{p_content_type}, is_file{true}, is_buffer{false}, files{p_files} {} + Part(const std::string& p_name, Files&& p_files, const std::string& p_content_type = {}) : name{p_name}, content_type{p_content_type}, is_file{true}, is_buffer{false}, files{p_files} {} + Part(const std::string& p_name, const Buffer& buffer, const std::string& p_content_type = {}) : name{p_name}, value{buffer.filename.string()}, content_type{p_content_type}, data{buffer.data}, datalen{buffer.datalen}, is_file{false}, is_buffer{true} {} + + std::string name; + // We don't use fs::path here, as this leads to problems using windows + std::string value; + std::string content_type; + Buffer::data_t data{nullptr}; + size_t datalen{0}; + bool is_file; + bool is_buffer; + + Files files; +}; + +class Multipart { + public: + Multipart(const std::initializer_list& parts); + + std::vector parts; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/multiperform.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/multiperform.h new file mode 100644 index 0000000..d9ab978 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/multiperform.h @@ -0,0 +1,137 @@ +#ifndef CPR_MULTIPERFORM_H +#define CPR_MULTIPERFORM_H + +#include "cpr/curlmultiholder.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include +#include +#include +#include +#include + +namespace cpr { + +class InterceptorMulti; + +class MultiPerform { + public: + enum class HttpMethod { + UNDEFINED = 0, + GET_REQUEST, + POST_REQUEST, + PUT_REQUEST, + DELETE_REQUEST, + PATCH_REQUEST, + HEAD_REQUEST, + OPTIONS_REQUEST, + DOWNLOAD_REQUEST, + }; + + MultiPerform(); + MultiPerform(const MultiPerform& other) = delete; + MultiPerform(MultiPerform&& old) = default; + ~MultiPerform(); + + MultiPerform& operator=(const MultiPerform& other) = delete; + MultiPerform& operator=(MultiPerform&& old) noexcept = default; + + std::vector Get(); + std::vector Delete(); + template + std::vector Download(DownloadArgTypes... args); + std::vector Put(); + std::vector Head(); + std::vector Options(); + std::vector Patch(); + std::vector Post(); + + std::vector Perform(); + template + std::vector PerformDownload(DownloadArgTypes... args); + + void AddSession(std::shared_ptr& session, HttpMethod method = HttpMethod::UNDEFINED); + void RemoveSession(const std::shared_ptr& session); + std::vector, HttpMethod>>& GetSessions(); + [[nodiscard]] const std::vector, HttpMethod>>& GetSessions() const; + + void AddInterceptor(const std::shared_ptr& pinterceptor); + + private: + // Interceptors should be able to call the private proceed() and PrepareDownloadSessions() functions + friend InterceptorMulti; + + void SetHttpMethod(HttpMethod method); + + void PrepareSessions(); + template + void PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg, DownloadArgTypes... args); + template + void PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg); + void PrepareDownloadSession(size_t sessions_index, std::ofstream& file); + void PrepareDownloadSession(size_t sessions_index, const WriteCallback& write); + + void PrepareGet(); + void PrepareDelete(); + void PreparePut(); + void PreparePatch(); + void PrepareHead(); + void PrepareOptions(); + void PreparePost(); + template + void PrepareDownload(DownloadArgTypes... args); + + std::vector intercept(); + std::vector proceed(); + std::vector MakeRequest(); + std::vector MakeDownloadRequest(); + + void DoMultiPerform(); + std::vector ReadMultiInfo(std::function&& complete_function); + + std::vector, HttpMethod>> sessions_; + std::unique_ptr multicurl_; + bool is_download_multi_perform{false}; + + std::queue> interceptors_; +}; + +template +void MultiPerform::PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg) { + PrepareDownloadSession(sessions_index, current_arg); +} + +template +void MultiPerform::PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg, DownloadArgTypes... args) { + PrepareDownloadSession(sessions_index, current_arg); + PrepareDownloadSessions(sessions_index + 1, args...); +} + + +template +void MultiPerform::PrepareDownload(DownloadArgTypes... args) { + SetHttpMethod(HttpMethod::DOWNLOAD_REQUEST); + PrepareDownloadSessions(0, args...); +} + +template +std::vector MultiPerform::Download(DownloadArgTypes... args) { + if (sizeof...(args) != sessions_.size()) { + throw std::invalid_argument("Number of download arguments has to match the number of sessions added to the multiperform!"); + } + PrepareDownload(args...); + return MakeDownloadRequest(); +} + +template +std::vector MultiPerform::PerformDownload(DownloadArgTypes... args) { + if (sizeof...(args) != sessions_.size()) { + throw std::invalid_argument("Number of download arguments has to match the number of sessions added to the multiperform!"); + } + PrepareDownloadSessions(0, args...); + return MakeDownloadRequest(); +} + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/parameters.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/parameters.h new file mode 100644 index 0000000..0e34d4d --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/parameters.h @@ -0,0 +1,18 @@ +#ifndef CPR_PARAMETERS_H +#define CPR_PARAMETERS_H + +#include + +#include "cpr/curl_container.h" + +namespace cpr { + +class Parameters : public CurlContainer { + public: + Parameters() = default; + Parameters(const std::initializer_list& parameters); +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/payload.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/payload.h new file mode 100644 index 0000000..686b540 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/payload.h @@ -0,0 +1,23 @@ +#ifndef CPR_PAYLOAD_H +#define CPR_PAYLOAD_H + +#include + +#include "cpr/curl_container.h" + + +namespace cpr { +class Payload : public CurlContainer { + public: + template + Payload(const It begin, const It end) { + for (It pair = begin; pair != end; ++pair) { + Add(*pair); + } + } + Payload(const std::initializer_list& pairs); +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/proxies.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/proxies.h new file mode 100644 index 0000000..6970442 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/proxies.h @@ -0,0 +1,23 @@ +#ifndef CPR_PROXIES_H +#define CPR_PROXIES_H + +#include +#include +#include + +namespace cpr { +class Proxies { + public: + Proxies() = default; + Proxies(const std::initializer_list>& hosts); + Proxies(const std::map& hosts); + + bool has(const std::string& protocol) const; + const std::string& operator[](const std::string& protocol); + + private: + std::map hosts_; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/proxyauth.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/proxyauth.h new file mode 100644 index 0000000..7e34764 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/proxyauth.h @@ -0,0 +1,43 @@ +#ifndef CPR_PROXYAUTH_H +#define CPR_PROXYAUTH_H + +#include +#include + +#include "cpr/auth.h" +#include "cpr/util.h" + +namespace cpr { +class EncodedAuthentication { + public: + EncodedAuthentication() : auth_string_{""} {} + EncodedAuthentication(std::string username, std::string password) : auth_string_{cpr::util::urlEncode(std::move(username)) + ":" + cpr::util::urlEncode(std::move(password))} {} + EncodedAuthentication(const EncodedAuthentication& other) = default; + EncodedAuthentication(EncodedAuthentication&& old) noexcept = default; + virtual ~EncodedAuthentication() noexcept; + + EncodedAuthentication& operator=(EncodedAuthentication&& old) noexcept = default; + EncodedAuthentication& operator=(const EncodedAuthentication& other) = default; + + const char* GetAuthString() const noexcept; + + protected: + std::string auth_string_; +}; + +class ProxyAuthentication { + public: + ProxyAuthentication() = default; + ProxyAuthentication(const std::initializer_list>& auths) : proxyAuth_{auths} {} + ProxyAuthentication(const std::map& auths) : proxyAuth_{auths} {} + + bool has(const std::string& protocol) const; + const char* operator[](const std::string& protocol); + + private: + std::map proxyAuth_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/range.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/range.h new file mode 100644 index 0000000..2c5a145 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/range.h @@ -0,0 +1,44 @@ +#ifndef CPR_RANGE_H +#define CPR_RANGE_H + +#include +#include + +namespace cpr { + +class Range { + public: + Range(const std::optional p_resume_from = std::nullopt, const std::optional p_finish_at = std::nullopt) { + resume_from = p_resume_from.value_or(0); + finish_at = p_finish_at.value_or(-1); + } + + std::int64_t resume_from; + std::int64_t finish_at; + + const std::string str() const { + std::string from_str = (resume_from < 0U) ? "" : std::to_string(resume_from); + std::string to_str = (finish_at < 0U) ? "" : std::to_string(finish_at); + return from_str + "-" + to_str; + } +}; + +class MultiRange { + public: + MultiRange(std::initializer_list rs) : ranges{rs} {} + + const std::string str() const { + std::string multi_range_string{}; + for (Range range : ranges) { + multi_range_string += ((multi_range_string.empty()) ? "" : ", ") + range.str(); + } + return multi_range_string; + } + + private: + std::vector ranges; +}; // namespace cpr + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/redirect.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/redirect.h new file mode 100644 index 0000000..32b4372 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/redirect.h @@ -0,0 +1,84 @@ +#ifndef CPR_REDIRECT_H +#define CPR_REDIRECT_H + +#include + +namespace cpr { +enum class PostRedirectFlags : uint8_t { + /** + * Respect RFC 7231 (section 6.4.2 to 6.4.4). + * Same as CURL_REDIR_POST_301 (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_301 = 0x1 << 0, + /** + * Maintain the request method after a 302 redirect. + * Same as CURL_REDIR_POST_302 (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_302 = 0x1 << 1, + /** + * Maintain the request method after a 303 redirect. + * Same as CURL_REDIR_POST_303 (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_303 = 0x1 << 2, + /** + * Default value. + * Convenience option to enable all flags. + * Same as CURL_REDIR_POST_ALL (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_ALL = POST_301 | POST_302 | POST_303, + /** + * * Convenience option to disable all flags. + **/ + NONE = 0x0 +}; + +PostRedirectFlags operator|(PostRedirectFlags lhs, PostRedirectFlags rhs); +PostRedirectFlags operator&(PostRedirectFlags lhs, PostRedirectFlags rhs); +PostRedirectFlags operator^(PostRedirectFlags lhs, PostRedirectFlags rhs); +PostRedirectFlags operator~(PostRedirectFlags flag); +PostRedirectFlags& operator|=(PostRedirectFlags& lhs, PostRedirectFlags rhs); +PostRedirectFlags& operator&=(PostRedirectFlags& lhs, PostRedirectFlags rhs); +PostRedirectFlags& operator^=(PostRedirectFlags& lhs, PostRedirectFlags rhs); +bool any(PostRedirectFlags flag); + +class Redirect { + public: + /** + * The maximum number of redirects to follow. + * 0: Refuse any redirects. + * -1: Infinite number of redirects. + * Default: 50 + * https://curl.se/libcurl/c/CURLOPT_MAXREDIRS.html + **/ + // NOLINTNEXTLINE (google-runtime-int) + long maximum{50L}; + /** + * Follow 3xx redirects. + * Default: true + * https://curl.se/libcurl/c/CURLOPT_FOLLOWLOCATION.html + **/ + bool follow{true}; + /** + * Continue to send authentication (user+password) credentials when following locations, even when hostname changed. + * Default: false + * https://curl.se/libcurl/c/CURLOPT_UNRESTRICTED_AUTH.html + **/ + bool cont_send_cred{false}; + /** + * Flags to control how to act after a redirect for a post request. + * Default: POST_ALL + **/ + PostRedirectFlags post_flags{PostRedirectFlags::POST_ALL}; + + Redirect() = default; + // NOLINTNEXTLINE (google-runtime-int) + Redirect(long p_maximum, bool p_follow, bool p_cont_send_cred, PostRedirectFlags p_post_flags) : maximum(p_maximum), follow(p_follow), cont_send_cred(p_cont_send_cred), post_flags(p_post_flags){}; + // NOLINTNEXTLINE (google-runtime-int) + explicit Redirect(long p_maximum) : maximum(p_maximum){}; + explicit Redirect(bool p_follow) : follow(p_follow){}; + Redirect(bool p_follow, bool p_cont_send_cred) : follow(p_follow), cont_send_cred(p_cont_send_cred){}; + explicit Redirect(PostRedirectFlags p_post_flags) : post_flags(p_post_flags){}; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/reserve_size.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/reserve_size.h new file mode 100644 index 0000000..5eae4c8 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/reserve_size.h @@ -0,0 +1,17 @@ +#ifndef CPR_RESERVE_SIZE_H +#define CPR_RESERVE_SIZE_H + +#include + +namespace cpr { + +class ReserveSize { + public: + ReserveSize(const size_t _size) : size(_size) {} + + size_t size = 0; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/resolve.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/resolve.h new file mode 100644 index 0000000..86a7c89 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/resolve.h @@ -0,0 +1,23 @@ +#ifndef CPR_RESOLVE_H +#define CPR_RESOLVE_H + +#include +#include + +namespace cpr { + class Resolve { + public: + std::string host; + std::string addr; + std::set ports; + + Resolve(const std::string& host_param, const std::string& addr_param, const std::set& ports_param = std::set{80U, 443U}): host(host_param), addr(addr_param), ports(ports_param) { + if (this->ports.empty()) { + this->ports.insert(80U); + this->ports.insert(443U); + } + } + }; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/response.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/response.h new file mode 100644 index 0000000..5c296da --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/response.h @@ -0,0 +1,58 @@ +#ifndef CPR_RESPONSE_H +#define CPR_RESPONSE_H + +#include +#include +#include +#include +#include +#include + +#include "cpr/cert_info.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/error.h" +#include "cpr/ssl_options.h" +#include "cpr/util.h" + +namespace cpr { + +class MultiPerform; + +class Response { + private: + friend MultiPerform; + std::shared_ptr curl_{nullptr}; + + public: + // Ignored here since libcurl uses a long for this. + // NOLINTNEXTLINE(google-runtime-int) + long status_code{}; + std::string text{}; + Header header{}; + Url url{}; + double elapsed{}; + Cookies cookies{}; + Error error{}; + std::string raw_header{}; + std::string status_line{}; + std::string reason{}; + cpr_off_t uploaded_bytes{}; + cpr_off_t downloaded_bytes{}; + // Ignored here since libcurl uses a long for this. + // NOLINTNEXTLINE(google-runtime-int) + long redirect_count{}; + + Response() = default; + Response(std::shared_ptr curl, std::string&& p_text, std::string&& p_header_string, Cookies&& p_cookies, Error&& p_error); + std::vector GetCertInfos(); + Response(const Response& other) = default; + Response(Response&& old) noexcept = default; + ~Response() noexcept = default; + + Response& operator=(Response&& old) noexcept = default; + Response& operator=(const Response& other) = default; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/session.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/session.h new file mode 100644 index 0000000..6b2b93e --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/session.h @@ -0,0 +1,308 @@ +#ifndef CPR_SESSION_H +#define CPR_SESSION_H + +#include +#include +#include +#include +#include +#include + +#include "cpr/accept_encoding.h" +#include "cpr/async_wrapper.h" +#include "cpr/auth.h" +#include "cpr/bearer.h" +#include "cpr/body.h" +#include "cpr/callback.h" +#include "cpr/connect_timeout.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/curlholder.h" +#include "cpr/http_version.h" +#include "cpr/interface.h" +#include "cpr/limit_rate.h" +#include "cpr/local_port.h" +#include "cpr/local_port_range.h" +#include "cpr/low_speed.h" +#include "cpr/multipart.h" +#include "cpr/parameters.h" +#include "cpr/payload.h" +#include "cpr/proxies.h" +#include "cpr/proxyauth.h" +#include "cpr/range.h" +#include "cpr/redirect.h" +#include "cpr/reserve_size.h" +#include "cpr/resolve.h" +#include "cpr/response.h" +#include "cpr/ssl_options.h" +#include "cpr/timeout.h" +#include "cpr/unix_socket.h" +#include "cpr/user_agent.h" +#include "cpr/util.h" +#include "cpr/verbose.h" + +namespace cpr { + +using AsyncResponse = AsyncWrapper; + +class Interceptor; +class MultiPerform; + +class Session : public std::enable_shared_from_this { + public: + Session(); + Session(const Session& other) = delete; + Session(Session&& old) = default; + + ~Session() = default; + + Session& operator=(Session&& old) noexcept = default; + Session& operator=(const Session& other) = delete; + + void SetUrl(const Url& url); + void SetParameters(const Parameters& parameters); + void SetParameters(Parameters&& parameters); + void SetHeader(const Header& header); + void UpdateHeader(const Header& header); + void SetTimeout(const Timeout& timeout); + void SetConnectTimeout(const ConnectTimeout& timeout); + void SetAuth(const Authentication& auth); +// Only supported with libcurl >= 7.61.0. +// As an alternative use SetHeader and add the token manually. +#if LIBCURL_VERSION_NUM >= 0x073D00 + void SetBearer(const Bearer& token); +#endif + void SetUserAgent(const UserAgent& ua); + void SetPayload(Payload&& payload); + void SetPayload(const Payload& payload); + void SetProxies(Proxies&& proxies); + void SetProxies(const Proxies& proxies); + void SetProxyAuth(ProxyAuthentication&& proxy_auth); + void SetProxyAuth(const ProxyAuthentication& proxy_auth); + void SetMultipart(Multipart&& multipart); + void SetMultipart(const Multipart& multipart); + void SetRedirect(const Redirect& redirect); + void SetCookies(const Cookies& cookies); + void SetBody(Body&& body); + void SetBody(const Body& body); + void SetLowSpeed(const LowSpeed& low_speed); + void SetVerifySsl(const VerifySsl& verify); + void SetUnixSocket(const UnixSocket& unix_socket); + void SetSslOptions(const SslOptions& options); + void SetReadCallback(const ReadCallback& read); + void SetHeaderCallback(const HeaderCallback& header); + void SetWriteCallback(const WriteCallback& write); + void SetProgressCallback(const ProgressCallback& progress); + void SetDebugCallback(const DebugCallback& debug); + void SetVerbose(const Verbose& verbose); + void SetInterface(const Interface& iface); + void SetLocalPort(const LocalPort& local_port); + void SetLocalPortRange(const LocalPortRange& local_port_range); + void SetHttpVersion(const HttpVersion& version); + void SetRange(const Range& range); + void SetResolve(const Resolve& resolve); + void SetResolves(const std::vector& resolves); + void SetMultiRange(const MultiRange& multi_range); + void SetReserveSize(const ReserveSize& reserve_size); + void SetAcceptEncoding(const AcceptEncoding& accept_encoding); + void SetAcceptEncoding(AcceptEncoding&& accept_encoding); + void SetLimitRate(const LimitRate& limit_rate); + + // For cancellable requests + void SetCancellationParam(std::shared_ptr param); + + // Used in templated functions + void SetOption(const Url& url); + void SetOption(const Parameters& parameters); + void SetOption(Parameters&& parameters); + void SetOption(const Header& header); + void SetOption(const Timeout& timeout); + void SetOption(const ConnectTimeout& timeout); + void SetOption(const Authentication& auth); +// Only supported with libcurl >= 7.61.0. +// As an alternative use SetHeader and add the token manually. +#if LIBCURL_VERSION_NUM >= 0x073D00 + void SetOption(const Bearer& auth); +#endif + void SetOption(const UserAgent& ua); + void SetOption(Payload&& payload); + void SetOption(const Payload& payload); + void SetOption(const LimitRate& limit_rate); + void SetOption(Proxies&& proxies); + void SetOption(const Proxies& proxies); + void SetOption(ProxyAuthentication&& proxy_auth); + void SetOption(const ProxyAuthentication& proxy_auth); + void SetOption(Multipart&& multipart); + void SetOption(const Multipart& multipart); + void SetOption(const Redirect& redirect); + void SetOption(const Cookies& cookies); + void SetOption(Body&& body); + void SetOption(const Body& body); + void SetOption(const ReadCallback& read); + void SetOption(const HeaderCallback& header); + void SetOption(const WriteCallback& write); + void SetOption(const ProgressCallback& progress); + void SetOption(const DebugCallback& debug); + void SetOption(const LowSpeed& low_speed); + void SetOption(const VerifySsl& verify); + void SetOption(const Verbose& verbose); + void SetOption(const UnixSocket& unix_socket); + void SetOption(const SslOptions& options); + void SetOption(const Interface& iface); + void SetOption(const LocalPort& local_port); + void SetOption(const LocalPortRange& local_port_range); + void SetOption(const HttpVersion& version); + void SetOption(const Range& range); + void SetOption(const MultiRange& multi_range); + void SetOption(const ReserveSize& reserve_size); + void SetOption(const AcceptEncoding& accept_encoding); + void SetOption(AcceptEncoding&& accept_encoding); + void SetOption(const Resolve& resolve); + void SetOption(const std::vector& resolves); + + cpr_off_t GetDownloadFileLength(); + /** + * Attempt to preallocate enough memory for specified number of characters in the response string. + * Pass 0 to disable this behavior and let the response string be allocated dynamically on demand. + * + * Example: + * cpr::Session session; + * session.SetUrl(cpr::Url{"http://xxx/file"}); + * session.ResponseStringReserve(1024 * 512); // Reserve space for at least 1024 * 512 characters + * cpr::Response r = session.Get(); + **/ + void ResponseStringReserve(size_t size); + Response Delete(); + Response Download(const WriteCallback& write); + Response Download(std::ofstream& file); + Response Get(); + Response Head(); + Response Options(); + Response Patch(); + Response Post(); + Response Put(); + + AsyncResponse GetAsync(); + AsyncResponse DeleteAsync(); + AsyncResponse DownloadAsync(const WriteCallback& write); + AsyncResponse DownloadAsync(std::ofstream& file); + AsyncResponse HeadAsync(); + AsyncResponse OptionsAsync(); + AsyncResponse PatchAsync(); + AsyncResponse PostAsync(); + AsyncResponse PutAsync(); + + template + auto GetCallback(Then then); + template + auto PostCallback(Then then); + template + auto PutCallback(Then then); + template + auto HeadCallback(Then then); + template + auto DeleteCallback(Then then); + template + auto OptionsCallback(Then then); + template + auto PatchCallback(Then then); + + std::shared_ptr GetCurlHolder(); + std::string GetFullRequestUrl(); + + void PrepareDelete(); + void PrepareGet(); + void PrepareHead(); + void PrepareOptions(); + void PreparePatch(); + void PreparePost(); + void PreparePut(); + void PrepareDownload(const WriteCallback& write); + void PrepareDownload(std::ofstream& file); + Response Complete(CURLcode curl_error); + Response CompleteDownload(CURLcode curl_error); + + void AddInterceptor(const std::shared_ptr& pinterceptor); + + private: + // Interceptors should be able to call the private proceed() function + friend Interceptor; + friend MultiPerform; + + + bool hasBodyOrPayload_{false}; + bool chunkedTransferEncoding_{false}; + std::shared_ptr curl_; + Url url_; + Parameters parameters_; + Proxies proxies_; + ProxyAuthentication proxyAuth_; + Header header_; + AcceptEncoding acceptEncoding_; + /** + * Will be set by the read callback. + * Ensures that the "Transfer-Encoding" is set to "chunked", if not overriden in header_. + **/ + ReadCallback readcb_; + HeaderCallback headercb_; + WriteCallback writecb_; + ProgressCallback progresscb_; + DebugCallback debugcb_; + CancellationCallback cancellationcb_; + + size_t response_string_reserve_size_{0}; + std::string response_string_; + std::string header_string_; + std::queue> interceptors_; + bool isUsedInMultiPerform{false}; + bool isCancellable{false}; + + Response makeDownloadRequest(); + Response makeRequest(); + Response proceed(); + Response intercept(); + void prepareCommon(); + void prepareCommonDownload(); + void SetHeaderInternal(); + std::shared_ptr GetSharedPtrFromThis(); + CURLcode DoEasyPerform(); +}; + +template +auto Session::GetCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Get()); }, std::move(then)); +} + +template +auto Session::PostCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Post()); }, std::move(then)); +} + +template +auto Session::PutCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Put()); }, std::move(then)); +} + +template +auto Session::HeadCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Head()); }, std::move(then)); +} + +template +auto Session::DeleteCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Delete()); }, std::move(then)); +} + +template +auto Session::OptionsCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Options()); }, std::move(then)); +} + +template +auto Session::PatchCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Patch()); }, std::move(then)); +} + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/singleton.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/singleton.h new file mode 100644 index 0000000..e2ea13b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/singleton.h @@ -0,0 +1,47 @@ +#ifndef CPR_SINGLETON_H +#define CPR_SINGLETON_H + +#include + +#ifndef CPR_DISABLE_COPY +#define CPR_DISABLE_COPY(Class) \ + Class(const Class&) = delete; \ + Class& operator=(const Class&) = delete; +#endif + +#ifndef CPR_SINGLETON_DECL +#define CPR_SINGLETON_DECL(Class) \ + public: \ + static Class* GetInstance(); \ + static void ExitInstance(); \ + private: \ + CPR_DISABLE_COPY(Class) \ + static Class* s_pInstance; \ + static std::mutex s_mutex; +#endif + +#ifndef CPR_SINGLETON_IMPL +#define CPR_SINGLETON_IMPL(Class) \ + Class* Class::s_pInstance = nullptr; \ + std::mutex Class::s_mutex; \ + Class* Class::GetInstance() { \ + if (s_pInstance == nullptr) { \ + s_mutex.lock(); \ + if (s_pInstance == nullptr) { \ + s_pInstance = new Class; \ + } \ + s_mutex.unlock(); \ + } \ + return s_pInstance; \ + } \ + void Class::ExitInstance() { \ + s_mutex.lock(); \ + if (s_pInstance) { \ + delete s_pInstance; \ + s_pInstance = nullptr; \ + } \ + s_mutex.unlock(); \ + } +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/ssl_ctx.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/ssl_ctx.h new file mode 100644 index 0000000..d495fb2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/ssl_ctx.h @@ -0,0 +1,26 @@ +#ifndef CPR_SSL_CTX_H +#define CPR_SSL_CTX_H + +#include "cpr/ssl_options.h" +#include + +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION + +namespace cpr { + +/** + * This callback function loads a CA certificate from raw_cert_buf and gets called by libcurl + * just before the initialization of an SSL connection. + * The raw_cert_buf argument is set with the CURLOPT_SSL_CTX_DATA option and has to be a nul + * terminated buffer. + * + * Sources: https://curl.se/libcurl/c/CURLOPT_SSL_CTX_FUNCTION.html + * https://curl.se/libcurl/c/CURLOPT_SSL_CTX_DATA.html + */ +CURLcode sslctx_function_load_ca_cert_from_buffer(CURL* curl, void* sslctx, void* raw_cert_buf); + +} // Namespace cpr + +#endif + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/ssl_options.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/ssl_options.h new file mode 100644 index 0000000..dfd38ad --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/ssl_options.h @@ -0,0 +1,622 @@ +#ifndef CPR_SSLOPTIONS_H +#define CPR_SSLOPTIONS_H + +#include +#include +#include + +#include +#include + +#include "cpr/util.h" +#include + +#define __LIBCURL_VERSION_GTE(major, minor) ((LIBCURL_VERSION_MAJOR > (major)) || ((LIBCURL_VERSION_MAJOR == (major)) && (LIBCURL_VERSION_MINOR >= (minor)))) +#define __LIBCURL_VERSION_LT(major, minor) ((LIBCURL_VERSION_MAJOR < (major)) || ((LIBCURL_VERSION_MAJOR == (major)) && (LIBCURL_VERSION_MINOR < (minor)))) + +#ifndef SUPPORT_ALPN +#define SUPPORT_ALPN __LIBCURL_VERSION_GTE(7, 36) +#endif +#ifndef SUPPORT_NPN +#define SUPPORT_NPN __LIBCURL_VERSION_GTE(7, 36) && __LIBCURL_VERSION_LT(7, 86) +#endif + +#ifndef SUPPORT_SSLv2 +#define SUPPORT_SSLv2 __LIBCURL_VERSION_LT(7, 19) +#endif +#ifndef SUPPORT_SSLv3 +#define SUPPORT_SSLv3 __LIBCURL_VERSION_LT(7, 39) +#endif +#ifndef SUPPORT_TLSv1_0 +#define SUPPORT_TLSv1_0 __LIBCURL_VERSION_GTE(7, 34) +#endif +#ifndef SUPPORT_TLSv1_1 +#define SUPPORT_TLSv1_1 __LIBCURL_VERSION_GTE(7, 34) +#endif +#ifndef SUPPORT_TLSv1_2 +#define SUPPORT_TLSv1_2 __LIBCURL_VERSION_GTE(7, 34) +#endif +#ifndef SUPPORT_TLSv1_3 +#define SUPPORT_TLSv1_3 __LIBCURL_VERSION_GTE(7, 52) +#endif +#ifndef SUPPORT_MAX_TLS_VERSION +#define SUPPORT_MAX_TLS_VERSION __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_MAX_TLSv1_1 +#define SUPPORT_MAX_TLSv1_1 __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_MAX_TLSv1_2 +#define SUPPORT_MAX_TLSv1_2 __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_MAX_TLSv1_3 +#define SUPPORT_MAX_TLSv1_3 __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_TLSv13_CIPHERS +#define SUPPORT_TLSv13_CIPHERS __LIBCURL_VERSION_GTE(7, 61) +#endif +#ifndef SUPPORT_SESSIONID_CACHE +#define SUPPORT_SESSIONID_CACHE __LIBCURL_VERSION_GTE(7, 16) +#endif +#ifndef SUPPORT_SSL_FALSESTART +#define SUPPORT_SSL_FALSESTART __LIBCURL_VERSION_GTE(7, 42) +#endif +#ifndef SUPPORT_SSL_NO_REVOKE +#define SUPPORT_SSL_NO_REVOKE __LIBCURL_VERSION_GTE(7, 44) +#endif +#ifndef SUPPORT_CURLOPT_SSLKEY_BLOB +#define SUPPORT_CURLOPT_SSLKEY_BLOB __LIBCURL_VERSION_GTE(7, 71) +#endif +#ifndef SUPPORT_CURLOPT_SSL_CTX_FUNCTION +#define SUPPORT_CURLOPT_SSL_CTX_FUNCTION __LIBCURL_VERSION_GTE(7, 11) +#endif + +namespace cpr { + +class VerifySsl { + public: + VerifySsl() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifySsl(bool p_verify) : verify(p_verify) {} + + explicit operator bool() const { + return verify; + } + + bool verify = true; +}; + +namespace ssl { + +// set SSL client certificate +class CertFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CertFile(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + virtual ~CertFile() = default; + + const fs::path filename; + + virtual const char* GetCertType() const { + return "PEM"; + } +}; + +using PemCert = CertFile; + +class DerCert : public CertFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + DerCert(fs::path&& p_filename) : CertFile(std::move(p_filename)) {} + + virtual ~DerCert() = default; + + const char* GetCertType() const override { + return "DER"; + } +}; + +// specify private keyfile for TLS and SSL client cert +class KeyFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + KeyFile(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + template + KeyFile(FileType&& p_filename, PassType p_password) : filename(std::forward(p_filename)), password(std::move(p_password)) {} + + virtual ~KeyFile() { + util::secureStringClear(password); + } + + fs::path filename; + std::string password; + + virtual const char* GetKeyType() const { + return "PEM"; + } +}; + +#if SUPPORT_CURLOPT_SSLKEY_BLOB +class KeyBlob { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + KeyBlob(std::string&& p_blob) : blob(std::move(p_blob)) {} + + template + KeyBlob(BlobType&& p_blob, PassType p_password) : blob(std::forward(p_blob)), password(std::move(p_password)) {} + + virtual ~KeyBlob() { + util::secureStringClear(password); + } + + std::string blob; + std::string password; + + virtual const char* GetKeyType() const { + return "PEM"; + } +}; +#endif + +using PemKey = KeyFile; + +class DerKey : public KeyFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + DerKey(fs::path&& p_filename) : KeyFile(std::move(p_filename)) {} + + template + DerKey(FileType&& p_filename, PassType p_password) : KeyFile(std::forward(p_filename), std::move(p_password)) {} + + virtual ~DerKey() = default; + + const char* GetKeyType() const override { + return "DER"; + } +}; + +class PinnedPublicKey { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + PinnedPublicKey(std::string&& p_pinned_public_key) : pinned_public_key(std::move(p_pinned_public_key)) {} + + const std::string pinned_public_key; +}; + +#if SUPPORT_ALPN +// This option enables/disables ALPN in the SSL handshake (if the SSL backend libcurl is built to +// use supports it), which can be used to negotiate http2. +class ALPN { + public: + ALPN() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ALPN(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; +#endif // SUPPORT_ALPN + +#if SUPPORT_NPN +// This option enables/disables NPN in the SSL handshake (if the SSL backend libcurl is built to +// use supports it), which can be used to negotiate http2. +class NPN { + public: + NPN() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + NPN(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; +#endif // SUPPORT_NPN + +// This option determines whether libcurl verifies that the server cert is for the server it is +// known as. +class VerifyHost { + public: + VerifyHost() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifyHost(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; + +// This option determines whether libcurl verifies the authenticity of the peer's certificate. +class VerifyPeer { + public: + VerifyPeer() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifyPeer(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; + +// This option determines whether libcurl verifies the status of the server cert using the +// "Certificate Status Request" TLS extension (aka. OCSP stapling). +class VerifyStatus { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifyStatus(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = false; +}; + +// TLS v1.0 or later +struct TLSv1 {}; +#if SUPPORT_SSLv2 +// SSL v2 (but not SSLv3) +struct SSLv2 {}; +#endif +#if SUPPORT_SSLv3 +// SSL v3 (but not SSLv2) +struct SSLv3 {}; +#endif +#if SUPPORT_TLSv1_0 +// TLS v1.0 or later (Added in 7.34.0) +struct TLSv1_0 {}; +#endif +#if SUPPORT_TLSv1_1 +// TLS v1.1 or later (Added in 7.34.0) +struct TLSv1_1 {}; +#endif +#if SUPPORT_TLSv1_2 +// TLS v1.2 or later (Added in 7.34.0) +struct TLSv1_2 {}; +#endif +#if SUPPORT_TLSv1_3 +// TLS v1.3 or later (Added in 7.52.0) +struct TLSv1_3 {}; +#endif +#if SUPPORT_MAX_TLS_VERSION +// The flag defines the maximum supported TLS version by libcurl, or the default value from the SSL +// library is used. +struct MaxTLSVersion {}; +#endif +#if SUPPORT_MAX_TLSv1_0 +// The flag defines maximum supported TLS version as TLSv1.0. (Added in 7.54.0) +struct MaxTLSv1_0 {}; +#endif +#if SUPPORT_MAX_TLSv1_1 +// The flag defines maximum supported TLS version as TLSv1.1. (Added in 7.54.0) +struct MaxTLSv1_1 {}; +#endif +#if SUPPORT_MAX_TLSv1_2 +// The flag defines maximum supported TLS version as TLSv1.2. (Added in 7.54.0) +struct MaxTLSv1_2 {}; +#endif +#if SUPPORT_MAX_TLSv1_3 +// The flag defines maximum supported TLS version as TLSv1.3. (Added in 7.54.0) +struct MaxTLSv1_3 {}; +#endif + +// path to Certificate Authority (CA) bundle +class CaInfo { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CaInfo(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + fs::path filename; +}; + +// specify directory holding CA certificates +class CaPath { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CaPath(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + fs::path filename; +}; + +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION +class CaBuffer { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CaBuffer(std::string&& p_buffer) : buffer(std::move(p_buffer)) {} + + const std::string buffer; +}; +#endif + +// specify a Certificate Revocation List file +class Crl { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Crl(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + fs::path filename; +}; + +// specify ciphers to use for TLS +class Ciphers { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Ciphers(std::string&& p_ciphers) : ciphers(std::move(p_ciphers)) {} + + std::string ciphers; +}; + +#if SUPPORT_TLSv13_CIPHERS +// specify ciphers suites to use for TLS 1.3 +class TLS13_Ciphers { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + TLS13_Ciphers(std::string&& p_ciphers) : ciphers(std::move(p_ciphers)) {} + + std::string ciphers; +}; +#endif + +#if SUPPORT_SESSIONID_CACHE +// enable/disable use of the SSL session-ID cache +class SessionIdCache { + public: + SessionIdCache() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + SessionIdCache(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; +#endif + +#if SUPPORT_SSL_FALSESTART +class SslFastStart { + public: + SslFastStart() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + SslFastStart(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = false; +}; +#endif + +class NoRevoke { + public: + NoRevoke() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + NoRevoke(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = false; +}; + +} // namespace ssl + +struct SslOptions { + // We don't use fs::path here, as this leads to problems using windows + std::string cert_file; + std::string cert_type; + // We don't use fs::path here, as this leads to problems using windows + std::string key_file; +#if SUPPORT_CURLOPT_SSLKEY_BLOB + std::string key_blob; +#endif + std::string key_type; + std::string key_pass; + std::string pinned_public_key; +#if SUPPORT_ALPN + bool enable_alpn = true; +#endif // SUPPORT_ALPN +#if SUPPORT_NPN + bool enable_npn = true; +#endif // SUPPORT_ALPN + bool verify_host = true; + bool verify_peer = true; + bool verify_status = false; + int ssl_version = CURL_SSLVERSION_DEFAULT; +#if SUPPORT_SSL_NO_REVOKE + bool ssl_no_revoke = false; +#endif +#if SUPPORT_MAX_TLS_VERSION + int max_version = CURL_SSLVERSION_MAX_DEFAULT; +#endif + // We don't use fs::path here, as this leads to problems using windows + std::string ca_info; + // We don't use fs::path here, as this leads to problems using windows + std::string ca_path; +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION + std::string ca_buffer; +#endif + // We don't use fs::path here, as this leads to problems using windows + std::string crl_file; + std::string ciphers; +#if SUPPORT_TLSv13_CIPHERS + std::string tls13_ciphers; +#endif +#if SUPPORT_SESSIONID_CACHE + bool session_id_cache = true; +#endif + + ~SslOptions() noexcept { +#if SUPPORT_CURLOPT_SSLKEY_BLOB + util::secureStringClear(key_blob); +#endif + util::secureStringClear(key_pass); + } + + void SetOption(const ssl::CertFile& opt) { + cert_file = opt.filename.string(); + cert_type = opt.GetCertType(); + } + void SetOption(const ssl::KeyFile& opt) { + key_file = opt.filename.string(); + key_type = opt.GetKeyType(); + key_pass = opt.password; + } +#if SUPPORT_CURLOPT_SSLKEY_BLOB + void SetOption(const ssl::KeyBlob& opt) { + key_blob = opt.blob; + key_type = opt.GetKeyType(); + key_pass = opt.password; + } +#endif + void SetOption(const ssl::PinnedPublicKey& opt) { + pinned_public_key = opt.pinned_public_key; + } + +#if SUPPORT_ALPN + void SetOption(const ssl::ALPN& opt) { + enable_alpn = opt.enabled; + } +#endif // SUPPORT_ALPN +#if SUPPORT_NPN + void SetOption(const ssl::NPN& opt) { + enable_npn = opt.enabled; + } +#endif // SUPPORT_NPN + void SetOption(const ssl::VerifyHost& opt) { + verify_host = opt.enabled; + } + void SetOption(const ssl::VerifyPeer& opt) { + verify_peer = opt.enabled; + } + void SetOption(const ssl::VerifyStatus& opt) { + verify_status = opt.enabled; + } + void SetOption(const ssl::TLSv1& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1; + } +#if SUPPORT_SSL_NO_REVOKE + void SetOption(const ssl::NoRevoke& opt) { + ssl_no_revoke = opt.enabled; + } +#endif +#if SUPPORT_SSLv2 + void SetOption(const ssl::SSLv2& /*opt*/) { + ssl_version = CURL_SSLVERSION_SSLv2; + } +#endif +#if SUPPORT_SSLv3 + void SetOption(const ssl::SSLv3& /*opt*/) { + ssl_version = CURL_SSLVERSION_SSLv3; + } +#endif +#if SUPPORT_TLSv1_0 + void SetOption(const ssl::TLSv1_0& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_0; + } +#endif +#if SUPPORT_TLSv1_1 + void SetOption(const ssl::TLSv1_1& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_1; + } +#endif +#if SUPPORT_TLSv1_2 + void SetOption(const ssl::TLSv1_2& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_2; + } +#endif +#if SUPPORT_TLSv1_3 + void SetOption(const ssl::TLSv1_3& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_3; + } +#endif +#if SUPPORT_MAX_TLS_VERSION + void SetOption(const ssl::MaxTLSVersion& /*opt*/) { + max_version = CURL_SSLVERSION_DEFAULT; + } +#endif +#if SUPPORT_MAX_TLSv1_0 + void SetOption(const ssl::MaxTLSv1_0& opt) { + max_version = CURL_SSLVERSION_MAX_TLSv1_0; + } +#endif +#if SUPPORT_MAX_TLSv1_1 + void SetOption(const ssl::MaxTLSv1_1& /*opt*/) { + max_version = CURL_SSLVERSION_MAX_TLSv1_1; + } +#endif +#if SUPPORT_MAX_TLSv1_2 + void SetOption(const ssl::MaxTLSv1_2& /*opt*/) { + max_version = CURL_SSLVERSION_MAX_TLSv1_2; + } +#endif +#if SUPPORT_MAX_TLSv1_3 + void SetOption(const ssl::MaxTLSv1_3& /*opt*/) { + max_version = CURL_SSLVERSION_MAX_TLSv1_3; + } +#endif + void SetOption(const ssl::CaInfo& opt) { + ca_info = opt.filename.string(); + } + void SetOption(const ssl::CaPath& opt) { + ca_path = opt.filename.string(); + } +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION + void SetOption(const ssl::CaBuffer& opt) { + ca_buffer = opt.buffer; + } +#endif + void SetOption(const ssl::Crl& opt) { + crl_file = opt.filename.string(); + } + void SetOption(const ssl::Ciphers& opt) { + ciphers = opt.ciphers; + } +#if SUPPORT_TLSv13_CIPHERS + void SetOption(const ssl::TLS13_Ciphers& opt) { + tls13_ciphers = opt.ciphers; + } +#endif +#if SUPPORT_SESSIONID_CACHE + void SetOption(const ssl::SessionIdCache& opt) { + session_id_cache = opt.enabled; + } +#endif +}; + +namespace priv { + +template +void set_ssl_option(SslOptions& opts, T&& t) { + opts.SetOption(std::forward(t)); +} + +template +void set_ssl_option(SslOptions& opts, T&& t, Ts&&... ts) { + set_ssl_option(opts, std::forward(t)); + set_ssl_option(opts, std::move(ts)...); +} + +} // namespace priv + +template +SslOptions Ssl(Ts&&... ts) { + SslOptions opts; + priv::set_ssl_option(opts, std::move(ts)...); + return opts; +} + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/status_codes.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/status_codes.h new file mode 100644 index 0000000..6c7acd6 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/status_codes.h @@ -0,0 +1,100 @@ +#ifndef _CPR_STATUS_CODES +#define _CPR_STATUS_CODES +#include +namespace cpr { +namespace status { +// Information responses +constexpr std::int32_t HTTP_CONTINUE = 100; +constexpr std::int32_t HTTP_SWITCHING_PROTOCOL = 101; +constexpr std::int32_t HTTP_PROCESSING = 102; +constexpr std::int32_t HTTP_EARLY_HINTS = 103; +// Successful responses +constexpr std::int32_t HTTP_OK = 200; +constexpr std::int32_t HTTP_CREATED = 201; +constexpr std::int32_t HTTP_ACCEPTED = 202; +constexpr std::int32_t HTTP_NON_AUTHORITATIVE_INFORMATION = 203; +constexpr std::int32_t HTTP_NO_CONTENT = 204; +constexpr std::int32_t HTTP_RESET_CONTENT = 205; +constexpr std::int32_t HTTP_PARTIAL_CONTENT = 206; +constexpr std::int32_t HTTP_MULTI_STATUS = 207; +constexpr std::int32_t HTTP_ALREADY_REPORTED = 208; +constexpr std::int32_t HTTP_IM_USED = 226; +// Redirection messages +constexpr std::int32_t HTTP_MULTIPLE_CHOICE = 300; +constexpr std::int32_t HTTP_MOVED_PERMANENTLY = 301; +constexpr std::int32_t HTTP_FOUND = 302; +constexpr std::int32_t HTTP_SEE_OTHER = 303; +constexpr std::int32_t HTTP_NOT_MODIFIED = 304; +constexpr std::int32_t HTTP_USE_PROXY = 305; +constexpr std::int32_t HTTP_UNUSED = 306; +constexpr std::int32_t HTTP_TEMPORARY_REDIRECT = 307; +constexpr std::int32_t HTTP_PERMANENT_REDIRECT = 308; +// Client error responses +constexpr std::int32_t HTTP_BAD_REQUEST = 400; +constexpr std::int32_t HTTP_UNAUTHORIZED = 401; +constexpr std::int32_t HTTP_PAYMENT_REQUIRED = 402; +constexpr std::int32_t HTTP_FORBIDDEN = 403; +constexpr std::int32_t HTTP_NOT_FOUND = 404; +constexpr std::int32_t HTTP_METHOD_NOT_ALLOWED = 405; +constexpr std::int32_t HTTP_NOT_ACCEPTABLE = 406; +constexpr std::int32_t HTTP_PROXY_AUTHENTICATION_REQUIRED = 407; +constexpr std::int32_t HTTP_REQUEST_TIMEOUT = 408; +constexpr std::int32_t HTTP_CONFLICT = 409; +constexpr std::int32_t HTTP_GONE = 410; +constexpr std::int32_t HTTP_LENGTH_REQUIRED = 411; +constexpr std::int32_t HTTP_PRECONDITION_FAILED = 412; +constexpr std::int32_t HTTP_PAYLOAD_TOO_LARGE = 413; +constexpr std::int32_t HTTP_URI_TOO_LONG = 414; +constexpr std::int32_t HTTP_UNSUPPORTED_MEDIA_TYPE = 415; +constexpr std::int32_t HTTP_REQUESTED_RANGE_NOT_SATISFIABLE = 416; +constexpr std::int32_t HTTP_EXPECTATION_FAILED = 417; +constexpr std::int32_t HTTP_IM_A_TEAPOT = 418; +constexpr std::int32_t HTTP_MISDIRECTED_REQUEST = 421; +constexpr std::int32_t HTTP_UNPROCESSABLE_ENTITY = 422; +constexpr std::int32_t HTTP_LOCKED = 423; +constexpr std::int32_t HTTP_FAILED_DEPENDENCY = 424; +constexpr std::int32_t HTTP_TOO_EARLY = 425; +constexpr std::int32_t HTTP_UPGRADE_REQUIRED = 426; +constexpr std::int32_t HTTP_PRECONDITION_REQUIRED = 428; +constexpr std::int32_t HTTP_TOO_MANY_REQUESTS = 429; +constexpr std::int32_t HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431; +constexpr std::int32_t HTTP_UNAVAILABLE_FOR_LEGAL_REASONS = 451; +// Server response errors +constexpr std::int32_t HTTP_INTERNAL_SERVER_ERROR = 500; +constexpr std::int32_t HTTP_NOT_IMPLEMENTED = 501; +constexpr std::int32_t HTTP_BAD_GATEWAY = 502; +constexpr std::int32_t HTTP_SERVICE_UNAVAILABLE = 503; +constexpr std::int32_t HTTP_GATEWAY_TIMEOUT = 504; +constexpr std::int32_t HTTP_HTTP_VERSION_NOT_SUPPORTED = 505; +constexpr std::int32_t HTTP_VARIANT_ALSO_NEGOTIATES = 506; +constexpr std::int32_t HTTP_INSUFFICIENT_STORAGE = 507; +constexpr std::int32_t HTTP_LOOP_DETECTED = 508; +constexpr std::int32_t HTTP_NOT_EXTENDED = 510; +constexpr std::int32_t HTTP_NETWORK_AUTHENTICATION_REQUIRED = 511; + +constexpr std::int32_t INFO_CODE_OFFSET = 100; +constexpr std::int32_t SUCCESS_CODE_OFFSET = 200; +constexpr std::int32_t REDIRECT_CODE_OFFSET = 300; +constexpr std::int32_t CLIENT_ERROR_CODE_OFFSET = 400; +constexpr std::int32_t SERVER_ERROR_CODE_OFFSET = 500; +constexpr std::int32_t MISC_CODE_OFFSET = 600; + +constexpr bool is_informational(const std::int32_t code) { + return (code >= INFO_CODE_OFFSET && code < SUCCESS_CODE_OFFSET); +} +constexpr bool is_success(const std::int32_t code) { + return (code >= SUCCESS_CODE_OFFSET && code < REDIRECT_CODE_OFFSET); +} +constexpr bool is_redirect(const std::int32_t code) { + return (code >= REDIRECT_CODE_OFFSET && code < CLIENT_ERROR_CODE_OFFSET); +} +constexpr bool is_client_error(const std::int32_t code) { + return (code >= CLIENT_ERROR_CODE_OFFSET && code < SERVER_ERROR_CODE_OFFSET); +} +constexpr bool is_server_error(const std::int32_t code) { + return (code >= SERVER_ERROR_CODE_OFFSET && code < MISC_CODE_OFFSET); +} + +} // namespace status +} // namespace cpr +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/threadpool.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/threadpool.h new file mode 100644 index 0000000..bb7e7f2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/threadpool.h @@ -0,0 +1,122 @@ +#ifndef CPR_THREAD_POOL_H +#define CPR_THREAD_POOL_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define CPR_DEFAULT_THREAD_POOL_MAX_THREAD_NUM std::thread::hardware_concurrency() + +constexpr size_t CPR_DEFAULT_THREAD_POOL_MIN_THREAD_NUM = 1; +constexpr std::chrono::milliseconds CPR_DEFAULT_THREAD_POOL_MAX_IDLE_TIME{60000}; + +namespace cpr { + +class ThreadPool { + public: + using Task = std::function; + + explicit ThreadPool(size_t min_threads = CPR_DEFAULT_THREAD_POOL_MIN_THREAD_NUM, size_t max_threads = CPR_DEFAULT_THREAD_POOL_MAX_THREAD_NUM, std::chrono::milliseconds max_idle_ms = CPR_DEFAULT_THREAD_POOL_MAX_IDLE_TIME); + + virtual ~ThreadPool(); + + void SetMinThreadNum(size_t min_threads) { + min_thread_num = min_threads; + } + void SetMaxThreadNum(size_t max_threads) { + max_thread_num = max_threads; + } + void SetMaxIdleTime(std::chrono::milliseconds ms) { + max_idle_time = ms; + } + size_t GetCurrentThreadNum() { + return cur_thread_num; + } + size_t GetIdleThreadNum() { + return idle_thread_num; + } + bool IsStarted() { + return status != STOP; + } + bool IsStopped() { + return status == STOP; + } + + int Start(size_t start_threads = 0); + int Stop(); + int Pause(); + int Resume(); + int Wait(); + + /** + * Return a future, calling future.get() will wait task done and return RetType. + * Submit(fn, args...) + * Submit(std::bind(&Class::mem_fn, &obj)) + * Submit(std::mem_fn(&Class::mem_fn, &obj)) + **/ + template + auto Submit(Fn&& fn, Args&&... args) { + if (status == STOP) { + Start(); + } + if (idle_thread_num <= 0 && cur_thread_num < max_thread_num) { + CreateThread(); + } + using RetType = decltype(fn(args...)); + auto task = std::make_shared >(std::bind(std::forward(fn), std::forward(args)...)); + std::future future = task->get_future(); + { + std::lock_guard locker(task_mutex); + tasks.emplace([task] { (*task)(); }); + } + + task_cond.notify_one(); + return future; + } + + private: + bool CreateThread(); + void AddThread(std::thread* thread); + void DelThread(std::thread::id id); + + public: + size_t min_thread_num; + size_t max_thread_num; + std::chrono::milliseconds max_idle_time; + + private: + enum Status { + STOP, + RUNNING, + PAUSE, + }; + + struct ThreadData { + std::shared_ptr thread; + std::thread::id id; + Status status; + time_t start_time; + time_t stop_time; + }; + + std::atomic status; + std::atomic cur_thread_num; + std::atomic idle_thread_num; + std::list threads; + std::mutex thread_mutex; + std::queue tasks; + std::mutex task_mutex; + std::condition_variable task_cond; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/timeout.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/timeout.h new file mode 100644 index 0000000..83b3e68 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/timeout.h @@ -0,0 +1,27 @@ +#ifndef CPR_TIMEOUT_H +#define CPR_TIMEOUT_H + +#include +#include + +namespace cpr { + +class Timeout { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Timeout(const std::chrono::milliseconds& duration) : ms{duration} {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Timeout(const std::int32_t& milliseconds) : Timeout{std::chrono::milliseconds(milliseconds)} {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Timeout(const std::chrono::seconds& duration) : ms{std::chrono::milliseconds(duration).count()} {} + + // No way around since curl uses a long here. + // NOLINTNEXTLINE(google-runtime-int) + long Milliseconds() const; + + std::chrono::milliseconds ms; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/unix_socket.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/unix_socket.h new file mode 100644 index 0000000..152caf0 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/unix_socket.h @@ -0,0 +1,21 @@ +#ifndef CPR_UNIX_SOCKET_H +#define CPR_UNIX_SOCKET_H + +#include + +namespace cpr { + +class UnixSocket { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UnixSocket(std::string unix_socket) : unix_socket_(std::move(unix_socket)) {} + + const char* GetUnixSocketString() const noexcept; + + private: + const std::string unix_socket_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/user_agent.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/user_agent.h new file mode 100644 index 0000000..a3cc129 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/user_agent.h @@ -0,0 +1,31 @@ +#ifndef CPR_USERAGENT_H +#define CPR_USERAGENT_H + +#include +#include + +#include "cpr/cprtypes.h" + +namespace cpr { +class UserAgent : public StringHolder { + public: + UserAgent() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UserAgent(std::string useragent) : StringHolder(std::move(useragent)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UserAgent(std::string_view useragent) : StringHolder(useragent) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UserAgent(const char* useragent) : StringHolder(useragent) {} + UserAgent(const char* str, size_t len) : StringHolder(str, len) {} + UserAgent(const std::initializer_list args) : StringHolder(args) {} + UserAgent(const UserAgent& other) = default; + UserAgent(UserAgent&& old) noexcept = default; + ~UserAgent() override = default; + + UserAgent& operator=(UserAgent&& old) noexcept = default; + UserAgent& operator=(const UserAgent& other) = default; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/util.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/util.h new file mode 100644 index 0000000..d851e23 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/util.h @@ -0,0 +1,45 @@ +#ifndef CPR_UTIL_H +#define CPR_UTIL_H + +#include +#include +#include + +#include "cpr/callback.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/curlholder.h" + +namespace cpr::util { + +Header parseHeader(const std::string& headers, std::string* status_line = nullptr, std::string* reason = nullptr); +Cookies parseCookies(curl_slist* raw_cookies); +size_t readUserFunction(char* ptr, size_t size, size_t nitems, const ReadCallback* read); +size_t headerUserFunction(char* ptr, size_t size, size_t nmemb, const HeaderCallback* header); +size_t writeFunction(char* ptr, size_t size, size_t nmemb, std::string* data); +size_t writeFileFunction(char* ptr, size_t size, size_t nmemb, std::ofstream* file); +size_t writeUserFunction(char* ptr, size_t size, size_t nmemb, const WriteCallback* write); + +template +int progressUserFunction(const T* progress, cpr_pf_arg_t dltotal, cpr_pf_arg_t dlnow, cpr_pf_arg_t ultotal, cpr_pf_arg_t ulnow) { + const int cancel_retval{1}; + static_assert(cancel_retval != CURL_PROGRESSFUNC_CONTINUE); + return (*progress)(dltotal, dlnow, ultotal, ulnow) ? 0 : cancel_retval; +} +int debugUserFunction(CURL* handle, curl_infotype type, char* data, size_t size, const DebugCallback* debug); +std::vector split(const std::string& to_split, char delimiter); +std::string urlEncode(const std::string& s); +std::string urlDecode(const std::string& s); + +/** + * Override the content of the provided string to hide sensitive data. The + * string content after invocation is undefined. The string size is reset to zero. + * impl. based on: + * https://github.com/ojeda/secure_clear/blob/master/example-implementation/secure_clear.h + **/ +void secureStringClear(std::string& s); +bool isTrue(const std::string& s); + +} // namespace cpr::util + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/verbose.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/verbose.h new file mode 100644 index 0000000..2bf0df8 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/cpr/verbose.h @@ -0,0 +1,18 @@ +#ifndef CPR_VERBOSE_H_ +#define CPR_VERBOSE_H_ + +namespace cpr { + +class Verbose { + public: + Verbose() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Verbose(const bool p_verbose) : verbose{p_verbose} {} + + bool verbose = true; +}; + +} // namespace cpr + + +#endif /* CPR_VERBOSE_H_ */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/curl.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/curl.h new file mode 100644 index 0000000..bf71d82 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/curl.h @@ -0,0 +1,3241 @@ +#ifndef CURLINC_CURL_H +#define CURLINC_CURL_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* + * If you have libcurl problems, all docs and details are found here: + * https://curl.se/libcurl/ + */ + +#ifdef CURL_NO_OLDIES +#define CURL_STRICTER +#endif + +/* Compile-time deprecation macros. */ +#if defined(__GNUC__) && \ + ((__GNUC__ > 12) || ((__GNUC__ == 12) && (__GNUC_MINOR__ >= 1 ))) && \ + !defined(__INTEL_COMPILER) && \ + !defined(CURL_DISABLE_DEPRECATION) && !defined(BUILDING_LIBCURL) +#define CURL_DEPRECATED(version, message) \ + __attribute__((deprecated("since " # version ". " message))) +#define CURL_IGNORE_DEPRECATION(statements) \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ + statements \ + _Pragma("GCC diagnostic pop") +#else +#define CURL_DEPRECATED(version, message) +#define CURL_IGNORE_DEPRECATION(statements) statements +#endif + +#include "curlver.h" /* libcurl version defines */ +#include "system.h" /* determine things run-time */ + +/* + * Define CURL_WIN32 when build target is Win32 API + */ + +#if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && \ + !defined(__SYMBIAN32__) +#define CURL_WIN32 +#endif + +#include +#include + +#if (defined(__FreeBSD__) && (__FreeBSD__ >= 2)) || defined(__MidnightBSD__) +/* Needed for __FreeBSD_version or __MidnightBSD_version symbol definition */ +#include +#endif + +/* The include stuff here below is mainly for time_t! */ +#include +#include + +#if defined(CURL_WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__) +#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || \ + defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H)) +/* The check above prevents the winsock2 inclusion if winsock.h already was + included, since they can't co-exist without problems */ +#include +#include +#endif +#endif + +/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish + libc5-based Linux systems. Only include it on systems that are known to + require it! */ +#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \ + defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \ + defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \ + defined(__CYGWIN__) || defined(AMIGA) || defined(__NuttX__) || \ + (defined(__FreeBSD_version) && (__FreeBSD_version < 800000)) || \ + (defined(__MidnightBSD_version) && (__MidnightBSD_version < 100000)) || \ + defined(__sun__) || defined(__serenity__) || defined(__vxworks__) +#include +#endif + +#if !defined(CURL_WIN32) && !defined(_WIN32_WCE) +#include +#endif + +#if !defined(CURL_WIN32) +#include +#endif + +/* Compatibility for non-Clang compilers */ +#ifndef __has_declspec_attribute +# define __has_declspec_attribute(x) 0 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) +typedef struct Curl_easy CURL; +typedef struct Curl_share CURLSH; +#else +typedef void CURL; +typedef void CURLSH; +#endif + +/* + * libcurl external API function linkage decorations. + */ + +#ifdef CURL_STATICLIB +# define CURL_EXTERN +#elif defined(CURL_WIN32) || defined(__SYMBIAN32__) || \ + (__has_declspec_attribute(dllexport) && \ + __has_declspec_attribute(dllimport)) +# if defined(BUILDING_LIBCURL) +# define CURL_EXTERN __declspec(dllexport) +# else +# define CURL_EXTERN __declspec(dllimport) +# endif +#elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS) +# define CURL_EXTERN CURL_EXTERN_SYMBOL +#else +# define CURL_EXTERN +#endif + +#ifndef curl_socket_typedef +/* socket typedef */ +#if defined(CURL_WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H) +typedef SOCKET curl_socket_t; +#define CURL_SOCKET_BAD INVALID_SOCKET +#else +typedef int curl_socket_t; +#define CURL_SOCKET_BAD -1 +#endif +#define curl_socket_typedef +#endif /* curl_socket_typedef */ + +/* enum for the different supported SSL backends */ +typedef enum { + CURLSSLBACKEND_NONE = 0, + CURLSSLBACKEND_OPENSSL = 1, + CURLSSLBACKEND_GNUTLS = 2, + CURLSSLBACKEND_NSS CURL_DEPRECATED(8.3.0, "") = 3, + CURLSSLBACKEND_OBSOLETE4 = 4, /* Was QSOSSL. */ + CURLSSLBACKEND_GSKIT CURL_DEPRECATED(8.3.0, "") = 5, + CURLSSLBACKEND_POLARSSL CURL_DEPRECATED(7.69.0, "") = 6, + CURLSSLBACKEND_WOLFSSL = 7, + CURLSSLBACKEND_SCHANNEL = 8, + CURLSSLBACKEND_SECURETRANSPORT = 9, + CURLSSLBACKEND_AXTLS CURL_DEPRECATED(7.61.0, "") = 10, + CURLSSLBACKEND_MBEDTLS = 11, + CURLSSLBACKEND_MESALINK CURL_DEPRECATED(7.82.0, "") = 12, + CURLSSLBACKEND_BEARSSL = 13, + CURLSSLBACKEND_RUSTLS = 14 +} curl_sslbackend; + +/* aliases for library clones and renames */ +#define CURLSSLBACKEND_AWSLC CURLSSLBACKEND_OPENSSL +#define CURLSSLBACKEND_BORINGSSL CURLSSLBACKEND_OPENSSL +#define CURLSSLBACKEND_LIBRESSL CURLSSLBACKEND_OPENSSL + +/* deprecated names: */ +#define CURLSSLBACKEND_CYASSL CURLSSLBACKEND_WOLFSSL +#define CURLSSLBACKEND_DARWINSSL CURLSSLBACKEND_SECURETRANSPORT + +struct curl_httppost { + struct curl_httppost *next; /* next entry in the list */ + char *name; /* pointer to allocated name */ + long namelength; /* length of name length */ + char *contents; /* pointer to allocated data contents */ + long contentslength; /* length of contents field, see also + CURL_HTTPPOST_LARGE */ + char *buffer; /* pointer to allocated buffer contents */ + long bufferlength; /* length of buffer field */ + char *contenttype; /* Content-Type */ + struct curl_slist *contentheader; /* list of extra headers for this form */ + struct curl_httppost *more; /* if one field name has more than one + file, this link should link to following + files */ + long flags; /* as defined below */ + +/* specified content is a file name */ +#define CURL_HTTPPOST_FILENAME (1<<0) +/* specified content is a file name */ +#define CURL_HTTPPOST_READFILE (1<<1) +/* name is only stored pointer do not free in formfree */ +#define CURL_HTTPPOST_PTRNAME (1<<2) +/* contents is only stored pointer do not free in formfree */ +#define CURL_HTTPPOST_PTRCONTENTS (1<<3) +/* upload file from buffer */ +#define CURL_HTTPPOST_BUFFER (1<<4) +/* upload file from pointer contents */ +#define CURL_HTTPPOST_PTRBUFFER (1<<5) +/* upload file contents by using the regular read callback to get the data and + pass the given pointer as custom pointer */ +#define CURL_HTTPPOST_CALLBACK (1<<6) +/* use size in 'contentlen', added in 7.46.0 */ +#define CURL_HTTPPOST_LARGE (1<<7) + + char *showfilename; /* The file name to show. If not set, the + actual file name will be used (if this + is a file part) */ + void *userp; /* custom pointer used for + HTTPPOST_CALLBACK posts */ + curl_off_t contentlen; /* alternative length of contents + field. Used if CURL_HTTPPOST_LARGE is + set. Added in 7.46.0 */ +}; + + +/* This is a return code for the progress callback that, when returned, will + signal libcurl to continue executing the default progress function */ +#define CURL_PROGRESSFUNC_CONTINUE 0x10000001 + +/* This is the CURLOPT_PROGRESSFUNCTION callback prototype. It is now + considered deprecated but was the only choice up until 7.31.0 */ +typedef int (*curl_progress_callback)(void *clientp, + double dltotal, + double dlnow, + double ultotal, + double ulnow); + +/* This is the CURLOPT_XFERINFOFUNCTION callback prototype. It was introduced + in 7.32.0, avoids the use of floating point numbers and provides more + detailed information. */ +typedef int (*curl_xferinfo_callback)(void *clientp, + curl_off_t dltotal, + curl_off_t dlnow, + curl_off_t ultotal, + curl_off_t ulnow); + +#ifndef CURL_MAX_READ_SIZE + /* The maximum receive buffer size configurable via CURLOPT_BUFFERSIZE. */ +#define CURL_MAX_READ_SIZE (10*1024*1024) +#endif + +#ifndef CURL_MAX_WRITE_SIZE + /* Tests have proven that 20K is a very bad buffer size for uploads on + Windows, while 16K for some odd reason performed a lot better. + We do the ifndef check to allow this value to easier be changed at build + time for those who feel adventurous. The practical minimum is about + 400 bytes since libcurl uses a buffer of this size as a scratch area + (unrelated to network send operations). */ +#define CURL_MAX_WRITE_SIZE 16384 +#endif + +#ifndef CURL_MAX_HTTP_HEADER +/* The only reason to have a max limit for this is to avoid the risk of a bad + server feeding libcurl with a never-ending header that will cause reallocs + infinitely */ +#define CURL_MAX_HTTP_HEADER (100*1024) +#endif + +/* This is a magic return code for the write callback that, when returned, + will signal libcurl to pause receiving on the current transfer. */ +#define CURL_WRITEFUNC_PAUSE 0x10000001 + +/* This is a magic return code for the write callback that, when returned, + will signal an error from the callback. */ +#define CURL_WRITEFUNC_ERROR 0xFFFFFFFF + +typedef size_t (*curl_write_callback)(char *buffer, + size_t size, + size_t nitems, + void *outstream); + +/* This callback will be called when a new resolver request is made */ +typedef int (*curl_resolver_start_callback)(void *resolver_state, + void *reserved, void *userdata); + +/* enumeration of file types */ +typedef enum { + CURLFILETYPE_FILE = 0, + CURLFILETYPE_DIRECTORY, + CURLFILETYPE_SYMLINK, + CURLFILETYPE_DEVICE_BLOCK, + CURLFILETYPE_DEVICE_CHAR, + CURLFILETYPE_NAMEDPIPE, + CURLFILETYPE_SOCKET, + CURLFILETYPE_DOOR, /* is possible only on Sun Solaris now */ + + CURLFILETYPE_UNKNOWN /* should never occur */ +} curlfiletype; + +#define CURLFINFOFLAG_KNOWN_FILENAME (1<<0) +#define CURLFINFOFLAG_KNOWN_FILETYPE (1<<1) +#define CURLFINFOFLAG_KNOWN_TIME (1<<2) +#define CURLFINFOFLAG_KNOWN_PERM (1<<3) +#define CURLFINFOFLAG_KNOWN_UID (1<<4) +#define CURLFINFOFLAG_KNOWN_GID (1<<5) +#define CURLFINFOFLAG_KNOWN_SIZE (1<<6) +#define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1<<7) + +/* Information about a single file, used when doing FTP wildcard matching */ +struct curl_fileinfo { + char *filename; + curlfiletype filetype; + time_t time; /* always zero! */ + unsigned int perm; + int uid; + int gid; + curl_off_t size; + long int hardlinks; + + struct { + /* If some of these fields is not NULL, it is a pointer to b_data. */ + char *time; + char *perm; + char *user; + char *group; + char *target; /* pointer to the target filename of a symlink */ + } strings; + + unsigned int flags; + + /* These are libcurl private struct fields. Previously used by libcurl, so + they must never be interfered with. */ + char *b_data; + size_t b_size; + size_t b_used; +}; + +/* return codes for CURLOPT_CHUNK_BGN_FUNCTION */ +#define CURL_CHUNK_BGN_FUNC_OK 0 +#define CURL_CHUNK_BGN_FUNC_FAIL 1 /* tell the lib to end the task */ +#define CURL_CHUNK_BGN_FUNC_SKIP 2 /* skip this chunk over */ + +/* if splitting of data transfer is enabled, this callback is called before + download of an individual chunk started. Note that parameter "remains" works + only for FTP wildcard downloading (for now), otherwise is not used */ +typedef long (*curl_chunk_bgn_callback)(const void *transfer_info, + void *ptr, + int remains); + +/* return codes for CURLOPT_CHUNK_END_FUNCTION */ +#define CURL_CHUNK_END_FUNC_OK 0 +#define CURL_CHUNK_END_FUNC_FAIL 1 /* tell the lib to end the task */ + +/* If splitting of data transfer is enabled this callback is called after + download of an individual chunk finished. + Note! After this callback was set then it have to be called FOR ALL chunks. + Even if downloading of this chunk was skipped in CHUNK_BGN_FUNC. + This is the reason why we don't need "transfer_info" parameter in this + callback and we are not interested in "remains" parameter too. */ +typedef long (*curl_chunk_end_callback)(void *ptr); + +/* return codes for FNMATCHFUNCTION */ +#define CURL_FNMATCHFUNC_MATCH 0 /* string corresponds to the pattern */ +#define CURL_FNMATCHFUNC_NOMATCH 1 /* pattern doesn't match the string */ +#define CURL_FNMATCHFUNC_FAIL 2 /* an error occurred */ + +/* callback type for wildcard downloading pattern matching. If the + string matches the pattern, return CURL_FNMATCHFUNC_MATCH value, etc. */ +typedef int (*curl_fnmatch_callback)(void *ptr, + const char *pattern, + const char *string); + +/* These are the return codes for the seek callbacks */ +#define CURL_SEEKFUNC_OK 0 +#define CURL_SEEKFUNC_FAIL 1 /* fail the entire transfer */ +#define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so + libcurl might try other means instead */ +typedef int (*curl_seek_callback)(void *instream, + curl_off_t offset, + int origin); /* 'whence' */ + +/* This is a return code for the read callback that, when returned, will + signal libcurl to immediately abort the current transfer. */ +#define CURL_READFUNC_ABORT 0x10000000 +/* This is a return code for the read callback that, when returned, will + signal libcurl to pause sending data on the current transfer. */ +#define CURL_READFUNC_PAUSE 0x10000001 + +/* Return code for when the trailing headers' callback has terminated + without any errors */ +#define CURL_TRAILERFUNC_OK 0 +/* Return code for when was an error in the trailing header's list and we + want to abort the request */ +#define CURL_TRAILERFUNC_ABORT 1 + +typedef size_t (*curl_read_callback)(char *buffer, + size_t size, + size_t nitems, + void *instream); + +typedef int (*curl_trailer_callback)(struct curl_slist **list, + void *userdata); + +typedef enum { + CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */ + CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */ + CURLSOCKTYPE_LAST /* never use */ +} curlsocktype; + +/* The return code from the sockopt_callback can signal information back + to libcurl: */ +#define CURL_SOCKOPT_OK 0 +#define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return + CURLE_ABORTED_BY_CALLBACK */ +#define CURL_SOCKOPT_ALREADY_CONNECTED 2 + +typedef int (*curl_sockopt_callback)(void *clientp, + curl_socket_t curlfd, + curlsocktype purpose); + +struct curl_sockaddr { + int family; + int socktype; + int protocol; + unsigned int addrlen; /* addrlen was a socklen_t type before 7.18.0 but it + turned really ugly and painful on the systems that + lack this type */ + struct sockaddr addr; +}; + +typedef curl_socket_t +(*curl_opensocket_callback)(void *clientp, + curlsocktype purpose, + struct curl_sockaddr *address); + +typedef int +(*curl_closesocket_callback)(void *clientp, curl_socket_t item); + +typedef enum { + CURLIOE_OK, /* I/O operation successful */ + CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ + CURLIOE_FAILRESTART, /* failed to restart the read */ + CURLIOE_LAST /* never use */ +} curlioerr; + +typedef enum { + CURLIOCMD_NOP, /* no operation */ + CURLIOCMD_RESTARTREAD, /* restart the read stream from start */ + CURLIOCMD_LAST /* never use */ +} curliocmd; + +typedef curlioerr (*curl_ioctl_callback)(CURL *handle, + int cmd, + void *clientp); + +#ifndef CURL_DID_MEMORY_FUNC_TYPEDEFS +/* + * The following typedef's are signatures of malloc, free, realloc, strdup and + * calloc respectively. Function pointers of these types can be passed to the + * curl_global_init_mem() function to set user defined memory management + * callback routines. + */ +typedef void *(*curl_malloc_callback)(size_t size); +typedef void (*curl_free_callback)(void *ptr); +typedef void *(*curl_realloc_callback)(void *ptr, size_t size); +typedef char *(*curl_strdup_callback)(const char *str); +typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size); + +#define CURL_DID_MEMORY_FUNC_TYPEDEFS +#endif + +/* the kind of data that is passed to information_callback */ +typedef enum { + CURLINFO_TEXT = 0, + CURLINFO_HEADER_IN, /* 1 */ + CURLINFO_HEADER_OUT, /* 2 */ + CURLINFO_DATA_IN, /* 3 */ + CURLINFO_DATA_OUT, /* 4 */ + CURLINFO_SSL_DATA_IN, /* 5 */ + CURLINFO_SSL_DATA_OUT, /* 6 */ + CURLINFO_END +} curl_infotype; + +typedef int (*curl_debug_callback) + (CURL *handle, /* the handle/transfer this concerns */ + curl_infotype type, /* what kind of data */ + char *data, /* points to the data */ + size_t size, /* size of the data pointed to */ + void *userptr); /* whatever the user please */ + +/* This is the CURLOPT_PREREQFUNCTION callback prototype. */ +typedef int (*curl_prereq_callback)(void *clientp, + char *conn_primary_ip, + char *conn_local_ip, + int conn_primary_port, + int conn_local_port); + +/* Return code for when the pre-request callback has terminated without + any errors */ +#define CURL_PREREQFUNC_OK 0 +/* Return code for when the pre-request callback wants to abort the + request */ +#define CURL_PREREQFUNC_ABORT 1 + +/* All possible error codes from all sorts of curl functions. Future versions + may return other values, stay prepared. + + Always add new return codes last. Never *EVER* remove any. The return + codes must remain the same! + */ + +typedef enum { + CURLE_OK = 0, + CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ + CURLE_FAILED_INIT, /* 2 */ + CURLE_URL_MALFORMAT, /* 3 */ + CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for + 7.17.0, reused in April 2011 for 7.21.5] */ + CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ + CURLE_COULDNT_RESOLVE_HOST, /* 6 */ + CURLE_COULDNT_CONNECT, /* 7 */ + CURLE_WEIRD_SERVER_REPLY, /* 8 */ + CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server + due to lack of access - when login fails + this is not returned. */ + CURLE_FTP_ACCEPT_FAILED, /* 10 - [was obsoleted in April 2006 for + 7.15.4, reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ + CURLE_FTP_ACCEPT_TIMEOUT, /* 12 - timeout occurred accepting server + [was obsoleted in August 2007 for 7.17.0, + reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ + CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ + CURLE_FTP_CANT_GET_HOST, /* 15 */ + CURLE_HTTP2, /* 16 - A problem in the http2 framing layer. + [was obsoleted in August 2007 for 7.17.0, + reused in July 2014 for 7.38.0] */ + CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ + CURLE_PARTIAL_FILE, /* 18 */ + CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ + CURLE_OBSOLETE20, /* 20 - NOT USED */ + CURLE_QUOTE_ERROR, /* 21 - quote command failure */ + CURLE_HTTP_RETURNED_ERROR, /* 22 */ + CURLE_WRITE_ERROR, /* 23 */ + CURLE_OBSOLETE24, /* 24 - NOT USED */ + CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ + CURLE_READ_ERROR, /* 26 - couldn't open/read from file */ + CURLE_OUT_OF_MEMORY, /* 27 */ + CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ + CURLE_OBSOLETE29, /* 29 - NOT USED */ + CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ + CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ + CURLE_OBSOLETE32, /* 32 - NOT USED */ + CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */ + CURLE_HTTP_POST_ERROR, /* 34 */ + CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ + CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */ + CURLE_FILE_COULDNT_READ_FILE, /* 37 */ + CURLE_LDAP_CANNOT_BIND, /* 38 */ + CURLE_LDAP_SEARCH_FAILED, /* 39 */ + CURLE_OBSOLETE40, /* 40 - NOT USED */ + CURLE_FUNCTION_NOT_FOUND, /* 41 - NOT USED starting with 7.53.0 */ + CURLE_ABORTED_BY_CALLBACK, /* 42 */ + CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ + CURLE_OBSOLETE44, /* 44 - NOT USED */ + CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ + CURLE_OBSOLETE46, /* 46 - NOT USED */ + CURLE_TOO_MANY_REDIRECTS, /* 47 - catch endless re-direct loops */ + CURLE_UNKNOWN_OPTION, /* 48 - User specified an unknown option */ + CURLE_SETOPT_OPTION_SYNTAX, /* 49 - Malformed setopt option */ + CURLE_OBSOLETE50, /* 50 - NOT USED */ + CURLE_OBSOLETE51, /* 51 - NOT USED */ + CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ + CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ + CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as + default */ + CURLE_SEND_ERROR, /* 55 - failed sending network data */ + CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ + CURLE_OBSOLETE57, /* 57 - NOT IN USE */ + CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ + CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */ + CURLE_PEER_FAILED_VERIFICATION, /* 60 - peer's certificate or fingerprint + wasn't verified fine */ + CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */ + CURLE_OBSOLETE62, /* 62 - NOT IN USE since 7.82.0 */ + CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ + CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ + CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind + that failed */ + CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ + CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not + accepted and we failed to login */ + CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ + CURLE_TFTP_PERM, /* 69 - permission problem on server */ + CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ + CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ + CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ + CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ + CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ + CURLE_OBSOLETE75, /* 75 - NOT IN USE since 7.82.0 */ + CURLE_OBSOLETE76, /* 76 - NOT IN USE since 7.82.0 */ + CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing + or wrong format */ + CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ + CURLE_SSH, /* 79 - error from the SSH layer, somewhat + generic so the error message will be of + interest when this has happened */ + + CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL + connection */ + CURLE_AGAIN, /* 81 - socket is not ready for send/recv, + wait till it's ready and try again (Added + in 7.18.2) */ + CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or + wrong format (Added in 7.19.0) */ + CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in + 7.19.0) */ + CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */ + CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */ + CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Ids */ + CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */ + CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */ + CURLE_NO_CONNECTION_AVAILABLE, /* 89 - No connection available, the + session will be queued */ + CURLE_SSL_PINNEDPUBKEYNOTMATCH, /* 90 - specified pinned public key did not + match */ + CURLE_SSL_INVALIDCERTSTATUS, /* 91 - invalid certificate status */ + CURLE_HTTP2_STREAM, /* 92 - stream error in HTTP/2 framing layer + */ + CURLE_RECURSIVE_API_CALL, /* 93 - an api function was called from + inside a callback */ + CURLE_AUTH_ERROR, /* 94 - an authentication function returned an + error */ + CURLE_HTTP3, /* 95 - An HTTP/3 layer problem */ + CURLE_QUIC_CONNECT_ERROR, /* 96 - QUIC connection error */ + CURLE_PROXY, /* 97 - proxy handshake error */ + CURLE_SSL_CLIENTCERT, /* 98 - client-side certificate required */ + CURLE_UNRECOVERABLE_POLL, /* 99 - poll/select returned fatal error */ + CURL_LAST /* never use! */ +} CURLcode; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Previously obsolete error code reused in 7.38.0 */ +#define CURLE_OBSOLETE16 CURLE_HTTP2 + +/* Previously obsolete error codes reused in 7.24.0 */ +#define CURLE_OBSOLETE10 CURLE_FTP_ACCEPT_FAILED +#define CURLE_OBSOLETE12 CURLE_FTP_ACCEPT_TIMEOUT + +/* compatibility with older names */ +#define CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING +#define CURLE_FTP_WEIRD_SERVER_REPLY CURLE_WEIRD_SERVER_REPLY + +/* The following were added in 7.62.0 */ +#define CURLE_SSL_CACERT CURLE_PEER_FAILED_VERIFICATION + +/* The following were added in 7.21.5, April 2011 */ +#define CURLE_UNKNOWN_TELNET_OPTION CURLE_UNKNOWN_OPTION + +/* Added for 7.78.0 */ +#define CURLE_TELNET_OPTION_SYNTAX CURLE_SETOPT_OPTION_SYNTAX + +/* The following were added in 7.17.1 */ +/* These are scheduled to disappear by 2009 */ +#define CURLE_SSL_PEER_CERTIFICATE CURLE_PEER_FAILED_VERIFICATION + +/* The following were added in 7.17.0 */ +/* These are scheduled to disappear by 2009 */ +#define CURLE_OBSOLETE CURLE_OBSOLETE50 /* no one should be using this! */ +#define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46 +#define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44 +#define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10 +#define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16 +#define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32 +#define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29 +#define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12 +#define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20 +#define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40 +#define CURLE_MALFORMAT_USER CURLE_OBSOLETE24 +#define CURLE_SHARE_IN_USE CURLE_OBSOLETE57 +#define CURLE_URL_MALFORMAT_USER CURLE_NOT_BUILT_IN + +#define CURLE_FTP_ACCESS_DENIED CURLE_REMOTE_ACCESS_DENIED +#define CURLE_FTP_COULDNT_SET_BINARY CURLE_FTP_COULDNT_SET_TYPE +#define CURLE_FTP_QUOTE_ERROR CURLE_QUOTE_ERROR +#define CURLE_TFTP_DISKFULL CURLE_REMOTE_DISK_FULL +#define CURLE_TFTP_EXISTS CURLE_REMOTE_FILE_EXISTS +#define CURLE_HTTP_RANGE_ERROR CURLE_RANGE_ERROR +#define CURLE_FTP_SSL_FAILED CURLE_USE_SSL_FAILED + +/* The following were added earlier */ + +#define CURLE_OPERATION_TIMEOUTED CURLE_OPERATION_TIMEDOUT +#define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR +#define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED +#define CURLE_FTP_COULDNT_STOR_FILE CURLE_UPLOAD_FAILED +#define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE +#define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME +#define CURLE_LDAP_INVALID_URL CURLE_OBSOLETE62 +#define CURLE_CONV_REQD CURLE_OBSOLETE76 +#define CURLE_CONV_FAILED CURLE_OBSOLETE75 + +/* This was the error code 50 in 7.7.3 and a few earlier versions, this + is no longer used by libcurl but is instead #defined here only to not + make programs break */ +#define CURLE_ALREADY_COMPLETE 99999 + +/* Provide defines for really old option names */ +#define CURLOPT_FILE CURLOPT_WRITEDATA /* name changed in 7.9.7 */ +#define CURLOPT_INFILE CURLOPT_READDATA /* name changed in 7.9.7 */ +#define CURLOPT_WRITEHEADER CURLOPT_HEADERDATA + +/* Since long deprecated options with no code in the lib that does anything + with them. */ +#define CURLOPT_WRITEINFO CURLOPT_OBSOLETE40 +#define CURLOPT_CLOSEPOLICY CURLOPT_OBSOLETE72 + +#endif /* !CURL_NO_OLDIES */ + +/* + * Proxy error codes. Returned in CURLINFO_PROXY_ERROR if CURLE_PROXY was + * return for the transfers. + */ +typedef enum { + CURLPX_OK, + CURLPX_BAD_ADDRESS_TYPE, + CURLPX_BAD_VERSION, + CURLPX_CLOSED, + CURLPX_GSSAPI, + CURLPX_GSSAPI_PERMSG, + CURLPX_GSSAPI_PROTECTION, + CURLPX_IDENTD, + CURLPX_IDENTD_DIFFER, + CURLPX_LONG_HOSTNAME, + CURLPX_LONG_PASSWD, + CURLPX_LONG_USER, + CURLPX_NO_AUTH, + CURLPX_RECV_ADDRESS, + CURLPX_RECV_AUTH, + CURLPX_RECV_CONNECT, + CURLPX_RECV_REQACK, + CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED, + CURLPX_REPLY_COMMAND_NOT_SUPPORTED, + CURLPX_REPLY_CONNECTION_REFUSED, + CURLPX_REPLY_GENERAL_SERVER_FAILURE, + CURLPX_REPLY_HOST_UNREACHABLE, + CURLPX_REPLY_NETWORK_UNREACHABLE, + CURLPX_REPLY_NOT_ALLOWED, + CURLPX_REPLY_TTL_EXPIRED, + CURLPX_REPLY_UNASSIGNED, + CURLPX_REQUEST_FAILED, + CURLPX_RESOLVE_HOST, + CURLPX_SEND_AUTH, + CURLPX_SEND_CONNECT, + CURLPX_SEND_REQUEST, + CURLPX_UNKNOWN_FAIL, + CURLPX_UNKNOWN_MODE, + CURLPX_USER_REJECTED, + CURLPX_LAST /* never use */ +} CURLproxycode; + +/* This prototype applies to all conversion callbacks */ +typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length); + +typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */ + void *ssl_ctx, /* actually an OpenSSL + or WolfSSL SSL_CTX, + or an mbedTLS + mbedtls_ssl_config */ + void *userptr); + +typedef enum { + CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use + CONNECT HTTP/1.1 */ + CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT + HTTP/1.0 */ + CURLPROXY_HTTPS = 2, /* HTTPS but stick to HTTP/1 added in 7.52.0 */ + CURLPROXY_HTTPS2 = 3, /* HTTPS and attempt HTTP/2 added in 8.2.0 */ + CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already + in 7.10 */ + CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ + CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ + CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the + host name rather than the IP address. added + in 7.18.0 */ +} curl_proxytype; /* this enum was added in 7.10 */ + +/* + * Bitmasks for CURLOPT_HTTPAUTH and CURLOPT_PROXYAUTH options: + * + * CURLAUTH_NONE - No HTTP authentication + * CURLAUTH_BASIC - HTTP Basic authentication (default) + * CURLAUTH_DIGEST - HTTP Digest authentication + * CURLAUTH_NEGOTIATE - HTTP Negotiate (SPNEGO) authentication + * CURLAUTH_GSSNEGOTIATE - Alias for CURLAUTH_NEGOTIATE (deprecated) + * CURLAUTH_NTLM - HTTP NTLM authentication + * CURLAUTH_DIGEST_IE - HTTP Digest authentication with IE flavour + * CURLAUTH_NTLM_WB - HTTP NTLM authentication delegated to winbind helper + * CURLAUTH_BEARER - HTTP Bearer token authentication + * CURLAUTH_ONLY - Use together with a single other type to force no + * authentication or just that single type + * CURLAUTH_ANY - All fine types set + * CURLAUTH_ANYSAFE - All fine types except Basic + */ + +#define CURLAUTH_NONE ((unsigned long)0) +#define CURLAUTH_BASIC (((unsigned long)1)<<0) +#define CURLAUTH_DIGEST (((unsigned long)1)<<1) +#define CURLAUTH_NEGOTIATE (((unsigned long)1)<<2) +/* Deprecated since the advent of CURLAUTH_NEGOTIATE */ +#define CURLAUTH_GSSNEGOTIATE CURLAUTH_NEGOTIATE +/* Used for CURLOPT_SOCKS5_AUTH to stay terminologically correct */ +#define CURLAUTH_GSSAPI CURLAUTH_NEGOTIATE +#define CURLAUTH_NTLM (((unsigned long)1)<<3) +#define CURLAUTH_DIGEST_IE (((unsigned long)1)<<4) +#define CURLAUTH_NTLM_WB (((unsigned long)1)<<5) +#define CURLAUTH_BEARER (((unsigned long)1)<<6) +#define CURLAUTH_AWS_SIGV4 (((unsigned long)1)<<7) +#define CURLAUTH_ONLY (((unsigned long)1)<<31) +#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE) +#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE)) + +#define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ +#define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ +#define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */ +#define CURLSSH_AUTH_PASSWORD (1<<1) /* password */ +#define CURLSSH_AUTH_HOST (1<<2) /* host key files */ +#define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */ +#define CURLSSH_AUTH_AGENT (1<<4) /* agent (ssh-agent, pageant...) */ +#define CURLSSH_AUTH_GSSAPI (1<<5) /* gssapi (kerberos, ...) */ +#define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY + +#define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */ +#define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */ +#define CURLGSSAPI_DELEGATION_FLAG (1<<1) /* delegate always */ + +#define CURL_ERROR_SIZE 256 + +enum curl_khtype { + CURLKHTYPE_UNKNOWN, + CURLKHTYPE_RSA1, + CURLKHTYPE_RSA, + CURLKHTYPE_DSS, + CURLKHTYPE_ECDSA, + CURLKHTYPE_ED25519 +}; + +struct curl_khkey { + const char *key; /* points to a null-terminated string encoded with base64 + if len is zero, otherwise to the "raw" data */ + size_t len; + enum curl_khtype keytype; +}; + +/* this is the set of return values expected from the curl_sshkeycallback + callback */ +enum curl_khstat { + CURLKHSTAT_FINE_ADD_TO_FILE, + CURLKHSTAT_FINE, + CURLKHSTAT_REJECT, /* reject the connection, return an error */ + CURLKHSTAT_DEFER, /* do not accept it, but we can't answer right now. + Causes a CURLE_PEER_FAILED_VERIFICATION error but the + connection will be left intact etc */ + CURLKHSTAT_FINE_REPLACE, /* accept and replace the wrong key */ + CURLKHSTAT_LAST /* not for use, only a marker for last-in-list */ +}; + +/* this is the set of status codes pass in to the callback */ +enum curl_khmatch { + CURLKHMATCH_OK, /* match */ + CURLKHMATCH_MISMATCH, /* host found, key mismatch! */ + CURLKHMATCH_MISSING, /* no matching host/key found */ + CURLKHMATCH_LAST /* not for use, only a marker for last-in-list */ +}; + +typedef int + (*curl_sshkeycallback) (CURL *easy, /* easy handle */ + const struct curl_khkey *knownkey, /* known */ + const struct curl_khkey *foundkey, /* found */ + enum curl_khmatch, /* libcurl's view on the keys */ + void *clientp); /* custom pointer passed with */ + /* CURLOPT_SSH_KEYDATA */ + +typedef int + (*curl_sshhostkeycallback) (void *clientp,/* custom pointer passed */ + /* with CURLOPT_SSH_HOSTKEYDATA */ + int keytype, /* CURLKHTYPE */ + const char *key, /* hostkey to check */ + size_t keylen); /* length of the key */ + /* return CURLE_OK to accept */ + /* or something else to refuse */ + + +/* parameter for the CURLOPT_USE_SSL option */ +typedef enum { + CURLUSESSL_NONE, /* do not attempt to use SSL */ + CURLUSESSL_TRY, /* try using SSL, proceed anyway otherwise */ + CURLUSESSL_CONTROL, /* SSL for the control connection or fail */ + CURLUSESSL_ALL, /* SSL for all communication or fail */ + CURLUSESSL_LAST /* not an option, never use */ +} curl_usessl; + +/* Definition of bits for the CURLOPT_SSL_OPTIONS argument: */ + +/* - ALLOW_BEAST tells libcurl to allow the BEAST SSL vulnerability in the + name of improving interoperability with older servers. Some SSL libraries + have introduced work-arounds for this flaw but those work-arounds sometimes + make the SSL communication fail. To regain functionality with those broken + servers, a user can this way allow the vulnerability back. */ +#define CURLSSLOPT_ALLOW_BEAST (1<<0) + +/* - NO_REVOKE tells libcurl to disable certificate revocation checks for those + SSL backends where such behavior is present. */ +#define CURLSSLOPT_NO_REVOKE (1<<1) + +/* - NO_PARTIALCHAIN tells libcurl to *NOT* accept a partial certificate chain + if possible. The OpenSSL backend has this ability. */ +#define CURLSSLOPT_NO_PARTIALCHAIN (1<<2) + +/* - REVOKE_BEST_EFFORT tells libcurl to ignore certificate revocation offline + checks and ignore missing revocation list for those SSL backends where such + behavior is present. */ +#define CURLSSLOPT_REVOKE_BEST_EFFORT (1<<3) + +/* - CURLSSLOPT_NATIVE_CA tells libcurl to use standard certificate store of + operating system. Currently implemented under MS-Windows. */ +#define CURLSSLOPT_NATIVE_CA (1<<4) + +/* - CURLSSLOPT_AUTO_CLIENT_CERT tells libcurl to automatically locate and use + a client certificate for authentication. (Schannel) */ +#define CURLSSLOPT_AUTO_CLIENT_CERT (1<<5) + +/* The default connection attempt delay in milliseconds for happy eyeballs. + CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3 and happy-eyeballs-timeout-ms.d document + this value, keep them in sync. */ +#define CURL_HET_DEFAULT 200L + +/* The default connection upkeep interval in milliseconds. */ +#define CURL_UPKEEP_INTERVAL_DEFAULT 60000L + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2009 */ + +#define CURLFTPSSL_NONE CURLUSESSL_NONE +#define CURLFTPSSL_TRY CURLUSESSL_TRY +#define CURLFTPSSL_CONTROL CURLUSESSL_CONTROL +#define CURLFTPSSL_ALL CURLUSESSL_ALL +#define CURLFTPSSL_LAST CURLUSESSL_LAST +#define curl_ftpssl curl_usessl +#endif /* !CURL_NO_OLDIES */ + +/* parameter for the CURLOPT_FTP_SSL_CCC option */ +typedef enum { + CURLFTPSSL_CCC_NONE, /* do not send CCC */ + CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */ + CURLFTPSSL_CCC_ACTIVE, /* Initiate the shutdown */ + CURLFTPSSL_CCC_LAST /* not an option, never use */ +} curl_ftpccc; + +/* parameter for the CURLOPT_FTPSSLAUTH option */ +typedef enum { + CURLFTPAUTH_DEFAULT, /* let libcurl decide */ + CURLFTPAUTH_SSL, /* use "AUTH SSL" */ + CURLFTPAUTH_TLS, /* use "AUTH TLS" */ + CURLFTPAUTH_LAST /* not an option, never use */ +} curl_ftpauth; + +/* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */ +typedef enum { + CURLFTP_CREATE_DIR_NONE, /* do NOT create missing dirs! */ + CURLFTP_CREATE_DIR, /* (FTP/SFTP) if CWD fails, try MKD and then CWD + again if MKD succeeded, for SFTP this does + similar magic */ + CURLFTP_CREATE_DIR_RETRY, /* (FTP only) if CWD fails, try MKD and then CWD + again even if MKD failed! */ + CURLFTP_CREATE_DIR_LAST /* not an option, never use */ +} curl_ftpcreatedir; + +/* parameter for the CURLOPT_FTP_FILEMETHOD option */ +typedef enum { + CURLFTPMETHOD_DEFAULT, /* let libcurl pick */ + CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */ + CURLFTPMETHOD_NOCWD, /* no CWD at all */ + CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */ + CURLFTPMETHOD_LAST /* not an option, never use */ +} curl_ftpmethod; + +/* bitmask defines for CURLOPT_HEADEROPT */ +#define CURLHEADER_UNIFIED 0 +#define CURLHEADER_SEPARATE (1<<0) + +/* CURLALTSVC_* are bits for the CURLOPT_ALTSVC_CTRL option */ +#define CURLALTSVC_READONLYFILE (1<<2) +#define CURLALTSVC_H1 (1<<3) +#define CURLALTSVC_H2 (1<<4) +#define CURLALTSVC_H3 (1<<5) + + +struct curl_hstsentry { + char *name; + size_t namelen; + unsigned int includeSubDomains:1; + char expire[18]; /* YYYYMMDD HH:MM:SS [null-terminated] */ +}; + +struct curl_index { + size_t index; /* the provided entry's "index" or count */ + size_t total; /* total number of entries to save */ +}; + +typedef enum { + CURLSTS_OK, + CURLSTS_DONE, + CURLSTS_FAIL +} CURLSTScode; + +typedef CURLSTScode (*curl_hstsread_callback)(CURL *easy, + struct curl_hstsentry *e, + void *userp); +typedef CURLSTScode (*curl_hstswrite_callback)(CURL *easy, + struct curl_hstsentry *e, + struct curl_index *i, + void *userp); + +/* CURLHSTS_* are bits for the CURLOPT_HSTS option */ +#define CURLHSTS_ENABLE (long)(1<<0) +#define CURLHSTS_READONLYFILE (long)(1<<1) + +/* The CURLPROTO_ defines below are for the **deprecated** CURLOPT_*PROTOCOLS + options. Do not use. */ +#define CURLPROTO_HTTP (1<<0) +#define CURLPROTO_HTTPS (1<<1) +#define CURLPROTO_FTP (1<<2) +#define CURLPROTO_FTPS (1<<3) +#define CURLPROTO_SCP (1<<4) +#define CURLPROTO_SFTP (1<<5) +#define CURLPROTO_TELNET (1<<6) +#define CURLPROTO_LDAP (1<<7) +#define CURLPROTO_LDAPS (1<<8) +#define CURLPROTO_DICT (1<<9) +#define CURLPROTO_FILE (1<<10) +#define CURLPROTO_TFTP (1<<11) +#define CURLPROTO_IMAP (1<<12) +#define CURLPROTO_IMAPS (1<<13) +#define CURLPROTO_POP3 (1<<14) +#define CURLPROTO_POP3S (1<<15) +#define CURLPROTO_SMTP (1<<16) +#define CURLPROTO_SMTPS (1<<17) +#define CURLPROTO_RTSP (1<<18) +#define CURLPROTO_RTMP (1<<19) +#define CURLPROTO_RTMPT (1<<20) +#define CURLPROTO_RTMPE (1<<21) +#define CURLPROTO_RTMPTE (1<<22) +#define CURLPROTO_RTMPS (1<<23) +#define CURLPROTO_RTMPTS (1<<24) +#define CURLPROTO_GOPHER (1<<25) +#define CURLPROTO_SMB (1<<26) +#define CURLPROTO_SMBS (1<<27) +#define CURLPROTO_MQTT (1<<28) +#define CURLPROTO_GOPHERS (1<<29) +#define CURLPROTO_ALL (~0) /* enable everything */ + +/* long may be 32 or 64 bits, but we should never depend on anything else + but 32 */ +#define CURLOPTTYPE_LONG 0 +#define CURLOPTTYPE_OBJECTPOINT 10000 +#define CURLOPTTYPE_FUNCTIONPOINT 20000 +#define CURLOPTTYPE_OFF_T 30000 +#define CURLOPTTYPE_BLOB 40000 + +/* *STRINGPOINT is an alias for OBJECTPOINT to allow tools to extract the + string options from the header file */ + + +#define CURLOPT(na,t,nu) na = t + nu +#define CURLOPTDEPRECATED(na,t,nu,v,m) na CURL_DEPRECATED(v,m) = t + nu + +/* CURLOPT aliases that make no run-time difference */ + +/* 'char *' argument to a string with a trailing zero */ +#define CURLOPTTYPE_STRINGPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'struct curl_slist *' argument */ +#define CURLOPTTYPE_SLISTPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'void *' argument passed untouched to callback */ +#define CURLOPTTYPE_CBPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'long' argument with a set of values/bitmask */ +#define CURLOPTTYPE_VALUES CURLOPTTYPE_LONG + +/* + * All CURLOPT_* values. + */ + +typedef enum { + /* This is the FILE * or void * the regular output should be written to. */ + CURLOPT(CURLOPT_WRITEDATA, CURLOPTTYPE_CBPOINT, 1), + + /* The full URL to get/put */ + CURLOPT(CURLOPT_URL, CURLOPTTYPE_STRINGPOINT, 2), + + /* Port number to connect to, if other than default. */ + CURLOPT(CURLOPT_PORT, CURLOPTTYPE_LONG, 3), + + /* Name of proxy to use. */ + CURLOPT(CURLOPT_PROXY, CURLOPTTYPE_STRINGPOINT, 4), + + /* "user:password;options" to use when fetching. */ + CURLOPT(CURLOPT_USERPWD, CURLOPTTYPE_STRINGPOINT, 5), + + /* "user:password" to use with proxy. */ + CURLOPT(CURLOPT_PROXYUSERPWD, CURLOPTTYPE_STRINGPOINT, 6), + + /* Range to get, specified as an ASCII string. */ + CURLOPT(CURLOPT_RANGE, CURLOPTTYPE_STRINGPOINT, 7), + + /* not used */ + + /* Specified file stream to upload from (use as input): */ + CURLOPT(CURLOPT_READDATA, CURLOPTTYPE_CBPOINT, 9), + + /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE + * bytes big. */ + CURLOPT(CURLOPT_ERRORBUFFER, CURLOPTTYPE_OBJECTPOINT, 10), + + /* Function that will be called to store the output (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_WRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 11), + + /* Function that will be called to read the input (instead of fread). The + * parameters will use fread() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_READFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 12), + + /* Time-out the read operation after this amount of seconds */ + CURLOPT(CURLOPT_TIMEOUT, CURLOPTTYPE_LONG, 13), + + /* If CURLOPT_READDATA is used, this can be used to inform libcurl about + * how large the file being sent really is. That allows better error + * checking and better verifies that the upload was successful. -1 means + * unknown size. + * + * For large file support, there is also a _LARGE version of the key + * which takes an off_t type, allowing platforms with larger off_t + * sizes to handle larger files. See below for INFILESIZE_LARGE. + */ + CURLOPT(CURLOPT_INFILESIZE, CURLOPTTYPE_LONG, 14), + + /* POST static input fields. */ + CURLOPT(CURLOPT_POSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 15), + + /* Set the referrer page (needed by some CGIs) */ + CURLOPT(CURLOPT_REFERER, CURLOPTTYPE_STRINGPOINT, 16), + + /* Set the FTP PORT string (interface name, named or numerical IP address) + Use i.e '-' to use default address. */ + CURLOPT(CURLOPT_FTPPORT, CURLOPTTYPE_STRINGPOINT, 17), + + /* Set the User-Agent string (examined by some CGIs) */ + CURLOPT(CURLOPT_USERAGENT, CURLOPTTYPE_STRINGPOINT, 18), + + /* If the download receives less than "low speed limit" bytes/second + * during "low speed time" seconds, the operations is aborted. + * You could i.e if you have a pretty high speed connection, abort if + * it is less than 2000 bytes/sec during 20 seconds. + */ + + /* Set the "low speed limit" */ + CURLOPT(CURLOPT_LOW_SPEED_LIMIT, CURLOPTTYPE_LONG, 19), + + /* Set the "low speed time" */ + CURLOPT(CURLOPT_LOW_SPEED_TIME, CURLOPTTYPE_LONG, 20), + + /* Set the continuation offset. + * + * Note there is also a _LARGE version of this key which uses + * off_t types, allowing for large file offsets on platforms which + * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. + */ + CURLOPT(CURLOPT_RESUME_FROM, CURLOPTTYPE_LONG, 21), + + /* Set cookie in request: */ + CURLOPT(CURLOPT_COOKIE, CURLOPTTYPE_STRINGPOINT, 22), + + /* This points to a linked list of headers, struct curl_slist kind. This + list is also used for RTSP (in spite of its name) */ + CURLOPT(CURLOPT_HTTPHEADER, CURLOPTTYPE_SLISTPOINT, 23), + + /* This points to a linked list of post entries, struct curl_httppost */ + CURLOPTDEPRECATED(CURLOPT_HTTPPOST, CURLOPTTYPE_OBJECTPOINT, 24, + 7.56.0, "Use CURLOPT_MIMEPOST"), + + /* name of the file keeping your private SSL-certificate */ + CURLOPT(CURLOPT_SSLCERT, CURLOPTTYPE_STRINGPOINT, 25), + + /* password for the SSL or SSH private key */ + CURLOPT(CURLOPT_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 26), + + /* send TYPE parameter? */ + CURLOPT(CURLOPT_CRLF, CURLOPTTYPE_LONG, 27), + + /* send linked-list of QUOTE commands */ + CURLOPT(CURLOPT_QUOTE, CURLOPTTYPE_SLISTPOINT, 28), + + /* send FILE * or void * to store headers to, if you use a callback it + is simply passed to the callback unmodified */ + CURLOPT(CURLOPT_HEADERDATA, CURLOPTTYPE_CBPOINT, 29), + + /* point to a file to read the initial cookies from, also enables + "cookie awareness" */ + CURLOPT(CURLOPT_COOKIEFILE, CURLOPTTYPE_STRINGPOINT, 31), + + /* What version to specifically try to use. + See CURL_SSLVERSION defines below. */ + CURLOPT(CURLOPT_SSLVERSION, CURLOPTTYPE_VALUES, 32), + + /* What kind of HTTP time condition to use, see defines */ + CURLOPT(CURLOPT_TIMECONDITION, CURLOPTTYPE_VALUES, 33), + + /* Time to use with the above condition. Specified in number of seconds + since 1 Jan 1970 */ + CURLOPT(CURLOPT_TIMEVALUE, CURLOPTTYPE_LONG, 34), + + /* 35 = OBSOLETE */ + + /* Custom request, for customizing the get command like + HTTP: DELETE, TRACE and others + FTP: to use a different list command + */ + CURLOPT(CURLOPT_CUSTOMREQUEST, CURLOPTTYPE_STRINGPOINT, 36), + + /* FILE handle to use instead of stderr */ + CURLOPT(CURLOPT_STDERR, CURLOPTTYPE_OBJECTPOINT, 37), + + /* 38 is not used */ + + /* send linked-list of post-transfer QUOTE commands */ + CURLOPT(CURLOPT_POSTQUOTE, CURLOPTTYPE_SLISTPOINT, 39), + + /* OBSOLETE, do not use! */ + CURLOPT(CURLOPT_OBSOLETE40, CURLOPTTYPE_OBJECTPOINT, 40), + + /* talk a lot */ + CURLOPT(CURLOPT_VERBOSE, CURLOPTTYPE_LONG, 41), + + /* throw the header out too */ + CURLOPT(CURLOPT_HEADER, CURLOPTTYPE_LONG, 42), + + /* shut off the progress meter */ + CURLOPT(CURLOPT_NOPROGRESS, CURLOPTTYPE_LONG, 43), + + /* use HEAD to get http document */ + CURLOPT(CURLOPT_NOBODY, CURLOPTTYPE_LONG, 44), + + /* no output on http error codes >= 400 */ + CURLOPT(CURLOPT_FAILONERROR, CURLOPTTYPE_LONG, 45), + + /* this is an upload */ + CURLOPT(CURLOPT_UPLOAD, CURLOPTTYPE_LONG, 46), + + /* HTTP POST method */ + CURLOPT(CURLOPT_POST, CURLOPTTYPE_LONG, 47), + + /* bare names when listing directories */ + CURLOPT(CURLOPT_DIRLISTONLY, CURLOPTTYPE_LONG, 48), + + /* Append instead of overwrite on upload! */ + CURLOPT(CURLOPT_APPEND, CURLOPTTYPE_LONG, 50), + + /* Specify whether to read the user+password from the .netrc or the URL. + * This must be one of the CURL_NETRC_* enums below. */ + CURLOPT(CURLOPT_NETRC, CURLOPTTYPE_VALUES, 51), + + /* use Location: Luke! */ + CURLOPT(CURLOPT_FOLLOWLOCATION, CURLOPTTYPE_LONG, 52), + + /* transfer data in text/ASCII format */ + CURLOPT(CURLOPT_TRANSFERTEXT, CURLOPTTYPE_LONG, 53), + + /* HTTP PUT */ + CURLOPTDEPRECATED(CURLOPT_PUT, CURLOPTTYPE_LONG, 54, + 7.12.1, "Use CURLOPT_UPLOAD"), + + /* 55 = OBSOLETE */ + + /* DEPRECATED + * Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_progress_callback + * prototype defines. */ + CURLOPTDEPRECATED(CURLOPT_PROGRESSFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 56, + 7.32.0, "Use CURLOPT_XFERINFOFUNCTION"), + + /* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION + callbacks */ + CURLOPT(CURLOPT_XFERINFODATA, CURLOPTTYPE_CBPOINT, 57), +#define CURLOPT_PROGRESSDATA CURLOPT_XFERINFODATA + + /* We want the referrer field set automatically when following locations */ + CURLOPT(CURLOPT_AUTOREFERER, CURLOPTTYPE_LONG, 58), + + /* Port of the proxy, can be set in the proxy string as well with: + "[host]:[port]" */ + CURLOPT(CURLOPT_PROXYPORT, CURLOPTTYPE_LONG, 59), + + /* size of the POST input data, if strlen() is not good to use */ + CURLOPT(CURLOPT_POSTFIELDSIZE, CURLOPTTYPE_LONG, 60), + + /* tunnel non-http operations through an HTTP proxy */ + CURLOPT(CURLOPT_HTTPPROXYTUNNEL, CURLOPTTYPE_LONG, 61), + + /* Set the interface string to use as outgoing network interface */ + CURLOPT(CURLOPT_INTERFACE, CURLOPTTYPE_STRINGPOINT, 62), + + /* Set the krb4/5 security level, this also enables krb4/5 awareness. This + * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string + * is set but doesn't match one of these, 'private' will be used. */ + CURLOPT(CURLOPT_KRBLEVEL, CURLOPTTYPE_STRINGPOINT, 63), + + /* Set if we should verify the peer in ssl handshake, set 1 to verify. */ + CURLOPT(CURLOPT_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 64), + + /* The CApath or CAfile used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAINFO, CURLOPTTYPE_STRINGPOINT, 65), + + /* 66 = OBSOLETE */ + /* 67 = OBSOLETE */ + + /* Maximum number of http redirects to follow */ + CURLOPT(CURLOPT_MAXREDIRS, CURLOPTTYPE_LONG, 68), + + /* Pass a long set to 1 to get the date of the requested document (if + possible)! Pass a zero to shut it off. */ + CURLOPT(CURLOPT_FILETIME, CURLOPTTYPE_LONG, 69), + + /* This points to a linked list of telnet options */ + CURLOPT(CURLOPT_TELNETOPTIONS, CURLOPTTYPE_SLISTPOINT, 70), + + /* Max amount of cached alive connections */ + CURLOPT(CURLOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 71), + + /* OBSOLETE, do not use! */ + CURLOPT(CURLOPT_OBSOLETE72, CURLOPTTYPE_LONG, 72), + + /* 73 = OBSOLETE */ + + /* Set to explicitly use a new connection for the upcoming transfer. + Do not use this unless you're absolutely sure of this, as it makes the + operation slower and is less friendly for the network. */ + CURLOPT(CURLOPT_FRESH_CONNECT, CURLOPTTYPE_LONG, 74), + + /* Set to explicitly forbid the upcoming transfer's connection to be reused + when done. Do not use this unless you're absolutely sure of this, as it + makes the operation slower and is less friendly for the network. */ + CURLOPT(CURLOPT_FORBID_REUSE, CURLOPTTYPE_LONG, 75), + + /* Set to a file name that contains random data for libcurl to use to + seed the random engine when doing SSL connects. */ + CURLOPTDEPRECATED(CURLOPT_RANDOM_FILE, CURLOPTTYPE_STRINGPOINT, 76, + 7.84.0, "Serves no purpose anymore"), + + /* Set to the Entropy Gathering Daemon socket pathname */ + CURLOPTDEPRECATED(CURLOPT_EGDSOCKET, CURLOPTTYPE_STRINGPOINT, 77, + 7.84.0, "Serves no purpose anymore"), + + /* Time-out connect operations after this amount of seconds, if connects are + OK within this time, then fine... This only aborts the connect phase. */ + CURLOPT(CURLOPT_CONNECTTIMEOUT, CURLOPTTYPE_LONG, 78), + + /* Function that will be called to store headers (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_HEADERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 79), + + /* Set this to force the HTTP request to get back to GET. Only really usable + if POST, PUT or a custom request have been used first. + */ + CURLOPT(CURLOPT_HTTPGET, CURLOPTTYPE_LONG, 80), + + /* Set if we should verify the Common name from the peer certificate in ssl + * handshake, set 1 to check existence, 2 to ensure that it matches the + * provided hostname. */ + CURLOPT(CURLOPT_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 81), + + /* Specify which file name to write all known cookies in after completed + operation. Set file name to "-" (dash) to make it go to stdout. */ + CURLOPT(CURLOPT_COOKIEJAR, CURLOPTTYPE_STRINGPOINT, 82), + + /* Specify which SSL ciphers to use */ + CURLOPT(CURLOPT_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 83), + + /* Specify which HTTP version to use! This must be set to one of the + CURL_HTTP_VERSION* enums set below. */ + CURLOPT(CURLOPT_HTTP_VERSION, CURLOPTTYPE_VALUES, 84), + + /* Specifically switch on or off the FTP engine's use of the EPSV command. By + default, that one will always be attempted before the more traditional + PASV command. */ + CURLOPT(CURLOPT_FTP_USE_EPSV, CURLOPTTYPE_LONG, 85), + + /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */ + CURLOPT(CURLOPT_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 86), + + /* name of the file keeping your private SSL-key */ + CURLOPT(CURLOPT_SSLKEY, CURLOPTTYPE_STRINGPOINT, 87), + + /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */ + CURLOPT(CURLOPT_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 88), + + /* crypto engine for the SSL-sub system */ + CURLOPT(CURLOPT_SSLENGINE, CURLOPTTYPE_STRINGPOINT, 89), + + /* set the crypto engine for the SSL-sub system as default + the param has no meaning... + */ + CURLOPT(CURLOPT_SSLENGINE_DEFAULT, CURLOPTTYPE_LONG, 90), + + /* Non-zero value means to use the global dns cache */ + /* DEPRECATED, do not use! */ + CURLOPTDEPRECATED(CURLOPT_DNS_USE_GLOBAL_CACHE, CURLOPTTYPE_LONG, 91, + 7.11.1, "Use CURLOPT_SHARE"), + + /* DNS cache timeout */ + CURLOPT(CURLOPT_DNS_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 92), + + /* send linked-list of pre-transfer QUOTE commands */ + CURLOPT(CURLOPT_PREQUOTE, CURLOPTTYPE_SLISTPOINT, 93), + + /* set the debug function */ + CURLOPT(CURLOPT_DEBUGFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 94), + + /* set the data for the debug function */ + CURLOPT(CURLOPT_DEBUGDATA, CURLOPTTYPE_CBPOINT, 95), + + /* mark this as start of a cookie session */ + CURLOPT(CURLOPT_COOKIESESSION, CURLOPTTYPE_LONG, 96), + + /* The CApath directory used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAPATH, CURLOPTTYPE_STRINGPOINT, 97), + + /* Instruct libcurl to use a smaller receive buffer */ + CURLOPT(CURLOPT_BUFFERSIZE, CURLOPTTYPE_LONG, 98), + + /* Instruct libcurl to not use any signal/alarm handlers, even when using + timeouts. This option is useful for multi-threaded applications. + See libcurl-the-guide for more background information. */ + CURLOPT(CURLOPT_NOSIGNAL, CURLOPTTYPE_LONG, 99), + + /* Provide a CURLShare for mutexing non-ts data */ + CURLOPT(CURLOPT_SHARE, CURLOPTTYPE_OBJECTPOINT, 100), + + /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default), + CURLPROXY_HTTPS, CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and + CURLPROXY_SOCKS5. */ + CURLOPT(CURLOPT_PROXYTYPE, CURLOPTTYPE_VALUES, 101), + + /* Set the Accept-Encoding string. Use this to tell a server you would like + the response to be compressed. Before 7.21.6, this was known as + CURLOPT_ENCODING */ + CURLOPT(CURLOPT_ACCEPT_ENCODING, CURLOPTTYPE_STRINGPOINT, 102), + + /* Set pointer to private data */ + CURLOPT(CURLOPT_PRIVATE, CURLOPTTYPE_OBJECTPOINT, 103), + + /* Set aliases for HTTP 200 in the HTTP Response header */ + CURLOPT(CURLOPT_HTTP200ALIASES, CURLOPTTYPE_SLISTPOINT, 104), + + /* Continue to send authentication (user+password) when following locations, + even when hostname changed. This can potentially send off the name + and password to whatever host the server decides. */ + CURLOPT(CURLOPT_UNRESTRICTED_AUTH, CURLOPTTYPE_LONG, 105), + + /* Specifically switch on or off the FTP engine's use of the EPRT command ( + it also disables the LPRT attempt). By default, those ones will always be + attempted before the good old traditional PORT command. */ + CURLOPT(CURLOPT_FTP_USE_EPRT, CURLOPTTYPE_LONG, 106), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_USERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CURLOPT(CURLOPT_HTTPAUTH, CURLOPTTYPE_VALUES, 107), + + /* Set the ssl context callback function, currently only for OpenSSL or + WolfSSL ssl_ctx, or mbedTLS mbedtls_ssl_config in the second argument. + The function must match the curl_ssl_ctx_callback prototype. */ + CURLOPT(CURLOPT_SSL_CTX_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 108), + + /* Set the userdata for the ssl context callback function's third + argument */ + CURLOPT(CURLOPT_SSL_CTX_DATA, CURLOPTTYPE_CBPOINT, 109), + + /* FTP Option that causes missing dirs to be created on the remote server. + In 7.19.4 we introduced the convenience enums for this option using the + CURLFTP_CREATE_DIR prefix. + */ + CURLOPT(CURLOPT_FTP_CREATE_MISSING_DIRS, CURLOPTTYPE_LONG, 110), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_PROXYUSERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CURLOPT(CURLOPT_PROXYAUTH, CURLOPTTYPE_VALUES, 111), + + /* Option that changes the timeout, in seconds, associated with getting a + response. This is different from transfer timeout time and essentially + places a demand on the server to acknowledge commands in a timely + manner. For FTP, SMTP, IMAP and POP3. */ + CURLOPT(CURLOPT_SERVER_RESPONSE_TIMEOUT, CURLOPTTYPE_LONG, 112), + + /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to + tell libcurl to use those IP versions only. This only has effect on + systems with support for more than one, i.e IPv4 _and_ IPv6. */ + CURLOPT(CURLOPT_IPRESOLVE, CURLOPTTYPE_VALUES, 113), + + /* Set this option to limit the size of a file that will be downloaded from + an HTTP or FTP server. + + Note there is also _LARGE version which adds large file support for + platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ + CURLOPT(CURLOPT_MAXFILESIZE, CURLOPTTYPE_LONG, 114), + + /* See the comment for INFILESIZE above, but in short, specifies + * the size of the file being uploaded. -1 means unknown. + */ + CURLOPT(CURLOPT_INFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 115), + + /* Sets the continuation offset. There is also a CURLOPTTYPE_LONG version + * of this; look above for RESUME_FROM. + */ + CURLOPT(CURLOPT_RESUME_FROM_LARGE, CURLOPTTYPE_OFF_T, 116), + + /* Sets the maximum size of data that will be downloaded from + * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. + */ + CURLOPT(CURLOPT_MAXFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 117), + + /* Set this option to the file name of your .netrc file you want libcurl + to parse (using the CURLOPT_NETRC option). If not set, libcurl will do + a poor attempt to find the user's home directory and check for a .netrc + file in there. */ + CURLOPT(CURLOPT_NETRC_FILE, CURLOPTTYPE_STRINGPOINT, 118), + + /* Enable SSL/TLS for FTP, pick one of: + CURLUSESSL_TRY - try using SSL, proceed anyway otherwise + CURLUSESSL_CONTROL - SSL for the control connection or fail + CURLUSESSL_ALL - SSL for all communication or fail + */ + CURLOPT(CURLOPT_USE_SSL, CURLOPTTYPE_VALUES, 119), + + /* The _LARGE version of the standard POSTFIELDSIZE option */ + CURLOPT(CURLOPT_POSTFIELDSIZE_LARGE, CURLOPTTYPE_OFF_T, 120), + + /* Enable/disable the TCP Nagle algorithm */ + CURLOPT(CURLOPT_TCP_NODELAY, CURLOPTTYPE_LONG, 121), + + /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 123 OBSOLETE. Gone in 7.16.0 */ + /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 127 OBSOLETE. Gone in 7.16.0 */ + /* 128 OBSOLETE. Gone in 7.16.0 */ + + /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option + can be used to change libcurl's default action which is to first try + "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK + response has been received. + + Available parameters are: + CURLFTPAUTH_DEFAULT - let libcurl decide + CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS + CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL + */ + CURLOPT(CURLOPT_FTPSSLAUTH, CURLOPTTYPE_VALUES, 129), + + CURLOPTDEPRECATED(CURLOPT_IOCTLFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 130, + 7.18.0, "Use CURLOPT_SEEKFUNCTION"), + CURLOPTDEPRECATED(CURLOPT_IOCTLDATA, CURLOPTTYPE_CBPOINT, 131, + 7.18.0, "Use CURLOPT_SEEKDATA"), + + /* 132 OBSOLETE. Gone in 7.16.0 */ + /* 133 OBSOLETE. Gone in 7.16.0 */ + + /* null-terminated string for pass on to the FTP server when asked for + "account" info */ + CURLOPT(CURLOPT_FTP_ACCOUNT, CURLOPTTYPE_STRINGPOINT, 134), + + /* feed cookie into cookie engine */ + CURLOPT(CURLOPT_COOKIELIST, CURLOPTTYPE_STRINGPOINT, 135), + + /* ignore Content-Length */ + CURLOPT(CURLOPT_IGNORE_CONTENT_LENGTH, CURLOPTTYPE_LONG, 136), + + /* Set to non-zero to skip the IP address received in a 227 PASV FTP server + response. Typically used for FTP-SSL purposes but is not restricted to + that. libcurl will then instead use the same IP address it used for the + control connection. */ + CURLOPT(CURLOPT_FTP_SKIP_PASV_IP, CURLOPTTYPE_LONG, 137), + + /* Select "file method" to use when doing FTP, see the curl_ftpmethod + above. */ + CURLOPT(CURLOPT_FTP_FILEMETHOD, CURLOPTTYPE_VALUES, 138), + + /* Local port number to bind the socket to */ + CURLOPT(CURLOPT_LOCALPORT, CURLOPTTYPE_LONG, 139), + + /* Number of ports to try, including the first one set with LOCALPORT. + Thus, setting it to 1 will make no additional attempts but the first. + */ + CURLOPT(CURLOPT_LOCALPORTRANGE, CURLOPTTYPE_LONG, 140), + + /* no transfer, set up connection and let application use the socket by + extracting it with CURLINFO_LASTSOCKET */ + CURLOPT(CURLOPT_CONNECT_ONLY, CURLOPTTYPE_LONG, 141), + + /* Function that will be called to convert from the + network encoding (instead of using the iconv calls in libcurl) */ + CURLOPTDEPRECATED(CURLOPT_CONV_FROM_NETWORK_FUNCTION, + CURLOPTTYPE_FUNCTIONPOINT, 142, + 7.82.0, "Serves no purpose anymore"), + + /* Function that will be called to convert to the + network encoding (instead of using the iconv calls in libcurl) */ + CURLOPTDEPRECATED(CURLOPT_CONV_TO_NETWORK_FUNCTION, + CURLOPTTYPE_FUNCTIONPOINT, 143, + 7.82.0, "Serves no purpose anymore"), + + /* Function that will be called to convert from UTF8 + (instead of using the iconv calls in libcurl) + Note that this is used only for SSL certificate processing */ + CURLOPTDEPRECATED(CURLOPT_CONV_FROM_UTF8_FUNCTION, + CURLOPTTYPE_FUNCTIONPOINT, 144, + 7.82.0, "Serves no purpose anymore"), + + /* if the connection proceeds too quickly then need to slow it down */ + /* limit-rate: maximum number of bytes per second to send or receive */ + CURLOPT(CURLOPT_MAX_SEND_SPEED_LARGE, CURLOPTTYPE_OFF_T, 145), + CURLOPT(CURLOPT_MAX_RECV_SPEED_LARGE, CURLOPTTYPE_OFF_T, 146), + + /* Pointer to command string to send if USER/PASS fails. */ + CURLOPT(CURLOPT_FTP_ALTERNATIVE_TO_USER, CURLOPTTYPE_STRINGPOINT, 147), + + /* callback function for setting socket options */ + CURLOPT(CURLOPT_SOCKOPTFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 148), + CURLOPT(CURLOPT_SOCKOPTDATA, CURLOPTTYPE_CBPOINT, 149), + + /* set to 0 to disable session ID reuse for this transfer, default is + enabled (== 1) */ + CURLOPT(CURLOPT_SSL_SESSIONID_CACHE, CURLOPTTYPE_LONG, 150), + + /* allowed SSH authentication methods */ + CURLOPT(CURLOPT_SSH_AUTH_TYPES, CURLOPTTYPE_VALUES, 151), + + /* Used by scp/sftp to do public/private key authentication */ + CURLOPT(CURLOPT_SSH_PUBLIC_KEYFILE, CURLOPTTYPE_STRINGPOINT, 152), + CURLOPT(CURLOPT_SSH_PRIVATE_KEYFILE, CURLOPTTYPE_STRINGPOINT, 153), + + /* Send CCC (Clear Command Channel) after authentication */ + CURLOPT(CURLOPT_FTP_SSL_CCC, CURLOPTTYPE_LONG, 154), + + /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */ + CURLOPT(CURLOPT_TIMEOUT_MS, CURLOPTTYPE_LONG, 155), + CURLOPT(CURLOPT_CONNECTTIMEOUT_MS, CURLOPTTYPE_LONG, 156), + + /* set to zero to disable the libcurl's decoding and thus pass the raw body + data to the application even when it is encoded/compressed */ + CURLOPT(CURLOPT_HTTP_TRANSFER_DECODING, CURLOPTTYPE_LONG, 157), + CURLOPT(CURLOPT_HTTP_CONTENT_DECODING, CURLOPTTYPE_LONG, 158), + + /* Permission used when creating new files and directories on the remote + server for protocols that support it, SFTP/SCP/FILE */ + CURLOPT(CURLOPT_NEW_FILE_PERMS, CURLOPTTYPE_LONG, 159), + CURLOPT(CURLOPT_NEW_DIRECTORY_PERMS, CURLOPTTYPE_LONG, 160), + + /* Set the behavior of POST when redirecting. Values must be set to one + of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */ + CURLOPT(CURLOPT_POSTREDIR, CURLOPTTYPE_VALUES, 161), + + /* used by scp/sftp to verify the host's public key */ + CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_MD5, CURLOPTTYPE_STRINGPOINT, 162), + + /* Callback function for opening socket (instead of socket(2)). Optionally, + callback is able change the address or refuse to connect returning + CURL_SOCKET_BAD. The callback should have type + curl_opensocket_callback */ + CURLOPT(CURLOPT_OPENSOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 163), + CURLOPT(CURLOPT_OPENSOCKETDATA, CURLOPTTYPE_CBPOINT, 164), + + /* POST volatile input fields. */ + CURLOPT(CURLOPT_COPYPOSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 165), + + /* set transfer mode (;type=) when doing FTP via an HTTP proxy */ + CURLOPT(CURLOPT_PROXY_TRANSFER_MODE, CURLOPTTYPE_LONG, 166), + + /* Callback function for seeking in the input stream */ + CURLOPT(CURLOPT_SEEKFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 167), + CURLOPT(CURLOPT_SEEKDATA, CURLOPTTYPE_CBPOINT, 168), + + /* CRL file */ + CURLOPT(CURLOPT_CRLFILE, CURLOPTTYPE_STRINGPOINT, 169), + + /* Issuer certificate */ + CURLOPT(CURLOPT_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 170), + + /* (IPv6) Address scope */ + CURLOPT(CURLOPT_ADDRESS_SCOPE, CURLOPTTYPE_LONG, 171), + + /* Collect certificate chain info and allow it to get retrievable with + CURLINFO_CERTINFO after the transfer is complete. */ + CURLOPT(CURLOPT_CERTINFO, CURLOPTTYPE_LONG, 172), + + /* "name" and "pwd" to use when fetching. */ + CURLOPT(CURLOPT_USERNAME, CURLOPTTYPE_STRINGPOINT, 173), + CURLOPT(CURLOPT_PASSWORD, CURLOPTTYPE_STRINGPOINT, 174), + + /* "name" and "pwd" to use with Proxy when fetching. */ + CURLOPT(CURLOPT_PROXYUSERNAME, CURLOPTTYPE_STRINGPOINT, 175), + CURLOPT(CURLOPT_PROXYPASSWORD, CURLOPTTYPE_STRINGPOINT, 176), + + /* Comma separated list of hostnames defining no-proxy zones. These should + match both hostnames directly, and hostnames within a domain. For + example, local.com will match local.com and www.local.com, but NOT + notlocal.com or www.notlocal.com. For compatibility with other + implementations of this, .local.com will be considered to be the same as + local.com. A single * is the only valid wildcard, and effectively + disables the use of proxy. */ + CURLOPT(CURLOPT_NOPROXY, CURLOPTTYPE_STRINGPOINT, 177), + + /* block size for TFTP transfers */ + CURLOPT(CURLOPT_TFTP_BLKSIZE, CURLOPTTYPE_LONG, 178), + + /* Socks Service */ + /* DEPRECATED, do not use! */ + CURLOPTDEPRECATED(CURLOPT_SOCKS5_GSSAPI_SERVICE, + CURLOPTTYPE_STRINGPOINT, 179, + 7.49.0, "Use CURLOPT_PROXY_SERVICE_NAME"), + + /* Socks Service */ + CURLOPT(CURLOPT_SOCKS5_GSSAPI_NEC, CURLOPTTYPE_LONG, 180), + + /* set the bitmask for the protocols that are allowed to be used for the + transfer, which thus helps the app which takes URLs from users or other + external inputs and want to restrict what protocol(s) to deal + with. Defaults to CURLPROTO_ALL. */ + CURLOPTDEPRECATED(CURLOPT_PROTOCOLS, CURLOPTTYPE_LONG, 181, + 7.85.0, "Use CURLOPT_PROTOCOLS_STR"), + + /* set the bitmask for the protocols that libcurl is allowed to follow to, + as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs + to be set in both bitmasks to be allowed to get redirected to. */ + CURLOPTDEPRECATED(CURLOPT_REDIR_PROTOCOLS, CURLOPTTYPE_LONG, 182, + 7.85.0, "Use CURLOPT_REDIR_PROTOCOLS_STR"), + + /* set the SSH knownhost file name to use */ + CURLOPT(CURLOPT_SSH_KNOWNHOSTS, CURLOPTTYPE_STRINGPOINT, 183), + + /* set the SSH host key callback, must point to a curl_sshkeycallback + function */ + CURLOPT(CURLOPT_SSH_KEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 184), + + /* set the SSH host key callback custom pointer */ + CURLOPT(CURLOPT_SSH_KEYDATA, CURLOPTTYPE_CBPOINT, 185), + + /* set the SMTP mail originator */ + CURLOPT(CURLOPT_MAIL_FROM, CURLOPTTYPE_STRINGPOINT, 186), + + /* set the list of SMTP mail receiver(s) */ + CURLOPT(CURLOPT_MAIL_RCPT, CURLOPTTYPE_SLISTPOINT, 187), + + /* FTP: send PRET before PASV */ + CURLOPT(CURLOPT_FTP_USE_PRET, CURLOPTTYPE_LONG, 188), + + /* RTSP request method (OPTIONS, SETUP, PLAY, etc...) */ + CURLOPT(CURLOPT_RTSP_REQUEST, CURLOPTTYPE_VALUES, 189), + + /* The RTSP session identifier */ + CURLOPT(CURLOPT_RTSP_SESSION_ID, CURLOPTTYPE_STRINGPOINT, 190), + + /* The RTSP stream URI */ + CURLOPT(CURLOPT_RTSP_STREAM_URI, CURLOPTTYPE_STRINGPOINT, 191), + + /* The Transport: header to use in RTSP requests */ + CURLOPT(CURLOPT_RTSP_TRANSPORT, CURLOPTTYPE_STRINGPOINT, 192), + + /* Manually initialize the client RTSP CSeq for this handle */ + CURLOPT(CURLOPT_RTSP_CLIENT_CSEQ, CURLOPTTYPE_LONG, 193), + + /* Manually initialize the server RTSP CSeq for this handle */ + CURLOPT(CURLOPT_RTSP_SERVER_CSEQ, CURLOPTTYPE_LONG, 194), + + /* The stream to pass to INTERLEAVEFUNCTION. */ + CURLOPT(CURLOPT_INTERLEAVEDATA, CURLOPTTYPE_CBPOINT, 195), + + /* Let the application define a custom write method for RTP data */ + CURLOPT(CURLOPT_INTERLEAVEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 196), + + /* Turn on wildcard matching */ + CURLOPT(CURLOPT_WILDCARDMATCH, CURLOPTTYPE_LONG, 197), + + /* Directory matching callback called before downloading of an + individual file (chunk) started */ + CURLOPT(CURLOPT_CHUNK_BGN_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 198), + + /* Directory matching callback called after the file (chunk) + was downloaded, or skipped */ + CURLOPT(CURLOPT_CHUNK_END_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 199), + + /* Change match (fnmatch-like) callback for wildcard matching */ + CURLOPT(CURLOPT_FNMATCH_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 200), + + /* Let the application define custom chunk data pointer */ + CURLOPT(CURLOPT_CHUNK_DATA, CURLOPTTYPE_CBPOINT, 201), + + /* FNMATCH_FUNCTION user pointer */ + CURLOPT(CURLOPT_FNMATCH_DATA, CURLOPTTYPE_CBPOINT, 202), + + /* send linked-list of name:port:address sets */ + CURLOPT(CURLOPT_RESOLVE, CURLOPTTYPE_SLISTPOINT, 203), + + /* Set a username for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 204), + + /* Set a password for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 205), + + /* Set authentication type for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 206), + + /* Set to 1 to enable the "TE:" header in HTTP requests to ask for + compressed transfer-encoded responses. Set to 0 to disable the use of TE: + in outgoing requests. The current default is 0, but it might change in a + future libcurl release. + + libcurl will ask for the compressed methods it knows of, and if that + isn't any, it will not ask for transfer-encoding at all even if this + option is set to 1. + + */ + CURLOPT(CURLOPT_TRANSFER_ENCODING, CURLOPTTYPE_LONG, 207), + + /* Callback function for closing socket (instead of close(2)). The callback + should have type curl_closesocket_callback */ + CURLOPT(CURLOPT_CLOSESOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 208), + CURLOPT(CURLOPT_CLOSESOCKETDATA, CURLOPTTYPE_CBPOINT, 209), + + /* allow GSSAPI credential delegation */ + CURLOPT(CURLOPT_GSSAPI_DELEGATION, CURLOPTTYPE_VALUES, 210), + + /* Set the name servers to use for DNS resolution */ + CURLOPT(CURLOPT_DNS_SERVERS, CURLOPTTYPE_STRINGPOINT, 211), + + /* Time-out accept operations (currently for FTP only) after this amount + of milliseconds. */ + CURLOPT(CURLOPT_ACCEPTTIMEOUT_MS, CURLOPTTYPE_LONG, 212), + + /* Set TCP keepalive */ + CURLOPT(CURLOPT_TCP_KEEPALIVE, CURLOPTTYPE_LONG, 213), + + /* non-universal keepalive knobs (Linux, AIX, HP-UX, more) */ + CURLOPT(CURLOPT_TCP_KEEPIDLE, CURLOPTTYPE_LONG, 214), + CURLOPT(CURLOPT_TCP_KEEPINTVL, CURLOPTTYPE_LONG, 215), + + /* Enable/disable specific SSL features with a bitmask, see CURLSSLOPT_* */ + CURLOPT(CURLOPT_SSL_OPTIONS, CURLOPTTYPE_VALUES, 216), + + /* Set the SMTP auth originator */ + CURLOPT(CURLOPT_MAIL_AUTH, CURLOPTTYPE_STRINGPOINT, 217), + + /* Enable/disable SASL initial response */ + CURLOPT(CURLOPT_SASL_IR, CURLOPTTYPE_LONG, 218), + + /* Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_xferinfo_callback + * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */ + CURLOPT(CURLOPT_XFERINFOFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 219), + + /* The XOAUTH2 bearer token */ + CURLOPT(CURLOPT_XOAUTH2_BEARER, CURLOPTTYPE_STRINGPOINT, 220), + + /* Set the interface string to use as outgoing network + * interface for DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_INTERFACE, CURLOPTTYPE_STRINGPOINT, 221), + + /* Set the local IPv4 address to use for outgoing DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_LOCAL_IP4, CURLOPTTYPE_STRINGPOINT, 222), + + /* Set the local IPv6 address to use for outgoing DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_LOCAL_IP6, CURLOPTTYPE_STRINGPOINT, 223), + + /* Set authentication options directly */ + CURLOPT(CURLOPT_LOGIN_OPTIONS, CURLOPTTYPE_STRINGPOINT, 224), + + /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */ + CURLOPTDEPRECATED(CURLOPT_SSL_ENABLE_NPN, CURLOPTTYPE_LONG, 225, + 7.86.0, "Has no function"), + + /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */ + CURLOPT(CURLOPT_SSL_ENABLE_ALPN, CURLOPTTYPE_LONG, 226), + + /* Time to wait for a response to an HTTP request containing an + * Expect: 100-continue header before sending the data anyway. */ + CURLOPT(CURLOPT_EXPECT_100_TIMEOUT_MS, CURLOPTTYPE_LONG, 227), + + /* This points to a linked list of headers used for proxy requests only, + struct curl_slist kind */ + CURLOPT(CURLOPT_PROXYHEADER, CURLOPTTYPE_SLISTPOINT, 228), + + /* Pass in a bitmask of "header options" */ + CURLOPT(CURLOPT_HEADEROPT, CURLOPTTYPE_VALUES, 229), + + /* The public key in DER form used to validate the peer public key + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 230), + + /* Path to Unix domain socket */ + CURLOPT(CURLOPT_UNIX_SOCKET_PATH, CURLOPTTYPE_STRINGPOINT, 231), + + /* Set if we should verify the certificate status. */ + CURLOPT(CURLOPT_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 232), + + /* Set if we should enable TLS false start. */ + CURLOPT(CURLOPT_SSL_FALSESTART, CURLOPTTYPE_LONG, 233), + + /* Do not squash dot-dot sequences */ + CURLOPT(CURLOPT_PATH_AS_IS, CURLOPTTYPE_LONG, 234), + + /* Proxy Service Name */ + CURLOPT(CURLOPT_PROXY_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 235), + + /* Service Name */ + CURLOPT(CURLOPT_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 236), + + /* Wait/don't wait for pipe/mutex to clarify */ + CURLOPT(CURLOPT_PIPEWAIT, CURLOPTTYPE_LONG, 237), + + /* Set the protocol used when curl is given a URL without a protocol */ + CURLOPT(CURLOPT_DEFAULT_PROTOCOL, CURLOPTTYPE_STRINGPOINT, 238), + + /* Set stream weight, 1 - 256 (default is 16) */ + CURLOPT(CURLOPT_STREAM_WEIGHT, CURLOPTTYPE_LONG, 239), + + /* Set stream dependency on another CURL handle */ + CURLOPT(CURLOPT_STREAM_DEPENDS, CURLOPTTYPE_OBJECTPOINT, 240), + + /* Set E-xclusive stream dependency on another CURL handle */ + CURLOPT(CURLOPT_STREAM_DEPENDS_E, CURLOPTTYPE_OBJECTPOINT, 241), + + /* Do not send any tftp option requests to the server */ + CURLOPT(CURLOPT_TFTP_NO_OPTIONS, CURLOPTTYPE_LONG, 242), + + /* Linked-list of host:port:connect-to-host:connect-to-port, + overrides the URL's host:port (only for the network layer) */ + CURLOPT(CURLOPT_CONNECT_TO, CURLOPTTYPE_SLISTPOINT, 243), + + /* Set TCP Fast Open */ + CURLOPT(CURLOPT_TCP_FASTOPEN, CURLOPTTYPE_LONG, 244), + + /* Continue to send data if the server responds early with an + * HTTP status code >= 300 */ + CURLOPT(CURLOPT_KEEP_SENDING_ON_ERROR, CURLOPTTYPE_LONG, 245), + + /* The CApath or CAfile used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAINFO, CURLOPTTYPE_STRINGPOINT, 246), + + /* The CApath directory used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAPATH, CURLOPTTYPE_STRINGPOINT, 247), + + /* Set if we should verify the proxy in ssl handshake, + set 1 to verify. */ + CURLOPT(CURLOPT_PROXY_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 248), + + /* Set if we should verify the Common name from the proxy certificate in ssl + * handshake, set 1 to check existence, 2 to ensure that it matches + * the provided hostname. */ + CURLOPT(CURLOPT_PROXY_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 249), + + /* What version to specifically try to use for proxy. + See CURL_SSLVERSION defines below. */ + CURLOPT(CURLOPT_PROXY_SSLVERSION, CURLOPTTYPE_VALUES, 250), + + /* Set a username for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 251), + + /* Set a password for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 252), + + /* Set authentication type for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 253), + + /* name of the file keeping your private SSL-certificate for proxy */ + CURLOPT(CURLOPT_PROXY_SSLCERT, CURLOPTTYPE_STRINGPOINT, 254), + + /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") for + proxy */ + CURLOPT(CURLOPT_PROXY_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 255), + + /* name of the file keeping your private SSL-key for proxy */ + CURLOPT(CURLOPT_PROXY_SSLKEY, CURLOPTTYPE_STRINGPOINT, 256), + + /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") for + proxy */ + CURLOPT(CURLOPT_PROXY_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 257), + + /* password for the SSL private key for proxy */ + CURLOPT(CURLOPT_PROXY_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 258), + + /* Specify which SSL ciphers to use for proxy */ + CURLOPT(CURLOPT_PROXY_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 259), + + /* CRL file for proxy */ + CURLOPT(CURLOPT_PROXY_CRLFILE, CURLOPTTYPE_STRINGPOINT, 260), + + /* Enable/disable specific SSL features with a bitmask for proxy, see + CURLSSLOPT_* */ + CURLOPT(CURLOPT_PROXY_SSL_OPTIONS, CURLOPTTYPE_LONG, 261), + + /* Name of pre proxy to use. */ + CURLOPT(CURLOPT_PRE_PROXY, CURLOPTTYPE_STRINGPOINT, 262), + + /* The public key in DER form used to validate the proxy public key + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 263), + + /* Path to an abstract Unix domain socket */ + CURLOPT(CURLOPT_ABSTRACT_UNIX_SOCKET, CURLOPTTYPE_STRINGPOINT, 264), + + /* Suppress proxy CONNECT response headers from user callbacks */ + CURLOPT(CURLOPT_SUPPRESS_CONNECT_HEADERS, CURLOPTTYPE_LONG, 265), + + /* The request target, instead of extracted from the URL */ + CURLOPT(CURLOPT_REQUEST_TARGET, CURLOPTTYPE_STRINGPOINT, 266), + + /* bitmask of allowed auth methods for connections to SOCKS5 proxies */ + CURLOPT(CURLOPT_SOCKS5_AUTH, CURLOPTTYPE_LONG, 267), + + /* Enable/disable SSH compression */ + CURLOPT(CURLOPT_SSH_COMPRESSION, CURLOPTTYPE_LONG, 268), + + /* Post MIME data. */ + CURLOPT(CURLOPT_MIMEPOST, CURLOPTTYPE_OBJECTPOINT, 269), + + /* Time to use with the CURLOPT_TIMECONDITION. Specified in number of + seconds since 1 Jan 1970. */ + CURLOPT(CURLOPT_TIMEVALUE_LARGE, CURLOPTTYPE_OFF_T, 270), + + /* Head start in milliseconds to give happy eyeballs. */ + CURLOPT(CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, CURLOPTTYPE_LONG, 271), + + /* Function that will be called before a resolver request is made */ + CURLOPT(CURLOPT_RESOLVER_START_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 272), + + /* User data to pass to the resolver start callback. */ + CURLOPT(CURLOPT_RESOLVER_START_DATA, CURLOPTTYPE_CBPOINT, 273), + + /* send HAProxy PROXY protocol header? */ + CURLOPT(CURLOPT_HAPROXYPROTOCOL, CURLOPTTYPE_LONG, 274), + + /* shuffle addresses before use when DNS returns multiple */ + CURLOPT(CURLOPT_DNS_SHUFFLE_ADDRESSES, CURLOPTTYPE_LONG, 275), + + /* Specify which TLS 1.3 ciphers suites to use */ + CURLOPT(CURLOPT_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 276), + CURLOPT(CURLOPT_PROXY_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 277), + + /* Disallow specifying username/login in URL. */ + CURLOPT(CURLOPT_DISALLOW_USERNAME_IN_URL, CURLOPTTYPE_LONG, 278), + + /* DNS-over-HTTPS URL */ + CURLOPT(CURLOPT_DOH_URL, CURLOPTTYPE_STRINGPOINT, 279), + + /* Preferred buffer size to use for uploads */ + CURLOPT(CURLOPT_UPLOAD_BUFFERSIZE, CURLOPTTYPE_LONG, 280), + + /* Time in ms between connection upkeep calls for long-lived connections. */ + CURLOPT(CURLOPT_UPKEEP_INTERVAL_MS, CURLOPTTYPE_LONG, 281), + + /* Specify URL using CURL URL API. */ + CURLOPT(CURLOPT_CURLU, CURLOPTTYPE_OBJECTPOINT, 282), + + /* add trailing data just after no more data is available */ + CURLOPT(CURLOPT_TRAILERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 283), + + /* pointer to be passed to HTTP_TRAILER_FUNCTION */ + CURLOPT(CURLOPT_TRAILERDATA, CURLOPTTYPE_CBPOINT, 284), + + /* set this to 1L to allow HTTP/0.9 responses or 0L to disallow */ + CURLOPT(CURLOPT_HTTP09_ALLOWED, CURLOPTTYPE_LONG, 285), + + /* alt-svc control bitmask */ + CURLOPT(CURLOPT_ALTSVC_CTRL, CURLOPTTYPE_LONG, 286), + + /* alt-svc cache file name to possibly read from/write to */ + CURLOPT(CURLOPT_ALTSVC, CURLOPTTYPE_STRINGPOINT, 287), + + /* maximum age (idle time) of a connection to consider it for reuse + * (in seconds) */ + CURLOPT(CURLOPT_MAXAGE_CONN, CURLOPTTYPE_LONG, 288), + + /* SASL authorization identity */ + CURLOPT(CURLOPT_SASL_AUTHZID, CURLOPTTYPE_STRINGPOINT, 289), + + /* allow RCPT TO command to fail for some recipients */ + CURLOPT(CURLOPT_MAIL_RCPT_ALLOWFAILS, CURLOPTTYPE_LONG, 290), + + /* the private SSL-certificate as a "blob" */ + CURLOPT(CURLOPT_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 291), + CURLOPT(CURLOPT_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 292), + CURLOPT(CURLOPT_PROXY_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 293), + CURLOPT(CURLOPT_PROXY_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 294), + CURLOPT(CURLOPT_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 295), + + /* Issuer certificate for proxy */ + CURLOPT(CURLOPT_PROXY_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 296), + CURLOPT(CURLOPT_PROXY_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 297), + + /* the EC curves requested by the TLS client (RFC 8422, 5.1); + * OpenSSL support via 'set_groups'/'set_curves': + * https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set1_groups.html + */ + CURLOPT(CURLOPT_SSL_EC_CURVES, CURLOPTTYPE_STRINGPOINT, 298), + + /* HSTS bitmask */ + CURLOPT(CURLOPT_HSTS_CTRL, CURLOPTTYPE_LONG, 299), + /* HSTS file name */ + CURLOPT(CURLOPT_HSTS, CURLOPTTYPE_STRINGPOINT, 300), + + /* HSTS read callback */ + CURLOPT(CURLOPT_HSTSREADFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 301), + CURLOPT(CURLOPT_HSTSREADDATA, CURLOPTTYPE_CBPOINT, 302), + + /* HSTS write callback */ + CURLOPT(CURLOPT_HSTSWRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 303), + CURLOPT(CURLOPT_HSTSWRITEDATA, CURLOPTTYPE_CBPOINT, 304), + + /* Parameters for V4 signature */ + CURLOPT(CURLOPT_AWS_SIGV4, CURLOPTTYPE_STRINGPOINT, 305), + + /* Same as CURLOPT_SSL_VERIFYPEER but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 306), + + /* Same as CURLOPT_SSL_VERIFYHOST but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 307), + + /* Same as CURLOPT_SSL_VERIFYSTATUS but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 308), + + /* The CA certificates as "blob" used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAINFO_BLOB, CURLOPTTYPE_BLOB, 309), + + /* The CA certificates as "blob" used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAINFO_BLOB, CURLOPTTYPE_BLOB, 310), + + /* used by scp/sftp to verify the host's public key */ + CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256, CURLOPTTYPE_STRINGPOINT, 311), + + /* Function that will be called immediately before the initial request + is made on a connection (after any protocol negotiation step). */ + CURLOPT(CURLOPT_PREREQFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 312), + + /* Data passed to the CURLOPT_PREREQFUNCTION callback */ + CURLOPT(CURLOPT_PREREQDATA, CURLOPTTYPE_CBPOINT, 313), + + /* maximum age (since creation) of a connection to consider it for reuse + * (in seconds) */ + CURLOPT(CURLOPT_MAXLIFETIME_CONN, CURLOPTTYPE_LONG, 314), + + /* Set MIME option flags. */ + CURLOPT(CURLOPT_MIME_OPTIONS, CURLOPTTYPE_LONG, 315), + + /* set the SSH host key callback, must point to a curl_sshkeycallback + function */ + CURLOPT(CURLOPT_SSH_HOSTKEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 316), + + /* set the SSH host key callback custom pointer */ + CURLOPT(CURLOPT_SSH_HOSTKEYDATA, CURLOPTTYPE_CBPOINT, 317), + + /* specify which protocols that are allowed to be used for the transfer, + which thus helps the app which takes URLs from users or other external + inputs and want to restrict what protocol(s) to deal with. Defaults to + all built-in protocols. */ + CURLOPT(CURLOPT_PROTOCOLS_STR, CURLOPTTYPE_STRINGPOINT, 318), + + /* specify which protocols that libcurl is allowed to follow directs to */ + CURLOPT(CURLOPT_REDIR_PROTOCOLS_STR, CURLOPTTYPE_STRINGPOINT, 319), + + /* websockets options */ + CURLOPT(CURLOPT_WS_OPTIONS, CURLOPTTYPE_LONG, 320), + + /* CA cache timeout */ + CURLOPT(CURLOPT_CA_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 321), + + /* Can leak things, gonna exit() soon */ + CURLOPT(CURLOPT_QUICK_EXIT, CURLOPTTYPE_LONG, 322), + + /* set a specific client IP for HAProxy PROXY protocol header? */ + CURLOPT(CURLOPT_HAPROXY_CLIENT_IP, CURLOPTTYPE_STRINGPOINT, 323), + + CURLOPT_LASTENTRY /* the last unused */ +} CURLoption; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2011 */ + +/* This was added in version 7.19.1 */ +#define CURLOPT_POST301 CURLOPT_POSTREDIR + +/* These are scheduled to disappear by 2009 */ + +/* The following were added in 7.17.0 */ +#define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD +#define CURLOPT_FTPAPPEND CURLOPT_APPEND +#define CURLOPT_FTPLISTONLY CURLOPT_DIRLISTONLY +#define CURLOPT_FTP_SSL CURLOPT_USE_SSL + +/* The following were added earlier */ + +#define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD +#define CURLOPT_KRB4LEVEL CURLOPT_KRBLEVEL + +/* */ +#define CURLOPT_FTP_RESPONSE_TIMEOUT CURLOPT_SERVER_RESPONSE_TIMEOUT + +/* Added in 8.2.0 */ +#define CURLOPT_MAIL_RCPT_ALLLOWFAILS CURLOPT_MAIL_RCPT_ALLOWFAILS + +#else +/* This is set if CURL_NO_OLDIES is defined at compile-time */ +#undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */ +#endif + + + /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host + name resolves addresses using more than one IP protocol version, this + option might be handy to force libcurl to use a specific IP version. */ +#define CURL_IPRESOLVE_WHATEVER 0 /* default, uses addresses to all IP + versions that your system allows */ +#define CURL_IPRESOLVE_V4 1 /* uses only IPv4 addresses/connections */ +#define CURL_IPRESOLVE_V6 2 /* uses only IPv6 addresses/connections */ + + /* Convenient "aliases" */ +#define CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER + + /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ +enum { + CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd + like the library to choose the best possible + for us! */ + CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ + CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ + CURL_HTTP_VERSION_2_0, /* please use HTTP 2 in the request */ + CURL_HTTP_VERSION_2TLS, /* use version 2 for HTTPS, version 1.1 for HTTP */ + CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE, /* please use HTTP 2 without HTTP/1.1 + Upgrade */ + CURL_HTTP_VERSION_3 = 30, /* Use HTTP/3, fallback to HTTP/2 or HTTP/1 if + needed. For HTTPS only. For HTTP, this option + makes libcurl return error. */ + CURL_HTTP_VERSION_3ONLY = 31, /* Use HTTP/3 without fallback. For HTTPS + only. For HTTP, this makes libcurl + return error. */ + + CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */ +}; + +/* Convenience definition simple because the name of the version is HTTP/2 and + not 2.0. The 2_0 version of the enum name was set while the version was + still planned to be 2.0 and we stick to it for compatibility. */ +#define CURL_HTTP_VERSION_2 CURL_HTTP_VERSION_2_0 + +/* + * Public API enums for RTSP requests + */ +enum { + CURL_RTSPREQ_NONE, /* first in list */ + CURL_RTSPREQ_OPTIONS, + CURL_RTSPREQ_DESCRIBE, + CURL_RTSPREQ_ANNOUNCE, + CURL_RTSPREQ_SETUP, + CURL_RTSPREQ_PLAY, + CURL_RTSPREQ_PAUSE, + CURL_RTSPREQ_TEARDOWN, + CURL_RTSPREQ_GET_PARAMETER, + CURL_RTSPREQ_SET_PARAMETER, + CURL_RTSPREQ_RECORD, + CURL_RTSPREQ_RECEIVE, + CURL_RTSPREQ_LAST /* last in list */ +}; + + /* These enums are for use with the CURLOPT_NETRC option. */ +enum CURL_NETRC_OPTION { + CURL_NETRC_IGNORED, /* The .netrc will never be read. + * This is the default. */ + CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred + * to one in the .netrc. */ + CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. + * Unless one is set programmatically, the .netrc + * will be queried. */ + CURL_NETRC_LAST +}; + +enum { + CURL_SSLVERSION_DEFAULT, + CURL_SSLVERSION_TLSv1, /* TLS 1.x */ + CURL_SSLVERSION_SSLv2, + CURL_SSLVERSION_SSLv3, + CURL_SSLVERSION_TLSv1_0, + CURL_SSLVERSION_TLSv1_1, + CURL_SSLVERSION_TLSv1_2, + CURL_SSLVERSION_TLSv1_3, + + CURL_SSLVERSION_LAST /* never use, keep last */ +}; + +enum { + CURL_SSLVERSION_MAX_NONE = 0, + CURL_SSLVERSION_MAX_DEFAULT = (CURL_SSLVERSION_TLSv1 << 16), + CURL_SSLVERSION_MAX_TLSv1_0 = (CURL_SSLVERSION_TLSv1_0 << 16), + CURL_SSLVERSION_MAX_TLSv1_1 = (CURL_SSLVERSION_TLSv1_1 << 16), + CURL_SSLVERSION_MAX_TLSv1_2 = (CURL_SSLVERSION_TLSv1_2 << 16), + CURL_SSLVERSION_MAX_TLSv1_3 = (CURL_SSLVERSION_TLSv1_3 << 16), + + /* never use, keep last */ + CURL_SSLVERSION_MAX_LAST = (CURL_SSLVERSION_LAST << 16) +}; + +enum CURL_TLSAUTH { + CURL_TLSAUTH_NONE, + CURL_TLSAUTH_SRP, + CURL_TLSAUTH_LAST /* never use, keep last */ +}; + +/* symbols to use with CURLOPT_POSTREDIR. + CURL_REDIR_POST_301, CURL_REDIR_POST_302 and CURL_REDIR_POST_303 + can be bitwise ORed so that CURL_REDIR_POST_301 | CURL_REDIR_POST_302 + | CURL_REDIR_POST_303 == CURL_REDIR_POST_ALL */ + +#define CURL_REDIR_GET_ALL 0 +#define CURL_REDIR_POST_301 1 +#define CURL_REDIR_POST_302 2 +#define CURL_REDIR_POST_303 4 +#define CURL_REDIR_POST_ALL \ + (CURL_REDIR_POST_301|CURL_REDIR_POST_302|CURL_REDIR_POST_303) + +typedef enum { + CURL_TIMECOND_NONE, + + CURL_TIMECOND_IFMODSINCE, + CURL_TIMECOND_IFUNMODSINCE, + CURL_TIMECOND_LASTMOD, + + CURL_TIMECOND_LAST +} curl_TimeCond; + +/* Special size_t value signaling a null-terminated string. */ +#define CURL_ZERO_TERMINATED ((size_t) -1) + +/* curl_strequal() and curl_strnequal() are subject for removal in a future + release */ +CURL_EXTERN int curl_strequal(const char *s1, const char *s2); +CURL_EXTERN int curl_strnequal(const char *s1, const char *s2, size_t n); + +/* Mime/form handling support. */ +typedef struct curl_mime curl_mime; /* Mime context. */ +typedef struct curl_mimepart curl_mimepart; /* Mime part context. */ + +/* CURLMIMEOPT_ defines are for the CURLOPT_MIME_OPTIONS option. */ +#define CURLMIMEOPT_FORMESCAPE (1<<0) /* Use backslash-escaping for forms. */ + +/* + * NAME curl_mime_init() + * + * DESCRIPTION + * + * Create a mime context and return its handle. The easy parameter is the + * target handle. + */ +CURL_EXTERN curl_mime *curl_mime_init(CURL *easy); + +/* + * NAME curl_mime_free() + * + * DESCRIPTION + * + * release a mime handle and its substructures. + */ +CURL_EXTERN void curl_mime_free(curl_mime *mime); + +/* + * NAME curl_mime_addpart() + * + * DESCRIPTION + * + * Append a new empty part to the given mime context and return a handle to + * the created part. + */ +CURL_EXTERN curl_mimepart *curl_mime_addpart(curl_mime *mime); + +/* + * NAME curl_mime_name() + * + * DESCRIPTION + * + * Set mime/form part name. + */ +CURL_EXTERN CURLcode curl_mime_name(curl_mimepart *part, const char *name); + +/* + * NAME curl_mime_filename() + * + * DESCRIPTION + * + * Set mime part remote file name. + */ +CURL_EXTERN CURLcode curl_mime_filename(curl_mimepart *part, + const char *filename); + +/* + * NAME curl_mime_type() + * + * DESCRIPTION + * + * Set mime part type. + */ +CURL_EXTERN CURLcode curl_mime_type(curl_mimepart *part, const char *mimetype); + +/* + * NAME curl_mime_encoder() + * + * DESCRIPTION + * + * Set mime data transfer encoder. + */ +CURL_EXTERN CURLcode curl_mime_encoder(curl_mimepart *part, + const char *encoding); + +/* + * NAME curl_mime_data() + * + * DESCRIPTION + * + * Set mime part data source from memory data, + */ +CURL_EXTERN CURLcode curl_mime_data(curl_mimepart *part, + const char *data, size_t datasize); + +/* + * NAME curl_mime_filedata() + * + * DESCRIPTION + * + * Set mime part data source from named file. + */ +CURL_EXTERN CURLcode curl_mime_filedata(curl_mimepart *part, + const char *filename); + +/* + * NAME curl_mime_data_cb() + * + * DESCRIPTION + * + * Set mime part data source from callback function. + */ +CURL_EXTERN CURLcode curl_mime_data_cb(curl_mimepart *part, + curl_off_t datasize, + curl_read_callback readfunc, + curl_seek_callback seekfunc, + curl_free_callback freefunc, + void *arg); + +/* + * NAME curl_mime_subparts() + * + * DESCRIPTION + * + * Set mime part data source from subparts. + */ +CURL_EXTERN CURLcode curl_mime_subparts(curl_mimepart *part, + curl_mime *subparts); +/* + * NAME curl_mime_headers() + * + * DESCRIPTION + * + * Set mime part headers. + */ +CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part, + struct curl_slist *headers, + int take_ownership); + +typedef enum { + /********* the first one is unused ************/ + CURLFORM_NOTHING CURL_DEPRECATED(7.56.0, ""), + CURLFORM_COPYNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), + CURLFORM_PTRNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), + CURLFORM_NAMELENGTH CURL_DEPRECATED(7.56.0, ""), + CURLFORM_COPYCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_PTRCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_CONTENTSLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_FILECONTENT CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), + CURLFORM_ARRAY CURL_DEPRECATED(7.56.0, ""), + CURLFORM_OBSOLETE, + CURLFORM_FILE CURL_DEPRECATED(7.56.0, "Use curl_mime_filedata()"), + + CURLFORM_BUFFER CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), + CURLFORM_BUFFERPTR CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_BUFFERLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + + CURLFORM_CONTENTTYPE CURL_DEPRECATED(7.56.0, "Use curl_mime_type()"), + CURLFORM_CONTENTHEADER CURL_DEPRECATED(7.56.0, "Use curl_mime_headers()"), + CURLFORM_FILENAME CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), + CURLFORM_END, + CURLFORM_OBSOLETE2, + + CURLFORM_STREAM CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), + CURLFORM_CONTENTLEN /* added in 7.46.0, provide a curl_off_t length */ + CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + + CURLFORM_LASTENTRY /* the last unused */ +} CURLformoption; + +/* structure to be used as parameter for CURLFORM_ARRAY */ +struct curl_forms { + CURLformoption option; + const char *value; +}; + +/* use this for multipart formpost building */ +/* Returns code for curl_formadd() + * + * Returns: + * CURL_FORMADD_OK on success + * CURL_FORMADD_MEMORY if the FormInfo allocation fails + * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form + * CURL_FORMADD_NULL if a null pointer was given for a char + * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed + * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used + * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) + * CURL_FORMADD_MEMORY if a curl_httppost struct cannot be allocated + * CURL_FORMADD_MEMORY if some allocation for string copying failed. + * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array + * + ***************************************************************************/ +typedef enum { + CURL_FORMADD_OK CURL_DEPRECATED(7.56.0, ""), /* 1st, no error */ + + CURL_FORMADD_MEMORY CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_OPTION_TWICE CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_NULL CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_UNKNOWN_OPTION CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_INCOMPLETE CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_ILLEGAL_ARRAY CURL_DEPRECATED(7.56.0, ""), + /* libcurl was built with form api disabled */ + CURL_FORMADD_DISABLED CURL_DEPRECATED(7.56.0, ""), + + CURL_FORMADD_LAST /* last */ +} CURLFORMcode; + +/* + * NAME curl_formadd() + * + * DESCRIPTION + * + * Pretty advanced function for building multi-part formposts. Each invoke + * adds one part that together construct a full post. Then use + * CURLOPT_HTTPPOST to send it off to libcurl. + */ +CURL_EXTERN CURLFORMcode CURL_DEPRECATED(7.56.0, "Use curl_mime_init()") +curl_formadd(struct curl_httppost **httppost, + struct curl_httppost **last_post, + ...); + +/* + * callback function for curl_formget() + * The void *arg pointer will be the one passed as second argument to + * curl_formget(). + * The character buffer passed to it must not be freed. + * Should return the buffer length passed to it as the argument "len" on + * success. + */ +typedef size_t (*curl_formget_callback)(void *arg, const char *buf, + size_t len); + +/* + * NAME curl_formget() + * + * DESCRIPTION + * + * Serialize a curl_httppost struct built with curl_formadd(). + * Accepts a void pointer as second argument which will be passed to + * the curl_formget_callback function. + * Returns 0 on success. + */ +CURL_EXTERN int CURL_DEPRECATED(7.56.0, "") +curl_formget(struct curl_httppost *form, void *arg, + curl_formget_callback append); +/* + * NAME curl_formfree() + * + * DESCRIPTION + * + * Free a multipart formpost previously built with curl_formadd(). + */ +CURL_EXTERN void CURL_DEPRECATED(7.56.0, "Use curl_mime_free()") +curl_formfree(struct curl_httppost *form); + +/* + * NAME curl_getenv() + * + * DESCRIPTION + * + * Returns a malloc()'ed string that MUST be curl_free()ed after usage is + * complete. DEPRECATED - see lib/README.curlx + */ +CURL_EXTERN char *curl_getenv(const char *variable); + +/* + * NAME curl_version() + * + * DESCRIPTION + * + * Returns a static ascii string of the libcurl version. + */ +CURL_EXTERN char *curl_version(void); + +/* + * NAME curl_easy_escape() + * + * DESCRIPTION + * + * Escapes URL strings (converts all letters consider illegal in URLs to their + * %XX versions). This function returns a new allocated string or NULL if an + * error occurred. + */ +CURL_EXTERN char *curl_easy_escape(CURL *handle, + const char *string, + int length); + +/* the previous version: */ +CURL_EXTERN char *curl_escape(const char *string, + int length); + + +/* + * NAME curl_easy_unescape() + * + * DESCRIPTION + * + * Unescapes URL encoding in strings (converts all %XX codes to their 8bit + * versions). This function returns a new allocated string or NULL if an error + * occurred. + * Conversion Note: On non-ASCII platforms the ASCII %XX codes are + * converted into the host encoding. + */ +CURL_EXTERN char *curl_easy_unescape(CURL *handle, + const char *string, + int length, + int *outlength); + +/* the previous version */ +CURL_EXTERN char *curl_unescape(const char *string, + int length); + +/* + * NAME curl_free() + * + * DESCRIPTION + * + * Provided for de-allocation in the same translation unit that did the + * allocation. Added in libcurl 7.10 + */ +CURL_EXTERN void curl_free(void *p); + +/* + * NAME curl_global_init() + * + * DESCRIPTION + * + * curl_global_init() should be invoked exactly once for each application that + * uses libcurl and before any call of other libcurl functions. + + * This function is thread-safe if CURL_VERSION_THREADSAFE is set in the + * curl_version_info_data.features flag (fetch by curl_version_info()). + + */ +CURL_EXTERN CURLcode curl_global_init(long flags); + +/* + * NAME curl_global_init_mem() + * + * DESCRIPTION + * + * curl_global_init() or curl_global_init_mem() should be invoked exactly once + * for each application that uses libcurl. This function can be used to + * initialize libcurl and set user defined memory management callback + * functions. Users can implement memory management routines to check for + * memory leaks, check for mis-use of the curl library etc. User registered + * callback routines will be invoked by this library instead of the system + * memory management routines like malloc, free etc. + */ +CURL_EXTERN CURLcode curl_global_init_mem(long flags, + curl_malloc_callback m, + curl_free_callback f, + curl_realloc_callback r, + curl_strdup_callback s, + curl_calloc_callback c); + +/* + * NAME curl_global_cleanup() + * + * DESCRIPTION + * + * curl_global_cleanup() should be invoked exactly once for each application + * that uses libcurl + */ +CURL_EXTERN void curl_global_cleanup(void); + +/* + * NAME curl_global_trace() + * + * DESCRIPTION + * + * curl_global_trace() can be invoked at application start to + * configure which components in curl should participate in tracing. + + * This function is thread-safe if CURL_VERSION_THREADSAFE is set in the + * curl_version_info_data.features flag (fetch by curl_version_info()). + + */ +CURL_EXTERN CURLcode curl_global_trace(const char *config); + +/* linked-list structure for the CURLOPT_QUOTE option (and other) */ +struct curl_slist { + char *data; + struct curl_slist *next; +}; + +/* + * NAME curl_global_sslset() + * + * DESCRIPTION + * + * When built with multiple SSL backends, curl_global_sslset() allows to + * choose one. This function can only be called once, and it must be called + * *before* curl_global_init(). + * + * The backend can be identified by the id (e.g. CURLSSLBACKEND_OPENSSL). The + * backend can also be specified via the name parameter (passing -1 as id). + * If both id and name are specified, the name will be ignored. If neither id + * nor name are specified, the function will fail with + * CURLSSLSET_UNKNOWN_BACKEND and set the "avail" pointer to the + * NULL-terminated list of available backends. + * + * Upon success, the function returns CURLSSLSET_OK. + * + * If the specified SSL backend is not available, the function returns + * CURLSSLSET_UNKNOWN_BACKEND and sets the "avail" pointer to a NULL-terminated + * list of available SSL backends. + * + * The SSL backend can be set only once. If it has already been set, a + * subsequent attempt to change it will result in a CURLSSLSET_TOO_LATE. + */ + +struct curl_ssl_backend { + curl_sslbackend id; + const char *name; +}; +typedef struct curl_ssl_backend curl_ssl_backend; + +typedef enum { + CURLSSLSET_OK = 0, + CURLSSLSET_UNKNOWN_BACKEND, + CURLSSLSET_TOO_LATE, + CURLSSLSET_NO_BACKENDS /* libcurl was built without any SSL support */ +} CURLsslset; + +CURL_EXTERN CURLsslset curl_global_sslset(curl_sslbackend id, const char *name, + const curl_ssl_backend ***avail); + +/* + * NAME curl_slist_append() + * + * DESCRIPTION + * + * Appends a string to a linked list. If no list exists, it will be created + * first. Returns the new list, after appending. + */ +CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *list, + const char *data); + +/* + * NAME curl_slist_free_all() + * + * DESCRIPTION + * + * free a previously built curl_slist. + */ +CURL_EXTERN void curl_slist_free_all(struct curl_slist *list); + +/* + * NAME curl_getdate() + * + * DESCRIPTION + * + * Returns the time, in seconds since 1 Jan 1970 of the time string given in + * the first argument. The time argument in the second parameter is unused + * and should be set to NULL. + */ +CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused); + +/* info about the certificate chain, for SSL backends that support it. Asked + for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */ +struct curl_certinfo { + int num_of_certs; /* number of certificates with information */ + struct curl_slist **certinfo; /* for each index in this array, there's a + linked list with textual information for a + certificate in the format "name:content". + eg "Subject:foo", "Issuer:bar", etc. */ +}; + +/* Information about the SSL library used and the respective internal SSL + handle, which can be used to obtain further information regarding the + connection. Asked for with CURLINFO_TLS_SSL_PTR or CURLINFO_TLS_SESSION. */ +struct curl_tlssessioninfo { + curl_sslbackend backend; + void *internals; +}; + +#define CURLINFO_STRING 0x100000 +#define CURLINFO_LONG 0x200000 +#define CURLINFO_DOUBLE 0x300000 +#define CURLINFO_SLIST 0x400000 +#define CURLINFO_PTR 0x400000 /* same as SLIST */ +#define CURLINFO_SOCKET 0x500000 +#define CURLINFO_OFF_T 0x600000 +#define CURLINFO_MASK 0x0fffff +#define CURLINFO_TYPEMASK 0xf00000 + +typedef enum { + CURLINFO_NONE, /* first, never use this */ + CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, + CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, + CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, + CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, + CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, + CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6, + CURLINFO_SIZE_UPLOAD CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_UPLOAD_T") + = CURLINFO_DOUBLE + 7, + CURLINFO_SIZE_UPLOAD_T = CURLINFO_OFF_T + 7, + CURLINFO_SIZE_DOWNLOAD + CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_DOWNLOAD_T") + = CURLINFO_DOUBLE + 8, + CURLINFO_SIZE_DOWNLOAD_T = CURLINFO_OFF_T + 8, + CURLINFO_SPEED_DOWNLOAD + CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_DOWNLOAD_T") + = CURLINFO_DOUBLE + 9, + CURLINFO_SPEED_DOWNLOAD_T = CURLINFO_OFF_T + 9, + CURLINFO_SPEED_UPLOAD + CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_UPLOAD_T") + = CURLINFO_DOUBLE + 10, + CURLINFO_SPEED_UPLOAD_T = CURLINFO_OFF_T + 10, + CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, + CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, + CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, + CURLINFO_FILETIME = CURLINFO_LONG + 14, + CURLINFO_FILETIME_T = CURLINFO_OFF_T + 14, + CURLINFO_CONTENT_LENGTH_DOWNLOAD + CURL_DEPRECATED(7.55.0, + "Use CURLINFO_CONTENT_LENGTH_DOWNLOAD_T") + = CURLINFO_DOUBLE + 15, + CURLINFO_CONTENT_LENGTH_DOWNLOAD_T = CURLINFO_OFF_T + 15, + CURLINFO_CONTENT_LENGTH_UPLOAD + CURL_DEPRECATED(7.55.0, + "Use CURLINFO_CONTENT_LENGTH_UPLOAD_T") + = CURLINFO_DOUBLE + 16, + CURLINFO_CONTENT_LENGTH_UPLOAD_T = CURLINFO_OFF_T + 16, + CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, + CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, + CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, + CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, + CURLINFO_PRIVATE = CURLINFO_STRING + 21, + CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, + CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, + CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, + CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, + CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, + CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, + CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, + CURLINFO_LASTSOCKET CURL_DEPRECATED(7.45.0, "Use CURLINFO_ACTIVESOCKET") + = CURLINFO_LONG + 29, + CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, + CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31, + CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32, + CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33, + CURLINFO_CERTINFO = CURLINFO_PTR + 34, + CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35, + CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36, + CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37, + CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38, + CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39, + CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40, + CURLINFO_LOCAL_IP = CURLINFO_STRING + 41, + CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42, + CURLINFO_TLS_SESSION CURL_DEPRECATED(7.48.0, "Use CURLINFO_TLS_SSL_PTR") + = CURLINFO_PTR + 43, + CURLINFO_ACTIVESOCKET = CURLINFO_SOCKET + 44, + CURLINFO_TLS_SSL_PTR = CURLINFO_PTR + 45, + CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46, + CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47, + CURLINFO_PROTOCOL CURL_DEPRECATED(7.85.0, "Use CURLINFO_SCHEME") + = CURLINFO_LONG + 48, + CURLINFO_SCHEME = CURLINFO_STRING + 49, + CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50, + CURLINFO_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51, + CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52, + CURLINFO_PRETRANSFER_TIME_T = CURLINFO_OFF_T + 53, + CURLINFO_STARTTRANSFER_TIME_T = CURLINFO_OFF_T + 54, + CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55, + CURLINFO_APPCONNECT_TIME_T = CURLINFO_OFF_T + 56, + CURLINFO_RETRY_AFTER = CURLINFO_OFF_T + 57, + CURLINFO_EFFECTIVE_METHOD = CURLINFO_STRING + 58, + CURLINFO_PROXY_ERROR = CURLINFO_LONG + 59, + CURLINFO_REFERER = CURLINFO_STRING + 60, + CURLINFO_CAINFO = CURLINFO_STRING + 61, + CURLINFO_CAPATH = CURLINFO_STRING + 62, + CURLINFO_XFER_ID = CURLINFO_OFF_T + 63, + CURLINFO_CONN_ID = CURLINFO_OFF_T + 64, + CURLINFO_LASTONE = 64 +} CURLINFO; + +/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as + CURLINFO_HTTP_CODE */ +#define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE + +typedef enum { + CURLCLOSEPOLICY_NONE, /* first, never use this */ + + CURLCLOSEPOLICY_OLDEST, + CURLCLOSEPOLICY_LEAST_RECENTLY_USED, + CURLCLOSEPOLICY_LEAST_TRAFFIC, + CURLCLOSEPOLICY_SLOWEST, + CURLCLOSEPOLICY_CALLBACK, + + CURLCLOSEPOLICY_LAST /* last, never use this */ +} curl_closepolicy; + +#define CURL_GLOBAL_SSL (1<<0) /* no purpose since 7.57.0 */ +#define CURL_GLOBAL_WIN32 (1<<1) +#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) +#define CURL_GLOBAL_NOTHING 0 +#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL +#define CURL_GLOBAL_ACK_EINTR (1<<2) + + +/***************************************************************************** + * Setup defines, protos etc for the sharing stuff. + */ + +/* Different data locks for a single share */ +typedef enum { + CURL_LOCK_DATA_NONE = 0, + /* CURL_LOCK_DATA_SHARE is used internally to say that + * the locking is just made to change the internal state of the share + * itself. + */ + CURL_LOCK_DATA_SHARE, + CURL_LOCK_DATA_COOKIE, + CURL_LOCK_DATA_DNS, + CURL_LOCK_DATA_SSL_SESSION, + CURL_LOCK_DATA_CONNECT, + CURL_LOCK_DATA_PSL, + CURL_LOCK_DATA_HSTS, + CURL_LOCK_DATA_LAST +} curl_lock_data; + +/* Different lock access types */ +typedef enum { + CURL_LOCK_ACCESS_NONE = 0, /* unspecified action */ + CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */ + CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */ + CURL_LOCK_ACCESS_LAST /* never use */ +} curl_lock_access; + +typedef void (*curl_lock_function)(CURL *handle, + curl_lock_data data, + curl_lock_access locktype, + void *userptr); +typedef void (*curl_unlock_function)(CURL *handle, + curl_lock_data data, + void *userptr); + + +typedef enum { + CURLSHE_OK, /* all is fine */ + CURLSHE_BAD_OPTION, /* 1 */ + CURLSHE_IN_USE, /* 2 */ + CURLSHE_INVALID, /* 3 */ + CURLSHE_NOMEM, /* 4 out of memory */ + CURLSHE_NOT_BUILT_IN, /* 5 feature not present in lib */ + CURLSHE_LAST /* never use */ +} CURLSHcode; + +typedef enum { + CURLSHOPT_NONE, /* don't use */ + CURLSHOPT_SHARE, /* specify a data type to share */ + CURLSHOPT_UNSHARE, /* specify which data type to stop sharing */ + CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */ + CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */ + CURLSHOPT_USERDATA, /* pass in a user data pointer used in the lock/unlock + callback functions */ + CURLSHOPT_LAST /* never use */ +} CURLSHoption; + +CURL_EXTERN CURLSH *curl_share_init(void); +CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, + ...); +CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *share); + +/**************************************************************************** + * Structures for querying information about the curl library at runtime. + */ + +typedef enum { + CURLVERSION_FIRST, + CURLVERSION_SECOND, + CURLVERSION_THIRD, + CURLVERSION_FOURTH, + CURLVERSION_FIFTH, + CURLVERSION_SIXTH, + CURLVERSION_SEVENTH, + CURLVERSION_EIGHTH, + CURLVERSION_NINTH, + CURLVERSION_TENTH, + CURLVERSION_ELEVENTH, + CURLVERSION_LAST /* never actually use this */ +} CURLversion; + +/* The 'CURLVERSION_NOW' is the symbolic name meant to be used by + basically all programs ever that want to get version information. It is + meant to be a built-in version number for what kind of struct the caller + expects. If the struct ever changes, we redefine the NOW to another enum + from above. */ +#define CURLVERSION_NOW CURLVERSION_ELEVENTH + +struct curl_version_info_data { + CURLversion age; /* age of the returned struct */ + const char *version; /* LIBCURL_VERSION */ + unsigned int version_num; /* LIBCURL_VERSION_NUM */ + const char *host; /* OS/host/cpu/machine when configured */ + int features; /* bitmask, see defines below */ + const char *ssl_version; /* human readable string */ + long ssl_version_num; /* not used anymore, always 0 */ + const char *libz_version; /* human readable string */ + /* protocols is terminated by an entry with a NULL protoname */ + const char * const *protocols; + + /* The fields below this were added in CURLVERSION_SECOND */ + const char *ares; + int ares_num; + + /* This field was added in CURLVERSION_THIRD */ + const char *libidn; + + /* These field were added in CURLVERSION_FOURTH */ + + /* Same as '_libiconv_version' if built with HAVE_ICONV */ + int iconv_ver_num; + + const char *libssh_version; /* human readable string */ + + /* These fields were added in CURLVERSION_FIFTH */ + unsigned int brotli_ver_num; /* Numeric Brotli version + (MAJOR << 24) | (MINOR << 12) | PATCH */ + const char *brotli_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_SIXTH */ + unsigned int nghttp2_ver_num; /* Numeric nghttp2 version + (MAJOR << 16) | (MINOR << 8) | PATCH */ + const char *nghttp2_version; /* human readable string. */ + const char *quic_version; /* human readable quic (+ HTTP/3) library + + version or NULL */ + + /* These fields were added in CURLVERSION_SEVENTH */ + const char *cainfo; /* the built-in default CURLOPT_CAINFO, might + be NULL */ + const char *capath; /* the built-in default CURLOPT_CAPATH, might + be NULL */ + + /* These fields were added in CURLVERSION_EIGHTH */ + unsigned int zstd_ver_num; /* Numeric Zstd version + (MAJOR << 24) | (MINOR << 12) | PATCH */ + const char *zstd_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_NINTH */ + const char *hyper_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_TENTH */ + const char *gsasl_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_ELEVENTH */ + /* feature_names is terminated by an entry with a NULL feature name */ + const char * const *feature_names; +}; +typedef struct curl_version_info_data curl_version_info_data; + +#define CURL_VERSION_IPV6 (1<<0) /* IPv6-enabled */ +#define CURL_VERSION_KERBEROS4 (1<<1) /* Kerberos V4 auth is supported + (deprecated) */ +#define CURL_VERSION_SSL (1<<2) /* SSL options are present */ +#define CURL_VERSION_LIBZ (1<<3) /* libz features are present */ +#define CURL_VERSION_NTLM (1<<4) /* NTLM auth is supported */ +#define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth is supported + (deprecated) */ +#define CURL_VERSION_DEBUG (1<<6) /* Built with debug capabilities */ +#define CURL_VERSION_ASYNCHDNS (1<<7) /* Asynchronous DNS resolves */ +#define CURL_VERSION_SPNEGO (1<<8) /* SPNEGO auth is supported */ +#define CURL_VERSION_LARGEFILE (1<<9) /* Supports files larger than 2GB */ +#define CURL_VERSION_IDN (1<<10) /* Internationized Domain Names are + supported */ +#define CURL_VERSION_SSPI (1<<11) /* Built against Windows SSPI */ +#define CURL_VERSION_CONV (1<<12) /* Character conversions supported */ +#define CURL_VERSION_CURLDEBUG (1<<13) /* Debug memory tracking supported */ +#define CURL_VERSION_TLSAUTH_SRP (1<<14) /* TLS-SRP auth is supported */ +#define CURL_VERSION_NTLM_WB (1<<15) /* NTLM delegation to winbind helper + is supported */ +#define CURL_VERSION_HTTP2 (1<<16) /* HTTP2 support built-in */ +#define CURL_VERSION_GSSAPI (1<<17) /* Built against a GSS-API library */ +#define CURL_VERSION_KERBEROS5 (1<<18) /* Kerberos V5 auth is supported */ +#define CURL_VERSION_UNIX_SOCKETS (1<<19) /* Unix domain sockets support */ +#define CURL_VERSION_PSL (1<<20) /* Mozilla's Public Suffix List, used + for cookie domain verification */ +#define CURL_VERSION_HTTPS_PROXY (1<<21) /* HTTPS-proxy support built-in */ +#define CURL_VERSION_MULTI_SSL (1<<22) /* Multiple SSL backends available */ +#define CURL_VERSION_BROTLI (1<<23) /* Brotli features are present. */ +#define CURL_VERSION_ALTSVC (1<<24) /* Alt-Svc handling built-in */ +#define CURL_VERSION_HTTP3 (1<<25) /* HTTP3 support built-in */ +#define CURL_VERSION_ZSTD (1<<26) /* zstd features are present */ +#define CURL_VERSION_UNICODE (1<<27) /* Unicode support on Windows */ +#define CURL_VERSION_HSTS (1<<28) /* HSTS is supported */ +#define CURL_VERSION_GSASL (1<<29) /* libgsasl is supported */ +#define CURL_VERSION_THREADSAFE (1<<30) /* libcurl API is thread-safe */ + + /* + * NAME curl_version_info() + * + * DESCRIPTION + * + * This function returns a pointer to a static copy of the version info + * struct. See above. + */ +CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion); + +/* + * NAME curl_easy_strerror() + * + * DESCRIPTION + * + * The curl_easy_strerror function may be used to turn a CURLcode value + * into the equivalent human readable error string. This is useful + * for printing meaningful error messages. + */ +CURL_EXTERN const char *curl_easy_strerror(CURLcode); + +/* + * NAME curl_share_strerror() + * + * DESCRIPTION + * + * The curl_share_strerror function may be used to turn a CURLSHcode value + * into the equivalent human readable error string. This is useful + * for printing meaningful error messages. + */ +CURL_EXTERN const char *curl_share_strerror(CURLSHcode); + +/* + * NAME curl_easy_pause() + * + * DESCRIPTION + * + * The curl_easy_pause function pauses or unpauses transfers. Select the new + * state by setting the bitmask, use the convenience defines below. + * + */ +CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask); + +#define CURLPAUSE_RECV (1<<0) +#define CURLPAUSE_RECV_CONT (0) + +#define CURLPAUSE_SEND (1<<2) +#define CURLPAUSE_SEND_CONT (0) + +#define CURLPAUSE_ALL (CURLPAUSE_RECV|CURLPAUSE_SEND) +#define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT) + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +/* unfortunately, the easy.h and multi.h include files need options and info + stuff before they can be included! */ +#include "easy.h" /* nothing in curl is fun without the easy stuff */ +#include "multi.h" +#include "urlapi.h" +#include "options.h" +#include "header.h" +#include "websockets.h" + +/* the typechecker doesn't work in C++ (yet) */ +#if defined(__GNUC__) && defined(__GNUC_MINOR__) && \ + ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && \ + !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK) +#include "typecheck-gcc.h" +#else +#if defined(__STDC__) && (__STDC__ >= 1) +/* This preprocessor magic that replaces a call with the exact same call is + only done to make sure application authors pass exactly three arguments + to these functions. */ +#define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param) +#define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg) +#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) +#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) +#endif /* __STDC__ >= 1 */ +#endif /* gcc >= 4.3 && !__cplusplus && !CURL_DISABLE_TYPECHECK */ + +#endif /* CURLINC_CURL_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/curlver.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/curlver.h new file mode 100644 index 0000000..44e6070 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/curlver.h @@ -0,0 +1,79 @@ +#ifndef CURLINC_CURLVER_H +#define CURLINC_CURLVER_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* This header file contains nothing but libcurl version info, generated by + a script at release-time. This was made its own header file in 7.11.2 */ + +/* This is the global package copyright */ +#define LIBCURL_COPYRIGHT "Daniel Stenberg, ." + +/* This is the version number of the libcurl package from which this header + file origins: */ +#define LIBCURL_VERSION "8.4.0" + +/* The numeric version number is also available "in parts" by using these + defines: */ +#define LIBCURL_VERSION_MAJOR 8 +#define LIBCURL_VERSION_MINOR 4 +#define LIBCURL_VERSION_PATCH 0 + +/* This is the numeric version of the libcurl version number, meant for easier + parsing and comparisons by programs. The LIBCURL_VERSION_NUM define will + always follow this syntax: + + 0xXXYYZZ + + Where XX, YY and ZZ are the main version, release and patch numbers in + hexadecimal (using 8 bits each). All three numbers are always represented + using two digits. 1.2 would appear as "0x010200" while version 9.11.7 + appears as "0x090b07". + + This 6-digit (24 bits) hexadecimal number does not show pre-release number, + and it is always a greater number in a more recent release. It makes + comparisons with greater than and less than work. + + Note: This define is the full hex number and _does not_ use the + CURL_VERSION_BITS() macro since curl's own configure script greps for it + and needs it to contain the full number. +*/ +#define LIBCURL_VERSION_NUM 0x080400 + +/* + * This is the date and time when the full source package was created. The + * timestamp is not stored in git, as the timestamp is properly set in the + * tarballs by the maketgz script. + * + * The format of the date follows this template: + * + * "2007-11-23" + */ +#define LIBCURL_TIMESTAMP "2023-10-11" + +#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z)) +#define CURL_AT_LEAST_VERSION(x,y,z) \ + (LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z)) + +#endif /* CURLINC_CURLVER_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/easy.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/easy.h new file mode 100644 index 0000000..1285101 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/easy.h @@ -0,0 +1,125 @@ +#ifndef CURLINC_EASY_H +#define CURLINC_EASY_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + +/* Flag bits in the curl_blob struct: */ +#define CURL_BLOB_COPY 1 /* tell libcurl to copy the data */ +#define CURL_BLOB_NOCOPY 0 /* tell libcurl to NOT copy the data */ + +struct curl_blob { + void *data; + size_t len; + unsigned int flags; /* bit 0 is defined, the rest are reserved and should be + left zeroes */ +}; + +CURL_EXTERN CURL *curl_easy_init(void); +CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...); +CURL_EXTERN CURLcode curl_easy_perform(CURL *curl); +CURL_EXTERN void curl_easy_cleanup(CURL *curl); + +/* + * NAME curl_easy_getinfo() + * + * DESCRIPTION + * + * Request internal information from the curl session with this function. + * The third argument MUST be pointing to the specific type of the used option + * which is documented in each man page of the option. The data pointed to + * will be filled in accordingly and can be relied upon only if the function + * returns CURLE_OK. This function is intended to get used *AFTER* a performed + * transfer, all results from this function are undefined until the transfer + * is completed. + */ +CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...); + + +/* + * NAME curl_easy_duphandle() + * + * DESCRIPTION + * + * Creates a new curl session handle with the same options set for the handle + * passed in. Duplicating a handle could only be a matter of cloning data and + * options, internal state info and things like persistent connections cannot + * be transferred. It is useful in multithreaded applications when you can run + * curl_easy_duphandle() for each new thread to avoid a series of identical + * curl_easy_setopt() invokes in every thread. + */ +CURL_EXTERN CURL *curl_easy_duphandle(CURL *curl); + +/* + * NAME curl_easy_reset() + * + * DESCRIPTION + * + * Re-initializes a CURL handle to the default values. This puts back the + * handle to the same state as it was in when it was just created. + * + * It does keep: live connections, the Session ID cache, the DNS cache and the + * cookies. + */ +CURL_EXTERN void curl_easy_reset(CURL *curl); + +/* + * NAME curl_easy_recv() + * + * DESCRIPTION + * + * Receives data from the connected socket. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, + size_t *n); + +/* + * NAME curl_easy_send() + * + * DESCRIPTION + * + * Sends data over the connected socket. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer, + size_t buflen, size_t *n); + + +/* + * NAME curl_easy_upkeep() + * + * DESCRIPTION + * + * Performs connection upkeep for the given session handle. + */ +CURL_EXTERN CURLcode curl_easy_upkeep(CURL *curl); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/header.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/header.h new file mode 100644 index 0000000..8df11e1 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/header.h @@ -0,0 +1,74 @@ +#ifndef CURLINC_HEADER_H +#define CURLINC_HEADER_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +struct curl_header { + char *name; /* this might not use the same case */ + char *value; + size_t amount; /* number of headers using this name */ + size_t index; /* ... of this instance, 0 or higher */ + unsigned int origin; /* see bits below */ + void *anchor; /* handle privately used by libcurl */ +}; + +/* 'origin' bits */ +#define CURLH_HEADER (1<<0) /* plain server header */ +#define CURLH_TRAILER (1<<1) /* trailers */ +#define CURLH_CONNECT (1<<2) /* CONNECT headers */ +#define CURLH_1XX (1<<3) /* 1xx headers */ +#define CURLH_PSEUDO (1<<4) /* pseudo headers */ + +typedef enum { + CURLHE_OK, + CURLHE_BADINDEX, /* header exists but not with this index */ + CURLHE_MISSING, /* no such header exists */ + CURLHE_NOHEADERS, /* no headers at all exist (yet) */ + CURLHE_NOREQUEST, /* no request with this number was used */ + CURLHE_OUT_OF_MEMORY, /* out of memory while processing */ + CURLHE_BAD_ARGUMENT, /* a function argument was not okay */ + CURLHE_NOT_BUILT_IN /* if API was disabled in the build */ +} CURLHcode; + +CURL_EXTERN CURLHcode curl_easy_header(CURL *easy, + const char *name, + size_t index, + unsigned int origin, + int request, + struct curl_header **hout); + +CURL_EXTERN struct curl_header *curl_easy_nextheader(CURL *easy, + unsigned int origin, + int request, + struct curl_header *prev); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_HEADER_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/mprintf.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/mprintf.h new file mode 100644 index 0000000..dc5664b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/mprintf.h @@ -0,0 +1,70 @@ +#ifndef CURLINC_MPRINTF_H +#define CURLINC_MPRINTF_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include +#include /* needed for FILE */ +#include "curl.h" /* for CURL_EXTERN */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if (defined(__GNUC__) || defined(__clang__)) && \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__MINGW32__) && !defined(CURL_NO_FMT_CHECKS) +#define CURL_TEMP_PRINTF(a,b) __attribute__ ((format(printf, a, b))) +#else +#define CURL_TEMP_PRINTF(a,b) +#endif + +CURL_EXTERN int curl_mprintf(const char *format, ...) CURL_TEMP_PRINTF(1, 2); +CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...) + CURL_TEMP_PRINTF(2, 3); +CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...) + CURL_TEMP_PRINTF(2, 3); +CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength, + const char *format, ...) CURL_TEMP_PRINTF(3, 4); +CURL_EXTERN int curl_mvprintf(const char *format, va_list args) + CURL_TEMP_PRINTF(1, 0); +CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args) + CURL_TEMP_PRINTF(2, 0); +CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args) + CURL_TEMP_PRINTF(2, 0); +CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength, + const char *format, va_list args) + CURL_TEMP_PRINTF(3, 0); +CURL_EXTERN char *curl_maprintf(const char *format, ...) + CURL_TEMP_PRINTF(1, 2); +CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args) + CURL_TEMP_PRINTF(1, 0); + +#undef CURL_TEMP_PRINTF + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_MPRINTF_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/multi.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/multi.h new file mode 100644 index 0000000..e79b48f --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/multi.h @@ -0,0 +1,471 @@ +#ifndef CURLINC_MULTI_H +#define CURLINC_MULTI_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ +/* + This is an "external" header file. Don't give away any internals here! + + GOALS + + o Enable a "pull" interface. The application that uses libcurl decides where + and when to ask libcurl to get/send data. + + o Enable multiple simultaneous transfers in the same thread without making it + complicated for the application. + + o Enable the application to select() on its own file descriptors and curl's + file descriptors simultaneous easily. + +*/ + +/* + * This header file should not really need to include "curl.h" since curl.h + * itself includes this file and we expect user applications to do #include + * without the need for especially including multi.h. + * + * For some reason we added this include here at one point, and rather than to + * break existing (wrongly written) libcurl applications, we leave it as-is + * but with this warning attached. + */ +#include "curl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) +typedef struct Curl_multi CURLM; +#else +typedef void CURLM; +#endif + +typedef enum { + CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or + curl_multi_socket*() soon */ + CURLM_OK, + CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */ + CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */ + CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */ + CURLM_INTERNAL_ERROR, /* this is a libcurl bug */ + CURLM_BAD_SOCKET, /* the passed in socket argument did not match */ + CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */ + CURLM_ADDED_ALREADY, /* an easy handle already added to a multi handle was + attempted to get added - again */ + CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a + callback */ + CURLM_WAKEUP_FAILURE, /* wakeup is unavailable or failed */ + CURLM_BAD_FUNCTION_ARGUMENT, /* function called with a bad parameter */ + CURLM_ABORTED_BY_CALLBACK, + CURLM_UNRECOVERABLE_POLL, + CURLM_LAST +} CURLMcode; + +/* just to make code nicer when using curl_multi_socket() you can now check + for CURLM_CALL_MULTI_SOCKET too in the same style it works for + curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */ +#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM + +/* bitmask bits for CURLMOPT_PIPELINING */ +#define CURLPIPE_NOTHING 0L +#define CURLPIPE_HTTP1 1L +#define CURLPIPE_MULTIPLEX 2L + +typedef enum { + CURLMSG_NONE, /* first, not used */ + CURLMSG_DONE, /* This easy handle has completed. 'result' contains + the CURLcode of the transfer */ + CURLMSG_LAST /* last, not used */ +} CURLMSG; + +struct CURLMsg { + CURLMSG msg; /* what this message means */ + CURL *easy_handle; /* the handle it concerns */ + union { + void *whatever; /* message-specific data */ + CURLcode result; /* return code for transfer */ + } data; +}; +typedef struct CURLMsg CURLMsg; + +/* Based on poll(2) structure and values. + * We don't use pollfd and POLL* constants explicitly + * to cover platforms without poll(). */ +#define CURL_WAIT_POLLIN 0x0001 +#define CURL_WAIT_POLLPRI 0x0002 +#define CURL_WAIT_POLLOUT 0x0004 + +struct curl_waitfd { + curl_socket_t fd; + short events; + short revents; +}; + +/* + * Name: curl_multi_init() + * + * Desc: initialize multi-style curl usage + * + * Returns: a new CURLM handle to use in all 'curl_multi' functions. + */ +CURL_EXTERN CURLM *curl_multi_init(void); + +/* + * Name: curl_multi_add_handle() + * + * Desc: add a standard curl handle to the multi stack + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle, + CURL *curl_handle); + + /* + * Name: curl_multi_remove_handle() + * + * Desc: removes a curl handle from the multi stack again + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle, + CURL *curl_handle); + + /* + * Name: curl_multi_fdset() + * + * Desc: Ask curl for its fd_set sets. The app can use these to select() or + * poll() on. We want curl_multi_perform() called as soon as one of + * them are ready. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle, + fd_set *read_fd_set, + fd_set *write_fd_set, + fd_set *exc_fd_set, + int *max_fd); + +/* + * Name: curl_multi_wait() + * + * Desc: Poll on all fds within a CURLM set as well as any + * additional fds passed to the function. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle, + struct curl_waitfd extra_fds[], + unsigned int extra_nfds, + int timeout_ms, + int *ret); + +/* + * Name: curl_multi_poll() + * + * Desc: Poll on all fds within a CURLM set as well as any + * additional fds passed to the function. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_poll(CURLM *multi_handle, + struct curl_waitfd extra_fds[], + unsigned int extra_nfds, + int timeout_ms, + int *ret); + +/* + * Name: curl_multi_wakeup() + * + * Desc: wakes up a sleeping curl_multi_poll call. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_wakeup(CURLM *multi_handle); + + /* + * Name: curl_multi_perform() + * + * Desc: When the app thinks there's data available for curl it calls this + * function to read/write whatever there is right now. This returns + * as soon as the reads and writes are done. This function does not + * require that there actually is data available for reading or that + * data can be written, it can be called just in case. It returns + * the number of handles that still transfer data in the second + * argument's integer-pointer. + * + * Returns: CURLMcode type, general multi error code. *NOTE* that this only + * returns errors etc regarding the whole multi stack. There might + * still have occurred problems on individual transfers even when + * this returns OK. + */ +CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle, + int *running_handles); + + /* + * Name: curl_multi_cleanup() + * + * Desc: Cleans up and removes a whole multi stack. It does not free or + * touch any individual easy handles in any way. We need to define + * in what state those handles will be if this function is called + * in the middle of a transfer. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle); + +/* + * Name: curl_multi_info_read() + * + * Desc: Ask the multi handle if there's any messages/informationals from + * the individual transfers. Messages include informationals such as + * error code from the transfer or just the fact that a transfer is + * completed. More details on these should be written down as well. + * + * Repeated calls to this function will return a new struct each + * time, until a special "end of msgs" struct is returned as a signal + * that there is no more to get at this point. + * + * The data the returned pointer points to will not survive calling + * curl_multi_cleanup(). + * + * The 'CURLMsg' struct is meant to be very simple and only contain + * very basic information. If more involved information is wanted, + * we will provide the particular "transfer handle" in that struct + * and that should/could/would be used in subsequent + * curl_easy_getinfo() calls (or similar). The point being that we + * must never expose complex structs to applications, as then we'll + * undoubtably get backwards compatibility problems in the future. + * + * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out + * of structs. It also writes the number of messages left in the + * queue (after this read) in the integer the second argument points + * to. + */ +CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle, + int *msgs_in_queue); + +/* + * Name: curl_multi_strerror() + * + * Desc: The curl_multi_strerror function may be used to turn a CURLMcode + * value into the equivalent human readable error string. This is + * useful for printing meaningful error messages. + * + * Returns: A pointer to a null-terminated error message. + */ +CURL_EXTERN const char *curl_multi_strerror(CURLMcode); + +/* + * Name: curl_multi_socket() and + * curl_multi_socket_all() + * + * Desc: An alternative version of curl_multi_perform() that allows the + * application to pass in one of the file descriptors that have been + * detected to have "action" on them and let libcurl perform. + * See man page for details. + */ +#define CURL_POLL_NONE 0 +#define CURL_POLL_IN 1 +#define CURL_POLL_OUT 2 +#define CURL_POLL_INOUT 3 +#define CURL_POLL_REMOVE 4 + +#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD + +#define CURL_CSELECT_IN 0x01 +#define CURL_CSELECT_OUT 0x02 +#define CURL_CSELECT_ERR 0x04 + +typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */ + curl_socket_t s, /* socket */ + int what, /* see above */ + void *userp, /* private callback + pointer */ + void *socketp); /* private socket + pointer */ +/* + * Name: curl_multi_timer_callback + * + * Desc: Called by libcurl whenever the library detects a change in the + * maximum number of milliseconds the app is allowed to wait before + * curl_multi_socket() or curl_multi_perform() must be called + * (to allow libcurl's timed events to take place). + * + * Returns: The callback should return zero. + */ +typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */ + long timeout_ms, /* see above */ + void *userp); /* private callback + pointer */ + +CURL_EXTERN CURLMcode CURL_DEPRECATED(7.19.5, "Use curl_multi_socket_action()") +curl_multi_socket(CURLM *multi_handle, curl_socket_t s, int *running_handles); + +CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle, + curl_socket_t s, + int ev_bitmask, + int *running_handles); + +CURL_EXTERN CURLMcode CURL_DEPRECATED(7.19.5, "Use curl_multi_socket_action()") +curl_multi_socket_all(CURLM *multi_handle, int *running_handles); + +#ifndef CURL_ALLOW_OLD_MULTI_SOCKET +/* This macro below was added in 7.16.3 to push users who recompile to use + the new curl_multi_socket_action() instead of the old curl_multi_socket() +*/ +#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z) +#endif + +/* + * Name: curl_multi_timeout() + * + * Desc: Returns the maximum number of milliseconds the app is allowed to + * wait before curl_multi_socket() or curl_multi_perform() must be + * called (to allow libcurl's timed events to take place). + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle, + long *milliseconds); + +typedef enum { + /* This is the socket callback function pointer */ + CURLOPT(CURLMOPT_SOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 1), + + /* This is the argument passed to the socket callback */ + CURLOPT(CURLMOPT_SOCKETDATA, CURLOPTTYPE_OBJECTPOINT, 2), + + /* set to 1 to enable pipelining for this multi handle */ + CURLOPT(CURLMOPT_PIPELINING, CURLOPTTYPE_LONG, 3), + + /* This is the timer callback function pointer */ + CURLOPT(CURLMOPT_TIMERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 4), + + /* This is the argument passed to the timer callback */ + CURLOPT(CURLMOPT_TIMERDATA, CURLOPTTYPE_OBJECTPOINT, 5), + + /* maximum number of entries in the connection cache */ + CURLOPT(CURLMOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 6), + + /* maximum number of (pipelining) connections to one host */ + CURLOPT(CURLMOPT_MAX_HOST_CONNECTIONS, CURLOPTTYPE_LONG, 7), + + /* maximum number of requests in a pipeline */ + CURLOPT(CURLMOPT_MAX_PIPELINE_LENGTH, CURLOPTTYPE_LONG, 8), + + /* a connection with a content-length longer than this + will not be considered for pipelining */ + CURLOPT(CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 9), + + /* a connection with a chunk length longer than this + will not be considered for pipelining */ + CURLOPT(CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 10), + + /* a list of site names(+port) that are blocked from pipelining */ + CURLOPT(CURLMOPT_PIPELINING_SITE_BL, CURLOPTTYPE_OBJECTPOINT, 11), + + /* a list of server types that are blocked from pipelining */ + CURLOPT(CURLMOPT_PIPELINING_SERVER_BL, CURLOPTTYPE_OBJECTPOINT, 12), + + /* maximum number of open connections in total */ + CURLOPT(CURLMOPT_MAX_TOTAL_CONNECTIONS, CURLOPTTYPE_LONG, 13), + + /* This is the server push callback function pointer */ + CURLOPT(CURLMOPT_PUSHFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 14), + + /* This is the argument passed to the server push callback */ + CURLOPT(CURLMOPT_PUSHDATA, CURLOPTTYPE_OBJECTPOINT, 15), + + /* maximum number of concurrent streams to support on a connection */ + CURLOPT(CURLMOPT_MAX_CONCURRENT_STREAMS, CURLOPTTYPE_LONG, 16), + + CURLMOPT_LASTENTRY /* the last unused */ +} CURLMoption; + + +/* + * Name: curl_multi_setopt() + * + * Desc: Sets options for the multi handle. + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle, + CURLMoption option, ...); + + +/* + * Name: curl_multi_assign() + * + * Desc: This function sets an association in the multi handle between the + * given socket and a private pointer of the application. This is + * (only) useful for curl_multi_socket uses. + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle, + curl_socket_t sockfd, void *sockp); + +/* + * Name: curl_multi_get_handles() + * + * Desc: Returns an allocated array holding all handles currently added to + * the multi handle. Marks the final entry with a NULL pointer. If + * there is no easy handle added to the multi handle, this function + * returns an array with the first entry as a NULL pointer. + * + * Returns: NULL on failure, otherwise a CURL **array pointer + */ +CURL_EXTERN CURL **curl_multi_get_handles(CURLM *multi_handle); + +/* + * Name: curl_push_callback + * + * Desc: This callback gets called when a new stream is being pushed by the + * server. It approves or denies the new stream. It can also decide + * to completely fail the connection. + * + * Returns: CURL_PUSH_OK, CURL_PUSH_DENY or CURL_PUSH_ERROROUT + */ +#define CURL_PUSH_OK 0 +#define CURL_PUSH_DENY 1 +#define CURL_PUSH_ERROROUT 2 /* added in 7.72.0 */ + +struct curl_pushheaders; /* forward declaration only */ + +CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h, + size_t num); +CURL_EXTERN char *curl_pushheader_byname(struct curl_pushheaders *h, + const char *name); + +typedef int (*curl_push_callback)(CURL *parent, + CURL *easy, + size_t num_headers, + struct curl_pushheaders *headers, + void *userp); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/options.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/options.h new file mode 100644 index 0000000..1ed76a9 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/options.h @@ -0,0 +1,70 @@ +#ifndef CURLINC_OPTIONS_H +#define CURLINC_OPTIONS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + CURLOT_LONG, /* long (a range of values) */ + CURLOT_VALUES, /* (a defined set or bitmask) */ + CURLOT_OFF_T, /* curl_off_t (a range of values) */ + CURLOT_OBJECT, /* pointer (void *) */ + CURLOT_STRING, /* (char * to null-terminated buffer) */ + CURLOT_SLIST, /* (struct curl_slist *) */ + CURLOT_CBPTR, /* (void * passed as-is to a callback) */ + CURLOT_BLOB, /* blob (struct curl_blob *) */ + CURLOT_FUNCTION /* function pointer */ +} curl_easytype; + +/* Flag bits */ + +/* "alias" means it is provided for old programs to remain functional, + we prefer another name */ +#define CURLOT_FLAG_ALIAS (1<<0) + +/* The CURLOPTTYPE_* id ranges can still be used to figure out what type/size + to use for curl_easy_setopt() for the given id */ +struct curl_easyoption { + const char *name; + CURLoption id; + curl_easytype type; + unsigned int flags; +}; + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_by_name(const char *name); + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_by_id(CURLoption id); + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_next(const struct curl_easyoption *prev); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif +#endif /* CURLINC_OPTIONS_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/stdcheaders.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/stdcheaders.h new file mode 100644 index 0000000..7451aa3 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/stdcheaders.h @@ -0,0 +1,35 @@ +#ifndef CURLINC_STDCHEADERS_H +#define CURLINC_STDCHEADERS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include + +size_t fread(void *, size_t, size_t, FILE *); +size_t fwrite(const void *, size_t, size_t, FILE *); + +int strcasecmp(const char *, const char *); +int strncasecmp(const char *, const char *, size_t); + +#endif /* CURLINC_STDCHEADERS_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/system.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/system.h new file mode 100644 index 0000000..97e0d03 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/system.h @@ -0,0 +1,521 @@ +#ifndef CURLINC_SYSTEM_H +#define CURLINC_SYSTEM_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* + * Try to keep one section per platform, compiler and architecture, otherwise, + * if an existing section is reused for a different one and later on the + * original is adjusted, probably the piggybacking one can be adversely + * changed. + * + * In order to differentiate between platforms/compilers/architectures use + * only compiler built in predefined preprocessor symbols. + * + * curl_off_t + * ---------- + * + * For any given platform/compiler curl_off_t must be typedef'ed to a 64-bit + * wide signed integral data type. The width of this data type must remain + * constant and independent of any possible large file support settings. + * + * As an exception to the above, curl_off_t shall be typedef'ed to a 32-bit + * wide signed integral data type if there is no 64-bit type. + * + * As a general rule, curl_off_t shall not be mapped to off_t. This rule shall + * only be violated if off_t is the only 64-bit data type available and the + * size of off_t is independent of large file support settings. Keep your + * build on the safe side avoiding an off_t gating. If you have a 64-bit + * off_t then take for sure that another 64-bit data type exists, dig deeper + * and you will find it. + * + */ + +#if defined(__DJGPP__) || defined(__GO32__) +# if defined(__DJGPP__) && (__DJGPP__ > 1) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__SALFORDC__) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__BORLANDC__) +# if (__BORLANDC__ < 0x520) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__TURBOC__) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__POCC__) +# if (__POCC__ < 280) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# elif defined(_MSC_VER) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# else +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__LCC__) +# if defined(__MCST__) /* MCST eLbrus Compiler Collection */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 +# else /* Local (or Little) C Compiler */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +# endif + +#elif defined(__SYMBIAN32__) +# if defined(__EABI__) /* Treat all ARM compilers equally */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__CW32__) +# pragma longlong on +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__VC32__) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(macintosh) +# include +# if TYPE_LONGLONG +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(__TANDEM) +# if ! defined(__LP64) + /* Required for 32-bit NonStop builds only. */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +# endif + +#elif defined(_WIN32_WCE) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__MINGW32__) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_WS2TCPIP_H 1 + +#elif defined(__VMS) +# if defined(__VAX) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(__OS400__) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__MVS__) +# if defined(_LONG_LONG) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__370__) +# if defined(__IBMC__) || defined(__IBMCPP__) +# if defined(_ILP32) +# elif defined(_LP64) +# endif +# if defined(_LONG_LONG) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 +# endif + +#elif defined(TPF) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__TINYC__) /* also known as tcc */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* Oracle Solaris Studio */ +# if !defined(__LP64) && (defined(__ILP32) || \ + defined(__i386) || \ + defined(__sparcv8) || \ + defined(__sparcv8plus)) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__LP64) || \ + defined(__amd64) || defined(__sparcv9) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__xlc__) /* IBM xlc compiler */ +# if !defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__hpux) /* HP aCC compiler */ +# if !defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +/* ===================================== */ +/* KEEP MSVC THE PENULTIMATE ENTRY */ +/* ===================================== */ + +#elif defined(_MSC_VER) +# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +/* ===================================== */ +/* KEEP GENERIC GCC THE LAST ENTRY */ +/* ===================================== */ + +#elif defined(__GNUC__) && !defined(_SCO_DS) +# if !defined(__LP64__) && \ + (defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \ + defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \ + defined(__sparc__) || defined(__mips__) || defined(__sh__) || \ + defined(__XTENSA__) || \ + (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \ + (defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L)) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__LP64__) || \ + defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \ + defined(__e2k__) || \ + (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \ + (defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#else +/* generic "safe guess" on old 32 bit style */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +#endif + +#ifdef _AIX +/* AIX needs */ +#define CURL_PULL_SYS_POLL_H +#endif + + +/* CURL_PULL_WS2TCPIP_H is defined above when inclusion of header file */ +/* ws2tcpip.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_WS2TCPIP_H +# include +# include +# include +#endif + +/* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */ +/* sys/types.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_TYPES_H +# include +#endif + +/* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */ +/* sys/socket.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_SOCKET_H +# include +#endif + +/* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file */ +/* sys/poll.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_POLL_H +# include +#endif + +/* Data type definition of curl_socklen_t. */ +#ifdef CURL_TYPEOF_CURL_SOCKLEN_T + typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t; +#endif + +/* Data type definition of curl_off_t. */ + +#ifdef CURL_TYPEOF_CURL_OFF_T + typedef CURL_TYPEOF_CURL_OFF_T curl_off_t; +#endif + +/* + * CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow + * these to be visible and exported by the external libcurl interface API, + * while also making them visible to the library internals, simply including + * curl_setup.h, without actually needing to include curl.h internally. + * If some day this section would grow big enough, all this should be moved + * to its own header file. + */ + +/* + * Figure out if we can use the ## preprocessor operator, which is supported + * by ISO/ANSI C and C++. Some compilers support it without setting __STDC__ + * or __cplusplus so we need to carefully check for them too. + */ + +#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \ + defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \ + defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \ + defined(__ILEC400__) + /* This compiler is believed to have an ISO compatible preprocessor */ +#define CURL_ISOCPP +#else + /* This compiler is believed NOT to have an ISO compatible preprocessor */ +#undef CURL_ISOCPP +#endif + +/* + * Macros for minimum-width signed and unsigned curl_off_t integer constants. + */ + +#if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551) +# define CURLINC_OFF_T_C_HLPR2(x) x +# define CURLINC_OFF_T_C_HLPR1(x) CURLINC_OFF_T_C_HLPR2(x) +# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ + CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T) +# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ + CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU) +#else +# ifdef CURL_ISOCPP +# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix +# else +# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix +# endif +# define CURLINC_OFF_T_C_HLPR1(Val,Suffix) CURLINC_OFF_T_C_HLPR2(Val,Suffix) +# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T) +# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU) +#endif + +#endif /* CURLINC_SYSTEM_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/typecheck-gcc.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/typecheck-gcc.h new file mode 100644 index 0000000..b880f3d --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/typecheck-gcc.h @@ -0,0 +1,717 @@ +#ifndef CURLINC_TYPECHECK_GCC_H +#define CURLINC_TYPECHECK_GCC_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* wraps curl_easy_setopt() with typechecking */ + +/* To add a new kind of warning, add an + * if(curlcheck_sometype_option(_curl_opt)) + * if(!curlcheck_sometype(value)) + * _curl_easy_setopt_err_sometype(); + * block and define curlcheck_sometype_option, curlcheck_sometype and + * _curl_easy_setopt_err_sometype below + * + * NOTE: We use two nested 'if' statements here instead of the && operator, in + * order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x + * when compiling with -Wlogical-op. + * + * To add an option that uses the same type as an existing option, you'll just + * need to extend the appropriate _curl_*_option macro + */ +#define curl_easy_setopt(handle, option, value) \ + __extension__({ \ + CURLoption _curl_opt = (option); \ + if(__builtin_constant_p(_curl_opt)) { \ + CURL_IGNORE_DEPRECATION( \ + if(curlcheck_long_option(_curl_opt)) \ + if(!curlcheck_long(value)) \ + _curl_easy_setopt_err_long(); \ + if(curlcheck_off_t_option(_curl_opt)) \ + if(!curlcheck_off_t(value)) \ + _curl_easy_setopt_err_curl_off_t(); \ + if(curlcheck_string_option(_curl_opt)) \ + if(!curlcheck_string(value)) \ + _curl_easy_setopt_err_string(); \ + if(curlcheck_write_cb_option(_curl_opt)) \ + if(!curlcheck_write_cb(value)) \ + _curl_easy_setopt_err_write_callback(); \ + if((_curl_opt) == CURLOPT_RESOLVER_START_FUNCTION) \ + if(!curlcheck_resolver_start_callback(value)) \ + _curl_easy_setopt_err_resolver_start_callback(); \ + if((_curl_opt) == CURLOPT_READFUNCTION) \ + if(!curlcheck_read_cb(value)) \ + _curl_easy_setopt_err_read_cb(); \ + if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \ + if(!curlcheck_ioctl_cb(value)) \ + _curl_easy_setopt_err_ioctl_cb(); \ + if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \ + if(!curlcheck_sockopt_cb(value)) \ + _curl_easy_setopt_err_sockopt_cb(); \ + if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \ + if(!curlcheck_opensocket_cb(value)) \ + _curl_easy_setopt_err_opensocket_cb(); \ + if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \ + if(!curlcheck_progress_cb(value)) \ + _curl_easy_setopt_err_progress_cb(); \ + if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \ + if(!curlcheck_debug_cb(value)) \ + _curl_easy_setopt_err_debug_cb(); \ + if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \ + if(!curlcheck_ssl_ctx_cb(value)) \ + _curl_easy_setopt_err_ssl_ctx_cb(); \ + if(curlcheck_conv_cb_option(_curl_opt)) \ + if(!curlcheck_conv_cb(value)) \ + _curl_easy_setopt_err_conv_cb(); \ + if((_curl_opt) == CURLOPT_SEEKFUNCTION) \ + if(!curlcheck_seek_cb(value)) \ + _curl_easy_setopt_err_seek_cb(); \ + if(curlcheck_cb_data_option(_curl_opt)) \ + if(!curlcheck_cb_data(value)) \ + _curl_easy_setopt_err_cb_data(); \ + if((_curl_opt) == CURLOPT_ERRORBUFFER) \ + if(!curlcheck_error_buffer(value)) \ + _curl_easy_setopt_err_error_buffer(); \ + if((_curl_opt) == CURLOPT_STDERR) \ + if(!curlcheck_FILE(value)) \ + _curl_easy_setopt_err_FILE(); \ + if(curlcheck_postfields_option(_curl_opt)) \ + if(!curlcheck_postfields(value)) \ + _curl_easy_setopt_err_postfields(); \ + if((_curl_opt) == CURLOPT_HTTPPOST) \ + if(!curlcheck_arr((value), struct curl_httppost)) \ + _curl_easy_setopt_err_curl_httpost(); \ + if((_curl_opt) == CURLOPT_MIMEPOST) \ + if(!curlcheck_ptr((value), curl_mime)) \ + _curl_easy_setopt_err_curl_mimepost(); \ + if(curlcheck_slist_option(_curl_opt)) \ + if(!curlcheck_arr((value), struct curl_slist)) \ + _curl_easy_setopt_err_curl_slist(); \ + if((_curl_opt) == CURLOPT_SHARE) \ + if(!curlcheck_ptr((value), CURLSH)) \ + _curl_easy_setopt_err_CURLSH(); \ + ) \ + } \ + curl_easy_setopt(handle, _curl_opt, value); \ + }) + +/* wraps curl_easy_getinfo() with typechecking */ +#define curl_easy_getinfo(handle, info, arg) \ + __extension__({ \ + CURLINFO _curl_info = (info); \ + if(__builtin_constant_p(_curl_info)) { \ + CURL_IGNORE_DEPRECATION( \ + if(curlcheck_string_info(_curl_info)) \ + if(!curlcheck_arr((arg), char *)) \ + _curl_easy_getinfo_err_string(); \ + if(curlcheck_long_info(_curl_info)) \ + if(!curlcheck_arr((arg), long)) \ + _curl_easy_getinfo_err_long(); \ + if(curlcheck_double_info(_curl_info)) \ + if(!curlcheck_arr((arg), double)) \ + _curl_easy_getinfo_err_double(); \ + if(curlcheck_slist_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_slist *)) \ + _curl_easy_getinfo_err_curl_slist(); \ + if(curlcheck_tlssessioninfo_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_tlssessioninfo *)) \ + _curl_easy_getinfo_err_curl_tlssesssioninfo(); \ + if(curlcheck_certinfo_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_certinfo *)) \ + _curl_easy_getinfo_err_curl_certinfo(); \ + if(curlcheck_socket_info(_curl_info)) \ + if(!curlcheck_arr((arg), curl_socket_t)) \ + _curl_easy_getinfo_err_curl_socket(); \ + if(curlcheck_off_t_info(_curl_info)) \ + if(!curlcheck_arr((arg), curl_off_t)) \ + _curl_easy_getinfo_err_curl_off_t(); \ + ) \ + } \ + curl_easy_getinfo(handle, _curl_info, arg); \ + }) + +/* + * For now, just make sure that the functions are called with three arguments + */ +#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) +#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) + + +/* the actual warnings, triggered by calling the _curl_easy_setopt_err* + * functions */ + +/* To define a new warning, use _CURL_WARNING(identifier, "message") */ +#define CURLWARNING(id, message) \ + static void __attribute__((__warning__(message))) \ + __attribute__((__unused__)) __attribute__((__noinline__)) \ + id(void) { __asm__(""); } + +CURLWARNING(_curl_easy_setopt_err_long, + "curl_easy_setopt expects a long argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_off_t, + "curl_easy_setopt expects a curl_off_t argument for this option") +CURLWARNING(_curl_easy_setopt_err_string, + "curl_easy_setopt expects a " + "string ('char *' or char[]) argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_write_callback, + "curl_easy_setopt expects a curl_write_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_resolver_start_callback, + "curl_easy_setopt expects a " + "curl_resolver_start_callback argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_read_cb, + "curl_easy_setopt expects a curl_read_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_ioctl_cb, + "curl_easy_setopt expects a curl_ioctl_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_sockopt_cb, + "curl_easy_setopt expects a curl_sockopt_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_opensocket_cb, + "curl_easy_setopt expects a " + "curl_opensocket_callback argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_progress_cb, + "curl_easy_setopt expects a curl_progress_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_debug_cb, + "curl_easy_setopt expects a curl_debug_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_ssl_ctx_cb, + "curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_conv_cb, + "curl_easy_setopt expects a curl_conv_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_seek_cb, + "curl_easy_setopt expects a curl_seek_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_cb_data, + "curl_easy_setopt expects a " + "private data pointer as argument for this option") +CURLWARNING(_curl_easy_setopt_err_error_buffer, + "curl_easy_setopt expects a " + "char buffer of CURL_ERROR_SIZE as argument for this option") +CURLWARNING(_curl_easy_setopt_err_FILE, + "curl_easy_setopt expects a 'FILE *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_postfields, + "curl_easy_setopt expects a 'void *' or 'char *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_httpost, + "curl_easy_setopt expects a 'struct curl_httppost *' " + "argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_mimepost, + "curl_easy_setopt expects a 'curl_mime *' " + "argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_slist, + "curl_easy_setopt expects a 'struct curl_slist *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_CURLSH, + "curl_easy_setopt expects a CURLSH* argument for this option") + +CURLWARNING(_curl_easy_getinfo_err_string, + "curl_easy_getinfo expects a pointer to 'char *' for this info") +CURLWARNING(_curl_easy_getinfo_err_long, + "curl_easy_getinfo expects a pointer to long for this info") +CURLWARNING(_curl_easy_getinfo_err_double, + "curl_easy_getinfo expects a pointer to double for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_slist, + "curl_easy_getinfo expects a pointer to 'struct curl_slist *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_tlssesssioninfo, + "curl_easy_getinfo expects a pointer to " + "'struct curl_tlssessioninfo *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_certinfo, + "curl_easy_getinfo expects a pointer to " + "'struct curl_certinfo *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_socket, + "curl_easy_getinfo expects a pointer to curl_socket_t for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_off_t, + "curl_easy_getinfo expects a pointer to curl_off_t for this info") + +/* groups of curl_easy_setops options that take the same type of argument */ + +/* To add a new option to one of the groups, just add + * (option) == CURLOPT_SOMETHING + * to the or-expression. If the option takes a long or curl_off_t, you don't + * have to do anything + */ + +/* evaluates to true if option takes a long argument */ +#define curlcheck_long_option(option) \ + (0 < (option) && (option) < CURLOPTTYPE_OBJECTPOINT) + +#define curlcheck_off_t_option(option) \ + (((option) > CURLOPTTYPE_OFF_T) && ((option) < CURLOPTTYPE_BLOB)) + +/* evaluates to true if option takes a char* argument */ +#define curlcheck_string_option(option) \ + ((option) == CURLOPT_ABSTRACT_UNIX_SOCKET || \ + (option) == CURLOPT_ACCEPT_ENCODING || \ + (option) == CURLOPT_ALTSVC || \ + (option) == CURLOPT_CAINFO || \ + (option) == CURLOPT_CAPATH || \ + (option) == CURLOPT_COOKIE || \ + (option) == CURLOPT_COOKIEFILE || \ + (option) == CURLOPT_COOKIEJAR || \ + (option) == CURLOPT_COOKIELIST || \ + (option) == CURLOPT_CRLFILE || \ + (option) == CURLOPT_CUSTOMREQUEST || \ + (option) == CURLOPT_DEFAULT_PROTOCOL || \ + (option) == CURLOPT_DNS_INTERFACE || \ + (option) == CURLOPT_DNS_LOCAL_IP4 || \ + (option) == CURLOPT_DNS_LOCAL_IP6 || \ + (option) == CURLOPT_DNS_SERVERS || \ + (option) == CURLOPT_DOH_URL || \ + (option) == CURLOPT_EGDSOCKET || \ + (option) == CURLOPT_FTP_ACCOUNT || \ + (option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \ + (option) == CURLOPT_FTPPORT || \ + (option) == CURLOPT_HSTS || \ + (option) == CURLOPT_HAPROXY_CLIENT_IP || \ + (option) == CURLOPT_INTERFACE || \ + (option) == CURLOPT_ISSUERCERT || \ + (option) == CURLOPT_KEYPASSWD || \ + (option) == CURLOPT_KRBLEVEL || \ + (option) == CURLOPT_LOGIN_OPTIONS || \ + (option) == CURLOPT_MAIL_AUTH || \ + (option) == CURLOPT_MAIL_FROM || \ + (option) == CURLOPT_NETRC_FILE || \ + (option) == CURLOPT_NOPROXY || \ + (option) == CURLOPT_PASSWORD || \ + (option) == CURLOPT_PINNEDPUBLICKEY || \ + (option) == CURLOPT_PRE_PROXY || \ + (option) == CURLOPT_PROTOCOLS_STR || \ + (option) == CURLOPT_PROXY || \ + (option) == CURLOPT_PROXY_CAINFO || \ + (option) == CURLOPT_PROXY_CAPATH || \ + (option) == CURLOPT_PROXY_CRLFILE || \ + (option) == CURLOPT_PROXY_ISSUERCERT || \ + (option) == CURLOPT_PROXY_KEYPASSWD || \ + (option) == CURLOPT_PROXY_PINNEDPUBLICKEY || \ + (option) == CURLOPT_PROXY_SERVICE_NAME || \ + (option) == CURLOPT_PROXY_SSL_CIPHER_LIST || \ + (option) == CURLOPT_PROXY_SSLCERT || \ + (option) == CURLOPT_PROXY_SSLCERTTYPE || \ + (option) == CURLOPT_PROXY_SSLKEY || \ + (option) == CURLOPT_PROXY_SSLKEYTYPE || \ + (option) == CURLOPT_PROXY_TLS13_CIPHERS || \ + (option) == CURLOPT_PROXY_TLSAUTH_PASSWORD || \ + (option) == CURLOPT_PROXY_TLSAUTH_TYPE || \ + (option) == CURLOPT_PROXY_TLSAUTH_USERNAME || \ + (option) == CURLOPT_PROXYPASSWORD || \ + (option) == CURLOPT_PROXYUSERNAME || \ + (option) == CURLOPT_PROXYUSERPWD || \ + (option) == CURLOPT_RANDOM_FILE || \ + (option) == CURLOPT_RANGE || \ + (option) == CURLOPT_REDIR_PROTOCOLS_STR || \ + (option) == CURLOPT_REFERER || \ + (option) == CURLOPT_REQUEST_TARGET || \ + (option) == CURLOPT_RTSP_SESSION_ID || \ + (option) == CURLOPT_RTSP_STREAM_URI || \ + (option) == CURLOPT_RTSP_TRANSPORT || \ + (option) == CURLOPT_SASL_AUTHZID || \ + (option) == CURLOPT_SERVICE_NAME || \ + (option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \ + (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \ + (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 || \ + (option) == CURLOPT_SSH_KNOWNHOSTS || \ + (option) == CURLOPT_SSH_PRIVATE_KEYFILE || \ + (option) == CURLOPT_SSH_PUBLIC_KEYFILE || \ + (option) == CURLOPT_SSLCERT || \ + (option) == CURLOPT_SSLCERTTYPE || \ + (option) == CURLOPT_SSLENGINE || \ + (option) == CURLOPT_SSLKEY || \ + (option) == CURLOPT_SSLKEYTYPE || \ + (option) == CURLOPT_SSL_CIPHER_LIST || \ + (option) == CURLOPT_TLS13_CIPHERS || \ + (option) == CURLOPT_TLSAUTH_PASSWORD || \ + (option) == CURLOPT_TLSAUTH_TYPE || \ + (option) == CURLOPT_TLSAUTH_USERNAME || \ + (option) == CURLOPT_UNIX_SOCKET_PATH || \ + (option) == CURLOPT_URL || \ + (option) == CURLOPT_USERAGENT || \ + (option) == CURLOPT_USERNAME || \ + (option) == CURLOPT_AWS_SIGV4 || \ + (option) == CURLOPT_USERPWD || \ + (option) == CURLOPT_XOAUTH2_BEARER || \ + (option) == CURLOPT_SSL_EC_CURVES || \ + 0) + +/* evaluates to true if option takes a curl_write_callback argument */ +#define curlcheck_write_cb_option(option) \ + ((option) == CURLOPT_HEADERFUNCTION || \ + (option) == CURLOPT_WRITEFUNCTION) + +/* evaluates to true if option takes a curl_conv_callback argument */ +#define curlcheck_conv_cb_option(option) \ + ((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION || \ + (option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION || \ + (option) == CURLOPT_CONV_FROM_UTF8_FUNCTION) + +/* evaluates to true if option takes a data argument to pass to a callback */ +#define curlcheck_cb_data_option(option) \ + ((option) == CURLOPT_CHUNK_DATA || \ + (option) == CURLOPT_CLOSESOCKETDATA || \ + (option) == CURLOPT_DEBUGDATA || \ + (option) == CURLOPT_FNMATCH_DATA || \ + (option) == CURLOPT_HEADERDATA || \ + (option) == CURLOPT_HSTSREADDATA || \ + (option) == CURLOPT_HSTSWRITEDATA || \ + (option) == CURLOPT_INTERLEAVEDATA || \ + (option) == CURLOPT_IOCTLDATA || \ + (option) == CURLOPT_OPENSOCKETDATA || \ + (option) == CURLOPT_PREREQDATA || \ + (option) == CURLOPT_PROGRESSDATA || \ + (option) == CURLOPT_READDATA || \ + (option) == CURLOPT_SEEKDATA || \ + (option) == CURLOPT_SOCKOPTDATA || \ + (option) == CURLOPT_SSH_KEYDATA || \ + (option) == CURLOPT_SSL_CTX_DATA || \ + (option) == CURLOPT_WRITEDATA || \ + (option) == CURLOPT_RESOLVER_START_DATA || \ + (option) == CURLOPT_TRAILERDATA || \ + (option) == CURLOPT_SSH_HOSTKEYDATA || \ + 0) + +/* evaluates to true if option takes a POST data argument (void* or char*) */ +#define curlcheck_postfields_option(option) \ + ((option) == CURLOPT_POSTFIELDS || \ + (option) == CURLOPT_COPYPOSTFIELDS || \ + 0) + +/* evaluates to true if option takes a struct curl_slist * argument */ +#define curlcheck_slist_option(option) \ + ((option) == CURLOPT_HTTP200ALIASES || \ + (option) == CURLOPT_HTTPHEADER || \ + (option) == CURLOPT_MAIL_RCPT || \ + (option) == CURLOPT_POSTQUOTE || \ + (option) == CURLOPT_PREQUOTE || \ + (option) == CURLOPT_PROXYHEADER || \ + (option) == CURLOPT_QUOTE || \ + (option) == CURLOPT_RESOLVE || \ + (option) == CURLOPT_TELNETOPTIONS || \ + (option) == CURLOPT_CONNECT_TO || \ + 0) + +/* groups of curl_easy_getinfo infos that take the same type of argument */ + +/* evaluates to true if info expects a pointer to char * argument */ +#define curlcheck_string_info(info) \ + (CURLINFO_STRING < (info) && (info) < CURLINFO_LONG && \ + (info) != CURLINFO_PRIVATE) + +/* evaluates to true if info expects a pointer to long argument */ +#define curlcheck_long_info(info) \ + (CURLINFO_LONG < (info) && (info) < CURLINFO_DOUBLE) + +/* evaluates to true if info expects a pointer to double argument */ +#define curlcheck_double_info(info) \ + (CURLINFO_DOUBLE < (info) && (info) < CURLINFO_SLIST) + +/* true if info expects a pointer to struct curl_slist * argument */ +#define curlcheck_slist_info(info) \ + (((info) == CURLINFO_SSL_ENGINES) || ((info) == CURLINFO_COOKIELIST)) + +/* true if info expects a pointer to struct curl_tlssessioninfo * argument */ +#define curlcheck_tlssessioninfo_info(info) \ + (((info) == CURLINFO_TLS_SSL_PTR) || ((info) == CURLINFO_TLS_SESSION)) + +/* true if info expects a pointer to struct curl_certinfo * argument */ +#define curlcheck_certinfo_info(info) ((info) == CURLINFO_CERTINFO) + +/* true if info expects a pointer to struct curl_socket_t argument */ +#define curlcheck_socket_info(info) \ + (CURLINFO_SOCKET < (info) && (info) < CURLINFO_OFF_T) + +/* true if info expects a pointer to curl_off_t argument */ +#define curlcheck_off_t_info(info) \ + (CURLINFO_OFF_T < (info)) + + +/* typecheck helpers -- check whether given expression has requested type */ + +/* For pointers, you can use the curlcheck_ptr/curlcheck_arr macros, + * otherwise define a new macro. Search for __builtin_types_compatible_p + * in the GCC manual. + * NOTE: these macros MUST NOT EVALUATE their arguments! The argument is + * the actual expression passed to the curl_easy_setopt macro. This + * means that you can only apply the sizeof and __typeof__ operators, no + * == or whatsoever. + */ + +/* XXX: should evaluate to true if expr is a pointer */ +#define curlcheck_any_ptr(expr) \ + (sizeof(expr) == sizeof(void *)) + +/* evaluates to true if expr is NULL */ +/* XXX: must not evaluate expr, so this check is not accurate */ +#define curlcheck_NULL(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), __typeof__(NULL))) + +/* evaluates to true if expr is type*, const type* or NULL */ +#define curlcheck_ptr(expr, type) \ + (curlcheck_NULL(expr) || \ + __builtin_types_compatible_p(__typeof__(expr), type *) || \ + __builtin_types_compatible_p(__typeof__(expr), const type *)) + +/* evaluates to true if expr is one of type[], type*, NULL or const type* */ +#define curlcheck_arr(expr, type) \ + (curlcheck_ptr((expr), type) || \ + __builtin_types_compatible_p(__typeof__(expr), type [])) + +/* evaluates to true if expr is a string */ +#define curlcheck_string(expr) \ + (curlcheck_arr((expr), char) || \ + curlcheck_arr((expr), signed char) || \ + curlcheck_arr((expr), unsigned char)) + +/* evaluates to true if expr is a long (no matter the signedness) + * XXX: for now, int is also accepted (and therefore short and char, which + * are promoted to int when passed to a variadic function) */ +#define curlcheck_long(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), long) || \ + __builtin_types_compatible_p(__typeof__(expr), signed long) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned long) || \ + __builtin_types_compatible_p(__typeof__(expr), int) || \ + __builtin_types_compatible_p(__typeof__(expr), signed int) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned int) || \ + __builtin_types_compatible_p(__typeof__(expr), short) || \ + __builtin_types_compatible_p(__typeof__(expr), signed short) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned short) || \ + __builtin_types_compatible_p(__typeof__(expr), char) || \ + __builtin_types_compatible_p(__typeof__(expr), signed char) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned char)) + +/* evaluates to true if expr is of type curl_off_t */ +#define curlcheck_off_t(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), curl_off_t)) + +/* evaluates to true if expr is abuffer suitable for CURLOPT_ERRORBUFFER */ +/* XXX: also check size of an char[] array? */ +#define curlcheck_error_buffer(expr) \ + (curlcheck_NULL(expr) || \ + __builtin_types_compatible_p(__typeof__(expr), char *) || \ + __builtin_types_compatible_p(__typeof__(expr), char[])) + +/* evaluates to true if expr is of type (const) void* or (const) FILE* */ +#if 0 +#define curlcheck_cb_data(expr) \ + (curlcheck_ptr((expr), void) || \ + curlcheck_ptr((expr), FILE)) +#else /* be less strict */ +#define curlcheck_cb_data(expr) \ + curlcheck_any_ptr(expr) +#endif + +/* evaluates to true if expr is of type FILE* */ +#define curlcheck_FILE(expr) \ + (curlcheck_NULL(expr) || \ + (__builtin_types_compatible_p(__typeof__(expr), FILE *))) + +/* evaluates to true if expr can be passed as POST data (void* or char*) */ +#define curlcheck_postfields(expr) \ + (curlcheck_ptr((expr), void) || \ + curlcheck_arr((expr), char) || \ + curlcheck_arr((expr), unsigned char)) + +/* helper: __builtin_types_compatible_p distinguishes between functions and + * function pointers, hide it */ +#define curlcheck_cb_compatible(func, type) \ + (__builtin_types_compatible_p(__typeof__(func), type) || \ + __builtin_types_compatible_p(__typeof__(func) *, type)) + +/* evaluates to true if expr is of type curl_resolver_start_callback */ +#define curlcheck_resolver_start_callback(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_resolver_start_callback)) + +/* evaluates to true if expr is of type curl_read_callback or "similar" */ +#define curlcheck_read_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), __typeof__(fread) *) || \ + curlcheck_cb_compatible((expr), curl_read_callback) || \ + curlcheck_cb_compatible((expr), _curl_read_callback1) || \ + curlcheck_cb_compatible((expr), _curl_read_callback2) || \ + curlcheck_cb_compatible((expr), _curl_read_callback3) || \ + curlcheck_cb_compatible((expr), _curl_read_callback4) || \ + curlcheck_cb_compatible((expr), _curl_read_callback5) || \ + curlcheck_cb_compatible((expr), _curl_read_callback6)) +typedef size_t (*_curl_read_callback1)(char *, size_t, size_t, void *); +typedef size_t (*_curl_read_callback2)(char *, size_t, size_t, const void *); +typedef size_t (*_curl_read_callback3)(char *, size_t, size_t, FILE *); +typedef size_t (*_curl_read_callback4)(void *, size_t, size_t, void *); +typedef size_t (*_curl_read_callback5)(void *, size_t, size_t, const void *); +typedef size_t (*_curl_read_callback6)(void *, size_t, size_t, FILE *); + +/* evaluates to true if expr is of type curl_write_callback or "similar" */ +#define curlcheck_write_cb(expr) \ + (curlcheck_read_cb(expr) || \ + curlcheck_cb_compatible((expr), __typeof__(fwrite) *) || \ + curlcheck_cb_compatible((expr), curl_write_callback) || \ + curlcheck_cb_compatible((expr), _curl_write_callback1) || \ + curlcheck_cb_compatible((expr), _curl_write_callback2) || \ + curlcheck_cb_compatible((expr), _curl_write_callback3) || \ + curlcheck_cb_compatible((expr), _curl_write_callback4) || \ + curlcheck_cb_compatible((expr), _curl_write_callback5) || \ + curlcheck_cb_compatible((expr), _curl_write_callback6)) +typedef size_t (*_curl_write_callback1)(const char *, size_t, size_t, void *); +typedef size_t (*_curl_write_callback2)(const char *, size_t, size_t, + const void *); +typedef size_t (*_curl_write_callback3)(const char *, size_t, size_t, FILE *); +typedef size_t (*_curl_write_callback4)(const void *, size_t, size_t, void *); +typedef size_t (*_curl_write_callback5)(const void *, size_t, size_t, + const void *); +typedef size_t (*_curl_write_callback6)(const void *, size_t, size_t, FILE *); + +/* evaluates to true if expr is of type curl_ioctl_callback or "similar" */ +#define curlcheck_ioctl_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_ioctl_callback) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback1) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback2) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback3) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback4)) +typedef curlioerr (*_curl_ioctl_callback1)(CURL *, int, void *); +typedef curlioerr (*_curl_ioctl_callback2)(CURL *, int, const void *); +typedef curlioerr (*_curl_ioctl_callback3)(CURL *, curliocmd, void *); +typedef curlioerr (*_curl_ioctl_callback4)(CURL *, curliocmd, const void *); + +/* evaluates to true if expr is of type curl_sockopt_callback or "similar" */ +#define curlcheck_sockopt_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_sockopt_callback) || \ + curlcheck_cb_compatible((expr), _curl_sockopt_callback1) || \ + curlcheck_cb_compatible((expr), _curl_sockopt_callback2)) +typedef int (*_curl_sockopt_callback1)(void *, curl_socket_t, curlsocktype); +typedef int (*_curl_sockopt_callback2)(const void *, curl_socket_t, + curlsocktype); + +/* evaluates to true if expr is of type curl_opensocket_callback or + "similar" */ +#define curlcheck_opensocket_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_opensocket_callback) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback1) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback2) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback3) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback4)) +typedef curl_socket_t (*_curl_opensocket_callback1) + (void *, curlsocktype, struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback2) + (void *, curlsocktype, const struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback3) + (const void *, curlsocktype, struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback4) + (const void *, curlsocktype, const struct curl_sockaddr *); + +/* evaluates to true if expr is of type curl_progress_callback or "similar" */ +#define curlcheck_progress_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_progress_callback) || \ + curlcheck_cb_compatible((expr), _curl_progress_callback1) || \ + curlcheck_cb_compatible((expr), _curl_progress_callback2)) +typedef int (*_curl_progress_callback1)(void *, + double, double, double, double); +typedef int (*_curl_progress_callback2)(const void *, + double, double, double, double); + +/* evaluates to true if expr is of type curl_debug_callback or "similar" */ +#define curlcheck_debug_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_debug_callback) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback1) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback2) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback3) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback4) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback5) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback6) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback7) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback8)) +typedef int (*_curl_debug_callback1) (CURL *, + curl_infotype, char *, size_t, void *); +typedef int (*_curl_debug_callback2) (CURL *, + curl_infotype, char *, size_t, const void *); +typedef int (*_curl_debug_callback3) (CURL *, + curl_infotype, const char *, size_t, void *); +typedef int (*_curl_debug_callback4) (CURL *, + curl_infotype, const char *, size_t, const void *); +typedef int (*_curl_debug_callback5) (CURL *, + curl_infotype, unsigned char *, size_t, void *); +typedef int (*_curl_debug_callback6) (CURL *, + curl_infotype, unsigned char *, size_t, const void *); +typedef int (*_curl_debug_callback7) (CURL *, + curl_infotype, const unsigned char *, size_t, void *); +typedef int (*_curl_debug_callback8) (CURL *, + curl_infotype, const unsigned char *, size_t, const void *); + +/* evaluates to true if expr is of type curl_ssl_ctx_callback or "similar" */ +/* this is getting even messier... */ +#define curlcheck_ssl_ctx_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_ssl_ctx_callback) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback1) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback2) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback3) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback4) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback5) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback6) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback7) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback8)) +typedef CURLcode (*_curl_ssl_ctx_callback1)(CURL *, void *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback2)(CURL *, void *, const void *); +typedef CURLcode (*_curl_ssl_ctx_callback3)(CURL *, const void *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback4)(CURL *, const void *, + const void *); +#ifdef HEADER_SSL_H +/* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX + * this will of course break if we're included before OpenSSL headers... + */ +typedef CURLcode (*_curl_ssl_ctx_callback5)(CURL *, SSL_CTX *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback6)(CURL *, SSL_CTX *, const void *); +typedef CURLcode (*_curl_ssl_ctx_callback7)(CURL *, const SSL_CTX *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback8)(CURL *, const SSL_CTX *, + const void *); +#else +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback5; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback6; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback7; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8; +#endif + +/* evaluates to true if expr is of type curl_conv_callback or "similar" */ +#define curlcheck_conv_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_conv_callback) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback1) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback2) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback3) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback4)) +typedef CURLcode (*_curl_conv_callback1)(char *, size_t length); +typedef CURLcode (*_curl_conv_callback2)(const char *, size_t length); +typedef CURLcode (*_curl_conv_callback3)(void *, size_t length); +typedef CURLcode (*_curl_conv_callback4)(const void *, size_t length); + +/* evaluates to true if expr is of type curl_seek_callback or "similar" */ +#define curlcheck_seek_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_seek_callback) || \ + curlcheck_cb_compatible((expr), _curl_seek_callback1) || \ + curlcheck_cb_compatible((expr), _curl_seek_callback2)) +typedef CURLcode (*_curl_seek_callback1)(void *, curl_off_t, int); +typedef CURLcode (*_curl_seek_callback2)(const void *, curl_off_t, int); + + +#endif /* CURLINC_TYPECHECK_GCC_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/urlapi.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/urlapi.h new file mode 100644 index 0000000..88cdeb3 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/urlapi.h @@ -0,0 +1,150 @@ +#ifndef CURLINC_URLAPI_H +#define CURLINC_URLAPI_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include "curl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* the error codes for the URL API */ +typedef enum { + CURLUE_OK, + CURLUE_BAD_HANDLE, /* 1 */ + CURLUE_BAD_PARTPOINTER, /* 2 */ + CURLUE_MALFORMED_INPUT, /* 3 */ + CURLUE_BAD_PORT_NUMBER, /* 4 */ + CURLUE_UNSUPPORTED_SCHEME, /* 5 */ + CURLUE_URLDECODE, /* 6 */ + CURLUE_OUT_OF_MEMORY, /* 7 */ + CURLUE_USER_NOT_ALLOWED, /* 8 */ + CURLUE_UNKNOWN_PART, /* 9 */ + CURLUE_NO_SCHEME, /* 10 */ + CURLUE_NO_USER, /* 11 */ + CURLUE_NO_PASSWORD, /* 12 */ + CURLUE_NO_OPTIONS, /* 13 */ + CURLUE_NO_HOST, /* 14 */ + CURLUE_NO_PORT, /* 15 */ + CURLUE_NO_QUERY, /* 16 */ + CURLUE_NO_FRAGMENT, /* 17 */ + CURLUE_NO_ZONEID, /* 18 */ + CURLUE_BAD_FILE_URL, /* 19 */ + CURLUE_BAD_FRAGMENT, /* 20 */ + CURLUE_BAD_HOSTNAME, /* 21 */ + CURLUE_BAD_IPV6, /* 22 */ + CURLUE_BAD_LOGIN, /* 23 */ + CURLUE_BAD_PASSWORD, /* 24 */ + CURLUE_BAD_PATH, /* 25 */ + CURLUE_BAD_QUERY, /* 26 */ + CURLUE_BAD_SCHEME, /* 27 */ + CURLUE_BAD_SLASHES, /* 28 */ + CURLUE_BAD_USER, /* 29 */ + CURLUE_LACKS_IDN, /* 30 */ + CURLUE_LAST +} CURLUcode; + +typedef enum { + CURLUPART_URL, + CURLUPART_SCHEME, + CURLUPART_USER, + CURLUPART_PASSWORD, + CURLUPART_OPTIONS, + CURLUPART_HOST, + CURLUPART_PORT, + CURLUPART_PATH, + CURLUPART_QUERY, + CURLUPART_FRAGMENT, + CURLUPART_ZONEID /* added in 7.65.0 */ +} CURLUPart; + +#define CURLU_DEFAULT_PORT (1<<0) /* return default port number */ +#define CURLU_NO_DEFAULT_PORT (1<<1) /* act as if no port number was set, + if the port number matches the + default for the scheme */ +#define CURLU_DEFAULT_SCHEME (1<<2) /* return default scheme if + missing */ +#define CURLU_NON_SUPPORT_SCHEME (1<<3) /* allow non-supported scheme */ +#define CURLU_PATH_AS_IS (1<<4) /* leave dot sequences */ +#define CURLU_DISALLOW_USER (1<<5) /* no user+password allowed */ +#define CURLU_URLDECODE (1<<6) /* URL decode on get */ +#define CURLU_URLENCODE (1<<7) /* URL encode on set */ +#define CURLU_APPENDQUERY (1<<8) /* append a form style part */ +#define CURLU_GUESS_SCHEME (1<<9) /* legacy curl-style guessing */ +#define CURLU_NO_AUTHORITY (1<<10) /* Allow empty authority when the + scheme is unknown. */ +#define CURLU_ALLOW_SPACE (1<<11) /* Allow spaces in the URL */ +#define CURLU_PUNYCODE (1<<12) /* get the host name in punycode */ +#define CURLU_PUNY2IDN (1<<13) /* punycode => IDN conversion */ + +typedef struct Curl_URL CURLU; + +/* + * curl_url() creates a new CURLU handle and returns a pointer to it. + * Must be freed with curl_url_cleanup(). + */ +CURL_EXTERN CURLU *curl_url(void); + +/* + * curl_url_cleanup() frees the CURLU handle and related resources used for + * the URL parsing. It will not free strings previously returned with the URL + * API. + */ +CURL_EXTERN void curl_url_cleanup(CURLU *handle); + +/* + * curl_url_dup() duplicates a CURLU handle and returns a new copy. The new + * handle must also be freed with curl_url_cleanup(). + */ +CURL_EXTERN CURLU *curl_url_dup(const CURLU *in); + +/* + * curl_url_get() extracts a specific part of the URL from a CURLU + * handle. Returns error code. The returned pointer MUST be freed with + * curl_free() afterwards. + */ +CURL_EXTERN CURLUcode curl_url_get(const CURLU *handle, CURLUPart what, + char **part, unsigned int flags); + +/* + * curl_url_set() sets a specific part of the URL in a CURLU handle. Returns + * error code. The passed in string will be copied. Passing a NULL instead of + * a part string, clears that part. + */ +CURL_EXTERN CURLUcode curl_url_set(CURLU *handle, CURLUPart what, + const char *part, unsigned int flags); + +/* + * curl_url_strerror() turns a CURLUcode value into the equivalent human + * readable error string. This is useful for printing meaningful error + * messages. + */ +CURL_EXTERN const char *curl_url_strerror(CURLUcode); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_URLAPI_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/websockets.h b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/websockets.h new file mode 100644 index 0000000..6ef6a2b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/include/curl/websockets.h @@ -0,0 +1,84 @@ +#ifndef CURLINC_WEBSOCKETS_H +#define CURLINC_WEBSOCKETS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +struct curl_ws_frame { + int age; /* zero */ + int flags; /* See the CURLWS_* defines */ + curl_off_t offset; /* the offset of this data into the frame */ + curl_off_t bytesleft; /* number of pending bytes left of the payload */ + size_t len; /* size of the current data chunk */ +}; + +/* flag bits */ +#define CURLWS_TEXT (1<<0) +#define CURLWS_BINARY (1<<1) +#define CURLWS_CONT (1<<2) +#define CURLWS_CLOSE (1<<3) +#define CURLWS_PING (1<<4) +#define CURLWS_OFFSET (1<<5) + +/* + * NAME curl_ws_recv() + * + * DESCRIPTION + * + * Receives data from the websocket connection. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen, + size_t *recv, + const struct curl_ws_frame **metap); + +/* flags for curl_ws_send() */ +#define CURLWS_PONG (1<<6) + +/* + * NAME curl_ws_send() + * + * DESCRIPTION + * + * Sends data over the websocket connection. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_ws_send(CURL *curl, const void *buffer, + size_t buflen, size_t *sent, + curl_off_t fragsize, + unsigned int flags); + +/* bits for the CURLOPT_WS_OPTIONS bitmask: */ +#define CURLWS_RAW_MODE (1<<0) + +CURL_EXTERN const struct curl_ws_frame *curl_ws_meta(CURL *curl); + +#ifdef __cplusplus +} +#endif + +#endif /* CURLINC_WEBSOCKETS_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLConfig.cmake b/packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLConfig.cmake new file mode 100644 index 0000000..5349512 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLConfig.cmake @@ -0,0 +1,62 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() ####### +####### Any changes to this file will be overwritten by the next CMake run #### +####### The input file was curl-config.cmake.in ######## + +get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE) + +macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() +endmacro() + +macro(check_required_components _NAME) + foreach(comp ${${_NAME}_FIND_COMPONENTS}) + if(NOT ${_NAME}_${comp}_FOUND) + if(${_NAME}_FIND_REQUIRED_${comp}) + set(${_NAME}_FOUND FALSE) + endif() + endif() + endforeach() +endmacro() + +#################################################################################### + +include(CMakeFindDependencyMacro) +if() + find_dependency(OpenSSL ) +endif() +if(OFF) + find_dependency(ZLIB ) +endif() + +include("${CMAKE_CURRENT_LIST_DIR}/CURLTargets.cmake") +check_required_components("CURL") + +# Alias for either shared or static library +add_library(CURL::libcurl ALIAS CURL::libcurl_shared) diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLConfigVersion.cmake b/packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLConfigVersion.cmake new file mode 100644 index 0000000..91490ee --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLConfigVersion.cmake @@ -0,0 +1,70 @@ +if(NOT PACKAGE_FIND_VERSION_RANGE AND PACKAGE_FIND_VERSION_MAJOR STREQUAL "7") + # Version 8 satisfies version 7... requirements + set(PACKAGE_FIND_VERSION_MAJOR 8) + set(PACKAGE_FIND_VERSION_COUNT 1) +endif() +# This is a basic version file for the Config-mode of find_package(). +# It is used by write_basic_package_version_file() as input file for configure_file() +# to create a version-file which can be installed along a config.cmake file. +# +# The created file sets PACKAGE_VERSION_EXACT if the current version string and +# the requested version string are exactly the same and it sets +# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version, +# but only if the requested major version is the same as the current one. +# The variable CVF_VERSION must be set before calling configure_file(). + + +set(PACKAGE_VERSION "8.4.0") + +if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + + if("8.4.0" MATCHES "^([0-9]+)\\.") + set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}") + if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0) + string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}") + endif() + else() + set(CVF_VERSION_MAJOR "8.4.0") + endif() + + if(PACKAGE_FIND_VERSION_RANGE) + # both endpoints of the range must have the expected major version + math (EXPR CVF_VERSION_MAJOR_NEXT "${CVF_VERSION_MAJOR} + 1") + if (NOT PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR + OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX_MAJOR STREQUAL CVF_VERSION_MAJOR) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX VERSION_LESS_EQUAL CVF_VERSION_MAJOR_NEXT))) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + elseif(PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR + AND ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS_EQUAL PACKAGE_FIND_VERSION_MAX) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MAX))) + set(PACKAGE_VERSION_COMPATIBLE TRUE) + else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) + endif() + else() + if(PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR) + set(PACKAGE_VERSION_COMPATIBLE TRUE) + else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) + endif() + + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() + endif() +endif() + + +# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "4" STREQUAL "") + return() +endif() + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "4") + math(EXPR installedBits "4 * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLTargets-debug.cmake b/packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLTargets-debug.cmake new file mode 100644 index 0000000..437d191 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLTargets-debug.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file for configuration "Debug". +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "CURL::libcurl_shared" for configuration "Debug" +set_property(TARGET CURL::libcurl_shared APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) +set_target_properties(CURL::libcurl_shared PROPERTIES + IMPORTED_IMPLIB_DEBUG "${_IMPORT_PREFIX}/lib/libcurl-d_imp.lib" + IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/bin/libcurl-d.dll" + ) + +list(APPEND _cmake_import_check_targets CURL::libcurl_shared ) +list(APPEND _cmake_import_check_files_for_CURL::libcurl_shared "${_IMPORT_PREFIX}/lib/libcurl-d_imp.lib" "${_IMPORT_PREFIX}/bin/libcurl-d.dll" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLTargets-release.cmake b/packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLTargets-release.cmake new file mode 100644 index 0000000..e80df75 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLTargets-release.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file for configuration "Release". +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "CURL::libcurl_shared" for configuration "Release" +set_property(TARGET CURL::libcurl_shared APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(CURL::libcurl_shared PROPERTIES + IMPORTED_IMPLIB_RELEASE "${_IMPORT_PREFIX}/lib/libcurl_imp.lib" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/libcurl.dll" + ) + +list(APPEND _cmake_import_check_targets CURL::libcurl_shared ) +list(APPEND _cmake_import_check_files_for_CURL::libcurl_shared "${_IMPORT_PREFIX}/lib/libcurl_imp.lib" "${_IMPORT_PREFIX}/bin/libcurl.dll" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLTargets.cmake b/packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLTargets.cmake new file mode 100644 index 0000000..64a4edd --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/lib/cmake/CURL/CURLTargets.cmake @@ -0,0 +1,102 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8) + message(FATAL_ERROR "CMake >= 2.8.0 required") +endif() +if(CMAKE_VERSION VERSION_LESS "2.8.3") + message(FATAL_ERROR "CMake >= 2.8.3 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.8.3...3.25) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_cmake_targets_defined "") +set(_cmake_targets_not_defined "") +set(_cmake_expected_targets "") +foreach(_cmake_expected_target IN ITEMS CURL::libcurl_shared) + list(APPEND _cmake_expected_targets "${_cmake_expected_target}") + if(TARGET "${_cmake_expected_target}") + list(APPEND _cmake_targets_defined "${_cmake_expected_target}") + else() + list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}") + endif() +endforeach() +unset(_cmake_expected_target) +if(_cmake_targets_defined STREQUAL _cmake_expected_targets) + unset(_cmake_targets_defined) + unset(_cmake_targets_not_defined) + unset(_cmake_expected_targets) + unset(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT _cmake_targets_defined STREQUAL "") + string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}") + string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n") +endif() +unset(_cmake_targets_defined) +unset(_cmake_targets_not_defined) +unset(_cmake_expected_targets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target CURL::libcurl_shared +add_library(CURL::libcurl_shared SHARED IMPORTED) + +set_target_properties(CURL::libcurl_shared PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +# Load information for each installed configuration. +file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/CURLTargets-*.cmake") +foreach(_cmake_config_file IN LISTS _cmake_config_files) + include("${_cmake_config_file}") +endforeach() +unset(_cmake_config_file) +unset(_cmake_config_files) + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(_cmake_target IN LISTS _cmake_import_check_targets) + foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}") + if(NOT EXISTS "${_cmake_file}") + message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file + \"${_cmake_file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_cmake_file) + unset("_cmake_import_check_files_for_${_cmake_target}") +endforeach() +unset(_cmake_target) +unset(_cmake_import_check_targets) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/packages/libcpr.1.10.5/build/native/Win32/Debug/lib/pkgconfig/libcurl.pc b/packages/libcpr.1.10.5/build/native/Win32/Debug/lib/pkgconfig/libcurl.pc new file mode 100644 index 0000000..5d808fc --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Debug/lib/pkgconfig/libcurl.pc @@ -0,0 +1,41 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +# This should most probably benefit from getting a "Requires:" field added +# dynamically by configure. +# +prefix=C:/Program Files (x86)/cpr +exec_prefix=${prefix} +libdir=C:/Program Files (x86)/cpr/lib +includedir=${prefix}/include +supported_protocols="HTTP HTTPS" +supported_features="SSL IPv6 unixsockets AsynchDNS Largefile SSPI alt-svc HSTS SPNEGO Kerberos NTLM HTTPS-proxy threadsafe" + +Name: libcurl +URL: https://curl.se/ +Description: Library to transfer files with ftp, http, etc. +Version: 8.4.0 +Libs: -L${libdir} -lcurl +Libs.private: -lws2_32 -ladvapi32 -lcrypt32 -lbcrypt +Cflags: -I${includedir} diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/bin/curl-config b/packages/libcpr.1.10.5/build/native/Win32/Release/bin/curl-config new file mode 100644 index 0000000..d235fbd --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/bin/curl-config @@ -0,0 +1,196 @@ +#! /bin/sh +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +prefix="C:/Program Files (x86)/cpr" +exec_prefix=${prefix} +includedir=${prefix}/include +cppflag_curl_staticlib= + +usage() +{ + cat <&2 + exit 1 + fi + ;; + + --configure) + echo + ;; + + *) + echo "unknown option: $1" + usage 1 + ;; + esac + shift +done + +exit 0 diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/accept_encoding.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/accept_encoding.h new file mode 100644 index 0000000..167d7c2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/accept_encoding.h @@ -0,0 +1,41 @@ +#ifndef CPR_ACCEPT_ENCODING_H +#define CPR_ACCEPT_ENCODING_H + +#include +#include +#include +#include +#include + +namespace cpr { + +enum class AcceptEncodingMethods { + identity, + deflate, + zlib, + gzip, + disabled, +}; + +// NOLINTNEXTLINE(cert-err58-cpp) +static const std::map AcceptEncodingMethodsStringMap{{AcceptEncodingMethods::identity, "identity"}, {AcceptEncodingMethods::deflate, "deflate"}, {AcceptEncodingMethods::zlib, "zlib"}, {AcceptEncodingMethods::gzip, "gzip"}, {AcceptEncodingMethods::disabled, "disabled"}}; + +class AcceptEncoding { + public: + AcceptEncoding() = default; + // NOLINTNEXTLINE(google-explicit-constructor) + AcceptEncoding(const std::initializer_list& methods); + // NOLINTNEXTLINE(google-explicit-constructor) + AcceptEncoding(const std::initializer_list& methods); + + [[nodiscard]] bool empty() const noexcept; + [[nodiscard]] const std::string getString() const; + [[nodiscard]] bool disabled() const; + + private: + std::unordered_set methods_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/api.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/api.h new file mode 100644 index 0000000..ba9c64e --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/api.h @@ -0,0 +1,392 @@ +#ifndef CPR_API_H +#define CPR_API_H + +#include +#include +#include +#include +#include + +#include "cpr/async.h" +#include "cpr/async_wrapper.h" +#include "cpr/auth.h" +#include "cpr/bearer.h" +#include "cpr/cprtypes.h" +#include "cpr/multipart.h" +#include "cpr/multiperform.h" +#include "cpr/payload.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include + +namespace cpr { + +using AsyncResponse = AsyncWrapper; + +namespace priv { + +template +void set_option_internal(Session& session, CurrentType&& current_option) { + session.SetOption(std::forward(current_option)); +} + +template <> +inline void set_option_internal(Session& session, Header&& current_option) { + // Header option was already provided -> Update previous header + session.UpdateHeader(std::forward
(current_option)); +} + +template +void set_option_internal(Session& session, CurrentType&& current_option, Ts&&... ts) { + set_option_internal(session, std::forward(current_option)); + + if (std::is_same::value) { + set_option_internal(session, std::forward(ts)...); + } else { + set_option_internal(session, std::forward(ts)...); + } +} + +template +void set_option(Session& session, Ts&&... ts) { + set_option_internal(session, std::forward(ts)...); +} + +// Idea: https://stackoverflow.com/a/19060157 +template +void apply_set_option_internal(Session& session, Tuple&& t, std::index_sequence) { + set_option(session, std::get(std::forward(t))...); +} + +// Idea: https://stackoverflow.com/a/19060157 +template +void apply_set_option(Session& session, Tuple&& t) { + using Indices = std::make_index_sequence>::value>; + apply_set_option_internal(session, std::forward(t), Indices()); +} + +template +void setup_multiperform_internal(MultiPerform& multiperform, T&& t) { + std::shared_ptr session = std::make_shared(); + apply_set_option(*session, t); + multiperform.AddSession(session); +} + +template +void setup_multiperform_internal(MultiPerform& multiperform, T&& t, Ts&&... ts) { + std::shared_ptr session = std::make_shared(); + apply_set_option(*session, t); + multiperform.AddSession(session); + setup_multiperform_internal(multiperform, std::forward(ts)...); +} + +template +void setup_multiperform(MultiPerform& multiperform, Ts&&... ts) { + setup_multiperform_internal(multiperform, std::forward(ts)...); +} + +using session_action_t = cpr::Response (cpr::Session::*)(); + +template +void setup_multiasync(std::vector>& responses, T&& parameters) { + std::shared_ptr cancellation_state = std::make_shared(false); + + std::function execFn{[cancellation_state](T params) { + if (cancellation_state->load()) { + return Response{}; + } + cpr::Session s{}; + s.SetCancellationParam(cancellation_state); + apply_set_option(s, std::forward(params)); + return std::invoke(SessionAction, s); + }}; + responses.emplace_back(GlobalThreadPool::GetInstance()->Submit(std::move(execFn), std::forward(parameters)), std::move(cancellation_state)); +} + +template +void setup_multiasync(std::vector>& responses, T&& head, Ts&&... tail) { + setup_multiasync(responses, std::forward(head)); + if constexpr (sizeof...(Ts) > 0) { + setup_multiasync(responses, std::forward(tail)...); + } +} + +} // namespace priv + +// Get methods +template +Response Get(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Get(); +} + +// Get async methods +template +AsyncResponse GetAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Get(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Get callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto GetCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Get(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Post methods +template +Response Post(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Post(); +} + +// Post async methods +template +AsyncResponse PostAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Post(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Post callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto PostCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Post(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Put methods +template +Response Put(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Put(); +} + +// Put async methods +template +AsyncResponse PutAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Put(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Put callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto PutCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Put(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Head methods +template +Response Head(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Head(); +} + +// Head async methods +template +AsyncResponse HeadAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Head(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Head callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto HeadCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Head(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Delete methods +template +Response Delete(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Delete(); +} + +// Delete async methods +template +AsyncResponse DeleteAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Delete(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Delete callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto DeleteCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Delete(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Options methods +template +Response Options(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Options(); +} + +// Options async methods +template +AsyncResponse OptionsAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Options(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Options callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto OptionsCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Options(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Patch methods +template +Response Patch(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Patch(); +} + +// Patch async methods +template +AsyncResponse PatchAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Patch(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Patch callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto PatchCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Patch(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Download methods +template +Response Download(std::ofstream& file, Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Download(file); +} + +// Download async method +template +AsyncResponse DownloadAsync(fs::path local_path, Ts... ts) { + return AsyncWrapper{std::async( + std::launch::async, + [](fs::path local_path_, Ts... ts_) { + std::ofstream f(local_path_.c_str()); + return Download(f, std::move(ts_)...); + }, + std::move(local_path), std::move(ts)...)}; +} + +// Download with user callback +template +Response Download(const WriteCallback& write, Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Download(write); +} + +// Multi requests +template +std::vector MultiGet(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Get(); +} + +template +std::vector MultiDelete(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Delete(); +} + +template +std::vector MultiPut(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Put(); +} + +template +std::vector MultiHead(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Head(); +} + +template +std::vector MultiOptions(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Options(); +} + +template +std::vector MultiPatch(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Patch(); +} + +template +std::vector MultiPost(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Post(); +} + +template +std::vector> MultiGetAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Get>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiDeleteAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Delete>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiHeadAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Head>(ret, std::forward(ts)...); + return ret; +} +template +std::vector> MultiOptionsAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Options>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiPatchAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Patch>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiPostAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Post>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiPutAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Put>(ret, std::forward(ts)...); + return ret; +} + + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/async.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/async.h new file mode 100644 index 0000000..1305834 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/async.h @@ -0,0 +1,50 @@ +#ifndef CPR_ASYNC_H +#define CPR_ASYNC_H + +#include "async_wrapper.h" +#include "singleton.h" +#include "threadpool.h" + +namespace cpr { + +class GlobalThreadPool : public ThreadPool { + CPR_SINGLETON_DECL(GlobalThreadPool) + protected: + GlobalThreadPool() = default; + + public: + ~GlobalThreadPool() override = default; +}; + +/** + * Return a wrapper for a future, calling future.get() will wait until the task is done and return RetType. + * async(fn, args...) + * async(std::bind(&Class::mem_fn, &obj)) + * async(std::mem_fn(&Class::mem_fn, &obj)) + **/ +template +auto async(Fn&& fn, Args&&... args) { + return AsyncWrapper{GlobalThreadPool::GetInstance()->Submit(std::forward(fn), std::forward(args)...)}; +} + +class async { + public: + static void startup(size_t min_threads = CPR_DEFAULT_THREAD_POOL_MIN_THREAD_NUM, size_t max_threads = CPR_DEFAULT_THREAD_POOL_MAX_THREAD_NUM, std::chrono::milliseconds max_idle_ms = CPR_DEFAULT_THREAD_POOL_MAX_IDLE_TIME) { + GlobalThreadPool* gtp = GlobalThreadPool::GetInstance(); + if (gtp->IsStarted()) { + return; + } + gtp->SetMinThreadNum(min_threads); + gtp->SetMaxThreadNum(max_threads); + gtp->SetMaxIdleTime(max_idle_ms); + gtp->Start(); + } + + static void cleanup() { + GlobalThreadPool::ExitInstance(); + } +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/async_wrapper.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/async_wrapper.h new file mode 100644 index 0000000..bb46bf9 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/async_wrapper.h @@ -0,0 +1,140 @@ +#ifndef CPR_ASYNC_WRAPPER_H +#define CPR_ASYNC_WRAPPER_H + +#include +#include +#include + +#include "cpr/response.h" + +namespace cpr { +enum class [[nodiscard]] CancellationResult { failure, success, invalid_operation }; + +/** + * A class template intended to wrap results of async operations (instances of std::future) + * and also provide extended capablilities relaed to these requests, for example cancellation. + * + * The RAII semantics are the same as std::future - moveable, not copyable. + */ +template +class AsyncWrapper { + private: + std::future future; + std::shared_ptr is_cancelled; + + public: + // Constructors + explicit AsyncWrapper(std::future&& f) : future{std::move(f)} {} + AsyncWrapper(std::future&& f, std::shared_ptr&& cancelledState) : future{std::move(f)}, is_cancelled{std::move(cancelledState)} {} + + // Copy Semantics + AsyncWrapper(const AsyncWrapper&) = delete; + AsyncWrapper& operator=(const AsyncWrapper&) = delete; + + // Move Semantics + AsyncWrapper(AsyncWrapper&&) noexcept = default; + AsyncWrapper& operator=(AsyncWrapper&&) noexcept = default; + + // Destructor + ~AsyncWrapper() { + if constexpr (isCancellable) { + if(is_cancelled) { + is_cancelled->store(true); + } + } + } + // These methods replicate the behaviour of std::future + [[nodiscard]] T get() { + if constexpr (isCancellable) { + if (IsCancelled()) { + throw std::logic_error{"Calling AsyncWrapper::get on a cancelled request!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::get when the associated future instance is invalid!"}; + } + return future.get(); + } + + [[nodiscard]] bool valid() const noexcept { + if constexpr (isCancellable) { + return !is_cancelled->load() && future.valid(); + } else { + return future.valid(); + } + } + + void wait() const { + if constexpr (isCancellable) { + if (is_cancelled->load()) { + throw std::logic_error{"Calling AsyncWrapper::wait when the associated future is invalid or cancelled!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is invalid!"}; + } + future.wait(); + } + + template + std::future_status wait_for(const std::chrono::duration& timeout_duration) const { + if constexpr (isCancellable) { + if (IsCancelled()) { + throw std::logic_error{"Calling AsyncWrapper::wait_for when the associated future is cancelled!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is invalid!"}; + } + return future.wait_for(timeout_duration); + } + + template + std::future_status wait_until(const std::chrono::time_point& timeout_time) const { + if constexpr (isCancellable) { + if (IsCancelled()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is cancelled!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is invalid!"}; + } + return future.wait_until(timeout_time); + } + + std::shared_future share() noexcept { + return future.share(); + } + + // Cancellation-related methods + CancellationResult Cancel() { + if constexpr (!isCancellable) { + return CancellationResult::invalid_operation; + } + if (!future.valid() || is_cancelled->load()) { + return CancellationResult::invalid_operation; + } + is_cancelled->store(true); + return CancellationResult::success; + } + + [[nodiscard]] bool IsCancelled() const { + if constexpr (isCancellable) { + return is_cancelled->load(); + } else { + return false; + } + } +}; + +// Deduction guides +template +AsyncWrapper(std::future&&) -> AsyncWrapper; + +template +AsyncWrapper(std::future&&, std::shared_ptr&&) -> AsyncWrapper; + +} // namespace cpr + + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/auth.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/auth.h new file mode 100644 index 0000000..e783969 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/auth.h @@ -0,0 +1,32 @@ +#ifndef CPR_AUTH_H +#define CPR_AUTH_H + +#include + +#include + +namespace cpr { + +enum class AuthMode { BASIC, DIGEST, NTLM }; + +class Authentication { + public: + Authentication(std::string username, std::string password, AuthMode auth_mode) : auth_string_{std::move(username) + ":" + std::move(password)}, auth_mode_{std::move(auth_mode)} {} + Authentication(const Authentication& other) = default; + Authentication(Authentication&& old) noexcept = default; + ~Authentication() noexcept; + + Authentication& operator=(Authentication&& old) noexcept = default; + Authentication& operator=(const Authentication& other) = default; + + const char* GetAuthString() const noexcept; + AuthMode GetAuthMode() const noexcept; + + private: + std::string auth_string_; + AuthMode auth_mode_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/bearer.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/bearer.h new file mode 100644 index 0000000..5e58a7d --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/bearer.h @@ -0,0 +1,34 @@ +#ifndef CPR_BEARER_H +#define CPR_BEARER_H + +#include +#include + +#include + +namespace cpr { + +// Only supported with libcurl >= 7.61.0. +// As an alternative use SetHeader and add the token manually. +#if LIBCURL_VERSION_NUM >= 0x073D00 +class Bearer { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Bearer(std::string token) : token_string_{std::move(token)} {} + Bearer(const Bearer& other) = default; + Bearer(Bearer&& old) noexcept = default; + virtual ~Bearer() noexcept; + + Bearer& operator=(Bearer&& old) noexcept = default; + Bearer& operator=(const Bearer& other) = default; + + virtual const char* GetToken() const noexcept; + + protected: + std::string token_string_; +}; +#endif + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/body.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/body.h new file mode 100644 index 0000000..f691d9c --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/body.h @@ -0,0 +1,54 @@ +#ifndef CPR_BODY_H +#define CPR_BODY_H + +#include +#include +#include +#include +#include + +#include "cpr/buffer.h" +#include "cpr/cprtypes.h" +#include "cpr/file.h" + +namespace cpr { + +class Body : public StringHolder { + public: + Body() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Body(std::string body) : StringHolder(std::move(body)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Body(std::string_view body) : StringHolder(body) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Body(const char* body) : StringHolder(body) {} + Body(const char* str, size_t len) : StringHolder(str, len) {} + Body(const std::initializer_list args) : StringHolder(args) {} + // NOLINTNEXTLINE(google-explicit-constructor, cppcoreguidelines-pro-type-reinterpret-cast) + Body(const Buffer& buffer) : StringHolder(reinterpret_cast(buffer.data), static_cast(buffer.datalen)) {} + // NOLINTNEXTLINE(google-explicit-constructor) + Body(const File& file) { + std::ifstream is(file.filepath, std::ifstream::binary); + if (!is) { + throw std::invalid_argument("Can't open the file for HTTP request body!"); + } + + is.seekg(0, std::ios::end); + const std::streampos length = is.tellg(); + is.seekg(0, std::ios::beg); + std::string buffer; + buffer.resize(static_cast(length)); + is.read(buffer.data(), length); + str_ = std::move(buffer); + } + Body(const Body& other) = default; + Body(Body&& old) noexcept = default; + ~Body() override = default; + + Body& operator=(Body&& old) noexcept = default; + Body& operator=(const Body& other) = default; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/buffer.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/buffer.h new file mode 100644 index 0000000..5665faa --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/buffer.h @@ -0,0 +1,33 @@ +#ifndef CPR_BUFFER_H +#define CPR_BUFFER_H + +#include + +#include + +namespace cpr { + +struct Buffer { + using data_t = const char*; + + template + Buffer(Iterator begin, Iterator end, fs::path&& p_filename) + // Ignored here since libcurl reqires a long. + // There is also no way around the reinterpret_cast. + // NOLINTNEXTLINE(google-runtime-int, cppcoreguidelines-pro-type-reinterpret-cast) + : data{reinterpret_cast(&(*begin))}, datalen{static_cast(std::distance(begin, end))}, filename(std::move(p_filename)) { + is_random_access_iterator(begin, end); + static_assert(sizeof(*begin) == 1, "Only byte buffers can be used"); + } + + template + typename std::enable_if::iterator_category, std::random_access_iterator_tag>::value>::type is_random_access_iterator(Iterator /* begin */, Iterator /* end */) {} + + data_t data; + size_t datalen; + const fs::path filename; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/callback.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/callback.h new file mode 100644 index 0000000..dc1c6ee --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/callback.h @@ -0,0 +1,111 @@ +#ifndef CPR_CALLBACK_H +#define CPR_CALLBACK_H + +#include "cprtypes.h" + +#include +#include +#include +#include + +namespace cpr { + +class ReadCallback { + public: + ReadCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ReadCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), size{-1}, callback{std::move(p_callback)} {} + ReadCallback(cpr_off_t p_size, std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), size{p_size}, callback{std::move(p_callback)} {} + bool operator()(char* buffer, size_t& buffer_size) const { + return callback(buffer, buffer_size, userdata); + } + + intptr_t userdata{}; + cpr_off_t size{}; + std::function callback; +}; + +class HeaderCallback { + public: + HeaderCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + HeaderCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + bool operator()(std::string header) const { + return callback(std::move(header), userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +class WriteCallback { + public: + WriteCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + WriteCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + bool operator()(std::string data) const { + return callback(std::move(data), userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +class ProgressCallback { + public: + ProgressCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ProgressCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + bool operator()(cpr_pf_arg_t downloadTotal, cpr_pf_arg_t downloadNow, cpr_pf_arg_t uploadTotal, cpr_pf_arg_t uploadNow) const { + return callback(downloadTotal, downloadNow, uploadTotal, uploadNow, userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +class DebugCallback { + public: + enum class InfoType { + TEXT = 0, + HEADER_IN = 1, + HEADER_OUT = 2, + DATA_IN = 3, + DATA_OUT = 4, + SSL_DATA_IN = 5, + SSL_DATA_OUT = 6, + }; + DebugCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + DebugCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + void operator()(InfoType type, std::string data) const { + callback(type, std::move(data), userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +/** + * Functor class for progress functions that will be used in cancellable requests. + */ +class CancellationCallback { + public: + CancellationCallback() = default; + explicit CancellationCallback(std::shared_ptr&& cs) : cancellation_state{std::move(cs)} {} + + CancellationCallback(std::shared_ptr&& cs, ProgressCallback& u_cb) : cancellation_state{std::move(cs)}, user_cb{std::reference_wrapper{u_cb}} {} + + bool operator()(cpr_pf_arg_t dltotal, cpr_pf_arg_t dlnow, cpr_pf_arg_t ultotal, cpr_pf_arg_t ulnow) const; + + void SetProgressCallback(ProgressCallback& u_cb); + + private: + std::shared_ptr cancellation_state; + std::optional> user_cb; +}; + + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cert_info.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cert_info.h new file mode 100644 index 0000000..6c328ee --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cert_info.h @@ -0,0 +1,35 @@ +#ifndef CPR_CERT_INFO_H +#define CPR_CERT_INFO_H + +#include +#include +#include + +namespace cpr { + +class CertInfo { + private: + std::vector cert_info_; + + public: + CertInfo() = default; + CertInfo(const std::initializer_list& entry) : cert_info_{entry} {}; + ~CertInfo() noexcept = default; + + using iterator = std::vector::iterator; + using const_iterator = std::vector::const_iterator; + + std::string& operator[](const size_t& pos); + iterator begin(); + iterator end(); + const_iterator begin() const; + const_iterator end() const; + const_iterator cbegin() const; + const_iterator cend() const; + void emplace_back(const std::string& str); + void push_back(const std::string& str); + void pop_back(); +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/connect_timeout.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/connect_timeout.h new file mode 100644 index 0000000..546e8a5 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/connect_timeout.h @@ -0,0 +1,18 @@ +#ifndef CPR_CONNECT_TIMEOUT_H +#define CPR_CONNECT_TIMEOUT_H + +#include "cpr/timeout.h" + +namespace cpr { + +class ConnectTimeout : public Timeout { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ConnectTimeout(const std::chrono::milliseconds& duration) : Timeout{duration} {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ConnectTimeout(const std::int32_t& milliseconds) : Timeout{milliseconds} {} +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cookies.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cookies.h new file mode 100644 index 0000000..c018ea4 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cookies.h @@ -0,0 +1,92 @@ +#ifndef CPR_COOKIES_H +#define CPR_COOKIES_H + +#include "cpr/curlholder.h" +#include +#include +#include +#include +#include + +namespace cpr { +/** + * EXPIRES_STRING_SIZE is an explicitly static and const variable that could be only accessed within the same namespace and is immutable. + * To be used for "std::array", the expression must have a constant value, so EXPIRES_STRING_SIZE must be a const value. + **/ +static const std::size_t EXPIRES_STRING_SIZE = 100; + +class Cookie { + public: + Cookie() = default; + /** + * Some notes for the default value used by expires: + * std::chrono::system_clock::time_point::min() won't work on Windows due to the min, max clash there. + * So we fall back to std::chrono::system_clock::from_time_t(0) for the minimum value here. + **/ + Cookie(const std::string& name, const std::string& value, const std::string& domain = "", bool p_isIncludingSubdomains = false, const std::string& path = "/", bool p_isHttpsOnly = false, std::chrono::system_clock::time_point expires = std::chrono::system_clock::from_time_t(0)) : name_{name}, value_{value}, domain_{domain}, includeSubdomains_{p_isIncludingSubdomains}, path_{path}, httpsOnly_{p_isHttpsOnly}, expires_{expires} {}; + const std::string GetDomain() const; + bool IsIncludingSubdomains() const; + const std::string GetPath() const; + bool IsHttpsOnly() const; + const std::chrono::system_clock::time_point GetExpires() const; + const std::string GetExpiresString() const; + const std::string GetName() const; + const std::string GetValue() const; + + private: + std::string name_; + std::string value_; + std::string domain_; + bool includeSubdomains_{}; + std::string path_; + bool httpsOnly_{}; + /** + * TODO: Update the implementation using `std::chrono::utc_clock` of C++20 + **/ + std::chrono::system_clock::time_point expires_{}; +}; + +class Cookies { + public: + /** + * Should we URL-encode cookies when making a request. + * Based on RFC6265, it is recommended but not mandatory to encode cookies. + * + * ------- + * To maximize compatibility with user agents, servers that wish to + * store arbitrary data in a cookie-value SHOULD encode that data, for + * example, using Base64 [RFC4648]. + * ------- + * Source: RFC6265 (https://www.ietf.org/rfc/rfc6265.txt) + **/ + bool encode{true}; + + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Cookies(bool p_encode = true) : encode{p_encode} {}; + Cookies(const std::initializer_list& cookies, bool p_encode = true) : encode{p_encode}, cookies_{cookies} {}; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Cookies(const cpr::Cookie& cookie, bool p_encode = true) : encode{p_encode}, cookies_{cookie} {}; + + cpr::Cookie& operator[](size_t pos); + const std::string GetEncoded(const CurlHolder& holder) const; + + using iterator = std::vector::iterator; + using const_iterator = std::vector::const_iterator; + + iterator begin(); + iterator end(); + const_iterator begin() const; + const_iterator end() const; + const_iterator cbegin() const; + const_iterator cend() const; + void emplace_back(const Cookie& str); + void push_back(const Cookie& str); + void pop_back(); + + private: + std::vector cookies_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cpr.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cpr.h new file mode 100644 index 0000000..fbad172 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cpr.h @@ -0,0 +1,46 @@ +#ifndef CPR_CPR_H +#define CPR_CPR_H + +#include "cpr/api.h" +#include "cpr/auth.h" +#include "cpr/bearer.h" +#include "cpr/callback.h" +#include "cpr/cert_info.h" +#include "cpr/connect_timeout.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/cprver.h" +#include "cpr/curl_container.h" +#include "cpr/curlholder.h" +#include "cpr/error.h" +#include "cpr/http_version.h" +#include "cpr/interceptor.h" +#include "cpr/interface.h" +#include "cpr/limit_rate.h" +#include "cpr/local_port.h" +#include "cpr/local_port_range.h" +#include "cpr/low_speed.h" +#include "cpr/multipart.h" +#include "cpr/multiperform.h" +#include "cpr/parameters.h" +#include "cpr/payload.h" +#include "cpr/proxies.h" +#include "cpr/proxyauth.h" +#include "cpr/range.h" +#include "cpr/redirect.h" +#include "cpr/reserve_size.h" +#include "cpr/resolve.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include "cpr/ssl_ctx.h" +#include "cpr/ssl_options.h" +#include "cpr/status_codes.h" +#include "cpr/timeout.h" +#include "cpr/unix_socket.h" +#include "cpr/user_agent.h" +#include "cpr/util.h" +#include "cpr/verbose.h" + +#define CPR_LIBCURL_VERSION_NUM LIBCURL_VERSION_NUM + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cprtypes.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cprtypes.h new file mode 100644 index 0000000..65da738 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cprtypes.h @@ -0,0 +1,144 @@ +#ifndef CPR_CPR_TYPES_H +#define CPR_CPR_TYPES_H + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace cpr { + +/** + * Wrapper around "curl_off_t" to prevent applications from having to link against libcurl. + **/ +using cpr_off_t = curl_off_t; + +/** + * The argument type for progress functions, dependent on libcurl version + **/ +#if LIBCURL_VERSION_NUM < 0x072000 +using cpr_pf_arg_t = double; +#else +using cpr_pf_arg_t = cpr_off_t; +#endif + +template +class StringHolder { + public: + StringHolder() = default; + explicit StringHolder(std::string str) : str_(std::move(str)) {} + explicit StringHolder(std::string_view str) : str_(str) {} + explicit StringHolder(const char* str) : str_(str) {} + StringHolder(const char* str, size_t len) : str_(str, len) {} + StringHolder(const std::initializer_list args) { + str_ = std::accumulate(args.begin(), args.end(), str_); + } + StringHolder(const StringHolder& other) = default; + StringHolder(StringHolder&& old) noexcept = default; + virtual ~StringHolder() = default; + + StringHolder& operator=(StringHolder&& old) noexcept = default; + + StringHolder& operator=(const StringHolder& other) = default; + + explicit operator std::string() const { + return str_; + } + + T operator+(const char* rhs) const { + return T(str_ + rhs); + } + + T operator+(const std::string& rhs) const { + return T(str_ + rhs); + } + + T operator+(const StringHolder& rhs) const { + return T(str_ + rhs.str_); + } + + void operator+=(const char* rhs) { + str_ += rhs; + } + void operator+=(const std::string& rhs) { + str_ += rhs; + } + void operator+=(const StringHolder& rhs) { + str_ += rhs; + } + + bool operator==(const char* rhs) const { + return str_ == rhs; + } + bool operator==(const std::string& rhs) const { + return str_ == rhs; + } + bool operator==(const StringHolder& rhs) const { + return str_ == rhs.str_; + } + + bool operator!=(const char* rhs) const { + return str_.c_str() != rhs; + } + bool operator!=(const std::string& rhs) const { + return str_ != rhs; + } + bool operator!=(const StringHolder& rhs) const { + return str_ != rhs.str_; + } + + const std::string& str() { + return str_; + } + const std::string& str() const { + return str_; + } + const char* c_str() const { + return str_.c_str(); + } + const char* data() const { + return str_.data(); + } + + protected: + std::string str_{}; +}; + +template +std::ostream& operator<<(std::ostream& os, const StringHolder& s) { + os << s.str(); + return os; +} + +class Url : public StringHolder { + public: + Url() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Url(std::string url) : StringHolder(std::move(url)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Url(std::string_view url) : StringHolder(url) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Url(const char* url) : StringHolder(url) {} + Url(const char* str, size_t len) : StringHolder(std::string(str, len)) {} + Url(const std::initializer_list args) : StringHolder(args) {} + Url(const Url& other) = default; + Url(Url&& old) noexcept = default; + ~Url() override = default; + + Url& operator=(Url&& old) noexcept = default; + Url& operator=(const Url& other) = default; +}; + +struct CaseInsensitiveCompare { + bool operator()(const std::string& a, const std::string& b) const noexcept; +}; + +using Header = std::map; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cprver.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cprver.h new file mode 100644 index 0000000..aaa4f9f --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/cprver.h @@ -0,0 +1,30 @@ +#ifndef CPR_CPRVER_H +#define CPR_CPRVER_H + +/** + * CPR version as a string. + **/ +#define CPR_VERSION "1.10.5" + +/** + * CPR version split up into parts. + **/ +#define CPR_VERSION_MAJOR 1 +#define CPR_VERSION_MINOR 10 +#define CPR_VERSION_PATCH 5 + +/** + * CPR version as a single hex digit. + * it can be split up into three parts: + * 0xAABBCC + * AA: The current CPR major version number in a hex format. + * BB: The current CPR minor version number in a hex format. + * CC: The current CPR patch version number in a hex format. + * + * Examples: + * '0x010702' -> 01.07.02 -> CPR_VERSION: 1.7.2 + * '0xA13722' -> A1.37.22 -> CPR_VERSION: 161.55.34 + **/ +#define CPR_VERSION_NUM 0x10a05 + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/curl_container.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/curl_container.h new file mode 100644 index 0000000..c2409b2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/curl_container.h @@ -0,0 +1,51 @@ +#ifndef CURL_CONTAINER_H +#define CURL_CONTAINER_H + +#include +#include +#include +#include + +#include "cpr/curlholder.h" + + +namespace cpr { + +struct Parameter { + Parameter(std::string p_key, std::string p_value) : key{std::move(p_key)}, value{std::move(p_value)} {} + + std::string key; + std::string value; +}; + +struct Pair { + Pair(std::string p_key, std::string p_value) : key(std::move(p_key)), value(std::move(p_value)) {} + + std::string key; + std::string value; +}; + + +template +class CurlContainer { + public: + /** + * Enables or disables URL encoding for keys and values when calling GetContent(...). + **/ + bool encode = true; + + CurlContainer() = default; + CurlContainer(const std::initializer_list&); + + void Add(const std::initializer_list&); + void Add(const T&); + + const std::string GetContent(const CurlHolder&) const; + + protected: + std::vector containerList_; +}; + +} // namespace cpr + +#endif // diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/curlholder.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/curlholder.h new file mode 100644 index 0000000..a9e1dc8 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/curlholder.h @@ -0,0 +1,54 @@ +#ifndef CPR_CURL_HOLDER_H +#define CPR_CURL_HOLDER_H + +#include +#include +#include + +#include + +namespace cpr { +struct CurlHolder { + private: + /** + * Mutex for curl_easy_init(). + * curl_easy_init() is not thread save. + * References: + * https://curl.haxx.se/libcurl/c/curl_easy_init.html + * https://curl.haxx.se/libcurl/c/threadsafe.html + **/ + + // Avoids initalization order problems in a static build + static std::mutex& curl_easy_init_mutex_() { + static std::mutex curl_easy_init_mutex_; + return curl_easy_init_mutex_; + } + + public: + CURL* handle{nullptr}; + struct curl_slist* chunk{nullptr}; + struct curl_slist* resolveCurlList{nullptr}; + curl_mime* multipart{nullptr}; + std::array error{}; + + CurlHolder(); + CurlHolder(const CurlHolder& other) = default; + CurlHolder(CurlHolder&& old) noexcept = default; + ~CurlHolder(); + + CurlHolder& operator=(CurlHolder&& old) noexcept = default; + CurlHolder& operator=(const CurlHolder& other) = default; + + /** + * Uses curl_easy_escape(...) for escaping the given string. + **/ + std::string urlEncode(const std::string& s) const; + + /** + * Uses curl_easy_unescape(...) for unescaping the given string. + **/ + std::string urlDecode(const std::string& s) const; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/curlmultiholder.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/curlmultiholder.h new file mode 100644 index 0000000..ccd504b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/curlmultiholder.h @@ -0,0 +1,18 @@ +#ifndef CPR_CURLMULTIHOLDER_H +#define CPR_CURLMULTIHOLDER_H + +#include + +namespace cpr { + +class CurlMultiHolder { + public: + CurlMultiHolder(); + ~CurlMultiHolder(); + + CURLM* handle{nullptr}; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/error.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/error.h new file mode 100644 index 0000000..bb59a4c --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/error.h @@ -0,0 +1,53 @@ +#ifndef CPR_ERROR_H +#define CPR_ERROR_H + +#include +#include + +#include "cpr/cprtypes.h" +#include + +namespace cpr { + +enum class ErrorCode { + OK = 0, + CONNECTION_FAILURE, + EMPTY_RESPONSE, + HOST_RESOLUTION_FAILURE, + INTERNAL_ERROR, + INVALID_URL_FORMAT, + NETWORK_RECEIVE_ERROR, + NETWORK_SEND_FAILURE, + OPERATION_TIMEDOUT, + PROXY_RESOLUTION_FAILURE, + SSL_CONNECT_ERROR, + SSL_LOCAL_CERTIFICATE_ERROR, + SSL_REMOTE_CERTIFICATE_ERROR, + SSL_CACERT_ERROR, + GENERIC_SSL_ERROR, + UNSUPPORTED_PROTOCOL, + REQUEST_CANCELLED, + TOO_MANY_REDIRECTS, + UNKNOWN_ERROR = 1000, +}; + +class Error { + public: + ErrorCode code = ErrorCode::OK; + std::string message{}; + + Error() = default; + + Error(const std::int32_t& curl_code, std::string&& p_error_message) : code{getErrorCodeForCurlError(curl_code)}, message(std::move(p_error_message)) {} + + explicit operator bool() const { + return code != ErrorCode::OK; + } + + private: + static ErrorCode getErrorCodeForCurlError(std::int32_t curl_code); +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/file.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/file.h new file mode 100644 index 0000000..b39914a --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/file.h @@ -0,0 +1,59 @@ +#ifndef CPR_FILE_H +#define CPR_FILE_H + +#include +#include +#include + +#include + +namespace cpr { + +struct File { + explicit File(std::string p_filepath, const std::string& p_overriden_filename = {}) : filepath(std::move(p_filepath)), overriden_filename(p_overriden_filename) {} + + std::string filepath; + std::string overriden_filename; + + [[nodiscard]] bool hasOverridenFilename() const noexcept { + return !overriden_filename.empty(); + }; +}; + +class Files { + public: + Files() = default; + // NOLINTNEXTLINE(google-explicit-constructor) + Files(const File& p_file) : files{p_file} {}; + + Files(const Files& other) = default; + Files(Files&& old) noexcept = default; + + Files(const std::initializer_list& p_files) : files{p_files} {}; + Files(const std::initializer_list& p_filepaths); + + ~Files() noexcept = default; + + Files& operator=(const Files& other); + Files& operator=(Files&& old) noexcept; + + using iterator = std::vector::iterator; + using const_iterator = std::vector::const_iterator; + + iterator begin(); + iterator end(); + [[nodiscard]] const_iterator begin() const; + [[nodiscard]] const_iterator end() const; + [[nodiscard]] const_iterator cbegin() const; + [[nodiscard]] const_iterator cend() const; + void emplace_back(const File& file); + void push_back(const File& file); + void pop_back(); + + private: + std::vector files; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/filesystem.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/filesystem.h new file mode 100644 index 0000000..f296770 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/filesystem.h @@ -0,0 +1,26 @@ +#ifndef CPR_FILESYSTEM_H +#define CPR_FILESYSTEM_H + +// Include filesystem into the namespace "fs" from either "filesystem" or "experimental/filesystem" or "boost/filesystem" +#ifdef CPR_USE_BOOST_FILESYSTEM +#define BOOST_FILESYSTEM_VERSION 4 // Use the latest, with the closest behavior to std::filesystem. +#include +namespace cpr { +namespace fs = boost::filesystem; +} +// cppcheck-suppress preprocessorErrorDirective +#elif __has_include() +#include +namespace cpr { +namespace fs = std::filesystem; +} +#elif __has_include("experimental/filesystem") +#include +namespace cpr { +namespace fs = std::experimental::filesystem; +} +#else +#error "Failed to include header!" +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/http_version.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/http_version.h new file mode 100644 index 0000000..45b5028 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/http_version.h @@ -0,0 +1,67 @@ +#ifndef CPR_HTTP_VERSION_H +#define CPR_HTTP_VERSION_H + +#include + +namespace cpr { +enum class HttpVersionCode { + /** + * Let libcurl decide which version is the best. + **/ + VERSION_NONE, + /** + * Enforce HTTP 1.0 requests. + **/ + VERSION_1_0, + /** + * Enforce HTTP 1.1 requests. + **/ + VERSION_1_1, +#if LIBCURL_VERSION_NUM >= 0x072100 // 7.33.0 + /** + * Attempt HTTP 2.0 requests. + * Fallback to HTTP 1.1 if negotiation fails. + **/ + VERSION_2_0, +#endif +#if LIBCURL_VERSION_NUM >= 0x072F00 // 7.47.0 + /** + * Attempt HTTP 2.0 for HTTPS requests only. + * Fallback to HTTP 1.1 if negotiation fails. + * HTTP 1.1 will be used for HTTP connections. + **/ + VERSION_2_0_TLS, +#endif +#if LIBCURL_VERSION_NUM >= 0x073100 // 7.49.0 + /** + * Start HTTP 2.0 for HTTP requests. + * Requires prior knowledge that the server supports HTTP 2.0. + * For HTTPS requests we will negotiate the protocol version in the TLS handshake. + **/ + VERSION_2_0_PRIOR_KNOWLEDGE, +#endif +#if LIBCURL_VERSION_NUM >= 0x074200 // 7.66.0 + /** + * Attempt HTTP 3.0 requests. + * Requires prior knowledge that the server supports HTTP 3.0 since there is no gracefully downgrade. + * Fallback to HTTP 1.1 if negotiation fails. + **/ + VERSION_3_0 +#endif +}; + +class HttpVersion { + public: + /** + * The HTTP version that should be used by libcurl when initiating a HTTP(S) connection. + * Default: HttpVersionCode::VERSION_NONE + **/ + HttpVersionCode code = HttpVersionCode::VERSION_NONE; + + HttpVersion() = default; + explicit HttpVersion(HttpVersionCode _code) : code(_code) {} +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/interceptor.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/interceptor.h new file mode 100644 index 0000000..34cfe50 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/interceptor.h @@ -0,0 +1,74 @@ +#ifndef CPR_INTERCEPTOR_H +#define CPR_INTERCEPTOR_H + +#include "cpr/multiperform.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include + +namespace cpr { +class Interceptor { + public: + enum class ProceedHttpMethod { + GET_REQUEST = 0, + POST_REQUEST, + PUT_REQUEST, + DELETE_REQUEST, + PATCH_REQUEST, + HEAD_REQUEST, + OPTIONS_REQUEST, + DOWNLOAD_CALLBACK_REQUEST, + DOWNLOAD_FILE_REQUEST, + }; + + Interceptor() = default; + Interceptor(const Interceptor& other) = default; + Interceptor(Interceptor&& old) = default; + virtual ~Interceptor() = default; + + Interceptor& operator=(const Interceptor& other) = default; + Interceptor& operator=(Interceptor&& old) = default; + + virtual Response intercept(Session& session) = 0; + + protected: + static Response proceed(Session& session); + static Response proceed(Session& session, ProceedHttpMethod httpMethod); + static Response proceed(Session& session, ProceedHttpMethod httpMethod, std::ofstream& file); + static Response proceed(Session& session, ProceedHttpMethod httpMethod, const WriteCallback& write); +}; + +class InterceptorMulti { + public: + enum class ProceedHttpMethod { + GET_REQUEST = 0, + POST_REQUEST, + PUT_REQUEST, + DELETE_REQUEST, + PATCH_REQUEST, + HEAD_REQUEST, + OPTIONS_REQUEST, + DOWNLOAD_CALLBACK_REQUEST, + DOWNLOAD_FILE_REQUEST, + }; + + InterceptorMulti() = default; + InterceptorMulti(const InterceptorMulti& other) = default; + InterceptorMulti(InterceptorMulti&& old) = default; + virtual ~InterceptorMulti() = default; + + InterceptorMulti& operator=(const InterceptorMulti& other) = default; + InterceptorMulti& operator=(InterceptorMulti&& old) = default; + + virtual std::vector intercept(MultiPerform& multi) = 0; + + protected: + static std::vector proceed(MultiPerform& multi); + + static void PrepareDownloadSession(MultiPerform& multi, size_t sessions_index, const WriteCallback& write); +}; + +} // namespace cpr + + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/interface.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/interface.h new file mode 100644 index 0000000..b98940e --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/interface.h @@ -0,0 +1,32 @@ +#ifndef CPR_INTERFACE_H +#define CPR_INTERFACE_H + +#include +#include + +#include "cpr/cprtypes.h" + +namespace cpr { + +class Interface : public StringHolder { + public: + Interface() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Interface(std::string iface) : StringHolder(std::move(iface)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Interface(std::string_view iface) : StringHolder(iface) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Interface(const char* iface) : StringHolder(iface) {} + Interface(const char* str, size_t len) : StringHolder(str, len) {} + Interface(const std::initializer_list args) : StringHolder(args) {} + Interface(const Interface& other) = default; + Interface(Interface&& old) noexcept = default; + ~Interface() override = default; + + Interface& operator=(Interface&& old) noexcept = default; + Interface& operator=(const Interface& other) = default; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/limit_rate.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/limit_rate.h new file mode 100644 index 0000000..2b0e8a2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/limit_rate.h @@ -0,0 +1,18 @@ +#ifndef CPR_SPEED_LIMIT_H +#define CPR_SPEED_LIMIT_H + +#include + +namespace cpr { + +class LimitRate { + public: + LimitRate(const std::int64_t p_downrate, const std::int64_t p_uprate) : downrate(p_downrate), uprate(p_uprate) {} + + std::int64_t downrate = 0; + std::int64_t uprate = 0; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/local_port.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/local_port.h new file mode 100644 index 0000000..e853425 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/local_port.h @@ -0,0 +1,23 @@ +#ifndef CPR_LOCAL_PORT_H +#define CPR_LOCAL_PORT_H + +#include + +namespace cpr { + +class LocalPort { + public: + // NOLINTNEXTLINE(google-explicit-constructor) + LocalPort(const std::uint16_t p_localport) : localport_(p_localport) {} + + operator std::uint16_t() const { + return localport_; + } + + private: + std::uint16_t localport_ = 0; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/local_port_range.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/local_port_range.h new file mode 100644 index 0000000..cc2d7e2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/local_port_range.h @@ -0,0 +1,23 @@ +#ifndef CPR_LOCAL_PORT_RANGE_H +#define CPR_LOCAL_PORT_RANGE_H + +#include + +namespace cpr { + +class LocalPortRange { + public: + // NOLINTNEXTLINE(google-explicit-constructor) + LocalPortRange(const std::uint16_t p_localportrange) : localportrange_(p_localportrange) {} + + operator std::uint16_t() const { + return localportrange_; + } + + private: + std::uint16_t localportrange_ = 0; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/low_speed.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/low_speed.h new file mode 100644 index 0000000..ff77fd2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/low_speed.h @@ -0,0 +1,18 @@ +#ifndef CPR_LOW_SPEED_H +#define CPR_LOW_SPEED_H + +#include + +namespace cpr { + +class LowSpeed { + public: + LowSpeed(const std::int32_t p_limit, const std::int32_t p_time) : limit(p_limit), time(p_time) {} + + std::int32_t limit; + std::int32_t time; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/multipart.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/multipart.h new file mode 100644 index 0000000..3eaaea7 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/multipart.h @@ -0,0 +1,43 @@ +#ifndef CPR_MULTIPART_H +#define CPR_MULTIPART_H + +#include +#include +#include +#include +#include + +#include "buffer.h" +#include "file.h" + +namespace cpr { + +struct Part { + Part(const std::string& p_name, const std::string& p_value, const std::string& p_content_type = {}) : name{p_name}, value{p_value}, content_type{p_content_type}, is_file{false}, is_buffer{false} {} + Part(const std::string& p_name, const std::int32_t& p_value, const std::string& p_content_type = {}) : name{p_name}, value{std::to_string(p_value)}, content_type{p_content_type}, is_file{false}, is_buffer{false} {} + Part(const std::string& p_name, const Files& p_files, const std::string& p_content_type = {}) : name{p_name}, content_type{p_content_type}, is_file{true}, is_buffer{false}, files{p_files} {} + Part(const std::string& p_name, Files&& p_files, const std::string& p_content_type = {}) : name{p_name}, content_type{p_content_type}, is_file{true}, is_buffer{false}, files{p_files} {} + Part(const std::string& p_name, const Buffer& buffer, const std::string& p_content_type = {}) : name{p_name}, value{buffer.filename.string()}, content_type{p_content_type}, data{buffer.data}, datalen{buffer.datalen}, is_file{false}, is_buffer{true} {} + + std::string name; + // We don't use fs::path here, as this leads to problems using windows + std::string value; + std::string content_type; + Buffer::data_t data{nullptr}; + size_t datalen{0}; + bool is_file; + bool is_buffer; + + Files files; +}; + +class Multipart { + public: + Multipart(const std::initializer_list& parts); + + std::vector parts; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/multiperform.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/multiperform.h new file mode 100644 index 0000000..d9ab978 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/multiperform.h @@ -0,0 +1,137 @@ +#ifndef CPR_MULTIPERFORM_H +#define CPR_MULTIPERFORM_H + +#include "cpr/curlmultiholder.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include +#include +#include +#include +#include + +namespace cpr { + +class InterceptorMulti; + +class MultiPerform { + public: + enum class HttpMethod { + UNDEFINED = 0, + GET_REQUEST, + POST_REQUEST, + PUT_REQUEST, + DELETE_REQUEST, + PATCH_REQUEST, + HEAD_REQUEST, + OPTIONS_REQUEST, + DOWNLOAD_REQUEST, + }; + + MultiPerform(); + MultiPerform(const MultiPerform& other) = delete; + MultiPerform(MultiPerform&& old) = default; + ~MultiPerform(); + + MultiPerform& operator=(const MultiPerform& other) = delete; + MultiPerform& operator=(MultiPerform&& old) noexcept = default; + + std::vector Get(); + std::vector Delete(); + template + std::vector Download(DownloadArgTypes... args); + std::vector Put(); + std::vector Head(); + std::vector Options(); + std::vector Patch(); + std::vector Post(); + + std::vector Perform(); + template + std::vector PerformDownload(DownloadArgTypes... args); + + void AddSession(std::shared_ptr& session, HttpMethod method = HttpMethod::UNDEFINED); + void RemoveSession(const std::shared_ptr& session); + std::vector, HttpMethod>>& GetSessions(); + [[nodiscard]] const std::vector, HttpMethod>>& GetSessions() const; + + void AddInterceptor(const std::shared_ptr& pinterceptor); + + private: + // Interceptors should be able to call the private proceed() and PrepareDownloadSessions() functions + friend InterceptorMulti; + + void SetHttpMethod(HttpMethod method); + + void PrepareSessions(); + template + void PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg, DownloadArgTypes... args); + template + void PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg); + void PrepareDownloadSession(size_t sessions_index, std::ofstream& file); + void PrepareDownloadSession(size_t sessions_index, const WriteCallback& write); + + void PrepareGet(); + void PrepareDelete(); + void PreparePut(); + void PreparePatch(); + void PrepareHead(); + void PrepareOptions(); + void PreparePost(); + template + void PrepareDownload(DownloadArgTypes... args); + + std::vector intercept(); + std::vector proceed(); + std::vector MakeRequest(); + std::vector MakeDownloadRequest(); + + void DoMultiPerform(); + std::vector ReadMultiInfo(std::function&& complete_function); + + std::vector, HttpMethod>> sessions_; + std::unique_ptr multicurl_; + bool is_download_multi_perform{false}; + + std::queue> interceptors_; +}; + +template +void MultiPerform::PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg) { + PrepareDownloadSession(sessions_index, current_arg); +} + +template +void MultiPerform::PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg, DownloadArgTypes... args) { + PrepareDownloadSession(sessions_index, current_arg); + PrepareDownloadSessions(sessions_index + 1, args...); +} + + +template +void MultiPerform::PrepareDownload(DownloadArgTypes... args) { + SetHttpMethod(HttpMethod::DOWNLOAD_REQUEST); + PrepareDownloadSessions(0, args...); +} + +template +std::vector MultiPerform::Download(DownloadArgTypes... args) { + if (sizeof...(args) != sessions_.size()) { + throw std::invalid_argument("Number of download arguments has to match the number of sessions added to the multiperform!"); + } + PrepareDownload(args...); + return MakeDownloadRequest(); +} + +template +std::vector MultiPerform::PerformDownload(DownloadArgTypes... args) { + if (sizeof...(args) != sessions_.size()) { + throw std::invalid_argument("Number of download arguments has to match the number of sessions added to the multiperform!"); + } + PrepareDownloadSessions(0, args...); + return MakeDownloadRequest(); +} + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/parameters.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/parameters.h new file mode 100644 index 0000000..0e34d4d --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/parameters.h @@ -0,0 +1,18 @@ +#ifndef CPR_PARAMETERS_H +#define CPR_PARAMETERS_H + +#include + +#include "cpr/curl_container.h" + +namespace cpr { + +class Parameters : public CurlContainer { + public: + Parameters() = default; + Parameters(const std::initializer_list& parameters); +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/payload.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/payload.h new file mode 100644 index 0000000..686b540 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/payload.h @@ -0,0 +1,23 @@ +#ifndef CPR_PAYLOAD_H +#define CPR_PAYLOAD_H + +#include + +#include "cpr/curl_container.h" + + +namespace cpr { +class Payload : public CurlContainer { + public: + template + Payload(const It begin, const It end) { + for (It pair = begin; pair != end; ++pair) { + Add(*pair); + } + } + Payload(const std::initializer_list& pairs); +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/proxies.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/proxies.h new file mode 100644 index 0000000..6970442 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/proxies.h @@ -0,0 +1,23 @@ +#ifndef CPR_PROXIES_H +#define CPR_PROXIES_H + +#include +#include +#include + +namespace cpr { +class Proxies { + public: + Proxies() = default; + Proxies(const std::initializer_list>& hosts); + Proxies(const std::map& hosts); + + bool has(const std::string& protocol) const; + const std::string& operator[](const std::string& protocol); + + private: + std::map hosts_; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/proxyauth.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/proxyauth.h new file mode 100644 index 0000000..7e34764 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/proxyauth.h @@ -0,0 +1,43 @@ +#ifndef CPR_PROXYAUTH_H +#define CPR_PROXYAUTH_H + +#include +#include + +#include "cpr/auth.h" +#include "cpr/util.h" + +namespace cpr { +class EncodedAuthentication { + public: + EncodedAuthentication() : auth_string_{""} {} + EncodedAuthentication(std::string username, std::string password) : auth_string_{cpr::util::urlEncode(std::move(username)) + ":" + cpr::util::urlEncode(std::move(password))} {} + EncodedAuthentication(const EncodedAuthentication& other) = default; + EncodedAuthentication(EncodedAuthentication&& old) noexcept = default; + virtual ~EncodedAuthentication() noexcept; + + EncodedAuthentication& operator=(EncodedAuthentication&& old) noexcept = default; + EncodedAuthentication& operator=(const EncodedAuthentication& other) = default; + + const char* GetAuthString() const noexcept; + + protected: + std::string auth_string_; +}; + +class ProxyAuthentication { + public: + ProxyAuthentication() = default; + ProxyAuthentication(const std::initializer_list>& auths) : proxyAuth_{auths} {} + ProxyAuthentication(const std::map& auths) : proxyAuth_{auths} {} + + bool has(const std::string& protocol) const; + const char* operator[](const std::string& protocol); + + private: + std::map proxyAuth_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/range.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/range.h new file mode 100644 index 0000000..2c5a145 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/range.h @@ -0,0 +1,44 @@ +#ifndef CPR_RANGE_H +#define CPR_RANGE_H + +#include +#include + +namespace cpr { + +class Range { + public: + Range(const std::optional p_resume_from = std::nullopt, const std::optional p_finish_at = std::nullopt) { + resume_from = p_resume_from.value_or(0); + finish_at = p_finish_at.value_or(-1); + } + + std::int64_t resume_from; + std::int64_t finish_at; + + const std::string str() const { + std::string from_str = (resume_from < 0U) ? "" : std::to_string(resume_from); + std::string to_str = (finish_at < 0U) ? "" : std::to_string(finish_at); + return from_str + "-" + to_str; + } +}; + +class MultiRange { + public: + MultiRange(std::initializer_list rs) : ranges{rs} {} + + const std::string str() const { + std::string multi_range_string{}; + for (Range range : ranges) { + multi_range_string += ((multi_range_string.empty()) ? "" : ", ") + range.str(); + } + return multi_range_string; + } + + private: + std::vector ranges; +}; // namespace cpr + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/redirect.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/redirect.h new file mode 100644 index 0000000..32b4372 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/redirect.h @@ -0,0 +1,84 @@ +#ifndef CPR_REDIRECT_H +#define CPR_REDIRECT_H + +#include + +namespace cpr { +enum class PostRedirectFlags : uint8_t { + /** + * Respect RFC 7231 (section 6.4.2 to 6.4.4). + * Same as CURL_REDIR_POST_301 (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_301 = 0x1 << 0, + /** + * Maintain the request method after a 302 redirect. + * Same as CURL_REDIR_POST_302 (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_302 = 0x1 << 1, + /** + * Maintain the request method after a 303 redirect. + * Same as CURL_REDIR_POST_303 (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_303 = 0x1 << 2, + /** + * Default value. + * Convenience option to enable all flags. + * Same as CURL_REDIR_POST_ALL (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_ALL = POST_301 | POST_302 | POST_303, + /** + * * Convenience option to disable all flags. + **/ + NONE = 0x0 +}; + +PostRedirectFlags operator|(PostRedirectFlags lhs, PostRedirectFlags rhs); +PostRedirectFlags operator&(PostRedirectFlags lhs, PostRedirectFlags rhs); +PostRedirectFlags operator^(PostRedirectFlags lhs, PostRedirectFlags rhs); +PostRedirectFlags operator~(PostRedirectFlags flag); +PostRedirectFlags& operator|=(PostRedirectFlags& lhs, PostRedirectFlags rhs); +PostRedirectFlags& operator&=(PostRedirectFlags& lhs, PostRedirectFlags rhs); +PostRedirectFlags& operator^=(PostRedirectFlags& lhs, PostRedirectFlags rhs); +bool any(PostRedirectFlags flag); + +class Redirect { + public: + /** + * The maximum number of redirects to follow. + * 0: Refuse any redirects. + * -1: Infinite number of redirects. + * Default: 50 + * https://curl.se/libcurl/c/CURLOPT_MAXREDIRS.html + **/ + // NOLINTNEXTLINE (google-runtime-int) + long maximum{50L}; + /** + * Follow 3xx redirects. + * Default: true + * https://curl.se/libcurl/c/CURLOPT_FOLLOWLOCATION.html + **/ + bool follow{true}; + /** + * Continue to send authentication (user+password) credentials when following locations, even when hostname changed. + * Default: false + * https://curl.se/libcurl/c/CURLOPT_UNRESTRICTED_AUTH.html + **/ + bool cont_send_cred{false}; + /** + * Flags to control how to act after a redirect for a post request. + * Default: POST_ALL + **/ + PostRedirectFlags post_flags{PostRedirectFlags::POST_ALL}; + + Redirect() = default; + // NOLINTNEXTLINE (google-runtime-int) + Redirect(long p_maximum, bool p_follow, bool p_cont_send_cred, PostRedirectFlags p_post_flags) : maximum(p_maximum), follow(p_follow), cont_send_cred(p_cont_send_cred), post_flags(p_post_flags){}; + // NOLINTNEXTLINE (google-runtime-int) + explicit Redirect(long p_maximum) : maximum(p_maximum){}; + explicit Redirect(bool p_follow) : follow(p_follow){}; + Redirect(bool p_follow, bool p_cont_send_cred) : follow(p_follow), cont_send_cred(p_cont_send_cred){}; + explicit Redirect(PostRedirectFlags p_post_flags) : post_flags(p_post_flags){}; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/reserve_size.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/reserve_size.h new file mode 100644 index 0000000..5eae4c8 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/reserve_size.h @@ -0,0 +1,17 @@ +#ifndef CPR_RESERVE_SIZE_H +#define CPR_RESERVE_SIZE_H + +#include + +namespace cpr { + +class ReserveSize { + public: + ReserveSize(const size_t _size) : size(_size) {} + + size_t size = 0; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/resolve.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/resolve.h new file mode 100644 index 0000000..86a7c89 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/resolve.h @@ -0,0 +1,23 @@ +#ifndef CPR_RESOLVE_H +#define CPR_RESOLVE_H + +#include +#include + +namespace cpr { + class Resolve { + public: + std::string host; + std::string addr; + std::set ports; + + Resolve(const std::string& host_param, const std::string& addr_param, const std::set& ports_param = std::set{80U, 443U}): host(host_param), addr(addr_param), ports(ports_param) { + if (this->ports.empty()) { + this->ports.insert(80U); + this->ports.insert(443U); + } + } + }; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/response.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/response.h new file mode 100644 index 0000000..5c296da --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/response.h @@ -0,0 +1,58 @@ +#ifndef CPR_RESPONSE_H +#define CPR_RESPONSE_H + +#include +#include +#include +#include +#include +#include + +#include "cpr/cert_info.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/error.h" +#include "cpr/ssl_options.h" +#include "cpr/util.h" + +namespace cpr { + +class MultiPerform; + +class Response { + private: + friend MultiPerform; + std::shared_ptr curl_{nullptr}; + + public: + // Ignored here since libcurl uses a long for this. + // NOLINTNEXTLINE(google-runtime-int) + long status_code{}; + std::string text{}; + Header header{}; + Url url{}; + double elapsed{}; + Cookies cookies{}; + Error error{}; + std::string raw_header{}; + std::string status_line{}; + std::string reason{}; + cpr_off_t uploaded_bytes{}; + cpr_off_t downloaded_bytes{}; + // Ignored here since libcurl uses a long for this. + // NOLINTNEXTLINE(google-runtime-int) + long redirect_count{}; + + Response() = default; + Response(std::shared_ptr curl, std::string&& p_text, std::string&& p_header_string, Cookies&& p_cookies, Error&& p_error); + std::vector GetCertInfos(); + Response(const Response& other) = default; + Response(Response&& old) noexcept = default; + ~Response() noexcept = default; + + Response& operator=(Response&& old) noexcept = default; + Response& operator=(const Response& other) = default; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/session.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/session.h new file mode 100644 index 0000000..6b2b93e --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/session.h @@ -0,0 +1,308 @@ +#ifndef CPR_SESSION_H +#define CPR_SESSION_H + +#include +#include +#include +#include +#include +#include + +#include "cpr/accept_encoding.h" +#include "cpr/async_wrapper.h" +#include "cpr/auth.h" +#include "cpr/bearer.h" +#include "cpr/body.h" +#include "cpr/callback.h" +#include "cpr/connect_timeout.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/curlholder.h" +#include "cpr/http_version.h" +#include "cpr/interface.h" +#include "cpr/limit_rate.h" +#include "cpr/local_port.h" +#include "cpr/local_port_range.h" +#include "cpr/low_speed.h" +#include "cpr/multipart.h" +#include "cpr/parameters.h" +#include "cpr/payload.h" +#include "cpr/proxies.h" +#include "cpr/proxyauth.h" +#include "cpr/range.h" +#include "cpr/redirect.h" +#include "cpr/reserve_size.h" +#include "cpr/resolve.h" +#include "cpr/response.h" +#include "cpr/ssl_options.h" +#include "cpr/timeout.h" +#include "cpr/unix_socket.h" +#include "cpr/user_agent.h" +#include "cpr/util.h" +#include "cpr/verbose.h" + +namespace cpr { + +using AsyncResponse = AsyncWrapper; + +class Interceptor; +class MultiPerform; + +class Session : public std::enable_shared_from_this { + public: + Session(); + Session(const Session& other) = delete; + Session(Session&& old) = default; + + ~Session() = default; + + Session& operator=(Session&& old) noexcept = default; + Session& operator=(const Session& other) = delete; + + void SetUrl(const Url& url); + void SetParameters(const Parameters& parameters); + void SetParameters(Parameters&& parameters); + void SetHeader(const Header& header); + void UpdateHeader(const Header& header); + void SetTimeout(const Timeout& timeout); + void SetConnectTimeout(const ConnectTimeout& timeout); + void SetAuth(const Authentication& auth); +// Only supported with libcurl >= 7.61.0. +// As an alternative use SetHeader and add the token manually. +#if LIBCURL_VERSION_NUM >= 0x073D00 + void SetBearer(const Bearer& token); +#endif + void SetUserAgent(const UserAgent& ua); + void SetPayload(Payload&& payload); + void SetPayload(const Payload& payload); + void SetProxies(Proxies&& proxies); + void SetProxies(const Proxies& proxies); + void SetProxyAuth(ProxyAuthentication&& proxy_auth); + void SetProxyAuth(const ProxyAuthentication& proxy_auth); + void SetMultipart(Multipart&& multipart); + void SetMultipart(const Multipart& multipart); + void SetRedirect(const Redirect& redirect); + void SetCookies(const Cookies& cookies); + void SetBody(Body&& body); + void SetBody(const Body& body); + void SetLowSpeed(const LowSpeed& low_speed); + void SetVerifySsl(const VerifySsl& verify); + void SetUnixSocket(const UnixSocket& unix_socket); + void SetSslOptions(const SslOptions& options); + void SetReadCallback(const ReadCallback& read); + void SetHeaderCallback(const HeaderCallback& header); + void SetWriteCallback(const WriteCallback& write); + void SetProgressCallback(const ProgressCallback& progress); + void SetDebugCallback(const DebugCallback& debug); + void SetVerbose(const Verbose& verbose); + void SetInterface(const Interface& iface); + void SetLocalPort(const LocalPort& local_port); + void SetLocalPortRange(const LocalPortRange& local_port_range); + void SetHttpVersion(const HttpVersion& version); + void SetRange(const Range& range); + void SetResolve(const Resolve& resolve); + void SetResolves(const std::vector& resolves); + void SetMultiRange(const MultiRange& multi_range); + void SetReserveSize(const ReserveSize& reserve_size); + void SetAcceptEncoding(const AcceptEncoding& accept_encoding); + void SetAcceptEncoding(AcceptEncoding&& accept_encoding); + void SetLimitRate(const LimitRate& limit_rate); + + // For cancellable requests + void SetCancellationParam(std::shared_ptr param); + + // Used in templated functions + void SetOption(const Url& url); + void SetOption(const Parameters& parameters); + void SetOption(Parameters&& parameters); + void SetOption(const Header& header); + void SetOption(const Timeout& timeout); + void SetOption(const ConnectTimeout& timeout); + void SetOption(const Authentication& auth); +// Only supported with libcurl >= 7.61.0. +// As an alternative use SetHeader and add the token manually. +#if LIBCURL_VERSION_NUM >= 0x073D00 + void SetOption(const Bearer& auth); +#endif + void SetOption(const UserAgent& ua); + void SetOption(Payload&& payload); + void SetOption(const Payload& payload); + void SetOption(const LimitRate& limit_rate); + void SetOption(Proxies&& proxies); + void SetOption(const Proxies& proxies); + void SetOption(ProxyAuthentication&& proxy_auth); + void SetOption(const ProxyAuthentication& proxy_auth); + void SetOption(Multipart&& multipart); + void SetOption(const Multipart& multipart); + void SetOption(const Redirect& redirect); + void SetOption(const Cookies& cookies); + void SetOption(Body&& body); + void SetOption(const Body& body); + void SetOption(const ReadCallback& read); + void SetOption(const HeaderCallback& header); + void SetOption(const WriteCallback& write); + void SetOption(const ProgressCallback& progress); + void SetOption(const DebugCallback& debug); + void SetOption(const LowSpeed& low_speed); + void SetOption(const VerifySsl& verify); + void SetOption(const Verbose& verbose); + void SetOption(const UnixSocket& unix_socket); + void SetOption(const SslOptions& options); + void SetOption(const Interface& iface); + void SetOption(const LocalPort& local_port); + void SetOption(const LocalPortRange& local_port_range); + void SetOption(const HttpVersion& version); + void SetOption(const Range& range); + void SetOption(const MultiRange& multi_range); + void SetOption(const ReserveSize& reserve_size); + void SetOption(const AcceptEncoding& accept_encoding); + void SetOption(AcceptEncoding&& accept_encoding); + void SetOption(const Resolve& resolve); + void SetOption(const std::vector& resolves); + + cpr_off_t GetDownloadFileLength(); + /** + * Attempt to preallocate enough memory for specified number of characters in the response string. + * Pass 0 to disable this behavior and let the response string be allocated dynamically on demand. + * + * Example: + * cpr::Session session; + * session.SetUrl(cpr::Url{"http://xxx/file"}); + * session.ResponseStringReserve(1024 * 512); // Reserve space for at least 1024 * 512 characters + * cpr::Response r = session.Get(); + **/ + void ResponseStringReserve(size_t size); + Response Delete(); + Response Download(const WriteCallback& write); + Response Download(std::ofstream& file); + Response Get(); + Response Head(); + Response Options(); + Response Patch(); + Response Post(); + Response Put(); + + AsyncResponse GetAsync(); + AsyncResponse DeleteAsync(); + AsyncResponse DownloadAsync(const WriteCallback& write); + AsyncResponse DownloadAsync(std::ofstream& file); + AsyncResponse HeadAsync(); + AsyncResponse OptionsAsync(); + AsyncResponse PatchAsync(); + AsyncResponse PostAsync(); + AsyncResponse PutAsync(); + + template + auto GetCallback(Then then); + template + auto PostCallback(Then then); + template + auto PutCallback(Then then); + template + auto HeadCallback(Then then); + template + auto DeleteCallback(Then then); + template + auto OptionsCallback(Then then); + template + auto PatchCallback(Then then); + + std::shared_ptr GetCurlHolder(); + std::string GetFullRequestUrl(); + + void PrepareDelete(); + void PrepareGet(); + void PrepareHead(); + void PrepareOptions(); + void PreparePatch(); + void PreparePost(); + void PreparePut(); + void PrepareDownload(const WriteCallback& write); + void PrepareDownload(std::ofstream& file); + Response Complete(CURLcode curl_error); + Response CompleteDownload(CURLcode curl_error); + + void AddInterceptor(const std::shared_ptr& pinterceptor); + + private: + // Interceptors should be able to call the private proceed() function + friend Interceptor; + friend MultiPerform; + + + bool hasBodyOrPayload_{false}; + bool chunkedTransferEncoding_{false}; + std::shared_ptr curl_; + Url url_; + Parameters parameters_; + Proxies proxies_; + ProxyAuthentication proxyAuth_; + Header header_; + AcceptEncoding acceptEncoding_; + /** + * Will be set by the read callback. + * Ensures that the "Transfer-Encoding" is set to "chunked", if not overriden in header_. + **/ + ReadCallback readcb_; + HeaderCallback headercb_; + WriteCallback writecb_; + ProgressCallback progresscb_; + DebugCallback debugcb_; + CancellationCallback cancellationcb_; + + size_t response_string_reserve_size_{0}; + std::string response_string_; + std::string header_string_; + std::queue> interceptors_; + bool isUsedInMultiPerform{false}; + bool isCancellable{false}; + + Response makeDownloadRequest(); + Response makeRequest(); + Response proceed(); + Response intercept(); + void prepareCommon(); + void prepareCommonDownload(); + void SetHeaderInternal(); + std::shared_ptr GetSharedPtrFromThis(); + CURLcode DoEasyPerform(); +}; + +template +auto Session::GetCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Get()); }, std::move(then)); +} + +template +auto Session::PostCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Post()); }, std::move(then)); +} + +template +auto Session::PutCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Put()); }, std::move(then)); +} + +template +auto Session::HeadCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Head()); }, std::move(then)); +} + +template +auto Session::DeleteCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Delete()); }, std::move(then)); +} + +template +auto Session::OptionsCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Options()); }, std::move(then)); +} + +template +auto Session::PatchCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Patch()); }, std::move(then)); +} + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/singleton.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/singleton.h new file mode 100644 index 0000000..e2ea13b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/singleton.h @@ -0,0 +1,47 @@ +#ifndef CPR_SINGLETON_H +#define CPR_SINGLETON_H + +#include + +#ifndef CPR_DISABLE_COPY +#define CPR_DISABLE_COPY(Class) \ + Class(const Class&) = delete; \ + Class& operator=(const Class&) = delete; +#endif + +#ifndef CPR_SINGLETON_DECL +#define CPR_SINGLETON_DECL(Class) \ + public: \ + static Class* GetInstance(); \ + static void ExitInstance(); \ + private: \ + CPR_DISABLE_COPY(Class) \ + static Class* s_pInstance; \ + static std::mutex s_mutex; +#endif + +#ifndef CPR_SINGLETON_IMPL +#define CPR_SINGLETON_IMPL(Class) \ + Class* Class::s_pInstance = nullptr; \ + std::mutex Class::s_mutex; \ + Class* Class::GetInstance() { \ + if (s_pInstance == nullptr) { \ + s_mutex.lock(); \ + if (s_pInstance == nullptr) { \ + s_pInstance = new Class; \ + } \ + s_mutex.unlock(); \ + } \ + return s_pInstance; \ + } \ + void Class::ExitInstance() { \ + s_mutex.lock(); \ + if (s_pInstance) { \ + delete s_pInstance; \ + s_pInstance = nullptr; \ + } \ + s_mutex.unlock(); \ + } +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/ssl_ctx.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/ssl_ctx.h new file mode 100644 index 0000000..d495fb2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/ssl_ctx.h @@ -0,0 +1,26 @@ +#ifndef CPR_SSL_CTX_H +#define CPR_SSL_CTX_H + +#include "cpr/ssl_options.h" +#include + +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION + +namespace cpr { + +/** + * This callback function loads a CA certificate from raw_cert_buf and gets called by libcurl + * just before the initialization of an SSL connection. + * The raw_cert_buf argument is set with the CURLOPT_SSL_CTX_DATA option and has to be a nul + * terminated buffer. + * + * Sources: https://curl.se/libcurl/c/CURLOPT_SSL_CTX_FUNCTION.html + * https://curl.se/libcurl/c/CURLOPT_SSL_CTX_DATA.html + */ +CURLcode sslctx_function_load_ca_cert_from_buffer(CURL* curl, void* sslctx, void* raw_cert_buf); + +} // Namespace cpr + +#endif + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/ssl_options.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/ssl_options.h new file mode 100644 index 0000000..dfd38ad --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/ssl_options.h @@ -0,0 +1,622 @@ +#ifndef CPR_SSLOPTIONS_H +#define CPR_SSLOPTIONS_H + +#include +#include +#include + +#include +#include + +#include "cpr/util.h" +#include + +#define __LIBCURL_VERSION_GTE(major, minor) ((LIBCURL_VERSION_MAJOR > (major)) || ((LIBCURL_VERSION_MAJOR == (major)) && (LIBCURL_VERSION_MINOR >= (minor)))) +#define __LIBCURL_VERSION_LT(major, minor) ((LIBCURL_VERSION_MAJOR < (major)) || ((LIBCURL_VERSION_MAJOR == (major)) && (LIBCURL_VERSION_MINOR < (minor)))) + +#ifndef SUPPORT_ALPN +#define SUPPORT_ALPN __LIBCURL_VERSION_GTE(7, 36) +#endif +#ifndef SUPPORT_NPN +#define SUPPORT_NPN __LIBCURL_VERSION_GTE(7, 36) && __LIBCURL_VERSION_LT(7, 86) +#endif + +#ifndef SUPPORT_SSLv2 +#define SUPPORT_SSLv2 __LIBCURL_VERSION_LT(7, 19) +#endif +#ifndef SUPPORT_SSLv3 +#define SUPPORT_SSLv3 __LIBCURL_VERSION_LT(7, 39) +#endif +#ifndef SUPPORT_TLSv1_0 +#define SUPPORT_TLSv1_0 __LIBCURL_VERSION_GTE(7, 34) +#endif +#ifndef SUPPORT_TLSv1_1 +#define SUPPORT_TLSv1_1 __LIBCURL_VERSION_GTE(7, 34) +#endif +#ifndef SUPPORT_TLSv1_2 +#define SUPPORT_TLSv1_2 __LIBCURL_VERSION_GTE(7, 34) +#endif +#ifndef SUPPORT_TLSv1_3 +#define SUPPORT_TLSv1_3 __LIBCURL_VERSION_GTE(7, 52) +#endif +#ifndef SUPPORT_MAX_TLS_VERSION +#define SUPPORT_MAX_TLS_VERSION __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_MAX_TLSv1_1 +#define SUPPORT_MAX_TLSv1_1 __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_MAX_TLSv1_2 +#define SUPPORT_MAX_TLSv1_2 __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_MAX_TLSv1_3 +#define SUPPORT_MAX_TLSv1_3 __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_TLSv13_CIPHERS +#define SUPPORT_TLSv13_CIPHERS __LIBCURL_VERSION_GTE(7, 61) +#endif +#ifndef SUPPORT_SESSIONID_CACHE +#define SUPPORT_SESSIONID_CACHE __LIBCURL_VERSION_GTE(7, 16) +#endif +#ifndef SUPPORT_SSL_FALSESTART +#define SUPPORT_SSL_FALSESTART __LIBCURL_VERSION_GTE(7, 42) +#endif +#ifndef SUPPORT_SSL_NO_REVOKE +#define SUPPORT_SSL_NO_REVOKE __LIBCURL_VERSION_GTE(7, 44) +#endif +#ifndef SUPPORT_CURLOPT_SSLKEY_BLOB +#define SUPPORT_CURLOPT_SSLKEY_BLOB __LIBCURL_VERSION_GTE(7, 71) +#endif +#ifndef SUPPORT_CURLOPT_SSL_CTX_FUNCTION +#define SUPPORT_CURLOPT_SSL_CTX_FUNCTION __LIBCURL_VERSION_GTE(7, 11) +#endif + +namespace cpr { + +class VerifySsl { + public: + VerifySsl() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifySsl(bool p_verify) : verify(p_verify) {} + + explicit operator bool() const { + return verify; + } + + bool verify = true; +}; + +namespace ssl { + +// set SSL client certificate +class CertFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CertFile(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + virtual ~CertFile() = default; + + const fs::path filename; + + virtual const char* GetCertType() const { + return "PEM"; + } +}; + +using PemCert = CertFile; + +class DerCert : public CertFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + DerCert(fs::path&& p_filename) : CertFile(std::move(p_filename)) {} + + virtual ~DerCert() = default; + + const char* GetCertType() const override { + return "DER"; + } +}; + +// specify private keyfile for TLS and SSL client cert +class KeyFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + KeyFile(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + template + KeyFile(FileType&& p_filename, PassType p_password) : filename(std::forward(p_filename)), password(std::move(p_password)) {} + + virtual ~KeyFile() { + util::secureStringClear(password); + } + + fs::path filename; + std::string password; + + virtual const char* GetKeyType() const { + return "PEM"; + } +}; + +#if SUPPORT_CURLOPT_SSLKEY_BLOB +class KeyBlob { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + KeyBlob(std::string&& p_blob) : blob(std::move(p_blob)) {} + + template + KeyBlob(BlobType&& p_blob, PassType p_password) : blob(std::forward(p_blob)), password(std::move(p_password)) {} + + virtual ~KeyBlob() { + util::secureStringClear(password); + } + + std::string blob; + std::string password; + + virtual const char* GetKeyType() const { + return "PEM"; + } +}; +#endif + +using PemKey = KeyFile; + +class DerKey : public KeyFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + DerKey(fs::path&& p_filename) : KeyFile(std::move(p_filename)) {} + + template + DerKey(FileType&& p_filename, PassType p_password) : KeyFile(std::forward(p_filename), std::move(p_password)) {} + + virtual ~DerKey() = default; + + const char* GetKeyType() const override { + return "DER"; + } +}; + +class PinnedPublicKey { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + PinnedPublicKey(std::string&& p_pinned_public_key) : pinned_public_key(std::move(p_pinned_public_key)) {} + + const std::string pinned_public_key; +}; + +#if SUPPORT_ALPN +// This option enables/disables ALPN in the SSL handshake (if the SSL backend libcurl is built to +// use supports it), which can be used to negotiate http2. +class ALPN { + public: + ALPN() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ALPN(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; +#endif // SUPPORT_ALPN + +#if SUPPORT_NPN +// This option enables/disables NPN in the SSL handshake (if the SSL backend libcurl is built to +// use supports it), which can be used to negotiate http2. +class NPN { + public: + NPN() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + NPN(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; +#endif // SUPPORT_NPN + +// This option determines whether libcurl verifies that the server cert is for the server it is +// known as. +class VerifyHost { + public: + VerifyHost() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifyHost(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; + +// This option determines whether libcurl verifies the authenticity of the peer's certificate. +class VerifyPeer { + public: + VerifyPeer() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifyPeer(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; + +// This option determines whether libcurl verifies the status of the server cert using the +// "Certificate Status Request" TLS extension (aka. OCSP stapling). +class VerifyStatus { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifyStatus(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = false; +}; + +// TLS v1.0 or later +struct TLSv1 {}; +#if SUPPORT_SSLv2 +// SSL v2 (but not SSLv3) +struct SSLv2 {}; +#endif +#if SUPPORT_SSLv3 +// SSL v3 (but not SSLv2) +struct SSLv3 {}; +#endif +#if SUPPORT_TLSv1_0 +// TLS v1.0 or later (Added in 7.34.0) +struct TLSv1_0 {}; +#endif +#if SUPPORT_TLSv1_1 +// TLS v1.1 or later (Added in 7.34.0) +struct TLSv1_1 {}; +#endif +#if SUPPORT_TLSv1_2 +// TLS v1.2 or later (Added in 7.34.0) +struct TLSv1_2 {}; +#endif +#if SUPPORT_TLSv1_3 +// TLS v1.3 or later (Added in 7.52.0) +struct TLSv1_3 {}; +#endif +#if SUPPORT_MAX_TLS_VERSION +// The flag defines the maximum supported TLS version by libcurl, or the default value from the SSL +// library is used. +struct MaxTLSVersion {}; +#endif +#if SUPPORT_MAX_TLSv1_0 +// The flag defines maximum supported TLS version as TLSv1.0. (Added in 7.54.0) +struct MaxTLSv1_0 {}; +#endif +#if SUPPORT_MAX_TLSv1_1 +// The flag defines maximum supported TLS version as TLSv1.1. (Added in 7.54.0) +struct MaxTLSv1_1 {}; +#endif +#if SUPPORT_MAX_TLSv1_2 +// The flag defines maximum supported TLS version as TLSv1.2. (Added in 7.54.0) +struct MaxTLSv1_2 {}; +#endif +#if SUPPORT_MAX_TLSv1_3 +// The flag defines maximum supported TLS version as TLSv1.3. (Added in 7.54.0) +struct MaxTLSv1_3 {}; +#endif + +// path to Certificate Authority (CA) bundle +class CaInfo { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CaInfo(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + fs::path filename; +}; + +// specify directory holding CA certificates +class CaPath { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CaPath(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + fs::path filename; +}; + +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION +class CaBuffer { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CaBuffer(std::string&& p_buffer) : buffer(std::move(p_buffer)) {} + + const std::string buffer; +}; +#endif + +// specify a Certificate Revocation List file +class Crl { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Crl(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + fs::path filename; +}; + +// specify ciphers to use for TLS +class Ciphers { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Ciphers(std::string&& p_ciphers) : ciphers(std::move(p_ciphers)) {} + + std::string ciphers; +}; + +#if SUPPORT_TLSv13_CIPHERS +// specify ciphers suites to use for TLS 1.3 +class TLS13_Ciphers { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + TLS13_Ciphers(std::string&& p_ciphers) : ciphers(std::move(p_ciphers)) {} + + std::string ciphers; +}; +#endif + +#if SUPPORT_SESSIONID_CACHE +// enable/disable use of the SSL session-ID cache +class SessionIdCache { + public: + SessionIdCache() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + SessionIdCache(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; +#endif + +#if SUPPORT_SSL_FALSESTART +class SslFastStart { + public: + SslFastStart() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + SslFastStart(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = false; +}; +#endif + +class NoRevoke { + public: + NoRevoke() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + NoRevoke(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = false; +}; + +} // namespace ssl + +struct SslOptions { + // We don't use fs::path here, as this leads to problems using windows + std::string cert_file; + std::string cert_type; + // We don't use fs::path here, as this leads to problems using windows + std::string key_file; +#if SUPPORT_CURLOPT_SSLKEY_BLOB + std::string key_blob; +#endif + std::string key_type; + std::string key_pass; + std::string pinned_public_key; +#if SUPPORT_ALPN + bool enable_alpn = true; +#endif // SUPPORT_ALPN +#if SUPPORT_NPN + bool enable_npn = true; +#endif // SUPPORT_ALPN + bool verify_host = true; + bool verify_peer = true; + bool verify_status = false; + int ssl_version = CURL_SSLVERSION_DEFAULT; +#if SUPPORT_SSL_NO_REVOKE + bool ssl_no_revoke = false; +#endif +#if SUPPORT_MAX_TLS_VERSION + int max_version = CURL_SSLVERSION_MAX_DEFAULT; +#endif + // We don't use fs::path here, as this leads to problems using windows + std::string ca_info; + // We don't use fs::path here, as this leads to problems using windows + std::string ca_path; +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION + std::string ca_buffer; +#endif + // We don't use fs::path here, as this leads to problems using windows + std::string crl_file; + std::string ciphers; +#if SUPPORT_TLSv13_CIPHERS + std::string tls13_ciphers; +#endif +#if SUPPORT_SESSIONID_CACHE + bool session_id_cache = true; +#endif + + ~SslOptions() noexcept { +#if SUPPORT_CURLOPT_SSLKEY_BLOB + util::secureStringClear(key_blob); +#endif + util::secureStringClear(key_pass); + } + + void SetOption(const ssl::CertFile& opt) { + cert_file = opt.filename.string(); + cert_type = opt.GetCertType(); + } + void SetOption(const ssl::KeyFile& opt) { + key_file = opt.filename.string(); + key_type = opt.GetKeyType(); + key_pass = opt.password; + } +#if SUPPORT_CURLOPT_SSLKEY_BLOB + void SetOption(const ssl::KeyBlob& opt) { + key_blob = opt.blob; + key_type = opt.GetKeyType(); + key_pass = opt.password; + } +#endif + void SetOption(const ssl::PinnedPublicKey& opt) { + pinned_public_key = opt.pinned_public_key; + } + +#if SUPPORT_ALPN + void SetOption(const ssl::ALPN& opt) { + enable_alpn = opt.enabled; + } +#endif // SUPPORT_ALPN +#if SUPPORT_NPN + void SetOption(const ssl::NPN& opt) { + enable_npn = opt.enabled; + } +#endif // SUPPORT_NPN + void SetOption(const ssl::VerifyHost& opt) { + verify_host = opt.enabled; + } + void SetOption(const ssl::VerifyPeer& opt) { + verify_peer = opt.enabled; + } + void SetOption(const ssl::VerifyStatus& opt) { + verify_status = opt.enabled; + } + void SetOption(const ssl::TLSv1& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1; + } +#if SUPPORT_SSL_NO_REVOKE + void SetOption(const ssl::NoRevoke& opt) { + ssl_no_revoke = opt.enabled; + } +#endif +#if SUPPORT_SSLv2 + void SetOption(const ssl::SSLv2& /*opt*/) { + ssl_version = CURL_SSLVERSION_SSLv2; + } +#endif +#if SUPPORT_SSLv3 + void SetOption(const ssl::SSLv3& /*opt*/) { + ssl_version = CURL_SSLVERSION_SSLv3; + } +#endif +#if SUPPORT_TLSv1_0 + void SetOption(const ssl::TLSv1_0& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_0; + } +#endif +#if SUPPORT_TLSv1_1 + void SetOption(const ssl::TLSv1_1& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_1; + } +#endif +#if SUPPORT_TLSv1_2 + void SetOption(const ssl::TLSv1_2& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_2; + } +#endif +#if SUPPORT_TLSv1_3 + void SetOption(const ssl::TLSv1_3& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_3; + } +#endif +#if SUPPORT_MAX_TLS_VERSION + void SetOption(const ssl::MaxTLSVersion& /*opt*/) { + max_version = CURL_SSLVERSION_DEFAULT; + } +#endif +#if SUPPORT_MAX_TLSv1_0 + void SetOption(const ssl::MaxTLSv1_0& opt) { + max_version = CURL_SSLVERSION_MAX_TLSv1_0; + } +#endif +#if SUPPORT_MAX_TLSv1_1 + void SetOption(const ssl::MaxTLSv1_1& /*opt*/) { + max_version = CURL_SSLVERSION_MAX_TLSv1_1; + } +#endif +#if SUPPORT_MAX_TLSv1_2 + void SetOption(const ssl::MaxTLSv1_2& /*opt*/) { + max_version = CURL_SSLVERSION_MAX_TLSv1_2; + } +#endif +#if SUPPORT_MAX_TLSv1_3 + void SetOption(const ssl::MaxTLSv1_3& /*opt*/) { + max_version = CURL_SSLVERSION_MAX_TLSv1_3; + } +#endif + void SetOption(const ssl::CaInfo& opt) { + ca_info = opt.filename.string(); + } + void SetOption(const ssl::CaPath& opt) { + ca_path = opt.filename.string(); + } +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION + void SetOption(const ssl::CaBuffer& opt) { + ca_buffer = opt.buffer; + } +#endif + void SetOption(const ssl::Crl& opt) { + crl_file = opt.filename.string(); + } + void SetOption(const ssl::Ciphers& opt) { + ciphers = opt.ciphers; + } +#if SUPPORT_TLSv13_CIPHERS + void SetOption(const ssl::TLS13_Ciphers& opt) { + tls13_ciphers = opt.ciphers; + } +#endif +#if SUPPORT_SESSIONID_CACHE + void SetOption(const ssl::SessionIdCache& opt) { + session_id_cache = opt.enabled; + } +#endif +}; + +namespace priv { + +template +void set_ssl_option(SslOptions& opts, T&& t) { + opts.SetOption(std::forward(t)); +} + +template +void set_ssl_option(SslOptions& opts, T&& t, Ts&&... ts) { + set_ssl_option(opts, std::forward(t)); + set_ssl_option(opts, std::move(ts)...); +} + +} // namespace priv + +template +SslOptions Ssl(Ts&&... ts) { + SslOptions opts; + priv::set_ssl_option(opts, std::move(ts)...); + return opts; +} + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/status_codes.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/status_codes.h new file mode 100644 index 0000000..6c7acd6 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/status_codes.h @@ -0,0 +1,100 @@ +#ifndef _CPR_STATUS_CODES +#define _CPR_STATUS_CODES +#include +namespace cpr { +namespace status { +// Information responses +constexpr std::int32_t HTTP_CONTINUE = 100; +constexpr std::int32_t HTTP_SWITCHING_PROTOCOL = 101; +constexpr std::int32_t HTTP_PROCESSING = 102; +constexpr std::int32_t HTTP_EARLY_HINTS = 103; +// Successful responses +constexpr std::int32_t HTTP_OK = 200; +constexpr std::int32_t HTTP_CREATED = 201; +constexpr std::int32_t HTTP_ACCEPTED = 202; +constexpr std::int32_t HTTP_NON_AUTHORITATIVE_INFORMATION = 203; +constexpr std::int32_t HTTP_NO_CONTENT = 204; +constexpr std::int32_t HTTP_RESET_CONTENT = 205; +constexpr std::int32_t HTTP_PARTIAL_CONTENT = 206; +constexpr std::int32_t HTTP_MULTI_STATUS = 207; +constexpr std::int32_t HTTP_ALREADY_REPORTED = 208; +constexpr std::int32_t HTTP_IM_USED = 226; +// Redirection messages +constexpr std::int32_t HTTP_MULTIPLE_CHOICE = 300; +constexpr std::int32_t HTTP_MOVED_PERMANENTLY = 301; +constexpr std::int32_t HTTP_FOUND = 302; +constexpr std::int32_t HTTP_SEE_OTHER = 303; +constexpr std::int32_t HTTP_NOT_MODIFIED = 304; +constexpr std::int32_t HTTP_USE_PROXY = 305; +constexpr std::int32_t HTTP_UNUSED = 306; +constexpr std::int32_t HTTP_TEMPORARY_REDIRECT = 307; +constexpr std::int32_t HTTP_PERMANENT_REDIRECT = 308; +// Client error responses +constexpr std::int32_t HTTP_BAD_REQUEST = 400; +constexpr std::int32_t HTTP_UNAUTHORIZED = 401; +constexpr std::int32_t HTTP_PAYMENT_REQUIRED = 402; +constexpr std::int32_t HTTP_FORBIDDEN = 403; +constexpr std::int32_t HTTP_NOT_FOUND = 404; +constexpr std::int32_t HTTP_METHOD_NOT_ALLOWED = 405; +constexpr std::int32_t HTTP_NOT_ACCEPTABLE = 406; +constexpr std::int32_t HTTP_PROXY_AUTHENTICATION_REQUIRED = 407; +constexpr std::int32_t HTTP_REQUEST_TIMEOUT = 408; +constexpr std::int32_t HTTP_CONFLICT = 409; +constexpr std::int32_t HTTP_GONE = 410; +constexpr std::int32_t HTTP_LENGTH_REQUIRED = 411; +constexpr std::int32_t HTTP_PRECONDITION_FAILED = 412; +constexpr std::int32_t HTTP_PAYLOAD_TOO_LARGE = 413; +constexpr std::int32_t HTTP_URI_TOO_LONG = 414; +constexpr std::int32_t HTTP_UNSUPPORTED_MEDIA_TYPE = 415; +constexpr std::int32_t HTTP_REQUESTED_RANGE_NOT_SATISFIABLE = 416; +constexpr std::int32_t HTTP_EXPECTATION_FAILED = 417; +constexpr std::int32_t HTTP_IM_A_TEAPOT = 418; +constexpr std::int32_t HTTP_MISDIRECTED_REQUEST = 421; +constexpr std::int32_t HTTP_UNPROCESSABLE_ENTITY = 422; +constexpr std::int32_t HTTP_LOCKED = 423; +constexpr std::int32_t HTTP_FAILED_DEPENDENCY = 424; +constexpr std::int32_t HTTP_TOO_EARLY = 425; +constexpr std::int32_t HTTP_UPGRADE_REQUIRED = 426; +constexpr std::int32_t HTTP_PRECONDITION_REQUIRED = 428; +constexpr std::int32_t HTTP_TOO_MANY_REQUESTS = 429; +constexpr std::int32_t HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431; +constexpr std::int32_t HTTP_UNAVAILABLE_FOR_LEGAL_REASONS = 451; +// Server response errors +constexpr std::int32_t HTTP_INTERNAL_SERVER_ERROR = 500; +constexpr std::int32_t HTTP_NOT_IMPLEMENTED = 501; +constexpr std::int32_t HTTP_BAD_GATEWAY = 502; +constexpr std::int32_t HTTP_SERVICE_UNAVAILABLE = 503; +constexpr std::int32_t HTTP_GATEWAY_TIMEOUT = 504; +constexpr std::int32_t HTTP_HTTP_VERSION_NOT_SUPPORTED = 505; +constexpr std::int32_t HTTP_VARIANT_ALSO_NEGOTIATES = 506; +constexpr std::int32_t HTTP_INSUFFICIENT_STORAGE = 507; +constexpr std::int32_t HTTP_LOOP_DETECTED = 508; +constexpr std::int32_t HTTP_NOT_EXTENDED = 510; +constexpr std::int32_t HTTP_NETWORK_AUTHENTICATION_REQUIRED = 511; + +constexpr std::int32_t INFO_CODE_OFFSET = 100; +constexpr std::int32_t SUCCESS_CODE_OFFSET = 200; +constexpr std::int32_t REDIRECT_CODE_OFFSET = 300; +constexpr std::int32_t CLIENT_ERROR_CODE_OFFSET = 400; +constexpr std::int32_t SERVER_ERROR_CODE_OFFSET = 500; +constexpr std::int32_t MISC_CODE_OFFSET = 600; + +constexpr bool is_informational(const std::int32_t code) { + return (code >= INFO_CODE_OFFSET && code < SUCCESS_CODE_OFFSET); +} +constexpr bool is_success(const std::int32_t code) { + return (code >= SUCCESS_CODE_OFFSET && code < REDIRECT_CODE_OFFSET); +} +constexpr bool is_redirect(const std::int32_t code) { + return (code >= REDIRECT_CODE_OFFSET && code < CLIENT_ERROR_CODE_OFFSET); +} +constexpr bool is_client_error(const std::int32_t code) { + return (code >= CLIENT_ERROR_CODE_OFFSET && code < SERVER_ERROR_CODE_OFFSET); +} +constexpr bool is_server_error(const std::int32_t code) { + return (code >= SERVER_ERROR_CODE_OFFSET && code < MISC_CODE_OFFSET); +} + +} // namespace status +} // namespace cpr +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/threadpool.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/threadpool.h new file mode 100644 index 0000000..bb7e7f2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/threadpool.h @@ -0,0 +1,122 @@ +#ifndef CPR_THREAD_POOL_H +#define CPR_THREAD_POOL_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define CPR_DEFAULT_THREAD_POOL_MAX_THREAD_NUM std::thread::hardware_concurrency() + +constexpr size_t CPR_DEFAULT_THREAD_POOL_MIN_THREAD_NUM = 1; +constexpr std::chrono::milliseconds CPR_DEFAULT_THREAD_POOL_MAX_IDLE_TIME{60000}; + +namespace cpr { + +class ThreadPool { + public: + using Task = std::function; + + explicit ThreadPool(size_t min_threads = CPR_DEFAULT_THREAD_POOL_MIN_THREAD_NUM, size_t max_threads = CPR_DEFAULT_THREAD_POOL_MAX_THREAD_NUM, std::chrono::milliseconds max_idle_ms = CPR_DEFAULT_THREAD_POOL_MAX_IDLE_TIME); + + virtual ~ThreadPool(); + + void SetMinThreadNum(size_t min_threads) { + min_thread_num = min_threads; + } + void SetMaxThreadNum(size_t max_threads) { + max_thread_num = max_threads; + } + void SetMaxIdleTime(std::chrono::milliseconds ms) { + max_idle_time = ms; + } + size_t GetCurrentThreadNum() { + return cur_thread_num; + } + size_t GetIdleThreadNum() { + return idle_thread_num; + } + bool IsStarted() { + return status != STOP; + } + bool IsStopped() { + return status == STOP; + } + + int Start(size_t start_threads = 0); + int Stop(); + int Pause(); + int Resume(); + int Wait(); + + /** + * Return a future, calling future.get() will wait task done and return RetType. + * Submit(fn, args...) + * Submit(std::bind(&Class::mem_fn, &obj)) + * Submit(std::mem_fn(&Class::mem_fn, &obj)) + **/ + template + auto Submit(Fn&& fn, Args&&... args) { + if (status == STOP) { + Start(); + } + if (idle_thread_num <= 0 && cur_thread_num < max_thread_num) { + CreateThread(); + } + using RetType = decltype(fn(args...)); + auto task = std::make_shared >(std::bind(std::forward(fn), std::forward(args)...)); + std::future future = task->get_future(); + { + std::lock_guard locker(task_mutex); + tasks.emplace([task] { (*task)(); }); + } + + task_cond.notify_one(); + return future; + } + + private: + bool CreateThread(); + void AddThread(std::thread* thread); + void DelThread(std::thread::id id); + + public: + size_t min_thread_num; + size_t max_thread_num; + std::chrono::milliseconds max_idle_time; + + private: + enum Status { + STOP, + RUNNING, + PAUSE, + }; + + struct ThreadData { + std::shared_ptr thread; + std::thread::id id; + Status status; + time_t start_time; + time_t stop_time; + }; + + std::atomic status; + std::atomic cur_thread_num; + std::atomic idle_thread_num; + std::list threads; + std::mutex thread_mutex; + std::queue tasks; + std::mutex task_mutex; + std::condition_variable task_cond; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/timeout.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/timeout.h new file mode 100644 index 0000000..83b3e68 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/timeout.h @@ -0,0 +1,27 @@ +#ifndef CPR_TIMEOUT_H +#define CPR_TIMEOUT_H + +#include +#include + +namespace cpr { + +class Timeout { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Timeout(const std::chrono::milliseconds& duration) : ms{duration} {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Timeout(const std::int32_t& milliseconds) : Timeout{std::chrono::milliseconds(milliseconds)} {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Timeout(const std::chrono::seconds& duration) : ms{std::chrono::milliseconds(duration).count()} {} + + // No way around since curl uses a long here. + // NOLINTNEXTLINE(google-runtime-int) + long Milliseconds() const; + + std::chrono::milliseconds ms; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/unix_socket.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/unix_socket.h new file mode 100644 index 0000000..152caf0 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/unix_socket.h @@ -0,0 +1,21 @@ +#ifndef CPR_UNIX_SOCKET_H +#define CPR_UNIX_SOCKET_H + +#include + +namespace cpr { + +class UnixSocket { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UnixSocket(std::string unix_socket) : unix_socket_(std::move(unix_socket)) {} + + const char* GetUnixSocketString() const noexcept; + + private: + const std::string unix_socket_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/user_agent.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/user_agent.h new file mode 100644 index 0000000..a3cc129 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/user_agent.h @@ -0,0 +1,31 @@ +#ifndef CPR_USERAGENT_H +#define CPR_USERAGENT_H + +#include +#include + +#include "cpr/cprtypes.h" + +namespace cpr { +class UserAgent : public StringHolder { + public: + UserAgent() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UserAgent(std::string useragent) : StringHolder(std::move(useragent)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UserAgent(std::string_view useragent) : StringHolder(useragent) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UserAgent(const char* useragent) : StringHolder(useragent) {} + UserAgent(const char* str, size_t len) : StringHolder(str, len) {} + UserAgent(const std::initializer_list args) : StringHolder(args) {} + UserAgent(const UserAgent& other) = default; + UserAgent(UserAgent&& old) noexcept = default; + ~UserAgent() override = default; + + UserAgent& operator=(UserAgent&& old) noexcept = default; + UserAgent& operator=(const UserAgent& other) = default; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/util.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/util.h new file mode 100644 index 0000000..d851e23 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/util.h @@ -0,0 +1,45 @@ +#ifndef CPR_UTIL_H +#define CPR_UTIL_H + +#include +#include +#include + +#include "cpr/callback.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/curlholder.h" + +namespace cpr::util { + +Header parseHeader(const std::string& headers, std::string* status_line = nullptr, std::string* reason = nullptr); +Cookies parseCookies(curl_slist* raw_cookies); +size_t readUserFunction(char* ptr, size_t size, size_t nitems, const ReadCallback* read); +size_t headerUserFunction(char* ptr, size_t size, size_t nmemb, const HeaderCallback* header); +size_t writeFunction(char* ptr, size_t size, size_t nmemb, std::string* data); +size_t writeFileFunction(char* ptr, size_t size, size_t nmemb, std::ofstream* file); +size_t writeUserFunction(char* ptr, size_t size, size_t nmemb, const WriteCallback* write); + +template +int progressUserFunction(const T* progress, cpr_pf_arg_t dltotal, cpr_pf_arg_t dlnow, cpr_pf_arg_t ultotal, cpr_pf_arg_t ulnow) { + const int cancel_retval{1}; + static_assert(cancel_retval != CURL_PROGRESSFUNC_CONTINUE); + return (*progress)(dltotal, dlnow, ultotal, ulnow) ? 0 : cancel_retval; +} +int debugUserFunction(CURL* handle, curl_infotype type, char* data, size_t size, const DebugCallback* debug); +std::vector split(const std::string& to_split, char delimiter); +std::string urlEncode(const std::string& s); +std::string urlDecode(const std::string& s); + +/** + * Override the content of the provided string to hide sensitive data. The + * string content after invocation is undefined. The string size is reset to zero. + * impl. based on: + * https://github.com/ojeda/secure_clear/blob/master/example-implementation/secure_clear.h + **/ +void secureStringClear(std::string& s); +bool isTrue(const std::string& s); + +} // namespace cpr::util + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/verbose.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/verbose.h new file mode 100644 index 0000000..2bf0df8 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/cpr/verbose.h @@ -0,0 +1,18 @@ +#ifndef CPR_VERBOSE_H_ +#define CPR_VERBOSE_H_ + +namespace cpr { + +class Verbose { + public: + Verbose() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Verbose(const bool p_verbose) : verbose{p_verbose} {} + + bool verbose = true; +}; + +} // namespace cpr + + +#endif /* CPR_VERBOSE_H_ */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/curl.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/curl.h new file mode 100644 index 0000000..bf71d82 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/curl.h @@ -0,0 +1,3241 @@ +#ifndef CURLINC_CURL_H +#define CURLINC_CURL_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* + * If you have libcurl problems, all docs and details are found here: + * https://curl.se/libcurl/ + */ + +#ifdef CURL_NO_OLDIES +#define CURL_STRICTER +#endif + +/* Compile-time deprecation macros. */ +#if defined(__GNUC__) && \ + ((__GNUC__ > 12) || ((__GNUC__ == 12) && (__GNUC_MINOR__ >= 1 ))) && \ + !defined(__INTEL_COMPILER) && \ + !defined(CURL_DISABLE_DEPRECATION) && !defined(BUILDING_LIBCURL) +#define CURL_DEPRECATED(version, message) \ + __attribute__((deprecated("since " # version ". " message))) +#define CURL_IGNORE_DEPRECATION(statements) \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ + statements \ + _Pragma("GCC diagnostic pop") +#else +#define CURL_DEPRECATED(version, message) +#define CURL_IGNORE_DEPRECATION(statements) statements +#endif + +#include "curlver.h" /* libcurl version defines */ +#include "system.h" /* determine things run-time */ + +/* + * Define CURL_WIN32 when build target is Win32 API + */ + +#if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && \ + !defined(__SYMBIAN32__) +#define CURL_WIN32 +#endif + +#include +#include + +#if (defined(__FreeBSD__) && (__FreeBSD__ >= 2)) || defined(__MidnightBSD__) +/* Needed for __FreeBSD_version or __MidnightBSD_version symbol definition */ +#include +#endif + +/* The include stuff here below is mainly for time_t! */ +#include +#include + +#if defined(CURL_WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__) +#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || \ + defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H)) +/* The check above prevents the winsock2 inclusion if winsock.h already was + included, since they can't co-exist without problems */ +#include +#include +#endif +#endif + +/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish + libc5-based Linux systems. Only include it on systems that are known to + require it! */ +#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \ + defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \ + defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \ + defined(__CYGWIN__) || defined(AMIGA) || defined(__NuttX__) || \ + (defined(__FreeBSD_version) && (__FreeBSD_version < 800000)) || \ + (defined(__MidnightBSD_version) && (__MidnightBSD_version < 100000)) || \ + defined(__sun__) || defined(__serenity__) || defined(__vxworks__) +#include +#endif + +#if !defined(CURL_WIN32) && !defined(_WIN32_WCE) +#include +#endif + +#if !defined(CURL_WIN32) +#include +#endif + +/* Compatibility for non-Clang compilers */ +#ifndef __has_declspec_attribute +# define __has_declspec_attribute(x) 0 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) +typedef struct Curl_easy CURL; +typedef struct Curl_share CURLSH; +#else +typedef void CURL; +typedef void CURLSH; +#endif + +/* + * libcurl external API function linkage decorations. + */ + +#ifdef CURL_STATICLIB +# define CURL_EXTERN +#elif defined(CURL_WIN32) || defined(__SYMBIAN32__) || \ + (__has_declspec_attribute(dllexport) && \ + __has_declspec_attribute(dllimport)) +# if defined(BUILDING_LIBCURL) +# define CURL_EXTERN __declspec(dllexport) +# else +# define CURL_EXTERN __declspec(dllimport) +# endif +#elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS) +# define CURL_EXTERN CURL_EXTERN_SYMBOL +#else +# define CURL_EXTERN +#endif + +#ifndef curl_socket_typedef +/* socket typedef */ +#if defined(CURL_WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H) +typedef SOCKET curl_socket_t; +#define CURL_SOCKET_BAD INVALID_SOCKET +#else +typedef int curl_socket_t; +#define CURL_SOCKET_BAD -1 +#endif +#define curl_socket_typedef +#endif /* curl_socket_typedef */ + +/* enum for the different supported SSL backends */ +typedef enum { + CURLSSLBACKEND_NONE = 0, + CURLSSLBACKEND_OPENSSL = 1, + CURLSSLBACKEND_GNUTLS = 2, + CURLSSLBACKEND_NSS CURL_DEPRECATED(8.3.0, "") = 3, + CURLSSLBACKEND_OBSOLETE4 = 4, /* Was QSOSSL. */ + CURLSSLBACKEND_GSKIT CURL_DEPRECATED(8.3.0, "") = 5, + CURLSSLBACKEND_POLARSSL CURL_DEPRECATED(7.69.0, "") = 6, + CURLSSLBACKEND_WOLFSSL = 7, + CURLSSLBACKEND_SCHANNEL = 8, + CURLSSLBACKEND_SECURETRANSPORT = 9, + CURLSSLBACKEND_AXTLS CURL_DEPRECATED(7.61.0, "") = 10, + CURLSSLBACKEND_MBEDTLS = 11, + CURLSSLBACKEND_MESALINK CURL_DEPRECATED(7.82.0, "") = 12, + CURLSSLBACKEND_BEARSSL = 13, + CURLSSLBACKEND_RUSTLS = 14 +} curl_sslbackend; + +/* aliases for library clones and renames */ +#define CURLSSLBACKEND_AWSLC CURLSSLBACKEND_OPENSSL +#define CURLSSLBACKEND_BORINGSSL CURLSSLBACKEND_OPENSSL +#define CURLSSLBACKEND_LIBRESSL CURLSSLBACKEND_OPENSSL + +/* deprecated names: */ +#define CURLSSLBACKEND_CYASSL CURLSSLBACKEND_WOLFSSL +#define CURLSSLBACKEND_DARWINSSL CURLSSLBACKEND_SECURETRANSPORT + +struct curl_httppost { + struct curl_httppost *next; /* next entry in the list */ + char *name; /* pointer to allocated name */ + long namelength; /* length of name length */ + char *contents; /* pointer to allocated data contents */ + long contentslength; /* length of contents field, see also + CURL_HTTPPOST_LARGE */ + char *buffer; /* pointer to allocated buffer contents */ + long bufferlength; /* length of buffer field */ + char *contenttype; /* Content-Type */ + struct curl_slist *contentheader; /* list of extra headers for this form */ + struct curl_httppost *more; /* if one field name has more than one + file, this link should link to following + files */ + long flags; /* as defined below */ + +/* specified content is a file name */ +#define CURL_HTTPPOST_FILENAME (1<<0) +/* specified content is a file name */ +#define CURL_HTTPPOST_READFILE (1<<1) +/* name is only stored pointer do not free in formfree */ +#define CURL_HTTPPOST_PTRNAME (1<<2) +/* contents is only stored pointer do not free in formfree */ +#define CURL_HTTPPOST_PTRCONTENTS (1<<3) +/* upload file from buffer */ +#define CURL_HTTPPOST_BUFFER (1<<4) +/* upload file from pointer contents */ +#define CURL_HTTPPOST_PTRBUFFER (1<<5) +/* upload file contents by using the regular read callback to get the data and + pass the given pointer as custom pointer */ +#define CURL_HTTPPOST_CALLBACK (1<<6) +/* use size in 'contentlen', added in 7.46.0 */ +#define CURL_HTTPPOST_LARGE (1<<7) + + char *showfilename; /* The file name to show. If not set, the + actual file name will be used (if this + is a file part) */ + void *userp; /* custom pointer used for + HTTPPOST_CALLBACK posts */ + curl_off_t contentlen; /* alternative length of contents + field. Used if CURL_HTTPPOST_LARGE is + set. Added in 7.46.0 */ +}; + + +/* This is a return code for the progress callback that, when returned, will + signal libcurl to continue executing the default progress function */ +#define CURL_PROGRESSFUNC_CONTINUE 0x10000001 + +/* This is the CURLOPT_PROGRESSFUNCTION callback prototype. It is now + considered deprecated but was the only choice up until 7.31.0 */ +typedef int (*curl_progress_callback)(void *clientp, + double dltotal, + double dlnow, + double ultotal, + double ulnow); + +/* This is the CURLOPT_XFERINFOFUNCTION callback prototype. It was introduced + in 7.32.0, avoids the use of floating point numbers and provides more + detailed information. */ +typedef int (*curl_xferinfo_callback)(void *clientp, + curl_off_t dltotal, + curl_off_t dlnow, + curl_off_t ultotal, + curl_off_t ulnow); + +#ifndef CURL_MAX_READ_SIZE + /* The maximum receive buffer size configurable via CURLOPT_BUFFERSIZE. */ +#define CURL_MAX_READ_SIZE (10*1024*1024) +#endif + +#ifndef CURL_MAX_WRITE_SIZE + /* Tests have proven that 20K is a very bad buffer size for uploads on + Windows, while 16K for some odd reason performed a lot better. + We do the ifndef check to allow this value to easier be changed at build + time for those who feel adventurous. The practical minimum is about + 400 bytes since libcurl uses a buffer of this size as a scratch area + (unrelated to network send operations). */ +#define CURL_MAX_WRITE_SIZE 16384 +#endif + +#ifndef CURL_MAX_HTTP_HEADER +/* The only reason to have a max limit for this is to avoid the risk of a bad + server feeding libcurl with a never-ending header that will cause reallocs + infinitely */ +#define CURL_MAX_HTTP_HEADER (100*1024) +#endif + +/* This is a magic return code for the write callback that, when returned, + will signal libcurl to pause receiving on the current transfer. */ +#define CURL_WRITEFUNC_PAUSE 0x10000001 + +/* This is a magic return code for the write callback that, when returned, + will signal an error from the callback. */ +#define CURL_WRITEFUNC_ERROR 0xFFFFFFFF + +typedef size_t (*curl_write_callback)(char *buffer, + size_t size, + size_t nitems, + void *outstream); + +/* This callback will be called when a new resolver request is made */ +typedef int (*curl_resolver_start_callback)(void *resolver_state, + void *reserved, void *userdata); + +/* enumeration of file types */ +typedef enum { + CURLFILETYPE_FILE = 0, + CURLFILETYPE_DIRECTORY, + CURLFILETYPE_SYMLINK, + CURLFILETYPE_DEVICE_BLOCK, + CURLFILETYPE_DEVICE_CHAR, + CURLFILETYPE_NAMEDPIPE, + CURLFILETYPE_SOCKET, + CURLFILETYPE_DOOR, /* is possible only on Sun Solaris now */ + + CURLFILETYPE_UNKNOWN /* should never occur */ +} curlfiletype; + +#define CURLFINFOFLAG_KNOWN_FILENAME (1<<0) +#define CURLFINFOFLAG_KNOWN_FILETYPE (1<<1) +#define CURLFINFOFLAG_KNOWN_TIME (1<<2) +#define CURLFINFOFLAG_KNOWN_PERM (1<<3) +#define CURLFINFOFLAG_KNOWN_UID (1<<4) +#define CURLFINFOFLAG_KNOWN_GID (1<<5) +#define CURLFINFOFLAG_KNOWN_SIZE (1<<6) +#define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1<<7) + +/* Information about a single file, used when doing FTP wildcard matching */ +struct curl_fileinfo { + char *filename; + curlfiletype filetype; + time_t time; /* always zero! */ + unsigned int perm; + int uid; + int gid; + curl_off_t size; + long int hardlinks; + + struct { + /* If some of these fields is not NULL, it is a pointer to b_data. */ + char *time; + char *perm; + char *user; + char *group; + char *target; /* pointer to the target filename of a symlink */ + } strings; + + unsigned int flags; + + /* These are libcurl private struct fields. Previously used by libcurl, so + they must never be interfered with. */ + char *b_data; + size_t b_size; + size_t b_used; +}; + +/* return codes for CURLOPT_CHUNK_BGN_FUNCTION */ +#define CURL_CHUNK_BGN_FUNC_OK 0 +#define CURL_CHUNK_BGN_FUNC_FAIL 1 /* tell the lib to end the task */ +#define CURL_CHUNK_BGN_FUNC_SKIP 2 /* skip this chunk over */ + +/* if splitting of data transfer is enabled, this callback is called before + download of an individual chunk started. Note that parameter "remains" works + only for FTP wildcard downloading (for now), otherwise is not used */ +typedef long (*curl_chunk_bgn_callback)(const void *transfer_info, + void *ptr, + int remains); + +/* return codes for CURLOPT_CHUNK_END_FUNCTION */ +#define CURL_CHUNK_END_FUNC_OK 0 +#define CURL_CHUNK_END_FUNC_FAIL 1 /* tell the lib to end the task */ + +/* If splitting of data transfer is enabled this callback is called after + download of an individual chunk finished. + Note! After this callback was set then it have to be called FOR ALL chunks. + Even if downloading of this chunk was skipped in CHUNK_BGN_FUNC. + This is the reason why we don't need "transfer_info" parameter in this + callback and we are not interested in "remains" parameter too. */ +typedef long (*curl_chunk_end_callback)(void *ptr); + +/* return codes for FNMATCHFUNCTION */ +#define CURL_FNMATCHFUNC_MATCH 0 /* string corresponds to the pattern */ +#define CURL_FNMATCHFUNC_NOMATCH 1 /* pattern doesn't match the string */ +#define CURL_FNMATCHFUNC_FAIL 2 /* an error occurred */ + +/* callback type for wildcard downloading pattern matching. If the + string matches the pattern, return CURL_FNMATCHFUNC_MATCH value, etc. */ +typedef int (*curl_fnmatch_callback)(void *ptr, + const char *pattern, + const char *string); + +/* These are the return codes for the seek callbacks */ +#define CURL_SEEKFUNC_OK 0 +#define CURL_SEEKFUNC_FAIL 1 /* fail the entire transfer */ +#define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so + libcurl might try other means instead */ +typedef int (*curl_seek_callback)(void *instream, + curl_off_t offset, + int origin); /* 'whence' */ + +/* This is a return code for the read callback that, when returned, will + signal libcurl to immediately abort the current transfer. */ +#define CURL_READFUNC_ABORT 0x10000000 +/* This is a return code for the read callback that, when returned, will + signal libcurl to pause sending data on the current transfer. */ +#define CURL_READFUNC_PAUSE 0x10000001 + +/* Return code for when the trailing headers' callback has terminated + without any errors */ +#define CURL_TRAILERFUNC_OK 0 +/* Return code for when was an error in the trailing header's list and we + want to abort the request */ +#define CURL_TRAILERFUNC_ABORT 1 + +typedef size_t (*curl_read_callback)(char *buffer, + size_t size, + size_t nitems, + void *instream); + +typedef int (*curl_trailer_callback)(struct curl_slist **list, + void *userdata); + +typedef enum { + CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */ + CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */ + CURLSOCKTYPE_LAST /* never use */ +} curlsocktype; + +/* The return code from the sockopt_callback can signal information back + to libcurl: */ +#define CURL_SOCKOPT_OK 0 +#define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return + CURLE_ABORTED_BY_CALLBACK */ +#define CURL_SOCKOPT_ALREADY_CONNECTED 2 + +typedef int (*curl_sockopt_callback)(void *clientp, + curl_socket_t curlfd, + curlsocktype purpose); + +struct curl_sockaddr { + int family; + int socktype; + int protocol; + unsigned int addrlen; /* addrlen was a socklen_t type before 7.18.0 but it + turned really ugly and painful on the systems that + lack this type */ + struct sockaddr addr; +}; + +typedef curl_socket_t +(*curl_opensocket_callback)(void *clientp, + curlsocktype purpose, + struct curl_sockaddr *address); + +typedef int +(*curl_closesocket_callback)(void *clientp, curl_socket_t item); + +typedef enum { + CURLIOE_OK, /* I/O operation successful */ + CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ + CURLIOE_FAILRESTART, /* failed to restart the read */ + CURLIOE_LAST /* never use */ +} curlioerr; + +typedef enum { + CURLIOCMD_NOP, /* no operation */ + CURLIOCMD_RESTARTREAD, /* restart the read stream from start */ + CURLIOCMD_LAST /* never use */ +} curliocmd; + +typedef curlioerr (*curl_ioctl_callback)(CURL *handle, + int cmd, + void *clientp); + +#ifndef CURL_DID_MEMORY_FUNC_TYPEDEFS +/* + * The following typedef's are signatures of malloc, free, realloc, strdup and + * calloc respectively. Function pointers of these types can be passed to the + * curl_global_init_mem() function to set user defined memory management + * callback routines. + */ +typedef void *(*curl_malloc_callback)(size_t size); +typedef void (*curl_free_callback)(void *ptr); +typedef void *(*curl_realloc_callback)(void *ptr, size_t size); +typedef char *(*curl_strdup_callback)(const char *str); +typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size); + +#define CURL_DID_MEMORY_FUNC_TYPEDEFS +#endif + +/* the kind of data that is passed to information_callback */ +typedef enum { + CURLINFO_TEXT = 0, + CURLINFO_HEADER_IN, /* 1 */ + CURLINFO_HEADER_OUT, /* 2 */ + CURLINFO_DATA_IN, /* 3 */ + CURLINFO_DATA_OUT, /* 4 */ + CURLINFO_SSL_DATA_IN, /* 5 */ + CURLINFO_SSL_DATA_OUT, /* 6 */ + CURLINFO_END +} curl_infotype; + +typedef int (*curl_debug_callback) + (CURL *handle, /* the handle/transfer this concerns */ + curl_infotype type, /* what kind of data */ + char *data, /* points to the data */ + size_t size, /* size of the data pointed to */ + void *userptr); /* whatever the user please */ + +/* This is the CURLOPT_PREREQFUNCTION callback prototype. */ +typedef int (*curl_prereq_callback)(void *clientp, + char *conn_primary_ip, + char *conn_local_ip, + int conn_primary_port, + int conn_local_port); + +/* Return code for when the pre-request callback has terminated without + any errors */ +#define CURL_PREREQFUNC_OK 0 +/* Return code for when the pre-request callback wants to abort the + request */ +#define CURL_PREREQFUNC_ABORT 1 + +/* All possible error codes from all sorts of curl functions. Future versions + may return other values, stay prepared. + + Always add new return codes last. Never *EVER* remove any. The return + codes must remain the same! + */ + +typedef enum { + CURLE_OK = 0, + CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ + CURLE_FAILED_INIT, /* 2 */ + CURLE_URL_MALFORMAT, /* 3 */ + CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for + 7.17.0, reused in April 2011 for 7.21.5] */ + CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ + CURLE_COULDNT_RESOLVE_HOST, /* 6 */ + CURLE_COULDNT_CONNECT, /* 7 */ + CURLE_WEIRD_SERVER_REPLY, /* 8 */ + CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server + due to lack of access - when login fails + this is not returned. */ + CURLE_FTP_ACCEPT_FAILED, /* 10 - [was obsoleted in April 2006 for + 7.15.4, reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ + CURLE_FTP_ACCEPT_TIMEOUT, /* 12 - timeout occurred accepting server + [was obsoleted in August 2007 for 7.17.0, + reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ + CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ + CURLE_FTP_CANT_GET_HOST, /* 15 */ + CURLE_HTTP2, /* 16 - A problem in the http2 framing layer. + [was obsoleted in August 2007 for 7.17.0, + reused in July 2014 for 7.38.0] */ + CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ + CURLE_PARTIAL_FILE, /* 18 */ + CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ + CURLE_OBSOLETE20, /* 20 - NOT USED */ + CURLE_QUOTE_ERROR, /* 21 - quote command failure */ + CURLE_HTTP_RETURNED_ERROR, /* 22 */ + CURLE_WRITE_ERROR, /* 23 */ + CURLE_OBSOLETE24, /* 24 - NOT USED */ + CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ + CURLE_READ_ERROR, /* 26 - couldn't open/read from file */ + CURLE_OUT_OF_MEMORY, /* 27 */ + CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ + CURLE_OBSOLETE29, /* 29 - NOT USED */ + CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ + CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ + CURLE_OBSOLETE32, /* 32 - NOT USED */ + CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */ + CURLE_HTTP_POST_ERROR, /* 34 */ + CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ + CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */ + CURLE_FILE_COULDNT_READ_FILE, /* 37 */ + CURLE_LDAP_CANNOT_BIND, /* 38 */ + CURLE_LDAP_SEARCH_FAILED, /* 39 */ + CURLE_OBSOLETE40, /* 40 - NOT USED */ + CURLE_FUNCTION_NOT_FOUND, /* 41 - NOT USED starting with 7.53.0 */ + CURLE_ABORTED_BY_CALLBACK, /* 42 */ + CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ + CURLE_OBSOLETE44, /* 44 - NOT USED */ + CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ + CURLE_OBSOLETE46, /* 46 - NOT USED */ + CURLE_TOO_MANY_REDIRECTS, /* 47 - catch endless re-direct loops */ + CURLE_UNKNOWN_OPTION, /* 48 - User specified an unknown option */ + CURLE_SETOPT_OPTION_SYNTAX, /* 49 - Malformed setopt option */ + CURLE_OBSOLETE50, /* 50 - NOT USED */ + CURLE_OBSOLETE51, /* 51 - NOT USED */ + CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ + CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ + CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as + default */ + CURLE_SEND_ERROR, /* 55 - failed sending network data */ + CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ + CURLE_OBSOLETE57, /* 57 - NOT IN USE */ + CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ + CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */ + CURLE_PEER_FAILED_VERIFICATION, /* 60 - peer's certificate or fingerprint + wasn't verified fine */ + CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */ + CURLE_OBSOLETE62, /* 62 - NOT IN USE since 7.82.0 */ + CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ + CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ + CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind + that failed */ + CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ + CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not + accepted and we failed to login */ + CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ + CURLE_TFTP_PERM, /* 69 - permission problem on server */ + CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ + CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ + CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ + CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ + CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ + CURLE_OBSOLETE75, /* 75 - NOT IN USE since 7.82.0 */ + CURLE_OBSOLETE76, /* 76 - NOT IN USE since 7.82.0 */ + CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing + or wrong format */ + CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ + CURLE_SSH, /* 79 - error from the SSH layer, somewhat + generic so the error message will be of + interest when this has happened */ + + CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL + connection */ + CURLE_AGAIN, /* 81 - socket is not ready for send/recv, + wait till it's ready and try again (Added + in 7.18.2) */ + CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or + wrong format (Added in 7.19.0) */ + CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in + 7.19.0) */ + CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */ + CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */ + CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Ids */ + CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */ + CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */ + CURLE_NO_CONNECTION_AVAILABLE, /* 89 - No connection available, the + session will be queued */ + CURLE_SSL_PINNEDPUBKEYNOTMATCH, /* 90 - specified pinned public key did not + match */ + CURLE_SSL_INVALIDCERTSTATUS, /* 91 - invalid certificate status */ + CURLE_HTTP2_STREAM, /* 92 - stream error in HTTP/2 framing layer + */ + CURLE_RECURSIVE_API_CALL, /* 93 - an api function was called from + inside a callback */ + CURLE_AUTH_ERROR, /* 94 - an authentication function returned an + error */ + CURLE_HTTP3, /* 95 - An HTTP/3 layer problem */ + CURLE_QUIC_CONNECT_ERROR, /* 96 - QUIC connection error */ + CURLE_PROXY, /* 97 - proxy handshake error */ + CURLE_SSL_CLIENTCERT, /* 98 - client-side certificate required */ + CURLE_UNRECOVERABLE_POLL, /* 99 - poll/select returned fatal error */ + CURL_LAST /* never use! */ +} CURLcode; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Previously obsolete error code reused in 7.38.0 */ +#define CURLE_OBSOLETE16 CURLE_HTTP2 + +/* Previously obsolete error codes reused in 7.24.0 */ +#define CURLE_OBSOLETE10 CURLE_FTP_ACCEPT_FAILED +#define CURLE_OBSOLETE12 CURLE_FTP_ACCEPT_TIMEOUT + +/* compatibility with older names */ +#define CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING +#define CURLE_FTP_WEIRD_SERVER_REPLY CURLE_WEIRD_SERVER_REPLY + +/* The following were added in 7.62.0 */ +#define CURLE_SSL_CACERT CURLE_PEER_FAILED_VERIFICATION + +/* The following were added in 7.21.5, April 2011 */ +#define CURLE_UNKNOWN_TELNET_OPTION CURLE_UNKNOWN_OPTION + +/* Added for 7.78.0 */ +#define CURLE_TELNET_OPTION_SYNTAX CURLE_SETOPT_OPTION_SYNTAX + +/* The following were added in 7.17.1 */ +/* These are scheduled to disappear by 2009 */ +#define CURLE_SSL_PEER_CERTIFICATE CURLE_PEER_FAILED_VERIFICATION + +/* The following were added in 7.17.0 */ +/* These are scheduled to disappear by 2009 */ +#define CURLE_OBSOLETE CURLE_OBSOLETE50 /* no one should be using this! */ +#define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46 +#define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44 +#define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10 +#define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16 +#define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32 +#define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29 +#define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12 +#define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20 +#define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40 +#define CURLE_MALFORMAT_USER CURLE_OBSOLETE24 +#define CURLE_SHARE_IN_USE CURLE_OBSOLETE57 +#define CURLE_URL_MALFORMAT_USER CURLE_NOT_BUILT_IN + +#define CURLE_FTP_ACCESS_DENIED CURLE_REMOTE_ACCESS_DENIED +#define CURLE_FTP_COULDNT_SET_BINARY CURLE_FTP_COULDNT_SET_TYPE +#define CURLE_FTP_QUOTE_ERROR CURLE_QUOTE_ERROR +#define CURLE_TFTP_DISKFULL CURLE_REMOTE_DISK_FULL +#define CURLE_TFTP_EXISTS CURLE_REMOTE_FILE_EXISTS +#define CURLE_HTTP_RANGE_ERROR CURLE_RANGE_ERROR +#define CURLE_FTP_SSL_FAILED CURLE_USE_SSL_FAILED + +/* The following were added earlier */ + +#define CURLE_OPERATION_TIMEOUTED CURLE_OPERATION_TIMEDOUT +#define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR +#define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED +#define CURLE_FTP_COULDNT_STOR_FILE CURLE_UPLOAD_FAILED +#define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE +#define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME +#define CURLE_LDAP_INVALID_URL CURLE_OBSOLETE62 +#define CURLE_CONV_REQD CURLE_OBSOLETE76 +#define CURLE_CONV_FAILED CURLE_OBSOLETE75 + +/* This was the error code 50 in 7.7.3 and a few earlier versions, this + is no longer used by libcurl but is instead #defined here only to not + make programs break */ +#define CURLE_ALREADY_COMPLETE 99999 + +/* Provide defines for really old option names */ +#define CURLOPT_FILE CURLOPT_WRITEDATA /* name changed in 7.9.7 */ +#define CURLOPT_INFILE CURLOPT_READDATA /* name changed in 7.9.7 */ +#define CURLOPT_WRITEHEADER CURLOPT_HEADERDATA + +/* Since long deprecated options with no code in the lib that does anything + with them. */ +#define CURLOPT_WRITEINFO CURLOPT_OBSOLETE40 +#define CURLOPT_CLOSEPOLICY CURLOPT_OBSOLETE72 + +#endif /* !CURL_NO_OLDIES */ + +/* + * Proxy error codes. Returned in CURLINFO_PROXY_ERROR if CURLE_PROXY was + * return for the transfers. + */ +typedef enum { + CURLPX_OK, + CURLPX_BAD_ADDRESS_TYPE, + CURLPX_BAD_VERSION, + CURLPX_CLOSED, + CURLPX_GSSAPI, + CURLPX_GSSAPI_PERMSG, + CURLPX_GSSAPI_PROTECTION, + CURLPX_IDENTD, + CURLPX_IDENTD_DIFFER, + CURLPX_LONG_HOSTNAME, + CURLPX_LONG_PASSWD, + CURLPX_LONG_USER, + CURLPX_NO_AUTH, + CURLPX_RECV_ADDRESS, + CURLPX_RECV_AUTH, + CURLPX_RECV_CONNECT, + CURLPX_RECV_REQACK, + CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED, + CURLPX_REPLY_COMMAND_NOT_SUPPORTED, + CURLPX_REPLY_CONNECTION_REFUSED, + CURLPX_REPLY_GENERAL_SERVER_FAILURE, + CURLPX_REPLY_HOST_UNREACHABLE, + CURLPX_REPLY_NETWORK_UNREACHABLE, + CURLPX_REPLY_NOT_ALLOWED, + CURLPX_REPLY_TTL_EXPIRED, + CURLPX_REPLY_UNASSIGNED, + CURLPX_REQUEST_FAILED, + CURLPX_RESOLVE_HOST, + CURLPX_SEND_AUTH, + CURLPX_SEND_CONNECT, + CURLPX_SEND_REQUEST, + CURLPX_UNKNOWN_FAIL, + CURLPX_UNKNOWN_MODE, + CURLPX_USER_REJECTED, + CURLPX_LAST /* never use */ +} CURLproxycode; + +/* This prototype applies to all conversion callbacks */ +typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length); + +typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */ + void *ssl_ctx, /* actually an OpenSSL + or WolfSSL SSL_CTX, + or an mbedTLS + mbedtls_ssl_config */ + void *userptr); + +typedef enum { + CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use + CONNECT HTTP/1.1 */ + CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT + HTTP/1.0 */ + CURLPROXY_HTTPS = 2, /* HTTPS but stick to HTTP/1 added in 7.52.0 */ + CURLPROXY_HTTPS2 = 3, /* HTTPS and attempt HTTP/2 added in 8.2.0 */ + CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already + in 7.10 */ + CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ + CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ + CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the + host name rather than the IP address. added + in 7.18.0 */ +} curl_proxytype; /* this enum was added in 7.10 */ + +/* + * Bitmasks for CURLOPT_HTTPAUTH and CURLOPT_PROXYAUTH options: + * + * CURLAUTH_NONE - No HTTP authentication + * CURLAUTH_BASIC - HTTP Basic authentication (default) + * CURLAUTH_DIGEST - HTTP Digest authentication + * CURLAUTH_NEGOTIATE - HTTP Negotiate (SPNEGO) authentication + * CURLAUTH_GSSNEGOTIATE - Alias for CURLAUTH_NEGOTIATE (deprecated) + * CURLAUTH_NTLM - HTTP NTLM authentication + * CURLAUTH_DIGEST_IE - HTTP Digest authentication with IE flavour + * CURLAUTH_NTLM_WB - HTTP NTLM authentication delegated to winbind helper + * CURLAUTH_BEARER - HTTP Bearer token authentication + * CURLAUTH_ONLY - Use together with a single other type to force no + * authentication or just that single type + * CURLAUTH_ANY - All fine types set + * CURLAUTH_ANYSAFE - All fine types except Basic + */ + +#define CURLAUTH_NONE ((unsigned long)0) +#define CURLAUTH_BASIC (((unsigned long)1)<<0) +#define CURLAUTH_DIGEST (((unsigned long)1)<<1) +#define CURLAUTH_NEGOTIATE (((unsigned long)1)<<2) +/* Deprecated since the advent of CURLAUTH_NEGOTIATE */ +#define CURLAUTH_GSSNEGOTIATE CURLAUTH_NEGOTIATE +/* Used for CURLOPT_SOCKS5_AUTH to stay terminologically correct */ +#define CURLAUTH_GSSAPI CURLAUTH_NEGOTIATE +#define CURLAUTH_NTLM (((unsigned long)1)<<3) +#define CURLAUTH_DIGEST_IE (((unsigned long)1)<<4) +#define CURLAUTH_NTLM_WB (((unsigned long)1)<<5) +#define CURLAUTH_BEARER (((unsigned long)1)<<6) +#define CURLAUTH_AWS_SIGV4 (((unsigned long)1)<<7) +#define CURLAUTH_ONLY (((unsigned long)1)<<31) +#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE) +#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE)) + +#define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ +#define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ +#define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */ +#define CURLSSH_AUTH_PASSWORD (1<<1) /* password */ +#define CURLSSH_AUTH_HOST (1<<2) /* host key files */ +#define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */ +#define CURLSSH_AUTH_AGENT (1<<4) /* agent (ssh-agent, pageant...) */ +#define CURLSSH_AUTH_GSSAPI (1<<5) /* gssapi (kerberos, ...) */ +#define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY + +#define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */ +#define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */ +#define CURLGSSAPI_DELEGATION_FLAG (1<<1) /* delegate always */ + +#define CURL_ERROR_SIZE 256 + +enum curl_khtype { + CURLKHTYPE_UNKNOWN, + CURLKHTYPE_RSA1, + CURLKHTYPE_RSA, + CURLKHTYPE_DSS, + CURLKHTYPE_ECDSA, + CURLKHTYPE_ED25519 +}; + +struct curl_khkey { + const char *key; /* points to a null-terminated string encoded with base64 + if len is zero, otherwise to the "raw" data */ + size_t len; + enum curl_khtype keytype; +}; + +/* this is the set of return values expected from the curl_sshkeycallback + callback */ +enum curl_khstat { + CURLKHSTAT_FINE_ADD_TO_FILE, + CURLKHSTAT_FINE, + CURLKHSTAT_REJECT, /* reject the connection, return an error */ + CURLKHSTAT_DEFER, /* do not accept it, but we can't answer right now. + Causes a CURLE_PEER_FAILED_VERIFICATION error but the + connection will be left intact etc */ + CURLKHSTAT_FINE_REPLACE, /* accept and replace the wrong key */ + CURLKHSTAT_LAST /* not for use, only a marker for last-in-list */ +}; + +/* this is the set of status codes pass in to the callback */ +enum curl_khmatch { + CURLKHMATCH_OK, /* match */ + CURLKHMATCH_MISMATCH, /* host found, key mismatch! */ + CURLKHMATCH_MISSING, /* no matching host/key found */ + CURLKHMATCH_LAST /* not for use, only a marker for last-in-list */ +}; + +typedef int + (*curl_sshkeycallback) (CURL *easy, /* easy handle */ + const struct curl_khkey *knownkey, /* known */ + const struct curl_khkey *foundkey, /* found */ + enum curl_khmatch, /* libcurl's view on the keys */ + void *clientp); /* custom pointer passed with */ + /* CURLOPT_SSH_KEYDATA */ + +typedef int + (*curl_sshhostkeycallback) (void *clientp,/* custom pointer passed */ + /* with CURLOPT_SSH_HOSTKEYDATA */ + int keytype, /* CURLKHTYPE */ + const char *key, /* hostkey to check */ + size_t keylen); /* length of the key */ + /* return CURLE_OK to accept */ + /* or something else to refuse */ + + +/* parameter for the CURLOPT_USE_SSL option */ +typedef enum { + CURLUSESSL_NONE, /* do not attempt to use SSL */ + CURLUSESSL_TRY, /* try using SSL, proceed anyway otherwise */ + CURLUSESSL_CONTROL, /* SSL for the control connection or fail */ + CURLUSESSL_ALL, /* SSL for all communication or fail */ + CURLUSESSL_LAST /* not an option, never use */ +} curl_usessl; + +/* Definition of bits for the CURLOPT_SSL_OPTIONS argument: */ + +/* - ALLOW_BEAST tells libcurl to allow the BEAST SSL vulnerability in the + name of improving interoperability with older servers. Some SSL libraries + have introduced work-arounds for this flaw but those work-arounds sometimes + make the SSL communication fail. To regain functionality with those broken + servers, a user can this way allow the vulnerability back. */ +#define CURLSSLOPT_ALLOW_BEAST (1<<0) + +/* - NO_REVOKE tells libcurl to disable certificate revocation checks for those + SSL backends where such behavior is present. */ +#define CURLSSLOPT_NO_REVOKE (1<<1) + +/* - NO_PARTIALCHAIN tells libcurl to *NOT* accept a partial certificate chain + if possible. The OpenSSL backend has this ability. */ +#define CURLSSLOPT_NO_PARTIALCHAIN (1<<2) + +/* - REVOKE_BEST_EFFORT tells libcurl to ignore certificate revocation offline + checks and ignore missing revocation list for those SSL backends where such + behavior is present. */ +#define CURLSSLOPT_REVOKE_BEST_EFFORT (1<<3) + +/* - CURLSSLOPT_NATIVE_CA tells libcurl to use standard certificate store of + operating system. Currently implemented under MS-Windows. */ +#define CURLSSLOPT_NATIVE_CA (1<<4) + +/* - CURLSSLOPT_AUTO_CLIENT_CERT tells libcurl to automatically locate and use + a client certificate for authentication. (Schannel) */ +#define CURLSSLOPT_AUTO_CLIENT_CERT (1<<5) + +/* The default connection attempt delay in milliseconds for happy eyeballs. + CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3 and happy-eyeballs-timeout-ms.d document + this value, keep them in sync. */ +#define CURL_HET_DEFAULT 200L + +/* The default connection upkeep interval in milliseconds. */ +#define CURL_UPKEEP_INTERVAL_DEFAULT 60000L + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2009 */ + +#define CURLFTPSSL_NONE CURLUSESSL_NONE +#define CURLFTPSSL_TRY CURLUSESSL_TRY +#define CURLFTPSSL_CONTROL CURLUSESSL_CONTROL +#define CURLFTPSSL_ALL CURLUSESSL_ALL +#define CURLFTPSSL_LAST CURLUSESSL_LAST +#define curl_ftpssl curl_usessl +#endif /* !CURL_NO_OLDIES */ + +/* parameter for the CURLOPT_FTP_SSL_CCC option */ +typedef enum { + CURLFTPSSL_CCC_NONE, /* do not send CCC */ + CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */ + CURLFTPSSL_CCC_ACTIVE, /* Initiate the shutdown */ + CURLFTPSSL_CCC_LAST /* not an option, never use */ +} curl_ftpccc; + +/* parameter for the CURLOPT_FTPSSLAUTH option */ +typedef enum { + CURLFTPAUTH_DEFAULT, /* let libcurl decide */ + CURLFTPAUTH_SSL, /* use "AUTH SSL" */ + CURLFTPAUTH_TLS, /* use "AUTH TLS" */ + CURLFTPAUTH_LAST /* not an option, never use */ +} curl_ftpauth; + +/* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */ +typedef enum { + CURLFTP_CREATE_DIR_NONE, /* do NOT create missing dirs! */ + CURLFTP_CREATE_DIR, /* (FTP/SFTP) if CWD fails, try MKD and then CWD + again if MKD succeeded, for SFTP this does + similar magic */ + CURLFTP_CREATE_DIR_RETRY, /* (FTP only) if CWD fails, try MKD and then CWD + again even if MKD failed! */ + CURLFTP_CREATE_DIR_LAST /* not an option, never use */ +} curl_ftpcreatedir; + +/* parameter for the CURLOPT_FTP_FILEMETHOD option */ +typedef enum { + CURLFTPMETHOD_DEFAULT, /* let libcurl pick */ + CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */ + CURLFTPMETHOD_NOCWD, /* no CWD at all */ + CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */ + CURLFTPMETHOD_LAST /* not an option, never use */ +} curl_ftpmethod; + +/* bitmask defines for CURLOPT_HEADEROPT */ +#define CURLHEADER_UNIFIED 0 +#define CURLHEADER_SEPARATE (1<<0) + +/* CURLALTSVC_* are bits for the CURLOPT_ALTSVC_CTRL option */ +#define CURLALTSVC_READONLYFILE (1<<2) +#define CURLALTSVC_H1 (1<<3) +#define CURLALTSVC_H2 (1<<4) +#define CURLALTSVC_H3 (1<<5) + + +struct curl_hstsentry { + char *name; + size_t namelen; + unsigned int includeSubDomains:1; + char expire[18]; /* YYYYMMDD HH:MM:SS [null-terminated] */ +}; + +struct curl_index { + size_t index; /* the provided entry's "index" or count */ + size_t total; /* total number of entries to save */ +}; + +typedef enum { + CURLSTS_OK, + CURLSTS_DONE, + CURLSTS_FAIL +} CURLSTScode; + +typedef CURLSTScode (*curl_hstsread_callback)(CURL *easy, + struct curl_hstsentry *e, + void *userp); +typedef CURLSTScode (*curl_hstswrite_callback)(CURL *easy, + struct curl_hstsentry *e, + struct curl_index *i, + void *userp); + +/* CURLHSTS_* are bits for the CURLOPT_HSTS option */ +#define CURLHSTS_ENABLE (long)(1<<0) +#define CURLHSTS_READONLYFILE (long)(1<<1) + +/* The CURLPROTO_ defines below are for the **deprecated** CURLOPT_*PROTOCOLS + options. Do not use. */ +#define CURLPROTO_HTTP (1<<0) +#define CURLPROTO_HTTPS (1<<1) +#define CURLPROTO_FTP (1<<2) +#define CURLPROTO_FTPS (1<<3) +#define CURLPROTO_SCP (1<<4) +#define CURLPROTO_SFTP (1<<5) +#define CURLPROTO_TELNET (1<<6) +#define CURLPROTO_LDAP (1<<7) +#define CURLPROTO_LDAPS (1<<8) +#define CURLPROTO_DICT (1<<9) +#define CURLPROTO_FILE (1<<10) +#define CURLPROTO_TFTP (1<<11) +#define CURLPROTO_IMAP (1<<12) +#define CURLPROTO_IMAPS (1<<13) +#define CURLPROTO_POP3 (1<<14) +#define CURLPROTO_POP3S (1<<15) +#define CURLPROTO_SMTP (1<<16) +#define CURLPROTO_SMTPS (1<<17) +#define CURLPROTO_RTSP (1<<18) +#define CURLPROTO_RTMP (1<<19) +#define CURLPROTO_RTMPT (1<<20) +#define CURLPROTO_RTMPE (1<<21) +#define CURLPROTO_RTMPTE (1<<22) +#define CURLPROTO_RTMPS (1<<23) +#define CURLPROTO_RTMPTS (1<<24) +#define CURLPROTO_GOPHER (1<<25) +#define CURLPROTO_SMB (1<<26) +#define CURLPROTO_SMBS (1<<27) +#define CURLPROTO_MQTT (1<<28) +#define CURLPROTO_GOPHERS (1<<29) +#define CURLPROTO_ALL (~0) /* enable everything */ + +/* long may be 32 or 64 bits, but we should never depend on anything else + but 32 */ +#define CURLOPTTYPE_LONG 0 +#define CURLOPTTYPE_OBJECTPOINT 10000 +#define CURLOPTTYPE_FUNCTIONPOINT 20000 +#define CURLOPTTYPE_OFF_T 30000 +#define CURLOPTTYPE_BLOB 40000 + +/* *STRINGPOINT is an alias for OBJECTPOINT to allow tools to extract the + string options from the header file */ + + +#define CURLOPT(na,t,nu) na = t + nu +#define CURLOPTDEPRECATED(na,t,nu,v,m) na CURL_DEPRECATED(v,m) = t + nu + +/* CURLOPT aliases that make no run-time difference */ + +/* 'char *' argument to a string with a trailing zero */ +#define CURLOPTTYPE_STRINGPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'struct curl_slist *' argument */ +#define CURLOPTTYPE_SLISTPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'void *' argument passed untouched to callback */ +#define CURLOPTTYPE_CBPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'long' argument with a set of values/bitmask */ +#define CURLOPTTYPE_VALUES CURLOPTTYPE_LONG + +/* + * All CURLOPT_* values. + */ + +typedef enum { + /* This is the FILE * or void * the regular output should be written to. */ + CURLOPT(CURLOPT_WRITEDATA, CURLOPTTYPE_CBPOINT, 1), + + /* The full URL to get/put */ + CURLOPT(CURLOPT_URL, CURLOPTTYPE_STRINGPOINT, 2), + + /* Port number to connect to, if other than default. */ + CURLOPT(CURLOPT_PORT, CURLOPTTYPE_LONG, 3), + + /* Name of proxy to use. */ + CURLOPT(CURLOPT_PROXY, CURLOPTTYPE_STRINGPOINT, 4), + + /* "user:password;options" to use when fetching. */ + CURLOPT(CURLOPT_USERPWD, CURLOPTTYPE_STRINGPOINT, 5), + + /* "user:password" to use with proxy. */ + CURLOPT(CURLOPT_PROXYUSERPWD, CURLOPTTYPE_STRINGPOINT, 6), + + /* Range to get, specified as an ASCII string. */ + CURLOPT(CURLOPT_RANGE, CURLOPTTYPE_STRINGPOINT, 7), + + /* not used */ + + /* Specified file stream to upload from (use as input): */ + CURLOPT(CURLOPT_READDATA, CURLOPTTYPE_CBPOINT, 9), + + /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE + * bytes big. */ + CURLOPT(CURLOPT_ERRORBUFFER, CURLOPTTYPE_OBJECTPOINT, 10), + + /* Function that will be called to store the output (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_WRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 11), + + /* Function that will be called to read the input (instead of fread). The + * parameters will use fread() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_READFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 12), + + /* Time-out the read operation after this amount of seconds */ + CURLOPT(CURLOPT_TIMEOUT, CURLOPTTYPE_LONG, 13), + + /* If CURLOPT_READDATA is used, this can be used to inform libcurl about + * how large the file being sent really is. That allows better error + * checking and better verifies that the upload was successful. -1 means + * unknown size. + * + * For large file support, there is also a _LARGE version of the key + * which takes an off_t type, allowing platforms with larger off_t + * sizes to handle larger files. See below for INFILESIZE_LARGE. + */ + CURLOPT(CURLOPT_INFILESIZE, CURLOPTTYPE_LONG, 14), + + /* POST static input fields. */ + CURLOPT(CURLOPT_POSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 15), + + /* Set the referrer page (needed by some CGIs) */ + CURLOPT(CURLOPT_REFERER, CURLOPTTYPE_STRINGPOINT, 16), + + /* Set the FTP PORT string (interface name, named or numerical IP address) + Use i.e '-' to use default address. */ + CURLOPT(CURLOPT_FTPPORT, CURLOPTTYPE_STRINGPOINT, 17), + + /* Set the User-Agent string (examined by some CGIs) */ + CURLOPT(CURLOPT_USERAGENT, CURLOPTTYPE_STRINGPOINT, 18), + + /* If the download receives less than "low speed limit" bytes/second + * during "low speed time" seconds, the operations is aborted. + * You could i.e if you have a pretty high speed connection, abort if + * it is less than 2000 bytes/sec during 20 seconds. + */ + + /* Set the "low speed limit" */ + CURLOPT(CURLOPT_LOW_SPEED_LIMIT, CURLOPTTYPE_LONG, 19), + + /* Set the "low speed time" */ + CURLOPT(CURLOPT_LOW_SPEED_TIME, CURLOPTTYPE_LONG, 20), + + /* Set the continuation offset. + * + * Note there is also a _LARGE version of this key which uses + * off_t types, allowing for large file offsets on platforms which + * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. + */ + CURLOPT(CURLOPT_RESUME_FROM, CURLOPTTYPE_LONG, 21), + + /* Set cookie in request: */ + CURLOPT(CURLOPT_COOKIE, CURLOPTTYPE_STRINGPOINT, 22), + + /* This points to a linked list of headers, struct curl_slist kind. This + list is also used for RTSP (in spite of its name) */ + CURLOPT(CURLOPT_HTTPHEADER, CURLOPTTYPE_SLISTPOINT, 23), + + /* This points to a linked list of post entries, struct curl_httppost */ + CURLOPTDEPRECATED(CURLOPT_HTTPPOST, CURLOPTTYPE_OBJECTPOINT, 24, + 7.56.0, "Use CURLOPT_MIMEPOST"), + + /* name of the file keeping your private SSL-certificate */ + CURLOPT(CURLOPT_SSLCERT, CURLOPTTYPE_STRINGPOINT, 25), + + /* password for the SSL or SSH private key */ + CURLOPT(CURLOPT_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 26), + + /* send TYPE parameter? */ + CURLOPT(CURLOPT_CRLF, CURLOPTTYPE_LONG, 27), + + /* send linked-list of QUOTE commands */ + CURLOPT(CURLOPT_QUOTE, CURLOPTTYPE_SLISTPOINT, 28), + + /* send FILE * or void * to store headers to, if you use a callback it + is simply passed to the callback unmodified */ + CURLOPT(CURLOPT_HEADERDATA, CURLOPTTYPE_CBPOINT, 29), + + /* point to a file to read the initial cookies from, also enables + "cookie awareness" */ + CURLOPT(CURLOPT_COOKIEFILE, CURLOPTTYPE_STRINGPOINT, 31), + + /* What version to specifically try to use. + See CURL_SSLVERSION defines below. */ + CURLOPT(CURLOPT_SSLVERSION, CURLOPTTYPE_VALUES, 32), + + /* What kind of HTTP time condition to use, see defines */ + CURLOPT(CURLOPT_TIMECONDITION, CURLOPTTYPE_VALUES, 33), + + /* Time to use with the above condition. Specified in number of seconds + since 1 Jan 1970 */ + CURLOPT(CURLOPT_TIMEVALUE, CURLOPTTYPE_LONG, 34), + + /* 35 = OBSOLETE */ + + /* Custom request, for customizing the get command like + HTTP: DELETE, TRACE and others + FTP: to use a different list command + */ + CURLOPT(CURLOPT_CUSTOMREQUEST, CURLOPTTYPE_STRINGPOINT, 36), + + /* FILE handle to use instead of stderr */ + CURLOPT(CURLOPT_STDERR, CURLOPTTYPE_OBJECTPOINT, 37), + + /* 38 is not used */ + + /* send linked-list of post-transfer QUOTE commands */ + CURLOPT(CURLOPT_POSTQUOTE, CURLOPTTYPE_SLISTPOINT, 39), + + /* OBSOLETE, do not use! */ + CURLOPT(CURLOPT_OBSOLETE40, CURLOPTTYPE_OBJECTPOINT, 40), + + /* talk a lot */ + CURLOPT(CURLOPT_VERBOSE, CURLOPTTYPE_LONG, 41), + + /* throw the header out too */ + CURLOPT(CURLOPT_HEADER, CURLOPTTYPE_LONG, 42), + + /* shut off the progress meter */ + CURLOPT(CURLOPT_NOPROGRESS, CURLOPTTYPE_LONG, 43), + + /* use HEAD to get http document */ + CURLOPT(CURLOPT_NOBODY, CURLOPTTYPE_LONG, 44), + + /* no output on http error codes >= 400 */ + CURLOPT(CURLOPT_FAILONERROR, CURLOPTTYPE_LONG, 45), + + /* this is an upload */ + CURLOPT(CURLOPT_UPLOAD, CURLOPTTYPE_LONG, 46), + + /* HTTP POST method */ + CURLOPT(CURLOPT_POST, CURLOPTTYPE_LONG, 47), + + /* bare names when listing directories */ + CURLOPT(CURLOPT_DIRLISTONLY, CURLOPTTYPE_LONG, 48), + + /* Append instead of overwrite on upload! */ + CURLOPT(CURLOPT_APPEND, CURLOPTTYPE_LONG, 50), + + /* Specify whether to read the user+password from the .netrc or the URL. + * This must be one of the CURL_NETRC_* enums below. */ + CURLOPT(CURLOPT_NETRC, CURLOPTTYPE_VALUES, 51), + + /* use Location: Luke! */ + CURLOPT(CURLOPT_FOLLOWLOCATION, CURLOPTTYPE_LONG, 52), + + /* transfer data in text/ASCII format */ + CURLOPT(CURLOPT_TRANSFERTEXT, CURLOPTTYPE_LONG, 53), + + /* HTTP PUT */ + CURLOPTDEPRECATED(CURLOPT_PUT, CURLOPTTYPE_LONG, 54, + 7.12.1, "Use CURLOPT_UPLOAD"), + + /* 55 = OBSOLETE */ + + /* DEPRECATED + * Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_progress_callback + * prototype defines. */ + CURLOPTDEPRECATED(CURLOPT_PROGRESSFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 56, + 7.32.0, "Use CURLOPT_XFERINFOFUNCTION"), + + /* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION + callbacks */ + CURLOPT(CURLOPT_XFERINFODATA, CURLOPTTYPE_CBPOINT, 57), +#define CURLOPT_PROGRESSDATA CURLOPT_XFERINFODATA + + /* We want the referrer field set automatically when following locations */ + CURLOPT(CURLOPT_AUTOREFERER, CURLOPTTYPE_LONG, 58), + + /* Port of the proxy, can be set in the proxy string as well with: + "[host]:[port]" */ + CURLOPT(CURLOPT_PROXYPORT, CURLOPTTYPE_LONG, 59), + + /* size of the POST input data, if strlen() is not good to use */ + CURLOPT(CURLOPT_POSTFIELDSIZE, CURLOPTTYPE_LONG, 60), + + /* tunnel non-http operations through an HTTP proxy */ + CURLOPT(CURLOPT_HTTPPROXYTUNNEL, CURLOPTTYPE_LONG, 61), + + /* Set the interface string to use as outgoing network interface */ + CURLOPT(CURLOPT_INTERFACE, CURLOPTTYPE_STRINGPOINT, 62), + + /* Set the krb4/5 security level, this also enables krb4/5 awareness. This + * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string + * is set but doesn't match one of these, 'private' will be used. */ + CURLOPT(CURLOPT_KRBLEVEL, CURLOPTTYPE_STRINGPOINT, 63), + + /* Set if we should verify the peer in ssl handshake, set 1 to verify. */ + CURLOPT(CURLOPT_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 64), + + /* The CApath or CAfile used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAINFO, CURLOPTTYPE_STRINGPOINT, 65), + + /* 66 = OBSOLETE */ + /* 67 = OBSOLETE */ + + /* Maximum number of http redirects to follow */ + CURLOPT(CURLOPT_MAXREDIRS, CURLOPTTYPE_LONG, 68), + + /* Pass a long set to 1 to get the date of the requested document (if + possible)! Pass a zero to shut it off. */ + CURLOPT(CURLOPT_FILETIME, CURLOPTTYPE_LONG, 69), + + /* This points to a linked list of telnet options */ + CURLOPT(CURLOPT_TELNETOPTIONS, CURLOPTTYPE_SLISTPOINT, 70), + + /* Max amount of cached alive connections */ + CURLOPT(CURLOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 71), + + /* OBSOLETE, do not use! */ + CURLOPT(CURLOPT_OBSOLETE72, CURLOPTTYPE_LONG, 72), + + /* 73 = OBSOLETE */ + + /* Set to explicitly use a new connection for the upcoming transfer. + Do not use this unless you're absolutely sure of this, as it makes the + operation slower and is less friendly for the network. */ + CURLOPT(CURLOPT_FRESH_CONNECT, CURLOPTTYPE_LONG, 74), + + /* Set to explicitly forbid the upcoming transfer's connection to be reused + when done. Do not use this unless you're absolutely sure of this, as it + makes the operation slower and is less friendly for the network. */ + CURLOPT(CURLOPT_FORBID_REUSE, CURLOPTTYPE_LONG, 75), + + /* Set to a file name that contains random data for libcurl to use to + seed the random engine when doing SSL connects. */ + CURLOPTDEPRECATED(CURLOPT_RANDOM_FILE, CURLOPTTYPE_STRINGPOINT, 76, + 7.84.0, "Serves no purpose anymore"), + + /* Set to the Entropy Gathering Daemon socket pathname */ + CURLOPTDEPRECATED(CURLOPT_EGDSOCKET, CURLOPTTYPE_STRINGPOINT, 77, + 7.84.0, "Serves no purpose anymore"), + + /* Time-out connect operations after this amount of seconds, if connects are + OK within this time, then fine... This only aborts the connect phase. */ + CURLOPT(CURLOPT_CONNECTTIMEOUT, CURLOPTTYPE_LONG, 78), + + /* Function that will be called to store headers (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_HEADERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 79), + + /* Set this to force the HTTP request to get back to GET. Only really usable + if POST, PUT or a custom request have been used first. + */ + CURLOPT(CURLOPT_HTTPGET, CURLOPTTYPE_LONG, 80), + + /* Set if we should verify the Common name from the peer certificate in ssl + * handshake, set 1 to check existence, 2 to ensure that it matches the + * provided hostname. */ + CURLOPT(CURLOPT_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 81), + + /* Specify which file name to write all known cookies in after completed + operation. Set file name to "-" (dash) to make it go to stdout. */ + CURLOPT(CURLOPT_COOKIEJAR, CURLOPTTYPE_STRINGPOINT, 82), + + /* Specify which SSL ciphers to use */ + CURLOPT(CURLOPT_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 83), + + /* Specify which HTTP version to use! This must be set to one of the + CURL_HTTP_VERSION* enums set below. */ + CURLOPT(CURLOPT_HTTP_VERSION, CURLOPTTYPE_VALUES, 84), + + /* Specifically switch on or off the FTP engine's use of the EPSV command. By + default, that one will always be attempted before the more traditional + PASV command. */ + CURLOPT(CURLOPT_FTP_USE_EPSV, CURLOPTTYPE_LONG, 85), + + /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */ + CURLOPT(CURLOPT_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 86), + + /* name of the file keeping your private SSL-key */ + CURLOPT(CURLOPT_SSLKEY, CURLOPTTYPE_STRINGPOINT, 87), + + /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */ + CURLOPT(CURLOPT_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 88), + + /* crypto engine for the SSL-sub system */ + CURLOPT(CURLOPT_SSLENGINE, CURLOPTTYPE_STRINGPOINT, 89), + + /* set the crypto engine for the SSL-sub system as default + the param has no meaning... + */ + CURLOPT(CURLOPT_SSLENGINE_DEFAULT, CURLOPTTYPE_LONG, 90), + + /* Non-zero value means to use the global dns cache */ + /* DEPRECATED, do not use! */ + CURLOPTDEPRECATED(CURLOPT_DNS_USE_GLOBAL_CACHE, CURLOPTTYPE_LONG, 91, + 7.11.1, "Use CURLOPT_SHARE"), + + /* DNS cache timeout */ + CURLOPT(CURLOPT_DNS_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 92), + + /* send linked-list of pre-transfer QUOTE commands */ + CURLOPT(CURLOPT_PREQUOTE, CURLOPTTYPE_SLISTPOINT, 93), + + /* set the debug function */ + CURLOPT(CURLOPT_DEBUGFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 94), + + /* set the data for the debug function */ + CURLOPT(CURLOPT_DEBUGDATA, CURLOPTTYPE_CBPOINT, 95), + + /* mark this as start of a cookie session */ + CURLOPT(CURLOPT_COOKIESESSION, CURLOPTTYPE_LONG, 96), + + /* The CApath directory used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAPATH, CURLOPTTYPE_STRINGPOINT, 97), + + /* Instruct libcurl to use a smaller receive buffer */ + CURLOPT(CURLOPT_BUFFERSIZE, CURLOPTTYPE_LONG, 98), + + /* Instruct libcurl to not use any signal/alarm handlers, even when using + timeouts. This option is useful for multi-threaded applications. + See libcurl-the-guide for more background information. */ + CURLOPT(CURLOPT_NOSIGNAL, CURLOPTTYPE_LONG, 99), + + /* Provide a CURLShare for mutexing non-ts data */ + CURLOPT(CURLOPT_SHARE, CURLOPTTYPE_OBJECTPOINT, 100), + + /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default), + CURLPROXY_HTTPS, CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and + CURLPROXY_SOCKS5. */ + CURLOPT(CURLOPT_PROXYTYPE, CURLOPTTYPE_VALUES, 101), + + /* Set the Accept-Encoding string. Use this to tell a server you would like + the response to be compressed. Before 7.21.6, this was known as + CURLOPT_ENCODING */ + CURLOPT(CURLOPT_ACCEPT_ENCODING, CURLOPTTYPE_STRINGPOINT, 102), + + /* Set pointer to private data */ + CURLOPT(CURLOPT_PRIVATE, CURLOPTTYPE_OBJECTPOINT, 103), + + /* Set aliases for HTTP 200 in the HTTP Response header */ + CURLOPT(CURLOPT_HTTP200ALIASES, CURLOPTTYPE_SLISTPOINT, 104), + + /* Continue to send authentication (user+password) when following locations, + even when hostname changed. This can potentially send off the name + and password to whatever host the server decides. */ + CURLOPT(CURLOPT_UNRESTRICTED_AUTH, CURLOPTTYPE_LONG, 105), + + /* Specifically switch on or off the FTP engine's use of the EPRT command ( + it also disables the LPRT attempt). By default, those ones will always be + attempted before the good old traditional PORT command. */ + CURLOPT(CURLOPT_FTP_USE_EPRT, CURLOPTTYPE_LONG, 106), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_USERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CURLOPT(CURLOPT_HTTPAUTH, CURLOPTTYPE_VALUES, 107), + + /* Set the ssl context callback function, currently only for OpenSSL or + WolfSSL ssl_ctx, or mbedTLS mbedtls_ssl_config in the second argument. + The function must match the curl_ssl_ctx_callback prototype. */ + CURLOPT(CURLOPT_SSL_CTX_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 108), + + /* Set the userdata for the ssl context callback function's third + argument */ + CURLOPT(CURLOPT_SSL_CTX_DATA, CURLOPTTYPE_CBPOINT, 109), + + /* FTP Option that causes missing dirs to be created on the remote server. + In 7.19.4 we introduced the convenience enums for this option using the + CURLFTP_CREATE_DIR prefix. + */ + CURLOPT(CURLOPT_FTP_CREATE_MISSING_DIRS, CURLOPTTYPE_LONG, 110), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_PROXYUSERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CURLOPT(CURLOPT_PROXYAUTH, CURLOPTTYPE_VALUES, 111), + + /* Option that changes the timeout, in seconds, associated with getting a + response. This is different from transfer timeout time and essentially + places a demand on the server to acknowledge commands in a timely + manner. For FTP, SMTP, IMAP and POP3. */ + CURLOPT(CURLOPT_SERVER_RESPONSE_TIMEOUT, CURLOPTTYPE_LONG, 112), + + /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to + tell libcurl to use those IP versions only. This only has effect on + systems with support for more than one, i.e IPv4 _and_ IPv6. */ + CURLOPT(CURLOPT_IPRESOLVE, CURLOPTTYPE_VALUES, 113), + + /* Set this option to limit the size of a file that will be downloaded from + an HTTP or FTP server. + + Note there is also _LARGE version which adds large file support for + platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ + CURLOPT(CURLOPT_MAXFILESIZE, CURLOPTTYPE_LONG, 114), + + /* See the comment for INFILESIZE above, but in short, specifies + * the size of the file being uploaded. -1 means unknown. + */ + CURLOPT(CURLOPT_INFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 115), + + /* Sets the continuation offset. There is also a CURLOPTTYPE_LONG version + * of this; look above for RESUME_FROM. + */ + CURLOPT(CURLOPT_RESUME_FROM_LARGE, CURLOPTTYPE_OFF_T, 116), + + /* Sets the maximum size of data that will be downloaded from + * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. + */ + CURLOPT(CURLOPT_MAXFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 117), + + /* Set this option to the file name of your .netrc file you want libcurl + to parse (using the CURLOPT_NETRC option). If not set, libcurl will do + a poor attempt to find the user's home directory and check for a .netrc + file in there. */ + CURLOPT(CURLOPT_NETRC_FILE, CURLOPTTYPE_STRINGPOINT, 118), + + /* Enable SSL/TLS for FTP, pick one of: + CURLUSESSL_TRY - try using SSL, proceed anyway otherwise + CURLUSESSL_CONTROL - SSL for the control connection or fail + CURLUSESSL_ALL - SSL for all communication or fail + */ + CURLOPT(CURLOPT_USE_SSL, CURLOPTTYPE_VALUES, 119), + + /* The _LARGE version of the standard POSTFIELDSIZE option */ + CURLOPT(CURLOPT_POSTFIELDSIZE_LARGE, CURLOPTTYPE_OFF_T, 120), + + /* Enable/disable the TCP Nagle algorithm */ + CURLOPT(CURLOPT_TCP_NODELAY, CURLOPTTYPE_LONG, 121), + + /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 123 OBSOLETE. Gone in 7.16.0 */ + /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 127 OBSOLETE. Gone in 7.16.0 */ + /* 128 OBSOLETE. Gone in 7.16.0 */ + + /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option + can be used to change libcurl's default action which is to first try + "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK + response has been received. + + Available parameters are: + CURLFTPAUTH_DEFAULT - let libcurl decide + CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS + CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL + */ + CURLOPT(CURLOPT_FTPSSLAUTH, CURLOPTTYPE_VALUES, 129), + + CURLOPTDEPRECATED(CURLOPT_IOCTLFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 130, + 7.18.0, "Use CURLOPT_SEEKFUNCTION"), + CURLOPTDEPRECATED(CURLOPT_IOCTLDATA, CURLOPTTYPE_CBPOINT, 131, + 7.18.0, "Use CURLOPT_SEEKDATA"), + + /* 132 OBSOLETE. Gone in 7.16.0 */ + /* 133 OBSOLETE. Gone in 7.16.0 */ + + /* null-terminated string for pass on to the FTP server when asked for + "account" info */ + CURLOPT(CURLOPT_FTP_ACCOUNT, CURLOPTTYPE_STRINGPOINT, 134), + + /* feed cookie into cookie engine */ + CURLOPT(CURLOPT_COOKIELIST, CURLOPTTYPE_STRINGPOINT, 135), + + /* ignore Content-Length */ + CURLOPT(CURLOPT_IGNORE_CONTENT_LENGTH, CURLOPTTYPE_LONG, 136), + + /* Set to non-zero to skip the IP address received in a 227 PASV FTP server + response. Typically used for FTP-SSL purposes but is not restricted to + that. libcurl will then instead use the same IP address it used for the + control connection. */ + CURLOPT(CURLOPT_FTP_SKIP_PASV_IP, CURLOPTTYPE_LONG, 137), + + /* Select "file method" to use when doing FTP, see the curl_ftpmethod + above. */ + CURLOPT(CURLOPT_FTP_FILEMETHOD, CURLOPTTYPE_VALUES, 138), + + /* Local port number to bind the socket to */ + CURLOPT(CURLOPT_LOCALPORT, CURLOPTTYPE_LONG, 139), + + /* Number of ports to try, including the first one set with LOCALPORT. + Thus, setting it to 1 will make no additional attempts but the first. + */ + CURLOPT(CURLOPT_LOCALPORTRANGE, CURLOPTTYPE_LONG, 140), + + /* no transfer, set up connection and let application use the socket by + extracting it with CURLINFO_LASTSOCKET */ + CURLOPT(CURLOPT_CONNECT_ONLY, CURLOPTTYPE_LONG, 141), + + /* Function that will be called to convert from the + network encoding (instead of using the iconv calls in libcurl) */ + CURLOPTDEPRECATED(CURLOPT_CONV_FROM_NETWORK_FUNCTION, + CURLOPTTYPE_FUNCTIONPOINT, 142, + 7.82.0, "Serves no purpose anymore"), + + /* Function that will be called to convert to the + network encoding (instead of using the iconv calls in libcurl) */ + CURLOPTDEPRECATED(CURLOPT_CONV_TO_NETWORK_FUNCTION, + CURLOPTTYPE_FUNCTIONPOINT, 143, + 7.82.0, "Serves no purpose anymore"), + + /* Function that will be called to convert from UTF8 + (instead of using the iconv calls in libcurl) + Note that this is used only for SSL certificate processing */ + CURLOPTDEPRECATED(CURLOPT_CONV_FROM_UTF8_FUNCTION, + CURLOPTTYPE_FUNCTIONPOINT, 144, + 7.82.0, "Serves no purpose anymore"), + + /* if the connection proceeds too quickly then need to slow it down */ + /* limit-rate: maximum number of bytes per second to send or receive */ + CURLOPT(CURLOPT_MAX_SEND_SPEED_LARGE, CURLOPTTYPE_OFF_T, 145), + CURLOPT(CURLOPT_MAX_RECV_SPEED_LARGE, CURLOPTTYPE_OFF_T, 146), + + /* Pointer to command string to send if USER/PASS fails. */ + CURLOPT(CURLOPT_FTP_ALTERNATIVE_TO_USER, CURLOPTTYPE_STRINGPOINT, 147), + + /* callback function for setting socket options */ + CURLOPT(CURLOPT_SOCKOPTFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 148), + CURLOPT(CURLOPT_SOCKOPTDATA, CURLOPTTYPE_CBPOINT, 149), + + /* set to 0 to disable session ID reuse for this transfer, default is + enabled (== 1) */ + CURLOPT(CURLOPT_SSL_SESSIONID_CACHE, CURLOPTTYPE_LONG, 150), + + /* allowed SSH authentication methods */ + CURLOPT(CURLOPT_SSH_AUTH_TYPES, CURLOPTTYPE_VALUES, 151), + + /* Used by scp/sftp to do public/private key authentication */ + CURLOPT(CURLOPT_SSH_PUBLIC_KEYFILE, CURLOPTTYPE_STRINGPOINT, 152), + CURLOPT(CURLOPT_SSH_PRIVATE_KEYFILE, CURLOPTTYPE_STRINGPOINT, 153), + + /* Send CCC (Clear Command Channel) after authentication */ + CURLOPT(CURLOPT_FTP_SSL_CCC, CURLOPTTYPE_LONG, 154), + + /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */ + CURLOPT(CURLOPT_TIMEOUT_MS, CURLOPTTYPE_LONG, 155), + CURLOPT(CURLOPT_CONNECTTIMEOUT_MS, CURLOPTTYPE_LONG, 156), + + /* set to zero to disable the libcurl's decoding and thus pass the raw body + data to the application even when it is encoded/compressed */ + CURLOPT(CURLOPT_HTTP_TRANSFER_DECODING, CURLOPTTYPE_LONG, 157), + CURLOPT(CURLOPT_HTTP_CONTENT_DECODING, CURLOPTTYPE_LONG, 158), + + /* Permission used when creating new files and directories on the remote + server for protocols that support it, SFTP/SCP/FILE */ + CURLOPT(CURLOPT_NEW_FILE_PERMS, CURLOPTTYPE_LONG, 159), + CURLOPT(CURLOPT_NEW_DIRECTORY_PERMS, CURLOPTTYPE_LONG, 160), + + /* Set the behavior of POST when redirecting. Values must be set to one + of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */ + CURLOPT(CURLOPT_POSTREDIR, CURLOPTTYPE_VALUES, 161), + + /* used by scp/sftp to verify the host's public key */ + CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_MD5, CURLOPTTYPE_STRINGPOINT, 162), + + /* Callback function for opening socket (instead of socket(2)). Optionally, + callback is able change the address or refuse to connect returning + CURL_SOCKET_BAD. The callback should have type + curl_opensocket_callback */ + CURLOPT(CURLOPT_OPENSOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 163), + CURLOPT(CURLOPT_OPENSOCKETDATA, CURLOPTTYPE_CBPOINT, 164), + + /* POST volatile input fields. */ + CURLOPT(CURLOPT_COPYPOSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 165), + + /* set transfer mode (;type=) when doing FTP via an HTTP proxy */ + CURLOPT(CURLOPT_PROXY_TRANSFER_MODE, CURLOPTTYPE_LONG, 166), + + /* Callback function for seeking in the input stream */ + CURLOPT(CURLOPT_SEEKFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 167), + CURLOPT(CURLOPT_SEEKDATA, CURLOPTTYPE_CBPOINT, 168), + + /* CRL file */ + CURLOPT(CURLOPT_CRLFILE, CURLOPTTYPE_STRINGPOINT, 169), + + /* Issuer certificate */ + CURLOPT(CURLOPT_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 170), + + /* (IPv6) Address scope */ + CURLOPT(CURLOPT_ADDRESS_SCOPE, CURLOPTTYPE_LONG, 171), + + /* Collect certificate chain info and allow it to get retrievable with + CURLINFO_CERTINFO after the transfer is complete. */ + CURLOPT(CURLOPT_CERTINFO, CURLOPTTYPE_LONG, 172), + + /* "name" and "pwd" to use when fetching. */ + CURLOPT(CURLOPT_USERNAME, CURLOPTTYPE_STRINGPOINT, 173), + CURLOPT(CURLOPT_PASSWORD, CURLOPTTYPE_STRINGPOINT, 174), + + /* "name" and "pwd" to use with Proxy when fetching. */ + CURLOPT(CURLOPT_PROXYUSERNAME, CURLOPTTYPE_STRINGPOINT, 175), + CURLOPT(CURLOPT_PROXYPASSWORD, CURLOPTTYPE_STRINGPOINT, 176), + + /* Comma separated list of hostnames defining no-proxy zones. These should + match both hostnames directly, and hostnames within a domain. For + example, local.com will match local.com and www.local.com, but NOT + notlocal.com or www.notlocal.com. For compatibility with other + implementations of this, .local.com will be considered to be the same as + local.com. A single * is the only valid wildcard, and effectively + disables the use of proxy. */ + CURLOPT(CURLOPT_NOPROXY, CURLOPTTYPE_STRINGPOINT, 177), + + /* block size for TFTP transfers */ + CURLOPT(CURLOPT_TFTP_BLKSIZE, CURLOPTTYPE_LONG, 178), + + /* Socks Service */ + /* DEPRECATED, do not use! */ + CURLOPTDEPRECATED(CURLOPT_SOCKS5_GSSAPI_SERVICE, + CURLOPTTYPE_STRINGPOINT, 179, + 7.49.0, "Use CURLOPT_PROXY_SERVICE_NAME"), + + /* Socks Service */ + CURLOPT(CURLOPT_SOCKS5_GSSAPI_NEC, CURLOPTTYPE_LONG, 180), + + /* set the bitmask for the protocols that are allowed to be used for the + transfer, which thus helps the app which takes URLs from users or other + external inputs and want to restrict what protocol(s) to deal + with. Defaults to CURLPROTO_ALL. */ + CURLOPTDEPRECATED(CURLOPT_PROTOCOLS, CURLOPTTYPE_LONG, 181, + 7.85.0, "Use CURLOPT_PROTOCOLS_STR"), + + /* set the bitmask for the protocols that libcurl is allowed to follow to, + as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs + to be set in both bitmasks to be allowed to get redirected to. */ + CURLOPTDEPRECATED(CURLOPT_REDIR_PROTOCOLS, CURLOPTTYPE_LONG, 182, + 7.85.0, "Use CURLOPT_REDIR_PROTOCOLS_STR"), + + /* set the SSH knownhost file name to use */ + CURLOPT(CURLOPT_SSH_KNOWNHOSTS, CURLOPTTYPE_STRINGPOINT, 183), + + /* set the SSH host key callback, must point to a curl_sshkeycallback + function */ + CURLOPT(CURLOPT_SSH_KEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 184), + + /* set the SSH host key callback custom pointer */ + CURLOPT(CURLOPT_SSH_KEYDATA, CURLOPTTYPE_CBPOINT, 185), + + /* set the SMTP mail originator */ + CURLOPT(CURLOPT_MAIL_FROM, CURLOPTTYPE_STRINGPOINT, 186), + + /* set the list of SMTP mail receiver(s) */ + CURLOPT(CURLOPT_MAIL_RCPT, CURLOPTTYPE_SLISTPOINT, 187), + + /* FTP: send PRET before PASV */ + CURLOPT(CURLOPT_FTP_USE_PRET, CURLOPTTYPE_LONG, 188), + + /* RTSP request method (OPTIONS, SETUP, PLAY, etc...) */ + CURLOPT(CURLOPT_RTSP_REQUEST, CURLOPTTYPE_VALUES, 189), + + /* The RTSP session identifier */ + CURLOPT(CURLOPT_RTSP_SESSION_ID, CURLOPTTYPE_STRINGPOINT, 190), + + /* The RTSP stream URI */ + CURLOPT(CURLOPT_RTSP_STREAM_URI, CURLOPTTYPE_STRINGPOINT, 191), + + /* The Transport: header to use in RTSP requests */ + CURLOPT(CURLOPT_RTSP_TRANSPORT, CURLOPTTYPE_STRINGPOINT, 192), + + /* Manually initialize the client RTSP CSeq for this handle */ + CURLOPT(CURLOPT_RTSP_CLIENT_CSEQ, CURLOPTTYPE_LONG, 193), + + /* Manually initialize the server RTSP CSeq for this handle */ + CURLOPT(CURLOPT_RTSP_SERVER_CSEQ, CURLOPTTYPE_LONG, 194), + + /* The stream to pass to INTERLEAVEFUNCTION. */ + CURLOPT(CURLOPT_INTERLEAVEDATA, CURLOPTTYPE_CBPOINT, 195), + + /* Let the application define a custom write method for RTP data */ + CURLOPT(CURLOPT_INTERLEAVEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 196), + + /* Turn on wildcard matching */ + CURLOPT(CURLOPT_WILDCARDMATCH, CURLOPTTYPE_LONG, 197), + + /* Directory matching callback called before downloading of an + individual file (chunk) started */ + CURLOPT(CURLOPT_CHUNK_BGN_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 198), + + /* Directory matching callback called after the file (chunk) + was downloaded, or skipped */ + CURLOPT(CURLOPT_CHUNK_END_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 199), + + /* Change match (fnmatch-like) callback for wildcard matching */ + CURLOPT(CURLOPT_FNMATCH_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 200), + + /* Let the application define custom chunk data pointer */ + CURLOPT(CURLOPT_CHUNK_DATA, CURLOPTTYPE_CBPOINT, 201), + + /* FNMATCH_FUNCTION user pointer */ + CURLOPT(CURLOPT_FNMATCH_DATA, CURLOPTTYPE_CBPOINT, 202), + + /* send linked-list of name:port:address sets */ + CURLOPT(CURLOPT_RESOLVE, CURLOPTTYPE_SLISTPOINT, 203), + + /* Set a username for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 204), + + /* Set a password for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 205), + + /* Set authentication type for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 206), + + /* Set to 1 to enable the "TE:" header in HTTP requests to ask for + compressed transfer-encoded responses. Set to 0 to disable the use of TE: + in outgoing requests. The current default is 0, but it might change in a + future libcurl release. + + libcurl will ask for the compressed methods it knows of, and if that + isn't any, it will not ask for transfer-encoding at all even if this + option is set to 1. + + */ + CURLOPT(CURLOPT_TRANSFER_ENCODING, CURLOPTTYPE_LONG, 207), + + /* Callback function for closing socket (instead of close(2)). The callback + should have type curl_closesocket_callback */ + CURLOPT(CURLOPT_CLOSESOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 208), + CURLOPT(CURLOPT_CLOSESOCKETDATA, CURLOPTTYPE_CBPOINT, 209), + + /* allow GSSAPI credential delegation */ + CURLOPT(CURLOPT_GSSAPI_DELEGATION, CURLOPTTYPE_VALUES, 210), + + /* Set the name servers to use for DNS resolution */ + CURLOPT(CURLOPT_DNS_SERVERS, CURLOPTTYPE_STRINGPOINT, 211), + + /* Time-out accept operations (currently for FTP only) after this amount + of milliseconds. */ + CURLOPT(CURLOPT_ACCEPTTIMEOUT_MS, CURLOPTTYPE_LONG, 212), + + /* Set TCP keepalive */ + CURLOPT(CURLOPT_TCP_KEEPALIVE, CURLOPTTYPE_LONG, 213), + + /* non-universal keepalive knobs (Linux, AIX, HP-UX, more) */ + CURLOPT(CURLOPT_TCP_KEEPIDLE, CURLOPTTYPE_LONG, 214), + CURLOPT(CURLOPT_TCP_KEEPINTVL, CURLOPTTYPE_LONG, 215), + + /* Enable/disable specific SSL features with a bitmask, see CURLSSLOPT_* */ + CURLOPT(CURLOPT_SSL_OPTIONS, CURLOPTTYPE_VALUES, 216), + + /* Set the SMTP auth originator */ + CURLOPT(CURLOPT_MAIL_AUTH, CURLOPTTYPE_STRINGPOINT, 217), + + /* Enable/disable SASL initial response */ + CURLOPT(CURLOPT_SASL_IR, CURLOPTTYPE_LONG, 218), + + /* Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_xferinfo_callback + * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */ + CURLOPT(CURLOPT_XFERINFOFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 219), + + /* The XOAUTH2 bearer token */ + CURLOPT(CURLOPT_XOAUTH2_BEARER, CURLOPTTYPE_STRINGPOINT, 220), + + /* Set the interface string to use as outgoing network + * interface for DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_INTERFACE, CURLOPTTYPE_STRINGPOINT, 221), + + /* Set the local IPv4 address to use for outgoing DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_LOCAL_IP4, CURLOPTTYPE_STRINGPOINT, 222), + + /* Set the local IPv6 address to use for outgoing DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_LOCAL_IP6, CURLOPTTYPE_STRINGPOINT, 223), + + /* Set authentication options directly */ + CURLOPT(CURLOPT_LOGIN_OPTIONS, CURLOPTTYPE_STRINGPOINT, 224), + + /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */ + CURLOPTDEPRECATED(CURLOPT_SSL_ENABLE_NPN, CURLOPTTYPE_LONG, 225, + 7.86.0, "Has no function"), + + /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */ + CURLOPT(CURLOPT_SSL_ENABLE_ALPN, CURLOPTTYPE_LONG, 226), + + /* Time to wait for a response to an HTTP request containing an + * Expect: 100-continue header before sending the data anyway. */ + CURLOPT(CURLOPT_EXPECT_100_TIMEOUT_MS, CURLOPTTYPE_LONG, 227), + + /* This points to a linked list of headers used for proxy requests only, + struct curl_slist kind */ + CURLOPT(CURLOPT_PROXYHEADER, CURLOPTTYPE_SLISTPOINT, 228), + + /* Pass in a bitmask of "header options" */ + CURLOPT(CURLOPT_HEADEROPT, CURLOPTTYPE_VALUES, 229), + + /* The public key in DER form used to validate the peer public key + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 230), + + /* Path to Unix domain socket */ + CURLOPT(CURLOPT_UNIX_SOCKET_PATH, CURLOPTTYPE_STRINGPOINT, 231), + + /* Set if we should verify the certificate status. */ + CURLOPT(CURLOPT_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 232), + + /* Set if we should enable TLS false start. */ + CURLOPT(CURLOPT_SSL_FALSESTART, CURLOPTTYPE_LONG, 233), + + /* Do not squash dot-dot sequences */ + CURLOPT(CURLOPT_PATH_AS_IS, CURLOPTTYPE_LONG, 234), + + /* Proxy Service Name */ + CURLOPT(CURLOPT_PROXY_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 235), + + /* Service Name */ + CURLOPT(CURLOPT_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 236), + + /* Wait/don't wait for pipe/mutex to clarify */ + CURLOPT(CURLOPT_PIPEWAIT, CURLOPTTYPE_LONG, 237), + + /* Set the protocol used when curl is given a URL without a protocol */ + CURLOPT(CURLOPT_DEFAULT_PROTOCOL, CURLOPTTYPE_STRINGPOINT, 238), + + /* Set stream weight, 1 - 256 (default is 16) */ + CURLOPT(CURLOPT_STREAM_WEIGHT, CURLOPTTYPE_LONG, 239), + + /* Set stream dependency on another CURL handle */ + CURLOPT(CURLOPT_STREAM_DEPENDS, CURLOPTTYPE_OBJECTPOINT, 240), + + /* Set E-xclusive stream dependency on another CURL handle */ + CURLOPT(CURLOPT_STREAM_DEPENDS_E, CURLOPTTYPE_OBJECTPOINT, 241), + + /* Do not send any tftp option requests to the server */ + CURLOPT(CURLOPT_TFTP_NO_OPTIONS, CURLOPTTYPE_LONG, 242), + + /* Linked-list of host:port:connect-to-host:connect-to-port, + overrides the URL's host:port (only for the network layer) */ + CURLOPT(CURLOPT_CONNECT_TO, CURLOPTTYPE_SLISTPOINT, 243), + + /* Set TCP Fast Open */ + CURLOPT(CURLOPT_TCP_FASTOPEN, CURLOPTTYPE_LONG, 244), + + /* Continue to send data if the server responds early with an + * HTTP status code >= 300 */ + CURLOPT(CURLOPT_KEEP_SENDING_ON_ERROR, CURLOPTTYPE_LONG, 245), + + /* The CApath or CAfile used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAINFO, CURLOPTTYPE_STRINGPOINT, 246), + + /* The CApath directory used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAPATH, CURLOPTTYPE_STRINGPOINT, 247), + + /* Set if we should verify the proxy in ssl handshake, + set 1 to verify. */ + CURLOPT(CURLOPT_PROXY_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 248), + + /* Set if we should verify the Common name from the proxy certificate in ssl + * handshake, set 1 to check existence, 2 to ensure that it matches + * the provided hostname. */ + CURLOPT(CURLOPT_PROXY_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 249), + + /* What version to specifically try to use for proxy. + See CURL_SSLVERSION defines below. */ + CURLOPT(CURLOPT_PROXY_SSLVERSION, CURLOPTTYPE_VALUES, 250), + + /* Set a username for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 251), + + /* Set a password for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 252), + + /* Set authentication type for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 253), + + /* name of the file keeping your private SSL-certificate for proxy */ + CURLOPT(CURLOPT_PROXY_SSLCERT, CURLOPTTYPE_STRINGPOINT, 254), + + /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") for + proxy */ + CURLOPT(CURLOPT_PROXY_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 255), + + /* name of the file keeping your private SSL-key for proxy */ + CURLOPT(CURLOPT_PROXY_SSLKEY, CURLOPTTYPE_STRINGPOINT, 256), + + /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") for + proxy */ + CURLOPT(CURLOPT_PROXY_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 257), + + /* password for the SSL private key for proxy */ + CURLOPT(CURLOPT_PROXY_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 258), + + /* Specify which SSL ciphers to use for proxy */ + CURLOPT(CURLOPT_PROXY_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 259), + + /* CRL file for proxy */ + CURLOPT(CURLOPT_PROXY_CRLFILE, CURLOPTTYPE_STRINGPOINT, 260), + + /* Enable/disable specific SSL features with a bitmask for proxy, see + CURLSSLOPT_* */ + CURLOPT(CURLOPT_PROXY_SSL_OPTIONS, CURLOPTTYPE_LONG, 261), + + /* Name of pre proxy to use. */ + CURLOPT(CURLOPT_PRE_PROXY, CURLOPTTYPE_STRINGPOINT, 262), + + /* The public key in DER form used to validate the proxy public key + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 263), + + /* Path to an abstract Unix domain socket */ + CURLOPT(CURLOPT_ABSTRACT_UNIX_SOCKET, CURLOPTTYPE_STRINGPOINT, 264), + + /* Suppress proxy CONNECT response headers from user callbacks */ + CURLOPT(CURLOPT_SUPPRESS_CONNECT_HEADERS, CURLOPTTYPE_LONG, 265), + + /* The request target, instead of extracted from the URL */ + CURLOPT(CURLOPT_REQUEST_TARGET, CURLOPTTYPE_STRINGPOINT, 266), + + /* bitmask of allowed auth methods for connections to SOCKS5 proxies */ + CURLOPT(CURLOPT_SOCKS5_AUTH, CURLOPTTYPE_LONG, 267), + + /* Enable/disable SSH compression */ + CURLOPT(CURLOPT_SSH_COMPRESSION, CURLOPTTYPE_LONG, 268), + + /* Post MIME data. */ + CURLOPT(CURLOPT_MIMEPOST, CURLOPTTYPE_OBJECTPOINT, 269), + + /* Time to use with the CURLOPT_TIMECONDITION. Specified in number of + seconds since 1 Jan 1970. */ + CURLOPT(CURLOPT_TIMEVALUE_LARGE, CURLOPTTYPE_OFF_T, 270), + + /* Head start in milliseconds to give happy eyeballs. */ + CURLOPT(CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, CURLOPTTYPE_LONG, 271), + + /* Function that will be called before a resolver request is made */ + CURLOPT(CURLOPT_RESOLVER_START_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 272), + + /* User data to pass to the resolver start callback. */ + CURLOPT(CURLOPT_RESOLVER_START_DATA, CURLOPTTYPE_CBPOINT, 273), + + /* send HAProxy PROXY protocol header? */ + CURLOPT(CURLOPT_HAPROXYPROTOCOL, CURLOPTTYPE_LONG, 274), + + /* shuffle addresses before use when DNS returns multiple */ + CURLOPT(CURLOPT_DNS_SHUFFLE_ADDRESSES, CURLOPTTYPE_LONG, 275), + + /* Specify which TLS 1.3 ciphers suites to use */ + CURLOPT(CURLOPT_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 276), + CURLOPT(CURLOPT_PROXY_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 277), + + /* Disallow specifying username/login in URL. */ + CURLOPT(CURLOPT_DISALLOW_USERNAME_IN_URL, CURLOPTTYPE_LONG, 278), + + /* DNS-over-HTTPS URL */ + CURLOPT(CURLOPT_DOH_URL, CURLOPTTYPE_STRINGPOINT, 279), + + /* Preferred buffer size to use for uploads */ + CURLOPT(CURLOPT_UPLOAD_BUFFERSIZE, CURLOPTTYPE_LONG, 280), + + /* Time in ms between connection upkeep calls for long-lived connections. */ + CURLOPT(CURLOPT_UPKEEP_INTERVAL_MS, CURLOPTTYPE_LONG, 281), + + /* Specify URL using CURL URL API. */ + CURLOPT(CURLOPT_CURLU, CURLOPTTYPE_OBJECTPOINT, 282), + + /* add trailing data just after no more data is available */ + CURLOPT(CURLOPT_TRAILERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 283), + + /* pointer to be passed to HTTP_TRAILER_FUNCTION */ + CURLOPT(CURLOPT_TRAILERDATA, CURLOPTTYPE_CBPOINT, 284), + + /* set this to 1L to allow HTTP/0.9 responses or 0L to disallow */ + CURLOPT(CURLOPT_HTTP09_ALLOWED, CURLOPTTYPE_LONG, 285), + + /* alt-svc control bitmask */ + CURLOPT(CURLOPT_ALTSVC_CTRL, CURLOPTTYPE_LONG, 286), + + /* alt-svc cache file name to possibly read from/write to */ + CURLOPT(CURLOPT_ALTSVC, CURLOPTTYPE_STRINGPOINT, 287), + + /* maximum age (idle time) of a connection to consider it for reuse + * (in seconds) */ + CURLOPT(CURLOPT_MAXAGE_CONN, CURLOPTTYPE_LONG, 288), + + /* SASL authorization identity */ + CURLOPT(CURLOPT_SASL_AUTHZID, CURLOPTTYPE_STRINGPOINT, 289), + + /* allow RCPT TO command to fail for some recipients */ + CURLOPT(CURLOPT_MAIL_RCPT_ALLOWFAILS, CURLOPTTYPE_LONG, 290), + + /* the private SSL-certificate as a "blob" */ + CURLOPT(CURLOPT_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 291), + CURLOPT(CURLOPT_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 292), + CURLOPT(CURLOPT_PROXY_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 293), + CURLOPT(CURLOPT_PROXY_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 294), + CURLOPT(CURLOPT_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 295), + + /* Issuer certificate for proxy */ + CURLOPT(CURLOPT_PROXY_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 296), + CURLOPT(CURLOPT_PROXY_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 297), + + /* the EC curves requested by the TLS client (RFC 8422, 5.1); + * OpenSSL support via 'set_groups'/'set_curves': + * https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set1_groups.html + */ + CURLOPT(CURLOPT_SSL_EC_CURVES, CURLOPTTYPE_STRINGPOINT, 298), + + /* HSTS bitmask */ + CURLOPT(CURLOPT_HSTS_CTRL, CURLOPTTYPE_LONG, 299), + /* HSTS file name */ + CURLOPT(CURLOPT_HSTS, CURLOPTTYPE_STRINGPOINT, 300), + + /* HSTS read callback */ + CURLOPT(CURLOPT_HSTSREADFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 301), + CURLOPT(CURLOPT_HSTSREADDATA, CURLOPTTYPE_CBPOINT, 302), + + /* HSTS write callback */ + CURLOPT(CURLOPT_HSTSWRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 303), + CURLOPT(CURLOPT_HSTSWRITEDATA, CURLOPTTYPE_CBPOINT, 304), + + /* Parameters for V4 signature */ + CURLOPT(CURLOPT_AWS_SIGV4, CURLOPTTYPE_STRINGPOINT, 305), + + /* Same as CURLOPT_SSL_VERIFYPEER but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 306), + + /* Same as CURLOPT_SSL_VERIFYHOST but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 307), + + /* Same as CURLOPT_SSL_VERIFYSTATUS but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 308), + + /* The CA certificates as "blob" used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAINFO_BLOB, CURLOPTTYPE_BLOB, 309), + + /* The CA certificates as "blob" used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAINFO_BLOB, CURLOPTTYPE_BLOB, 310), + + /* used by scp/sftp to verify the host's public key */ + CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256, CURLOPTTYPE_STRINGPOINT, 311), + + /* Function that will be called immediately before the initial request + is made on a connection (after any protocol negotiation step). */ + CURLOPT(CURLOPT_PREREQFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 312), + + /* Data passed to the CURLOPT_PREREQFUNCTION callback */ + CURLOPT(CURLOPT_PREREQDATA, CURLOPTTYPE_CBPOINT, 313), + + /* maximum age (since creation) of a connection to consider it for reuse + * (in seconds) */ + CURLOPT(CURLOPT_MAXLIFETIME_CONN, CURLOPTTYPE_LONG, 314), + + /* Set MIME option flags. */ + CURLOPT(CURLOPT_MIME_OPTIONS, CURLOPTTYPE_LONG, 315), + + /* set the SSH host key callback, must point to a curl_sshkeycallback + function */ + CURLOPT(CURLOPT_SSH_HOSTKEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 316), + + /* set the SSH host key callback custom pointer */ + CURLOPT(CURLOPT_SSH_HOSTKEYDATA, CURLOPTTYPE_CBPOINT, 317), + + /* specify which protocols that are allowed to be used for the transfer, + which thus helps the app which takes URLs from users or other external + inputs and want to restrict what protocol(s) to deal with. Defaults to + all built-in protocols. */ + CURLOPT(CURLOPT_PROTOCOLS_STR, CURLOPTTYPE_STRINGPOINT, 318), + + /* specify which protocols that libcurl is allowed to follow directs to */ + CURLOPT(CURLOPT_REDIR_PROTOCOLS_STR, CURLOPTTYPE_STRINGPOINT, 319), + + /* websockets options */ + CURLOPT(CURLOPT_WS_OPTIONS, CURLOPTTYPE_LONG, 320), + + /* CA cache timeout */ + CURLOPT(CURLOPT_CA_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 321), + + /* Can leak things, gonna exit() soon */ + CURLOPT(CURLOPT_QUICK_EXIT, CURLOPTTYPE_LONG, 322), + + /* set a specific client IP for HAProxy PROXY protocol header? */ + CURLOPT(CURLOPT_HAPROXY_CLIENT_IP, CURLOPTTYPE_STRINGPOINT, 323), + + CURLOPT_LASTENTRY /* the last unused */ +} CURLoption; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2011 */ + +/* This was added in version 7.19.1 */ +#define CURLOPT_POST301 CURLOPT_POSTREDIR + +/* These are scheduled to disappear by 2009 */ + +/* The following were added in 7.17.0 */ +#define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD +#define CURLOPT_FTPAPPEND CURLOPT_APPEND +#define CURLOPT_FTPLISTONLY CURLOPT_DIRLISTONLY +#define CURLOPT_FTP_SSL CURLOPT_USE_SSL + +/* The following were added earlier */ + +#define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD +#define CURLOPT_KRB4LEVEL CURLOPT_KRBLEVEL + +/* */ +#define CURLOPT_FTP_RESPONSE_TIMEOUT CURLOPT_SERVER_RESPONSE_TIMEOUT + +/* Added in 8.2.0 */ +#define CURLOPT_MAIL_RCPT_ALLLOWFAILS CURLOPT_MAIL_RCPT_ALLOWFAILS + +#else +/* This is set if CURL_NO_OLDIES is defined at compile-time */ +#undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */ +#endif + + + /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host + name resolves addresses using more than one IP protocol version, this + option might be handy to force libcurl to use a specific IP version. */ +#define CURL_IPRESOLVE_WHATEVER 0 /* default, uses addresses to all IP + versions that your system allows */ +#define CURL_IPRESOLVE_V4 1 /* uses only IPv4 addresses/connections */ +#define CURL_IPRESOLVE_V6 2 /* uses only IPv6 addresses/connections */ + + /* Convenient "aliases" */ +#define CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER + + /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ +enum { + CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd + like the library to choose the best possible + for us! */ + CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ + CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ + CURL_HTTP_VERSION_2_0, /* please use HTTP 2 in the request */ + CURL_HTTP_VERSION_2TLS, /* use version 2 for HTTPS, version 1.1 for HTTP */ + CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE, /* please use HTTP 2 without HTTP/1.1 + Upgrade */ + CURL_HTTP_VERSION_3 = 30, /* Use HTTP/3, fallback to HTTP/2 or HTTP/1 if + needed. For HTTPS only. For HTTP, this option + makes libcurl return error. */ + CURL_HTTP_VERSION_3ONLY = 31, /* Use HTTP/3 without fallback. For HTTPS + only. For HTTP, this makes libcurl + return error. */ + + CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */ +}; + +/* Convenience definition simple because the name of the version is HTTP/2 and + not 2.0. The 2_0 version of the enum name was set while the version was + still planned to be 2.0 and we stick to it for compatibility. */ +#define CURL_HTTP_VERSION_2 CURL_HTTP_VERSION_2_0 + +/* + * Public API enums for RTSP requests + */ +enum { + CURL_RTSPREQ_NONE, /* first in list */ + CURL_RTSPREQ_OPTIONS, + CURL_RTSPREQ_DESCRIBE, + CURL_RTSPREQ_ANNOUNCE, + CURL_RTSPREQ_SETUP, + CURL_RTSPREQ_PLAY, + CURL_RTSPREQ_PAUSE, + CURL_RTSPREQ_TEARDOWN, + CURL_RTSPREQ_GET_PARAMETER, + CURL_RTSPREQ_SET_PARAMETER, + CURL_RTSPREQ_RECORD, + CURL_RTSPREQ_RECEIVE, + CURL_RTSPREQ_LAST /* last in list */ +}; + + /* These enums are for use with the CURLOPT_NETRC option. */ +enum CURL_NETRC_OPTION { + CURL_NETRC_IGNORED, /* The .netrc will never be read. + * This is the default. */ + CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred + * to one in the .netrc. */ + CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. + * Unless one is set programmatically, the .netrc + * will be queried. */ + CURL_NETRC_LAST +}; + +enum { + CURL_SSLVERSION_DEFAULT, + CURL_SSLVERSION_TLSv1, /* TLS 1.x */ + CURL_SSLVERSION_SSLv2, + CURL_SSLVERSION_SSLv3, + CURL_SSLVERSION_TLSv1_0, + CURL_SSLVERSION_TLSv1_1, + CURL_SSLVERSION_TLSv1_2, + CURL_SSLVERSION_TLSv1_3, + + CURL_SSLVERSION_LAST /* never use, keep last */ +}; + +enum { + CURL_SSLVERSION_MAX_NONE = 0, + CURL_SSLVERSION_MAX_DEFAULT = (CURL_SSLVERSION_TLSv1 << 16), + CURL_SSLVERSION_MAX_TLSv1_0 = (CURL_SSLVERSION_TLSv1_0 << 16), + CURL_SSLVERSION_MAX_TLSv1_1 = (CURL_SSLVERSION_TLSv1_1 << 16), + CURL_SSLVERSION_MAX_TLSv1_2 = (CURL_SSLVERSION_TLSv1_2 << 16), + CURL_SSLVERSION_MAX_TLSv1_3 = (CURL_SSLVERSION_TLSv1_3 << 16), + + /* never use, keep last */ + CURL_SSLVERSION_MAX_LAST = (CURL_SSLVERSION_LAST << 16) +}; + +enum CURL_TLSAUTH { + CURL_TLSAUTH_NONE, + CURL_TLSAUTH_SRP, + CURL_TLSAUTH_LAST /* never use, keep last */ +}; + +/* symbols to use with CURLOPT_POSTREDIR. + CURL_REDIR_POST_301, CURL_REDIR_POST_302 and CURL_REDIR_POST_303 + can be bitwise ORed so that CURL_REDIR_POST_301 | CURL_REDIR_POST_302 + | CURL_REDIR_POST_303 == CURL_REDIR_POST_ALL */ + +#define CURL_REDIR_GET_ALL 0 +#define CURL_REDIR_POST_301 1 +#define CURL_REDIR_POST_302 2 +#define CURL_REDIR_POST_303 4 +#define CURL_REDIR_POST_ALL \ + (CURL_REDIR_POST_301|CURL_REDIR_POST_302|CURL_REDIR_POST_303) + +typedef enum { + CURL_TIMECOND_NONE, + + CURL_TIMECOND_IFMODSINCE, + CURL_TIMECOND_IFUNMODSINCE, + CURL_TIMECOND_LASTMOD, + + CURL_TIMECOND_LAST +} curl_TimeCond; + +/* Special size_t value signaling a null-terminated string. */ +#define CURL_ZERO_TERMINATED ((size_t) -1) + +/* curl_strequal() and curl_strnequal() are subject for removal in a future + release */ +CURL_EXTERN int curl_strequal(const char *s1, const char *s2); +CURL_EXTERN int curl_strnequal(const char *s1, const char *s2, size_t n); + +/* Mime/form handling support. */ +typedef struct curl_mime curl_mime; /* Mime context. */ +typedef struct curl_mimepart curl_mimepart; /* Mime part context. */ + +/* CURLMIMEOPT_ defines are for the CURLOPT_MIME_OPTIONS option. */ +#define CURLMIMEOPT_FORMESCAPE (1<<0) /* Use backslash-escaping for forms. */ + +/* + * NAME curl_mime_init() + * + * DESCRIPTION + * + * Create a mime context and return its handle. The easy parameter is the + * target handle. + */ +CURL_EXTERN curl_mime *curl_mime_init(CURL *easy); + +/* + * NAME curl_mime_free() + * + * DESCRIPTION + * + * release a mime handle and its substructures. + */ +CURL_EXTERN void curl_mime_free(curl_mime *mime); + +/* + * NAME curl_mime_addpart() + * + * DESCRIPTION + * + * Append a new empty part to the given mime context and return a handle to + * the created part. + */ +CURL_EXTERN curl_mimepart *curl_mime_addpart(curl_mime *mime); + +/* + * NAME curl_mime_name() + * + * DESCRIPTION + * + * Set mime/form part name. + */ +CURL_EXTERN CURLcode curl_mime_name(curl_mimepart *part, const char *name); + +/* + * NAME curl_mime_filename() + * + * DESCRIPTION + * + * Set mime part remote file name. + */ +CURL_EXTERN CURLcode curl_mime_filename(curl_mimepart *part, + const char *filename); + +/* + * NAME curl_mime_type() + * + * DESCRIPTION + * + * Set mime part type. + */ +CURL_EXTERN CURLcode curl_mime_type(curl_mimepart *part, const char *mimetype); + +/* + * NAME curl_mime_encoder() + * + * DESCRIPTION + * + * Set mime data transfer encoder. + */ +CURL_EXTERN CURLcode curl_mime_encoder(curl_mimepart *part, + const char *encoding); + +/* + * NAME curl_mime_data() + * + * DESCRIPTION + * + * Set mime part data source from memory data, + */ +CURL_EXTERN CURLcode curl_mime_data(curl_mimepart *part, + const char *data, size_t datasize); + +/* + * NAME curl_mime_filedata() + * + * DESCRIPTION + * + * Set mime part data source from named file. + */ +CURL_EXTERN CURLcode curl_mime_filedata(curl_mimepart *part, + const char *filename); + +/* + * NAME curl_mime_data_cb() + * + * DESCRIPTION + * + * Set mime part data source from callback function. + */ +CURL_EXTERN CURLcode curl_mime_data_cb(curl_mimepart *part, + curl_off_t datasize, + curl_read_callback readfunc, + curl_seek_callback seekfunc, + curl_free_callback freefunc, + void *arg); + +/* + * NAME curl_mime_subparts() + * + * DESCRIPTION + * + * Set mime part data source from subparts. + */ +CURL_EXTERN CURLcode curl_mime_subparts(curl_mimepart *part, + curl_mime *subparts); +/* + * NAME curl_mime_headers() + * + * DESCRIPTION + * + * Set mime part headers. + */ +CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part, + struct curl_slist *headers, + int take_ownership); + +typedef enum { + /********* the first one is unused ************/ + CURLFORM_NOTHING CURL_DEPRECATED(7.56.0, ""), + CURLFORM_COPYNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), + CURLFORM_PTRNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), + CURLFORM_NAMELENGTH CURL_DEPRECATED(7.56.0, ""), + CURLFORM_COPYCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_PTRCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_CONTENTSLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_FILECONTENT CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), + CURLFORM_ARRAY CURL_DEPRECATED(7.56.0, ""), + CURLFORM_OBSOLETE, + CURLFORM_FILE CURL_DEPRECATED(7.56.0, "Use curl_mime_filedata()"), + + CURLFORM_BUFFER CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), + CURLFORM_BUFFERPTR CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_BUFFERLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + + CURLFORM_CONTENTTYPE CURL_DEPRECATED(7.56.0, "Use curl_mime_type()"), + CURLFORM_CONTENTHEADER CURL_DEPRECATED(7.56.0, "Use curl_mime_headers()"), + CURLFORM_FILENAME CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), + CURLFORM_END, + CURLFORM_OBSOLETE2, + + CURLFORM_STREAM CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), + CURLFORM_CONTENTLEN /* added in 7.46.0, provide a curl_off_t length */ + CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + + CURLFORM_LASTENTRY /* the last unused */ +} CURLformoption; + +/* structure to be used as parameter for CURLFORM_ARRAY */ +struct curl_forms { + CURLformoption option; + const char *value; +}; + +/* use this for multipart formpost building */ +/* Returns code for curl_formadd() + * + * Returns: + * CURL_FORMADD_OK on success + * CURL_FORMADD_MEMORY if the FormInfo allocation fails + * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form + * CURL_FORMADD_NULL if a null pointer was given for a char + * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed + * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used + * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) + * CURL_FORMADD_MEMORY if a curl_httppost struct cannot be allocated + * CURL_FORMADD_MEMORY if some allocation for string copying failed. + * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array + * + ***************************************************************************/ +typedef enum { + CURL_FORMADD_OK CURL_DEPRECATED(7.56.0, ""), /* 1st, no error */ + + CURL_FORMADD_MEMORY CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_OPTION_TWICE CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_NULL CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_UNKNOWN_OPTION CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_INCOMPLETE CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_ILLEGAL_ARRAY CURL_DEPRECATED(7.56.0, ""), + /* libcurl was built with form api disabled */ + CURL_FORMADD_DISABLED CURL_DEPRECATED(7.56.0, ""), + + CURL_FORMADD_LAST /* last */ +} CURLFORMcode; + +/* + * NAME curl_formadd() + * + * DESCRIPTION + * + * Pretty advanced function for building multi-part formposts. Each invoke + * adds one part that together construct a full post. Then use + * CURLOPT_HTTPPOST to send it off to libcurl. + */ +CURL_EXTERN CURLFORMcode CURL_DEPRECATED(7.56.0, "Use curl_mime_init()") +curl_formadd(struct curl_httppost **httppost, + struct curl_httppost **last_post, + ...); + +/* + * callback function for curl_formget() + * The void *arg pointer will be the one passed as second argument to + * curl_formget(). + * The character buffer passed to it must not be freed. + * Should return the buffer length passed to it as the argument "len" on + * success. + */ +typedef size_t (*curl_formget_callback)(void *arg, const char *buf, + size_t len); + +/* + * NAME curl_formget() + * + * DESCRIPTION + * + * Serialize a curl_httppost struct built with curl_formadd(). + * Accepts a void pointer as second argument which will be passed to + * the curl_formget_callback function. + * Returns 0 on success. + */ +CURL_EXTERN int CURL_DEPRECATED(7.56.0, "") +curl_formget(struct curl_httppost *form, void *arg, + curl_formget_callback append); +/* + * NAME curl_formfree() + * + * DESCRIPTION + * + * Free a multipart formpost previously built with curl_formadd(). + */ +CURL_EXTERN void CURL_DEPRECATED(7.56.0, "Use curl_mime_free()") +curl_formfree(struct curl_httppost *form); + +/* + * NAME curl_getenv() + * + * DESCRIPTION + * + * Returns a malloc()'ed string that MUST be curl_free()ed after usage is + * complete. DEPRECATED - see lib/README.curlx + */ +CURL_EXTERN char *curl_getenv(const char *variable); + +/* + * NAME curl_version() + * + * DESCRIPTION + * + * Returns a static ascii string of the libcurl version. + */ +CURL_EXTERN char *curl_version(void); + +/* + * NAME curl_easy_escape() + * + * DESCRIPTION + * + * Escapes URL strings (converts all letters consider illegal in URLs to their + * %XX versions). This function returns a new allocated string or NULL if an + * error occurred. + */ +CURL_EXTERN char *curl_easy_escape(CURL *handle, + const char *string, + int length); + +/* the previous version: */ +CURL_EXTERN char *curl_escape(const char *string, + int length); + + +/* + * NAME curl_easy_unescape() + * + * DESCRIPTION + * + * Unescapes URL encoding in strings (converts all %XX codes to their 8bit + * versions). This function returns a new allocated string or NULL if an error + * occurred. + * Conversion Note: On non-ASCII platforms the ASCII %XX codes are + * converted into the host encoding. + */ +CURL_EXTERN char *curl_easy_unescape(CURL *handle, + const char *string, + int length, + int *outlength); + +/* the previous version */ +CURL_EXTERN char *curl_unescape(const char *string, + int length); + +/* + * NAME curl_free() + * + * DESCRIPTION + * + * Provided for de-allocation in the same translation unit that did the + * allocation. Added in libcurl 7.10 + */ +CURL_EXTERN void curl_free(void *p); + +/* + * NAME curl_global_init() + * + * DESCRIPTION + * + * curl_global_init() should be invoked exactly once for each application that + * uses libcurl and before any call of other libcurl functions. + + * This function is thread-safe if CURL_VERSION_THREADSAFE is set in the + * curl_version_info_data.features flag (fetch by curl_version_info()). + + */ +CURL_EXTERN CURLcode curl_global_init(long flags); + +/* + * NAME curl_global_init_mem() + * + * DESCRIPTION + * + * curl_global_init() or curl_global_init_mem() should be invoked exactly once + * for each application that uses libcurl. This function can be used to + * initialize libcurl and set user defined memory management callback + * functions. Users can implement memory management routines to check for + * memory leaks, check for mis-use of the curl library etc. User registered + * callback routines will be invoked by this library instead of the system + * memory management routines like malloc, free etc. + */ +CURL_EXTERN CURLcode curl_global_init_mem(long flags, + curl_malloc_callback m, + curl_free_callback f, + curl_realloc_callback r, + curl_strdup_callback s, + curl_calloc_callback c); + +/* + * NAME curl_global_cleanup() + * + * DESCRIPTION + * + * curl_global_cleanup() should be invoked exactly once for each application + * that uses libcurl + */ +CURL_EXTERN void curl_global_cleanup(void); + +/* + * NAME curl_global_trace() + * + * DESCRIPTION + * + * curl_global_trace() can be invoked at application start to + * configure which components in curl should participate in tracing. + + * This function is thread-safe if CURL_VERSION_THREADSAFE is set in the + * curl_version_info_data.features flag (fetch by curl_version_info()). + + */ +CURL_EXTERN CURLcode curl_global_trace(const char *config); + +/* linked-list structure for the CURLOPT_QUOTE option (and other) */ +struct curl_slist { + char *data; + struct curl_slist *next; +}; + +/* + * NAME curl_global_sslset() + * + * DESCRIPTION + * + * When built with multiple SSL backends, curl_global_sslset() allows to + * choose one. This function can only be called once, and it must be called + * *before* curl_global_init(). + * + * The backend can be identified by the id (e.g. CURLSSLBACKEND_OPENSSL). The + * backend can also be specified via the name parameter (passing -1 as id). + * If both id and name are specified, the name will be ignored. If neither id + * nor name are specified, the function will fail with + * CURLSSLSET_UNKNOWN_BACKEND and set the "avail" pointer to the + * NULL-terminated list of available backends. + * + * Upon success, the function returns CURLSSLSET_OK. + * + * If the specified SSL backend is not available, the function returns + * CURLSSLSET_UNKNOWN_BACKEND and sets the "avail" pointer to a NULL-terminated + * list of available SSL backends. + * + * The SSL backend can be set only once. If it has already been set, a + * subsequent attempt to change it will result in a CURLSSLSET_TOO_LATE. + */ + +struct curl_ssl_backend { + curl_sslbackend id; + const char *name; +}; +typedef struct curl_ssl_backend curl_ssl_backend; + +typedef enum { + CURLSSLSET_OK = 0, + CURLSSLSET_UNKNOWN_BACKEND, + CURLSSLSET_TOO_LATE, + CURLSSLSET_NO_BACKENDS /* libcurl was built without any SSL support */ +} CURLsslset; + +CURL_EXTERN CURLsslset curl_global_sslset(curl_sslbackend id, const char *name, + const curl_ssl_backend ***avail); + +/* + * NAME curl_slist_append() + * + * DESCRIPTION + * + * Appends a string to a linked list. If no list exists, it will be created + * first. Returns the new list, after appending. + */ +CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *list, + const char *data); + +/* + * NAME curl_slist_free_all() + * + * DESCRIPTION + * + * free a previously built curl_slist. + */ +CURL_EXTERN void curl_slist_free_all(struct curl_slist *list); + +/* + * NAME curl_getdate() + * + * DESCRIPTION + * + * Returns the time, in seconds since 1 Jan 1970 of the time string given in + * the first argument. The time argument in the second parameter is unused + * and should be set to NULL. + */ +CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused); + +/* info about the certificate chain, for SSL backends that support it. Asked + for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */ +struct curl_certinfo { + int num_of_certs; /* number of certificates with information */ + struct curl_slist **certinfo; /* for each index in this array, there's a + linked list with textual information for a + certificate in the format "name:content". + eg "Subject:foo", "Issuer:bar", etc. */ +}; + +/* Information about the SSL library used and the respective internal SSL + handle, which can be used to obtain further information regarding the + connection. Asked for with CURLINFO_TLS_SSL_PTR or CURLINFO_TLS_SESSION. */ +struct curl_tlssessioninfo { + curl_sslbackend backend; + void *internals; +}; + +#define CURLINFO_STRING 0x100000 +#define CURLINFO_LONG 0x200000 +#define CURLINFO_DOUBLE 0x300000 +#define CURLINFO_SLIST 0x400000 +#define CURLINFO_PTR 0x400000 /* same as SLIST */ +#define CURLINFO_SOCKET 0x500000 +#define CURLINFO_OFF_T 0x600000 +#define CURLINFO_MASK 0x0fffff +#define CURLINFO_TYPEMASK 0xf00000 + +typedef enum { + CURLINFO_NONE, /* first, never use this */ + CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, + CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, + CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, + CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, + CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, + CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6, + CURLINFO_SIZE_UPLOAD CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_UPLOAD_T") + = CURLINFO_DOUBLE + 7, + CURLINFO_SIZE_UPLOAD_T = CURLINFO_OFF_T + 7, + CURLINFO_SIZE_DOWNLOAD + CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_DOWNLOAD_T") + = CURLINFO_DOUBLE + 8, + CURLINFO_SIZE_DOWNLOAD_T = CURLINFO_OFF_T + 8, + CURLINFO_SPEED_DOWNLOAD + CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_DOWNLOAD_T") + = CURLINFO_DOUBLE + 9, + CURLINFO_SPEED_DOWNLOAD_T = CURLINFO_OFF_T + 9, + CURLINFO_SPEED_UPLOAD + CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_UPLOAD_T") + = CURLINFO_DOUBLE + 10, + CURLINFO_SPEED_UPLOAD_T = CURLINFO_OFF_T + 10, + CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, + CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, + CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, + CURLINFO_FILETIME = CURLINFO_LONG + 14, + CURLINFO_FILETIME_T = CURLINFO_OFF_T + 14, + CURLINFO_CONTENT_LENGTH_DOWNLOAD + CURL_DEPRECATED(7.55.0, + "Use CURLINFO_CONTENT_LENGTH_DOWNLOAD_T") + = CURLINFO_DOUBLE + 15, + CURLINFO_CONTENT_LENGTH_DOWNLOAD_T = CURLINFO_OFF_T + 15, + CURLINFO_CONTENT_LENGTH_UPLOAD + CURL_DEPRECATED(7.55.0, + "Use CURLINFO_CONTENT_LENGTH_UPLOAD_T") + = CURLINFO_DOUBLE + 16, + CURLINFO_CONTENT_LENGTH_UPLOAD_T = CURLINFO_OFF_T + 16, + CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, + CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, + CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, + CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, + CURLINFO_PRIVATE = CURLINFO_STRING + 21, + CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, + CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, + CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, + CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, + CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, + CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, + CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, + CURLINFO_LASTSOCKET CURL_DEPRECATED(7.45.0, "Use CURLINFO_ACTIVESOCKET") + = CURLINFO_LONG + 29, + CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, + CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31, + CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32, + CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33, + CURLINFO_CERTINFO = CURLINFO_PTR + 34, + CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35, + CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36, + CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37, + CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38, + CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39, + CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40, + CURLINFO_LOCAL_IP = CURLINFO_STRING + 41, + CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42, + CURLINFO_TLS_SESSION CURL_DEPRECATED(7.48.0, "Use CURLINFO_TLS_SSL_PTR") + = CURLINFO_PTR + 43, + CURLINFO_ACTIVESOCKET = CURLINFO_SOCKET + 44, + CURLINFO_TLS_SSL_PTR = CURLINFO_PTR + 45, + CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46, + CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47, + CURLINFO_PROTOCOL CURL_DEPRECATED(7.85.0, "Use CURLINFO_SCHEME") + = CURLINFO_LONG + 48, + CURLINFO_SCHEME = CURLINFO_STRING + 49, + CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50, + CURLINFO_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51, + CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52, + CURLINFO_PRETRANSFER_TIME_T = CURLINFO_OFF_T + 53, + CURLINFO_STARTTRANSFER_TIME_T = CURLINFO_OFF_T + 54, + CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55, + CURLINFO_APPCONNECT_TIME_T = CURLINFO_OFF_T + 56, + CURLINFO_RETRY_AFTER = CURLINFO_OFF_T + 57, + CURLINFO_EFFECTIVE_METHOD = CURLINFO_STRING + 58, + CURLINFO_PROXY_ERROR = CURLINFO_LONG + 59, + CURLINFO_REFERER = CURLINFO_STRING + 60, + CURLINFO_CAINFO = CURLINFO_STRING + 61, + CURLINFO_CAPATH = CURLINFO_STRING + 62, + CURLINFO_XFER_ID = CURLINFO_OFF_T + 63, + CURLINFO_CONN_ID = CURLINFO_OFF_T + 64, + CURLINFO_LASTONE = 64 +} CURLINFO; + +/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as + CURLINFO_HTTP_CODE */ +#define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE + +typedef enum { + CURLCLOSEPOLICY_NONE, /* first, never use this */ + + CURLCLOSEPOLICY_OLDEST, + CURLCLOSEPOLICY_LEAST_RECENTLY_USED, + CURLCLOSEPOLICY_LEAST_TRAFFIC, + CURLCLOSEPOLICY_SLOWEST, + CURLCLOSEPOLICY_CALLBACK, + + CURLCLOSEPOLICY_LAST /* last, never use this */ +} curl_closepolicy; + +#define CURL_GLOBAL_SSL (1<<0) /* no purpose since 7.57.0 */ +#define CURL_GLOBAL_WIN32 (1<<1) +#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) +#define CURL_GLOBAL_NOTHING 0 +#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL +#define CURL_GLOBAL_ACK_EINTR (1<<2) + + +/***************************************************************************** + * Setup defines, protos etc for the sharing stuff. + */ + +/* Different data locks for a single share */ +typedef enum { + CURL_LOCK_DATA_NONE = 0, + /* CURL_LOCK_DATA_SHARE is used internally to say that + * the locking is just made to change the internal state of the share + * itself. + */ + CURL_LOCK_DATA_SHARE, + CURL_LOCK_DATA_COOKIE, + CURL_LOCK_DATA_DNS, + CURL_LOCK_DATA_SSL_SESSION, + CURL_LOCK_DATA_CONNECT, + CURL_LOCK_DATA_PSL, + CURL_LOCK_DATA_HSTS, + CURL_LOCK_DATA_LAST +} curl_lock_data; + +/* Different lock access types */ +typedef enum { + CURL_LOCK_ACCESS_NONE = 0, /* unspecified action */ + CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */ + CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */ + CURL_LOCK_ACCESS_LAST /* never use */ +} curl_lock_access; + +typedef void (*curl_lock_function)(CURL *handle, + curl_lock_data data, + curl_lock_access locktype, + void *userptr); +typedef void (*curl_unlock_function)(CURL *handle, + curl_lock_data data, + void *userptr); + + +typedef enum { + CURLSHE_OK, /* all is fine */ + CURLSHE_BAD_OPTION, /* 1 */ + CURLSHE_IN_USE, /* 2 */ + CURLSHE_INVALID, /* 3 */ + CURLSHE_NOMEM, /* 4 out of memory */ + CURLSHE_NOT_BUILT_IN, /* 5 feature not present in lib */ + CURLSHE_LAST /* never use */ +} CURLSHcode; + +typedef enum { + CURLSHOPT_NONE, /* don't use */ + CURLSHOPT_SHARE, /* specify a data type to share */ + CURLSHOPT_UNSHARE, /* specify which data type to stop sharing */ + CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */ + CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */ + CURLSHOPT_USERDATA, /* pass in a user data pointer used in the lock/unlock + callback functions */ + CURLSHOPT_LAST /* never use */ +} CURLSHoption; + +CURL_EXTERN CURLSH *curl_share_init(void); +CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, + ...); +CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *share); + +/**************************************************************************** + * Structures for querying information about the curl library at runtime. + */ + +typedef enum { + CURLVERSION_FIRST, + CURLVERSION_SECOND, + CURLVERSION_THIRD, + CURLVERSION_FOURTH, + CURLVERSION_FIFTH, + CURLVERSION_SIXTH, + CURLVERSION_SEVENTH, + CURLVERSION_EIGHTH, + CURLVERSION_NINTH, + CURLVERSION_TENTH, + CURLVERSION_ELEVENTH, + CURLVERSION_LAST /* never actually use this */ +} CURLversion; + +/* The 'CURLVERSION_NOW' is the symbolic name meant to be used by + basically all programs ever that want to get version information. It is + meant to be a built-in version number for what kind of struct the caller + expects. If the struct ever changes, we redefine the NOW to another enum + from above. */ +#define CURLVERSION_NOW CURLVERSION_ELEVENTH + +struct curl_version_info_data { + CURLversion age; /* age of the returned struct */ + const char *version; /* LIBCURL_VERSION */ + unsigned int version_num; /* LIBCURL_VERSION_NUM */ + const char *host; /* OS/host/cpu/machine when configured */ + int features; /* bitmask, see defines below */ + const char *ssl_version; /* human readable string */ + long ssl_version_num; /* not used anymore, always 0 */ + const char *libz_version; /* human readable string */ + /* protocols is terminated by an entry with a NULL protoname */ + const char * const *protocols; + + /* The fields below this were added in CURLVERSION_SECOND */ + const char *ares; + int ares_num; + + /* This field was added in CURLVERSION_THIRD */ + const char *libidn; + + /* These field were added in CURLVERSION_FOURTH */ + + /* Same as '_libiconv_version' if built with HAVE_ICONV */ + int iconv_ver_num; + + const char *libssh_version; /* human readable string */ + + /* These fields were added in CURLVERSION_FIFTH */ + unsigned int brotli_ver_num; /* Numeric Brotli version + (MAJOR << 24) | (MINOR << 12) | PATCH */ + const char *brotli_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_SIXTH */ + unsigned int nghttp2_ver_num; /* Numeric nghttp2 version + (MAJOR << 16) | (MINOR << 8) | PATCH */ + const char *nghttp2_version; /* human readable string. */ + const char *quic_version; /* human readable quic (+ HTTP/3) library + + version or NULL */ + + /* These fields were added in CURLVERSION_SEVENTH */ + const char *cainfo; /* the built-in default CURLOPT_CAINFO, might + be NULL */ + const char *capath; /* the built-in default CURLOPT_CAPATH, might + be NULL */ + + /* These fields were added in CURLVERSION_EIGHTH */ + unsigned int zstd_ver_num; /* Numeric Zstd version + (MAJOR << 24) | (MINOR << 12) | PATCH */ + const char *zstd_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_NINTH */ + const char *hyper_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_TENTH */ + const char *gsasl_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_ELEVENTH */ + /* feature_names is terminated by an entry with a NULL feature name */ + const char * const *feature_names; +}; +typedef struct curl_version_info_data curl_version_info_data; + +#define CURL_VERSION_IPV6 (1<<0) /* IPv6-enabled */ +#define CURL_VERSION_KERBEROS4 (1<<1) /* Kerberos V4 auth is supported + (deprecated) */ +#define CURL_VERSION_SSL (1<<2) /* SSL options are present */ +#define CURL_VERSION_LIBZ (1<<3) /* libz features are present */ +#define CURL_VERSION_NTLM (1<<4) /* NTLM auth is supported */ +#define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth is supported + (deprecated) */ +#define CURL_VERSION_DEBUG (1<<6) /* Built with debug capabilities */ +#define CURL_VERSION_ASYNCHDNS (1<<7) /* Asynchronous DNS resolves */ +#define CURL_VERSION_SPNEGO (1<<8) /* SPNEGO auth is supported */ +#define CURL_VERSION_LARGEFILE (1<<9) /* Supports files larger than 2GB */ +#define CURL_VERSION_IDN (1<<10) /* Internationized Domain Names are + supported */ +#define CURL_VERSION_SSPI (1<<11) /* Built against Windows SSPI */ +#define CURL_VERSION_CONV (1<<12) /* Character conversions supported */ +#define CURL_VERSION_CURLDEBUG (1<<13) /* Debug memory tracking supported */ +#define CURL_VERSION_TLSAUTH_SRP (1<<14) /* TLS-SRP auth is supported */ +#define CURL_VERSION_NTLM_WB (1<<15) /* NTLM delegation to winbind helper + is supported */ +#define CURL_VERSION_HTTP2 (1<<16) /* HTTP2 support built-in */ +#define CURL_VERSION_GSSAPI (1<<17) /* Built against a GSS-API library */ +#define CURL_VERSION_KERBEROS5 (1<<18) /* Kerberos V5 auth is supported */ +#define CURL_VERSION_UNIX_SOCKETS (1<<19) /* Unix domain sockets support */ +#define CURL_VERSION_PSL (1<<20) /* Mozilla's Public Suffix List, used + for cookie domain verification */ +#define CURL_VERSION_HTTPS_PROXY (1<<21) /* HTTPS-proxy support built-in */ +#define CURL_VERSION_MULTI_SSL (1<<22) /* Multiple SSL backends available */ +#define CURL_VERSION_BROTLI (1<<23) /* Brotli features are present. */ +#define CURL_VERSION_ALTSVC (1<<24) /* Alt-Svc handling built-in */ +#define CURL_VERSION_HTTP3 (1<<25) /* HTTP3 support built-in */ +#define CURL_VERSION_ZSTD (1<<26) /* zstd features are present */ +#define CURL_VERSION_UNICODE (1<<27) /* Unicode support on Windows */ +#define CURL_VERSION_HSTS (1<<28) /* HSTS is supported */ +#define CURL_VERSION_GSASL (1<<29) /* libgsasl is supported */ +#define CURL_VERSION_THREADSAFE (1<<30) /* libcurl API is thread-safe */ + + /* + * NAME curl_version_info() + * + * DESCRIPTION + * + * This function returns a pointer to a static copy of the version info + * struct. See above. + */ +CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion); + +/* + * NAME curl_easy_strerror() + * + * DESCRIPTION + * + * The curl_easy_strerror function may be used to turn a CURLcode value + * into the equivalent human readable error string. This is useful + * for printing meaningful error messages. + */ +CURL_EXTERN const char *curl_easy_strerror(CURLcode); + +/* + * NAME curl_share_strerror() + * + * DESCRIPTION + * + * The curl_share_strerror function may be used to turn a CURLSHcode value + * into the equivalent human readable error string. This is useful + * for printing meaningful error messages. + */ +CURL_EXTERN const char *curl_share_strerror(CURLSHcode); + +/* + * NAME curl_easy_pause() + * + * DESCRIPTION + * + * The curl_easy_pause function pauses or unpauses transfers. Select the new + * state by setting the bitmask, use the convenience defines below. + * + */ +CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask); + +#define CURLPAUSE_RECV (1<<0) +#define CURLPAUSE_RECV_CONT (0) + +#define CURLPAUSE_SEND (1<<2) +#define CURLPAUSE_SEND_CONT (0) + +#define CURLPAUSE_ALL (CURLPAUSE_RECV|CURLPAUSE_SEND) +#define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT) + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +/* unfortunately, the easy.h and multi.h include files need options and info + stuff before they can be included! */ +#include "easy.h" /* nothing in curl is fun without the easy stuff */ +#include "multi.h" +#include "urlapi.h" +#include "options.h" +#include "header.h" +#include "websockets.h" + +/* the typechecker doesn't work in C++ (yet) */ +#if defined(__GNUC__) && defined(__GNUC_MINOR__) && \ + ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && \ + !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK) +#include "typecheck-gcc.h" +#else +#if defined(__STDC__) && (__STDC__ >= 1) +/* This preprocessor magic that replaces a call with the exact same call is + only done to make sure application authors pass exactly three arguments + to these functions. */ +#define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param) +#define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg) +#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) +#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) +#endif /* __STDC__ >= 1 */ +#endif /* gcc >= 4.3 && !__cplusplus && !CURL_DISABLE_TYPECHECK */ + +#endif /* CURLINC_CURL_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/curlver.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/curlver.h new file mode 100644 index 0000000..44e6070 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/curlver.h @@ -0,0 +1,79 @@ +#ifndef CURLINC_CURLVER_H +#define CURLINC_CURLVER_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* This header file contains nothing but libcurl version info, generated by + a script at release-time. This was made its own header file in 7.11.2 */ + +/* This is the global package copyright */ +#define LIBCURL_COPYRIGHT "Daniel Stenberg, ." + +/* This is the version number of the libcurl package from which this header + file origins: */ +#define LIBCURL_VERSION "8.4.0" + +/* The numeric version number is also available "in parts" by using these + defines: */ +#define LIBCURL_VERSION_MAJOR 8 +#define LIBCURL_VERSION_MINOR 4 +#define LIBCURL_VERSION_PATCH 0 + +/* This is the numeric version of the libcurl version number, meant for easier + parsing and comparisons by programs. The LIBCURL_VERSION_NUM define will + always follow this syntax: + + 0xXXYYZZ + + Where XX, YY and ZZ are the main version, release and patch numbers in + hexadecimal (using 8 bits each). All three numbers are always represented + using two digits. 1.2 would appear as "0x010200" while version 9.11.7 + appears as "0x090b07". + + This 6-digit (24 bits) hexadecimal number does not show pre-release number, + and it is always a greater number in a more recent release. It makes + comparisons with greater than and less than work. + + Note: This define is the full hex number and _does not_ use the + CURL_VERSION_BITS() macro since curl's own configure script greps for it + and needs it to contain the full number. +*/ +#define LIBCURL_VERSION_NUM 0x080400 + +/* + * This is the date and time when the full source package was created. The + * timestamp is not stored in git, as the timestamp is properly set in the + * tarballs by the maketgz script. + * + * The format of the date follows this template: + * + * "2007-11-23" + */ +#define LIBCURL_TIMESTAMP "2023-10-11" + +#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z)) +#define CURL_AT_LEAST_VERSION(x,y,z) \ + (LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z)) + +#endif /* CURLINC_CURLVER_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/easy.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/easy.h new file mode 100644 index 0000000..1285101 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/easy.h @@ -0,0 +1,125 @@ +#ifndef CURLINC_EASY_H +#define CURLINC_EASY_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + +/* Flag bits in the curl_blob struct: */ +#define CURL_BLOB_COPY 1 /* tell libcurl to copy the data */ +#define CURL_BLOB_NOCOPY 0 /* tell libcurl to NOT copy the data */ + +struct curl_blob { + void *data; + size_t len; + unsigned int flags; /* bit 0 is defined, the rest are reserved and should be + left zeroes */ +}; + +CURL_EXTERN CURL *curl_easy_init(void); +CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...); +CURL_EXTERN CURLcode curl_easy_perform(CURL *curl); +CURL_EXTERN void curl_easy_cleanup(CURL *curl); + +/* + * NAME curl_easy_getinfo() + * + * DESCRIPTION + * + * Request internal information from the curl session with this function. + * The third argument MUST be pointing to the specific type of the used option + * which is documented in each man page of the option. The data pointed to + * will be filled in accordingly and can be relied upon only if the function + * returns CURLE_OK. This function is intended to get used *AFTER* a performed + * transfer, all results from this function are undefined until the transfer + * is completed. + */ +CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...); + + +/* + * NAME curl_easy_duphandle() + * + * DESCRIPTION + * + * Creates a new curl session handle with the same options set for the handle + * passed in. Duplicating a handle could only be a matter of cloning data and + * options, internal state info and things like persistent connections cannot + * be transferred. It is useful in multithreaded applications when you can run + * curl_easy_duphandle() for each new thread to avoid a series of identical + * curl_easy_setopt() invokes in every thread. + */ +CURL_EXTERN CURL *curl_easy_duphandle(CURL *curl); + +/* + * NAME curl_easy_reset() + * + * DESCRIPTION + * + * Re-initializes a CURL handle to the default values. This puts back the + * handle to the same state as it was in when it was just created. + * + * It does keep: live connections, the Session ID cache, the DNS cache and the + * cookies. + */ +CURL_EXTERN void curl_easy_reset(CURL *curl); + +/* + * NAME curl_easy_recv() + * + * DESCRIPTION + * + * Receives data from the connected socket. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, + size_t *n); + +/* + * NAME curl_easy_send() + * + * DESCRIPTION + * + * Sends data over the connected socket. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer, + size_t buflen, size_t *n); + + +/* + * NAME curl_easy_upkeep() + * + * DESCRIPTION + * + * Performs connection upkeep for the given session handle. + */ +CURL_EXTERN CURLcode curl_easy_upkeep(CURL *curl); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/header.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/header.h new file mode 100644 index 0000000..8df11e1 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/header.h @@ -0,0 +1,74 @@ +#ifndef CURLINC_HEADER_H +#define CURLINC_HEADER_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +struct curl_header { + char *name; /* this might not use the same case */ + char *value; + size_t amount; /* number of headers using this name */ + size_t index; /* ... of this instance, 0 or higher */ + unsigned int origin; /* see bits below */ + void *anchor; /* handle privately used by libcurl */ +}; + +/* 'origin' bits */ +#define CURLH_HEADER (1<<0) /* plain server header */ +#define CURLH_TRAILER (1<<1) /* trailers */ +#define CURLH_CONNECT (1<<2) /* CONNECT headers */ +#define CURLH_1XX (1<<3) /* 1xx headers */ +#define CURLH_PSEUDO (1<<4) /* pseudo headers */ + +typedef enum { + CURLHE_OK, + CURLHE_BADINDEX, /* header exists but not with this index */ + CURLHE_MISSING, /* no such header exists */ + CURLHE_NOHEADERS, /* no headers at all exist (yet) */ + CURLHE_NOREQUEST, /* no request with this number was used */ + CURLHE_OUT_OF_MEMORY, /* out of memory while processing */ + CURLHE_BAD_ARGUMENT, /* a function argument was not okay */ + CURLHE_NOT_BUILT_IN /* if API was disabled in the build */ +} CURLHcode; + +CURL_EXTERN CURLHcode curl_easy_header(CURL *easy, + const char *name, + size_t index, + unsigned int origin, + int request, + struct curl_header **hout); + +CURL_EXTERN struct curl_header *curl_easy_nextheader(CURL *easy, + unsigned int origin, + int request, + struct curl_header *prev); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_HEADER_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/mprintf.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/mprintf.h new file mode 100644 index 0000000..dc5664b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/mprintf.h @@ -0,0 +1,70 @@ +#ifndef CURLINC_MPRINTF_H +#define CURLINC_MPRINTF_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include +#include /* needed for FILE */ +#include "curl.h" /* for CURL_EXTERN */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if (defined(__GNUC__) || defined(__clang__)) && \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__MINGW32__) && !defined(CURL_NO_FMT_CHECKS) +#define CURL_TEMP_PRINTF(a,b) __attribute__ ((format(printf, a, b))) +#else +#define CURL_TEMP_PRINTF(a,b) +#endif + +CURL_EXTERN int curl_mprintf(const char *format, ...) CURL_TEMP_PRINTF(1, 2); +CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...) + CURL_TEMP_PRINTF(2, 3); +CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...) + CURL_TEMP_PRINTF(2, 3); +CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength, + const char *format, ...) CURL_TEMP_PRINTF(3, 4); +CURL_EXTERN int curl_mvprintf(const char *format, va_list args) + CURL_TEMP_PRINTF(1, 0); +CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args) + CURL_TEMP_PRINTF(2, 0); +CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args) + CURL_TEMP_PRINTF(2, 0); +CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength, + const char *format, va_list args) + CURL_TEMP_PRINTF(3, 0); +CURL_EXTERN char *curl_maprintf(const char *format, ...) + CURL_TEMP_PRINTF(1, 2); +CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args) + CURL_TEMP_PRINTF(1, 0); + +#undef CURL_TEMP_PRINTF + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_MPRINTF_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/multi.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/multi.h new file mode 100644 index 0000000..e79b48f --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/multi.h @@ -0,0 +1,471 @@ +#ifndef CURLINC_MULTI_H +#define CURLINC_MULTI_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ +/* + This is an "external" header file. Don't give away any internals here! + + GOALS + + o Enable a "pull" interface. The application that uses libcurl decides where + and when to ask libcurl to get/send data. + + o Enable multiple simultaneous transfers in the same thread without making it + complicated for the application. + + o Enable the application to select() on its own file descriptors and curl's + file descriptors simultaneous easily. + +*/ + +/* + * This header file should not really need to include "curl.h" since curl.h + * itself includes this file and we expect user applications to do #include + * without the need for especially including multi.h. + * + * For some reason we added this include here at one point, and rather than to + * break existing (wrongly written) libcurl applications, we leave it as-is + * but with this warning attached. + */ +#include "curl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) +typedef struct Curl_multi CURLM; +#else +typedef void CURLM; +#endif + +typedef enum { + CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or + curl_multi_socket*() soon */ + CURLM_OK, + CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */ + CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */ + CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */ + CURLM_INTERNAL_ERROR, /* this is a libcurl bug */ + CURLM_BAD_SOCKET, /* the passed in socket argument did not match */ + CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */ + CURLM_ADDED_ALREADY, /* an easy handle already added to a multi handle was + attempted to get added - again */ + CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a + callback */ + CURLM_WAKEUP_FAILURE, /* wakeup is unavailable or failed */ + CURLM_BAD_FUNCTION_ARGUMENT, /* function called with a bad parameter */ + CURLM_ABORTED_BY_CALLBACK, + CURLM_UNRECOVERABLE_POLL, + CURLM_LAST +} CURLMcode; + +/* just to make code nicer when using curl_multi_socket() you can now check + for CURLM_CALL_MULTI_SOCKET too in the same style it works for + curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */ +#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM + +/* bitmask bits for CURLMOPT_PIPELINING */ +#define CURLPIPE_NOTHING 0L +#define CURLPIPE_HTTP1 1L +#define CURLPIPE_MULTIPLEX 2L + +typedef enum { + CURLMSG_NONE, /* first, not used */ + CURLMSG_DONE, /* This easy handle has completed. 'result' contains + the CURLcode of the transfer */ + CURLMSG_LAST /* last, not used */ +} CURLMSG; + +struct CURLMsg { + CURLMSG msg; /* what this message means */ + CURL *easy_handle; /* the handle it concerns */ + union { + void *whatever; /* message-specific data */ + CURLcode result; /* return code for transfer */ + } data; +}; +typedef struct CURLMsg CURLMsg; + +/* Based on poll(2) structure and values. + * We don't use pollfd and POLL* constants explicitly + * to cover platforms without poll(). */ +#define CURL_WAIT_POLLIN 0x0001 +#define CURL_WAIT_POLLPRI 0x0002 +#define CURL_WAIT_POLLOUT 0x0004 + +struct curl_waitfd { + curl_socket_t fd; + short events; + short revents; +}; + +/* + * Name: curl_multi_init() + * + * Desc: initialize multi-style curl usage + * + * Returns: a new CURLM handle to use in all 'curl_multi' functions. + */ +CURL_EXTERN CURLM *curl_multi_init(void); + +/* + * Name: curl_multi_add_handle() + * + * Desc: add a standard curl handle to the multi stack + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle, + CURL *curl_handle); + + /* + * Name: curl_multi_remove_handle() + * + * Desc: removes a curl handle from the multi stack again + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle, + CURL *curl_handle); + + /* + * Name: curl_multi_fdset() + * + * Desc: Ask curl for its fd_set sets. The app can use these to select() or + * poll() on. We want curl_multi_perform() called as soon as one of + * them are ready. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle, + fd_set *read_fd_set, + fd_set *write_fd_set, + fd_set *exc_fd_set, + int *max_fd); + +/* + * Name: curl_multi_wait() + * + * Desc: Poll on all fds within a CURLM set as well as any + * additional fds passed to the function. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle, + struct curl_waitfd extra_fds[], + unsigned int extra_nfds, + int timeout_ms, + int *ret); + +/* + * Name: curl_multi_poll() + * + * Desc: Poll on all fds within a CURLM set as well as any + * additional fds passed to the function. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_poll(CURLM *multi_handle, + struct curl_waitfd extra_fds[], + unsigned int extra_nfds, + int timeout_ms, + int *ret); + +/* + * Name: curl_multi_wakeup() + * + * Desc: wakes up a sleeping curl_multi_poll call. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_wakeup(CURLM *multi_handle); + + /* + * Name: curl_multi_perform() + * + * Desc: When the app thinks there's data available for curl it calls this + * function to read/write whatever there is right now. This returns + * as soon as the reads and writes are done. This function does not + * require that there actually is data available for reading or that + * data can be written, it can be called just in case. It returns + * the number of handles that still transfer data in the second + * argument's integer-pointer. + * + * Returns: CURLMcode type, general multi error code. *NOTE* that this only + * returns errors etc regarding the whole multi stack. There might + * still have occurred problems on individual transfers even when + * this returns OK. + */ +CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle, + int *running_handles); + + /* + * Name: curl_multi_cleanup() + * + * Desc: Cleans up and removes a whole multi stack. It does not free or + * touch any individual easy handles in any way. We need to define + * in what state those handles will be if this function is called + * in the middle of a transfer. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle); + +/* + * Name: curl_multi_info_read() + * + * Desc: Ask the multi handle if there's any messages/informationals from + * the individual transfers. Messages include informationals such as + * error code from the transfer or just the fact that a transfer is + * completed. More details on these should be written down as well. + * + * Repeated calls to this function will return a new struct each + * time, until a special "end of msgs" struct is returned as a signal + * that there is no more to get at this point. + * + * The data the returned pointer points to will not survive calling + * curl_multi_cleanup(). + * + * The 'CURLMsg' struct is meant to be very simple and only contain + * very basic information. If more involved information is wanted, + * we will provide the particular "transfer handle" in that struct + * and that should/could/would be used in subsequent + * curl_easy_getinfo() calls (or similar). The point being that we + * must never expose complex structs to applications, as then we'll + * undoubtably get backwards compatibility problems in the future. + * + * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out + * of structs. It also writes the number of messages left in the + * queue (after this read) in the integer the second argument points + * to. + */ +CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle, + int *msgs_in_queue); + +/* + * Name: curl_multi_strerror() + * + * Desc: The curl_multi_strerror function may be used to turn a CURLMcode + * value into the equivalent human readable error string. This is + * useful for printing meaningful error messages. + * + * Returns: A pointer to a null-terminated error message. + */ +CURL_EXTERN const char *curl_multi_strerror(CURLMcode); + +/* + * Name: curl_multi_socket() and + * curl_multi_socket_all() + * + * Desc: An alternative version of curl_multi_perform() that allows the + * application to pass in one of the file descriptors that have been + * detected to have "action" on them and let libcurl perform. + * See man page for details. + */ +#define CURL_POLL_NONE 0 +#define CURL_POLL_IN 1 +#define CURL_POLL_OUT 2 +#define CURL_POLL_INOUT 3 +#define CURL_POLL_REMOVE 4 + +#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD + +#define CURL_CSELECT_IN 0x01 +#define CURL_CSELECT_OUT 0x02 +#define CURL_CSELECT_ERR 0x04 + +typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */ + curl_socket_t s, /* socket */ + int what, /* see above */ + void *userp, /* private callback + pointer */ + void *socketp); /* private socket + pointer */ +/* + * Name: curl_multi_timer_callback + * + * Desc: Called by libcurl whenever the library detects a change in the + * maximum number of milliseconds the app is allowed to wait before + * curl_multi_socket() or curl_multi_perform() must be called + * (to allow libcurl's timed events to take place). + * + * Returns: The callback should return zero. + */ +typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */ + long timeout_ms, /* see above */ + void *userp); /* private callback + pointer */ + +CURL_EXTERN CURLMcode CURL_DEPRECATED(7.19.5, "Use curl_multi_socket_action()") +curl_multi_socket(CURLM *multi_handle, curl_socket_t s, int *running_handles); + +CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle, + curl_socket_t s, + int ev_bitmask, + int *running_handles); + +CURL_EXTERN CURLMcode CURL_DEPRECATED(7.19.5, "Use curl_multi_socket_action()") +curl_multi_socket_all(CURLM *multi_handle, int *running_handles); + +#ifndef CURL_ALLOW_OLD_MULTI_SOCKET +/* This macro below was added in 7.16.3 to push users who recompile to use + the new curl_multi_socket_action() instead of the old curl_multi_socket() +*/ +#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z) +#endif + +/* + * Name: curl_multi_timeout() + * + * Desc: Returns the maximum number of milliseconds the app is allowed to + * wait before curl_multi_socket() or curl_multi_perform() must be + * called (to allow libcurl's timed events to take place). + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle, + long *milliseconds); + +typedef enum { + /* This is the socket callback function pointer */ + CURLOPT(CURLMOPT_SOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 1), + + /* This is the argument passed to the socket callback */ + CURLOPT(CURLMOPT_SOCKETDATA, CURLOPTTYPE_OBJECTPOINT, 2), + + /* set to 1 to enable pipelining for this multi handle */ + CURLOPT(CURLMOPT_PIPELINING, CURLOPTTYPE_LONG, 3), + + /* This is the timer callback function pointer */ + CURLOPT(CURLMOPT_TIMERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 4), + + /* This is the argument passed to the timer callback */ + CURLOPT(CURLMOPT_TIMERDATA, CURLOPTTYPE_OBJECTPOINT, 5), + + /* maximum number of entries in the connection cache */ + CURLOPT(CURLMOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 6), + + /* maximum number of (pipelining) connections to one host */ + CURLOPT(CURLMOPT_MAX_HOST_CONNECTIONS, CURLOPTTYPE_LONG, 7), + + /* maximum number of requests in a pipeline */ + CURLOPT(CURLMOPT_MAX_PIPELINE_LENGTH, CURLOPTTYPE_LONG, 8), + + /* a connection with a content-length longer than this + will not be considered for pipelining */ + CURLOPT(CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 9), + + /* a connection with a chunk length longer than this + will not be considered for pipelining */ + CURLOPT(CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 10), + + /* a list of site names(+port) that are blocked from pipelining */ + CURLOPT(CURLMOPT_PIPELINING_SITE_BL, CURLOPTTYPE_OBJECTPOINT, 11), + + /* a list of server types that are blocked from pipelining */ + CURLOPT(CURLMOPT_PIPELINING_SERVER_BL, CURLOPTTYPE_OBJECTPOINT, 12), + + /* maximum number of open connections in total */ + CURLOPT(CURLMOPT_MAX_TOTAL_CONNECTIONS, CURLOPTTYPE_LONG, 13), + + /* This is the server push callback function pointer */ + CURLOPT(CURLMOPT_PUSHFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 14), + + /* This is the argument passed to the server push callback */ + CURLOPT(CURLMOPT_PUSHDATA, CURLOPTTYPE_OBJECTPOINT, 15), + + /* maximum number of concurrent streams to support on a connection */ + CURLOPT(CURLMOPT_MAX_CONCURRENT_STREAMS, CURLOPTTYPE_LONG, 16), + + CURLMOPT_LASTENTRY /* the last unused */ +} CURLMoption; + + +/* + * Name: curl_multi_setopt() + * + * Desc: Sets options for the multi handle. + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle, + CURLMoption option, ...); + + +/* + * Name: curl_multi_assign() + * + * Desc: This function sets an association in the multi handle between the + * given socket and a private pointer of the application. This is + * (only) useful for curl_multi_socket uses. + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle, + curl_socket_t sockfd, void *sockp); + +/* + * Name: curl_multi_get_handles() + * + * Desc: Returns an allocated array holding all handles currently added to + * the multi handle. Marks the final entry with a NULL pointer. If + * there is no easy handle added to the multi handle, this function + * returns an array with the first entry as a NULL pointer. + * + * Returns: NULL on failure, otherwise a CURL **array pointer + */ +CURL_EXTERN CURL **curl_multi_get_handles(CURLM *multi_handle); + +/* + * Name: curl_push_callback + * + * Desc: This callback gets called when a new stream is being pushed by the + * server. It approves or denies the new stream. It can also decide + * to completely fail the connection. + * + * Returns: CURL_PUSH_OK, CURL_PUSH_DENY or CURL_PUSH_ERROROUT + */ +#define CURL_PUSH_OK 0 +#define CURL_PUSH_DENY 1 +#define CURL_PUSH_ERROROUT 2 /* added in 7.72.0 */ + +struct curl_pushheaders; /* forward declaration only */ + +CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h, + size_t num); +CURL_EXTERN char *curl_pushheader_byname(struct curl_pushheaders *h, + const char *name); + +typedef int (*curl_push_callback)(CURL *parent, + CURL *easy, + size_t num_headers, + struct curl_pushheaders *headers, + void *userp); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/options.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/options.h new file mode 100644 index 0000000..1ed76a9 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/options.h @@ -0,0 +1,70 @@ +#ifndef CURLINC_OPTIONS_H +#define CURLINC_OPTIONS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + CURLOT_LONG, /* long (a range of values) */ + CURLOT_VALUES, /* (a defined set or bitmask) */ + CURLOT_OFF_T, /* curl_off_t (a range of values) */ + CURLOT_OBJECT, /* pointer (void *) */ + CURLOT_STRING, /* (char * to null-terminated buffer) */ + CURLOT_SLIST, /* (struct curl_slist *) */ + CURLOT_CBPTR, /* (void * passed as-is to a callback) */ + CURLOT_BLOB, /* blob (struct curl_blob *) */ + CURLOT_FUNCTION /* function pointer */ +} curl_easytype; + +/* Flag bits */ + +/* "alias" means it is provided for old programs to remain functional, + we prefer another name */ +#define CURLOT_FLAG_ALIAS (1<<0) + +/* The CURLOPTTYPE_* id ranges can still be used to figure out what type/size + to use for curl_easy_setopt() for the given id */ +struct curl_easyoption { + const char *name; + CURLoption id; + curl_easytype type; + unsigned int flags; +}; + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_by_name(const char *name); + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_by_id(CURLoption id); + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_next(const struct curl_easyoption *prev); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif +#endif /* CURLINC_OPTIONS_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/stdcheaders.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/stdcheaders.h new file mode 100644 index 0000000..7451aa3 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/stdcheaders.h @@ -0,0 +1,35 @@ +#ifndef CURLINC_STDCHEADERS_H +#define CURLINC_STDCHEADERS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include + +size_t fread(void *, size_t, size_t, FILE *); +size_t fwrite(const void *, size_t, size_t, FILE *); + +int strcasecmp(const char *, const char *); +int strncasecmp(const char *, const char *, size_t); + +#endif /* CURLINC_STDCHEADERS_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/system.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/system.h new file mode 100644 index 0000000..97e0d03 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/system.h @@ -0,0 +1,521 @@ +#ifndef CURLINC_SYSTEM_H +#define CURLINC_SYSTEM_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* + * Try to keep one section per platform, compiler and architecture, otherwise, + * if an existing section is reused for a different one and later on the + * original is adjusted, probably the piggybacking one can be adversely + * changed. + * + * In order to differentiate between platforms/compilers/architectures use + * only compiler built in predefined preprocessor symbols. + * + * curl_off_t + * ---------- + * + * For any given platform/compiler curl_off_t must be typedef'ed to a 64-bit + * wide signed integral data type. The width of this data type must remain + * constant and independent of any possible large file support settings. + * + * As an exception to the above, curl_off_t shall be typedef'ed to a 32-bit + * wide signed integral data type if there is no 64-bit type. + * + * As a general rule, curl_off_t shall not be mapped to off_t. This rule shall + * only be violated if off_t is the only 64-bit data type available and the + * size of off_t is independent of large file support settings. Keep your + * build on the safe side avoiding an off_t gating. If you have a 64-bit + * off_t then take for sure that another 64-bit data type exists, dig deeper + * and you will find it. + * + */ + +#if defined(__DJGPP__) || defined(__GO32__) +# if defined(__DJGPP__) && (__DJGPP__ > 1) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__SALFORDC__) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__BORLANDC__) +# if (__BORLANDC__ < 0x520) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__TURBOC__) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__POCC__) +# if (__POCC__ < 280) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# elif defined(_MSC_VER) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# else +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__LCC__) +# if defined(__MCST__) /* MCST eLbrus Compiler Collection */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 +# else /* Local (or Little) C Compiler */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +# endif + +#elif defined(__SYMBIAN32__) +# if defined(__EABI__) /* Treat all ARM compilers equally */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__CW32__) +# pragma longlong on +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__VC32__) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(macintosh) +# include +# if TYPE_LONGLONG +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(__TANDEM) +# if ! defined(__LP64) + /* Required for 32-bit NonStop builds only. */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +# endif + +#elif defined(_WIN32_WCE) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__MINGW32__) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_WS2TCPIP_H 1 + +#elif defined(__VMS) +# if defined(__VAX) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(__OS400__) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__MVS__) +# if defined(_LONG_LONG) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__370__) +# if defined(__IBMC__) || defined(__IBMCPP__) +# if defined(_ILP32) +# elif defined(_LP64) +# endif +# if defined(_LONG_LONG) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 +# endif + +#elif defined(TPF) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__TINYC__) /* also known as tcc */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* Oracle Solaris Studio */ +# if !defined(__LP64) && (defined(__ILP32) || \ + defined(__i386) || \ + defined(__sparcv8) || \ + defined(__sparcv8plus)) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__LP64) || \ + defined(__amd64) || defined(__sparcv9) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__xlc__) /* IBM xlc compiler */ +# if !defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__hpux) /* HP aCC compiler */ +# if !defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +/* ===================================== */ +/* KEEP MSVC THE PENULTIMATE ENTRY */ +/* ===================================== */ + +#elif defined(_MSC_VER) +# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +/* ===================================== */ +/* KEEP GENERIC GCC THE LAST ENTRY */ +/* ===================================== */ + +#elif defined(__GNUC__) && !defined(_SCO_DS) +# if !defined(__LP64__) && \ + (defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \ + defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \ + defined(__sparc__) || defined(__mips__) || defined(__sh__) || \ + defined(__XTENSA__) || \ + (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \ + (defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L)) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__LP64__) || \ + defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \ + defined(__e2k__) || \ + (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \ + (defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#else +/* generic "safe guess" on old 32 bit style */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +#endif + +#ifdef _AIX +/* AIX needs */ +#define CURL_PULL_SYS_POLL_H +#endif + + +/* CURL_PULL_WS2TCPIP_H is defined above when inclusion of header file */ +/* ws2tcpip.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_WS2TCPIP_H +# include +# include +# include +#endif + +/* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */ +/* sys/types.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_TYPES_H +# include +#endif + +/* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */ +/* sys/socket.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_SOCKET_H +# include +#endif + +/* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file */ +/* sys/poll.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_POLL_H +# include +#endif + +/* Data type definition of curl_socklen_t. */ +#ifdef CURL_TYPEOF_CURL_SOCKLEN_T + typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t; +#endif + +/* Data type definition of curl_off_t. */ + +#ifdef CURL_TYPEOF_CURL_OFF_T + typedef CURL_TYPEOF_CURL_OFF_T curl_off_t; +#endif + +/* + * CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow + * these to be visible and exported by the external libcurl interface API, + * while also making them visible to the library internals, simply including + * curl_setup.h, without actually needing to include curl.h internally. + * If some day this section would grow big enough, all this should be moved + * to its own header file. + */ + +/* + * Figure out if we can use the ## preprocessor operator, which is supported + * by ISO/ANSI C and C++. Some compilers support it without setting __STDC__ + * or __cplusplus so we need to carefully check for them too. + */ + +#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \ + defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \ + defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \ + defined(__ILEC400__) + /* This compiler is believed to have an ISO compatible preprocessor */ +#define CURL_ISOCPP +#else + /* This compiler is believed NOT to have an ISO compatible preprocessor */ +#undef CURL_ISOCPP +#endif + +/* + * Macros for minimum-width signed and unsigned curl_off_t integer constants. + */ + +#if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551) +# define CURLINC_OFF_T_C_HLPR2(x) x +# define CURLINC_OFF_T_C_HLPR1(x) CURLINC_OFF_T_C_HLPR2(x) +# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ + CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T) +# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ + CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU) +#else +# ifdef CURL_ISOCPP +# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix +# else +# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix +# endif +# define CURLINC_OFF_T_C_HLPR1(Val,Suffix) CURLINC_OFF_T_C_HLPR2(Val,Suffix) +# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T) +# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU) +#endif + +#endif /* CURLINC_SYSTEM_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/typecheck-gcc.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/typecheck-gcc.h new file mode 100644 index 0000000..b880f3d --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/typecheck-gcc.h @@ -0,0 +1,717 @@ +#ifndef CURLINC_TYPECHECK_GCC_H +#define CURLINC_TYPECHECK_GCC_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* wraps curl_easy_setopt() with typechecking */ + +/* To add a new kind of warning, add an + * if(curlcheck_sometype_option(_curl_opt)) + * if(!curlcheck_sometype(value)) + * _curl_easy_setopt_err_sometype(); + * block and define curlcheck_sometype_option, curlcheck_sometype and + * _curl_easy_setopt_err_sometype below + * + * NOTE: We use two nested 'if' statements here instead of the && operator, in + * order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x + * when compiling with -Wlogical-op. + * + * To add an option that uses the same type as an existing option, you'll just + * need to extend the appropriate _curl_*_option macro + */ +#define curl_easy_setopt(handle, option, value) \ + __extension__({ \ + CURLoption _curl_opt = (option); \ + if(__builtin_constant_p(_curl_opt)) { \ + CURL_IGNORE_DEPRECATION( \ + if(curlcheck_long_option(_curl_opt)) \ + if(!curlcheck_long(value)) \ + _curl_easy_setopt_err_long(); \ + if(curlcheck_off_t_option(_curl_opt)) \ + if(!curlcheck_off_t(value)) \ + _curl_easy_setopt_err_curl_off_t(); \ + if(curlcheck_string_option(_curl_opt)) \ + if(!curlcheck_string(value)) \ + _curl_easy_setopt_err_string(); \ + if(curlcheck_write_cb_option(_curl_opt)) \ + if(!curlcheck_write_cb(value)) \ + _curl_easy_setopt_err_write_callback(); \ + if((_curl_opt) == CURLOPT_RESOLVER_START_FUNCTION) \ + if(!curlcheck_resolver_start_callback(value)) \ + _curl_easy_setopt_err_resolver_start_callback(); \ + if((_curl_opt) == CURLOPT_READFUNCTION) \ + if(!curlcheck_read_cb(value)) \ + _curl_easy_setopt_err_read_cb(); \ + if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \ + if(!curlcheck_ioctl_cb(value)) \ + _curl_easy_setopt_err_ioctl_cb(); \ + if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \ + if(!curlcheck_sockopt_cb(value)) \ + _curl_easy_setopt_err_sockopt_cb(); \ + if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \ + if(!curlcheck_opensocket_cb(value)) \ + _curl_easy_setopt_err_opensocket_cb(); \ + if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \ + if(!curlcheck_progress_cb(value)) \ + _curl_easy_setopt_err_progress_cb(); \ + if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \ + if(!curlcheck_debug_cb(value)) \ + _curl_easy_setopt_err_debug_cb(); \ + if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \ + if(!curlcheck_ssl_ctx_cb(value)) \ + _curl_easy_setopt_err_ssl_ctx_cb(); \ + if(curlcheck_conv_cb_option(_curl_opt)) \ + if(!curlcheck_conv_cb(value)) \ + _curl_easy_setopt_err_conv_cb(); \ + if((_curl_opt) == CURLOPT_SEEKFUNCTION) \ + if(!curlcheck_seek_cb(value)) \ + _curl_easy_setopt_err_seek_cb(); \ + if(curlcheck_cb_data_option(_curl_opt)) \ + if(!curlcheck_cb_data(value)) \ + _curl_easy_setopt_err_cb_data(); \ + if((_curl_opt) == CURLOPT_ERRORBUFFER) \ + if(!curlcheck_error_buffer(value)) \ + _curl_easy_setopt_err_error_buffer(); \ + if((_curl_opt) == CURLOPT_STDERR) \ + if(!curlcheck_FILE(value)) \ + _curl_easy_setopt_err_FILE(); \ + if(curlcheck_postfields_option(_curl_opt)) \ + if(!curlcheck_postfields(value)) \ + _curl_easy_setopt_err_postfields(); \ + if((_curl_opt) == CURLOPT_HTTPPOST) \ + if(!curlcheck_arr((value), struct curl_httppost)) \ + _curl_easy_setopt_err_curl_httpost(); \ + if((_curl_opt) == CURLOPT_MIMEPOST) \ + if(!curlcheck_ptr((value), curl_mime)) \ + _curl_easy_setopt_err_curl_mimepost(); \ + if(curlcheck_slist_option(_curl_opt)) \ + if(!curlcheck_arr((value), struct curl_slist)) \ + _curl_easy_setopt_err_curl_slist(); \ + if((_curl_opt) == CURLOPT_SHARE) \ + if(!curlcheck_ptr((value), CURLSH)) \ + _curl_easy_setopt_err_CURLSH(); \ + ) \ + } \ + curl_easy_setopt(handle, _curl_opt, value); \ + }) + +/* wraps curl_easy_getinfo() with typechecking */ +#define curl_easy_getinfo(handle, info, arg) \ + __extension__({ \ + CURLINFO _curl_info = (info); \ + if(__builtin_constant_p(_curl_info)) { \ + CURL_IGNORE_DEPRECATION( \ + if(curlcheck_string_info(_curl_info)) \ + if(!curlcheck_arr((arg), char *)) \ + _curl_easy_getinfo_err_string(); \ + if(curlcheck_long_info(_curl_info)) \ + if(!curlcheck_arr((arg), long)) \ + _curl_easy_getinfo_err_long(); \ + if(curlcheck_double_info(_curl_info)) \ + if(!curlcheck_arr((arg), double)) \ + _curl_easy_getinfo_err_double(); \ + if(curlcheck_slist_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_slist *)) \ + _curl_easy_getinfo_err_curl_slist(); \ + if(curlcheck_tlssessioninfo_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_tlssessioninfo *)) \ + _curl_easy_getinfo_err_curl_tlssesssioninfo(); \ + if(curlcheck_certinfo_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_certinfo *)) \ + _curl_easy_getinfo_err_curl_certinfo(); \ + if(curlcheck_socket_info(_curl_info)) \ + if(!curlcheck_arr((arg), curl_socket_t)) \ + _curl_easy_getinfo_err_curl_socket(); \ + if(curlcheck_off_t_info(_curl_info)) \ + if(!curlcheck_arr((arg), curl_off_t)) \ + _curl_easy_getinfo_err_curl_off_t(); \ + ) \ + } \ + curl_easy_getinfo(handle, _curl_info, arg); \ + }) + +/* + * For now, just make sure that the functions are called with three arguments + */ +#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) +#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) + + +/* the actual warnings, triggered by calling the _curl_easy_setopt_err* + * functions */ + +/* To define a new warning, use _CURL_WARNING(identifier, "message") */ +#define CURLWARNING(id, message) \ + static void __attribute__((__warning__(message))) \ + __attribute__((__unused__)) __attribute__((__noinline__)) \ + id(void) { __asm__(""); } + +CURLWARNING(_curl_easy_setopt_err_long, + "curl_easy_setopt expects a long argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_off_t, + "curl_easy_setopt expects a curl_off_t argument for this option") +CURLWARNING(_curl_easy_setopt_err_string, + "curl_easy_setopt expects a " + "string ('char *' or char[]) argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_write_callback, + "curl_easy_setopt expects a curl_write_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_resolver_start_callback, + "curl_easy_setopt expects a " + "curl_resolver_start_callback argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_read_cb, + "curl_easy_setopt expects a curl_read_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_ioctl_cb, + "curl_easy_setopt expects a curl_ioctl_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_sockopt_cb, + "curl_easy_setopt expects a curl_sockopt_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_opensocket_cb, + "curl_easy_setopt expects a " + "curl_opensocket_callback argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_progress_cb, + "curl_easy_setopt expects a curl_progress_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_debug_cb, + "curl_easy_setopt expects a curl_debug_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_ssl_ctx_cb, + "curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_conv_cb, + "curl_easy_setopt expects a curl_conv_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_seek_cb, + "curl_easy_setopt expects a curl_seek_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_cb_data, + "curl_easy_setopt expects a " + "private data pointer as argument for this option") +CURLWARNING(_curl_easy_setopt_err_error_buffer, + "curl_easy_setopt expects a " + "char buffer of CURL_ERROR_SIZE as argument for this option") +CURLWARNING(_curl_easy_setopt_err_FILE, + "curl_easy_setopt expects a 'FILE *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_postfields, + "curl_easy_setopt expects a 'void *' or 'char *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_httpost, + "curl_easy_setopt expects a 'struct curl_httppost *' " + "argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_mimepost, + "curl_easy_setopt expects a 'curl_mime *' " + "argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_slist, + "curl_easy_setopt expects a 'struct curl_slist *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_CURLSH, + "curl_easy_setopt expects a CURLSH* argument for this option") + +CURLWARNING(_curl_easy_getinfo_err_string, + "curl_easy_getinfo expects a pointer to 'char *' for this info") +CURLWARNING(_curl_easy_getinfo_err_long, + "curl_easy_getinfo expects a pointer to long for this info") +CURLWARNING(_curl_easy_getinfo_err_double, + "curl_easy_getinfo expects a pointer to double for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_slist, + "curl_easy_getinfo expects a pointer to 'struct curl_slist *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_tlssesssioninfo, + "curl_easy_getinfo expects a pointer to " + "'struct curl_tlssessioninfo *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_certinfo, + "curl_easy_getinfo expects a pointer to " + "'struct curl_certinfo *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_socket, + "curl_easy_getinfo expects a pointer to curl_socket_t for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_off_t, + "curl_easy_getinfo expects a pointer to curl_off_t for this info") + +/* groups of curl_easy_setops options that take the same type of argument */ + +/* To add a new option to one of the groups, just add + * (option) == CURLOPT_SOMETHING + * to the or-expression. If the option takes a long or curl_off_t, you don't + * have to do anything + */ + +/* evaluates to true if option takes a long argument */ +#define curlcheck_long_option(option) \ + (0 < (option) && (option) < CURLOPTTYPE_OBJECTPOINT) + +#define curlcheck_off_t_option(option) \ + (((option) > CURLOPTTYPE_OFF_T) && ((option) < CURLOPTTYPE_BLOB)) + +/* evaluates to true if option takes a char* argument */ +#define curlcheck_string_option(option) \ + ((option) == CURLOPT_ABSTRACT_UNIX_SOCKET || \ + (option) == CURLOPT_ACCEPT_ENCODING || \ + (option) == CURLOPT_ALTSVC || \ + (option) == CURLOPT_CAINFO || \ + (option) == CURLOPT_CAPATH || \ + (option) == CURLOPT_COOKIE || \ + (option) == CURLOPT_COOKIEFILE || \ + (option) == CURLOPT_COOKIEJAR || \ + (option) == CURLOPT_COOKIELIST || \ + (option) == CURLOPT_CRLFILE || \ + (option) == CURLOPT_CUSTOMREQUEST || \ + (option) == CURLOPT_DEFAULT_PROTOCOL || \ + (option) == CURLOPT_DNS_INTERFACE || \ + (option) == CURLOPT_DNS_LOCAL_IP4 || \ + (option) == CURLOPT_DNS_LOCAL_IP6 || \ + (option) == CURLOPT_DNS_SERVERS || \ + (option) == CURLOPT_DOH_URL || \ + (option) == CURLOPT_EGDSOCKET || \ + (option) == CURLOPT_FTP_ACCOUNT || \ + (option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \ + (option) == CURLOPT_FTPPORT || \ + (option) == CURLOPT_HSTS || \ + (option) == CURLOPT_HAPROXY_CLIENT_IP || \ + (option) == CURLOPT_INTERFACE || \ + (option) == CURLOPT_ISSUERCERT || \ + (option) == CURLOPT_KEYPASSWD || \ + (option) == CURLOPT_KRBLEVEL || \ + (option) == CURLOPT_LOGIN_OPTIONS || \ + (option) == CURLOPT_MAIL_AUTH || \ + (option) == CURLOPT_MAIL_FROM || \ + (option) == CURLOPT_NETRC_FILE || \ + (option) == CURLOPT_NOPROXY || \ + (option) == CURLOPT_PASSWORD || \ + (option) == CURLOPT_PINNEDPUBLICKEY || \ + (option) == CURLOPT_PRE_PROXY || \ + (option) == CURLOPT_PROTOCOLS_STR || \ + (option) == CURLOPT_PROXY || \ + (option) == CURLOPT_PROXY_CAINFO || \ + (option) == CURLOPT_PROXY_CAPATH || \ + (option) == CURLOPT_PROXY_CRLFILE || \ + (option) == CURLOPT_PROXY_ISSUERCERT || \ + (option) == CURLOPT_PROXY_KEYPASSWD || \ + (option) == CURLOPT_PROXY_PINNEDPUBLICKEY || \ + (option) == CURLOPT_PROXY_SERVICE_NAME || \ + (option) == CURLOPT_PROXY_SSL_CIPHER_LIST || \ + (option) == CURLOPT_PROXY_SSLCERT || \ + (option) == CURLOPT_PROXY_SSLCERTTYPE || \ + (option) == CURLOPT_PROXY_SSLKEY || \ + (option) == CURLOPT_PROXY_SSLKEYTYPE || \ + (option) == CURLOPT_PROXY_TLS13_CIPHERS || \ + (option) == CURLOPT_PROXY_TLSAUTH_PASSWORD || \ + (option) == CURLOPT_PROXY_TLSAUTH_TYPE || \ + (option) == CURLOPT_PROXY_TLSAUTH_USERNAME || \ + (option) == CURLOPT_PROXYPASSWORD || \ + (option) == CURLOPT_PROXYUSERNAME || \ + (option) == CURLOPT_PROXYUSERPWD || \ + (option) == CURLOPT_RANDOM_FILE || \ + (option) == CURLOPT_RANGE || \ + (option) == CURLOPT_REDIR_PROTOCOLS_STR || \ + (option) == CURLOPT_REFERER || \ + (option) == CURLOPT_REQUEST_TARGET || \ + (option) == CURLOPT_RTSP_SESSION_ID || \ + (option) == CURLOPT_RTSP_STREAM_URI || \ + (option) == CURLOPT_RTSP_TRANSPORT || \ + (option) == CURLOPT_SASL_AUTHZID || \ + (option) == CURLOPT_SERVICE_NAME || \ + (option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \ + (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \ + (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 || \ + (option) == CURLOPT_SSH_KNOWNHOSTS || \ + (option) == CURLOPT_SSH_PRIVATE_KEYFILE || \ + (option) == CURLOPT_SSH_PUBLIC_KEYFILE || \ + (option) == CURLOPT_SSLCERT || \ + (option) == CURLOPT_SSLCERTTYPE || \ + (option) == CURLOPT_SSLENGINE || \ + (option) == CURLOPT_SSLKEY || \ + (option) == CURLOPT_SSLKEYTYPE || \ + (option) == CURLOPT_SSL_CIPHER_LIST || \ + (option) == CURLOPT_TLS13_CIPHERS || \ + (option) == CURLOPT_TLSAUTH_PASSWORD || \ + (option) == CURLOPT_TLSAUTH_TYPE || \ + (option) == CURLOPT_TLSAUTH_USERNAME || \ + (option) == CURLOPT_UNIX_SOCKET_PATH || \ + (option) == CURLOPT_URL || \ + (option) == CURLOPT_USERAGENT || \ + (option) == CURLOPT_USERNAME || \ + (option) == CURLOPT_AWS_SIGV4 || \ + (option) == CURLOPT_USERPWD || \ + (option) == CURLOPT_XOAUTH2_BEARER || \ + (option) == CURLOPT_SSL_EC_CURVES || \ + 0) + +/* evaluates to true if option takes a curl_write_callback argument */ +#define curlcheck_write_cb_option(option) \ + ((option) == CURLOPT_HEADERFUNCTION || \ + (option) == CURLOPT_WRITEFUNCTION) + +/* evaluates to true if option takes a curl_conv_callback argument */ +#define curlcheck_conv_cb_option(option) \ + ((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION || \ + (option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION || \ + (option) == CURLOPT_CONV_FROM_UTF8_FUNCTION) + +/* evaluates to true if option takes a data argument to pass to a callback */ +#define curlcheck_cb_data_option(option) \ + ((option) == CURLOPT_CHUNK_DATA || \ + (option) == CURLOPT_CLOSESOCKETDATA || \ + (option) == CURLOPT_DEBUGDATA || \ + (option) == CURLOPT_FNMATCH_DATA || \ + (option) == CURLOPT_HEADERDATA || \ + (option) == CURLOPT_HSTSREADDATA || \ + (option) == CURLOPT_HSTSWRITEDATA || \ + (option) == CURLOPT_INTERLEAVEDATA || \ + (option) == CURLOPT_IOCTLDATA || \ + (option) == CURLOPT_OPENSOCKETDATA || \ + (option) == CURLOPT_PREREQDATA || \ + (option) == CURLOPT_PROGRESSDATA || \ + (option) == CURLOPT_READDATA || \ + (option) == CURLOPT_SEEKDATA || \ + (option) == CURLOPT_SOCKOPTDATA || \ + (option) == CURLOPT_SSH_KEYDATA || \ + (option) == CURLOPT_SSL_CTX_DATA || \ + (option) == CURLOPT_WRITEDATA || \ + (option) == CURLOPT_RESOLVER_START_DATA || \ + (option) == CURLOPT_TRAILERDATA || \ + (option) == CURLOPT_SSH_HOSTKEYDATA || \ + 0) + +/* evaluates to true if option takes a POST data argument (void* or char*) */ +#define curlcheck_postfields_option(option) \ + ((option) == CURLOPT_POSTFIELDS || \ + (option) == CURLOPT_COPYPOSTFIELDS || \ + 0) + +/* evaluates to true if option takes a struct curl_slist * argument */ +#define curlcheck_slist_option(option) \ + ((option) == CURLOPT_HTTP200ALIASES || \ + (option) == CURLOPT_HTTPHEADER || \ + (option) == CURLOPT_MAIL_RCPT || \ + (option) == CURLOPT_POSTQUOTE || \ + (option) == CURLOPT_PREQUOTE || \ + (option) == CURLOPT_PROXYHEADER || \ + (option) == CURLOPT_QUOTE || \ + (option) == CURLOPT_RESOLVE || \ + (option) == CURLOPT_TELNETOPTIONS || \ + (option) == CURLOPT_CONNECT_TO || \ + 0) + +/* groups of curl_easy_getinfo infos that take the same type of argument */ + +/* evaluates to true if info expects a pointer to char * argument */ +#define curlcheck_string_info(info) \ + (CURLINFO_STRING < (info) && (info) < CURLINFO_LONG && \ + (info) != CURLINFO_PRIVATE) + +/* evaluates to true if info expects a pointer to long argument */ +#define curlcheck_long_info(info) \ + (CURLINFO_LONG < (info) && (info) < CURLINFO_DOUBLE) + +/* evaluates to true if info expects a pointer to double argument */ +#define curlcheck_double_info(info) \ + (CURLINFO_DOUBLE < (info) && (info) < CURLINFO_SLIST) + +/* true if info expects a pointer to struct curl_slist * argument */ +#define curlcheck_slist_info(info) \ + (((info) == CURLINFO_SSL_ENGINES) || ((info) == CURLINFO_COOKIELIST)) + +/* true if info expects a pointer to struct curl_tlssessioninfo * argument */ +#define curlcheck_tlssessioninfo_info(info) \ + (((info) == CURLINFO_TLS_SSL_PTR) || ((info) == CURLINFO_TLS_SESSION)) + +/* true if info expects a pointer to struct curl_certinfo * argument */ +#define curlcheck_certinfo_info(info) ((info) == CURLINFO_CERTINFO) + +/* true if info expects a pointer to struct curl_socket_t argument */ +#define curlcheck_socket_info(info) \ + (CURLINFO_SOCKET < (info) && (info) < CURLINFO_OFF_T) + +/* true if info expects a pointer to curl_off_t argument */ +#define curlcheck_off_t_info(info) \ + (CURLINFO_OFF_T < (info)) + + +/* typecheck helpers -- check whether given expression has requested type */ + +/* For pointers, you can use the curlcheck_ptr/curlcheck_arr macros, + * otherwise define a new macro. Search for __builtin_types_compatible_p + * in the GCC manual. + * NOTE: these macros MUST NOT EVALUATE their arguments! The argument is + * the actual expression passed to the curl_easy_setopt macro. This + * means that you can only apply the sizeof and __typeof__ operators, no + * == or whatsoever. + */ + +/* XXX: should evaluate to true if expr is a pointer */ +#define curlcheck_any_ptr(expr) \ + (sizeof(expr) == sizeof(void *)) + +/* evaluates to true if expr is NULL */ +/* XXX: must not evaluate expr, so this check is not accurate */ +#define curlcheck_NULL(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), __typeof__(NULL))) + +/* evaluates to true if expr is type*, const type* or NULL */ +#define curlcheck_ptr(expr, type) \ + (curlcheck_NULL(expr) || \ + __builtin_types_compatible_p(__typeof__(expr), type *) || \ + __builtin_types_compatible_p(__typeof__(expr), const type *)) + +/* evaluates to true if expr is one of type[], type*, NULL or const type* */ +#define curlcheck_arr(expr, type) \ + (curlcheck_ptr((expr), type) || \ + __builtin_types_compatible_p(__typeof__(expr), type [])) + +/* evaluates to true if expr is a string */ +#define curlcheck_string(expr) \ + (curlcheck_arr((expr), char) || \ + curlcheck_arr((expr), signed char) || \ + curlcheck_arr((expr), unsigned char)) + +/* evaluates to true if expr is a long (no matter the signedness) + * XXX: for now, int is also accepted (and therefore short and char, which + * are promoted to int when passed to a variadic function) */ +#define curlcheck_long(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), long) || \ + __builtin_types_compatible_p(__typeof__(expr), signed long) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned long) || \ + __builtin_types_compatible_p(__typeof__(expr), int) || \ + __builtin_types_compatible_p(__typeof__(expr), signed int) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned int) || \ + __builtin_types_compatible_p(__typeof__(expr), short) || \ + __builtin_types_compatible_p(__typeof__(expr), signed short) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned short) || \ + __builtin_types_compatible_p(__typeof__(expr), char) || \ + __builtin_types_compatible_p(__typeof__(expr), signed char) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned char)) + +/* evaluates to true if expr is of type curl_off_t */ +#define curlcheck_off_t(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), curl_off_t)) + +/* evaluates to true if expr is abuffer suitable for CURLOPT_ERRORBUFFER */ +/* XXX: also check size of an char[] array? */ +#define curlcheck_error_buffer(expr) \ + (curlcheck_NULL(expr) || \ + __builtin_types_compatible_p(__typeof__(expr), char *) || \ + __builtin_types_compatible_p(__typeof__(expr), char[])) + +/* evaluates to true if expr is of type (const) void* or (const) FILE* */ +#if 0 +#define curlcheck_cb_data(expr) \ + (curlcheck_ptr((expr), void) || \ + curlcheck_ptr((expr), FILE)) +#else /* be less strict */ +#define curlcheck_cb_data(expr) \ + curlcheck_any_ptr(expr) +#endif + +/* evaluates to true if expr is of type FILE* */ +#define curlcheck_FILE(expr) \ + (curlcheck_NULL(expr) || \ + (__builtin_types_compatible_p(__typeof__(expr), FILE *))) + +/* evaluates to true if expr can be passed as POST data (void* or char*) */ +#define curlcheck_postfields(expr) \ + (curlcheck_ptr((expr), void) || \ + curlcheck_arr((expr), char) || \ + curlcheck_arr((expr), unsigned char)) + +/* helper: __builtin_types_compatible_p distinguishes between functions and + * function pointers, hide it */ +#define curlcheck_cb_compatible(func, type) \ + (__builtin_types_compatible_p(__typeof__(func), type) || \ + __builtin_types_compatible_p(__typeof__(func) *, type)) + +/* evaluates to true if expr is of type curl_resolver_start_callback */ +#define curlcheck_resolver_start_callback(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_resolver_start_callback)) + +/* evaluates to true if expr is of type curl_read_callback or "similar" */ +#define curlcheck_read_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), __typeof__(fread) *) || \ + curlcheck_cb_compatible((expr), curl_read_callback) || \ + curlcheck_cb_compatible((expr), _curl_read_callback1) || \ + curlcheck_cb_compatible((expr), _curl_read_callback2) || \ + curlcheck_cb_compatible((expr), _curl_read_callback3) || \ + curlcheck_cb_compatible((expr), _curl_read_callback4) || \ + curlcheck_cb_compatible((expr), _curl_read_callback5) || \ + curlcheck_cb_compatible((expr), _curl_read_callback6)) +typedef size_t (*_curl_read_callback1)(char *, size_t, size_t, void *); +typedef size_t (*_curl_read_callback2)(char *, size_t, size_t, const void *); +typedef size_t (*_curl_read_callback3)(char *, size_t, size_t, FILE *); +typedef size_t (*_curl_read_callback4)(void *, size_t, size_t, void *); +typedef size_t (*_curl_read_callback5)(void *, size_t, size_t, const void *); +typedef size_t (*_curl_read_callback6)(void *, size_t, size_t, FILE *); + +/* evaluates to true if expr is of type curl_write_callback or "similar" */ +#define curlcheck_write_cb(expr) \ + (curlcheck_read_cb(expr) || \ + curlcheck_cb_compatible((expr), __typeof__(fwrite) *) || \ + curlcheck_cb_compatible((expr), curl_write_callback) || \ + curlcheck_cb_compatible((expr), _curl_write_callback1) || \ + curlcheck_cb_compatible((expr), _curl_write_callback2) || \ + curlcheck_cb_compatible((expr), _curl_write_callback3) || \ + curlcheck_cb_compatible((expr), _curl_write_callback4) || \ + curlcheck_cb_compatible((expr), _curl_write_callback5) || \ + curlcheck_cb_compatible((expr), _curl_write_callback6)) +typedef size_t (*_curl_write_callback1)(const char *, size_t, size_t, void *); +typedef size_t (*_curl_write_callback2)(const char *, size_t, size_t, + const void *); +typedef size_t (*_curl_write_callback3)(const char *, size_t, size_t, FILE *); +typedef size_t (*_curl_write_callback4)(const void *, size_t, size_t, void *); +typedef size_t (*_curl_write_callback5)(const void *, size_t, size_t, + const void *); +typedef size_t (*_curl_write_callback6)(const void *, size_t, size_t, FILE *); + +/* evaluates to true if expr is of type curl_ioctl_callback or "similar" */ +#define curlcheck_ioctl_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_ioctl_callback) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback1) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback2) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback3) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback4)) +typedef curlioerr (*_curl_ioctl_callback1)(CURL *, int, void *); +typedef curlioerr (*_curl_ioctl_callback2)(CURL *, int, const void *); +typedef curlioerr (*_curl_ioctl_callback3)(CURL *, curliocmd, void *); +typedef curlioerr (*_curl_ioctl_callback4)(CURL *, curliocmd, const void *); + +/* evaluates to true if expr is of type curl_sockopt_callback or "similar" */ +#define curlcheck_sockopt_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_sockopt_callback) || \ + curlcheck_cb_compatible((expr), _curl_sockopt_callback1) || \ + curlcheck_cb_compatible((expr), _curl_sockopt_callback2)) +typedef int (*_curl_sockopt_callback1)(void *, curl_socket_t, curlsocktype); +typedef int (*_curl_sockopt_callback2)(const void *, curl_socket_t, + curlsocktype); + +/* evaluates to true if expr is of type curl_opensocket_callback or + "similar" */ +#define curlcheck_opensocket_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_opensocket_callback) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback1) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback2) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback3) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback4)) +typedef curl_socket_t (*_curl_opensocket_callback1) + (void *, curlsocktype, struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback2) + (void *, curlsocktype, const struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback3) + (const void *, curlsocktype, struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback4) + (const void *, curlsocktype, const struct curl_sockaddr *); + +/* evaluates to true if expr is of type curl_progress_callback or "similar" */ +#define curlcheck_progress_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_progress_callback) || \ + curlcheck_cb_compatible((expr), _curl_progress_callback1) || \ + curlcheck_cb_compatible((expr), _curl_progress_callback2)) +typedef int (*_curl_progress_callback1)(void *, + double, double, double, double); +typedef int (*_curl_progress_callback2)(const void *, + double, double, double, double); + +/* evaluates to true if expr is of type curl_debug_callback or "similar" */ +#define curlcheck_debug_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_debug_callback) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback1) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback2) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback3) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback4) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback5) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback6) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback7) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback8)) +typedef int (*_curl_debug_callback1) (CURL *, + curl_infotype, char *, size_t, void *); +typedef int (*_curl_debug_callback2) (CURL *, + curl_infotype, char *, size_t, const void *); +typedef int (*_curl_debug_callback3) (CURL *, + curl_infotype, const char *, size_t, void *); +typedef int (*_curl_debug_callback4) (CURL *, + curl_infotype, const char *, size_t, const void *); +typedef int (*_curl_debug_callback5) (CURL *, + curl_infotype, unsigned char *, size_t, void *); +typedef int (*_curl_debug_callback6) (CURL *, + curl_infotype, unsigned char *, size_t, const void *); +typedef int (*_curl_debug_callback7) (CURL *, + curl_infotype, const unsigned char *, size_t, void *); +typedef int (*_curl_debug_callback8) (CURL *, + curl_infotype, const unsigned char *, size_t, const void *); + +/* evaluates to true if expr is of type curl_ssl_ctx_callback or "similar" */ +/* this is getting even messier... */ +#define curlcheck_ssl_ctx_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_ssl_ctx_callback) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback1) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback2) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback3) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback4) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback5) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback6) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback7) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback8)) +typedef CURLcode (*_curl_ssl_ctx_callback1)(CURL *, void *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback2)(CURL *, void *, const void *); +typedef CURLcode (*_curl_ssl_ctx_callback3)(CURL *, const void *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback4)(CURL *, const void *, + const void *); +#ifdef HEADER_SSL_H +/* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX + * this will of course break if we're included before OpenSSL headers... + */ +typedef CURLcode (*_curl_ssl_ctx_callback5)(CURL *, SSL_CTX *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback6)(CURL *, SSL_CTX *, const void *); +typedef CURLcode (*_curl_ssl_ctx_callback7)(CURL *, const SSL_CTX *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback8)(CURL *, const SSL_CTX *, + const void *); +#else +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback5; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback6; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback7; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8; +#endif + +/* evaluates to true if expr is of type curl_conv_callback or "similar" */ +#define curlcheck_conv_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_conv_callback) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback1) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback2) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback3) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback4)) +typedef CURLcode (*_curl_conv_callback1)(char *, size_t length); +typedef CURLcode (*_curl_conv_callback2)(const char *, size_t length); +typedef CURLcode (*_curl_conv_callback3)(void *, size_t length); +typedef CURLcode (*_curl_conv_callback4)(const void *, size_t length); + +/* evaluates to true if expr is of type curl_seek_callback or "similar" */ +#define curlcheck_seek_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_seek_callback) || \ + curlcheck_cb_compatible((expr), _curl_seek_callback1) || \ + curlcheck_cb_compatible((expr), _curl_seek_callback2)) +typedef CURLcode (*_curl_seek_callback1)(void *, curl_off_t, int); +typedef CURLcode (*_curl_seek_callback2)(const void *, curl_off_t, int); + + +#endif /* CURLINC_TYPECHECK_GCC_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/urlapi.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/urlapi.h new file mode 100644 index 0000000..88cdeb3 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/urlapi.h @@ -0,0 +1,150 @@ +#ifndef CURLINC_URLAPI_H +#define CURLINC_URLAPI_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include "curl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* the error codes for the URL API */ +typedef enum { + CURLUE_OK, + CURLUE_BAD_HANDLE, /* 1 */ + CURLUE_BAD_PARTPOINTER, /* 2 */ + CURLUE_MALFORMED_INPUT, /* 3 */ + CURLUE_BAD_PORT_NUMBER, /* 4 */ + CURLUE_UNSUPPORTED_SCHEME, /* 5 */ + CURLUE_URLDECODE, /* 6 */ + CURLUE_OUT_OF_MEMORY, /* 7 */ + CURLUE_USER_NOT_ALLOWED, /* 8 */ + CURLUE_UNKNOWN_PART, /* 9 */ + CURLUE_NO_SCHEME, /* 10 */ + CURLUE_NO_USER, /* 11 */ + CURLUE_NO_PASSWORD, /* 12 */ + CURLUE_NO_OPTIONS, /* 13 */ + CURLUE_NO_HOST, /* 14 */ + CURLUE_NO_PORT, /* 15 */ + CURLUE_NO_QUERY, /* 16 */ + CURLUE_NO_FRAGMENT, /* 17 */ + CURLUE_NO_ZONEID, /* 18 */ + CURLUE_BAD_FILE_URL, /* 19 */ + CURLUE_BAD_FRAGMENT, /* 20 */ + CURLUE_BAD_HOSTNAME, /* 21 */ + CURLUE_BAD_IPV6, /* 22 */ + CURLUE_BAD_LOGIN, /* 23 */ + CURLUE_BAD_PASSWORD, /* 24 */ + CURLUE_BAD_PATH, /* 25 */ + CURLUE_BAD_QUERY, /* 26 */ + CURLUE_BAD_SCHEME, /* 27 */ + CURLUE_BAD_SLASHES, /* 28 */ + CURLUE_BAD_USER, /* 29 */ + CURLUE_LACKS_IDN, /* 30 */ + CURLUE_LAST +} CURLUcode; + +typedef enum { + CURLUPART_URL, + CURLUPART_SCHEME, + CURLUPART_USER, + CURLUPART_PASSWORD, + CURLUPART_OPTIONS, + CURLUPART_HOST, + CURLUPART_PORT, + CURLUPART_PATH, + CURLUPART_QUERY, + CURLUPART_FRAGMENT, + CURLUPART_ZONEID /* added in 7.65.0 */ +} CURLUPart; + +#define CURLU_DEFAULT_PORT (1<<0) /* return default port number */ +#define CURLU_NO_DEFAULT_PORT (1<<1) /* act as if no port number was set, + if the port number matches the + default for the scheme */ +#define CURLU_DEFAULT_SCHEME (1<<2) /* return default scheme if + missing */ +#define CURLU_NON_SUPPORT_SCHEME (1<<3) /* allow non-supported scheme */ +#define CURLU_PATH_AS_IS (1<<4) /* leave dot sequences */ +#define CURLU_DISALLOW_USER (1<<5) /* no user+password allowed */ +#define CURLU_URLDECODE (1<<6) /* URL decode on get */ +#define CURLU_URLENCODE (1<<7) /* URL encode on set */ +#define CURLU_APPENDQUERY (1<<8) /* append a form style part */ +#define CURLU_GUESS_SCHEME (1<<9) /* legacy curl-style guessing */ +#define CURLU_NO_AUTHORITY (1<<10) /* Allow empty authority when the + scheme is unknown. */ +#define CURLU_ALLOW_SPACE (1<<11) /* Allow spaces in the URL */ +#define CURLU_PUNYCODE (1<<12) /* get the host name in punycode */ +#define CURLU_PUNY2IDN (1<<13) /* punycode => IDN conversion */ + +typedef struct Curl_URL CURLU; + +/* + * curl_url() creates a new CURLU handle and returns a pointer to it. + * Must be freed with curl_url_cleanup(). + */ +CURL_EXTERN CURLU *curl_url(void); + +/* + * curl_url_cleanup() frees the CURLU handle and related resources used for + * the URL parsing. It will not free strings previously returned with the URL + * API. + */ +CURL_EXTERN void curl_url_cleanup(CURLU *handle); + +/* + * curl_url_dup() duplicates a CURLU handle and returns a new copy. The new + * handle must also be freed with curl_url_cleanup(). + */ +CURL_EXTERN CURLU *curl_url_dup(const CURLU *in); + +/* + * curl_url_get() extracts a specific part of the URL from a CURLU + * handle. Returns error code. The returned pointer MUST be freed with + * curl_free() afterwards. + */ +CURL_EXTERN CURLUcode curl_url_get(const CURLU *handle, CURLUPart what, + char **part, unsigned int flags); + +/* + * curl_url_set() sets a specific part of the URL in a CURLU handle. Returns + * error code. The passed in string will be copied. Passing a NULL instead of + * a part string, clears that part. + */ +CURL_EXTERN CURLUcode curl_url_set(CURLU *handle, CURLUPart what, + const char *part, unsigned int flags); + +/* + * curl_url_strerror() turns a CURLUcode value into the equivalent human + * readable error string. This is useful for printing meaningful error + * messages. + */ +CURL_EXTERN const char *curl_url_strerror(CURLUcode); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_URLAPI_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/websockets.h b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/websockets.h new file mode 100644 index 0000000..6ef6a2b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/include/curl/websockets.h @@ -0,0 +1,84 @@ +#ifndef CURLINC_WEBSOCKETS_H +#define CURLINC_WEBSOCKETS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +struct curl_ws_frame { + int age; /* zero */ + int flags; /* See the CURLWS_* defines */ + curl_off_t offset; /* the offset of this data into the frame */ + curl_off_t bytesleft; /* number of pending bytes left of the payload */ + size_t len; /* size of the current data chunk */ +}; + +/* flag bits */ +#define CURLWS_TEXT (1<<0) +#define CURLWS_BINARY (1<<1) +#define CURLWS_CONT (1<<2) +#define CURLWS_CLOSE (1<<3) +#define CURLWS_PING (1<<4) +#define CURLWS_OFFSET (1<<5) + +/* + * NAME curl_ws_recv() + * + * DESCRIPTION + * + * Receives data from the websocket connection. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen, + size_t *recv, + const struct curl_ws_frame **metap); + +/* flags for curl_ws_send() */ +#define CURLWS_PONG (1<<6) + +/* + * NAME curl_ws_send() + * + * DESCRIPTION + * + * Sends data over the websocket connection. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_ws_send(CURL *curl, const void *buffer, + size_t buflen, size_t *sent, + curl_off_t fragsize, + unsigned int flags); + +/* bits for the CURLOPT_WS_OPTIONS bitmask: */ +#define CURLWS_RAW_MODE (1<<0) + +CURL_EXTERN const struct curl_ws_frame *curl_ws_meta(CURL *curl); + +#ifdef __cplusplus +} +#endif + +#endif /* CURLINC_WEBSOCKETS_H */ diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/lib/cmake/CURL/CURLConfig.cmake b/packages/libcpr.1.10.5/build/native/Win32/Release/lib/cmake/CURL/CURLConfig.cmake new file mode 100644 index 0000000..5349512 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/lib/cmake/CURL/CURLConfig.cmake @@ -0,0 +1,62 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() ####### +####### Any changes to this file will be overwritten by the next CMake run #### +####### The input file was curl-config.cmake.in ######## + +get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE) + +macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() +endmacro() + +macro(check_required_components _NAME) + foreach(comp ${${_NAME}_FIND_COMPONENTS}) + if(NOT ${_NAME}_${comp}_FOUND) + if(${_NAME}_FIND_REQUIRED_${comp}) + set(${_NAME}_FOUND FALSE) + endif() + endif() + endforeach() +endmacro() + +#################################################################################### + +include(CMakeFindDependencyMacro) +if() + find_dependency(OpenSSL ) +endif() +if(OFF) + find_dependency(ZLIB ) +endif() + +include("${CMAKE_CURRENT_LIST_DIR}/CURLTargets.cmake") +check_required_components("CURL") + +# Alias for either shared or static library +add_library(CURL::libcurl ALIAS CURL::libcurl_shared) diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/lib/cmake/CURL/CURLConfigVersion.cmake b/packages/libcpr.1.10.5/build/native/Win32/Release/lib/cmake/CURL/CURLConfigVersion.cmake new file mode 100644 index 0000000..91490ee --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/lib/cmake/CURL/CURLConfigVersion.cmake @@ -0,0 +1,70 @@ +if(NOT PACKAGE_FIND_VERSION_RANGE AND PACKAGE_FIND_VERSION_MAJOR STREQUAL "7") + # Version 8 satisfies version 7... requirements + set(PACKAGE_FIND_VERSION_MAJOR 8) + set(PACKAGE_FIND_VERSION_COUNT 1) +endif() +# This is a basic version file for the Config-mode of find_package(). +# It is used by write_basic_package_version_file() as input file for configure_file() +# to create a version-file which can be installed along a config.cmake file. +# +# The created file sets PACKAGE_VERSION_EXACT if the current version string and +# the requested version string are exactly the same and it sets +# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version, +# but only if the requested major version is the same as the current one. +# The variable CVF_VERSION must be set before calling configure_file(). + + +set(PACKAGE_VERSION "8.4.0") + +if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + + if("8.4.0" MATCHES "^([0-9]+)\\.") + set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}") + if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0) + string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}") + endif() + else() + set(CVF_VERSION_MAJOR "8.4.0") + endif() + + if(PACKAGE_FIND_VERSION_RANGE) + # both endpoints of the range must have the expected major version + math (EXPR CVF_VERSION_MAJOR_NEXT "${CVF_VERSION_MAJOR} + 1") + if (NOT PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR + OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX_MAJOR STREQUAL CVF_VERSION_MAJOR) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX VERSION_LESS_EQUAL CVF_VERSION_MAJOR_NEXT))) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + elseif(PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR + AND ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS_EQUAL PACKAGE_FIND_VERSION_MAX) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MAX))) + set(PACKAGE_VERSION_COMPATIBLE TRUE) + else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) + endif() + else() + if(PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR) + set(PACKAGE_VERSION_COMPATIBLE TRUE) + else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) + endif() + + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() + endif() +endif() + + +# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "4" STREQUAL "") + return() +endif() + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "4") + math(EXPR installedBits "4 * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/lib/cmake/CURL/CURLTargets-release.cmake b/packages/libcpr.1.10.5/build/native/Win32/Release/lib/cmake/CURL/CURLTargets-release.cmake new file mode 100644 index 0000000..e80df75 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/lib/cmake/CURL/CURLTargets-release.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file for configuration "Release". +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "CURL::libcurl_shared" for configuration "Release" +set_property(TARGET CURL::libcurl_shared APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(CURL::libcurl_shared PROPERTIES + IMPORTED_IMPLIB_RELEASE "${_IMPORT_PREFIX}/lib/libcurl_imp.lib" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/libcurl.dll" + ) + +list(APPEND _cmake_import_check_targets CURL::libcurl_shared ) +list(APPEND _cmake_import_check_files_for_CURL::libcurl_shared "${_IMPORT_PREFIX}/lib/libcurl_imp.lib" "${_IMPORT_PREFIX}/bin/libcurl.dll" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/lib/cmake/CURL/CURLTargets.cmake b/packages/libcpr.1.10.5/build/native/Win32/Release/lib/cmake/CURL/CURLTargets.cmake new file mode 100644 index 0000000..64a4edd --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/lib/cmake/CURL/CURLTargets.cmake @@ -0,0 +1,102 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8) + message(FATAL_ERROR "CMake >= 2.8.0 required") +endif() +if(CMAKE_VERSION VERSION_LESS "2.8.3") + message(FATAL_ERROR "CMake >= 2.8.3 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.8.3...3.25) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_cmake_targets_defined "") +set(_cmake_targets_not_defined "") +set(_cmake_expected_targets "") +foreach(_cmake_expected_target IN ITEMS CURL::libcurl_shared) + list(APPEND _cmake_expected_targets "${_cmake_expected_target}") + if(TARGET "${_cmake_expected_target}") + list(APPEND _cmake_targets_defined "${_cmake_expected_target}") + else() + list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}") + endif() +endforeach() +unset(_cmake_expected_target) +if(_cmake_targets_defined STREQUAL _cmake_expected_targets) + unset(_cmake_targets_defined) + unset(_cmake_targets_not_defined) + unset(_cmake_expected_targets) + unset(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT _cmake_targets_defined STREQUAL "") + string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}") + string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n") +endif() +unset(_cmake_targets_defined) +unset(_cmake_targets_not_defined) +unset(_cmake_expected_targets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target CURL::libcurl_shared +add_library(CURL::libcurl_shared SHARED IMPORTED) + +set_target_properties(CURL::libcurl_shared PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +# Load information for each installed configuration. +file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/CURLTargets-*.cmake") +foreach(_cmake_config_file IN LISTS _cmake_config_files) + include("${_cmake_config_file}") +endforeach() +unset(_cmake_config_file) +unset(_cmake_config_files) + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(_cmake_target IN LISTS _cmake_import_check_targets) + foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}") + if(NOT EXISTS "${_cmake_file}") + message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file + \"${_cmake_file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_cmake_file) + unset("_cmake_import_check_files_for_${_cmake_target}") +endforeach() +unset(_cmake_target) +unset(_cmake_import_check_targets) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/packages/libcpr.1.10.5/build/native/Win32/Release/lib/pkgconfig/libcurl.pc b/packages/libcpr.1.10.5/build/native/Win32/Release/lib/pkgconfig/libcurl.pc new file mode 100644 index 0000000..5d808fc --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/Win32/Release/lib/pkgconfig/libcurl.pc @@ -0,0 +1,41 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +# This should most probably benefit from getting a "Requires:" field added +# dynamically by configure. +# +prefix=C:/Program Files (x86)/cpr +exec_prefix=${prefix} +libdir=C:/Program Files (x86)/cpr/lib +includedir=${prefix}/include +supported_protocols="HTTP HTTPS" +supported_features="SSL IPv6 unixsockets AsynchDNS Largefile SSPI alt-svc HSTS SPNEGO Kerberos NTLM HTTPS-proxy threadsafe" + +Name: libcurl +URL: https://curl.se/ +Description: Library to transfer files with ftp, http, etc. +Version: 8.4.0 +Libs: -L${libdir} -lcurl +Libs.private: -lws2_32 -ladvapi32 -lcrypt32 -lbcrypt +Cflags: -I${includedir} diff --git a/packages/libcpr.1.10.5/build/native/libcpr.props b/packages/libcpr.1.10.5/build/native/libcpr.props new file mode 100644 index 0000000..ea6c695 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/libcpr.props @@ -0,0 +1,26 @@ + + + + mdd + md + + + + + + + + %(RecursiveDir)%(FileName)%(Extension) + PreserveNewest + + + + @(CprLibs) + + + + $(CprLibraries);%(AdditionalDependencies) + + + \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/libcpr.targets b/packages/libcpr.1.10.5/build/native/libcpr.targets new file mode 100644 index 0000000..0124891 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/libcpr.targets @@ -0,0 +1,11 @@ + + + + + + + + $(MSBuildThisFileDirectory)\$(Platform)\$(Configuration)\include\;%(AdditionalIncludeDirectories) + + + \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/bin/curl-config b/packages/libcpr.1.10.5/build/native/x64/Debug/bin/curl-config new file mode 100644 index 0000000..94e29bf --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/bin/curl-config @@ -0,0 +1,196 @@ +#! /bin/sh +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +prefix="C:/Program Files/cpr" +exec_prefix=${prefix} +includedir=${prefix}/include +cppflag_curl_staticlib= + +usage() +{ + cat <&2 + exit 1 + fi + ;; + + --configure) + echo + ;; + + *) + echo "unknown option: $1" + usage 1 + ;; + esac + shift +done + +exit 0 diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/accept_encoding.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/accept_encoding.h new file mode 100644 index 0000000..167d7c2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/accept_encoding.h @@ -0,0 +1,41 @@ +#ifndef CPR_ACCEPT_ENCODING_H +#define CPR_ACCEPT_ENCODING_H + +#include +#include +#include +#include +#include + +namespace cpr { + +enum class AcceptEncodingMethods { + identity, + deflate, + zlib, + gzip, + disabled, +}; + +// NOLINTNEXTLINE(cert-err58-cpp) +static const std::map AcceptEncodingMethodsStringMap{{AcceptEncodingMethods::identity, "identity"}, {AcceptEncodingMethods::deflate, "deflate"}, {AcceptEncodingMethods::zlib, "zlib"}, {AcceptEncodingMethods::gzip, "gzip"}, {AcceptEncodingMethods::disabled, "disabled"}}; + +class AcceptEncoding { + public: + AcceptEncoding() = default; + // NOLINTNEXTLINE(google-explicit-constructor) + AcceptEncoding(const std::initializer_list& methods); + // NOLINTNEXTLINE(google-explicit-constructor) + AcceptEncoding(const std::initializer_list& methods); + + [[nodiscard]] bool empty() const noexcept; + [[nodiscard]] const std::string getString() const; + [[nodiscard]] bool disabled() const; + + private: + std::unordered_set methods_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/api.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/api.h new file mode 100644 index 0000000..ba9c64e --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/api.h @@ -0,0 +1,392 @@ +#ifndef CPR_API_H +#define CPR_API_H + +#include +#include +#include +#include +#include + +#include "cpr/async.h" +#include "cpr/async_wrapper.h" +#include "cpr/auth.h" +#include "cpr/bearer.h" +#include "cpr/cprtypes.h" +#include "cpr/multipart.h" +#include "cpr/multiperform.h" +#include "cpr/payload.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include + +namespace cpr { + +using AsyncResponse = AsyncWrapper; + +namespace priv { + +template +void set_option_internal(Session& session, CurrentType&& current_option) { + session.SetOption(std::forward(current_option)); +} + +template <> +inline void set_option_internal(Session& session, Header&& current_option) { + // Header option was already provided -> Update previous header + session.UpdateHeader(std::forward
(current_option)); +} + +template +void set_option_internal(Session& session, CurrentType&& current_option, Ts&&... ts) { + set_option_internal(session, std::forward(current_option)); + + if (std::is_same::value) { + set_option_internal(session, std::forward(ts)...); + } else { + set_option_internal(session, std::forward(ts)...); + } +} + +template +void set_option(Session& session, Ts&&... ts) { + set_option_internal(session, std::forward(ts)...); +} + +// Idea: https://stackoverflow.com/a/19060157 +template +void apply_set_option_internal(Session& session, Tuple&& t, std::index_sequence) { + set_option(session, std::get(std::forward(t))...); +} + +// Idea: https://stackoverflow.com/a/19060157 +template +void apply_set_option(Session& session, Tuple&& t) { + using Indices = std::make_index_sequence>::value>; + apply_set_option_internal(session, std::forward(t), Indices()); +} + +template +void setup_multiperform_internal(MultiPerform& multiperform, T&& t) { + std::shared_ptr session = std::make_shared(); + apply_set_option(*session, t); + multiperform.AddSession(session); +} + +template +void setup_multiperform_internal(MultiPerform& multiperform, T&& t, Ts&&... ts) { + std::shared_ptr session = std::make_shared(); + apply_set_option(*session, t); + multiperform.AddSession(session); + setup_multiperform_internal(multiperform, std::forward(ts)...); +} + +template +void setup_multiperform(MultiPerform& multiperform, Ts&&... ts) { + setup_multiperform_internal(multiperform, std::forward(ts)...); +} + +using session_action_t = cpr::Response (cpr::Session::*)(); + +template +void setup_multiasync(std::vector>& responses, T&& parameters) { + std::shared_ptr cancellation_state = std::make_shared(false); + + std::function execFn{[cancellation_state](T params) { + if (cancellation_state->load()) { + return Response{}; + } + cpr::Session s{}; + s.SetCancellationParam(cancellation_state); + apply_set_option(s, std::forward(params)); + return std::invoke(SessionAction, s); + }}; + responses.emplace_back(GlobalThreadPool::GetInstance()->Submit(std::move(execFn), std::forward(parameters)), std::move(cancellation_state)); +} + +template +void setup_multiasync(std::vector>& responses, T&& head, Ts&&... tail) { + setup_multiasync(responses, std::forward(head)); + if constexpr (sizeof...(Ts) > 0) { + setup_multiasync(responses, std::forward(tail)...); + } +} + +} // namespace priv + +// Get methods +template +Response Get(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Get(); +} + +// Get async methods +template +AsyncResponse GetAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Get(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Get callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto GetCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Get(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Post methods +template +Response Post(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Post(); +} + +// Post async methods +template +AsyncResponse PostAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Post(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Post callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto PostCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Post(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Put methods +template +Response Put(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Put(); +} + +// Put async methods +template +AsyncResponse PutAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Put(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Put callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto PutCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Put(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Head methods +template +Response Head(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Head(); +} + +// Head async methods +template +AsyncResponse HeadAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Head(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Head callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto HeadCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Head(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Delete methods +template +Response Delete(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Delete(); +} + +// Delete async methods +template +AsyncResponse DeleteAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Delete(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Delete callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto DeleteCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Delete(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Options methods +template +Response Options(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Options(); +} + +// Options async methods +template +AsyncResponse OptionsAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Options(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Options callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto OptionsCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Options(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Patch methods +template +Response Patch(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Patch(); +} + +// Patch async methods +template +AsyncResponse PatchAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Patch(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Patch callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto PatchCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Patch(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Download methods +template +Response Download(std::ofstream& file, Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Download(file); +} + +// Download async method +template +AsyncResponse DownloadAsync(fs::path local_path, Ts... ts) { + return AsyncWrapper{std::async( + std::launch::async, + [](fs::path local_path_, Ts... ts_) { + std::ofstream f(local_path_.c_str()); + return Download(f, std::move(ts_)...); + }, + std::move(local_path), std::move(ts)...)}; +} + +// Download with user callback +template +Response Download(const WriteCallback& write, Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Download(write); +} + +// Multi requests +template +std::vector MultiGet(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Get(); +} + +template +std::vector MultiDelete(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Delete(); +} + +template +std::vector MultiPut(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Put(); +} + +template +std::vector MultiHead(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Head(); +} + +template +std::vector MultiOptions(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Options(); +} + +template +std::vector MultiPatch(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Patch(); +} + +template +std::vector MultiPost(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Post(); +} + +template +std::vector> MultiGetAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Get>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiDeleteAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Delete>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiHeadAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Head>(ret, std::forward(ts)...); + return ret; +} +template +std::vector> MultiOptionsAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Options>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiPatchAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Patch>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiPostAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Post>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiPutAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Put>(ret, std::forward(ts)...); + return ret; +} + + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/async.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/async.h new file mode 100644 index 0000000..1305834 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/async.h @@ -0,0 +1,50 @@ +#ifndef CPR_ASYNC_H +#define CPR_ASYNC_H + +#include "async_wrapper.h" +#include "singleton.h" +#include "threadpool.h" + +namespace cpr { + +class GlobalThreadPool : public ThreadPool { + CPR_SINGLETON_DECL(GlobalThreadPool) + protected: + GlobalThreadPool() = default; + + public: + ~GlobalThreadPool() override = default; +}; + +/** + * Return a wrapper for a future, calling future.get() will wait until the task is done and return RetType. + * async(fn, args...) + * async(std::bind(&Class::mem_fn, &obj)) + * async(std::mem_fn(&Class::mem_fn, &obj)) + **/ +template +auto async(Fn&& fn, Args&&... args) { + return AsyncWrapper{GlobalThreadPool::GetInstance()->Submit(std::forward(fn), std::forward(args)...)}; +} + +class async { + public: + static void startup(size_t min_threads = CPR_DEFAULT_THREAD_POOL_MIN_THREAD_NUM, size_t max_threads = CPR_DEFAULT_THREAD_POOL_MAX_THREAD_NUM, std::chrono::milliseconds max_idle_ms = CPR_DEFAULT_THREAD_POOL_MAX_IDLE_TIME) { + GlobalThreadPool* gtp = GlobalThreadPool::GetInstance(); + if (gtp->IsStarted()) { + return; + } + gtp->SetMinThreadNum(min_threads); + gtp->SetMaxThreadNum(max_threads); + gtp->SetMaxIdleTime(max_idle_ms); + gtp->Start(); + } + + static void cleanup() { + GlobalThreadPool::ExitInstance(); + } +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/async_wrapper.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/async_wrapper.h new file mode 100644 index 0000000..bb46bf9 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/async_wrapper.h @@ -0,0 +1,140 @@ +#ifndef CPR_ASYNC_WRAPPER_H +#define CPR_ASYNC_WRAPPER_H + +#include +#include +#include + +#include "cpr/response.h" + +namespace cpr { +enum class [[nodiscard]] CancellationResult { failure, success, invalid_operation }; + +/** + * A class template intended to wrap results of async operations (instances of std::future) + * and also provide extended capablilities relaed to these requests, for example cancellation. + * + * The RAII semantics are the same as std::future - moveable, not copyable. + */ +template +class AsyncWrapper { + private: + std::future future; + std::shared_ptr is_cancelled; + + public: + // Constructors + explicit AsyncWrapper(std::future&& f) : future{std::move(f)} {} + AsyncWrapper(std::future&& f, std::shared_ptr&& cancelledState) : future{std::move(f)}, is_cancelled{std::move(cancelledState)} {} + + // Copy Semantics + AsyncWrapper(const AsyncWrapper&) = delete; + AsyncWrapper& operator=(const AsyncWrapper&) = delete; + + // Move Semantics + AsyncWrapper(AsyncWrapper&&) noexcept = default; + AsyncWrapper& operator=(AsyncWrapper&&) noexcept = default; + + // Destructor + ~AsyncWrapper() { + if constexpr (isCancellable) { + if(is_cancelled) { + is_cancelled->store(true); + } + } + } + // These methods replicate the behaviour of std::future + [[nodiscard]] T get() { + if constexpr (isCancellable) { + if (IsCancelled()) { + throw std::logic_error{"Calling AsyncWrapper::get on a cancelled request!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::get when the associated future instance is invalid!"}; + } + return future.get(); + } + + [[nodiscard]] bool valid() const noexcept { + if constexpr (isCancellable) { + return !is_cancelled->load() && future.valid(); + } else { + return future.valid(); + } + } + + void wait() const { + if constexpr (isCancellable) { + if (is_cancelled->load()) { + throw std::logic_error{"Calling AsyncWrapper::wait when the associated future is invalid or cancelled!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is invalid!"}; + } + future.wait(); + } + + template + std::future_status wait_for(const std::chrono::duration& timeout_duration) const { + if constexpr (isCancellable) { + if (IsCancelled()) { + throw std::logic_error{"Calling AsyncWrapper::wait_for when the associated future is cancelled!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is invalid!"}; + } + return future.wait_for(timeout_duration); + } + + template + std::future_status wait_until(const std::chrono::time_point& timeout_time) const { + if constexpr (isCancellable) { + if (IsCancelled()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is cancelled!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is invalid!"}; + } + return future.wait_until(timeout_time); + } + + std::shared_future share() noexcept { + return future.share(); + } + + // Cancellation-related methods + CancellationResult Cancel() { + if constexpr (!isCancellable) { + return CancellationResult::invalid_operation; + } + if (!future.valid() || is_cancelled->load()) { + return CancellationResult::invalid_operation; + } + is_cancelled->store(true); + return CancellationResult::success; + } + + [[nodiscard]] bool IsCancelled() const { + if constexpr (isCancellable) { + return is_cancelled->load(); + } else { + return false; + } + } +}; + +// Deduction guides +template +AsyncWrapper(std::future&&) -> AsyncWrapper; + +template +AsyncWrapper(std::future&&, std::shared_ptr&&) -> AsyncWrapper; + +} // namespace cpr + + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/auth.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/auth.h new file mode 100644 index 0000000..e783969 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/auth.h @@ -0,0 +1,32 @@ +#ifndef CPR_AUTH_H +#define CPR_AUTH_H + +#include + +#include + +namespace cpr { + +enum class AuthMode { BASIC, DIGEST, NTLM }; + +class Authentication { + public: + Authentication(std::string username, std::string password, AuthMode auth_mode) : auth_string_{std::move(username) + ":" + std::move(password)}, auth_mode_{std::move(auth_mode)} {} + Authentication(const Authentication& other) = default; + Authentication(Authentication&& old) noexcept = default; + ~Authentication() noexcept; + + Authentication& operator=(Authentication&& old) noexcept = default; + Authentication& operator=(const Authentication& other) = default; + + const char* GetAuthString() const noexcept; + AuthMode GetAuthMode() const noexcept; + + private: + std::string auth_string_; + AuthMode auth_mode_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/bearer.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/bearer.h new file mode 100644 index 0000000..5e58a7d --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/bearer.h @@ -0,0 +1,34 @@ +#ifndef CPR_BEARER_H +#define CPR_BEARER_H + +#include +#include + +#include + +namespace cpr { + +// Only supported with libcurl >= 7.61.0. +// As an alternative use SetHeader and add the token manually. +#if LIBCURL_VERSION_NUM >= 0x073D00 +class Bearer { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Bearer(std::string token) : token_string_{std::move(token)} {} + Bearer(const Bearer& other) = default; + Bearer(Bearer&& old) noexcept = default; + virtual ~Bearer() noexcept; + + Bearer& operator=(Bearer&& old) noexcept = default; + Bearer& operator=(const Bearer& other) = default; + + virtual const char* GetToken() const noexcept; + + protected: + std::string token_string_; +}; +#endif + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/body.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/body.h new file mode 100644 index 0000000..f691d9c --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/body.h @@ -0,0 +1,54 @@ +#ifndef CPR_BODY_H +#define CPR_BODY_H + +#include +#include +#include +#include +#include + +#include "cpr/buffer.h" +#include "cpr/cprtypes.h" +#include "cpr/file.h" + +namespace cpr { + +class Body : public StringHolder { + public: + Body() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Body(std::string body) : StringHolder(std::move(body)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Body(std::string_view body) : StringHolder(body) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Body(const char* body) : StringHolder(body) {} + Body(const char* str, size_t len) : StringHolder(str, len) {} + Body(const std::initializer_list args) : StringHolder(args) {} + // NOLINTNEXTLINE(google-explicit-constructor, cppcoreguidelines-pro-type-reinterpret-cast) + Body(const Buffer& buffer) : StringHolder(reinterpret_cast(buffer.data), static_cast(buffer.datalen)) {} + // NOLINTNEXTLINE(google-explicit-constructor) + Body(const File& file) { + std::ifstream is(file.filepath, std::ifstream::binary); + if (!is) { + throw std::invalid_argument("Can't open the file for HTTP request body!"); + } + + is.seekg(0, std::ios::end); + const std::streampos length = is.tellg(); + is.seekg(0, std::ios::beg); + std::string buffer; + buffer.resize(static_cast(length)); + is.read(buffer.data(), length); + str_ = std::move(buffer); + } + Body(const Body& other) = default; + Body(Body&& old) noexcept = default; + ~Body() override = default; + + Body& operator=(Body&& old) noexcept = default; + Body& operator=(const Body& other) = default; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/buffer.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/buffer.h new file mode 100644 index 0000000..5665faa --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/buffer.h @@ -0,0 +1,33 @@ +#ifndef CPR_BUFFER_H +#define CPR_BUFFER_H + +#include + +#include + +namespace cpr { + +struct Buffer { + using data_t = const char*; + + template + Buffer(Iterator begin, Iterator end, fs::path&& p_filename) + // Ignored here since libcurl reqires a long. + // There is also no way around the reinterpret_cast. + // NOLINTNEXTLINE(google-runtime-int, cppcoreguidelines-pro-type-reinterpret-cast) + : data{reinterpret_cast(&(*begin))}, datalen{static_cast(std::distance(begin, end))}, filename(std::move(p_filename)) { + is_random_access_iterator(begin, end); + static_assert(sizeof(*begin) == 1, "Only byte buffers can be used"); + } + + template + typename std::enable_if::iterator_category, std::random_access_iterator_tag>::value>::type is_random_access_iterator(Iterator /* begin */, Iterator /* end */) {} + + data_t data; + size_t datalen; + const fs::path filename; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/callback.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/callback.h new file mode 100644 index 0000000..dc1c6ee --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/callback.h @@ -0,0 +1,111 @@ +#ifndef CPR_CALLBACK_H +#define CPR_CALLBACK_H + +#include "cprtypes.h" + +#include +#include +#include +#include + +namespace cpr { + +class ReadCallback { + public: + ReadCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ReadCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), size{-1}, callback{std::move(p_callback)} {} + ReadCallback(cpr_off_t p_size, std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), size{p_size}, callback{std::move(p_callback)} {} + bool operator()(char* buffer, size_t& buffer_size) const { + return callback(buffer, buffer_size, userdata); + } + + intptr_t userdata{}; + cpr_off_t size{}; + std::function callback; +}; + +class HeaderCallback { + public: + HeaderCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + HeaderCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + bool operator()(std::string header) const { + return callback(std::move(header), userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +class WriteCallback { + public: + WriteCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + WriteCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + bool operator()(std::string data) const { + return callback(std::move(data), userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +class ProgressCallback { + public: + ProgressCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ProgressCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + bool operator()(cpr_pf_arg_t downloadTotal, cpr_pf_arg_t downloadNow, cpr_pf_arg_t uploadTotal, cpr_pf_arg_t uploadNow) const { + return callback(downloadTotal, downloadNow, uploadTotal, uploadNow, userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +class DebugCallback { + public: + enum class InfoType { + TEXT = 0, + HEADER_IN = 1, + HEADER_OUT = 2, + DATA_IN = 3, + DATA_OUT = 4, + SSL_DATA_IN = 5, + SSL_DATA_OUT = 6, + }; + DebugCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + DebugCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + void operator()(InfoType type, std::string data) const { + callback(type, std::move(data), userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +/** + * Functor class for progress functions that will be used in cancellable requests. + */ +class CancellationCallback { + public: + CancellationCallback() = default; + explicit CancellationCallback(std::shared_ptr&& cs) : cancellation_state{std::move(cs)} {} + + CancellationCallback(std::shared_ptr&& cs, ProgressCallback& u_cb) : cancellation_state{std::move(cs)}, user_cb{std::reference_wrapper{u_cb}} {} + + bool operator()(cpr_pf_arg_t dltotal, cpr_pf_arg_t dlnow, cpr_pf_arg_t ultotal, cpr_pf_arg_t ulnow) const; + + void SetProgressCallback(ProgressCallback& u_cb); + + private: + std::shared_ptr cancellation_state; + std::optional> user_cb; +}; + + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cert_info.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cert_info.h new file mode 100644 index 0000000..6c328ee --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cert_info.h @@ -0,0 +1,35 @@ +#ifndef CPR_CERT_INFO_H +#define CPR_CERT_INFO_H + +#include +#include +#include + +namespace cpr { + +class CertInfo { + private: + std::vector cert_info_; + + public: + CertInfo() = default; + CertInfo(const std::initializer_list& entry) : cert_info_{entry} {}; + ~CertInfo() noexcept = default; + + using iterator = std::vector::iterator; + using const_iterator = std::vector::const_iterator; + + std::string& operator[](const size_t& pos); + iterator begin(); + iterator end(); + const_iterator begin() const; + const_iterator end() const; + const_iterator cbegin() const; + const_iterator cend() const; + void emplace_back(const std::string& str); + void push_back(const std::string& str); + void pop_back(); +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/connect_timeout.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/connect_timeout.h new file mode 100644 index 0000000..546e8a5 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/connect_timeout.h @@ -0,0 +1,18 @@ +#ifndef CPR_CONNECT_TIMEOUT_H +#define CPR_CONNECT_TIMEOUT_H + +#include "cpr/timeout.h" + +namespace cpr { + +class ConnectTimeout : public Timeout { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ConnectTimeout(const std::chrono::milliseconds& duration) : Timeout{duration} {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ConnectTimeout(const std::int32_t& milliseconds) : Timeout{milliseconds} {} +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cookies.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cookies.h new file mode 100644 index 0000000..c018ea4 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cookies.h @@ -0,0 +1,92 @@ +#ifndef CPR_COOKIES_H +#define CPR_COOKIES_H + +#include "cpr/curlholder.h" +#include +#include +#include +#include +#include + +namespace cpr { +/** + * EXPIRES_STRING_SIZE is an explicitly static and const variable that could be only accessed within the same namespace and is immutable. + * To be used for "std::array", the expression must have a constant value, so EXPIRES_STRING_SIZE must be a const value. + **/ +static const std::size_t EXPIRES_STRING_SIZE = 100; + +class Cookie { + public: + Cookie() = default; + /** + * Some notes for the default value used by expires: + * std::chrono::system_clock::time_point::min() won't work on Windows due to the min, max clash there. + * So we fall back to std::chrono::system_clock::from_time_t(0) for the minimum value here. + **/ + Cookie(const std::string& name, const std::string& value, const std::string& domain = "", bool p_isIncludingSubdomains = false, const std::string& path = "/", bool p_isHttpsOnly = false, std::chrono::system_clock::time_point expires = std::chrono::system_clock::from_time_t(0)) : name_{name}, value_{value}, domain_{domain}, includeSubdomains_{p_isIncludingSubdomains}, path_{path}, httpsOnly_{p_isHttpsOnly}, expires_{expires} {}; + const std::string GetDomain() const; + bool IsIncludingSubdomains() const; + const std::string GetPath() const; + bool IsHttpsOnly() const; + const std::chrono::system_clock::time_point GetExpires() const; + const std::string GetExpiresString() const; + const std::string GetName() const; + const std::string GetValue() const; + + private: + std::string name_; + std::string value_; + std::string domain_; + bool includeSubdomains_{}; + std::string path_; + bool httpsOnly_{}; + /** + * TODO: Update the implementation using `std::chrono::utc_clock` of C++20 + **/ + std::chrono::system_clock::time_point expires_{}; +}; + +class Cookies { + public: + /** + * Should we URL-encode cookies when making a request. + * Based on RFC6265, it is recommended but not mandatory to encode cookies. + * + * ------- + * To maximize compatibility with user agents, servers that wish to + * store arbitrary data in a cookie-value SHOULD encode that data, for + * example, using Base64 [RFC4648]. + * ------- + * Source: RFC6265 (https://www.ietf.org/rfc/rfc6265.txt) + **/ + bool encode{true}; + + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Cookies(bool p_encode = true) : encode{p_encode} {}; + Cookies(const std::initializer_list& cookies, bool p_encode = true) : encode{p_encode}, cookies_{cookies} {}; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Cookies(const cpr::Cookie& cookie, bool p_encode = true) : encode{p_encode}, cookies_{cookie} {}; + + cpr::Cookie& operator[](size_t pos); + const std::string GetEncoded(const CurlHolder& holder) const; + + using iterator = std::vector::iterator; + using const_iterator = std::vector::const_iterator; + + iterator begin(); + iterator end(); + const_iterator begin() const; + const_iterator end() const; + const_iterator cbegin() const; + const_iterator cend() const; + void emplace_back(const Cookie& str); + void push_back(const Cookie& str); + void pop_back(); + + private: + std::vector cookies_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cpr.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cpr.h new file mode 100644 index 0000000..fbad172 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cpr.h @@ -0,0 +1,46 @@ +#ifndef CPR_CPR_H +#define CPR_CPR_H + +#include "cpr/api.h" +#include "cpr/auth.h" +#include "cpr/bearer.h" +#include "cpr/callback.h" +#include "cpr/cert_info.h" +#include "cpr/connect_timeout.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/cprver.h" +#include "cpr/curl_container.h" +#include "cpr/curlholder.h" +#include "cpr/error.h" +#include "cpr/http_version.h" +#include "cpr/interceptor.h" +#include "cpr/interface.h" +#include "cpr/limit_rate.h" +#include "cpr/local_port.h" +#include "cpr/local_port_range.h" +#include "cpr/low_speed.h" +#include "cpr/multipart.h" +#include "cpr/multiperform.h" +#include "cpr/parameters.h" +#include "cpr/payload.h" +#include "cpr/proxies.h" +#include "cpr/proxyauth.h" +#include "cpr/range.h" +#include "cpr/redirect.h" +#include "cpr/reserve_size.h" +#include "cpr/resolve.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include "cpr/ssl_ctx.h" +#include "cpr/ssl_options.h" +#include "cpr/status_codes.h" +#include "cpr/timeout.h" +#include "cpr/unix_socket.h" +#include "cpr/user_agent.h" +#include "cpr/util.h" +#include "cpr/verbose.h" + +#define CPR_LIBCURL_VERSION_NUM LIBCURL_VERSION_NUM + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cprtypes.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cprtypes.h new file mode 100644 index 0000000..65da738 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cprtypes.h @@ -0,0 +1,144 @@ +#ifndef CPR_CPR_TYPES_H +#define CPR_CPR_TYPES_H + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace cpr { + +/** + * Wrapper around "curl_off_t" to prevent applications from having to link against libcurl. + **/ +using cpr_off_t = curl_off_t; + +/** + * The argument type for progress functions, dependent on libcurl version + **/ +#if LIBCURL_VERSION_NUM < 0x072000 +using cpr_pf_arg_t = double; +#else +using cpr_pf_arg_t = cpr_off_t; +#endif + +template +class StringHolder { + public: + StringHolder() = default; + explicit StringHolder(std::string str) : str_(std::move(str)) {} + explicit StringHolder(std::string_view str) : str_(str) {} + explicit StringHolder(const char* str) : str_(str) {} + StringHolder(const char* str, size_t len) : str_(str, len) {} + StringHolder(const std::initializer_list args) { + str_ = std::accumulate(args.begin(), args.end(), str_); + } + StringHolder(const StringHolder& other) = default; + StringHolder(StringHolder&& old) noexcept = default; + virtual ~StringHolder() = default; + + StringHolder& operator=(StringHolder&& old) noexcept = default; + + StringHolder& operator=(const StringHolder& other) = default; + + explicit operator std::string() const { + return str_; + } + + T operator+(const char* rhs) const { + return T(str_ + rhs); + } + + T operator+(const std::string& rhs) const { + return T(str_ + rhs); + } + + T operator+(const StringHolder& rhs) const { + return T(str_ + rhs.str_); + } + + void operator+=(const char* rhs) { + str_ += rhs; + } + void operator+=(const std::string& rhs) { + str_ += rhs; + } + void operator+=(const StringHolder& rhs) { + str_ += rhs; + } + + bool operator==(const char* rhs) const { + return str_ == rhs; + } + bool operator==(const std::string& rhs) const { + return str_ == rhs; + } + bool operator==(const StringHolder& rhs) const { + return str_ == rhs.str_; + } + + bool operator!=(const char* rhs) const { + return str_.c_str() != rhs; + } + bool operator!=(const std::string& rhs) const { + return str_ != rhs; + } + bool operator!=(const StringHolder& rhs) const { + return str_ != rhs.str_; + } + + const std::string& str() { + return str_; + } + const std::string& str() const { + return str_; + } + const char* c_str() const { + return str_.c_str(); + } + const char* data() const { + return str_.data(); + } + + protected: + std::string str_{}; +}; + +template +std::ostream& operator<<(std::ostream& os, const StringHolder& s) { + os << s.str(); + return os; +} + +class Url : public StringHolder { + public: + Url() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Url(std::string url) : StringHolder(std::move(url)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Url(std::string_view url) : StringHolder(url) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Url(const char* url) : StringHolder(url) {} + Url(const char* str, size_t len) : StringHolder(std::string(str, len)) {} + Url(const std::initializer_list args) : StringHolder(args) {} + Url(const Url& other) = default; + Url(Url&& old) noexcept = default; + ~Url() override = default; + + Url& operator=(Url&& old) noexcept = default; + Url& operator=(const Url& other) = default; +}; + +struct CaseInsensitiveCompare { + bool operator()(const std::string& a, const std::string& b) const noexcept; +}; + +using Header = std::map; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cprver.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cprver.h new file mode 100644 index 0000000..aaa4f9f --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/cprver.h @@ -0,0 +1,30 @@ +#ifndef CPR_CPRVER_H +#define CPR_CPRVER_H + +/** + * CPR version as a string. + **/ +#define CPR_VERSION "1.10.5" + +/** + * CPR version split up into parts. + **/ +#define CPR_VERSION_MAJOR 1 +#define CPR_VERSION_MINOR 10 +#define CPR_VERSION_PATCH 5 + +/** + * CPR version as a single hex digit. + * it can be split up into three parts: + * 0xAABBCC + * AA: The current CPR major version number in a hex format. + * BB: The current CPR minor version number in a hex format. + * CC: The current CPR patch version number in a hex format. + * + * Examples: + * '0x010702' -> 01.07.02 -> CPR_VERSION: 1.7.2 + * '0xA13722' -> A1.37.22 -> CPR_VERSION: 161.55.34 + **/ +#define CPR_VERSION_NUM 0x10a05 + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/curl_container.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/curl_container.h new file mode 100644 index 0000000..c2409b2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/curl_container.h @@ -0,0 +1,51 @@ +#ifndef CURL_CONTAINER_H +#define CURL_CONTAINER_H + +#include +#include +#include +#include + +#include "cpr/curlholder.h" + + +namespace cpr { + +struct Parameter { + Parameter(std::string p_key, std::string p_value) : key{std::move(p_key)}, value{std::move(p_value)} {} + + std::string key; + std::string value; +}; + +struct Pair { + Pair(std::string p_key, std::string p_value) : key(std::move(p_key)), value(std::move(p_value)) {} + + std::string key; + std::string value; +}; + + +template +class CurlContainer { + public: + /** + * Enables or disables URL encoding for keys and values when calling GetContent(...). + **/ + bool encode = true; + + CurlContainer() = default; + CurlContainer(const std::initializer_list&); + + void Add(const std::initializer_list&); + void Add(const T&); + + const std::string GetContent(const CurlHolder&) const; + + protected: + std::vector containerList_; +}; + +} // namespace cpr + +#endif // diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/curlholder.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/curlholder.h new file mode 100644 index 0000000..a9e1dc8 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/curlholder.h @@ -0,0 +1,54 @@ +#ifndef CPR_CURL_HOLDER_H +#define CPR_CURL_HOLDER_H + +#include +#include +#include + +#include + +namespace cpr { +struct CurlHolder { + private: + /** + * Mutex for curl_easy_init(). + * curl_easy_init() is not thread save. + * References: + * https://curl.haxx.se/libcurl/c/curl_easy_init.html + * https://curl.haxx.se/libcurl/c/threadsafe.html + **/ + + // Avoids initalization order problems in a static build + static std::mutex& curl_easy_init_mutex_() { + static std::mutex curl_easy_init_mutex_; + return curl_easy_init_mutex_; + } + + public: + CURL* handle{nullptr}; + struct curl_slist* chunk{nullptr}; + struct curl_slist* resolveCurlList{nullptr}; + curl_mime* multipart{nullptr}; + std::array error{}; + + CurlHolder(); + CurlHolder(const CurlHolder& other) = default; + CurlHolder(CurlHolder&& old) noexcept = default; + ~CurlHolder(); + + CurlHolder& operator=(CurlHolder&& old) noexcept = default; + CurlHolder& operator=(const CurlHolder& other) = default; + + /** + * Uses curl_easy_escape(...) for escaping the given string. + **/ + std::string urlEncode(const std::string& s) const; + + /** + * Uses curl_easy_unescape(...) for unescaping the given string. + **/ + std::string urlDecode(const std::string& s) const; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/curlmultiholder.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/curlmultiholder.h new file mode 100644 index 0000000..ccd504b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/curlmultiholder.h @@ -0,0 +1,18 @@ +#ifndef CPR_CURLMULTIHOLDER_H +#define CPR_CURLMULTIHOLDER_H + +#include + +namespace cpr { + +class CurlMultiHolder { + public: + CurlMultiHolder(); + ~CurlMultiHolder(); + + CURLM* handle{nullptr}; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/error.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/error.h new file mode 100644 index 0000000..bb59a4c --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/error.h @@ -0,0 +1,53 @@ +#ifndef CPR_ERROR_H +#define CPR_ERROR_H + +#include +#include + +#include "cpr/cprtypes.h" +#include + +namespace cpr { + +enum class ErrorCode { + OK = 0, + CONNECTION_FAILURE, + EMPTY_RESPONSE, + HOST_RESOLUTION_FAILURE, + INTERNAL_ERROR, + INVALID_URL_FORMAT, + NETWORK_RECEIVE_ERROR, + NETWORK_SEND_FAILURE, + OPERATION_TIMEDOUT, + PROXY_RESOLUTION_FAILURE, + SSL_CONNECT_ERROR, + SSL_LOCAL_CERTIFICATE_ERROR, + SSL_REMOTE_CERTIFICATE_ERROR, + SSL_CACERT_ERROR, + GENERIC_SSL_ERROR, + UNSUPPORTED_PROTOCOL, + REQUEST_CANCELLED, + TOO_MANY_REDIRECTS, + UNKNOWN_ERROR = 1000, +}; + +class Error { + public: + ErrorCode code = ErrorCode::OK; + std::string message{}; + + Error() = default; + + Error(const std::int32_t& curl_code, std::string&& p_error_message) : code{getErrorCodeForCurlError(curl_code)}, message(std::move(p_error_message)) {} + + explicit operator bool() const { + return code != ErrorCode::OK; + } + + private: + static ErrorCode getErrorCodeForCurlError(std::int32_t curl_code); +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/file.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/file.h new file mode 100644 index 0000000..b39914a --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/file.h @@ -0,0 +1,59 @@ +#ifndef CPR_FILE_H +#define CPR_FILE_H + +#include +#include +#include + +#include + +namespace cpr { + +struct File { + explicit File(std::string p_filepath, const std::string& p_overriden_filename = {}) : filepath(std::move(p_filepath)), overriden_filename(p_overriden_filename) {} + + std::string filepath; + std::string overriden_filename; + + [[nodiscard]] bool hasOverridenFilename() const noexcept { + return !overriden_filename.empty(); + }; +}; + +class Files { + public: + Files() = default; + // NOLINTNEXTLINE(google-explicit-constructor) + Files(const File& p_file) : files{p_file} {}; + + Files(const Files& other) = default; + Files(Files&& old) noexcept = default; + + Files(const std::initializer_list& p_files) : files{p_files} {}; + Files(const std::initializer_list& p_filepaths); + + ~Files() noexcept = default; + + Files& operator=(const Files& other); + Files& operator=(Files&& old) noexcept; + + using iterator = std::vector::iterator; + using const_iterator = std::vector::const_iterator; + + iterator begin(); + iterator end(); + [[nodiscard]] const_iterator begin() const; + [[nodiscard]] const_iterator end() const; + [[nodiscard]] const_iterator cbegin() const; + [[nodiscard]] const_iterator cend() const; + void emplace_back(const File& file); + void push_back(const File& file); + void pop_back(); + + private: + std::vector files; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/filesystem.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/filesystem.h new file mode 100644 index 0000000..f296770 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/filesystem.h @@ -0,0 +1,26 @@ +#ifndef CPR_FILESYSTEM_H +#define CPR_FILESYSTEM_H + +// Include filesystem into the namespace "fs" from either "filesystem" or "experimental/filesystem" or "boost/filesystem" +#ifdef CPR_USE_BOOST_FILESYSTEM +#define BOOST_FILESYSTEM_VERSION 4 // Use the latest, with the closest behavior to std::filesystem. +#include +namespace cpr { +namespace fs = boost::filesystem; +} +// cppcheck-suppress preprocessorErrorDirective +#elif __has_include() +#include +namespace cpr { +namespace fs = std::filesystem; +} +#elif __has_include("experimental/filesystem") +#include +namespace cpr { +namespace fs = std::experimental::filesystem; +} +#else +#error "Failed to include header!" +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/http_version.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/http_version.h new file mode 100644 index 0000000..45b5028 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/http_version.h @@ -0,0 +1,67 @@ +#ifndef CPR_HTTP_VERSION_H +#define CPR_HTTP_VERSION_H + +#include + +namespace cpr { +enum class HttpVersionCode { + /** + * Let libcurl decide which version is the best. + **/ + VERSION_NONE, + /** + * Enforce HTTP 1.0 requests. + **/ + VERSION_1_0, + /** + * Enforce HTTP 1.1 requests. + **/ + VERSION_1_1, +#if LIBCURL_VERSION_NUM >= 0x072100 // 7.33.0 + /** + * Attempt HTTP 2.0 requests. + * Fallback to HTTP 1.1 if negotiation fails. + **/ + VERSION_2_0, +#endif +#if LIBCURL_VERSION_NUM >= 0x072F00 // 7.47.0 + /** + * Attempt HTTP 2.0 for HTTPS requests only. + * Fallback to HTTP 1.1 if negotiation fails. + * HTTP 1.1 will be used for HTTP connections. + **/ + VERSION_2_0_TLS, +#endif +#if LIBCURL_VERSION_NUM >= 0x073100 // 7.49.0 + /** + * Start HTTP 2.0 for HTTP requests. + * Requires prior knowledge that the server supports HTTP 2.0. + * For HTTPS requests we will negotiate the protocol version in the TLS handshake. + **/ + VERSION_2_0_PRIOR_KNOWLEDGE, +#endif +#if LIBCURL_VERSION_NUM >= 0x074200 // 7.66.0 + /** + * Attempt HTTP 3.0 requests. + * Requires prior knowledge that the server supports HTTP 3.0 since there is no gracefully downgrade. + * Fallback to HTTP 1.1 if negotiation fails. + **/ + VERSION_3_0 +#endif +}; + +class HttpVersion { + public: + /** + * The HTTP version that should be used by libcurl when initiating a HTTP(S) connection. + * Default: HttpVersionCode::VERSION_NONE + **/ + HttpVersionCode code = HttpVersionCode::VERSION_NONE; + + HttpVersion() = default; + explicit HttpVersion(HttpVersionCode _code) : code(_code) {} +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/interceptor.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/interceptor.h new file mode 100644 index 0000000..34cfe50 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/interceptor.h @@ -0,0 +1,74 @@ +#ifndef CPR_INTERCEPTOR_H +#define CPR_INTERCEPTOR_H + +#include "cpr/multiperform.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include + +namespace cpr { +class Interceptor { + public: + enum class ProceedHttpMethod { + GET_REQUEST = 0, + POST_REQUEST, + PUT_REQUEST, + DELETE_REQUEST, + PATCH_REQUEST, + HEAD_REQUEST, + OPTIONS_REQUEST, + DOWNLOAD_CALLBACK_REQUEST, + DOWNLOAD_FILE_REQUEST, + }; + + Interceptor() = default; + Interceptor(const Interceptor& other) = default; + Interceptor(Interceptor&& old) = default; + virtual ~Interceptor() = default; + + Interceptor& operator=(const Interceptor& other) = default; + Interceptor& operator=(Interceptor&& old) = default; + + virtual Response intercept(Session& session) = 0; + + protected: + static Response proceed(Session& session); + static Response proceed(Session& session, ProceedHttpMethod httpMethod); + static Response proceed(Session& session, ProceedHttpMethod httpMethod, std::ofstream& file); + static Response proceed(Session& session, ProceedHttpMethod httpMethod, const WriteCallback& write); +}; + +class InterceptorMulti { + public: + enum class ProceedHttpMethod { + GET_REQUEST = 0, + POST_REQUEST, + PUT_REQUEST, + DELETE_REQUEST, + PATCH_REQUEST, + HEAD_REQUEST, + OPTIONS_REQUEST, + DOWNLOAD_CALLBACK_REQUEST, + DOWNLOAD_FILE_REQUEST, + }; + + InterceptorMulti() = default; + InterceptorMulti(const InterceptorMulti& other) = default; + InterceptorMulti(InterceptorMulti&& old) = default; + virtual ~InterceptorMulti() = default; + + InterceptorMulti& operator=(const InterceptorMulti& other) = default; + InterceptorMulti& operator=(InterceptorMulti&& old) = default; + + virtual std::vector intercept(MultiPerform& multi) = 0; + + protected: + static std::vector proceed(MultiPerform& multi); + + static void PrepareDownloadSession(MultiPerform& multi, size_t sessions_index, const WriteCallback& write); +}; + +} // namespace cpr + + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/interface.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/interface.h new file mode 100644 index 0000000..b98940e --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/interface.h @@ -0,0 +1,32 @@ +#ifndef CPR_INTERFACE_H +#define CPR_INTERFACE_H + +#include +#include + +#include "cpr/cprtypes.h" + +namespace cpr { + +class Interface : public StringHolder { + public: + Interface() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Interface(std::string iface) : StringHolder(std::move(iface)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Interface(std::string_view iface) : StringHolder(iface) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Interface(const char* iface) : StringHolder(iface) {} + Interface(const char* str, size_t len) : StringHolder(str, len) {} + Interface(const std::initializer_list args) : StringHolder(args) {} + Interface(const Interface& other) = default; + Interface(Interface&& old) noexcept = default; + ~Interface() override = default; + + Interface& operator=(Interface&& old) noexcept = default; + Interface& operator=(const Interface& other) = default; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/limit_rate.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/limit_rate.h new file mode 100644 index 0000000..2b0e8a2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/limit_rate.h @@ -0,0 +1,18 @@ +#ifndef CPR_SPEED_LIMIT_H +#define CPR_SPEED_LIMIT_H + +#include + +namespace cpr { + +class LimitRate { + public: + LimitRate(const std::int64_t p_downrate, const std::int64_t p_uprate) : downrate(p_downrate), uprate(p_uprate) {} + + std::int64_t downrate = 0; + std::int64_t uprate = 0; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/local_port.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/local_port.h new file mode 100644 index 0000000..e853425 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/local_port.h @@ -0,0 +1,23 @@ +#ifndef CPR_LOCAL_PORT_H +#define CPR_LOCAL_PORT_H + +#include + +namespace cpr { + +class LocalPort { + public: + // NOLINTNEXTLINE(google-explicit-constructor) + LocalPort(const std::uint16_t p_localport) : localport_(p_localport) {} + + operator std::uint16_t() const { + return localport_; + } + + private: + std::uint16_t localport_ = 0; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/local_port_range.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/local_port_range.h new file mode 100644 index 0000000..cc2d7e2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/local_port_range.h @@ -0,0 +1,23 @@ +#ifndef CPR_LOCAL_PORT_RANGE_H +#define CPR_LOCAL_PORT_RANGE_H + +#include + +namespace cpr { + +class LocalPortRange { + public: + // NOLINTNEXTLINE(google-explicit-constructor) + LocalPortRange(const std::uint16_t p_localportrange) : localportrange_(p_localportrange) {} + + operator std::uint16_t() const { + return localportrange_; + } + + private: + std::uint16_t localportrange_ = 0; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/low_speed.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/low_speed.h new file mode 100644 index 0000000..ff77fd2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/low_speed.h @@ -0,0 +1,18 @@ +#ifndef CPR_LOW_SPEED_H +#define CPR_LOW_SPEED_H + +#include + +namespace cpr { + +class LowSpeed { + public: + LowSpeed(const std::int32_t p_limit, const std::int32_t p_time) : limit(p_limit), time(p_time) {} + + std::int32_t limit; + std::int32_t time; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/multipart.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/multipart.h new file mode 100644 index 0000000..3eaaea7 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/multipart.h @@ -0,0 +1,43 @@ +#ifndef CPR_MULTIPART_H +#define CPR_MULTIPART_H + +#include +#include +#include +#include +#include + +#include "buffer.h" +#include "file.h" + +namespace cpr { + +struct Part { + Part(const std::string& p_name, const std::string& p_value, const std::string& p_content_type = {}) : name{p_name}, value{p_value}, content_type{p_content_type}, is_file{false}, is_buffer{false} {} + Part(const std::string& p_name, const std::int32_t& p_value, const std::string& p_content_type = {}) : name{p_name}, value{std::to_string(p_value)}, content_type{p_content_type}, is_file{false}, is_buffer{false} {} + Part(const std::string& p_name, const Files& p_files, const std::string& p_content_type = {}) : name{p_name}, content_type{p_content_type}, is_file{true}, is_buffer{false}, files{p_files} {} + Part(const std::string& p_name, Files&& p_files, const std::string& p_content_type = {}) : name{p_name}, content_type{p_content_type}, is_file{true}, is_buffer{false}, files{p_files} {} + Part(const std::string& p_name, const Buffer& buffer, const std::string& p_content_type = {}) : name{p_name}, value{buffer.filename.string()}, content_type{p_content_type}, data{buffer.data}, datalen{buffer.datalen}, is_file{false}, is_buffer{true} {} + + std::string name; + // We don't use fs::path here, as this leads to problems using windows + std::string value; + std::string content_type; + Buffer::data_t data{nullptr}; + size_t datalen{0}; + bool is_file; + bool is_buffer; + + Files files; +}; + +class Multipart { + public: + Multipart(const std::initializer_list& parts); + + std::vector parts; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/multiperform.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/multiperform.h new file mode 100644 index 0000000..d9ab978 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/multiperform.h @@ -0,0 +1,137 @@ +#ifndef CPR_MULTIPERFORM_H +#define CPR_MULTIPERFORM_H + +#include "cpr/curlmultiholder.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include +#include +#include +#include +#include + +namespace cpr { + +class InterceptorMulti; + +class MultiPerform { + public: + enum class HttpMethod { + UNDEFINED = 0, + GET_REQUEST, + POST_REQUEST, + PUT_REQUEST, + DELETE_REQUEST, + PATCH_REQUEST, + HEAD_REQUEST, + OPTIONS_REQUEST, + DOWNLOAD_REQUEST, + }; + + MultiPerform(); + MultiPerform(const MultiPerform& other) = delete; + MultiPerform(MultiPerform&& old) = default; + ~MultiPerform(); + + MultiPerform& operator=(const MultiPerform& other) = delete; + MultiPerform& operator=(MultiPerform&& old) noexcept = default; + + std::vector Get(); + std::vector Delete(); + template + std::vector Download(DownloadArgTypes... args); + std::vector Put(); + std::vector Head(); + std::vector Options(); + std::vector Patch(); + std::vector Post(); + + std::vector Perform(); + template + std::vector PerformDownload(DownloadArgTypes... args); + + void AddSession(std::shared_ptr& session, HttpMethod method = HttpMethod::UNDEFINED); + void RemoveSession(const std::shared_ptr& session); + std::vector, HttpMethod>>& GetSessions(); + [[nodiscard]] const std::vector, HttpMethod>>& GetSessions() const; + + void AddInterceptor(const std::shared_ptr& pinterceptor); + + private: + // Interceptors should be able to call the private proceed() and PrepareDownloadSessions() functions + friend InterceptorMulti; + + void SetHttpMethod(HttpMethod method); + + void PrepareSessions(); + template + void PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg, DownloadArgTypes... args); + template + void PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg); + void PrepareDownloadSession(size_t sessions_index, std::ofstream& file); + void PrepareDownloadSession(size_t sessions_index, const WriteCallback& write); + + void PrepareGet(); + void PrepareDelete(); + void PreparePut(); + void PreparePatch(); + void PrepareHead(); + void PrepareOptions(); + void PreparePost(); + template + void PrepareDownload(DownloadArgTypes... args); + + std::vector intercept(); + std::vector proceed(); + std::vector MakeRequest(); + std::vector MakeDownloadRequest(); + + void DoMultiPerform(); + std::vector ReadMultiInfo(std::function&& complete_function); + + std::vector, HttpMethod>> sessions_; + std::unique_ptr multicurl_; + bool is_download_multi_perform{false}; + + std::queue> interceptors_; +}; + +template +void MultiPerform::PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg) { + PrepareDownloadSession(sessions_index, current_arg); +} + +template +void MultiPerform::PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg, DownloadArgTypes... args) { + PrepareDownloadSession(sessions_index, current_arg); + PrepareDownloadSessions(sessions_index + 1, args...); +} + + +template +void MultiPerform::PrepareDownload(DownloadArgTypes... args) { + SetHttpMethod(HttpMethod::DOWNLOAD_REQUEST); + PrepareDownloadSessions(0, args...); +} + +template +std::vector MultiPerform::Download(DownloadArgTypes... args) { + if (sizeof...(args) != sessions_.size()) { + throw std::invalid_argument("Number of download arguments has to match the number of sessions added to the multiperform!"); + } + PrepareDownload(args...); + return MakeDownloadRequest(); +} + +template +std::vector MultiPerform::PerformDownload(DownloadArgTypes... args) { + if (sizeof...(args) != sessions_.size()) { + throw std::invalid_argument("Number of download arguments has to match the number of sessions added to the multiperform!"); + } + PrepareDownloadSessions(0, args...); + return MakeDownloadRequest(); +} + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/parameters.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/parameters.h new file mode 100644 index 0000000..0e34d4d --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/parameters.h @@ -0,0 +1,18 @@ +#ifndef CPR_PARAMETERS_H +#define CPR_PARAMETERS_H + +#include + +#include "cpr/curl_container.h" + +namespace cpr { + +class Parameters : public CurlContainer { + public: + Parameters() = default; + Parameters(const std::initializer_list& parameters); +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/payload.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/payload.h new file mode 100644 index 0000000..686b540 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/payload.h @@ -0,0 +1,23 @@ +#ifndef CPR_PAYLOAD_H +#define CPR_PAYLOAD_H + +#include + +#include "cpr/curl_container.h" + + +namespace cpr { +class Payload : public CurlContainer { + public: + template + Payload(const It begin, const It end) { + for (It pair = begin; pair != end; ++pair) { + Add(*pair); + } + } + Payload(const std::initializer_list& pairs); +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/proxies.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/proxies.h new file mode 100644 index 0000000..6970442 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/proxies.h @@ -0,0 +1,23 @@ +#ifndef CPR_PROXIES_H +#define CPR_PROXIES_H + +#include +#include +#include + +namespace cpr { +class Proxies { + public: + Proxies() = default; + Proxies(const std::initializer_list>& hosts); + Proxies(const std::map& hosts); + + bool has(const std::string& protocol) const; + const std::string& operator[](const std::string& protocol); + + private: + std::map hosts_; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/proxyauth.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/proxyauth.h new file mode 100644 index 0000000..7e34764 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/proxyauth.h @@ -0,0 +1,43 @@ +#ifndef CPR_PROXYAUTH_H +#define CPR_PROXYAUTH_H + +#include +#include + +#include "cpr/auth.h" +#include "cpr/util.h" + +namespace cpr { +class EncodedAuthentication { + public: + EncodedAuthentication() : auth_string_{""} {} + EncodedAuthentication(std::string username, std::string password) : auth_string_{cpr::util::urlEncode(std::move(username)) + ":" + cpr::util::urlEncode(std::move(password))} {} + EncodedAuthentication(const EncodedAuthentication& other) = default; + EncodedAuthentication(EncodedAuthentication&& old) noexcept = default; + virtual ~EncodedAuthentication() noexcept; + + EncodedAuthentication& operator=(EncodedAuthentication&& old) noexcept = default; + EncodedAuthentication& operator=(const EncodedAuthentication& other) = default; + + const char* GetAuthString() const noexcept; + + protected: + std::string auth_string_; +}; + +class ProxyAuthentication { + public: + ProxyAuthentication() = default; + ProxyAuthentication(const std::initializer_list>& auths) : proxyAuth_{auths} {} + ProxyAuthentication(const std::map& auths) : proxyAuth_{auths} {} + + bool has(const std::string& protocol) const; + const char* operator[](const std::string& protocol); + + private: + std::map proxyAuth_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/range.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/range.h new file mode 100644 index 0000000..2c5a145 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/range.h @@ -0,0 +1,44 @@ +#ifndef CPR_RANGE_H +#define CPR_RANGE_H + +#include +#include + +namespace cpr { + +class Range { + public: + Range(const std::optional p_resume_from = std::nullopt, const std::optional p_finish_at = std::nullopt) { + resume_from = p_resume_from.value_or(0); + finish_at = p_finish_at.value_or(-1); + } + + std::int64_t resume_from; + std::int64_t finish_at; + + const std::string str() const { + std::string from_str = (resume_from < 0U) ? "" : std::to_string(resume_from); + std::string to_str = (finish_at < 0U) ? "" : std::to_string(finish_at); + return from_str + "-" + to_str; + } +}; + +class MultiRange { + public: + MultiRange(std::initializer_list rs) : ranges{rs} {} + + const std::string str() const { + std::string multi_range_string{}; + for (Range range : ranges) { + multi_range_string += ((multi_range_string.empty()) ? "" : ", ") + range.str(); + } + return multi_range_string; + } + + private: + std::vector ranges; +}; // namespace cpr + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/redirect.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/redirect.h new file mode 100644 index 0000000..32b4372 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/redirect.h @@ -0,0 +1,84 @@ +#ifndef CPR_REDIRECT_H +#define CPR_REDIRECT_H + +#include + +namespace cpr { +enum class PostRedirectFlags : uint8_t { + /** + * Respect RFC 7231 (section 6.4.2 to 6.4.4). + * Same as CURL_REDIR_POST_301 (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_301 = 0x1 << 0, + /** + * Maintain the request method after a 302 redirect. + * Same as CURL_REDIR_POST_302 (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_302 = 0x1 << 1, + /** + * Maintain the request method after a 303 redirect. + * Same as CURL_REDIR_POST_303 (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_303 = 0x1 << 2, + /** + * Default value. + * Convenience option to enable all flags. + * Same as CURL_REDIR_POST_ALL (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_ALL = POST_301 | POST_302 | POST_303, + /** + * * Convenience option to disable all flags. + **/ + NONE = 0x0 +}; + +PostRedirectFlags operator|(PostRedirectFlags lhs, PostRedirectFlags rhs); +PostRedirectFlags operator&(PostRedirectFlags lhs, PostRedirectFlags rhs); +PostRedirectFlags operator^(PostRedirectFlags lhs, PostRedirectFlags rhs); +PostRedirectFlags operator~(PostRedirectFlags flag); +PostRedirectFlags& operator|=(PostRedirectFlags& lhs, PostRedirectFlags rhs); +PostRedirectFlags& operator&=(PostRedirectFlags& lhs, PostRedirectFlags rhs); +PostRedirectFlags& operator^=(PostRedirectFlags& lhs, PostRedirectFlags rhs); +bool any(PostRedirectFlags flag); + +class Redirect { + public: + /** + * The maximum number of redirects to follow. + * 0: Refuse any redirects. + * -1: Infinite number of redirects. + * Default: 50 + * https://curl.se/libcurl/c/CURLOPT_MAXREDIRS.html + **/ + // NOLINTNEXTLINE (google-runtime-int) + long maximum{50L}; + /** + * Follow 3xx redirects. + * Default: true + * https://curl.se/libcurl/c/CURLOPT_FOLLOWLOCATION.html + **/ + bool follow{true}; + /** + * Continue to send authentication (user+password) credentials when following locations, even when hostname changed. + * Default: false + * https://curl.se/libcurl/c/CURLOPT_UNRESTRICTED_AUTH.html + **/ + bool cont_send_cred{false}; + /** + * Flags to control how to act after a redirect for a post request. + * Default: POST_ALL + **/ + PostRedirectFlags post_flags{PostRedirectFlags::POST_ALL}; + + Redirect() = default; + // NOLINTNEXTLINE (google-runtime-int) + Redirect(long p_maximum, bool p_follow, bool p_cont_send_cred, PostRedirectFlags p_post_flags) : maximum(p_maximum), follow(p_follow), cont_send_cred(p_cont_send_cred), post_flags(p_post_flags){}; + // NOLINTNEXTLINE (google-runtime-int) + explicit Redirect(long p_maximum) : maximum(p_maximum){}; + explicit Redirect(bool p_follow) : follow(p_follow){}; + Redirect(bool p_follow, bool p_cont_send_cred) : follow(p_follow), cont_send_cred(p_cont_send_cred){}; + explicit Redirect(PostRedirectFlags p_post_flags) : post_flags(p_post_flags){}; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/reserve_size.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/reserve_size.h new file mode 100644 index 0000000..5eae4c8 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/reserve_size.h @@ -0,0 +1,17 @@ +#ifndef CPR_RESERVE_SIZE_H +#define CPR_RESERVE_SIZE_H + +#include + +namespace cpr { + +class ReserveSize { + public: + ReserveSize(const size_t _size) : size(_size) {} + + size_t size = 0; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/resolve.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/resolve.h new file mode 100644 index 0000000..86a7c89 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/resolve.h @@ -0,0 +1,23 @@ +#ifndef CPR_RESOLVE_H +#define CPR_RESOLVE_H + +#include +#include + +namespace cpr { + class Resolve { + public: + std::string host; + std::string addr; + std::set ports; + + Resolve(const std::string& host_param, const std::string& addr_param, const std::set& ports_param = std::set{80U, 443U}): host(host_param), addr(addr_param), ports(ports_param) { + if (this->ports.empty()) { + this->ports.insert(80U); + this->ports.insert(443U); + } + } + }; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/response.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/response.h new file mode 100644 index 0000000..5c296da --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/response.h @@ -0,0 +1,58 @@ +#ifndef CPR_RESPONSE_H +#define CPR_RESPONSE_H + +#include +#include +#include +#include +#include +#include + +#include "cpr/cert_info.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/error.h" +#include "cpr/ssl_options.h" +#include "cpr/util.h" + +namespace cpr { + +class MultiPerform; + +class Response { + private: + friend MultiPerform; + std::shared_ptr curl_{nullptr}; + + public: + // Ignored here since libcurl uses a long for this. + // NOLINTNEXTLINE(google-runtime-int) + long status_code{}; + std::string text{}; + Header header{}; + Url url{}; + double elapsed{}; + Cookies cookies{}; + Error error{}; + std::string raw_header{}; + std::string status_line{}; + std::string reason{}; + cpr_off_t uploaded_bytes{}; + cpr_off_t downloaded_bytes{}; + // Ignored here since libcurl uses a long for this. + // NOLINTNEXTLINE(google-runtime-int) + long redirect_count{}; + + Response() = default; + Response(std::shared_ptr curl, std::string&& p_text, std::string&& p_header_string, Cookies&& p_cookies, Error&& p_error); + std::vector GetCertInfos(); + Response(const Response& other) = default; + Response(Response&& old) noexcept = default; + ~Response() noexcept = default; + + Response& operator=(Response&& old) noexcept = default; + Response& operator=(const Response& other) = default; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/session.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/session.h new file mode 100644 index 0000000..6b2b93e --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/session.h @@ -0,0 +1,308 @@ +#ifndef CPR_SESSION_H +#define CPR_SESSION_H + +#include +#include +#include +#include +#include +#include + +#include "cpr/accept_encoding.h" +#include "cpr/async_wrapper.h" +#include "cpr/auth.h" +#include "cpr/bearer.h" +#include "cpr/body.h" +#include "cpr/callback.h" +#include "cpr/connect_timeout.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/curlholder.h" +#include "cpr/http_version.h" +#include "cpr/interface.h" +#include "cpr/limit_rate.h" +#include "cpr/local_port.h" +#include "cpr/local_port_range.h" +#include "cpr/low_speed.h" +#include "cpr/multipart.h" +#include "cpr/parameters.h" +#include "cpr/payload.h" +#include "cpr/proxies.h" +#include "cpr/proxyauth.h" +#include "cpr/range.h" +#include "cpr/redirect.h" +#include "cpr/reserve_size.h" +#include "cpr/resolve.h" +#include "cpr/response.h" +#include "cpr/ssl_options.h" +#include "cpr/timeout.h" +#include "cpr/unix_socket.h" +#include "cpr/user_agent.h" +#include "cpr/util.h" +#include "cpr/verbose.h" + +namespace cpr { + +using AsyncResponse = AsyncWrapper; + +class Interceptor; +class MultiPerform; + +class Session : public std::enable_shared_from_this { + public: + Session(); + Session(const Session& other) = delete; + Session(Session&& old) = default; + + ~Session() = default; + + Session& operator=(Session&& old) noexcept = default; + Session& operator=(const Session& other) = delete; + + void SetUrl(const Url& url); + void SetParameters(const Parameters& parameters); + void SetParameters(Parameters&& parameters); + void SetHeader(const Header& header); + void UpdateHeader(const Header& header); + void SetTimeout(const Timeout& timeout); + void SetConnectTimeout(const ConnectTimeout& timeout); + void SetAuth(const Authentication& auth); +// Only supported with libcurl >= 7.61.0. +// As an alternative use SetHeader and add the token manually. +#if LIBCURL_VERSION_NUM >= 0x073D00 + void SetBearer(const Bearer& token); +#endif + void SetUserAgent(const UserAgent& ua); + void SetPayload(Payload&& payload); + void SetPayload(const Payload& payload); + void SetProxies(Proxies&& proxies); + void SetProxies(const Proxies& proxies); + void SetProxyAuth(ProxyAuthentication&& proxy_auth); + void SetProxyAuth(const ProxyAuthentication& proxy_auth); + void SetMultipart(Multipart&& multipart); + void SetMultipart(const Multipart& multipart); + void SetRedirect(const Redirect& redirect); + void SetCookies(const Cookies& cookies); + void SetBody(Body&& body); + void SetBody(const Body& body); + void SetLowSpeed(const LowSpeed& low_speed); + void SetVerifySsl(const VerifySsl& verify); + void SetUnixSocket(const UnixSocket& unix_socket); + void SetSslOptions(const SslOptions& options); + void SetReadCallback(const ReadCallback& read); + void SetHeaderCallback(const HeaderCallback& header); + void SetWriteCallback(const WriteCallback& write); + void SetProgressCallback(const ProgressCallback& progress); + void SetDebugCallback(const DebugCallback& debug); + void SetVerbose(const Verbose& verbose); + void SetInterface(const Interface& iface); + void SetLocalPort(const LocalPort& local_port); + void SetLocalPortRange(const LocalPortRange& local_port_range); + void SetHttpVersion(const HttpVersion& version); + void SetRange(const Range& range); + void SetResolve(const Resolve& resolve); + void SetResolves(const std::vector& resolves); + void SetMultiRange(const MultiRange& multi_range); + void SetReserveSize(const ReserveSize& reserve_size); + void SetAcceptEncoding(const AcceptEncoding& accept_encoding); + void SetAcceptEncoding(AcceptEncoding&& accept_encoding); + void SetLimitRate(const LimitRate& limit_rate); + + // For cancellable requests + void SetCancellationParam(std::shared_ptr param); + + // Used in templated functions + void SetOption(const Url& url); + void SetOption(const Parameters& parameters); + void SetOption(Parameters&& parameters); + void SetOption(const Header& header); + void SetOption(const Timeout& timeout); + void SetOption(const ConnectTimeout& timeout); + void SetOption(const Authentication& auth); +// Only supported with libcurl >= 7.61.0. +// As an alternative use SetHeader and add the token manually. +#if LIBCURL_VERSION_NUM >= 0x073D00 + void SetOption(const Bearer& auth); +#endif + void SetOption(const UserAgent& ua); + void SetOption(Payload&& payload); + void SetOption(const Payload& payload); + void SetOption(const LimitRate& limit_rate); + void SetOption(Proxies&& proxies); + void SetOption(const Proxies& proxies); + void SetOption(ProxyAuthentication&& proxy_auth); + void SetOption(const ProxyAuthentication& proxy_auth); + void SetOption(Multipart&& multipart); + void SetOption(const Multipart& multipart); + void SetOption(const Redirect& redirect); + void SetOption(const Cookies& cookies); + void SetOption(Body&& body); + void SetOption(const Body& body); + void SetOption(const ReadCallback& read); + void SetOption(const HeaderCallback& header); + void SetOption(const WriteCallback& write); + void SetOption(const ProgressCallback& progress); + void SetOption(const DebugCallback& debug); + void SetOption(const LowSpeed& low_speed); + void SetOption(const VerifySsl& verify); + void SetOption(const Verbose& verbose); + void SetOption(const UnixSocket& unix_socket); + void SetOption(const SslOptions& options); + void SetOption(const Interface& iface); + void SetOption(const LocalPort& local_port); + void SetOption(const LocalPortRange& local_port_range); + void SetOption(const HttpVersion& version); + void SetOption(const Range& range); + void SetOption(const MultiRange& multi_range); + void SetOption(const ReserveSize& reserve_size); + void SetOption(const AcceptEncoding& accept_encoding); + void SetOption(AcceptEncoding&& accept_encoding); + void SetOption(const Resolve& resolve); + void SetOption(const std::vector& resolves); + + cpr_off_t GetDownloadFileLength(); + /** + * Attempt to preallocate enough memory for specified number of characters in the response string. + * Pass 0 to disable this behavior and let the response string be allocated dynamically on demand. + * + * Example: + * cpr::Session session; + * session.SetUrl(cpr::Url{"http://xxx/file"}); + * session.ResponseStringReserve(1024 * 512); // Reserve space for at least 1024 * 512 characters + * cpr::Response r = session.Get(); + **/ + void ResponseStringReserve(size_t size); + Response Delete(); + Response Download(const WriteCallback& write); + Response Download(std::ofstream& file); + Response Get(); + Response Head(); + Response Options(); + Response Patch(); + Response Post(); + Response Put(); + + AsyncResponse GetAsync(); + AsyncResponse DeleteAsync(); + AsyncResponse DownloadAsync(const WriteCallback& write); + AsyncResponse DownloadAsync(std::ofstream& file); + AsyncResponse HeadAsync(); + AsyncResponse OptionsAsync(); + AsyncResponse PatchAsync(); + AsyncResponse PostAsync(); + AsyncResponse PutAsync(); + + template + auto GetCallback(Then then); + template + auto PostCallback(Then then); + template + auto PutCallback(Then then); + template + auto HeadCallback(Then then); + template + auto DeleteCallback(Then then); + template + auto OptionsCallback(Then then); + template + auto PatchCallback(Then then); + + std::shared_ptr GetCurlHolder(); + std::string GetFullRequestUrl(); + + void PrepareDelete(); + void PrepareGet(); + void PrepareHead(); + void PrepareOptions(); + void PreparePatch(); + void PreparePost(); + void PreparePut(); + void PrepareDownload(const WriteCallback& write); + void PrepareDownload(std::ofstream& file); + Response Complete(CURLcode curl_error); + Response CompleteDownload(CURLcode curl_error); + + void AddInterceptor(const std::shared_ptr& pinterceptor); + + private: + // Interceptors should be able to call the private proceed() function + friend Interceptor; + friend MultiPerform; + + + bool hasBodyOrPayload_{false}; + bool chunkedTransferEncoding_{false}; + std::shared_ptr curl_; + Url url_; + Parameters parameters_; + Proxies proxies_; + ProxyAuthentication proxyAuth_; + Header header_; + AcceptEncoding acceptEncoding_; + /** + * Will be set by the read callback. + * Ensures that the "Transfer-Encoding" is set to "chunked", if not overriden in header_. + **/ + ReadCallback readcb_; + HeaderCallback headercb_; + WriteCallback writecb_; + ProgressCallback progresscb_; + DebugCallback debugcb_; + CancellationCallback cancellationcb_; + + size_t response_string_reserve_size_{0}; + std::string response_string_; + std::string header_string_; + std::queue> interceptors_; + bool isUsedInMultiPerform{false}; + bool isCancellable{false}; + + Response makeDownloadRequest(); + Response makeRequest(); + Response proceed(); + Response intercept(); + void prepareCommon(); + void prepareCommonDownload(); + void SetHeaderInternal(); + std::shared_ptr GetSharedPtrFromThis(); + CURLcode DoEasyPerform(); +}; + +template +auto Session::GetCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Get()); }, std::move(then)); +} + +template +auto Session::PostCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Post()); }, std::move(then)); +} + +template +auto Session::PutCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Put()); }, std::move(then)); +} + +template +auto Session::HeadCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Head()); }, std::move(then)); +} + +template +auto Session::DeleteCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Delete()); }, std::move(then)); +} + +template +auto Session::OptionsCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Options()); }, std::move(then)); +} + +template +auto Session::PatchCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Patch()); }, std::move(then)); +} + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/singleton.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/singleton.h new file mode 100644 index 0000000..e2ea13b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/singleton.h @@ -0,0 +1,47 @@ +#ifndef CPR_SINGLETON_H +#define CPR_SINGLETON_H + +#include + +#ifndef CPR_DISABLE_COPY +#define CPR_DISABLE_COPY(Class) \ + Class(const Class&) = delete; \ + Class& operator=(const Class&) = delete; +#endif + +#ifndef CPR_SINGLETON_DECL +#define CPR_SINGLETON_DECL(Class) \ + public: \ + static Class* GetInstance(); \ + static void ExitInstance(); \ + private: \ + CPR_DISABLE_COPY(Class) \ + static Class* s_pInstance; \ + static std::mutex s_mutex; +#endif + +#ifndef CPR_SINGLETON_IMPL +#define CPR_SINGLETON_IMPL(Class) \ + Class* Class::s_pInstance = nullptr; \ + std::mutex Class::s_mutex; \ + Class* Class::GetInstance() { \ + if (s_pInstance == nullptr) { \ + s_mutex.lock(); \ + if (s_pInstance == nullptr) { \ + s_pInstance = new Class; \ + } \ + s_mutex.unlock(); \ + } \ + return s_pInstance; \ + } \ + void Class::ExitInstance() { \ + s_mutex.lock(); \ + if (s_pInstance) { \ + delete s_pInstance; \ + s_pInstance = nullptr; \ + } \ + s_mutex.unlock(); \ + } +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/ssl_ctx.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/ssl_ctx.h new file mode 100644 index 0000000..d495fb2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/ssl_ctx.h @@ -0,0 +1,26 @@ +#ifndef CPR_SSL_CTX_H +#define CPR_SSL_CTX_H + +#include "cpr/ssl_options.h" +#include + +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION + +namespace cpr { + +/** + * This callback function loads a CA certificate from raw_cert_buf and gets called by libcurl + * just before the initialization of an SSL connection. + * The raw_cert_buf argument is set with the CURLOPT_SSL_CTX_DATA option and has to be a nul + * terminated buffer. + * + * Sources: https://curl.se/libcurl/c/CURLOPT_SSL_CTX_FUNCTION.html + * https://curl.se/libcurl/c/CURLOPT_SSL_CTX_DATA.html + */ +CURLcode sslctx_function_load_ca_cert_from_buffer(CURL* curl, void* sslctx, void* raw_cert_buf); + +} // Namespace cpr + +#endif + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/ssl_options.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/ssl_options.h new file mode 100644 index 0000000..dfd38ad --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/ssl_options.h @@ -0,0 +1,622 @@ +#ifndef CPR_SSLOPTIONS_H +#define CPR_SSLOPTIONS_H + +#include +#include +#include + +#include +#include + +#include "cpr/util.h" +#include + +#define __LIBCURL_VERSION_GTE(major, minor) ((LIBCURL_VERSION_MAJOR > (major)) || ((LIBCURL_VERSION_MAJOR == (major)) && (LIBCURL_VERSION_MINOR >= (minor)))) +#define __LIBCURL_VERSION_LT(major, minor) ((LIBCURL_VERSION_MAJOR < (major)) || ((LIBCURL_VERSION_MAJOR == (major)) && (LIBCURL_VERSION_MINOR < (minor)))) + +#ifndef SUPPORT_ALPN +#define SUPPORT_ALPN __LIBCURL_VERSION_GTE(7, 36) +#endif +#ifndef SUPPORT_NPN +#define SUPPORT_NPN __LIBCURL_VERSION_GTE(7, 36) && __LIBCURL_VERSION_LT(7, 86) +#endif + +#ifndef SUPPORT_SSLv2 +#define SUPPORT_SSLv2 __LIBCURL_VERSION_LT(7, 19) +#endif +#ifndef SUPPORT_SSLv3 +#define SUPPORT_SSLv3 __LIBCURL_VERSION_LT(7, 39) +#endif +#ifndef SUPPORT_TLSv1_0 +#define SUPPORT_TLSv1_0 __LIBCURL_VERSION_GTE(7, 34) +#endif +#ifndef SUPPORT_TLSv1_1 +#define SUPPORT_TLSv1_1 __LIBCURL_VERSION_GTE(7, 34) +#endif +#ifndef SUPPORT_TLSv1_2 +#define SUPPORT_TLSv1_2 __LIBCURL_VERSION_GTE(7, 34) +#endif +#ifndef SUPPORT_TLSv1_3 +#define SUPPORT_TLSv1_3 __LIBCURL_VERSION_GTE(7, 52) +#endif +#ifndef SUPPORT_MAX_TLS_VERSION +#define SUPPORT_MAX_TLS_VERSION __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_MAX_TLSv1_1 +#define SUPPORT_MAX_TLSv1_1 __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_MAX_TLSv1_2 +#define SUPPORT_MAX_TLSv1_2 __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_MAX_TLSv1_3 +#define SUPPORT_MAX_TLSv1_3 __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_TLSv13_CIPHERS +#define SUPPORT_TLSv13_CIPHERS __LIBCURL_VERSION_GTE(7, 61) +#endif +#ifndef SUPPORT_SESSIONID_CACHE +#define SUPPORT_SESSIONID_CACHE __LIBCURL_VERSION_GTE(7, 16) +#endif +#ifndef SUPPORT_SSL_FALSESTART +#define SUPPORT_SSL_FALSESTART __LIBCURL_VERSION_GTE(7, 42) +#endif +#ifndef SUPPORT_SSL_NO_REVOKE +#define SUPPORT_SSL_NO_REVOKE __LIBCURL_VERSION_GTE(7, 44) +#endif +#ifndef SUPPORT_CURLOPT_SSLKEY_BLOB +#define SUPPORT_CURLOPT_SSLKEY_BLOB __LIBCURL_VERSION_GTE(7, 71) +#endif +#ifndef SUPPORT_CURLOPT_SSL_CTX_FUNCTION +#define SUPPORT_CURLOPT_SSL_CTX_FUNCTION __LIBCURL_VERSION_GTE(7, 11) +#endif + +namespace cpr { + +class VerifySsl { + public: + VerifySsl() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifySsl(bool p_verify) : verify(p_verify) {} + + explicit operator bool() const { + return verify; + } + + bool verify = true; +}; + +namespace ssl { + +// set SSL client certificate +class CertFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CertFile(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + virtual ~CertFile() = default; + + const fs::path filename; + + virtual const char* GetCertType() const { + return "PEM"; + } +}; + +using PemCert = CertFile; + +class DerCert : public CertFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + DerCert(fs::path&& p_filename) : CertFile(std::move(p_filename)) {} + + virtual ~DerCert() = default; + + const char* GetCertType() const override { + return "DER"; + } +}; + +// specify private keyfile for TLS and SSL client cert +class KeyFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + KeyFile(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + template + KeyFile(FileType&& p_filename, PassType p_password) : filename(std::forward(p_filename)), password(std::move(p_password)) {} + + virtual ~KeyFile() { + util::secureStringClear(password); + } + + fs::path filename; + std::string password; + + virtual const char* GetKeyType() const { + return "PEM"; + } +}; + +#if SUPPORT_CURLOPT_SSLKEY_BLOB +class KeyBlob { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + KeyBlob(std::string&& p_blob) : blob(std::move(p_blob)) {} + + template + KeyBlob(BlobType&& p_blob, PassType p_password) : blob(std::forward(p_blob)), password(std::move(p_password)) {} + + virtual ~KeyBlob() { + util::secureStringClear(password); + } + + std::string blob; + std::string password; + + virtual const char* GetKeyType() const { + return "PEM"; + } +}; +#endif + +using PemKey = KeyFile; + +class DerKey : public KeyFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + DerKey(fs::path&& p_filename) : KeyFile(std::move(p_filename)) {} + + template + DerKey(FileType&& p_filename, PassType p_password) : KeyFile(std::forward(p_filename), std::move(p_password)) {} + + virtual ~DerKey() = default; + + const char* GetKeyType() const override { + return "DER"; + } +}; + +class PinnedPublicKey { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + PinnedPublicKey(std::string&& p_pinned_public_key) : pinned_public_key(std::move(p_pinned_public_key)) {} + + const std::string pinned_public_key; +}; + +#if SUPPORT_ALPN +// This option enables/disables ALPN in the SSL handshake (if the SSL backend libcurl is built to +// use supports it), which can be used to negotiate http2. +class ALPN { + public: + ALPN() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ALPN(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; +#endif // SUPPORT_ALPN + +#if SUPPORT_NPN +// This option enables/disables NPN in the SSL handshake (if the SSL backend libcurl is built to +// use supports it), which can be used to negotiate http2. +class NPN { + public: + NPN() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + NPN(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; +#endif // SUPPORT_NPN + +// This option determines whether libcurl verifies that the server cert is for the server it is +// known as. +class VerifyHost { + public: + VerifyHost() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifyHost(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; + +// This option determines whether libcurl verifies the authenticity of the peer's certificate. +class VerifyPeer { + public: + VerifyPeer() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifyPeer(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; + +// This option determines whether libcurl verifies the status of the server cert using the +// "Certificate Status Request" TLS extension (aka. OCSP stapling). +class VerifyStatus { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifyStatus(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = false; +}; + +// TLS v1.0 or later +struct TLSv1 {}; +#if SUPPORT_SSLv2 +// SSL v2 (but not SSLv3) +struct SSLv2 {}; +#endif +#if SUPPORT_SSLv3 +// SSL v3 (but not SSLv2) +struct SSLv3 {}; +#endif +#if SUPPORT_TLSv1_0 +// TLS v1.0 or later (Added in 7.34.0) +struct TLSv1_0 {}; +#endif +#if SUPPORT_TLSv1_1 +// TLS v1.1 or later (Added in 7.34.0) +struct TLSv1_1 {}; +#endif +#if SUPPORT_TLSv1_2 +// TLS v1.2 or later (Added in 7.34.0) +struct TLSv1_2 {}; +#endif +#if SUPPORT_TLSv1_3 +// TLS v1.3 or later (Added in 7.52.0) +struct TLSv1_3 {}; +#endif +#if SUPPORT_MAX_TLS_VERSION +// The flag defines the maximum supported TLS version by libcurl, or the default value from the SSL +// library is used. +struct MaxTLSVersion {}; +#endif +#if SUPPORT_MAX_TLSv1_0 +// The flag defines maximum supported TLS version as TLSv1.0. (Added in 7.54.0) +struct MaxTLSv1_0 {}; +#endif +#if SUPPORT_MAX_TLSv1_1 +// The flag defines maximum supported TLS version as TLSv1.1. (Added in 7.54.0) +struct MaxTLSv1_1 {}; +#endif +#if SUPPORT_MAX_TLSv1_2 +// The flag defines maximum supported TLS version as TLSv1.2. (Added in 7.54.0) +struct MaxTLSv1_2 {}; +#endif +#if SUPPORT_MAX_TLSv1_3 +// The flag defines maximum supported TLS version as TLSv1.3. (Added in 7.54.0) +struct MaxTLSv1_3 {}; +#endif + +// path to Certificate Authority (CA) bundle +class CaInfo { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CaInfo(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + fs::path filename; +}; + +// specify directory holding CA certificates +class CaPath { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CaPath(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + fs::path filename; +}; + +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION +class CaBuffer { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CaBuffer(std::string&& p_buffer) : buffer(std::move(p_buffer)) {} + + const std::string buffer; +}; +#endif + +// specify a Certificate Revocation List file +class Crl { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Crl(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + fs::path filename; +}; + +// specify ciphers to use for TLS +class Ciphers { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Ciphers(std::string&& p_ciphers) : ciphers(std::move(p_ciphers)) {} + + std::string ciphers; +}; + +#if SUPPORT_TLSv13_CIPHERS +// specify ciphers suites to use for TLS 1.3 +class TLS13_Ciphers { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + TLS13_Ciphers(std::string&& p_ciphers) : ciphers(std::move(p_ciphers)) {} + + std::string ciphers; +}; +#endif + +#if SUPPORT_SESSIONID_CACHE +// enable/disable use of the SSL session-ID cache +class SessionIdCache { + public: + SessionIdCache() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + SessionIdCache(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; +#endif + +#if SUPPORT_SSL_FALSESTART +class SslFastStart { + public: + SslFastStart() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + SslFastStart(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = false; +}; +#endif + +class NoRevoke { + public: + NoRevoke() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + NoRevoke(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = false; +}; + +} // namespace ssl + +struct SslOptions { + // We don't use fs::path here, as this leads to problems using windows + std::string cert_file; + std::string cert_type; + // We don't use fs::path here, as this leads to problems using windows + std::string key_file; +#if SUPPORT_CURLOPT_SSLKEY_BLOB + std::string key_blob; +#endif + std::string key_type; + std::string key_pass; + std::string pinned_public_key; +#if SUPPORT_ALPN + bool enable_alpn = true; +#endif // SUPPORT_ALPN +#if SUPPORT_NPN + bool enable_npn = true; +#endif // SUPPORT_ALPN + bool verify_host = true; + bool verify_peer = true; + bool verify_status = false; + int ssl_version = CURL_SSLVERSION_DEFAULT; +#if SUPPORT_SSL_NO_REVOKE + bool ssl_no_revoke = false; +#endif +#if SUPPORT_MAX_TLS_VERSION + int max_version = CURL_SSLVERSION_MAX_DEFAULT; +#endif + // We don't use fs::path here, as this leads to problems using windows + std::string ca_info; + // We don't use fs::path here, as this leads to problems using windows + std::string ca_path; +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION + std::string ca_buffer; +#endif + // We don't use fs::path here, as this leads to problems using windows + std::string crl_file; + std::string ciphers; +#if SUPPORT_TLSv13_CIPHERS + std::string tls13_ciphers; +#endif +#if SUPPORT_SESSIONID_CACHE + bool session_id_cache = true; +#endif + + ~SslOptions() noexcept { +#if SUPPORT_CURLOPT_SSLKEY_BLOB + util::secureStringClear(key_blob); +#endif + util::secureStringClear(key_pass); + } + + void SetOption(const ssl::CertFile& opt) { + cert_file = opt.filename.string(); + cert_type = opt.GetCertType(); + } + void SetOption(const ssl::KeyFile& opt) { + key_file = opt.filename.string(); + key_type = opt.GetKeyType(); + key_pass = opt.password; + } +#if SUPPORT_CURLOPT_SSLKEY_BLOB + void SetOption(const ssl::KeyBlob& opt) { + key_blob = opt.blob; + key_type = opt.GetKeyType(); + key_pass = opt.password; + } +#endif + void SetOption(const ssl::PinnedPublicKey& opt) { + pinned_public_key = opt.pinned_public_key; + } + +#if SUPPORT_ALPN + void SetOption(const ssl::ALPN& opt) { + enable_alpn = opt.enabled; + } +#endif // SUPPORT_ALPN +#if SUPPORT_NPN + void SetOption(const ssl::NPN& opt) { + enable_npn = opt.enabled; + } +#endif // SUPPORT_NPN + void SetOption(const ssl::VerifyHost& opt) { + verify_host = opt.enabled; + } + void SetOption(const ssl::VerifyPeer& opt) { + verify_peer = opt.enabled; + } + void SetOption(const ssl::VerifyStatus& opt) { + verify_status = opt.enabled; + } + void SetOption(const ssl::TLSv1& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1; + } +#if SUPPORT_SSL_NO_REVOKE + void SetOption(const ssl::NoRevoke& opt) { + ssl_no_revoke = opt.enabled; + } +#endif +#if SUPPORT_SSLv2 + void SetOption(const ssl::SSLv2& /*opt*/) { + ssl_version = CURL_SSLVERSION_SSLv2; + } +#endif +#if SUPPORT_SSLv3 + void SetOption(const ssl::SSLv3& /*opt*/) { + ssl_version = CURL_SSLVERSION_SSLv3; + } +#endif +#if SUPPORT_TLSv1_0 + void SetOption(const ssl::TLSv1_0& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_0; + } +#endif +#if SUPPORT_TLSv1_1 + void SetOption(const ssl::TLSv1_1& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_1; + } +#endif +#if SUPPORT_TLSv1_2 + void SetOption(const ssl::TLSv1_2& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_2; + } +#endif +#if SUPPORT_TLSv1_3 + void SetOption(const ssl::TLSv1_3& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_3; + } +#endif +#if SUPPORT_MAX_TLS_VERSION + void SetOption(const ssl::MaxTLSVersion& /*opt*/) { + max_version = CURL_SSLVERSION_DEFAULT; + } +#endif +#if SUPPORT_MAX_TLSv1_0 + void SetOption(const ssl::MaxTLSv1_0& opt) { + max_version = CURL_SSLVERSION_MAX_TLSv1_0; + } +#endif +#if SUPPORT_MAX_TLSv1_1 + void SetOption(const ssl::MaxTLSv1_1& /*opt*/) { + max_version = CURL_SSLVERSION_MAX_TLSv1_1; + } +#endif +#if SUPPORT_MAX_TLSv1_2 + void SetOption(const ssl::MaxTLSv1_2& /*opt*/) { + max_version = CURL_SSLVERSION_MAX_TLSv1_2; + } +#endif +#if SUPPORT_MAX_TLSv1_3 + void SetOption(const ssl::MaxTLSv1_3& /*opt*/) { + max_version = CURL_SSLVERSION_MAX_TLSv1_3; + } +#endif + void SetOption(const ssl::CaInfo& opt) { + ca_info = opt.filename.string(); + } + void SetOption(const ssl::CaPath& opt) { + ca_path = opt.filename.string(); + } +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION + void SetOption(const ssl::CaBuffer& opt) { + ca_buffer = opt.buffer; + } +#endif + void SetOption(const ssl::Crl& opt) { + crl_file = opt.filename.string(); + } + void SetOption(const ssl::Ciphers& opt) { + ciphers = opt.ciphers; + } +#if SUPPORT_TLSv13_CIPHERS + void SetOption(const ssl::TLS13_Ciphers& opt) { + tls13_ciphers = opt.ciphers; + } +#endif +#if SUPPORT_SESSIONID_CACHE + void SetOption(const ssl::SessionIdCache& opt) { + session_id_cache = opt.enabled; + } +#endif +}; + +namespace priv { + +template +void set_ssl_option(SslOptions& opts, T&& t) { + opts.SetOption(std::forward(t)); +} + +template +void set_ssl_option(SslOptions& opts, T&& t, Ts&&... ts) { + set_ssl_option(opts, std::forward(t)); + set_ssl_option(opts, std::move(ts)...); +} + +} // namespace priv + +template +SslOptions Ssl(Ts&&... ts) { + SslOptions opts; + priv::set_ssl_option(opts, std::move(ts)...); + return opts; +} + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/status_codes.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/status_codes.h new file mode 100644 index 0000000..6c7acd6 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/status_codes.h @@ -0,0 +1,100 @@ +#ifndef _CPR_STATUS_CODES +#define _CPR_STATUS_CODES +#include +namespace cpr { +namespace status { +// Information responses +constexpr std::int32_t HTTP_CONTINUE = 100; +constexpr std::int32_t HTTP_SWITCHING_PROTOCOL = 101; +constexpr std::int32_t HTTP_PROCESSING = 102; +constexpr std::int32_t HTTP_EARLY_HINTS = 103; +// Successful responses +constexpr std::int32_t HTTP_OK = 200; +constexpr std::int32_t HTTP_CREATED = 201; +constexpr std::int32_t HTTP_ACCEPTED = 202; +constexpr std::int32_t HTTP_NON_AUTHORITATIVE_INFORMATION = 203; +constexpr std::int32_t HTTP_NO_CONTENT = 204; +constexpr std::int32_t HTTP_RESET_CONTENT = 205; +constexpr std::int32_t HTTP_PARTIAL_CONTENT = 206; +constexpr std::int32_t HTTP_MULTI_STATUS = 207; +constexpr std::int32_t HTTP_ALREADY_REPORTED = 208; +constexpr std::int32_t HTTP_IM_USED = 226; +// Redirection messages +constexpr std::int32_t HTTP_MULTIPLE_CHOICE = 300; +constexpr std::int32_t HTTP_MOVED_PERMANENTLY = 301; +constexpr std::int32_t HTTP_FOUND = 302; +constexpr std::int32_t HTTP_SEE_OTHER = 303; +constexpr std::int32_t HTTP_NOT_MODIFIED = 304; +constexpr std::int32_t HTTP_USE_PROXY = 305; +constexpr std::int32_t HTTP_UNUSED = 306; +constexpr std::int32_t HTTP_TEMPORARY_REDIRECT = 307; +constexpr std::int32_t HTTP_PERMANENT_REDIRECT = 308; +// Client error responses +constexpr std::int32_t HTTP_BAD_REQUEST = 400; +constexpr std::int32_t HTTP_UNAUTHORIZED = 401; +constexpr std::int32_t HTTP_PAYMENT_REQUIRED = 402; +constexpr std::int32_t HTTP_FORBIDDEN = 403; +constexpr std::int32_t HTTP_NOT_FOUND = 404; +constexpr std::int32_t HTTP_METHOD_NOT_ALLOWED = 405; +constexpr std::int32_t HTTP_NOT_ACCEPTABLE = 406; +constexpr std::int32_t HTTP_PROXY_AUTHENTICATION_REQUIRED = 407; +constexpr std::int32_t HTTP_REQUEST_TIMEOUT = 408; +constexpr std::int32_t HTTP_CONFLICT = 409; +constexpr std::int32_t HTTP_GONE = 410; +constexpr std::int32_t HTTP_LENGTH_REQUIRED = 411; +constexpr std::int32_t HTTP_PRECONDITION_FAILED = 412; +constexpr std::int32_t HTTP_PAYLOAD_TOO_LARGE = 413; +constexpr std::int32_t HTTP_URI_TOO_LONG = 414; +constexpr std::int32_t HTTP_UNSUPPORTED_MEDIA_TYPE = 415; +constexpr std::int32_t HTTP_REQUESTED_RANGE_NOT_SATISFIABLE = 416; +constexpr std::int32_t HTTP_EXPECTATION_FAILED = 417; +constexpr std::int32_t HTTP_IM_A_TEAPOT = 418; +constexpr std::int32_t HTTP_MISDIRECTED_REQUEST = 421; +constexpr std::int32_t HTTP_UNPROCESSABLE_ENTITY = 422; +constexpr std::int32_t HTTP_LOCKED = 423; +constexpr std::int32_t HTTP_FAILED_DEPENDENCY = 424; +constexpr std::int32_t HTTP_TOO_EARLY = 425; +constexpr std::int32_t HTTP_UPGRADE_REQUIRED = 426; +constexpr std::int32_t HTTP_PRECONDITION_REQUIRED = 428; +constexpr std::int32_t HTTP_TOO_MANY_REQUESTS = 429; +constexpr std::int32_t HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431; +constexpr std::int32_t HTTP_UNAVAILABLE_FOR_LEGAL_REASONS = 451; +// Server response errors +constexpr std::int32_t HTTP_INTERNAL_SERVER_ERROR = 500; +constexpr std::int32_t HTTP_NOT_IMPLEMENTED = 501; +constexpr std::int32_t HTTP_BAD_GATEWAY = 502; +constexpr std::int32_t HTTP_SERVICE_UNAVAILABLE = 503; +constexpr std::int32_t HTTP_GATEWAY_TIMEOUT = 504; +constexpr std::int32_t HTTP_HTTP_VERSION_NOT_SUPPORTED = 505; +constexpr std::int32_t HTTP_VARIANT_ALSO_NEGOTIATES = 506; +constexpr std::int32_t HTTP_INSUFFICIENT_STORAGE = 507; +constexpr std::int32_t HTTP_LOOP_DETECTED = 508; +constexpr std::int32_t HTTP_NOT_EXTENDED = 510; +constexpr std::int32_t HTTP_NETWORK_AUTHENTICATION_REQUIRED = 511; + +constexpr std::int32_t INFO_CODE_OFFSET = 100; +constexpr std::int32_t SUCCESS_CODE_OFFSET = 200; +constexpr std::int32_t REDIRECT_CODE_OFFSET = 300; +constexpr std::int32_t CLIENT_ERROR_CODE_OFFSET = 400; +constexpr std::int32_t SERVER_ERROR_CODE_OFFSET = 500; +constexpr std::int32_t MISC_CODE_OFFSET = 600; + +constexpr bool is_informational(const std::int32_t code) { + return (code >= INFO_CODE_OFFSET && code < SUCCESS_CODE_OFFSET); +} +constexpr bool is_success(const std::int32_t code) { + return (code >= SUCCESS_CODE_OFFSET && code < REDIRECT_CODE_OFFSET); +} +constexpr bool is_redirect(const std::int32_t code) { + return (code >= REDIRECT_CODE_OFFSET && code < CLIENT_ERROR_CODE_OFFSET); +} +constexpr bool is_client_error(const std::int32_t code) { + return (code >= CLIENT_ERROR_CODE_OFFSET && code < SERVER_ERROR_CODE_OFFSET); +} +constexpr bool is_server_error(const std::int32_t code) { + return (code >= SERVER_ERROR_CODE_OFFSET && code < MISC_CODE_OFFSET); +} + +} // namespace status +} // namespace cpr +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/threadpool.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/threadpool.h new file mode 100644 index 0000000..bb7e7f2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/threadpool.h @@ -0,0 +1,122 @@ +#ifndef CPR_THREAD_POOL_H +#define CPR_THREAD_POOL_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define CPR_DEFAULT_THREAD_POOL_MAX_THREAD_NUM std::thread::hardware_concurrency() + +constexpr size_t CPR_DEFAULT_THREAD_POOL_MIN_THREAD_NUM = 1; +constexpr std::chrono::milliseconds CPR_DEFAULT_THREAD_POOL_MAX_IDLE_TIME{60000}; + +namespace cpr { + +class ThreadPool { + public: + using Task = std::function; + + explicit ThreadPool(size_t min_threads = CPR_DEFAULT_THREAD_POOL_MIN_THREAD_NUM, size_t max_threads = CPR_DEFAULT_THREAD_POOL_MAX_THREAD_NUM, std::chrono::milliseconds max_idle_ms = CPR_DEFAULT_THREAD_POOL_MAX_IDLE_TIME); + + virtual ~ThreadPool(); + + void SetMinThreadNum(size_t min_threads) { + min_thread_num = min_threads; + } + void SetMaxThreadNum(size_t max_threads) { + max_thread_num = max_threads; + } + void SetMaxIdleTime(std::chrono::milliseconds ms) { + max_idle_time = ms; + } + size_t GetCurrentThreadNum() { + return cur_thread_num; + } + size_t GetIdleThreadNum() { + return idle_thread_num; + } + bool IsStarted() { + return status != STOP; + } + bool IsStopped() { + return status == STOP; + } + + int Start(size_t start_threads = 0); + int Stop(); + int Pause(); + int Resume(); + int Wait(); + + /** + * Return a future, calling future.get() will wait task done and return RetType. + * Submit(fn, args...) + * Submit(std::bind(&Class::mem_fn, &obj)) + * Submit(std::mem_fn(&Class::mem_fn, &obj)) + **/ + template + auto Submit(Fn&& fn, Args&&... args) { + if (status == STOP) { + Start(); + } + if (idle_thread_num <= 0 && cur_thread_num < max_thread_num) { + CreateThread(); + } + using RetType = decltype(fn(args...)); + auto task = std::make_shared >(std::bind(std::forward(fn), std::forward(args)...)); + std::future future = task->get_future(); + { + std::lock_guard locker(task_mutex); + tasks.emplace([task] { (*task)(); }); + } + + task_cond.notify_one(); + return future; + } + + private: + bool CreateThread(); + void AddThread(std::thread* thread); + void DelThread(std::thread::id id); + + public: + size_t min_thread_num; + size_t max_thread_num; + std::chrono::milliseconds max_idle_time; + + private: + enum Status { + STOP, + RUNNING, + PAUSE, + }; + + struct ThreadData { + std::shared_ptr thread; + std::thread::id id; + Status status; + time_t start_time; + time_t stop_time; + }; + + std::atomic status; + std::atomic cur_thread_num; + std::atomic idle_thread_num; + std::list threads; + std::mutex thread_mutex; + std::queue tasks; + std::mutex task_mutex; + std::condition_variable task_cond; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/timeout.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/timeout.h new file mode 100644 index 0000000..83b3e68 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/timeout.h @@ -0,0 +1,27 @@ +#ifndef CPR_TIMEOUT_H +#define CPR_TIMEOUT_H + +#include +#include + +namespace cpr { + +class Timeout { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Timeout(const std::chrono::milliseconds& duration) : ms{duration} {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Timeout(const std::int32_t& milliseconds) : Timeout{std::chrono::milliseconds(milliseconds)} {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Timeout(const std::chrono::seconds& duration) : ms{std::chrono::milliseconds(duration).count()} {} + + // No way around since curl uses a long here. + // NOLINTNEXTLINE(google-runtime-int) + long Milliseconds() const; + + std::chrono::milliseconds ms; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/unix_socket.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/unix_socket.h new file mode 100644 index 0000000..152caf0 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/unix_socket.h @@ -0,0 +1,21 @@ +#ifndef CPR_UNIX_SOCKET_H +#define CPR_UNIX_SOCKET_H + +#include + +namespace cpr { + +class UnixSocket { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UnixSocket(std::string unix_socket) : unix_socket_(std::move(unix_socket)) {} + + const char* GetUnixSocketString() const noexcept; + + private: + const std::string unix_socket_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/user_agent.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/user_agent.h new file mode 100644 index 0000000..a3cc129 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/user_agent.h @@ -0,0 +1,31 @@ +#ifndef CPR_USERAGENT_H +#define CPR_USERAGENT_H + +#include +#include + +#include "cpr/cprtypes.h" + +namespace cpr { +class UserAgent : public StringHolder { + public: + UserAgent() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UserAgent(std::string useragent) : StringHolder(std::move(useragent)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UserAgent(std::string_view useragent) : StringHolder(useragent) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UserAgent(const char* useragent) : StringHolder(useragent) {} + UserAgent(const char* str, size_t len) : StringHolder(str, len) {} + UserAgent(const std::initializer_list args) : StringHolder(args) {} + UserAgent(const UserAgent& other) = default; + UserAgent(UserAgent&& old) noexcept = default; + ~UserAgent() override = default; + + UserAgent& operator=(UserAgent&& old) noexcept = default; + UserAgent& operator=(const UserAgent& other) = default; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/util.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/util.h new file mode 100644 index 0000000..d851e23 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/util.h @@ -0,0 +1,45 @@ +#ifndef CPR_UTIL_H +#define CPR_UTIL_H + +#include +#include +#include + +#include "cpr/callback.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/curlholder.h" + +namespace cpr::util { + +Header parseHeader(const std::string& headers, std::string* status_line = nullptr, std::string* reason = nullptr); +Cookies parseCookies(curl_slist* raw_cookies); +size_t readUserFunction(char* ptr, size_t size, size_t nitems, const ReadCallback* read); +size_t headerUserFunction(char* ptr, size_t size, size_t nmemb, const HeaderCallback* header); +size_t writeFunction(char* ptr, size_t size, size_t nmemb, std::string* data); +size_t writeFileFunction(char* ptr, size_t size, size_t nmemb, std::ofstream* file); +size_t writeUserFunction(char* ptr, size_t size, size_t nmemb, const WriteCallback* write); + +template +int progressUserFunction(const T* progress, cpr_pf_arg_t dltotal, cpr_pf_arg_t dlnow, cpr_pf_arg_t ultotal, cpr_pf_arg_t ulnow) { + const int cancel_retval{1}; + static_assert(cancel_retval != CURL_PROGRESSFUNC_CONTINUE); + return (*progress)(dltotal, dlnow, ultotal, ulnow) ? 0 : cancel_retval; +} +int debugUserFunction(CURL* handle, curl_infotype type, char* data, size_t size, const DebugCallback* debug); +std::vector split(const std::string& to_split, char delimiter); +std::string urlEncode(const std::string& s); +std::string urlDecode(const std::string& s); + +/** + * Override the content of the provided string to hide sensitive data. The + * string content after invocation is undefined. The string size is reset to zero. + * impl. based on: + * https://github.com/ojeda/secure_clear/blob/master/example-implementation/secure_clear.h + **/ +void secureStringClear(std::string& s); +bool isTrue(const std::string& s); + +} // namespace cpr::util + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/verbose.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/verbose.h new file mode 100644 index 0000000..2bf0df8 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/cpr/verbose.h @@ -0,0 +1,18 @@ +#ifndef CPR_VERBOSE_H_ +#define CPR_VERBOSE_H_ + +namespace cpr { + +class Verbose { + public: + Verbose() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Verbose(const bool p_verbose) : verbose{p_verbose} {} + + bool verbose = true; +}; + +} // namespace cpr + + +#endif /* CPR_VERBOSE_H_ */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/curl.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/curl.h new file mode 100644 index 0000000..bf71d82 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/curl.h @@ -0,0 +1,3241 @@ +#ifndef CURLINC_CURL_H +#define CURLINC_CURL_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* + * If you have libcurl problems, all docs and details are found here: + * https://curl.se/libcurl/ + */ + +#ifdef CURL_NO_OLDIES +#define CURL_STRICTER +#endif + +/* Compile-time deprecation macros. */ +#if defined(__GNUC__) && \ + ((__GNUC__ > 12) || ((__GNUC__ == 12) && (__GNUC_MINOR__ >= 1 ))) && \ + !defined(__INTEL_COMPILER) && \ + !defined(CURL_DISABLE_DEPRECATION) && !defined(BUILDING_LIBCURL) +#define CURL_DEPRECATED(version, message) \ + __attribute__((deprecated("since " # version ". " message))) +#define CURL_IGNORE_DEPRECATION(statements) \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ + statements \ + _Pragma("GCC diagnostic pop") +#else +#define CURL_DEPRECATED(version, message) +#define CURL_IGNORE_DEPRECATION(statements) statements +#endif + +#include "curlver.h" /* libcurl version defines */ +#include "system.h" /* determine things run-time */ + +/* + * Define CURL_WIN32 when build target is Win32 API + */ + +#if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && \ + !defined(__SYMBIAN32__) +#define CURL_WIN32 +#endif + +#include +#include + +#if (defined(__FreeBSD__) && (__FreeBSD__ >= 2)) || defined(__MidnightBSD__) +/* Needed for __FreeBSD_version or __MidnightBSD_version symbol definition */ +#include +#endif + +/* The include stuff here below is mainly for time_t! */ +#include +#include + +#if defined(CURL_WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__) +#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || \ + defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H)) +/* The check above prevents the winsock2 inclusion if winsock.h already was + included, since they can't co-exist without problems */ +#include +#include +#endif +#endif + +/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish + libc5-based Linux systems. Only include it on systems that are known to + require it! */ +#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \ + defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \ + defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \ + defined(__CYGWIN__) || defined(AMIGA) || defined(__NuttX__) || \ + (defined(__FreeBSD_version) && (__FreeBSD_version < 800000)) || \ + (defined(__MidnightBSD_version) && (__MidnightBSD_version < 100000)) || \ + defined(__sun__) || defined(__serenity__) || defined(__vxworks__) +#include +#endif + +#if !defined(CURL_WIN32) && !defined(_WIN32_WCE) +#include +#endif + +#if !defined(CURL_WIN32) +#include +#endif + +/* Compatibility for non-Clang compilers */ +#ifndef __has_declspec_attribute +# define __has_declspec_attribute(x) 0 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) +typedef struct Curl_easy CURL; +typedef struct Curl_share CURLSH; +#else +typedef void CURL; +typedef void CURLSH; +#endif + +/* + * libcurl external API function linkage decorations. + */ + +#ifdef CURL_STATICLIB +# define CURL_EXTERN +#elif defined(CURL_WIN32) || defined(__SYMBIAN32__) || \ + (__has_declspec_attribute(dllexport) && \ + __has_declspec_attribute(dllimport)) +# if defined(BUILDING_LIBCURL) +# define CURL_EXTERN __declspec(dllexport) +# else +# define CURL_EXTERN __declspec(dllimport) +# endif +#elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS) +# define CURL_EXTERN CURL_EXTERN_SYMBOL +#else +# define CURL_EXTERN +#endif + +#ifndef curl_socket_typedef +/* socket typedef */ +#if defined(CURL_WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H) +typedef SOCKET curl_socket_t; +#define CURL_SOCKET_BAD INVALID_SOCKET +#else +typedef int curl_socket_t; +#define CURL_SOCKET_BAD -1 +#endif +#define curl_socket_typedef +#endif /* curl_socket_typedef */ + +/* enum for the different supported SSL backends */ +typedef enum { + CURLSSLBACKEND_NONE = 0, + CURLSSLBACKEND_OPENSSL = 1, + CURLSSLBACKEND_GNUTLS = 2, + CURLSSLBACKEND_NSS CURL_DEPRECATED(8.3.0, "") = 3, + CURLSSLBACKEND_OBSOLETE4 = 4, /* Was QSOSSL. */ + CURLSSLBACKEND_GSKIT CURL_DEPRECATED(8.3.0, "") = 5, + CURLSSLBACKEND_POLARSSL CURL_DEPRECATED(7.69.0, "") = 6, + CURLSSLBACKEND_WOLFSSL = 7, + CURLSSLBACKEND_SCHANNEL = 8, + CURLSSLBACKEND_SECURETRANSPORT = 9, + CURLSSLBACKEND_AXTLS CURL_DEPRECATED(7.61.0, "") = 10, + CURLSSLBACKEND_MBEDTLS = 11, + CURLSSLBACKEND_MESALINK CURL_DEPRECATED(7.82.0, "") = 12, + CURLSSLBACKEND_BEARSSL = 13, + CURLSSLBACKEND_RUSTLS = 14 +} curl_sslbackend; + +/* aliases for library clones and renames */ +#define CURLSSLBACKEND_AWSLC CURLSSLBACKEND_OPENSSL +#define CURLSSLBACKEND_BORINGSSL CURLSSLBACKEND_OPENSSL +#define CURLSSLBACKEND_LIBRESSL CURLSSLBACKEND_OPENSSL + +/* deprecated names: */ +#define CURLSSLBACKEND_CYASSL CURLSSLBACKEND_WOLFSSL +#define CURLSSLBACKEND_DARWINSSL CURLSSLBACKEND_SECURETRANSPORT + +struct curl_httppost { + struct curl_httppost *next; /* next entry in the list */ + char *name; /* pointer to allocated name */ + long namelength; /* length of name length */ + char *contents; /* pointer to allocated data contents */ + long contentslength; /* length of contents field, see also + CURL_HTTPPOST_LARGE */ + char *buffer; /* pointer to allocated buffer contents */ + long bufferlength; /* length of buffer field */ + char *contenttype; /* Content-Type */ + struct curl_slist *contentheader; /* list of extra headers for this form */ + struct curl_httppost *more; /* if one field name has more than one + file, this link should link to following + files */ + long flags; /* as defined below */ + +/* specified content is a file name */ +#define CURL_HTTPPOST_FILENAME (1<<0) +/* specified content is a file name */ +#define CURL_HTTPPOST_READFILE (1<<1) +/* name is only stored pointer do not free in formfree */ +#define CURL_HTTPPOST_PTRNAME (1<<2) +/* contents is only stored pointer do not free in formfree */ +#define CURL_HTTPPOST_PTRCONTENTS (1<<3) +/* upload file from buffer */ +#define CURL_HTTPPOST_BUFFER (1<<4) +/* upload file from pointer contents */ +#define CURL_HTTPPOST_PTRBUFFER (1<<5) +/* upload file contents by using the regular read callback to get the data and + pass the given pointer as custom pointer */ +#define CURL_HTTPPOST_CALLBACK (1<<6) +/* use size in 'contentlen', added in 7.46.0 */ +#define CURL_HTTPPOST_LARGE (1<<7) + + char *showfilename; /* The file name to show. If not set, the + actual file name will be used (if this + is a file part) */ + void *userp; /* custom pointer used for + HTTPPOST_CALLBACK posts */ + curl_off_t contentlen; /* alternative length of contents + field. Used if CURL_HTTPPOST_LARGE is + set. Added in 7.46.0 */ +}; + + +/* This is a return code for the progress callback that, when returned, will + signal libcurl to continue executing the default progress function */ +#define CURL_PROGRESSFUNC_CONTINUE 0x10000001 + +/* This is the CURLOPT_PROGRESSFUNCTION callback prototype. It is now + considered deprecated but was the only choice up until 7.31.0 */ +typedef int (*curl_progress_callback)(void *clientp, + double dltotal, + double dlnow, + double ultotal, + double ulnow); + +/* This is the CURLOPT_XFERINFOFUNCTION callback prototype. It was introduced + in 7.32.0, avoids the use of floating point numbers and provides more + detailed information. */ +typedef int (*curl_xferinfo_callback)(void *clientp, + curl_off_t dltotal, + curl_off_t dlnow, + curl_off_t ultotal, + curl_off_t ulnow); + +#ifndef CURL_MAX_READ_SIZE + /* The maximum receive buffer size configurable via CURLOPT_BUFFERSIZE. */ +#define CURL_MAX_READ_SIZE (10*1024*1024) +#endif + +#ifndef CURL_MAX_WRITE_SIZE + /* Tests have proven that 20K is a very bad buffer size for uploads on + Windows, while 16K for some odd reason performed a lot better. + We do the ifndef check to allow this value to easier be changed at build + time for those who feel adventurous. The practical minimum is about + 400 bytes since libcurl uses a buffer of this size as a scratch area + (unrelated to network send operations). */ +#define CURL_MAX_WRITE_SIZE 16384 +#endif + +#ifndef CURL_MAX_HTTP_HEADER +/* The only reason to have a max limit for this is to avoid the risk of a bad + server feeding libcurl with a never-ending header that will cause reallocs + infinitely */ +#define CURL_MAX_HTTP_HEADER (100*1024) +#endif + +/* This is a magic return code for the write callback that, when returned, + will signal libcurl to pause receiving on the current transfer. */ +#define CURL_WRITEFUNC_PAUSE 0x10000001 + +/* This is a magic return code for the write callback that, when returned, + will signal an error from the callback. */ +#define CURL_WRITEFUNC_ERROR 0xFFFFFFFF + +typedef size_t (*curl_write_callback)(char *buffer, + size_t size, + size_t nitems, + void *outstream); + +/* This callback will be called when a new resolver request is made */ +typedef int (*curl_resolver_start_callback)(void *resolver_state, + void *reserved, void *userdata); + +/* enumeration of file types */ +typedef enum { + CURLFILETYPE_FILE = 0, + CURLFILETYPE_DIRECTORY, + CURLFILETYPE_SYMLINK, + CURLFILETYPE_DEVICE_BLOCK, + CURLFILETYPE_DEVICE_CHAR, + CURLFILETYPE_NAMEDPIPE, + CURLFILETYPE_SOCKET, + CURLFILETYPE_DOOR, /* is possible only on Sun Solaris now */ + + CURLFILETYPE_UNKNOWN /* should never occur */ +} curlfiletype; + +#define CURLFINFOFLAG_KNOWN_FILENAME (1<<0) +#define CURLFINFOFLAG_KNOWN_FILETYPE (1<<1) +#define CURLFINFOFLAG_KNOWN_TIME (1<<2) +#define CURLFINFOFLAG_KNOWN_PERM (1<<3) +#define CURLFINFOFLAG_KNOWN_UID (1<<4) +#define CURLFINFOFLAG_KNOWN_GID (1<<5) +#define CURLFINFOFLAG_KNOWN_SIZE (1<<6) +#define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1<<7) + +/* Information about a single file, used when doing FTP wildcard matching */ +struct curl_fileinfo { + char *filename; + curlfiletype filetype; + time_t time; /* always zero! */ + unsigned int perm; + int uid; + int gid; + curl_off_t size; + long int hardlinks; + + struct { + /* If some of these fields is not NULL, it is a pointer to b_data. */ + char *time; + char *perm; + char *user; + char *group; + char *target; /* pointer to the target filename of a symlink */ + } strings; + + unsigned int flags; + + /* These are libcurl private struct fields. Previously used by libcurl, so + they must never be interfered with. */ + char *b_data; + size_t b_size; + size_t b_used; +}; + +/* return codes for CURLOPT_CHUNK_BGN_FUNCTION */ +#define CURL_CHUNK_BGN_FUNC_OK 0 +#define CURL_CHUNK_BGN_FUNC_FAIL 1 /* tell the lib to end the task */ +#define CURL_CHUNK_BGN_FUNC_SKIP 2 /* skip this chunk over */ + +/* if splitting of data transfer is enabled, this callback is called before + download of an individual chunk started. Note that parameter "remains" works + only for FTP wildcard downloading (for now), otherwise is not used */ +typedef long (*curl_chunk_bgn_callback)(const void *transfer_info, + void *ptr, + int remains); + +/* return codes for CURLOPT_CHUNK_END_FUNCTION */ +#define CURL_CHUNK_END_FUNC_OK 0 +#define CURL_CHUNK_END_FUNC_FAIL 1 /* tell the lib to end the task */ + +/* If splitting of data transfer is enabled this callback is called after + download of an individual chunk finished. + Note! After this callback was set then it have to be called FOR ALL chunks. + Even if downloading of this chunk was skipped in CHUNK_BGN_FUNC. + This is the reason why we don't need "transfer_info" parameter in this + callback and we are not interested in "remains" parameter too. */ +typedef long (*curl_chunk_end_callback)(void *ptr); + +/* return codes for FNMATCHFUNCTION */ +#define CURL_FNMATCHFUNC_MATCH 0 /* string corresponds to the pattern */ +#define CURL_FNMATCHFUNC_NOMATCH 1 /* pattern doesn't match the string */ +#define CURL_FNMATCHFUNC_FAIL 2 /* an error occurred */ + +/* callback type for wildcard downloading pattern matching. If the + string matches the pattern, return CURL_FNMATCHFUNC_MATCH value, etc. */ +typedef int (*curl_fnmatch_callback)(void *ptr, + const char *pattern, + const char *string); + +/* These are the return codes for the seek callbacks */ +#define CURL_SEEKFUNC_OK 0 +#define CURL_SEEKFUNC_FAIL 1 /* fail the entire transfer */ +#define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so + libcurl might try other means instead */ +typedef int (*curl_seek_callback)(void *instream, + curl_off_t offset, + int origin); /* 'whence' */ + +/* This is a return code for the read callback that, when returned, will + signal libcurl to immediately abort the current transfer. */ +#define CURL_READFUNC_ABORT 0x10000000 +/* This is a return code for the read callback that, when returned, will + signal libcurl to pause sending data on the current transfer. */ +#define CURL_READFUNC_PAUSE 0x10000001 + +/* Return code for when the trailing headers' callback has terminated + without any errors */ +#define CURL_TRAILERFUNC_OK 0 +/* Return code for when was an error in the trailing header's list and we + want to abort the request */ +#define CURL_TRAILERFUNC_ABORT 1 + +typedef size_t (*curl_read_callback)(char *buffer, + size_t size, + size_t nitems, + void *instream); + +typedef int (*curl_trailer_callback)(struct curl_slist **list, + void *userdata); + +typedef enum { + CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */ + CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */ + CURLSOCKTYPE_LAST /* never use */ +} curlsocktype; + +/* The return code from the sockopt_callback can signal information back + to libcurl: */ +#define CURL_SOCKOPT_OK 0 +#define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return + CURLE_ABORTED_BY_CALLBACK */ +#define CURL_SOCKOPT_ALREADY_CONNECTED 2 + +typedef int (*curl_sockopt_callback)(void *clientp, + curl_socket_t curlfd, + curlsocktype purpose); + +struct curl_sockaddr { + int family; + int socktype; + int protocol; + unsigned int addrlen; /* addrlen was a socklen_t type before 7.18.0 but it + turned really ugly and painful on the systems that + lack this type */ + struct sockaddr addr; +}; + +typedef curl_socket_t +(*curl_opensocket_callback)(void *clientp, + curlsocktype purpose, + struct curl_sockaddr *address); + +typedef int +(*curl_closesocket_callback)(void *clientp, curl_socket_t item); + +typedef enum { + CURLIOE_OK, /* I/O operation successful */ + CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ + CURLIOE_FAILRESTART, /* failed to restart the read */ + CURLIOE_LAST /* never use */ +} curlioerr; + +typedef enum { + CURLIOCMD_NOP, /* no operation */ + CURLIOCMD_RESTARTREAD, /* restart the read stream from start */ + CURLIOCMD_LAST /* never use */ +} curliocmd; + +typedef curlioerr (*curl_ioctl_callback)(CURL *handle, + int cmd, + void *clientp); + +#ifndef CURL_DID_MEMORY_FUNC_TYPEDEFS +/* + * The following typedef's are signatures of malloc, free, realloc, strdup and + * calloc respectively. Function pointers of these types can be passed to the + * curl_global_init_mem() function to set user defined memory management + * callback routines. + */ +typedef void *(*curl_malloc_callback)(size_t size); +typedef void (*curl_free_callback)(void *ptr); +typedef void *(*curl_realloc_callback)(void *ptr, size_t size); +typedef char *(*curl_strdup_callback)(const char *str); +typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size); + +#define CURL_DID_MEMORY_FUNC_TYPEDEFS +#endif + +/* the kind of data that is passed to information_callback */ +typedef enum { + CURLINFO_TEXT = 0, + CURLINFO_HEADER_IN, /* 1 */ + CURLINFO_HEADER_OUT, /* 2 */ + CURLINFO_DATA_IN, /* 3 */ + CURLINFO_DATA_OUT, /* 4 */ + CURLINFO_SSL_DATA_IN, /* 5 */ + CURLINFO_SSL_DATA_OUT, /* 6 */ + CURLINFO_END +} curl_infotype; + +typedef int (*curl_debug_callback) + (CURL *handle, /* the handle/transfer this concerns */ + curl_infotype type, /* what kind of data */ + char *data, /* points to the data */ + size_t size, /* size of the data pointed to */ + void *userptr); /* whatever the user please */ + +/* This is the CURLOPT_PREREQFUNCTION callback prototype. */ +typedef int (*curl_prereq_callback)(void *clientp, + char *conn_primary_ip, + char *conn_local_ip, + int conn_primary_port, + int conn_local_port); + +/* Return code for when the pre-request callback has terminated without + any errors */ +#define CURL_PREREQFUNC_OK 0 +/* Return code for when the pre-request callback wants to abort the + request */ +#define CURL_PREREQFUNC_ABORT 1 + +/* All possible error codes from all sorts of curl functions. Future versions + may return other values, stay prepared. + + Always add new return codes last. Never *EVER* remove any. The return + codes must remain the same! + */ + +typedef enum { + CURLE_OK = 0, + CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ + CURLE_FAILED_INIT, /* 2 */ + CURLE_URL_MALFORMAT, /* 3 */ + CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for + 7.17.0, reused in April 2011 for 7.21.5] */ + CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ + CURLE_COULDNT_RESOLVE_HOST, /* 6 */ + CURLE_COULDNT_CONNECT, /* 7 */ + CURLE_WEIRD_SERVER_REPLY, /* 8 */ + CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server + due to lack of access - when login fails + this is not returned. */ + CURLE_FTP_ACCEPT_FAILED, /* 10 - [was obsoleted in April 2006 for + 7.15.4, reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ + CURLE_FTP_ACCEPT_TIMEOUT, /* 12 - timeout occurred accepting server + [was obsoleted in August 2007 for 7.17.0, + reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ + CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ + CURLE_FTP_CANT_GET_HOST, /* 15 */ + CURLE_HTTP2, /* 16 - A problem in the http2 framing layer. + [was obsoleted in August 2007 for 7.17.0, + reused in July 2014 for 7.38.0] */ + CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ + CURLE_PARTIAL_FILE, /* 18 */ + CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ + CURLE_OBSOLETE20, /* 20 - NOT USED */ + CURLE_QUOTE_ERROR, /* 21 - quote command failure */ + CURLE_HTTP_RETURNED_ERROR, /* 22 */ + CURLE_WRITE_ERROR, /* 23 */ + CURLE_OBSOLETE24, /* 24 - NOT USED */ + CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ + CURLE_READ_ERROR, /* 26 - couldn't open/read from file */ + CURLE_OUT_OF_MEMORY, /* 27 */ + CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ + CURLE_OBSOLETE29, /* 29 - NOT USED */ + CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ + CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ + CURLE_OBSOLETE32, /* 32 - NOT USED */ + CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */ + CURLE_HTTP_POST_ERROR, /* 34 */ + CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ + CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */ + CURLE_FILE_COULDNT_READ_FILE, /* 37 */ + CURLE_LDAP_CANNOT_BIND, /* 38 */ + CURLE_LDAP_SEARCH_FAILED, /* 39 */ + CURLE_OBSOLETE40, /* 40 - NOT USED */ + CURLE_FUNCTION_NOT_FOUND, /* 41 - NOT USED starting with 7.53.0 */ + CURLE_ABORTED_BY_CALLBACK, /* 42 */ + CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ + CURLE_OBSOLETE44, /* 44 - NOT USED */ + CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ + CURLE_OBSOLETE46, /* 46 - NOT USED */ + CURLE_TOO_MANY_REDIRECTS, /* 47 - catch endless re-direct loops */ + CURLE_UNKNOWN_OPTION, /* 48 - User specified an unknown option */ + CURLE_SETOPT_OPTION_SYNTAX, /* 49 - Malformed setopt option */ + CURLE_OBSOLETE50, /* 50 - NOT USED */ + CURLE_OBSOLETE51, /* 51 - NOT USED */ + CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ + CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ + CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as + default */ + CURLE_SEND_ERROR, /* 55 - failed sending network data */ + CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ + CURLE_OBSOLETE57, /* 57 - NOT IN USE */ + CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ + CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */ + CURLE_PEER_FAILED_VERIFICATION, /* 60 - peer's certificate or fingerprint + wasn't verified fine */ + CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */ + CURLE_OBSOLETE62, /* 62 - NOT IN USE since 7.82.0 */ + CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ + CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ + CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind + that failed */ + CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ + CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not + accepted and we failed to login */ + CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ + CURLE_TFTP_PERM, /* 69 - permission problem on server */ + CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ + CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ + CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ + CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ + CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ + CURLE_OBSOLETE75, /* 75 - NOT IN USE since 7.82.0 */ + CURLE_OBSOLETE76, /* 76 - NOT IN USE since 7.82.0 */ + CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing + or wrong format */ + CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ + CURLE_SSH, /* 79 - error from the SSH layer, somewhat + generic so the error message will be of + interest when this has happened */ + + CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL + connection */ + CURLE_AGAIN, /* 81 - socket is not ready for send/recv, + wait till it's ready and try again (Added + in 7.18.2) */ + CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or + wrong format (Added in 7.19.0) */ + CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in + 7.19.0) */ + CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */ + CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */ + CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Ids */ + CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */ + CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */ + CURLE_NO_CONNECTION_AVAILABLE, /* 89 - No connection available, the + session will be queued */ + CURLE_SSL_PINNEDPUBKEYNOTMATCH, /* 90 - specified pinned public key did not + match */ + CURLE_SSL_INVALIDCERTSTATUS, /* 91 - invalid certificate status */ + CURLE_HTTP2_STREAM, /* 92 - stream error in HTTP/2 framing layer + */ + CURLE_RECURSIVE_API_CALL, /* 93 - an api function was called from + inside a callback */ + CURLE_AUTH_ERROR, /* 94 - an authentication function returned an + error */ + CURLE_HTTP3, /* 95 - An HTTP/3 layer problem */ + CURLE_QUIC_CONNECT_ERROR, /* 96 - QUIC connection error */ + CURLE_PROXY, /* 97 - proxy handshake error */ + CURLE_SSL_CLIENTCERT, /* 98 - client-side certificate required */ + CURLE_UNRECOVERABLE_POLL, /* 99 - poll/select returned fatal error */ + CURL_LAST /* never use! */ +} CURLcode; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Previously obsolete error code reused in 7.38.0 */ +#define CURLE_OBSOLETE16 CURLE_HTTP2 + +/* Previously obsolete error codes reused in 7.24.0 */ +#define CURLE_OBSOLETE10 CURLE_FTP_ACCEPT_FAILED +#define CURLE_OBSOLETE12 CURLE_FTP_ACCEPT_TIMEOUT + +/* compatibility with older names */ +#define CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING +#define CURLE_FTP_WEIRD_SERVER_REPLY CURLE_WEIRD_SERVER_REPLY + +/* The following were added in 7.62.0 */ +#define CURLE_SSL_CACERT CURLE_PEER_FAILED_VERIFICATION + +/* The following were added in 7.21.5, April 2011 */ +#define CURLE_UNKNOWN_TELNET_OPTION CURLE_UNKNOWN_OPTION + +/* Added for 7.78.0 */ +#define CURLE_TELNET_OPTION_SYNTAX CURLE_SETOPT_OPTION_SYNTAX + +/* The following were added in 7.17.1 */ +/* These are scheduled to disappear by 2009 */ +#define CURLE_SSL_PEER_CERTIFICATE CURLE_PEER_FAILED_VERIFICATION + +/* The following were added in 7.17.0 */ +/* These are scheduled to disappear by 2009 */ +#define CURLE_OBSOLETE CURLE_OBSOLETE50 /* no one should be using this! */ +#define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46 +#define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44 +#define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10 +#define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16 +#define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32 +#define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29 +#define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12 +#define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20 +#define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40 +#define CURLE_MALFORMAT_USER CURLE_OBSOLETE24 +#define CURLE_SHARE_IN_USE CURLE_OBSOLETE57 +#define CURLE_URL_MALFORMAT_USER CURLE_NOT_BUILT_IN + +#define CURLE_FTP_ACCESS_DENIED CURLE_REMOTE_ACCESS_DENIED +#define CURLE_FTP_COULDNT_SET_BINARY CURLE_FTP_COULDNT_SET_TYPE +#define CURLE_FTP_QUOTE_ERROR CURLE_QUOTE_ERROR +#define CURLE_TFTP_DISKFULL CURLE_REMOTE_DISK_FULL +#define CURLE_TFTP_EXISTS CURLE_REMOTE_FILE_EXISTS +#define CURLE_HTTP_RANGE_ERROR CURLE_RANGE_ERROR +#define CURLE_FTP_SSL_FAILED CURLE_USE_SSL_FAILED + +/* The following were added earlier */ + +#define CURLE_OPERATION_TIMEOUTED CURLE_OPERATION_TIMEDOUT +#define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR +#define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED +#define CURLE_FTP_COULDNT_STOR_FILE CURLE_UPLOAD_FAILED +#define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE +#define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME +#define CURLE_LDAP_INVALID_URL CURLE_OBSOLETE62 +#define CURLE_CONV_REQD CURLE_OBSOLETE76 +#define CURLE_CONV_FAILED CURLE_OBSOLETE75 + +/* This was the error code 50 in 7.7.3 and a few earlier versions, this + is no longer used by libcurl but is instead #defined here only to not + make programs break */ +#define CURLE_ALREADY_COMPLETE 99999 + +/* Provide defines for really old option names */ +#define CURLOPT_FILE CURLOPT_WRITEDATA /* name changed in 7.9.7 */ +#define CURLOPT_INFILE CURLOPT_READDATA /* name changed in 7.9.7 */ +#define CURLOPT_WRITEHEADER CURLOPT_HEADERDATA + +/* Since long deprecated options with no code in the lib that does anything + with them. */ +#define CURLOPT_WRITEINFO CURLOPT_OBSOLETE40 +#define CURLOPT_CLOSEPOLICY CURLOPT_OBSOLETE72 + +#endif /* !CURL_NO_OLDIES */ + +/* + * Proxy error codes. Returned in CURLINFO_PROXY_ERROR if CURLE_PROXY was + * return for the transfers. + */ +typedef enum { + CURLPX_OK, + CURLPX_BAD_ADDRESS_TYPE, + CURLPX_BAD_VERSION, + CURLPX_CLOSED, + CURLPX_GSSAPI, + CURLPX_GSSAPI_PERMSG, + CURLPX_GSSAPI_PROTECTION, + CURLPX_IDENTD, + CURLPX_IDENTD_DIFFER, + CURLPX_LONG_HOSTNAME, + CURLPX_LONG_PASSWD, + CURLPX_LONG_USER, + CURLPX_NO_AUTH, + CURLPX_RECV_ADDRESS, + CURLPX_RECV_AUTH, + CURLPX_RECV_CONNECT, + CURLPX_RECV_REQACK, + CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED, + CURLPX_REPLY_COMMAND_NOT_SUPPORTED, + CURLPX_REPLY_CONNECTION_REFUSED, + CURLPX_REPLY_GENERAL_SERVER_FAILURE, + CURLPX_REPLY_HOST_UNREACHABLE, + CURLPX_REPLY_NETWORK_UNREACHABLE, + CURLPX_REPLY_NOT_ALLOWED, + CURLPX_REPLY_TTL_EXPIRED, + CURLPX_REPLY_UNASSIGNED, + CURLPX_REQUEST_FAILED, + CURLPX_RESOLVE_HOST, + CURLPX_SEND_AUTH, + CURLPX_SEND_CONNECT, + CURLPX_SEND_REQUEST, + CURLPX_UNKNOWN_FAIL, + CURLPX_UNKNOWN_MODE, + CURLPX_USER_REJECTED, + CURLPX_LAST /* never use */ +} CURLproxycode; + +/* This prototype applies to all conversion callbacks */ +typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length); + +typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */ + void *ssl_ctx, /* actually an OpenSSL + or WolfSSL SSL_CTX, + or an mbedTLS + mbedtls_ssl_config */ + void *userptr); + +typedef enum { + CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use + CONNECT HTTP/1.1 */ + CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT + HTTP/1.0 */ + CURLPROXY_HTTPS = 2, /* HTTPS but stick to HTTP/1 added in 7.52.0 */ + CURLPROXY_HTTPS2 = 3, /* HTTPS and attempt HTTP/2 added in 8.2.0 */ + CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already + in 7.10 */ + CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ + CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ + CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the + host name rather than the IP address. added + in 7.18.0 */ +} curl_proxytype; /* this enum was added in 7.10 */ + +/* + * Bitmasks for CURLOPT_HTTPAUTH and CURLOPT_PROXYAUTH options: + * + * CURLAUTH_NONE - No HTTP authentication + * CURLAUTH_BASIC - HTTP Basic authentication (default) + * CURLAUTH_DIGEST - HTTP Digest authentication + * CURLAUTH_NEGOTIATE - HTTP Negotiate (SPNEGO) authentication + * CURLAUTH_GSSNEGOTIATE - Alias for CURLAUTH_NEGOTIATE (deprecated) + * CURLAUTH_NTLM - HTTP NTLM authentication + * CURLAUTH_DIGEST_IE - HTTP Digest authentication with IE flavour + * CURLAUTH_NTLM_WB - HTTP NTLM authentication delegated to winbind helper + * CURLAUTH_BEARER - HTTP Bearer token authentication + * CURLAUTH_ONLY - Use together with a single other type to force no + * authentication or just that single type + * CURLAUTH_ANY - All fine types set + * CURLAUTH_ANYSAFE - All fine types except Basic + */ + +#define CURLAUTH_NONE ((unsigned long)0) +#define CURLAUTH_BASIC (((unsigned long)1)<<0) +#define CURLAUTH_DIGEST (((unsigned long)1)<<1) +#define CURLAUTH_NEGOTIATE (((unsigned long)1)<<2) +/* Deprecated since the advent of CURLAUTH_NEGOTIATE */ +#define CURLAUTH_GSSNEGOTIATE CURLAUTH_NEGOTIATE +/* Used for CURLOPT_SOCKS5_AUTH to stay terminologically correct */ +#define CURLAUTH_GSSAPI CURLAUTH_NEGOTIATE +#define CURLAUTH_NTLM (((unsigned long)1)<<3) +#define CURLAUTH_DIGEST_IE (((unsigned long)1)<<4) +#define CURLAUTH_NTLM_WB (((unsigned long)1)<<5) +#define CURLAUTH_BEARER (((unsigned long)1)<<6) +#define CURLAUTH_AWS_SIGV4 (((unsigned long)1)<<7) +#define CURLAUTH_ONLY (((unsigned long)1)<<31) +#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE) +#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE)) + +#define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ +#define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ +#define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */ +#define CURLSSH_AUTH_PASSWORD (1<<1) /* password */ +#define CURLSSH_AUTH_HOST (1<<2) /* host key files */ +#define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */ +#define CURLSSH_AUTH_AGENT (1<<4) /* agent (ssh-agent, pageant...) */ +#define CURLSSH_AUTH_GSSAPI (1<<5) /* gssapi (kerberos, ...) */ +#define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY + +#define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */ +#define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */ +#define CURLGSSAPI_DELEGATION_FLAG (1<<1) /* delegate always */ + +#define CURL_ERROR_SIZE 256 + +enum curl_khtype { + CURLKHTYPE_UNKNOWN, + CURLKHTYPE_RSA1, + CURLKHTYPE_RSA, + CURLKHTYPE_DSS, + CURLKHTYPE_ECDSA, + CURLKHTYPE_ED25519 +}; + +struct curl_khkey { + const char *key; /* points to a null-terminated string encoded with base64 + if len is zero, otherwise to the "raw" data */ + size_t len; + enum curl_khtype keytype; +}; + +/* this is the set of return values expected from the curl_sshkeycallback + callback */ +enum curl_khstat { + CURLKHSTAT_FINE_ADD_TO_FILE, + CURLKHSTAT_FINE, + CURLKHSTAT_REJECT, /* reject the connection, return an error */ + CURLKHSTAT_DEFER, /* do not accept it, but we can't answer right now. + Causes a CURLE_PEER_FAILED_VERIFICATION error but the + connection will be left intact etc */ + CURLKHSTAT_FINE_REPLACE, /* accept and replace the wrong key */ + CURLKHSTAT_LAST /* not for use, only a marker for last-in-list */ +}; + +/* this is the set of status codes pass in to the callback */ +enum curl_khmatch { + CURLKHMATCH_OK, /* match */ + CURLKHMATCH_MISMATCH, /* host found, key mismatch! */ + CURLKHMATCH_MISSING, /* no matching host/key found */ + CURLKHMATCH_LAST /* not for use, only a marker for last-in-list */ +}; + +typedef int + (*curl_sshkeycallback) (CURL *easy, /* easy handle */ + const struct curl_khkey *knownkey, /* known */ + const struct curl_khkey *foundkey, /* found */ + enum curl_khmatch, /* libcurl's view on the keys */ + void *clientp); /* custom pointer passed with */ + /* CURLOPT_SSH_KEYDATA */ + +typedef int + (*curl_sshhostkeycallback) (void *clientp,/* custom pointer passed */ + /* with CURLOPT_SSH_HOSTKEYDATA */ + int keytype, /* CURLKHTYPE */ + const char *key, /* hostkey to check */ + size_t keylen); /* length of the key */ + /* return CURLE_OK to accept */ + /* or something else to refuse */ + + +/* parameter for the CURLOPT_USE_SSL option */ +typedef enum { + CURLUSESSL_NONE, /* do not attempt to use SSL */ + CURLUSESSL_TRY, /* try using SSL, proceed anyway otherwise */ + CURLUSESSL_CONTROL, /* SSL for the control connection or fail */ + CURLUSESSL_ALL, /* SSL for all communication or fail */ + CURLUSESSL_LAST /* not an option, never use */ +} curl_usessl; + +/* Definition of bits for the CURLOPT_SSL_OPTIONS argument: */ + +/* - ALLOW_BEAST tells libcurl to allow the BEAST SSL vulnerability in the + name of improving interoperability with older servers. Some SSL libraries + have introduced work-arounds for this flaw but those work-arounds sometimes + make the SSL communication fail. To regain functionality with those broken + servers, a user can this way allow the vulnerability back. */ +#define CURLSSLOPT_ALLOW_BEAST (1<<0) + +/* - NO_REVOKE tells libcurl to disable certificate revocation checks for those + SSL backends where such behavior is present. */ +#define CURLSSLOPT_NO_REVOKE (1<<1) + +/* - NO_PARTIALCHAIN tells libcurl to *NOT* accept a partial certificate chain + if possible. The OpenSSL backend has this ability. */ +#define CURLSSLOPT_NO_PARTIALCHAIN (1<<2) + +/* - REVOKE_BEST_EFFORT tells libcurl to ignore certificate revocation offline + checks and ignore missing revocation list for those SSL backends where such + behavior is present. */ +#define CURLSSLOPT_REVOKE_BEST_EFFORT (1<<3) + +/* - CURLSSLOPT_NATIVE_CA tells libcurl to use standard certificate store of + operating system. Currently implemented under MS-Windows. */ +#define CURLSSLOPT_NATIVE_CA (1<<4) + +/* - CURLSSLOPT_AUTO_CLIENT_CERT tells libcurl to automatically locate and use + a client certificate for authentication. (Schannel) */ +#define CURLSSLOPT_AUTO_CLIENT_CERT (1<<5) + +/* The default connection attempt delay in milliseconds for happy eyeballs. + CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3 and happy-eyeballs-timeout-ms.d document + this value, keep them in sync. */ +#define CURL_HET_DEFAULT 200L + +/* The default connection upkeep interval in milliseconds. */ +#define CURL_UPKEEP_INTERVAL_DEFAULT 60000L + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2009 */ + +#define CURLFTPSSL_NONE CURLUSESSL_NONE +#define CURLFTPSSL_TRY CURLUSESSL_TRY +#define CURLFTPSSL_CONTROL CURLUSESSL_CONTROL +#define CURLFTPSSL_ALL CURLUSESSL_ALL +#define CURLFTPSSL_LAST CURLUSESSL_LAST +#define curl_ftpssl curl_usessl +#endif /* !CURL_NO_OLDIES */ + +/* parameter for the CURLOPT_FTP_SSL_CCC option */ +typedef enum { + CURLFTPSSL_CCC_NONE, /* do not send CCC */ + CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */ + CURLFTPSSL_CCC_ACTIVE, /* Initiate the shutdown */ + CURLFTPSSL_CCC_LAST /* not an option, never use */ +} curl_ftpccc; + +/* parameter for the CURLOPT_FTPSSLAUTH option */ +typedef enum { + CURLFTPAUTH_DEFAULT, /* let libcurl decide */ + CURLFTPAUTH_SSL, /* use "AUTH SSL" */ + CURLFTPAUTH_TLS, /* use "AUTH TLS" */ + CURLFTPAUTH_LAST /* not an option, never use */ +} curl_ftpauth; + +/* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */ +typedef enum { + CURLFTP_CREATE_DIR_NONE, /* do NOT create missing dirs! */ + CURLFTP_CREATE_DIR, /* (FTP/SFTP) if CWD fails, try MKD and then CWD + again if MKD succeeded, for SFTP this does + similar magic */ + CURLFTP_CREATE_DIR_RETRY, /* (FTP only) if CWD fails, try MKD and then CWD + again even if MKD failed! */ + CURLFTP_CREATE_DIR_LAST /* not an option, never use */ +} curl_ftpcreatedir; + +/* parameter for the CURLOPT_FTP_FILEMETHOD option */ +typedef enum { + CURLFTPMETHOD_DEFAULT, /* let libcurl pick */ + CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */ + CURLFTPMETHOD_NOCWD, /* no CWD at all */ + CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */ + CURLFTPMETHOD_LAST /* not an option, never use */ +} curl_ftpmethod; + +/* bitmask defines for CURLOPT_HEADEROPT */ +#define CURLHEADER_UNIFIED 0 +#define CURLHEADER_SEPARATE (1<<0) + +/* CURLALTSVC_* are bits for the CURLOPT_ALTSVC_CTRL option */ +#define CURLALTSVC_READONLYFILE (1<<2) +#define CURLALTSVC_H1 (1<<3) +#define CURLALTSVC_H2 (1<<4) +#define CURLALTSVC_H3 (1<<5) + + +struct curl_hstsentry { + char *name; + size_t namelen; + unsigned int includeSubDomains:1; + char expire[18]; /* YYYYMMDD HH:MM:SS [null-terminated] */ +}; + +struct curl_index { + size_t index; /* the provided entry's "index" or count */ + size_t total; /* total number of entries to save */ +}; + +typedef enum { + CURLSTS_OK, + CURLSTS_DONE, + CURLSTS_FAIL +} CURLSTScode; + +typedef CURLSTScode (*curl_hstsread_callback)(CURL *easy, + struct curl_hstsentry *e, + void *userp); +typedef CURLSTScode (*curl_hstswrite_callback)(CURL *easy, + struct curl_hstsentry *e, + struct curl_index *i, + void *userp); + +/* CURLHSTS_* are bits for the CURLOPT_HSTS option */ +#define CURLHSTS_ENABLE (long)(1<<0) +#define CURLHSTS_READONLYFILE (long)(1<<1) + +/* The CURLPROTO_ defines below are for the **deprecated** CURLOPT_*PROTOCOLS + options. Do not use. */ +#define CURLPROTO_HTTP (1<<0) +#define CURLPROTO_HTTPS (1<<1) +#define CURLPROTO_FTP (1<<2) +#define CURLPROTO_FTPS (1<<3) +#define CURLPROTO_SCP (1<<4) +#define CURLPROTO_SFTP (1<<5) +#define CURLPROTO_TELNET (1<<6) +#define CURLPROTO_LDAP (1<<7) +#define CURLPROTO_LDAPS (1<<8) +#define CURLPROTO_DICT (1<<9) +#define CURLPROTO_FILE (1<<10) +#define CURLPROTO_TFTP (1<<11) +#define CURLPROTO_IMAP (1<<12) +#define CURLPROTO_IMAPS (1<<13) +#define CURLPROTO_POP3 (1<<14) +#define CURLPROTO_POP3S (1<<15) +#define CURLPROTO_SMTP (1<<16) +#define CURLPROTO_SMTPS (1<<17) +#define CURLPROTO_RTSP (1<<18) +#define CURLPROTO_RTMP (1<<19) +#define CURLPROTO_RTMPT (1<<20) +#define CURLPROTO_RTMPE (1<<21) +#define CURLPROTO_RTMPTE (1<<22) +#define CURLPROTO_RTMPS (1<<23) +#define CURLPROTO_RTMPTS (1<<24) +#define CURLPROTO_GOPHER (1<<25) +#define CURLPROTO_SMB (1<<26) +#define CURLPROTO_SMBS (1<<27) +#define CURLPROTO_MQTT (1<<28) +#define CURLPROTO_GOPHERS (1<<29) +#define CURLPROTO_ALL (~0) /* enable everything */ + +/* long may be 32 or 64 bits, but we should never depend on anything else + but 32 */ +#define CURLOPTTYPE_LONG 0 +#define CURLOPTTYPE_OBJECTPOINT 10000 +#define CURLOPTTYPE_FUNCTIONPOINT 20000 +#define CURLOPTTYPE_OFF_T 30000 +#define CURLOPTTYPE_BLOB 40000 + +/* *STRINGPOINT is an alias for OBJECTPOINT to allow tools to extract the + string options from the header file */ + + +#define CURLOPT(na,t,nu) na = t + nu +#define CURLOPTDEPRECATED(na,t,nu,v,m) na CURL_DEPRECATED(v,m) = t + nu + +/* CURLOPT aliases that make no run-time difference */ + +/* 'char *' argument to a string with a trailing zero */ +#define CURLOPTTYPE_STRINGPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'struct curl_slist *' argument */ +#define CURLOPTTYPE_SLISTPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'void *' argument passed untouched to callback */ +#define CURLOPTTYPE_CBPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'long' argument with a set of values/bitmask */ +#define CURLOPTTYPE_VALUES CURLOPTTYPE_LONG + +/* + * All CURLOPT_* values. + */ + +typedef enum { + /* This is the FILE * or void * the regular output should be written to. */ + CURLOPT(CURLOPT_WRITEDATA, CURLOPTTYPE_CBPOINT, 1), + + /* The full URL to get/put */ + CURLOPT(CURLOPT_URL, CURLOPTTYPE_STRINGPOINT, 2), + + /* Port number to connect to, if other than default. */ + CURLOPT(CURLOPT_PORT, CURLOPTTYPE_LONG, 3), + + /* Name of proxy to use. */ + CURLOPT(CURLOPT_PROXY, CURLOPTTYPE_STRINGPOINT, 4), + + /* "user:password;options" to use when fetching. */ + CURLOPT(CURLOPT_USERPWD, CURLOPTTYPE_STRINGPOINT, 5), + + /* "user:password" to use with proxy. */ + CURLOPT(CURLOPT_PROXYUSERPWD, CURLOPTTYPE_STRINGPOINT, 6), + + /* Range to get, specified as an ASCII string. */ + CURLOPT(CURLOPT_RANGE, CURLOPTTYPE_STRINGPOINT, 7), + + /* not used */ + + /* Specified file stream to upload from (use as input): */ + CURLOPT(CURLOPT_READDATA, CURLOPTTYPE_CBPOINT, 9), + + /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE + * bytes big. */ + CURLOPT(CURLOPT_ERRORBUFFER, CURLOPTTYPE_OBJECTPOINT, 10), + + /* Function that will be called to store the output (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_WRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 11), + + /* Function that will be called to read the input (instead of fread). The + * parameters will use fread() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_READFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 12), + + /* Time-out the read operation after this amount of seconds */ + CURLOPT(CURLOPT_TIMEOUT, CURLOPTTYPE_LONG, 13), + + /* If CURLOPT_READDATA is used, this can be used to inform libcurl about + * how large the file being sent really is. That allows better error + * checking and better verifies that the upload was successful. -1 means + * unknown size. + * + * For large file support, there is also a _LARGE version of the key + * which takes an off_t type, allowing platforms with larger off_t + * sizes to handle larger files. See below for INFILESIZE_LARGE. + */ + CURLOPT(CURLOPT_INFILESIZE, CURLOPTTYPE_LONG, 14), + + /* POST static input fields. */ + CURLOPT(CURLOPT_POSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 15), + + /* Set the referrer page (needed by some CGIs) */ + CURLOPT(CURLOPT_REFERER, CURLOPTTYPE_STRINGPOINT, 16), + + /* Set the FTP PORT string (interface name, named or numerical IP address) + Use i.e '-' to use default address. */ + CURLOPT(CURLOPT_FTPPORT, CURLOPTTYPE_STRINGPOINT, 17), + + /* Set the User-Agent string (examined by some CGIs) */ + CURLOPT(CURLOPT_USERAGENT, CURLOPTTYPE_STRINGPOINT, 18), + + /* If the download receives less than "low speed limit" bytes/second + * during "low speed time" seconds, the operations is aborted. + * You could i.e if you have a pretty high speed connection, abort if + * it is less than 2000 bytes/sec during 20 seconds. + */ + + /* Set the "low speed limit" */ + CURLOPT(CURLOPT_LOW_SPEED_LIMIT, CURLOPTTYPE_LONG, 19), + + /* Set the "low speed time" */ + CURLOPT(CURLOPT_LOW_SPEED_TIME, CURLOPTTYPE_LONG, 20), + + /* Set the continuation offset. + * + * Note there is also a _LARGE version of this key which uses + * off_t types, allowing for large file offsets on platforms which + * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. + */ + CURLOPT(CURLOPT_RESUME_FROM, CURLOPTTYPE_LONG, 21), + + /* Set cookie in request: */ + CURLOPT(CURLOPT_COOKIE, CURLOPTTYPE_STRINGPOINT, 22), + + /* This points to a linked list of headers, struct curl_slist kind. This + list is also used for RTSP (in spite of its name) */ + CURLOPT(CURLOPT_HTTPHEADER, CURLOPTTYPE_SLISTPOINT, 23), + + /* This points to a linked list of post entries, struct curl_httppost */ + CURLOPTDEPRECATED(CURLOPT_HTTPPOST, CURLOPTTYPE_OBJECTPOINT, 24, + 7.56.0, "Use CURLOPT_MIMEPOST"), + + /* name of the file keeping your private SSL-certificate */ + CURLOPT(CURLOPT_SSLCERT, CURLOPTTYPE_STRINGPOINT, 25), + + /* password for the SSL or SSH private key */ + CURLOPT(CURLOPT_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 26), + + /* send TYPE parameter? */ + CURLOPT(CURLOPT_CRLF, CURLOPTTYPE_LONG, 27), + + /* send linked-list of QUOTE commands */ + CURLOPT(CURLOPT_QUOTE, CURLOPTTYPE_SLISTPOINT, 28), + + /* send FILE * or void * to store headers to, if you use a callback it + is simply passed to the callback unmodified */ + CURLOPT(CURLOPT_HEADERDATA, CURLOPTTYPE_CBPOINT, 29), + + /* point to a file to read the initial cookies from, also enables + "cookie awareness" */ + CURLOPT(CURLOPT_COOKIEFILE, CURLOPTTYPE_STRINGPOINT, 31), + + /* What version to specifically try to use. + See CURL_SSLVERSION defines below. */ + CURLOPT(CURLOPT_SSLVERSION, CURLOPTTYPE_VALUES, 32), + + /* What kind of HTTP time condition to use, see defines */ + CURLOPT(CURLOPT_TIMECONDITION, CURLOPTTYPE_VALUES, 33), + + /* Time to use with the above condition. Specified in number of seconds + since 1 Jan 1970 */ + CURLOPT(CURLOPT_TIMEVALUE, CURLOPTTYPE_LONG, 34), + + /* 35 = OBSOLETE */ + + /* Custom request, for customizing the get command like + HTTP: DELETE, TRACE and others + FTP: to use a different list command + */ + CURLOPT(CURLOPT_CUSTOMREQUEST, CURLOPTTYPE_STRINGPOINT, 36), + + /* FILE handle to use instead of stderr */ + CURLOPT(CURLOPT_STDERR, CURLOPTTYPE_OBJECTPOINT, 37), + + /* 38 is not used */ + + /* send linked-list of post-transfer QUOTE commands */ + CURLOPT(CURLOPT_POSTQUOTE, CURLOPTTYPE_SLISTPOINT, 39), + + /* OBSOLETE, do not use! */ + CURLOPT(CURLOPT_OBSOLETE40, CURLOPTTYPE_OBJECTPOINT, 40), + + /* talk a lot */ + CURLOPT(CURLOPT_VERBOSE, CURLOPTTYPE_LONG, 41), + + /* throw the header out too */ + CURLOPT(CURLOPT_HEADER, CURLOPTTYPE_LONG, 42), + + /* shut off the progress meter */ + CURLOPT(CURLOPT_NOPROGRESS, CURLOPTTYPE_LONG, 43), + + /* use HEAD to get http document */ + CURLOPT(CURLOPT_NOBODY, CURLOPTTYPE_LONG, 44), + + /* no output on http error codes >= 400 */ + CURLOPT(CURLOPT_FAILONERROR, CURLOPTTYPE_LONG, 45), + + /* this is an upload */ + CURLOPT(CURLOPT_UPLOAD, CURLOPTTYPE_LONG, 46), + + /* HTTP POST method */ + CURLOPT(CURLOPT_POST, CURLOPTTYPE_LONG, 47), + + /* bare names when listing directories */ + CURLOPT(CURLOPT_DIRLISTONLY, CURLOPTTYPE_LONG, 48), + + /* Append instead of overwrite on upload! */ + CURLOPT(CURLOPT_APPEND, CURLOPTTYPE_LONG, 50), + + /* Specify whether to read the user+password from the .netrc or the URL. + * This must be one of the CURL_NETRC_* enums below. */ + CURLOPT(CURLOPT_NETRC, CURLOPTTYPE_VALUES, 51), + + /* use Location: Luke! */ + CURLOPT(CURLOPT_FOLLOWLOCATION, CURLOPTTYPE_LONG, 52), + + /* transfer data in text/ASCII format */ + CURLOPT(CURLOPT_TRANSFERTEXT, CURLOPTTYPE_LONG, 53), + + /* HTTP PUT */ + CURLOPTDEPRECATED(CURLOPT_PUT, CURLOPTTYPE_LONG, 54, + 7.12.1, "Use CURLOPT_UPLOAD"), + + /* 55 = OBSOLETE */ + + /* DEPRECATED + * Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_progress_callback + * prototype defines. */ + CURLOPTDEPRECATED(CURLOPT_PROGRESSFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 56, + 7.32.0, "Use CURLOPT_XFERINFOFUNCTION"), + + /* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION + callbacks */ + CURLOPT(CURLOPT_XFERINFODATA, CURLOPTTYPE_CBPOINT, 57), +#define CURLOPT_PROGRESSDATA CURLOPT_XFERINFODATA + + /* We want the referrer field set automatically when following locations */ + CURLOPT(CURLOPT_AUTOREFERER, CURLOPTTYPE_LONG, 58), + + /* Port of the proxy, can be set in the proxy string as well with: + "[host]:[port]" */ + CURLOPT(CURLOPT_PROXYPORT, CURLOPTTYPE_LONG, 59), + + /* size of the POST input data, if strlen() is not good to use */ + CURLOPT(CURLOPT_POSTFIELDSIZE, CURLOPTTYPE_LONG, 60), + + /* tunnel non-http operations through an HTTP proxy */ + CURLOPT(CURLOPT_HTTPPROXYTUNNEL, CURLOPTTYPE_LONG, 61), + + /* Set the interface string to use as outgoing network interface */ + CURLOPT(CURLOPT_INTERFACE, CURLOPTTYPE_STRINGPOINT, 62), + + /* Set the krb4/5 security level, this also enables krb4/5 awareness. This + * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string + * is set but doesn't match one of these, 'private' will be used. */ + CURLOPT(CURLOPT_KRBLEVEL, CURLOPTTYPE_STRINGPOINT, 63), + + /* Set if we should verify the peer in ssl handshake, set 1 to verify. */ + CURLOPT(CURLOPT_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 64), + + /* The CApath or CAfile used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAINFO, CURLOPTTYPE_STRINGPOINT, 65), + + /* 66 = OBSOLETE */ + /* 67 = OBSOLETE */ + + /* Maximum number of http redirects to follow */ + CURLOPT(CURLOPT_MAXREDIRS, CURLOPTTYPE_LONG, 68), + + /* Pass a long set to 1 to get the date of the requested document (if + possible)! Pass a zero to shut it off. */ + CURLOPT(CURLOPT_FILETIME, CURLOPTTYPE_LONG, 69), + + /* This points to a linked list of telnet options */ + CURLOPT(CURLOPT_TELNETOPTIONS, CURLOPTTYPE_SLISTPOINT, 70), + + /* Max amount of cached alive connections */ + CURLOPT(CURLOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 71), + + /* OBSOLETE, do not use! */ + CURLOPT(CURLOPT_OBSOLETE72, CURLOPTTYPE_LONG, 72), + + /* 73 = OBSOLETE */ + + /* Set to explicitly use a new connection for the upcoming transfer. + Do not use this unless you're absolutely sure of this, as it makes the + operation slower and is less friendly for the network. */ + CURLOPT(CURLOPT_FRESH_CONNECT, CURLOPTTYPE_LONG, 74), + + /* Set to explicitly forbid the upcoming transfer's connection to be reused + when done. Do not use this unless you're absolutely sure of this, as it + makes the operation slower and is less friendly for the network. */ + CURLOPT(CURLOPT_FORBID_REUSE, CURLOPTTYPE_LONG, 75), + + /* Set to a file name that contains random data for libcurl to use to + seed the random engine when doing SSL connects. */ + CURLOPTDEPRECATED(CURLOPT_RANDOM_FILE, CURLOPTTYPE_STRINGPOINT, 76, + 7.84.0, "Serves no purpose anymore"), + + /* Set to the Entropy Gathering Daemon socket pathname */ + CURLOPTDEPRECATED(CURLOPT_EGDSOCKET, CURLOPTTYPE_STRINGPOINT, 77, + 7.84.0, "Serves no purpose anymore"), + + /* Time-out connect operations after this amount of seconds, if connects are + OK within this time, then fine... This only aborts the connect phase. */ + CURLOPT(CURLOPT_CONNECTTIMEOUT, CURLOPTTYPE_LONG, 78), + + /* Function that will be called to store headers (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_HEADERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 79), + + /* Set this to force the HTTP request to get back to GET. Only really usable + if POST, PUT or a custom request have been used first. + */ + CURLOPT(CURLOPT_HTTPGET, CURLOPTTYPE_LONG, 80), + + /* Set if we should verify the Common name from the peer certificate in ssl + * handshake, set 1 to check existence, 2 to ensure that it matches the + * provided hostname. */ + CURLOPT(CURLOPT_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 81), + + /* Specify which file name to write all known cookies in after completed + operation. Set file name to "-" (dash) to make it go to stdout. */ + CURLOPT(CURLOPT_COOKIEJAR, CURLOPTTYPE_STRINGPOINT, 82), + + /* Specify which SSL ciphers to use */ + CURLOPT(CURLOPT_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 83), + + /* Specify which HTTP version to use! This must be set to one of the + CURL_HTTP_VERSION* enums set below. */ + CURLOPT(CURLOPT_HTTP_VERSION, CURLOPTTYPE_VALUES, 84), + + /* Specifically switch on or off the FTP engine's use of the EPSV command. By + default, that one will always be attempted before the more traditional + PASV command. */ + CURLOPT(CURLOPT_FTP_USE_EPSV, CURLOPTTYPE_LONG, 85), + + /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */ + CURLOPT(CURLOPT_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 86), + + /* name of the file keeping your private SSL-key */ + CURLOPT(CURLOPT_SSLKEY, CURLOPTTYPE_STRINGPOINT, 87), + + /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */ + CURLOPT(CURLOPT_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 88), + + /* crypto engine for the SSL-sub system */ + CURLOPT(CURLOPT_SSLENGINE, CURLOPTTYPE_STRINGPOINT, 89), + + /* set the crypto engine for the SSL-sub system as default + the param has no meaning... + */ + CURLOPT(CURLOPT_SSLENGINE_DEFAULT, CURLOPTTYPE_LONG, 90), + + /* Non-zero value means to use the global dns cache */ + /* DEPRECATED, do not use! */ + CURLOPTDEPRECATED(CURLOPT_DNS_USE_GLOBAL_CACHE, CURLOPTTYPE_LONG, 91, + 7.11.1, "Use CURLOPT_SHARE"), + + /* DNS cache timeout */ + CURLOPT(CURLOPT_DNS_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 92), + + /* send linked-list of pre-transfer QUOTE commands */ + CURLOPT(CURLOPT_PREQUOTE, CURLOPTTYPE_SLISTPOINT, 93), + + /* set the debug function */ + CURLOPT(CURLOPT_DEBUGFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 94), + + /* set the data for the debug function */ + CURLOPT(CURLOPT_DEBUGDATA, CURLOPTTYPE_CBPOINT, 95), + + /* mark this as start of a cookie session */ + CURLOPT(CURLOPT_COOKIESESSION, CURLOPTTYPE_LONG, 96), + + /* The CApath directory used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAPATH, CURLOPTTYPE_STRINGPOINT, 97), + + /* Instruct libcurl to use a smaller receive buffer */ + CURLOPT(CURLOPT_BUFFERSIZE, CURLOPTTYPE_LONG, 98), + + /* Instruct libcurl to not use any signal/alarm handlers, even when using + timeouts. This option is useful for multi-threaded applications. + See libcurl-the-guide for more background information. */ + CURLOPT(CURLOPT_NOSIGNAL, CURLOPTTYPE_LONG, 99), + + /* Provide a CURLShare for mutexing non-ts data */ + CURLOPT(CURLOPT_SHARE, CURLOPTTYPE_OBJECTPOINT, 100), + + /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default), + CURLPROXY_HTTPS, CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and + CURLPROXY_SOCKS5. */ + CURLOPT(CURLOPT_PROXYTYPE, CURLOPTTYPE_VALUES, 101), + + /* Set the Accept-Encoding string. Use this to tell a server you would like + the response to be compressed. Before 7.21.6, this was known as + CURLOPT_ENCODING */ + CURLOPT(CURLOPT_ACCEPT_ENCODING, CURLOPTTYPE_STRINGPOINT, 102), + + /* Set pointer to private data */ + CURLOPT(CURLOPT_PRIVATE, CURLOPTTYPE_OBJECTPOINT, 103), + + /* Set aliases for HTTP 200 in the HTTP Response header */ + CURLOPT(CURLOPT_HTTP200ALIASES, CURLOPTTYPE_SLISTPOINT, 104), + + /* Continue to send authentication (user+password) when following locations, + even when hostname changed. This can potentially send off the name + and password to whatever host the server decides. */ + CURLOPT(CURLOPT_UNRESTRICTED_AUTH, CURLOPTTYPE_LONG, 105), + + /* Specifically switch on or off the FTP engine's use of the EPRT command ( + it also disables the LPRT attempt). By default, those ones will always be + attempted before the good old traditional PORT command. */ + CURLOPT(CURLOPT_FTP_USE_EPRT, CURLOPTTYPE_LONG, 106), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_USERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CURLOPT(CURLOPT_HTTPAUTH, CURLOPTTYPE_VALUES, 107), + + /* Set the ssl context callback function, currently only for OpenSSL or + WolfSSL ssl_ctx, or mbedTLS mbedtls_ssl_config in the second argument. + The function must match the curl_ssl_ctx_callback prototype. */ + CURLOPT(CURLOPT_SSL_CTX_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 108), + + /* Set the userdata for the ssl context callback function's third + argument */ + CURLOPT(CURLOPT_SSL_CTX_DATA, CURLOPTTYPE_CBPOINT, 109), + + /* FTP Option that causes missing dirs to be created on the remote server. + In 7.19.4 we introduced the convenience enums for this option using the + CURLFTP_CREATE_DIR prefix. + */ + CURLOPT(CURLOPT_FTP_CREATE_MISSING_DIRS, CURLOPTTYPE_LONG, 110), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_PROXYUSERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CURLOPT(CURLOPT_PROXYAUTH, CURLOPTTYPE_VALUES, 111), + + /* Option that changes the timeout, in seconds, associated with getting a + response. This is different from transfer timeout time and essentially + places a demand on the server to acknowledge commands in a timely + manner. For FTP, SMTP, IMAP and POP3. */ + CURLOPT(CURLOPT_SERVER_RESPONSE_TIMEOUT, CURLOPTTYPE_LONG, 112), + + /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to + tell libcurl to use those IP versions only. This only has effect on + systems with support for more than one, i.e IPv4 _and_ IPv6. */ + CURLOPT(CURLOPT_IPRESOLVE, CURLOPTTYPE_VALUES, 113), + + /* Set this option to limit the size of a file that will be downloaded from + an HTTP or FTP server. + + Note there is also _LARGE version which adds large file support for + platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ + CURLOPT(CURLOPT_MAXFILESIZE, CURLOPTTYPE_LONG, 114), + + /* See the comment for INFILESIZE above, but in short, specifies + * the size of the file being uploaded. -1 means unknown. + */ + CURLOPT(CURLOPT_INFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 115), + + /* Sets the continuation offset. There is also a CURLOPTTYPE_LONG version + * of this; look above for RESUME_FROM. + */ + CURLOPT(CURLOPT_RESUME_FROM_LARGE, CURLOPTTYPE_OFF_T, 116), + + /* Sets the maximum size of data that will be downloaded from + * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. + */ + CURLOPT(CURLOPT_MAXFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 117), + + /* Set this option to the file name of your .netrc file you want libcurl + to parse (using the CURLOPT_NETRC option). If not set, libcurl will do + a poor attempt to find the user's home directory and check for a .netrc + file in there. */ + CURLOPT(CURLOPT_NETRC_FILE, CURLOPTTYPE_STRINGPOINT, 118), + + /* Enable SSL/TLS for FTP, pick one of: + CURLUSESSL_TRY - try using SSL, proceed anyway otherwise + CURLUSESSL_CONTROL - SSL for the control connection or fail + CURLUSESSL_ALL - SSL for all communication or fail + */ + CURLOPT(CURLOPT_USE_SSL, CURLOPTTYPE_VALUES, 119), + + /* The _LARGE version of the standard POSTFIELDSIZE option */ + CURLOPT(CURLOPT_POSTFIELDSIZE_LARGE, CURLOPTTYPE_OFF_T, 120), + + /* Enable/disable the TCP Nagle algorithm */ + CURLOPT(CURLOPT_TCP_NODELAY, CURLOPTTYPE_LONG, 121), + + /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 123 OBSOLETE. Gone in 7.16.0 */ + /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 127 OBSOLETE. Gone in 7.16.0 */ + /* 128 OBSOLETE. Gone in 7.16.0 */ + + /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option + can be used to change libcurl's default action which is to first try + "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK + response has been received. + + Available parameters are: + CURLFTPAUTH_DEFAULT - let libcurl decide + CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS + CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL + */ + CURLOPT(CURLOPT_FTPSSLAUTH, CURLOPTTYPE_VALUES, 129), + + CURLOPTDEPRECATED(CURLOPT_IOCTLFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 130, + 7.18.0, "Use CURLOPT_SEEKFUNCTION"), + CURLOPTDEPRECATED(CURLOPT_IOCTLDATA, CURLOPTTYPE_CBPOINT, 131, + 7.18.0, "Use CURLOPT_SEEKDATA"), + + /* 132 OBSOLETE. Gone in 7.16.0 */ + /* 133 OBSOLETE. Gone in 7.16.0 */ + + /* null-terminated string for pass on to the FTP server when asked for + "account" info */ + CURLOPT(CURLOPT_FTP_ACCOUNT, CURLOPTTYPE_STRINGPOINT, 134), + + /* feed cookie into cookie engine */ + CURLOPT(CURLOPT_COOKIELIST, CURLOPTTYPE_STRINGPOINT, 135), + + /* ignore Content-Length */ + CURLOPT(CURLOPT_IGNORE_CONTENT_LENGTH, CURLOPTTYPE_LONG, 136), + + /* Set to non-zero to skip the IP address received in a 227 PASV FTP server + response. Typically used for FTP-SSL purposes but is not restricted to + that. libcurl will then instead use the same IP address it used for the + control connection. */ + CURLOPT(CURLOPT_FTP_SKIP_PASV_IP, CURLOPTTYPE_LONG, 137), + + /* Select "file method" to use when doing FTP, see the curl_ftpmethod + above. */ + CURLOPT(CURLOPT_FTP_FILEMETHOD, CURLOPTTYPE_VALUES, 138), + + /* Local port number to bind the socket to */ + CURLOPT(CURLOPT_LOCALPORT, CURLOPTTYPE_LONG, 139), + + /* Number of ports to try, including the first one set with LOCALPORT. + Thus, setting it to 1 will make no additional attempts but the first. + */ + CURLOPT(CURLOPT_LOCALPORTRANGE, CURLOPTTYPE_LONG, 140), + + /* no transfer, set up connection and let application use the socket by + extracting it with CURLINFO_LASTSOCKET */ + CURLOPT(CURLOPT_CONNECT_ONLY, CURLOPTTYPE_LONG, 141), + + /* Function that will be called to convert from the + network encoding (instead of using the iconv calls in libcurl) */ + CURLOPTDEPRECATED(CURLOPT_CONV_FROM_NETWORK_FUNCTION, + CURLOPTTYPE_FUNCTIONPOINT, 142, + 7.82.0, "Serves no purpose anymore"), + + /* Function that will be called to convert to the + network encoding (instead of using the iconv calls in libcurl) */ + CURLOPTDEPRECATED(CURLOPT_CONV_TO_NETWORK_FUNCTION, + CURLOPTTYPE_FUNCTIONPOINT, 143, + 7.82.0, "Serves no purpose anymore"), + + /* Function that will be called to convert from UTF8 + (instead of using the iconv calls in libcurl) + Note that this is used only for SSL certificate processing */ + CURLOPTDEPRECATED(CURLOPT_CONV_FROM_UTF8_FUNCTION, + CURLOPTTYPE_FUNCTIONPOINT, 144, + 7.82.0, "Serves no purpose anymore"), + + /* if the connection proceeds too quickly then need to slow it down */ + /* limit-rate: maximum number of bytes per second to send or receive */ + CURLOPT(CURLOPT_MAX_SEND_SPEED_LARGE, CURLOPTTYPE_OFF_T, 145), + CURLOPT(CURLOPT_MAX_RECV_SPEED_LARGE, CURLOPTTYPE_OFF_T, 146), + + /* Pointer to command string to send if USER/PASS fails. */ + CURLOPT(CURLOPT_FTP_ALTERNATIVE_TO_USER, CURLOPTTYPE_STRINGPOINT, 147), + + /* callback function for setting socket options */ + CURLOPT(CURLOPT_SOCKOPTFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 148), + CURLOPT(CURLOPT_SOCKOPTDATA, CURLOPTTYPE_CBPOINT, 149), + + /* set to 0 to disable session ID reuse for this transfer, default is + enabled (== 1) */ + CURLOPT(CURLOPT_SSL_SESSIONID_CACHE, CURLOPTTYPE_LONG, 150), + + /* allowed SSH authentication methods */ + CURLOPT(CURLOPT_SSH_AUTH_TYPES, CURLOPTTYPE_VALUES, 151), + + /* Used by scp/sftp to do public/private key authentication */ + CURLOPT(CURLOPT_SSH_PUBLIC_KEYFILE, CURLOPTTYPE_STRINGPOINT, 152), + CURLOPT(CURLOPT_SSH_PRIVATE_KEYFILE, CURLOPTTYPE_STRINGPOINT, 153), + + /* Send CCC (Clear Command Channel) after authentication */ + CURLOPT(CURLOPT_FTP_SSL_CCC, CURLOPTTYPE_LONG, 154), + + /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */ + CURLOPT(CURLOPT_TIMEOUT_MS, CURLOPTTYPE_LONG, 155), + CURLOPT(CURLOPT_CONNECTTIMEOUT_MS, CURLOPTTYPE_LONG, 156), + + /* set to zero to disable the libcurl's decoding and thus pass the raw body + data to the application even when it is encoded/compressed */ + CURLOPT(CURLOPT_HTTP_TRANSFER_DECODING, CURLOPTTYPE_LONG, 157), + CURLOPT(CURLOPT_HTTP_CONTENT_DECODING, CURLOPTTYPE_LONG, 158), + + /* Permission used when creating new files and directories on the remote + server for protocols that support it, SFTP/SCP/FILE */ + CURLOPT(CURLOPT_NEW_FILE_PERMS, CURLOPTTYPE_LONG, 159), + CURLOPT(CURLOPT_NEW_DIRECTORY_PERMS, CURLOPTTYPE_LONG, 160), + + /* Set the behavior of POST when redirecting. Values must be set to one + of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */ + CURLOPT(CURLOPT_POSTREDIR, CURLOPTTYPE_VALUES, 161), + + /* used by scp/sftp to verify the host's public key */ + CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_MD5, CURLOPTTYPE_STRINGPOINT, 162), + + /* Callback function for opening socket (instead of socket(2)). Optionally, + callback is able change the address or refuse to connect returning + CURL_SOCKET_BAD. The callback should have type + curl_opensocket_callback */ + CURLOPT(CURLOPT_OPENSOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 163), + CURLOPT(CURLOPT_OPENSOCKETDATA, CURLOPTTYPE_CBPOINT, 164), + + /* POST volatile input fields. */ + CURLOPT(CURLOPT_COPYPOSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 165), + + /* set transfer mode (;type=) when doing FTP via an HTTP proxy */ + CURLOPT(CURLOPT_PROXY_TRANSFER_MODE, CURLOPTTYPE_LONG, 166), + + /* Callback function for seeking in the input stream */ + CURLOPT(CURLOPT_SEEKFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 167), + CURLOPT(CURLOPT_SEEKDATA, CURLOPTTYPE_CBPOINT, 168), + + /* CRL file */ + CURLOPT(CURLOPT_CRLFILE, CURLOPTTYPE_STRINGPOINT, 169), + + /* Issuer certificate */ + CURLOPT(CURLOPT_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 170), + + /* (IPv6) Address scope */ + CURLOPT(CURLOPT_ADDRESS_SCOPE, CURLOPTTYPE_LONG, 171), + + /* Collect certificate chain info and allow it to get retrievable with + CURLINFO_CERTINFO after the transfer is complete. */ + CURLOPT(CURLOPT_CERTINFO, CURLOPTTYPE_LONG, 172), + + /* "name" and "pwd" to use when fetching. */ + CURLOPT(CURLOPT_USERNAME, CURLOPTTYPE_STRINGPOINT, 173), + CURLOPT(CURLOPT_PASSWORD, CURLOPTTYPE_STRINGPOINT, 174), + + /* "name" and "pwd" to use with Proxy when fetching. */ + CURLOPT(CURLOPT_PROXYUSERNAME, CURLOPTTYPE_STRINGPOINT, 175), + CURLOPT(CURLOPT_PROXYPASSWORD, CURLOPTTYPE_STRINGPOINT, 176), + + /* Comma separated list of hostnames defining no-proxy zones. These should + match both hostnames directly, and hostnames within a domain. For + example, local.com will match local.com and www.local.com, but NOT + notlocal.com or www.notlocal.com. For compatibility with other + implementations of this, .local.com will be considered to be the same as + local.com. A single * is the only valid wildcard, and effectively + disables the use of proxy. */ + CURLOPT(CURLOPT_NOPROXY, CURLOPTTYPE_STRINGPOINT, 177), + + /* block size for TFTP transfers */ + CURLOPT(CURLOPT_TFTP_BLKSIZE, CURLOPTTYPE_LONG, 178), + + /* Socks Service */ + /* DEPRECATED, do not use! */ + CURLOPTDEPRECATED(CURLOPT_SOCKS5_GSSAPI_SERVICE, + CURLOPTTYPE_STRINGPOINT, 179, + 7.49.0, "Use CURLOPT_PROXY_SERVICE_NAME"), + + /* Socks Service */ + CURLOPT(CURLOPT_SOCKS5_GSSAPI_NEC, CURLOPTTYPE_LONG, 180), + + /* set the bitmask for the protocols that are allowed to be used for the + transfer, which thus helps the app which takes URLs from users or other + external inputs and want to restrict what protocol(s) to deal + with. Defaults to CURLPROTO_ALL. */ + CURLOPTDEPRECATED(CURLOPT_PROTOCOLS, CURLOPTTYPE_LONG, 181, + 7.85.0, "Use CURLOPT_PROTOCOLS_STR"), + + /* set the bitmask for the protocols that libcurl is allowed to follow to, + as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs + to be set in both bitmasks to be allowed to get redirected to. */ + CURLOPTDEPRECATED(CURLOPT_REDIR_PROTOCOLS, CURLOPTTYPE_LONG, 182, + 7.85.0, "Use CURLOPT_REDIR_PROTOCOLS_STR"), + + /* set the SSH knownhost file name to use */ + CURLOPT(CURLOPT_SSH_KNOWNHOSTS, CURLOPTTYPE_STRINGPOINT, 183), + + /* set the SSH host key callback, must point to a curl_sshkeycallback + function */ + CURLOPT(CURLOPT_SSH_KEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 184), + + /* set the SSH host key callback custom pointer */ + CURLOPT(CURLOPT_SSH_KEYDATA, CURLOPTTYPE_CBPOINT, 185), + + /* set the SMTP mail originator */ + CURLOPT(CURLOPT_MAIL_FROM, CURLOPTTYPE_STRINGPOINT, 186), + + /* set the list of SMTP mail receiver(s) */ + CURLOPT(CURLOPT_MAIL_RCPT, CURLOPTTYPE_SLISTPOINT, 187), + + /* FTP: send PRET before PASV */ + CURLOPT(CURLOPT_FTP_USE_PRET, CURLOPTTYPE_LONG, 188), + + /* RTSP request method (OPTIONS, SETUP, PLAY, etc...) */ + CURLOPT(CURLOPT_RTSP_REQUEST, CURLOPTTYPE_VALUES, 189), + + /* The RTSP session identifier */ + CURLOPT(CURLOPT_RTSP_SESSION_ID, CURLOPTTYPE_STRINGPOINT, 190), + + /* The RTSP stream URI */ + CURLOPT(CURLOPT_RTSP_STREAM_URI, CURLOPTTYPE_STRINGPOINT, 191), + + /* The Transport: header to use in RTSP requests */ + CURLOPT(CURLOPT_RTSP_TRANSPORT, CURLOPTTYPE_STRINGPOINT, 192), + + /* Manually initialize the client RTSP CSeq for this handle */ + CURLOPT(CURLOPT_RTSP_CLIENT_CSEQ, CURLOPTTYPE_LONG, 193), + + /* Manually initialize the server RTSP CSeq for this handle */ + CURLOPT(CURLOPT_RTSP_SERVER_CSEQ, CURLOPTTYPE_LONG, 194), + + /* The stream to pass to INTERLEAVEFUNCTION. */ + CURLOPT(CURLOPT_INTERLEAVEDATA, CURLOPTTYPE_CBPOINT, 195), + + /* Let the application define a custom write method for RTP data */ + CURLOPT(CURLOPT_INTERLEAVEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 196), + + /* Turn on wildcard matching */ + CURLOPT(CURLOPT_WILDCARDMATCH, CURLOPTTYPE_LONG, 197), + + /* Directory matching callback called before downloading of an + individual file (chunk) started */ + CURLOPT(CURLOPT_CHUNK_BGN_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 198), + + /* Directory matching callback called after the file (chunk) + was downloaded, or skipped */ + CURLOPT(CURLOPT_CHUNK_END_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 199), + + /* Change match (fnmatch-like) callback for wildcard matching */ + CURLOPT(CURLOPT_FNMATCH_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 200), + + /* Let the application define custom chunk data pointer */ + CURLOPT(CURLOPT_CHUNK_DATA, CURLOPTTYPE_CBPOINT, 201), + + /* FNMATCH_FUNCTION user pointer */ + CURLOPT(CURLOPT_FNMATCH_DATA, CURLOPTTYPE_CBPOINT, 202), + + /* send linked-list of name:port:address sets */ + CURLOPT(CURLOPT_RESOLVE, CURLOPTTYPE_SLISTPOINT, 203), + + /* Set a username for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 204), + + /* Set a password for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 205), + + /* Set authentication type for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 206), + + /* Set to 1 to enable the "TE:" header in HTTP requests to ask for + compressed transfer-encoded responses. Set to 0 to disable the use of TE: + in outgoing requests. The current default is 0, but it might change in a + future libcurl release. + + libcurl will ask for the compressed methods it knows of, and if that + isn't any, it will not ask for transfer-encoding at all even if this + option is set to 1. + + */ + CURLOPT(CURLOPT_TRANSFER_ENCODING, CURLOPTTYPE_LONG, 207), + + /* Callback function for closing socket (instead of close(2)). The callback + should have type curl_closesocket_callback */ + CURLOPT(CURLOPT_CLOSESOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 208), + CURLOPT(CURLOPT_CLOSESOCKETDATA, CURLOPTTYPE_CBPOINT, 209), + + /* allow GSSAPI credential delegation */ + CURLOPT(CURLOPT_GSSAPI_DELEGATION, CURLOPTTYPE_VALUES, 210), + + /* Set the name servers to use for DNS resolution */ + CURLOPT(CURLOPT_DNS_SERVERS, CURLOPTTYPE_STRINGPOINT, 211), + + /* Time-out accept operations (currently for FTP only) after this amount + of milliseconds. */ + CURLOPT(CURLOPT_ACCEPTTIMEOUT_MS, CURLOPTTYPE_LONG, 212), + + /* Set TCP keepalive */ + CURLOPT(CURLOPT_TCP_KEEPALIVE, CURLOPTTYPE_LONG, 213), + + /* non-universal keepalive knobs (Linux, AIX, HP-UX, more) */ + CURLOPT(CURLOPT_TCP_KEEPIDLE, CURLOPTTYPE_LONG, 214), + CURLOPT(CURLOPT_TCP_KEEPINTVL, CURLOPTTYPE_LONG, 215), + + /* Enable/disable specific SSL features with a bitmask, see CURLSSLOPT_* */ + CURLOPT(CURLOPT_SSL_OPTIONS, CURLOPTTYPE_VALUES, 216), + + /* Set the SMTP auth originator */ + CURLOPT(CURLOPT_MAIL_AUTH, CURLOPTTYPE_STRINGPOINT, 217), + + /* Enable/disable SASL initial response */ + CURLOPT(CURLOPT_SASL_IR, CURLOPTTYPE_LONG, 218), + + /* Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_xferinfo_callback + * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */ + CURLOPT(CURLOPT_XFERINFOFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 219), + + /* The XOAUTH2 bearer token */ + CURLOPT(CURLOPT_XOAUTH2_BEARER, CURLOPTTYPE_STRINGPOINT, 220), + + /* Set the interface string to use as outgoing network + * interface for DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_INTERFACE, CURLOPTTYPE_STRINGPOINT, 221), + + /* Set the local IPv4 address to use for outgoing DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_LOCAL_IP4, CURLOPTTYPE_STRINGPOINT, 222), + + /* Set the local IPv6 address to use for outgoing DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_LOCAL_IP6, CURLOPTTYPE_STRINGPOINT, 223), + + /* Set authentication options directly */ + CURLOPT(CURLOPT_LOGIN_OPTIONS, CURLOPTTYPE_STRINGPOINT, 224), + + /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */ + CURLOPTDEPRECATED(CURLOPT_SSL_ENABLE_NPN, CURLOPTTYPE_LONG, 225, + 7.86.0, "Has no function"), + + /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */ + CURLOPT(CURLOPT_SSL_ENABLE_ALPN, CURLOPTTYPE_LONG, 226), + + /* Time to wait for a response to an HTTP request containing an + * Expect: 100-continue header before sending the data anyway. */ + CURLOPT(CURLOPT_EXPECT_100_TIMEOUT_MS, CURLOPTTYPE_LONG, 227), + + /* This points to a linked list of headers used for proxy requests only, + struct curl_slist kind */ + CURLOPT(CURLOPT_PROXYHEADER, CURLOPTTYPE_SLISTPOINT, 228), + + /* Pass in a bitmask of "header options" */ + CURLOPT(CURLOPT_HEADEROPT, CURLOPTTYPE_VALUES, 229), + + /* The public key in DER form used to validate the peer public key + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 230), + + /* Path to Unix domain socket */ + CURLOPT(CURLOPT_UNIX_SOCKET_PATH, CURLOPTTYPE_STRINGPOINT, 231), + + /* Set if we should verify the certificate status. */ + CURLOPT(CURLOPT_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 232), + + /* Set if we should enable TLS false start. */ + CURLOPT(CURLOPT_SSL_FALSESTART, CURLOPTTYPE_LONG, 233), + + /* Do not squash dot-dot sequences */ + CURLOPT(CURLOPT_PATH_AS_IS, CURLOPTTYPE_LONG, 234), + + /* Proxy Service Name */ + CURLOPT(CURLOPT_PROXY_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 235), + + /* Service Name */ + CURLOPT(CURLOPT_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 236), + + /* Wait/don't wait for pipe/mutex to clarify */ + CURLOPT(CURLOPT_PIPEWAIT, CURLOPTTYPE_LONG, 237), + + /* Set the protocol used when curl is given a URL without a protocol */ + CURLOPT(CURLOPT_DEFAULT_PROTOCOL, CURLOPTTYPE_STRINGPOINT, 238), + + /* Set stream weight, 1 - 256 (default is 16) */ + CURLOPT(CURLOPT_STREAM_WEIGHT, CURLOPTTYPE_LONG, 239), + + /* Set stream dependency on another CURL handle */ + CURLOPT(CURLOPT_STREAM_DEPENDS, CURLOPTTYPE_OBJECTPOINT, 240), + + /* Set E-xclusive stream dependency on another CURL handle */ + CURLOPT(CURLOPT_STREAM_DEPENDS_E, CURLOPTTYPE_OBJECTPOINT, 241), + + /* Do not send any tftp option requests to the server */ + CURLOPT(CURLOPT_TFTP_NO_OPTIONS, CURLOPTTYPE_LONG, 242), + + /* Linked-list of host:port:connect-to-host:connect-to-port, + overrides the URL's host:port (only for the network layer) */ + CURLOPT(CURLOPT_CONNECT_TO, CURLOPTTYPE_SLISTPOINT, 243), + + /* Set TCP Fast Open */ + CURLOPT(CURLOPT_TCP_FASTOPEN, CURLOPTTYPE_LONG, 244), + + /* Continue to send data if the server responds early with an + * HTTP status code >= 300 */ + CURLOPT(CURLOPT_KEEP_SENDING_ON_ERROR, CURLOPTTYPE_LONG, 245), + + /* The CApath or CAfile used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAINFO, CURLOPTTYPE_STRINGPOINT, 246), + + /* The CApath directory used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAPATH, CURLOPTTYPE_STRINGPOINT, 247), + + /* Set if we should verify the proxy in ssl handshake, + set 1 to verify. */ + CURLOPT(CURLOPT_PROXY_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 248), + + /* Set if we should verify the Common name from the proxy certificate in ssl + * handshake, set 1 to check existence, 2 to ensure that it matches + * the provided hostname. */ + CURLOPT(CURLOPT_PROXY_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 249), + + /* What version to specifically try to use for proxy. + See CURL_SSLVERSION defines below. */ + CURLOPT(CURLOPT_PROXY_SSLVERSION, CURLOPTTYPE_VALUES, 250), + + /* Set a username for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 251), + + /* Set a password for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 252), + + /* Set authentication type for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 253), + + /* name of the file keeping your private SSL-certificate for proxy */ + CURLOPT(CURLOPT_PROXY_SSLCERT, CURLOPTTYPE_STRINGPOINT, 254), + + /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") for + proxy */ + CURLOPT(CURLOPT_PROXY_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 255), + + /* name of the file keeping your private SSL-key for proxy */ + CURLOPT(CURLOPT_PROXY_SSLKEY, CURLOPTTYPE_STRINGPOINT, 256), + + /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") for + proxy */ + CURLOPT(CURLOPT_PROXY_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 257), + + /* password for the SSL private key for proxy */ + CURLOPT(CURLOPT_PROXY_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 258), + + /* Specify which SSL ciphers to use for proxy */ + CURLOPT(CURLOPT_PROXY_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 259), + + /* CRL file for proxy */ + CURLOPT(CURLOPT_PROXY_CRLFILE, CURLOPTTYPE_STRINGPOINT, 260), + + /* Enable/disable specific SSL features with a bitmask for proxy, see + CURLSSLOPT_* */ + CURLOPT(CURLOPT_PROXY_SSL_OPTIONS, CURLOPTTYPE_LONG, 261), + + /* Name of pre proxy to use. */ + CURLOPT(CURLOPT_PRE_PROXY, CURLOPTTYPE_STRINGPOINT, 262), + + /* The public key in DER form used to validate the proxy public key + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 263), + + /* Path to an abstract Unix domain socket */ + CURLOPT(CURLOPT_ABSTRACT_UNIX_SOCKET, CURLOPTTYPE_STRINGPOINT, 264), + + /* Suppress proxy CONNECT response headers from user callbacks */ + CURLOPT(CURLOPT_SUPPRESS_CONNECT_HEADERS, CURLOPTTYPE_LONG, 265), + + /* The request target, instead of extracted from the URL */ + CURLOPT(CURLOPT_REQUEST_TARGET, CURLOPTTYPE_STRINGPOINT, 266), + + /* bitmask of allowed auth methods for connections to SOCKS5 proxies */ + CURLOPT(CURLOPT_SOCKS5_AUTH, CURLOPTTYPE_LONG, 267), + + /* Enable/disable SSH compression */ + CURLOPT(CURLOPT_SSH_COMPRESSION, CURLOPTTYPE_LONG, 268), + + /* Post MIME data. */ + CURLOPT(CURLOPT_MIMEPOST, CURLOPTTYPE_OBJECTPOINT, 269), + + /* Time to use with the CURLOPT_TIMECONDITION. Specified in number of + seconds since 1 Jan 1970. */ + CURLOPT(CURLOPT_TIMEVALUE_LARGE, CURLOPTTYPE_OFF_T, 270), + + /* Head start in milliseconds to give happy eyeballs. */ + CURLOPT(CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, CURLOPTTYPE_LONG, 271), + + /* Function that will be called before a resolver request is made */ + CURLOPT(CURLOPT_RESOLVER_START_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 272), + + /* User data to pass to the resolver start callback. */ + CURLOPT(CURLOPT_RESOLVER_START_DATA, CURLOPTTYPE_CBPOINT, 273), + + /* send HAProxy PROXY protocol header? */ + CURLOPT(CURLOPT_HAPROXYPROTOCOL, CURLOPTTYPE_LONG, 274), + + /* shuffle addresses before use when DNS returns multiple */ + CURLOPT(CURLOPT_DNS_SHUFFLE_ADDRESSES, CURLOPTTYPE_LONG, 275), + + /* Specify which TLS 1.3 ciphers suites to use */ + CURLOPT(CURLOPT_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 276), + CURLOPT(CURLOPT_PROXY_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 277), + + /* Disallow specifying username/login in URL. */ + CURLOPT(CURLOPT_DISALLOW_USERNAME_IN_URL, CURLOPTTYPE_LONG, 278), + + /* DNS-over-HTTPS URL */ + CURLOPT(CURLOPT_DOH_URL, CURLOPTTYPE_STRINGPOINT, 279), + + /* Preferred buffer size to use for uploads */ + CURLOPT(CURLOPT_UPLOAD_BUFFERSIZE, CURLOPTTYPE_LONG, 280), + + /* Time in ms between connection upkeep calls for long-lived connections. */ + CURLOPT(CURLOPT_UPKEEP_INTERVAL_MS, CURLOPTTYPE_LONG, 281), + + /* Specify URL using CURL URL API. */ + CURLOPT(CURLOPT_CURLU, CURLOPTTYPE_OBJECTPOINT, 282), + + /* add trailing data just after no more data is available */ + CURLOPT(CURLOPT_TRAILERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 283), + + /* pointer to be passed to HTTP_TRAILER_FUNCTION */ + CURLOPT(CURLOPT_TRAILERDATA, CURLOPTTYPE_CBPOINT, 284), + + /* set this to 1L to allow HTTP/0.9 responses or 0L to disallow */ + CURLOPT(CURLOPT_HTTP09_ALLOWED, CURLOPTTYPE_LONG, 285), + + /* alt-svc control bitmask */ + CURLOPT(CURLOPT_ALTSVC_CTRL, CURLOPTTYPE_LONG, 286), + + /* alt-svc cache file name to possibly read from/write to */ + CURLOPT(CURLOPT_ALTSVC, CURLOPTTYPE_STRINGPOINT, 287), + + /* maximum age (idle time) of a connection to consider it for reuse + * (in seconds) */ + CURLOPT(CURLOPT_MAXAGE_CONN, CURLOPTTYPE_LONG, 288), + + /* SASL authorization identity */ + CURLOPT(CURLOPT_SASL_AUTHZID, CURLOPTTYPE_STRINGPOINT, 289), + + /* allow RCPT TO command to fail for some recipients */ + CURLOPT(CURLOPT_MAIL_RCPT_ALLOWFAILS, CURLOPTTYPE_LONG, 290), + + /* the private SSL-certificate as a "blob" */ + CURLOPT(CURLOPT_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 291), + CURLOPT(CURLOPT_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 292), + CURLOPT(CURLOPT_PROXY_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 293), + CURLOPT(CURLOPT_PROXY_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 294), + CURLOPT(CURLOPT_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 295), + + /* Issuer certificate for proxy */ + CURLOPT(CURLOPT_PROXY_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 296), + CURLOPT(CURLOPT_PROXY_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 297), + + /* the EC curves requested by the TLS client (RFC 8422, 5.1); + * OpenSSL support via 'set_groups'/'set_curves': + * https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set1_groups.html + */ + CURLOPT(CURLOPT_SSL_EC_CURVES, CURLOPTTYPE_STRINGPOINT, 298), + + /* HSTS bitmask */ + CURLOPT(CURLOPT_HSTS_CTRL, CURLOPTTYPE_LONG, 299), + /* HSTS file name */ + CURLOPT(CURLOPT_HSTS, CURLOPTTYPE_STRINGPOINT, 300), + + /* HSTS read callback */ + CURLOPT(CURLOPT_HSTSREADFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 301), + CURLOPT(CURLOPT_HSTSREADDATA, CURLOPTTYPE_CBPOINT, 302), + + /* HSTS write callback */ + CURLOPT(CURLOPT_HSTSWRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 303), + CURLOPT(CURLOPT_HSTSWRITEDATA, CURLOPTTYPE_CBPOINT, 304), + + /* Parameters for V4 signature */ + CURLOPT(CURLOPT_AWS_SIGV4, CURLOPTTYPE_STRINGPOINT, 305), + + /* Same as CURLOPT_SSL_VERIFYPEER but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 306), + + /* Same as CURLOPT_SSL_VERIFYHOST but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 307), + + /* Same as CURLOPT_SSL_VERIFYSTATUS but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 308), + + /* The CA certificates as "blob" used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAINFO_BLOB, CURLOPTTYPE_BLOB, 309), + + /* The CA certificates as "blob" used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAINFO_BLOB, CURLOPTTYPE_BLOB, 310), + + /* used by scp/sftp to verify the host's public key */ + CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256, CURLOPTTYPE_STRINGPOINT, 311), + + /* Function that will be called immediately before the initial request + is made on a connection (after any protocol negotiation step). */ + CURLOPT(CURLOPT_PREREQFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 312), + + /* Data passed to the CURLOPT_PREREQFUNCTION callback */ + CURLOPT(CURLOPT_PREREQDATA, CURLOPTTYPE_CBPOINT, 313), + + /* maximum age (since creation) of a connection to consider it for reuse + * (in seconds) */ + CURLOPT(CURLOPT_MAXLIFETIME_CONN, CURLOPTTYPE_LONG, 314), + + /* Set MIME option flags. */ + CURLOPT(CURLOPT_MIME_OPTIONS, CURLOPTTYPE_LONG, 315), + + /* set the SSH host key callback, must point to a curl_sshkeycallback + function */ + CURLOPT(CURLOPT_SSH_HOSTKEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 316), + + /* set the SSH host key callback custom pointer */ + CURLOPT(CURLOPT_SSH_HOSTKEYDATA, CURLOPTTYPE_CBPOINT, 317), + + /* specify which protocols that are allowed to be used for the transfer, + which thus helps the app which takes URLs from users or other external + inputs and want to restrict what protocol(s) to deal with. Defaults to + all built-in protocols. */ + CURLOPT(CURLOPT_PROTOCOLS_STR, CURLOPTTYPE_STRINGPOINT, 318), + + /* specify which protocols that libcurl is allowed to follow directs to */ + CURLOPT(CURLOPT_REDIR_PROTOCOLS_STR, CURLOPTTYPE_STRINGPOINT, 319), + + /* websockets options */ + CURLOPT(CURLOPT_WS_OPTIONS, CURLOPTTYPE_LONG, 320), + + /* CA cache timeout */ + CURLOPT(CURLOPT_CA_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 321), + + /* Can leak things, gonna exit() soon */ + CURLOPT(CURLOPT_QUICK_EXIT, CURLOPTTYPE_LONG, 322), + + /* set a specific client IP for HAProxy PROXY protocol header? */ + CURLOPT(CURLOPT_HAPROXY_CLIENT_IP, CURLOPTTYPE_STRINGPOINT, 323), + + CURLOPT_LASTENTRY /* the last unused */ +} CURLoption; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2011 */ + +/* This was added in version 7.19.1 */ +#define CURLOPT_POST301 CURLOPT_POSTREDIR + +/* These are scheduled to disappear by 2009 */ + +/* The following were added in 7.17.0 */ +#define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD +#define CURLOPT_FTPAPPEND CURLOPT_APPEND +#define CURLOPT_FTPLISTONLY CURLOPT_DIRLISTONLY +#define CURLOPT_FTP_SSL CURLOPT_USE_SSL + +/* The following were added earlier */ + +#define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD +#define CURLOPT_KRB4LEVEL CURLOPT_KRBLEVEL + +/* */ +#define CURLOPT_FTP_RESPONSE_TIMEOUT CURLOPT_SERVER_RESPONSE_TIMEOUT + +/* Added in 8.2.0 */ +#define CURLOPT_MAIL_RCPT_ALLLOWFAILS CURLOPT_MAIL_RCPT_ALLOWFAILS + +#else +/* This is set if CURL_NO_OLDIES is defined at compile-time */ +#undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */ +#endif + + + /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host + name resolves addresses using more than one IP protocol version, this + option might be handy to force libcurl to use a specific IP version. */ +#define CURL_IPRESOLVE_WHATEVER 0 /* default, uses addresses to all IP + versions that your system allows */ +#define CURL_IPRESOLVE_V4 1 /* uses only IPv4 addresses/connections */ +#define CURL_IPRESOLVE_V6 2 /* uses only IPv6 addresses/connections */ + + /* Convenient "aliases" */ +#define CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER + + /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ +enum { + CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd + like the library to choose the best possible + for us! */ + CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ + CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ + CURL_HTTP_VERSION_2_0, /* please use HTTP 2 in the request */ + CURL_HTTP_VERSION_2TLS, /* use version 2 for HTTPS, version 1.1 for HTTP */ + CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE, /* please use HTTP 2 without HTTP/1.1 + Upgrade */ + CURL_HTTP_VERSION_3 = 30, /* Use HTTP/3, fallback to HTTP/2 or HTTP/1 if + needed. For HTTPS only. For HTTP, this option + makes libcurl return error. */ + CURL_HTTP_VERSION_3ONLY = 31, /* Use HTTP/3 without fallback. For HTTPS + only. For HTTP, this makes libcurl + return error. */ + + CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */ +}; + +/* Convenience definition simple because the name of the version is HTTP/2 and + not 2.0. The 2_0 version of the enum name was set while the version was + still planned to be 2.0 and we stick to it for compatibility. */ +#define CURL_HTTP_VERSION_2 CURL_HTTP_VERSION_2_0 + +/* + * Public API enums for RTSP requests + */ +enum { + CURL_RTSPREQ_NONE, /* first in list */ + CURL_RTSPREQ_OPTIONS, + CURL_RTSPREQ_DESCRIBE, + CURL_RTSPREQ_ANNOUNCE, + CURL_RTSPREQ_SETUP, + CURL_RTSPREQ_PLAY, + CURL_RTSPREQ_PAUSE, + CURL_RTSPREQ_TEARDOWN, + CURL_RTSPREQ_GET_PARAMETER, + CURL_RTSPREQ_SET_PARAMETER, + CURL_RTSPREQ_RECORD, + CURL_RTSPREQ_RECEIVE, + CURL_RTSPREQ_LAST /* last in list */ +}; + + /* These enums are for use with the CURLOPT_NETRC option. */ +enum CURL_NETRC_OPTION { + CURL_NETRC_IGNORED, /* The .netrc will never be read. + * This is the default. */ + CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred + * to one in the .netrc. */ + CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. + * Unless one is set programmatically, the .netrc + * will be queried. */ + CURL_NETRC_LAST +}; + +enum { + CURL_SSLVERSION_DEFAULT, + CURL_SSLVERSION_TLSv1, /* TLS 1.x */ + CURL_SSLVERSION_SSLv2, + CURL_SSLVERSION_SSLv3, + CURL_SSLVERSION_TLSv1_0, + CURL_SSLVERSION_TLSv1_1, + CURL_SSLVERSION_TLSv1_2, + CURL_SSLVERSION_TLSv1_3, + + CURL_SSLVERSION_LAST /* never use, keep last */ +}; + +enum { + CURL_SSLVERSION_MAX_NONE = 0, + CURL_SSLVERSION_MAX_DEFAULT = (CURL_SSLVERSION_TLSv1 << 16), + CURL_SSLVERSION_MAX_TLSv1_0 = (CURL_SSLVERSION_TLSv1_0 << 16), + CURL_SSLVERSION_MAX_TLSv1_1 = (CURL_SSLVERSION_TLSv1_1 << 16), + CURL_SSLVERSION_MAX_TLSv1_2 = (CURL_SSLVERSION_TLSv1_2 << 16), + CURL_SSLVERSION_MAX_TLSv1_3 = (CURL_SSLVERSION_TLSv1_3 << 16), + + /* never use, keep last */ + CURL_SSLVERSION_MAX_LAST = (CURL_SSLVERSION_LAST << 16) +}; + +enum CURL_TLSAUTH { + CURL_TLSAUTH_NONE, + CURL_TLSAUTH_SRP, + CURL_TLSAUTH_LAST /* never use, keep last */ +}; + +/* symbols to use with CURLOPT_POSTREDIR. + CURL_REDIR_POST_301, CURL_REDIR_POST_302 and CURL_REDIR_POST_303 + can be bitwise ORed so that CURL_REDIR_POST_301 | CURL_REDIR_POST_302 + | CURL_REDIR_POST_303 == CURL_REDIR_POST_ALL */ + +#define CURL_REDIR_GET_ALL 0 +#define CURL_REDIR_POST_301 1 +#define CURL_REDIR_POST_302 2 +#define CURL_REDIR_POST_303 4 +#define CURL_REDIR_POST_ALL \ + (CURL_REDIR_POST_301|CURL_REDIR_POST_302|CURL_REDIR_POST_303) + +typedef enum { + CURL_TIMECOND_NONE, + + CURL_TIMECOND_IFMODSINCE, + CURL_TIMECOND_IFUNMODSINCE, + CURL_TIMECOND_LASTMOD, + + CURL_TIMECOND_LAST +} curl_TimeCond; + +/* Special size_t value signaling a null-terminated string. */ +#define CURL_ZERO_TERMINATED ((size_t) -1) + +/* curl_strequal() and curl_strnequal() are subject for removal in a future + release */ +CURL_EXTERN int curl_strequal(const char *s1, const char *s2); +CURL_EXTERN int curl_strnequal(const char *s1, const char *s2, size_t n); + +/* Mime/form handling support. */ +typedef struct curl_mime curl_mime; /* Mime context. */ +typedef struct curl_mimepart curl_mimepart; /* Mime part context. */ + +/* CURLMIMEOPT_ defines are for the CURLOPT_MIME_OPTIONS option. */ +#define CURLMIMEOPT_FORMESCAPE (1<<0) /* Use backslash-escaping for forms. */ + +/* + * NAME curl_mime_init() + * + * DESCRIPTION + * + * Create a mime context and return its handle. The easy parameter is the + * target handle. + */ +CURL_EXTERN curl_mime *curl_mime_init(CURL *easy); + +/* + * NAME curl_mime_free() + * + * DESCRIPTION + * + * release a mime handle and its substructures. + */ +CURL_EXTERN void curl_mime_free(curl_mime *mime); + +/* + * NAME curl_mime_addpart() + * + * DESCRIPTION + * + * Append a new empty part to the given mime context and return a handle to + * the created part. + */ +CURL_EXTERN curl_mimepart *curl_mime_addpart(curl_mime *mime); + +/* + * NAME curl_mime_name() + * + * DESCRIPTION + * + * Set mime/form part name. + */ +CURL_EXTERN CURLcode curl_mime_name(curl_mimepart *part, const char *name); + +/* + * NAME curl_mime_filename() + * + * DESCRIPTION + * + * Set mime part remote file name. + */ +CURL_EXTERN CURLcode curl_mime_filename(curl_mimepart *part, + const char *filename); + +/* + * NAME curl_mime_type() + * + * DESCRIPTION + * + * Set mime part type. + */ +CURL_EXTERN CURLcode curl_mime_type(curl_mimepart *part, const char *mimetype); + +/* + * NAME curl_mime_encoder() + * + * DESCRIPTION + * + * Set mime data transfer encoder. + */ +CURL_EXTERN CURLcode curl_mime_encoder(curl_mimepart *part, + const char *encoding); + +/* + * NAME curl_mime_data() + * + * DESCRIPTION + * + * Set mime part data source from memory data, + */ +CURL_EXTERN CURLcode curl_mime_data(curl_mimepart *part, + const char *data, size_t datasize); + +/* + * NAME curl_mime_filedata() + * + * DESCRIPTION + * + * Set mime part data source from named file. + */ +CURL_EXTERN CURLcode curl_mime_filedata(curl_mimepart *part, + const char *filename); + +/* + * NAME curl_mime_data_cb() + * + * DESCRIPTION + * + * Set mime part data source from callback function. + */ +CURL_EXTERN CURLcode curl_mime_data_cb(curl_mimepart *part, + curl_off_t datasize, + curl_read_callback readfunc, + curl_seek_callback seekfunc, + curl_free_callback freefunc, + void *arg); + +/* + * NAME curl_mime_subparts() + * + * DESCRIPTION + * + * Set mime part data source from subparts. + */ +CURL_EXTERN CURLcode curl_mime_subparts(curl_mimepart *part, + curl_mime *subparts); +/* + * NAME curl_mime_headers() + * + * DESCRIPTION + * + * Set mime part headers. + */ +CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part, + struct curl_slist *headers, + int take_ownership); + +typedef enum { + /********* the first one is unused ************/ + CURLFORM_NOTHING CURL_DEPRECATED(7.56.0, ""), + CURLFORM_COPYNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), + CURLFORM_PTRNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), + CURLFORM_NAMELENGTH CURL_DEPRECATED(7.56.0, ""), + CURLFORM_COPYCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_PTRCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_CONTENTSLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_FILECONTENT CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), + CURLFORM_ARRAY CURL_DEPRECATED(7.56.0, ""), + CURLFORM_OBSOLETE, + CURLFORM_FILE CURL_DEPRECATED(7.56.0, "Use curl_mime_filedata()"), + + CURLFORM_BUFFER CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), + CURLFORM_BUFFERPTR CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_BUFFERLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + + CURLFORM_CONTENTTYPE CURL_DEPRECATED(7.56.0, "Use curl_mime_type()"), + CURLFORM_CONTENTHEADER CURL_DEPRECATED(7.56.0, "Use curl_mime_headers()"), + CURLFORM_FILENAME CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), + CURLFORM_END, + CURLFORM_OBSOLETE2, + + CURLFORM_STREAM CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), + CURLFORM_CONTENTLEN /* added in 7.46.0, provide a curl_off_t length */ + CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + + CURLFORM_LASTENTRY /* the last unused */ +} CURLformoption; + +/* structure to be used as parameter for CURLFORM_ARRAY */ +struct curl_forms { + CURLformoption option; + const char *value; +}; + +/* use this for multipart formpost building */ +/* Returns code for curl_formadd() + * + * Returns: + * CURL_FORMADD_OK on success + * CURL_FORMADD_MEMORY if the FormInfo allocation fails + * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form + * CURL_FORMADD_NULL if a null pointer was given for a char + * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed + * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used + * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) + * CURL_FORMADD_MEMORY if a curl_httppost struct cannot be allocated + * CURL_FORMADD_MEMORY if some allocation for string copying failed. + * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array + * + ***************************************************************************/ +typedef enum { + CURL_FORMADD_OK CURL_DEPRECATED(7.56.0, ""), /* 1st, no error */ + + CURL_FORMADD_MEMORY CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_OPTION_TWICE CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_NULL CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_UNKNOWN_OPTION CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_INCOMPLETE CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_ILLEGAL_ARRAY CURL_DEPRECATED(7.56.0, ""), + /* libcurl was built with form api disabled */ + CURL_FORMADD_DISABLED CURL_DEPRECATED(7.56.0, ""), + + CURL_FORMADD_LAST /* last */ +} CURLFORMcode; + +/* + * NAME curl_formadd() + * + * DESCRIPTION + * + * Pretty advanced function for building multi-part formposts. Each invoke + * adds one part that together construct a full post. Then use + * CURLOPT_HTTPPOST to send it off to libcurl. + */ +CURL_EXTERN CURLFORMcode CURL_DEPRECATED(7.56.0, "Use curl_mime_init()") +curl_formadd(struct curl_httppost **httppost, + struct curl_httppost **last_post, + ...); + +/* + * callback function for curl_formget() + * The void *arg pointer will be the one passed as second argument to + * curl_formget(). + * The character buffer passed to it must not be freed. + * Should return the buffer length passed to it as the argument "len" on + * success. + */ +typedef size_t (*curl_formget_callback)(void *arg, const char *buf, + size_t len); + +/* + * NAME curl_formget() + * + * DESCRIPTION + * + * Serialize a curl_httppost struct built with curl_formadd(). + * Accepts a void pointer as second argument which will be passed to + * the curl_formget_callback function. + * Returns 0 on success. + */ +CURL_EXTERN int CURL_DEPRECATED(7.56.0, "") +curl_formget(struct curl_httppost *form, void *arg, + curl_formget_callback append); +/* + * NAME curl_formfree() + * + * DESCRIPTION + * + * Free a multipart formpost previously built with curl_formadd(). + */ +CURL_EXTERN void CURL_DEPRECATED(7.56.0, "Use curl_mime_free()") +curl_formfree(struct curl_httppost *form); + +/* + * NAME curl_getenv() + * + * DESCRIPTION + * + * Returns a malloc()'ed string that MUST be curl_free()ed after usage is + * complete. DEPRECATED - see lib/README.curlx + */ +CURL_EXTERN char *curl_getenv(const char *variable); + +/* + * NAME curl_version() + * + * DESCRIPTION + * + * Returns a static ascii string of the libcurl version. + */ +CURL_EXTERN char *curl_version(void); + +/* + * NAME curl_easy_escape() + * + * DESCRIPTION + * + * Escapes URL strings (converts all letters consider illegal in URLs to their + * %XX versions). This function returns a new allocated string or NULL if an + * error occurred. + */ +CURL_EXTERN char *curl_easy_escape(CURL *handle, + const char *string, + int length); + +/* the previous version: */ +CURL_EXTERN char *curl_escape(const char *string, + int length); + + +/* + * NAME curl_easy_unescape() + * + * DESCRIPTION + * + * Unescapes URL encoding in strings (converts all %XX codes to their 8bit + * versions). This function returns a new allocated string or NULL if an error + * occurred. + * Conversion Note: On non-ASCII platforms the ASCII %XX codes are + * converted into the host encoding. + */ +CURL_EXTERN char *curl_easy_unescape(CURL *handle, + const char *string, + int length, + int *outlength); + +/* the previous version */ +CURL_EXTERN char *curl_unescape(const char *string, + int length); + +/* + * NAME curl_free() + * + * DESCRIPTION + * + * Provided for de-allocation in the same translation unit that did the + * allocation. Added in libcurl 7.10 + */ +CURL_EXTERN void curl_free(void *p); + +/* + * NAME curl_global_init() + * + * DESCRIPTION + * + * curl_global_init() should be invoked exactly once for each application that + * uses libcurl and before any call of other libcurl functions. + + * This function is thread-safe if CURL_VERSION_THREADSAFE is set in the + * curl_version_info_data.features flag (fetch by curl_version_info()). + + */ +CURL_EXTERN CURLcode curl_global_init(long flags); + +/* + * NAME curl_global_init_mem() + * + * DESCRIPTION + * + * curl_global_init() or curl_global_init_mem() should be invoked exactly once + * for each application that uses libcurl. This function can be used to + * initialize libcurl and set user defined memory management callback + * functions. Users can implement memory management routines to check for + * memory leaks, check for mis-use of the curl library etc. User registered + * callback routines will be invoked by this library instead of the system + * memory management routines like malloc, free etc. + */ +CURL_EXTERN CURLcode curl_global_init_mem(long flags, + curl_malloc_callback m, + curl_free_callback f, + curl_realloc_callback r, + curl_strdup_callback s, + curl_calloc_callback c); + +/* + * NAME curl_global_cleanup() + * + * DESCRIPTION + * + * curl_global_cleanup() should be invoked exactly once for each application + * that uses libcurl + */ +CURL_EXTERN void curl_global_cleanup(void); + +/* + * NAME curl_global_trace() + * + * DESCRIPTION + * + * curl_global_trace() can be invoked at application start to + * configure which components in curl should participate in tracing. + + * This function is thread-safe if CURL_VERSION_THREADSAFE is set in the + * curl_version_info_data.features flag (fetch by curl_version_info()). + + */ +CURL_EXTERN CURLcode curl_global_trace(const char *config); + +/* linked-list structure for the CURLOPT_QUOTE option (and other) */ +struct curl_slist { + char *data; + struct curl_slist *next; +}; + +/* + * NAME curl_global_sslset() + * + * DESCRIPTION + * + * When built with multiple SSL backends, curl_global_sslset() allows to + * choose one. This function can only be called once, and it must be called + * *before* curl_global_init(). + * + * The backend can be identified by the id (e.g. CURLSSLBACKEND_OPENSSL). The + * backend can also be specified via the name parameter (passing -1 as id). + * If both id and name are specified, the name will be ignored. If neither id + * nor name are specified, the function will fail with + * CURLSSLSET_UNKNOWN_BACKEND and set the "avail" pointer to the + * NULL-terminated list of available backends. + * + * Upon success, the function returns CURLSSLSET_OK. + * + * If the specified SSL backend is not available, the function returns + * CURLSSLSET_UNKNOWN_BACKEND and sets the "avail" pointer to a NULL-terminated + * list of available SSL backends. + * + * The SSL backend can be set only once. If it has already been set, a + * subsequent attempt to change it will result in a CURLSSLSET_TOO_LATE. + */ + +struct curl_ssl_backend { + curl_sslbackend id; + const char *name; +}; +typedef struct curl_ssl_backend curl_ssl_backend; + +typedef enum { + CURLSSLSET_OK = 0, + CURLSSLSET_UNKNOWN_BACKEND, + CURLSSLSET_TOO_LATE, + CURLSSLSET_NO_BACKENDS /* libcurl was built without any SSL support */ +} CURLsslset; + +CURL_EXTERN CURLsslset curl_global_sslset(curl_sslbackend id, const char *name, + const curl_ssl_backend ***avail); + +/* + * NAME curl_slist_append() + * + * DESCRIPTION + * + * Appends a string to a linked list. If no list exists, it will be created + * first. Returns the new list, after appending. + */ +CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *list, + const char *data); + +/* + * NAME curl_slist_free_all() + * + * DESCRIPTION + * + * free a previously built curl_slist. + */ +CURL_EXTERN void curl_slist_free_all(struct curl_slist *list); + +/* + * NAME curl_getdate() + * + * DESCRIPTION + * + * Returns the time, in seconds since 1 Jan 1970 of the time string given in + * the first argument. The time argument in the second parameter is unused + * and should be set to NULL. + */ +CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused); + +/* info about the certificate chain, for SSL backends that support it. Asked + for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */ +struct curl_certinfo { + int num_of_certs; /* number of certificates with information */ + struct curl_slist **certinfo; /* for each index in this array, there's a + linked list with textual information for a + certificate in the format "name:content". + eg "Subject:foo", "Issuer:bar", etc. */ +}; + +/* Information about the SSL library used and the respective internal SSL + handle, which can be used to obtain further information regarding the + connection. Asked for with CURLINFO_TLS_SSL_PTR or CURLINFO_TLS_SESSION. */ +struct curl_tlssessioninfo { + curl_sslbackend backend; + void *internals; +}; + +#define CURLINFO_STRING 0x100000 +#define CURLINFO_LONG 0x200000 +#define CURLINFO_DOUBLE 0x300000 +#define CURLINFO_SLIST 0x400000 +#define CURLINFO_PTR 0x400000 /* same as SLIST */ +#define CURLINFO_SOCKET 0x500000 +#define CURLINFO_OFF_T 0x600000 +#define CURLINFO_MASK 0x0fffff +#define CURLINFO_TYPEMASK 0xf00000 + +typedef enum { + CURLINFO_NONE, /* first, never use this */ + CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, + CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, + CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, + CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, + CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, + CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6, + CURLINFO_SIZE_UPLOAD CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_UPLOAD_T") + = CURLINFO_DOUBLE + 7, + CURLINFO_SIZE_UPLOAD_T = CURLINFO_OFF_T + 7, + CURLINFO_SIZE_DOWNLOAD + CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_DOWNLOAD_T") + = CURLINFO_DOUBLE + 8, + CURLINFO_SIZE_DOWNLOAD_T = CURLINFO_OFF_T + 8, + CURLINFO_SPEED_DOWNLOAD + CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_DOWNLOAD_T") + = CURLINFO_DOUBLE + 9, + CURLINFO_SPEED_DOWNLOAD_T = CURLINFO_OFF_T + 9, + CURLINFO_SPEED_UPLOAD + CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_UPLOAD_T") + = CURLINFO_DOUBLE + 10, + CURLINFO_SPEED_UPLOAD_T = CURLINFO_OFF_T + 10, + CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, + CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, + CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, + CURLINFO_FILETIME = CURLINFO_LONG + 14, + CURLINFO_FILETIME_T = CURLINFO_OFF_T + 14, + CURLINFO_CONTENT_LENGTH_DOWNLOAD + CURL_DEPRECATED(7.55.0, + "Use CURLINFO_CONTENT_LENGTH_DOWNLOAD_T") + = CURLINFO_DOUBLE + 15, + CURLINFO_CONTENT_LENGTH_DOWNLOAD_T = CURLINFO_OFF_T + 15, + CURLINFO_CONTENT_LENGTH_UPLOAD + CURL_DEPRECATED(7.55.0, + "Use CURLINFO_CONTENT_LENGTH_UPLOAD_T") + = CURLINFO_DOUBLE + 16, + CURLINFO_CONTENT_LENGTH_UPLOAD_T = CURLINFO_OFF_T + 16, + CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, + CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, + CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, + CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, + CURLINFO_PRIVATE = CURLINFO_STRING + 21, + CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, + CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, + CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, + CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, + CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, + CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, + CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, + CURLINFO_LASTSOCKET CURL_DEPRECATED(7.45.0, "Use CURLINFO_ACTIVESOCKET") + = CURLINFO_LONG + 29, + CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, + CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31, + CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32, + CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33, + CURLINFO_CERTINFO = CURLINFO_PTR + 34, + CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35, + CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36, + CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37, + CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38, + CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39, + CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40, + CURLINFO_LOCAL_IP = CURLINFO_STRING + 41, + CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42, + CURLINFO_TLS_SESSION CURL_DEPRECATED(7.48.0, "Use CURLINFO_TLS_SSL_PTR") + = CURLINFO_PTR + 43, + CURLINFO_ACTIVESOCKET = CURLINFO_SOCKET + 44, + CURLINFO_TLS_SSL_PTR = CURLINFO_PTR + 45, + CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46, + CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47, + CURLINFO_PROTOCOL CURL_DEPRECATED(7.85.0, "Use CURLINFO_SCHEME") + = CURLINFO_LONG + 48, + CURLINFO_SCHEME = CURLINFO_STRING + 49, + CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50, + CURLINFO_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51, + CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52, + CURLINFO_PRETRANSFER_TIME_T = CURLINFO_OFF_T + 53, + CURLINFO_STARTTRANSFER_TIME_T = CURLINFO_OFF_T + 54, + CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55, + CURLINFO_APPCONNECT_TIME_T = CURLINFO_OFF_T + 56, + CURLINFO_RETRY_AFTER = CURLINFO_OFF_T + 57, + CURLINFO_EFFECTIVE_METHOD = CURLINFO_STRING + 58, + CURLINFO_PROXY_ERROR = CURLINFO_LONG + 59, + CURLINFO_REFERER = CURLINFO_STRING + 60, + CURLINFO_CAINFO = CURLINFO_STRING + 61, + CURLINFO_CAPATH = CURLINFO_STRING + 62, + CURLINFO_XFER_ID = CURLINFO_OFF_T + 63, + CURLINFO_CONN_ID = CURLINFO_OFF_T + 64, + CURLINFO_LASTONE = 64 +} CURLINFO; + +/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as + CURLINFO_HTTP_CODE */ +#define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE + +typedef enum { + CURLCLOSEPOLICY_NONE, /* first, never use this */ + + CURLCLOSEPOLICY_OLDEST, + CURLCLOSEPOLICY_LEAST_RECENTLY_USED, + CURLCLOSEPOLICY_LEAST_TRAFFIC, + CURLCLOSEPOLICY_SLOWEST, + CURLCLOSEPOLICY_CALLBACK, + + CURLCLOSEPOLICY_LAST /* last, never use this */ +} curl_closepolicy; + +#define CURL_GLOBAL_SSL (1<<0) /* no purpose since 7.57.0 */ +#define CURL_GLOBAL_WIN32 (1<<1) +#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) +#define CURL_GLOBAL_NOTHING 0 +#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL +#define CURL_GLOBAL_ACK_EINTR (1<<2) + + +/***************************************************************************** + * Setup defines, protos etc for the sharing stuff. + */ + +/* Different data locks for a single share */ +typedef enum { + CURL_LOCK_DATA_NONE = 0, + /* CURL_LOCK_DATA_SHARE is used internally to say that + * the locking is just made to change the internal state of the share + * itself. + */ + CURL_LOCK_DATA_SHARE, + CURL_LOCK_DATA_COOKIE, + CURL_LOCK_DATA_DNS, + CURL_LOCK_DATA_SSL_SESSION, + CURL_LOCK_DATA_CONNECT, + CURL_LOCK_DATA_PSL, + CURL_LOCK_DATA_HSTS, + CURL_LOCK_DATA_LAST +} curl_lock_data; + +/* Different lock access types */ +typedef enum { + CURL_LOCK_ACCESS_NONE = 0, /* unspecified action */ + CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */ + CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */ + CURL_LOCK_ACCESS_LAST /* never use */ +} curl_lock_access; + +typedef void (*curl_lock_function)(CURL *handle, + curl_lock_data data, + curl_lock_access locktype, + void *userptr); +typedef void (*curl_unlock_function)(CURL *handle, + curl_lock_data data, + void *userptr); + + +typedef enum { + CURLSHE_OK, /* all is fine */ + CURLSHE_BAD_OPTION, /* 1 */ + CURLSHE_IN_USE, /* 2 */ + CURLSHE_INVALID, /* 3 */ + CURLSHE_NOMEM, /* 4 out of memory */ + CURLSHE_NOT_BUILT_IN, /* 5 feature not present in lib */ + CURLSHE_LAST /* never use */ +} CURLSHcode; + +typedef enum { + CURLSHOPT_NONE, /* don't use */ + CURLSHOPT_SHARE, /* specify a data type to share */ + CURLSHOPT_UNSHARE, /* specify which data type to stop sharing */ + CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */ + CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */ + CURLSHOPT_USERDATA, /* pass in a user data pointer used in the lock/unlock + callback functions */ + CURLSHOPT_LAST /* never use */ +} CURLSHoption; + +CURL_EXTERN CURLSH *curl_share_init(void); +CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, + ...); +CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *share); + +/**************************************************************************** + * Structures for querying information about the curl library at runtime. + */ + +typedef enum { + CURLVERSION_FIRST, + CURLVERSION_SECOND, + CURLVERSION_THIRD, + CURLVERSION_FOURTH, + CURLVERSION_FIFTH, + CURLVERSION_SIXTH, + CURLVERSION_SEVENTH, + CURLVERSION_EIGHTH, + CURLVERSION_NINTH, + CURLVERSION_TENTH, + CURLVERSION_ELEVENTH, + CURLVERSION_LAST /* never actually use this */ +} CURLversion; + +/* The 'CURLVERSION_NOW' is the symbolic name meant to be used by + basically all programs ever that want to get version information. It is + meant to be a built-in version number for what kind of struct the caller + expects. If the struct ever changes, we redefine the NOW to another enum + from above. */ +#define CURLVERSION_NOW CURLVERSION_ELEVENTH + +struct curl_version_info_data { + CURLversion age; /* age of the returned struct */ + const char *version; /* LIBCURL_VERSION */ + unsigned int version_num; /* LIBCURL_VERSION_NUM */ + const char *host; /* OS/host/cpu/machine when configured */ + int features; /* bitmask, see defines below */ + const char *ssl_version; /* human readable string */ + long ssl_version_num; /* not used anymore, always 0 */ + const char *libz_version; /* human readable string */ + /* protocols is terminated by an entry with a NULL protoname */ + const char * const *protocols; + + /* The fields below this were added in CURLVERSION_SECOND */ + const char *ares; + int ares_num; + + /* This field was added in CURLVERSION_THIRD */ + const char *libidn; + + /* These field were added in CURLVERSION_FOURTH */ + + /* Same as '_libiconv_version' if built with HAVE_ICONV */ + int iconv_ver_num; + + const char *libssh_version; /* human readable string */ + + /* These fields were added in CURLVERSION_FIFTH */ + unsigned int brotli_ver_num; /* Numeric Brotli version + (MAJOR << 24) | (MINOR << 12) | PATCH */ + const char *brotli_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_SIXTH */ + unsigned int nghttp2_ver_num; /* Numeric nghttp2 version + (MAJOR << 16) | (MINOR << 8) | PATCH */ + const char *nghttp2_version; /* human readable string. */ + const char *quic_version; /* human readable quic (+ HTTP/3) library + + version or NULL */ + + /* These fields were added in CURLVERSION_SEVENTH */ + const char *cainfo; /* the built-in default CURLOPT_CAINFO, might + be NULL */ + const char *capath; /* the built-in default CURLOPT_CAPATH, might + be NULL */ + + /* These fields were added in CURLVERSION_EIGHTH */ + unsigned int zstd_ver_num; /* Numeric Zstd version + (MAJOR << 24) | (MINOR << 12) | PATCH */ + const char *zstd_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_NINTH */ + const char *hyper_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_TENTH */ + const char *gsasl_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_ELEVENTH */ + /* feature_names is terminated by an entry with a NULL feature name */ + const char * const *feature_names; +}; +typedef struct curl_version_info_data curl_version_info_data; + +#define CURL_VERSION_IPV6 (1<<0) /* IPv6-enabled */ +#define CURL_VERSION_KERBEROS4 (1<<1) /* Kerberos V4 auth is supported + (deprecated) */ +#define CURL_VERSION_SSL (1<<2) /* SSL options are present */ +#define CURL_VERSION_LIBZ (1<<3) /* libz features are present */ +#define CURL_VERSION_NTLM (1<<4) /* NTLM auth is supported */ +#define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth is supported + (deprecated) */ +#define CURL_VERSION_DEBUG (1<<6) /* Built with debug capabilities */ +#define CURL_VERSION_ASYNCHDNS (1<<7) /* Asynchronous DNS resolves */ +#define CURL_VERSION_SPNEGO (1<<8) /* SPNEGO auth is supported */ +#define CURL_VERSION_LARGEFILE (1<<9) /* Supports files larger than 2GB */ +#define CURL_VERSION_IDN (1<<10) /* Internationized Domain Names are + supported */ +#define CURL_VERSION_SSPI (1<<11) /* Built against Windows SSPI */ +#define CURL_VERSION_CONV (1<<12) /* Character conversions supported */ +#define CURL_VERSION_CURLDEBUG (1<<13) /* Debug memory tracking supported */ +#define CURL_VERSION_TLSAUTH_SRP (1<<14) /* TLS-SRP auth is supported */ +#define CURL_VERSION_NTLM_WB (1<<15) /* NTLM delegation to winbind helper + is supported */ +#define CURL_VERSION_HTTP2 (1<<16) /* HTTP2 support built-in */ +#define CURL_VERSION_GSSAPI (1<<17) /* Built against a GSS-API library */ +#define CURL_VERSION_KERBEROS5 (1<<18) /* Kerberos V5 auth is supported */ +#define CURL_VERSION_UNIX_SOCKETS (1<<19) /* Unix domain sockets support */ +#define CURL_VERSION_PSL (1<<20) /* Mozilla's Public Suffix List, used + for cookie domain verification */ +#define CURL_VERSION_HTTPS_PROXY (1<<21) /* HTTPS-proxy support built-in */ +#define CURL_VERSION_MULTI_SSL (1<<22) /* Multiple SSL backends available */ +#define CURL_VERSION_BROTLI (1<<23) /* Brotli features are present. */ +#define CURL_VERSION_ALTSVC (1<<24) /* Alt-Svc handling built-in */ +#define CURL_VERSION_HTTP3 (1<<25) /* HTTP3 support built-in */ +#define CURL_VERSION_ZSTD (1<<26) /* zstd features are present */ +#define CURL_VERSION_UNICODE (1<<27) /* Unicode support on Windows */ +#define CURL_VERSION_HSTS (1<<28) /* HSTS is supported */ +#define CURL_VERSION_GSASL (1<<29) /* libgsasl is supported */ +#define CURL_VERSION_THREADSAFE (1<<30) /* libcurl API is thread-safe */ + + /* + * NAME curl_version_info() + * + * DESCRIPTION + * + * This function returns a pointer to a static copy of the version info + * struct. See above. + */ +CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion); + +/* + * NAME curl_easy_strerror() + * + * DESCRIPTION + * + * The curl_easy_strerror function may be used to turn a CURLcode value + * into the equivalent human readable error string. This is useful + * for printing meaningful error messages. + */ +CURL_EXTERN const char *curl_easy_strerror(CURLcode); + +/* + * NAME curl_share_strerror() + * + * DESCRIPTION + * + * The curl_share_strerror function may be used to turn a CURLSHcode value + * into the equivalent human readable error string. This is useful + * for printing meaningful error messages. + */ +CURL_EXTERN const char *curl_share_strerror(CURLSHcode); + +/* + * NAME curl_easy_pause() + * + * DESCRIPTION + * + * The curl_easy_pause function pauses or unpauses transfers. Select the new + * state by setting the bitmask, use the convenience defines below. + * + */ +CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask); + +#define CURLPAUSE_RECV (1<<0) +#define CURLPAUSE_RECV_CONT (0) + +#define CURLPAUSE_SEND (1<<2) +#define CURLPAUSE_SEND_CONT (0) + +#define CURLPAUSE_ALL (CURLPAUSE_RECV|CURLPAUSE_SEND) +#define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT) + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +/* unfortunately, the easy.h and multi.h include files need options and info + stuff before they can be included! */ +#include "easy.h" /* nothing in curl is fun without the easy stuff */ +#include "multi.h" +#include "urlapi.h" +#include "options.h" +#include "header.h" +#include "websockets.h" + +/* the typechecker doesn't work in C++ (yet) */ +#if defined(__GNUC__) && defined(__GNUC_MINOR__) && \ + ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && \ + !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK) +#include "typecheck-gcc.h" +#else +#if defined(__STDC__) && (__STDC__ >= 1) +/* This preprocessor magic that replaces a call with the exact same call is + only done to make sure application authors pass exactly three arguments + to these functions. */ +#define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param) +#define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg) +#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) +#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) +#endif /* __STDC__ >= 1 */ +#endif /* gcc >= 4.3 && !__cplusplus && !CURL_DISABLE_TYPECHECK */ + +#endif /* CURLINC_CURL_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/curlver.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/curlver.h new file mode 100644 index 0000000..44e6070 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/curlver.h @@ -0,0 +1,79 @@ +#ifndef CURLINC_CURLVER_H +#define CURLINC_CURLVER_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* This header file contains nothing but libcurl version info, generated by + a script at release-time. This was made its own header file in 7.11.2 */ + +/* This is the global package copyright */ +#define LIBCURL_COPYRIGHT "Daniel Stenberg, ." + +/* This is the version number of the libcurl package from which this header + file origins: */ +#define LIBCURL_VERSION "8.4.0" + +/* The numeric version number is also available "in parts" by using these + defines: */ +#define LIBCURL_VERSION_MAJOR 8 +#define LIBCURL_VERSION_MINOR 4 +#define LIBCURL_VERSION_PATCH 0 + +/* This is the numeric version of the libcurl version number, meant for easier + parsing and comparisons by programs. The LIBCURL_VERSION_NUM define will + always follow this syntax: + + 0xXXYYZZ + + Where XX, YY and ZZ are the main version, release and patch numbers in + hexadecimal (using 8 bits each). All three numbers are always represented + using two digits. 1.2 would appear as "0x010200" while version 9.11.7 + appears as "0x090b07". + + This 6-digit (24 bits) hexadecimal number does not show pre-release number, + and it is always a greater number in a more recent release. It makes + comparisons with greater than and less than work. + + Note: This define is the full hex number and _does not_ use the + CURL_VERSION_BITS() macro since curl's own configure script greps for it + and needs it to contain the full number. +*/ +#define LIBCURL_VERSION_NUM 0x080400 + +/* + * This is the date and time when the full source package was created. The + * timestamp is not stored in git, as the timestamp is properly set in the + * tarballs by the maketgz script. + * + * The format of the date follows this template: + * + * "2007-11-23" + */ +#define LIBCURL_TIMESTAMP "2023-10-11" + +#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z)) +#define CURL_AT_LEAST_VERSION(x,y,z) \ + (LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z)) + +#endif /* CURLINC_CURLVER_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/easy.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/easy.h new file mode 100644 index 0000000..1285101 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/easy.h @@ -0,0 +1,125 @@ +#ifndef CURLINC_EASY_H +#define CURLINC_EASY_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + +/* Flag bits in the curl_blob struct: */ +#define CURL_BLOB_COPY 1 /* tell libcurl to copy the data */ +#define CURL_BLOB_NOCOPY 0 /* tell libcurl to NOT copy the data */ + +struct curl_blob { + void *data; + size_t len; + unsigned int flags; /* bit 0 is defined, the rest are reserved and should be + left zeroes */ +}; + +CURL_EXTERN CURL *curl_easy_init(void); +CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...); +CURL_EXTERN CURLcode curl_easy_perform(CURL *curl); +CURL_EXTERN void curl_easy_cleanup(CURL *curl); + +/* + * NAME curl_easy_getinfo() + * + * DESCRIPTION + * + * Request internal information from the curl session with this function. + * The third argument MUST be pointing to the specific type of the used option + * which is documented in each man page of the option. The data pointed to + * will be filled in accordingly and can be relied upon only if the function + * returns CURLE_OK. This function is intended to get used *AFTER* a performed + * transfer, all results from this function are undefined until the transfer + * is completed. + */ +CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...); + + +/* + * NAME curl_easy_duphandle() + * + * DESCRIPTION + * + * Creates a new curl session handle with the same options set for the handle + * passed in. Duplicating a handle could only be a matter of cloning data and + * options, internal state info and things like persistent connections cannot + * be transferred. It is useful in multithreaded applications when you can run + * curl_easy_duphandle() for each new thread to avoid a series of identical + * curl_easy_setopt() invokes in every thread. + */ +CURL_EXTERN CURL *curl_easy_duphandle(CURL *curl); + +/* + * NAME curl_easy_reset() + * + * DESCRIPTION + * + * Re-initializes a CURL handle to the default values. This puts back the + * handle to the same state as it was in when it was just created. + * + * It does keep: live connections, the Session ID cache, the DNS cache and the + * cookies. + */ +CURL_EXTERN void curl_easy_reset(CURL *curl); + +/* + * NAME curl_easy_recv() + * + * DESCRIPTION + * + * Receives data from the connected socket. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, + size_t *n); + +/* + * NAME curl_easy_send() + * + * DESCRIPTION + * + * Sends data over the connected socket. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer, + size_t buflen, size_t *n); + + +/* + * NAME curl_easy_upkeep() + * + * DESCRIPTION + * + * Performs connection upkeep for the given session handle. + */ +CURL_EXTERN CURLcode curl_easy_upkeep(CURL *curl); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/header.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/header.h new file mode 100644 index 0000000..8df11e1 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/header.h @@ -0,0 +1,74 @@ +#ifndef CURLINC_HEADER_H +#define CURLINC_HEADER_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +struct curl_header { + char *name; /* this might not use the same case */ + char *value; + size_t amount; /* number of headers using this name */ + size_t index; /* ... of this instance, 0 or higher */ + unsigned int origin; /* see bits below */ + void *anchor; /* handle privately used by libcurl */ +}; + +/* 'origin' bits */ +#define CURLH_HEADER (1<<0) /* plain server header */ +#define CURLH_TRAILER (1<<1) /* trailers */ +#define CURLH_CONNECT (1<<2) /* CONNECT headers */ +#define CURLH_1XX (1<<3) /* 1xx headers */ +#define CURLH_PSEUDO (1<<4) /* pseudo headers */ + +typedef enum { + CURLHE_OK, + CURLHE_BADINDEX, /* header exists but not with this index */ + CURLHE_MISSING, /* no such header exists */ + CURLHE_NOHEADERS, /* no headers at all exist (yet) */ + CURLHE_NOREQUEST, /* no request with this number was used */ + CURLHE_OUT_OF_MEMORY, /* out of memory while processing */ + CURLHE_BAD_ARGUMENT, /* a function argument was not okay */ + CURLHE_NOT_BUILT_IN /* if API was disabled in the build */ +} CURLHcode; + +CURL_EXTERN CURLHcode curl_easy_header(CURL *easy, + const char *name, + size_t index, + unsigned int origin, + int request, + struct curl_header **hout); + +CURL_EXTERN struct curl_header *curl_easy_nextheader(CURL *easy, + unsigned int origin, + int request, + struct curl_header *prev); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_HEADER_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/mprintf.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/mprintf.h new file mode 100644 index 0000000..dc5664b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/mprintf.h @@ -0,0 +1,70 @@ +#ifndef CURLINC_MPRINTF_H +#define CURLINC_MPRINTF_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include +#include /* needed for FILE */ +#include "curl.h" /* for CURL_EXTERN */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if (defined(__GNUC__) || defined(__clang__)) && \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__MINGW32__) && !defined(CURL_NO_FMT_CHECKS) +#define CURL_TEMP_PRINTF(a,b) __attribute__ ((format(printf, a, b))) +#else +#define CURL_TEMP_PRINTF(a,b) +#endif + +CURL_EXTERN int curl_mprintf(const char *format, ...) CURL_TEMP_PRINTF(1, 2); +CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...) + CURL_TEMP_PRINTF(2, 3); +CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...) + CURL_TEMP_PRINTF(2, 3); +CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength, + const char *format, ...) CURL_TEMP_PRINTF(3, 4); +CURL_EXTERN int curl_mvprintf(const char *format, va_list args) + CURL_TEMP_PRINTF(1, 0); +CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args) + CURL_TEMP_PRINTF(2, 0); +CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args) + CURL_TEMP_PRINTF(2, 0); +CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength, + const char *format, va_list args) + CURL_TEMP_PRINTF(3, 0); +CURL_EXTERN char *curl_maprintf(const char *format, ...) + CURL_TEMP_PRINTF(1, 2); +CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args) + CURL_TEMP_PRINTF(1, 0); + +#undef CURL_TEMP_PRINTF + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_MPRINTF_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/multi.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/multi.h new file mode 100644 index 0000000..e79b48f --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/multi.h @@ -0,0 +1,471 @@ +#ifndef CURLINC_MULTI_H +#define CURLINC_MULTI_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ +/* + This is an "external" header file. Don't give away any internals here! + + GOALS + + o Enable a "pull" interface. The application that uses libcurl decides where + and when to ask libcurl to get/send data. + + o Enable multiple simultaneous transfers in the same thread without making it + complicated for the application. + + o Enable the application to select() on its own file descriptors and curl's + file descriptors simultaneous easily. + +*/ + +/* + * This header file should not really need to include "curl.h" since curl.h + * itself includes this file and we expect user applications to do #include + * without the need for especially including multi.h. + * + * For some reason we added this include here at one point, and rather than to + * break existing (wrongly written) libcurl applications, we leave it as-is + * but with this warning attached. + */ +#include "curl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) +typedef struct Curl_multi CURLM; +#else +typedef void CURLM; +#endif + +typedef enum { + CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or + curl_multi_socket*() soon */ + CURLM_OK, + CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */ + CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */ + CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */ + CURLM_INTERNAL_ERROR, /* this is a libcurl bug */ + CURLM_BAD_SOCKET, /* the passed in socket argument did not match */ + CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */ + CURLM_ADDED_ALREADY, /* an easy handle already added to a multi handle was + attempted to get added - again */ + CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a + callback */ + CURLM_WAKEUP_FAILURE, /* wakeup is unavailable or failed */ + CURLM_BAD_FUNCTION_ARGUMENT, /* function called with a bad parameter */ + CURLM_ABORTED_BY_CALLBACK, + CURLM_UNRECOVERABLE_POLL, + CURLM_LAST +} CURLMcode; + +/* just to make code nicer when using curl_multi_socket() you can now check + for CURLM_CALL_MULTI_SOCKET too in the same style it works for + curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */ +#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM + +/* bitmask bits for CURLMOPT_PIPELINING */ +#define CURLPIPE_NOTHING 0L +#define CURLPIPE_HTTP1 1L +#define CURLPIPE_MULTIPLEX 2L + +typedef enum { + CURLMSG_NONE, /* first, not used */ + CURLMSG_DONE, /* This easy handle has completed. 'result' contains + the CURLcode of the transfer */ + CURLMSG_LAST /* last, not used */ +} CURLMSG; + +struct CURLMsg { + CURLMSG msg; /* what this message means */ + CURL *easy_handle; /* the handle it concerns */ + union { + void *whatever; /* message-specific data */ + CURLcode result; /* return code for transfer */ + } data; +}; +typedef struct CURLMsg CURLMsg; + +/* Based on poll(2) structure and values. + * We don't use pollfd and POLL* constants explicitly + * to cover platforms without poll(). */ +#define CURL_WAIT_POLLIN 0x0001 +#define CURL_WAIT_POLLPRI 0x0002 +#define CURL_WAIT_POLLOUT 0x0004 + +struct curl_waitfd { + curl_socket_t fd; + short events; + short revents; +}; + +/* + * Name: curl_multi_init() + * + * Desc: initialize multi-style curl usage + * + * Returns: a new CURLM handle to use in all 'curl_multi' functions. + */ +CURL_EXTERN CURLM *curl_multi_init(void); + +/* + * Name: curl_multi_add_handle() + * + * Desc: add a standard curl handle to the multi stack + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle, + CURL *curl_handle); + + /* + * Name: curl_multi_remove_handle() + * + * Desc: removes a curl handle from the multi stack again + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle, + CURL *curl_handle); + + /* + * Name: curl_multi_fdset() + * + * Desc: Ask curl for its fd_set sets. The app can use these to select() or + * poll() on. We want curl_multi_perform() called as soon as one of + * them are ready. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle, + fd_set *read_fd_set, + fd_set *write_fd_set, + fd_set *exc_fd_set, + int *max_fd); + +/* + * Name: curl_multi_wait() + * + * Desc: Poll on all fds within a CURLM set as well as any + * additional fds passed to the function. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle, + struct curl_waitfd extra_fds[], + unsigned int extra_nfds, + int timeout_ms, + int *ret); + +/* + * Name: curl_multi_poll() + * + * Desc: Poll on all fds within a CURLM set as well as any + * additional fds passed to the function. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_poll(CURLM *multi_handle, + struct curl_waitfd extra_fds[], + unsigned int extra_nfds, + int timeout_ms, + int *ret); + +/* + * Name: curl_multi_wakeup() + * + * Desc: wakes up a sleeping curl_multi_poll call. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_wakeup(CURLM *multi_handle); + + /* + * Name: curl_multi_perform() + * + * Desc: When the app thinks there's data available for curl it calls this + * function to read/write whatever there is right now. This returns + * as soon as the reads and writes are done. This function does not + * require that there actually is data available for reading or that + * data can be written, it can be called just in case. It returns + * the number of handles that still transfer data in the second + * argument's integer-pointer. + * + * Returns: CURLMcode type, general multi error code. *NOTE* that this only + * returns errors etc regarding the whole multi stack. There might + * still have occurred problems on individual transfers even when + * this returns OK. + */ +CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle, + int *running_handles); + + /* + * Name: curl_multi_cleanup() + * + * Desc: Cleans up and removes a whole multi stack. It does not free or + * touch any individual easy handles in any way. We need to define + * in what state those handles will be if this function is called + * in the middle of a transfer. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle); + +/* + * Name: curl_multi_info_read() + * + * Desc: Ask the multi handle if there's any messages/informationals from + * the individual transfers. Messages include informationals such as + * error code from the transfer or just the fact that a transfer is + * completed. More details on these should be written down as well. + * + * Repeated calls to this function will return a new struct each + * time, until a special "end of msgs" struct is returned as a signal + * that there is no more to get at this point. + * + * The data the returned pointer points to will not survive calling + * curl_multi_cleanup(). + * + * The 'CURLMsg' struct is meant to be very simple and only contain + * very basic information. If more involved information is wanted, + * we will provide the particular "transfer handle" in that struct + * and that should/could/would be used in subsequent + * curl_easy_getinfo() calls (or similar). The point being that we + * must never expose complex structs to applications, as then we'll + * undoubtably get backwards compatibility problems in the future. + * + * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out + * of structs. It also writes the number of messages left in the + * queue (after this read) in the integer the second argument points + * to. + */ +CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle, + int *msgs_in_queue); + +/* + * Name: curl_multi_strerror() + * + * Desc: The curl_multi_strerror function may be used to turn a CURLMcode + * value into the equivalent human readable error string. This is + * useful for printing meaningful error messages. + * + * Returns: A pointer to a null-terminated error message. + */ +CURL_EXTERN const char *curl_multi_strerror(CURLMcode); + +/* + * Name: curl_multi_socket() and + * curl_multi_socket_all() + * + * Desc: An alternative version of curl_multi_perform() that allows the + * application to pass in one of the file descriptors that have been + * detected to have "action" on them and let libcurl perform. + * See man page for details. + */ +#define CURL_POLL_NONE 0 +#define CURL_POLL_IN 1 +#define CURL_POLL_OUT 2 +#define CURL_POLL_INOUT 3 +#define CURL_POLL_REMOVE 4 + +#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD + +#define CURL_CSELECT_IN 0x01 +#define CURL_CSELECT_OUT 0x02 +#define CURL_CSELECT_ERR 0x04 + +typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */ + curl_socket_t s, /* socket */ + int what, /* see above */ + void *userp, /* private callback + pointer */ + void *socketp); /* private socket + pointer */ +/* + * Name: curl_multi_timer_callback + * + * Desc: Called by libcurl whenever the library detects a change in the + * maximum number of milliseconds the app is allowed to wait before + * curl_multi_socket() or curl_multi_perform() must be called + * (to allow libcurl's timed events to take place). + * + * Returns: The callback should return zero. + */ +typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */ + long timeout_ms, /* see above */ + void *userp); /* private callback + pointer */ + +CURL_EXTERN CURLMcode CURL_DEPRECATED(7.19.5, "Use curl_multi_socket_action()") +curl_multi_socket(CURLM *multi_handle, curl_socket_t s, int *running_handles); + +CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle, + curl_socket_t s, + int ev_bitmask, + int *running_handles); + +CURL_EXTERN CURLMcode CURL_DEPRECATED(7.19.5, "Use curl_multi_socket_action()") +curl_multi_socket_all(CURLM *multi_handle, int *running_handles); + +#ifndef CURL_ALLOW_OLD_MULTI_SOCKET +/* This macro below was added in 7.16.3 to push users who recompile to use + the new curl_multi_socket_action() instead of the old curl_multi_socket() +*/ +#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z) +#endif + +/* + * Name: curl_multi_timeout() + * + * Desc: Returns the maximum number of milliseconds the app is allowed to + * wait before curl_multi_socket() or curl_multi_perform() must be + * called (to allow libcurl's timed events to take place). + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle, + long *milliseconds); + +typedef enum { + /* This is the socket callback function pointer */ + CURLOPT(CURLMOPT_SOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 1), + + /* This is the argument passed to the socket callback */ + CURLOPT(CURLMOPT_SOCKETDATA, CURLOPTTYPE_OBJECTPOINT, 2), + + /* set to 1 to enable pipelining for this multi handle */ + CURLOPT(CURLMOPT_PIPELINING, CURLOPTTYPE_LONG, 3), + + /* This is the timer callback function pointer */ + CURLOPT(CURLMOPT_TIMERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 4), + + /* This is the argument passed to the timer callback */ + CURLOPT(CURLMOPT_TIMERDATA, CURLOPTTYPE_OBJECTPOINT, 5), + + /* maximum number of entries in the connection cache */ + CURLOPT(CURLMOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 6), + + /* maximum number of (pipelining) connections to one host */ + CURLOPT(CURLMOPT_MAX_HOST_CONNECTIONS, CURLOPTTYPE_LONG, 7), + + /* maximum number of requests in a pipeline */ + CURLOPT(CURLMOPT_MAX_PIPELINE_LENGTH, CURLOPTTYPE_LONG, 8), + + /* a connection with a content-length longer than this + will not be considered for pipelining */ + CURLOPT(CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 9), + + /* a connection with a chunk length longer than this + will not be considered for pipelining */ + CURLOPT(CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 10), + + /* a list of site names(+port) that are blocked from pipelining */ + CURLOPT(CURLMOPT_PIPELINING_SITE_BL, CURLOPTTYPE_OBJECTPOINT, 11), + + /* a list of server types that are blocked from pipelining */ + CURLOPT(CURLMOPT_PIPELINING_SERVER_BL, CURLOPTTYPE_OBJECTPOINT, 12), + + /* maximum number of open connections in total */ + CURLOPT(CURLMOPT_MAX_TOTAL_CONNECTIONS, CURLOPTTYPE_LONG, 13), + + /* This is the server push callback function pointer */ + CURLOPT(CURLMOPT_PUSHFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 14), + + /* This is the argument passed to the server push callback */ + CURLOPT(CURLMOPT_PUSHDATA, CURLOPTTYPE_OBJECTPOINT, 15), + + /* maximum number of concurrent streams to support on a connection */ + CURLOPT(CURLMOPT_MAX_CONCURRENT_STREAMS, CURLOPTTYPE_LONG, 16), + + CURLMOPT_LASTENTRY /* the last unused */ +} CURLMoption; + + +/* + * Name: curl_multi_setopt() + * + * Desc: Sets options for the multi handle. + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle, + CURLMoption option, ...); + + +/* + * Name: curl_multi_assign() + * + * Desc: This function sets an association in the multi handle between the + * given socket and a private pointer of the application. This is + * (only) useful for curl_multi_socket uses. + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle, + curl_socket_t sockfd, void *sockp); + +/* + * Name: curl_multi_get_handles() + * + * Desc: Returns an allocated array holding all handles currently added to + * the multi handle. Marks the final entry with a NULL pointer. If + * there is no easy handle added to the multi handle, this function + * returns an array with the first entry as a NULL pointer. + * + * Returns: NULL on failure, otherwise a CURL **array pointer + */ +CURL_EXTERN CURL **curl_multi_get_handles(CURLM *multi_handle); + +/* + * Name: curl_push_callback + * + * Desc: This callback gets called when a new stream is being pushed by the + * server. It approves or denies the new stream. It can also decide + * to completely fail the connection. + * + * Returns: CURL_PUSH_OK, CURL_PUSH_DENY or CURL_PUSH_ERROROUT + */ +#define CURL_PUSH_OK 0 +#define CURL_PUSH_DENY 1 +#define CURL_PUSH_ERROROUT 2 /* added in 7.72.0 */ + +struct curl_pushheaders; /* forward declaration only */ + +CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h, + size_t num); +CURL_EXTERN char *curl_pushheader_byname(struct curl_pushheaders *h, + const char *name); + +typedef int (*curl_push_callback)(CURL *parent, + CURL *easy, + size_t num_headers, + struct curl_pushheaders *headers, + void *userp); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/options.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/options.h new file mode 100644 index 0000000..1ed76a9 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/options.h @@ -0,0 +1,70 @@ +#ifndef CURLINC_OPTIONS_H +#define CURLINC_OPTIONS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + CURLOT_LONG, /* long (a range of values) */ + CURLOT_VALUES, /* (a defined set or bitmask) */ + CURLOT_OFF_T, /* curl_off_t (a range of values) */ + CURLOT_OBJECT, /* pointer (void *) */ + CURLOT_STRING, /* (char * to null-terminated buffer) */ + CURLOT_SLIST, /* (struct curl_slist *) */ + CURLOT_CBPTR, /* (void * passed as-is to a callback) */ + CURLOT_BLOB, /* blob (struct curl_blob *) */ + CURLOT_FUNCTION /* function pointer */ +} curl_easytype; + +/* Flag bits */ + +/* "alias" means it is provided for old programs to remain functional, + we prefer another name */ +#define CURLOT_FLAG_ALIAS (1<<0) + +/* The CURLOPTTYPE_* id ranges can still be used to figure out what type/size + to use for curl_easy_setopt() for the given id */ +struct curl_easyoption { + const char *name; + CURLoption id; + curl_easytype type; + unsigned int flags; +}; + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_by_name(const char *name); + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_by_id(CURLoption id); + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_next(const struct curl_easyoption *prev); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif +#endif /* CURLINC_OPTIONS_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/stdcheaders.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/stdcheaders.h new file mode 100644 index 0000000..7451aa3 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/stdcheaders.h @@ -0,0 +1,35 @@ +#ifndef CURLINC_STDCHEADERS_H +#define CURLINC_STDCHEADERS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include + +size_t fread(void *, size_t, size_t, FILE *); +size_t fwrite(const void *, size_t, size_t, FILE *); + +int strcasecmp(const char *, const char *); +int strncasecmp(const char *, const char *, size_t); + +#endif /* CURLINC_STDCHEADERS_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/system.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/system.h new file mode 100644 index 0000000..97e0d03 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/system.h @@ -0,0 +1,521 @@ +#ifndef CURLINC_SYSTEM_H +#define CURLINC_SYSTEM_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* + * Try to keep one section per platform, compiler and architecture, otherwise, + * if an existing section is reused for a different one and later on the + * original is adjusted, probably the piggybacking one can be adversely + * changed. + * + * In order to differentiate between platforms/compilers/architectures use + * only compiler built in predefined preprocessor symbols. + * + * curl_off_t + * ---------- + * + * For any given platform/compiler curl_off_t must be typedef'ed to a 64-bit + * wide signed integral data type. The width of this data type must remain + * constant and independent of any possible large file support settings. + * + * As an exception to the above, curl_off_t shall be typedef'ed to a 32-bit + * wide signed integral data type if there is no 64-bit type. + * + * As a general rule, curl_off_t shall not be mapped to off_t. This rule shall + * only be violated if off_t is the only 64-bit data type available and the + * size of off_t is independent of large file support settings. Keep your + * build on the safe side avoiding an off_t gating. If you have a 64-bit + * off_t then take for sure that another 64-bit data type exists, dig deeper + * and you will find it. + * + */ + +#if defined(__DJGPP__) || defined(__GO32__) +# if defined(__DJGPP__) && (__DJGPP__ > 1) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__SALFORDC__) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__BORLANDC__) +# if (__BORLANDC__ < 0x520) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__TURBOC__) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__POCC__) +# if (__POCC__ < 280) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# elif defined(_MSC_VER) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# else +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__LCC__) +# if defined(__MCST__) /* MCST eLbrus Compiler Collection */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 +# else /* Local (or Little) C Compiler */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +# endif + +#elif defined(__SYMBIAN32__) +# if defined(__EABI__) /* Treat all ARM compilers equally */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__CW32__) +# pragma longlong on +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__VC32__) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(macintosh) +# include +# if TYPE_LONGLONG +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(__TANDEM) +# if ! defined(__LP64) + /* Required for 32-bit NonStop builds only. */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +# endif + +#elif defined(_WIN32_WCE) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__MINGW32__) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_WS2TCPIP_H 1 + +#elif defined(__VMS) +# if defined(__VAX) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(__OS400__) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__MVS__) +# if defined(_LONG_LONG) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__370__) +# if defined(__IBMC__) || defined(__IBMCPP__) +# if defined(_ILP32) +# elif defined(_LP64) +# endif +# if defined(_LONG_LONG) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 +# endif + +#elif defined(TPF) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__TINYC__) /* also known as tcc */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* Oracle Solaris Studio */ +# if !defined(__LP64) && (defined(__ILP32) || \ + defined(__i386) || \ + defined(__sparcv8) || \ + defined(__sparcv8plus)) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__LP64) || \ + defined(__amd64) || defined(__sparcv9) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__xlc__) /* IBM xlc compiler */ +# if !defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__hpux) /* HP aCC compiler */ +# if !defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +/* ===================================== */ +/* KEEP MSVC THE PENULTIMATE ENTRY */ +/* ===================================== */ + +#elif defined(_MSC_VER) +# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +/* ===================================== */ +/* KEEP GENERIC GCC THE LAST ENTRY */ +/* ===================================== */ + +#elif defined(__GNUC__) && !defined(_SCO_DS) +# if !defined(__LP64__) && \ + (defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \ + defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \ + defined(__sparc__) || defined(__mips__) || defined(__sh__) || \ + defined(__XTENSA__) || \ + (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \ + (defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L)) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__LP64__) || \ + defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \ + defined(__e2k__) || \ + (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \ + (defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#else +/* generic "safe guess" on old 32 bit style */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +#endif + +#ifdef _AIX +/* AIX needs */ +#define CURL_PULL_SYS_POLL_H +#endif + + +/* CURL_PULL_WS2TCPIP_H is defined above when inclusion of header file */ +/* ws2tcpip.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_WS2TCPIP_H +# include +# include +# include +#endif + +/* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */ +/* sys/types.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_TYPES_H +# include +#endif + +/* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */ +/* sys/socket.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_SOCKET_H +# include +#endif + +/* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file */ +/* sys/poll.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_POLL_H +# include +#endif + +/* Data type definition of curl_socklen_t. */ +#ifdef CURL_TYPEOF_CURL_SOCKLEN_T + typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t; +#endif + +/* Data type definition of curl_off_t. */ + +#ifdef CURL_TYPEOF_CURL_OFF_T + typedef CURL_TYPEOF_CURL_OFF_T curl_off_t; +#endif + +/* + * CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow + * these to be visible and exported by the external libcurl interface API, + * while also making them visible to the library internals, simply including + * curl_setup.h, without actually needing to include curl.h internally. + * If some day this section would grow big enough, all this should be moved + * to its own header file. + */ + +/* + * Figure out if we can use the ## preprocessor operator, which is supported + * by ISO/ANSI C and C++. Some compilers support it without setting __STDC__ + * or __cplusplus so we need to carefully check for them too. + */ + +#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \ + defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \ + defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \ + defined(__ILEC400__) + /* This compiler is believed to have an ISO compatible preprocessor */ +#define CURL_ISOCPP +#else + /* This compiler is believed NOT to have an ISO compatible preprocessor */ +#undef CURL_ISOCPP +#endif + +/* + * Macros for minimum-width signed and unsigned curl_off_t integer constants. + */ + +#if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551) +# define CURLINC_OFF_T_C_HLPR2(x) x +# define CURLINC_OFF_T_C_HLPR1(x) CURLINC_OFF_T_C_HLPR2(x) +# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ + CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T) +# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ + CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU) +#else +# ifdef CURL_ISOCPP +# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix +# else +# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix +# endif +# define CURLINC_OFF_T_C_HLPR1(Val,Suffix) CURLINC_OFF_T_C_HLPR2(Val,Suffix) +# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T) +# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU) +#endif + +#endif /* CURLINC_SYSTEM_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/typecheck-gcc.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/typecheck-gcc.h new file mode 100644 index 0000000..b880f3d --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/typecheck-gcc.h @@ -0,0 +1,717 @@ +#ifndef CURLINC_TYPECHECK_GCC_H +#define CURLINC_TYPECHECK_GCC_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* wraps curl_easy_setopt() with typechecking */ + +/* To add a new kind of warning, add an + * if(curlcheck_sometype_option(_curl_opt)) + * if(!curlcheck_sometype(value)) + * _curl_easy_setopt_err_sometype(); + * block and define curlcheck_sometype_option, curlcheck_sometype and + * _curl_easy_setopt_err_sometype below + * + * NOTE: We use two nested 'if' statements here instead of the && operator, in + * order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x + * when compiling with -Wlogical-op. + * + * To add an option that uses the same type as an existing option, you'll just + * need to extend the appropriate _curl_*_option macro + */ +#define curl_easy_setopt(handle, option, value) \ + __extension__({ \ + CURLoption _curl_opt = (option); \ + if(__builtin_constant_p(_curl_opt)) { \ + CURL_IGNORE_DEPRECATION( \ + if(curlcheck_long_option(_curl_opt)) \ + if(!curlcheck_long(value)) \ + _curl_easy_setopt_err_long(); \ + if(curlcheck_off_t_option(_curl_opt)) \ + if(!curlcheck_off_t(value)) \ + _curl_easy_setopt_err_curl_off_t(); \ + if(curlcheck_string_option(_curl_opt)) \ + if(!curlcheck_string(value)) \ + _curl_easy_setopt_err_string(); \ + if(curlcheck_write_cb_option(_curl_opt)) \ + if(!curlcheck_write_cb(value)) \ + _curl_easy_setopt_err_write_callback(); \ + if((_curl_opt) == CURLOPT_RESOLVER_START_FUNCTION) \ + if(!curlcheck_resolver_start_callback(value)) \ + _curl_easy_setopt_err_resolver_start_callback(); \ + if((_curl_opt) == CURLOPT_READFUNCTION) \ + if(!curlcheck_read_cb(value)) \ + _curl_easy_setopt_err_read_cb(); \ + if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \ + if(!curlcheck_ioctl_cb(value)) \ + _curl_easy_setopt_err_ioctl_cb(); \ + if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \ + if(!curlcheck_sockopt_cb(value)) \ + _curl_easy_setopt_err_sockopt_cb(); \ + if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \ + if(!curlcheck_opensocket_cb(value)) \ + _curl_easy_setopt_err_opensocket_cb(); \ + if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \ + if(!curlcheck_progress_cb(value)) \ + _curl_easy_setopt_err_progress_cb(); \ + if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \ + if(!curlcheck_debug_cb(value)) \ + _curl_easy_setopt_err_debug_cb(); \ + if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \ + if(!curlcheck_ssl_ctx_cb(value)) \ + _curl_easy_setopt_err_ssl_ctx_cb(); \ + if(curlcheck_conv_cb_option(_curl_opt)) \ + if(!curlcheck_conv_cb(value)) \ + _curl_easy_setopt_err_conv_cb(); \ + if((_curl_opt) == CURLOPT_SEEKFUNCTION) \ + if(!curlcheck_seek_cb(value)) \ + _curl_easy_setopt_err_seek_cb(); \ + if(curlcheck_cb_data_option(_curl_opt)) \ + if(!curlcheck_cb_data(value)) \ + _curl_easy_setopt_err_cb_data(); \ + if((_curl_opt) == CURLOPT_ERRORBUFFER) \ + if(!curlcheck_error_buffer(value)) \ + _curl_easy_setopt_err_error_buffer(); \ + if((_curl_opt) == CURLOPT_STDERR) \ + if(!curlcheck_FILE(value)) \ + _curl_easy_setopt_err_FILE(); \ + if(curlcheck_postfields_option(_curl_opt)) \ + if(!curlcheck_postfields(value)) \ + _curl_easy_setopt_err_postfields(); \ + if((_curl_opt) == CURLOPT_HTTPPOST) \ + if(!curlcheck_arr((value), struct curl_httppost)) \ + _curl_easy_setopt_err_curl_httpost(); \ + if((_curl_opt) == CURLOPT_MIMEPOST) \ + if(!curlcheck_ptr((value), curl_mime)) \ + _curl_easy_setopt_err_curl_mimepost(); \ + if(curlcheck_slist_option(_curl_opt)) \ + if(!curlcheck_arr((value), struct curl_slist)) \ + _curl_easy_setopt_err_curl_slist(); \ + if((_curl_opt) == CURLOPT_SHARE) \ + if(!curlcheck_ptr((value), CURLSH)) \ + _curl_easy_setopt_err_CURLSH(); \ + ) \ + } \ + curl_easy_setopt(handle, _curl_opt, value); \ + }) + +/* wraps curl_easy_getinfo() with typechecking */ +#define curl_easy_getinfo(handle, info, arg) \ + __extension__({ \ + CURLINFO _curl_info = (info); \ + if(__builtin_constant_p(_curl_info)) { \ + CURL_IGNORE_DEPRECATION( \ + if(curlcheck_string_info(_curl_info)) \ + if(!curlcheck_arr((arg), char *)) \ + _curl_easy_getinfo_err_string(); \ + if(curlcheck_long_info(_curl_info)) \ + if(!curlcheck_arr((arg), long)) \ + _curl_easy_getinfo_err_long(); \ + if(curlcheck_double_info(_curl_info)) \ + if(!curlcheck_arr((arg), double)) \ + _curl_easy_getinfo_err_double(); \ + if(curlcheck_slist_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_slist *)) \ + _curl_easy_getinfo_err_curl_slist(); \ + if(curlcheck_tlssessioninfo_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_tlssessioninfo *)) \ + _curl_easy_getinfo_err_curl_tlssesssioninfo(); \ + if(curlcheck_certinfo_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_certinfo *)) \ + _curl_easy_getinfo_err_curl_certinfo(); \ + if(curlcheck_socket_info(_curl_info)) \ + if(!curlcheck_arr((arg), curl_socket_t)) \ + _curl_easy_getinfo_err_curl_socket(); \ + if(curlcheck_off_t_info(_curl_info)) \ + if(!curlcheck_arr((arg), curl_off_t)) \ + _curl_easy_getinfo_err_curl_off_t(); \ + ) \ + } \ + curl_easy_getinfo(handle, _curl_info, arg); \ + }) + +/* + * For now, just make sure that the functions are called with three arguments + */ +#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) +#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) + + +/* the actual warnings, triggered by calling the _curl_easy_setopt_err* + * functions */ + +/* To define a new warning, use _CURL_WARNING(identifier, "message") */ +#define CURLWARNING(id, message) \ + static void __attribute__((__warning__(message))) \ + __attribute__((__unused__)) __attribute__((__noinline__)) \ + id(void) { __asm__(""); } + +CURLWARNING(_curl_easy_setopt_err_long, + "curl_easy_setopt expects a long argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_off_t, + "curl_easy_setopt expects a curl_off_t argument for this option") +CURLWARNING(_curl_easy_setopt_err_string, + "curl_easy_setopt expects a " + "string ('char *' or char[]) argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_write_callback, + "curl_easy_setopt expects a curl_write_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_resolver_start_callback, + "curl_easy_setopt expects a " + "curl_resolver_start_callback argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_read_cb, + "curl_easy_setopt expects a curl_read_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_ioctl_cb, + "curl_easy_setopt expects a curl_ioctl_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_sockopt_cb, + "curl_easy_setopt expects a curl_sockopt_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_opensocket_cb, + "curl_easy_setopt expects a " + "curl_opensocket_callback argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_progress_cb, + "curl_easy_setopt expects a curl_progress_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_debug_cb, + "curl_easy_setopt expects a curl_debug_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_ssl_ctx_cb, + "curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_conv_cb, + "curl_easy_setopt expects a curl_conv_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_seek_cb, + "curl_easy_setopt expects a curl_seek_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_cb_data, + "curl_easy_setopt expects a " + "private data pointer as argument for this option") +CURLWARNING(_curl_easy_setopt_err_error_buffer, + "curl_easy_setopt expects a " + "char buffer of CURL_ERROR_SIZE as argument for this option") +CURLWARNING(_curl_easy_setopt_err_FILE, + "curl_easy_setopt expects a 'FILE *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_postfields, + "curl_easy_setopt expects a 'void *' or 'char *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_httpost, + "curl_easy_setopt expects a 'struct curl_httppost *' " + "argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_mimepost, + "curl_easy_setopt expects a 'curl_mime *' " + "argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_slist, + "curl_easy_setopt expects a 'struct curl_slist *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_CURLSH, + "curl_easy_setopt expects a CURLSH* argument for this option") + +CURLWARNING(_curl_easy_getinfo_err_string, + "curl_easy_getinfo expects a pointer to 'char *' for this info") +CURLWARNING(_curl_easy_getinfo_err_long, + "curl_easy_getinfo expects a pointer to long for this info") +CURLWARNING(_curl_easy_getinfo_err_double, + "curl_easy_getinfo expects a pointer to double for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_slist, + "curl_easy_getinfo expects a pointer to 'struct curl_slist *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_tlssesssioninfo, + "curl_easy_getinfo expects a pointer to " + "'struct curl_tlssessioninfo *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_certinfo, + "curl_easy_getinfo expects a pointer to " + "'struct curl_certinfo *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_socket, + "curl_easy_getinfo expects a pointer to curl_socket_t for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_off_t, + "curl_easy_getinfo expects a pointer to curl_off_t for this info") + +/* groups of curl_easy_setops options that take the same type of argument */ + +/* To add a new option to one of the groups, just add + * (option) == CURLOPT_SOMETHING + * to the or-expression. If the option takes a long or curl_off_t, you don't + * have to do anything + */ + +/* evaluates to true if option takes a long argument */ +#define curlcheck_long_option(option) \ + (0 < (option) && (option) < CURLOPTTYPE_OBJECTPOINT) + +#define curlcheck_off_t_option(option) \ + (((option) > CURLOPTTYPE_OFF_T) && ((option) < CURLOPTTYPE_BLOB)) + +/* evaluates to true if option takes a char* argument */ +#define curlcheck_string_option(option) \ + ((option) == CURLOPT_ABSTRACT_UNIX_SOCKET || \ + (option) == CURLOPT_ACCEPT_ENCODING || \ + (option) == CURLOPT_ALTSVC || \ + (option) == CURLOPT_CAINFO || \ + (option) == CURLOPT_CAPATH || \ + (option) == CURLOPT_COOKIE || \ + (option) == CURLOPT_COOKIEFILE || \ + (option) == CURLOPT_COOKIEJAR || \ + (option) == CURLOPT_COOKIELIST || \ + (option) == CURLOPT_CRLFILE || \ + (option) == CURLOPT_CUSTOMREQUEST || \ + (option) == CURLOPT_DEFAULT_PROTOCOL || \ + (option) == CURLOPT_DNS_INTERFACE || \ + (option) == CURLOPT_DNS_LOCAL_IP4 || \ + (option) == CURLOPT_DNS_LOCAL_IP6 || \ + (option) == CURLOPT_DNS_SERVERS || \ + (option) == CURLOPT_DOH_URL || \ + (option) == CURLOPT_EGDSOCKET || \ + (option) == CURLOPT_FTP_ACCOUNT || \ + (option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \ + (option) == CURLOPT_FTPPORT || \ + (option) == CURLOPT_HSTS || \ + (option) == CURLOPT_HAPROXY_CLIENT_IP || \ + (option) == CURLOPT_INTERFACE || \ + (option) == CURLOPT_ISSUERCERT || \ + (option) == CURLOPT_KEYPASSWD || \ + (option) == CURLOPT_KRBLEVEL || \ + (option) == CURLOPT_LOGIN_OPTIONS || \ + (option) == CURLOPT_MAIL_AUTH || \ + (option) == CURLOPT_MAIL_FROM || \ + (option) == CURLOPT_NETRC_FILE || \ + (option) == CURLOPT_NOPROXY || \ + (option) == CURLOPT_PASSWORD || \ + (option) == CURLOPT_PINNEDPUBLICKEY || \ + (option) == CURLOPT_PRE_PROXY || \ + (option) == CURLOPT_PROTOCOLS_STR || \ + (option) == CURLOPT_PROXY || \ + (option) == CURLOPT_PROXY_CAINFO || \ + (option) == CURLOPT_PROXY_CAPATH || \ + (option) == CURLOPT_PROXY_CRLFILE || \ + (option) == CURLOPT_PROXY_ISSUERCERT || \ + (option) == CURLOPT_PROXY_KEYPASSWD || \ + (option) == CURLOPT_PROXY_PINNEDPUBLICKEY || \ + (option) == CURLOPT_PROXY_SERVICE_NAME || \ + (option) == CURLOPT_PROXY_SSL_CIPHER_LIST || \ + (option) == CURLOPT_PROXY_SSLCERT || \ + (option) == CURLOPT_PROXY_SSLCERTTYPE || \ + (option) == CURLOPT_PROXY_SSLKEY || \ + (option) == CURLOPT_PROXY_SSLKEYTYPE || \ + (option) == CURLOPT_PROXY_TLS13_CIPHERS || \ + (option) == CURLOPT_PROXY_TLSAUTH_PASSWORD || \ + (option) == CURLOPT_PROXY_TLSAUTH_TYPE || \ + (option) == CURLOPT_PROXY_TLSAUTH_USERNAME || \ + (option) == CURLOPT_PROXYPASSWORD || \ + (option) == CURLOPT_PROXYUSERNAME || \ + (option) == CURLOPT_PROXYUSERPWD || \ + (option) == CURLOPT_RANDOM_FILE || \ + (option) == CURLOPT_RANGE || \ + (option) == CURLOPT_REDIR_PROTOCOLS_STR || \ + (option) == CURLOPT_REFERER || \ + (option) == CURLOPT_REQUEST_TARGET || \ + (option) == CURLOPT_RTSP_SESSION_ID || \ + (option) == CURLOPT_RTSP_STREAM_URI || \ + (option) == CURLOPT_RTSP_TRANSPORT || \ + (option) == CURLOPT_SASL_AUTHZID || \ + (option) == CURLOPT_SERVICE_NAME || \ + (option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \ + (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \ + (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 || \ + (option) == CURLOPT_SSH_KNOWNHOSTS || \ + (option) == CURLOPT_SSH_PRIVATE_KEYFILE || \ + (option) == CURLOPT_SSH_PUBLIC_KEYFILE || \ + (option) == CURLOPT_SSLCERT || \ + (option) == CURLOPT_SSLCERTTYPE || \ + (option) == CURLOPT_SSLENGINE || \ + (option) == CURLOPT_SSLKEY || \ + (option) == CURLOPT_SSLKEYTYPE || \ + (option) == CURLOPT_SSL_CIPHER_LIST || \ + (option) == CURLOPT_TLS13_CIPHERS || \ + (option) == CURLOPT_TLSAUTH_PASSWORD || \ + (option) == CURLOPT_TLSAUTH_TYPE || \ + (option) == CURLOPT_TLSAUTH_USERNAME || \ + (option) == CURLOPT_UNIX_SOCKET_PATH || \ + (option) == CURLOPT_URL || \ + (option) == CURLOPT_USERAGENT || \ + (option) == CURLOPT_USERNAME || \ + (option) == CURLOPT_AWS_SIGV4 || \ + (option) == CURLOPT_USERPWD || \ + (option) == CURLOPT_XOAUTH2_BEARER || \ + (option) == CURLOPT_SSL_EC_CURVES || \ + 0) + +/* evaluates to true if option takes a curl_write_callback argument */ +#define curlcheck_write_cb_option(option) \ + ((option) == CURLOPT_HEADERFUNCTION || \ + (option) == CURLOPT_WRITEFUNCTION) + +/* evaluates to true if option takes a curl_conv_callback argument */ +#define curlcheck_conv_cb_option(option) \ + ((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION || \ + (option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION || \ + (option) == CURLOPT_CONV_FROM_UTF8_FUNCTION) + +/* evaluates to true if option takes a data argument to pass to a callback */ +#define curlcheck_cb_data_option(option) \ + ((option) == CURLOPT_CHUNK_DATA || \ + (option) == CURLOPT_CLOSESOCKETDATA || \ + (option) == CURLOPT_DEBUGDATA || \ + (option) == CURLOPT_FNMATCH_DATA || \ + (option) == CURLOPT_HEADERDATA || \ + (option) == CURLOPT_HSTSREADDATA || \ + (option) == CURLOPT_HSTSWRITEDATA || \ + (option) == CURLOPT_INTERLEAVEDATA || \ + (option) == CURLOPT_IOCTLDATA || \ + (option) == CURLOPT_OPENSOCKETDATA || \ + (option) == CURLOPT_PREREQDATA || \ + (option) == CURLOPT_PROGRESSDATA || \ + (option) == CURLOPT_READDATA || \ + (option) == CURLOPT_SEEKDATA || \ + (option) == CURLOPT_SOCKOPTDATA || \ + (option) == CURLOPT_SSH_KEYDATA || \ + (option) == CURLOPT_SSL_CTX_DATA || \ + (option) == CURLOPT_WRITEDATA || \ + (option) == CURLOPT_RESOLVER_START_DATA || \ + (option) == CURLOPT_TRAILERDATA || \ + (option) == CURLOPT_SSH_HOSTKEYDATA || \ + 0) + +/* evaluates to true if option takes a POST data argument (void* or char*) */ +#define curlcheck_postfields_option(option) \ + ((option) == CURLOPT_POSTFIELDS || \ + (option) == CURLOPT_COPYPOSTFIELDS || \ + 0) + +/* evaluates to true if option takes a struct curl_slist * argument */ +#define curlcheck_slist_option(option) \ + ((option) == CURLOPT_HTTP200ALIASES || \ + (option) == CURLOPT_HTTPHEADER || \ + (option) == CURLOPT_MAIL_RCPT || \ + (option) == CURLOPT_POSTQUOTE || \ + (option) == CURLOPT_PREQUOTE || \ + (option) == CURLOPT_PROXYHEADER || \ + (option) == CURLOPT_QUOTE || \ + (option) == CURLOPT_RESOLVE || \ + (option) == CURLOPT_TELNETOPTIONS || \ + (option) == CURLOPT_CONNECT_TO || \ + 0) + +/* groups of curl_easy_getinfo infos that take the same type of argument */ + +/* evaluates to true if info expects a pointer to char * argument */ +#define curlcheck_string_info(info) \ + (CURLINFO_STRING < (info) && (info) < CURLINFO_LONG && \ + (info) != CURLINFO_PRIVATE) + +/* evaluates to true if info expects a pointer to long argument */ +#define curlcheck_long_info(info) \ + (CURLINFO_LONG < (info) && (info) < CURLINFO_DOUBLE) + +/* evaluates to true if info expects a pointer to double argument */ +#define curlcheck_double_info(info) \ + (CURLINFO_DOUBLE < (info) && (info) < CURLINFO_SLIST) + +/* true if info expects a pointer to struct curl_slist * argument */ +#define curlcheck_slist_info(info) \ + (((info) == CURLINFO_SSL_ENGINES) || ((info) == CURLINFO_COOKIELIST)) + +/* true if info expects a pointer to struct curl_tlssessioninfo * argument */ +#define curlcheck_tlssessioninfo_info(info) \ + (((info) == CURLINFO_TLS_SSL_PTR) || ((info) == CURLINFO_TLS_SESSION)) + +/* true if info expects a pointer to struct curl_certinfo * argument */ +#define curlcheck_certinfo_info(info) ((info) == CURLINFO_CERTINFO) + +/* true if info expects a pointer to struct curl_socket_t argument */ +#define curlcheck_socket_info(info) \ + (CURLINFO_SOCKET < (info) && (info) < CURLINFO_OFF_T) + +/* true if info expects a pointer to curl_off_t argument */ +#define curlcheck_off_t_info(info) \ + (CURLINFO_OFF_T < (info)) + + +/* typecheck helpers -- check whether given expression has requested type */ + +/* For pointers, you can use the curlcheck_ptr/curlcheck_arr macros, + * otherwise define a new macro. Search for __builtin_types_compatible_p + * in the GCC manual. + * NOTE: these macros MUST NOT EVALUATE their arguments! The argument is + * the actual expression passed to the curl_easy_setopt macro. This + * means that you can only apply the sizeof and __typeof__ operators, no + * == or whatsoever. + */ + +/* XXX: should evaluate to true if expr is a pointer */ +#define curlcheck_any_ptr(expr) \ + (sizeof(expr) == sizeof(void *)) + +/* evaluates to true if expr is NULL */ +/* XXX: must not evaluate expr, so this check is not accurate */ +#define curlcheck_NULL(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), __typeof__(NULL))) + +/* evaluates to true if expr is type*, const type* or NULL */ +#define curlcheck_ptr(expr, type) \ + (curlcheck_NULL(expr) || \ + __builtin_types_compatible_p(__typeof__(expr), type *) || \ + __builtin_types_compatible_p(__typeof__(expr), const type *)) + +/* evaluates to true if expr is one of type[], type*, NULL or const type* */ +#define curlcheck_arr(expr, type) \ + (curlcheck_ptr((expr), type) || \ + __builtin_types_compatible_p(__typeof__(expr), type [])) + +/* evaluates to true if expr is a string */ +#define curlcheck_string(expr) \ + (curlcheck_arr((expr), char) || \ + curlcheck_arr((expr), signed char) || \ + curlcheck_arr((expr), unsigned char)) + +/* evaluates to true if expr is a long (no matter the signedness) + * XXX: for now, int is also accepted (and therefore short and char, which + * are promoted to int when passed to a variadic function) */ +#define curlcheck_long(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), long) || \ + __builtin_types_compatible_p(__typeof__(expr), signed long) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned long) || \ + __builtin_types_compatible_p(__typeof__(expr), int) || \ + __builtin_types_compatible_p(__typeof__(expr), signed int) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned int) || \ + __builtin_types_compatible_p(__typeof__(expr), short) || \ + __builtin_types_compatible_p(__typeof__(expr), signed short) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned short) || \ + __builtin_types_compatible_p(__typeof__(expr), char) || \ + __builtin_types_compatible_p(__typeof__(expr), signed char) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned char)) + +/* evaluates to true if expr is of type curl_off_t */ +#define curlcheck_off_t(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), curl_off_t)) + +/* evaluates to true if expr is abuffer suitable for CURLOPT_ERRORBUFFER */ +/* XXX: also check size of an char[] array? */ +#define curlcheck_error_buffer(expr) \ + (curlcheck_NULL(expr) || \ + __builtin_types_compatible_p(__typeof__(expr), char *) || \ + __builtin_types_compatible_p(__typeof__(expr), char[])) + +/* evaluates to true if expr is of type (const) void* or (const) FILE* */ +#if 0 +#define curlcheck_cb_data(expr) \ + (curlcheck_ptr((expr), void) || \ + curlcheck_ptr((expr), FILE)) +#else /* be less strict */ +#define curlcheck_cb_data(expr) \ + curlcheck_any_ptr(expr) +#endif + +/* evaluates to true if expr is of type FILE* */ +#define curlcheck_FILE(expr) \ + (curlcheck_NULL(expr) || \ + (__builtin_types_compatible_p(__typeof__(expr), FILE *))) + +/* evaluates to true if expr can be passed as POST data (void* or char*) */ +#define curlcheck_postfields(expr) \ + (curlcheck_ptr((expr), void) || \ + curlcheck_arr((expr), char) || \ + curlcheck_arr((expr), unsigned char)) + +/* helper: __builtin_types_compatible_p distinguishes between functions and + * function pointers, hide it */ +#define curlcheck_cb_compatible(func, type) \ + (__builtin_types_compatible_p(__typeof__(func), type) || \ + __builtin_types_compatible_p(__typeof__(func) *, type)) + +/* evaluates to true if expr is of type curl_resolver_start_callback */ +#define curlcheck_resolver_start_callback(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_resolver_start_callback)) + +/* evaluates to true if expr is of type curl_read_callback or "similar" */ +#define curlcheck_read_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), __typeof__(fread) *) || \ + curlcheck_cb_compatible((expr), curl_read_callback) || \ + curlcheck_cb_compatible((expr), _curl_read_callback1) || \ + curlcheck_cb_compatible((expr), _curl_read_callback2) || \ + curlcheck_cb_compatible((expr), _curl_read_callback3) || \ + curlcheck_cb_compatible((expr), _curl_read_callback4) || \ + curlcheck_cb_compatible((expr), _curl_read_callback5) || \ + curlcheck_cb_compatible((expr), _curl_read_callback6)) +typedef size_t (*_curl_read_callback1)(char *, size_t, size_t, void *); +typedef size_t (*_curl_read_callback2)(char *, size_t, size_t, const void *); +typedef size_t (*_curl_read_callback3)(char *, size_t, size_t, FILE *); +typedef size_t (*_curl_read_callback4)(void *, size_t, size_t, void *); +typedef size_t (*_curl_read_callback5)(void *, size_t, size_t, const void *); +typedef size_t (*_curl_read_callback6)(void *, size_t, size_t, FILE *); + +/* evaluates to true if expr is of type curl_write_callback or "similar" */ +#define curlcheck_write_cb(expr) \ + (curlcheck_read_cb(expr) || \ + curlcheck_cb_compatible((expr), __typeof__(fwrite) *) || \ + curlcheck_cb_compatible((expr), curl_write_callback) || \ + curlcheck_cb_compatible((expr), _curl_write_callback1) || \ + curlcheck_cb_compatible((expr), _curl_write_callback2) || \ + curlcheck_cb_compatible((expr), _curl_write_callback3) || \ + curlcheck_cb_compatible((expr), _curl_write_callback4) || \ + curlcheck_cb_compatible((expr), _curl_write_callback5) || \ + curlcheck_cb_compatible((expr), _curl_write_callback6)) +typedef size_t (*_curl_write_callback1)(const char *, size_t, size_t, void *); +typedef size_t (*_curl_write_callback2)(const char *, size_t, size_t, + const void *); +typedef size_t (*_curl_write_callback3)(const char *, size_t, size_t, FILE *); +typedef size_t (*_curl_write_callback4)(const void *, size_t, size_t, void *); +typedef size_t (*_curl_write_callback5)(const void *, size_t, size_t, + const void *); +typedef size_t (*_curl_write_callback6)(const void *, size_t, size_t, FILE *); + +/* evaluates to true if expr is of type curl_ioctl_callback or "similar" */ +#define curlcheck_ioctl_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_ioctl_callback) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback1) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback2) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback3) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback4)) +typedef curlioerr (*_curl_ioctl_callback1)(CURL *, int, void *); +typedef curlioerr (*_curl_ioctl_callback2)(CURL *, int, const void *); +typedef curlioerr (*_curl_ioctl_callback3)(CURL *, curliocmd, void *); +typedef curlioerr (*_curl_ioctl_callback4)(CURL *, curliocmd, const void *); + +/* evaluates to true if expr is of type curl_sockopt_callback or "similar" */ +#define curlcheck_sockopt_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_sockopt_callback) || \ + curlcheck_cb_compatible((expr), _curl_sockopt_callback1) || \ + curlcheck_cb_compatible((expr), _curl_sockopt_callback2)) +typedef int (*_curl_sockopt_callback1)(void *, curl_socket_t, curlsocktype); +typedef int (*_curl_sockopt_callback2)(const void *, curl_socket_t, + curlsocktype); + +/* evaluates to true if expr is of type curl_opensocket_callback or + "similar" */ +#define curlcheck_opensocket_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_opensocket_callback) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback1) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback2) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback3) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback4)) +typedef curl_socket_t (*_curl_opensocket_callback1) + (void *, curlsocktype, struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback2) + (void *, curlsocktype, const struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback3) + (const void *, curlsocktype, struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback4) + (const void *, curlsocktype, const struct curl_sockaddr *); + +/* evaluates to true if expr is of type curl_progress_callback or "similar" */ +#define curlcheck_progress_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_progress_callback) || \ + curlcheck_cb_compatible((expr), _curl_progress_callback1) || \ + curlcheck_cb_compatible((expr), _curl_progress_callback2)) +typedef int (*_curl_progress_callback1)(void *, + double, double, double, double); +typedef int (*_curl_progress_callback2)(const void *, + double, double, double, double); + +/* evaluates to true if expr is of type curl_debug_callback or "similar" */ +#define curlcheck_debug_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_debug_callback) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback1) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback2) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback3) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback4) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback5) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback6) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback7) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback8)) +typedef int (*_curl_debug_callback1) (CURL *, + curl_infotype, char *, size_t, void *); +typedef int (*_curl_debug_callback2) (CURL *, + curl_infotype, char *, size_t, const void *); +typedef int (*_curl_debug_callback3) (CURL *, + curl_infotype, const char *, size_t, void *); +typedef int (*_curl_debug_callback4) (CURL *, + curl_infotype, const char *, size_t, const void *); +typedef int (*_curl_debug_callback5) (CURL *, + curl_infotype, unsigned char *, size_t, void *); +typedef int (*_curl_debug_callback6) (CURL *, + curl_infotype, unsigned char *, size_t, const void *); +typedef int (*_curl_debug_callback7) (CURL *, + curl_infotype, const unsigned char *, size_t, void *); +typedef int (*_curl_debug_callback8) (CURL *, + curl_infotype, const unsigned char *, size_t, const void *); + +/* evaluates to true if expr is of type curl_ssl_ctx_callback or "similar" */ +/* this is getting even messier... */ +#define curlcheck_ssl_ctx_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_ssl_ctx_callback) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback1) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback2) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback3) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback4) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback5) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback6) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback7) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback8)) +typedef CURLcode (*_curl_ssl_ctx_callback1)(CURL *, void *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback2)(CURL *, void *, const void *); +typedef CURLcode (*_curl_ssl_ctx_callback3)(CURL *, const void *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback4)(CURL *, const void *, + const void *); +#ifdef HEADER_SSL_H +/* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX + * this will of course break if we're included before OpenSSL headers... + */ +typedef CURLcode (*_curl_ssl_ctx_callback5)(CURL *, SSL_CTX *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback6)(CURL *, SSL_CTX *, const void *); +typedef CURLcode (*_curl_ssl_ctx_callback7)(CURL *, const SSL_CTX *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback8)(CURL *, const SSL_CTX *, + const void *); +#else +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback5; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback6; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback7; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8; +#endif + +/* evaluates to true if expr is of type curl_conv_callback or "similar" */ +#define curlcheck_conv_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_conv_callback) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback1) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback2) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback3) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback4)) +typedef CURLcode (*_curl_conv_callback1)(char *, size_t length); +typedef CURLcode (*_curl_conv_callback2)(const char *, size_t length); +typedef CURLcode (*_curl_conv_callback3)(void *, size_t length); +typedef CURLcode (*_curl_conv_callback4)(const void *, size_t length); + +/* evaluates to true if expr is of type curl_seek_callback or "similar" */ +#define curlcheck_seek_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_seek_callback) || \ + curlcheck_cb_compatible((expr), _curl_seek_callback1) || \ + curlcheck_cb_compatible((expr), _curl_seek_callback2)) +typedef CURLcode (*_curl_seek_callback1)(void *, curl_off_t, int); +typedef CURLcode (*_curl_seek_callback2)(const void *, curl_off_t, int); + + +#endif /* CURLINC_TYPECHECK_GCC_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/urlapi.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/urlapi.h new file mode 100644 index 0000000..88cdeb3 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/urlapi.h @@ -0,0 +1,150 @@ +#ifndef CURLINC_URLAPI_H +#define CURLINC_URLAPI_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include "curl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* the error codes for the URL API */ +typedef enum { + CURLUE_OK, + CURLUE_BAD_HANDLE, /* 1 */ + CURLUE_BAD_PARTPOINTER, /* 2 */ + CURLUE_MALFORMED_INPUT, /* 3 */ + CURLUE_BAD_PORT_NUMBER, /* 4 */ + CURLUE_UNSUPPORTED_SCHEME, /* 5 */ + CURLUE_URLDECODE, /* 6 */ + CURLUE_OUT_OF_MEMORY, /* 7 */ + CURLUE_USER_NOT_ALLOWED, /* 8 */ + CURLUE_UNKNOWN_PART, /* 9 */ + CURLUE_NO_SCHEME, /* 10 */ + CURLUE_NO_USER, /* 11 */ + CURLUE_NO_PASSWORD, /* 12 */ + CURLUE_NO_OPTIONS, /* 13 */ + CURLUE_NO_HOST, /* 14 */ + CURLUE_NO_PORT, /* 15 */ + CURLUE_NO_QUERY, /* 16 */ + CURLUE_NO_FRAGMENT, /* 17 */ + CURLUE_NO_ZONEID, /* 18 */ + CURLUE_BAD_FILE_URL, /* 19 */ + CURLUE_BAD_FRAGMENT, /* 20 */ + CURLUE_BAD_HOSTNAME, /* 21 */ + CURLUE_BAD_IPV6, /* 22 */ + CURLUE_BAD_LOGIN, /* 23 */ + CURLUE_BAD_PASSWORD, /* 24 */ + CURLUE_BAD_PATH, /* 25 */ + CURLUE_BAD_QUERY, /* 26 */ + CURLUE_BAD_SCHEME, /* 27 */ + CURLUE_BAD_SLASHES, /* 28 */ + CURLUE_BAD_USER, /* 29 */ + CURLUE_LACKS_IDN, /* 30 */ + CURLUE_LAST +} CURLUcode; + +typedef enum { + CURLUPART_URL, + CURLUPART_SCHEME, + CURLUPART_USER, + CURLUPART_PASSWORD, + CURLUPART_OPTIONS, + CURLUPART_HOST, + CURLUPART_PORT, + CURLUPART_PATH, + CURLUPART_QUERY, + CURLUPART_FRAGMENT, + CURLUPART_ZONEID /* added in 7.65.0 */ +} CURLUPart; + +#define CURLU_DEFAULT_PORT (1<<0) /* return default port number */ +#define CURLU_NO_DEFAULT_PORT (1<<1) /* act as if no port number was set, + if the port number matches the + default for the scheme */ +#define CURLU_DEFAULT_SCHEME (1<<2) /* return default scheme if + missing */ +#define CURLU_NON_SUPPORT_SCHEME (1<<3) /* allow non-supported scheme */ +#define CURLU_PATH_AS_IS (1<<4) /* leave dot sequences */ +#define CURLU_DISALLOW_USER (1<<5) /* no user+password allowed */ +#define CURLU_URLDECODE (1<<6) /* URL decode on get */ +#define CURLU_URLENCODE (1<<7) /* URL encode on set */ +#define CURLU_APPENDQUERY (1<<8) /* append a form style part */ +#define CURLU_GUESS_SCHEME (1<<9) /* legacy curl-style guessing */ +#define CURLU_NO_AUTHORITY (1<<10) /* Allow empty authority when the + scheme is unknown. */ +#define CURLU_ALLOW_SPACE (1<<11) /* Allow spaces in the URL */ +#define CURLU_PUNYCODE (1<<12) /* get the host name in punycode */ +#define CURLU_PUNY2IDN (1<<13) /* punycode => IDN conversion */ + +typedef struct Curl_URL CURLU; + +/* + * curl_url() creates a new CURLU handle and returns a pointer to it. + * Must be freed with curl_url_cleanup(). + */ +CURL_EXTERN CURLU *curl_url(void); + +/* + * curl_url_cleanup() frees the CURLU handle and related resources used for + * the URL parsing. It will not free strings previously returned with the URL + * API. + */ +CURL_EXTERN void curl_url_cleanup(CURLU *handle); + +/* + * curl_url_dup() duplicates a CURLU handle and returns a new copy. The new + * handle must also be freed with curl_url_cleanup(). + */ +CURL_EXTERN CURLU *curl_url_dup(const CURLU *in); + +/* + * curl_url_get() extracts a specific part of the URL from a CURLU + * handle. Returns error code. The returned pointer MUST be freed with + * curl_free() afterwards. + */ +CURL_EXTERN CURLUcode curl_url_get(const CURLU *handle, CURLUPart what, + char **part, unsigned int flags); + +/* + * curl_url_set() sets a specific part of the URL in a CURLU handle. Returns + * error code. The passed in string will be copied. Passing a NULL instead of + * a part string, clears that part. + */ +CURL_EXTERN CURLUcode curl_url_set(CURLU *handle, CURLUPart what, + const char *part, unsigned int flags); + +/* + * curl_url_strerror() turns a CURLUcode value into the equivalent human + * readable error string. This is useful for printing meaningful error + * messages. + */ +CURL_EXTERN const char *curl_url_strerror(CURLUcode); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_URLAPI_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/websockets.h b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/websockets.h new file mode 100644 index 0000000..6ef6a2b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/include/curl/websockets.h @@ -0,0 +1,84 @@ +#ifndef CURLINC_WEBSOCKETS_H +#define CURLINC_WEBSOCKETS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +struct curl_ws_frame { + int age; /* zero */ + int flags; /* See the CURLWS_* defines */ + curl_off_t offset; /* the offset of this data into the frame */ + curl_off_t bytesleft; /* number of pending bytes left of the payload */ + size_t len; /* size of the current data chunk */ +}; + +/* flag bits */ +#define CURLWS_TEXT (1<<0) +#define CURLWS_BINARY (1<<1) +#define CURLWS_CONT (1<<2) +#define CURLWS_CLOSE (1<<3) +#define CURLWS_PING (1<<4) +#define CURLWS_OFFSET (1<<5) + +/* + * NAME curl_ws_recv() + * + * DESCRIPTION + * + * Receives data from the websocket connection. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen, + size_t *recv, + const struct curl_ws_frame **metap); + +/* flags for curl_ws_send() */ +#define CURLWS_PONG (1<<6) + +/* + * NAME curl_ws_send() + * + * DESCRIPTION + * + * Sends data over the websocket connection. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_ws_send(CURL *curl, const void *buffer, + size_t buflen, size_t *sent, + curl_off_t fragsize, + unsigned int flags); + +/* bits for the CURLOPT_WS_OPTIONS bitmask: */ +#define CURLWS_RAW_MODE (1<<0) + +CURL_EXTERN const struct curl_ws_frame *curl_ws_meta(CURL *curl); + +#ifdef __cplusplus +} +#endif + +#endif /* CURLINC_WEBSOCKETS_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLConfig.cmake b/packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLConfig.cmake new file mode 100644 index 0000000..5349512 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLConfig.cmake @@ -0,0 +1,62 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() ####### +####### Any changes to this file will be overwritten by the next CMake run #### +####### The input file was curl-config.cmake.in ######## + +get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE) + +macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() +endmacro() + +macro(check_required_components _NAME) + foreach(comp ${${_NAME}_FIND_COMPONENTS}) + if(NOT ${_NAME}_${comp}_FOUND) + if(${_NAME}_FIND_REQUIRED_${comp}) + set(${_NAME}_FOUND FALSE) + endif() + endif() + endforeach() +endmacro() + +#################################################################################### + +include(CMakeFindDependencyMacro) +if() + find_dependency(OpenSSL ) +endif() +if(OFF) + find_dependency(ZLIB ) +endif() + +include("${CMAKE_CURRENT_LIST_DIR}/CURLTargets.cmake") +check_required_components("CURL") + +# Alias for either shared or static library +add_library(CURL::libcurl ALIAS CURL::libcurl_shared) diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLConfigVersion.cmake b/packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLConfigVersion.cmake new file mode 100644 index 0000000..0b7e093 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLConfigVersion.cmake @@ -0,0 +1,70 @@ +if(NOT PACKAGE_FIND_VERSION_RANGE AND PACKAGE_FIND_VERSION_MAJOR STREQUAL "7") + # Version 8 satisfies version 7... requirements + set(PACKAGE_FIND_VERSION_MAJOR 8) + set(PACKAGE_FIND_VERSION_COUNT 1) +endif() +# This is a basic version file for the Config-mode of find_package(). +# It is used by write_basic_package_version_file() as input file for configure_file() +# to create a version-file which can be installed along a config.cmake file. +# +# The created file sets PACKAGE_VERSION_EXACT if the current version string and +# the requested version string are exactly the same and it sets +# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version, +# but only if the requested major version is the same as the current one. +# The variable CVF_VERSION must be set before calling configure_file(). + + +set(PACKAGE_VERSION "8.4.0") + +if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + + if("8.4.0" MATCHES "^([0-9]+)\\.") + set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}") + if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0) + string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}") + endif() + else() + set(CVF_VERSION_MAJOR "8.4.0") + endif() + + if(PACKAGE_FIND_VERSION_RANGE) + # both endpoints of the range must have the expected major version + math (EXPR CVF_VERSION_MAJOR_NEXT "${CVF_VERSION_MAJOR} + 1") + if (NOT PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR + OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX_MAJOR STREQUAL CVF_VERSION_MAJOR) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX VERSION_LESS_EQUAL CVF_VERSION_MAJOR_NEXT))) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + elseif(PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR + AND ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS_EQUAL PACKAGE_FIND_VERSION_MAX) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MAX))) + set(PACKAGE_VERSION_COMPATIBLE TRUE) + else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) + endif() + else() + if(PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR) + set(PACKAGE_VERSION_COMPATIBLE TRUE) + else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) + endif() + + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() + endif() +endif() + + +# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "") + return() +endif() + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8") + math(EXPR installedBits "8 * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLTargets-debug.cmake b/packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLTargets-debug.cmake new file mode 100644 index 0000000..437d191 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLTargets-debug.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file for configuration "Debug". +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "CURL::libcurl_shared" for configuration "Debug" +set_property(TARGET CURL::libcurl_shared APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) +set_target_properties(CURL::libcurl_shared PROPERTIES + IMPORTED_IMPLIB_DEBUG "${_IMPORT_PREFIX}/lib/libcurl-d_imp.lib" + IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/bin/libcurl-d.dll" + ) + +list(APPEND _cmake_import_check_targets CURL::libcurl_shared ) +list(APPEND _cmake_import_check_files_for_CURL::libcurl_shared "${_IMPORT_PREFIX}/lib/libcurl-d_imp.lib" "${_IMPORT_PREFIX}/bin/libcurl-d.dll" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLTargets-release.cmake b/packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLTargets-release.cmake new file mode 100644 index 0000000..e80df75 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLTargets-release.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file for configuration "Release". +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "CURL::libcurl_shared" for configuration "Release" +set_property(TARGET CURL::libcurl_shared APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(CURL::libcurl_shared PROPERTIES + IMPORTED_IMPLIB_RELEASE "${_IMPORT_PREFIX}/lib/libcurl_imp.lib" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/libcurl.dll" + ) + +list(APPEND _cmake_import_check_targets CURL::libcurl_shared ) +list(APPEND _cmake_import_check_files_for_CURL::libcurl_shared "${_IMPORT_PREFIX}/lib/libcurl_imp.lib" "${_IMPORT_PREFIX}/bin/libcurl.dll" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLTargets.cmake b/packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLTargets.cmake new file mode 100644 index 0000000..64a4edd --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/lib/cmake/CURL/CURLTargets.cmake @@ -0,0 +1,102 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8) + message(FATAL_ERROR "CMake >= 2.8.0 required") +endif() +if(CMAKE_VERSION VERSION_LESS "2.8.3") + message(FATAL_ERROR "CMake >= 2.8.3 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.8.3...3.25) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_cmake_targets_defined "") +set(_cmake_targets_not_defined "") +set(_cmake_expected_targets "") +foreach(_cmake_expected_target IN ITEMS CURL::libcurl_shared) + list(APPEND _cmake_expected_targets "${_cmake_expected_target}") + if(TARGET "${_cmake_expected_target}") + list(APPEND _cmake_targets_defined "${_cmake_expected_target}") + else() + list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}") + endif() +endforeach() +unset(_cmake_expected_target) +if(_cmake_targets_defined STREQUAL _cmake_expected_targets) + unset(_cmake_targets_defined) + unset(_cmake_targets_not_defined) + unset(_cmake_expected_targets) + unset(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT _cmake_targets_defined STREQUAL "") + string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}") + string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n") +endif() +unset(_cmake_targets_defined) +unset(_cmake_targets_not_defined) +unset(_cmake_expected_targets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target CURL::libcurl_shared +add_library(CURL::libcurl_shared SHARED IMPORTED) + +set_target_properties(CURL::libcurl_shared PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +# Load information for each installed configuration. +file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/CURLTargets-*.cmake") +foreach(_cmake_config_file IN LISTS _cmake_config_files) + include("${_cmake_config_file}") +endforeach() +unset(_cmake_config_file) +unset(_cmake_config_files) + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(_cmake_target IN LISTS _cmake_import_check_targets) + foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}") + if(NOT EXISTS "${_cmake_file}") + message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file + \"${_cmake_file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_cmake_file) + unset("_cmake_import_check_files_for_${_cmake_target}") +endforeach() +unset(_cmake_target) +unset(_cmake_import_check_targets) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/packages/libcpr.1.10.5/build/native/x64/Debug/lib/pkgconfig/libcurl.pc b/packages/libcpr.1.10.5/build/native/x64/Debug/lib/pkgconfig/libcurl.pc new file mode 100644 index 0000000..a0d0e87 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Debug/lib/pkgconfig/libcurl.pc @@ -0,0 +1,41 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +# This should most probably benefit from getting a "Requires:" field added +# dynamically by configure. +# +prefix=C:/Program Files/cpr +exec_prefix=${prefix} +libdir=C:/Program Files/cpr/lib +includedir=${prefix}/include +supported_protocols="HTTP HTTPS" +supported_features="SSL IPv6 unixsockets AsynchDNS Largefile SSPI alt-svc HSTS SPNEGO Kerberos NTLM HTTPS-proxy threadsafe" + +Name: libcurl +URL: https://curl.se/ +Description: Library to transfer files with ftp, http, etc. +Version: 8.4.0 +Libs: -L${libdir} -lcurl +Libs.private: -lws2_32 -ladvapi32 -lcrypt32 -lbcrypt +Cflags: -I${includedir} diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/bin/curl-config b/packages/libcpr.1.10.5/build/native/x64/Release/bin/curl-config new file mode 100644 index 0000000..94e29bf --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/bin/curl-config @@ -0,0 +1,196 @@ +#! /bin/sh +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +prefix="C:/Program Files/cpr" +exec_prefix=${prefix} +includedir=${prefix}/include +cppflag_curl_staticlib= + +usage() +{ + cat <&2 + exit 1 + fi + ;; + + --configure) + echo + ;; + + *) + echo "unknown option: $1" + usage 1 + ;; + esac + shift +done + +exit 0 diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/accept_encoding.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/accept_encoding.h new file mode 100644 index 0000000..167d7c2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/accept_encoding.h @@ -0,0 +1,41 @@ +#ifndef CPR_ACCEPT_ENCODING_H +#define CPR_ACCEPT_ENCODING_H + +#include +#include +#include +#include +#include + +namespace cpr { + +enum class AcceptEncodingMethods { + identity, + deflate, + zlib, + gzip, + disabled, +}; + +// NOLINTNEXTLINE(cert-err58-cpp) +static const std::map AcceptEncodingMethodsStringMap{{AcceptEncodingMethods::identity, "identity"}, {AcceptEncodingMethods::deflate, "deflate"}, {AcceptEncodingMethods::zlib, "zlib"}, {AcceptEncodingMethods::gzip, "gzip"}, {AcceptEncodingMethods::disabled, "disabled"}}; + +class AcceptEncoding { + public: + AcceptEncoding() = default; + // NOLINTNEXTLINE(google-explicit-constructor) + AcceptEncoding(const std::initializer_list& methods); + // NOLINTNEXTLINE(google-explicit-constructor) + AcceptEncoding(const std::initializer_list& methods); + + [[nodiscard]] bool empty() const noexcept; + [[nodiscard]] const std::string getString() const; + [[nodiscard]] bool disabled() const; + + private: + std::unordered_set methods_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/api.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/api.h new file mode 100644 index 0000000..ba9c64e --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/api.h @@ -0,0 +1,392 @@ +#ifndef CPR_API_H +#define CPR_API_H + +#include +#include +#include +#include +#include + +#include "cpr/async.h" +#include "cpr/async_wrapper.h" +#include "cpr/auth.h" +#include "cpr/bearer.h" +#include "cpr/cprtypes.h" +#include "cpr/multipart.h" +#include "cpr/multiperform.h" +#include "cpr/payload.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include + +namespace cpr { + +using AsyncResponse = AsyncWrapper; + +namespace priv { + +template +void set_option_internal(Session& session, CurrentType&& current_option) { + session.SetOption(std::forward(current_option)); +} + +template <> +inline void set_option_internal(Session& session, Header&& current_option) { + // Header option was already provided -> Update previous header + session.UpdateHeader(std::forward
(current_option)); +} + +template +void set_option_internal(Session& session, CurrentType&& current_option, Ts&&... ts) { + set_option_internal(session, std::forward(current_option)); + + if (std::is_same::value) { + set_option_internal(session, std::forward(ts)...); + } else { + set_option_internal(session, std::forward(ts)...); + } +} + +template +void set_option(Session& session, Ts&&... ts) { + set_option_internal(session, std::forward(ts)...); +} + +// Idea: https://stackoverflow.com/a/19060157 +template +void apply_set_option_internal(Session& session, Tuple&& t, std::index_sequence) { + set_option(session, std::get(std::forward(t))...); +} + +// Idea: https://stackoverflow.com/a/19060157 +template +void apply_set_option(Session& session, Tuple&& t) { + using Indices = std::make_index_sequence>::value>; + apply_set_option_internal(session, std::forward(t), Indices()); +} + +template +void setup_multiperform_internal(MultiPerform& multiperform, T&& t) { + std::shared_ptr session = std::make_shared(); + apply_set_option(*session, t); + multiperform.AddSession(session); +} + +template +void setup_multiperform_internal(MultiPerform& multiperform, T&& t, Ts&&... ts) { + std::shared_ptr session = std::make_shared(); + apply_set_option(*session, t); + multiperform.AddSession(session); + setup_multiperform_internal(multiperform, std::forward(ts)...); +} + +template +void setup_multiperform(MultiPerform& multiperform, Ts&&... ts) { + setup_multiperform_internal(multiperform, std::forward(ts)...); +} + +using session_action_t = cpr::Response (cpr::Session::*)(); + +template +void setup_multiasync(std::vector>& responses, T&& parameters) { + std::shared_ptr cancellation_state = std::make_shared(false); + + std::function execFn{[cancellation_state](T params) { + if (cancellation_state->load()) { + return Response{}; + } + cpr::Session s{}; + s.SetCancellationParam(cancellation_state); + apply_set_option(s, std::forward(params)); + return std::invoke(SessionAction, s); + }}; + responses.emplace_back(GlobalThreadPool::GetInstance()->Submit(std::move(execFn), std::forward(parameters)), std::move(cancellation_state)); +} + +template +void setup_multiasync(std::vector>& responses, T&& head, Ts&&... tail) { + setup_multiasync(responses, std::forward(head)); + if constexpr (sizeof...(Ts) > 0) { + setup_multiasync(responses, std::forward(tail)...); + } +} + +} // namespace priv + +// Get methods +template +Response Get(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Get(); +} + +// Get async methods +template +AsyncResponse GetAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Get(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Get callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto GetCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Get(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Post methods +template +Response Post(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Post(); +} + +// Post async methods +template +AsyncResponse PostAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Post(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Post callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto PostCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Post(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Put methods +template +Response Put(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Put(); +} + +// Put async methods +template +AsyncResponse PutAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Put(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Put callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto PutCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Put(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Head methods +template +Response Head(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Head(); +} + +// Head async methods +template +AsyncResponse HeadAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Head(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Head callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto HeadCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Head(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Delete methods +template +Response Delete(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Delete(); +} + +// Delete async methods +template +AsyncResponse DeleteAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Delete(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Delete callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto DeleteCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Delete(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Options methods +template +Response Options(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Options(); +} + +// Options async methods +template +AsyncResponse OptionsAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Options(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Options callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto OptionsCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Options(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Patch methods +template +Response Patch(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Patch(); +} + +// Patch async methods +template +AsyncResponse PatchAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Patch(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Patch callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto PatchCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Patch(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Download methods +template +Response Download(std::ofstream& file, Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Download(file); +} + +// Download async method +template +AsyncResponse DownloadAsync(fs::path local_path, Ts... ts) { + return AsyncWrapper{std::async( + std::launch::async, + [](fs::path local_path_, Ts... ts_) { + std::ofstream f(local_path_.c_str()); + return Download(f, std::move(ts_)...); + }, + std::move(local_path), std::move(ts)...)}; +} + +// Download with user callback +template +Response Download(const WriteCallback& write, Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Download(write); +} + +// Multi requests +template +std::vector MultiGet(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Get(); +} + +template +std::vector MultiDelete(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Delete(); +} + +template +std::vector MultiPut(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Put(); +} + +template +std::vector MultiHead(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Head(); +} + +template +std::vector MultiOptions(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Options(); +} + +template +std::vector MultiPatch(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Patch(); +} + +template +std::vector MultiPost(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Post(); +} + +template +std::vector> MultiGetAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Get>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiDeleteAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Delete>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiHeadAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Head>(ret, std::forward(ts)...); + return ret; +} +template +std::vector> MultiOptionsAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Options>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiPatchAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Patch>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiPostAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Post>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiPutAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Put>(ret, std::forward(ts)...); + return ret; +} + + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/async.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/async.h new file mode 100644 index 0000000..1305834 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/async.h @@ -0,0 +1,50 @@ +#ifndef CPR_ASYNC_H +#define CPR_ASYNC_H + +#include "async_wrapper.h" +#include "singleton.h" +#include "threadpool.h" + +namespace cpr { + +class GlobalThreadPool : public ThreadPool { + CPR_SINGLETON_DECL(GlobalThreadPool) + protected: + GlobalThreadPool() = default; + + public: + ~GlobalThreadPool() override = default; +}; + +/** + * Return a wrapper for a future, calling future.get() will wait until the task is done and return RetType. + * async(fn, args...) + * async(std::bind(&Class::mem_fn, &obj)) + * async(std::mem_fn(&Class::mem_fn, &obj)) + **/ +template +auto async(Fn&& fn, Args&&... args) { + return AsyncWrapper{GlobalThreadPool::GetInstance()->Submit(std::forward(fn), std::forward(args)...)}; +} + +class async { + public: + static void startup(size_t min_threads = CPR_DEFAULT_THREAD_POOL_MIN_THREAD_NUM, size_t max_threads = CPR_DEFAULT_THREAD_POOL_MAX_THREAD_NUM, std::chrono::milliseconds max_idle_ms = CPR_DEFAULT_THREAD_POOL_MAX_IDLE_TIME) { + GlobalThreadPool* gtp = GlobalThreadPool::GetInstance(); + if (gtp->IsStarted()) { + return; + } + gtp->SetMinThreadNum(min_threads); + gtp->SetMaxThreadNum(max_threads); + gtp->SetMaxIdleTime(max_idle_ms); + gtp->Start(); + } + + static void cleanup() { + GlobalThreadPool::ExitInstance(); + } +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/async_wrapper.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/async_wrapper.h new file mode 100644 index 0000000..bb46bf9 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/async_wrapper.h @@ -0,0 +1,140 @@ +#ifndef CPR_ASYNC_WRAPPER_H +#define CPR_ASYNC_WRAPPER_H + +#include +#include +#include + +#include "cpr/response.h" + +namespace cpr { +enum class [[nodiscard]] CancellationResult { failure, success, invalid_operation }; + +/** + * A class template intended to wrap results of async operations (instances of std::future) + * and also provide extended capablilities relaed to these requests, for example cancellation. + * + * The RAII semantics are the same as std::future - moveable, not copyable. + */ +template +class AsyncWrapper { + private: + std::future future; + std::shared_ptr is_cancelled; + + public: + // Constructors + explicit AsyncWrapper(std::future&& f) : future{std::move(f)} {} + AsyncWrapper(std::future&& f, std::shared_ptr&& cancelledState) : future{std::move(f)}, is_cancelled{std::move(cancelledState)} {} + + // Copy Semantics + AsyncWrapper(const AsyncWrapper&) = delete; + AsyncWrapper& operator=(const AsyncWrapper&) = delete; + + // Move Semantics + AsyncWrapper(AsyncWrapper&&) noexcept = default; + AsyncWrapper& operator=(AsyncWrapper&&) noexcept = default; + + // Destructor + ~AsyncWrapper() { + if constexpr (isCancellable) { + if(is_cancelled) { + is_cancelled->store(true); + } + } + } + // These methods replicate the behaviour of std::future + [[nodiscard]] T get() { + if constexpr (isCancellable) { + if (IsCancelled()) { + throw std::logic_error{"Calling AsyncWrapper::get on a cancelled request!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::get when the associated future instance is invalid!"}; + } + return future.get(); + } + + [[nodiscard]] bool valid() const noexcept { + if constexpr (isCancellable) { + return !is_cancelled->load() && future.valid(); + } else { + return future.valid(); + } + } + + void wait() const { + if constexpr (isCancellable) { + if (is_cancelled->load()) { + throw std::logic_error{"Calling AsyncWrapper::wait when the associated future is invalid or cancelled!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is invalid!"}; + } + future.wait(); + } + + template + std::future_status wait_for(const std::chrono::duration& timeout_duration) const { + if constexpr (isCancellable) { + if (IsCancelled()) { + throw std::logic_error{"Calling AsyncWrapper::wait_for when the associated future is cancelled!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is invalid!"}; + } + return future.wait_for(timeout_duration); + } + + template + std::future_status wait_until(const std::chrono::time_point& timeout_time) const { + if constexpr (isCancellable) { + if (IsCancelled()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is cancelled!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is invalid!"}; + } + return future.wait_until(timeout_time); + } + + std::shared_future share() noexcept { + return future.share(); + } + + // Cancellation-related methods + CancellationResult Cancel() { + if constexpr (!isCancellable) { + return CancellationResult::invalid_operation; + } + if (!future.valid() || is_cancelled->load()) { + return CancellationResult::invalid_operation; + } + is_cancelled->store(true); + return CancellationResult::success; + } + + [[nodiscard]] bool IsCancelled() const { + if constexpr (isCancellable) { + return is_cancelled->load(); + } else { + return false; + } + } +}; + +// Deduction guides +template +AsyncWrapper(std::future&&) -> AsyncWrapper; + +template +AsyncWrapper(std::future&&, std::shared_ptr&&) -> AsyncWrapper; + +} // namespace cpr + + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/auth.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/auth.h new file mode 100644 index 0000000..e783969 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/auth.h @@ -0,0 +1,32 @@ +#ifndef CPR_AUTH_H +#define CPR_AUTH_H + +#include + +#include + +namespace cpr { + +enum class AuthMode { BASIC, DIGEST, NTLM }; + +class Authentication { + public: + Authentication(std::string username, std::string password, AuthMode auth_mode) : auth_string_{std::move(username) + ":" + std::move(password)}, auth_mode_{std::move(auth_mode)} {} + Authentication(const Authentication& other) = default; + Authentication(Authentication&& old) noexcept = default; + ~Authentication() noexcept; + + Authentication& operator=(Authentication&& old) noexcept = default; + Authentication& operator=(const Authentication& other) = default; + + const char* GetAuthString() const noexcept; + AuthMode GetAuthMode() const noexcept; + + private: + std::string auth_string_; + AuthMode auth_mode_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/bearer.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/bearer.h new file mode 100644 index 0000000..5e58a7d --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/bearer.h @@ -0,0 +1,34 @@ +#ifndef CPR_BEARER_H +#define CPR_BEARER_H + +#include +#include + +#include + +namespace cpr { + +// Only supported with libcurl >= 7.61.0. +// As an alternative use SetHeader and add the token manually. +#if LIBCURL_VERSION_NUM >= 0x073D00 +class Bearer { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Bearer(std::string token) : token_string_{std::move(token)} {} + Bearer(const Bearer& other) = default; + Bearer(Bearer&& old) noexcept = default; + virtual ~Bearer() noexcept; + + Bearer& operator=(Bearer&& old) noexcept = default; + Bearer& operator=(const Bearer& other) = default; + + virtual const char* GetToken() const noexcept; + + protected: + std::string token_string_; +}; +#endif + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/body.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/body.h new file mode 100644 index 0000000..f691d9c --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/body.h @@ -0,0 +1,54 @@ +#ifndef CPR_BODY_H +#define CPR_BODY_H + +#include +#include +#include +#include +#include + +#include "cpr/buffer.h" +#include "cpr/cprtypes.h" +#include "cpr/file.h" + +namespace cpr { + +class Body : public StringHolder { + public: + Body() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Body(std::string body) : StringHolder(std::move(body)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Body(std::string_view body) : StringHolder(body) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Body(const char* body) : StringHolder(body) {} + Body(const char* str, size_t len) : StringHolder(str, len) {} + Body(const std::initializer_list args) : StringHolder(args) {} + // NOLINTNEXTLINE(google-explicit-constructor, cppcoreguidelines-pro-type-reinterpret-cast) + Body(const Buffer& buffer) : StringHolder(reinterpret_cast(buffer.data), static_cast(buffer.datalen)) {} + // NOLINTNEXTLINE(google-explicit-constructor) + Body(const File& file) { + std::ifstream is(file.filepath, std::ifstream::binary); + if (!is) { + throw std::invalid_argument("Can't open the file for HTTP request body!"); + } + + is.seekg(0, std::ios::end); + const std::streampos length = is.tellg(); + is.seekg(0, std::ios::beg); + std::string buffer; + buffer.resize(static_cast(length)); + is.read(buffer.data(), length); + str_ = std::move(buffer); + } + Body(const Body& other) = default; + Body(Body&& old) noexcept = default; + ~Body() override = default; + + Body& operator=(Body&& old) noexcept = default; + Body& operator=(const Body& other) = default; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/buffer.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/buffer.h new file mode 100644 index 0000000..5665faa --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/buffer.h @@ -0,0 +1,33 @@ +#ifndef CPR_BUFFER_H +#define CPR_BUFFER_H + +#include + +#include + +namespace cpr { + +struct Buffer { + using data_t = const char*; + + template + Buffer(Iterator begin, Iterator end, fs::path&& p_filename) + // Ignored here since libcurl reqires a long. + // There is also no way around the reinterpret_cast. + // NOLINTNEXTLINE(google-runtime-int, cppcoreguidelines-pro-type-reinterpret-cast) + : data{reinterpret_cast(&(*begin))}, datalen{static_cast(std::distance(begin, end))}, filename(std::move(p_filename)) { + is_random_access_iterator(begin, end); + static_assert(sizeof(*begin) == 1, "Only byte buffers can be used"); + } + + template + typename std::enable_if::iterator_category, std::random_access_iterator_tag>::value>::type is_random_access_iterator(Iterator /* begin */, Iterator /* end */) {} + + data_t data; + size_t datalen; + const fs::path filename; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/callback.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/callback.h new file mode 100644 index 0000000..dc1c6ee --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/callback.h @@ -0,0 +1,111 @@ +#ifndef CPR_CALLBACK_H +#define CPR_CALLBACK_H + +#include "cprtypes.h" + +#include +#include +#include +#include + +namespace cpr { + +class ReadCallback { + public: + ReadCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ReadCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), size{-1}, callback{std::move(p_callback)} {} + ReadCallback(cpr_off_t p_size, std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), size{p_size}, callback{std::move(p_callback)} {} + bool operator()(char* buffer, size_t& buffer_size) const { + return callback(buffer, buffer_size, userdata); + } + + intptr_t userdata{}; + cpr_off_t size{}; + std::function callback; +}; + +class HeaderCallback { + public: + HeaderCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + HeaderCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + bool operator()(std::string header) const { + return callback(std::move(header), userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +class WriteCallback { + public: + WriteCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + WriteCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + bool operator()(std::string data) const { + return callback(std::move(data), userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +class ProgressCallback { + public: + ProgressCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ProgressCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + bool operator()(cpr_pf_arg_t downloadTotal, cpr_pf_arg_t downloadNow, cpr_pf_arg_t uploadTotal, cpr_pf_arg_t uploadNow) const { + return callback(downloadTotal, downloadNow, uploadTotal, uploadNow, userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +class DebugCallback { + public: + enum class InfoType { + TEXT = 0, + HEADER_IN = 1, + HEADER_OUT = 2, + DATA_IN = 3, + DATA_OUT = 4, + SSL_DATA_IN = 5, + SSL_DATA_OUT = 6, + }; + DebugCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + DebugCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + void operator()(InfoType type, std::string data) const { + callback(type, std::move(data), userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +/** + * Functor class for progress functions that will be used in cancellable requests. + */ +class CancellationCallback { + public: + CancellationCallback() = default; + explicit CancellationCallback(std::shared_ptr&& cs) : cancellation_state{std::move(cs)} {} + + CancellationCallback(std::shared_ptr&& cs, ProgressCallback& u_cb) : cancellation_state{std::move(cs)}, user_cb{std::reference_wrapper{u_cb}} {} + + bool operator()(cpr_pf_arg_t dltotal, cpr_pf_arg_t dlnow, cpr_pf_arg_t ultotal, cpr_pf_arg_t ulnow) const; + + void SetProgressCallback(ProgressCallback& u_cb); + + private: + std::shared_ptr cancellation_state; + std::optional> user_cb; +}; + + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cert_info.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cert_info.h new file mode 100644 index 0000000..6c328ee --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cert_info.h @@ -0,0 +1,35 @@ +#ifndef CPR_CERT_INFO_H +#define CPR_CERT_INFO_H + +#include +#include +#include + +namespace cpr { + +class CertInfo { + private: + std::vector cert_info_; + + public: + CertInfo() = default; + CertInfo(const std::initializer_list& entry) : cert_info_{entry} {}; + ~CertInfo() noexcept = default; + + using iterator = std::vector::iterator; + using const_iterator = std::vector::const_iterator; + + std::string& operator[](const size_t& pos); + iterator begin(); + iterator end(); + const_iterator begin() const; + const_iterator end() const; + const_iterator cbegin() const; + const_iterator cend() const; + void emplace_back(const std::string& str); + void push_back(const std::string& str); + void pop_back(); +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/connect_timeout.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/connect_timeout.h new file mode 100644 index 0000000..546e8a5 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/connect_timeout.h @@ -0,0 +1,18 @@ +#ifndef CPR_CONNECT_TIMEOUT_H +#define CPR_CONNECT_TIMEOUT_H + +#include "cpr/timeout.h" + +namespace cpr { + +class ConnectTimeout : public Timeout { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ConnectTimeout(const std::chrono::milliseconds& duration) : Timeout{duration} {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ConnectTimeout(const std::int32_t& milliseconds) : Timeout{milliseconds} {} +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cookies.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cookies.h new file mode 100644 index 0000000..c018ea4 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cookies.h @@ -0,0 +1,92 @@ +#ifndef CPR_COOKIES_H +#define CPR_COOKIES_H + +#include "cpr/curlholder.h" +#include +#include +#include +#include +#include + +namespace cpr { +/** + * EXPIRES_STRING_SIZE is an explicitly static and const variable that could be only accessed within the same namespace and is immutable. + * To be used for "std::array", the expression must have a constant value, so EXPIRES_STRING_SIZE must be a const value. + **/ +static const std::size_t EXPIRES_STRING_SIZE = 100; + +class Cookie { + public: + Cookie() = default; + /** + * Some notes for the default value used by expires: + * std::chrono::system_clock::time_point::min() won't work on Windows due to the min, max clash there. + * So we fall back to std::chrono::system_clock::from_time_t(0) for the minimum value here. + **/ + Cookie(const std::string& name, const std::string& value, const std::string& domain = "", bool p_isIncludingSubdomains = false, const std::string& path = "/", bool p_isHttpsOnly = false, std::chrono::system_clock::time_point expires = std::chrono::system_clock::from_time_t(0)) : name_{name}, value_{value}, domain_{domain}, includeSubdomains_{p_isIncludingSubdomains}, path_{path}, httpsOnly_{p_isHttpsOnly}, expires_{expires} {}; + const std::string GetDomain() const; + bool IsIncludingSubdomains() const; + const std::string GetPath() const; + bool IsHttpsOnly() const; + const std::chrono::system_clock::time_point GetExpires() const; + const std::string GetExpiresString() const; + const std::string GetName() const; + const std::string GetValue() const; + + private: + std::string name_; + std::string value_; + std::string domain_; + bool includeSubdomains_{}; + std::string path_; + bool httpsOnly_{}; + /** + * TODO: Update the implementation using `std::chrono::utc_clock` of C++20 + **/ + std::chrono::system_clock::time_point expires_{}; +}; + +class Cookies { + public: + /** + * Should we URL-encode cookies when making a request. + * Based on RFC6265, it is recommended but not mandatory to encode cookies. + * + * ------- + * To maximize compatibility with user agents, servers that wish to + * store arbitrary data in a cookie-value SHOULD encode that data, for + * example, using Base64 [RFC4648]. + * ------- + * Source: RFC6265 (https://www.ietf.org/rfc/rfc6265.txt) + **/ + bool encode{true}; + + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Cookies(bool p_encode = true) : encode{p_encode} {}; + Cookies(const std::initializer_list& cookies, bool p_encode = true) : encode{p_encode}, cookies_{cookies} {}; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Cookies(const cpr::Cookie& cookie, bool p_encode = true) : encode{p_encode}, cookies_{cookie} {}; + + cpr::Cookie& operator[](size_t pos); + const std::string GetEncoded(const CurlHolder& holder) const; + + using iterator = std::vector::iterator; + using const_iterator = std::vector::const_iterator; + + iterator begin(); + iterator end(); + const_iterator begin() const; + const_iterator end() const; + const_iterator cbegin() const; + const_iterator cend() const; + void emplace_back(const Cookie& str); + void push_back(const Cookie& str); + void pop_back(); + + private: + std::vector cookies_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cpr.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cpr.h new file mode 100644 index 0000000..fbad172 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cpr.h @@ -0,0 +1,46 @@ +#ifndef CPR_CPR_H +#define CPR_CPR_H + +#include "cpr/api.h" +#include "cpr/auth.h" +#include "cpr/bearer.h" +#include "cpr/callback.h" +#include "cpr/cert_info.h" +#include "cpr/connect_timeout.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/cprver.h" +#include "cpr/curl_container.h" +#include "cpr/curlholder.h" +#include "cpr/error.h" +#include "cpr/http_version.h" +#include "cpr/interceptor.h" +#include "cpr/interface.h" +#include "cpr/limit_rate.h" +#include "cpr/local_port.h" +#include "cpr/local_port_range.h" +#include "cpr/low_speed.h" +#include "cpr/multipart.h" +#include "cpr/multiperform.h" +#include "cpr/parameters.h" +#include "cpr/payload.h" +#include "cpr/proxies.h" +#include "cpr/proxyauth.h" +#include "cpr/range.h" +#include "cpr/redirect.h" +#include "cpr/reserve_size.h" +#include "cpr/resolve.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include "cpr/ssl_ctx.h" +#include "cpr/ssl_options.h" +#include "cpr/status_codes.h" +#include "cpr/timeout.h" +#include "cpr/unix_socket.h" +#include "cpr/user_agent.h" +#include "cpr/util.h" +#include "cpr/verbose.h" + +#define CPR_LIBCURL_VERSION_NUM LIBCURL_VERSION_NUM + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cprtypes.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cprtypes.h new file mode 100644 index 0000000..65da738 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cprtypes.h @@ -0,0 +1,144 @@ +#ifndef CPR_CPR_TYPES_H +#define CPR_CPR_TYPES_H + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace cpr { + +/** + * Wrapper around "curl_off_t" to prevent applications from having to link against libcurl. + **/ +using cpr_off_t = curl_off_t; + +/** + * The argument type for progress functions, dependent on libcurl version + **/ +#if LIBCURL_VERSION_NUM < 0x072000 +using cpr_pf_arg_t = double; +#else +using cpr_pf_arg_t = cpr_off_t; +#endif + +template +class StringHolder { + public: + StringHolder() = default; + explicit StringHolder(std::string str) : str_(std::move(str)) {} + explicit StringHolder(std::string_view str) : str_(str) {} + explicit StringHolder(const char* str) : str_(str) {} + StringHolder(const char* str, size_t len) : str_(str, len) {} + StringHolder(const std::initializer_list args) { + str_ = std::accumulate(args.begin(), args.end(), str_); + } + StringHolder(const StringHolder& other) = default; + StringHolder(StringHolder&& old) noexcept = default; + virtual ~StringHolder() = default; + + StringHolder& operator=(StringHolder&& old) noexcept = default; + + StringHolder& operator=(const StringHolder& other) = default; + + explicit operator std::string() const { + return str_; + } + + T operator+(const char* rhs) const { + return T(str_ + rhs); + } + + T operator+(const std::string& rhs) const { + return T(str_ + rhs); + } + + T operator+(const StringHolder& rhs) const { + return T(str_ + rhs.str_); + } + + void operator+=(const char* rhs) { + str_ += rhs; + } + void operator+=(const std::string& rhs) { + str_ += rhs; + } + void operator+=(const StringHolder& rhs) { + str_ += rhs; + } + + bool operator==(const char* rhs) const { + return str_ == rhs; + } + bool operator==(const std::string& rhs) const { + return str_ == rhs; + } + bool operator==(const StringHolder& rhs) const { + return str_ == rhs.str_; + } + + bool operator!=(const char* rhs) const { + return str_.c_str() != rhs; + } + bool operator!=(const std::string& rhs) const { + return str_ != rhs; + } + bool operator!=(const StringHolder& rhs) const { + return str_ != rhs.str_; + } + + const std::string& str() { + return str_; + } + const std::string& str() const { + return str_; + } + const char* c_str() const { + return str_.c_str(); + } + const char* data() const { + return str_.data(); + } + + protected: + std::string str_{}; +}; + +template +std::ostream& operator<<(std::ostream& os, const StringHolder& s) { + os << s.str(); + return os; +} + +class Url : public StringHolder { + public: + Url() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Url(std::string url) : StringHolder(std::move(url)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Url(std::string_view url) : StringHolder(url) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Url(const char* url) : StringHolder(url) {} + Url(const char* str, size_t len) : StringHolder(std::string(str, len)) {} + Url(const std::initializer_list args) : StringHolder(args) {} + Url(const Url& other) = default; + Url(Url&& old) noexcept = default; + ~Url() override = default; + + Url& operator=(Url&& old) noexcept = default; + Url& operator=(const Url& other) = default; +}; + +struct CaseInsensitiveCompare { + bool operator()(const std::string& a, const std::string& b) const noexcept; +}; + +using Header = std::map; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cprver.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cprver.h new file mode 100644 index 0000000..aaa4f9f --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/cprver.h @@ -0,0 +1,30 @@ +#ifndef CPR_CPRVER_H +#define CPR_CPRVER_H + +/** + * CPR version as a string. + **/ +#define CPR_VERSION "1.10.5" + +/** + * CPR version split up into parts. + **/ +#define CPR_VERSION_MAJOR 1 +#define CPR_VERSION_MINOR 10 +#define CPR_VERSION_PATCH 5 + +/** + * CPR version as a single hex digit. + * it can be split up into three parts: + * 0xAABBCC + * AA: The current CPR major version number in a hex format. + * BB: The current CPR minor version number in a hex format. + * CC: The current CPR patch version number in a hex format. + * + * Examples: + * '0x010702' -> 01.07.02 -> CPR_VERSION: 1.7.2 + * '0xA13722' -> A1.37.22 -> CPR_VERSION: 161.55.34 + **/ +#define CPR_VERSION_NUM 0x10a05 + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/curl_container.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/curl_container.h new file mode 100644 index 0000000..c2409b2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/curl_container.h @@ -0,0 +1,51 @@ +#ifndef CURL_CONTAINER_H +#define CURL_CONTAINER_H + +#include +#include +#include +#include + +#include "cpr/curlholder.h" + + +namespace cpr { + +struct Parameter { + Parameter(std::string p_key, std::string p_value) : key{std::move(p_key)}, value{std::move(p_value)} {} + + std::string key; + std::string value; +}; + +struct Pair { + Pair(std::string p_key, std::string p_value) : key(std::move(p_key)), value(std::move(p_value)) {} + + std::string key; + std::string value; +}; + + +template +class CurlContainer { + public: + /** + * Enables or disables URL encoding for keys and values when calling GetContent(...). + **/ + bool encode = true; + + CurlContainer() = default; + CurlContainer(const std::initializer_list&); + + void Add(const std::initializer_list&); + void Add(const T&); + + const std::string GetContent(const CurlHolder&) const; + + protected: + std::vector containerList_; +}; + +} // namespace cpr + +#endif // diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/curlholder.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/curlholder.h new file mode 100644 index 0000000..a9e1dc8 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/curlholder.h @@ -0,0 +1,54 @@ +#ifndef CPR_CURL_HOLDER_H +#define CPR_CURL_HOLDER_H + +#include +#include +#include + +#include + +namespace cpr { +struct CurlHolder { + private: + /** + * Mutex for curl_easy_init(). + * curl_easy_init() is not thread save. + * References: + * https://curl.haxx.se/libcurl/c/curl_easy_init.html + * https://curl.haxx.se/libcurl/c/threadsafe.html + **/ + + // Avoids initalization order problems in a static build + static std::mutex& curl_easy_init_mutex_() { + static std::mutex curl_easy_init_mutex_; + return curl_easy_init_mutex_; + } + + public: + CURL* handle{nullptr}; + struct curl_slist* chunk{nullptr}; + struct curl_slist* resolveCurlList{nullptr}; + curl_mime* multipart{nullptr}; + std::array error{}; + + CurlHolder(); + CurlHolder(const CurlHolder& other) = default; + CurlHolder(CurlHolder&& old) noexcept = default; + ~CurlHolder(); + + CurlHolder& operator=(CurlHolder&& old) noexcept = default; + CurlHolder& operator=(const CurlHolder& other) = default; + + /** + * Uses curl_easy_escape(...) for escaping the given string. + **/ + std::string urlEncode(const std::string& s) const; + + /** + * Uses curl_easy_unescape(...) for unescaping the given string. + **/ + std::string urlDecode(const std::string& s) const; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/curlmultiholder.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/curlmultiholder.h new file mode 100644 index 0000000..ccd504b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/curlmultiholder.h @@ -0,0 +1,18 @@ +#ifndef CPR_CURLMULTIHOLDER_H +#define CPR_CURLMULTIHOLDER_H + +#include + +namespace cpr { + +class CurlMultiHolder { + public: + CurlMultiHolder(); + ~CurlMultiHolder(); + + CURLM* handle{nullptr}; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/error.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/error.h new file mode 100644 index 0000000..bb59a4c --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/error.h @@ -0,0 +1,53 @@ +#ifndef CPR_ERROR_H +#define CPR_ERROR_H + +#include +#include + +#include "cpr/cprtypes.h" +#include + +namespace cpr { + +enum class ErrorCode { + OK = 0, + CONNECTION_FAILURE, + EMPTY_RESPONSE, + HOST_RESOLUTION_FAILURE, + INTERNAL_ERROR, + INVALID_URL_FORMAT, + NETWORK_RECEIVE_ERROR, + NETWORK_SEND_FAILURE, + OPERATION_TIMEDOUT, + PROXY_RESOLUTION_FAILURE, + SSL_CONNECT_ERROR, + SSL_LOCAL_CERTIFICATE_ERROR, + SSL_REMOTE_CERTIFICATE_ERROR, + SSL_CACERT_ERROR, + GENERIC_SSL_ERROR, + UNSUPPORTED_PROTOCOL, + REQUEST_CANCELLED, + TOO_MANY_REDIRECTS, + UNKNOWN_ERROR = 1000, +}; + +class Error { + public: + ErrorCode code = ErrorCode::OK; + std::string message{}; + + Error() = default; + + Error(const std::int32_t& curl_code, std::string&& p_error_message) : code{getErrorCodeForCurlError(curl_code)}, message(std::move(p_error_message)) {} + + explicit operator bool() const { + return code != ErrorCode::OK; + } + + private: + static ErrorCode getErrorCodeForCurlError(std::int32_t curl_code); +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/file.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/file.h new file mode 100644 index 0000000..b39914a --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/file.h @@ -0,0 +1,59 @@ +#ifndef CPR_FILE_H +#define CPR_FILE_H + +#include +#include +#include + +#include + +namespace cpr { + +struct File { + explicit File(std::string p_filepath, const std::string& p_overriden_filename = {}) : filepath(std::move(p_filepath)), overriden_filename(p_overriden_filename) {} + + std::string filepath; + std::string overriden_filename; + + [[nodiscard]] bool hasOverridenFilename() const noexcept { + return !overriden_filename.empty(); + }; +}; + +class Files { + public: + Files() = default; + // NOLINTNEXTLINE(google-explicit-constructor) + Files(const File& p_file) : files{p_file} {}; + + Files(const Files& other) = default; + Files(Files&& old) noexcept = default; + + Files(const std::initializer_list& p_files) : files{p_files} {}; + Files(const std::initializer_list& p_filepaths); + + ~Files() noexcept = default; + + Files& operator=(const Files& other); + Files& operator=(Files&& old) noexcept; + + using iterator = std::vector::iterator; + using const_iterator = std::vector::const_iterator; + + iterator begin(); + iterator end(); + [[nodiscard]] const_iterator begin() const; + [[nodiscard]] const_iterator end() const; + [[nodiscard]] const_iterator cbegin() const; + [[nodiscard]] const_iterator cend() const; + void emplace_back(const File& file); + void push_back(const File& file); + void pop_back(); + + private: + std::vector files; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/filesystem.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/filesystem.h new file mode 100644 index 0000000..f296770 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/filesystem.h @@ -0,0 +1,26 @@ +#ifndef CPR_FILESYSTEM_H +#define CPR_FILESYSTEM_H + +// Include filesystem into the namespace "fs" from either "filesystem" or "experimental/filesystem" or "boost/filesystem" +#ifdef CPR_USE_BOOST_FILESYSTEM +#define BOOST_FILESYSTEM_VERSION 4 // Use the latest, with the closest behavior to std::filesystem. +#include +namespace cpr { +namespace fs = boost::filesystem; +} +// cppcheck-suppress preprocessorErrorDirective +#elif __has_include() +#include +namespace cpr { +namespace fs = std::filesystem; +} +#elif __has_include("experimental/filesystem") +#include +namespace cpr { +namespace fs = std::experimental::filesystem; +} +#else +#error "Failed to include header!" +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/http_version.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/http_version.h new file mode 100644 index 0000000..45b5028 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/http_version.h @@ -0,0 +1,67 @@ +#ifndef CPR_HTTP_VERSION_H +#define CPR_HTTP_VERSION_H + +#include + +namespace cpr { +enum class HttpVersionCode { + /** + * Let libcurl decide which version is the best. + **/ + VERSION_NONE, + /** + * Enforce HTTP 1.0 requests. + **/ + VERSION_1_0, + /** + * Enforce HTTP 1.1 requests. + **/ + VERSION_1_1, +#if LIBCURL_VERSION_NUM >= 0x072100 // 7.33.0 + /** + * Attempt HTTP 2.0 requests. + * Fallback to HTTP 1.1 if negotiation fails. + **/ + VERSION_2_0, +#endif +#if LIBCURL_VERSION_NUM >= 0x072F00 // 7.47.0 + /** + * Attempt HTTP 2.0 for HTTPS requests only. + * Fallback to HTTP 1.1 if negotiation fails. + * HTTP 1.1 will be used for HTTP connections. + **/ + VERSION_2_0_TLS, +#endif +#if LIBCURL_VERSION_NUM >= 0x073100 // 7.49.0 + /** + * Start HTTP 2.0 for HTTP requests. + * Requires prior knowledge that the server supports HTTP 2.0. + * For HTTPS requests we will negotiate the protocol version in the TLS handshake. + **/ + VERSION_2_0_PRIOR_KNOWLEDGE, +#endif +#if LIBCURL_VERSION_NUM >= 0x074200 // 7.66.0 + /** + * Attempt HTTP 3.0 requests. + * Requires prior knowledge that the server supports HTTP 3.0 since there is no gracefully downgrade. + * Fallback to HTTP 1.1 if negotiation fails. + **/ + VERSION_3_0 +#endif +}; + +class HttpVersion { + public: + /** + * The HTTP version that should be used by libcurl when initiating a HTTP(S) connection. + * Default: HttpVersionCode::VERSION_NONE + **/ + HttpVersionCode code = HttpVersionCode::VERSION_NONE; + + HttpVersion() = default; + explicit HttpVersion(HttpVersionCode _code) : code(_code) {} +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/interceptor.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/interceptor.h new file mode 100644 index 0000000..34cfe50 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/interceptor.h @@ -0,0 +1,74 @@ +#ifndef CPR_INTERCEPTOR_H +#define CPR_INTERCEPTOR_H + +#include "cpr/multiperform.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include + +namespace cpr { +class Interceptor { + public: + enum class ProceedHttpMethod { + GET_REQUEST = 0, + POST_REQUEST, + PUT_REQUEST, + DELETE_REQUEST, + PATCH_REQUEST, + HEAD_REQUEST, + OPTIONS_REQUEST, + DOWNLOAD_CALLBACK_REQUEST, + DOWNLOAD_FILE_REQUEST, + }; + + Interceptor() = default; + Interceptor(const Interceptor& other) = default; + Interceptor(Interceptor&& old) = default; + virtual ~Interceptor() = default; + + Interceptor& operator=(const Interceptor& other) = default; + Interceptor& operator=(Interceptor&& old) = default; + + virtual Response intercept(Session& session) = 0; + + protected: + static Response proceed(Session& session); + static Response proceed(Session& session, ProceedHttpMethod httpMethod); + static Response proceed(Session& session, ProceedHttpMethod httpMethod, std::ofstream& file); + static Response proceed(Session& session, ProceedHttpMethod httpMethod, const WriteCallback& write); +}; + +class InterceptorMulti { + public: + enum class ProceedHttpMethod { + GET_REQUEST = 0, + POST_REQUEST, + PUT_REQUEST, + DELETE_REQUEST, + PATCH_REQUEST, + HEAD_REQUEST, + OPTIONS_REQUEST, + DOWNLOAD_CALLBACK_REQUEST, + DOWNLOAD_FILE_REQUEST, + }; + + InterceptorMulti() = default; + InterceptorMulti(const InterceptorMulti& other) = default; + InterceptorMulti(InterceptorMulti&& old) = default; + virtual ~InterceptorMulti() = default; + + InterceptorMulti& operator=(const InterceptorMulti& other) = default; + InterceptorMulti& operator=(InterceptorMulti&& old) = default; + + virtual std::vector intercept(MultiPerform& multi) = 0; + + protected: + static std::vector proceed(MultiPerform& multi); + + static void PrepareDownloadSession(MultiPerform& multi, size_t sessions_index, const WriteCallback& write); +}; + +} // namespace cpr + + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/interface.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/interface.h new file mode 100644 index 0000000..b98940e --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/interface.h @@ -0,0 +1,32 @@ +#ifndef CPR_INTERFACE_H +#define CPR_INTERFACE_H + +#include +#include + +#include "cpr/cprtypes.h" + +namespace cpr { + +class Interface : public StringHolder { + public: + Interface() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Interface(std::string iface) : StringHolder(std::move(iface)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Interface(std::string_view iface) : StringHolder(iface) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Interface(const char* iface) : StringHolder(iface) {} + Interface(const char* str, size_t len) : StringHolder(str, len) {} + Interface(const std::initializer_list args) : StringHolder(args) {} + Interface(const Interface& other) = default; + Interface(Interface&& old) noexcept = default; + ~Interface() override = default; + + Interface& operator=(Interface&& old) noexcept = default; + Interface& operator=(const Interface& other) = default; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/limit_rate.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/limit_rate.h new file mode 100644 index 0000000..2b0e8a2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/limit_rate.h @@ -0,0 +1,18 @@ +#ifndef CPR_SPEED_LIMIT_H +#define CPR_SPEED_LIMIT_H + +#include + +namespace cpr { + +class LimitRate { + public: + LimitRate(const std::int64_t p_downrate, const std::int64_t p_uprate) : downrate(p_downrate), uprate(p_uprate) {} + + std::int64_t downrate = 0; + std::int64_t uprate = 0; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/local_port.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/local_port.h new file mode 100644 index 0000000..e853425 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/local_port.h @@ -0,0 +1,23 @@ +#ifndef CPR_LOCAL_PORT_H +#define CPR_LOCAL_PORT_H + +#include + +namespace cpr { + +class LocalPort { + public: + // NOLINTNEXTLINE(google-explicit-constructor) + LocalPort(const std::uint16_t p_localport) : localport_(p_localport) {} + + operator std::uint16_t() const { + return localport_; + } + + private: + std::uint16_t localport_ = 0; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/local_port_range.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/local_port_range.h new file mode 100644 index 0000000..cc2d7e2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/local_port_range.h @@ -0,0 +1,23 @@ +#ifndef CPR_LOCAL_PORT_RANGE_H +#define CPR_LOCAL_PORT_RANGE_H + +#include + +namespace cpr { + +class LocalPortRange { + public: + // NOLINTNEXTLINE(google-explicit-constructor) + LocalPortRange(const std::uint16_t p_localportrange) : localportrange_(p_localportrange) {} + + operator std::uint16_t() const { + return localportrange_; + } + + private: + std::uint16_t localportrange_ = 0; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/low_speed.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/low_speed.h new file mode 100644 index 0000000..ff77fd2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/low_speed.h @@ -0,0 +1,18 @@ +#ifndef CPR_LOW_SPEED_H +#define CPR_LOW_SPEED_H + +#include + +namespace cpr { + +class LowSpeed { + public: + LowSpeed(const std::int32_t p_limit, const std::int32_t p_time) : limit(p_limit), time(p_time) {} + + std::int32_t limit; + std::int32_t time; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/multipart.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/multipart.h new file mode 100644 index 0000000..3eaaea7 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/multipart.h @@ -0,0 +1,43 @@ +#ifndef CPR_MULTIPART_H +#define CPR_MULTIPART_H + +#include +#include +#include +#include +#include + +#include "buffer.h" +#include "file.h" + +namespace cpr { + +struct Part { + Part(const std::string& p_name, const std::string& p_value, const std::string& p_content_type = {}) : name{p_name}, value{p_value}, content_type{p_content_type}, is_file{false}, is_buffer{false} {} + Part(const std::string& p_name, const std::int32_t& p_value, const std::string& p_content_type = {}) : name{p_name}, value{std::to_string(p_value)}, content_type{p_content_type}, is_file{false}, is_buffer{false} {} + Part(const std::string& p_name, const Files& p_files, const std::string& p_content_type = {}) : name{p_name}, content_type{p_content_type}, is_file{true}, is_buffer{false}, files{p_files} {} + Part(const std::string& p_name, Files&& p_files, const std::string& p_content_type = {}) : name{p_name}, content_type{p_content_type}, is_file{true}, is_buffer{false}, files{p_files} {} + Part(const std::string& p_name, const Buffer& buffer, const std::string& p_content_type = {}) : name{p_name}, value{buffer.filename.string()}, content_type{p_content_type}, data{buffer.data}, datalen{buffer.datalen}, is_file{false}, is_buffer{true} {} + + std::string name; + // We don't use fs::path here, as this leads to problems using windows + std::string value; + std::string content_type; + Buffer::data_t data{nullptr}; + size_t datalen{0}; + bool is_file; + bool is_buffer; + + Files files; +}; + +class Multipart { + public: + Multipart(const std::initializer_list& parts); + + std::vector parts; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/multiperform.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/multiperform.h new file mode 100644 index 0000000..d9ab978 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/multiperform.h @@ -0,0 +1,137 @@ +#ifndef CPR_MULTIPERFORM_H +#define CPR_MULTIPERFORM_H + +#include "cpr/curlmultiholder.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include +#include +#include +#include +#include + +namespace cpr { + +class InterceptorMulti; + +class MultiPerform { + public: + enum class HttpMethod { + UNDEFINED = 0, + GET_REQUEST, + POST_REQUEST, + PUT_REQUEST, + DELETE_REQUEST, + PATCH_REQUEST, + HEAD_REQUEST, + OPTIONS_REQUEST, + DOWNLOAD_REQUEST, + }; + + MultiPerform(); + MultiPerform(const MultiPerform& other) = delete; + MultiPerform(MultiPerform&& old) = default; + ~MultiPerform(); + + MultiPerform& operator=(const MultiPerform& other) = delete; + MultiPerform& operator=(MultiPerform&& old) noexcept = default; + + std::vector Get(); + std::vector Delete(); + template + std::vector Download(DownloadArgTypes... args); + std::vector Put(); + std::vector Head(); + std::vector Options(); + std::vector Patch(); + std::vector Post(); + + std::vector Perform(); + template + std::vector PerformDownload(DownloadArgTypes... args); + + void AddSession(std::shared_ptr& session, HttpMethod method = HttpMethod::UNDEFINED); + void RemoveSession(const std::shared_ptr& session); + std::vector, HttpMethod>>& GetSessions(); + [[nodiscard]] const std::vector, HttpMethod>>& GetSessions() const; + + void AddInterceptor(const std::shared_ptr& pinterceptor); + + private: + // Interceptors should be able to call the private proceed() and PrepareDownloadSessions() functions + friend InterceptorMulti; + + void SetHttpMethod(HttpMethod method); + + void PrepareSessions(); + template + void PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg, DownloadArgTypes... args); + template + void PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg); + void PrepareDownloadSession(size_t sessions_index, std::ofstream& file); + void PrepareDownloadSession(size_t sessions_index, const WriteCallback& write); + + void PrepareGet(); + void PrepareDelete(); + void PreparePut(); + void PreparePatch(); + void PrepareHead(); + void PrepareOptions(); + void PreparePost(); + template + void PrepareDownload(DownloadArgTypes... args); + + std::vector intercept(); + std::vector proceed(); + std::vector MakeRequest(); + std::vector MakeDownloadRequest(); + + void DoMultiPerform(); + std::vector ReadMultiInfo(std::function&& complete_function); + + std::vector, HttpMethod>> sessions_; + std::unique_ptr multicurl_; + bool is_download_multi_perform{false}; + + std::queue> interceptors_; +}; + +template +void MultiPerform::PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg) { + PrepareDownloadSession(sessions_index, current_arg); +} + +template +void MultiPerform::PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg, DownloadArgTypes... args) { + PrepareDownloadSession(sessions_index, current_arg); + PrepareDownloadSessions(sessions_index + 1, args...); +} + + +template +void MultiPerform::PrepareDownload(DownloadArgTypes... args) { + SetHttpMethod(HttpMethod::DOWNLOAD_REQUEST); + PrepareDownloadSessions(0, args...); +} + +template +std::vector MultiPerform::Download(DownloadArgTypes... args) { + if (sizeof...(args) != sessions_.size()) { + throw std::invalid_argument("Number of download arguments has to match the number of sessions added to the multiperform!"); + } + PrepareDownload(args...); + return MakeDownloadRequest(); +} + +template +std::vector MultiPerform::PerformDownload(DownloadArgTypes... args) { + if (sizeof...(args) != sessions_.size()) { + throw std::invalid_argument("Number of download arguments has to match the number of sessions added to the multiperform!"); + } + PrepareDownloadSessions(0, args...); + return MakeDownloadRequest(); +} + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/parameters.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/parameters.h new file mode 100644 index 0000000..0e34d4d --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/parameters.h @@ -0,0 +1,18 @@ +#ifndef CPR_PARAMETERS_H +#define CPR_PARAMETERS_H + +#include + +#include "cpr/curl_container.h" + +namespace cpr { + +class Parameters : public CurlContainer { + public: + Parameters() = default; + Parameters(const std::initializer_list& parameters); +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/payload.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/payload.h new file mode 100644 index 0000000..686b540 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/payload.h @@ -0,0 +1,23 @@ +#ifndef CPR_PAYLOAD_H +#define CPR_PAYLOAD_H + +#include + +#include "cpr/curl_container.h" + + +namespace cpr { +class Payload : public CurlContainer { + public: + template + Payload(const It begin, const It end) { + for (It pair = begin; pair != end; ++pair) { + Add(*pair); + } + } + Payload(const std::initializer_list& pairs); +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/proxies.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/proxies.h new file mode 100644 index 0000000..6970442 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/proxies.h @@ -0,0 +1,23 @@ +#ifndef CPR_PROXIES_H +#define CPR_PROXIES_H + +#include +#include +#include + +namespace cpr { +class Proxies { + public: + Proxies() = default; + Proxies(const std::initializer_list>& hosts); + Proxies(const std::map& hosts); + + bool has(const std::string& protocol) const; + const std::string& operator[](const std::string& protocol); + + private: + std::map hosts_; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/proxyauth.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/proxyauth.h new file mode 100644 index 0000000..7e34764 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/proxyauth.h @@ -0,0 +1,43 @@ +#ifndef CPR_PROXYAUTH_H +#define CPR_PROXYAUTH_H + +#include +#include + +#include "cpr/auth.h" +#include "cpr/util.h" + +namespace cpr { +class EncodedAuthentication { + public: + EncodedAuthentication() : auth_string_{""} {} + EncodedAuthentication(std::string username, std::string password) : auth_string_{cpr::util::urlEncode(std::move(username)) + ":" + cpr::util::urlEncode(std::move(password))} {} + EncodedAuthentication(const EncodedAuthentication& other) = default; + EncodedAuthentication(EncodedAuthentication&& old) noexcept = default; + virtual ~EncodedAuthentication() noexcept; + + EncodedAuthentication& operator=(EncodedAuthentication&& old) noexcept = default; + EncodedAuthentication& operator=(const EncodedAuthentication& other) = default; + + const char* GetAuthString() const noexcept; + + protected: + std::string auth_string_; +}; + +class ProxyAuthentication { + public: + ProxyAuthentication() = default; + ProxyAuthentication(const std::initializer_list>& auths) : proxyAuth_{auths} {} + ProxyAuthentication(const std::map& auths) : proxyAuth_{auths} {} + + bool has(const std::string& protocol) const; + const char* operator[](const std::string& protocol); + + private: + std::map proxyAuth_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/range.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/range.h new file mode 100644 index 0000000..2c5a145 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/range.h @@ -0,0 +1,44 @@ +#ifndef CPR_RANGE_H +#define CPR_RANGE_H + +#include +#include + +namespace cpr { + +class Range { + public: + Range(const std::optional p_resume_from = std::nullopt, const std::optional p_finish_at = std::nullopt) { + resume_from = p_resume_from.value_or(0); + finish_at = p_finish_at.value_or(-1); + } + + std::int64_t resume_from; + std::int64_t finish_at; + + const std::string str() const { + std::string from_str = (resume_from < 0U) ? "" : std::to_string(resume_from); + std::string to_str = (finish_at < 0U) ? "" : std::to_string(finish_at); + return from_str + "-" + to_str; + } +}; + +class MultiRange { + public: + MultiRange(std::initializer_list rs) : ranges{rs} {} + + const std::string str() const { + std::string multi_range_string{}; + for (Range range : ranges) { + multi_range_string += ((multi_range_string.empty()) ? "" : ", ") + range.str(); + } + return multi_range_string; + } + + private: + std::vector ranges; +}; // namespace cpr + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/redirect.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/redirect.h new file mode 100644 index 0000000..32b4372 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/redirect.h @@ -0,0 +1,84 @@ +#ifndef CPR_REDIRECT_H +#define CPR_REDIRECT_H + +#include + +namespace cpr { +enum class PostRedirectFlags : uint8_t { + /** + * Respect RFC 7231 (section 6.4.2 to 6.4.4). + * Same as CURL_REDIR_POST_301 (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_301 = 0x1 << 0, + /** + * Maintain the request method after a 302 redirect. + * Same as CURL_REDIR_POST_302 (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_302 = 0x1 << 1, + /** + * Maintain the request method after a 303 redirect. + * Same as CURL_REDIR_POST_303 (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_303 = 0x1 << 2, + /** + * Default value. + * Convenience option to enable all flags. + * Same as CURL_REDIR_POST_ALL (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_ALL = POST_301 | POST_302 | POST_303, + /** + * * Convenience option to disable all flags. + **/ + NONE = 0x0 +}; + +PostRedirectFlags operator|(PostRedirectFlags lhs, PostRedirectFlags rhs); +PostRedirectFlags operator&(PostRedirectFlags lhs, PostRedirectFlags rhs); +PostRedirectFlags operator^(PostRedirectFlags lhs, PostRedirectFlags rhs); +PostRedirectFlags operator~(PostRedirectFlags flag); +PostRedirectFlags& operator|=(PostRedirectFlags& lhs, PostRedirectFlags rhs); +PostRedirectFlags& operator&=(PostRedirectFlags& lhs, PostRedirectFlags rhs); +PostRedirectFlags& operator^=(PostRedirectFlags& lhs, PostRedirectFlags rhs); +bool any(PostRedirectFlags flag); + +class Redirect { + public: + /** + * The maximum number of redirects to follow. + * 0: Refuse any redirects. + * -1: Infinite number of redirects. + * Default: 50 + * https://curl.se/libcurl/c/CURLOPT_MAXREDIRS.html + **/ + // NOLINTNEXTLINE (google-runtime-int) + long maximum{50L}; + /** + * Follow 3xx redirects. + * Default: true + * https://curl.se/libcurl/c/CURLOPT_FOLLOWLOCATION.html + **/ + bool follow{true}; + /** + * Continue to send authentication (user+password) credentials when following locations, even when hostname changed. + * Default: false + * https://curl.se/libcurl/c/CURLOPT_UNRESTRICTED_AUTH.html + **/ + bool cont_send_cred{false}; + /** + * Flags to control how to act after a redirect for a post request. + * Default: POST_ALL + **/ + PostRedirectFlags post_flags{PostRedirectFlags::POST_ALL}; + + Redirect() = default; + // NOLINTNEXTLINE (google-runtime-int) + Redirect(long p_maximum, bool p_follow, bool p_cont_send_cred, PostRedirectFlags p_post_flags) : maximum(p_maximum), follow(p_follow), cont_send_cred(p_cont_send_cred), post_flags(p_post_flags){}; + // NOLINTNEXTLINE (google-runtime-int) + explicit Redirect(long p_maximum) : maximum(p_maximum){}; + explicit Redirect(bool p_follow) : follow(p_follow){}; + Redirect(bool p_follow, bool p_cont_send_cred) : follow(p_follow), cont_send_cred(p_cont_send_cred){}; + explicit Redirect(PostRedirectFlags p_post_flags) : post_flags(p_post_flags){}; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/reserve_size.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/reserve_size.h new file mode 100644 index 0000000..5eae4c8 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/reserve_size.h @@ -0,0 +1,17 @@ +#ifndef CPR_RESERVE_SIZE_H +#define CPR_RESERVE_SIZE_H + +#include + +namespace cpr { + +class ReserveSize { + public: + ReserveSize(const size_t _size) : size(_size) {} + + size_t size = 0; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/resolve.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/resolve.h new file mode 100644 index 0000000..86a7c89 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/resolve.h @@ -0,0 +1,23 @@ +#ifndef CPR_RESOLVE_H +#define CPR_RESOLVE_H + +#include +#include + +namespace cpr { + class Resolve { + public: + std::string host; + std::string addr; + std::set ports; + + Resolve(const std::string& host_param, const std::string& addr_param, const std::set& ports_param = std::set{80U, 443U}): host(host_param), addr(addr_param), ports(ports_param) { + if (this->ports.empty()) { + this->ports.insert(80U); + this->ports.insert(443U); + } + } + }; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/response.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/response.h new file mode 100644 index 0000000..5c296da --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/response.h @@ -0,0 +1,58 @@ +#ifndef CPR_RESPONSE_H +#define CPR_RESPONSE_H + +#include +#include +#include +#include +#include +#include + +#include "cpr/cert_info.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/error.h" +#include "cpr/ssl_options.h" +#include "cpr/util.h" + +namespace cpr { + +class MultiPerform; + +class Response { + private: + friend MultiPerform; + std::shared_ptr curl_{nullptr}; + + public: + // Ignored here since libcurl uses a long for this. + // NOLINTNEXTLINE(google-runtime-int) + long status_code{}; + std::string text{}; + Header header{}; + Url url{}; + double elapsed{}; + Cookies cookies{}; + Error error{}; + std::string raw_header{}; + std::string status_line{}; + std::string reason{}; + cpr_off_t uploaded_bytes{}; + cpr_off_t downloaded_bytes{}; + // Ignored here since libcurl uses a long for this. + // NOLINTNEXTLINE(google-runtime-int) + long redirect_count{}; + + Response() = default; + Response(std::shared_ptr curl, std::string&& p_text, std::string&& p_header_string, Cookies&& p_cookies, Error&& p_error); + std::vector GetCertInfos(); + Response(const Response& other) = default; + Response(Response&& old) noexcept = default; + ~Response() noexcept = default; + + Response& operator=(Response&& old) noexcept = default; + Response& operator=(const Response& other) = default; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/session.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/session.h new file mode 100644 index 0000000..6b2b93e --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/session.h @@ -0,0 +1,308 @@ +#ifndef CPR_SESSION_H +#define CPR_SESSION_H + +#include +#include +#include +#include +#include +#include + +#include "cpr/accept_encoding.h" +#include "cpr/async_wrapper.h" +#include "cpr/auth.h" +#include "cpr/bearer.h" +#include "cpr/body.h" +#include "cpr/callback.h" +#include "cpr/connect_timeout.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/curlholder.h" +#include "cpr/http_version.h" +#include "cpr/interface.h" +#include "cpr/limit_rate.h" +#include "cpr/local_port.h" +#include "cpr/local_port_range.h" +#include "cpr/low_speed.h" +#include "cpr/multipart.h" +#include "cpr/parameters.h" +#include "cpr/payload.h" +#include "cpr/proxies.h" +#include "cpr/proxyauth.h" +#include "cpr/range.h" +#include "cpr/redirect.h" +#include "cpr/reserve_size.h" +#include "cpr/resolve.h" +#include "cpr/response.h" +#include "cpr/ssl_options.h" +#include "cpr/timeout.h" +#include "cpr/unix_socket.h" +#include "cpr/user_agent.h" +#include "cpr/util.h" +#include "cpr/verbose.h" + +namespace cpr { + +using AsyncResponse = AsyncWrapper; + +class Interceptor; +class MultiPerform; + +class Session : public std::enable_shared_from_this { + public: + Session(); + Session(const Session& other) = delete; + Session(Session&& old) = default; + + ~Session() = default; + + Session& operator=(Session&& old) noexcept = default; + Session& operator=(const Session& other) = delete; + + void SetUrl(const Url& url); + void SetParameters(const Parameters& parameters); + void SetParameters(Parameters&& parameters); + void SetHeader(const Header& header); + void UpdateHeader(const Header& header); + void SetTimeout(const Timeout& timeout); + void SetConnectTimeout(const ConnectTimeout& timeout); + void SetAuth(const Authentication& auth); +// Only supported with libcurl >= 7.61.0. +// As an alternative use SetHeader and add the token manually. +#if LIBCURL_VERSION_NUM >= 0x073D00 + void SetBearer(const Bearer& token); +#endif + void SetUserAgent(const UserAgent& ua); + void SetPayload(Payload&& payload); + void SetPayload(const Payload& payload); + void SetProxies(Proxies&& proxies); + void SetProxies(const Proxies& proxies); + void SetProxyAuth(ProxyAuthentication&& proxy_auth); + void SetProxyAuth(const ProxyAuthentication& proxy_auth); + void SetMultipart(Multipart&& multipart); + void SetMultipart(const Multipart& multipart); + void SetRedirect(const Redirect& redirect); + void SetCookies(const Cookies& cookies); + void SetBody(Body&& body); + void SetBody(const Body& body); + void SetLowSpeed(const LowSpeed& low_speed); + void SetVerifySsl(const VerifySsl& verify); + void SetUnixSocket(const UnixSocket& unix_socket); + void SetSslOptions(const SslOptions& options); + void SetReadCallback(const ReadCallback& read); + void SetHeaderCallback(const HeaderCallback& header); + void SetWriteCallback(const WriteCallback& write); + void SetProgressCallback(const ProgressCallback& progress); + void SetDebugCallback(const DebugCallback& debug); + void SetVerbose(const Verbose& verbose); + void SetInterface(const Interface& iface); + void SetLocalPort(const LocalPort& local_port); + void SetLocalPortRange(const LocalPortRange& local_port_range); + void SetHttpVersion(const HttpVersion& version); + void SetRange(const Range& range); + void SetResolve(const Resolve& resolve); + void SetResolves(const std::vector& resolves); + void SetMultiRange(const MultiRange& multi_range); + void SetReserveSize(const ReserveSize& reserve_size); + void SetAcceptEncoding(const AcceptEncoding& accept_encoding); + void SetAcceptEncoding(AcceptEncoding&& accept_encoding); + void SetLimitRate(const LimitRate& limit_rate); + + // For cancellable requests + void SetCancellationParam(std::shared_ptr param); + + // Used in templated functions + void SetOption(const Url& url); + void SetOption(const Parameters& parameters); + void SetOption(Parameters&& parameters); + void SetOption(const Header& header); + void SetOption(const Timeout& timeout); + void SetOption(const ConnectTimeout& timeout); + void SetOption(const Authentication& auth); +// Only supported with libcurl >= 7.61.0. +// As an alternative use SetHeader and add the token manually. +#if LIBCURL_VERSION_NUM >= 0x073D00 + void SetOption(const Bearer& auth); +#endif + void SetOption(const UserAgent& ua); + void SetOption(Payload&& payload); + void SetOption(const Payload& payload); + void SetOption(const LimitRate& limit_rate); + void SetOption(Proxies&& proxies); + void SetOption(const Proxies& proxies); + void SetOption(ProxyAuthentication&& proxy_auth); + void SetOption(const ProxyAuthentication& proxy_auth); + void SetOption(Multipart&& multipart); + void SetOption(const Multipart& multipart); + void SetOption(const Redirect& redirect); + void SetOption(const Cookies& cookies); + void SetOption(Body&& body); + void SetOption(const Body& body); + void SetOption(const ReadCallback& read); + void SetOption(const HeaderCallback& header); + void SetOption(const WriteCallback& write); + void SetOption(const ProgressCallback& progress); + void SetOption(const DebugCallback& debug); + void SetOption(const LowSpeed& low_speed); + void SetOption(const VerifySsl& verify); + void SetOption(const Verbose& verbose); + void SetOption(const UnixSocket& unix_socket); + void SetOption(const SslOptions& options); + void SetOption(const Interface& iface); + void SetOption(const LocalPort& local_port); + void SetOption(const LocalPortRange& local_port_range); + void SetOption(const HttpVersion& version); + void SetOption(const Range& range); + void SetOption(const MultiRange& multi_range); + void SetOption(const ReserveSize& reserve_size); + void SetOption(const AcceptEncoding& accept_encoding); + void SetOption(AcceptEncoding&& accept_encoding); + void SetOption(const Resolve& resolve); + void SetOption(const std::vector& resolves); + + cpr_off_t GetDownloadFileLength(); + /** + * Attempt to preallocate enough memory for specified number of characters in the response string. + * Pass 0 to disable this behavior and let the response string be allocated dynamically on demand. + * + * Example: + * cpr::Session session; + * session.SetUrl(cpr::Url{"http://xxx/file"}); + * session.ResponseStringReserve(1024 * 512); // Reserve space for at least 1024 * 512 characters + * cpr::Response r = session.Get(); + **/ + void ResponseStringReserve(size_t size); + Response Delete(); + Response Download(const WriteCallback& write); + Response Download(std::ofstream& file); + Response Get(); + Response Head(); + Response Options(); + Response Patch(); + Response Post(); + Response Put(); + + AsyncResponse GetAsync(); + AsyncResponse DeleteAsync(); + AsyncResponse DownloadAsync(const WriteCallback& write); + AsyncResponse DownloadAsync(std::ofstream& file); + AsyncResponse HeadAsync(); + AsyncResponse OptionsAsync(); + AsyncResponse PatchAsync(); + AsyncResponse PostAsync(); + AsyncResponse PutAsync(); + + template + auto GetCallback(Then then); + template + auto PostCallback(Then then); + template + auto PutCallback(Then then); + template + auto HeadCallback(Then then); + template + auto DeleteCallback(Then then); + template + auto OptionsCallback(Then then); + template + auto PatchCallback(Then then); + + std::shared_ptr GetCurlHolder(); + std::string GetFullRequestUrl(); + + void PrepareDelete(); + void PrepareGet(); + void PrepareHead(); + void PrepareOptions(); + void PreparePatch(); + void PreparePost(); + void PreparePut(); + void PrepareDownload(const WriteCallback& write); + void PrepareDownload(std::ofstream& file); + Response Complete(CURLcode curl_error); + Response CompleteDownload(CURLcode curl_error); + + void AddInterceptor(const std::shared_ptr& pinterceptor); + + private: + // Interceptors should be able to call the private proceed() function + friend Interceptor; + friend MultiPerform; + + + bool hasBodyOrPayload_{false}; + bool chunkedTransferEncoding_{false}; + std::shared_ptr curl_; + Url url_; + Parameters parameters_; + Proxies proxies_; + ProxyAuthentication proxyAuth_; + Header header_; + AcceptEncoding acceptEncoding_; + /** + * Will be set by the read callback. + * Ensures that the "Transfer-Encoding" is set to "chunked", if not overriden in header_. + **/ + ReadCallback readcb_; + HeaderCallback headercb_; + WriteCallback writecb_; + ProgressCallback progresscb_; + DebugCallback debugcb_; + CancellationCallback cancellationcb_; + + size_t response_string_reserve_size_{0}; + std::string response_string_; + std::string header_string_; + std::queue> interceptors_; + bool isUsedInMultiPerform{false}; + bool isCancellable{false}; + + Response makeDownloadRequest(); + Response makeRequest(); + Response proceed(); + Response intercept(); + void prepareCommon(); + void prepareCommonDownload(); + void SetHeaderInternal(); + std::shared_ptr GetSharedPtrFromThis(); + CURLcode DoEasyPerform(); +}; + +template +auto Session::GetCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Get()); }, std::move(then)); +} + +template +auto Session::PostCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Post()); }, std::move(then)); +} + +template +auto Session::PutCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Put()); }, std::move(then)); +} + +template +auto Session::HeadCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Head()); }, std::move(then)); +} + +template +auto Session::DeleteCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Delete()); }, std::move(then)); +} + +template +auto Session::OptionsCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Options()); }, std::move(then)); +} + +template +auto Session::PatchCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Patch()); }, std::move(then)); +} + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/singleton.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/singleton.h new file mode 100644 index 0000000..e2ea13b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/singleton.h @@ -0,0 +1,47 @@ +#ifndef CPR_SINGLETON_H +#define CPR_SINGLETON_H + +#include + +#ifndef CPR_DISABLE_COPY +#define CPR_DISABLE_COPY(Class) \ + Class(const Class&) = delete; \ + Class& operator=(const Class&) = delete; +#endif + +#ifndef CPR_SINGLETON_DECL +#define CPR_SINGLETON_DECL(Class) \ + public: \ + static Class* GetInstance(); \ + static void ExitInstance(); \ + private: \ + CPR_DISABLE_COPY(Class) \ + static Class* s_pInstance; \ + static std::mutex s_mutex; +#endif + +#ifndef CPR_SINGLETON_IMPL +#define CPR_SINGLETON_IMPL(Class) \ + Class* Class::s_pInstance = nullptr; \ + std::mutex Class::s_mutex; \ + Class* Class::GetInstance() { \ + if (s_pInstance == nullptr) { \ + s_mutex.lock(); \ + if (s_pInstance == nullptr) { \ + s_pInstance = new Class; \ + } \ + s_mutex.unlock(); \ + } \ + return s_pInstance; \ + } \ + void Class::ExitInstance() { \ + s_mutex.lock(); \ + if (s_pInstance) { \ + delete s_pInstance; \ + s_pInstance = nullptr; \ + } \ + s_mutex.unlock(); \ + } +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/ssl_ctx.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/ssl_ctx.h new file mode 100644 index 0000000..d495fb2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/ssl_ctx.h @@ -0,0 +1,26 @@ +#ifndef CPR_SSL_CTX_H +#define CPR_SSL_CTX_H + +#include "cpr/ssl_options.h" +#include + +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION + +namespace cpr { + +/** + * This callback function loads a CA certificate from raw_cert_buf and gets called by libcurl + * just before the initialization of an SSL connection. + * The raw_cert_buf argument is set with the CURLOPT_SSL_CTX_DATA option and has to be a nul + * terminated buffer. + * + * Sources: https://curl.se/libcurl/c/CURLOPT_SSL_CTX_FUNCTION.html + * https://curl.se/libcurl/c/CURLOPT_SSL_CTX_DATA.html + */ +CURLcode sslctx_function_load_ca_cert_from_buffer(CURL* curl, void* sslctx, void* raw_cert_buf); + +} // Namespace cpr + +#endif + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/ssl_options.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/ssl_options.h new file mode 100644 index 0000000..dfd38ad --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/ssl_options.h @@ -0,0 +1,622 @@ +#ifndef CPR_SSLOPTIONS_H +#define CPR_SSLOPTIONS_H + +#include +#include +#include + +#include +#include + +#include "cpr/util.h" +#include + +#define __LIBCURL_VERSION_GTE(major, minor) ((LIBCURL_VERSION_MAJOR > (major)) || ((LIBCURL_VERSION_MAJOR == (major)) && (LIBCURL_VERSION_MINOR >= (minor)))) +#define __LIBCURL_VERSION_LT(major, minor) ((LIBCURL_VERSION_MAJOR < (major)) || ((LIBCURL_VERSION_MAJOR == (major)) && (LIBCURL_VERSION_MINOR < (minor)))) + +#ifndef SUPPORT_ALPN +#define SUPPORT_ALPN __LIBCURL_VERSION_GTE(7, 36) +#endif +#ifndef SUPPORT_NPN +#define SUPPORT_NPN __LIBCURL_VERSION_GTE(7, 36) && __LIBCURL_VERSION_LT(7, 86) +#endif + +#ifndef SUPPORT_SSLv2 +#define SUPPORT_SSLv2 __LIBCURL_VERSION_LT(7, 19) +#endif +#ifndef SUPPORT_SSLv3 +#define SUPPORT_SSLv3 __LIBCURL_VERSION_LT(7, 39) +#endif +#ifndef SUPPORT_TLSv1_0 +#define SUPPORT_TLSv1_0 __LIBCURL_VERSION_GTE(7, 34) +#endif +#ifndef SUPPORT_TLSv1_1 +#define SUPPORT_TLSv1_1 __LIBCURL_VERSION_GTE(7, 34) +#endif +#ifndef SUPPORT_TLSv1_2 +#define SUPPORT_TLSv1_2 __LIBCURL_VERSION_GTE(7, 34) +#endif +#ifndef SUPPORT_TLSv1_3 +#define SUPPORT_TLSv1_3 __LIBCURL_VERSION_GTE(7, 52) +#endif +#ifndef SUPPORT_MAX_TLS_VERSION +#define SUPPORT_MAX_TLS_VERSION __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_MAX_TLSv1_1 +#define SUPPORT_MAX_TLSv1_1 __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_MAX_TLSv1_2 +#define SUPPORT_MAX_TLSv1_2 __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_MAX_TLSv1_3 +#define SUPPORT_MAX_TLSv1_3 __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_TLSv13_CIPHERS +#define SUPPORT_TLSv13_CIPHERS __LIBCURL_VERSION_GTE(7, 61) +#endif +#ifndef SUPPORT_SESSIONID_CACHE +#define SUPPORT_SESSIONID_CACHE __LIBCURL_VERSION_GTE(7, 16) +#endif +#ifndef SUPPORT_SSL_FALSESTART +#define SUPPORT_SSL_FALSESTART __LIBCURL_VERSION_GTE(7, 42) +#endif +#ifndef SUPPORT_SSL_NO_REVOKE +#define SUPPORT_SSL_NO_REVOKE __LIBCURL_VERSION_GTE(7, 44) +#endif +#ifndef SUPPORT_CURLOPT_SSLKEY_BLOB +#define SUPPORT_CURLOPT_SSLKEY_BLOB __LIBCURL_VERSION_GTE(7, 71) +#endif +#ifndef SUPPORT_CURLOPT_SSL_CTX_FUNCTION +#define SUPPORT_CURLOPT_SSL_CTX_FUNCTION __LIBCURL_VERSION_GTE(7, 11) +#endif + +namespace cpr { + +class VerifySsl { + public: + VerifySsl() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifySsl(bool p_verify) : verify(p_verify) {} + + explicit operator bool() const { + return verify; + } + + bool verify = true; +}; + +namespace ssl { + +// set SSL client certificate +class CertFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CertFile(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + virtual ~CertFile() = default; + + const fs::path filename; + + virtual const char* GetCertType() const { + return "PEM"; + } +}; + +using PemCert = CertFile; + +class DerCert : public CertFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + DerCert(fs::path&& p_filename) : CertFile(std::move(p_filename)) {} + + virtual ~DerCert() = default; + + const char* GetCertType() const override { + return "DER"; + } +}; + +// specify private keyfile for TLS and SSL client cert +class KeyFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + KeyFile(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + template + KeyFile(FileType&& p_filename, PassType p_password) : filename(std::forward(p_filename)), password(std::move(p_password)) {} + + virtual ~KeyFile() { + util::secureStringClear(password); + } + + fs::path filename; + std::string password; + + virtual const char* GetKeyType() const { + return "PEM"; + } +}; + +#if SUPPORT_CURLOPT_SSLKEY_BLOB +class KeyBlob { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + KeyBlob(std::string&& p_blob) : blob(std::move(p_blob)) {} + + template + KeyBlob(BlobType&& p_blob, PassType p_password) : blob(std::forward(p_blob)), password(std::move(p_password)) {} + + virtual ~KeyBlob() { + util::secureStringClear(password); + } + + std::string blob; + std::string password; + + virtual const char* GetKeyType() const { + return "PEM"; + } +}; +#endif + +using PemKey = KeyFile; + +class DerKey : public KeyFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + DerKey(fs::path&& p_filename) : KeyFile(std::move(p_filename)) {} + + template + DerKey(FileType&& p_filename, PassType p_password) : KeyFile(std::forward(p_filename), std::move(p_password)) {} + + virtual ~DerKey() = default; + + const char* GetKeyType() const override { + return "DER"; + } +}; + +class PinnedPublicKey { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + PinnedPublicKey(std::string&& p_pinned_public_key) : pinned_public_key(std::move(p_pinned_public_key)) {} + + const std::string pinned_public_key; +}; + +#if SUPPORT_ALPN +// This option enables/disables ALPN in the SSL handshake (if the SSL backend libcurl is built to +// use supports it), which can be used to negotiate http2. +class ALPN { + public: + ALPN() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ALPN(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; +#endif // SUPPORT_ALPN + +#if SUPPORT_NPN +// This option enables/disables NPN in the SSL handshake (if the SSL backend libcurl is built to +// use supports it), which can be used to negotiate http2. +class NPN { + public: + NPN() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + NPN(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; +#endif // SUPPORT_NPN + +// This option determines whether libcurl verifies that the server cert is for the server it is +// known as. +class VerifyHost { + public: + VerifyHost() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifyHost(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; + +// This option determines whether libcurl verifies the authenticity of the peer's certificate. +class VerifyPeer { + public: + VerifyPeer() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifyPeer(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; + +// This option determines whether libcurl verifies the status of the server cert using the +// "Certificate Status Request" TLS extension (aka. OCSP stapling). +class VerifyStatus { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifyStatus(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = false; +}; + +// TLS v1.0 or later +struct TLSv1 {}; +#if SUPPORT_SSLv2 +// SSL v2 (but not SSLv3) +struct SSLv2 {}; +#endif +#if SUPPORT_SSLv3 +// SSL v3 (but not SSLv2) +struct SSLv3 {}; +#endif +#if SUPPORT_TLSv1_0 +// TLS v1.0 or later (Added in 7.34.0) +struct TLSv1_0 {}; +#endif +#if SUPPORT_TLSv1_1 +// TLS v1.1 or later (Added in 7.34.0) +struct TLSv1_1 {}; +#endif +#if SUPPORT_TLSv1_2 +// TLS v1.2 or later (Added in 7.34.0) +struct TLSv1_2 {}; +#endif +#if SUPPORT_TLSv1_3 +// TLS v1.3 or later (Added in 7.52.0) +struct TLSv1_3 {}; +#endif +#if SUPPORT_MAX_TLS_VERSION +// The flag defines the maximum supported TLS version by libcurl, or the default value from the SSL +// library is used. +struct MaxTLSVersion {}; +#endif +#if SUPPORT_MAX_TLSv1_0 +// The flag defines maximum supported TLS version as TLSv1.0. (Added in 7.54.0) +struct MaxTLSv1_0 {}; +#endif +#if SUPPORT_MAX_TLSv1_1 +// The flag defines maximum supported TLS version as TLSv1.1. (Added in 7.54.0) +struct MaxTLSv1_1 {}; +#endif +#if SUPPORT_MAX_TLSv1_2 +// The flag defines maximum supported TLS version as TLSv1.2. (Added in 7.54.0) +struct MaxTLSv1_2 {}; +#endif +#if SUPPORT_MAX_TLSv1_3 +// The flag defines maximum supported TLS version as TLSv1.3. (Added in 7.54.0) +struct MaxTLSv1_3 {}; +#endif + +// path to Certificate Authority (CA) bundle +class CaInfo { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CaInfo(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + fs::path filename; +}; + +// specify directory holding CA certificates +class CaPath { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CaPath(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + fs::path filename; +}; + +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION +class CaBuffer { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CaBuffer(std::string&& p_buffer) : buffer(std::move(p_buffer)) {} + + const std::string buffer; +}; +#endif + +// specify a Certificate Revocation List file +class Crl { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Crl(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + fs::path filename; +}; + +// specify ciphers to use for TLS +class Ciphers { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Ciphers(std::string&& p_ciphers) : ciphers(std::move(p_ciphers)) {} + + std::string ciphers; +}; + +#if SUPPORT_TLSv13_CIPHERS +// specify ciphers suites to use for TLS 1.3 +class TLS13_Ciphers { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + TLS13_Ciphers(std::string&& p_ciphers) : ciphers(std::move(p_ciphers)) {} + + std::string ciphers; +}; +#endif + +#if SUPPORT_SESSIONID_CACHE +// enable/disable use of the SSL session-ID cache +class SessionIdCache { + public: + SessionIdCache() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + SessionIdCache(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; +#endif + +#if SUPPORT_SSL_FALSESTART +class SslFastStart { + public: + SslFastStart() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + SslFastStart(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = false; +}; +#endif + +class NoRevoke { + public: + NoRevoke() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + NoRevoke(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = false; +}; + +} // namespace ssl + +struct SslOptions { + // We don't use fs::path here, as this leads to problems using windows + std::string cert_file; + std::string cert_type; + // We don't use fs::path here, as this leads to problems using windows + std::string key_file; +#if SUPPORT_CURLOPT_SSLKEY_BLOB + std::string key_blob; +#endif + std::string key_type; + std::string key_pass; + std::string pinned_public_key; +#if SUPPORT_ALPN + bool enable_alpn = true; +#endif // SUPPORT_ALPN +#if SUPPORT_NPN + bool enable_npn = true; +#endif // SUPPORT_ALPN + bool verify_host = true; + bool verify_peer = true; + bool verify_status = false; + int ssl_version = CURL_SSLVERSION_DEFAULT; +#if SUPPORT_SSL_NO_REVOKE + bool ssl_no_revoke = false; +#endif +#if SUPPORT_MAX_TLS_VERSION + int max_version = CURL_SSLVERSION_MAX_DEFAULT; +#endif + // We don't use fs::path here, as this leads to problems using windows + std::string ca_info; + // We don't use fs::path here, as this leads to problems using windows + std::string ca_path; +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION + std::string ca_buffer; +#endif + // We don't use fs::path here, as this leads to problems using windows + std::string crl_file; + std::string ciphers; +#if SUPPORT_TLSv13_CIPHERS + std::string tls13_ciphers; +#endif +#if SUPPORT_SESSIONID_CACHE + bool session_id_cache = true; +#endif + + ~SslOptions() noexcept { +#if SUPPORT_CURLOPT_SSLKEY_BLOB + util::secureStringClear(key_blob); +#endif + util::secureStringClear(key_pass); + } + + void SetOption(const ssl::CertFile& opt) { + cert_file = opt.filename.string(); + cert_type = opt.GetCertType(); + } + void SetOption(const ssl::KeyFile& opt) { + key_file = opt.filename.string(); + key_type = opt.GetKeyType(); + key_pass = opt.password; + } +#if SUPPORT_CURLOPT_SSLKEY_BLOB + void SetOption(const ssl::KeyBlob& opt) { + key_blob = opt.blob; + key_type = opt.GetKeyType(); + key_pass = opt.password; + } +#endif + void SetOption(const ssl::PinnedPublicKey& opt) { + pinned_public_key = opt.pinned_public_key; + } + +#if SUPPORT_ALPN + void SetOption(const ssl::ALPN& opt) { + enable_alpn = opt.enabled; + } +#endif // SUPPORT_ALPN +#if SUPPORT_NPN + void SetOption(const ssl::NPN& opt) { + enable_npn = opt.enabled; + } +#endif // SUPPORT_NPN + void SetOption(const ssl::VerifyHost& opt) { + verify_host = opt.enabled; + } + void SetOption(const ssl::VerifyPeer& opt) { + verify_peer = opt.enabled; + } + void SetOption(const ssl::VerifyStatus& opt) { + verify_status = opt.enabled; + } + void SetOption(const ssl::TLSv1& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1; + } +#if SUPPORT_SSL_NO_REVOKE + void SetOption(const ssl::NoRevoke& opt) { + ssl_no_revoke = opt.enabled; + } +#endif +#if SUPPORT_SSLv2 + void SetOption(const ssl::SSLv2& /*opt*/) { + ssl_version = CURL_SSLVERSION_SSLv2; + } +#endif +#if SUPPORT_SSLv3 + void SetOption(const ssl::SSLv3& /*opt*/) { + ssl_version = CURL_SSLVERSION_SSLv3; + } +#endif +#if SUPPORT_TLSv1_0 + void SetOption(const ssl::TLSv1_0& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_0; + } +#endif +#if SUPPORT_TLSv1_1 + void SetOption(const ssl::TLSv1_1& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_1; + } +#endif +#if SUPPORT_TLSv1_2 + void SetOption(const ssl::TLSv1_2& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_2; + } +#endif +#if SUPPORT_TLSv1_3 + void SetOption(const ssl::TLSv1_3& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_3; + } +#endif +#if SUPPORT_MAX_TLS_VERSION + void SetOption(const ssl::MaxTLSVersion& /*opt*/) { + max_version = CURL_SSLVERSION_DEFAULT; + } +#endif +#if SUPPORT_MAX_TLSv1_0 + void SetOption(const ssl::MaxTLSv1_0& opt) { + max_version = CURL_SSLVERSION_MAX_TLSv1_0; + } +#endif +#if SUPPORT_MAX_TLSv1_1 + void SetOption(const ssl::MaxTLSv1_1& /*opt*/) { + max_version = CURL_SSLVERSION_MAX_TLSv1_1; + } +#endif +#if SUPPORT_MAX_TLSv1_2 + void SetOption(const ssl::MaxTLSv1_2& /*opt*/) { + max_version = CURL_SSLVERSION_MAX_TLSv1_2; + } +#endif +#if SUPPORT_MAX_TLSv1_3 + void SetOption(const ssl::MaxTLSv1_3& /*opt*/) { + max_version = CURL_SSLVERSION_MAX_TLSv1_3; + } +#endif + void SetOption(const ssl::CaInfo& opt) { + ca_info = opt.filename.string(); + } + void SetOption(const ssl::CaPath& opt) { + ca_path = opt.filename.string(); + } +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION + void SetOption(const ssl::CaBuffer& opt) { + ca_buffer = opt.buffer; + } +#endif + void SetOption(const ssl::Crl& opt) { + crl_file = opt.filename.string(); + } + void SetOption(const ssl::Ciphers& opt) { + ciphers = opt.ciphers; + } +#if SUPPORT_TLSv13_CIPHERS + void SetOption(const ssl::TLS13_Ciphers& opt) { + tls13_ciphers = opt.ciphers; + } +#endif +#if SUPPORT_SESSIONID_CACHE + void SetOption(const ssl::SessionIdCache& opt) { + session_id_cache = opt.enabled; + } +#endif +}; + +namespace priv { + +template +void set_ssl_option(SslOptions& opts, T&& t) { + opts.SetOption(std::forward(t)); +} + +template +void set_ssl_option(SslOptions& opts, T&& t, Ts&&... ts) { + set_ssl_option(opts, std::forward(t)); + set_ssl_option(opts, std::move(ts)...); +} + +} // namespace priv + +template +SslOptions Ssl(Ts&&... ts) { + SslOptions opts; + priv::set_ssl_option(opts, std::move(ts)...); + return opts; +} + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/status_codes.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/status_codes.h new file mode 100644 index 0000000..6c7acd6 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/status_codes.h @@ -0,0 +1,100 @@ +#ifndef _CPR_STATUS_CODES +#define _CPR_STATUS_CODES +#include +namespace cpr { +namespace status { +// Information responses +constexpr std::int32_t HTTP_CONTINUE = 100; +constexpr std::int32_t HTTP_SWITCHING_PROTOCOL = 101; +constexpr std::int32_t HTTP_PROCESSING = 102; +constexpr std::int32_t HTTP_EARLY_HINTS = 103; +// Successful responses +constexpr std::int32_t HTTP_OK = 200; +constexpr std::int32_t HTTP_CREATED = 201; +constexpr std::int32_t HTTP_ACCEPTED = 202; +constexpr std::int32_t HTTP_NON_AUTHORITATIVE_INFORMATION = 203; +constexpr std::int32_t HTTP_NO_CONTENT = 204; +constexpr std::int32_t HTTP_RESET_CONTENT = 205; +constexpr std::int32_t HTTP_PARTIAL_CONTENT = 206; +constexpr std::int32_t HTTP_MULTI_STATUS = 207; +constexpr std::int32_t HTTP_ALREADY_REPORTED = 208; +constexpr std::int32_t HTTP_IM_USED = 226; +// Redirection messages +constexpr std::int32_t HTTP_MULTIPLE_CHOICE = 300; +constexpr std::int32_t HTTP_MOVED_PERMANENTLY = 301; +constexpr std::int32_t HTTP_FOUND = 302; +constexpr std::int32_t HTTP_SEE_OTHER = 303; +constexpr std::int32_t HTTP_NOT_MODIFIED = 304; +constexpr std::int32_t HTTP_USE_PROXY = 305; +constexpr std::int32_t HTTP_UNUSED = 306; +constexpr std::int32_t HTTP_TEMPORARY_REDIRECT = 307; +constexpr std::int32_t HTTP_PERMANENT_REDIRECT = 308; +// Client error responses +constexpr std::int32_t HTTP_BAD_REQUEST = 400; +constexpr std::int32_t HTTP_UNAUTHORIZED = 401; +constexpr std::int32_t HTTP_PAYMENT_REQUIRED = 402; +constexpr std::int32_t HTTP_FORBIDDEN = 403; +constexpr std::int32_t HTTP_NOT_FOUND = 404; +constexpr std::int32_t HTTP_METHOD_NOT_ALLOWED = 405; +constexpr std::int32_t HTTP_NOT_ACCEPTABLE = 406; +constexpr std::int32_t HTTP_PROXY_AUTHENTICATION_REQUIRED = 407; +constexpr std::int32_t HTTP_REQUEST_TIMEOUT = 408; +constexpr std::int32_t HTTP_CONFLICT = 409; +constexpr std::int32_t HTTP_GONE = 410; +constexpr std::int32_t HTTP_LENGTH_REQUIRED = 411; +constexpr std::int32_t HTTP_PRECONDITION_FAILED = 412; +constexpr std::int32_t HTTP_PAYLOAD_TOO_LARGE = 413; +constexpr std::int32_t HTTP_URI_TOO_LONG = 414; +constexpr std::int32_t HTTP_UNSUPPORTED_MEDIA_TYPE = 415; +constexpr std::int32_t HTTP_REQUESTED_RANGE_NOT_SATISFIABLE = 416; +constexpr std::int32_t HTTP_EXPECTATION_FAILED = 417; +constexpr std::int32_t HTTP_IM_A_TEAPOT = 418; +constexpr std::int32_t HTTP_MISDIRECTED_REQUEST = 421; +constexpr std::int32_t HTTP_UNPROCESSABLE_ENTITY = 422; +constexpr std::int32_t HTTP_LOCKED = 423; +constexpr std::int32_t HTTP_FAILED_DEPENDENCY = 424; +constexpr std::int32_t HTTP_TOO_EARLY = 425; +constexpr std::int32_t HTTP_UPGRADE_REQUIRED = 426; +constexpr std::int32_t HTTP_PRECONDITION_REQUIRED = 428; +constexpr std::int32_t HTTP_TOO_MANY_REQUESTS = 429; +constexpr std::int32_t HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431; +constexpr std::int32_t HTTP_UNAVAILABLE_FOR_LEGAL_REASONS = 451; +// Server response errors +constexpr std::int32_t HTTP_INTERNAL_SERVER_ERROR = 500; +constexpr std::int32_t HTTP_NOT_IMPLEMENTED = 501; +constexpr std::int32_t HTTP_BAD_GATEWAY = 502; +constexpr std::int32_t HTTP_SERVICE_UNAVAILABLE = 503; +constexpr std::int32_t HTTP_GATEWAY_TIMEOUT = 504; +constexpr std::int32_t HTTP_HTTP_VERSION_NOT_SUPPORTED = 505; +constexpr std::int32_t HTTP_VARIANT_ALSO_NEGOTIATES = 506; +constexpr std::int32_t HTTP_INSUFFICIENT_STORAGE = 507; +constexpr std::int32_t HTTP_LOOP_DETECTED = 508; +constexpr std::int32_t HTTP_NOT_EXTENDED = 510; +constexpr std::int32_t HTTP_NETWORK_AUTHENTICATION_REQUIRED = 511; + +constexpr std::int32_t INFO_CODE_OFFSET = 100; +constexpr std::int32_t SUCCESS_CODE_OFFSET = 200; +constexpr std::int32_t REDIRECT_CODE_OFFSET = 300; +constexpr std::int32_t CLIENT_ERROR_CODE_OFFSET = 400; +constexpr std::int32_t SERVER_ERROR_CODE_OFFSET = 500; +constexpr std::int32_t MISC_CODE_OFFSET = 600; + +constexpr bool is_informational(const std::int32_t code) { + return (code >= INFO_CODE_OFFSET && code < SUCCESS_CODE_OFFSET); +} +constexpr bool is_success(const std::int32_t code) { + return (code >= SUCCESS_CODE_OFFSET && code < REDIRECT_CODE_OFFSET); +} +constexpr bool is_redirect(const std::int32_t code) { + return (code >= REDIRECT_CODE_OFFSET && code < CLIENT_ERROR_CODE_OFFSET); +} +constexpr bool is_client_error(const std::int32_t code) { + return (code >= CLIENT_ERROR_CODE_OFFSET && code < SERVER_ERROR_CODE_OFFSET); +} +constexpr bool is_server_error(const std::int32_t code) { + return (code >= SERVER_ERROR_CODE_OFFSET && code < MISC_CODE_OFFSET); +} + +} // namespace status +} // namespace cpr +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/threadpool.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/threadpool.h new file mode 100644 index 0000000..bb7e7f2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/threadpool.h @@ -0,0 +1,122 @@ +#ifndef CPR_THREAD_POOL_H +#define CPR_THREAD_POOL_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define CPR_DEFAULT_THREAD_POOL_MAX_THREAD_NUM std::thread::hardware_concurrency() + +constexpr size_t CPR_DEFAULT_THREAD_POOL_MIN_THREAD_NUM = 1; +constexpr std::chrono::milliseconds CPR_DEFAULT_THREAD_POOL_MAX_IDLE_TIME{60000}; + +namespace cpr { + +class ThreadPool { + public: + using Task = std::function; + + explicit ThreadPool(size_t min_threads = CPR_DEFAULT_THREAD_POOL_MIN_THREAD_NUM, size_t max_threads = CPR_DEFAULT_THREAD_POOL_MAX_THREAD_NUM, std::chrono::milliseconds max_idle_ms = CPR_DEFAULT_THREAD_POOL_MAX_IDLE_TIME); + + virtual ~ThreadPool(); + + void SetMinThreadNum(size_t min_threads) { + min_thread_num = min_threads; + } + void SetMaxThreadNum(size_t max_threads) { + max_thread_num = max_threads; + } + void SetMaxIdleTime(std::chrono::milliseconds ms) { + max_idle_time = ms; + } + size_t GetCurrentThreadNum() { + return cur_thread_num; + } + size_t GetIdleThreadNum() { + return idle_thread_num; + } + bool IsStarted() { + return status != STOP; + } + bool IsStopped() { + return status == STOP; + } + + int Start(size_t start_threads = 0); + int Stop(); + int Pause(); + int Resume(); + int Wait(); + + /** + * Return a future, calling future.get() will wait task done and return RetType. + * Submit(fn, args...) + * Submit(std::bind(&Class::mem_fn, &obj)) + * Submit(std::mem_fn(&Class::mem_fn, &obj)) + **/ + template + auto Submit(Fn&& fn, Args&&... args) { + if (status == STOP) { + Start(); + } + if (idle_thread_num <= 0 && cur_thread_num < max_thread_num) { + CreateThread(); + } + using RetType = decltype(fn(args...)); + auto task = std::make_shared >(std::bind(std::forward(fn), std::forward(args)...)); + std::future future = task->get_future(); + { + std::lock_guard locker(task_mutex); + tasks.emplace([task] { (*task)(); }); + } + + task_cond.notify_one(); + return future; + } + + private: + bool CreateThread(); + void AddThread(std::thread* thread); + void DelThread(std::thread::id id); + + public: + size_t min_thread_num; + size_t max_thread_num; + std::chrono::milliseconds max_idle_time; + + private: + enum Status { + STOP, + RUNNING, + PAUSE, + }; + + struct ThreadData { + std::shared_ptr thread; + std::thread::id id; + Status status; + time_t start_time; + time_t stop_time; + }; + + std::atomic status; + std::atomic cur_thread_num; + std::atomic idle_thread_num; + std::list threads; + std::mutex thread_mutex; + std::queue tasks; + std::mutex task_mutex; + std::condition_variable task_cond; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/timeout.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/timeout.h new file mode 100644 index 0000000..83b3e68 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/timeout.h @@ -0,0 +1,27 @@ +#ifndef CPR_TIMEOUT_H +#define CPR_TIMEOUT_H + +#include +#include + +namespace cpr { + +class Timeout { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Timeout(const std::chrono::milliseconds& duration) : ms{duration} {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Timeout(const std::int32_t& milliseconds) : Timeout{std::chrono::milliseconds(milliseconds)} {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Timeout(const std::chrono::seconds& duration) : ms{std::chrono::milliseconds(duration).count()} {} + + // No way around since curl uses a long here. + // NOLINTNEXTLINE(google-runtime-int) + long Milliseconds() const; + + std::chrono::milliseconds ms; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/unix_socket.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/unix_socket.h new file mode 100644 index 0000000..152caf0 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/unix_socket.h @@ -0,0 +1,21 @@ +#ifndef CPR_UNIX_SOCKET_H +#define CPR_UNIX_SOCKET_H + +#include + +namespace cpr { + +class UnixSocket { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UnixSocket(std::string unix_socket) : unix_socket_(std::move(unix_socket)) {} + + const char* GetUnixSocketString() const noexcept; + + private: + const std::string unix_socket_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/user_agent.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/user_agent.h new file mode 100644 index 0000000..a3cc129 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/user_agent.h @@ -0,0 +1,31 @@ +#ifndef CPR_USERAGENT_H +#define CPR_USERAGENT_H + +#include +#include + +#include "cpr/cprtypes.h" + +namespace cpr { +class UserAgent : public StringHolder { + public: + UserAgent() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UserAgent(std::string useragent) : StringHolder(std::move(useragent)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UserAgent(std::string_view useragent) : StringHolder(useragent) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UserAgent(const char* useragent) : StringHolder(useragent) {} + UserAgent(const char* str, size_t len) : StringHolder(str, len) {} + UserAgent(const std::initializer_list args) : StringHolder(args) {} + UserAgent(const UserAgent& other) = default; + UserAgent(UserAgent&& old) noexcept = default; + ~UserAgent() override = default; + + UserAgent& operator=(UserAgent&& old) noexcept = default; + UserAgent& operator=(const UserAgent& other) = default; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/util.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/util.h new file mode 100644 index 0000000..d851e23 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/util.h @@ -0,0 +1,45 @@ +#ifndef CPR_UTIL_H +#define CPR_UTIL_H + +#include +#include +#include + +#include "cpr/callback.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/curlholder.h" + +namespace cpr::util { + +Header parseHeader(const std::string& headers, std::string* status_line = nullptr, std::string* reason = nullptr); +Cookies parseCookies(curl_slist* raw_cookies); +size_t readUserFunction(char* ptr, size_t size, size_t nitems, const ReadCallback* read); +size_t headerUserFunction(char* ptr, size_t size, size_t nmemb, const HeaderCallback* header); +size_t writeFunction(char* ptr, size_t size, size_t nmemb, std::string* data); +size_t writeFileFunction(char* ptr, size_t size, size_t nmemb, std::ofstream* file); +size_t writeUserFunction(char* ptr, size_t size, size_t nmemb, const WriteCallback* write); + +template +int progressUserFunction(const T* progress, cpr_pf_arg_t dltotal, cpr_pf_arg_t dlnow, cpr_pf_arg_t ultotal, cpr_pf_arg_t ulnow) { + const int cancel_retval{1}; + static_assert(cancel_retval != CURL_PROGRESSFUNC_CONTINUE); + return (*progress)(dltotal, dlnow, ultotal, ulnow) ? 0 : cancel_retval; +} +int debugUserFunction(CURL* handle, curl_infotype type, char* data, size_t size, const DebugCallback* debug); +std::vector split(const std::string& to_split, char delimiter); +std::string urlEncode(const std::string& s); +std::string urlDecode(const std::string& s); + +/** + * Override the content of the provided string to hide sensitive data. The + * string content after invocation is undefined. The string size is reset to zero. + * impl. based on: + * https://github.com/ojeda/secure_clear/blob/master/example-implementation/secure_clear.h + **/ +void secureStringClear(std::string& s); +bool isTrue(const std::string& s); + +} // namespace cpr::util + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/verbose.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/verbose.h new file mode 100644 index 0000000..2bf0df8 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/cpr/verbose.h @@ -0,0 +1,18 @@ +#ifndef CPR_VERBOSE_H_ +#define CPR_VERBOSE_H_ + +namespace cpr { + +class Verbose { + public: + Verbose() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Verbose(const bool p_verbose) : verbose{p_verbose} {} + + bool verbose = true; +}; + +} // namespace cpr + + +#endif /* CPR_VERBOSE_H_ */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/curl.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/curl.h new file mode 100644 index 0000000..bf71d82 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/curl.h @@ -0,0 +1,3241 @@ +#ifndef CURLINC_CURL_H +#define CURLINC_CURL_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* + * If you have libcurl problems, all docs and details are found here: + * https://curl.se/libcurl/ + */ + +#ifdef CURL_NO_OLDIES +#define CURL_STRICTER +#endif + +/* Compile-time deprecation macros. */ +#if defined(__GNUC__) && \ + ((__GNUC__ > 12) || ((__GNUC__ == 12) && (__GNUC_MINOR__ >= 1 ))) && \ + !defined(__INTEL_COMPILER) && \ + !defined(CURL_DISABLE_DEPRECATION) && !defined(BUILDING_LIBCURL) +#define CURL_DEPRECATED(version, message) \ + __attribute__((deprecated("since " # version ". " message))) +#define CURL_IGNORE_DEPRECATION(statements) \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ + statements \ + _Pragma("GCC diagnostic pop") +#else +#define CURL_DEPRECATED(version, message) +#define CURL_IGNORE_DEPRECATION(statements) statements +#endif + +#include "curlver.h" /* libcurl version defines */ +#include "system.h" /* determine things run-time */ + +/* + * Define CURL_WIN32 when build target is Win32 API + */ + +#if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && \ + !defined(__SYMBIAN32__) +#define CURL_WIN32 +#endif + +#include +#include + +#if (defined(__FreeBSD__) && (__FreeBSD__ >= 2)) || defined(__MidnightBSD__) +/* Needed for __FreeBSD_version or __MidnightBSD_version symbol definition */ +#include +#endif + +/* The include stuff here below is mainly for time_t! */ +#include +#include + +#if defined(CURL_WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__) +#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || \ + defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H)) +/* The check above prevents the winsock2 inclusion if winsock.h already was + included, since they can't co-exist without problems */ +#include +#include +#endif +#endif + +/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish + libc5-based Linux systems. Only include it on systems that are known to + require it! */ +#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \ + defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \ + defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \ + defined(__CYGWIN__) || defined(AMIGA) || defined(__NuttX__) || \ + (defined(__FreeBSD_version) && (__FreeBSD_version < 800000)) || \ + (defined(__MidnightBSD_version) && (__MidnightBSD_version < 100000)) || \ + defined(__sun__) || defined(__serenity__) || defined(__vxworks__) +#include +#endif + +#if !defined(CURL_WIN32) && !defined(_WIN32_WCE) +#include +#endif + +#if !defined(CURL_WIN32) +#include +#endif + +/* Compatibility for non-Clang compilers */ +#ifndef __has_declspec_attribute +# define __has_declspec_attribute(x) 0 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) +typedef struct Curl_easy CURL; +typedef struct Curl_share CURLSH; +#else +typedef void CURL; +typedef void CURLSH; +#endif + +/* + * libcurl external API function linkage decorations. + */ + +#ifdef CURL_STATICLIB +# define CURL_EXTERN +#elif defined(CURL_WIN32) || defined(__SYMBIAN32__) || \ + (__has_declspec_attribute(dllexport) && \ + __has_declspec_attribute(dllimport)) +# if defined(BUILDING_LIBCURL) +# define CURL_EXTERN __declspec(dllexport) +# else +# define CURL_EXTERN __declspec(dllimport) +# endif +#elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS) +# define CURL_EXTERN CURL_EXTERN_SYMBOL +#else +# define CURL_EXTERN +#endif + +#ifndef curl_socket_typedef +/* socket typedef */ +#if defined(CURL_WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H) +typedef SOCKET curl_socket_t; +#define CURL_SOCKET_BAD INVALID_SOCKET +#else +typedef int curl_socket_t; +#define CURL_SOCKET_BAD -1 +#endif +#define curl_socket_typedef +#endif /* curl_socket_typedef */ + +/* enum for the different supported SSL backends */ +typedef enum { + CURLSSLBACKEND_NONE = 0, + CURLSSLBACKEND_OPENSSL = 1, + CURLSSLBACKEND_GNUTLS = 2, + CURLSSLBACKEND_NSS CURL_DEPRECATED(8.3.0, "") = 3, + CURLSSLBACKEND_OBSOLETE4 = 4, /* Was QSOSSL. */ + CURLSSLBACKEND_GSKIT CURL_DEPRECATED(8.3.0, "") = 5, + CURLSSLBACKEND_POLARSSL CURL_DEPRECATED(7.69.0, "") = 6, + CURLSSLBACKEND_WOLFSSL = 7, + CURLSSLBACKEND_SCHANNEL = 8, + CURLSSLBACKEND_SECURETRANSPORT = 9, + CURLSSLBACKEND_AXTLS CURL_DEPRECATED(7.61.0, "") = 10, + CURLSSLBACKEND_MBEDTLS = 11, + CURLSSLBACKEND_MESALINK CURL_DEPRECATED(7.82.0, "") = 12, + CURLSSLBACKEND_BEARSSL = 13, + CURLSSLBACKEND_RUSTLS = 14 +} curl_sslbackend; + +/* aliases for library clones and renames */ +#define CURLSSLBACKEND_AWSLC CURLSSLBACKEND_OPENSSL +#define CURLSSLBACKEND_BORINGSSL CURLSSLBACKEND_OPENSSL +#define CURLSSLBACKEND_LIBRESSL CURLSSLBACKEND_OPENSSL + +/* deprecated names: */ +#define CURLSSLBACKEND_CYASSL CURLSSLBACKEND_WOLFSSL +#define CURLSSLBACKEND_DARWINSSL CURLSSLBACKEND_SECURETRANSPORT + +struct curl_httppost { + struct curl_httppost *next; /* next entry in the list */ + char *name; /* pointer to allocated name */ + long namelength; /* length of name length */ + char *contents; /* pointer to allocated data contents */ + long contentslength; /* length of contents field, see also + CURL_HTTPPOST_LARGE */ + char *buffer; /* pointer to allocated buffer contents */ + long bufferlength; /* length of buffer field */ + char *contenttype; /* Content-Type */ + struct curl_slist *contentheader; /* list of extra headers for this form */ + struct curl_httppost *more; /* if one field name has more than one + file, this link should link to following + files */ + long flags; /* as defined below */ + +/* specified content is a file name */ +#define CURL_HTTPPOST_FILENAME (1<<0) +/* specified content is a file name */ +#define CURL_HTTPPOST_READFILE (1<<1) +/* name is only stored pointer do not free in formfree */ +#define CURL_HTTPPOST_PTRNAME (1<<2) +/* contents is only stored pointer do not free in formfree */ +#define CURL_HTTPPOST_PTRCONTENTS (1<<3) +/* upload file from buffer */ +#define CURL_HTTPPOST_BUFFER (1<<4) +/* upload file from pointer contents */ +#define CURL_HTTPPOST_PTRBUFFER (1<<5) +/* upload file contents by using the regular read callback to get the data and + pass the given pointer as custom pointer */ +#define CURL_HTTPPOST_CALLBACK (1<<6) +/* use size in 'contentlen', added in 7.46.0 */ +#define CURL_HTTPPOST_LARGE (1<<7) + + char *showfilename; /* The file name to show. If not set, the + actual file name will be used (if this + is a file part) */ + void *userp; /* custom pointer used for + HTTPPOST_CALLBACK posts */ + curl_off_t contentlen; /* alternative length of contents + field. Used if CURL_HTTPPOST_LARGE is + set. Added in 7.46.0 */ +}; + + +/* This is a return code for the progress callback that, when returned, will + signal libcurl to continue executing the default progress function */ +#define CURL_PROGRESSFUNC_CONTINUE 0x10000001 + +/* This is the CURLOPT_PROGRESSFUNCTION callback prototype. It is now + considered deprecated but was the only choice up until 7.31.0 */ +typedef int (*curl_progress_callback)(void *clientp, + double dltotal, + double dlnow, + double ultotal, + double ulnow); + +/* This is the CURLOPT_XFERINFOFUNCTION callback prototype. It was introduced + in 7.32.0, avoids the use of floating point numbers and provides more + detailed information. */ +typedef int (*curl_xferinfo_callback)(void *clientp, + curl_off_t dltotal, + curl_off_t dlnow, + curl_off_t ultotal, + curl_off_t ulnow); + +#ifndef CURL_MAX_READ_SIZE + /* The maximum receive buffer size configurable via CURLOPT_BUFFERSIZE. */ +#define CURL_MAX_READ_SIZE (10*1024*1024) +#endif + +#ifndef CURL_MAX_WRITE_SIZE + /* Tests have proven that 20K is a very bad buffer size for uploads on + Windows, while 16K for some odd reason performed a lot better. + We do the ifndef check to allow this value to easier be changed at build + time for those who feel adventurous. The practical minimum is about + 400 bytes since libcurl uses a buffer of this size as a scratch area + (unrelated to network send operations). */ +#define CURL_MAX_WRITE_SIZE 16384 +#endif + +#ifndef CURL_MAX_HTTP_HEADER +/* The only reason to have a max limit for this is to avoid the risk of a bad + server feeding libcurl with a never-ending header that will cause reallocs + infinitely */ +#define CURL_MAX_HTTP_HEADER (100*1024) +#endif + +/* This is a magic return code for the write callback that, when returned, + will signal libcurl to pause receiving on the current transfer. */ +#define CURL_WRITEFUNC_PAUSE 0x10000001 + +/* This is a magic return code for the write callback that, when returned, + will signal an error from the callback. */ +#define CURL_WRITEFUNC_ERROR 0xFFFFFFFF + +typedef size_t (*curl_write_callback)(char *buffer, + size_t size, + size_t nitems, + void *outstream); + +/* This callback will be called when a new resolver request is made */ +typedef int (*curl_resolver_start_callback)(void *resolver_state, + void *reserved, void *userdata); + +/* enumeration of file types */ +typedef enum { + CURLFILETYPE_FILE = 0, + CURLFILETYPE_DIRECTORY, + CURLFILETYPE_SYMLINK, + CURLFILETYPE_DEVICE_BLOCK, + CURLFILETYPE_DEVICE_CHAR, + CURLFILETYPE_NAMEDPIPE, + CURLFILETYPE_SOCKET, + CURLFILETYPE_DOOR, /* is possible only on Sun Solaris now */ + + CURLFILETYPE_UNKNOWN /* should never occur */ +} curlfiletype; + +#define CURLFINFOFLAG_KNOWN_FILENAME (1<<0) +#define CURLFINFOFLAG_KNOWN_FILETYPE (1<<1) +#define CURLFINFOFLAG_KNOWN_TIME (1<<2) +#define CURLFINFOFLAG_KNOWN_PERM (1<<3) +#define CURLFINFOFLAG_KNOWN_UID (1<<4) +#define CURLFINFOFLAG_KNOWN_GID (1<<5) +#define CURLFINFOFLAG_KNOWN_SIZE (1<<6) +#define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1<<7) + +/* Information about a single file, used when doing FTP wildcard matching */ +struct curl_fileinfo { + char *filename; + curlfiletype filetype; + time_t time; /* always zero! */ + unsigned int perm; + int uid; + int gid; + curl_off_t size; + long int hardlinks; + + struct { + /* If some of these fields is not NULL, it is a pointer to b_data. */ + char *time; + char *perm; + char *user; + char *group; + char *target; /* pointer to the target filename of a symlink */ + } strings; + + unsigned int flags; + + /* These are libcurl private struct fields. Previously used by libcurl, so + they must never be interfered with. */ + char *b_data; + size_t b_size; + size_t b_used; +}; + +/* return codes for CURLOPT_CHUNK_BGN_FUNCTION */ +#define CURL_CHUNK_BGN_FUNC_OK 0 +#define CURL_CHUNK_BGN_FUNC_FAIL 1 /* tell the lib to end the task */ +#define CURL_CHUNK_BGN_FUNC_SKIP 2 /* skip this chunk over */ + +/* if splitting of data transfer is enabled, this callback is called before + download of an individual chunk started. Note that parameter "remains" works + only for FTP wildcard downloading (for now), otherwise is not used */ +typedef long (*curl_chunk_bgn_callback)(const void *transfer_info, + void *ptr, + int remains); + +/* return codes for CURLOPT_CHUNK_END_FUNCTION */ +#define CURL_CHUNK_END_FUNC_OK 0 +#define CURL_CHUNK_END_FUNC_FAIL 1 /* tell the lib to end the task */ + +/* If splitting of data transfer is enabled this callback is called after + download of an individual chunk finished. + Note! After this callback was set then it have to be called FOR ALL chunks. + Even if downloading of this chunk was skipped in CHUNK_BGN_FUNC. + This is the reason why we don't need "transfer_info" parameter in this + callback and we are not interested in "remains" parameter too. */ +typedef long (*curl_chunk_end_callback)(void *ptr); + +/* return codes for FNMATCHFUNCTION */ +#define CURL_FNMATCHFUNC_MATCH 0 /* string corresponds to the pattern */ +#define CURL_FNMATCHFUNC_NOMATCH 1 /* pattern doesn't match the string */ +#define CURL_FNMATCHFUNC_FAIL 2 /* an error occurred */ + +/* callback type for wildcard downloading pattern matching. If the + string matches the pattern, return CURL_FNMATCHFUNC_MATCH value, etc. */ +typedef int (*curl_fnmatch_callback)(void *ptr, + const char *pattern, + const char *string); + +/* These are the return codes for the seek callbacks */ +#define CURL_SEEKFUNC_OK 0 +#define CURL_SEEKFUNC_FAIL 1 /* fail the entire transfer */ +#define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so + libcurl might try other means instead */ +typedef int (*curl_seek_callback)(void *instream, + curl_off_t offset, + int origin); /* 'whence' */ + +/* This is a return code for the read callback that, when returned, will + signal libcurl to immediately abort the current transfer. */ +#define CURL_READFUNC_ABORT 0x10000000 +/* This is a return code for the read callback that, when returned, will + signal libcurl to pause sending data on the current transfer. */ +#define CURL_READFUNC_PAUSE 0x10000001 + +/* Return code for when the trailing headers' callback has terminated + without any errors */ +#define CURL_TRAILERFUNC_OK 0 +/* Return code for when was an error in the trailing header's list and we + want to abort the request */ +#define CURL_TRAILERFUNC_ABORT 1 + +typedef size_t (*curl_read_callback)(char *buffer, + size_t size, + size_t nitems, + void *instream); + +typedef int (*curl_trailer_callback)(struct curl_slist **list, + void *userdata); + +typedef enum { + CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */ + CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */ + CURLSOCKTYPE_LAST /* never use */ +} curlsocktype; + +/* The return code from the sockopt_callback can signal information back + to libcurl: */ +#define CURL_SOCKOPT_OK 0 +#define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return + CURLE_ABORTED_BY_CALLBACK */ +#define CURL_SOCKOPT_ALREADY_CONNECTED 2 + +typedef int (*curl_sockopt_callback)(void *clientp, + curl_socket_t curlfd, + curlsocktype purpose); + +struct curl_sockaddr { + int family; + int socktype; + int protocol; + unsigned int addrlen; /* addrlen was a socklen_t type before 7.18.0 but it + turned really ugly and painful on the systems that + lack this type */ + struct sockaddr addr; +}; + +typedef curl_socket_t +(*curl_opensocket_callback)(void *clientp, + curlsocktype purpose, + struct curl_sockaddr *address); + +typedef int +(*curl_closesocket_callback)(void *clientp, curl_socket_t item); + +typedef enum { + CURLIOE_OK, /* I/O operation successful */ + CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ + CURLIOE_FAILRESTART, /* failed to restart the read */ + CURLIOE_LAST /* never use */ +} curlioerr; + +typedef enum { + CURLIOCMD_NOP, /* no operation */ + CURLIOCMD_RESTARTREAD, /* restart the read stream from start */ + CURLIOCMD_LAST /* never use */ +} curliocmd; + +typedef curlioerr (*curl_ioctl_callback)(CURL *handle, + int cmd, + void *clientp); + +#ifndef CURL_DID_MEMORY_FUNC_TYPEDEFS +/* + * The following typedef's are signatures of malloc, free, realloc, strdup and + * calloc respectively. Function pointers of these types can be passed to the + * curl_global_init_mem() function to set user defined memory management + * callback routines. + */ +typedef void *(*curl_malloc_callback)(size_t size); +typedef void (*curl_free_callback)(void *ptr); +typedef void *(*curl_realloc_callback)(void *ptr, size_t size); +typedef char *(*curl_strdup_callback)(const char *str); +typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size); + +#define CURL_DID_MEMORY_FUNC_TYPEDEFS +#endif + +/* the kind of data that is passed to information_callback */ +typedef enum { + CURLINFO_TEXT = 0, + CURLINFO_HEADER_IN, /* 1 */ + CURLINFO_HEADER_OUT, /* 2 */ + CURLINFO_DATA_IN, /* 3 */ + CURLINFO_DATA_OUT, /* 4 */ + CURLINFO_SSL_DATA_IN, /* 5 */ + CURLINFO_SSL_DATA_OUT, /* 6 */ + CURLINFO_END +} curl_infotype; + +typedef int (*curl_debug_callback) + (CURL *handle, /* the handle/transfer this concerns */ + curl_infotype type, /* what kind of data */ + char *data, /* points to the data */ + size_t size, /* size of the data pointed to */ + void *userptr); /* whatever the user please */ + +/* This is the CURLOPT_PREREQFUNCTION callback prototype. */ +typedef int (*curl_prereq_callback)(void *clientp, + char *conn_primary_ip, + char *conn_local_ip, + int conn_primary_port, + int conn_local_port); + +/* Return code for when the pre-request callback has terminated without + any errors */ +#define CURL_PREREQFUNC_OK 0 +/* Return code for when the pre-request callback wants to abort the + request */ +#define CURL_PREREQFUNC_ABORT 1 + +/* All possible error codes from all sorts of curl functions. Future versions + may return other values, stay prepared. + + Always add new return codes last. Never *EVER* remove any. The return + codes must remain the same! + */ + +typedef enum { + CURLE_OK = 0, + CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ + CURLE_FAILED_INIT, /* 2 */ + CURLE_URL_MALFORMAT, /* 3 */ + CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for + 7.17.0, reused in April 2011 for 7.21.5] */ + CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ + CURLE_COULDNT_RESOLVE_HOST, /* 6 */ + CURLE_COULDNT_CONNECT, /* 7 */ + CURLE_WEIRD_SERVER_REPLY, /* 8 */ + CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server + due to lack of access - when login fails + this is not returned. */ + CURLE_FTP_ACCEPT_FAILED, /* 10 - [was obsoleted in April 2006 for + 7.15.4, reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ + CURLE_FTP_ACCEPT_TIMEOUT, /* 12 - timeout occurred accepting server + [was obsoleted in August 2007 for 7.17.0, + reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ + CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ + CURLE_FTP_CANT_GET_HOST, /* 15 */ + CURLE_HTTP2, /* 16 - A problem in the http2 framing layer. + [was obsoleted in August 2007 for 7.17.0, + reused in July 2014 for 7.38.0] */ + CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ + CURLE_PARTIAL_FILE, /* 18 */ + CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ + CURLE_OBSOLETE20, /* 20 - NOT USED */ + CURLE_QUOTE_ERROR, /* 21 - quote command failure */ + CURLE_HTTP_RETURNED_ERROR, /* 22 */ + CURLE_WRITE_ERROR, /* 23 */ + CURLE_OBSOLETE24, /* 24 - NOT USED */ + CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ + CURLE_READ_ERROR, /* 26 - couldn't open/read from file */ + CURLE_OUT_OF_MEMORY, /* 27 */ + CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ + CURLE_OBSOLETE29, /* 29 - NOT USED */ + CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ + CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ + CURLE_OBSOLETE32, /* 32 - NOT USED */ + CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */ + CURLE_HTTP_POST_ERROR, /* 34 */ + CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ + CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */ + CURLE_FILE_COULDNT_READ_FILE, /* 37 */ + CURLE_LDAP_CANNOT_BIND, /* 38 */ + CURLE_LDAP_SEARCH_FAILED, /* 39 */ + CURLE_OBSOLETE40, /* 40 - NOT USED */ + CURLE_FUNCTION_NOT_FOUND, /* 41 - NOT USED starting with 7.53.0 */ + CURLE_ABORTED_BY_CALLBACK, /* 42 */ + CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ + CURLE_OBSOLETE44, /* 44 - NOT USED */ + CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ + CURLE_OBSOLETE46, /* 46 - NOT USED */ + CURLE_TOO_MANY_REDIRECTS, /* 47 - catch endless re-direct loops */ + CURLE_UNKNOWN_OPTION, /* 48 - User specified an unknown option */ + CURLE_SETOPT_OPTION_SYNTAX, /* 49 - Malformed setopt option */ + CURLE_OBSOLETE50, /* 50 - NOT USED */ + CURLE_OBSOLETE51, /* 51 - NOT USED */ + CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ + CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ + CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as + default */ + CURLE_SEND_ERROR, /* 55 - failed sending network data */ + CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ + CURLE_OBSOLETE57, /* 57 - NOT IN USE */ + CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ + CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */ + CURLE_PEER_FAILED_VERIFICATION, /* 60 - peer's certificate or fingerprint + wasn't verified fine */ + CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */ + CURLE_OBSOLETE62, /* 62 - NOT IN USE since 7.82.0 */ + CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ + CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ + CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind + that failed */ + CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ + CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not + accepted and we failed to login */ + CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ + CURLE_TFTP_PERM, /* 69 - permission problem on server */ + CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ + CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ + CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ + CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ + CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ + CURLE_OBSOLETE75, /* 75 - NOT IN USE since 7.82.0 */ + CURLE_OBSOLETE76, /* 76 - NOT IN USE since 7.82.0 */ + CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing + or wrong format */ + CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ + CURLE_SSH, /* 79 - error from the SSH layer, somewhat + generic so the error message will be of + interest when this has happened */ + + CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL + connection */ + CURLE_AGAIN, /* 81 - socket is not ready for send/recv, + wait till it's ready and try again (Added + in 7.18.2) */ + CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or + wrong format (Added in 7.19.0) */ + CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in + 7.19.0) */ + CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */ + CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */ + CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Ids */ + CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */ + CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */ + CURLE_NO_CONNECTION_AVAILABLE, /* 89 - No connection available, the + session will be queued */ + CURLE_SSL_PINNEDPUBKEYNOTMATCH, /* 90 - specified pinned public key did not + match */ + CURLE_SSL_INVALIDCERTSTATUS, /* 91 - invalid certificate status */ + CURLE_HTTP2_STREAM, /* 92 - stream error in HTTP/2 framing layer + */ + CURLE_RECURSIVE_API_CALL, /* 93 - an api function was called from + inside a callback */ + CURLE_AUTH_ERROR, /* 94 - an authentication function returned an + error */ + CURLE_HTTP3, /* 95 - An HTTP/3 layer problem */ + CURLE_QUIC_CONNECT_ERROR, /* 96 - QUIC connection error */ + CURLE_PROXY, /* 97 - proxy handshake error */ + CURLE_SSL_CLIENTCERT, /* 98 - client-side certificate required */ + CURLE_UNRECOVERABLE_POLL, /* 99 - poll/select returned fatal error */ + CURL_LAST /* never use! */ +} CURLcode; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Previously obsolete error code reused in 7.38.0 */ +#define CURLE_OBSOLETE16 CURLE_HTTP2 + +/* Previously obsolete error codes reused in 7.24.0 */ +#define CURLE_OBSOLETE10 CURLE_FTP_ACCEPT_FAILED +#define CURLE_OBSOLETE12 CURLE_FTP_ACCEPT_TIMEOUT + +/* compatibility with older names */ +#define CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING +#define CURLE_FTP_WEIRD_SERVER_REPLY CURLE_WEIRD_SERVER_REPLY + +/* The following were added in 7.62.0 */ +#define CURLE_SSL_CACERT CURLE_PEER_FAILED_VERIFICATION + +/* The following were added in 7.21.5, April 2011 */ +#define CURLE_UNKNOWN_TELNET_OPTION CURLE_UNKNOWN_OPTION + +/* Added for 7.78.0 */ +#define CURLE_TELNET_OPTION_SYNTAX CURLE_SETOPT_OPTION_SYNTAX + +/* The following were added in 7.17.1 */ +/* These are scheduled to disappear by 2009 */ +#define CURLE_SSL_PEER_CERTIFICATE CURLE_PEER_FAILED_VERIFICATION + +/* The following were added in 7.17.0 */ +/* These are scheduled to disappear by 2009 */ +#define CURLE_OBSOLETE CURLE_OBSOLETE50 /* no one should be using this! */ +#define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46 +#define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44 +#define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10 +#define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16 +#define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32 +#define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29 +#define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12 +#define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20 +#define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40 +#define CURLE_MALFORMAT_USER CURLE_OBSOLETE24 +#define CURLE_SHARE_IN_USE CURLE_OBSOLETE57 +#define CURLE_URL_MALFORMAT_USER CURLE_NOT_BUILT_IN + +#define CURLE_FTP_ACCESS_DENIED CURLE_REMOTE_ACCESS_DENIED +#define CURLE_FTP_COULDNT_SET_BINARY CURLE_FTP_COULDNT_SET_TYPE +#define CURLE_FTP_QUOTE_ERROR CURLE_QUOTE_ERROR +#define CURLE_TFTP_DISKFULL CURLE_REMOTE_DISK_FULL +#define CURLE_TFTP_EXISTS CURLE_REMOTE_FILE_EXISTS +#define CURLE_HTTP_RANGE_ERROR CURLE_RANGE_ERROR +#define CURLE_FTP_SSL_FAILED CURLE_USE_SSL_FAILED + +/* The following were added earlier */ + +#define CURLE_OPERATION_TIMEOUTED CURLE_OPERATION_TIMEDOUT +#define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR +#define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED +#define CURLE_FTP_COULDNT_STOR_FILE CURLE_UPLOAD_FAILED +#define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE +#define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME +#define CURLE_LDAP_INVALID_URL CURLE_OBSOLETE62 +#define CURLE_CONV_REQD CURLE_OBSOLETE76 +#define CURLE_CONV_FAILED CURLE_OBSOLETE75 + +/* This was the error code 50 in 7.7.3 and a few earlier versions, this + is no longer used by libcurl but is instead #defined here only to not + make programs break */ +#define CURLE_ALREADY_COMPLETE 99999 + +/* Provide defines for really old option names */ +#define CURLOPT_FILE CURLOPT_WRITEDATA /* name changed in 7.9.7 */ +#define CURLOPT_INFILE CURLOPT_READDATA /* name changed in 7.9.7 */ +#define CURLOPT_WRITEHEADER CURLOPT_HEADERDATA + +/* Since long deprecated options with no code in the lib that does anything + with them. */ +#define CURLOPT_WRITEINFO CURLOPT_OBSOLETE40 +#define CURLOPT_CLOSEPOLICY CURLOPT_OBSOLETE72 + +#endif /* !CURL_NO_OLDIES */ + +/* + * Proxy error codes. Returned in CURLINFO_PROXY_ERROR if CURLE_PROXY was + * return for the transfers. + */ +typedef enum { + CURLPX_OK, + CURLPX_BAD_ADDRESS_TYPE, + CURLPX_BAD_VERSION, + CURLPX_CLOSED, + CURLPX_GSSAPI, + CURLPX_GSSAPI_PERMSG, + CURLPX_GSSAPI_PROTECTION, + CURLPX_IDENTD, + CURLPX_IDENTD_DIFFER, + CURLPX_LONG_HOSTNAME, + CURLPX_LONG_PASSWD, + CURLPX_LONG_USER, + CURLPX_NO_AUTH, + CURLPX_RECV_ADDRESS, + CURLPX_RECV_AUTH, + CURLPX_RECV_CONNECT, + CURLPX_RECV_REQACK, + CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED, + CURLPX_REPLY_COMMAND_NOT_SUPPORTED, + CURLPX_REPLY_CONNECTION_REFUSED, + CURLPX_REPLY_GENERAL_SERVER_FAILURE, + CURLPX_REPLY_HOST_UNREACHABLE, + CURLPX_REPLY_NETWORK_UNREACHABLE, + CURLPX_REPLY_NOT_ALLOWED, + CURLPX_REPLY_TTL_EXPIRED, + CURLPX_REPLY_UNASSIGNED, + CURLPX_REQUEST_FAILED, + CURLPX_RESOLVE_HOST, + CURLPX_SEND_AUTH, + CURLPX_SEND_CONNECT, + CURLPX_SEND_REQUEST, + CURLPX_UNKNOWN_FAIL, + CURLPX_UNKNOWN_MODE, + CURLPX_USER_REJECTED, + CURLPX_LAST /* never use */ +} CURLproxycode; + +/* This prototype applies to all conversion callbacks */ +typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length); + +typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */ + void *ssl_ctx, /* actually an OpenSSL + or WolfSSL SSL_CTX, + or an mbedTLS + mbedtls_ssl_config */ + void *userptr); + +typedef enum { + CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use + CONNECT HTTP/1.1 */ + CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT + HTTP/1.0 */ + CURLPROXY_HTTPS = 2, /* HTTPS but stick to HTTP/1 added in 7.52.0 */ + CURLPROXY_HTTPS2 = 3, /* HTTPS and attempt HTTP/2 added in 8.2.0 */ + CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already + in 7.10 */ + CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ + CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ + CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the + host name rather than the IP address. added + in 7.18.0 */ +} curl_proxytype; /* this enum was added in 7.10 */ + +/* + * Bitmasks for CURLOPT_HTTPAUTH and CURLOPT_PROXYAUTH options: + * + * CURLAUTH_NONE - No HTTP authentication + * CURLAUTH_BASIC - HTTP Basic authentication (default) + * CURLAUTH_DIGEST - HTTP Digest authentication + * CURLAUTH_NEGOTIATE - HTTP Negotiate (SPNEGO) authentication + * CURLAUTH_GSSNEGOTIATE - Alias for CURLAUTH_NEGOTIATE (deprecated) + * CURLAUTH_NTLM - HTTP NTLM authentication + * CURLAUTH_DIGEST_IE - HTTP Digest authentication with IE flavour + * CURLAUTH_NTLM_WB - HTTP NTLM authentication delegated to winbind helper + * CURLAUTH_BEARER - HTTP Bearer token authentication + * CURLAUTH_ONLY - Use together with a single other type to force no + * authentication or just that single type + * CURLAUTH_ANY - All fine types set + * CURLAUTH_ANYSAFE - All fine types except Basic + */ + +#define CURLAUTH_NONE ((unsigned long)0) +#define CURLAUTH_BASIC (((unsigned long)1)<<0) +#define CURLAUTH_DIGEST (((unsigned long)1)<<1) +#define CURLAUTH_NEGOTIATE (((unsigned long)1)<<2) +/* Deprecated since the advent of CURLAUTH_NEGOTIATE */ +#define CURLAUTH_GSSNEGOTIATE CURLAUTH_NEGOTIATE +/* Used for CURLOPT_SOCKS5_AUTH to stay terminologically correct */ +#define CURLAUTH_GSSAPI CURLAUTH_NEGOTIATE +#define CURLAUTH_NTLM (((unsigned long)1)<<3) +#define CURLAUTH_DIGEST_IE (((unsigned long)1)<<4) +#define CURLAUTH_NTLM_WB (((unsigned long)1)<<5) +#define CURLAUTH_BEARER (((unsigned long)1)<<6) +#define CURLAUTH_AWS_SIGV4 (((unsigned long)1)<<7) +#define CURLAUTH_ONLY (((unsigned long)1)<<31) +#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE) +#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE)) + +#define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ +#define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ +#define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */ +#define CURLSSH_AUTH_PASSWORD (1<<1) /* password */ +#define CURLSSH_AUTH_HOST (1<<2) /* host key files */ +#define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */ +#define CURLSSH_AUTH_AGENT (1<<4) /* agent (ssh-agent, pageant...) */ +#define CURLSSH_AUTH_GSSAPI (1<<5) /* gssapi (kerberos, ...) */ +#define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY + +#define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */ +#define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */ +#define CURLGSSAPI_DELEGATION_FLAG (1<<1) /* delegate always */ + +#define CURL_ERROR_SIZE 256 + +enum curl_khtype { + CURLKHTYPE_UNKNOWN, + CURLKHTYPE_RSA1, + CURLKHTYPE_RSA, + CURLKHTYPE_DSS, + CURLKHTYPE_ECDSA, + CURLKHTYPE_ED25519 +}; + +struct curl_khkey { + const char *key; /* points to a null-terminated string encoded with base64 + if len is zero, otherwise to the "raw" data */ + size_t len; + enum curl_khtype keytype; +}; + +/* this is the set of return values expected from the curl_sshkeycallback + callback */ +enum curl_khstat { + CURLKHSTAT_FINE_ADD_TO_FILE, + CURLKHSTAT_FINE, + CURLKHSTAT_REJECT, /* reject the connection, return an error */ + CURLKHSTAT_DEFER, /* do not accept it, but we can't answer right now. + Causes a CURLE_PEER_FAILED_VERIFICATION error but the + connection will be left intact etc */ + CURLKHSTAT_FINE_REPLACE, /* accept and replace the wrong key */ + CURLKHSTAT_LAST /* not for use, only a marker for last-in-list */ +}; + +/* this is the set of status codes pass in to the callback */ +enum curl_khmatch { + CURLKHMATCH_OK, /* match */ + CURLKHMATCH_MISMATCH, /* host found, key mismatch! */ + CURLKHMATCH_MISSING, /* no matching host/key found */ + CURLKHMATCH_LAST /* not for use, only a marker for last-in-list */ +}; + +typedef int + (*curl_sshkeycallback) (CURL *easy, /* easy handle */ + const struct curl_khkey *knownkey, /* known */ + const struct curl_khkey *foundkey, /* found */ + enum curl_khmatch, /* libcurl's view on the keys */ + void *clientp); /* custom pointer passed with */ + /* CURLOPT_SSH_KEYDATA */ + +typedef int + (*curl_sshhostkeycallback) (void *clientp,/* custom pointer passed */ + /* with CURLOPT_SSH_HOSTKEYDATA */ + int keytype, /* CURLKHTYPE */ + const char *key, /* hostkey to check */ + size_t keylen); /* length of the key */ + /* return CURLE_OK to accept */ + /* or something else to refuse */ + + +/* parameter for the CURLOPT_USE_SSL option */ +typedef enum { + CURLUSESSL_NONE, /* do not attempt to use SSL */ + CURLUSESSL_TRY, /* try using SSL, proceed anyway otherwise */ + CURLUSESSL_CONTROL, /* SSL for the control connection or fail */ + CURLUSESSL_ALL, /* SSL for all communication or fail */ + CURLUSESSL_LAST /* not an option, never use */ +} curl_usessl; + +/* Definition of bits for the CURLOPT_SSL_OPTIONS argument: */ + +/* - ALLOW_BEAST tells libcurl to allow the BEAST SSL vulnerability in the + name of improving interoperability with older servers. Some SSL libraries + have introduced work-arounds for this flaw but those work-arounds sometimes + make the SSL communication fail. To regain functionality with those broken + servers, a user can this way allow the vulnerability back. */ +#define CURLSSLOPT_ALLOW_BEAST (1<<0) + +/* - NO_REVOKE tells libcurl to disable certificate revocation checks for those + SSL backends where such behavior is present. */ +#define CURLSSLOPT_NO_REVOKE (1<<1) + +/* - NO_PARTIALCHAIN tells libcurl to *NOT* accept a partial certificate chain + if possible. The OpenSSL backend has this ability. */ +#define CURLSSLOPT_NO_PARTIALCHAIN (1<<2) + +/* - REVOKE_BEST_EFFORT tells libcurl to ignore certificate revocation offline + checks and ignore missing revocation list for those SSL backends where such + behavior is present. */ +#define CURLSSLOPT_REVOKE_BEST_EFFORT (1<<3) + +/* - CURLSSLOPT_NATIVE_CA tells libcurl to use standard certificate store of + operating system. Currently implemented under MS-Windows. */ +#define CURLSSLOPT_NATIVE_CA (1<<4) + +/* - CURLSSLOPT_AUTO_CLIENT_CERT tells libcurl to automatically locate and use + a client certificate for authentication. (Schannel) */ +#define CURLSSLOPT_AUTO_CLIENT_CERT (1<<5) + +/* The default connection attempt delay in milliseconds for happy eyeballs. + CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3 and happy-eyeballs-timeout-ms.d document + this value, keep them in sync. */ +#define CURL_HET_DEFAULT 200L + +/* The default connection upkeep interval in milliseconds. */ +#define CURL_UPKEEP_INTERVAL_DEFAULT 60000L + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2009 */ + +#define CURLFTPSSL_NONE CURLUSESSL_NONE +#define CURLFTPSSL_TRY CURLUSESSL_TRY +#define CURLFTPSSL_CONTROL CURLUSESSL_CONTROL +#define CURLFTPSSL_ALL CURLUSESSL_ALL +#define CURLFTPSSL_LAST CURLUSESSL_LAST +#define curl_ftpssl curl_usessl +#endif /* !CURL_NO_OLDIES */ + +/* parameter for the CURLOPT_FTP_SSL_CCC option */ +typedef enum { + CURLFTPSSL_CCC_NONE, /* do not send CCC */ + CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */ + CURLFTPSSL_CCC_ACTIVE, /* Initiate the shutdown */ + CURLFTPSSL_CCC_LAST /* not an option, never use */ +} curl_ftpccc; + +/* parameter for the CURLOPT_FTPSSLAUTH option */ +typedef enum { + CURLFTPAUTH_DEFAULT, /* let libcurl decide */ + CURLFTPAUTH_SSL, /* use "AUTH SSL" */ + CURLFTPAUTH_TLS, /* use "AUTH TLS" */ + CURLFTPAUTH_LAST /* not an option, never use */ +} curl_ftpauth; + +/* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */ +typedef enum { + CURLFTP_CREATE_DIR_NONE, /* do NOT create missing dirs! */ + CURLFTP_CREATE_DIR, /* (FTP/SFTP) if CWD fails, try MKD and then CWD + again if MKD succeeded, for SFTP this does + similar magic */ + CURLFTP_CREATE_DIR_RETRY, /* (FTP only) if CWD fails, try MKD and then CWD + again even if MKD failed! */ + CURLFTP_CREATE_DIR_LAST /* not an option, never use */ +} curl_ftpcreatedir; + +/* parameter for the CURLOPT_FTP_FILEMETHOD option */ +typedef enum { + CURLFTPMETHOD_DEFAULT, /* let libcurl pick */ + CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */ + CURLFTPMETHOD_NOCWD, /* no CWD at all */ + CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */ + CURLFTPMETHOD_LAST /* not an option, never use */ +} curl_ftpmethod; + +/* bitmask defines for CURLOPT_HEADEROPT */ +#define CURLHEADER_UNIFIED 0 +#define CURLHEADER_SEPARATE (1<<0) + +/* CURLALTSVC_* are bits for the CURLOPT_ALTSVC_CTRL option */ +#define CURLALTSVC_READONLYFILE (1<<2) +#define CURLALTSVC_H1 (1<<3) +#define CURLALTSVC_H2 (1<<4) +#define CURLALTSVC_H3 (1<<5) + + +struct curl_hstsentry { + char *name; + size_t namelen; + unsigned int includeSubDomains:1; + char expire[18]; /* YYYYMMDD HH:MM:SS [null-terminated] */ +}; + +struct curl_index { + size_t index; /* the provided entry's "index" or count */ + size_t total; /* total number of entries to save */ +}; + +typedef enum { + CURLSTS_OK, + CURLSTS_DONE, + CURLSTS_FAIL +} CURLSTScode; + +typedef CURLSTScode (*curl_hstsread_callback)(CURL *easy, + struct curl_hstsentry *e, + void *userp); +typedef CURLSTScode (*curl_hstswrite_callback)(CURL *easy, + struct curl_hstsentry *e, + struct curl_index *i, + void *userp); + +/* CURLHSTS_* are bits for the CURLOPT_HSTS option */ +#define CURLHSTS_ENABLE (long)(1<<0) +#define CURLHSTS_READONLYFILE (long)(1<<1) + +/* The CURLPROTO_ defines below are for the **deprecated** CURLOPT_*PROTOCOLS + options. Do not use. */ +#define CURLPROTO_HTTP (1<<0) +#define CURLPROTO_HTTPS (1<<1) +#define CURLPROTO_FTP (1<<2) +#define CURLPROTO_FTPS (1<<3) +#define CURLPROTO_SCP (1<<4) +#define CURLPROTO_SFTP (1<<5) +#define CURLPROTO_TELNET (1<<6) +#define CURLPROTO_LDAP (1<<7) +#define CURLPROTO_LDAPS (1<<8) +#define CURLPROTO_DICT (1<<9) +#define CURLPROTO_FILE (1<<10) +#define CURLPROTO_TFTP (1<<11) +#define CURLPROTO_IMAP (1<<12) +#define CURLPROTO_IMAPS (1<<13) +#define CURLPROTO_POP3 (1<<14) +#define CURLPROTO_POP3S (1<<15) +#define CURLPROTO_SMTP (1<<16) +#define CURLPROTO_SMTPS (1<<17) +#define CURLPROTO_RTSP (1<<18) +#define CURLPROTO_RTMP (1<<19) +#define CURLPROTO_RTMPT (1<<20) +#define CURLPROTO_RTMPE (1<<21) +#define CURLPROTO_RTMPTE (1<<22) +#define CURLPROTO_RTMPS (1<<23) +#define CURLPROTO_RTMPTS (1<<24) +#define CURLPROTO_GOPHER (1<<25) +#define CURLPROTO_SMB (1<<26) +#define CURLPROTO_SMBS (1<<27) +#define CURLPROTO_MQTT (1<<28) +#define CURLPROTO_GOPHERS (1<<29) +#define CURLPROTO_ALL (~0) /* enable everything */ + +/* long may be 32 or 64 bits, but we should never depend on anything else + but 32 */ +#define CURLOPTTYPE_LONG 0 +#define CURLOPTTYPE_OBJECTPOINT 10000 +#define CURLOPTTYPE_FUNCTIONPOINT 20000 +#define CURLOPTTYPE_OFF_T 30000 +#define CURLOPTTYPE_BLOB 40000 + +/* *STRINGPOINT is an alias for OBJECTPOINT to allow tools to extract the + string options from the header file */ + + +#define CURLOPT(na,t,nu) na = t + nu +#define CURLOPTDEPRECATED(na,t,nu,v,m) na CURL_DEPRECATED(v,m) = t + nu + +/* CURLOPT aliases that make no run-time difference */ + +/* 'char *' argument to a string with a trailing zero */ +#define CURLOPTTYPE_STRINGPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'struct curl_slist *' argument */ +#define CURLOPTTYPE_SLISTPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'void *' argument passed untouched to callback */ +#define CURLOPTTYPE_CBPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'long' argument with a set of values/bitmask */ +#define CURLOPTTYPE_VALUES CURLOPTTYPE_LONG + +/* + * All CURLOPT_* values. + */ + +typedef enum { + /* This is the FILE * or void * the regular output should be written to. */ + CURLOPT(CURLOPT_WRITEDATA, CURLOPTTYPE_CBPOINT, 1), + + /* The full URL to get/put */ + CURLOPT(CURLOPT_URL, CURLOPTTYPE_STRINGPOINT, 2), + + /* Port number to connect to, if other than default. */ + CURLOPT(CURLOPT_PORT, CURLOPTTYPE_LONG, 3), + + /* Name of proxy to use. */ + CURLOPT(CURLOPT_PROXY, CURLOPTTYPE_STRINGPOINT, 4), + + /* "user:password;options" to use when fetching. */ + CURLOPT(CURLOPT_USERPWD, CURLOPTTYPE_STRINGPOINT, 5), + + /* "user:password" to use with proxy. */ + CURLOPT(CURLOPT_PROXYUSERPWD, CURLOPTTYPE_STRINGPOINT, 6), + + /* Range to get, specified as an ASCII string. */ + CURLOPT(CURLOPT_RANGE, CURLOPTTYPE_STRINGPOINT, 7), + + /* not used */ + + /* Specified file stream to upload from (use as input): */ + CURLOPT(CURLOPT_READDATA, CURLOPTTYPE_CBPOINT, 9), + + /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE + * bytes big. */ + CURLOPT(CURLOPT_ERRORBUFFER, CURLOPTTYPE_OBJECTPOINT, 10), + + /* Function that will be called to store the output (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_WRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 11), + + /* Function that will be called to read the input (instead of fread). The + * parameters will use fread() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_READFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 12), + + /* Time-out the read operation after this amount of seconds */ + CURLOPT(CURLOPT_TIMEOUT, CURLOPTTYPE_LONG, 13), + + /* If CURLOPT_READDATA is used, this can be used to inform libcurl about + * how large the file being sent really is. That allows better error + * checking and better verifies that the upload was successful. -1 means + * unknown size. + * + * For large file support, there is also a _LARGE version of the key + * which takes an off_t type, allowing platforms with larger off_t + * sizes to handle larger files. See below for INFILESIZE_LARGE. + */ + CURLOPT(CURLOPT_INFILESIZE, CURLOPTTYPE_LONG, 14), + + /* POST static input fields. */ + CURLOPT(CURLOPT_POSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 15), + + /* Set the referrer page (needed by some CGIs) */ + CURLOPT(CURLOPT_REFERER, CURLOPTTYPE_STRINGPOINT, 16), + + /* Set the FTP PORT string (interface name, named or numerical IP address) + Use i.e '-' to use default address. */ + CURLOPT(CURLOPT_FTPPORT, CURLOPTTYPE_STRINGPOINT, 17), + + /* Set the User-Agent string (examined by some CGIs) */ + CURLOPT(CURLOPT_USERAGENT, CURLOPTTYPE_STRINGPOINT, 18), + + /* If the download receives less than "low speed limit" bytes/second + * during "low speed time" seconds, the operations is aborted. + * You could i.e if you have a pretty high speed connection, abort if + * it is less than 2000 bytes/sec during 20 seconds. + */ + + /* Set the "low speed limit" */ + CURLOPT(CURLOPT_LOW_SPEED_LIMIT, CURLOPTTYPE_LONG, 19), + + /* Set the "low speed time" */ + CURLOPT(CURLOPT_LOW_SPEED_TIME, CURLOPTTYPE_LONG, 20), + + /* Set the continuation offset. + * + * Note there is also a _LARGE version of this key which uses + * off_t types, allowing for large file offsets on platforms which + * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. + */ + CURLOPT(CURLOPT_RESUME_FROM, CURLOPTTYPE_LONG, 21), + + /* Set cookie in request: */ + CURLOPT(CURLOPT_COOKIE, CURLOPTTYPE_STRINGPOINT, 22), + + /* This points to a linked list of headers, struct curl_slist kind. This + list is also used for RTSP (in spite of its name) */ + CURLOPT(CURLOPT_HTTPHEADER, CURLOPTTYPE_SLISTPOINT, 23), + + /* This points to a linked list of post entries, struct curl_httppost */ + CURLOPTDEPRECATED(CURLOPT_HTTPPOST, CURLOPTTYPE_OBJECTPOINT, 24, + 7.56.0, "Use CURLOPT_MIMEPOST"), + + /* name of the file keeping your private SSL-certificate */ + CURLOPT(CURLOPT_SSLCERT, CURLOPTTYPE_STRINGPOINT, 25), + + /* password for the SSL or SSH private key */ + CURLOPT(CURLOPT_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 26), + + /* send TYPE parameter? */ + CURLOPT(CURLOPT_CRLF, CURLOPTTYPE_LONG, 27), + + /* send linked-list of QUOTE commands */ + CURLOPT(CURLOPT_QUOTE, CURLOPTTYPE_SLISTPOINT, 28), + + /* send FILE * or void * to store headers to, if you use a callback it + is simply passed to the callback unmodified */ + CURLOPT(CURLOPT_HEADERDATA, CURLOPTTYPE_CBPOINT, 29), + + /* point to a file to read the initial cookies from, also enables + "cookie awareness" */ + CURLOPT(CURLOPT_COOKIEFILE, CURLOPTTYPE_STRINGPOINT, 31), + + /* What version to specifically try to use. + See CURL_SSLVERSION defines below. */ + CURLOPT(CURLOPT_SSLVERSION, CURLOPTTYPE_VALUES, 32), + + /* What kind of HTTP time condition to use, see defines */ + CURLOPT(CURLOPT_TIMECONDITION, CURLOPTTYPE_VALUES, 33), + + /* Time to use with the above condition. Specified in number of seconds + since 1 Jan 1970 */ + CURLOPT(CURLOPT_TIMEVALUE, CURLOPTTYPE_LONG, 34), + + /* 35 = OBSOLETE */ + + /* Custom request, for customizing the get command like + HTTP: DELETE, TRACE and others + FTP: to use a different list command + */ + CURLOPT(CURLOPT_CUSTOMREQUEST, CURLOPTTYPE_STRINGPOINT, 36), + + /* FILE handle to use instead of stderr */ + CURLOPT(CURLOPT_STDERR, CURLOPTTYPE_OBJECTPOINT, 37), + + /* 38 is not used */ + + /* send linked-list of post-transfer QUOTE commands */ + CURLOPT(CURLOPT_POSTQUOTE, CURLOPTTYPE_SLISTPOINT, 39), + + /* OBSOLETE, do not use! */ + CURLOPT(CURLOPT_OBSOLETE40, CURLOPTTYPE_OBJECTPOINT, 40), + + /* talk a lot */ + CURLOPT(CURLOPT_VERBOSE, CURLOPTTYPE_LONG, 41), + + /* throw the header out too */ + CURLOPT(CURLOPT_HEADER, CURLOPTTYPE_LONG, 42), + + /* shut off the progress meter */ + CURLOPT(CURLOPT_NOPROGRESS, CURLOPTTYPE_LONG, 43), + + /* use HEAD to get http document */ + CURLOPT(CURLOPT_NOBODY, CURLOPTTYPE_LONG, 44), + + /* no output on http error codes >= 400 */ + CURLOPT(CURLOPT_FAILONERROR, CURLOPTTYPE_LONG, 45), + + /* this is an upload */ + CURLOPT(CURLOPT_UPLOAD, CURLOPTTYPE_LONG, 46), + + /* HTTP POST method */ + CURLOPT(CURLOPT_POST, CURLOPTTYPE_LONG, 47), + + /* bare names when listing directories */ + CURLOPT(CURLOPT_DIRLISTONLY, CURLOPTTYPE_LONG, 48), + + /* Append instead of overwrite on upload! */ + CURLOPT(CURLOPT_APPEND, CURLOPTTYPE_LONG, 50), + + /* Specify whether to read the user+password from the .netrc or the URL. + * This must be one of the CURL_NETRC_* enums below. */ + CURLOPT(CURLOPT_NETRC, CURLOPTTYPE_VALUES, 51), + + /* use Location: Luke! */ + CURLOPT(CURLOPT_FOLLOWLOCATION, CURLOPTTYPE_LONG, 52), + + /* transfer data in text/ASCII format */ + CURLOPT(CURLOPT_TRANSFERTEXT, CURLOPTTYPE_LONG, 53), + + /* HTTP PUT */ + CURLOPTDEPRECATED(CURLOPT_PUT, CURLOPTTYPE_LONG, 54, + 7.12.1, "Use CURLOPT_UPLOAD"), + + /* 55 = OBSOLETE */ + + /* DEPRECATED + * Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_progress_callback + * prototype defines. */ + CURLOPTDEPRECATED(CURLOPT_PROGRESSFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 56, + 7.32.0, "Use CURLOPT_XFERINFOFUNCTION"), + + /* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION + callbacks */ + CURLOPT(CURLOPT_XFERINFODATA, CURLOPTTYPE_CBPOINT, 57), +#define CURLOPT_PROGRESSDATA CURLOPT_XFERINFODATA + + /* We want the referrer field set automatically when following locations */ + CURLOPT(CURLOPT_AUTOREFERER, CURLOPTTYPE_LONG, 58), + + /* Port of the proxy, can be set in the proxy string as well with: + "[host]:[port]" */ + CURLOPT(CURLOPT_PROXYPORT, CURLOPTTYPE_LONG, 59), + + /* size of the POST input data, if strlen() is not good to use */ + CURLOPT(CURLOPT_POSTFIELDSIZE, CURLOPTTYPE_LONG, 60), + + /* tunnel non-http operations through an HTTP proxy */ + CURLOPT(CURLOPT_HTTPPROXYTUNNEL, CURLOPTTYPE_LONG, 61), + + /* Set the interface string to use as outgoing network interface */ + CURLOPT(CURLOPT_INTERFACE, CURLOPTTYPE_STRINGPOINT, 62), + + /* Set the krb4/5 security level, this also enables krb4/5 awareness. This + * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string + * is set but doesn't match one of these, 'private' will be used. */ + CURLOPT(CURLOPT_KRBLEVEL, CURLOPTTYPE_STRINGPOINT, 63), + + /* Set if we should verify the peer in ssl handshake, set 1 to verify. */ + CURLOPT(CURLOPT_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 64), + + /* The CApath or CAfile used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAINFO, CURLOPTTYPE_STRINGPOINT, 65), + + /* 66 = OBSOLETE */ + /* 67 = OBSOLETE */ + + /* Maximum number of http redirects to follow */ + CURLOPT(CURLOPT_MAXREDIRS, CURLOPTTYPE_LONG, 68), + + /* Pass a long set to 1 to get the date of the requested document (if + possible)! Pass a zero to shut it off. */ + CURLOPT(CURLOPT_FILETIME, CURLOPTTYPE_LONG, 69), + + /* This points to a linked list of telnet options */ + CURLOPT(CURLOPT_TELNETOPTIONS, CURLOPTTYPE_SLISTPOINT, 70), + + /* Max amount of cached alive connections */ + CURLOPT(CURLOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 71), + + /* OBSOLETE, do not use! */ + CURLOPT(CURLOPT_OBSOLETE72, CURLOPTTYPE_LONG, 72), + + /* 73 = OBSOLETE */ + + /* Set to explicitly use a new connection for the upcoming transfer. + Do not use this unless you're absolutely sure of this, as it makes the + operation slower and is less friendly for the network. */ + CURLOPT(CURLOPT_FRESH_CONNECT, CURLOPTTYPE_LONG, 74), + + /* Set to explicitly forbid the upcoming transfer's connection to be reused + when done. Do not use this unless you're absolutely sure of this, as it + makes the operation slower and is less friendly for the network. */ + CURLOPT(CURLOPT_FORBID_REUSE, CURLOPTTYPE_LONG, 75), + + /* Set to a file name that contains random data for libcurl to use to + seed the random engine when doing SSL connects. */ + CURLOPTDEPRECATED(CURLOPT_RANDOM_FILE, CURLOPTTYPE_STRINGPOINT, 76, + 7.84.0, "Serves no purpose anymore"), + + /* Set to the Entropy Gathering Daemon socket pathname */ + CURLOPTDEPRECATED(CURLOPT_EGDSOCKET, CURLOPTTYPE_STRINGPOINT, 77, + 7.84.0, "Serves no purpose anymore"), + + /* Time-out connect operations after this amount of seconds, if connects are + OK within this time, then fine... This only aborts the connect phase. */ + CURLOPT(CURLOPT_CONNECTTIMEOUT, CURLOPTTYPE_LONG, 78), + + /* Function that will be called to store headers (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_HEADERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 79), + + /* Set this to force the HTTP request to get back to GET. Only really usable + if POST, PUT or a custom request have been used first. + */ + CURLOPT(CURLOPT_HTTPGET, CURLOPTTYPE_LONG, 80), + + /* Set if we should verify the Common name from the peer certificate in ssl + * handshake, set 1 to check existence, 2 to ensure that it matches the + * provided hostname. */ + CURLOPT(CURLOPT_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 81), + + /* Specify which file name to write all known cookies in after completed + operation. Set file name to "-" (dash) to make it go to stdout. */ + CURLOPT(CURLOPT_COOKIEJAR, CURLOPTTYPE_STRINGPOINT, 82), + + /* Specify which SSL ciphers to use */ + CURLOPT(CURLOPT_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 83), + + /* Specify which HTTP version to use! This must be set to one of the + CURL_HTTP_VERSION* enums set below. */ + CURLOPT(CURLOPT_HTTP_VERSION, CURLOPTTYPE_VALUES, 84), + + /* Specifically switch on or off the FTP engine's use of the EPSV command. By + default, that one will always be attempted before the more traditional + PASV command. */ + CURLOPT(CURLOPT_FTP_USE_EPSV, CURLOPTTYPE_LONG, 85), + + /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */ + CURLOPT(CURLOPT_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 86), + + /* name of the file keeping your private SSL-key */ + CURLOPT(CURLOPT_SSLKEY, CURLOPTTYPE_STRINGPOINT, 87), + + /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */ + CURLOPT(CURLOPT_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 88), + + /* crypto engine for the SSL-sub system */ + CURLOPT(CURLOPT_SSLENGINE, CURLOPTTYPE_STRINGPOINT, 89), + + /* set the crypto engine for the SSL-sub system as default + the param has no meaning... + */ + CURLOPT(CURLOPT_SSLENGINE_DEFAULT, CURLOPTTYPE_LONG, 90), + + /* Non-zero value means to use the global dns cache */ + /* DEPRECATED, do not use! */ + CURLOPTDEPRECATED(CURLOPT_DNS_USE_GLOBAL_CACHE, CURLOPTTYPE_LONG, 91, + 7.11.1, "Use CURLOPT_SHARE"), + + /* DNS cache timeout */ + CURLOPT(CURLOPT_DNS_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 92), + + /* send linked-list of pre-transfer QUOTE commands */ + CURLOPT(CURLOPT_PREQUOTE, CURLOPTTYPE_SLISTPOINT, 93), + + /* set the debug function */ + CURLOPT(CURLOPT_DEBUGFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 94), + + /* set the data for the debug function */ + CURLOPT(CURLOPT_DEBUGDATA, CURLOPTTYPE_CBPOINT, 95), + + /* mark this as start of a cookie session */ + CURLOPT(CURLOPT_COOKIESESSION, CURLOPTTYPE_LONG, 96), + + /* The CApath directory used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAPATH, CURLOPTTYPE_STRINGPOINT, 97), + + /* Instruct libcurl to use a smaller receive buffer */ + CURLOPT(CURLOPT_BUFFERSIZE, CURLOPTTYPE_LONG, 98), + + /* Instruct libcurl to not use any signal/alarm handlers, even when using + timeouts. This option is useful for multi-threaded applications. + See libcurl-the-guide for more background information. */ + CURLOPT(CURLOPT_NOSIGNAL, CURLOPTTYPE_LONG, 99), + + /* Provide a CURLShare for mutexing non-ts data */ + CURLOPT(CURLOPT_SHARE, CURLOPTTYPE_OBJECTPOINT, 100), + + /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default), + CURLPROXY_HTTPS, CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and + CURLPROXY_SOCKS5. */ + CURLOPT(CURLOPT_PROXYTYPE, CURLOPTTYPE_VALUES, 101), + + /* Set the Accept-Encoding string. Use this to tell a server you would like + the response to be compressed. Before 7.21.6, this was known as + CURLOPT_ENCODING */ + CURLOPT(CURLOPT_ACCEPT_ENCODING, CURLOPTTYPE_STRINGPOINT, 102), + + /* Set pointer to private data */ + CURLOPT(CURLOPT_PRIVATE, CURLOPTTYPE_OBJECTPOINT, 103), + + /* Set aliases for HTTP 200 in the HTTP Response header */ + CURLOPT(CURLOPT_HTTP200ALIASES, CURLOPTTYPE_SLISTPOINT, 104), + + /* Continue to send authentication (user+password) when following locations, + even when hostname changed. This can potentially send off the name + and password to whatever host the server decides. */ + CURLOPT(CURLOPT_UNRESTRICTED_AUTH, CURLOPTTYPE_LONG, 105), + + /* Specifically switch on or off the FTP engine's use of the EPRT command ( + it also disables the LPRT attempt). By default, those ones will always be + attempted before the good old traditional PORT command. */ + CURLOPT(CURLOPT_FTP_USE_EPRT, CURLOPTTYPE_LONG, 106), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_USERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CURLOPT(CURLOPT_HTTPAUTH, CURLOPTTYPE_VALUES, 107), + + /* Set the ssl context callback function, currently only for OpenSSL or + WolfSSL ssl_ctx, or mbedTLS mbedtls_ssl_config in the second argument. + The function must match the curl_ssl_ctx_callback prototype. */ + CURLOPT(CURLOPT_SSL_CTX_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 108), + + /* Set the userdata for the ssl context callback function's third + argument */ + CURLOPT(CURLOPT_SSL_CTX_DATA, CURLOPTTYPE_CBPOINT, 109), + + /* FTP Option that causes missing dirs to be created on the remote server. + In 7.19.4 we introduced the convenience enums for this option using the + CURLFTP_CREATE_DIR prefix. + */ + CURLOPT(CURLOPT_FTP_CREATE_MISSING_DIRS, CURLOPTTYPE_LONG, 110), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_PROXYUSERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CURLOPT(CURLOPT_PROXYAUTH, CURLOPTTYPE_VALUES, 111), + + /* Option that changes the timeout, in seconds, associated with getting a + response. This is different from transfer timeout time and essentially + places a demand on the server to acknowledge commands in a timely + manner. For FTP, SMTP, IMAP and POP3. */ + CURLOPT(CURLOPT_SERVER_RESPONSE_TIMEOUT, CURLOPTTYPE_LONG, 112), + + /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to + tell libcurl to use those IP versions only. This only has effect on + systems with support for more than one, i.e IPv4 _and_ IPv6. */ + CURLOPT(CURLOPT_IPRESOLVE, CURLOPTTYPE_VALUES, 113), + + /* Set this option to limit the size of a file that will be downloaded from + an HTTP or FTP server. + + Note there is also _LARGE version which adds large file support for + platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ + CURLOPT(CURLOPT_MAXFILESIZE, CURLOPTTYPE_LONG, 114), + + /* See the comment for INFILESIZE above, but in short, specifies + * the size of the file being uploaded. -1 means unknown. + */ + CURLOPT(CURLOPT_INFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 115), + + /* Sets the continuation offset. There is also a CURLOPTTYPE_LONG version + * of this; look above for RESUME_FROM. + */ + CURLOPT(CURLOPT_RESUME_FROM_LARGE, CURLOPTTYPE_OFF_T, 116), + + /* Sets the maximum size of data that will be downloaded from + * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. + */ + CURLOPT(CURLOPT_MAXFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 117), + + /* Set this option to the file name of your .netrc file you want libcurl + to parse (using the CURLOPT_NETRC option). If not set, libcurl will do + a poor attempt to find the user's home directory and check for a .netrc + file in there. */ + CURLOPT(CURLOPT_NETRC_FILE, CURLOPTTYPE_STRINGPOINT, 118), + + /* Enable SSL/TLS for FTP, pick one of: + CURLUSESSL_TRY - try using SSL, proceed anyway otherwise + CURLUSESSL_CONTROL - SSL for the control connection or fail + CURLUSESSL_ALL - SSL for all communication or fail + */ + CURLOPT(CURLOPT_USE_SSL, CURLOPTTYPE_VALUES, 119), + + /* The _LARGE version of the standard POSTFIELDSIZE option */ + CURLOPT(CURLOPT_POSTFIELDSIZE_LARGE, CURLOPTTYPE_OFF_T, 120), + + /* Enable/disable the TCP Nagle algorithm */ + CURLOPT(CURLOPT_TCP_NODELAY, CURLOPTTYPE_LONG, 121), + + /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 123 OBSOLETE. Gone in 7.16.0 */ + /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 127 OBSOLETE. Gone in 7.16.0 */ + /* 128 OBSOLETE. Gone in 7.16.0 */ + + /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option + can be used to change libcurl's default action which is to first try + "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK + response has been received. + + Available parameters are: + CURLFTPAUTH_DEFAULT - let libcurl decide + CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS + CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL + */ + CURLOPT(CURLOPT_FTPSSLAUTH, CURLOPTTYPE_VALUES, 129), + + CURLOPTDEPRECATED(CURLOPT_IOCTLFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 130, + 7.18.0, "Use CURLOPT_SEEKFUNCTION"), + CURLOPTDEPRECATED(CURLOPT_IOCTLDATA, CURLOPTTYPE_CBPOINT, 131, + 7.18.0, "Use CURLOPT_SEEKDATA"), + + /* 132 OBSOLETE. Gone in 7.16.0 */ + /* 133 OBSOLETE. Gone in 7.16.0 */ + + /* null-terminated string for pass on to the FTP server when asked for + "account" info */ + CURLOPT(CURLOPT_FTP_ACCOUNT, CURLOPTTYPE_STRINGPOINT, 134), + + /* feed cookie into cookie engine */ + CURLOPT(CURLOPT_COOKIELIST, CURLOPTTYPE_STRINGPOINT, 135), + + /* ignore Content-Length */ + CURLOPT(CURLOPT_IGNORE_CONTENT_LENGTH, CURLOPTTYPE_LONG, 136), + + /* Set to non-zero to skip the IP address received in a 227 PASV FTP server + response. Typically used for FTP-SSL purposes but is not restricted to + that. libcurl will then instead use the same IP address it used for the + control connection. */ + CURLOPT(CURLOPT_FTP_SKIP_PASV_IP, CURLOPTTYPE_LONG, 137), + + /* Select "file method" to use when doing FTP, see the curl_ftpmethod + above. */ + CURLOPT(CURLOPT_FTP_FILEMETHOD, CURLOPTTYPE_VALUES, 138), + + /* Local port number to bind the socket to */ + CURLOPT(CURLOPT_LOCALPORT, CURLOPTTYPE_LONG, 139), + + /* Number of ports to try, including the first one set with LOCALPORT. + Thus, setting it to 1 will make no additional attempts but the first. + */ + CURLOPT(CURLOPT_LOCALPORTRANGE, CURLOPTTYPE_LONG, 140), + + /* no transfer, set up connection and let application use the socket by + extracting it with CURLINFO_LASTSOCKET */ + CURLOPT(CURLOPT_CONNECT_ONLY, CURLOPTTYPE_LONG, 141), + + /* Function that will be called to convert from the + network encoding (instead of using the iconv calls in libcurl) */ + CURLOPTDEPRECATED(CURLOPT_CONV_FROM_NETWORK_FUNCTION, + CURLOPTTYPE_FUNCTIONPOINT, 142, + 7.82.0, "Serves no purpose anymore"), + + /* Function that will be called to convert to the + network encoding (instead of using the iconv calls in libcurl) */ + CURLOPTDEPRECATED(CURLOPT_CONV_TO_NETWORK_FUNCTION, + CURLOPTTYPE_FUNCTIONPOINT, 143, + 7.82.0, "Serves no purpose anymore"), + + /* Function that will be called to convert from UTF8 + (instead of using the iconv calls in libcurl) + Note that this is used only for SSL certificate processing */ + CURLOPTDEPRECATED(CURLOPT_CONV_FROM_UTF8_FUNCTION, + CURLOPTTYPE_FUNCTIONPOINT, 144, + 7.82.0, "Serves no purpose anymore"), + + /* if the connection proceeds too quickly then need to slow it down */ + /* limit-rate: maximum number of bytes per second to send or receive */ + CURLOPT(CURLOPT_MAX_SEND_SPEED_LARGE, CURLOPTTYPE_OFF_T, 145), + CURLOPT(CURLOPT_MAX_RECV_SPEED_LARGE, CURLOPTTYPE_OFF_T, 146), + + /* Pointer to command string to send if USER/PASS fails. */ + CURLOPT(CURLOPT_FTP_ALTERNATIVE_TO_USER, CURLOPTTYPE_STRINGPOINT, 147), + + /* callback function for setting socket options */ + CURLOPT(CURLOPT_SOCKOPTFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 148), + CURLOPT(CURLOPT_SOCKOPTDATA, CURLOPTTYPE_CBPOINT, 149), + + /* set to 0 to disable session ID reuse for this transfer, default is + enabled (== 1) */ + CURLOPT(CURLOPT_SSL_SESSIONID_CACHE, CURLOPTTYPE_LONG, 150), + + /* allowed SSH authentication methods */ + CURLOPT(CURLOPT_SSH_AUTH_TYPES, CURLOPTTYPE_VALUES, 151), + + /* Used by scp/sftp to do public/private key authentication */ + CURLOPT(CURLOPT_SSH_PUBLIC_KEYFILE, CURLOPTTYPE_STRINGPOINT, 152), + CURLOPT(CURLOPT_SSH_PRIVATE_KEYFILE, CURLOPTTYPE_STRINGPOINT, 153), + + /* Send CCC (Clear Command Channel) after authentication */ + CURLOPT(CURLOPT_FTP_SSL_CCC, CURLOPTTYPE_LONG, 154), + + /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */ + CURLOPT(CURLOPT_TIMEOUT_MS, CURLOPTTYPE_LONG, 155), + CURLOPT(CURLOPT_CONNECTTIMEOUT_MS, CURLOPTTYPE_LONG, 156), + + /* set to zero to disable the libcurl's decoding and thus pass the raw body + data to the application even when it is encoded/compressed */ + CURLOPT(CURLOPT_HTTP_TRANSFER_DECODING, CURLOPTTYPE_LONG, 157), + CURLOPT(CURLOPT_HTTP_CONTENT_DECODING, CURLOPTTYPE_LONG, 158), + + /* Permission used when creating new files and directories on the remote + server for protocols that support it, SFTP/SCP/FILE */ + CURLOPT(CURLOPT_NEW_FILE_PERMS, CURLOPTTYPE_LONG, 159), + CURLOPT(CURLOPT_NEW_DIRECTORY_PERMS, CURLOPTTYPE_LONG, 160), + + /* Set the behavior of POST when redirecting. Values must be set to one + of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */ + CURLOPT(CURLOPT_POSTREDIR, CURLOPTTYPE_VALUES, 161), + + /* used by scp/sftp to verify the host's public key */ + CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_MD5, CURLOPTTYPE_STRINGPOINT, 162), + + /* Callback function for opening socket (instead of socket(2)). Optionally, + callback is able change the address or refuse to connect returning + CURL_SOCKET_BAD. The callback should have type + curl_opensocket_callback */ + CURLOPT(CURLOPT_OPENSOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 163), + CURLOPT(CURLOPT_OPENSOCKETDATA, CURLOPTTYPE_CBPOINT, 164), + + /* POST volatile input fields. */ + CURLOPT(CURLOPT_COPYPOSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 165), + + /* set transfer mode (;type=) when doing FTP via an HTTP proxy */ + CURLOPT(CURLOPT_PROXY_TRANSFER_MODE, CURLOPTTYPE_LONG, 166), + + /* Callback function for seeking in the input stream */ + CURLOPT(CURLOPT_SEEKFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 167), + CURLOPT(CURLOPT_SEEKDATA, CURLOPTTYPE_CBPOINT, 168), + + /* CRL file */ + CURLOPT(CURLOPT_CRLFILE, CURLOPTTYPE_STRINGPOINT, 169), + + /* Issuer certificate */ + CURLOPT(CURLOPT_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 170), + + /* (IPv6) Address scope */ + CURLOPT(CURLOPT_ADDRESS_SCOPE, CURLOPTTYPE_LONG, 171), + + /* Collect certificate chain info and allow it to get retrievable with + CURLINFO_CERTINFO after the transfer is complete. */ + CURLOPT(CURLOPT_CERTINFO, CURLOPTTYPE_LONG, 172), + + /* "name" and "pwd" to use when fetching. */ + CURLOPT(CURLOPT_USERNAME, CURLOPTTYPE_STRINGPOINT, 173), + CURLOPT(CURLOPT_PASSWORD, CURLOPTTYPE_STRINGPOINT, 174), + + /* "name" and "pwd" to use with Proxy when fetching. */ + CURLOPT(CURLOPT_PROXYUSERNAME, CURLOPTTYPE_STRINGPOINT, 175), + CURLOPT(CURLOPT_PROXYPASSWORD, CURLOPTTYPE_STRINGPOINT, 176), + + /* Comma separated list of hostnames defining no-proxy zones. These should + match both hostnames directly, and hostnames within a domain. For + example, local.com will match local.com and www.local.com, but NOT + notlocal.com or www.notlocal.com. For compatibility with other + implementations of this, .local.com will be considered to be the same as + local.com. A single * is the only valid wildcard, and effectively + disables the use of proxy. */ + CURLOPT(CURLOPT_NOPROXY, CURLOPTTYPE_STRINGPOINT, 177), + + /* block size for TFTP transfers */ + CURLOPT(CURLOPT_TFTP_BLKSIZE, CURLOPTTYPE_LONG, 178), + + /* Socks Service */ + /* DEPRECATED, do not use! */ + CURLOPTDEPRECATED(CURLOPT_SOCKS5_GSSAPI_SERVICE, + CURLOPTTYPE_STRINGPOINT, 179, + 7.49.0, "Use CURLOPT_PROXY_SERVICE_NAME"), + + /* Socks Service */ + CURLOPT(CURLOPT_SOCKS5_GSSAPI_NEC, CURLOPTTYPE_LONG, 180), + + /* set the bitmask for the protocols that are allowed to be used for the + transfer, which thus helps the app which takes URLs from users or other + external inputs and want to restrict what protocol(s) to deal + with. Defaults to CURLPROTO_ALL. */ + CURLOPTDEPRECATED(CURLOPT_PROTOCOLS, CURLOPTTYPE_LONG, 181, + 7.85.0, "Use CURLOPT_PROTOCOLS_STR"), + + /* set the bitmask for the protocols that libcurl is allowed to follow to, + as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs + to be set in both bitmasks to be allowed to get redirected to. */ + CURLOPTDEPRECATED(CURLOPT_REDIR_PROTOCOLS, CURLOPTTYPE_LONG, 182, + 7.85.0, "Use CURLOPT_REDIR_PROTOCOLS_STR"), + + /* set the SSH knownhost file name to use */ + CURLOPT(CURLOPT_SSH_KNOWNHOSTS, CURLOPTTYPE_STRINGPOINT, 183), + + /* set the SSH host key callback, must point to a curl_sshkeycallback + function */ + CURLOPT(CURLOPT_SSH_KEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 184), + + /* set the SSH host key callback custom pointer */ + CURLOPT(CURLOPT_SSH_KEYDATA, CURLOPTTYPE_CBPOINT, 185), + + /* set the SMTP mail originator */ + CURLOPT(CURLOPT_MAIL_FROM, CURLOPTTYPE_STRINGPOINT, 186), + + /* set the list of SMTP mail receiver(s) */ + CURLOPT(CURLOPT_MAIL_RCPT, CURLOPTTYPE_SLISTPOINT, 187), + + /* FTP: send PRET before PASV */ + CURLOPT(CURLOPT_FTP_USE_PRET, CURLOPTTYPE_LONG, 188), + + /* RTSP request method (OPTIONS, SETUP, PLAY, etc...) */ + CURLOPT(CURLOPT_RTSP_REQUEST, CURLOPTTYPE_VALUES, 189), + + /* The RTSP session identifier */ + CURLOPT(CURLOPT_RTSP_SESSION_ID, CURLOPTTYPE_STRINGPOINT, 190), + + /* The RTSP stream URI */ + CURLOPT(CURLOPT_RTSP_STREAM_URI, CURLOPTTYPE_STRINGPOINT, 191), + + /* The Transport: header to use in RTSP requests */ + CURLOPT(CURLOPT_RTSP_TRANSPORT, CURLOPTTYPE_STRINGPOINT, 192), + + /* Manually initialize the client RTSP CSeq for this handle */ + CURLOPT(CURLOPT_RTSP_CLIENT_CSEQ, CURLOPTTYPE_LONG, 193), + + /* Manually initialize the server RTSP CSeq for this handle */ + CURLOPT(CURLOPT_RTSP_SERVER_CSEQ, CURLOPTTYPE_LONG, 194), + + /* The stream to pass to INTERLEAVEFUNCTION. */ + CURLOPT(CURLOPT_INTERLEAVEDATA, CURLOPTTYPE_CBPOINT, 195), + + /* Let the application define a custom write method for RTP data */ + CURLOPT(CURLOPT_INTERLEAVEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 196), + + /* Turn on wildcard matching */ + CURLOPT(CURLOPT_WILDCARDMATCH, CURLOPTTYPE_LONG, 197), + + /* Directory matching callback called before downloading of an + individual file (chunk) started */ + CURLOPT(CURLOPT_CHUNK_BGN_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 198), + + /* Directory matching callback called after the file (chunk) + was downloaded, or skipped */ + CURLOPT(CURLOPT_CHUNK_END_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 199), + + /* Change match (fnmatch-like) callback for wildcard matching */ + CURLOPT(CURLOPT_FNMATCH_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 200), + + /* Let the application define custom chunk data pointer */ + CURLOPT(CURLOPT_CHUNK_DATA, CURLOPTTYPE_CBPOINT, 201), + + /* FNMATCH_FUNCTION user pointer */ + CURLOPT(CURLOPT_FNMATCH_DATA, CURLOPTTYPE_CBPOINT, 202), + + /* send linked-list of name:port:address sets */ + CURLOPT(CURLOPT_RESOLVE, CURLOPTTYPE_SLISTPOINT, 203), + + /* Set a username for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 204), + + /* Set a password for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 205), + + /* Set authentication type for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 206), + + /* Set to 1 to enable the "TE:" header in HTTP requests to ask for + compressed transfer-encoded responses. Set to 0 to disable the use of TE: + in outgoing requests. The current default is 0, but it might change in a + future libcurl release. + + libcurl will ask for the compressed methods it knows of, and if that + isn't any, it will not ask for transfer-encoding at all even if this + option is set to 1. + + */ + CURLOPT(CURLOPT_TRANSFER_ENCODING, CURLOPTTYPE_LONG, 207), + + /* Callback function for closing socket (instead of close(2)). The callback + should have type curl_closesocket_callback */ + CURLOPT(CURLOPT_CLOSESOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 208), + CURLOPT(CURLOPT_CLOSESOCKETDATA, CURLOPTTYPE_CBPOINT, 209), + + /* allow GSSAPI credential delegation */ + CURLOPT(CURLOPT_GSSAPI_DELEGATION, CURLOPTTYPE_VALUES, 210), + + /* Set the name servers to use for DNS resolution */ + CURLOPT(CURLOPT_DNS_SERVERS, CURLOPTTYPE_STRINGPOINT, 211), + + /* Time-out accept operations (currently for FTP only) after this amount + of milliseconds. */ + CURLOPT(CURLOPT_ACCEPTTIMEOUT_MS, CURLOPTTYPE_LONG, 212), + + /* Set TCP keepalive */ + CURLOPT(CURLOPT_TCP_KEEPALIVE, CURLOPTTYPE_LONG, 213), + + /* non-universal keepalive knobs (Linux, AIX, HP-UX, more) */ + CURLOPT(CURLOPT_TCP_KEEPIDLE, CURLOPTTYPE_LONG, 214), + CURLOPT(CURLOPT_TCP_KEEPINTVL, CURLOPTTYPE_LONG, 215), + + /* Enable/disable specific SSL features with a bitmask, see CURLSSLOPT_* */ + CURLOPT(CURLOPT_SSL_OPTIONS, CURLOPTTYPE_VALUES, 216), + + /* Set the SMTP auth originator */ + CURLOPT(CURLOPT_MAIL_AUTH, CURLOPTTYPE_STRINGPOINT, 217), + + /* Enable/disable SASL initial response */ + CURLOPT(CURLOPT_SASL_IR, CURLOPTTYPE_LONG, 218), + + /* Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_xferinfo_callback + * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */ + CURLOPT(CURLOPT_XFERINFOFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 219), + + /* The XOAUTH2 bearer token */ + CURLOPT(CURLOPT_XOAUTH2_BEARER, CURLOPTTYPE_STRINGPOINT, 220), + + /* Set the interface string to use as outgoing network + * interface for DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_INTERFACE, CURLOPTTYPE_STRINGPOINT, 221), + + /* Set the local IPv4 address to use for outgoing DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_LOCAL_IP4, CURLOPTTYPE_STRINGPOINT, 222), + + /* Set the local IPv6 address to use for outgoing DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_LOCAL_IP6, CURLOPTTYPE_STRINGPOINT, 223), + + /* Set authentication options directly */ + CURLOPT(CURLOPT_LOGIN_OPTIONS, CURLOPTTYPE_STRINGPOINT, 224), + + /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */ + CURLOPTDEPRECATED(CURLOPT_SSL_ENABLE_NPN, CURLOPTTYPE_LONG, 225, + 7.86.0, "Has no function"), + + /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */ + CURLOPT(CURLOPT_SSL_ENABLE_ALPN, CURLOPTTYPE_LONG, 226), + + /* Time to wait for a response to an HTTP request containing an + * Expect: 100-continue header before sending the data anyway. */ + CURLOPT(CURLOPT_EXPECT_100_TIMEOUT_MS, CURLOPTTYPE_LONG, 227), + + /* This points to a linked list of headers used for proxy requests only, + struct curl_slist kind */ + CURLOPT(CURLOPT_PROXYHEADER, CURLOPTTYPE_SLISTPOINT, 228), + + /* Pass in a bitmask of "header options" */ + CURLOPT(CURLOPT_HEADEROPT, CURLOPTTYPE_VALUES, 229), + + /* The public key in DER form used to validate the peer public key + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 230), + + /* Path to Unix domain socket */ + CURLOPT(CURLOPT_UNIX_SOCKET_PATH, CURLOPTTYPE_STRINGPOINT, 231), + + /* Set if we should verify the certificate status. */ + CURLOPT(CURLOPT_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 232), + + /* Set if we should enable TLS false start. */ + CURLOPT(CURLOPT_SSL_FALSESTART, CURLOPTTYPE_LONG, 233), + + /* Do not squash dot-dot sequences */ + CURLOPT(CURLOPT_PATH_AS_IS, CURLOPTTYPE_LONG, 234), + + /* Proxy Service Name */ + CURLOPT(CURLOPT_PROXY_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 235), + + /* Service Name */ + CURLOPT(CURLOPT_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 236), + + /* Wait/don't wait for pipe/mutex to clarify */ + CURLOPT(CURLOPT_PIPEWAIT, CURLOPTTYPE_LONG, 237), + + /* Set the protocol used when curl is given a URL without a protocol */ + CURLOPT(CURLOPT_DEFAULT_PROTOCOL, CURLOPTTYPE_STRINGPOINT, 238), + + /* Set stream weight, 1 - 256 (default is 16) */ + CURLOPT(CURLOPT_STREAM_WEIGHT, CURLOPTTYPE_LONG, 239), + + /* Set stream dependency on another CURL handle */ + CURLOPT(CURLOPT_STREAM_DEPENDS, CURLOPTTYPE_OBJECTPOINT, 240), + + /* Set E-xclusive stream dependency on another CURL handle */ + CURLOPT(CURLOPT_STREAM_DEPENDS_E, CURLOPTTYPE_OBJECTPOINT, 241), + + /* Do not send any tftp option requests to the server */ + CURLOPT(CURLOPT_TFTP_NO_OPTIONS, CURLOPTTYPE_LONG, 242), + + /* Linked-list of host:port:connect-to-host:connect-to-port, + overrides the URL's host:port (only for the network layer) */ + CURLOPT(CURLOPT_CONNECT_TO, CURLOPTTYPE_SLISTPOINT, 243), + + /* Set TCP Fast Open */ + CURLOPT(CURLOPT_TCP_FASTOPEN, CURLOPTTYPE_LONG, 244), + + /* Continue to send data if the server responds early with an + * HTTP status code >= 300 */ + CURLOPT(CURLOPT_KEEP_SENDING_ON_ERROR, CURLOPTTYPE_LONG, 245), + + /* The CApath or CAfile used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAINFO, CURLOPTTYPE_STRINGPOINT, 246), + + /* The CApath directory used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAPATH, CURLOPTTYPE_STRINGPOINT, 247), + + /* Set if we should verify the proxy in ssl handshake, + set 1 to verify. */ + CURLOPT(CURLOPT_PROXY_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 248), + + /* Set if we should verify the Common name from the proxy certificate in ssl + * handshake, set 1 to check existence, 2 to ensure that it matches + * the provided hostname. */ + CURLOPT(CURLOPT_PROXY_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 249), + + /* What version to specifically try to use for proxy. + See CURL_SSLVERSION defines below. */ + CURLOPT(CURLOPT_PROXY_SSLVERSION, CURLOPTTYPE_VALUES, 250), + + /* Set a username for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 251), + + /* Set a password for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 252), + + /* Set authentication type for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 253), + + /* name of the file keeping your private SSL-certificate for proxy */ + CURLOPT(CURLOPT_PROXY_SSLCERT, CURLOPTTYPE_STRINGPOINT, 254), + + /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") for + proxy */ + CURLOPT(CURLOPT_PROXY_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 255), + + /* name of the file keeping your private SSL-key for proxy */ + CURLOPT(CURLOPT_PROXY_SSLKEY, CURLOPTTYPE_STRINGPOINT, 256), + + /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") for + proxy */ + CURLOPT(CURLOPT_PROXY_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 257), + + /* password for the SSL private key for proxy */ + CURLOPT(CURLOPT_PROXY_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 258), + + /* Specify which SSL ciphers to use for proxy */ + CURLOPT(CURLOPT_PROXY_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 259), + + /* CRL file for proxy */ + CURLOPT(CURLOPT_PROXY_CRLFILE, CURLOPTTYPE_STRINGPOINT, 260), + + /* Enable/disable specific SSL features with a bitmask for proxy, see + CURLSSLOPT_* */ + CURLOPT(CURLOPT_PROXY_SSL_OPTIONS, CURLOPTTYPE_LONG, 261), + + /* Name of pre proxy to use. */ + CURLOPT(CURLOPT_PRE_PROXY, CURLOPTTYPE_STRINGPOINT, 262), + + /* The public key in DER form used to validate the proxy public key + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 263), + + /* Path to an abstract Unix domain socket */ + CURLOPT(CURLOPT_ABSTRACT_UNIX_SOCKET, CURLOPTTYPE_STRINGPOINT, 264), + + /* Suppress proxy CONNECT response headers from user callbacks */ + CURLOPT(CURLOPT_SUPPRESS_CONNECT_HEADERS, CURLOPTTYPE_LONG, 265), + + /* The request target, instead of extracted from the URL */ + CURLOPT(CURLOPT_REQUEST_TARGET, CURLOPTTYPE_STRINGPOINT, 266), + + /* bitmask of allowed auth methods for connections to SOCKS5 proxies */ + CURLOPT(CURLOPT_SOCKS5_AUTH, CURLOPTTYPE_LONG, 267), + + /* Enable/disable SSH compression */ + CURLOPT(CURLOPT_SSH_COMPRESSION, CURLOPTTYPE_LONG, 268), + + /* Post MIME data. */ + CURLOPT(CURLOPT_MIMEPOST, CURLOPTTYPE_OBJECTPOINT, 269), + + /* Time to use with the CURLOPT_TIMECONDITION. Specified in number of + seconds since 1 Jan 1970. */ + CURLOPT(CURLOPT_TIMEVALUE_LARGE, CURLOPTTYPE_OFF_T, 270), + + /* Head start in milliseconds to give happy eyeballs. */ + CURLOPT(CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, CURLOPTTYPE_LONG, 271), + + /* Function that will be called before a resolver request is made */ + CURLOPT(CURLOPT_RESOLVER_START_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 272), + + /* User data to pass to the resolver start callback. */ + CURLOPT(CURLOPT_RESOLVER_START_DATA, CURLOPTTYPE_CBPOINT, 273), + + /* send HAProxy PROXY protocol header? */ + CURLOPT(CURLOPT_HAPROXYPROTOCOL, CURLOPTTYPE_LONG, 274), + + /* shuffle addresses before use when DNS returns multiple */ + CURLOPT(CURLOPT_DNS_SHUFFLE_ADDRESSES, CURLOPTTYPE_LONG, 275), + + /* Specify which TLS 1.3 ciphers suites to use */ + CURLOPT(CURLOPT_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 276), + CURLOPT(CURLOPT_PROXY_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 277), + + /* Disallow specifying username/login in URL. */ + CURLOPT(CURLOPT_DISALLOW_USERNAME_IN_URL, CURLOPTTYPE_LONG, 278), + + /* DNS-over-HTTPS URL */ + CURLOPT(CURLOPT_DOH_URL, CURLOPTTYPE_STRINGPOINT, 279), + + /* Preferred buffer size to use for uploads */ + CURLOPT(CURLOPT_UPLOAD_BUFFERSIZE, CURLOPTTYPE_LONG, 280), + + /* Time in ms between connection upkeep calls for long-lived connections. */ + CURLOPT(CURLOPT_UPKEEP_INTERVAL_MS, CURLOPTTYPE_LONG, 281), + + /* Specify URL using CURL URL API. */ + CURLOPT(CURLOPT_CURLU, CURLOPTTYPE_OBJECTPOINT, 282), + + /* add trailing data just after no more data is available */ + CURLOPT(CURLOPT_TRAILERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 283), + + /* pointer to be passed to HTTP_TRAILER_FUNCTION */ + CURLOPT(CURLOPT_TRAILERDATA, CURLOPTTYPE_CBPOINT, 284), + + /* set this to 1L to allow HTTP/0.9 responses or 0L to disallow */ + CURLOPT(CURLOPT_HTTP09_ALLOWED, CURLOPTTYPE_LONG, 285), + + /* alt-svc control bitmask */ + CURLOPT(CURLOPT_ALTSVC_CTRL, CURLOPTTYPE_LONG, 286), + + /* alt-svc cache file name to possibly read from/write to */ + CURLOPT(CURLOPT_ALTSVC, CURLOPTTYPE_STRINGPOINT, 287), + + /* maximum age (idle time) of a connection to consider it for reuse + * (in seconds) */ + CURLOPT(CURLOPT_MAXAGE_CONN, CURLOPTTYPE_LONG, 288), + + /* SASL authorization identity */ + CURLOPT(CURLOPT_SASL_AUTHZID, CURLOPTTYPE_STRINGPOINT, 289), + + /* allow RCPT TO command to fail for some recipients */ + CURLOPT(CURLOPT_MAIL_RCPT_ALLOWFAILS, CURLOPTTYPE_LONG, 290), + + /* the private SSL-certificate as a "blob" */ + CURLOPT(CURLOPT_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 291), + CURLOPT(CURLOPT_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 292), + CURLOPT(CURLOPT_PROXY_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 293), + CURLOPT(CURLOPT_PROXY_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 294), + CURLOPT(CURLOPT_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 295), + + /* Issuer certificate for proxy */ + CURLOPT(CURLOPT_PROXY_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 296), + CURLOPT(CURLOPT_PROXY_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 297), + + /* the EC curves requested by the TLS client (RFC 8422, 5.1); + * OpenSSL support via 'set_groups'/'set_curves': + * https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set1_groups.html + */ + CURLOPT(CURLOPT_SSL_EC_CURVES, CURLOPTTYPE_STRINGPOINT, 298), + + /* HSTS bitmask */ + CURLOPT(CURLOPT_HSTS_CTRL, CURLOPTTYPE_LONG, 299), + /* HSTS file name */ + CURLOPT(CURLOPT_HSTS, CURLOPTTYPE_STRINGPOINT, 300), + + /* HSTS read callback */ + CURLOPT(CURLOPT_HSTSREADFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 301), + CURLOPT(CURLOPT_HSTSREADDATA, CURLOPTTYPE_CBPOINT, 302), + + /* HSTS write callback */ + CURLOPT(CURLOPT_HSTSWRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 303), + CURLOPT(CURLOPT_HSTSWRITEDATA, CURLOPTTYPE_CBPOINT, 304), + + /* Parameters for V4 signature */ + CURLOPT(CURLOPT_AWS_SIGV4, CURLOPTTYPE_STRINGPOINT, 305), + + /* Same as CURLOPT_SSL_VERIFYPEER but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 306), + + /* Same as CURLOPT_SSL_VERIFYHOST but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 307), + + /* Same as CURLOPT_SSL_VERIFYSTATUS but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 308), + + /* The CA certificates as "blob" used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAINFO_BLOB, CURLOPTTYPE_BLOB, 309), + + /* The CA certificates as "blob" used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAINFO_BLOB, CURLOPTTYPE_BLOB, 310), + + /* used by scp/sftp to verify the host's public key */ + CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256, CURLOPTTYPE_STRINGPOINT, 311), + + /* Function that will be called immediately before the initial request + is made on a connection (after any protocol negotiation step). */ + CURLOPT(CURLOPT_PREREQFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 312), + + /* Data passed to the CURLOPT_PREREQFUNCTION callback */ + CURLOPT(CURLOPT_PREREQDATA, CURLOPTTYPE_CBPOINT, 313), + + /* maximum age (since creation) of a connection to consider it for reuse + * (in seconds) */ + CURLOPT(CURLOPT_MAXLIFETIME_CONN, CURLOPTTYPE_LONG, 314), + + /* Set MIME option flags. */ + CURLOPT(CURLOPT_MIME_OPTIONS, CURLOPTTYPE_LONG, 315), + + /* set the SSH host key callback, must point to a curl_sshkeycallback + function */ + CURLOPT(CURLOPT_SSH_HOSTKEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 316), + + /* set the SSH host key callback custom pointer */ + CURLOPT(CURLOPT_SSH_HOSTKEYDATA, CURLOPTTYPE_CBPOINT, 317), + + /* specify which protocols that are allowed to be used for the transfer, + which thus helps the app which takes URLs from users or other external + inputs and want to restrict what protocol(s) to deal with. Defaults to + all built-in protocols. */ + CURLOPT(CURLOPT_PROTOCOLS_STR, CURLOPTTYPE_STRINGPOINT, 318), + + /* specify which protocols that libcurl is allowed to follow directs to */ + CURLOPT(CURLOPT_REDIR_PROTOCOLS_STR, CURLOPTTYPE_STRINGPOINT, 319), + + /* websockets options */ + CURLOPT(CURLOPT_WS_OPTIONS, CURLOPTTYPE_LONG, 320), + + /* CA cache timeout */ + CURLOPT(CURLOPT_CA_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 321), + + /* Can leak things, gonna exit() soon */ + CURLOPT(CURLOPT_QUICK_EXIT, CURLOPTTYPE_LONG, 322), + + /* set a specific client IP for HAProxy PROXY protocol header? */ + CURLOPT(CURLOPT_HAPROXY_CLIENT_IP, CURLOPTTYPE_STRINGPOINT, 323), + + CURLOPT_LASTENTRY /* the last unused */ +} CURLoption; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2011 */ + +/* This was added in version 7.19.1 */ +#define CURLOPT_POST301 CURLOPT_POSTREDIR + +/* These are scheduled to disappear by 2009 */ + +/* The following were added in 7.17.0 */ +#define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD +#define CURLOPT_FTPAPPEND CURLOPT_APPEND +#define CURLOPT_FTPLISTONLY CURLOPT_DIRLISTONLY +#define CURLOPT_FTP_SSL CURLOPT_USE_SSL + +/* The following were added earlier */ + +#define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD +#define CURLOPT_KRB4LEVEL CURLOPT_KRBLEVEL + +/* */ +#define CURLOPT_FTP_RESPONSE_TIMEOUT CURLOPT_SERVER_RESPONSE_TIMEOUT + +/* Added in 8.2.0 */ +#define CURLOPT_MAIL_RCPT_ALLLOWFAILS CURLOPT_MAIL_RCPT_ALLOWFAILS + +#else +/* This is set if CURL_NO_OLDIES is defined at compile-time */ +#undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */ +#endif + + + /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host + name resolves addresses using more than one IP protocol version, this + option might be handy to force libcurl to use a specific IP version. */ +#define CURL_IPRESOLVE_WHATEVER 0 /* default, uses addresses to all IP + versions that your system allows */ +#define CURL_IPRESOLVE_V4 1 /* uses only IPv4 addresses/connections */ +#define CURL_IPRESOLVE_V6 2 /* uses only IPv6 addresses/connections */ + + /* Convenient "aliases" */ +#define CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER + + /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ +enum { + CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd + like the library to choose the best possible + for us! */ + CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ + CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ + CURL_HTTP_VERSION_2_0, /* please use HTTP 2 in the request */ + CURL_HTTP_VERSION_2TLS, /* use version 2 for HTTPS, version 1.1 for HTTP */ + CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE, /* please use HTTP 2 without HTTP/1.1 + Upgrade */ + CURL_HTTP_VERSION_3 = 30, /* Use HTTP/3, fallback to HTTP/2 or HTTP/1 if + needed. For HTTPS only. For HTTP, this option + makes libcurl return error. */ + CURL_HTTP_VERSION_3ONLY = 31, /* Use HTTP/3 without fallback. For HTTPS + only. For HTTP, this makes libcurl + return error. */ + + CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */ +}; + +/* Convenience definition simple because the name of the version is HTTP/2 and + not 2.0. The 2_0 version of the enum name was set while the version was + still planned to be 2.0 and we stick to it for compatibility. */ +#define CURL_HTTP_VERSION_2 CURL_HTTP_VERSION_2_0 + +/* + * Public API enums for RTSP requests + */ +enum { + CURL_RTSPREQ_NONE, /* first in list */ + CURL_RTSPREQ_OPTIONS, + CURL_RTSPREQ_DESCRIBE, + CURL_RTSPREQ_ANNOUNCE, + CURL_RTSPREQ_SETUP, + CURL_RTSPREQ_PLAY, + CURL_RTSPREQ_PAUSE, + CURL_RTSPREQ_TEARDOWN, + CURL_RTSPREQ_GET_PARAMETER, + CURL_RTSPREQ_SET_PARAMETER, + CURL_RTSPREQ_RECORD, + CURL_RTSPREQ_RECEIVE, + CURL_RTSPREQ_LAST /* last in list */ +}; + + /* These enums are for use with the CURLOPT_NETRC option. */ +enum CURL_NETRC_OPTION { + CURL_NETRC_IGNORED, /* The .netrc will never be read. + * This is the default. */ + CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred + * to one in the .netrc. */ + CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. + * Unless one is set programmatically, the .netrc + * will be queried. */ + CURL_NETRC_LAST +}; + +enum { + CURL_SSLVERSION_DEFAULT, + CURL_SSLVERSION_TLSv1, /* TLS 1.x */ + CURL_SSLVERSION_SSLv2, + CURL_SSLVERSION_SSLv3, + CURL_SSLVERSION_TLSv1_0, + CURL_SSLVERSION_TLSv1_1, + CURL_SSLVERSION_TLSv1_2, + CURL_SSLVERSION_TLSv1_3, + + CURL_SSLVERSION_LAST /* never use, keep last */ +}; + +enum { + CURL_SSLVERSION_MAX_NONE = 0, + CURL_SSLVERSION_MAX_DEFAULT = (CURL_SSLVERSION_TLSv1 << 16), + CURL_SSLVERSION_MAX_TLSv1_0 = (CURL_SSLVERSION_TLSv1_0 << 16), + CURL_SSLVERSION_MAX_TLSv1_1 = (CURL_SSLVERSION_TLSv1_1 << 16), + CURL_SSLVERSION_MAX_TLSv1_2 = (CURL_SSLVERSION_TLSv1_2 << 16), + CURL_SSLVERSION_MAX_TLSv1_3 = (CURL_SSLVERSION_TLSv1_3 << 16), + + /* never use, keep last */ + CURL_SSLVERSION_MAX_LAST = (CURL_SSLVERSION_LAST << 16) +}; + +enum CURL_TLSAUTH { + CURL_TLSAUTH_NONE, + CURL_TLSAUTH_SRP, + CURL_TLSAUTH_LAST /* never use, keep last */ +}; + +/* symbols to use with CURLOPT_POSTREDIR. + CURL_REDIR_POST_301, CURL_REDIR_POST_302 and CURL_REDIR_POST_303 + can be bitwise ORed so that CURL_REDIR_POST_301 | CURL_REDIR_POST_302 + | CURL_REDIR_POST_303 == CURL_REDIR_POST_ALL */ + +#define CURL_REDIR_GET_ALL 0 +#define CURL_REDIR_POST_301 1 +#define CURL_REDIR_POST_302 2 +#define CURL_REDIR_POST_303 4 +#define CURL_REDIR_POST_ALL \ + (CURL_REDIR_POST_301|CURL_REDIR_POST_302|CURL_REDIR_POST_303) + +typedef enum { + CURL_TIMECOND_NONE, + + CURL_TIMECOND_IFMODSINCE, + CURL_TIMECOND_IFUNMODSINCE, + CURL_TIMECOND_LASTMOD, + + CURL_TIMECOND_LAST +} curl_TimeCond; + +/* Special size_t value signaling a null-terminated string. */ +#define CURL_ZERO_TERMINATED ((size_t) -1) + +/* curl_strequal() and curl_strnequal() are subject for removal in a future + release */ +CURL_EXTERN int curl_strequal(const char *s1, const char *s2); +CURL_EXTERN int curl_strnequal(const char *s1, const char *s2, size_t n); + +/* Mime/form handling support. */ +typedef struct curl_mime curl_mime; /* Mime context. */ +typedef struct curl_mimepart curl_mimepart; /* Mime part context. */ + +/* CURLMIMEOPT_ defines are for the CURLOPT_MIME_OPTIONS option. */ +#define CURLMIMEOPT_FORMESCAPE (1<<0) /* Use backslash-escaping for forms. */ + +/* + * NAME curl_mime_init() + * + * DESCRIPTION + * + * Create a mime context and return its handle. The easy parameter is the + * target handle. + */ +CURL_EXTERN curl_mime *curl_mime_init(CURL *easy); + +/* + * NAME curl_mime_free() + * + * DESCRIPTION + * + * release a mime handle and its substructures. + */ +CURL_EXTERN void curl_mime_free(curl_mime *mime); + +/* + * NAME curl_mime_addpart() + * + * DESCRIPTION + * + * Append a new empty part to the given mime context and return a handle to + * the created part. + */ +CURL_EXTERN curl_mimepart *curl_mime_addpart(curl_mime *mime); + +/* + * NAME curl_mime_name() + * + * DESCRIPTION + * + * Set mime/form part name. + */ +CURL_EXTERN CURLcode curl_mime_name(curl_mimepart *part, const char *name); + +/* + * NAME curl_mime_filename() + * + * DESCRIPTION + * + * Set mime part remote file name. + */ +CURL_EXTERN CURLcode curl_mime_filename(curl_mimepart *part, + const char *filename); + +/* + * NAME curl_mime_type() + * + * DESCRIPTION + * + * Set mime part type. + */ +CURL_EXTERN CURLcode curl_mime_type(curl_mimepart *part, const char *mimetype); + +/* + * NAME curl_mime_encoder() + * + * DESCRIPTION + * + * Set mime data transfer encoder. + */ +CURL_EXTERN CURLcode curl_mime_encoder(curl_mimepart *part, + const char *encoding); + +/* + * NAME curl_mime_data() + * + * DESCRIPTION + * + * Set mime part data source from memory data, + */ +CURL_EXTERN CURLcode curl_mime_data(curl_mimepart *part, + const char *data, size_t datasize); + +/* + * NAME curl_mime_filedata() + * + * DESCRIPTION + * + * Set mime part data source from named file. + */ +CURL_EXTERN CURLcode curl_mime_filedata(curl_mimepart *part, + const char *filename); + +/* + * NAME curl_mime_data_cb() + * + * DESCRIPTION + * + * Set mime part data source from callback function. + */ +CURL_EXTERN CURLcode curl_mime_data_cb(curl_mimepart *part, + curl_off_t datasize, + curl_read_callback readfunc, + curl_seek_callback seekfunc, + curl_free_callback freefunc, + void *arg); + +/* + * NAME curl_mime_subparts() + * + * DESCRIPTION + * + * Set mime part data source from subparts. + */ +CURL_EXTERN CURLcode curl_mime_subparts(curl_mimepart *part, + curl_mime *subparts); +/* + * NAME curl_mime_headers() + * + * DESCRIPTION + * + * Set mime part headers. + */ +CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part, + struct curl_slist *headers, + int take_ownership); + +typedef enum { + /********* the first one is unused ************/ + CURLFORM_NOTHING CURL_DEPRECATED(7.56.0, ""), + CURLFORM_COPYNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), + CURLFORM_PTRNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), + CURLFORM_NAMELENGTH CURL_DEPRECATED(7.56.0, ""), + CURLFORM_COPYCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_PTRCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_CONTENTSLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_FILECONTENT CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), + CURLFORM_ARRAY CURL_DEPRECATED(7.56.0, ""), + CURLFORM_OBSOLETE, + CURLFORM_FILE CURL_DEPRECATED(7.56.0, "Use curl_mime_filedata()"), + + CURLFORM_BUFFER CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), + CURLFORM_BUFFERPTR CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_BUFFERLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + + CURLFORM_CONTENTTYPE CURL_DEPRECATED(7.56.0, "Use curl_mime_type()"), + CURLFORM_CONTENTHEADER CURL_DEPRECATED(7.56.0, "Use curl_mime_headers()"), + CURLFORM_FILENAME CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), + CURLFORM_END, + CURLFORM_OBSOLETE2, + + CURLFORM_STREAM CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), + CURLFORM_CONTENTLEN /* added in 7.46.0, provide a curl_off_t length */ + CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + + CURLFORM_LASTENTRY /* the last unused */ +} CURLformoption; + +/* structure to be used as parameter for CURLFORM_ARRAY */ +struct curl_forms { + CURLformoption option; + const char *value; +}; + +/* use this for multipart formpost building */ +/* Returns code for curl_formadd() + * + * Returns: + * CURL_FORMADD_OK on success + * CURL_FORMADD_MEMORY if the FormInfo allocation fails + * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form + * CURL_FORMADD_NULL if a null pointer was given for a char + * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed + * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used + * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) + * CURL_FORMADD_MEMORY if a curl_httppost struct cannot be allocated + * CURL_FORMADD_MEMORY if some allocation for string copying failed. + * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array + * + ***************************************************************************/ +typedef enum { + CURL_FORMADD_OK CURL_DEPRECATED(7.56.0, ""), /* 1st, no error */ + + CURL_FORMADD_MEMORY CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_OPTION_TWICE CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_NULL CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_UNKNOWN_OPTION CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_INCOMPLETE CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_ILLEGAL_ARRAY CURL_DEPRECATED(7.56.0, ""), + /* libcurl was built with form api disabled */ + CURL_FORMADD_DISABLED CURL_DEPRECATED(7.56.0, ""), + + CURL_FORMADD_LAST /* last */ +} CURLFORMcode; + +/* + * NAME curl_formadd() + * + * DESCRIPTION + * + * Pretty advanced function for building multi-part formposts. Each invoke + * adds one part that together construct a full post. Then use + * CURLOPT_HTTPPOST to send it off to libcurl. + */ +CURL_EXTERN CURLFORMcode CURL_DEPRECATED(7.56.0, "Use curl_mime_init()") +curl_formadd(struct curl_httppost **httppost, + struct curl_httppost **last_post, + ...); + +/* + * callback function for curl_formget() + * The void *arg pointer will be the one passed as second argument to + * curl_formget(). + * The character buffer passed to it must not be freed. + * Should return the buffer length passed to it as the argument "len" on + * success. + */ +typedef size_t (*curl_formget_callback)(void *arg, const char *buf, + size_t len); + +/* + * NAME curl_formget() + * + * DESCRIPTION + * + * Serialize a curl_httppost struct built with curl_formadd(). + * Accepts a void pointer as second argument which will be passed to + * the curl_formget_callback function. + * Returns 0 on success. + */ +CURL_EXTERN int CURL_DEPRECATED(7.56.0, "") +curl_formget(struct curl_httppost *form, void *arg, + curl_formget_callback append); +/* + * NAME curl_formfree() + * + * DESCRIPTION + * + * Free a multipart formpost previously built with curl_formadd(). + */ +CURL_EXTERN void CURL_DEPRECATED(7.56.0, "Use curl_mime_free()") +curl_formfree(struct curl_httppost *form); + +/* + * NAME curl_getenv() + * + * DESCRIPTION + * + * Returns a malloc()'ed string that MUST be curl_free()ed after usage is + * complete. DEPRECATED - see lib/README.curlx + */ +CURL_EXTERN char *curl_getenv(const char *variable); + +/* + * NAME curl_version() + * + * DESCRIPTION + * + * Returns a static ascii string of the libcurl version. + */ +CURL_EXTERN char *curl_version(void); + +/* + * NAME curl_easy_escape() + * + * DESCRIPTION + * + * Escapes URL strings (converts all letters consider illegal in URLs to their + * %XX versions). This function returns a new allocated string or NULL if an + * error occurred. + */ +CURL_EXTERN char *curl_easy_escape(CURL *handle, + const char *string, + int length); + +/* the previous version: */ +CURL_EXTERN char *curl_escape(const char *string, + int length); + + +/* + * NAME curl_easy_unescape() + * + * DESCRIPTION + * + * Unescapes URL encoding in strings (converts all %XX codes to their 8bit + * versions). This function returns a new allocated string or NULL if an error + * occurred. + * Conversion Note: On non-ASCII platforms the ASCII %XX codes are + * converted into the host encoding. + */ +CURL_EXTERN char *curl_easy_unescape(CURL *handle, + const char *string, + int length, + int *outlength); + +/* the previous version */ +CURL_EXTERN char *curl_unescape(const char *string, + int length); + +/* + * NAME curl_free() + * + * DESCRIPTION + * + * Provided for de-allocation in the same translation unit that did the + * allocation. Added in libcurl 7.10 + */ +CURL_EXTERN void curl_free(void *p); + +/* + * NAME curl_global_init() + * + * DESCRIPTION + * + * curl_global_init() should be invoked exactly once for each application that + * uses libcurl and before any call of other libcurl functions. + + * This function is thread-safe if CURL_VERSION_THREADSAFE is set in the + * curl_version_info_data.features flag (fetch by curl_version_info()). + + */ +CURL_EXTERN CURLcode curl_global_init(long flags); + +/* + * NAME curl_global_init_mem() + * + * DESCRIPTION + * + * curl_global_init() or curl_global_init_mem() should be invoked exactly once + * for each application that uses libcurl. This function can be used to + * initialize libcurl and set user defined memory management callback + * functions. Users can implement memory management routines to check for + * memory leaks, check for mis-use of the curl library etc. User registered + * callback routines will be invoked by this library instead of the system + * memory management routines like malloc, free etc. + */ +CURL_EXTERN CURLcode curl_global_init_mem(long flags, + curl_malloc_callback m, + curl_free_callback f, + curl_realloc_callback r, + curl_strdup_callback s, + curl_calloc_callback c); + +/* + * NAME curl_global_cleanup() + * + * DESCRIPTION + * + * curl_global_cleanup() should be invoked exactly once for each application + * that uses libcurl + */ +CURL_EXTERN void curl_global_cleanup(void); + +/* + * NAME curl_global_trace() + * + * DESCRIPTION + * + * curl_global_trace() can be invoked at application start to + * configure which components in curl should participate in tracing. + + * This function is thread-safe if CURL_VERSION_THREADSAFE is set in the + * curl_version_info_data.features flag (fetch by curl_version_info()). + + */ +CURL_EXTERN CURLcode curl_global_trace(const char *config); + +/* linked-list structure for the CURLOPT_QUOTE option (and other) */ +struct curl_slist { + char *data; + struct curl_slist *next; +}; + +/* + * NAME curl_global_sslset() + * + * DESCRIPTION + * + * When built with multiple SSL backends, curl_global_sslset() allows to + * choose one. This function can only be called once, and it must be called + * *before* curl_global_init(). + * + * The backend can be identified by the id (e.g. CURLSSLBACKEND_OPENSSL). The + * backend can also be specified via the name parameter (passing -1 as id). + * If both id and name are specified, the name will be ignored. If neither id + * nor name are specified, the function will fail with + * CURLSSLSET_UNKNOWN_BACKEND and set the "avail" pointer to the + * NULL-terminated list of available backends. + * + * Upon success, the function returns CURLSSLSET_OK. + * + * If the specified SSL backend is not available, the function returns + * CURLSSLSET_UNKNOWN_BACKEND and sets the "avail" pointer to a NULL-terminated + * list of available SSL backends. + * + * The SSL backend can be set only once. If it has already been set, a + * subsequent attempt to change it will result in a CURLSSLSET_TOO_LATE. + */ + +struct curl_ssl_backend { + curl_sslbackend id; + const char *name; +}; +typedef struct curl_ssl_backend curl_ssl_backend; + +typedef enum { + CURLSSLSET_OK = 0, + CURLSSLSET_UNKNOWN_BACKEND, + CURLSSLSET_TOO_LATE, + CURLSSLSET_NO_BACKENDS /* libcurl was built without any SSL support */ +} CURLsslset; + +CURL_EXTERN CURLsslset curl_global_sslset(curl_sslbackend id, const char *name, + const curl_ssl_backend ***avail); + +/* + * NAME curl_slist_append() + * + * DESCRIPTION + * + * Appends a string to a linked list. If no list exists, it will be created + * first. Returns the new list, after appending. + */ +CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *list, + const char *data); + +/* + * NAME curl_slist_free_all() + * + * DESCRIPTION + * + * free a previously built curl_slist. + */ +CURL_EXTERN void curl_slist_free_all(struct curl_slist *list); + +/* + * NAME curl_getdate() + * + * DESCRIPTION + * + * Returns the time, in seconds since 1 Jan 1970 of the time string given in + * the first argument. The time argument in the second parameter is unused + * and should be set to NULL. + */ +CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused); + +/* info about the certificate chain, for SSL backends that support it. Asked + for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */ +struct curl_certinfo { + int num_of_certs; /* number of certificates with information */ + struct curl_slist **certinfo; /* for each index in this array, there's a + linked list with textual information for a + certificate in the format "name:content". + eg "Subject:foo", "Issuer:bar", etc. */ +}; + +/* Information about the SSL library used and the respective internal SSL + handle, which can be used to obtain further information regarding the + connection. Asked for with CURLINFO_TLS_SSL_PTR or CURLINFO_TLS_SESSION. */ +struct curl_tlssessioninfo { + curl_sslbackend backend; + void *internals; +}; + +#define CURLINFO_STRING 0x100000 +#define CURLINFO_LONG 0x200000 +#define CURLINFO_DOUBLE 0x300000 +#define CURLINFO_SLIST 0x400000 +#define CURLINFO_PTR 0x400000 /* same as SLIST */ +#define CURLINFO_SOCKET 0x500000 +#define CURLINFO_OFF_T 0x600000 +#define CURLINFO_MASK 0x0fffff +#define CURLINFO_TYPEMASK 0xf00000 + +typedef enum { + CURLINFO_NONE, /* first, never use this */ + CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, + CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, + CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, + CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, + CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, + CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6, + CURLINFO_SIZE_UPLOAD CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_UPLOAD_T") + = CURLINFO_DOUBLE + 7, + CURLINFO_SIZE_UPLOAD_T = CURLINFO_OFF_T + 7, + CURLINFO_SIZE_DOWNLOAD + CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_DOWNLOAD_T") + = CURLINFO_DOUBLE + 8, + CURLINFO_SIZE_DOWNLOAD_T = CURLINFO_OFF_T + 8, + CURLINFO_SPEED_DOWNLOAD + CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_DOWNLOAD_T") + = CURLINFO_DOUBLE + 9, + CURLINFO_SPEED_DOWNLOAD_T = CURLINFO_OFF_T + 9, + CURLINFO_SPEED_UPLOAD + CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_UPLOAD_T") + = CURLINFO_DOUBLE + 10, + CURLINFO_SPEED_UPLOAD_T = CURLINFO_OFF_T + 10, + CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, + CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, + CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, + CURLINFO_FILETIME = CURLINFO_LONG + 14, + CURLINFO_FILETIME_T = CURLINFO_OFF_T + 14, + CURLINFO_CONTENT_LENGTH_DOWNLOAD + CURL_DEPRECATED(7.55.0, + "Use CURLINFO_CONTENT_LENGTH_DOWNLOAD_T") + = CURLINFO_DOUBLE + 15, + CURLINFO_CONTENT_LENGTH_DOWNLOAD_T = CURLINFO_OFF_T + 15, + CURLINFO_CONTENT_LENGTH_UPLOAD + CURL_DEPRECATED(7.55.0, + "Use CURLINFO_CONTENT_LENGTH_UPLOAD_T") + = CURLINFO_DOUBLE + 16, + CURLINFO_CONTENT_LENGTH_UPLOAD_T = CURLINFO_OFF_T + 16, + CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, + CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, + CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, + CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, + CURLINFO_PRIVATE = CURLINFO_STRING + 21, + CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, + CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, + CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, + CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, + CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, + CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, + CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, + CURLINFO_LASTSOCKET CURL_DEPRECATED(7.45.0, "Use CURLINFO_ACTIVESOCKET") + = CURLINFO_LONG + 29, + CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, + CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31, + CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32, + CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33, + CURLINFO_CERTINFO = CURLINFO_PTR + 34, + CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35, + CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36, + CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37, + CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38, + CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39, + CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40, + CURLINFO_LOCAL_IP = CURLINFO_STRING + 41, + CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42, + CURLINFO_TLS_SESSION CURL_DEPRECATED(7.48.0, "Use CURLINFO_TLS_SSL_PTR") + = CURLINFO_PTR + 43, + CURLINFO_ACTIVESOCKET = CURLINFO_SOCKET + 44, + CURLINFO_TLS_SSL_PTR = CURLINFO_PTR + 45, + CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46, + CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47, + CURLINFO_PROTOCOL CURL_DEPRECATED(7.85.0, "Use CURLINFO_SCHEME") + = CURLINFO_LONG + 48, + CURLINFO_SCHEME = CURLINFO_STRING + 49, + CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50, + CURLINFO_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51, + CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52, + CURLINFO_PRETRANSFER_TIME_T = CURLINFO_OFF_T + 53, + CURLINFO_STARTTRANSFER_TIME_T = CURLINFO_OFF_T + 54, + CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55, + CURLINFO_APPCONNECT_TIME_T = CURLINFO_OFF_T + 56, + CURLINFO_RETRY_AFTER = CURLINFO_OFF_T + 57, + CURLINFO_EFFECTIVE_METHOD = CURLINFO_STRING + 58, + CURLINFO_PROXY_ERROR = CURLINFO_LONG + 59, + CURLINFO_REFERER = CURLINFO_STRING + 60, + CURLINFO_CAINFO = CURLINFO_STRING + 61, + CURLINFO_CAPATH = CURLINFO_STRING + 62, + CURLINFO_XFER_ID = CURLINFO_OFF_T + 63, + CURLINFO_CONN_ID = CURLINFO_OFF_T + 64, + CURLINFO_LASTONE = 64 +} CURLINFO; + +/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as + CURLINFO_HTTP_CODE */ +#define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE + +typedef enum { + CURLCLOSEPOLICY_NONE, /* first, never use this */ + + CURLCLOSEPOLICY_OLDEST, + CURLCLOSEPOLICY_LEAST_RECENTLY_USED, + CURLCLOSEPOLICY_LEAST_TRAFFIC, + CURLCLOSEPOLICY_SLOWEST, + CURLCLOSEPOLICY_CALLBACK, + + CURLCLOSEPOLICY_LAST /* last, never use this */ +} curl_closepolicy; + +#define CURL_GLOBAL_SSL (1<<0) /* no purpose since 7.57.0 */ +#define CURL_GLOBAL_WIN32 (1<<1) +#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) +#define CURL_GLOBAL_NOTHING 0 +#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL +#define CURL_GLOBAL_ACK_EINTR (1<<2) + + +/***************************************************************************** + * Setup defines, protos etc for the sharing stuff. + */ + +/* Different data locks for a single share */ +typedef enum { + CURL_LOCK_DATA_NONE = 0, + /* CURL_LOCK_DATA_SHARE is used internally to say that + * the locking is just made to change the internal state of the share + * itself. + */ + CURL_LOCK_DATA_SHARE, + CURL_LOCK_DATA_COOKIE, + CURL_LOCK_DATA_DNS, + CURL_LOCK_DATA_SSL_SESSION, + CURL_LOCK_DATA_CONNECT, + CURL_LOCK_DATA_PSL, + CURL_LOCK_DATA_HSTS, + CURL_LOCK_DATA_LAST +} curl_lock_data; + +/* Different lock access types */ +typedef enum { + CURL_LOCK_ACCESS_NONE = 0, /* unspecified action */ + CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */ + CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */ + CURL_LOCK_ACCESS_LAST /* never use */ +} curl_lock_access; + +typedef void (*curl_lock_function)(CURL *handle, + curl_lock_data data, + curl_lock_access locktype, + void *userptr); +typedef void (*curl_unlock_function)(CURL *handle, + curl_lock_data data, + void *userptr); + + +typedef enum { + CURLSHE_OK, /* all is fine */ + CURLSHE_BAD_OPTION, /* 1 */ + CURLSHE_IN_USE, /* 2 */ + CURLSHE_INVALID, /* 3 */ + CURLSHE_NOMEM, /* 4 out of memory */ + CURLSHE_NOT_BUILT_IN, /* 5 feature not present in lib */ + CURLSHE_LAST /* never use */ +} CURLSHcode; + +typedef enum { + CURLSHOPT_NONE, /* don't use */ + CURLSHOPT_SHARE, /* specify a data type to share */ + CURLSHOPT_UNSHARE, /* specify which data type to stop sharing */ + CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */ + CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */ + CURLSHOPT_USERDATA, /* pass in a user data pointer used in the lock/unlock + callback functions */ + CURLSHOPT_LAST /* never use */ +} CURLSHoption; + +CURL_EXTERN CURLSH *curl_share_init(void); +CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, + ...); +CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *share); + +/**************************************************************************** + * Structures for querying information about the curl library at runtime. + */ + +typedef enum { + CURLVERSION_FIRST, + CURLVERSION_SECOND, + CURLVERSION_THIRD, + CURLVERSION_FOURTH, + CURLVERSION_FIFTH, + CURLVERSION_SIXTH, + CURLVERSION_SEVENTH, + CURLVERSION_EIGHTH, + CURLVERSION_NINTH, + CURLVERSION_TENTH, + CURLVERSION_ELEVENTH, + CURLVERSION_LAST /* never actually use this */ +} CURLversion; + +/* The 'CURLVERSION_NOW' is the symbolic name meant to be used by + basically all programs ever that want to get version information. It is + meant to be a built-in version number for what kind of struct the caller + expects. If the struct ever changes, we redefine the NOW to another enum + from above. */ +#define CURLVERSION_NOW CURLVERSION_ELEVENTH + +struct curl_version_info_data { + CURLversion age; /* age of the returned struct */ + const char *version; /* LIBCURL_VERSION */ + unsigned int version_num; /* LIBCURL_VERSION_NUM */ + const char *host; /* OS/host/cpu/machine when configured */ + int features; /* bitmask, see defines below */ + const char *ssl_version; /* human readable string */ + long ssl_version_num; /* not used anymore, always 0 */ + const char *libz_version; /* human readable string */ + /* protocols is terminated by an entry with a NULL protoname */ + const char * const *protocols; + + /* The fields below this were added in CURLVERSION_SECOND */ + const char *ares; + int ares_num; + + /* This field was added in CURLVERSION_THIRD */ + const char *libidn; + + /* These field were added in CURLVERSION_FOURTH */ + + /* Same as '_libiconv_version' if built with HAVE_ICONV */ + int iconv_ver_num; + + const char *libssh_version; /* human readable string */ + + /* These fields were added in CURLVERSION_FIFTH */ + unsigned int brotli_ver_num; /* Numeric Brotli version + (MAJOR << 24) | (MINOR << 12) | PATCH */ + const char *brotli_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_SIXTH */ + unsigned int nghttp2_ver_num; /* Numeric nghttp2 version + (MAJOR << 16) | (MINOR << 8) | PATCH */ + const char *nghttp2_version; /* human readable string. */ + const char *quic_version; /* human readable quic (+ HTTP/3) library + + version or NULL */ + + /* These fields were added in CURLVERSION_SEVENTH */ + const char *cainfo; /* the built-in default CURLOPT_CAINFO, might + be NULL */ + const char *capath; /* the built-in default CURLOPT_CAPATH, might + be NULL */ + + /* These fields were added in CURLVERSION_EIGHTH */ + unsigned int zstd_ver_num; /* Numeric Zstd version + (MAJOR << 24) | (MINOR << 12) | PATCH */ + const char *zstd_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_NINTH */ + const char *hyper_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_TENTH */ + const char *gsasl_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_ELEVENTH */ + /* feature_names is terminated by an entry with a NULL feature name */ + const char * const *feature_names; +}; +typedef struct curl_version_info_data curl_version_info_data; + +#define CURL_VERSION_IPV6 (1<<0) /* IPv6-enabled */ +#define CURL_VERSION_KERBEROS4 (1<<1) /* Kerberos V4 auth is supported + (deprecated) */ +#define CURL_VERSION_SSL (1<<2) /* SSL options are present */ +#define CURL_VERSION_LIBZ (1<<3) /* libz features are present */ +#define CURL_VERSION_NTLM (1<<4) /* NTLM auth is supported */ +#define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth is supported + (deprecated) */ +#define CURL_VERSION_DEBUG (1<<6) /* Built with debug capabilities */ +#define CURL_VERSION_ASYNCHDNS (1<<7) /* Asynchronous DNS resolves */ +#define CURL_VERSION_SPNEGO (1<<8) /* SPNEGO auth is supported */ +#define CURL_VERSION_LARGEFILE (1<<9) /* Supports files larger than 2GB */ +#define CURL_VERSION_IDN (1<<10) /* Internationized Domain Names are + supported */ +#define CURL_VERSION_SSPI (1<<11) /* Built against Windows SSPI */ +#define CURL_VERSION_CONV (1<<12) /* Character conversions supported */ +#define CURL_VERSION_CURLDEBUG (1<<13) /* Debug memory tracking supported */ +#define CURL_VERSION_TLSAUTH_SRP (1<<14) /* TLS-SRP auth is supported */ +#define CURL_VERSION_NTLM_WB (1<<15) /* NTLM delegation to winbind helper + is supported */ +#define CURL_VERSION_HTTP2 (1<<16) /* HTTP2 support built-in */ +#define CURL_VERSION_GSSAPI (1<<17) /* Built against a GSS-API library */ +#define CURL_VERSION_KERBEROS5 (1<<18) /* Kerberos V5 auth is supported */ +#define CURL_VERSION_UNIX_SOCKETS (1<<19) /* Unix domain sockets support */ +#define CURL_VERSION_PSL (1<<20) /* Mozilla's Public Suffix List, used + for cookie domain verification */ +#define CURL_VERSION_HTTPS_PROXY (1<<21) /* HTTPS-proxy support built-in */ +#define CURL_VERSION_MULTI_SSL (1<<22) /* Multiple SSL backends available */ +#define CURL_VERSION_BROTLI (1<<23) /* Brotli features are present. */ +#define CURL_VERSION_ALTSVC (1<<24) /* Alt-Svc handling built-in */ +#define CURL_VERSION_HTTP3 (1<<25) /* HTTP3 support built-in */ +#define CURL_VERSION_ZSTD (1<<26) /* zstd features are present */ +#define CURL_VERSION_UNICODE (1<<27) /* Unicode support on Windows */ +#define CURL_VERSION_HSTS (1<<28) /* HSTS is supported */ +#define CURL_VERSION_GSASL (1<<29) /* libgsasl is supported */ +#define CURL_VERSION_THREADSAFE (1<<30) /* libcurl API is thread-safe */ + + /* + * NAME curl_version_info() + * + * DESCRIPTION + * + * This function returns a pointer to a static copy of the version info + * struct. See above. + */ +CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion); + +/* + * NAME curl_easy_strerror() + * + * DESCRIPTION + * + * The curl_easy_strerror function may be used to turn a CURLcode value + * into the equivalent human readable error string. This is useful + * for printing meaningful error messages. + */ +CURL_EXTERN const char *curl_easy_strerror(CURLcode); + +/* + * NAME curl_share_strerror() + * + * DESCRIPTION + * + * The curl_share_strerror function may be used to turn a CURLSHcode value + * into the equivalent human readable error string. This is useful + * for printing meaningful error messages. + */ +CURL_EXTERN const char *curl_share_strerror(CURLSHcode); + +/* + * NAME curl_easy_pause() + * + * DESCRIPTION + * + * The curl_easy_pause function pauses or unpauses transfers. Select the new + * state by setting the bitmask, use the convenience defines below. + * + */ +CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask); + +#define CURLPAUSE_RECV (1<<0) +#define CURLPAUSE_RECV_CONT (0) + +#define CURLPAUSE_SEND (1<<2) +#define CURLPAUSE_SEND_CONT (0) + +#define CURLPAUSE_ALL (CURLPAUSE_RECV|CURLPAUSE_SEND) +#define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT) + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +/* unfortunately, the easy.h and multi.h include files need options and info + stuff before they can be included! */ +#include "easy.h" /* nothing in curl is fun without the easy stuff */ +#include "multi.h" +#include "urlapi.h" +#include "options.h" +#include "header.h" +#include "websockets.h" + +/* the typechecker doesn't work in C++ (yet) */ +#if defined(__GNUC__) && defined(__GNUC_MINOR__) && \ + ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && \ + !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK) +#include "typecheck-gcc.h" +#else +#if defined(__STDC__) && (__STDC__ >= 1) +/* This preprocessor magic that replaces a call with the exact same call is + only done to make sure application authors pass exactly three arguments + to these functions. */ +#define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param) +#define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg) +#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) +#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) +#endif /* __STDC__ >= 1 */ +#endif /* gcc >= 4.3 && !__cplusplus && !CURL_DISABLE_TYPECHECK */ + +#endif /* CURLINC_CURL_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/curlver.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/curlver.h new file mode 100644 index 0000000..44e6070 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/curlver.h @@ -0,0 +1,79 @@ +#ifndef CURLINC_CURLVER_H +#define CURLINC_CURLVER_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* This header file contains nothing but libcurl version info, generated by + a script at release-time. This was made its own header file in 7.11.2 */ + +/* This is the global package copyright */ +#define LIBCURL_COPYRIGHT "Daniel Stenberg, ." + +/* This is the version number of the libcurl package from which this header + file origins: */ +#define LIBCURL_VERSION "8.4.0" + +/* The numeric version number is also available "in parts" by using these + defines: */ +#define LIBCURL_VERSION_MAJOR 8 +#define LIBCURL_VERSION_MINOR 4 +#define LIBCURL_VERSION_PATCH 0 + +/* This is the numeric version of the libcurl version number, meant for easier + parsing and comparisons by programs. The LIBCURL_VERSION_NUM define will + always follow this syntax: + + 0xXXYYZZ + + Where XX, YY and ZZ are the main version, release and patch numbers in + hexadecimal (using 8 bits each). All three numbers are always represented + using two digits. 1.2 would appear as "0x010200" while version 9.11.7 + appears as "0x090b07". + + This 6-digit (24 bits) hexadecimal number does not show pre-release number, + and it is always a greater number in a more recent release. It makes + comparisons with greater than and less than work. + + Note: This define is the full hex number and _does not_ use the + CURL_VERSION_BITS() macro since curl's own configure script greps for it + and needs it to contain the full number. +*/ +#define LIBCURL_VERSION_NUM 0x080400 + +/* + * This is the date and time when the full source package was created. The + * timestamp is not stored in git, as the timestamp is properly set in the + * tarballs by the maketgz script. + * + * The format of the date follows this template: + * + * "2007-11-23" + */ +#define LIBCURL_TIMESTAMP "2023-10-11" + +#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z)) +#define CURL_AT_LEAST_VERSION(x,y,z) \ + (LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z)) + +#endif /* CURLINC_CURLVER_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/easy.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/easy.h new file mode 100644 index 0000000..1285101 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/easy.h @@ -0,0 +1,125 @@ +#ifndef CURLINC_EASY_H +#define CURLINC_EASY_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + +/* Flag bits in the curl_blob struct: */ +#define CURL_BLOB_COPY 1 /* tell libcurl to copy the data */ +#define CURL_BLOB_NOCOPY 0 /* tell libcurl to NOT copy the data */ + +struct curl_blob { + void *data; + size_t len; + unsigned int flags; /* bit 0 is defined, the rest are reserved and should be + left zeroes */ +}; + +CURL_EXTERN CURL *curl_easy_init(void); +CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...); +CURL_EXTERN CURLcode curl_easy_perform(CURL *curl); +CURL_EXTERN void curl_easy_cleanup(CURL *curl); + +/* + * NAME curl_easy_getinfo() + * + * DESCRIPTION + * + * Request internal information from the curl session with this function. + * The third argument MUST be pointing to the specific type of the used option + * which is documented in each man page of the option. The data pointed to + * will be filled in accordingly and can be relied upon only if the function + * returns CURLE_OK. This function is intended to get used *AFTER* a performed + * transfer, all results from this function are undefined until the transfer + * is completed. + */ +CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...); + + +/* + * NAME curl_easy_duphandle() + * + * DESCRIPTION + * + * Creates a new curl session handle with the same options set for the handle + * passed in. Duplicating a handle could only be a matter of cloning data and + * options, internal state info and things like persistent connections cannot + * be transferred. It is useful in multithreaded applications when you can run + * curl_easy_duphandle() for each new thread to avoid a series of identical + * curl_easy_setopt() invokes in every thread. + */ +CURL_EXTERN CURL *curl_easy_duphandle(CURL *curl); + +/* + * NAME curl_easy_reset() + * + * DESCRIPTION + * + * Re-initializes a CURL handle to the default values. This puts back the + * handle to the same state as it was in when it was just created. + * + * It does keep: live connections, the Session ID cache, the DNS cache and the + * cookies. + */ +CURL_EXTERN void curl_easy_reset(CURL *curl); + +/* + * NAME curl_easy_recv() + * + * DESCRIPTION + * + * Receives data from the connected socket. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, + size_t *n); + +/* + * NAME curl_easy_send() + * + * DESCRIPTION + * + * Sends data over the connected socket. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer, + size_t buflen, size_t *n); + + +/* + * NAME curl_easy_upkeep() + * + * DESCRIPTION + * + * Performs connection upkeep for the given session handle. + */ +CURL_EXTERN CURLcode curl_easy_upkeep(CURL *curl); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/header.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/header.h new file mode 100644 index 0000000..8df11e1 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/header.h @@ -0,0 +1,74 @@ +#ifndef CURLINC_HEADER_H +#define CURLINC_HEADER_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +struct curl_header { + char *name; /* this might not use the same case */ + char *value; + size_t amount; /* number of headers using this name */ + size_t index; /* ... of this instance, 0 or higher */ + unsigned int origin; /* see bits below */ + void *anchor; /* handle privately used by libcurl */ +}; + +/* 'origin' bits */ +#define CURLH_HEADER (1<<0) /* plain server header */ +#define CURLH_TRAILER (1<<1) /* trailers */ +#define CURLH_CONNECT (1<<2) /* CONNECT headers */ +#define CURLH_1XX (1<<3) /* 1xx headers */ +#define CURLH_PSEUDO (1<<4) /* pseudo headers */ + +typedef enum { + CURLHE_OK, + CURLHE_BADINDEX, /* header exists but not with this index */ + CURLHE_MISSING, /* no such header exists */ + CURLHE_NOHEADERS, /* no headers at all exist (yet) */ + CURLHE_NOREQUEST, /* no request with this number was used */ + CURLHE_OUT_OF_MEMORY, /* out of memory while processing */ + CURLHE_BAD_ARGUMENT, /* a function argument was not okay */ + CURLHE_NOT_BUILT_IN /* if API was disabled in the build */ +} CURLHcode; + +CURL_EXTERN CURLHcode curl_easy_header(CURL *easy, + const char *name, + size_t index, + unsigned int origin, + int request, + struct curl_header **hout); + +CURL_EXTERN struct curl_header *curl_easy_nextheader(CURL *easy, + unsigned int origin, + int request, + struct curl_header *prev); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_HEADER_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/mprintf.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/mprintf.h new file mode 100644 index 0000000..dc5664b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/mprintf.h @@ -0,0 +1,70 @@ +#ifndef CURLINC_MPRINTF_H +#define CURLINC_MPRINTF_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include +#include /* needed for FILE */ +#include "curl.h" /* for CURL_EXTERN */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if (defined(__GNUC__) || defined(__clang__)) && \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__MINGW32__) && !defined(CURL_NO_FMT_CHECKS) +#define CURL_TEMP_PRINTF(a,b) __attribute__ ((format(printf, a, b))) +#else +#define CURL_TEMP_PRINTF(a,b) +#endif + +CURL_EXTERN int curl_mprintf(const char *format, ...) CURL_TEMP_PRINTF(1, 2); +CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...) + CURL_TEMP_PRINTF(2, 3); +CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...) + CURL_TEMP_PRINTF(2, 3); +CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength, + const char *format, ...) CURL_TEMP_PRINTF(3, 4); +CURL_EXTERN int curl_mvprintf(const char *format, va_list args) + CURL_TEMP_PRINTF(1, 0); +CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args) + CURL_TEMP_PRINTF(2, 0); +CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args) + CURL_TEMP_PRINTF(2, 0); +CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength, + const char *format, va_list args) + CURL_TEMP_PRINTF(3, 0); +CURL_EXTERN char *curl_maprintf(const char *format, ...) + CURL_TEMP_PRINTF(1, 2); +CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args) + CURL_TEMP_PRINTF(1, 0); + +#undef CURL_TEMP_PRINTF + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_MPRINTF_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/multi.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/multi.h new file mode 100644 index 0000000..e79b48f --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/multi.h @@ -0,0 +1,471 @@ +#ifndef CURLINC_MULTI_H +#define CURLINC_MULTI_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ +/* + This is an "external" header file. Don't give away any internals here! + + GOALS + + o Enable a "pull" interface. The application that uses libcurl decides where + and when to ask libcurl to get/send data. + + o Enable multiple simultaneous transfers in the same thread without making it + complicated for the application. + + o Enable the application to select() on its own file descriptors and curl's + file descriptors simultaneous easily. + +*/ + +/* + * This header file should not really need to include "curl.h" since curl.h + * itself includes this file and we expect user applications to do #include + * without the need for especially including multi.h. + * + * For some reason we added this include here at one point, and rather than to + * break existing (wrongly written) libcurl applications, we leave it as-is + * but with this warning attached. + */ +#include "curl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) +typedef struct Curl_multi CURLM; +#else +typedef void CURLM; +#endif + +typedef enum { + CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or + curl_multi_socket*() soon */ + CURLM_OK, + CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */ + CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */ + CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */ + CURLM_INTERNAL_ERROR, /* this is a libcurl bug */ + CURLM_BAD_SOCKET, /* the passed in socket argument did not match */ + CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */ + CURLM_ADDED_ALREADY, /* an easy handle already added to a multi handle was + attempted to get added - again */ + CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a + callback */ + CURLM_WAKEUP_FAILURE, /* wakeup is unavailable or failed */ + CURLM_BAD_FUNCTION_ARGUMENT, /* function called with a bad parameter */ + CURLM_ABORTED_BY_CALLBACK, + CURLM_UNRECOVERABLE_POLL, + CURLM_LAST +} CURLMcode; + +/* just to make code nicer when using curl_multi_socket() you can now check + for CURLM_CALL_MULTI_SOCKET too in the same style it works for + curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */ +#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM + +/* bitmask bits for CURLMOPT_PIPELINING */ +#define CURLPIPE_NOTHING 0L +#define CURLPIPE_HTTP1 1L +#define CURLPIPE_MULTIPLEX 2L + +typedef enum { + CURLMSG_NONE, /* first, not used */ + CURLMSG_DONE, /* This easy handle has completed. 'result' contains + the CURLcode of the transfer */ + CURLMSG_LAST /* last, not used */ +} CURLMSG; + +struct CURLMsg { + CURLMSG msg; /* what this message means */ + CURL *easy_handle; /* the handle it concerns */ + union { + void *whatever; /* message-specific data */ + CURLcode result; /* return code for transfer */ + } data; +}; +typedef struct CURLMsg CURLMsg; + +/* Based on poll(2) structure and values. + * We don't use pollfd and POLL* constants explicitly + * to cover platforms without poll(). */ +#define CURL_WAIT_POLLIN 0x0001 +#define CURL_WAIT_POLLPRI 0x0002 +#define CURL_WAIT_POLLOUT 0x0004 + +struct curl_waitfd { + curl_socket_t fd; + short events; + short revents; +}; + +/* + * Name: curl_multi_init() + * + * Desc: initialize multi-style curl usage + * + * Returns: a new CURLM handle to use in all 'curl_multi' functions. + */ +CURL_EXTERN CURLM *curl_multi_init(void); + +/* + * Name: curl_multi_add_handle() + * + * Desc: add a standard curl handle to the multi stack + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle, + CURL *curl_handle); + + /* + * Name: curl_multi_remove_handle() + * + * Desc: removes a curl handle from the multi stack again + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle, + CURL *curl_handle); + + /* + * Name: curl_multi_fdset() + * + * Desc: Ask curl for its fd_set sets. The app can use these to select() or + * poll() on. We want curl_multi_perform() called as soon as one of + * them are ready. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle, + fd_set *read_fd_set, + fd_set *write_fd_set, + fd_set *exc_fd_set, + int *max_fd); + +/* + * Name: curl_multi_wait() + * + * Desc: Poll on all fds within a CURLM set as well as any + * additional fds passed to the function. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle, + struct curl_waitfd extra_fds[], + unsigned int extra_nfds, + int timeout_ms, + int *ret); + +/* + * Name: curl_multi_poll() + * + * Desc: Poll on all fds within a CURLM set as well as any + * additional fds passed to the function. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_poll(CURLM *multi_handle, + struct curl_waitfd extra_fds[], + unsigned int extra_nfds, + int timeout_ms, + int *ret); + +/* + * Name: curl_multi_wakeup() + * + * Desc: wakes up a sleeping curl_multi_poll call. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_wakeup(CURLM *multi_handle); + + /* + * Name: curl_multi_perform() + * + * Desc: When the app thinks there's data available for curl it calls this + * function to read/write whatever there is right now. This returns + * as soon as the reads and writes are done. This function does not + * require that there actually is data available for reading or that + * data can be written, it can be called just in case. It returns + * the number of handles that still transfer data in the second + * argument's integer-pointer. + * + * Returns: CURLMcode type, general multi error code. *NOTE* that this only + * returns errors etc regarding the whole multi stack. There might + * still have occurred problems on individual transfers even when + * this returns OK. + */ +CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle, + int *running_handles); + + /* + * Name: curl_multi_cleanup() + * + * Desc: Cleans up and removes a whole multi stack. It does not free or + * touch any individual easy handles in any way. We need to define + * in what state those handles will be if this function is called + * in the middle of a transfer. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle); + +/* + * Name: curl_multi_info_read() + * + * Desc: Ask the multi handle if there's any messages/informationals from + * the individual transfers. Messages include informationals such as + * error code from the transfer or just the fact that a transfer is + * completed. More details on these should be written down as well. + * + * Repeated calls to this function will return a new struct each + * time, until a special "end of msgs" struct is returned as a signal + * that there is no more to get at this point. + * + * The data the returned pointer points to will not survive calling + * curl_multi_cleanup(). + * + * The 'CURLMsg' struct is meant to be very simple and only contain + * very basic information. If more involved information is wanted, + * we will provide the particular "transfer handle" in that struct + * and that should/could/would be used in subsequent + * curl_easy_getinfo() calls (or similar). The point being that we + * must never expose complex structs to applications, as then we'll + * undoubtably get backwards compatibility problems in the future. + * + * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out + * of structs. It also writes the number of messages left in the + * queue (after this read) in the integer the second argument points + * to. + */ +CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle, + int *msgs_in_queue); + +/* + * Name: curl_multi_strerror() + * + * Desc: The curl_multi_strerror function may be used to turn a CURLMcode + * value into the equivalent human readable error string. This is + * useful for printing meaningful error messages. + * + * Returns: A pointer to a null-terminated error message. + */ +CURL_EXTERN const char *curl_multi_strerror(CURLMcode); + +/* + * Name: curl_multi_socket() and + * curl_multi_socket_all() + * + * Desc: An alternative version of curl_multi_perform() that allows the + * application to pass in one of the file descriptors that have been + * detected to have "action" on them and let libcurl perform. + * See man page for details. + */ +#define CURL_POLL_NONE 0 +#define CURL_POLL_IN 1 +#define CURL_POLL_OUT 2 +#define CURL_POLL_INOUT 3 +#define CURL_POLL_REMOVE 4 + +#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD + +#define CURL_CSELECT_IN 0x01 +#define CURL_CSELECT_OUT 0x02 +#define CURL_CSELECT_ERR 0x04 + +typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */ + curl_socket_t s, /* socket */ + int what, /* see above */ + void *userp, /* private callback + pointer */ + void *socketp); /* private socket + pointer */ +/* + * Name: curl_multi_timer_callback + * + * Desc: Called by libcurl whenever the library detects a change in the + * maximum number of milliseconds the app is allowed to wait before + * curl_multi_socket() or curl_multi_perform() must be called + * (to allow libcurl's timed events to take place). + * + * Returns: The callback should return zero. + */ +typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */ + long timeout_ms, /* see above */ + void *userp); /* private callback + pointer */ + +CURL_EXTERN CURLMcode CURL_DEPRECATED(7.19.5, "Use curl_multi_socket_action()") +curl_multi_socket(CURLM *multi_handle, curl_socket_t s, int *running_handles); + +CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle, + curl_socket_t s, + int ev_bitmask, + int *running_handles); + +CURL_EXTERN CURLMcode CURL_DEPRECATED(7.19.5, "Use curl_multi_socket_action()") +curl_multi_socket_all(CURLM *multi_handle, int *running_handles); + +#ifndef CURL_ALLOW_OLD_MULTI_SOCKET +/* This macro below was added in 7.16.3 to push users who recompile to use + the new curl_multi_socket_action() instead of the old curl_multi_socket() +*/ +#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z) +#endif + +/* + * Name: curl_multi_timeout() + * + * Desc: Returns the maximum number of milliseconds the app is allowed to + * wait before curl_multi_socket() or curl_multi_perform() must be + * called (to allow libcurl's timed events to take place). + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle, + long *milliseconds); + +typedef enum { + /* This is the socket callback function pointer */ + CURLOPT(CURLMOPT_SOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 1), + + /* This is the argument passed to the socket callback */ + CURLOPT(CURLMOPT_SOCKETDATA, CURLOPTTYPE_OBJECTPOINT, 2), + + /* set to 1 to enable pipelining for this multi handle */ + CURLOPT(CURLMOPT_PIPELINING, CURLOPTTYPE_LONG, 3), + + /* This is the timer callback function pointer */ + CURLOPT(CURLMOPT_TIMERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 4), + + /* This is the argument passed to the timer callback */ + CURLOPT(CURLMOPT_TIMERDATA, CURLOPTTYPE_OBJECTPOINT, 5), + + /* maximum number of entries in the connection cache */ + CURLOPT(CURLMOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 6), + + /* maximum number of (pipelining) connections to one host */ + CURLOPT(CURLMOPT_MAX_HOST_CONNECTIONS, CURLOPTTYPE_LONG, 7), + + /* maximum number of requests in a pipeline */ + CURLOPT(CURLMOPT_MAX_PIPELINE_LENGTH, CURLOPTTYPE_LONG, 8), + + /* a connection with a content-length longer than this + will not be considered for pipelining */ + CURLOPT(CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 9), + + /* a connection with a chunk length longer than this + will not be considered for pipelining */ + CURLOPT(CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 10), + + /* a list of site names(+port) that are blocked from pipelining */ + CURLOPT(CURLMOPT_PIPELINING_SITE_BL, CURLOPTTYPE_OBJECTPOINT, 11), + + /* a list of server types that are blocked from pipelining */ + CURLOPT(CURLMOPT_PIPELINING_SERVER_BL, CURLOPTTYPE_OBJECTPOINT, 12), + + /* maximum number of open connections in total */ + CURLOPT(CURLMOPT_MAX_TOTAL_CONNECTIONS, CURLOPTTYPE_LONG, 13), + + /* This is the server push callback function pointer */ + CURLOPT(CURLMOPT_PUSHFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 14), + + /* This is the argument passed to the server push callback */ + CURLOPT(CURLMOPT_PUSHDATA, CURLOPTTYPE_OBJECTPOINT, 15), + + /* maximum number of concurrent streams to support on a connection */ + CURLOPT(CURLMOPT_MAX_CONCURRENT_STREAMS, CURLOPTTYPE_LONG, 16), + + CURLMOPT_LASTENTRY /* the last unused */ +} CURLMoption; + + +/* + * Name: curl_multi_setopt() + * + * Desc: Sets options for the multi handle. + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle, + CURLMoption option, ...); + + +/* + * Name: curl_multi_assign() + * + * Desc: This function sets an association in the multi handle between the + * given socket and a private pointer of the application. This is + * (only) useful for curl_multi_socket uses. + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle, + curl_socket_t sockfd, void *sockp); + +/* + * Name: curl_multi_get_handles() + * + * Desc: Returns an allocated array holding all handles currently added to + * the multi handle. Marks the final entry with a NULL pointer. If + * there is no easy handle added to the multi handle, this function + * returns an array with the first entry as a NULL pointer. + * + * Returns: NULL on failure, otherwise a CURL **array pointer + */ +CURL_EXTERN CURL **curl_multi_get_handles(CURLM *multi_handle); + +/* + * Name: curl_push_callback + * + * Desc: This callback gets called when a new stream is being pushed by the + * server. It approves or denies the new stream. It can also decide + * to completely fail the connection. + * + * Returns: CURL_PUSH_OK, CURL_PUSH_DENY or CURL_PUSH_ERROROUT + */ +#define CURL_PUSH_OK 0 +#define CURL_PUSH_DENY 1 +#define CURL_PUSH_ERROROUT 2 /* added in 7.72.0 */ + +struct curl_pushheaders; /* forward declaration only */ + +CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h, + size_t num); +CURL_EXTERN char *curl_pushheader_byname(struct curl_pushheaders *h, + const char *name); + +typedef int (*curl_push_callback)(CURL *parent, + CURL *easy, + size_t num_headers, + struct curl_pushheaders *headers, + void *userp); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/options.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/options.h new file mode 100644 index 0000000..1ed76a9 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/options.h @@ -0,0 +1,70 @@ +#ifndef CURLINC_OPTIONS_H +#define CURLINC_OPTIONS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + CURLOT_LONG, /* long (a range of values) */ + CURLOT_VALUES, /* (a defined set or bitmask) */ + CURLOT_OFF_T, /* curl_off_t (a range of values) */ + CURLOT_OBJECT, /* pointer (void *) */ + CURLOT_STRING, /* (char * to null-terminated buffer) */ + CURLOT_SLIST, /* (struct curl_slist *) */ + CURLOT_CBPTR, /* (void * passed as-is to a callback) */ + CURLOT_BLOB, /* blob (struct curl_blob *) */ + CURLOT_FUNCTION /* function pointer */ +} curl_easytype; + +/* Flag bits */ + +/* "alias" means it is provided for old programs to remain functional, + we prefer another name */ +#define CURLOT_FLAG_ALIAS (1<<0) + +/* The CURLOPTTYPE_* id ranges can still be used to figure out what type/size + to use for curl_easy_setopt() for the given id */ +struct curl_easyoption { + const char *name; + CURLoption id; + curl_easytype type; + unsigned int flags; +}; + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_by_name(const char *name); + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_by_id(CURLoption id); + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_next(const struct curl_easyoption *prev); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif +#endif /* CURLINC_OPTIONS_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/stdcheaders.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/stdcheaders.h new file mode 100644 index 0000000..7451aa3 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/stdcheaders.h @@ -0,0 +1,35 @@ +#ifndef CURLINC_STDCHEADERS_H +#define CURLINC_STDCHEADERS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include + +size_t fread(void *, size_t, size_t, FILE *); +size_t fwrite(const void *, size_t, size_t, FILE *); + +int strcasecmp(const char *, const char *); +int strncasecmp(const char *, const char *, size_t); + +#endif /* CURLINC_STDCHEADERS_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/system.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/system.h new file mode 100644 index 0000000..97e0d03 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/system.h @@ -0,0 +1,521 @@ +#ifndef CURLINC_SYSTEM_H +#define CURLINC_SYSTEM_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* + * Try to keep one section per platform, compiler and architecture, otherwise, + * if an existing section is reused for a different one and later on the + * original is adjusted, probably the piggybacking one can be adversely + * changed. + * + * In order to differentiate between platforms/compilers/architectures use + * only compiler built in predefined preprocessor symbols. + * + * curl_off_t + * ---------- + * + * For any given platform/compiler curl_off_t must be typedef'ed to a 64-bit + * wide signed integral data type. The width of this data type must remain + * constant and independent of any possible large file support settings. + * + * As an exception to the above, curl_off_t shall be typedef'ed to a 32-bit + * wide signed integral data type if there is no 64-bit type. + * + * As a general rule, curl_off_t shall not be mapped to off_t. This rule shall + * only be violated if off_t is the only 64-bit data type available and the + * size of off_t is independent of large file support settings. Keep your + * build on the safe side avoiding an off_t gating. If you have a 64-bit + * off_t then take for sure that another 64-bit data type exists, dig deeper + * and you will find it. + * + */ + +#if defined(__DJGPP__) || defined(__GO32__) +# if defined(__DJGPP__) && (__DJGPP__ > 1) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__SALFORDC__) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__BORLANDC__) +# if (__BORLANDC__ < 0x520) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__TURBOC__) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__POCC__) +# if (__POCC__ < 280) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# elif defined(_MSC_VER) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# else +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__LCC__) +# if defined(__MCST__) /* MCST eLbrus Compiler Collection */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 +# else /* Local (or Little) C Compiler */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +# endif + +#elif defined(__SYMBIAN32__) +# if defined(__EABI__) /* Treat all ARM compilers equally */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__CW32__) +# pragma longlong on +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__VC32__) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(macintosh) +# include +# if TYPE_LONGLONG +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(__TANDEM) +# if ! defined(__LP64) + /* Required for 32-bit NonStop builds only. */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +# endif + +#elif defined(_WIN32_WCE) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__MINGW32__) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_WS2TCPIP_H 1 + +#elif defined(__VMS) +# if defined(__VAX) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(__OS400__) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__MVS__) +# if defined(_LONG_LONG) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__370__) +# if defined(__IBMC__) || defined(__IBMCPP__) +# if defined(_ILP32) +# elif defined(_LP64) +# endif +# if defined(_LONG_LONG) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 +# endif + +#elif defined(TPF) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__TINYC__) /* also known as tcc */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* Oracle Solaris Studio */ +# if !defined(__LP64) && (defined(__ILP32) || \ + defined(__i386) || \ + defined(__sparcv8) || \ + defined(__sparcv8plus)) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__LP64) || \ + defined(__amd64) || defined(__sparcv9) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__xlc__) /* IBM xlc compiler */ +# if !defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__hpux) /* HP aCC compiler */ +# if !defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +/* ===================================== */ +/* KEEP MSVC THE PENULTIMATE ENTRY */ +/* ===================================== */ + +#elif defined(_MSC_VER) +# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +/* ===================================== */ +/* KEEP GENERIC GCC THE LAST ENTRY */ +/* ===================================== */ + +#elif defined(__GNUC__) && !defined(_SCO_DS) +# if !defined(__LP64__) && \ + (defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \ + defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \ + defined(__sparc__) || defined(__mips__) || defined(__sh__) || \ + defined(__XTENSA__) || \ + (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \ + (defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L)) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__LP64__) || \ + defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \ + defined(__e2k__) || \ + (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \ + (defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#else +/* generic "safe guess" on old 32 bit style */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +#endif + +#ifdef _AIX +/* AIX needs */ +#define CURL_PULL_SYS_POLL_H +#endif + + +/* CURL_PULL_WS2TCPIP_H is defined above when inclusion of header file */ +/* ws2tcpip.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_WS2TCPIP_H +# include +# include +# include +#endif + +/* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */ +/* sys/types.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_TYPES_H +# include +#endif + +/* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */ +/* sys/socket.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_SOCKET_H +# include +#endif + +/* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file */ +/* sys/poll.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_POLL_H +# include +#endif + +/* Data type definition of curl_socklen_t. */ +#ifdef CURL_TYPEOF_CURL_SOCKLEN_T + typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t; +#endif + +/* Data type definition of curl_off_t. */ + +#ifdef CURL_TYPEOF_CURL_OFF_T + typedef CURL_TYPEOF_CURL_OFF_T curl_off_t; +#endif + +/* + * CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow + * these to be visible and exported by the external libcurl interface API, + * while also making them visible to the library internals, simply including + * curl_setup.h, without actually needing to include curl.h internally. + * If some day this section would grow big enough, all this should be moved + * to its own header file. + */ + +/* + * Figure out if we can use the ## preprocessor operator, which is supported + * by ISO/ANSI C and C++. Some compilers support it without setting __STDC__ + * or __cplusplus so we need to carefully check for them too. + */ + +#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \ + defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \ + defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \ + defined(__ILEC400__) + /* This compiler is believed to have an ISO compatible preprocessor */ +#define CURL_ISOCPP +#else + /* This compiler is believed NOT to have an ISO compatible preprocessor */ +#undef CURL_ISOCPP +#endif + +/* + * Macros for minimum-width signed and unsigned curl_off_t integer constants. + */ + +#if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551) +# define CURLINC_OFF_T_C_HLPR2(x) x +# define CURLINC_OFF_T_C_HLPR1(x) CURLINC_OFF_T_C_HLPR2(x) +# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ + CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T) +# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ + CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU) +#else +# ifdef CURL_ISOCPP +# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix +# else +# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix +# endif +# define CURLINC_OFF_T_C_HLPR1(Val,Suffix) CURLINC_OFF_T_C_HLPR2(Val,Suffix) +# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T) +# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU) +#endif + +#endif /* CURLINC_SYSTEM_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/typecheck-gcc.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/typecheck-gcc.h new file mode 100644 index 0000000..b880f3d --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/typecheck-gcc.h @@ -0,0 +1,717 @@ +#ifndef CURLINC_TYPECHECK_GCC_H +#define CURLINC_TYPECHECK_GCC_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* wraps curl_easy_setopt() with typechecking */ + +/* To add a new kind of warning, add an + * if(curlcheck_sometype_option(_curl_opt)) + * if(!curlcheck_sometype(value)) + * _curl_easy_setopt_err_sometype(); + * block and define curlcheck_sometype_option, curlcheck_sometype and + * _curl_easy_setopt_err_sometype below + * + * NOTE: We use two nested 'if' statements here instead of the && operator, in + * order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x + * when compiling with -Wlogical-op. + * + * To add an option that uses the same type as an existing option, you'll just + * need to extend the appropriate _curl_*_option macro + */ +#define curl_easy_setopt(handle, option, value) \ + __extension__({ \ + CURLoption _curl_opt = (option); \ + if(__builtin_constant_p(_curl_opt)) { \ + CURL_IGNORE_DEPRECATION( \ + if(curlcheck_long_option(_curl_opt)) \ + if(!curlcheck_long(value)) \ + _curl_easy_setopt_err_long(); \ + if(curlcheck_off_t_option(_curl_opt)) \ + if(!curlcheck_off_t(value)) \ + _curl_easy_setopt_err_curl_off_t(); \ + if(curlcheck_string_option(_curl_opt)) \ + if(!curlcheck_string(value)) \ + _curl_easy_setopt_err_string(); \ + if(curlcheck_write_cb_option(_curl_opt)) \ + if(!curlcheck_write_cb(value)) \ + _curl_easy_setopt_err_write_callback(); \ + if((_curl_opt) == CURLOPT_RESOLVER_START_FUNCTION) \ + if(!curlcheck_resolver_start_callback(value)) \ + _curl_easy_setopt_err_resolver_start_callback(); \ + if((_curl_opt) == CURLOPT_READFUNCTION) \ + if(!curlcheck_read_cb(value)) \ + _curl_easy_setopt_err_read_cb(); \ + if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \ + if(!curlcheck_ioctl_cb(value)) \ + _curl_easy_setopt_err_ioctl_cb(); \ + if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \ + if(!curlcheck_sockopt_cb(value)) \ + _curl_easy_setopt_err_sockopt_cb(); \ + if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \ + if(!curlcheck_opensocket_cb(value)) \ + _curl_easy_setopt_err_opensocket_cb(); \ + if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \ + if(!curlcheck_progress_cb(value)) \ + _curl_easy_setopt_err_progress_cb(); \ + if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \ + if(!curlcheck_debug_cb(value)) \ + _curl_easy_setopt_err_debug_cb(); \ + if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \ + if(!curlcheck_ssl_ctx_cb(value)) \ + _curl_easy_setopt_err_ssl_ctx_cb(); \ + if(curlcheck_conv_cb_option(_curl_opt)) \ + if(!curlcheck_conv_cb(value)) \ + _curl_easy_setopt_err_conv_cb(); \ + if((_curl_opt) == CURLOPT_SEEKFUNCTION) \ + if(!curlcheck_seek_cb(value)) \ + _curl_easy_setopt_err_seek_cb(); \ + if(curlcheck_cb_data_option(_curl_opt)) \ + if(!curlcheck_cb_data(value)) \ + _curl_easy_setopt_err_cb_data(); \ + if((_curl_opt) == CURLOPT_ERRORBUFFER) \ + if(!curlcheck_error_buffer(value)) \ + _curl_easy_setopt_err_error_buffer(); \ + if((_curl_opt) == CURLOPT_STDERR) \ + if(!curlcheck_FILE(value)) \ + _curl_easy_setopt_err_FILE(); \ + if(curlcheck_postfields_option(_curl_opt)) \ + if(!curlcheck_postfields(value)) \ + _curl_easy_setopt_err_postfields(); \ + if((_curl_opt) == CURLOPT_HTTPPOST) \ + if(!curlcheck_arr((value), struct curl_httppost)) \ + _curl_easy_setopt_err_curl_httpost(); \ + if((_curl_opt) == CURLOPT_MIMEPOST) \ + if(!curlcheck_ptr((value), curl_mime)) \ + _curl_easy_setopt_err_curl_mimepost(); \ + if(curlcheck_slist_option(_curl_opt)) \ + if(!curlcheck_arr((value), struct curl_slist)) \ + _curl_easy_setopt_err_curl_slist(); \ + if((_curl_opt) == CURLOPT_SHARE) \ + if(!curlcheck_ptr((value), CURLSH)) \ + _curl_easy_setopt_err_CURLSH(); \ + ) \ + } \ + curl_easy_setopt(handle, _curl_opt, value); \ + }) + +/* wraps curl_easy_getinfo() with typechecking */ +#define curl_easy_getinfo(handle, info, arg) \ + __extension__({ \ + CURLINFO _curl_info = (info); \ + if(__builtin_constant_p(_curl_info)) { \ + CURL_IGNORE_DEPRECATION( \ + if(curlcheck_string_info(_curl_info)) \ + if(!curlcheck_arr((arg), char *)) \ + _curl_easy_getinfo_err_string(); \ + if(curlcheck_long_info(_curl_info)) \ + if(!curlcheck_arr((arg), long)) \ + _curl_easy_getinfo_err_long(); \ + if(curlcheck_double_info(_curl_info)) \ + if(!curlcheck_arr((arg), double)) \ + _curl_easy_getinfo_err_double(); \ + if(curlcheck_slist_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_slist *)) \ + _curl_easy_getinfo_err_curl_slist(); \ + if(curlcheck_tlssessioninfo_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_tlssessioninfo *)) \ + _curl_easy_getinfo_err_curl_tlssesssioninfo(); \ + if(curlcheck_certinfo_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_certinfo *)) \ + _curl_easy_getinfo_err_curl_certinfo(); \ + if(curlcheck_socket_info(_curl_info)) \ + if(!curlcheck_arr((arg), curl_socket_t)) \ + _curl_easy_getinfo_err_curl_socket(); \ + if(curlcheck_off_t_info(_curl_info)) \ + if(!curlcheck_arr((arg), curl_off_t)) \ + _curl_easy_getinfo_err_curl_off_t(); \ + ) \ + } \ + curl_easy_getinfo(handle, _curl_info, arg); \ + }) + +/* + * For now, just make sure that the functions are called with three arguments + */ +#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) +#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) + + +/* the actual warnings, triggered by calling the _curl_easy_setopt_err* + * functions */ + +/* To define a new warning, use _CURL_WARNING(identifier, "message") */ +#define CURLWARNING(id, message) \ + static void __attribute__((__warning__(message))) \ + __attribute__((__unused__)) __attribute__((__noinline__)) \ + id(void) { __asm__(""); } + +CURLWARNING(_curl_easy_setopt_err_long, + "curl_easy_setopt expects a long argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_off_t, + "curl_easy_setopt expects a curl_off_t argument for this option") +CURLWARNING(_curl_easy_setopt_err_string, + "curl_easy_setopt expects a " + "string ('char *' or char[]) argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_write_callback, + "curl_easy_setopt expects a curl_write_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_resolver_start_callback, + "curl_easy_setopt expects a " + "curl_resolver_start_callback argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_read_cb, + "curl_easy_setopt expects a curl_read_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_ioctl_cb, + "curl_easy_setopt expects a curl_ioctl_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_sockopt_cb, + "curl_easy_setopt expects a curl_sockopt_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_opensocket_cb, + "curl_easy_setopt expects a " + "curl_opensocket_callback argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_progress_cb, + "curl_easy_setopt expects a curl_progress_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_debug_cb, + "curl_easy_setopt expects a curl_debug_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_ssl_ctx_cb, + "curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_conv_cb, + "curl_easy_setopt expects a curl_conv_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_seek_cb, + "curl_easy_setopt expects a curl_seek_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_cb_data, + "curl_easy_setopt expects a " + "private data pointer as argument for this option") +CURLWARNING(_curl_easy_setopt_err_error_buffer, + "curl_easy_setopt expects a " + "char buffer of CURL_ERROR_SIZE as argument for this option") +CURLWARNING(_curl_easy_setopt_err_FILE, + "curl_easy_setopt expects a 'FILE *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_postfields, + "curl_easy_setopt expects a 'void *' or 'char *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_httpost, + "curl_easy_setopt expects a 'struct curl_httppost *' " + "argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_mimepost, + "curl_easy_setopt expects a 'curl_mime *' " + "argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_slist, + "curl_easy_setopt expects a 'struct curl_slist *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_CURLSH, + "curl_easy_setopt expects a CURLSH* argument for this option") + +CURLWARNING(_curl_easy_getinfo_err_string, + "curl_easy_getinfo expects a pointer to 'char *' for this info") +CURLWARNING(_curl_easy_getinfo_err_long, + "curl_easy_getinfo expects a pointer to long for this info") +CURLWARNING(_curl_easy_getinfo_err_double, + "curl_easy_getinfo expects a pointer to double for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_slist, + "curl_easy_getinfo expects a pointer to 'struct curl_slist *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_tlssesssioninfo, + "curl_easy_getinfo expects a pointer to " + "'struct curl_tlssessioninfo *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_certinfo, + "curl_easy_getinfo expects a pointer to " + "'struct curl_certinfo *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_socket, + "curl_easy_getinfo expects a pointer to curl_socket_t for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_off_t, + "curl_easy_getinfo expects a pointer to curl_off_t for this info") + +/* groups of curl_easy_setops options that take the same type of argument */ + +/* To add a new option to one of the groups, just add + * (option) == CURLOPT_SOMETHING + * to the or-expression. If the option takes a long or curl_off_t, you don't + * have to do anything + */ + +/* evaluates to true if option takes a long argument */ +#define curlcheck_long_option(option) \ + (0 < (option) && (option) < CURLOPTTYPE_OBJECTPOINT) + +#define curlcheck_off_t_option(option) \ + (((option) > CURLOPTTYPE_OFF_T) && ((option) < CURLOPTTYPE_BLOB)) + +/* evaluates to true if option takes a char* argument */ +#define curlcheck_string_option(option) \ + ((option) == CURLOPT_ABSTRACT_UNIX_SOCKET || \ + (option) == CURLOPT_ACCEPT_ENCODING || \ + (option) == CURLOPT_ALTSVC || \ + (option) == CURLOPT_CAINFO || \ + (option) == CURLOPT_CAPATH || \ + (option) == CURLOPT_COOKIE || \ + (option) == CURLOPT_COOKIEFILE || \ + (option) == CURLOPT_COOKIEJAR || \ + (option) == CURLOPT_COOKIELIST || \ + (option) == CURLOPT_CRLFILE || \ + (option) == CURLOPT_CUSTOMREQUEST || \ + (option) == CURLOPT_DEFAULT_PROTOCOL || \ + (option) == CURLOPT_DNS_INTERFACE || \ + (option) == CURLOPT_DNS_LOCAL_IP4 || \ + (option) == CURLOPT_DNS_LOCAL_IP6 || \ + (option) == CURLOPT_DNS_SERVERS || \ + (option) == CURLOPT_DOH_URL || \ + (option) == CURLOPT_EGDSOCKET || \ + (option) == CURLOPT_FTP_ACCOUNT || \ + (option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \ + (option) == CURLOPT_FTPPORT || \ + (option) == CURLOPT_HSTS || \ + (option) == CURLOPT_HAPROXY_CLIENT_IP || \ + (option) == CURLOPT_INTERFACE || \ + (option) == CURLOPT_ISSUERCERT || \ + (option) == CURLOPT_KEYPASSWD || \ + (option) == CURLOPT_KRBLEVEL || \ + (option) == CURLOPT_LOGIN_OPTIONS || \ + (option) == CURLOPT_MAIL_AUTH || \ + (option) == CURLOPT_MAIL_FROM || \ + (option) == CURLOPT_NETRC_FILE || \ + (option) == CURLOPT_NOPROXY || \ + (option) == CURLOPT_PASSWORD || \ + (option) == CURLOPT_PINNEDPUBLICKEY || \ + (option) == CURLOPT_PRE_PROXY || \ + (option) == CURLOPT_PROTOCOLS_STR || \ + (option) == CURLOPT_PROXY || \ + (option) == CURLOPT_PROXY_CAINFO || \ + (option) == CURLOPT_PROXY_CAPATH || \ + (option) == CURLOPT_PROXY_CRLFILE || \ + (option) == CURLOPT_PROXY_ISSUERCERT || \ + (option) == CURLOPT_PROXY_KEYPASSWD || \ + (option) == CURLOPT_PROXY_PINNEDPUBLICKEY || \ + (option) == CURLOPT_PROXY_SERVICE_NAME || \ + (option) == CURLOPT_PROXY_SSL_CIPHER_LIST || \ + (option) == CURLOPT_PROXY_SSLCERT || \ + (option) == CURLOPT_PROXY_SSLCERTTYPE || \ + (option) == CURLOPT_PROXY_SSLKEY || \ + (option) == CURLOPT_PROXY_SSLKEYTYPE || \ + (option) == CURLOPT_PROXY_TLS13_CIPHERS || \ + (option) == CURLOPT_PROXY_TLSAUTH_PASSWORD || \ + (option) == CURLOPT_PROXY_TLSAUTH_TYPE || \ + (option) == CURLOPT_PROXY_TLSAUTH_USERNAME || \ + (option) == CURLOPT_PROXYPASSWORD || \ + (option) == CURLOPT_PROXYUSERNAME || \ + (option) == CURLOPT_PROXYUSERPWD || \ + (option) == CURLOPT_RANDOM_FILE || \ + (option) == CURLOPT_RANGE || \ + (option) == CURLOPT_REDIR_PROTOCOLS_STR || \ + (option) == CURLOPT_REFERER || \ + (option) == CURLOPT_REQUEST_TARGET || \ + (option) == CURLOPT_RTSP_SESSION_ID || \ + (option) == CURLOPT_RTSP_STREAM_URI || \ + (option) == CURLOPT_RTSP_TRANSPORT || \ + (option) == CURLOPT_SASL_AUTHZID || \ + (option) == CURLOPT_SERVICE_NAME || \ + (option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \ + (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \ + (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 || \ + (option) == CURLOPT_SSH_KNOWNHOSTS || \ + (option) == CURLOPT_SSH_PRIVATE_KEYFILE || \ + (option) == CURLOPT_SSH_PUBLIC_KEYFILE || \ + (option) == CURLOPT_SSLCERT || \ + (option) == CURLOPT_SSLCERTTYPE || \ + (option) == CURLOPT_SSLENGINE || \ + (option) == CURLOPT_SSLKEY || \ + (option) == CURLOPT_SSLKEYTYPE || \ + (option) == CURLOPT_SSL_CIPHER_LIST || \ + (option) == CURLOPT_TLS13_CIPHERS || \ + (option) == CURLOPT_TLSAUTH_PASSWORD || \ + (option) == CURLOPT_TLSAUTH_TYPE || \ + (option) == CURLOPT_TLSAUTH_USERNAME || \ + (option) == CURLOPT_UNIX_SOCKET_PATH || \ + (option) == CURLOPT_URL || \ + (option) == CURLOPT_USERAGENT || \ + (option) == CURLOPT_USERNAME || \ + (option) == CURLOPT_AWS_SIGV4 || \ + (option) == CURLOPT_USERPWD || \ + (option) == CURLOPT_XOAUTH2_BEARER || \ + (option) == CURLOPT_SSL_EC_CURVES || \ + 0) + +/* evaluates to true if option takes a curl_write_callback argument */ +#define curlcheck_write_cb_option(option) \ + ((option) == CURLOPT_HEADERFUNCTION || \ + (option) == CURLOPT_WRITEFUNCTION) + +/* evaluates to true if option takes a curl_conv_callback argument */ +#define curlcheck_conv_cb_option(option) \ + ((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION || \ + (option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION || \ + (option) == CURLOPT_CONV_FROM_UTF8_FUNCTION) + +/* evaluates to true if option takes a data argument to pass to a callback */ +#define curlcheck_cb_data_option(option) \ + ((option) == CURLOPT_CHUNK_DATA || \ + (option) == CURLOPT_CLOSESOCKETDATA || \ + (option) == CURLOPT_DEBUGDATA || \ + (option) == CURLOPT_FNMATCH_DATA || \ + (option) == CURLOPT_HEADERDATA || \ + (option) == CURLOPT_HSTSREADDATA || \ + (option) == CURLOPT_HSTSWRITEDATA || \ + (option) == CURLOPT_INTERLEAVEDATA || \ + (option) == CURLOPT_IOCTLDATA || \ + (option) == CURLOPT_OPENSOCKETDATA || \ + (option) == CURLOPT_PREREQDATA || \ + (option) == CURLOPT_PROGRESSDATA || \ + (option) == CURLOPT_READDATA || \ + (option) == CURLOPT_SEEKDATA || \ + (option) == CURLOPT_SOCKOPTDATA || \ + (option) == CURLOPT_SSH_KEYDATA || \ + (option) == CURLOPT_SSL_CTX_DATA || \ + (option) == CURLOPT_WRITEDATA || \ + (option) == CURLOPT_RESOLVER_START_DATA || \ + (option) == CURLOPT_TRAILERDATA || \ + (option) == CURLOPT_SSH_HOSTKEYDATA || \ + 0) + +/* evaluates to true if option takes a POST data argument (void* or char*) */ +#define curlcheck_postfields_option(option) \ + ((option) == CURLOPT_POSTFIELDS || \ + (option) == CURLOPT_COPYPOSTFIELDS || \ + 0) + +/* evaluates to true if option takes a struct curl_slist * argument */ +#define curlcheck_slist_option(option) \ + ((option) == CURLOPT_HTTP200ALIASES || \ + (option) == CURLOPT_HTTPHEADER || \ + (option) == CURLOPT_MAIL_RCPT || \ + (option) == CURLOPT_POSTQUOTE || \ + (option) == CURLOPT_PREQUOTE || \ + (option) == CURLOPT_PROXYHEADER || \ + (option) == CURLOPT_QUOTE || \ + (option) == CURLOPT_RESOLVE || \ + (option) == CURLOPT_TELNETOPTIONS || \ + (option) == CURLOPT_CONNECT_TO || \ + 0) + +/* groups of curl_easy_getinfo infos that take the same type of argument */ + +/* evaluates to true if info expects a pointer to char * argument */ +#define curlcheck_string_info(info) \ + (CURLINFO_STRING < (info) && (info) < CURLINFO_LONG && \ + (info) != CURLINFO_PRIVATE) + +/* evaluates to true if info expects a pointer to long argument */ +#define curlcheck_long_info(info) \ + (CURLINFO_LONG < (info) && (info) < CURLINFO_DOUBLE) + +/* evaluates to true if info expects a pointer to double argument */ +#define curlcheck_double_info(info) \ + (CURLINFO_DOUBLE < (info) && (info) < CURLINFO_SLIST) + +/* true if info expects a pointer to struct curl_slist * argument */ +#define curlcheck_slist_info(info) \ + (((info) == CURLINFO_SSL_ENGINES) || ((info) == CURLINFO_COOKIELIST)) + +/* true if info expects a pointer to struct curl_tlssessioninfo * argument */ +#define curlcheck_tlssessioninfo_info(info) \ + (((info) == CURLINFO_TLS_SSL_PTR) || ((info) == CURLINFO_TLS_SESSION)) + +/* true if info expects a pointer to struct curl_certinfo * argument */ +#define curlcheck_certinfo_info(info) ((info) == CURLINFO_CERTINFO) + +/* true if info expects a pointer to struct curl_socket_t argument */ +#define curlcheck_socket_info(info) \ + (CURLINFO_SOCKET < (info) && (info) < CURLINFO_OFF_T) + +/* true if info expects a pointer to curl_off_t argument */ +#define curlcheck_off_t_info(info) \ + (CURLINFO_OFF_T < (info)) + + +/* typecheck helpers -- check whether given expression has requested type */ + +/* For pointers, you can use the curlcheck_ptr/curlcheck_arr macros, + * otherwise define a new macro. Search for __builtin_types_compatible_p + * in the GCC manual. + * NOTE: these macros MUST NOT EVALUATE their arguments! The argument is + * the actual expression passed to the curl_easy_setopt macro. This + * means that you can only apply the sizeof and __typeof__ operators, no + * == or whatsoever. + */ + +/* XXX: should evaluate to true if expr is a pointer */ +#define curlcheck_any_ptr(expr) \ + (sizeof(expr) == sizeof(void *)) + +/* evaluates to true if expr is NULL */ +/* XXX: must not evaluate expr, so this check is not accurate */ +#define curlcheck_NULL(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), __typeof__(NULL))) + +/* evaluates to true if expr is type*, const type* or NULL */ +#define curlcheck_ptr(expr, type) \ + (curlcheck_NULL(expr) || \ + __builtin_types_compatible_p(__typeof__(expr), type *) || \ + __builtin_types_compatible_p(__typeof__(expr), const type *)) + +/* evaluates to true if expr is one of type[], type*, NULL or const type* */ +#define curlcheck_arr(expr, type) \ + (curlcheck_ptr((expr), type) || \ + __builtin_types_compatible_p(__typeof__(expr), type [])) + +/* evaluates to true if expr is a string */ +#define curlcheck_string(expr) \ + (curlcheck_arr((expr), char) || \ + curlcheck_arr((expr), signed char) || \ + curlcheck_arr((expr), unsigned char)) + +/* evaluates to true if expr is a long (no matter the signedness) + * XXX: for now, int is also accepted (and therefore short and char, which + * are promoted to int when passed to a variadic function) */ +#define curlcheck_long(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), long) || \ + __builtin_types_compatible_p(__typeof__(expr), signed long) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned long) || \ + __builtin_types_compatible_p(__typeof__(expr), int) || \ + __builtin_types_compatible_p(__typeof__(expr), signed int) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned int) || \ + __builtin_types_compatible_p(__typeof__(expr), short) || \ + __builtin_types_compatible_p(__typeof__(expr), signed short) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned short) || \ + __builtin_types_compatible_p(__typeof__(expr), char) || \ + __builtin_types_compatible_p(__typeof__(expr), signed char) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned char)) + +/* evaluates to true if expr is of type curl_off_t */ +#define curlcheck_off_t(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), curl_off_t)) + +/* evaluates to true if expr is abuffer suitable for CURLOPT_ERRORBUFFER */ +/* XXX: also check size of an char[] array? */ +#define curlcheck_error_buffer(expr) \ + (curlcheck_NULL(expr) || \ + __builtin_types_compatible_p(__typeof__(expr), char *) || \ + __builtin_types_compatible_p(__typeof__(expr), char[])) + +/* evaluates to true if expr is of type (const) void* or (const) FILE* */ +#if 0 +#define curlcheck_cb_data(expr) \ + (curlcheck_ptr((expr), void) || \ + curlcheck_ptr((expr), FILE)) +#else /* be less strict */ +#define curlcheck_cb_data(expr) \ + curlcheck_any_ptr(expr) +#endif + +/* evaluates to true if expr is of type FILE* */ +#define curlcheck_FILE(expr) \ + (curlcheck_NULL(expr) || \ + (__builtin_types_compatible_p(__typeof__(expr), FILE *))) + +/* evaluates to true if expr can be passed as POST data (void* or char*) */ +#define curlcheck_postfields(expr) \ + (curlcheck_ptr((expr), void) || \ + curlcheck_arr((expr), char) || \ + curlcheck_arr((expr), unsigned char)) + +/* helper: __builtin_types_compatible_p distinguishes between functions and + * function pointers, hide it */ +#define curlcheck_cb_compatible(func, type) \ + (__builtin_types_compatible_p(__typeof__(func), type) || \ + __builtin_types_compatible_p(__typeof__(func) *, type)) + +/* evaluates to true if expr is of type curl_resolver_start_callback */ +#define curlcheck_resolver_start_callback(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_resolver_start_callback)) + +/* evaluates to true if expr is of type curl_read_callback or "similar" */ +#define curlcheck_read_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), __typeof__(fread) *) || \ + curlcheck_cb_compatible((expr), curl_read_callback) || \ + curlcheck_cb_compatible((expr), _curl_read_callback1) || \ + curlcheck_cb_compatible((expr), _curl_read_callback2) || \ + curlcheck_cb_compatible((expr), _curl_read_callback3) || \ + curlcheck_cb_compatible((expr), _curl_read_callback4) || \ + curlcheck_cb_compatible((expr), _curl_read_callback5) || \ + curlcheck_cb_compatible((expr), _curl_read_callback6)) +typedef size_t (*_curl_read_callback1)(char *, size_t, size_t, void *); +typedef size_t (*_curl_read_callback2)(char *, size_t, size_t, const void *); +typedef size_t (*_curl_read_callback3)(char *, size_t, size_t, FILE *); +typedef size_t (*_curl_read_callback4)(void *, size_t, size_t, void *); +typedef size_t (*_curl_read_callback5)(void *, size_t, size_t, const void *); +typedef size_t (*_curl_read_callback6)(void *, size_t, size_t, FILE *); + +/* evaluates to true if expr is of type curl_write_callback or "similar" */ +#define curlcheck_write_cb(expr) \ + (curlcheck_read_cb(expr) || \ + curlcheck_cb_compatible((expr), __typeof__(fwrite) *) || \ + curlcheck_cb_compatible((expr), curl_write_callback) || \ + curlcheck_cb_compatible((expr), _curl_write_callback1) || \ + curlcheck_cb_compatible((expr), _curl_write_callback2) || \ + curlcheck_cb_compatible((expr), _curl_write_callback3) || \ + curlcheck_cb_compatible((expr), _curl_write_callback4) || \ + curlcheck_cb_compatible((expr), _curl_write_callback5) || \ + curlcheck_cb_compatible((expr), _curl_write_callback6)) +typedef size_t (*_curl_write_callback1)(const char *, size_t, size_t, void *); +typedef size_t (*_curl_write_callback2)(const char *, size_t, size_t, + const void *); +typedef size_t (*_curl_write_callback3)(const char *, size_t, size_t, FILE *); +typedef size_t (*_curl_write_callback4)(const void *, size_t, size_t, void *); +typedef size_t (*_curl_write_callback5)(const void *, size_t, size_t, + const void *); +typedef size_t (*_curl_write_callback6)(const void *, size_t, size_t, FILE *); + +/* evaluates to true if expr is of type curl_ioctl_callback or "similar" */ +#define curlcheck_ioctl_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_ioctl_callback) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback1) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback2) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback3) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback4)) +typedef curlioerr (*_curl_ioctl_callback1)(CURL *, int, void *); +typedef curlioerr (*_curl_ioctl_callback2)(CURL *, int, const void *); +typedef curlioerr (*_curl_ioctl_callback3)(CURL *, curliocmd, void *); +typedef curlioerr (*_curl_ioctl_callback4)(CURL *, curliocmd, const void *); + +/* evaluates to true if expr is of type curl_sockopt_callback or "similar" */ +#define curlcheck_sockopt_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_sockopt_callback) || \ + curlcheck_cb_compatible((expr), _curl_sockopt_callback1) || \ + curlcheck_cb_compatible((expr), _curl_sockopt_callback2)) +typedef int (*_curl_sockopt_callback1)(void *, curl_socket_t, curlsocktype); +typedef int (*_curl_sockopt_callback2)(const void *, curl_socket_t, + curlsocktype); + +/* evaluates to true if expr is of type curl_opensocket_callback or + "similar" */ +#define curlcheck_opensocket_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_opensocket_callback) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback1) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback2) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback3) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback4)) +typedef curl_socket_t (*_curl_opensocket_callback1) + (void *, curlsocktype, struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback2) + (void *, curlsocktype, const struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback3) + (const void *, curlsocktype, struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback4) + (const void *, curlsocktype, const struct curl_sockaddr *); + +/* evaluates to true if expr is of type curl_progress_callback or "similar" */ +#define curlcheck_progress_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_progress_callback) || \ + curlcheck_cb_compatible((expr), _curl_progress_callback1) || \ + curlcheck_cb_compatible((expr), _curl_progress_callback2)) +typedef int (*_curl_progress_callback1)(void *, + double, double, double, double); +typedef int (*_curl_progress_callback2)(const void *, + double, double, double, double); + +/* evaluates to true if expr is of type curl_debug_callback or "similar" */ +#define curlcheck_debug_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_debug_callback) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback1) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback2) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback3) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback4) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback5) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback6) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback7) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback8)) +typedef int (*_curl_debug_callback1) (CURL *, + curl_infotype, char *, size_t, void *); +typedef int (*_curl_debug_callback2) (CURL *, + curl_infotype, char *, size_t, const void *); +typedef int (*_curl_debug_callback3) (CURL *, + curl_infotype, const char *, size_t, void *); +typedef int (*_curl_debug_callback4) (CURL *, + curl_infotype, const char *, size_t, const void *); +typedef int (*_curl_debug_callback5) (CURL *, + curl_infotype, unsigned char *, size_t, void *); +typedef int (*_curl_debug_callback6) (CURL *, + curl_infotype, unsigned char *, size_t, const void *); +typedef int (*_curl_debug_callback7) (CURL *, + curl_infotype, const unsigned char *, size_t, void *); +typedef int (*_curl_debug_callback8) (CURL *, + curl_infotype, const unsigned char *, size_t, const void *); + +/* evaluates to true if expr is of type curl_ssl_ctx_callback or "similar" */ +/* this is getting even messier... */ +#define curlcheck_ssl_ctx_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_ssl_ctx_callback) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback1) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback2) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback3) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback4) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback5) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback6) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback7) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback8)) +typedef CURLcode (*_curl_ssl_ctx_callback1)(CURL *, void *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback2)(CURL *, void *, const void *); +typedef CURLcode (*_curl_ssl_ctx_callback3)(CURL *, const void *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback4)(CURL *, const void *, + const void *); +#ifdef HEADER_SSL_H +/* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX + * this will of course break if we're included before OpenSSL headers... + */ +typedef CURLcode (*_curl_ssl_ctx_callback5)(CURL *, SSL_CTX *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback6)(CURL *, SSL_CTX *, const void *); +typedef CURLcode (*_curl_ssl_ctx_callback7)(CURL *, const SSL_CTX *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback8)(CURL *, const SSL_CTX *, + const void *); +#else +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback5; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback6; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback7; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8; +#endif + +/* evaluates to true if expr is of type curl_conv_callback or "similar" */ +#define curlcheck_conv_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_conv_callback) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback1) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback2) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback3) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback4)) +typedef CURLcode (*_curl_conv_callback1)(char *, size_t length); +typedef CURLcode (*_curl_conv_callback2)(const char *, size_t length); +typedef CURLcode (*_curl_conv_callback3)(void *, size_t length); +typedef CURLcode (*_curl_conv_callback4)(const void *, size_t length); + +/* evaluates to true if expr is of type curl_seek_callback or "similar" */ +#define curlcheck_seek_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_seek_callback) || \ + curlcheck_cb_compatible((expr), _curl_seek_callback1) || \ + curlcheck_cb_compatible((expr), _curl_seek_callback2)) +typedef CURLcode (*_curl_seek_callback1)(void *, curl_off_t, int); +typedef CURLcode (*_curl_seek_callback2)(const void *, curl_off_t, int); + + +#endif /* CURLINC_TYPECHECK_GCC_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/urlapi.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/urlapi.h new file mode 100644 index 0000000..88cdeb3 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/urlapi.h @@ -0,0 +1,150 @@ +#ifndef CURLINC_URLAPI_H +#define CURLINC_URLAPI_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include "curl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* the error codes for the URL API */ +typedef enum { + CURLUE_OK, + CURLUE_BAD_HANDLE, /* 1 */ + CURLUE_BAD_PARTPOINTER, /* 2 */ + CURLUE_MALFORMED_INPUT, /* 3 */ + CURLUE_BAD_PORT_NUMBER, /* 4 */ + CURLUE_UNSUPPORTED_SCHEME, /* 5 */ + CURLUE_URLDECODE, /* 6 */ + CURLUE_OUT_OF_MEMORY, /* 7 */ + CURLUE_USER_NOT_ALLOWED, /* 8 */ + CURLUE_UNKNOWN_PART, /* 9 */ + CURLUE_NO_SCHEME, /* 10 */ + CURLUE_NO_USER, /* 11 */ + CURLUE_NO_PASSWORD, /* 12 */ + CURLUE_NO_OPTIONS, /* 13 */ + CURLUE_NO_HOST, /* 14 */ + CURLUE_NO_PORT, /* 15 */ + CURLUE_NO_QUERY, /* 16 */ + CURLUE_NO_FRAGMENT, /* 17 */ + CURLUE_NO_ZONEID, /* 18 */ + CURLUE_BAD_FILE_URL, /* 19 */ + CURLUE_BAD_FRAGMENT, /* 20 */ + CURLUE_BAD_HOSTNAME, /* 21 */ + CURLUE_BAD_IPV6, /* 22 */ + CURLUE_BAD_LOGIN, /* 23 */ + CURLUE_BAD_PASSWORD, /* 24 */ + CURLUE_BAD_PATH, /* 25 */ + CURLUE_BAD_QUERY, /* 26 */ + CURLUE_BAD_SCHEME, /* 27 */ + CURLUE_BAD_SLASHES, /* 28 */ + CURLUE_BAD_USER, /* 29 */ + CURLUE_LACKS_IDN, /* 30 */ + CURLUE_LAST +} CURLUcode; + +typedef enum { + CURLUPART_URL, + CURLUPART_SCHEME, + CURLUPART_USER, + CURLUPART_PASSWORD, + CURLUPART_OPTIONS, + CURLUPART_HOST, + CURLUPART_PORT, + CURLUPART_PATH, + CURLUPART_QUERY, + CURLUPART_FRAGMENT, + CURLUPART_ZONEID /* added in 7.65.0 */ +} CURLUPart; + +#define CURLU_DEFAULT_PORT (1<<0) /* return default port number */ +#define CURLU_NO_DEFAULT_PORT (1<<1) /* act as if no port number was set, + if the port number matches the + default for the scheme */ +#define CURLU_DEFAULT_SCHEME (1<<2) /* return default scheme if + missing */ +#define CURLU_NON_SUPPORT_SCHEME (1<<3) /* allow non-supported scheme */ +#define CURLU_PATH_AS_IS (1<<4) /* leave dot sequences */ +#define CURLU_DISALLOW_USER (1<<5) /* no user+password allowed */ +#define CURLU_URLDECODE (1<<6) /* URL decode on get */ +#define CURLU_URLENCODE (1<<7) /* URL encode on set */ +#define CURLU_APPENDQUERY (1<<8) /* append a form style part */ +#define CURLU_GUESS_SCHEME (1<<9) /* legacy curl-style guessing */ +#define CURLU_NO_AUTHORITY (1<<10) /* Allow empty authority when the + scheme is unknown. */ +#define CURLU_ALLOW_SPACE (1<<11) /* Allow spaces in the URL */ +#define CURLU_PUNYCODE (1<<12) /* get the host name in punycode */ +#define CURLU_PUNY2IDN (1<<13) /* punycode => IDN conversion */ + +typedef struct Curl_URL CURLU; + +/* + * curl_url() creates a new CURLU handle and returns a pointer to it. + * Must be freed with curl_url_cleanup(). + */ +CURL_EXTERN CURLU *curl_url(void); + +/* + * curl_url_cleanup() frees the CURLU handle and related resources used for + * the URL parsing. It will not free strings previously returned with the URL + * API. + */ +CURL_EXTERN void curl_url_cleanup(CURLU *handle); + +/* + * curl_url_dup() duplicates a CURLU handle and returns a new copy. The new + * handle must also be freed with curl_url_cleanup(). + */ +CURL_EXTERN CURLU *curl_url_dup(const CURLU *in); + +/* + * curl_url_get() extracts a specific part of the URL from a CURLU + * handle. Returns error code. The returned pointer MUST be freed with + * curl_free() afterwards. + */ +CURL_EXTERN CURLUcode curl_url_get(const CURLU *handle, CURLUPart what, + char **part, unsigned int flags); + +/* + * curl_url_set() sets a specific part of the URL in a CURLU handle. Returns + * error code. The passed in string will be copied. Passing a NULL instead of + * a part string, clears that part. + */ +CURL_EXTERN CURLUcode curl_url_set(CURLU *handle, CURLUPart what, + const char *part, unsigned int flags); + +/* + * curl_url_strerror() turns a CURLUcode value into the equivalent human + * readable error string. This is useful for printing meaningful error + * messages. + */ +CURL_EXTERN const char *curl_url_strerror(CURLUcode); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_URLAPI_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/websockets.h b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/websockets.h new file mode 100644 index 0000000..6ef6a2b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/include/curl/websockets.h @@ -0,0 +1,84 @@ +#ifndef CURLINC_WEBSOCKETS_H +#define CURLINC_WEBSOCKETS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +struct curl_ws_frame { + int age; /* zero */ + int flags; /* See the CURLWS_* defines */ + curl_off_t offset; /* the offset of this data into the frame */ + curl_off_t bytesleft; /* number of pending bytes left of the payload */ + size_t len; /* size of the current data chunk */ +}; + +/* flag bits */ +#define CURLWS_TEXT (1<<0) +#define CURLWS_BINARY (1<<1) +#define CURLWS_CONT (1<<2) +#define CURLWS_CLOSE (1<<3) +#define CURLWS_PING (1<<4) +#define CURLWS_OFFSET (1<<5) + +/* + * NAME curl_ws_recv() + * + * DESCRIPTION + * + * Receives data from the websocket connection. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen, + size_t *recv, + const struct curl_ws_frame **metap); + +/* flags for curl_ws_send() */ +#define CURLWS_PONG (1<<6) + +/* + * NAME curl_ws_send() + * + * DESCRIPTION + * + * Sends data over the websocket connection. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_ws_send(CURL *curl, const void *buffer, + size_t buflen, size_t *sent, + curl_off_t fragsize, + unsigned int flags); + +/* bits for the CURLOPT_WS_OPTIONS bitmask: */ +#define CURLWS_RAW_MODE (1<<0) + +CURL_EXTERN const struct curl_ws_frame *curl_ws_meta(CURL *curl); + +#ifdef __cplusplus +} +#endif + +#endif /* CURLINC_WEBSOCKETS_H */ diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLConfig.cmake b/packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLConfig.cmake new file mode 100644 index 0000000..5349512 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLConfig.cmake @@ -0,0 +1,62 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() ####### +####### Any changes to this file will be overwritten by the next CMake run #### +####### The input file was curl-config.cmake.in ######## + +get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE) + +macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() +endmacro() + +macro(check_required_components _NAME) + foreach(comp ${${_NAME}_FIND_COMPONENTS}) + if(NOT ${_NAME}_${comp}_FOUND) + if(${_NAME}_FIND_REQUIRED_${comp}) + set(${_NAME}_FOUND FALSE) + endif() + endif() + endforeach() +endmacro() + +#################################################################################### + +include(CMakeFindDependencyMacro) +if() + find_dependency(OpenSSL ) +endif() +if(OFF) + find_dependency(ZLIB ) +endif() + +include("${CMAKE_CURRENT_LIST_DIR}/CURLTargets.cmake") +check_required_components("CURL") + +# Alias for either shared or static library +add_library(CURL::libcurl ALIAS CURL::libcurl_shared) diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLConfigVersion.cmake b/packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLConfigVersion.cmake new file mode 100644 index 0000000..0b7e093 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLConfigVersion.cmake @@ -0,0 +1,70 @@ +if(NOT PACKAGE_FIND_VERSION_RANGE AND PACKAGE_FIND_VERSION_MAJOR STREQUAL "7") + # Version 8 satisfies version 7... requirements + set(PACKAGE_FIND_VERSION_MAJOR 8) + set(PACKAGE_FIND_VERSION_COUNT 1) +endif() +# This is a basic version file for the Config-mode of find_package(). +# It is used by write_basic_package_version_file() as input file for configure_file() +# to create a version-file which can be installed along a config.cmake file. +# +# The created file sets PACKAGE_VERSION_EXACT if the current version string and +# the requested version string are exactly the same and it sets +# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version, +# but only if the requested major version is the same as the current one. +# The variable CVF_VERSION must be set before calling configure_file(). + + +set(PACKAGE_VERSION "8.4.0") + +if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + + if("8.4.0" MATCHES "^([0-9]+)\\.") + set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}") + if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0) + string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}") + endif() + else() + set(CVF_VERSION_MAJOR "8.4.0") + endif() + + if(PACKAGE_FIND_VERSION_RANGE) + # both endpoints of the range must have the expected major version + math (EXPR CVF_VERSION_MAJOR_NEXT "${CVF_VERSION_MAJOR} + 1") + if (NOT PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR + OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX_MAJOR STREQUAL CVF_VERSION_MAJOR) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX VERSION_LESS_EQUAL CVF_VERSION_MAJOR_NEXT))) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + elseif(PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR + AND ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS_EQUAL PACKAGE_FIND_VERSION_MAX) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MAX))) + set(PACKAGE_VERSION_COMPATIBLE TRUE) + else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) + endif() + else() + if(PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR) + set(PACKAGE_VERSION_COMPATIBLE TRUE) + else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) + endif() + + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() + endif() +endif() + + +# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "") + return() +endif() + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8") + math(EXPR installedBits "8 * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLTargets-debug.cmake b/packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLTargets-debug.cmake new file mode 100644 index 0000000..437d191 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLTargets-debug.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file for configuration "Debug". +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "CURL::libcurl_shared" for configuration "Debug" +set_property(TARGET CURL::libcurl_shared APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) +set_target_properties(CURL::libcurl_shared PROPERTIES + IMPORTED_IMPLIB_DEBUG "${_IMPORT_PREFIX}/lib/libcurl-d_imp.lib" + IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/bin/libcurl-d.dll" + ) + +list(APPEND _cmake_import_check_targets CURL::libcurl_shared ) +list(APPEND _cmake_import_check_files_for_CURL::libcurl_shared "${_IMPORT_PREFIX}/lib/libcurl-d_imp.lib" "${_IMPORT_PREFIX}/bin/libcurl-d.dll" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLTargets-release.cmake b/packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLTargets-release.cmake new file mode 100644 index 0000000..e80df75 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLTargets-release.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file for configuration "Release". +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "CURL::libcurl_shared" for configuration "Release" +set_property(TARGET CURL::libcurl_shared APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(CURL::libcurl_shared PROPERTIES + IMPORTED_IMPLIB_RELEASE "${_IMPORT_PREFIX}/lib/libcurl_imp.lib" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/libcurl.dll" + ) + +list(APPEND _cmake_import_check_targets CURL::libcurl_shared ) +list(APPEND _cmake_import_check_files_for_CURL::libcurl_shared "${_IMPORT_PREFIX}/lib/libcurl_imp.lib" "${_IMPORT_PREFIX}/bin/libcurl.dll" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLTargets.cmake b/packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLTargets.cmake new file mode 100644 index 0000000..64a4edd --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/lib/cmake/CURL/CURLTargets.cmake @@ -0,0 +1,102 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8) + message(FATAL_ERROR "CMake >= 2.8.0 required") +endif() +if(CMAKE_VERSION VERSION_LESS "2.8.3") + message(FATAL_ERROR "CMake >= 2.8.3 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.8.3...3.25) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_cmake_targets_defined "") +set(_cmake_targets_not_defined "") +set(_cmake_expected_targets "") +foreach(_cmake_expected_target IN ITEMS CURL::libcurl_shared) + list(APPEND _cmake_expected_targets "${_cmake_expected_target}") + if(TARGET "${_cmake_expected_target}") + list(APPEND _cmake_targets_defined "${_cmake_expected_target}") + else() + list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}") + endif() +endforeach() +unset(_cmake_expected_target) +if(_cmake_targets_defined STREQUAL _cmake_expected_targets) + unset(_cmake_targets_defined) + unset(_cmake_targets_not_defined) + unset(_cmake_expected_targets) + unset(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT _cmake_targets_defined STREQUAL "") + string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}") + string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n") +endif() +unset(_cmake_targets_defined) +unset(_cmake_targets_not_defined) +unset(_cmake_expected_targets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target CURL::libcurl_shared +add_library(CURL::libcurl_shared SHARED IMPORTED) + +set_target_properties(CURL::libcurl_shared PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +# Load information for each installed configuration. +file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/CURLTargets-*.cmake") +foreach(_cmake_config_file IN LISTS _cmake_config_files) + include("${_cmake_config_file}") +endforeach() +unset(_cmake_config_file) +unset(_cmake_config_files) + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(_cmake_target IN LISTS _cmake_import_check_targets) + foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}") + if(NOT EXISTS "${_cmake_file}") + message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file + \"${_cmake_file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_cmake_file) + unset("_cmake_import_check_files_for_${_cmake_target}") +endforeach() +unset(_cmake_target) +unset(_cmake_import_check_targets) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/packages/libcpr.1.10.5/build/native/x64/Release/lib/pkgconfig/libcurl.pc b/packages/libcpr.1.10.5/build/native/x64/Release/lib/pkgconfig/libcurl.pc new file mode 100644 index 0000000..a0d0e87 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x64/Release/lib/pkgconfig/libcurl.pc @@ -0,0 +1,41 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +# This should most probably benefit from getting a "Requires:" field added +# dynamically by configure. +# +prefix=C:/Program Files/cpr +exec_prefix=${prefix} +libdir=C:/Program Files/cpr/lib +includedir=${prefix}/include +supported_protocols="HTTP HTTPS" +supported_features="SSL IPv6 unixsockets AsynchDNS Largefile SSPI alt-svc HSTS SPNEGO Kerberos NTLM HTTPS-proxy threadsafe" + +Name: libcurl +URL: https://curl.se/ +Description: Library to transfer files with ftp, http, etc. +Version: 8.4.0 +Libs: -L${libdir} -lcurl +Libs.private: -lws2_32 -ladvapi32 -lcrypt32 -lbcrypt +Cflags: -I${includedir} diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/bin/curl-config b/packages/libcpr.1.10.5/build/native/x86/Debug/bin/curl-config new file mode 100644 index 0000000..d235fbd --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/bin/curl-config @@ -0,0 +1,196 @@ +#! /bin/sh +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +prefix="C:/Program Files (x86)/cpr" +exec_prefix=${prefix} +includedir=${prefix}/include +cppflag_curl_staticlib= + +usage() +{ + cat <&2 + exit 1 + fi + ;; + + --configure) + echo + ;; + + *) + echo "unknown option: $1" + usage 1 + ;; + esac + shift +done + +exit 0 diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/accept_encoding.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/accept_encoding.h new file mode 100644 index 0000000..167d7c2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/accept_encoding.h @@ -0,0 +1,41 @@ +#ifndef CPR_ACCEPT_ENCODING_H +#define CPR_ACCEPT_ENCODING_H + +#include +#include +#include +#include +#include + +namespace cpr { + +enum class AcceptEncodingMethods { + identity, + deflate, + zlib, + gzip, + disabled, +}; + +// NOLINTNEXTLINE(cert-err58-cpp) +static const std::map AcceptEncodingMethodsStringMap{{AcceptEncodingMethods::identity, "identity"}, {AcceptEncodingMethods::deflate, "deflate"}, {AcceptEncodingMethods::zlib, "zlib"}, {AcceptEncodingMethods::gzip, "gzip"}, {AcceptEncodingMethods::disabled, "disabled"}}; + +class AcceptEncoding { + public: + AcceptEncoding() = default; + // NOLINTNEXTLINE(google-explicit-constructor) + AcceptEncoding(const std::initializer_list& methods); + // NOLINTNEXTLINE(google-explicit-constructor) + AcceptEncoding(const std::initializer_list& methods); + + [[nodiscard]] bool empty() const noexcept; + [[nodiscard]] const std::string getString() const; + [[nodiscard]] bool disabled() const; + + private: + std::unordered_set methods_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/api.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/api.h new file mode 100644 index 0000000..ba9c64e --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/api.h @@ -0,0 +1,392 @@ +#ifndef CPR_API_H +#define CPR_API_H + +#include +#include +#include +#include +#include + +#include "cpr/async.h" +#include "cpr/async_wrapper.h" +#include "cpr/auth.h" +#include "cpr/bearer.h" +#include "cpr/cprtypes.h" +#include "cpr/multipart.h" +#include "cpr/multiperform.h" +#include "cpr/payload.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include + +namespace cpr { + +using AsyncResponse = AsyncWrapper; + +namespace priv { + +template +void set_option_internal(Session& session, CurrentType&& current_option) { + session.SetOption(std::forward(current_option)); +} + +template <> +inline void set_option_internal(Session& session, Header&& current_option) { + // Header option was already provided -> Update previous header + session.UpdateHeader(std::forward
(current_option)); +} + +template +void set_option_internal(Session& session, CurrentType&& current_option, Ts&&... ts) { + set_option_internal(session, std::forward(current_option)); + + if (std::is_same::value) { + set_option_internal(session, std::forward(ts)...); + } else { + set_option_internal(session, std::forward(ts)...); + } +} + +template +void set_option(Session& session, Ts&&... ts) { + set_option_internal(session, std::forward(ts)...); +} + +// Idea: https://stackoverflow.com/a/19060157 +template +void apply_set_option_internal(Session& session, Tuple&& t, std::index_sequence) { + set_option(session, std::get(std::forward(t))...); +} + +// Idea: https://stackoverflow.com/a/19060157 +template +void apply_set_option(Session& session, Tuple&& t) { + using Indices = std::make_index_sequence>::value>; + apply_set_option_internal(session, std::forward(t), Indices()); +} + +template +void setup_multiperform_internal(MultiPerform& multiperform, T&& t) { + std::shared_ptr session = std::make_shared(); + apply_set_option(*session, t); + multiperform.AddSession(session); +} + +template +void setup_multiperform_internal(MultiPerform& multiperform, T&& t, Ts&&... ts) { + std::shared_ptr session = std::make_shared(); + apply_set_option(*session, t); + multiperform.AddSession(session); + setup_multiperform_internal(multiperform, std::forward(ts)...); +} + +template +void setup_multiperform(MultiPerform& multiperform, Ts&&... ts) { + setup_multiperform_internal(multiperform, std::forward(ts)...); +} + +using session_action_t = cpr::Response (cpr::Session::*)(); + +template +void setup_multiasync(std::vector>& responses, T&& parameters) { + std::shared_ptr cancellation_state = std::make_shared(false); + + std::function execFn{[cancellation_state](T params) { + if (cancellation_state->load()) { + return Response{}; + } + cpr::Session s{}; + s.SetCancellationParam(cancellation_state); + apply_set_option(s, std::forward(params)); + return std::invoke(SessionAction, s); + }}; + responses.emplace_back(GlobalThreadPool::GetInstance()->Submit(std::move(execFn), std::forward(parameters)), std::move(cancellation_state)); +} + +template +void setup_multiasync(std::vector>& responses, T&& head, Ts&&... tail) { + setup_multiasync(responses, std::forward(head)); + if constexpr (sizeof...(Ts) > 0) { + setup_multiasync(responses, std::forward(tail)...); + } +} + +} // namespace priv + +// Get methods +template +Response Get(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Get(); +} + +// Get async methods +template +AsyncResponse GetAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Get(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Get callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto GetCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Get(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Post methods +template +Response Post(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Post(); +} + +// Post async methods +template +AsyncResponse PostAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Post(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Post callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto PostCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Post(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Put methods +template +Response Put(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Put(); +} + +// Put async methods +template +AsyncResponse PutAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Put(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Put callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto PutCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Put(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Head methods +template +Response Head(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Head(); +} + +// Head async methods +template +AsyncResponse HeadAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Head(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Head callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto HeadCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Head(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Delete methods +template +Response Delete(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Delete(); +} + +// Delete async methods +template +AsyncResponse DeleteAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Delete(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Delete callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto DeleteCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Delete(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Options methods +template +Response Options(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Options(); +} + +// Options async methods +template +AsyncResponse OptionsAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Options(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Options callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto OptionsCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Options(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Patch methods +template +Response Patch(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Patch(); +} + +// Patch async methods +template +AsyncResponse PatchAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Patch(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Patch callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto PatchCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Patch(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Download methods +template +Response Download(std::ofstream& file, Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Download(file); +} + +// Download async method +template +AsyncResponse DownloadAsync(fs::path local_path, Ts... ts) { + return AsyncWrapper{std::async( + std::launch::async, + [](fs::path local_path_, Ts... ts_) { + std::ofstream f(local_path_.c_str()); + return Download(f, std::move(ts_)...); + }, + std::move(local_path), std::move(ts)...)}; +} + +// Download with user callback +template +Response Download(const WriteCallback& write, Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Download(write); +} + +// Multi requests +template +std::vector MultiGet(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Get(); +} + +template +std::vector MultiDelete(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Delete(); +} + +template +std::vector MultiPut(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Put(); +} + +template +std::vector MultiHead(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Head(); +} + +template +std::vector MultiOptions(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Options(); +} + +template +std::vector MultiPatch(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Patch(); +} + +template +std::vector MultiPost(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Post(); +} + +template +std::vector> MultiGetAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Get>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiDeleteAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Delete>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiHeadAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Head>(ret, std::forward(ts)...); + return ret; +} +template +std::vector> MultiOptionsAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Options>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiPatchAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Patch>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiPostAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Post>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiPutAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Put>(ret, std::forward(ts)...); + return ret; +} + + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/async.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/async.h new file mode 100644 index 0000000..1305834 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/async.h @@ -0,0 +1,50 @@ +#ifndef CPR_ASYNC_H +#define CPR_ASYNC_H + +#include "async_wrapper.h" +#include "singleton.h" +#include "threadpool.h" + +namespace cpr { + +class GlobalThreadPool : public ThreadPool { + CPR_SINGLETON_DECL(GlobalThreadPool) + protected: + GlobalThreadPool() = default; + + public: + ~GlobalThreadPool() override = default; +}; + +/** + * Return a wrapper for a future, calling future.get() will wait until the task is done and return RetType. + * async(fn, args...) + * async(std::bind(&Class::mem_fn, &obj)) + * async(std::mem_fn(&Class::mem_fn, &obj)) + **/ +template +auto async(Fn&& fn, Args&&... args) { + return AsyncWrapper{GlobalThreadPool::GetInstance()->Submit(std::forward(fn), std::forward(args)...)}; +} + +class async { + public: + static void startup(size_t min_threads = CPR_DEFAULT_THREAD_POOL_MIN_THREAD_NUM, size_t max_threads = CPR_DEFAULT_THREAD_POOL_MAX_THREAD_NUM, std::chrono::milliseconds max_idle_ms = CPR_DEFAULT_THREAD_POOL_MAX_IDLE_TIME) { + GlobalThreadPool* gtp = GlobalThreadPool::GetInstance(); + if (gtp->IsStarted()) { + return; + } + gtp->SetMinThreadNum(min_threads); + gtp->SetMaxThreadNum(max_threads); + gtp->SetMaxIdleTime(max_idle_ms); + gtp->Start(); + } + + static void cleanup() { + GlobalThreadPool::ExitInstance(); + } +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/async_wrapper.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/async_wrapper.h new file mode 100644 index 0000000..bb46bf9 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/async_wrapper.h @@ -0,0 +1,140 @@ +#ifndef CPR_ASYNC_WRAPPER_H +#define CPR_ASYNC_WRAPPER_H + +#include +#include +#include + +#include "cpr/response.h" + +namespace cpr { +enum class [[nodiscard]] CancellationResult { failure, success, invalid_operation }; + +/** + * A class template intended to wrap results of async operations (instances of std::future) + * and also provide extended capablilities relaed to these requests, for example cancellation. + * + * The RAII semantics are the same as std::future - moveable, not copyable. + */ +template +class AsyncWrapper { + private: + std::future future; + std::shared_ptr is_cancelled; + + public: + // Constructors + explicit AsyncWrapper(std::future&& f) : future{std::move(f)} {} + AsyncWrapper(std::future&& f, std::shared_ptr&& cancelledState) : future{std::move(f)}, is_cancelled{std::move(cancelledState)} {} + + // Copy Semantics + AsyncWrapper(const AsyncWrapper&) = delete; + AsyncWrapper& operator=(const AsyncWrapper&) = delete; + + // Move Semantics + AsyncWrapper(AsyncWrapper&&) noexcept = default; + AsyncWrapper& operator=(AsyncWrapper&&) noexcept = default; + + // Destructor + ~AsyncWrapper() { + if constexpr (isCancellable) { + if(is_cancelled) { + is_cancelled->store(true); + } + } + } + // These methods replicate the behaviour of std::future + [[nodiscard]] T get() { + if constexpr (isCancellable) { + if (IsCancelled()) { + throw std::logic_error{"Calling AsyncWrapper::get on a cancelled request!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::get when the associated future instance is invalid!"}; + } + return future.get(); + } + + [[nodiscard]] bool valid() const noexcept { + if constexpr (isCancellable) { + return !is_cancelled->load() && future.valid(); + } else { + return future.valid(); + } + } + + void wait() const { + if constexpr (isCancellable) { + if (is_cancelled->load()) { + throw std::logic_error{"Calling AsyncWrapper::wait when the associated future is invalid or cancelled!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is invalid!"}; + } + future.wait(); + } + + template + std::future_status wait_for(const std::chrono::duration& timeout_duration) const { + if constexpr (isCancellable) { + if (IsCancelled()) { + throw std::logic_error{"Calling AsyncWrapper::wait_for when the associated future is cancelled!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is invalid!"}; + } + return future.wait_for(timeout_duration); + } + + template + std::future_status wait_until(const std::chrono::time_point& timeout_time) const { + if constexpr (isCancellable) { + if (IsCancelled()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is cancelled!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is invalid!"}; + } + return future.wait_until(timeout_time); + } + + std::shared_future share() noexcept { + return future.share(); + } + + // Cancellation-related methods + CancellationResult Cancel() { + if constexpr (!isCancellable) { + return CancellationResult::invalid_operation; + } + if (!future.valid() || is_cancelled->load()) { + return CancellationResult::invalid_operation; + } + is_cancelled->store(true); + return CancellationResult::success; + } + + [[nodiscard]] bool IsCancelled() const { + if constexpr (isCancellable) { + return is_cancelled->load(); + } else { + return false; + } + } +}; + +// Deduction guides +template +AsyncWrapper(std::future&&) -> AsyncWrapper; + +template +AsyncWrapper(std::future&&, std::shared_ptr&&) -> AsyncWrapper; + +} // namespace cpr + + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/auth.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/auth.h new file mode 100644 index 0000000..e783969 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/auth.h @@ -0,0 +1,32 @@ +#ifndef CPR_AUTH_H +#define CPR_AUTH_H + +#include + +#include + +namespace cpr { + +enum class AuthMode { BASIC, DIGEST, NTLM }; + +class Authentication { + public: + Authentication(std::string username, std::string password, AuthMode auth_mode) : auth_string_{std::move(username) + ":" + std::move(password)}, auth_mode_{std::move(auth_mode)} {} + Authentication(const Authentication& other) = default; + Authentication(Authentication&& old) noexcept = default; + ~Authentication() noexcept; + + Authentication& operator=(Authentication&& old) noexcept = default; + Authentication& operator=(const Authentication& other) = default; + + const char* GetAuthString() const noexcept; + AuthMode GetAuthMode() const noexcept; + + private: + std::string auth_string_; + AuthMode auth_mode_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/bearer.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/bearer.h new file mode 100644 index 0000000..5e58a7d --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/bearer.h @@ -0,0 +1,34 @@ +#ifndef CPR_BEARER_H +#define CPR_BEARER_H + +#include +#include + +#include + +namespace cpr { + +// Only supported with libcurl >= 7.61.0. +// As an alternative use SetHeader and add the token manually. +#if LIBCURL_VERSION_NUM >= 0x073D00 +class Bearer { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Bearer(std::string token) : token_string_{std::move(token)} {} + Bearer(const Bearer& other) = default; + Bearer(Bearer&& old) noexcept = default; + virtual ~Bearer() noexcept; + + Bearer& operator=(Bearer&& old) noexcept = default; + Bearer& operator=(const Bearer& other) = default; + + virtual const char* GetToken() const noexcept; + + protected: + std::string token_string_; +}; +#endif + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/body.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/body.h new file mode 100644 index 0000000..f691d9c --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/body.h @@ -0,0 +1,54 @@ +#ifndef CPR_BODY_H +#define CPR_BODY_H + +#include +#include +#include +#include +#include + +#include "cpr/buffer.h" +#include "cpr/cprtypes.h" +#include "cpr/file.h" + +namespace cpr { + +class Body : public StringHolder { + public: + Body() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Body(std::string body) : StringHolder(std::move(body)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Body(std::string_view body) : StringHolder(body) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Body(const char* body) : StringHolder(body) {} + Body(const char* str, size_t len) : StringHolder(str, len) {} + Body(const std::initializer_list args) : StringHolder(args) {} + // NOLINTNEXTLINE(google-explicit-constructor, cppcoreguidelines-pro-type-reinterpret-cast) + Body(const Buffer& buffer) : StringHolder(reinterpret_cast(buffer.data), static_cast(buffer.datalen)) {} + // NOLINTNEXTLINE(google-explicit-constructor) + Body(const File& file) { + std::ifstream is(file.filepath, std::ifstream::binary); + if (!is) { + throw std::invalid_argument("Can't open the file for HTTP request body!"); + } + + is.seekg(0, std::ios::end); + const std::streampos length = is.tellg(); + is.seekg(0, std::ios::beg); + std::string buffer; + buffer.resize(static_cast(length)); + is.read(buffer.data(), length); + str_ = std::move(buffer); + } + Body(const Body& other) = default; + Body(Body&& old) noexcept = default; + ~Body() override = default; + + Body& operator=(Body&& old) noexcept = default; + Body& operator=(const Body& other) = default; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/buffer.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/buffer.h new file mode 100644 index 0000000..5665faa --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/buffer.h @@ -0,0 +1,33 @@ +#ifndef CPR_BUFFER_H +#define CPR_BUFFER_H + +#include + +#include + +namespace cpr { + +struct Buffer { + using data_t = const char*; + + template + Buffer(Iterator begin, Iterator end, fs::path&& p_filename) + // Ignored here since libcurl reqires a long. + // There is also no way around the reinterpret_cast. + // NOLINTNEXTLINE(google-runtime-int, cppcoreguidelines-pro-type-reinterpret-cast) + : data{reinterpret_cast(&(*begin))}, datalen{static_cast(std::distance(begin, end))}, filename(std::move(p_filename)) { + is_random_access_iterator(begin, end); + static_assert(sizeof(*begin) == 1, "Only byte buffers can be used"); + } + + template + typename std::enable_if::iterator_category, std::random_access_iterator_tag>::value>::type is_random_access_iterator(Iterator /* begin */, Iterator /* end */) {} + + data_t data; + size_t datalen; + const fs::path filename; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/callback.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/callback.h new file mode 100644 index 0000000..dc1c6ee --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/callback.h @@ -0,0 +1,111 @@ +#ifndef CPR_CALLBACK_H +#define CPR_CALLBACK_H + +#include "cprtypes.h" + +#include +#include +#include +#include + +namespace cpr { + +class ReadCallback { + public: + ReadCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ReadCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), size{-1}, callback{std::move(p_callback)} {} + ReadCallback(cpr_off_t p_size, std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), size{p_size}, callback{std::move(p_callback)} {} + bool operator()(char* buffer, size_t& buffer_size) const { + return callback(buffer, buffer_size, userdata); + } + + intptr_t userdata{}; + cpr_off_t size{}; + std::function callback; +}; + +class HeaderCallback { + public: + HeaderCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + HeaderCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + bool operator()(std::string header) const { + return callback(std::move(header), userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +class WriteCallback { + public: + WriteCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + WriteCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + bool operator()(std::string data) const { + return callback(std::move(data), userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +class ProgressCallback { + public: + ProgressCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ProgressCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + bool operator()(cpr_pf_arg_t downloadTotal, cpr_pf_arg_t downloadNow, cpr_pf_arg_t uploadTotal, cpr_pf_arg_t uploadNow) const { + return callback(downloadTotal, downloadNow, uploadTotal, uploadNow, userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +class DebugCallback { + public: + enum class InfoType { + TEXT = 0, + HEADER_IN = 1, + HEADER_OUT = 2, + DATA_IN = 3, + DATA_OUT = 4, + SSL_DATA_IN = 5, + SSL_DATA_OUT = 6, + }; + DebugCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + DebugCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + void operator()(InfoType type, std::string data) const { + callback(type, std::move(data), userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +/** + * Functor class for progress functions that will be used in cancellable requests. + */ +class CancellationCallback { + public: + CancellationCallback() = default; + explicit CancellationCallback(std::shared_ptr&& cs) : cancellation_state{std::move(cs)} {} + + CancellationCallback(std::shared_ptr&& cs, ProgressCallback& u_cb) : cancellation_state{std::move(cs)}, user_cb{std::reference_wrapper{u_cb}} {} + + bool operator()(cpr_pf_arg_t dltotal, cpr_pf_arg_t dlnow, cpr_pf_arg_t ultotal, cpr_pf_arg_t ulnow) const; + + void SetProgressCallback(ProgressCallback& u_cb); + + private: + std::shared_ptr cancellation_state; + std::optional> user_cb; +}; + + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cert_info.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cert_info.h new file mode 100644 index 0000000..6c328ee --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cert_info.h @@ -0,0 +1,35 @@ +#ifndef CPR_CERT_INFO_H +#define CPR_CERT_INFO_H + +#include +#include +#include + +namespace cpr { + +class CertInfo { + private: + std::vector cert_info_; + + public: + CertInfo() = default; + CertInfo(const std::initializer_list& entry) : cert_info_{entry} {}; + ~CertInfo() noexcept = default; + + using iterator = std::vector::iterator; + using const_iterator = std::vector::const_iterator; + + std::string& operator[](const size_t& pos); + iterator begin(); + iterator end(); + const_iterator begin() const; + const_iterator end() const; + const_iterator cbegin() const; + const_iterator cend() const; + void emplace_back(const std::string& str); + void push_back(const std::string& str); + void pop_back(); +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/connect_timeout.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/connect_timeout.h new file mode 100644 index 0000000..546e8a5 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/connect_timeout.h @@ -0,0 +1,18 @@ +#ifndef CPR_CONNECT_TIMEOUT_H +#define CPR_CONNECT_TIMEOUT_H + +#include "cpr/timeout.h" + +namespace cpr { + +class ConnectTimeout : public Timeout { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ConnectTimeout(const std::chrono::milliseconds& duration) : Timeout{duration} {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ConnectTimeout(const std::int32_t& milliseconds) : Timeout{milliseconds} {} +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cookies.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cookies.h new file mode 100644 index 0000000..c018ea4 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cookies.h @@ -0,0 +1,92 @@ +#ifndef CPR_COOKIES_H +#define CPR_COOKIES_H + +#include "cpr/curlholder.h" +#include +#include +#include +#include +#include + +namespace cpr { +/** + * EXPIRES_STRING_SIZE is an explicitly static and const variable that could be only accessed within the same namespace and is immutable. + * To be used for "std::array", the expression must have a constant value, so EXPIRES_STRING_SIZE must be a const value. + **/ +static const std::size_t EXPIRES_STRING_SIZE = 100; + +class Cookie { + public: + Cookie() = default; + /** + * Some notes for the default value used by expires: + * std::chrono::system_clock::time_point::min() won't work on Windows due to the min, max clash there. + * So we fall back to std::chrono::system_clock::from_time_t(0) for the minimum value here. + **/ + Cookie(const std::string& name, const std::string& value, const std::string& domain = "", bool p_isIncludingSubdomains = false, const std::string& path = "/", bool p_isHttpsOnly = false, std::chrono::system_clock::time_point expires = std::chrono::system_clock::from_time_t(0)) : name_{name}, value_{value}, domain_{domain}, includeSubdomains_{p_isIncludingSubdomains}, path_{path}, httpsOnly_{p_isHttpsOnly}, expires_{expires} {}; + const std::string GetDomain() const; + bool IsIncludingSubdomains() const; + const std::string GetPath() const; + bool IsHttpsOnly() const; + const std::chrono::system_clock::time_point GetExpires() const; + const std::string GetExpiresString() const; + const std::string GetName() const; + const std::string GetValue() const; + + private: + std::string name_; + std::string value_; + std::string domain_; + bool includeSubdomains_{}; + std::string path_; + bool httpsOnly_{}; + /** + * TODO: Update the implementation using `std::chrono::utc_clock` of C++20 + **/ + std::chrono::system_clock::time_point expires_{}; +}; + +class Cookies { + public: + /** + * Should we URL-encode cookies when making a request. + * Based on RFC6265, it is recommended but not mandatory to encode cookies. + * + * ------- + * To maximize compatibility with user agents, servers that wish to + * store arbitrary data in a cookie-value SHOULD encode that data, for + * example, using Base64 [RFC4648]. + * ------- + * Source: RFC6265 (https://www.ietf.org/rfc/rfc6265.txt) + **/ + bool encode{true}; + + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Cookies(bool p_encode = true) : encode{p_encode} {}; + Cookies(const std::initializer_list& cookies, bool p_encode = true) : encode{p_encode}, cookies_{cookies} {}; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Cookies(const cpr::Cookie& cookie, bool p_encode = true) : encode{p_encode}, cookies_{cookie} {}; + + cpr::Cookie& operator[](size_t pos); + const std::string GetEncoded(const CurlHolder& holder) const; + + using iterator = std::vector::iterator; + using const_iterator = std::vector::const_iterator; + + iterator begin(); + iterator end(); + const_iterator begin() const; + const_iterator end() const; + const_iterator cbegin() const; + const_iterator cend() const; + void emplace_back(const Cookie& str); + void push_back(const Cookie& str); + void pop_back(); + + private: + std::vector cookies_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cpr.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cpr.h new file mode 100644 index 0000000..fbad172 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cpr.h @@ -0,0 +1,46 @@ +#ifndef CPR_CPR_H +#define CPR_CPR_H + +#include "cpr/api.h" +#include "cpr/auth.h" +#include "cpr/bearer.h" +#include "cpr/callback.h" +#include "cpr/cert_info.h" +#include "cpr/connect_timeout.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/cprver.h" +#include "cpr/curl_container.h" +#include "cpr/curlholder.h" +#include "cpr/error.h" +#include "cpr/http_version.h" +#include "cpr/interceptor.h" +#include "cpr/interface.h" +#include "cpr/limit_rate.h" +#include "cpr/local_port.h" +#include "cpr/local_port_range.h" +#include "cpr/low_speed.h" +#include "cpr/multipart.h" +#include "cpr/multiperform.h" +#include "cpr/parameters.h" +#include "cpr/payload.h" +#include "cpr/proxies.h" +#include "cpr/proxyauth.h" +#include "cpr/range.h" +#include "cpr/redirect.h" +#include "cpr/reserve_size.h" +#include "cpr/resolve.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include "cpr/ssl_ctx.h" +#include "cpr/ssl_options.h" +#include "cpr/status_codes.h" +#include "cpr/timeout.h" +#include "cpr/unix_socket.h" +#include "cpr/user_agent.h" +#include "cpr/util.h" +#include "cpr/verbose.h" + +#define CPR_LIBCURL_VERSION_NUM LIBCURL_VERSION_NUM + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cprtypes.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cprtypes.h new file mode 100644 index 0000000..65da738 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cprtypes.h @@ -0,0 +1,144 @@ +#ifndef CPR_CPR_TYPES_H +#define CPR_CPR_TYPES_H + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace cpr { + +/** + * Wrapper around "curl_off_t" to prevent applications from having to link against libcurl. + **/ +using cpr_off_t = curl_off_t; + +/** + * The argument type for progress functions, dependent on libcurl version + **/ +#if LIBCURL_VERSION_NUM < 0x072000 +using cpr_pf_arg_t = double; +#else +using cpr_pf_arg_t = cpr_off_t; +#endif + +template +class StringHolder { + public: + StringHolder() = default; + explicit StringHolder(std::string str) : str_(std::move(str)) {} + explicit StringHolder(std::string_view str) : str_(str) {} + explicit StringHolder(const char* str) : str_(str) {} + StringHolder(const char* str, size_t len) : str_(str, len) {} + StringHolder(const std::initializer_list args) { + str_ = std::accumulate(args.begin(), args.end(), str_); + } + StringHolder(const StringHolder& other) = default; + StringHolder(StringHolder&& old) noexcept = default; + virtual ~StringHolder() = default; + + StringHolder& operator=(StringHolder&& old) noexcept = default; + + StringHolder& operator=(const StringHolder& other) = default; + + explicit operator std::string() const { + return str_; + } + + T operator+(const char* rhs) const { + return T(str_ + rhs); + } + + T operator+(const std::string& rhs) const { + return T(str_ + rhs); + } + + T operator+(const StringHolder& rhs) const { + return T(str_ + rhs.str_); + } + + void operator+=(const char* rhs) { + str_ += rhs; + } + void operator+=(const std::string& rhs) { + str_ += rhs; + } + void operator+=(const StringHolder& rhs) { + str_ += rhs; + } + + bool operator==(const char* rhs) const { + return str_ == rhs; + } + bool operator==(const std::string& rhs) const { + return str_ == rhs; + } + bool operator==(const StringHolder& rhs) const { + return str_ == rhs.str_; + } + + bool operator!=(const char* rhs) const { + return str_.c_str() != rhs; + } + bool operator!=(const std::string& rhs) const { + return str_ != rhs; + } + bool operator!=(const StringHolder& rhs) const { + return str_ != rhs.str_; + } + + const std::string& str() { + return str_; + } + const std::string& str() const { + return str_; + } + const char* c_str() const { + return str_.c_str(); + } + const char* data() const { + return str_.data(); + } + + protected: + std::string str_{}; +}; + +template +std::ostream& operator<<(std::ostream& os, const StringHolder& s) { + os << s.str(); + return os; +} + +class Url : public StringHolder { + public: + Url() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Url(std::string url) : StringHolder(std::move(url)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Url(std::string_view url) : StringHolder(url) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Url(const char* url) : StringHolder(url) {} + Url(const char* str, size_t len) : StringHolder(std::string(str, len)) {} + Url(const std::initializer_list args) : StringHolder(args) {} + Url(const Url& other) = default; + Url(Url&& old) noexcept = default; + ~Url() override = default; + + Url& operator=(Url&& old) noexcept = default; + Url& operator=(const Url& other) = default; +}; + +struct CaseInsensitiveCompare { + bool operator()(const std::string& a, const std::string& b) const noexcept; +}; + +using Header = std::map; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cprver.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cprver.h new file mode 100644 index 0000000..aaa4f9f --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/cprver.h @@ -0,0 +1,30 @@ +#ifndef CPR_CPRVER_H +#define CPR_CPRVER_H + +/** + * CPR version as a string. + **/ +#define CPR_VERSION "1.10.5" + +/** + * CPR version split up into parts. + **/ +#define CPR_VERSION_MAJOR 1 +#define CPR_VERSION_MINOR 10 +#define CPR_VERSION_PATCH 5 + +/** + * CPR version as a single hex digit. + * it can be split up into three parts: + * 0xAABBCC + * AA: The current CPR major version number in a hex format. + * BB: The current CPR minor version number in a hex format. + * CC: The current CPR patch version number in a hex format. + * + * Examples: + * '0x010702' -> 01.07.02 -> CPR_VERSION: 1.7.2 + * '0xA13722' -> A1.37.22 -> CPR_VERSION: 161.55.34 + **/ +#define CPR_VERSION_NUM 0x10a05 + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/curl_container.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/curl_container.h new file mode 100644 index 0000000..c2409b2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/curl_container.h @@ -0,0 +1,51 @@ +#ifndef CURL_CONTAINER_H +#define CURL_CONTAINER_H + +#include +#include +#include +#include + +#include "cpr/curlholder.h" + + +namespace cpr { + +struct Parameter { + Parameter(std::string p_key, std::string p_value) : key{std::move(p_key)}, value{std::move(p_value)} {} + + std::string key; + std::string value; +}; + +struct Pair { + Pair(std::string p_key, std::string p_value) : key(std::move(p_key)), value(std::move(p_value)) {} + + std::string key; + std::string value; +}; + + +template +class CurlContainer { + public: + /** + * Enables or disables URL encoding for keys and values when calling GetContent(...). + **/ + bool encode = true; + + CurlContainer() = default; + CurlContainer(const std::initializer_list&); + + void Add(const std::initializer_list&); + void Add(const T&); + + const std::string GetContent(const CurlHolder&) const; + + protected: + std::vector containerList_; +}; + +} // namespace cpr + +#endif // diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/curlholder.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/curlholder.h new file mode 100644 index 0000000..a9e1dc8 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/curlholder.h @@ -0,0 +1,54 @@ +#ifndef CPR_CURL_HOLDER_H +#define CPR_CURL_HOLDER_H + +#include +#include +#include + +#include + +namespace cpr { +struct CurlHolder { + private: + /** + * Mutex for curl_easy_init(). + * curl_easy_init() is not thread save. + * References: + * https://curl.haxx.se/libcurl/c/curl_easy_init.html + * https://curl.haxx.se/libcurl/c/threadsafe.html + **/ + + // Avoids initalization order problems in a static build + static std::mutex& curl_easy_init_mutex_() { + static std::mutex curl_easy_init_mutex_; + return curl_easy_init_mutex_; + } + + public: + CURL* handle{nullptr}; + struct curl_slist* chunk{nullptr}; + struct curl_slist* resolveCurlList{nullptr}; + curl_mime* multipart{nullptr}; + std::array error{}; + + CurlHolder(); + CurlHolder(const CurlHolder& other) = default; + CurlHolder(CurlHolder&& old) noexcept = default; + ~CurlHolder(); + + CurlHolder& operator=(CurlHolder&& old) noexcept = default; + CurlHolder& operator=(const CurlHolder& other) = default; + + /** + * Uses curl_easy_escape(...) for escaping the given string. + **/ + std::string urlEncode(const std::string& s) const; + + /** + * Uses curl_easy_unescape(...) for unescaping the given string. + **/ + std::string urlDecode(const std::string& s) const; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/curlmultiholder.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/curlmultiholder.h new file mode 100644 index 0000000..ccd504b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/curlmultiholder.h @@ -0,0 +1,18 @@ +#ifndef CPR_CURLMULTIHOLDER_H +#define CPR_CURLMULTIHOLDER_H + +#include + +namespace cpr { + +class CurlMultiHolder { + public: + CurlMultiHolder(); + ~CurlMultiHolder(); + + CURLM* handle{nullptr}; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/error.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/error.h new file mode 100644 index 0000000..bb59a4c --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/error.h @@ -0,0 +1,53 @@ +#ifndef CPR_ERROR_H +#define CPR_ERROR_H + +#include +#include + +#include "cpr/cprtypes.h" +#include + +namespace cpr { + +enum class ErrorCode { + OK = 0, + CONNECTION_FAILURE, + EMPTY_RESPONSE, + HOST_RESOLUTION_FAILURE, + INTERNAL_ERROR, + INVALID_URL_FORMAT, + NETWORK_RECEIVE_ERROR, + NETWORK_SEND_FAILURE, + OPERATION_TIMEDOUT, + PROXY_RESOLUTION_FAILURE, + SSL_CONNECT_ERROR, + SSL_LOCAL_CERTIFICATE_ERROR, + SSL_REMOTE_CERTIFICATE_ERROR, + SSL_CACERT_ERROR, + GENERIC_SSL_ERROR, + UNSUPPORTED_PROTOCOL, + REQUEST_CANCELLED, + TOO_MANY_REDIRECTS, + UNKNOWN_ERROR = 1000, +}; + +class Error { + public: + ErrorCode code = ErrorCode::OK; + std::string message{}; + + Error() = default; + + Error(const std::int32_t& curl_code, std::string&& p_error_message) : code{getErrorCodeForCurlError(curl_code)}, message(std::move(p_error_message)) {} + + explicit operator bool() const { + return code != ErrorCode::OK; + } + + private: + static ErrorCode getErrorCodeForCurlError(std::int32_t curl_code); +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/file.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/file.h new file mode 100644 index 0000000..b39914a --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/file.h @@ -0,0 +1,59 @@ +#ifndef CPR_FILE_H +#define CPR_FILE_H + +#include +#include +#include + +#include + +namespace cpr { + +struct File { + explicit File(std::string p_filepath, const std::string& p_overriden_filename = {}) : filepath(std::move(p_filepath)), overriden_filename(p_overriden_filename) {} + + std::string filepath; + std::string overriden_filename; + + [[nodiscard]] bool hasOverridenFilename() const noexcept { + return !overriden_filename.empty(); + }; +}; + +class Files { + public: + Files() = default; + // NOLINTNEXTLINE(google-explicit-constructor) + Files(const File& p_file) : files{p_file} {}; + + Files(const Files& other) = default; + Files(Files&& old) noexcept = default; + + Files(const std::initializer_list& p_files) : files{p_files} {}; + Files(const std::initializer_list& p_filepaths); + + ~Files() noexcept = default; + + Files& operator=(const Files& other); + Files& operator=(Files&& old) noexcept; + + using iterator = std::vector::iterator; + using const_iterator = std::vector::const_iterator; + + iterator begin(); + iterator end(); + [[nodiscard]] const_iterator begin() const; + [[nodiscard]] const_iterator end() const; + [[nodiscard]] const_iterator cbegin() const; + [[nodiscard]] const_iterator cend() const; + void emplace_back(const File& file); + void push_back(const File& file); + void pop_back(); + + private: + std::vector files; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/filesystem.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/filesystem.h new file mode 100644 index 0000000..f296770 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/filesystem.h @@ -0,0 +1,26 @@ +#ifndef CPR_FILESYSTEM_H +#define CPR_FILESYSTEM_H + +// Include filesystem into the namespace "fs" from either "filesystem" or "experimental/filesystem" or "boost/filesystem" +#ifdef CPR_USE_BOOST_FILESYSTEM +#define BOOST_FILESYSTEM_VERSION 4 // Use the latest, with the closest behavior to std::filesystem. +#include +namespace cpr { +namespace fs = boost::filesystem; +} +// cppcheck-suppress preprocessorErrorDirective +#elif __has_include() +#include +namespace cpr { +namespace fs = std::filesystem; +} +#elif __has_include("experimental/filesystem") +#include +namespace cpr { +namespace fs = std::experimental::filesystem; +} +#else +#error "Failed to include header!" +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/http_version.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/http_version.h new file mode 100644 index 0000000..45b5028 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/http_version.h @@ -0,0 +1,67 @@ +#ifndef CPR_HTTP_VERSION_H +#define CPR_HTTP_VERSION_H + +#include + +namespace cpr { +enum class HttpVersionCode { + /** + * Let libcurl decide which version is the best. + **/ + VERSION_NONE, + /** + * Enforce HTTP 1.0 requests. + **/ + VERSION_1_0, + /** + * Enforce HTTP 1.1 requests. + **/ + VERSION_1_1, +#if LIBCURL_VERSION_NUM >= 0x072100 // 7.33.0 + /** + * Attempt HTTP 2.0 requests. + * Fallback to HTTP 1.1 if negotiation fails. + **/ + VERSION_2_0, +#endif +#if LIBCURL_VERSION_NUM >= 0x072F00 // 7.47.0 + /** + * Attempt HTTP 2.0 for HTTPS requests only. + * Fallback to HTTP 1.1 if negotiation fails. + * HTTP 1.1 will be used for HTTP connections. + **/ + VERSION_2_0_TLS, +#endif +#if LIBCURL_VERSION_NUM >= 0x073100 // 7.49.0 + /** + * Start HTTP 2.0 for HTTP requests. + * Requires prior knowledge that the server supports HTTP 2.0. + * For HTTPS requests we will negotiate the protocol version in the TLS handshake. + **/ + VERSION_2_0_PRIOR_KNOWLEDGE, +#endif +#if LIBCURL_VERSION_NUM >= 0x074200 // 7.66.0 + /** + * Attempt HTTP 3.0 requests. + * Requires prior knowledge that the server supports HTTP 3.0 since there is no gracefully downgrade. + * Fallback to HTTP 1.1 if negotiation fails. + **/ + VERSION_3_0 +#endif +}; + +class HttpVersion { + public: + /** + * The HTTP version that should be used by libcurl when initiating a HTTP(S) connection. + * Default: HttpVersionCode::VERSION_NONE + **/ + HttpVersionCode code = HttpVersionCode::VERSION_NONE; + + HttpVersion() = default; + explicit HttpVersion(HttpVersionCode _code) : code(_code) {} +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/interceptor.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/interceptor.h new file mode 100644 index 0000000..34cfe50 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/interceptor.h @@ -0,0 +1,74 @@ +#ifndef CPR_INTERCEPTOR_H +#define CPR_INTERCEPTOR_H + +#include "cpr/multiperform.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include + +namespace cpr { +class Interceptor { + public: + enum class ProceedHttpMethod { + GET_REQUEST = 0, + POST_REQUEST, + PUT_REQUEST, + DELETE_REQUEST, + PATCH_REQUEST, + HEAD_REQUEST, + OPTIONS_REQUEST, + DOWNLOAD_CALLBACK_REQUEST, + DOWNLOAD_FILE_REQUEST, + }; + + Interceptor() = default; + Interceptor(const Interceptor& other) = default; + Interceptor(Interceptor&& old) = default; + virtual ~Interceptor() = default; + + Interceptor& operator=(const Interceptor& other) = default; + Interceptor& operator=(Interceptor&& old) = default; + + virtual Response intercept(Session& session) = 0; + + protected: + static Response proceed(Session& session); + static Response proceed(Session& session, ProceedHttpMethod httpMethod); + static Response proceed(Session& session, ProceedHttpMethod httpMethod, std::ofstream& file); + static Response proceed(Session& session, ProceedHttpMethod httpMethod, const WriteCallback& write); +}; + +class InterceptorMulti { + public: + enum class ProceedHttpMethod { + GET_REQUEST = 0, + POST_REQUEST, + PUT_REQUEST, + DELETE_REQUEST, + PATCH_REQUEST, + HEAD_REQUEST, + OPTIONS_REQUEST, + DOWNLOAD_CALLBACK_REQUEST, + DOWNLOAD_FILE_REQUEST, + }; + + InterceptorMulti() = default; + InterceptorMulti(const InterceptorMulti& other) = default; + InterceptorMulti(InterceptorMulti&& old) = default; + virtual ~InterceptorMulti() = default; + + InterceptorMulti& operator=(const InterceptorMulti& other) = default; + InterceptorMulti& operator=(InterceptorMulti&& old) = default; + + virtual std::vector intercept(MultiPerform& multi) = 0; + + protected: + static std::vector proceed(MultiPerform& multi); + + static void PrepareDownloadSession(MultiPerform& multi, size_t sessions_index, const WriteCallback& write); +}; + +} // namespace cpr + + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/interface.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/interface.h new file mode 100644 index 0000000..b98940e --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/interface.h @@ -0,0 +1,32 @@ +#ifndef CPR_INTERFACE_H +#define CPR_INTERFACE_H + +#include +#include + +#include "cpr/cprtypes.h" + +namespace cpr { + +class Interface : public StringHolder { + public: + Interface() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Interface(std::string iface) : StringHolder(std::move(iface)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Interface(std::string_view iface) : StringHolder(iface) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Interface(const char* iface) : StringHolder(iface) {} + Interface(const char* str, size_t len) : StringHolder(str, len) {} + Interface(const std::initializer_list args) : StringHolder(args) {} + Interface(const Interface& other) = default; + Interface(Interface&& old) noexcept = default; + ~Interface() override = default; + + Interface& operator=(Interface&& old) noexcept = default; + Interface& operator=(const Interface& other) = default; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/limit_rate.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/limit_rate.h new file mode 100644 index 0000000..2b0e8a2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/limit_rate.h @@ -0,0 +1,18 @@ +#ifndef CPR_SPEED_LIMIT_H +#define CPR_SPEED_LIMIT_H + +#include + +namespace cpr { + +class LimitRate { + public: + LimitRate(const std::int64_t p_downrate, const std::int64_t p_uprate) : downrate(p_downrate), uprate(p_uprate) {} + + std::int64_t downrate = 0; + std::int64_t uprate = 0; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/local_port.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/local_port.h new file mode 100644 index 0000000..e853425 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/local_port.h @@ -0,0 +1,23 @@ +#ifndef CPR_LOCAL_PORT_H +#define CPR_LOCAL_PORT_H + +#include + +namespace cpr { + +class LocalPort { + public: + // NOLINTNEXTLINE(google-explicit-constructor) + LocalPort(const std::uint16_t p_localport) : localport_(p_localport) {} + + operator std::uint16_t() const { + return localport_; + } + + private: + std::uint16_t localport_ = 0; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/local_port_range.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/local_port_range.h new file mode 100644 index 0000000..cc2d7e2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/local_port_range.h @@ -0,0 +1,23 @@ +#ifndef CPR_LOCAL_PORT_RANGE_H +#define CPR_LOCAL_PORT_RANGE_H + +#include + +namespace cpr { + +class LocalPortRange { + public: + // NOLINTNEXTLINE(google-explicit-constructor) + LocalPortRange(const std::uint16_t p_localportrange) : localportrange_(p_localportrange) {} + + operator std::uint16_t() const { + return localportrange_; + } + + private: + std::uint16_t localportrange_ = 0; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/low_speed.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/low_speed.h new file mode 100644 index 0000000..ff77fd2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/low_speed.h @@ -0,0 +1,18 @@ +#ifndef CPR_LOW_SPEED_H +#define CPR_LOW_SPEED_H + +#include + +namespace cpr { + +class LowSpeed { + public: + LowSpeed(const std::int32_t p_limit, const std::int32_t p_time) : limit(p_limit), time(p_time) {} + + std::int32_t limit; + std::int32_t time; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/multipart.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/multipart.h new file mode 100644 index 0000000..3eaaea7 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/multipart.h @@ -0,0 +1,43 @@ +#ifndef CPR_MULTIPART_H +#define CPR_MULTIPART_H + +#include +#include +#include +#include +#include + +#include "buffer.h" +#include "file.h" + +namespace cpr { + +struct Part { + Part(const std::string& p_name, const std::string& p_value, const std::string& p_content_type = {}) : name{p_name}, value{p_value}, content_type{p_content_type}, is_file{false}, is_buffer{false} {} + Part(const std::string& p_name, const std::int32_t& p_value, const std::string& p_content_type = {}) : name{p_name}, value{std::to_string(p_value)}, content_type{p_content_type}, is_file{false}, is_buffer{false} {} + Part(const std::string& p_name, const Files& p_files, const std::string& p_content_type = {}) : name{p_name}, content_type{p_content_type}, is_file{true}, is_buffer{false}, files{p_files} {} + Part(const std::string& p_name, Files&& p_files, const std::string& p_content_type = {}) : name{p_name}, content_type{p_content_type}, is_file{true}, is_buffer{false}, files{p_files} {} + Part(const std::string& p_name, const Buffer& buffer, const std::string& p_content_type = {}) : name{p_name}, value{buffer.filename.string()}, content_type{p_content_type}, data{buffer.data}, datalen{buffer.datalen}, is_file{false}, is_buffer{true} {} + + std::string name; + // We don't use fs::path here, as this leads to problems using windows + std::string value; + std::string content_type; + Buffer::data_t data{nullptr}; + size_t datalen{0}; + bool is_file; + bool is_buffer; + + Files files; +}; + +class Multipart { + public: + Multipart(const std::initializer_list& parts); + + std::vector parts; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/multiperform.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/multiperform.h new file mode 100644 index 0000000..d9ab978 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/multiperform.h @@ -0,0 +1,137 @@ +#ifndef CPR_MULTIPERFORM_H +#define CPR_MULTIPERFORM_H + +#include "cpr/curlmultiholder.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include +#include +#include +#include +#include + +namespace cpr { + +class InterceptorMulti; + +class MultiPerform { + public: + enum class HttpMethod { + UNDEFINED = 0, + GET_REQUEST, + POST_REQUEST, + PUT_REQUEST, + DELETE_REQUEST, + PATCH_REQUEST, + HEAD_REQUEST, + OPTIONS_REQUEST, + DOWNLOAD_REQUEST, + }; + + MultiPerform(); + MultiPerform(const MultiPerform& other) = delete; + MultiPerform(MultiPerform&& old) = default; + ~MultiPerform(); + + MultiPerform& operator=(const MultiPerform& other) = delete; + MultiPerform& operator=(MultiPerform&& old) noexcept = default; + + std::vector Get(); + std::vector Delete(); + template + std::vector Download(DownloadArgTypes... args); + std::vector Put(); + std::vector Head(); + std::vector Options(); + std::vector Patch(); + std::vector Post(); + + std::vector Perform(); + template + std::vector PerformDownload(DownloadArgTypes... args); + + void AddSession(std::shared_ptr& session, HttpMethod method = HttpMethod::UNDEFINED); + void RemoveSession(const std::shared_ptr& session); + std::vector, HttpMethod>>& GetSessions(); + [[nodiscard]] const std::vector, HttpMethod>>& GetSessions() const; + + void AddInterceptor(const std::shared_ptr& pinterceptor); + + private: + // Interceptors should be able to call the private proceed() and PrepareDownloadSessions() functions + friend InterceptorMulti; + + void SetHttpMethod(HttpMethod method); + + void PrepareSessions(); + template + void PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg, DownloadArgTypes... args); + template + void PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg); + void PrepareDownloadSession(size_t sessions_index, std::ofstream& file); + void PrepareDownloadSession(size_t sessions_index, const WriteCallback& write); + + void PrepareGet(); + void PrepareDelete(); + void PreparePut(); + void PreparePatch(); + void PrepareHead(); + void PrepareOptions(); + void PreparePost(); + template + void PrepareDownload(DownloadArgTypes... args); + + std::vector intercept(); + std::vector proceed(); + std::vector MakeRequest(); + std::vector MakeDownloadRequest(); + + void DoMultiPerform(); + std::vector ReadMultiInfo(std::function&& complete_function); + + std::vector, HttpMethod>> sessions_; + std::unique_ptr multicurl_; + bool is_download_multi_perform{false}; + + std::queue> interceptors_; +}; + +template +void MultiPerform::PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg) { + PrepareDownloadSession(sessions_index, current_arg); +} + +template +void MultiPerform::PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg, DownloadArgTypes... args) { + PrepareDownloadSession(sessions_index, current_arg); + PrepareDownloadSessions(sessions_index + 1, args...); +} + + +template +void MultiPerform::PrepareDownload(DownloadArgTypes... args) { + SetHttpMethod(HttpMethod::DOWNLOAD_REQUEST); + PrepareDownloadSessions(0, args...); +} + +template +std::vector MultiPerform::Download(DownloadArgTypes... args) { + if (sizeof...(args) != sessions_.size()) { + throw std::invalid_argument("Number of download arguments has to match the number of sessions added to the multiperform!"); + } + PrepareDownload(args...); + return MakeDownloadRequest(); +} + +template +std::vector MultiPerform::PerformDownload(DownloadArgTypes... args) { + if (sizeof...(args) != sessions_.size()) { + throw std::invalid_argument("Number of download arguments has to match the number of sessions added to the multiperform!"); + } + PrepareDownloadSessions(0, args...); + return MakeDownloadRequest(); +} + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/parameters.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/parameters.h new file mode 100644 index 0000000..0e34d4d --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/parameters.h @@ -0,0 +1,18 @@ +#ifndef CPR_PARAMETERS_H +#define CPR_PARAMETERS_H + +#include + +#include "cpr/curl_container.h" + +namespace cpr { + +class Parameters : public CurlContainer { + public: + Parameters() = default; + Parameters(const std::initializer_list& parameters); +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/payload.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/payload.h new file mode 100644 index 0000000..686b540 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/payload.h @@ -0,0 +1,23 @@ +#ifndef CPR_PAYLOAD_H +#define CPR_PAYLOAD_H + +#include + +#include "cpr/curl_container.h" + + +namespace cpr { +class Payload : public CurlContainer { + public: + template + Payload(const It begin, const It end) { + for (It pair = begin; pair != end; ++pair) { + Add(*pair); + } + } + Payload(const std::initializer_list& pairs); +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/proxies.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/proxies.h new file mode 100644 index 0000000..6970442 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/proxies.h @@ -0,0 +1,23 @@ +#ifndef CPR_PROXIES_H +#define CPR_PROXIES_H + +#include +#include +#include + +namespace cpr { +class Proxies { + public: + Proxies() = default; + Proxies(const std::initializer_list>& hosts); + Proxies(const std::map& hosts); + + bool has(const std::string& protocol) const; + const std::string& operator[](const std::string& protocol); + + private: + std::map hosts_; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/proxyauth.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/proxyauth.h new file mode 100644 index 0000000..7e34764 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/proxyauth.h @@ -0,0 +1,43 @@ +#ifndef CPR_PROXYAUTH_H +#define CPR_PROXYAUTH_H + +#include +#include + +#include "cpr/auth.h" +#include "cpr/util.h" + +namespace cpr { +class EncodedAuthentication { + public: + EncodedAuthentication() : auth_string_{""} {} + EncodedAuthentication(std::string username, std::string password) : auth_string_{cpr::util::urlEncode(std::move(username)) + ":" + cpr::util::urlEncode(std::move(password))} {} + EncodedAuthentication(const EncodedAuthentication& other) = default; + EncodedAuthentication(EncodedAuthentication&& old) noexcept = default; + virtual ~EncodedAuthentication() noexcept; + + EncodedAuthentication& operator=(EncodedAuthentication&& old) noexcept = default; + EncodedAuthentication& operator=(const EncodedAuthentication& other) = default; + + const char* GetAuthString() const noexcept; + + protected: + std::string auth_string_; +}; + +class ProxyAuthentication { + public: + ProxyAuthentication() = default; + ProxyAuthentication(const std::initializer_list>& auths) : proxyAuth_{auths} {} + ProxyAuthentication(const std::map& auths) : proxyAuth_{auths} {} + + bool has(const std::string& protocol) const; + const char* operator[](const std::string& protocol); + + private: + std::map proxyAuth_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/range.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/range.h new file mode 100644 index 0000000..2c5a145 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/range.h @@ -0,0 +1,44 @@ +#ifndef CPR_RANGE_H +#define CPR_RANGE_H + +#include +#include + +namespace cpr { + +class Range { + public: + Range(const std::optional p_resume_from = std::nullopt, const std::optional p_finish_at = std::nullopt) { + resume_from = p_resume_from.value_or(0); + finish_at = p_finish_at.value_or(-1); + } + + std::int64_t resume_from; + std::int64_t finish_at; + + const std::string str() const { + std::string from_str = (resume_from < 0U) ? "" : std::to_string(resume_from); + std::string to_str = (finish_at < 0U) ? "" : std::to_string(finish_at); + return from_str + "-" + to_str; + } +}; + +class MultiRange { + public: + MultiRange(std::initializer_list rs) : ranges{rs} {} + + const std::string str() const { + std::string multi_range_string{}; + for (Range range : ranges) { + multi_range_string += ((multi_range_string.empty()) ? "" : ", ") + range.str(); + } + return multi_range_string; + } + + private: + std::vector ranges; +}; // namespace cpr + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/redirect.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/redirect.h new file mode 100644 index 0000000..32b4372 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/redirect.h @@ -0,0 +1,84 @@ +#ifndef CPR_REDIRECT_H +#define CPR_REDIRECT_H + +#include + +namespace cpr { +enum class PostRedirectFlags : uint8_t { + /** + * Respect RFC 7231 (section 6.4.2 to 6.4.4). + * Same as CURL_REDIR_POST_301 (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_301 = 0x1 << 0, + /** + * Maintain the request method after a 302 redirect. + * Same as CURL_REDIR_POST_302 (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_302 = 0x1 << 1, + /** + * Maintain the request method after a 303 redirect. + * Same as CURL_REDIR_POST_303 (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_303 = 0x1 << 2, + /** + * Default value. + * Convenience option to enable all flags. + * Same as CURL_REDIR_POST_ALL (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_ALL = POST_301 | POST_302 | POST_303, + /** + * * Convenience option to disable all flags. + **/ + NONE = 0x0 +}; + +PostRedirectFlags operator|(PostRedirectFlags lhs, PostRedirectFlags rhs); +PostRedirectFlags operator&(PostRedirectFlags lhs, PostRedirectFlags rhs); +PostRedirectFlags operator^(PostRedirectFlags lhs, PostRedirectFlags rhs); +PostRedirectFlags operator~(PostRedirectFlags flag); +PostRedirectFlags& operator|=(PostRedirectFlags& lhs, PostRedirectFlags rhs); +PostRedirectFlags& operator&=(PostRedirectFlags& lhs, PostRedirectFlags rhs); +PostRedirectFlags& operator^=(PostRedirectFlags& lhs, PostRedirectFlags rhs); +bool any(PostRedirectFlags flag); + +class Redirect { + public: + /** + * The maximum number of redirects to follow. + * 0: Refuse any redirects. + * -1: Infinite number of redirects. + * Default: 50 + * https://curl.se/libcurl/c/CURLOPT_MAXREDIRS.html + **/ + // NOLINTNEXTLINE (google-runtime-int) + long maximum{50L}; + /** + * Follow 3xx redirects. + * Default: true + * https://curl.se/libcurl/c/CURLOPT_FOLLOWLOCATION.html + **/ + bool follow{true}; + /** + * Continue to send authentication (user+password) credentials when following locations, even when hostname changed. + * Default: false + * https://curl.se/libcurl/c/CURLOPT_UNRESTRICTED_AUTH.html + **/ + bool cont_send_cred{false}; + /** + * Flags to control how to act after a redirect for a post request. + * Default: POST_ALL + **/ + PostRedirectFlags post_flags{PostRedirectFlags::POST_ALL}; + + Redirect() = default; + // NOLINTNEXTLINE (google-runtime-int) + Redirect(long p_maximum, bool p_follow, bool p_cont_send_cred, PostRedirectFlags p_post_flags) : maximum(p_maximum), follow(p_follow), cont_send_cred(p_cont_send_cred), post_flags(p_post_flags){}; + // NOLINTNEXTLINE (google-runtime-int) + explicit Redirect(long p_maximum) : maximum(p_maximum){}; + explicit Redirect(bool p_follow) : follow(p_follow){}; + Redirect(bool p_follow, bool p_cont_send_cred) : follow(p_follow), cont_send_cred(p_cont_send_cred){}; + explicit Redirect(PostRedirectFlags p_post_flags) : post_flags(p_post_flags){}; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/reserve_size.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/reserve_size.h new file mode 100644 index 0000000..5eae4c8 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/reserve_size.h @@ -0,0 +1,17 @@ +#ifndef CPR_RESERVE_SIZE_H +#define CPR_RESERVE_SIZE_H + +#include + +namespace cpr { + +class ReserveSize { + public: + ReserveSize(const size_t _size) : size(_size) {} + + size_t size = 0; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/resolve.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/resolve.h new file mode 100644 index 0000000..86a7c89 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/resolve.h @@ -0,0 +1,23 @@ +#ifndef CPR_RESOLVE_H +#define CPR_RESOLVE_H + +#include +#include + +namespace cpr { + class Resolve { + public: + std::string host; + std::string addr; + std::set ports; + + Resolve(const std::string& host_param, const std::string& addr_param, const std::set& ports_param = std::set{80U, 443U}): host(host_param), addr(addr_param), ports(ports_param) { + if (this->ports.empty()) { + this->ports.insert(80U); + this->ports.insert(443U); + } + } + }; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/response.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/response.h new file mode 100644 index 0000000..5c296da --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/response.h @@ -0,0 +1,58 @@ +#ifndef CPR_RESPONSE_H +#define CPR_RESPONSE_H + +#include +#include +#include +#include +#include +#include + +#include "cpr/cert_info.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/error.h" +#include "cpr/ssl_options.h" +#include "cpr/util.h" + +namespace cpr { + +class MultiPerform; + +class Response { + private: + friend MultiPerform; + std::shared_ptr curl_{nullptr}; + + public: + // Ignored here since libcurl uses a long for this. + // NOLINTNEXTLINE(google-runtime-int) + long status_code{}; + std::string text{}; + Header header{}; + Url url{}; + double elapsed{}; + Cookies cookies{}; + Error error{}; + std::string raw_header{}; + std::string status_line{}; + std::string reason{}; + cpr_off_t uploaded_bytes{}; + cpr_off_t downloaded_bytes{}; + // Ignored here since libcurl uses a long for this. + // NOLINTNEXTLINE(google-runtime-int) + long redirect_count{}; + + Response() = default; + Response(std::shared_ptr curl, std::string&& p_text, std::string&& p_header_string, Cookies&& p_cookies, Error&& p_error); + std::vector GetCertInfos(); + Response(const Response& other) = default; + Response(Response&& old) noexcept = default; + ~Response() noexcept = default; + + Response& operator=(Response&& old) noexcept = default; + Response& operator=(const Response& other) = default; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/session.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/session.h new file mode 100644 index 0000000..6b2b93e --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/session.h @@ -0,0 +1,308 @@ +#ifndef CPR_SESSION_H +#define CPR_SESSION_H + +#include +#include +#include +#include +#include +#include + +#include "cpr/accept_encoding.h" +#include "cpr/async_wrapper.h" +#include "cpr/auth.h" +#include "cpr/bearer.h" +#include "cpr/body.h" +#include "cpr/callback.h" +#include "cpr/connect_timeout.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/curlholder.h" +#include "cpr/http_version.h" +#include "cpr/interface.h" +#include "cpr/limit_rate.h" +#include "cpr/local_port.h" +#include "cpr/local_port_range.h" +#include "cpr/low_speed.h" +#include "cpr/multipart.h" +#include "cpr/parameters.h" +#include "cpr/payload.h" +#include "cpr/proxies.h" +#include "cpr/proxyauth.h" +#include "cpr/range.h" +#include "cpr/redirect.h" +#include "cpr/reserve_size.h" +#include "cpr/resolve.h" +#include "cpr/response.h" +#include "cpr/ssl_options.h" +#include "cpr/timeout.h" +#include "cpr/unix_socket.h" +#include "cpr/user_agent.h" +#include "cpr/util.h" +#include "cpr/verbose.h" + +namespace cpr { + +using AsyncResponse = AsyncWrapper; + +class Interceptor; +class MultiPerform; + +class Session : public std::enable_shared_from_this { + public: + Session(); + Session(const Session& other) = delete; + Session(Session&& old) = default; + + ~Session() = default; + + Session& operator=(Session&& old) noexcept = default; + Session& operator=(const Session& other) = delete; + + void SetUrl(const Url& url); + void SetParameters(const Parameters& parameters); + void SetParameters(Parameters&& parameters); + void SetHeader(const Header& header); + void UpdateHeader(const Header& header); + void SetTimeout(const Timeout& timeout); + void SetConnectTimeout(const ConnectTimeout& timeout); + void SetAuth(const Authentication& auth); +// Only supported with libcurl >= 7.61.0. +// As an alternative use SetHeader and add the token manually. +#if LIBCURL_VERSION_NUM >= 0x073D00 + void SetBearer(const Bearer& token); +#endif + void SetUserAgent(const UserAgent& ua); + void SetPayload(Payload&& payload); + void SetPayload(const Payload& payload); + void SetProxies(Proxies&& proxies); + void SetProxies(const Proxies& proxies); + void SetProxyAuth(ProxyAuthentication&& proxy_auth); + void SetProxyAuth(const ProxyAuthentication& proxy_auth); + void SetMultipart(Multipart&& multipart); + void SetMultipart(const Multipart& multipart); + void SetRedirect(const Redirect& redirect); + void SetCookies(const Cookies& cookies); + void SetBody(Body&& body); + void SetBody(const Body& body); + void SetLowSpeed(const LowSpeed& low_speed); + void SetVerifySsl(const VerifySsl& verify); + void SetUnixSocket(const UnixSocket& unix_socket); + void SetSslOptions(const SslOptions& options); + void SetReadCallback(const ReadCallback& read); + void SetHeaderCallback(const HeaderCallback& header); + void SetWriteCallback(const WriteCallback& write); + void SetProgressCallback(const ProgressCallback& progress); + void SetDebugCallback(const DebugCallback& debug); + void SetVerbose(const Verbose& verbose); + void SetInterface(const Interface& iface); + void SetLocalPort(const LocalPort& local_port); + void SetLocalPortRange(const LocalPortRange& local_port_range); + void SetHttpVersion(const HttpVersion& version); + void SetRange(const Range& range); + void SetResolve(const Resolve& resolve); + void SetResolves(const std::vector& resolves); + void SetMultiRange(const MultiRange& multi_range); + void SetReserveSize(const ReserveSize& reserve_size); + void SetAcceptEncoding(const AcceptEncoding& accept_encoding); + void SetAcceptEncoding(AcceptEncoding&& accept_encoding); + void SetLimitRate(const LimitRate& limit_rate); + + // For cancellable requests + void SetCancellationParam(std::shared_ptr param); + + // Used in templated functions + void SetOption(const Url& url); + void SetOption(const Parameters& parameters); + void SetOption(Parameters&& parameters); + void SetOption(const Header& header); + void SetOption(const Timeout& timeout); + void SetOption(const ConnectTimeout& timeout); + void SetOption(const Authentication& auth); +// Only supported with libcurl >= 7.61.0. +// As an alternative use SetHeader and add the token manually. +#if LIBCURL_VERSION_NUM >= 0x073D00 + void SetOption(const Bearer& auth); +#endif + void SetOption(const UserAgent& ua); + void SetOption(Payload&& payload); + void SetOption(const Payload& payload); + void SetOption(const LimitRate& limit_rate); + void SetOption(Proxies&& proxies); + void SetOption(const Proxies& proxies); + void SetOption(ProxyAuthentication&& proxy_auth); + void SetOption(const ProxyAuthentication& proxy_auth); + void SetOption(Multipart&& multipart); + void SetOption(const Multipart& multipart); + void SetOption(const Redirect& redirect); + void SetOption(const Cookies& cookies); + void SetOption(Body&& body); + void SetOption(const Body& body); + void SetOption(const ReadCallback& read); + void SetOption(const HeaderCallback& header); + void SetOption(const WriteCallback& write); + void SetOption(const ProgressCallback& progress); + void SetOption(const DebugCallback& debug); + void SetOption(const LowSpeed& low_speed); + void SetOption(const VerifySsl& verify); + void SetOption(const Verbose& verbose); + void SetOption(const UnixSocket& unix_socket); + void SetOption(const SslOptions& options); + void SetOption(const Interface& iface); + void SetOption(const LocalPort& local_port); + void SetOption(const LocalPortRange& local_port_range); + void SetOption(const HttpVersion& version); + void SetOption(const Range& range); + void SetOption(const MultiRange& multi_range); + void SetOption(const ReserveSize& reserve_size); + void SetOption(const AcceptEncoding& accept_encoding); + void SetOption(AcceptEncoding&& accept_encoding); + void SetOption(const Resolve& resolve); + void SetOption(const std::vector& resolves); + + cpr_off_t GetDownloadFileLength(); + /** + * Attempt to preallocate enough memory for specified number of characters in the response string. + * Pass 0 to disable this behavior and let the response string be allocated dynamically on demand. + * + * Example: + * cpr::Session session; + * session.SetUrl(cpr::Url{"http://xxx/file"}); + * session.ResponseStringReserve(1024 * 512); // Reserve space for at least 1024 * 512 characters + * cpr::Response r = session.Get(); + **/ + void ResponseStringReserve(size_t size); + Response Delete(); + Response Download(const WriteCallback& write); + Response Download(std::ofstream& file); + Response Get(); + Response Head(); + Response Options(); + Response Patch(); + Response Post(); + Response Put(); + + AsyncResponse GetAsync(); + AsyncResponse DeleteAsync(); + AsyncResponse DownloadAsync(const WriteCallback& write); + AsyncResponse DownloadAsync(std::ofstream& file); + AsyncResponse HeadAsync(); + AsyncResponse OptionsAsync(); + AsyncResponse PatchAsync(); + AsyncResponse PostAsync(); + AsyncResponse PutAsync(); + + template + auto GetCallback(Then then); + template + auto PostCallback(Then then); + template + auto PutCallback(Then then); + template + auto HeadCallback(Then then); + template + auto DeleteCallback(Then then); + template + auto OptionsCallback(Then then); + template + auto PatchCallback(Then then); + + std::shared_ptr GetCurlHolder(); + std::string GetFullRequestUrl(); + + void PrepareDelete(); + void PrepareGet(); + void PrepareHead(); + void PrepareOptions(); + void PreparePatch(); + void PreparePost(); + void PreparePut(); + void PrepareDownload(const WriteCallback& write); + void PrepareDownload(std::ofstream& file); + Response Complete(CURLcode curl_error); + Response CompleteDownload(CURLcode curl_error); + + void AddInterceptor(const std::shared_ptr& pinterceptor); + + private: + // Interceptors should be able to call the private proceed() function + friend Interceptor; + friend MultiPerform; + + + bool hasBodyOrPayload_{false}; + bool chunkedTransferEncoding_{false}; + std::shared_ptr curl_; + Url url_; + Parameters parameters_; + Proxies proxies_; + ProxyAuthentication proxyAuth_; + Header header_; + AcceptEncoding acceptEncoding_; + /** + * Will be set by the read callback. + * Ensures that the "Transfer-Encoding" is set to "chunked", if not overriden in header_. + **/ + ReadCallback readcb_; + HeaderCallback headercb_; + WriteCallback writecb_; + ProgressCallback progresscb_; + DebugCallback debugcb_; + CancellationCallback cancellationcb_; + + size_t response_string_reserve_size_{0}; + std::string response_string_; + std::string header_string_; + std::queue> interceptors_; + bool isUsedInMultiPerform{false}; + bool isCancellable{false}; + + Response makeDownloadRequest(); + Response makeRequest(); + Response proceed(); + Response intercept(); + void prepareCommon(); + void prepareCommonDownload(); + void SetHeaderInternal(); + std::shared_ptr GetSharedPtrFromThis(); + CURLcode DoEasyPerform(); +}; + +template +auto Session::GetCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Get()); }, std::move(then)); +} + +template +auto Session::PostCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Post()); }, std::move(then)); +} + +template +auto Session::PutCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Put()); }, std::move(then)); +} + +template +auto Session::HeadCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Head()); }, std::move(then)); +} + +template +auto Session::DeleteCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Delete()); }, std::move(then)); +} + +template +auto Session::OptionsCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Options()); }, std::move(then)); +} + +template +auto Session::PatchCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Patch()); }, std::move(then)); +} + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/singleton.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/singleton.h new file mode 100644 index 0000000..e2ea13b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/singleton.h @@ -0,0 +1,47 @@ +#ifndef CPR_SINGLETON_H +#define CPR_SINGLETON_H + +#include + +#ifndef CPR_DISABLE_COPY +#define CPR_DISABLE_COPY(Class) \ + Class(const Class&) = delete; \ + Class& operator=(const Class&) = delete; +#endif + +#ifndef CPR_SINGLETON_DECL +#define CPR_SINGLETON_DECL(Class) \ + public: \ + static Class* GetInstance(); \ + static void ExitInstance(); \ + private: \ + CPR_DISABLE_COPY(Class) \ + static Class* s_pInstance; \ + static std::mutex s_mutex; +#endif + +#ifndef CPR_SINGLETON_IMPL +#define CPR_SINGLETON_IMPL(Class) \ + Class* Class::s_pInstance = nullptr; \ + std::mutex Class::s_mutex; \ + Class* Class::GetInstance() { \ + if (s_pInstance == nullptr) { \ + s_mutex.lock(); \ + if (s_pInstance == nullptr) { \ + s_pInstance = new Class; \ + } \ + s_mutex.unlock(); \ + } \ + return s_pInstance; \ + } \ + void Class::ExitInstance() { \ + s_mutex.lock(); \ + if (s_pInstance) { \ + delete s_pInstance; \ + s_pInstance = nullptr; \ + } \ + s_mutex.unlock(); \ + } +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/ssl_ctx.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/ssl_ctx.h new file mode 100644 index 0000000..d495fb2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/ssl_ctx.h @@ -0,0 +1,26 @@ +#ifndef CPR_SSL_CTX_H +#define CPR_SSL_CTX_H + +#include "cpr/ssl_options.h" +#include + +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION + +namespace cpr { + +/** + * This callback function loads a CA certificate from raw_cert_buf and gets called by libcurl + * just before the initialization of an SSL connection. + * The raw_cert_buf argument is set with the CURLOPT_SSL_CTX_DATA option and has to be a nul + * terminated buffer. + * + * Sources: https://curl.se/libcurl/c/CURLOPT_SSL_CTX_FUNCTION.html + * https://curl.se/libcurl/c/CURLOPT_SSL_CTX_DATA.html + */ +CURLcode sslctx_function_load_ca_cert_from_buffer(CURL* curl, void* sslctx, void* raw_cert_buf); + +} // Namespace cpr + +#endif + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/ssl_options.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/ssl_options.h new file mode 100644 index 0000000..dfd38ad --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/ssl_options.h @@ -0,0 +1,622 @@ +#ifndef CPR_SSLOPTIONS_H +#define CPR_SSLOPTIONS_H + +#include +#include +#include + +#include +#include + +#include "cpr/util.h" +#include + +#define __LIBCURL_VERSION_GTE(major, minor) ((LIBCURL_VERSION_MAJOR > (major)) || ((LIBCURL_VERSION_MAJOR == (major)) && (LIBCURL_VERSION_MINOR >= (minor)))) +#define __LIBCURL_VERSION_LT(major, minor) ((LIBCURL_VERSION_MAJOR < (major)) || ((LIBCURL_VERSION_MAJOR == (major)) && (LIBCURL_VERSION_MINOR < (minor)))) + +#ifndef SUPPORT_ALPN +#define SUPPORT_ALPN __LIBCURL_VERSION_GTE(7, 36) +#endif +#ifndef SUPPORT_NPN +#define SUPPORT_NPN __LIBCURL_VERSION_GTE(7, 36) && __LIBCURL_VERSION_LT(7, 86) +#endif + +#ifndef SUPPORT_SSLv2 +#define SUPPORT_SSLv2 __LIBCURL_VERSION_LT(7, 19) +#endif +#ifndef SUPPORT_SSLv3 +#define SUPPORT_SSLv3 __LIBCURL_VERSION_LT(7, 39) +#endif +#ifndef SUPPORT_TLSv1_0 +#define SUPPORT_TLSv1_0 __LIBCURL_VERSION_GTE(7, 34) +#endif +#ifndef SUPPORT_TLSv1_1 +#define SUPPORT_TLSv1_1 __LIBCURL_VERSION_GTE(7, 34) +#endif +#ifndef SUPPORT_TLSv1_2 +#define SUPPORT_TLSv1_2 __LIBCURL_VERSION_GTE(7, 34) +#endif +#ifndef SUPPORT_TLSv1_3 +#define SUPPORT_TLSv1_3 __LIBCURL_VERSION_GTE(7, 52) +#endif +#ifndef SUPPORT_MAX_TLS_VERSION +#define SUPPORT_MAX_TLS_VERSION __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_MAX_TLSv1_1 +#define SUPPORT_MAX_TLSv1_1 __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_MAX_TLSv1_2 +#define SUPPORT_MAX_TLSv1_2 __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_MAX_TLSv1_3 +#define SUPPORT_MAX_TLSv1_3 __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_TLSv13_CIPHERS +#define SUPPORT_TLSv13_CIPHERS __LIBCURL_VERSION_GTE(7, 61) +#endif +#ifndef SUPPORT_SESSIONID_CACHE +#define SUPPORT_SESSIONID_CACHE __LIBCURL_VERSION_GTE(7, 16) +#endif +#ifndef SUPPORT_SSL_FALSESTART +#define SUPPORT_SSL_FALSESTART __LIBCURL_VERSION_GTE(7, 42) +#endif +#ifndef SUPPORT_SSL_NO_REVOKE +#define SUPPORT_SSL_NO_REVOKE __LIBCURL_VERSION_GTE(7, 44) +#endif +#ifndef SUPPORT_CURLOPT_SSLKEY_BLOB +#define SUPPORT_CURLOPT_SSLKEY_BLOB __LIBCURL_VERSION_GTE(7, 71) +#endif +#ifndef SUPPORT_CURLOPT_SSL_CTX_FUNCTION +#define SUPPORT_CURLOPT_SSL_CTX_FUNCTION __LIBCURL_VERSION_GTE(7, 11) +#endif + +namespace cpr { + +class VerifySsl { + public: + VerifySsl() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifySsl(bool p_verify) : verify(p_verify) {} + + explicit operator bool() const { + return verify; + } + + bool verify = true; +}; + +namespace ssl { + +// set SSL client certificate +class CertFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CertFile(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + virtual ~CertFile() = default; + + const fs::path filename; + + virtual const char* GetCertType() const { + return "PEM"; + } +}; + +using PemCert = CertFile; + +class DerCert : public CertFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + DerCert(fs::path&& p_filename) : CertFile(std::move(p_filename)) {} + + virtual ~DerCert() = default; + + const char* GetCertType() const override { + return "DER"; + } +}; + +// specify private keyfile for TLS and SSL client cert +class KeyFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + KeyFile(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + template + KeyFile(FileType&& p_filename, PassType p_password) : filename(std::forward(p_filename)), password(std::move(p_password)) {} + + virtual ~KeyFile() { + util::secureStringClear(password); + } + + fs::path filename; + std::string password; + + virtual const char* GetKeyType() const { + return "PEM"; + } +}; + +#if SUPPORT_CURLOPT_SSLKEY_BLOB +class KeyBlob { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + KeyBlob(std::string&& p_blob) : blob(std::move(p_blob)) {} + + template + KeyBlob(BlobType&& p_blob, PassType p_password) : blob(std::forward(p_blob)), password(std::move(p_password)) {} + + virtual ~KeyBlob() { + util::secureStringClear(password); + } + + std::string blob; + std::string password; + + virtual const char* GetKeyType() const { + return "PEM"; + } +}; +#endif + +using PemKey = KeyFile; + +class DerKey : public KeyFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + DerKey(fs::path&& p_filename) : KeyFile(std::move(p_filename)) {} + + template + DerKey(FileType&& p_filename, PassType p_password) : KeyFile(std::forward(p_filename), std::move(p_password)) {} + + virtual ~DerKey() = default; + + const char* GetKeyType() const override { + return "DER"; + } +}; + +class PinnedPublicKey { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + PinnedPublicKey(std::string&& p_pinned_public_key) : pinned_public_key(std::move(p_pinned_public_key)) {} + + const std::string pinned_public_key; +}; + +#if SUPPORT_ALPN +// This option enables/disables ALPN in the SSL handshake (if the SSL backend libcurl is built to +// use supports it), which can be used to negotiate http2. +class ALPN { + public: + ALPN() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ALPN(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; +#endif // SUPPORT_ALPN + +#if SUPPORT_NPN +// This option enables/disables NPN in the SSL handshake (if the SSL backend libcurl is built to +// use supports it), which can be used to negotiate http2. +class NPN { + public: + NPN() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + NPN(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; +#endif // SUPPORT_NPN + +// This option determines whether libcurl verifies that the server cert is for the server it is +// known as. +class VerifyHost { + public: + VerifyHost() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifyHost(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; + +// This option determines whether libcurl verifies the authenticity of the peer's certificate. +class VerifyPeer { + public: + VerifyPeer() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifyPeer(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; + +// This option determines whether libcurl verifies the status of the server cert using the +// "Certificate Status Request" TLS extension (aka. OCSP stapling). +class VerifyStatus { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifyStatus(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = false; +}; + +// TLS v1.0 or later +struct TLSv1 {}; +#if SUPPORT_SSLv2 +// SSL v2 (but not SSLv3) +struct SSLv2 {}; +#endif +#if SUPPORT_SSLv3 +// SSL v3 (but not SSLv2) +struct SSLv3 {}; +#endif +#if SUPPORT_TLSv1_0 +// TLS v1.0 or later (Added in 7.34.0) +struct TLSv1_0 {}; +#endif +#if SUPPORT_TLSv1_1 +// TLS v1.1 or later (Added in 7.34.0) +struct TLSv1_1 {}; +#endif +#if SUPPORT_TLSv1_2 +// TLS v1.2 or later (Added in 7.34.0) +struct TLSv1_2 {}; +#endif +#if SUPPORT_TLSv1_3 +// TLS v1.3 or later (Added in 7.52.0) +struct TLSv1_3 {}; +#endif +#if SUPPORT_MAX_TLS_VERSION +// The flag defines the maximum supported TLS version by libcurl, or the default value from the SSL +// library is used. +struct MaxTLSVersion {}; +#endif +#if SUPPORT_MAX_TLSv1_0 +// The flag defines maximum supported TLS version as TLSv1.0. (Added in 7.54.0) +struct MaxTLSv1_0 {}; +#endif +#if SUPPORT_MAX_TLSv1_1 +// The flag defines maximum supported TLS version as TLSv1.1. (Added in 7.54.0) +struct MaxTLSv1_1 {}; +#endif +#if SUPPORT_MAX_TLSv1_2 +// The flag defines maximum supported TLS version as TLSv1.2. (Added in 7.54.0) +struct MaxTLSv1_2 {}; +#endif +#if SUPPORT_MAX_TLSv1_3 +// The flag defines maximum supported TLS version as TLSv1.3. (Added in 7.54.0) +struct MaxTLSv1_3 {}; +#endif + +// path to Certificate Authority (CA) bundle +class CaInfo { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CaInfo(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + fs::path filename; +}; + +// specify directory holding CA certificates +class CaPath { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CaPath(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + fs::path filename; +}; + +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION +class CaBuffer { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CaBuffer(std::string&& p_buffer) : buffer(std::move(p_buffer)) {} + + const std::string buffer; +}; +#endif + +// specify a Certificate Revocation List file +class Crl { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Crl(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + fs::path filename; +}; + +// specify ciphers to use for TLS +class Ciphers { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Ciphers(std::string&& p_ciphers) : ciphers(std::move(p_ciphers)) {} + + std::string ciphers; +}; + +#if SUPPORT_TLSv13_CIPHERS +// specify ciphers suites to use for TLS 1.3 +class TLS13_Ciphers { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + TLS13_Ciphers(std::string&& p_ciphers) : ciphers(std::move(p_ciphers)) {} + + std::string ciphers; +}; +#endif + +#if SUPPORT_SESSIONID_CACHE +// enable/disable use of the SSL session-ID cache +class SessionIdCache { + public: + SessionIdCache() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + SessionIdCache(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; +#endif + +#if SUPPORT_SSL_FALSESTART +class SslFastStart { + public: + SslFastStart() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + SslFastStart(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = false; +}; +#endif + +class NoRevoke { + public: + NoRevoke() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + NoRevoke(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = false; +}; + +} // namespace ssl + +struct SslOptions { + // We don't use fs::path here, as this leads to problems using windows + std::string cert_file; + std::string cert_type; + // We don't use fs::path here, as this leads to problems using windows + std::string key_file; +#if SUPPORT_CURLOPT_SSLKEY_BLOB + std::string key_blob; +#endif + std::string key_type; + std::string key_pass; + std::string pinned_public_key; +#if SUPPORT_ALPN + bool enable_alpn = true; +#endif // SUPPORT_ALPN +#if SUPPORT_NPN + bool enable_npn = true; +#endif // SUPPORT_ALPN + bool verify_host = true; + bool verify_peer = true; + bool verify_status = false; + int ssl_version = CURL_SSLVERSION_DEFAULT; +#if SUPPORT_SSL_NO_REVOKE + bool ssl_no_revoke = false; +#endif +#if SUPPORT_MAX_TLS_VERSION + int max_version = CURL_SSLVERSION_MAX_DEFAULT; +#endif + // We don't use fs::path here, as this leads to problems using windows + std::string ca_info; + // We don't use fs::path here, as this leads to problems using windows + std::string ca_path; +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION + std::string ca_buffer; +#endif + // We don't use fs::path here, as this leads to problems using windows + std::string crl_file; + std::string ciphers; +#if SUPPORT_TLSv13_CIPHERS + std::string tls13_ciphers; +#endif +#if SUPPORT_SESSIONID_CACHE + bool session_id_cache = true; +#endif + + ~SslOptions() noexcept { +#if SUPPORT_CURLOPT_SSLKEY_BLOB + util::secureStringClear(key_blob); +#endif + util::secureStringClear(key_pass); + } + + void SetOption(const ssl::CertFile& opt) { + cert_file = opt.filename.string(); + cert_type = opt.GetCertType(); + } + void SetOption(const ssl::KeyFile& opt) { + key_file = opt.filename.string(); + key_type = opt.GetKeyType(); + key_pass = opt.password; + } +#if SUPPORT_CURLOPT_SSLKEY_BLOB + void SetOption(const ssl::KeyBlob& opt) { + key_blob = opt.blob; + key_type = opt.GetKeyType(); + key_pass = opt.password; + } +#endif + void SetOption(const ssl::PinnedPublicKey& opt) { + pinned_public_key = opt.pinned_public_key; + } + +#if SUPPORT_ALPN + void SetOption(const ssl::ALPN& opt) { + enable_alpn = opt.enabled; + } +#endif // SUPPORT_ALPN +#if SUPPORT_NPN + void SetOption(const ssl::NPN& opt) { + enable_npn = opt.enabled; + } +#endif // SUPPORT_NPN + void SetOption(const ssl::VerifyHost& opt) { + verify_host = opt.enabled; + } + void SetOption(const ssl::VerifyPeer& opt) { + verify_peer = opt.enabled; + } + void SetOption(const ssl::VerifyStatus& opt) { + verify_status = opt.enabled; + } + void SetOption(const ssl::TLSv1& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1; + } +#if SUPPORT_SSL_NO_REVOKE + void SetOption(const ssl::NoRevoke& opt) { + ssl_no_revoke = opt.enabled; + } +#endif +#if SUPPORT_SSLv2 + void SetOption(const ssl::SSLv2& /*opt*/) { + ssl_version = CURL_SSLVERSION_SSLv2; + } +#endif +#if SUPPORT_SSLv3 + void SetOption(const ssl::SSLv3& /*opt*/) { + ssl_version = CURL_SSLVERSION_SSLv3; + } +#endif +#if SUPPORT_TLSv1_0 + void SetOption(const ssl::TLSv1_0& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_0; + } +#endif +#if SUPPORT_TLSv1_1 + void SetOption(const ssl::TLSv1_1& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_1; + } +#endif +#if SUPPORT_TLSv1_2 + void SetOption(const ssl::TLSv1_2& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_2; + } +#endif +#if SUPPORT_TLSv1_3 + void SetOption(const ssl::TLSv1_3& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_3; + } +#endif +#if SUPPORT_MAX_TLS_VERSION + void SetOption(const ssl::MaxTLSVersion& /*opt*/) { + max_version = CURL_SSLVERSION_DEFAULT; + } +#endif +#if SUPPORT_MAX_TLSv1_0 + void SetOption(const ssl::MaxTLSv1_0& opt) { + max_version = CURL_SSLVERSION_MAX_TLSv1_0; + } +#endif +#if SUPPORT_MAX_TLSv1_1 + void SetOption(const ssl::MaxTLSv1_1& /*opt*/) { + max_version = CURL_SSLVERSION_MAX_TLSv1_1; + } +#endif +#if SUPPORT_MAX_TLSv1_2 + void SetOption(const ssl::MaxTLSv1_2& /*opt*/) { + max_version = CURL_SSLVERSION_MAX_TLSv1_2; + } +#endif +#if SUPPORT_MAX_TLSv1_3 + void SetOption(const ssl::MaxTLSv1_3& /*opt*/) { + max_version = CURL_SSLVERSION_MAX_TLSv1_3; + } +#endif + void SetOption(const ssl::CaInfo& opt) { + ca_info = opt.filename.string(); + } + void SetOption(const ssl::CaPath& opt) { + ca_path = opt.filename.string(); + } +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION + void SetOption(const ssl::CaBuffer& opt) { + ca_buffer = opt.buffer; + } +#endif + void SetOption(const ssl::Crl& opt) { + crl_file = opt.filename.string(); + } + void SetOption(const ssl::Ciphers& opt) { + ciphers = opt.ciphers; + } +#if SUPPORT_TLSv13_CIPHERS + void SetOption(const ssl::TLS13_Ciphers& opt) { + tls13_ciphers = opt.ciphers; + } +#endif +#if SUPPORT_SESSIONID_CACHE + void SetOption(const ssl::SessionIdCache& opt) { + session_id_cache = opt.enabled; + } +#endif +}; + +namespace priv { + +template +void set_ssl_option(SslOptions& opts, T&& t) { + opts.SetOption(std::forward(t)); +} + +template +void set_ssl_option(SslOptions& opts, T&& t, Ts&&... ts) { + set_ssl_option(opts, std::forward(t)); + set_ssl_option(opts, std::move(ts)...); +} + +} // namespace priv + +template +SslOptions Ssl(Ts&&... ts) { + SslOptions opts; + priv::set_ssl_option(opts, std::move(ts)...); + return opts; +} + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/status_codes.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/status_codes.h new file mode 100644 index 0000000..6c7acd6 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/status_codes.h @@ -0,0 +1,100 @@ +#ifndef _CPR_STATUS_CODES +#define _CPR_STATUS_CODES +#include +namespace cpr { +namespace status { +// Information responses +constexpr std::int32_t HTTP_CONTINUE = 100; +constexpr std::int32_t HTTP_SWITCHING_PROTOCOL = 101; +constexpr std::int32_t HTTP_PROCESSING = 102; +constexpr std::int32_t HTTP_EARLY_HINTS = 103; +// Successful responses +constexpr std::int32_t HTTP_OK = 200; +constexpr std::int32_t HTTP_CREATED = 201; +constexpr std::int32_t HTTP_ACCEPTED = 202; +constexpr std::int32_t HTTP_NON_AUTHORITATIVE_INFORMATION = 203; +constexpr std::int32_t HTTP_NO_CONTENT = 204; +constexpr std::int32_t HTTP_RESET_CONTENT = 205; +constexpr std::int32_t HTTP_PARTIAL_CONTENT = 206; +constexpr std::int32_t HTTP_MULTI_STATUS = 207; +constexpr std::int32_t HTTP_ALREADY_REPORTED = 208; +constexpr std::int32_t HTTP_IM_USED = 226; +// Redirection messages +constexpr std::int32_t HTTP_MULTIPLE_CHOICE = 300; +constexpr std::int32_t HTTP_MOVED_PERMANENTLY = 301; +constexpr std::int32_t HTTP_FOUND = 302; +constexpr std::int32_t HTTP_SEE_OTHER = 303; +constexpr std::int32_t HTTP_NOT_MODIFIED = 304; +constexpr std::int32_t HTTP_USE_PROXY = 305; +constexpr std::int32_t HTTP_UNUSED = 306; +constexpr std::int32_t HTTP_TEMPORARY_REDIRECT = 307; +constexpr std::int32_t HTTP_PERMANENT_REDIRECT = 308; +// Client error responses +constexpr std::int32_t HTTP_BAD_REQUEST = 400; +constexpr std::int32_t HTTP_UNAUTHORIZED = 401; +constexpr std::int32_t HTTP_PAYMENT_REQUIRED = 402; +constexpr std::int32_t HTTP_FORBIDDEN = 403; +constexpr std::int32_t HTTP_NOT_FOUND = 404; +constexpr std::int32_t HTTP_METHOD_NOT_ALLOWED = 405; +constexpr std::int32_t HTTP_NOT_ACCEPTABLE = 406; +constexpr std::int32_t HTTP_PROXY_AUTHENTICATION_REQUIRED = 407; +constexpr std::int32_t HTTP_REQUEST_TIMEOUT = 408; +constexpr std::int32_t HTTP_CONFLICT = 409; +constexpr std::int32_t HTTP_GONE = 410; +constexpr std::int32_t HTTP_LENGTH_REQUIRED = 411; +constexpr std::int32_t HTTP_PRECONDITION_FAILED = 412; +constexpr std::int32_t HTTP_PAYLOAD_TOO_LARGE = 413; +constexpr std::int32_t HTTP_URI_TOO_LONG = 414; +constexpr std::int32_t HTTP_UNSUPPORTED_MEDIA_TYPE = 415; +constexpr std::int32_t HTTP_REQUESTED_RANGE_NOT_SATISFIABLE = 416; +constexpr std::int32_t HTTP_EXPECTATION_FAILED = 417; +constexpr std::int32_t HTTP_IM_A_TEAPOT = 418; +constexpr std::int32_t HTTP_MISDIRECTED_REQUEST = 421; +constexpr std::int32_t HTTP_UNPROCESSABLE_ENTITY = 422; +constexpr std::int32_t HTTP_LOCKED = 423; +constexpr std::int32_t HTTP_FAILED_DEPENDENCY = 424; +constexpr std::int32_t HTTP_TOO_EARLY = 425; +constexpr std::int32_t HTTP_UPGRADE_REQUIRED = 426; +constexpr std::int32_t HTTP_PRECONDITION_REQUIRED = 428; +constexpr std::int32_t HTTP_TOO_MANY_REQUESTS = 429; +constexpr std::int32_t HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431; +constexpr std::int32_t HTTP_UNAVAILABLE_FOR_LEGAL_REASONS = 451; +// Server response errors +constexpr std::int32_t HTTP_INTERNAL_SERVER_ERROR = 500; +constexpr std::int32_t HTTP_NOT_IMPLEMENTED = 501; +constexpr std::int32_t HTTP_BAD_GATEWAY = 502; +constexpr std::int32_t HTTP_SERVICE_UNAVAILABLE = 503; +constexpr std::int32_t HTTP_GATEWAY_TIMEOUT = 504; +constexpr std::int32_t HTTP_HTTP_VERSION_NOT_SUPPORTED = 505; +constexpr std::int32_t HTTP_VARIANT_ALSO_NEGOTIATES = 506; +constexpr std::int32_t HTTP_INSUFFICIENT_STORAGE = 507; +constexpr std::int32_t HTTP_LOOP_DETECTED = 508; +constexpr std::int32_t HTTP_NOT_EXTENDED = 510; +constexpr std::int32_t HTTP_NETWORK_AUTHENTICATION_REQUIRED = 511; + +constexpr std::int32_t INFO_CODE_OFFSET = 100; +constexpr std::int32_t SUCCESS_CODE_OFFSET = 200; +constexpr std::int32_t REDIRECT_CODE_OFFSET = 300; +constexpr std::int32_t CLIENT_ERROR_CODE_OFFSET = 400; +constexpr std::int32_t SERVER_ERROR_CODE_OFFSET = 500; +constexpr std::int32_t MISC_CODE_OFFSET = 600; + +constexpr bool is_informational(const std::int32_t code) { + return (code >= INFO_CODE_OFFSET && code < SUCCESS_CODE_OFFSET); +} +constexpr bool is_success(const std::int32_t code) { + return (code >= SUCCESS_CODE_OFFSET && code < REDIRECT_CODE_OFFSET); +} +constexpr bool is_redirect(const std::int32_t code) { + return (code >= REDIRECT_CODE_OFFSET && code < CLIENT_ERROR_CODE_OFFSET); +} +constexpr bool is_client_error(const std::int32_t code) { + return (code >= CLIENT_ERROR_CODE_OFFSET && code < SERVER_ERROR_CODE_OFFSET); +} +constexpr bool is_server_error(const std::int32_t code) { + return (code >= SERVER_ERROR_CODE_OFFSET && code < MISC_CODE_OFFSET); +} + +} // namespace status +} // namespace cpr +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/threadpool.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/threadpool.h new file mode 100644 index 0000000..bb7e7f2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/threadpool.h @@ -0,0 +1,122 @@ +#ifndef CPR_THREAD_POOL_H +#define CPR_THREAD_POOL_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define CPR_DEFAULT_THREAD_POOL_MAX_THREAD_NUM std::thread::hardware_concurrency() + +constexpr size_t CPR_DEFAULT_THREAD_POOL_MIN_THREAD_NUM = 1; +constexpr std::chrono::milliseconds CPR_DEFAULT_THREAD_POOL_MAX_IDLE_TIME{60000}; + +namespace cpr { + +class ThreadPool { + public: + using Task = std::function; + + explicit ThreadPool(size_t min_threads = CPR_DEFAULT_THREAD_POOL_MIN_THREAD_NUM, size_t max_threads = CPR_DEFAULT_THREAD_POOL_MAX_THREAD_NUM, std::chrono::milliseconds max_idle_ms = CPR_DEFAULT_THREAD_POOL_MAX_IDLE_TIME); + + virtual ~ThreadPool(); + + void SetMinThreadNum(size_t min_threads) { + min_thread_num = min_threads; + } + void SetMaxThreadNum(size_t max_threads) { + max_thread_num = max_threads; + } + void SetMaxIdleTime(std::chrono::milliseconds ms) { + max_idle_time = ms; + } + size_t GetCurrentThreadNum() { + return cur_thread_num; + } + size_t GetIdleThreadNum() { + return idle_thread_num; + } + bool IsStarted() { + return status != STOP; + } + bool IsStopped() { + return status == STOP; + } + + int Start(size_t start_threads = 0); + int Stop(); + int Pause(); + int Resume(); + int Wait(); + + /** + * Return a future, calling future.get() will wait task done and return RetType. + * Submit(fn, args...) + * Submit(std::bind(&Class::mem_fn, &obj)) + * Submit(std::mem_fn(&Class::mem_fn, &obj)) + **/ + template + auto Submit(Fn&& fn, Args&&... args) { + if (status == STOP) { + Start(); + } + if (idle_thread_num <= 0 && cur_thread_num < max_thread_num) { + CreateThread(); + } + using RetType = decltype(fn(args...)); + auto task = std::make_shared >(std::bind(std::forward(fn), std::forward(args)...)); + std::future future = task->get_future(); + { + std::lock_guard locker(task_mutex); + tasks.emplace([task] { (*task)(); }); + } + + task_cond.notify_one(); + return future; + } + + private: + bool CreateThread(); + void AddThread(std::thread* thread); + void DelThread(std::thread::id id); + + public: + size_t min_thread_num; + size_t max_thread_num; + std::chrono::milliseconds max_idle_time; + + private: + enum Status { + STOP, + RUNNING, + PAUSE, + }; + + struct ThreadData { + std::shared_ptr thread; + std::thread::id id; + Status status; + time_t start_time; + time_t stop_time; + }; + + std::atomic status; + std::atomic cur_thread_num; + std::atomic idle_thread_num; + std::list threads; + std::mutex thread_mutex; + std::queue tasks; + std::mutex task_mutex; + std::condition_variable task_cond; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/timeout.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/timeout.h new file mode 100644 index 0000000..83b3e68 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/timeout.h @@ -0,0 +1,27 @@ +#ifndef CPR_TIMEOUT_H +#define CPR_TIMEOUT_H + +#include +#include + +namespace cpr { + +class Timeout { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Timeout(const std::chrono::milliseconds& duration) : ms{duration} {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Timeout(const std::int32_t& milliseconds) : Timeout{std::chrono::milliseconds(milliseconds)} {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Timeout(const std::chrono::seconds& duration) : ms{std::chrono::milliseconds(duration).count()} {} + + // No way around since curl uses a long here. + // NOLINTNEXTLINE(google-runtime-int) + long Milliseconds() const; + + std::chrono::milliseconds ms; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/unix_socket.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/unix_socket.h new file mode 100644 index 0000000..152caf0 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/unix_socket.h @@ -0,0 +1,21 @@ +#ifndef CPR_UNIX_SOCKET_H +#define CPR_UNIX_SOCKET_H + +#include + +namespace cpr { + +class UnixSocket { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UnixSocket(std::string unix_socket) : unix_socket_(std::move(unix_socket)) {} + + const char* GetUnixSocketString() const noexcept; + + private: + const std::string unix_socket_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/user_agent.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/user_agent.h new file mode 100644 index 0000000..a3cc129 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/user_agent.h @@ -0,0 +1,31 @@ +#ifndef CPR_USERAGENT_H +#define CPR_USERAGENT_H + +#include +#include + +#include "cpr/cprtypes.h" + +namespace cpr { +class UserAgent : public StringHolder { + public: + UserAgent() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UserAgent(std::string useragent) : StringHolder(std::move(useragent)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UserAgent(std::string_view useragent) : StringHolder(useragent) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UserAgent(const char* useragent) : StringHolder(useragent) {} + UserAgent(const char* str, size_t len) : StringHolder(str, len) {} + UserAgent(const std::initializer_list args) : StringHolder(args) {} + UserAgent(const UserAgent& other) = default; + UserAgent(UserAgent&& old) noexcept = default; + ~UserAgent() override = default; + + UserAgent& operator=(UserAgent&& old) noexcept = default; + UserAgent& operator=(const UserAgent& other) = default; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/util.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/util.h new file mode 100644 index 0000000..d851e23 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/util.h @@ -0,0 +1,45 @@ +#ifndef CPR_UTIL_H +#define CPR_UTIL_H + +#include +#include +#include + +#include "cpr/callback.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/curlholder.h" + +namespace cpr::util { + +Header parseHeader(const std::string& headers, std::string* status_line = nullptr, std::string* reason = nullptr); +Cookies parseCookies(curl_slist* raw_cookies); +size_t readUserFunction(char* ptr, size_t size, size_t nitems, const ReadCallback* read); +size_t headerUserFunction(char* ptr, size_t size, size_t nmemb, const HeaderCallback* header); +size_t writeFunction(char* ptr, size_t size, size_t nmemb, std::string* data); +size_t writeFileFunction(char* ptr, size_t size, size_t nmemb, std::ofstream* file); +size_t writeUserFunction(char* ptr, size_t size, size_t nmemb, const WriteCallback* write); + +template +int progressUserFunction(const T* progress, cpr_pf_arg_t dltotal, cpr_pf_arg_t dlnow, cpr_pf_arg_t ultotal, cpr_pf_arg_t ulnow) { + const int cancel_retval{1}; + static_assert(cancel_retval != CURL_PROGRESSFUNC_CONTINUE); + return (*progress)(dltotal, dlnow, ultotal, ulnow) ? 0 : cancel_retval; +} +int debugUserFunction(CURL* handle, curl_infotype type, char* data, size_t size, const DebugCallback* debug); +std::vector split(const std::string& to_split, char delimiter); +std::string urlEncode(const std::string& s); +std::string urlDecode(const std::string& s); + +/** + * Override the content of the provided string to hide sensitive data. The + * string content after invocation is undefined. The string size is reset to zero. + * impl. based on: + * https://github.com/ojeda/secure_clear/blob/master/example-implementation/secure_clear.h + **/ +void secureStringClear(std::string& s); +bool isTrue(const std::string& s); + +} // namespace cpr::util + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/verbose.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/verbose.h new file mode 100644 index 0000000..2bf0df8 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/cpr/verbose.h @@ -0,0 +1,18 @@ +#ifndef CPR_VERBOSE_H_ +#define CPR_VERBOSE_H_ + +namespace cpr { + +class Verbose { + public: + Verbose() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Verbose(const bool p_verbose) : verbose{p_verbose} {} + + bool verbose = true; +}; + +} // namespace cpr + + +#endif /* CPR_VERBOSE_H_ */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/curl.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/curl.h new file mode 100644 index 0000000..bf71d82 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/curl.h @@ -0,0 +1,3241 @@ +#ifndef CURLINC_CURL_H +#define CURLINC_CURL_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* + * If you have libcurl problems, all docs and details are found here: + * https://curl.se/libcurl/ + */ + +#ifdef CURL_NO_OLDIES +#define CURL_STRICTER +#endif + +/* Compile-time deprecation macros. */ +#if defined(__GNUC__) && \ + ((__GNUC__ > 12) || ((__GNUC__ == 12) && (__GNUC_MINOR__ >= 1 ))) && \ + !defined(__INTEL_COMPILER) && \ + !defined(CURL_DISABLE_DEPRECATION) && !defined(BUILDING_LIBCURL) +#define CURL_DEPRECATED(version, message) \ + __attribute__((deprecated("since " # version ". " message))) +#define CURL_IGNORE_DEPRECATION(statements) \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ + statements \ + _Pragma("GCC diagnostic pop") +#else +#define CURL_DEPRECATED(version, message) +#define CURL_IGNORE_DEPRECATION(statements) statements +#endif + +#include "curlver.h" /* libcurl version defines */ +#include "system.h" /* determine things run-time */ + +/* + * Define CURL_WIN32 when build target is Win32 API + */ + +#if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && \ + !defined(__SYMBIAN32__) +#define CURL_WIN32 +#endif + +#include +#include + +#if (defined(__FreeBSD__) && (__FreeBSD__ >= 2)) || defined(__MidnightBSD__) +/* Needed for __FreeBSD_version or __MidnightBSD_version symbol definition */ +#include +#endif + +/* The include stuff here below is mainly for time_t! */ +#include +#include + +#if defined(CURL_WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__) +#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || \ + defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H)) +/* The check above prevents the winsock2 inclusion if winsock.h already was + included, since they can't co-exist without problems */ +#include +#include +#endif +#endif + +/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish + libc5-based Linux systems. Only include it on systems that are known to + require it! */ +#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \ + defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \ + defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \ + defined(__CYGWIN__) || defined(AMIGA) || defined(__NuttX__) || \ + (defined(__FreeBSD_version) && (__FreeBSD_version < 800000)) || \ + (defined(__MidnightBSD_version) && (__MidnightBSD_version < 100000)) || \ + defined(__sun__) || defined(__serenity__) || defined(__vxworks__) +#include +#endif + +#if !defined(CURL_WIN32) && !defined(_WIN32_WCE) +#include +#endif + +#if !defined(CURL_WIN32) +#include +#endif + +/* Compatibility for non-Clang compilers */ +#ifndef __has_declspec_attribute +# define __has_declspec_attribute(x) 0 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) +typedef struct Curl_easy CURL; +typedef struct Curl_share CURLSH; +#else +typedef void CURL; +typedef void CURLSH; +#endif + +/* + * libcurl external API function linkage decorations. + */ + +#ifdef CURL_STATICLIB +# define CURL_EXTERN +#elif defined(CURL_WIN32) || defined(__SYMBIAN32__) || \ + (__has_declspec_attribute(dllexport) && \ + __has_declspec_attribute(dllimport)) +# if defined(BUILDING_LIBCURL) +# define CURL_EXTERN __declspec(dllexport) +# else +# define CURL_EXTERN __declspec(dllimport) +# endif +#elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS) +# define CURL_EXTERN CURL_EXTERN_SYMBOL +#else +# define CURL_EXTERN +#endif + +#ifndef curl_socket_typedef +/* socket typedef */ +#if defined(CURL_WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H) +typedef SOCKET curl_socket_t; +#define CURL_SOCKET_BAD INVALID_SOCKET +#else +typedef int curl_socket_t; +#define CURL_SOCKET_BAD -1 +#endif +#define curl_socket_typedef +#endif /* curl_socket_typedef */ + +/* enum for the different supported SSL backends */ +typedef enum { + CURLSSLBACKEND_NONE = 0, + CURLSSLBACKEND_OPENSSL = 1, + CURLSSLBACKEND_GNUTLS = 2, + CURLSSLBACKEND_NSS CURL_DEPRECATED(8.3.0, "") = 3, + CURLSSLBACKEND_OBSOLETE4 = 4, /* Was QSOSSL. */ + CURLSSLBACKEND_GSKIT CURL_DEPRECATED(8.3.0, "") = 5, + CURLSSLBACKEND_POLARSSL CURL_DEPRECATED(7.69.0, "") = 6, + CURLSSLBACKEND_WOLFSSL = 7, + CURLSSLBACKEND_SCHANNEL = 8, + CURLSSLBACKEND_SECURETRANSPORT = 9, + CURLSSLBACKEND_AXTLS CURL_DEPRECATED(7.61.0, "") = 10, + CURLSSLBACKEND_MBEDTLS = 11, + CURLSSLBACKEND_MESALINK CURL_DEPRECATED(7.82.0, "") = 12, + CURLSSLBACKEND_BEARSSL = 13, + CURLSSLBACKEND_RUSTLS = 14 +} curl_sslbackend; + +/* aliases for library clones and renames */ +#define CURLSSLBACKEND_AWSLC CURLSSLBACKEND_OPENSSL +#define CURLSSLBACKEND_BORINGSSL CURLSSLBACKEND_OPENSSL +#define CURLSSLBACKEND_LIBRESSL CURLSSLBACKEND_OPENSSL + +/* deprecated names: */ +#define CURLSSLBACKEND_CYASSL CURLSSLBACKEND_WOLFSSL +#define CURLSSLBACKEND_DARWINSSL CURLSSLBACKEND_SECURETRANSPORT + +struct curl_httppost { + struct curl_httppost *next; /* next entry in the list */ + char *name; /* pointer to allocated name */ + long namelength; /* length of name length */ + char *contents; /* pointer to allocated data contents */ + long contentslength; /* length of contents field, see also + CURL_HTTPPOST_LARGE */ + char *buffer; /* pointer to allocated buffer contents */ + long bufferlength; /* length of buffer field */ + char *contenttype; /* Content-Type */ + struct curl_slist *contentheader; /* list of extra headers for this form */ + struct curl_httppost *more; /* if one field name has more than one + file, this link should link to following + files */ + long flags; /* as defined below */ + +/* specified content is a file name */ +#define CURL_HTTPPOST_FILENAME (1<<0) +/* specified content is a file name */ +#define CURL_HTTPPOST_READFILE (1<<1) +/* name is only stored pointer do not free in formfree */ +#define CURL_HTTPPOST_PTRNAME (1<<2) +/* contents is only stored pointer do not free in formfree */ +#define CURL_HTTPPOST_PTRCONTENTS (1<<3) +/* upload file from buffer */ +#define CURL_HTTPPOST_BUFFER (1<<4) +/* upload file from pointer contents */ +#define CURL_HTTPPOST_PTRBUFFER (1<<5) +/* upload file contents by using the regular read callback to get the data and + pass the given pointer as custom pointer */ +#define CURL_HTTPPOST_CALLBACK (1<<6) +/* use size in 'contentlen', added in 7.46.0 */ +#define CURL_HTTPPOST_LARGE (1<<7) + + char *showfilename; /* The file name to show. If not set, the + actual file name will be used (if this + is a file part) */ + void *userp; /* custom pointer used for + HTTPPOST_CALLBACK posts */ + curl_off_t contentlen; /* alternative length of contents + field. Used if CURL_HTTPPOST_LARGE is + set. Added in 7.46.0 */ +}; + + +/* This is a return code for the progress callback that, when returned, will + signal libcurl to continue executing the default progress function */ +#define CURL_PROGRESSFUNC_CONTINUE 0x10000001 + +/* This is the CURLOPT_PROGRESSFUNCTION callback prototype. It is now + considered deprecated but was the only choice up until 7.31.0 */ +typedef int (*curl_progress_callback)(void *clientp, + double dltotal, + double dlnow, + double ultotal, + double ulnow); + +/* This is the CURLOPT_XFERINFOFUNCTION callback prototype. It was introduced + in 7.32.0, avoids the use of floating point numbers and provides more + detailed information. */ +typedef int (*curl_xferinfo_callback)(void *clientp, + curl_off_t dltotal, + curl_off_t dlnow, + curl_off_t ultotal, + curl_off_t ulnow); + +#ifndef CURL_MAX_READ_SIZE + /* The maximum receive buffer size configurable via CURLOPT_BUFFERSIZE. */ +#define CURL_MAX_READ_SIZE (10*1024*1024) +#endif + +#ifndef CURL_MAX_WRITE_SIZE + /* Tests have proven that 20K is a very bad buffer size for uploads on + Windows, while 16K for some odd reason performed a lot better. + We do the ifndef check to allow this value to easier be changed at build + time for those who feel adventurous. The practical minimum is about + 400 bytes since libcurl uses a buffer of this size as a scratch area + (unrelated to network send operations). */ +#define CURL_MAX_WRITE_SIZE 16384 +#endif + +#ifndef CURL_MAX_HTTP_HEADER +/* The only reason to have a max limit for this is to avoid the risk of a bad + server feeding libcurl with a never-ending header that will cause reallocs + infinitely */ +#define CURL_MAX_HTTP_HEADER (100*1024) +#endif + +/* This is a magic return code for the write callback that, when returned, + will signal libcurl to pause receiving on the current transfer. */ +#define CURL_WRITEFUNC_PAUSE 0x10000001 + +/* This is a magic return code for the write callback that, when returned, + will signal an error from the callback. */ +#define CURL_WRITEFUNC_ERROR 0xFFFFFFFF + +typedef size_t (*curl_write_callback)(char *buffer, + size_t size, + size_t nitems, + void *outstream); + +/* This callback will be called when a new resolver request is made */ +typedef int (*curl_resolver_start_callback)(void *resolver_state, + void *reserved, void *userdata); + +/* enumeration of file types */ +typedef enum { + CURLFILETYPE_FILE = 0, + CURLFILETYPE_DIRECTORY, + CURLFILETYPE_SYMLINK, + CURLFILETYPE_DEVICE_BLOCK, + CURLFILETYPE_DEVICE_CHAR, + CURLFILETYPE_NAMEDPIPE, + CURLFILETYPE_SOCKET, + CURLFILETYPE_DOOR, /* is possible only on Sun Solaris now */ + + CURLFILETYPE_UNKNOWN /* should never occur */ +} curlfiletype; + +#define CURLFINFOFLAG_KNOWN_FILENAME (1<<0) +#define CURLFINFOFLAG_KNOWN_FILETYPE (1<<1) +#define CURLFINFOFLAG_KNOWN_TIME (1<<2) +#define CURLFINFOFLAG_KNOWN_PERM (1<<3) +#define CURLFINFOFLAG_KNOWN_UID (1<<4) +#define CURLFINFOFLAG_KNOWN_GID (1<<5) +#define CURLFINFOFLAG_KNOWN_SIZE (1<<6) +#define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1<<7) + +/* Information about a single file, used when doing FTP wildcard matching */ +struct curl_fileinfo { + char *filename; + curlfiletype filetype; + time_t time; /* always zero! */ + unsigned int perm; + int uid; + int gid; + curl_off_t size; + long int hardlinks; + + struct { + /* If some of these fields is not NULL, it is a pointer to b_data. */ + char *time; + char *perm; + char *user; + char *group; + char *target; /* pointer to the target filename of a symlink */ + } strings; + + unsigned int flags; + + /* These are libcurl private struct fields. Previously used by libcurl, so + they must never be interfered with. */ + char *b_data; + size_t b_size; + size_t b_used; +}; + +/* return codes for CURLOPT_CHUNK_BGN_FUNCTION */ +#define CURL_CHUNK_BGN_FUNC_OK 0 +#define CURL_CHUNK_BGN_FUNC_FAIL 1 /* tell the lib to end the task */ +#define CURL_CHUNK_BGN_FUNC_SKIP 2 /* skip this chunk over */ + +/* if splitting of data transfer is enabled, this callback is called before + download of an individual chunk started. Note that parameter "remains" works + only for FTP wildcard downloading (for now), otherwise is not used */ +typedef long (*curl_chunk_bgn_callback)(const void *transfer_info, + void *ptr, + int remains); + +/* return codes for CURLOPT_CHUNK_END_FUNCTION */ +#define CURL_CHUNK_END_FUNC_OK 0 +#define CURL_CHUNK_END_FUNC_FAIL 1 /* tell the lib to end the task */ + +/* If splitting of data transfer is enabled this callback is called after + download of an individual chunk finished. + Note! After this callback was set then it have to be called FOR ALL chunks. + Even if downloading of this chunk was skipped in CHUNK_BGN_FUNC. + This is the reason why we don't need "transfer_info" parameter in this + callback and we are not interested in "remains" parameter too. */ +typedef long (*curl_chunk_end_callback)(void *ptr); + +/* return codes for FNMATCHFUNCTION */ +#define CURL_FNMATCHFUNC_MATCH 0 /* string corresponds to the pattern */ +#define CURL_FNMATCHFUNC_NOMATCH 1 /* pattern doesn't match the string */ +#define CURL_FNMATCHFUNC_FAIL 2 /* an error occurred */ + +/* callback type for wildcard downloading pattern matching. If the + string matches the pattern, return CURL_FNMATCHFUNC_MATCH value, etc. */ +typedef int (*curl_fnmatch_callback)(void *ptr, + const char *pattern, + const char *string); + +/* These are the return codes for the seek callbacks */ +#define CURL_SEEKFUNC_OK 0 +#define CURL_SEEKFUNC_FAIL 1 /* fail the entire transfer */ +#define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so + libcurl might try other means instead */ +typedef int (*curl_seek_callback)(void *instream, + curl_off_t offset, + int origin); /* 'whence' */ + +/* This is a return code for the read callback that, when returned, will + signal libcurl to immediately abort the current transfer. */ +#define CURL_READFUNC_ABORT 0x10000000 +/* This is a return code for the read callback that, when returned, will + signal libcurl to pause sending data on the current transfer. */ +#define CURL_READFUNC_PAUSE 0x10000001 + +/* Return code for when the trailing headers' callback has terminated + without any errors */ +#define CURL_TRAILERFUNC_OK 0 +/* Return code for when was an error in the trailing header's list and we + want to abort the request */ +#define CURL_TRAILERFUNC_ABORT 1 + +typedef size_t (*curl_read_callback)(char *buffer, + size_t size, + size_t nitems, + void *instream); + +typedef int (*curl_trailer_callback)(struct curl_slist **list, + void *userdata); + +typedef enum { + CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */ + CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */ + CURLSOCKTYPE_LAST /* never use */ +} curlsocktype; + +/* The return code from the sockopt_callback can signal information back + to libcurl: */ +#define CURL_SOCKOPT_OK 0 +#define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return + CURLE_ABORTED_BY_CALLBACK */ +#define CURL_SOCKOPT_ALREADY_CONNECTED 2 + +typedef int (*curl_sockopt_callback)(void *clientp, + curl_socket_t curlfd, + curlsocktype purpose); + +struct curl_sockaddr { + int family; + int socktype; + int protocol; + unsigned int addrlen; /* addrlen was a socklen_t type before 7.18.0 but it + turned really ugly and painful on the systems that + lack this type */ + struct sockaddr addr; +}; + +typedef curl_socket_t +(*curl_opensocket_callback)(void *clientp, + curlsocktype purpose, + struct curl_sockaddr *address); + +typedef int +(*curl_closesocket_callback)(void *clientp, curl_socket_t item); + +typedef enum { + CURLIOE_OK, /* I/O operation successful */ + CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ + CURLIOE_FAILRESTART, /* failed to restart the read */ + CURLIOE_LAST /* never use */ +} curlioerr; + +typedef enum { + CURLIOCMD_NOP, /* no operation */ + CURLIOCMD_RESTARTREAD, /* restart the read stream from start */ + CURLIOCMD_LAST /* never use */ +} curliocmd; + +typedef curlioerr (*curl_ioctl_callback)(CURL *handle, + int cmd, + void *clientp); + +#ifndef CURL_DID_MEMORY_FUNC_TYPEDEFS +/* + * The following typedef's are signatures of malloc, free, realloc, strdup and + * calloc respectively. Function pointers of these types can be passed to the + * curl_global_init_mem() function to set user defined memory management + * callback routines. + */ +typedef void *(*curl_malloc_callback)(size_t size); +typedef void (*curl_free_callback)(void *ptr); +typedef void *(*curl_realloc_callback)(void *ptr, size_t size); +typedef char *(*curl_strdup_callback)(const char *str); +typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size); + +#define CURL_DID_MEMORY_FUNC_TYPEDEFS +#endif + +/* the kind of data that is passed to information_callback */ +typedef enum { + CURLINFO_TEXT = 0, + CURLINFO_HEADER_IN, /* 1 */ + CURLINFO_HEADER_OUT, /* 2 */ + CURLINFO_DATA_IN, /* 3 */ + CURLINFO_DATA_OUT, /* 4 */ + CURLINFO_SSL_DATA_IN, /* 5 */ + CURLINFO_SSL_DATA_OUT, /* 6 */ + CURLINFO_END +} curl_infotype; + +typedef int (*curl_debug_callback) + (CURL *handle, /* the handle/transfer this concerns */ + curl_infotype type, /* what kind of data */ + char *data, /* points to the data */ + size_t size, /* size of the data pointed to */ + void *userptr); /* whatever the user please */ + +/* This is the CURLOPT_PREREQFUNCTION callback prototype. */ +typedef int (*curl_prereq_callback)(void *clientp, + char *conn_primary_ip, + char *conn_local_ip, + int conn_primary_port, + int conn_local_port); + +/* Return code for when the pre-request callback has terminated without + any errors */ +#define CURL_PREREQFUNC_OK 0 +/* Return code for when the pre-request callback wants to abort the + request */ +#define CURL_PREREQFUNC_ABORT 1 + +/* All possible error codes from all sorts of curl functions. Future versions + may return other values, stay prepared. + + Always add new return codes last. Never *EVER* remove any. The return + codes must remain the same! + */ + +typedef enum { + CURLE_OK = 0, + CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ + CURLE_FAILED_INIT, /* 2 */ + CURLE_URL_MALFORMAT, /* 3 */ + CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for + 7.17.0, reused in April 2011 for 7.21.5] */ + CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ + CURLE_COULDNT_RESOLVE_HOST, /* 6 */ + CURLE_COULDNT_CONNECT, /* 7 */ + CURLE_WEIRD_SERVER_REPLY, /* 8 */ + CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server + due to lack of access - when login fails + this is not returned. */ + CURLE_FTP_ACCEPT_FAILED, /* 10 - [was obsoleted in April 2006 for + 7.15.4, reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ + CURLE_FTP_ACCEPT_TIMEOUT, /* 12 - timeout occurred accepting server + [was obsoleted in August 2007 for 7.17.0, + reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ + CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ + CURLE_FTP_CANT_GET_HOST, /* 15 */ + CURLE_HTTP2, /* 16 - A problem in the http2 framing layer. + [was obsoleted in August 2007 for 7.17.0, + reused in July 2014 for 7.38.0] */ + CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ + CURLE_PARTIAL_FILE, /* 18 */ + CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ + CURLE_OBSOLETE20, /* 20 - NOT USED */ + CURLE_QUOTE_ERROR, /* 21 - quote command failure */ + CURLE_HTTP_RETURNED_ERROR, /* 22 */ + CURLE_WRITE_ERROR, /* 23 */ + CURLE_OBSOLETE24, /* 24 - NOT USED */ + CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ + CURLE_READ_ERROR, /* 26 - couldn't open/read from file */ + CURLE_OUT_OF_MEMORY, /* 27 */ + CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ + CURLE_OBSOLETE29, /* 29 - NOT USED */ + CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ + CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ + CURLE_OBSOLETE32, /* 32 - NOT USED */ + CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */ + CURLE_HTTP_POST_ERROR, /* 34 */ + CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ + CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */ + CURLE_FILE_COULDNT_READ_FILE, /* 37 */ + CURLE_LDAP_CANNOT_BIND, /* 38 */ + CURLE_LDAP_SEARCH_FAILED, /* 39 */ + CURLE_OBSOLETE40, /* 40 - NOT USED */ + CURLE_FUNCTION_NOT_FOUND, /* 41 - NOT USED starting with 7.53.0 */ + CURLE_ABORTED_BY_CALLBACK, /* 42 */ + CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ + CURLE_OBSOLETE44, /* 44 - NOT USED */ + CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ + CURLE_OBSOLETE46, /* 46 - NOT USED */ + CURLE_TOO_MANY_REDIRECTS, /* 47 - catch endless re-direct loops */ + CURLE_UNKNOWN_OPTION, /* 48 - User specified an unknown option */ + CURLE_SETOPT_OPTION_SYNTAX, /* 49 - Malformed setopt option */ + CURLE_OBSOLETE50, /* 50 - NOT USED */ + CURLE_OBSOLETE51, /* 51 - NOT USED */ + CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ + CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ + CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as + default */ + CURLE_SEND_ERROR, /* 55 - failed sending network data */ + CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ + CURLE_OBSOLETE57, /* 57 - NOT IN USE */ + CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ + CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */ + CURLE_PEER_FAILED_VERIFICATION, /* 60 - peer's certificate or fingerprint + wasn't verified fine */ + CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */ + CURLE_OBSOLETE62, /* 62 - NOT IN USE since 7.82.0 */ + CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ + CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ + CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind + that failed */ + CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ + CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not + accepted and we failed to login */ + CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ + CURLE_TFTP_PERM, /* 69 - permission problem on server */ + CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ + CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ + CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ + CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ + CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ + CURLE_OBSOLETE75, /* 75 - NOT IN USE since 7.82.0 */ + CURLE_OBSOLETE76, /* 76 - NOT IN USE since 7.82.0 */ + CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing + or wrong format */ + CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ + CURLE_SSH, /* 79 - error from the SSH layer, somewhat + generic so the error message will be of + interest when this has happened */ + + CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL + connection */ + CURLE_AGAIN, /* 81 - socket is not ready for send/recv, + wait till it's ready and try again (Added + in 7.18.2) */ + CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or + wrong format (Added in 7.19.0) */ + CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in + 7.19.0) */ + CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */ + CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */ + CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Ids */ + CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */ + CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */ + CURLE_NO_CONNECTION_AVAILABLE, /* 89 - No connection available, the + session will be queued */ + CURLE_SSL_PINNEDPUBKEYNOTMATCH, /* 90 - specified pinned public key did not + match */ + CURLE_SSL_INVALIDCERTSTATUS, /* 91 - invalid certificate status */ + CURLE_HTTP2_STREAM, /* 92 - stream error in HTTP/2 framing layer + */ + CURLE_RECURSIVE_API_CALL, /* 93 - an api function was called from + inside a callback */ + CURLE_AUTH_ERROR, /* 94 - an authentication function returned an + error */ + CURLE_HTTP3, /* 95 - An HTTP/3 layer problem */ + CURLE_QUIC_CONNECT_ERROR, /* 96 - QUIC connection error */ + CURLE_PROXY, /* 97 - proxy handshake error */ + CURLE_SSL_CLIENTCERT, /* 98 - client-side certificate required */ + CURLE_UNRECOVERABLE_POLL, /* 99 - poll/select returned fatal error */ + CURL_LAST /* never use! */ +} CURLcode; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Previously obsolete error code reused in 7.38.0 */ +#define CURLE_OBSOLETE16 CURLE_HTTP2 + +/* Previously obsolete error codes reused in 7.24.0 */ +#define CURLE_OBSOLETE10 CURLE_FTP_ACCEPT_FAILED +#define CURLE_OBSOLETE12 CURLE_FTP_ACCEPT_TIMEOUT + +/* compatibility with older names */ +#define CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING +#define CURLE_FTP_WEIRD_SERVER_REPLY CURLE_WEIRD_SERVER_REPLY + +/* The following were added in 7.62.0 */ +#define CURLE_SSL_CACERT CURLE_PEER_FAILED_VERIFICATION + +/* The following were added in 7.21.5, April 2011 */ +#define CURLE_UNKNOWN_TELNET_OPTION CURLE_UNKNOWN_OPTION + +/* Added for 7.78.0 */ +#define CURLE_TELNET_OPTION_SYNTAX CURLE_SETOPT_OPTION_SYNTAX + +/* The following were added in 7.17.1 */ +/* These are scheduled to disappear by 2009 */ +#define CURLE_SSL_PEER_CERTIFICATE CURLE_PEER_FAILED_VERIFICATION + +/* The following were added in 7.17.0 */ +/* These are scheduled to disappear by 2009 */ +#define CURLE_OBSOLETE CURLE_OBSOLETE50 /* no one should be using this! */ +#define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46 +#define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44 +#define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10 +#define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16 +#define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32 +#define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29 +#define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12 +#define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20 +#define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40 +#define CURLE_MALFORMAT_USER CURLE_OBSOLETE24 +#define CURLE_SHARE_IN_USE CURLE_OBSOLETE57 +#define CURLE_URL_MALFORMAT_USER CURLE_NOT_BUILT_IN + +#define CURLE_FTP_ACCESS_DENIED CURLE_REMOTE_ACCESS_DENIED +#define CURLE_FTP_COULDNT_SET_BINARY CURLE_FTP_COULDNT_SET_TYPE +#define CURLE_FTP_QUOTE_ERROR CURLE_QUOTE_ERROR +#define CURLE_TFTP_DISKFULL CURLE_REMOTE_DISK_FULL +#define CURLE_TFTP_EXISTS CURLE_REMOTE_FILE_EXISTS +#define CURLE_HTTP_RANGE_ERROR CURLE_RANGE_ERROR +#define CURLE_FTP_SSL_FAILED CURLE_USE_SSL_FAILED + +/* The following were added earlier */ + +#define CURLE_OPERATION_TIMEOUTED CURLE_OPERATION_TIMEDOUT +#define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR +#define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED +#define CURLE_FTP_COULDNT_STOR_FILE CURLE_UPLOAD_FAILED +#define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE +#define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME +#define CURLE_LDAP_INVALID_URL CURLE_OBSOLETE62 +#define CURLE_CONV_REQD CURLE_OBSOLETE76 +#define CURLE_CONV_FAILED CURLE_OBSOLETE75 + +/* This was the error code 50 in 7.7.3 and a few earlier versions, this + is no longer used by libcurl but is instead #defined here only to not + make programs break */ +#define CURLE_ALREADY_COMPLETE 99999 + +/* Provide defines for really old option names */ +#define CURLOPT_FILE CURLOPT_WRITEDATA /* name changed in 7.9.7 */ +#define CURLOPT_INFILE CURLOPT_READDATA /* name changed in 7.9.7 */ +#define CURLOPT_WRITEHEADER CURLOPT_HEADERDATA + +/* Since long deprecated options with no code in the lib that does anything + with them. */ +#define CURLOPT_WRITEINFO CURLOPT_OBSOLETE40 +#define CURLOPT_CLOSEPOLICY CURLOPT_OBSOLETE72 + +#endif /* !CURL_NO_OLDIES */ + +/* + * Proxy error codes. Returned in CURLINFO_PROXY_ERROR if CURLE_PROXY was + * return for the transfers. + */ +typedef enum { + CURLPX_OK, + CURLPX_BAD_ADDRESS_TYPE, + CURLPX_BAD_VERSION, + CURLPX_CLOSED, + CURLPX_GSSAPI, + CURLPX_GSSAPI_PERMSG, + CURLPX_GSSAPI_PROTECTION, + CURLPX_IDENTD, + CURLPX_IDENTD_DIFFER, + CURLPX_LONG_HOSTNAME, + CURLPX_LONG_PASSWD, + CURLPX_LONG_USER, + CURLPX_NO_AUTH, + CURLPX_RECV_ADDRESS, + CURLPX_RECV_AUTH, + CURLPX_RECV_CONNECT, + CURLPX_RECV_REQACK, + CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED, + CURLPX_REPLY_COMMAND_NOT_SUPPORTED, + CURLPX_REPLY_CONNECTION_REFUSED, + CURLPX_REPLY_GENERAL_SERVER_FAILURE, + CURLPX_REPLY_HOST_UNREACHABLE, + CURLPX_REPLY_NETWORK_UNREACHABLE, + CURLPX_REPLY_NOT_ALLOWED, + CURLPX_REPLY_TTL_EXPIRED, + CURLPX_REPLY_UNASSIGNED, + CURLPX_REQUEST_FAILED, + CURLPX_RESOLVE_HOST, + CURLPX_SEND_AUTH, + CURLPX_SEND_CONNECT, + CURLPX_SEND_REQUEST, + CURLPX_UNKNOWN_FAIL, + CURLPX_UNKNOWN_MODE, + CURLPX_USER_REJECTED, + CURLPX_LAST /* never use */ +} CURLproxycode; + +/* This prototype applies to all conversion callbacks */ +typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length); + +typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */ + void *ssl_ctx, /* actually an OpenSSL + or WolfSSL SSL_CTX, + or an mbedTLS + mbedtls_ssl_config */ + void *userptr); + +typedef enum { + CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use + CONNECT HTTP/1.1 */ + CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT + HTTP/1.0 */ + CURLPROXY_HTTPS = 2, /* HTTPS but stick to HTTP/1 added in 7.52.0 */ + CURLPROXY_HTTPS2 = 3, /* HTTPS and attempt HTTP/2 added in 8.2.0 */ + CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already + in 7.10 */ + CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ + CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ + CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the + host name rather than the IP address. added + in 7.18.0 */ +} curl_proxytype; /* this enum was added in 7.10 */ + +/* + * Bitmasks for CURLOPT_HTTPAUTH and CURLOPT_PROXYAUTH options: + * + * CURLAUTH_NONE - No HTTP authentication + * CURLAUTH_BASIC - HTTP Basic authentication (default) + * CURLAUTH_DIGEST - HTTP Digest authentication + * CURLAUTH_NEGOTIATE - HTTP Negotiate (SPNEGO) authentication + * CURLAUTH_GSSNEGOTIATE - Alias for CURLAUTH_NEGOTIATE (deprecated) + * CURLAUTH_NTLM - HTTP NTLM authentication + * CURLAUTH_DIGEST_IE - HTTP Digest authentication with IE flavour + * CURLAUTH_NTLM_WB - HTTP NTLM authentication delegated to winbind helper + * CURLAUTH_BEARER - HTTP Bearer token authentication + * CURLAUTH_ONLY - Use together with a single other type to force no + * authentication or just that single type + * CURLAUTH_ANY - All fine types set + * CURLAUTH_ANYSAFE - All fine types except Basic + */ + +#define CURLAUTH_NONE ((unsigned long)0) +#define CURLAUTH_BASIC (((unsigned long)1)<<0) +#define CURLAUTH_DIGEST (((unsigned long)1)<<1) +#define CURLAUTH_NEGOTIATE (((unsigned long)1)<<2) +/* Deprecated since the advent of CURLAUTH_NEGOTIATE */ +#define CURLAUTH_GSSNEGOTIATE CURLAUTH_NEGOTIATE +/* Used for CURLOPT_SOCKS5_AUTH to stay terminologically correct */ +#define CURLAUTH_GSSAPI CURLAUTH_NEGOTIATE +#define CURLAUTH_NTLM (((unsigned long)1)<<3) +#define CURLAUTH_DIGEST_IE (((unsigned long)1)<<4) +#define CURLAUTH_NTLM_WB (((unsigned long)1)<<5) +#define CURLAUTH_BEARER (((unsigned long)1)<<6) +#define CURLAUTH_AWS_SIGV4 (((unsigned long)1)<<7) +#define CURLAUTH_ONLY (((unsigned long)1)<<31) +#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE) +#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE)) + +#define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ +#define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ +#define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */ +#define CURLSSH_AUTH_PASSWORD (1<<1) /* password */ +#define CURLSSH_AUTH_HOST (1<<2) /* host key files */ +#define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */ +#define CURLSSH_AUTH_AGENT (1<<4) /* agent (ssh-agent, pageant...) */ +#define CURLSSH_AUTH_GSSAPI (1<<5) /* gssapi (kerberos, ...) */ +#define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY + +#define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */ +#define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */ +#define CURLGSSAPI_DELEGATION_FLAG (1<<1) /* delegate always */ + +#define CURL_ERROR_SIZE 256 + +enum curl_khtype { + CURLKHTYPE_UNKNOWN, + CURLKHTYPE_RSA1, + CURLKHTYPE_RSA, + CURLKHTYPE_DSS, + CURLKHTYPE_ECDSA, + CURLKHTYPE_ED25519 +}; + +struct curl_khkey { + const char *key; /* points to a null-terminated string encoded with base64 + if len is zero, otherwise to the "raw" data */ + size_t len; + enum curl_khtype keytype; +}; + +/* this is the set of return values expected from the curl_sshkeycallback + callback */ +enum curl_khstat { + CURLKHSTAT_FINE_ADD_TO_FILE, + CURLKHSTAT_FINE, + CURLKHSTAT_REJECT, /* reject the connection, return an error */ + CURLKHSTAT_DEFER, /* do not accept it, but we can't answer right now. + Causes a CURLE_PEER_FAILED_VERIFICATION error but the + connection will be left intact etc */ + CURLKHSTAT_FINE_REPLACE, /* accept and replace the wrong key */ + CURLKHSTAT_LAST /* not for use, only a marker for last-in-list */ +}; + +/* this is the set of status codes pass in to the callback */ +enum curl_khmatch { + CURLKHMATCH_OK, /* match */ + CURLKHMATCH_MISMATCH, /* host found, key mismatch! */ + CURLKHMATCH_MISSING, /* no matching host/key found */ + CURLKHMATCH_LAST /* not for use, only a marker for last-in-list */ +}; + +typedef int + (*curl_sshkeycallback) (CURL *easy, /* easy handle */ + const struct curl_khkey *knownkey, /* known */ + const struct curl_khkey *foundkey, /* found */ + enum curl_khmatch, /* libcurl's view on the keys */ + void *clientp); /* custom pointer passed with */ + /* CURLOPT_SSH_KEYDATA */ + +typedef int + (*curl_sshhostkeycallback) (void *clientp,/* custom pointer passed */ + /* with CURLOPT_SSH_HOSTKEYDATA */ + int keytype, /* CURLKHTYPE */ + const char *key, /* hostkey to check */ + size_t keylen); /* length of the key */ + /* return CURLE_OK to accept */ + /* or something else to refuse */ + + +/* parameter for the CURLOPT_USE_SSL option */ +typedef enum { + CURLUSESSL_NONE, /* do not attempt to use SSL */ + CURLUSESSL_TRY, /* try using SSL, proceed anyway otherwise */ + CURLUSESSL_CONTROL, /* SSL for the control connection or fail */ + CURLUSESSL_ALL, /* SSL for all communication or fail */ + CURLUSESSL_LAST /* not an option, never use */ +} curl_usessl; + +/* Definition of bits for the CURLOPT_SSL_OPTIONS argument: */ + +/* - ALLOW_BEAST tells libcurl to allow the BEAST SSL vulnerability in the + name of improving interoperability with older servers. Some SSL libraries + have introduced work-arounds for this flaw but those work-arounds sometimes + make the SSL communication fail. To regain functionality with those broken + servers, a user can this way allow the vulnerability back. */ +#define CURLSSLOPT_ALLOW_BEAST (1<<0) + +/* - NO_REVOKE tells libcurl to disable certificate revocation checks for those + SSL backends where such behavior is present. */ +#define CURLSSLOPT_NO_REVOKE (1<<1) + +/* - NO_PARTIALCHAIN tells libcurl to *NOT* accept a partial certificate chain + if possible. The OpenSSL backend has this ability. */ +#define CURLSSLOPT_NO_PARTIALCHAIN (1<<2) + +/* - REVOKE_BEST_EFFORT tells libcurl to ignore certificate revocation offline + checks and ignore missing revocation list for those SSL backends where such + behavior is present. */ +#define CURLSSLOPT_REVOKE_BEST_EFFORT (1<<3) + +/* - CURLSSLOPT_NATIVE_CA tells libcurl to use standard certificate store of + operating system. Currently implemented under MS-Windows. */ +#define CURLSSLOPT_NATIVE_CA (1<<4) + +/* - CURLSSLOPT_AUTO_CLIENT_CERT tells libcurl to automatically locate and use + a client certificate for authentication. (Schannel) */ +#define CURLSSLOPT_AUTO_CLIENT_CERT (1<<5) + +/* The default connection attempt delay in milliseconds for happy eyeballs. + CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3 and happy-eyeballs-timeout-ms.d document + this value, keep them in sync. */ +#define CURL_HET_DEFAULT 200L + +/* The default connection upkeep interval in milliseconds. */ +#define CURL_UPKEEP_INTERVAL_DEFAULT 60000L + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2009 */ + +#define CURLFTPSSL_NONE CURLUSESSL_NONE +#define CURLFTPSSL_TRY CURLUSESSL_TRY +#define CURLFTPSSL_CONTROL CURLUSESSL_CONTROL +#define CURLFTPSSL_ALL CURLUSESSL_ALL +#define CURLFTPSSL_LAST CURLUSESSL_LAST +#define curl_ftpssl curl_usessl +#endif /* !CURL_NO_OLDIES */ + +/* parameter for the CURLOPT_FTP_SSL_CCC option */ +typedef enum { + CURLFTPSSL_CCC_NONE, /* do not send CCC */ + CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */ + CURLFTPSSL_CCC_ACTIVE, /* Initiate the shutdown */ + CURLFTPSSL_CCC_LAST /* not an option, never use */ +} curl_ftpccc; + +/* parameter for the CURLOPT_FTPSSLAUTH option */ +typedef enum { + CURLFTPAUTH_DEFAULT, /* let libcurl decide */ + CURLFTPAUTH_SSL, /* use "AUTH SSL" */ + CURLFTPAUTH_TLS, /* use "AUTH TLS" */ + CURLFTPAUTH_LAST /* not an option, never use */ +} curl_ftpauth; + +/* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */ +typedef enum { + CURLFTP_CREATE_DIR_NONE, /* do NOT create missing dirs! */ + CURLFTP_CREATE_DIR, /* (FTP/SFTP) if CWD fails, try MKD and then CWD + again if MKD succeeded, for SFTP this does + similar magic */ + CURLFTP_CREATE_DIR_RETRY, /* (FTP only) if CWD fails, try MKD and then CWD + again even if MKD failed! */ + CURLFTP_CREATE_DIR_LAST /* not an option, never use */ +} curl_ftpcreatedir; + +/* parameter for the CURLOPT_FTP_FILEMETHOD option */ +typedef enum { + CURLFTPMETHOD_DEFAULT, /* let libcurl pick */ + CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */ + CURLFTPMETHOD_NOCWD, /* no CWD at all */ + CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */ + CURLFTPMETHOD_LAST /* not an option, never use */ +} curl_ftpmethod; + +/* bitmask defines for CURLOPT_HEADEROPT */ +#define CURLHEADER_UNIFIED 0 +#define CURLHEADER_SEPARATE (1<<0) + +/* CURLALTSVC_* are bits for the CURLOPT_ALTSVC_CTRL option */ +#define CURLALTSVC_READONLYFILE (1<<2) +#define CURLALTSVC_H1 (1<<3) +#define CURLALTSVC_H2 (1<<4) +#define CURLALTSVC_H3 (1<<5) + + +struct curl_hstsentry { + char *name; + size_t namelen; + unsigned int includeSubDomains:1; + char expire[18]; /* YYYYMMDD HH:MM:SS [null-terminated] */ +}; + +struct curl_index { + size_t index; /* the provided entry's "index" or count */ + size_t total; /* total number of entries to save */ +}; + +typedef enum { + CURLSTS_OK, + CURLSTS_DONE, + CURLSTS_FAIL +} CURLSTScode; + +typedef CURLSTScode (*curl_hstsread_callback)(CURL *easy, + struct curl_hstsentry *e, + void *userp); +typedef CURLSTScode (*curl_hstswrite_callback)(CURL *easy, + struct curl_hstsentry *e, + struct curl_index *i, + void *userp); + +/* CURLHSTS_* are bits for the CURLOPT_HSTS option */ +#define CURLHSTS_ENABLE (long)(1<<0) +#define CURLHSTS_READONLYFILE (long)(1<<1) + +/* The CURLPROTO_ defines below are for the **deprecated** CURLOPT_*PROTOCOLS + options. Do not use. */ +#define CURLPROTO_HTTP (1<<0) +#define CURLPROTO_HTTPS (1<<1) +#define CURLPROTO_FTP (1<<2) +#define CURLPROTO_FTPS (1<<3) +#define CURLPROTO_SCP (1<<4) +#define CURLPROTO_SFTP (1<<5) +#define CURLPROTO_TELNET (1<<6) +#define CURLPROTO_LDAP (1<<7) +#define CURLPROTO_LDAPS (1<<8) +#define CURLPROTO_DICT (1<<9) +#define CURLPROTO_FILE (1<<10) +#define CURLPROTO_TFTP (1<<11) +#define CURLPROTO_IMAP (1<<12) +#define CURLPROTO_IMAPS (1<<13) +#define CURLPROTO_POP3 (1<<14) +#define CURLPROTO_POP3S (1<<15) +#define CURLPROTO_SMTP (1<<16) +#define CURLPROTO_SMTPS (1<<17) +#define CURLPROTO_RTSP (1<<18) +#define CURLPROTO_RTMP (1<<19) +#define CURLPROTO_RTMPT (1<<20) +#define CURLPROTO_RTMPE (1<<21) +#define CURLPROTO_RTMPTE (1<<22) +#define CURLPROTO_RTMPS (1<<23) +#define CURLPROTO_RTMPTS (1<<24) +#define CURLPROTO_GOPHER (1<<25) +#define CURLPROTO_SMB (1<<26) +#define CURLPROTO_SMBS (1<<27) +#define CURLPROTO_MQTT (1<<28) +#define CURLPROTO_GOPHERS (1<<29) +#define CURLPROTO_ALL (~0) /* enable everything */ + +/* long may be 32 or 64 bits, but we should never depend on anything else + but 32 */ +#define CURLOPTTYPE_LONG 0 +#define CURLOPTTYPE_OBJECTPOINT 10000 +#define CURLOPTTYPE_FUNCTIONPOINT 20000 +#define CURLOPTTYPE_OFF_T 30000 +#define CURLOPTTYPE_BLOB 40000 + +/* *STRINGPOINT is an alias for OBJECTPOINT to allow tools to extract the + string options from the header file */ + + +#define CURLOPT(na,t,nu) na = t + nu +#define CURLOPTDEPRECATED(na,t,nu,v,m) na CURL_DEPRECATED(v,m) = t + nu + +/* CURLOPT aliases that make no run-time difference */ + +/* 'char *' argument to a string with a trailing zero */ +#define CURLOPTTYPE_STRINGPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'struct curl_slist *' argument */ +#define CURLOPTTYPE_SLISTPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'void *' argument passed untouched to callback */ +#define CURLOPTTYPE_CBPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'long' argument with a set of values/bitmask */ +#define CURLOPTTYPE_VALUES CURLOPTTYPE_LONG + +/* + * All CURLOPT_* values. + */ + +typedef enum { + /* This is the FILE * or void * the regular output should be written to. */ + CURLOPT(CURLOPT_WRITEDATA, CURLOPTTYPE_CBPOINT, 1), + + /* The full URL to get/put */ + CURLOPT(CURLOPT_URL, CURLOPTTYPE_STRINGPOINT, 2), + + /* Port number to connect to, if other than default. */ + CURLOPT(CURLOPT_PORT, CURLOPTTYPE_LONG, 3), + + /* Name of proxy to use. */ + CURLOPT(CURLOPT_PROXY, CURLOPTTYPE_STRINGPOINT, 4), + + /* "user:password;options" to use when fetching. */ + CURLOPT(CURLOPT_USERPWD, CURLOPTTYPE_STRINGPOINT, 5), + + /* "user:password" to use with proxy. */ + CURLOPT(CURLOPT_PROXYUSERPWD, CURLOPTTYPE_STRINGPOINT, 6), + + /* Range to get, specified as an ASCII string. */ + CURLOPT(CURLOPT_RANGE, CURLOPTTYPE_STRINGPOINT, 7), + + /* not used */ + + /* Specified file stream to upload from (use as input): */ + CURLOPT(CURLOPT_READDATA, CURLOPTTYPE_CBPOINT, 9), + + /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE + * bytes big. */ + CURLOPT(CURLOPT_ERRORBUFFER, CURLOPTTYPE_OBJECTPOINT, 10), + + /* Function that will be called to store the output (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_WRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 11), + + /* Function that will be called to read the input (instead of fread). The + * parameters will use fread() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_READFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 12), + + /* Time-out the read operation after this amount of seconds */ + CURLOPT(CURLOPT_TIMEOUT, CURLOPTTYPE_LONG, 13), + + /* If CURLOPT_READDATA is used, this can be used to inform libcurl about + * how large the file being sent really is. That allows better error + * checking and better verifies that the upload was successful. -1 means + * unknown size. + * + * For large file support, there is also a _LARGE version of the key + * which takes an off_t type, allowing platforms with larger off_t + * sizes to handle larger files. See below for INFILESIZE_LARGE. + */ + CURLOPT(CURLOPT_INFILESIZE, CURLOPTTYPE_LONG, 14), + + /* POST static input fields. */ + CURLOPT(CURLOPT_POSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 15), + + /* Set the referrer page (needed by some CGIs) */ + CURLOPT(CURLOPT_REFERER, CURLOPTTYPE_STRINGPOINT, 16), + + /* Set the FTP PORT string (interface name, named or numerical IP address) + Use i.e '-' to use default address. */ + CURLOPT(CURLOPT_FTPPORT, CURLOPTTYPE_STRINGPOINT, 17), + + /* Set the User-Agent string (examined by some CGIs) */ + CURLOPT(CURLOPT_USERAGENT, CURLOPTTYPE_STRINGPOINT, 18), + + /* If the download receives less than "low speed limit" bytes/second + * during "low speed time" seconds, the operations is aborted. + * You could i.e if you have a pretty high speed connection, abort if + * it is less than 2000 bytes/sec during 20 seconds. + */ + + /* Set the "low speed limit" */ + CURLOPT(CURLOPT_LOW_SPEED_LIMIT, CURLOPTTYPE_LONG, 19), + + /* Set the "low speed time" */ + CURLOPT(CURLOPT_LOW_SPEED_TIME, CURLOPTTYPE_LONG, 20), + + /* Set the continuation offset. + * + * Note there is also a _LARGE version of this key which uses + * off_t types, allowing for large file offsets on platforms which + * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. + */ + CURLOPT(CURLOPT_RESUME_FROM, CURLOPTTYPE_LONG, 21), + + /* Set cookie in request: */ + CURLOPT(CURLOPT_COOKIE, CURLOPTTYPE_STRINGPOINT, 22), + + /* This points to a linked list of headers, struct curl_slist kind. This + list is also used for RTSP (in spite of its name) */ + CURLOPT(CURLOPT_HTTPHEADER, CURLOPTTYPE_SLISTPOINT, 23), + + /* This points to a linked list of post entries, struct curl_httppost */ + CURLOPTDEPRECATED(CURLOPT_HTTPPOST, CURLOPTTYPE_OBJECTPOINT, 24, + 7.56.0, "Use CURLOPT_MIMEPOST"), + + /* name of the file keeping your private SSL-certificate */ + CURLOPT(CURLOPT_SSLCERT, CURLOPTTYPE_STRINGPOINT, 25), + + /* password for the SSL or SSH private key */ + CURLOPT(CURLOPT_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 26), + + /* send TYPE parameter? */ + CURLOPT(CURLOPT_CRLF, CURLOPTTYPE_LONG, 27), + + /* send linked-list of QUOTE commands */ + CURLOPT(CURLOPT_QUOTE, CURLOPTTYPE_SLISTPOINT, 28), + + /* send FILE * or void * to store headers to, if you use a callback it + is simply passed to the callback unmodified */ + CURLOPT(CURLOPT_HEADERDATA, CURLOPTTYPE_CBPOINT, 29), + + /* point to a file to read the initial cookies from, also enables + "cookie awareness" */ + CURLOPT(CURLOPT_COOKIEFILE, CURLOPTTYPE_STRINGPOINT, 31), + + /* What version to specifically try to use. + See CURL_SSLVERSION defines below. */ + CURLOPT(CURLOPT_SSLVERSION, CURLOPTTYPE_VALUES, 32), + + /* What kind of HTTP time condition to use, see defines */ + CURLOPT(CURLOPT_TIMECONDITION, CURLOPTTYPE_VALUES, 33), + + /* Time to use with the above condition. Specified in number of seconds + since 1 Jan 1970 */ + CURLOPT(CURLOPT_TIMEVALUE, CURLOPTTYPE_LONG, 34), + + /* 35 = OBSOLETE */ + + /* Custom request, for customizing the get command like + HTTP: DELETE, TRACE and others + FTP: to use a different list command + */ + CURLOPT(CURLOPT_CUSTOMREQUEST, CURLOPTTYPE_STRINGPOINT, 36), + + /* FILE handle to use instead of stderr */ + CURLOPT(CURLOPT_STDERR, CURLOPTTYPE_OBJECTPOINT, 37), + + /* 38 is not used */ + + /* send linked-list of post-transfer QUOTE commands */ + CURLOPT(CURLOPT_POSTQUOTE, CURLOPTTYPE_SLISTPOINT, 39), + + /* OBSOLETE, do not use! */ + CURLOPT(CURLOPT_OBSOLETE40, CURLOPTTYPE_OBJECTPOINT, 40), + + /* talk a lot */ + CURLOPT(CURLOPT_VERBOSE, CURLOPTTYPE_LONG, 41), + + /* throw the header out too */ + CURLOPT(CURLOPT_HEADER, CURLOPTTYPE_LONG, 42), + + /* shut off the progress meter */ + CURLOPT(CURLOPT_NOPROGRESS, CURLOPTTYPE_LONG, 43), + + /* use HEAD to get http document */ + CURLOPT(CURLOPT_NOBODY, CURLOPTTYPE_LONG, 44), + + /* no output on http error codes >= 400 */ + CURLOPT(CURLOPT_FAILONERROR, CURLOPTTYPE_LONG, 45), + + /* this is an upload */ + CURLOPT(CURLOPT_UPLOAD, CURLOPTTYPE_LONG, 46), + + /* HTTP POST method */ + CURLOPT(CURLOPT_POST, CURLOPTTYPE_LONG, 47), + + /* bare names when listing directories */ + CURLOPT(CURLOPT_DIRLISTONLY, CURLOPTTYPE_LONG, 48), + + /* Append instead of overwrite on upload! */ + CURLOPT(CURLOPT_APPEND, CURLOPTTYPE_LONG, 50), + + /* Specify whether to read the user+password from the .netrc or the URL. + * This must be one of the CURL_NETRC_* enums below. */ + CURLOPT(CURLOPT_NETRC, CURLOPTTYPE_VALUES, 51), + + /* use Location: Luke! */ + CURLOPT(CURLOPT_FOLLOWLOCATION, CURLOPTTYPE_LONG, 52), + + /* transfer data in text/ASCII format */ + CURLOPT(CURLOPT_TRANSFERTEXT, CURLOPTTYPE_LONG, 53), + + /* HTTP PUT */ + CURLOPTDEPRECATED(CURLOPT_PUT, CURLOPTTYPE_LONG, 54, + 7.12.1, "Use CURLOPT_UPLOAD"), + + /* 55 = OBSOLETE */ + + /* DEPRECATED + * Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_progress_callback + * prototype defines. */ + CURLOPTDEPRECATED(CURLOPT_PROGRESSFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 56, + 7.32.0, "Use CURLOPT_XFERINFOFUNCTION"), + + /* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION + callbacks */ + CURLOPT(CURLOPT_XFERINFODATA, CURLOPTTYPE_CBPOINT, 57), +#define CURLOPT_PROGRESSDATA CURLOPT_XFERINFODATA + + /* We want the referrer field set automatically when following locations */ + CURLOPT(CURLOPT_AUTOREFERER, CURLOPTTYPE_LONG, 58), + + /* Port of the proxy, can be set in the proxy string as well with: + "[host]:[port]" */ + CURLOPT(CURLOPT_PROXYPORT, CURLOPTTYPE_LONG, 59), + + /* size of the POST input data, if strlen() is not good to use */ + CURLOPT(CURLOPT_POSTFIELDSIZE, CURLOPTTYPE_LONG, 60), + + /* tunnel non-http operations through an HTTP proxy */ + CURLOPT(CURLOPT_HTTPPROXYTUNNEL, CURLOPTTYPE_LONG, 61), + + /* Set the interface string to use as outgoing network interface */ + CURLOPT(CURLOPT_INTERFACE, CURLOPTTYPE_STRINGPOINT, 62), + + /* Set the krb4/5 security level, this also enables krb4/5 awareness. This + * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string + * is set but doesn't match one of these, 'private' will be used. */ + CURLOPT(CURLOPT_KRBLEVEL, CURLOPTTYPE_STRINGPOINT, 63), + + /* Set if we should verify the peer in ssl handshake, set 1 to verify. */ + CURLOPT(CURLOPT_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 64), + + /* The CApath or CAfile used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAINFO, CURLOPTTYPE_STRINGPOINT, 65), + + /* 66 = OBSOLETE */ + /* 67 = OBSOLETE */ + + /* Maximum number of http redirects to follow */ + CURLOPT(CURLOPT_MAXREDIRS, CURLOPTTYPE_LONG, 68), + + /* Pass a long set to 1 to get the date of the requested document (if + possible)! Pass a zero to shut it off. */ + CURLOPT(CURLOPT_FILETIME, CURLOPTTYPE_LONG, 69), + + /* This points to a linked list of telnet options */ + CURLOPT(CURLOPT_TELNETOPTIONS, CURLOPTTYPE_SLISTPOINT, 70), + + /* Max amount of cached alive connections */ + CURLOPT(CURLOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 71), + + /* OBSOLETE, do not use! */ + CURLOPT(CURLOPT_OBSOLETE72, CURLOPTTYPE_LONG, 72), + + /* 73 = OBSOLETE */ + + /* Set to explicitly use a new connection for the upcoming transfer. + Do not use this unless you're absolutely sure of this, as it makes the + operation slower and is less friendly for the network. */ + CURLOPT(CURLOPT_FRESH_CONNECT, CURLOPTTYPE_LONG, 74), + + /* Set to explicitly forbid the upcoming transfer's connection to be reused + when done. Do not use this unless you're absolutely sure of this, as it + makes the operation slower and is less friendly for the network. */ + CURLOPT(CURLOPT_FORBID_REUSE, CURLOPTTYPE_LONG, 75), + + /* Set to a file name that contains random data for libcurl to use to + seed the random engine when doing SSL connects. */ + CURLOPTDEPRECATED(CURLOPT_RANDOM_FILE, CURLOPTTYPE_STRINGPOINT, 76, + 7.84.0, "Serves no purpose anymore"), + + /* Set to the Entropy Gathering Daemon socket pathname */ + CURLOPTDEPRECATED(CURLOPT_EGDSOCKET, CURLOPTTYPE_STRINGPOINT, 77, + 7.84.0, "Serves no purpose anymore"), + + /* Time-out connect operations after this amount of seconds, if connects are + OK within this time, then fine... This only aborts the connect phase. */ + CURLOPT(CURLOPT_CONNECTTIMEOUT, CURLOPTTYPE_LONG, 78), + + /* Function that will be called to store headers (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_HEADERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 79), + + /* Set this to force the HTTP request to get back to GET. Only really usable + if POST, PUT or a custom request have been used first. + */ + CURLOPT(CURLOPT_HTTPGET, CURLOPTTYPE_LONG, 80), + + /* Set if we should verify the Common name from the peer certificate in ssl + * handshake, set 1 to check existence, 2 to ensure that it matches the + * provided hostname. */ + CURLOPT(CURLOPT_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 81), + + /* Specify which file name to write all known cookies in after completed + operation. Set file name to "-" (dash) to make it go to stdout. */ + CURLOPT(CURLOPT_COOKIEJAR, CURLOPTTYPE_STRINGPOINT, 82), + + /* Specify which SSL ciphers to use */ + CURLOPT(CURLOPT_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 83), + + /* Specify which HTTP version to use! This must be set to one of the + CURL_HTTP_VERSION* enums set below. */ + CURLOPT(CURLOPT_HTTP_VERSION, CURLOPTTYPE_VALUES, 84), + + /* Specifically switch on or off the FTP engine's use of the EPSV command. By + default, that one will always be attempted before the more traditional + PASV command. */ + CURLOPT(CURLOPT_FTP_USE_EPSV, CURLOPTTYPE_LONG, 85), + + /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */ + CURLOPT(CURLOPT_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 86), + + /* name of the file keeping your private SSL-key */ + CURLOPT(CURLOPT_SSLKEY, CURLOPTTYPE_STRINGPOINT, 87), + + /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */ + CURLOPT(CURLOPT_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 88), + + /* crypto engine for the SSL-sub system */ + CURLOPT(CURLOPT_SSLENGINE, CURLOPTTYPE_STRINGPOINT, 89), + + /* set the crypto engine for the SSL-sub system as default + the param has no meaning... + */ + CURLOPT(CURLOPT_SSLENGINE_DEFAULT, CURLOPTTYPE_LONG, 90), + + /* Non-zero value means to use the global dns cache */ + /* DEPRECATED, do not use! */ + CURLOPTDEPRECATED(CURLOPT_DNS_USE_GLOBAL_CACHE, CURLOPTTYPE_LONG, 91, + 7.11.1, "Use CURLOPT_SHARE"), + + /* DNS cache timeout */ + CURLOPT(CURLOPT_DNS_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 92), + + /* send linked-list of pre-transfer QUOTE commands */ + CURLOPT(CURLOPT_PREQUOTE, CURLOPTTYPE_SLISTPOINT, 93), + + /* set the debug function */ + CURLOPT(CURLOPT_DEBUGFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 94), + + /* set the data for the debug function */ + CURLOPT(CURLOPT_DEBUGDATA, CURLOPTTYPE_CBPOINT, 95), + + /* mark this as start of a cookie session */ + CURLOPT(CURLOPT_COOKIESESSION, CURLOPTTYPE_LONG, 96), + + /* The CApath directory used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAPATH, CURLOPTTYPE_STRINGPOINT, 97), + + /* Instruct libcurl to use a smaller receive buffer */ + CURLOPT(CURLOPT_BUFFERSIZE, CURLOPTTYPE_LONG, 98), + + /* Instruct libcurl to not use any signal/alarm handlers, even when using + timeouts. This option is useful for multi-threaded applications. + See libcurl-the-guide for more background information. */ + CURLOPT(CURLOPT_NOSIGNAL, CURLOPTTYPE_LONG, 99), + + /* Provide a CURLShare for mutexing non-ts data */ + CURLOPT(CURLOPT_SHARE, CURLOPTTYPE_OBJECTPOINT, 100), + + /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default), + CURLPROXY_HTTPS, CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and + CURLPROXY_SOCKS5. */ + CURLOPT(CURLOPT_PROXYTYPE, CURLOPTTYPE_VALUES, 101), + + /* Set the Accept-Encoding string. Use this to tell a server you would like + the response to be compressed. Before 7.21.6, this was known as + CURLOPT_ENCODING */ + CURLOPT(CURLOPT_ACCEPT_ENCODING, CURLOPTTYPE_STRINGPOINT, 102), + + /* Set pointer to private data */ + CURLOPT(CURLOPT_PRIVATE, CURLOPTTYPE_OBJECTPOINT, 103), + + /* Set aliases for HTTP 200 in the HTTP Response header */ + CURLOPT(CURLOPT_HTTP200ALIASES, CURLOPTTYPE_SLISTPOINT, 104), + + /* Continue to send authentication (user+password) when following locations, + even when hostname changed. This can potentially send off the name + and password to whatever host the server decides. */ + CURLOPT(CURLOPT_UNRESTRICTED_AUTH, CURLOPTTYPE_LONG, 105), + + /* Specifically switch on or off the FTP engine's use of the EPRT command ( + it also disables the LPRT attempt). By default, those ones will always be + attempted before the good old traditional PORT command. */ + CURLOPT(CURLOPT_FTP_USE_EPRT, CURLOPTTYPE_LONG, 106), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_USERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CURLOPT(CURLOPT_HTTPAUTH, CURLOPTTYPE_VALUES, 107), + + /* Set the ssl context callback function, currently only for OpenSSL or + WolfSSL ssl_ctx, or mbedTLS mbedtls_ssl_config in the second argument. + The function must match the curl_ssl_ctx_callback prototype. */ + CURLOPT(CURLOPT_SSL_CTX_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 108), + + /* Set the userdata for the ssl context callback function's third + argument */ + CURLOPT(CURLOPT_SSL_CTX_DATA, CURLOPTTYPE_CBPOINT, 109), + + /* FTP Option that causes missing dirs to be created on the remote server. + In 7.19.4 we introduced the convenience enums for this option using the + CURLFTP_CREATE_DIR prefix. + */ + CURLOPT(CURLOPT_FTP_CREATE_MISSING_DIRS, CURLOPTTYPE_LONG, 110), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_PROXYUSERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CURLOPT(CURLOPT_PROXYAUTH, CURLOPTTYPE_VALUES, 111), + + /* Option that changes the timeout, in seconds, associated with getting a + response. This is different from transfer timeout time and essentially + places a demand on the server to acknowledge commands in a timely + manner. For FTP, SMTP, IMAP and POP3. */ + CURLOPT(CURLOPT_SERVER_RESPONSE_TIMEOUT, CURLOPTTYPE_LONG, 112), + + /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to + tell libcurl to use those IP versions only. This only has effect on + systems with support for more than one, i.e IPv4 _and_ IPv6. */ + CURLOPT(CURLOPT_IPRESOLVE, CURLOPTTYPE_VALUES, 113), + + /* Set this option to limit the size of a file that will be downloaded from + an HTTP or FTP server. + + Note there is also _LARGE version which adds large file support for + platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ + CURLOPT(CURLOPT_MAXFILESIZE, CURLOPTTYPE_LONG, 114), + + /* See the comment for INFILESIZE above, but in short, specifies + * the size of the file being uploaded. -1 means unknown. + */ + CURLOPT(CURLOPT_INFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 115), + + /* Sets the continuation offset. There is also a CURLOPTTYPE_LONG version + * of this; look above for RESUME_FROM. + */ + CURLOPT(CURLOPT_RESUME_FROM_LARGE, CURLOPTTYPE_OFF_T, 116), + + /* Sets the maximum size of data that will be downloaded from + * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. + */ + CURLOPT(CURLOPT_MAXFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 117), + + /* Set this option to the file name of your .netrc file you want libcurl + to parse (using the CURLOPT_NETRC option). If not set, libcurl will do + a poor attempt to find the user's home directory and check for a .netrc + file in there. */ + CURLOPT(CURLOPT_NETRC_FILE, CURLOPTTYPE_STRINGPOINT, 118), + + /* Enable SSL/TLS for FTP, pick one of: + CURLUSESSL_TRY - try using SSL, proceed anyway otherwise + CURLUSESSL_CONTROL - SSL for the control connection or fail + CURLUSESSL_ALL - SSL for all communication or fail + */ + CURLOPT(CURLOPT_USE_SSL, CURLOPTTYPE_VALUES, 119), + + /* The _LARGE version of the standard POSTFIELDSIZE option */ + CURLOPT(CURLOPT_POSTFIELDSIZE_LARGE, CURLOPTTYPE_OFF_T, 120), + + /* Enable/disable the TCP Nagle algorithm */ + CURLOPT(CURLOPT_TCP_NODELAY, CURLOPTTYPE_LONG, 121), + + /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 123 OBSOLETE. Gone in 7.16.0 */ + /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 127 OBSOLETE. Gone in 7.16.0 */ + /* 128 OBSOLETE. Gone in 7.16.0 */ + + /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option + can be used to change libcurl's default action which is to first try + "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK + response has been received. + + Available parameters are: + CURLFTPAUTH_DEFAULT - let libcurl decide + CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS + CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL + */ + CURLOPT(CURLOPT_FTPSSLAUTH, CURLOPTTYPE_VALUES, 129), + + CURLOPTDEPRECATED(CURLOPT_IOCTLFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 130, + 7.18.0, "Use CURLOPT_SEEKFUNCTION"), + CURLOPTDEPRECATED(CURLOPT_IOCTLDATA, CURLOPTTYPE_CBPOINT, 131, + 7.18.0, "Use CURLOPT_SEEKDATA"), + + /* 132 OBSOLETE. Gone in 7.16.0 */ + /* 133 OBSOLETE. Gone in 7.16.0 */ + + /* null-terminated string for pass on to the FTP server when asked for + "account" info */ + CURLOPT(CURLOPT_FTP_ACCOUNT, CURLOPTTYPE_STRINGPOINT, 134), + + /* feed cookie into cookie engine */ + CURLOPT(CURLOPT_COOKIELIST, CURLOPTTYPE_STRINGPOINT, 135), + + /* ignore Content-Length */ + CURLOPT(CURLOPT_IGNORE_CONTENT_LENGTH, CURLOPTTYPE_LONG, 136), + + /* Set to non-zero to skip the IP address received in a 227 PASV FTP server + response. Typically used for FTP-SSL purposes but is not restricted to + that. libcurl will then instead use the same IP address it used for the + control connection. */ + CURLOPT(CURLOPT_FTP_SKIP_PASV_IP, CURLOPTTYPE_LONG, 137), + + /* Select "file method" to use when doing FTP, see the curl_ftpmethod + above. */ + CURLOPT(CURLOPT_FTP_FILEMETHOD, CURLOPTTYPE_VALUES, 138), + + /* Local port number to bind the socket to */ + CURLOPT(CURLOPT_LOCALPORT, CURLOPTTYPE_LONG, 139), + + /* Number of ports to try, including the first one set with LOCALPORT. + Thus, setting it to 1 will make no additional attempts but the first. + */ + CURLOPT(CURLOPT_LOCALPORTRANGE, CURLOPTTYPE_LONG, 140), + + /* no transfer, set up connection and let application use the socket by + extracting it with CURLINFO_LASTSOCKET */ + CURLOPT(CURLOPT_CONNECT_ONLY, CURLOPTTYPE_LONG, 141), + + /* Function that will be called to convert from the + network encoding (instead of using the iconv calls in libcurl) */ + CURLOPTDEPRECATED(CURLOPT_CONV_FROM_NETWORK_FUNCTION, + CURLOPTTYPE_FUNCTIONPOINT, 142, + 7.82.0, "Serves no purpose anymore"), + + /* Function that will be called to convert to the + network encoding (instead of using the iconv calls in libcurl) */ + CURLOPTDEPRECATED(CURLOPT_CONV_TO_NETWORK_FUNCTION, + CURLOPTTYPE_FUNCTIONPOINT, 143, + 7.82.0, "Serves no purpose anymore"), + + /* Function that will be called to convert from UTF8 + (instead of using the iconv calls in libcurl) + Note that this is used only for SSL certificate processing */ + CURLOPTDEPRECATED(CURLOPT_CONV_FROM_UTF8_FUNCTION, + CURLOPTTYPE_FUNCTIONPOINT, 144, + 7.82.0, "Serves no purpose anymore"), + + /* if the connection proceeds too quickly then need to slow it down */ + /* limit-rate: maximum number of bytes per second to send or receive */ + CURLOPT(CURLOPT_MAX_SEND_SPEED_LARGE, CURLOPTTYPE_OFF_T, 145), + CURLOPT(CURLOPT_MAX_RECV_SPEED_LARGE, CURLOPTTYPE_OFF_T, 146), + + /* Pointer to command string to send if USER/PASS fails. */ + CURLOPT(CURLOPT_FTP_ALTERNATIVE_TO_USER, CURLOPTTYPE_STRINGPOINT, 147), + + /* callback function for setting socket options */ + CURLOPT(CURLOPT_SOCKOPTFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 148), + CURLOPT(CURLOPT_SOCKOPTDATA, CURLOPTTYPE_CBPOINT, 149), + + /* set to 0 to disable session ID reuse for this transfer, default is + enabled (== 1) */ + CURLOPT(CURLOPT_SSL_SESSIONID_CACHE, CURLOPTTYPE_LONG, 150), + + /* allowed SSH authentication methods */ + CURLOPT(CURLOPT_SSH_AUTH_TYPES, CURLOPTTYPE_VALUES, 151), + + /* Used by scp/sftp to do public/private key authentication */ + CURLOPT(CURLOPT_SSH_PUBLIC_KEYFILE, CURLOPTTYPE_STRINGPOINT, 152), + CURLOPT(CURLOPT_SSH_PRIVATE_KEYFILE, CURLOPTTYPE_STRINGPOINT, 153), + + /* Send CCC (Clear Command Channel) after authentication */ + CURLOPT(CURLOPT_FTP_SSL_CCC, CURLOPTTYPE_LONG, 154), + + /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */ + CURLOPT(CURLOPT_TIMEOUT_MS, CURLOPTTYPE_LONG, 155), + CURLOPT(CURLOPT_CONNECTTIMEOUT_MS, CURLOPTTYPE_LONG, 156), + + /* set to zero to disable the libcurl's decoding and thus pass the raw body + data to the application even when it is encoded/compressed */ + CURLOPT(CURLOPT_HTTP_TRANSFER_DECODING, CURLOPTTYPE_LONG, 157), + CURLOPT(CURLOPT_HTTP_CONTENT_DECODING, CURLOPTTYPE_LONG, 158), + + /* Permission used when creating new files and directories on the remote + server for protocols that support it, SFTP/SCP/FILE */ + CURLOPT(CURLOPT_NEW_FILE_PERMS, CURLOPTTYPE_LONG, 159), + CURLOPT(CURLOPT_NEW_DIRECTORY_PERMS, CURLOPTTYPE_LONG, 160), + + /* Set the behavior of POST when redirecting. Values must be set to one + of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */ + CURLOPT(CURLOPT_POSTREDIR, CURLOPTTYPE_VALUES, 161), + + /* used by scp/sftp to verify the host's public key */ + CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_MD5, CURLOPTTYPE_STRINGPOINT, 162), + + /* Callback function for opening socket (instead of socket(2)). Optionally, + callback is able change the address or refuse to connect returning + CURL_SOCKET_BAD. The callback should have type + curl_opensocket_callback */ + CURLOPT(CURLOPT_OPENSOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 163), + CURLOPT(CURLOPT_OPENSOCKETDATA, CURLOPTTYPE_CBPOINT, 164), + + /* POST volatile input fields. */ + CURLOPT(CURLOPT_COPYPOSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 165), + + /* set transfer mode (;type=) when doing FTP via an HTTP proxy */ + CURLOPT(CURLOPT_PROXY_TRANSFER_MODE, CURLOPTTYPE_LONG, 166), + + /* Callback function for seeking in the input stream */ + CURLOPT(CURLOPT_SEEKFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 167), + CURLOPT(CURLOPT_SEEKDATA, CURLOPTTYPE_CBPOINT, 168), + + /* CRL file */ + CURLOPT(CURLOPT_CRLFILE, CURLOPTTYPE_STRINGPOINT, 169), + + /* Issuer certificate */ + CURLOPT(CURLOPT_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 170), + + /* (IPv6) Address scope */ + CURLOPT(CURLOPT_ADDRESS_SCOPE, CURLOPTTYPE_LONG, 171), + + /* Collect certificate chain info and allow it to get retrievable with + CURLINFO_CERTINFO after the transfer is complete. */ + CURLOPT(CURLOPT_CERTINFO, CURLOPTTYPE_LONG, 172), + + /* "name" and "pwd" to use when fetching. */ + CURLOPT(CURLOPT_USERNAME, CURLOPTTYPE_STRINGPOINT, 173), + CURLOPT(CURLOPT_PASSWORD, CURLOPTTYPE_STRINGPOINT, 174), + + /* "name" and "pwd" to use with Proxy when fetching. */ + CURLOPT(CURLOPT_PROXYUSERNAME, CURLOPTTYPE_STRINGPOINT, 175), + CURLOPT(CURLOPT_PROXYPASSWORD, CURLOPTTYPE_STRINGPOINT, 176), + + /* Comma separated list of hostnames defining no-proxy zones. These should + match both hostnames directly, and hostnames within a domain. For + example, local.com will match local.com and www.local.com, but NOT + notlocal.com or www.notlocal.com. For compatibility with other + implementations of this, .local.com will be considered to be the same as + local.com. A single * is the only valid wildcard, and effectively + disables the use of proxy. */ + CURLOPT(CURLOPT_NOPROXY, CURLOPTTYPE_STRINGPOINT, 177), + + /* block size for TFTP transfers */ + CURLOPT(CURLOPT_TFTP_BLKSIZE, CURLOPTTYPE_LONG, 178), + + /* Socks Service */ + /* DEPRECATED, do not use! */ + CURLOPTDEPRECATED(CURLOPT_SOCKS5_GSSAPI_SERVICE, + CURLOPTTYPE_STRINGPOINT, 179, + 7.49.0, "Use CURLOPT_PROXY_SERVICE_NAME"), + + /* Socks Service */ + CURLOPT(CURLOPT_SOCKS5_GSSAPI_NEC, CURLOPTTYPE_LONG, 180), + + /* set the bitmask for the protocols that are allowed to be used for the + transfer, which thus helps the app which takes URLs from users or other + external inputs and want to restrict what protocol(s) to deal + with. Defaults to CURLPROTO_ALL. */ + CURLOPTDEPRECATED(CURLOPT_PROTOCOLS, CURLOPTTYPE_LONG, 181, + 7.85.0, "Use CURLOPT_PROTOCOLS_STR"), + + /* set the bitmask for the protocols that libcurl is allowed to follow to, + as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs + to be set in both bitmasks to be allowed to get redirected to. */ + CURLOPTDEPRECATED(CURLOPT_REDIR_PROTOCOLS, CURLOPTTYPE_LONG, 182, + 7.85.0, "Use CURLOPT_REDIR_PROTOCOLS_STR"), + + /* set the SSH knownhost file name to use */ + CURLOPT(CURLOPT_SSH_KNOWNHOSTS, CURLOPTTYPE_STRINGPOINT, 183), + + /* set the SSH host key callback, must point to a curl_sshkeycallback + function */ + CURLOPT(CURLOPT_SSH_KEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 184), + + /* set the SSH host key callback custom pointer */ + CURLOPT(CURLOPT_SSH_KEYDATA, CURLOPTTYPE_CBPOINT, 185), + + /* set the SMTP mail originator */ + CURLOPT(CURLOPT_MAIL_FROM, CURLOPTTYPE_STRINGPOINT, 186), + + /* set the list of SMTP mail receiver(s) */ + CURLOPT(CURLOPT_MAIL_RCPT, CURLOPTTYPE_SLISTPOINT, 187), + + /* FTP: send PRET before PASV */ + CURLOPT(CURLOPT_FTP_USE_PRET, CURLOPTTYPE_LONG, 188), + + /* RTSP request method (OPTIONS, SETUP, PLAY, etc...) */ + CURLOPT(CURLOPT_RTSP_REQUEST, CURLOPTTYPE_VALUES, 189), + + /* The RTSP session identifier */ + CURLOPT(CURLOPT_RTSP_SESSION_ID, CURLOPTTYPE_STRINGPOINT, 190), + + /* The RTSP stream URI */ + CURLOPT(CURLOPT_RTSP_STREAM_URI, CURLOPTTYPE_STRINGPOINT, 191), + + /* The Transport: header to use in RTSP requests */ + CURLOPT(CURLOPT_RTSP_TRANSPORT, CURLOPTTYPE_STRINGPOINT, 192), + + /* Manually initialize the client RTSP CSeq for this handle */ + CURLOPT(CURLOPT_RTSP_CLIENT_CSEQ, CURLOPTTYPE_LONG, 193), + + /* Manually initialize the server RTSP CSeq for this handle */ + CURLOPT(CURLOPT_RTSP_SERVER_CSEQ, CURLOPTTYPE_LONG, 194), + + /* The stream to pass to INTERLEAVEFUNCTION. */ + CURLOPT(CURLOPT_INTERLEAVEDATA, CURLOPTTYPE_CBPOINT, 195), + + /* Let the application define a custom write method for RTP data */ + CURLOPT(CURLOPT_INTERLEAVEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 196), + + /* Turn on wildcard matching */ + CURLOPT(CURLOPT_WILDCARDMATCH, CURLOPTTYPE_LONG, 197), + + /* Directory matching callback called before downloading of an + individual file (chunk) started */ + CURLOPT(CURLOPT_CHUNK_BGN_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 198), + + /* Directory matching callback called after the file (chunk) + was downloaded, or skipped */ + CURLOPT(CURLOPT_CHUNK_END_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 199), + + /* Change match (fnmatch-like) callback for wildcard matching */ + CURLOPT(CURLOPT_FNMATCH_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 200), + + /* Let the application define custom chunk data pointer */ + CURLOPT(CURLOPT_CHUNK_DATA, CURLOPTTYPE_CBPOINT, 201), + + /* FNMATCH_FUNCTION user pointer */ + CURLOPT(CURLOPT_FNMATCH_DATA, CURLOPTTYPE_CBPOINT, 202), + + /* send linked-list of name:port:address sets */ + CURLOPT(CURLOPT_RESOLVE, CURLOPTTYPE_SLISTPOINT, 203), + + /* Set a username for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 204), + + /* Set a password for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 205), + + /* Set authentication type for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 206), + + /* Set to 1 to enable the "TE:" header in HTTP requests to ask for + compressed transfer-encoded responses. Set to 0 to disable the use of TE: + in outgoing requests. The current default is 0, but it might change in a + future libcurl release. + + libcurl will ask for the compressed methods it knows of, and if that + isn't any, it will not ask for transfer-encoding at all even if this + option is set to 1. + + */ + CURLOPT(CURLOPT_TRANSFER_ENCODING, CURLOPTTYPE_LONG, 207), + + /* Callback function for closing socket (instead of close(2)). The callback + should have type curl_closesocket_callback */ + CURLOPT(CURLOPT_CLOSESOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 208), + CURLOPT(CURLOPT_CLOSESOCKETDATA, CURLOPTTYPE_CBPOINT, 209), + + /* allow GSSAPI credential delegation */ + CURLOPT(CURLOPT_GSSAPI_DELEGATION, CURLOPTTYPE_VALUES, 210), + + /* Set the name servers to use for DNS resolution */ + CURLOPT(CURLOPT_DNS_SERVERS, CURLOPTTYPE_STRINGPOINT, 211), + + /* Time-out accept operations (currently for FTP only) after this amount + of milliseconds. */ + CURLOPT(CURLOPT_ACCEPTTIMEOUT_MS, CURLOPTTYPE_LONG, 212), + + /* Set TCP keepalive */ + CURLOPT(CURLOPT_TCP_KEEPALIVE, CURLOPTTYPE_LONG, 213), + + /* non-universal keepalive knobs (Linux, AIX, HP-UX, more) */ + CURLOPT(CURLOPT_TCP_KEEPIDLE, CURLOPTTYPE_LONG, 214), + CURLOPT(CURLOPT_TCP_KEEPINTVL, CURLOPTTYPE_LONG, 215), + + /* Enable/disable specific SSL features with a bitmask, see CURLSSLOPT_* */ + CURLOPT(CURLOPT_SSL_OPTIONS, CURLOPTTYPE_VALUES, 216), + + /* Set the SMTP auth originator */ + CURLOPT(CURLOPT_MAIL_AUTH, CURLOPTTYPE_STRINGPOINT, 217), + + /* Enable/disable SASL initial response */ + CURLOPT(CURLOPT_SASL_IR, CURLOPTTYPE_LONG, 218), + + /* Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_xferinfo_callback + * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */ + CURLOPT(CURLOPT_XFERINFOFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 219), + + /* The XOAUTH2 bearer token */ + CURLOPT(CURLOPT_XOAUTH2_BEARER, CURLOPTTYPE_STRINGPOINT, 220), + + /* Set the interface string to use as outgoing network + * interface for DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_INTERFACE, CURLOPTTYPE_STRINGPOINT, 221), + + /* Set the local IPv4 address to use for outgoing DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_LOCAL_IP4, CURLOPTTYPE_STRINGPOINT, 222), + + /* Set the local IPv6 address to use for outgoing DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_LOCAL_IP6, CURLOPTTYPE_STRINGPOINT, 223), + + /* Set authentication options directly */ + CURLOPT(CURLOPT_LOGIN_OPTIONS, CURLOPTTYPE_STRINGPOINT, 224), + + /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */ + CURLOPTDEPRECATED(CURLOPT_SSL_ENABLE_NPN, CURLOPTTYPE_LONG, 225, + 7.86.0, "Has no function"), + + /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */ + CURLOPT(CURLOPT_SSL_ENABLE_ALPN, CURLOPTTYPE_LONG, 226), + + /* Time to wait for a response to an HTTP request containing an + * Expect: 100-continue header before sending the data anyway. */ + CURLOPT(CURLOPT_EXPECT_100_TIMEOUT_MS, CURLOPTTYPE_LONG, 227), + + /* This points to a linked list of headers used for proxy requests only, + struct curl_slist kind */ + CURLOPT(CURLOPT_PROXYHEADER, CURLOPTTYPE_SLISTPOINT, 228), + + /* Pass in a bitmask of "header options" */ + CURLOPT(CURLOPT_HEADEROPT, CURLOPTTYPE_VALUES, 229), + + /* The public key in DER form used to validate the peer public key + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 230), + + /* Path to Unix domain socket */ + CURLOPT(CURLOPT_UNIX_SOCKET_PATH, CURLOPTTYPE_STRINGPOINT, 231), + + /* Set if we should verify the certificate status. */ + CURLOPT(CURLOPT_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 232), + + /* Set if we should enable TLS false start. */ + CURLOPT(CURLOPT_SSL_FALSESTART, CURLOPTTYPE_LONG, 233), + + /* Do not squash dot-dot sequences */ + CURLOPT(CURLOPT_PATH_AS_IS, CURLOPTTYPE_LONG, 234), + + /* Proxy Service Name */ + CURLOPT(CURLOPT_PROXY_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 235), + + /* Service Name */ + CURLOPT(CURLOPT_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 236), + + /* Wait/don't wait for pipe/mutex to clarify */ + CURLOPT(CURLOPT_PIPEWAIT, CURLOPTTYPE_LONG, 237), + + /* Set the protocol used when curl is given a URL without a protocol */ + CURLOPT(CURLOPT_DEFAULT_PROTOCOL, CURLOPTTYPE_STRINGPOINT, 238), + + /* Set stream weight, 1 - 256 (default is 16) */ + CURLOPT(CURLOPT_STREAM_WEIGHT, CURLOPTTYPE_LONG, 239), + + /* Set stream dependency on another CURL handle */ + CURLOPT(CURLOPT_STREAM_DEPENDS, CURLOPTTYPE_OBJECTPOINT, 240), + + /* Set E-xclusive stream dependency on another CURL handle */ + CURLOPT(CURLOPT_STREAM_DEPENDS_E, CURLOPTTYPE_OBJECTPOINT, 241), + + /* Do not send any tftp option requests to the server */ + CURLOPT(CURLOPT_TFTP_NO_OPTIONS, CURLOPTTYPE_LONG, 242), + + /* Linked-list of host:port:connect-to-host:connect-to-port, + overrides the URL's host:port (only for the network layer) */ + CURLOPT(CURLOPT_CONNECT_TO, CURLOPTTYPE_SLISTPOINT, 243), + + /* Set TCP Fast Open */ + CURLOPT(CURLOPT_TCP_FASTOPEN, CURLOPTTYPE_LONG, 244), + + /* Continue to send data if the server responds early with an + * HTTP status code >= 300 */ + CURLOPT(CURLOPT_KEEP_SENDING_ON_ERROR, CURLOPTTYPE_LONG, 245), + + /* The CApath or CAfile used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAINFO, CURLOPTTYPE_STRINGPOINT, 246), + + /* The CApath directory used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAPATH, CURLOPTTYPE_STRINGPOINT, 247), + + /* Set if we should verify the proxy in ssl handshake, + set 1 to verify. */ + CURLOPT(CURLOPT_PROXY_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 248), + + /* Set if we should verify the Common name from the proxy certificate in ssl + * handshake, set 1 to check existence, 2 to ensure that it matches + * the provided hostname. */ + CURLOPT(CURLOPT_PROXY_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 249), + + /* What version to specifically try to use for proxy. + See CURL_SSLVERSION defines below. */ + CURLOPT(CURLOPT_PROXY_SSLVERSION, CURLOPTTYPE_VALUES, 250), + + /* Set a username for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 251), + + /* Set a password for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 252), + + /* Set authentication type for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 253), + + /* name of the file keeping your private SSL-certificate for proxy */ + CURLOPT(CURLOPT_PROXY_SSLCERT, CURLOPTTYPE_STRINGPOINT, 254), + + /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") for + proxy */ + CURLOPT(CURLOPT_PROXY_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 255), + + /* name of the file keeping your private SSL-key for proxy */ + CURLOPT(CURLOPT_PROXY_SSLKEY, CURLOPTTYPE_STRINGPOINT, 256), + + /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") for + proxy */ + CURLOPT(CURLOPT_PROXY_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 257), + + /* password for the SSL private key for proxy */ + CURLOPT(CURLOPT_PROXY_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 258), + + /* Specify which SSL ciphers to use for proxy */ + CURLOPT(CURLOPT_PROXY_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 259), + + /* CRL file for proxy */ + CURLOPT(CURLOPT_PROXY_CRLFILE, CURLOPTTYPE_STRINGPOINT, 260), + + /* Enable/disable specific SSL features with a bitmask for proxy, see + CURLSSLOPT_* */ + CURLOPT(CURLOPT_PROXY_SSL_OPTIONS, CURLOPTTYPE_LONG, 261), + + /* Name of pre proxy to use. */ + CURLOPT(CURLOPT_PRE_PROXY, CURLOPTTYPE_STRINGPOINT, 262), + + /* The public key in DER form used to validate the proxy public key + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 263), + + /* Path to an abstract Unix domain socket */ + CURLOPT(CURLOPT_ABSTRACT_UNIX_SOCKET, CURLOPTTYPE_STRINGPOINT, 264), + + /* Suppress proxy CONNECT response headers from user callbacks */ + CURLOPT(CURLOPT_SUPPRESS_CONNECT_HEADERS, CURLOPTTYPE_LONG, 265), + + /* The request target, instead of extracted from the URL */ + CURLOPT(CURLOPT_REQUEST_TARGET, CURLOPTTYPE_STRINGPOINT, 266), + + /* bitmask of allowed auth methods for connections to SOCKS5 proxies */ + CURLOPT(CURLOPT_SOCKS5_AUTH, CURLOPTTYPE_LONG, 267), + + /* Enable/disable SSH compression */ + CURLOPT(CURLOPT_SSH_COMPRESSION, CURLOPTTYPE_LONG, 268), + + /* Post MIME data. */ + CURLOPT(CURLOPT_MIMEPOST, CURLOPTTYPE_OBJECTPOINT, 269), + + /* Time to use with the CURLOPT_TIMECONDITION. Specified in number of + seconds since 1 Jan 1970. */ + CURLOPT(CURLOPT_TIMEVALUE_LARGE, CURLOPTTYPE_OFF_T, 270), + + /* Head start in milliseconds to give happy eyeballs. */ + CURLOPT(CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, CURLOPTTYPE_LONG, 271), + + /* Function that will be called before a resolver request is made */ + CURLOPT(CURLOPT_RESOLVER_START_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 272), + + /* User data to pass to the resolver start callback. */ + CURLOPT(CURLOPT_RESOLVER_START_DATA, CURLOPTTYPE_CBPOINT, 273), + + /* send HAProxy PROXY protocol header? */ + CURLOPT(CURLOPT_HAPROXYPROTOCOL, CURLOPTTYPE_LONG, 274), + + /* shuffle addresses before use when DNS returns multiple */ + CURLOPT(CURLOPT_DNS_SHUFFLE_ADDRESSES, CURLOPTTYPE_LONG, 275), + + /* Specify which TLS 1.3 ciphers suites to use */ + CURLOPT(CURLOPT_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 276), + CURLOPT(CURLOPT_PROXY_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 277), + + /* Disallow specifying username/login in URL. */ + CURLOPT(CURLOPT_DISALLOW_USERNAME_IN_URL, CURLOPTTYPE_LONG, 278), + + /* DNS-over-HTTPS URL */ + CURLOPT(CURLOPT_DOH_URL, CURLOPTTYPE_STRINGPOINT, 279), + + /* Preferred buffer size to use for uploads */ + CURLOPT(CURLOPT_UPLOAD_BUFFERSIZE, CURLOPTTYPE_LONG, 280), + + /* Time in ms between connection upkeep calls for long-lived connections. */ + CURLOPT(CURLOPT_UPKEEP_INTERVAL_MS, CURLOPTTYPE_LONG, 281), + + /* Specify URL using CURL URL API. */ + CURLOPT(CURLOPT_CURLU, CURLOPTTYPE_OBJECTPOINT, 282), + + /* add trailing data just after no more data is available */ + CURLOPT(CURLOPT_TRAILERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 283), + + /* pointer to be passed to HTTP_TRAILER_FUNCTION */ + CURLOPT(CURLOPT_TRAILERDATA, CURLOPTTYPE_CBPOINT, 284), + + /* set this to 1L to allow HTTP/0.9 responses or 0L to disallow */ + CURLOPT(CURLOPT_HTTP09_ALLOWED, CURLOPTTYPE_LONG, 285), + + /* alt-svc control bitmask */ + CURLOPT(CURLOPT_ALTSVC_CTRL, CURLOPTTYPE_LONG, 286), + + /* alt-svc cache file name to possibly read from/write to */ + CURLOPT(CURLOPT_ALTSVC, CURLOPTTYPE_STRINGPOINT, 287), + + /* maximum age (idle time) of a connection to consider it for reuse + * (in seconds) */ + CURLOPT(CURLOPT_MAXAGE_CONN, CURLOPTTYPE_LONG, 288), + + /* SASL authorization identity */ + CURLOPT(CURLOPT_SASL_AUTHZID, CURLOPTTYPE_STRINGPOINT, 289), + + /* allow RCPT TO command to fail for some recipients */ + CURLOPT(CURLOPT_MAIL_RCPT_ALLOWFAILS, CURLOPTTYPE_LONG, 290), + + /* the private SSL-certificate as a "blob" */ + CURLOPT(CURLOPT_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 291), + CURLOPT(CURLOPT_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 292), + CURLOPT(CURLOPT_PROXY_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 293), + CURLOPT(CURLOPT_PROXY_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 294), + CURLOPT(CURLOPT_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 295), + + /* Issuer certificate for proxy */ + CURLOPT(CURLOPT_PROXY_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 296), + CURLOPT(CURLOPT_PROXY_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 297), + + /* the EC curves requested by the TLS client (RFC 8422, 5.1); + * OpenSSL support via 'set_groups'/'set_curves': + * https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set1_groups.html + */ + CURLOPT(CURLOPT_SSL_EC_CURVES, CURLOPTTYPE_STRINGPOINT, 298), + + /* HSTS bitmask */ + CURLOPT(CURLOPT_HSTS_CTRL, CURLOPTTYPE_LONG, 299), + /* HSTS file name */ + CURLOPT(CURLOPT_HSTS, CURLOPTTYPE_STRINGPOINT, 300), + + /* HSTS read callback */ + CURLOPT(CURLOPT_HSTSREADFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 301), + CURLOPT(CURLOPT_HSTSREADDATA, CURLOPTTYPE_CBPOINT, 302), + + /* HSTS write callback */ + CURLOPT(CURLOPT_HSTSWRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 303), + CURLOPT(CURLOPT_HSTSWRITEDATA, CURLOPTTYPE_CBPOINT, 304), + + /* Parameters for V4 signature */ + CURLOPT(CURLOPT_AWS_SIGV4, CURLOPTTYPE_STRINGPOINT, 305), + + /* Same as CURLOPT_SSL_VERIFYPEER but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 306), + + /* Same as CURLOPT_SSL_VERIFYHOST but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 307), + + /* Same as CURLOPT_SSL_VERIFYSTATUS but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 308), + + /* The CA certificates as "blob" used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAINFO_BLOB, CURLOPTTYPE_BLOB, 309), + + /* The CA certificates as "blob" used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAINFO_BLOB, CURLOPTTYPE_BLOB, 310), + + /* used by scp/sftp to verify the host's public key */ + CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256, CURLOPTTYPE_STRINGPOINT, 311), + + /* Function that will be called immediately before the initial request + is made on a connection (after any protocol negotiation step). */ + CURLOPT(CURLOPT_PREREQFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 312), + + /* Data passed to the CURLOPT_PREREQFUNCTION callback */ + CURLOPT(CURLOPT_PREREQDATA, CURLOPTTYPE_CBPOINT, 313), + + /* maximum age (since creation) of a connection to consider it for reuse + * (in seconds) */ + CURLOPT(CURLOPT_MAXLIFETIME_CONN, CURLOPTTYPE_LONG, 314), + + /* Set MIME option flags. */ + CURLOPT(CURLOPT_MIME_OPTIONS, CURLOPTTYPE_LONG, 315), + + /* set the SSH host key callback, must point to a curl_sshkeycallback + function */ + CURLOPT(CURLOPT_SSH_HOSTKEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 316), + + /* set the SSH host key callback custom pointer */ + CURLOPT(CURLOPT_SSH_HOSTKEYDATA, CURLOPTTYPE_CBPOINT, 317), + + /* specify which protocols that are allowed to be used for the transfer, + which thus helps the app which takes URLs from users or other external + inputs and want to restrict what protocol(s) to deal with. Defaults to + all built-in protocols. */ + CURLOPT(CURLOPT_PROTOCOLS_STR, CURLOPTTYPE_STRINGPOINT, 318), + + /* specify which protocols that libcurl is allowed to follow directs to */ + CURLOPT(CURLOPT_REDIR_PROTOCOLS_STR, CURLOPTTYPE_STRINGPOINT, 319), + + /* websockets options */ + CURLOPT(CURLOPT_WS_OPTIONS, CURLOPTTYPE_LONG, 320), + + /* CA cache timeout */ + CURLOPT(CURLOPT_CA_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 321), + + /* Can leak things, gonna exit() soon */ + CURLOPT(CURLOPT_QUICK_EXIT, CURLOPTTYPE_LONG, 322), + + /* set a specific client IP for HAProxy PROXY protocol header? */ + CURLOPT(CURLOPT_HAPROXY_CLIENT_IP, CURLOPTTYPE_STRINGPOINT, 323), + + CURLOPT_LASTENTRY /* the last unused */ +} CURLoption; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2011 */ + +/* This was added in version 7.19.1 */ +#define CURLOPT_POST301 CURLOPT_POSTREDIR + +/* These are scheduled to disappear by 2009 */ + +/* The following were added in 7.17.0 */ +#define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD +#define CURLOPT_FTPAPPEND CURLOPT_APPEND +#define CURLOPT_FTPLISTONLY CURLOPT_DIRLISTONLY +#define CURLOPT_FTP_SSL CURLOPT_USE_SSL + +/* The following were added earlier */ + +#define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD +#define CURLOPT_KRB4LEVEL CURLOPT_KRBLEVEL + +/* */ +#define CURLOPT_FTP_RESPONSE_TIMEOUT CURLOPT_SERVER_RESPONSE_TIMEOUT + +/* Added in 8.2.0 */ +#define CURLOPT_MAIL_RCPT_ALLLOWFAILS CURLOPT_MAIL_RCPT_ALLOWFAILS + +#else +/* This is set if CURL_NO_OLDIES is defined at compile-time */ +#undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */ +#endif + + + /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host + name resolves addresses using more than one IP protocol version, this + option might be handy to force libcurl to use a specific IP version. */ +#define CURL_IPRESOLVE_WHATEVER 0 /* default, uses addresses to all IP + versions that your system allows */ +#define CURL_IPRESOLVE_V4 1 /* uses only IPv4 addresses/connections */ +#define CURL_IPRESOLVE_V6 2 /* uses only IPv6 addresses/connections */ + + /* Convenient "aliases" */ +#define CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER + + /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ +enum { + CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd + like the library to choose the best possible + for us! */ + CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ + CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ + CURL_HTTP_VERSION_2_0, /* please use HTTP 2 in the request */ + CURL_HTTP_VERSION_2TLS, /* use version 2 for HTTPS, version 1.1 for HTTP */ + CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE, /* please use HTTP 2 without HTTP/1.1 + Upgrade */ + CURL_HTTP_VERSION_3 = 30, /* Use HTTP/3, fallback to HTTP/2 or HTTP/1 if + needed. For HTTPS only. For HTTP, this option + makes libcurl return error. */ + CURL_HTTP_VERSION_3ONLY = 31, /* Use HTTP/3 without fallback. For HTTPS + only. For HTTP, this makes libcurl + return error. */ + + CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */ +}; + +/* Convenience definition simple because the name of the version is HTTP/2 and + not 2.0. The 2_0 version of the enum name was set while the version was + still planned to be 2.0 and we stick to it for compatibility. */ +#define CURL_HTTP_VERSION_2 CURL_HTTP_VERSION_2_0 + +/* + * Public API enums for RTSP requests + */ +enum { + CURL_RTSPREQ_NONE, /* first in list */ + CURL_RTSPREQ_OPTIONS, + CURL_RTSPREQ_DESCRIBE, + CURL_RTSPREQ_ANNOUNCE, + CURL_RTSPREQ_SETUP, + CURL_RTSPREQ_PLAY, + CURL_RTSPREQ_PAUSE, + CURL_RTSPREQ_TEARDOWN, + CURL_RTSPREQ_GET_PARAMETER, + CURL_RTSPREQ_SET_PARAMETER, + CURL_RTSPREQ_RECORD, + CURL_RTSPREQ_RECEIVE, + CURL_RTSPREQ_LAST /* last in list */ +}; + + /* These enums are for use with the CURLOPT_NETRC option. */ +enum CURL_NETRC_OPTION { + CURL_NETRC_IGNORED, /* The .netrc will never be read. + * This is the default. */ + CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred + * to one in the .netrc. */ + CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. + * Unless one is set programmatically, the .netrc + * will be queried. */ + CURL_NETRC_LAST +}; + +enum { + CURL_SSLVERSION_DEFAULT, + CURL_SSLVERSION_TLSv1, /* TLS 1.x */ + CURL_SSLVERSION_SSLv2, + CURL_SSLVERSION_SSLv3, + CURL_SSLVERSION_TLSv1_0, + CURL_SSLVERSION_TLSv1_1, + CURL_SSLVERSION_TLSv1_2, + CURL_SSLVERSION_TLSv1_3, + + CURL_SSLVERSION_LAST /* never use, keep last */ +}; + +enum { + CURL_SSLVERSION_MAX_NONE = 0, + CURL_SSLVERSION_MAX_DEFAULT = (CURL_SSLVERSION_TLSv1 << 16), + CURL_SSLVERSION_MAX_TLSv1_0 = (CURL_SSLVERSION_TLSv1_0 << 16), + CURL_SSLVERSION_MAX_TLSv1_1 = (CURL_SSLVERSION_TLSv1_1 << 16), + CURL_SSLVERSION_MAX_TLSv1_2 = (CURL_SSLVERSION_TLSv1_2 << 16), + CURL_SSLVERSION_MAX_TLSv1_3 = (CURL_SSLVERSION_TLSv1_3 << 16), + + /* never use, keep last */ + CURL_SSLVERSION_MAX_LAST = (CURL_SSLVERSION_LAST << 16) +}; + +enum CURL_TLSAUTH { + CURL_TLSAUTH_NONE, + CURL_TLSAUTH_SRP, + CURL_TLSAUTH_LAST /* never use, keep last */ +}; + +/* symbols to use with CURLOPT_POSTREDIR. + CURL_REDIR_POST_301, CURL_REDIR_POST_302 and CURL_REDIR_POST_303 + can be bitwise ORed so that CURL_REDIR_POST_301 | CURL_REDIR_POST_302 + | CURL_REDIR_POST_303 == CURL_REDIR_POST_ALL */ + +#define CURL_REDIR_GET_ALL 0 +#define CURL_REDIR_POST_301 1 +#define CURL_REDIR_POST_302 2 +#define CURL_REDIR_POST_303 4 +#define CURL_REDIR_POST_ALL \ + (CURL_REDIR_POST_301|CURL_REDIR_POST_302|CURL_REDIR_POST_303) + +typedef enum { + CURL_TIMECOND_NONE, + + CURL_TIMECOND_IFMODSINCE, + CURL_TIMECOND_IFUNMODSINCE, + CURL_TIMECOND_LASTMOD, + + CURL_TIMECOND_LAST +} curl_TimeCond; + +/* Special size_t value signaling a null-terminated string. */ +#define CURL_ZERO_TERMINATED ((size_t) -1) + +/* curl_strequal() and curl_strnequal() are subject for removal in a future + release */ +CURL_EXTERN int curl_strequal(const char *s1, const char *s2); +CURL_EXTERN int curl_strnequal(const char *s1, const char *s2, size_t n); + +/* Mime/form handling support. */ +typedef struct curl_mime curl_mime; /* Mime context. */ +typedef struct curl_mimepart curl_mimepart; /* Mime part context. */ + +/* CURLMIMEOPT_ defines are for the CURLOPT_MIME_OPTIONS option. */ +#define CURLMIMEOPT_FORMESCAPE (1<<0) /* Use backslash-escaping for forms. */ + +/* + * NAME curl_mime_init() + * + * DESCRIPTION + * + * Create a mime context and return its handle. The easy parameter is the + * target handle. + */ +CURL_EXTERN curl_mime *curl_mime_init(CURL *easy); + +/* + * NAME curl_mime_free() + * + * DESCRIPTION + * + * release a mime handle and its substructures. + */ +CURL_EXTERN void curl_mime_free(curl_mime *mime); + +/* + * NAME curl_mime_addpart() + * + * DESCRIPTION + * + * Append a new empty part to the given mime context and return a handle to + * the created part. + */ +CURL_EXTERN curl_mimepart *curl_mime_addpart(curl_mime *mime); + +/* + * NAME curl_mime_name() + * + * DESCRIPTION + * + * Set mime/form part name. + */ +CURL_EXTERN CURLcode curl_mime_name(curl_mimepart *part, const char *name); + +/* + * NAME curl_mime_filename() + * + * DESCRIPTION + * + * Set mime part remote file name. + */ +CURL_EXTERN CURLcode curl_mime_filename(curl_mimepart *part, + const char *filename); + +/* + * NAME curl_mime_type() + * + * DESCRIPTION + * + * Set mime part type. + */ +CURL_EXTERN CURLcode curl_mime_type(curl_mimepart *part, const char *mimetype); + +/* + * NAME curl_mime_encoder() + * + * DESCRIPTION + * + * Set mime data transfer encoder. + */ +CURL_EXTERN CURLcode curl_mime_encoder(curl_mimepart *part, + const char *encoding); + +/* + * NAME curl_mime_data() + * + * DESCRIPTION + * + * Set mime part data source from memory data, + */ +CURL_EXTERN CURLcode curl_mime_data(curl_mimepart *part, + const char *data, size_t datasize); + +/* + * NAME curl_mime_filedata() + * + * DESCRIPTION + * + * Set mime part data source from named file. + */ +CURL_EXTERN CURLcode curl_mime_filedata(curl_mimepart *part, + const char *filename); + +/* + * NAME curl_mime_data_cb() + * + * DESCRIPTION + * + * Set mime part data source from callback function. + */ +CURL_EXTERN CURLcode curl_mime_data_cb(curl_mimepart *part, + curl_off_t datasize, + curl_read_callback readfunc, + curl_seek_callback seekfunc, + curl_free_callback freefunc, + void *arg); + +/* + * NAME curl_mime_subparts() + * + * DESCRIPTION + * + * Set mime part data source from subparts. + */ +CURL_EXTERN CURLcode curl_mime_subparts(curl_mimepart *part, + curl_mime *subparts); +/* + * NAME curl_mime_headers() + * + * DESCRIPTION + * + * Set mime part headers. + */ +CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part, + struct curl_slist *headers, + int take_ownership); + +typedef enum { + /********* the first one is unused ************/ + CURLFORM_NOTHING CURL_DEPRECATED(7.56.0, ""), + CURLFORM_COPYNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), + CURLFORM_PTRNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), + CURLFORM_NAMELENGTH CURL_DEPRECATED(7.56.0, ""), + CURLFORM_COPYCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_PTRCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_CONTENTSLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_FILECONTENT CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), + CURLFORM_ARRAY CURL_DEPRECATED(7.56.0, ""), + CURLFORM_OBSOLETE, + CURLFORM_FILE CURL_DEPRECATED(7.56.0, "Use curl_mime_filedata()"), + + CURLFORM_BUFFER CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), + CURLFORM_BUFFERPTR CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_BUFFERLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + + CURLFORM_CONTENTTYPE CURL_DEPRECATED(7.56.0, "Use curl_mime_type()"), + CURLFORM_CONTENTHEADER CURL_DEPRECATED(7.56.0, "Use curl_mime_headers()"), + CURLFORM_FILENAME CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), + CURLFORM_END, + CURLFORM_OBSOLETE2, + + CURLFORM_STREAM CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), + CURLFORM_CONTENTLEN /* added in 7.46.0, provide a curl_off_t length */ + CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + + CURLFORM_LASTENTRY /* the last unused */ +} CURLformoption; + +/* structure to be used as parameter for CURLFORM_ARRAY */ +struct curl_forms { + CURLformoption option; + const char *value; +}; + +/* use this for multipart formpost building */ +/* Returns code for curl_formadd() + * + * Returns: + * CURL_FORMADD_OK on success + * CURL_FORMADD_MEMORY if the FormInfo allocation fails + * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form + * CURL_FORMADD_NULL if a null pointer was given for a char + * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed + * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used + * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) + * CURL_FORMADD_MEMORY if a curl_httppost struct cannot be allocated + * CURL_FORMADD_MEMORY if some allocation for string copying failed. + * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array + * + ***************************************************************************/ +typedef enum { + CURL_FORMADD_OK CURL_DEPRECATED(7.56.0, ""), /* 1st, no error */ + + CURL_FORMADD_MEMORY CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_OPTION_TWICE CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_NULL CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_UNKNOWN_OPTION CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_INCOMPLETE CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_ILLEGAL_ARRAY CURL_DEPRECATED(7.56.0, ""), + /* libcurl was built with form api disabled */ + CURL_FORMADD_DISABLED CURL_DEPRECATED(7.56.0, ""), + + CURL_FORMADD_LAST /* last */ +} CURLFORMcode; + +/* + * NAME curl_formadd() + * + * DESCRIPTION + * + * Pretty advanced function for building multi-part formposts. Each invoke + * adds one part that together construct a full post. Then use + * CURLOPT_HTTPPOST to send it off to libcurl. + */ +CURL_EXTERN CURLFORMcode CURL_DEPRECATED(7.56.0, "Use curl_mime_init()") +curl_formadd(struct curl_httppost **httppost, + struct curl_httppost **last_post, + ...); + +/* + * callback function for curl_formget() + * The void *arg pointer will be the one passed as second argument to + * curl_formget(). + * The character buffer passed to it must not be freed. + * Should return the buffer length passed to it as the argument "len" on + * success. + */ +typedef size_t (*curl_formget_callback)(void *arg, const char *buf, + size_t len); + +/* + * NAME curl_formget() + * + * DESCRIPTION + * + * Serialize a curl_httppost struct built with curl_formadd(). + * Accepts a void pointer as second argument which will be passed to + * the curl_formget_callback function. + * Returns 0 on success. + */ +CURL_EXTERN int CURL_DEPRECATED(7.56.0, "") +curl_formget(struct curl_httppost *form, void *arg, + curl_formget_callback append); +/* + * NAME curl_formfree() + * + * DESCRIPTION + * + * Free a multipart formpost previously built with curl_formadd(). + */ +CURL_EXTERN void CURL_DEPRECATED(7.56.0, "Use curl_mime_free()") +curl_formfree(struct curl_httppost *form); + +/* + * NAME curl_getenv() + * + * DESCRIPTION + * + * Returns a malloc()'ed string that MUST be curl_free()ed after usage is + * complete. DEPRECATED - see lib/README.curlx + */ +CURL_EXTERN char *curl_getenv(const char *variable); + +/* + * NAME curl_version() + * + * DESCRIPTION + * + * Returns a static ascii string of the libcurl version. + */ +CURL_EXTERN char *curl_version(void); + +/* + * NAME curl_easy_escape() + * + * DESCRIPTION + * + * Escapes URL strings (converts all letters consider illegal in URLs to their + * %XX versions). This function returns a new allocated string or NULL if an + * error occurred. + */ +CURL_EXTERN char *curl_easy_escape(CURL *handle, + const char *string, + int length); + +/* the previous version: */ +CURL_EXTERN char *curl_escape(const char *string, + int length); + + +/* + * NAME curl_easy_unescape() + * + * DESCRIPTION + * + * Unescapes URL encoding in strings (converts all %XX codes to their 8bit + * versions). This function returns a new allocated string or NULL if an error + * occurred. + * Conversion Note: On non-ASCII platforms the ASCII %XX codes are + * converted into the host encoding. + */ +CURL_EXTERN char *curl_easy_unescape(CURL *handle, + const char *string, + int length, + int *outlength); + +/* the previous version */ +CURL_EXTERN char *curl_unescape(const char *string, + int length); + +/* + * NAME curl_free() + * + * DESCRIPTION + * + * Provided for de-allocation in the same translation unit that did the + * allocation. Added in libcurl 7.10 + */ +CURL_EXTERN void curl_free(void *p); + +/* + * NAME curl_global_init() + * + * DESCRIPTION + * + * curl_global_init() should be invoked exactly once for each application that + * uses libcurl and before any call of other libcurl functions. + + * This function is thread-safe if CURL_VERSION_THREADSAFE is set in the + * curl_version_info_data.features flag (fetch by curl_version_info()). + + */ +CURL_EXTERN CURLcode curl_global_init(long flags); + +/* + * NAME curl_global_init_mem() + * + * DESCRIPTION + * + * curl_global_init() or curl_global_init_mem() should be invoked exactly once + * for each application that uses libcurl. This function can be used to + * initialize libcurl and set user defined memory management callback + * functions. Users can implement memory management routines to check for + * memory leaks, check for mis-use of the curl library etc. User registered + * callback routines will be invoked by this library instead of the system + * memory management routines like malloc, free etc. + */ +CURL_EXTERN CURLcode curl_global_init_mem(long flags, + curl_malloc_callback m, + curl_free_callback f, + curl_realloc_callback r, + curl_strdup_callback s, + curl_calloc_callback c); + +/* + * NAME curl_global_cleanup() + * + * DESCRIPTION + * + * curl_global_cleanup() should be invoked exactly once for each application + * that uses libcurl + */ +CURL_EXTERN void curl_global_cleanup(void); + +/* + * NAME curl_global_trace() + * + * DESCRIPTION + * + * curl_global_trace() can be invoked at application start to + * configure which components in curl should participate in tracing. + + * This function is thread-safe if CURL_VERSION_THREADSAFE is set in the + * curl_version_info_data.features flag (fetch by curl_version_info()). + + */ +CURL_EXTERN CURLcode curl_global_trace(const char *config); + +/* linked-list structure for the CURLOPT_QUOTE option (and other) */ +struct curl_slist { + char *data; + struct curl_slist *next; +}; + +/* + * NAME curl_global_sslset() + * + * DESCRIPTION + * + * When built with multiple SSL backends, curl_global_sslset() allows to + * choose one. This function can only be called once, and it must be called + * *before* curl_global_init(). + * + * The backend can be identified by the id (e.g. CURLSSLBACKEND_OPENSSL). The + * backend can also be specified via the name parameter (passing -1 as id). + * If both id and name are specified, the name will be ignored. If neither id + * nor name are specified, the function will fail with + * CURLSSLSET_UNKNOWN_BACKEND and set the "avail" pointer to the + * NULL-terminated list of available backends. + * + * Upon success, the function returns CURLSSLSET_OK. + * + * If the specified SSL backend is not available, the function returns + * CURLSSLSET_UNKNOWN_BACKEND and sets the "avail" pointer to a NULL-terminated + * list of available SSL backends. + * + * The SSL backend can be set only once. If it has already been set, a + * subsequent attempt to change it will result in a CURLSSLSET_TOO_LATE. + */ + +struct curl_ssl_backend { + curl_sslbackend id; + const char *name; +}; +typedef struct curl_ssl_backend curl_ssl_backend; + +typedef enum { + CURLSSLSET_OK = 0, + CURLSSLSET_UNKNOWN_BACKEND, + CURLSSLSET_TOO_LATE, + CURLSSLSET_NO_BACKENDS /* libcurl was built without any SSL support */ +} CURLsslset; + +CURL_EXTERN CURLsslset curl_global_sslset(curl_sslbackend id, const char *name, + const curl_ssl_backend ***avail); + +/* + * NAME curl_slist_append() + * + * DESCRIPTION + * + * Appends a string to a linked list. If no list exists, it will be created + * first. Returns the new list, after appending. + */ +CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *list, + const char *data); + +/* + * NAME curl_slist_free_all() + * + * DESCRIPTION + * + * free a previously built curl_slist. + */ +CURL_EXTERN void curl_slist_free_all(struct curl_slist *list); + +/* + * NAME curl_getdate() + * + * DESCRIPTION + * + * Returns the time, in seconds since 1 Jan 1970 of the time string given in + * the first argument. The time argument in the second parameter is unused + * and should be set to NULL. + */ +CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused); + +/* info about the certificate chain, for SSL backends that support it. Asked + for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */ +struct curl_certinfo { + int num_of_certs; /* number of certificates with information */ + struct curl_slist **certinfo; /* for each index in this array, there's a + linked list with textual information for a + certificate in the format "name:content". + eg "Subject:foo", "Issuer:bar", etc. */ +}; + +/* Information about the SSL library used and the respective internal SSL + handle, which can be used to obtain further information regarding the + connection. Asked for with CURLINFO_TLS_SSL_PTR or CURLINFO_TLS_SESSION. */ +struct curl_tlssessioninfo { + curl_sslbackend backend; + void *internals; +}; + +#define CURLINFO_STRING 0x100000 +#define CURLINFO_LONG 0x200000 +#define CURLINFO_DOUBLE 0x300000 +#define CURLINFO_SLIST 0x400000 +#define CURLINFO_PTR 0x400000 /* same as SLIST */ +#define CURLINFO_SOCKET 0x500000 +#define CURLINFO_OFF_T 0x600000 +#define CURLINFO_MASK 0x0fffff +#define CURLINFO_TYPEMASK 0xf00000 + +typedef enum { + CURLINFO_NONE, /* first, never use this */ + CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, + CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, + CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, + CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, + CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, + CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6, + CURLINFO_SIZE_UPLOAD CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_UPLOAD_T") + = CURLINFO_DOUBLE + 7, + CURLINFO_SIZE_UPLOAD_T = CURLINFO_OFF_T + 7, + CURLINFO_SIZE_DOWNLOAD + CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_DOWNLOAD_T") + = CURLINFO_DOUBLE + 8, + CURLINFO_SIZE_DOWNLOAD_T = CURLINFO_OFF_T + 8, + CURLINFO_SPEED_DOWNLOAD + CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_DOWNLOAD_T") + = CURLINFO_DOUBLE + 9, + CURLINFO_SPEED_DOWNLOAD_T = CURLINFO_OFF_T + 9, + CURLINFO_SPEED_UPLOAD + CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_UPLOAD_T") + = CURLINFO_DOUBLE + 10, + CURLINFO_SPEED_UPLOAD_T = CURLINFO_OFF_T + 10, + CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, + CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, + CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, + CURLINFO_FILETIME = CURLINFO_LONG + 14, + CURLINFO_FILETIME_T = CURLINFO_OFF_T + 14, + CURLINFO_CONTENT_LENGTH_DOWNLOAD + CURL_DEPRECATED(7.55.0, + "Use CURLINFO_CONTENT_LENGTH_DOWNLOAD_T") + = CURLINFO_DOUBLE + 15, + CURLINFO_CONTENT_LENGTH_DOWNLOAD_T = CURLINFO_OFF_T + 15, + CURLINFO_CONTENT_LENGTH_UPLOAD + CURL_DEPRECATED(7.55.0, + "Use CURLINFO_CONTENT_LENGTH_UPLOAD_T") + = CURLINFO_DOUBLE + 16, + CURLINFO_CONTENT_LENGTH_UPLOAD_T = CURLINFO_OFF_T + 16, + CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, + CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, + CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, + CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, + CURLINFO_PRIVATE = CURLINFO_STRING + 21, + CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, + CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, + CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, + CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, + CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, + CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, + CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, + CURLINFO_LASTSOCKET CURL_DEPRECATED(7.45.0, "Use CURLINFO_ACTIVESOCKET") + = CURLINFO_LONG + 29, + CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, + CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31, + CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32, + CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33, + CURLINFO_CERTINFO = CURLINFO_PTR + 34, + CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35, + CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36, + CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37, + CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38, + CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39, + CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40, + CURLINFO_LOCAL_IP = CURLINFO_STRING + 41, + CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42, + CURLINFO_TLS_SESSION CURL_DEPRECATED(7.48.0, "Use CURLINFO_TLS_SSL_PTR") + = CURLINFO_PTR + 43, + CURLINFO_ACTIVESOCKET = CURLINFO_SOCKET + 44, + CURLINFO_TLS_SSL_PTR = CURLINFO_PTR + 45, + CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46, + CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47, + CURLINFO_PROTOCOL CURL_DEPRECATED(7.85.0, "Use CURLINFO_SCHEME") + = CURLINFO_LONG + 48, + CURLINFO_SCHEME = CURLINFO_STRING + 49, + CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50, + CURLINFO_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51, + CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52, + CURLINFO_PRETRANSFER_TIME_T = CURLINFO_OFF_T + 53, + CURLINFO_STARTTRANSFER_TIME_T = CURLINFO_OFF_T + 54, + CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55, + CURLINFO_APPCONNECT_TIME_T = CURLINFO_OFF_T + 56, + CURLINFO_RETRY_AFTER = CURLINFO_OFF_T + 57, + CURLINFO_EFFECTIVE_METHOD = CURLINFO_STRING + 58, + CURLINFO_PROXY_ERROR = CURLINFO_LONG + 59, + CURLINFO_REFERER = CURLINFO_STRING + 60, + CURLINFO_CAINFO = CURLINFO_STRING + 61, + CURLINFO_CAPATH = CURLINFO_STRING + 62, + CURLINFO_XFER_ID = CURLINFO_OFF_T + 63, + CURLINFO_CONN_ID = CURLINFO_OFF_T + 64, + CURLINFO_LASTONE = 64 +} CURLINFO; + +/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as + CURLINFO_HTTP_CODE */ +#define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE + +typedef enum { + CURLCLOSEPOLICY_NONE, /* first, never use this */ + + CURLCLOSEPOLICY_OLDEST, + CURLCLOSEPOLICY_LEAST_RECENTLY_USED, + CURLCLOSEPOLICY_LEAST_TRAFFIC, + CURLCLOSEPOLICY_SLOWEST, + CURLCLOSEPOLICY_CALLBACK, + + CURLCLOSEPOLICY_LAST /* last, never use this */ +} curl_closepolicy; + +#define CURL_GLOBAL_SSL (1<<0) /* no purpose since 7.57.0 */ +#define CURL_GLOBAL_WIN32 (1<<1) +#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) +#define CURL_GLOBAL_NOTHING 0 +#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL +#define CURL_GLOBAL_ACK_EINTR (1<<2) + + +/***************************************************************************** + * Setup defines, protos etc for the sharing stuff. + */ + +/* Different data locks for a single share */ +typedef enum { + CURL_LOCK_DATA_NONE = 0, + /* CURL_LOCK_DATA_SHARE is used internally to say that + * the locking is just made to change the internal state of the share + * itself. + */ + CURL_LOCK_DATA_SHARE, + CURL_LOCK_DATA_COOKIE, + CURL_LOCK_DATA_DNS, + CURL_LOCK_DATA_SSL_SESSION, + CURL_LOCK_DATA_CONNECT, + CURL_LOCK_DATA_PSL, + CURL_LOCK_DATA_HSTS, + CURL_LOCK_DATA_LAST +} curl_lock_data; + +/* Different lock access types */ +typedef enum { + CURL_LOCK_ACCESS_NONE = 0, /* unspecified action */ + CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */ + CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */ + CURL_LOCK_ACCESS_LAST /* never use */ +} curl_lock_access; + +typedef void (*curl_lock_function)(CURL *handle, + curl_lock_data data, + curl_lock_access locktype, + void *userptr); +typedef void (*curl_unlock_function)(CURL *handle, + curl_lock_data data, + void *userptr); + + +typedef enum { + CURLSHE_OK, /* all is fine */ + CURLSHE_BAD_OPTION, /* 1 */ + CURLSHE_IN_USE, /* 2 */ + CURLSHE_INVALID, /* 3 */ + CURLSHE_NOMEM, /* 4 out of memory */ + CURLSHE_NOT_BUILT_IN, /* 5 feature not present in lib */ + CURLSHE_LAST /* never use */ +} CURLSHcode; + +typedef enum { + CURLSHOPT_NONE, /* don't use */ + CURLSHOPT_SHARE, /* specify a data type to share */ + CURLSHOPT_UNSHARE, /* specify which data type to stop sharing */ + CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */ + CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */ + CURLSHOPT_USERDATA, /* pass in a user data pointer used in the lock/unlock + callback functions */ + CURLSHOPT_LAST /* never use */ +} CURLSHoption; + +CURL_EXTERN CURLSH *curl_share_init(void); +CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, + ...); +CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *share); + +/**************************************************************************** + * Structures for querying information about the curl library at runtime. + */ + +typedef enum { + CURLVERSION_FIRST, + CURLVERSION_SECOND, + CURLVERSION_THIRD, + CURLVERSION_FOURTH, + CURLVERSION_FIFTH, + CURLVERSION_SIXTH, + CURLVERSION_SEVENTH, + CURLVERSION_EIGHTH, + CURLVERSION_NINTH, + CURLVERSION_TENTH, + CURLVERSION_ELEVENTH, + CURLVERSION_LAST /* never actually use this */ +} CURLversion; + +/* The 'CURLVERSION_NOW' is the symbolic name meant to be used by + basically all programs ever that want to get version information. It is + meant to be a built-in version number for what kind of struct the caller + expects. If the struct ever changes, we redefine the NOW to another enum + from above. */ +#define CURLVERSION_NOW CURLVERSION_ELEVENTH + +struct curl_version_info_data { + CURLversion age; /* age of the returned struct */ + const char *version; /* LIBCURL_VERSION */ + unsigned int version_num; /* LIBCURL_VERSION_NUM */ + const char *host; /* OS/host/cpu/machine when configured */ + int features; /* bitmask, see defines below */ + const char *ssl_version; /* human readable string */ + long ssl_version_num; /* not used anymore, always 0 */ + const char *libz_version; /* human readable string */ + /* protocols is terminated by an entry with a NULL protoname */ + const char * const *protocols; + + /* The fields below this were added in CURLVERSION_SECOND */ + const char *ares; + int ares_num; + + /* This field was added in CURLVERSION_THIRD */ + const char *libidn; + + /* These field were added in CURLVERSION_FOURTH */ + + /* Same as '_libiconv_version' if built with HAVE_ICONV */ + int iconv_ver_num; + + const char *libssh_version; /* human readable string */ + + /* These fields were added in CURLVERSION_FIFTH */ + unsigned int brotli_ver_num; /* Numeric Brotli version + (MAJOR << 24) | (MINOR << 12) | PATCH */ + const char *brotli_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_SIXTH */ + unsigned int nghttp2_ver_num; /* Numeric nghttp2 version + (MAJOR << 16) | (MINOR << 8) | PATCH */ + const char *nghttp2_version; /* human readable string. */ + const char *quic_version; /* human readable quic (+ HTTP/3) library + + version or NULL */ + + /* These fields were added in CURLVERSION_SEVENTH */ + const char *cainfo; /* the built-in default CURLOPT_CAINFO, might + be NULL */ + const char *capath; /* the built-in default CURLOPT_CAPATH, might + be NULL */ + + /* These fields were added in CURLVERSION_EIGHTH */ + unsigned int zstd_ver_num; /* Numeric Zstd version + (MAJOR << 24) | (MINOR << 12) | PATCH */ + const char *zstd_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_NINTH */ + const char *hyper_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_TENTH */ + const char *gsasl_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_ELEVENTH */ + /* feature_names is terminated by an entry with a NULL feature name */ + const char * const *feature_names; +}; +typedef struct curl_version_info_data curl_version_info_data; + +#define CURL_VERSION_IPV6 (1<<0) /* IPv6-enabled */ +#define CURL_VERSION_KERBEROS4 (1<<1) /* Kerberos V4 auth is supported + (deprecated) */ +#define CURL_VERSION_SSL (1<<2) /* SSL options are present */ +#define CURL_VERSION_LIBZ (1<<3) /* libz features are present */ +#define CURL_VERSION_NTLM (1<<4) /* NTLM auth is supported */ +#define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth is supported + (deprecated) */ +#define CURL_VERSION_DEBUG (1<<6) /* Built with debug capabilities */ +#define CURL_VERSION_ASYNCHDNS (1<<7) /* Asynchronous DNS resolves */ +#define CURL_VERSION_SPNEGO (1<<8) /* SPNEGO auth is supported */ +#define CURL_VERSION_LARGEFILE (1<<9) /* Supports files larger than 2GB */ +#define CURL_VERSION_IDN (1<<10) /* Internationized Domain Names are + supported */ +#define CURL_VERSION_SSPI (1<<11) /* Built against Windows SSPI */ +#define CURL_VERSION_CONV (1<<12) /* Character conversions supported */ +#define CURL_VERSION_CURLDEBUG (1<<13) /* Debug memory tracking supported */ +#define CURL_VERSION_TLSAUTH_SRP (1<<14) /* TLS-SRP auth is supported */ +#define CURL_VERSION_NTLM_WB (1<<15) /* NTLM delegation to winbind helper + is supported */ +#define CURL_VERSION_HTTP2 (1<<16) /* HTTP2 support built-in */ +#define CURL_VERSION_GSSAPI (1<<17) /* Built against a GSS-API library */ +#define CURL_VERSION_KERBEROS5 (1<<18) /* Kerberos V5 auth is supported */ +#define CURL_VERSION_UNIX_SOCKETS (1<<19) /* Unix domain sockets support */ +#define CURL_VERSION_PSL (1<<20) /* Mozilla's Public Suffix List, used + for cookie domain verification */ +#define CURL_VERSION_HTTPS_PROXY (1<<21) /* HTTPS-proxy support built-in */ +#define CURL_VERSION_MULTI_SSL (1<<22) /* Multiple SSL backends available */ +#define CURL_VERSION_BROTLI (1<<23) /* Brotli features are present. */ +#define CURL_VERSION_ALTSVC (1<<24) /* Alt-Svc handling built-in */ +#define CURL_VERSION_HTTP3 (1<<25) /* HTTP3 support built-in */ +#define CURL_VERSION_ZSTD (1<<26) /* zstd features are present */ +#define CURL_VERSION_UNICODE (1<<27) /* Unicode support on Windows */ +#define CURL_VERSION_HSTS (1<<28) /* HSTS is supported */ +#define CURL_VERSION_GSASL (1<<29) /* libgsasl is supported */ +#define CURL_VERSION_THREADSAFE (1<<30) /* libcurl API is thread-safe */ + + /* + * NAME curl_version_info() + * + * DESCRIPTION + * + * This function returns a pointer to a static copy of the version info + * struct. See above. + */ +CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion); + +/* + * NAME curl_easy_strerror() + * + * DESCRIPTION + * + * The curl_easy_strerror function may be used to turn a CURLcode value + * into the equivalent human readable error string. This is useful + * for printing meaningful error messages. + */ +CURL_EXTERN const char *curl_easy_strerror(CURLcode); + +/* + * NAME curl_share_strerror() + * + * DESCRIPTION + * + * The curl_share_strerror function may be used to turn a CURLSHcode value + * into the equivalent human readable error string. This is useful + * for printing meaningful error messages. + */ +CURL_EXTERN const char *curl_share_strerror(CURLSHcode); + +/* + * NAME curl_easy_pause() + * + * DESCRIPTION + * + * The curl_easy_pause function pauses or unpauses transfers. Select the new + * state by setting the bitmask, use the convenience defines below. + * + */ +CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask); + +#define CURLPAUSE_RECV (1<<0) +#define CURLPAUSE_RECV_CONT (0) + +#define CURLPAUSE_SEND (1<<2) +#define CURLPAUSE_SEND_CONT (0) + +#define CURLPAUSE_ALL (CURLPAUSE_RECV|CURLPAUSE_SEND) +#define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT) + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +/* unfortunately, the easy.h and multi.h include files need options and info + stuff before they can be included! */ +#include "easy.h" /* nothing in curl is fun without the easy stuff */ +#include "multi.h" +#include "urlapi.h" +#include "options.h" +#include "header.h" +#include "websockets.h" + +/* the typechecker doesn't work in C++ (yet) */ +#if defined(__GNUC__) && defined(__GNUC_MINOR__) && \ + ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && \ + !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK) +#include "typecheck-gcc.h" +#else +#if defined(__STDC__) && (__STDC__ >= 1) +/* This preprocessor magic that replaces a call with the exact same call is + only done to make sure application authors pass exactly three arguments + to these functions. */ +#define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param) +#define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg) +#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) +#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) +#endif /* __STDC__ >= 1 */ +#endif /* gcc >= 4.3 && !__cplusplus && !CURL_DISABLE_TYPECHECK */ + +#endif /* CURLINC_CURL_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/curlver.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/curlver.h new file mode 100644 index 0000000..44e6070 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/curlver.h @@ -0,0 +1,79 @@ +#ifndef CURLINC_CURLVER_H +#define CURLINC_CURLVER_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* This header file contains nothing but libcurl version info, generated by + a script at release-time. This was made its own header file in 7.11.2 */ + +/* This is the global package copyright */ +#define LIBCURL_COPYRIGHT "Daniel Stenberg, ." + +/* This is the version number of the libcurl package from which this header + file origins: */ +#define LIBCURL_VERSION "8.4.0" + +/* The numeric version number is also available "in parts" by using these + defines: */ +#define LIBCURL_VERSION_MAJOR 8 +#define LIBCURL_VERSION_MINOR 4 +#define LIBCURL_VERSION_PATCH 0 + +/* This is the numeric version of the libcurl version number, meant for easier + parsing and comparisons by programs. The LIBCURL_VERSION_NUM define will + always follow this syntax: + + 0xXXYYZZ + + Where XX, YY and ZZ are the main version, release and patch numbers in + hexadecimal (using 8 bits each). All three numbers are always represented + using two digits. 1.2 would appear as "0x010200" while version 9.11.7 + appears as "0x090b07". + + This 6-digit (24 bits) hexadecimal number does not show pre-release number, + and it is always a greater number in a more recent release. It makes + comparisons with greater than and less than work. + + Note: This define is the full hex number and _does not_ use the + CURL_VERSION_BITS() macro since curl's own configure script greps for it + and needs it to contain the full number. +*/ +#define LIBCURL_VERSION_NUM 0x080400 + +/* + * This is the date and time when the full source package was created. The + * timestamp is not stored in git, as the timestamp is properly set in the + * tarballs by the maketgz script. + * + * The format of the date follows this template: + * + * "2007-11-23" + */ +#define LIBCURL_TIMESTAMP "2023-10-11" + +#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z)) +#define CURL_AT_LEAST_VERSION(x,y,z) \ + (LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z)) + +#endif /* CURLINC_CURLVER_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/easy.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/easy.h new file mode 100644 index 0000000..1285101 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/easy.h @@ -0,0 +1,125 @@ +#ifndef CURLINC_EASY_H +#define CURLINC_EASY_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + +/* Flag bits in the curl_blob struct: */ +#define CURL_BLOB_COPY 1 /* tell libcurl to copy the data */ +#define CURL_BLOB_NOCOPY 0 /* tell libcurl to NOT copy the data */ + +struct curl_blob { + void *data; + size_t len; + unsigned int flags; /* bit 0 is defined, the rest are reserved and should be + left zeroes */ +}; + +CURL_EXTERN CURL *curl_easy_init(void); +CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...); +CURL_EXTERN CURLcode curl_easy_perform(CURL *curl); +CURL_EXTERN void curl_easy_cleanup(CURL *curl); + +/* + * NAME curl_easy_getinfo() + * + * DESCRIPTION + * + * Request internal information from the curl session with this function. + * The third argument MUST be pointing to the specific type of the used option + * which is documented in each man page of the option. The data pointed to + * will be filled in accordingly and can be relied upon only if the function + * returns CURLE_OK. This function is intended to get used *AFTER* a performed + * transfer, all results from this function are undefined until the transfer + * is completed. + */ +CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...); + + +/* + * NAME curl_easy_duphandle() + * + * DESCRIPTION + * + * Creates a new curl session handle with the same options set for the handle + * passed in. Duplicating a handle could only be a matter of cloning data and + * options, internal state info and things like persistent connections cannot + * be transferred. It is useful in multithreaded applications when you can run + * curl_easy_duphandle() for each new thread to avoid a series of identical + * curl_easy_setopt() invokes in every thread. + */ +CURL_EXTERN CURL *curl_easy_duphandle(CURL *curl); + +/* + * NAME curl_easy_reset() + * + * DESCRIPTION + * + * Re-initializes a CURL handle to the default values. This puts back the + * handle to the same state as it was in when it was just created. + * + * It does keep: live connections, the Session ID cache, the DNS cache and the + * cookies. + */ +CURL_EXTERN void curl_easy_reset(CURL *curl); + +/* + * NAME curl_easy_recv() + * + * DESCRIPTION + * + * Receives data from the connected socket. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, + size_t *n); + +/* + * NAME curl_easy_send() + * + * DESCRIPTION + * + * Sends data over the connected socket. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer, + size_t buflen, size_t *n); + + +/* + * NAME curl_easy_upkeep() + * + * DESCRIPTION + * + * Performs connection upkeep for the given session handle. + */ +CURL_EXTERN CURLcode curl_easy_upkeep(CURL *curl); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/header.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/header.h new file mode 100644 index 0000000..8df11e1 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/header.h @@ -0,0 +1,74 @@ +#ifndef CURLINC_HEADER_H +#define CURLINC_HEADER_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +struct curl_header { + char *name; /* this might not use the same case */ + char *value; + size_t amount; /* number of headers using this name */ + size_t index; /* ... of this instance, 0 or higher */ + unsigned int origin; /* see bits below */ + void *anchor; /* handle privately used by libcurl */ +}; + +/* 'origin' bits */ +#define CURLH_HEADER (1<<0) /* plain server header */ +#define CURLH_TRAILER (1<<1) /* trailers */ +#define CURLH_CONNECT (1<<2) /* CONNECT headers */ +#define CURLH_1XX (1<<3) /* 1xx headers */ +#define CURLH_PSEUDO (1<<4) /* pseudo headers */ + +typedef enum { + CURLHE_OK, + CURLHE_BADINDEX, /* header exists but not with this index */ + CURLHE_MISSING, /* no such header exists */ + CURLHE_NOHEADERS, /* no headers at all exist (yet) */ + CURLHE_NOREQUEST, /* no request with this number was used */ + CURLHE_OUT_OF_MEMORY, /* out of memory while processing */ + CURLHE_BAD_ARGUMENT, /* a function argument was not okay */ + CURLHE_NOT_BUILT_IN /* if API was disabled in the build */ +} CURLHcode; + +CURL_EXTERN CURLHcode curl_easy_header(CURL *easy, + const char *name, + size_t index, + unsigned int origin, + int request, + struct curl_header **hout); + +CURL_EXTERN struct curl_header *curl_easy_nextheader(CURL *easy, + unsigned int origin, + int request, + struct curl_header *prev); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_HEADER_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/mprintf.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/mprintf.h new file mode 100644 index 0000000..dc5664b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/mprintf.h @@ -0,0 +1,70 @@ +#ifndef CURLINC_MPRINTF_H +#define CURLINC_MPRINTF_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include +#include /* needed for FILE */ +#include "curl.h" /* for CURL_EXTERN */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if (defined(__GNUC__) || defined(__clang__)) && \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__MINGW32__) && !defined(CURL_NO_FMT_CHECKS) +#define CURL_TEMP_PRINTF(a,b) __attribute__ ((format(printf, a, b))) +#else +#define CURL_TEMP_PRINTF(a,b) +#endif + +CURL_EXTERN int curl_mprintf(const char *format, ...) CURL_TEMP_PRINTF(1, 2); +CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...) + CURL_TEMP_PRINTF(2, 3); +CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...) + CURL_TEMP_PRINTF(2, 3); +CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength, + const char *format, ...) CURL_TEMP_PRINTF(3, 4); +CURL_EXTERN int curl_mvprintf(const char *format, va_list args) + CURL_TEMP_PRINTF(1, 0); +CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args) + CURL_TEMP_PRINTF(2, 0); +CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args) + CURL_TEMP_PRINTF(2, 0); +CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength, + const char *format, va_list args) + CURL_TEMP_PRINTF(3, 0); +CURL_EXTERN char *curl_maprintf(const char *format, ...) + CURL_TEMP_PRINTF(1, 2); +CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args) + CURL_TEMP_PRINTF(1, 0); + +#undef CURL_TEMP_PRINTF + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_MPRINTF_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/multi.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/multi.h new file mode 100644 index 0000000..e79b48f --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/multi.h @@ -0,0 +1,471 @@ +#ifndef CURLINC_MULTI_H +#define CURLINC_MULTI_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ +/* + This is an "external" header file. Don't give away any internals here! + + GOALS + + o Enable a "pull" interface. The application that uses libcurl decides where + and when to ask libcurl to get/send data. + + o Enable multiple simultaneous transfers in the same thread without making it + complicated for the application. + + o Enable the application to select() on its own file descriptors and curl's + file descriptors simultaneous easily. + +*/ + +/* + * This header file should not really need to include "curl.h" since curl.h + * itself includes this file and we expect user applications to do #include + * without the need for especially including multi.h. + * + * For some reason we added this include here at one point, and rather than to + * break existing (wrongly written) libcurl applications, we leave it as-is + * but with this warning attached. + */ +#include "curl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) +typedef struct Curl_multi CURLM; +#else +typedef void CURLM; +#endif + +typedef enum { + CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or + curl_multi_socket*() soon */ + CURLM_OK, + CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */ + CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */ + CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */ + CURLM_INTERNAL_ERROR, /* this is a libcurl bug */ + CURLM_BAD_SOCKET, /* the passed in socket argument did not match */ + CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */ + CURLM_ADDED_ALREADY, /* an easy handle already added to a multi handle was + attempted to get added - again */ + CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a + callback */ + CURLM_WAKEUP_FAILURE, /* wakeup is unavailable or failed */ + CURLM_BAD_FUNCTION_ARGUMENT, /* function called with a bad parameter */ + CURLM_ABORTED_BY_CALLBACK, + CURLM_UNRECOVERABLE_POLL, + CURLM_LAST +} CURLMcode; + +/* just to make code nicer when using curl_multi_socket() you can now check + for CURLM_CALL_MULTI_SOCKET too in the same style it works for + curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */ +#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM + +/* bitmask bits for CURLMOPT_PIPELINING */ +#define CURLPIPE_NOTHING 0L +#define CURLPIPE_HTTP1 1L +#define CURLPIPE_MULTIPLEX 2L + +typedef enum { + CURLMSG_NONE, /* first, not used */ + CURLMSG_DONE, /* This easy handle has completed. 'result' contains + the CURLcode of the transfer */ + CURLMSG_LAST /* last, not used */ +} CURLMSG; + +struct CURLMsg { + CURLMSG msg; /* what this message means */ + CURL *easy_handle; /* the handle it concerns */ + union { + void *whatever; /* message-specific data */ + CURLcode result; /* return code for transfer */ + } data; +}; +typedef struct CURLMsg CURLMsg; + +/* Based on poll(2) structure and values. + * We don't use pollfd and POLL* constants explicitly + * to cover platforms without poll(). */ +#define CURL_WAIT_POLLIN 0x0001 +#define CURL_WAIT_POLLPRI 0x0002 +#define CURL_WAIT_POLLOUT 0x0004 + +struct curl_waitfd { + curl_socket_t fd; + short events; + short revents; +}; + +/* + * Name: curl_multi_init() + * + * Desc: initialize multi-style curl usage + * + * Returns: a new CURLM handle to use in all 'curl_multi' functions. + */ +CURL_EXTERN CURLM *curl_multi_init(void); + +/* + * Name: curl_multi_add_handle() + * + * Desc: add a standard curl handle to the multi stack + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle, + CURL *curl_handle); + + /* + * Name: curl_multi_remove_handle() + * + * Desc: removes a curl handle from the multi stack again + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle, + CURL *curl_handle); + + /* + * Name: curl_multi_fdset() + * + * Desc: Ask curl for its fd_set sets. The app can use these to select() or + * poll() on. We want curl_multi_perform() called as soon as one of + * them are ready. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle, + fd_set *read_fd_set, + fd_set *write_fd_set, + fd_set *exc_fd_set, + int *max_fd); + +/* + * Name: curl_multi_wait() + * + * Desc: Poll on all fds within a CURLM set as well as any + * additional fds passed to the function. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle, + struct curl_waitfd extra_fds[], + unsigned int extra_nfds, + int timeout_ms, + int *ret); + +/* + * Name: curl_multi_poll() + * + * Desc: Poll on all fds within a CURLM set as well as any + * additional fds passed to the function. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_poll(CURLM *multi_handle, + struct curl_waitfd extra_fds[], + unsigned int extra_nfds, + int timeout_ms, + int *ret); + +/* + * Name: curl_multi_wakeup() + * + * Desc: wakes up a sleeping curl_multi_poll call. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_wakeup(CURLM *multi_handle); + + /* + * Name: curl_multi_perform() + * + * Desc: When the app thinks there's data available for curl it calls this + * function to read/write whatever there is right now. This returns + * as soon as the reads and writes are done. This function does not + * require that there actually is data available for reading or that + * data can be written, it can be called just in case. It returns + * the number of handles that still transfer data in the second + * argument's integer-pointer. + * + * Returns: CURLMcode type, general multi error code. *NOTE* that this only + * returns errors etc regarding the whole multi stack. There might + * still have occurred problems on individual transfers even when + * this returns OK. + */ +CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle, + int *running_handles); + + /* + * Name: curl_multi_cleanup() + * + * Desc: Cleans up and removes a whole multi stack. It does not free or + * touch any individual easy handles in any way. We need to define + * in what state those handles will be if this function is called + * in the middle of a transfer. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle); + +/* + * Name: curl_multi_info_read() + * + * Desc: Ask the multi handle if there's any messages/informationals from + * the individual transfers. Messages include informationals such as + * error code from the transfer or just the fact that a transfer is + * completed. More details on these should be written down as well. + * + * Repeated calls to this function will return a new struct each + * time, until a special "end of msgs" struct is returned as a signal + * that there is no more to get at this point. + * + * The data the returned pointer points to will not survive calling + * curl_multi_cleanup(). + * + * The 'CURLMsg' struct is meant to be very simple and only contain + * very basic information. If more involved information is wanted, + * we will provide the particular "transfer handle" in that struct + * and that should/could/would be used in subsequent + * curl_easy_getinfo() calls (or similar). The point being that we + * must never expose complex structs to applications, as then we'll + * undoubtably get backwards compatibility problems in the future. + * + * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out + * of structs. It also writes the number of messages left in the + * queue (after this read) in the integer the second argument points + * to. + */ +CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle, + int *msgs_in_queue); + +/* + * Name: curl_multi_strerror() + * + * Desc: The curl_multi_strerror function may be used to turn a CURLMcode + * value into the equivalent human readable error string. This is + * useful for printing meaningful error messages. + * + * Returns: A pointer to a null-terminated error message. + */ +CURL_EXTERN const char *curl_multi_strerror(CURLMcode); + +/* + * Name: curl_multi_socket() and + * curl_multi_socket_all() + * + * Desc: An alternative version of curl_multi_perform() that allows the + * application to pass in one of the file descriptors that have been + * detected to have "action" on them and let libcurl perform. + * See man page for details. + */ +#define CURL_POLL_NONE 0 +#define CURL_POLL_IN 1 +#define CURL_POLL_OUT 2 +#define CURL_POLL_INOUT 3 +#define CURL_POLL_REMOVE 4 + +#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD + +#define CURL_CSELECT_IN 0x01 +#define CURL_CSELECT_OUT 0x02 +#define CURL_CSELECT_ERR 0x04 + +typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */ + curl_socket_t s, /* socket */ + int what, /* see above */ + void *userp, /* private callback + pointer */ + void *socketp); /* private socket + pointer */ +/* + * Name: curl_multi_timer_callback + * + * Desc: Called by libcurl whenever the library detects a change in the + * maximum number of milliseconds the app is allowed to wait before + * curl_multi_socket() or curl_multi_perform() must be called + * (to allow libcurl's timed events to take place). + * + * Returns: The callback should return zero. + */ +typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */ + long timeout_ms, /* see above */ + void *userp); /* private callback + pointer */ + +CURL_EXTERN CURLMcode CURL_DEPRECATED(7.19.5, "Use curl_multi_socket_action()") +curl_multi_socket(CURLM *multi_handle, curl_socket_t s, int *running_handles); + +CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle, + curl_socket_t s, + int ev_bitmask, + int *running_handles); + +CURL_EXTERN CURLMcode CURL_DEPRECATED(7.19.5, "Use curl_multi_socket_action()") +curl_multi_socket_all(CURLM *multi_handle, int *running_handles); + +#ifndef CURL_ALLOW_OLD_MULTI_SOCKET +/* This macro below was added in 7.16.3 to push users who recompile to use + the new curl_multi_socket_action() instead of the old curl_multi_socket() +*/ +#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z) +#endif + +/* + * Name: curl_multi_timeout() + * + * Desc: Returns the maximum number of milliseconds the app is allowed to + * wait before curl_multi_socket() or curl_multi_perform() must be + * called (to allow libcurl's timed events to take place). + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle, + long *milliseconds); + +typedef enum { + /* This is the socket callback function pointer */ + CURLOPT(CURLMOPT_SOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 1), + + /* This is the argument passed to the socket callback */ + CURLOPT(CURLMOPT_SOCKETDATA, CURLOPTTYPE_OBJECTPOINT, 2), + + /* set to 1 to enable pipelining for this multi handle */ + CURLOPT(CURLMOPT_PIPELINING, CURLOPTTYPE_LONG, 3), + + /* This is the timer callback function pointer */ + CURLOPT(CURLMOPT_TIMERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 4), + + /* This is the argument passed to the timer callback */ + CURLOPT(CURLMOPT_TIMERDATA, CURLOPTTYPE_OBJECTPOINT, 5), + + /* maximum number of entries in the connection cache */ + CURLOPT(CURLMOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 6), + + /* maximum number of (pipelining) connections to one host */ + CURLOPT(CURLMOPT_MAX_HOST_CONNECTIONS, CURLOPTTYPE_LONG, 7), + + /* maximum number of requests in a pipeline */ + CURLOPT(CURLMOPT_MAX_PIPELINE_LENGTH, CURLOPTTYPE_LONG, 8), + + /* a connection with a content-length longer than this + will not be considered for pipelining */ + CURLOPT(CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 9), + + /* a connection with a chunk length longer than this + will not be considered for pipelining */ + CURLOPT(CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 10), + + /* a list of site names(+port) that are blocked from pipelining */ + CURLOPT(CURLMOPT_PIPELINING_SITE_BL, CURLOPTTYPE_OBJECTPOINT, 11), + + /* a list of server types that are blocked from pipelining */ + CURLOPT(CURLMOPT_PIPELINING_SERVER_BL, CURLOPTTYPE_OBJECTPOINT, 12), + + /* maximum number of open connections in total */ + CURLOPT(CURLMOPT_MAX_TOTAL_CONNECTIONS, CURLOPTTYPE_LONG, 13), + + /* This is the server push callback function pointer */ + CURLOPT(CURLMOPT_PUSHFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 14), + + /* This is the argument passed to the server push callback */ + CURLOPT(CURLMOPT_PUSHDATA, CURLOPTTYPE_OBJECTPOINT, 15), + + /* maximum number of concurrent streams to support on a connection */ + CURLOPT(CURLMOPT_MAX_CONCURRENT_STREAMS, CURLOPTTYPE_LONG, 16), + + CURLMOPT_LASTENTRY /* the last unused */ +} CURLMoption; + + +/* + * Name: curl_multi_setopt() + * + * Desc: Sets options for the multi handle. + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle, + CURLMoption option, ...); + + +/* + * Name: curl_multi_assign() + * + * Desc: This function sets an association in the multi handle between the + * given socket and a private pointer of the application. This is + * (only) useful for curl_multi_socket uses. + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle, + curl_socket_t sockfd, void *sockp); + +/* + * Name: curl_multi_get_handles() + * + * Desc: Returns an allocated array holding all handles currently added to + * the multi handle. Marks the final entry with a NULL pointer. If + * there is no easy handle added to the multi handle, this function + * returns an array with the first entry as a NULL pointer. + * + * Returns: NULL on failure, otherwise a CURL **array pointer + */ +CURL_EXTERN CURL **curl_multi_get_handles(CURLM *multi_handle); + +/* + * Name: curl_push_callback + * + * Desc: This callback gets called when a new stream is being pushed by the + * server. It approves or denies the new stream. It can also decide + * to completely fail the connection. + * + * Returns: CURL_PUSH_OK, CURL_PUSH_DENY or CURL_PUSH_ERROROUT + */ +#define CURL_PUSH_OK 0 +#define CURL_PUSH_DENY 1 +#define CURL_PUSH_ERROROUT 2 /* added in 7.72.0 */ + +struct curl_pushheaders; /* forward declaration only */ + +CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h, + size_t num); +CURL_EXTERN char *curl_pushheader_byname(struct curl_pushheaders *h, + const char *name); + +typedef int (*curl_push_callback)(CURL *parent, + CURL *easy, + size_t num_headers, + struct curl_pushheaders *headers, + void *userp); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/options.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/options.h new file mode 100644 index 0000000..1ed76a9 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/options.h @@ -0,0 +1,70 @@ +#ifndef CURLINC_OPTIONS_H +#define CURLINC_OPTIONS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + CURLOT_LONG, /* long (a range of values) */ + CURLOT_VALUES, /* (a defined set or bitmask) */ + CURLOT_OFF_T, /* curl_off_t (a range of values) */ + CURLOT_OBJECT, /* pointer (void *) */ + CURLOT_STRING, /* (char * to null-terminated buffer) */ + CURLOT_SLIST, /* (struct curl_slist *) */ + CURLOT_CBPTR, /* (void * passed as-is to a callback) */ + CURLOT_BLOB, /* blob (struct curl_blob *) */ + CURLOT_FUNCTION /* function pointer */ +} curl_easytype; + +/* Flag bits */ + +/* "alias" means it is provided for old programs to remain functional, + we prefer another name */ +#define CURLOT_FLAG_ALIAS (1<<0) + +/* The CURLOPTTYPE_* id ranges can still be used to figure out what type/size + to use for curl_easy_setopt() for the given id */ +struct curl_easyoption { + const char *name; + CURLoption id; + curl_easytype type; + unsigned int flags; +}; + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_by_name(const char *name); + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_by_id(CURLoption id); + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_next(const struct curl_easyoption *prev); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif +#endif /* CURLINC_OPTIONS_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/stdcheaders.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/stdcheaders.h new file mode 100644 index 0000000..7451aa3 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/stdcheaders.h @@ -0,0 +1,35 @@ +#ifndef CURLINC_STDCHEADERS_H +#define CURLINC_STDCHEADERS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include + +size_t fread(void *, size_t, size_t, FILE *); +size_t fwrite(const void *, size_t, size_t, FILE *); + +int strcasecmp(const char *, const char *); +int strncasecmp(const char *, const char *, size_t); + +#endif /* CURLINC_STDCHEADERS_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/system.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/system.h new file mode 100644 index 0000000..97e0d03 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/system.h @@ -0,0 +1,521 @@ +#ifndef CURLINC_SYSTEM_H +#define CURLINC_SYSTEM_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* + * Try to keep one section per platform, compiler and architecture, otherwise, + * if an existing section is reused for a different one and later on the + * original is adjusted, probably the piggybacking one can be adversely + * changed. + * + * In order to differentiate between platforms/compilers/architectures use + * only compiler built in predefined preprocessor symbols. + * + * curl_off_t + * ---------- + * + * For any given platform/compiler curl_off_t must be typedef'ed to a 64-bit + * wide signed integral data type. The width of this data type must remain + * constant and independent of any possible large file support settings. + * + * As an exception to the above, curl_off_t shall be typedef'ed to a 32-bit + * wide signed integral data type if there is no 64-bit type. + * + * As a general rule, curl_off_t shall not be mapped to off_t. This rule shall + * only be violated if off_t is the only 64-bit data type available and the + * size of off_t is independent of large file support settings. Keep your + * build on the safe side avoiding an off_t gating. If you have a 64-bit + * off_t then take for sure that another 64-bit data type exists, dig deeper + * and you will find it. + * + */ + +#if defined(__DJGPP__) || defined(__GO32__) +# if defined(__DJGPP__) && (__DJGPP__ > 1) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__SALFORDC__) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__BORLANDC__) +# if (__BORLANDC__ < 0x520) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__TURBOC__) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__POCC__) +# if (__POCC__ < 280) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# elif defined(_MSC_VER) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# else +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__LCC__) +# if defined(__MCST__) /* MCST eLbrus Compiler Collection */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 +# else /* Local (or Little) C Compiler */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +# endif + +#elif defined(__SYMBIAN32__) +# if defined(__EABI__) /* Treat all ARM compilers equally */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__CW32__) +# pragma longlong on +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__VC32__) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(macintosh) +# include +# if TYPE_LONGLONG +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(__TANDEM) +# if ! defined(__LP64) + /* Required for 32-bit NonStop builds only. */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +# endif + +#elif defined(_WIN32_WCE) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__MINGW32__) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_WS2TCPIP_H 1 + +#elif defined(__VMS) +# if defined(__VAX) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(__OS400__) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__MVS__) +# if defined(_LONG_LONG) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__370__) +# if defined(__IBMC__) || defined(__IBMCPP__) +# if defined(_ILP32) +# elif defined(_LP64) +# endif +# if defined(_LONG_LONG) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 +# endif + +#elif defined(TPF) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__TINYC__) /* also known as tcc */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* Oracle Solaris Studio */ +# if !defined(__LP64) && (defined(__ILP32) || \ + defined(__i386) || \ + defined(__sparcv8) || \ + defined(__sparcv8plus)) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__LP64) || \ + defined(__amd64) || defined(__sparcv9) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__xlc__) /* IBM xlc compiler */ +# if !defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__hpux) /* HP aCC compiler */ +# if !defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +/* ===================================== */ +/* KEEP MSVC THE PENULTIMATE ENTRY */ +/* ===================================== */ + +#elif defined(_MSC_VER) +# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +/* ===================================== */ +/* KEEP GENERIC GCC THE LAST ENTRY */ +/* ===================================== */ + +#elif defined(__GNUC__) && !defined(_SCO_DS) +# if !defined(__LP64__) && \ + (defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \ + defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \ + defined(__sparc__) || defined(__mips__) || defined(__sh__) || \ + defined(__XTENSA__) || \ + (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \ + (defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L)) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__LP64__) || \ + defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \ + defined(__e2k__) || \ + (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \ + (defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#else +/* generic "safe guess" on old 32 bit style */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +#endif + +#ifdef _AIX +/* AIX needs */ +#define CURL_PULL_SYS_POLL_H +#endif + + +/* CURL_PULL_WS2TCPIP_H is defined above when inclusion of header file */ +/* ws2tcpip.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_WS2TCPIP_H +# include +# include +# include +#endif + +/* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */ +/* sys/types.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_TYPES_H +# include +#endif + +/* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */ +/* sys/socket.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_SOCKET_H +# include +#endif + +/* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file */ +/* sys/poll.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_POLL_H +# include +#endif + +/* Data type definition of curl_socklen_t. */ +#ifdef CURL_TYPEOF_CURL_SOCKLEN_T + typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t; +#endif + +/* Data type definition of curl_off_t. */ + +#ifdef CURL_TYPEOF_CURL_OFF_T + typedef CURL_TYPEOF_CURL_OFF_T curl_off_t; +#endif + +/* + * CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow + * these to be visible and exported by the external libcurl interface API, + * while also making them visible to the library internals, simply including + * curl_setup.h, without actually needing to include curl.h internally. + * If some day this section would grow big enough, all this should be moved + * to its own header file. + */ + +/* + * Figure out if we can use the ## preprocessor operator, which is supported + * by ISO/ANSI C and C++. Some compilers support it without setting __STDC__ + * or __cplusplus so we need to carefully check for them too. + */ + +#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \ + defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \ + defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \ + defined(__ILEC400__) + /* This compiler is believed to have an ISO compatible preprocessor */ +#define CURL_ISOCPP +#else + /* This compiler is believed NOT to have an ISO compatible preprocessor */ +#undef CURL_ISOCPP +#endif + +/* + * Macros for minimum-width signed and unsigned curl_off_t integer constants. + */ + +#if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551) +# define CURLINC_OFF_T_C_HLPR2(x) x +# define CURLINC_OFF_T_C_HLPR1(x) CURLINC_OFF_T_C_HLPR2(x) +# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ + CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T) +# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ + CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU) +#else +# ifdef CURL_ISOCPP +# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix +# else +# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix +# endif +# define CURLINC_OFF_T_C_HLPR1(Val,Suffix) CURLINC_OFF_T_C_HLPR2(Val,Suffix) +# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T) +# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU) +#endif + +#endif /* CURLINC_SYSTEM_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/typecheck-gcc.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/typecheck-gcc.h new file mode 100644 index 0000000..b880f3d --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/typecheck-gcc.h @@ -0,0 +1,717 @@ +#ifndef CURLINC_TYPECHECK_GCC_H +#define CURLINC_TYPECHECK_GCC_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* wraps curl_easy_setopt() with typechecking */ + +/* To add a new kind of warning, add an + * if(curlcheck_sometype_option(_curl_opt)) + * if(!curlcheck_sometype(value)) + * _curl_easy_setopt_err_sometype(); + * block and define curlcheck_sometype_option, curlcheck_sometype and + * _curl_easy_setopt_err_sometype below + * + * NOTE: We use two nested 'if' statements here instead of the && operator, in + * order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x + * when compiling with -Wlogical-op. + * + * To add an option that uses the same type as an existing option, you'll just + * need to extend the appropriate _curl_*_option macro + */ +#define curl_easy_setopt(handle, option, value) \ + __extension__({ \ + CURLoption _curl_opt = (option); \ + if(__builtin_constant_p(_curl_opt)) { \ + CURL_IGNORE_DEPRECATION( \ + if(curlcheck_long_option(_curl_opt)) \ + if(!curlcheck_long(value)) \ + _curl_easy_setopt_err_long(); \ + if(curlcheck_off_t_option(_curl_opt)) \ + if(!curlcheck_off_t(value)) \ + _curl_easy_setopt_err_curl_off_t(); \ + if(curlcheck_string_option(_curl_opt)) \ + if(!curlcheck_string(value)) \ + _curl_easy_setopt_err_string(); \ + if(curlcheck_write_cb_option(_curl_opt)) \ + if(!curlcheck_write_cb(value)) \ + _curl_easy_setopt_err_write_callback(); \ + if((_curl_opt) == CURLOPT_RESOLVER_START_FUNCTION) \ + if(!curlcheck_resolver_start_callback(value)) \ + _curl_easy_setopt_err_resolver_start_callback(); \ + if((_curl_opt) == CURLOPT_READFUNCTION) \ + if(!curlcheck_read_cb(value)) \ + _curl_easy_setopt_err_read_cb(); \ + if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \ + if(!curlcheck_ioctl_cb(value)) \ + _curl_easy_setopt_err_ioctl_cb(); \ + if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \ + if(!curlcheck_sockopt_cb(value)) \ + _curl_easy_setopt_err_sockopt_cb(); \ + if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \ + if(!curlcheck_opensocket_cb(value)) \ + _curl_easy_setopt_err_opensocket_cb(); \ + if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \ + if(!curlcheck_progress_cb(value)) \ + _curl_easy_setopt_err_progress_cb(); \ + if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \ + if(!curlcheck_debug_cb(value)) \ + _curl_easy_setopt_err_debug_cb(); \ + if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \ + if(!curlcheck_ssl_ctx_cb(value)) \ + _curl_easy_setopt_err_ssl_ctx_cb(); \ + if(curlcheck_conv_cb_option(_curl_opt)) \ + if(!curlcheck_conv_cb(value)) \ + _curl_easy_setopt_err_conv_cb(); \ + if((_curl_opt) == CURLOPT_SEEKFUNCTION) \ + if(!curlcheck_seek_cb(value)) \ + _curl_easy_setopt_err_seek_cb(); \ + if(curlcheck_cb_data_option(_curl_opt)) \ + if(!curlcheck_cb_data(value)) \ + _curl_easy_setopt_err_cb_data(); \ + if((_curl_opt) == CURLOPT_ERRORBUFFER) \ + if(!curlcheck_error_buffer(value)) \ + _curl_easy_setopt_err_error_buffer(); \ + if((_curl_opt) == CURLOPT_STDERR) \ + if(!curlcheck_FILE(value)) \ + _curl_easy_setopt_err_FILE(); \ + if(curlcheck_postfields_option(_curl_opt)) \ + if(!curlcheck_postfields(value)) \ + _curl_easy_setopt_err_postfields(); \ + if((_curl_opt) == CURLOPT_HTTPPOST) \ + if(!curlcheck_arr((value), struct curl_httppost)) \ + _curl_easy_setopt_err_curl_httpost(); \ + if((_curl_opt) == CURLOPT_MIMEPOST) \ + if(!curlcheck_ptr((value), curl_mime)) \ + _curl_easy_setopt_err_curl_mimepost(); \ + if(curlcheck_slist_option(_curl_opt)) \ + if(!curlcheck_arr((value), struct curl_slist)) \ + _curl_easy_setopt_err_curl_slist(); \ + if((_curl_opt) == CURLOPT_SHARE) \ + if(!curlcheck_ptr((value), CURLSH)) \ + _curl_easy_setopt_err_CURLSH(); \ + ) \ + } \ + curl_easy_setopt(handle, _curl_opt, value); \ + }) + +/* wraps curl_easy_getinfo() with typechecking */ +#define curl_easy_getinfo(handle, info, arg) \ + __extension__({ \ + CURLINFO _curl_info = (info); \ + if(__builtin_constant_p(_curl_info)) { \ + CURL_IGNORE_DEPRECATION( \ + if(curlcheck_string_info(_curl_info)) \ + if(!curlcheck_arr((arg), char *)) \ + _curl_easy_getinfo_err_string(); \ + if(curlcheck_long_info(_curl_info)) \ + if(!curlcheck_arr((arg), long)) \ + _curl_easy_getinfo_err_long(); \ + if(curlcheck_double_info(_curl_info)) \ + if(!curlcheck_arr((arg), double)) \ + _curl_easy_getinfo_err_double(); \ + if(curlcheck_slist_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_slist *)) \ + _curl_easy_getinfo_err_curl_slist(); \ + if(curlcheck_tlssessioninfo_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_tlssessioninfo *)) \ + _curl_easy_getinfo_err_curl_tlssesssioninfo(); \ + if(curlcheck_certinfo_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_certinfo *)) \ + _curl_easy_getinfo_err_curl_certinfo(); \ + if(curlcheck_socket_info(_curl_info)) \ + if(!curlcheck_arr((arg), curl_socket_t)) \ + _curl_easy_getinfo_err_curl_socket(); \ + if(curlcheck_off_t_info(_curl_info)) \ + if(!curlcheck_arr((arg), curl_off_t)) \ + _curl_easy_getinfo_err_curl_off_t(); \ + ) \ + } \ + curl_easy_getinfo(handle, _curl_info, arg); \ + }) + +/* + * For now, just make sure that the functions are called with three arguments + */ +#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) +#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) + + +/* the actual warnings, triggered by calling the _curl_easy_setopt_err* + * functions */ + +/* To define a new warning, use _CURL_WARNING(identifier, "message") */ +#define CURLWARNING(id, message) \ + static void __attribute__((__warning__(message))) \ + __attribute__((__unused__)) __attribute__((__noinline__)) \ + id(void) { __asm__(""); } + +CURLWARNING(_curl_easy_setopt_err_long, + "curl_easy_setopt expects a long argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_off_t, + "curl_easy_setopt expects a curl_off_t argument for this option") +CURLWARNING(_curl_easy_setopt_err_string, + "curl_easy_setopt expects a " + "string ('char *' or char[]) argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_write_callback, + "curl_easy_setopt expects a curl_write_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_resolver_start_callback, + "curl_easy_setopt expects a " + "curl_resolver_start_callback argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_read_cb, + "curl_easy_setopt expects a curl_read_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_ioctl_cb, + "curl_easy_setopt expects a curl_ioctl_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_sockopt_cb, + "curl_easy_setopt expects a curl_sockopt_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_opensocket_cb, + "curl_easy_setopt expects a " + "curl_opensocket_callback argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_progress_cb, + "curl_easy_setopt expects a curl_progress_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_debug_cb, + "curl_easy_setopt expects a curl_debug_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_ssl_ctx_cb, + "curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_conv_cb, + "curl_easy_setopt expects a curl_conv_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_seek_cb, + "curl_easy_setopt expects a curl_seek_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_cb_data, + "curl_easy_setopt expects a " + "private data pointer as argument for this option") +CURLWARNING(_curl_easy_setopt_err_error_buffer, + "curl_easy_setopt expects a " + "char buffer of CURL_ERROR_SIZE as argument for this option") +CURLWARNING(_curl_easy_setopt_err_FILE, + "curl_easy_setopt expects a 'FILE *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_postfields, + "curl_easy_setopt expects a 'void *' or 'char *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_httpost, + "curl_easy_setopt expects a 'struct curl_httppost *' " + "argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_mimepost, + "curl_easy_setopt expects a 'curl_mime *' " + "argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_slist, + "curl_easy_setopt expects a 'struct curl_slist *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_CURLSH, + "curl_easy_setopt expects a CURLSH* argument for this option") + +CURLWARNING(_curl_easy_getinfo_err_string, + "curl_easy_getinfo expects a pointer to 'char *' for this info") +CURLWARNING(_curl_easy_getinfo_err_long, + "curl_easy_getinfo expects a pointer to long for this info") +CURLWARNING(_curl_easy_getinfo_err_double, + "curl_easy_getinfo expects a pointer to double for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_slist, + "curl_easy_getinfo expects a pointer to 'struct curl_slist *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_tlssesssioninfo, + "curl_easy_getinfo expects a pointer to " + "'struct curl_tlssessioninfo *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_certinfo, + "curl_easy_getinfo expects a pointer to " + "'struct curl_certinfo *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_socket, + "curl_easy_getinfo expects a pointer to curl_socket_t for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_off_t, + "curl_easy_getinfo expects a pointer to curl_off_t for this info") + +/* groups of curl_easy_setops options that take the same type of argument */ + +/* To add a new option to one of the groups, just add + * (option) == CURLOPT_SOMETHING + * to the or-expression. If the option takes a long or curl_off_t, you don't + * have to do anything + */ + +/* evaluates to true if option takes a long argument */ +#define curlcheck_long_option(option) \ + (0 < (option) && (option) < CURLOPTTYPE_OBJECTPOINT) + +#define curlcheck_off_t_option(option) \ + (((option) > CURLOPTTYPE_OFF_T) && ((option) < CURLOPTTYPE_BLOB)) + +/* evaluates to true if option takes a char* argument */ +#define curlcheck_string_option(option) \ + ((option) == CURLOPT_ABSTRACT_UNIX_SOCKET || \ + (option) == CURLOPT_ACCEPT_ENCODING || \ + (option) == CURLOPT_ALTSVC || \ + (option) == CURLOPT_CAINFO || \ + (option) == CURLOPT_CAPATH || \ + (option) == CURLOPT_COOKIE || \ + (option) == CURLOPT_COOKIEFILE || \ + (option) == CURLOPT_COOKIEJAR || \ + (option) == CURLOPT_COOKIELIST || \ + (option) == CURLOPT_CRLFILE || \ + (option) == CURLOPT_CUSTOMREQUEST || \ + (option) == CURLOPT_DEFAULT_PROTOCOL || \ + (option) == CURLOPT_DNS_INTERFACE || \ + (option) == CURLOPT_DNS_LOCAL_IP4 || \ + (option) == CURLOPT_DNS_LOCAL_IP6 || \ + (option) == CURLOPT_DNS_SERVERS || \ + (option) == CURLOPT_DOH_URL || \ + (option) == CURLOPT_EGDSOCKET || \ + (option) == CURLOPT_FTP_ACCOUNT || \ + (option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \ + (option) == CURLOPT_FTPPORT || \ + (option) == CURLOPT_HSTS || \ + (option) == CURLOPT_HAPROXY_CLIENT_IP || \ + (option) == CURLOPT_INTERFACE || \ + (option) == CURLOPT_ISSUERCERT || \ + (option) == CURLOPT_KEYPASSWD || \ + (option) == CURLOPT_KRBLEVEL || \ + (option) == CURLOPT_LOGIN_OPTIONS || \ + (option) == CURLOPT_MAIL_AUTH || \ + (option) == CURLOPT_MAIL_FROM || \ + (option) == CURLOPT_NETRC_FILE || \ + (option) == CURLOPT_NOPROXY || \ + (option) == CURLOPT_PASSWORD || \ + (option) == CURLOPT_PINNEDPUBLICKEY || \ + (option) == CURLOPT_PRE_PROXY || \ + (option) == CURLOPT_PROTOCOLS_STR || \ + (option) == CURLOPT_PROXY || \ + (option) == CURLOPT_PROXY_CAINFO || \ + (option) == CURLOPT_PROXY_CAPATH || \ + (option) == CURLOPT_PROXY_CRLFILE || \ + (option) == CURLOPT_PROXY_ISSUERCERT || \ + (option) == CURLOPT_PROXY_KEYPASSWD || \ + (option) == CURLOPT_PROXY_PINNEDPUBLICKEY || \ + (option) == CURLOPT_PROXY_SERVICE_NAME || \ + (option) == CURLOPT_PROXY_SSL_CIPHER_LIST || \ + (option) == CURLOPT_PROXY_SSLCERT || \ + (option) == CURLOPT_PROXY_SSLCERTTYPE || \ + (option) == CURLOPT_PROXY_SSLKEY || \ + (option) == CURLOPT_PROXY_SSLKEYTYPE || \ + (option) == CURLOPT_PROXY_TLS13_CIPHERS || \ + (option) == CURLOPT_PROXY_TLSAUTH_PASSWORD || \ + (option) == CURLOPT_PROXY_TLSAUTH_TYPE || \ + (option) == CURLOPT_PROXY_TLSAUTH_USERNAME || \ + (option) == CURLOPT_PROXYPASSWORD || \ + (option) == CURLOPT_PROXYUSERNAME || \ + (option) == CURLOPT_PROXYUSERPWD || \ + (option) == CURLOPT_RANDOM_FILE || \ + (option) == CURLOPT_RANGE || \ + (option) == CURLOPT_REDIR_PROTOCOLS_STR || \ + (option) == CURLOPT_REFERER || \ + (option) == CURLOPT_REQUEST_TARGET || \ + (option) == CURLOPT_RTSP_SESSION_ID || \ + (option) == CURLOPT_RTSP_STREAM_URI || \ + (option) == CURLOPT_RTSP_TRANSPORT || \ + (option) == CURLOPT_SASL_AUTHZID || \ + (option) == CURLOPT_SERVICE_NAME || \ + (option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \ + (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \ + (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 || \ + (option) == CURLOPT_SSH_KNOWNHOSTS || \ + (option) == CURLOPT_SSH_PRIVATE_KEYFILE || \ + (option) == CURLOPT_SSH_PUBLIC_KEYFILE || \ + (option) == CURLOPT_SSLCERT || \ + (option) == CURLOPT_SSLCERTTYPE || \ + (option) == CURLOPT_SSLENGINE || \ + (option) == CURLOPT_SSLKEY || \ + (option) == CURLOPT_SSLKEYTYPE || \ + (option) == CURLOPT_SSL_CIPHER_LIST || \ + (option) == CURLOPT_TLS13_CIPHERS || \ + (option) == CURLOPT_TLSAUTH_PASSWORD || \ + (option) == CURLOPT_TLSAUTH_TYPE || \ + (option) == CURLOPT_TLSAUTH_USERNAME || \ + (option) == CURLOPT_UNIX_SOCKET_PATH || \ + (option) == CURLOPT_URL || \ + (option) == CURLOPT_USERAGENT || \ + (option) == CURLOPT_USERNAME || \ + (option) == CURLOPT_AWS_SIGV4 || \ + (option) == CURLOPT_USERPWD || \ + (option) == CURLOPT_XOAUTH2_BEARER || \ + (option) == CURLOPT_SSL_EC_CURVES || \ + 0) + +/* evaluates to true if option takes a curl_write_callback argument */ +#define curlcheck_write_cb_option(option) \ + ((option) == CURLOPT_HEADERFUNCTION || \ + (option) == CURLOPT_WRITEFUNCTION) + +/* evaluates to true if option takes a curl_conv_callback argument */ +#define curlcheck_conv_cb_option(option) \ + ((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION || \ + (option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION || \ + (option) == CURLOPT_CONV_FROM_UTF8_FUNCTION) + +/* evaluates to true if option takes a data argument to pass to a callback */ +#define curlcheck_cb_data_option(option) \ + ((option) == CURLOPT_CHUNK_DATA || \ + (option) == CURLOPT_CLOSESOCKETDATA || \ + (option) == CURLOPT_DEBUGDATA || \ + (option) == CURLOPT_FNMATCH_DATA || \ + (option) == CURLOPT_HEADERDATA || \ + (option) == CURLOPT_HSTSREADDATA || \ + (option) == CURLOPT_HSTSWRITEDATA || \ + (option) == CURLOPT_INTERLEAVEDATA || \ + (option) == CURLOPT_IOCTLDATA || \ + (option) == CURLOPT_OPENSOCKETDATA || \ + (option) == CURLOPT_PREREQDATA || \ + (option) == CURLOPT_PROGRESSDATA || \ + (option) == CURLOPT_READDATA || \ + (option) == CURLOPT_SEEKDATA || \ + (option) == CURLOPT_SOCKOPTDATA || \ + (option) == CURLOPT_SSH_KEYDATA || \ + (option) == CURLOPT_SSL_CTX_DATA || \ + (option) == CURLOPT_WRITEDATA || \ + (option) == CURLOPT_RESOLVER_START_DATA || \ + (option) == CURLOPT_TRAILERDATA || \ + (option) == CURLOPT_SSH_HOSTKEYDATA || \ + 0) + +/* evaluates to true if option takes a POST data argument (void* or char*) */ +#define curlcheck_postfields_option(option) \ + ((option) == CURLOPT_POSTFIELDS || \ + (option) == CURLOPT_COPYPOSTFIELDS || \ + 0) + +/* evaluates to true if option takes a struct curl_slist * argument */ +#define curlcheck_slist_option(option) \ + ((option) == CURLOPT_HTTP200ALIASES || \ + (option) == CURLOPT_HTTPHEADER || \ + (option) == CURLOPT_MAIL_RCPT || \ + (option) == CURLOPT_POSTQUOTE || \ + (option) == CURLOPT_PREQUOTE || \ + (option) == CURLOPT_PROXYHEADER || \ + (option) == CURLOPT_QUOTE || \ + (option) == CURLOPT_RESOLVE || \ + (option) == CURLOPT_TELNETOPTIONS || \ + (option) == CURLOPT_CONNECT_TO || \ + 0) + +/* groups of curl_easy_getinfo infos that take the same type of argument */ + +/* evaluates to true if info expects a pointer to char * argument */ +#define curlcheck_string_info(info) \ + (CURLINFO_STRING < (info) && (info) < CURLINFO_LONG && \ + (info) != CURLINFO_PRIVATE) + +/* evaluates to true if info expects a pointer to long argument */ +#define curlcheck_long_info(info) \ + (CURLINFO_LONG < (info) && (info) < CURLINFO_DOUBLE) + +/* evaluates to true if info expects a pointer to double argument */ +#define curlcheck_double_info(info) \ + (CURLINFO_DOUBLE < (info) && (info) < CURLINFO_SLIST) + +/* true if info expects a pointer to struct curl_slist * argument */ +#define curlcheck_slist_info(info) \ + (((info) == CURLINFO_SSL_ENGINES) || ((info) == CURLINFO_COOKIELIST)) + +/* true if info expects a pointer to struct curl_tlssessioninfo * argument */ +#define curlcheck_tlssessioninfo_info(info) \ + (((info) == CURLINFO_TLS_SSL_PTR) || ((info) == CURLINFO_TLS_SESSION)) + +/* true if info expects a pointer to struct curl_certinfo * argument */ +#define curlcheck_certinfo_info(info) ((info) == CURLINFO_CERTINFO) + +/* true if info expects a pointer to struct curl_socket_t argument */ +#define curlcheck_socket_info(info) \ + (CURLINFO_SOCKET < (info) && (info) < CURLINFO_OFF_T) + +/* true if info expects a pointer to curl_off_t argument */ +#define curlcheck_off_t_info(info) \ + (CURLINFO_OFF_T < (info)) + + +/* typecheck helpers -- check whether given expression has requested type */ + +/* For pointers, you can use the curlcheck_ptr/curlcheck_arr macros, + * otherwise define a new macro. Search for __builtin_types_compatible_p + * in the GCC manual. + * NOTE: these macros MUST NOT EVALUATE their arguments! The argument is + * the actual expression passed to the curl_easy_setopt macro. This + * means that you can only apply the sizeof and __typeof__ operators, no + * == or whatsoever. + */ + +/* XXX: should evaluate to true if expr is a pointer */ +#define curlcheck_any_ptr(expr) \ + (sizeof(expr) == sizeof(void *)) + +/* evaluates to true if expr is NULL */ +/* XXX: must not evaluate expr, so this check is not accurate */ +#define curlcheck_NULL(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), __typeof__(NULL))) + +/* evaluates to true if expr is type*, const type* or NULL */ +#define curlcheck_ptr(expr, type) \ + (curlcheck_NULL(expr) || \ + __builtin_types_compatible_p(__typeof__(expr), type *) || \ + __builtin_types_compatible_p(__typeof__(expr), const type *)) + +/* evaluates to true if expr is one of type[], type*, NULL or const type* */ +#define curlcheck_arr(expr, type) \ + (curlcheck_ptr((expr), type) || \ + __builtin_types_compatible_p(__typeof__(expr), type [])) + +/* evaluates to true if expr is a string */ +#define curlcheck_string(expr) \ + (curlcheck_arr((expr), char) || \ + curlcheck_arr((expr), signed char) || \ + curlcheck_arr((expr), unsigned char)) + +/* evaluates to true if expr is a long (no matter the signedness) + * XXX: for now, int is also accepted (and therefore short and char, which + * are promoted to int when passed to a variadic function) */ +#define curlcheck_long(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), long) || \ + __builtin_types_compatible_p(__typeof__(expr), signed long) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned long) || \ + __builtin_types_compatible_p(__typeof__(expr), int) || \ + __builtin_types_compatible_p(__typeof__(expr), signed int) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned int) || \ + __builtin_types_compatible_p(__typeof__(expr), short) || \ + __builtin_types_compatible_p(__typeof__(expr), signed short) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned short) || \ + __builtin_types_compatible_p(__typeof__(expr), char) || \ + __builtin_types_compatible_p(__typeof__(expr), signed char) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned char)) + +/* evaluates to true if expr is of type curl_off_t */ +#define curlcheck_off_t(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), curl_off_t)) + +/* evaluates to true if expr is abuffer suitable for CURLOPT_ERRORBUFFER */ +/* XXX: also check size of an char[] array? */ +#define curlcheck_error_buffer(expr) \ + (curlcheck_NULL(expr) || \ + __builtin_types_compatible_p(__typeof__(expr), char *) || \ + __builtin_types_compatible_p(__typeof__(expr), char[])) + +/* evaluates to true if expr is of type (const) void* or (const) FILE* */ +#if 0 +#define curlcheck_cb_data(expr) \ + (curlcheck_ptr((expr), void) || \ + curlcheck_ptr((expr), FILE)) +#else /* be less strict */ +#define curlcheck_cb_data(expr) \ + curlcheck_any_ptr(expr) +#endif + +/* evaluates to true if expr is of type FILE* */ +#define curlcheck_FILE(expr) \ + (curlcheck_NULL(expr) || \ + (__builtin_types_compatible_p(__typeof__(expr), FILE *))) + +/* evaluates to true if expr can be passed as POST data (void* or char*) */ +#define curlcheck_postfields(expr) \ + (curlcheck_ptr((expr), void) || \ + curlcheck_arr((expr), char) || \ + curlcheck_arr((expr), unsigned char)) + +/* helper: __builtin_types_compatible_p distinguishes between functions and + * function pointers, hide it */ +#define curlcheck_cb_compatible(func, type) \ + (__builtin_types_compatible_p(__typeof__(func), type) || \ + __builtin_types_compatible_p(__typeof__(func) *, type)) + +/* evaluates to true if expr is of type curl_resolver_start_callback */ +#define curlcheck_resolver_start_callback(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_resolver_start_callback)) + +/* evaluates to true if expr is of type curl_read_callback or "similar" */ +#define curlcheck_read_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), __typeof__(fread) *) || \ + curlcheck_cb_compatible((expr), curl_read_callback) || \ + curlcheck_cb_compatible((expr), _curl_read_callback1) || \ + curlcheck_cb_compatible((expr), _curl_read_callback2) || \ + curlcheck_cb_compatible((expr), _curl_read_callback3) || \ + curlcheck_cb_compatible((expr), _curl_read_callback4) || \ + curlcheck_cb_compatible((expr), _curl_read_callback5) || \ + curlcheck_cb_compatible((expr), _curl_read_callback6)) +typedef size_t (*_curl_read_callback1)(char *, size_t, size_t, void *); +typedef size_t (*_curl_read_callback2)(char *, size_t, size_t, const void *); +typedef size_t (*_curl_read_callback3)(char *, size_t, size_t, FILE *); +typedef size_t (*_curl_read_callback4)(void *, size_t, size_t, void *); +typedef size_t (*_curl_read_callback5)(void *, size_t, size_t, const void *); +typedef size_t (*_curl_read_callback6)(void *, size_t, size_t, FILE *); + +/* evaluates to true if expr is of type curl_write_callback or "similar" */ +#define curlcheck_write_cb(expr) \ + (curlcheck_read_cb(expr) || \ + curlcheck_cb_compatible((expr), __typeof__(fwrite) *) || \ + curlcheck_cb_compatible((expr), curl_write_callback) || \ + curlcheck_cb_compatible((expr), _curl_write_callback1) || \ + curlcheck_cb_compatible((expr), _curl_write_callback2) || \ + curlcheck_cb_compatible((expr), _curl_write_callback3) || \ + curlcheck_cb_compatible((expr), _curl_write_callback4) || \ + curlcheck_cb_compatible((expr), _curl_write_callback5) || \ + curlcheck_cb_compatible((expr), _curl_write_callback6)) +typedef size_t (*_curl_write_callback1)(const char *, size_t, size_t, void *); +typedef size_t (*_curl_write_callback2)(const char *, size_t, size_t, + const void *); +typedef size_t (*_curl_write_callback3)(const char *, size_t, size_t, FILE *); +typedef size_t (*_curl_write_callback4)(const void *, size_t, size_t, void *); +typedef size_t (*_curl_write_callback5)(const void *, size_t, size_t, + const void *); +typedef size_t (*_curl_write_callback6)(const void *, size_t, size_t, FILE *); + +/* evaluates to true if expr is of type curl_ioctl_callback or "similar" */ +#define curlcheck_ioctl_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_ioctl_callback) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback1) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback2) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback3) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback4)) +typedef curlioerr (*_curl_ioctl_callback1)(CURL *, int, void *); +typedef curlioerr (*_curl_ioctl_callback2)(CURL *, int, const void *); +typedef curlioerr (*_curl_ioctl_callback3)(CURL *, curliocmd, void *); +typedef curlioerr (*_curl_ioctl_callback4)(CURL *, curliocmd, const void *); + +/* evaluates to true if expr is of type curl_sockopt_callback or "similar" */ +#define curlcheck_sockopt_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_sockopt_callback) || \ + curlcheck_cb_compatible((expr), _curl_sockopt_callback1) || \ + curlcheck_cb_compatible((expr), _curl_sockopt_callback2)) +typedef int (*_curl_sockopt_callback1)(void *, curl_socket_t, curlsocktype); +typedef int (*_curl_sockopt_callback2)(const void *, curl_socket_t, + curlsocktype); + +/* evaluates to true if expr is of type curl_opensocket_callback or + "similar" */ +#define curlcheck_opensocket_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_opensocket_callback) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback1) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback2) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback3) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback4)) +typedef curl_socket_t (*_curl_opensocket_callback1) + (void *, curlsocktype, struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback2) + (void *, curlsocktype, const struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback3) + (const void *, curlsocktype, struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback4) + (const void *, curlsocktype, const struct curl_sockaddr *); + +/* evaluates to true if expr is of type curl_progress_callback or "similar" */ +#define curlcheck_progress_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_progress_callback) || \ + curlcheck_cb_compatible((expr), _curl_progress_callback1) || \ + curlcheck_cb_compatible((expr), _curl_progress_callback2)) +typedef int (*_curl_progress_callback1)(void *, + double, double, double, double); +typedef int (*_curl_progress_callback2)(const void *, + double, double, double, double); + +/* evaluates to true if expr is of type curl_debug_callback or "similar" */ +#define curlcheck_debug_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_debug_callback) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback1) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback2) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback3) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback4) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback5) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback6) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback7) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback8)) +typedef int (*_curl_debug_callback1) (CURL *, + curl_infotype, char *, size_t, void *); +typedef int (*_curl_debug_callback2) (CURL *, + curl_infotype, char *, size_t, const void *); +typedef int (*_curl_debug_callback3) (CURL *, + curl_infotype, const char *, size_t, void *); +typedef int (*_curl_debug_callback4) (CURL *, + curl_infotype, const char *, size_t, const void *); +typedef int (*_curl_debug_callback5) (CURL *, + curl_infotype, unsigned char *, size_t, void *); +typedef int (*_curl_debug_callback6) (CURL *, + curl_infotype, unsigned char *, size_t, const void *); +typedef int (*_curl_debug_callback7) (CURL *, + curl_infotype, const unsigned char *, size_t, void *); +typedef int (*_curl_debug_callback8) (CURL *, + curl_infotype, const unsigned char *, size_t, const void *); + +/* evaluates to true if expr is of type curl_ssl_ctx_callback or "similar" */ +/* this is getting even messier... */ +#define curlcheck_ssl_ctx_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_ssl_ctx_callback) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback1) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback2) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback3) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback4) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback5) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback6) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback7) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback8)) +typedef CURLcode (*_curl_ssl_ctx_callback1)(CURL *, void *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback2)(CURL *, void *, const void *); +typedef CURLcode (*_curl_ssl_ctx_callback3)(CURL *, const void *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback4)(CURL *, const void *, + const void *); +#ifdef HEADER_SSL_H +/* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX + * this will of course break if we're included before OpenSSL headers... + */ +typedef CURLcode (*_curl_ssl_ctx_callback5)(CURL *, SSL_CTX *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback6)(CURL *, SSL_CTX *, const void *); +typedef CURLcode (*_curl_ssl_ctx_callback7)(CURL *, const SSL_CTX *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback8)(CURL *, const SSL_CTX *, + const void *); +#else +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback5; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback6; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback7; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8; +#endif + +/* evaluates to true if expr is of type curl_conv_callback or "similar" */ +#define curlcheck_conv_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_conv_callback) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback1) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback2) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback3) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback4)) +typedef CURLcode (*_curl_conv_callback1)(char *, size_t length); +typedef CURLcode (*_curl_conv_callback2)(const char *, size_t length); +typedef CURLcode (*_curl_conv_callback3)(void *, size_t length); +typedef CURLcode (*_curl_conv_callback4)(const void *, size_t length); + +/* evaluates to true if expr is of type curl_seek_callback or "similar" */ +#define curlcheck_seek_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_seek_callback) || \ + curlcheck_cb_compatible((expr), _curl_seek_callback1) || \ + curlcheck_cb_compatible((expr), _curl_seek_callback2)) +typedef CURLcode (*_curl_seek_callback1)(void *, curl_off_t, int); +typedef CURLcode (*_curl_seek_callback2)(const void *, curl_off_t, int); + + +#endif /* CURLINC_TYPECHECK_GCC_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/urlapi.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/urlapi.h new file mode 100644 index 0000000..88cdeb3 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/urlapi.h @@ -0,0 +1,150 @@ +#ifndef CURLINC_URLAPI_H +#define CURLINC_URLAPI_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include "curl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* the error codes for the URL API */ +typedef enum { + CURLUE_OK, + CURLUE_BAD_HANDLE, /* 1 */ + CURLUE_BAD_PARTPOINTER, /* 2 */ + CURLUE_MALFORMED_INPUT, /* 3 */ + CURLUE_BAD_PORT_NUMBER, /* 4 */ + CURLUE_UNSUPPORTED_SCHEME, /* 5 */ + CURLUE_URLDECODE, /* 6 */ + CURLUE_OUT_OF_MEMORY, /* 7 */ + CURLUE_USER_NOT_ALLOWED, /* 8 */ + CURLUE_UNKNOWN_PART, /* 9 */ + CURLUE_NO_SCHEME, /* 10 */ + CURLUE_NO_USER, /* 11 */ + CURLUE_NO_PASSWORD, /* 12 */ + CURLUE_NO_OPTIONS, /* 13 */ + CURLUE_NO_HOST, /* 14 */ + CURLUE_NO_PORT, /* 15 */ + CURLUE_NO_QUERY, /* 16 */ + CURLUE_NO_FRAGMENT, /* 17 */ + CURLUE_NO_ZONEID, /* 18 */ + CURLUE_BAD_FILE_URL, /* 19 */ + CURLUE_BAD_FRAGMENT, /* 20 */ + CURLUE_BAD_HOSTNAME, /* 21 */ + CURLUE_BAD_IPV6, /* 22 */ + CURLUE_BAD_LOGIN, /* 23 */ + CURLUE_BAD_PASSWORD, /* 24 */ + CURLUE_BAD_PATH, /* 25 */ + CURLUE_BAD_QUERY, /* 26 */ + CURLUE_BAD_SCHEME, /* 27 */ + CURLUE_BAD_SLASHES, /* 28 */ + CURLUE_BAD_USER, /* 29 */ + CURLUE_LACKS_IDN, /* 30 */ + CURLUE_LAST +} CURLUcode; + +typedef enum { + CURLUPART_URL, + CURLUPART_SCHEME, + CURLUPART_USER, + CURLUPART_PASSWORD, + CURLUPART_OPTIONS, + CURLUPART_HOST, + CURLUPART_PORT, + CURLUPART_PATH, + CURLUPART_QUERY, + CURLUPART_FRAGMENT, + CURLUPART_ZONEID /* added in 7.65.0 */ +} CURLUPart; + +#define CURLU_DEFAULT_PORT (1<<0) /* return default port number */ +#define CURLU_NO_DEFAULT_PORT (1<<1) /* act as if no port number was set, + if the port number matches the + default for the scheme */ +#define CURLU_DEFAULT_SCHEME (1<<2) /* return default scheme if + missing */ +#define CURLU_NON_SUPPORT_SCHEME (1<<3) /* allow non-supported scheme */ +#define CURLU_PATH_AS_IS (1<<4) /* leave dot sequences */ +#define CURLU_DISALLOW_USER (1<<5) /* no user+password allowed */ +#define CURLU_URLDECODE (1<<6) /* URL decode on get */ +#define CURLU_URLENCODE (1<<7) /* URL encode on set */ +#define CURLU_APPENDQUERY (1<<8) /* append a form style part */ +#define CURLU_GUESS_SCHEME (1<<9) /* legacy curl-style guessing */ +#define CURLU_NO_AUTHORITY (1<<10) /* Allow empty authority when the + scheme is unknown. */ +#define CURLU_ALLOW_SPACE (1<<11) /* Allow spaces in the URL */ +#define CURLU_PUNYCODE (1<<12) /* get the host name in punycode */ +#define CURLU_PUNY2IDN (1<<13) /* punycode => IDN conversion */ + +typedef struct Curl_URL CURLU; + +/* + * curl_url() creates a new CURLU handle and returns a pointer to it. + * Must be freed with curl_url_cleanup(). + */ +CURL_EXTERN CURLU *curl_url(void); + +/* + * curl_url_cleanup() frees the CURLU handle and related resources used for + * the URL parsing. It will not free strings previously returned with the URL + * API. + */ +CURL_EXTERN void curl_url_cleanup(CURLU *handle); + +/* + * curl_url_dup() duplicates a CURLU handle and returns a new copy. The new + * handle must also be freed with curl_url_cleanup(). + */ +CURL_EXTERN CURLU *curl_url_dup(const CURLU *in); + +/* + * curl_url_get() extracts a specific part of the URL from a CURLU + * handle. Returns error code. The returned pointer MUST be freed with + * curl_free() afterwards. + */ +CURL_EXTERN CURLUcode curl_url_get(const CURLU *handle, CURLUPart what, + char **part, unsigned int flags); + +/* + * curl_url_set() sets a specific part of the URL in a CURLU handle. Returns + * error code. The passed in string will be copied. Passing a NULL instead of + * a part string, clears that part. + */ +CURL_EXTERN CURLUcode curl_url_set(CURLU *handle, CURLUPart what, + const char *part, unsigned int flags); + +/* + * curl_url_strerror() turns a CURLUcode value into the equivalent human + * readable error string. This is useful for printing meaningful error + * messages. + */ +CURL_EXTERN const char *curl_url_strerror(CURLUcode); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_URLAPI_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/websockets.h b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/websockets.h new file mode 100644 index 0000000..6ef6a2b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/include/curl/websockets.h @@ -0,0 +1,84 @@ +#ifndef CURLINC_WEBSOCKETS_H +#define CURLINC_WEBSOCKETS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +struct curl_ws_frame { + int age; /* zero */ + int flags; /* See the CURLWS_* defines */ + curl_off_t offset; /* the offset of this data into the frame */ + curl_off_t bytesleft; /* number of pending bytes left of the payload */ + size_t len; /* size of the current data chunk */ +}; + +/* flag bits */ +#define CURLWS_TEXT (1<<0) +#define CURLWS_BINARY (1<<1) +#define CURLWS_CONT (1<<2) +#define CURLWS_CLOSE (1<<3) +#define CURLWS_PING (1<<4) +#define CURLWS_OFFSET (1<<5) + +/* + * NAME curl_ws_recv() + * + * DESCRIPTION + * + * Receives data from the websocket connection. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen, + size_t *recv, + const struct curl_ws_frame **metap); + +/* flags for curl_ws_send() */ +#define CURLWS_PONG (1<<6) + +/* + * NAME curl_ws_send() + * + * DESCRIPTION + * + * Sends data over the websocket connection. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_ws_send(CURL *curl, const void *buffer, + size_t buflen, size_t *sent, + curl_off_t fragsize, + unsigned int flags); + +/* bits for the CURLOPT_WS_OPTIONS bitmask: */ +#define CURLWS_RAW_MODE (1<<0) + +CURL_EXTERN const struct curl_ws_frame *curl_ws_meta(CURL *curl); + +#ifdef __cplusplus +} +#endif + +#endif /* CURLINC_WEBSOCKETS_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLConfig.cmake b/packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLConfig.cmake new file mode 100644 index 0000000..5349512 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLConfig.cmake @@ -0,0 +1,62 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() ####### +####### Any changes to this file will be overwritten by the next CMake run #### +####### The input file was curl-config.cmake.in ######## + +get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE) + +macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() +endmacro() + +macro(check_required_components _NAME) + foreach(comp ${${_NAME}_FIND_COMPONENTS}) + if(NOT ${_NAME}_${comp}_FOUND) + if(${_NAME}_FIND_REQUIRED_${comp}) + set(${_NAME}_FOUND FALSE) + endif() + endif() + endforeach() +endmacro() + +#################################################################################### + +include(CMakeFindDependencyMacro) +if() + find_dependency(OpenSSL ) +endif() +if(OFF) + find_dependency(ZLIB ) +endif() + +include("${CMAKE_CURRENT_LIST_DIR}/CURLTargets.cmake") +check_required_components("CURL") + +# Alias for either shared or static library +add_library(CURL::libcurl ALIAS CURL::libcurl_shared) diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLConfigVersion.cmake b/packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLConfigVersion.cmake new file mode 100644 index 0000000..91490ee --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLConfigVersion.cmake @@ -0,0 +1,70 @@ +if(NOT PACKAGE_FIND_VERSION_RANGE AND PACKAGE_FIND_VERSION_MAJOR STREQUAL "7") + # Version 8 satisfies version 7... requirements + set(PACKAGE_FIND_VERSION_MAJOR 8) + set(PACKAGE_FIND_VERSION_COUNT 1) +endif() +# This is a basic version file for the Config-mode of find_package(). +# It is used by write_basic_package_version_file() as input file for configure_file() +# to create a version-file which can be installed along a config.cmake file. +# +# The created file sets PACKAGE_VERSION_EXACT if the current version string and +# the requested version string are exactly the same and it sets +# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version, +# but only if the requested major version is the same as the current one. +# The variable CVF_VERSION must be set before calling configure_file(). + + +set(PACKAGE_VERSION "8.4.0") + +if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + + if("8.4.0" MATCHES "^([0-9]+)\\.") + set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}") + if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0) + string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}") + endif() + else() + set(CVF_VERSION_MAJOR "8.4.0") + endif() + + if(PACKAGE_FIND_VERSION_RANGE) + # both endpoints of the range must have the expected major version + math (EXPR CVF_VERSION_MAJOR_NEXT "${CVF_VERSION_MAJOR} + 1") + if (NOT PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR + OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX_MAJOR STREQUAL CVF_VERSION_MAJOR) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX VERSION_LESS_EQUAL CVF_VERSION_MAJOR_NEXT))) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + elseif(PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR + AND ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS_EQUAL PACKAGE_FIND_VERSION_MAX) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MAX))) + set(PACKAGE_VERSION_COMPATIBLE TRUE) + else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) + endif() + else() + if(PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR) + set(PACKAGE_VERSION_COMPATIBLE TRUE) + else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) + endif() + + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() + endif() +endif() + + +# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "4" STREQUAL "") + return() +endif() + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "4") + math(EXPR installedBits "4 * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLTargets-debug.cmake b/packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLTargets-debug.cmake new file mode 100644 index 0000000..437d191 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLTargets-debug.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file for configuration "Debug". +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "CURL::libcurl_shared" for configuration "Debug" +set_property(TARGET CURL::libcurl_shared APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) +set_target_properties(CURL::libcurl_shared PROPERTIES + IMPORTED_IMPLIB_DEBUG "${_IMPORT_PREFIX}/lib/libcurl-d_imp.lib" + IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/bin/libcurl-d.dll" + ) + +list(APPEND _cmake_import_check_targets CURL::libcurl_shared ) +list(APPEND _cmake_import_check_files_for_CURL::libcurl_shared "${_IMPORT_PREFIX}/lib/libcurl-d_imp.lib" "${_IMPORT_PREFIX}/bin/libcurl-d.dll" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLTargets-release.cmake b/packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLTargets-release.cmake new file mode 100644 index 0000000..e80df75 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLTargets-release.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file for configuration "Release". +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "CURL::libcurl_shared" for configuration "Release" +set_property(TARGET CURL::libcurl_shared APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(CURL::libcurl_shared PROPERTIES + IMPORTED_IMPLIB_RELEASE "${_IMPORT_PREFIX}/lib/libcurl_imp.lib" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/libcurl.dll" + ) + +list(APPEND _cmake_import_check_targets CURL::libcurl_shared ) +list(APPEND _cmake_import_check_files_for_CURL::libcurl_shared "${_IMPORT_PREFIX}/lib/libcurl_imp.lib" "${_IMPORT_PREFIX}/bin/libcurl.dll" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLTargets.cmake b/packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLTargets.cmake new file mode 100644 index 0000000..64a4edd --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/lib/cmake/CURL/CURLTargets.cmake @@ -0,0 +1,102 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8) + message(FATAL_ERROR "CMake >= 2.8.0 required") +endif() +if(CMAKE_VERSION VERSION_LESS "2.8.3") + message(FATAL_ERROR "CMake >= 2.8.3 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.8.3...3.25) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_cmake_targets_defined "") +set(_cmake_targets_not_defined "") +set(_cmake_expected_targets "") +foreach(_cmake_expected_target IN ITEMS CURL::libcurl_shared) + list(APPEND _cmake_expected_targets "${_cmake_expected_target}") + if(TARGET "${_cmake_expected_target}") + list(APPEND _cmake_targets_defined "${_cmake_expected_target}") + else() + list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}") + endif() +endforeach() +unset(_cmake_expected_target) +if(_cmake_targets_defined STREQUAL _cmake_expected_targets) + unset(_cmake_targets_defined) + unset(_cmake_targets_not_defined) + unset(_cmake_expected_targets) + unset(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT _cmake_targets_defined STREQUAL "") + string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}") + string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n") +endif() +unset(_cmake_targets_defined) +unset(_cmake_targets_not_defined) +unset(_cmake_expected_targets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target CURL::libcurl_shared +add_library(CURL::libcurl_shared SHARED IMPORTED) + +set_target_properties(CURL::libcurl_shared PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +# Load information for each installed configuration. +file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/CURLTargets-*.cmake") +foreach(_cmake_config_file IN LISTS _cmake_config_files) + include("${_cmake_config_file}") +endforeach() +unset(_cmake_config_file) +unset(_cmake_config_files) + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(_cmake_target IN LISTS _cmake_import_check_targets) + foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}") + if(NOT EXISTS "${_cmake_file}") + message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file + \"${_cmake_file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_cmake_file) + unset("_cmake_import_check_files_for_${_cmake_target}") +endforeach() +unset(_cmake_target) +unset(_cmake_import_check_targets) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/packages/libcpr.1.10.5/build/native/x86/Debug/lib/pkgconfig/libcurl.pc b/packages/libcpr.1.10.5/build/native/x86/Debug/lib/pkgconfig/libcurl.pc new file mode 100644 index 0000000..5d808fc --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Debug/lib/pkgconfig/libcurl.pc @@ -0,0 +1,41 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +# This should most probably benefit from getting a "Requires:" field added +# dynamically by configure. +# +prefix=C:/Program Files (x86)/cpr +exec_prefix=${prefix} +libdir=C:/Program Files (x86)/cpr/lib +includedir=${prefix}/include +supported_protocols="HTTP HTTPS" +supported_features="SSL IPv6 unixsockets AsynchDNS Largefile SSPI alt-svc HSTS SPNEGO Kerberos NTLM HTTPS-proxy threadsafe" + +Name: libcurl +URL: https://curl.se/ +Description: Library to transfer files with ftp, http, etc. +Version: 8.4.0 +Libs: -L${libdir} -lcurl +Libs.private: -lws2_32 -ladvapi32 -lcrypt32 -lbcrypt +Cflags: -I${includedir} diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/bin/curl-config b/packages/libcpr.1.10.5/build/native/x86/Release/bin/curl-config new file mode 100644 index 0000000..d235fbd --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/bin/curl-config @@ -0,0 +1,196 @@ +#! /bin/sh +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +prefix="C:/Program Files (x86)/cpr" +exec_prefix=${prefix} +includedir=${prefix}/include +cppflag_curl_staticlib= + +usage() +{ + cat <&2 + exit 1 + fi + ;; + + --configure) + echo + ;; + + *) + echo "unknown option: $1" + usage 1 + ;; + esac + shift +done + +exit 0 diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/accept_encoding.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/accept_encoding.h new file mode 100644 index 0000000..167d7c2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/accept_encoding.h @@ -0,0 +1,41 @@ +#ifndef CPR_ACCEPT_ENCODING_H +#define CPR_ACCEPT_ENCODING_H + +#include +#include +#include +#include +#include + +namespace cpr { + +enum class AcceptEncodingMethods { + identity, + deflate, + zlib, + gzip, + disabled, +}; + +// NOLINTNEXTLINE(cert-err58-cpp) +static const std::map AcceptEncodingMethodsStringMap{{AcceptEncodingMethods::identity, "identity"}, {AcceptEncodingMethods::deflate, "deflate"}, {AcceptEncodingMethods::zlib, "zlib"}, {AcceptEncodingMethods::gzip, "gzip"}, {AcceptEncodingMethods::disabled, "disabled"}}; + +class AcceptEncoding { + public: + AcceptEncoding() = default; + // NOLINTNEXTLINE(google-explicit-constructor) + AcceptEncoding(const std::initializer_list& methods); + // NOLINTNEXTLINE(google-explicit-constructor) + AcceptEncoding(const std::initializer_list& methods); + + [[nodiscard]] bool empty() const noexcept; + [[nodiscard]] const std::string getString() const; + [[nodiscard]] bool disabled() const; + + private: + std::unordered_set methods_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/api.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/api.h new file mode 100644 index 0000000..ba9c64e --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/api.h @@ -0,0 +1,392 @@ +#ifndef CPR_API_H +#define CPR_API_H + +#include +#include +#include +#include +#include + +#include "cpr/async.h" +#include "cpr/async_wrapper.h" +#include "cpr/auth.h" +#include "cpr/bearer.h" +#include "cpr/cprtypes.h" +#include "cpr/multipart.h" +#include "cpr/multiperform.h" +#include "cpr/payload.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include + +namespace cpr { + +using AsyncResponse = AsyncWrapper; + +namespace priv { + +template +void set_option_internal(Session& session, CurrentType&& current_option) { + session.SetOption(std::forward(current_option)); +} + +template <> +inline void set_option_internal(Session& session, Header&& current_option) { + // Header option was already provided -> Update previous header + session.UpdateHeader(std::forward
(current_option)); +} + +template +void set_option_internal(Session& session, CurrentType&& current_option, Ts&&... ts) { + set_option_internal(session, std::forward(current_option)); + + if (std::is_same::value) { + set_option_internal(session, std::forward(ts)...); + } else { + set_option_internal(session, std::forward(ts)...); + } +} + +template +void set_option(Session& session, Ts&&... ts) { + set_option_internal(session, std::forward(ts)...); +} + +// Idea: https://stackoverflow.com/a/19060157 +template +void apply_set_option_internal(Session& session, Tuple&& t, std::index_sequence) { + set_option(session, std::get(std::forward(t))...); +} + +// Idea: https://stackoverflow.com/a/19060157 +template +void apply_set_option(Session& session, Tuple&& t) { + using Indices = std::make_index_sequence>::value>; + apply_set_option_internal(session, std::forward(t), Indices()); +} + +template +void setup_multiperform_internal(MultiPerform& multiperform, T&& t) { + std::shared_ptr session = std::make_shared(); + apply_set_option(*session, t); + multiperform.AddSession(session); +} + +template +void setup_multiperform_internal(MultiPerform& multiperform, T&& t, Ts&&... ts) { + std::shared_ptr session = std::make_shared(); + apply_set_option(*session, t); + multiperform.AddSession(session); + setup_multiperform_internal(multiperform, std::forward(ts)...); +} + +template +void setup_multiperform(MultiPerform& multiperform, Ts&&... ts) { + setup_multiperform_internal(multiperform, std::forward(ts)...); +} + +using session_action_t = cpr::Response (cpr::Session::*)(); + +template +void setup_multiasync(std::vector>& responses, T&& parameters) { + std::shared_ptr cancellation_state = std::make_shared(false); + + std::function execFn{[cancellation_state](T params) { + if (cancellation_state->load()) { + return Response{}; + } + cpr::Session s{}; + s.SetCancellationParam(cancellation_state); + apply_set_option(s, std::forward(params)); + return std::invoke(SessionAction, s); + }}; + responses.emplace_back(GlobalThreadPool::GetInstance()->Submit(std::move(execFn), std::forward(parameters)), std::move(cancellation_state)); +} + +template +void setup_multiasync(std::vector>& responses, T&& head, Ts&&... tail) { + setup_multiasync(responses, std::forward(head)); + if constexpr (sizeof...(Ts) > 0) { + setup_multiasync(responses, std::forward(tail)...); + } +} + +} // namespace priv + +// Get methods +template +Response Get(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Get(); +} + +// Get async methods +template +AsyncResponse GetAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Get(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Get callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto GetCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Get(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Post methods +template +Response Post(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Post(); +} + +// Post async methods +template +AsyncResponse PostAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Post(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Post callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto PostCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Post(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Put methods +template +Response Put(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Put(); +} + +// Put async methods +template +AsyncResponse PutAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Put(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Put callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto PutCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Put(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Head methods +template +Response Head(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Head(); +} + +// Head async methods +template +AsyncResponse HeadAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Head(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Head callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto HeadCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Head(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Delete methods +template +Response Delete(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Delete(); +} + +// Delete async methods +template +AsyncResponse DeleteAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Delete(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Delete callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto DeleteCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Delete(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Options methods +template +Response Options(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Options(); +} + +// Options async methods +template +AsyncResponse OptionsAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Options(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Options callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto OptionsCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Options(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Patch methods +template +Response Patch(Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Patch(); +} + +// Patch async methods +template +AsyncResponse PatchAsync(Ts... ts) { + return cpr::async([](Ts... ts_inner) { return Patch(std::move(ts_inner)...); }, std::move(ts)...); +} + +// Patch callback methods +template +// NOLINTNEXTLINE(fuchsia-trailing-return) +auto PatchCallback(Then then, Ts... ts) { + return cpr::async([](Then then_inner, Ts... ts_inner) { return then_inner(Patch(std::move(ts_inner)...)); }, std::move(then), std::move(ts)...); +} + +// Download methods +template +Response Download(std::ofstream& file, Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Download(file); +} + +// Download async method +template +AsyncResponse DownloadAsync(fs::path local_path, Ts... ts) { + return AsyncWrapper{std::async( + std::launch::async, + [](fs::path local_path_, Ts... ts_) { + std::ofstream f(local_path_.c_str()); + return Download(f, std::move(ts_)...); + }, + std::move(local_path), std::move(ts)...)}; +} + +// Download with user callback +template +Response Download(const WriteCallback& write, Ts&&... ts) { + Session session; + priv::set_option(session, std::forward(ts)...); + return session.Download(write); +} + +// Multi requests +template +std::vector MultiGet(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Get(); +} + +template +std::vector MultiDelete(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Delete(); +} + +template +std::vector MultiPut(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Put(); +} + +template +std::vector MultiHead(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Head(); +} + +template +std::vector MultiOptions(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Options(); +} + +template +std::vector MultiPatch(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Patch(); +} + +template +std::vector MultiPost(Ts&&... ts) { + MultiPerform multiperform; + priv::setup_multiperform(multiperform, std::forward(ts)...); + return multiperform.Post(); +} + +template +std::vector> MultiGetAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Get>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiDeleteAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Delete>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiHeadAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Head>(ret, std::forward(ts)...); + return ret; +} +template +std::vector> MultiOptionsAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Options>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiPatchAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Patch>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiPostAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Post>(ret, std::forward(ts)...); + return ret; +} + +template +std::vector> MultiPutAsync(Ts&&... ts) { + std::vector> ret{}; + priv::setup_multiasync<&cpr::Session::Put>(ret, std::forward(ts)...); + return ret; +} + + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/async.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/async.h new file mode 100644 index 0000000..1305834 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/async.h @@ -0,0 +1,50 @@ +#ifndef CPR_ASYNC_H +#define CPR_ASYNC_H + +#include "async_wrapper.h" +#include "singleton.h" +#include "threadpool.h" + +namespace cpr { + +class GlobalThreadPool : public ThreadPool { + CPR_SINGLETON_DECL(GlobalThreadPool) + protected: + GlobalThreadPool() = default; + + public: + ~GlobalThreadPool() override = default; +}; + +/** + * Return a wrapper for a future, calling future.get() will wait until the task is done and return RetType. + * async(fn, args...) + * async(std::bind(&Class::mem_fn, &obj)) + * async(std::mem_fn(&Class::mem_fn, &obj)) + **/ +template +auto async(Fn&& fn, Args&&... args) { + return AsyncWrapper{GlobalThreadPool::GetInstance()->Submit(std::forward(fn), std::forward(args)...)}; +} + +class async { + public: + static void startup(size_t min_threads = CPR_DEFAULT_THREAD_POOL_MIN_THREAD_NUM, size_t max_threads = CPR_DEFAULT_THREAD_POOL_MAX_THREAD_NUM, std::chrono::milliseconds max_idle_ms = CPR_DEFAULT_THREAD_POOL_MAX_IDLE_TIME) { + GlobalThreadPool* gtp = GlobalThreadPool::GetInstance(); + if (gtp->IsStarted()) { + return; + } + gtp->SetMinThreadNum(min_threads); + gtp->SetMaxThreadNum(max_threads); + gtp->SetMaxIdleTime(max_idle_ms); + gtp->Start(); + } + + static void cleanup() { + GlobalThreadPool::ExitInstance(); + } +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/async_wrapper.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/async_wrapper.h new file mode 100644 index 0000000..bb46bf9 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/async_wrapper.h @@ -0,0 +1,140 @@ +#ifndef CPR_ASYNC_WRAPPER_H +#define CPR_ASYNC_WRAPPER_H + +#include +#include +#include + +#include "cpr/response.h" + +namespace cpr { +enum class [[nodiscard]] CancellationResult { failure, success, invalid_operation }; + +/** + * A class template intended to wrap results of async operations (instances of std::future) + * and also provide extended capablilities relaed to these requests, for example cancellation. + * + * The RAII semantics are the same as std::future - moveable, not copyable. + */ +template +class AsyncWrapper { + private: + std::future future; + std::shared_ptr is_cancelled; + + public: + // Constructors + explicit AsyncWrapper(std::future&& f) : future{std::move(f)} {} + AsyncWrapper(std::future&& f, std::shared_ptr&& cancelledState) : future{std::move(f)}, is_cancelled{std::move(cancelledState)} {} + + // Copy Semantics + AsyncWrapper(const AsyncWrapper&) = delete; + AsyncWrapper& operator=(const AsyncWrapper&) = delete; + + // Move Semantics + AsyncWrapper(AsyncWrapper&&) noexcept = default; + AsyncWrapper& operator=(AsyncWrapper&&) noexcept = default; + + // Destructor + ~AsyncWrapper() { + if constexpr (isCancellable) { + if(is_cancelled) { + is_cancelled->store(true); + } + } + } + // These methods replicate the behaviour of std::future + [[nodiscard]] T get() { + if constexpr (isCancellable) { + if (IsCancelled()) { + throw std::logic_error{"Calling AsyncWrapper::get on a cancelled request!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::get when the associated future instance is invalid!"}; + } + return future.get(); + } + + [[nodiscard]] bool valid() const noexcept { + if constexpr (isCancellable) { + return !is_cancelled->load() && future.valid(); + } else { + return future.valid(); + } + } + + void wait() const { + if constexpr (isCancellable) { + if (is_cancelled->load()) { + throw std::logic_error{"Calling AsyncWrapper::wait when the associated future is invalid or cancelled!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is invalid!"}; + } + future.wait(); + } + + template + std::future_status wait_for(const std::chrono::duration& timeout_duration) const { + if constexpr (isCancellable) { + if (IsCancelled()) { + throw std::logic_error{"Calling AsyncWrapper::wait_for when the associated future is cancelled!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is invalid!"}; + } + return future.wait_for(timeout_duration); + } + + template + std::future_status wait_until(const std::chrono::time_point& timeout_time) const { + if constexpr (isCancellable) { + if (IsCancelled()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is cancelled!"}; + } + } + if (!future.valid()) { + throw std::logic_error{"Calling AsyncWrapper::wait_until when the associated future is invalid!"}; + } + return future.wait_until(timeout_time); + } + + std::shared_future share() noexcept { + return future.share(); + } + + // Cancellation-related methods + CancellationResult Cancel() { + if constexpr (!isCancellable) { + return CancellationResult::invalid_operation; + } + if (!future.valid() || is_cancelled->load()) { + return CancellationResult::invalid_operation; + } + is_cancelled->store(true); + return CancellationResult::success; + } + + [[nodiscard]] bool IsCancelled() const { + if constexpr (isCancellable) { + return is_cancelled->load(); + } else { + return false; + } + } +}; + +// Deduction guides +template +AsyncWrapper(std::future&&) -> AsyncWrapper; + +template +AsyncWrapper(std::future&&, std::shared_ptr&&) -> AsyncWrapper; + +} // namespace cpr + + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/auth.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/auth.h new file mode 100644 index 0000000..e783969 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/auth.h @@ -0,0 +1,32 @@ +#ifndef CPR_AUTH_H +#define CPR_AUTH_H + +#include + +#include + +namespace cpr { + +enum class AuthMode { BASIC, DIGEST, NTLM }; + +class Authentication { + public: + Authentication(std::string username, std::string password, AuthMode auth_mode) : auth_string_{std::move(username) + ":" + std::move(password)}, auth_mode_{std::move(auth_mode)} {} + Authentication(const Authentication& other) = default; + Authentication(Authentication&& old) noexcept = default; + ~Authentication() noexcept; + + Authentication& operator=(Authentication&& old) noexcept = default; + Authentication& operator=(const Authentication& other) = default; + + const char* GetAuthString() const noexcept; + AuthMode GetAuthMode() const noexcept; + + private: + std::string auth_string_; + AuthMode auth_mode_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/bearer.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/bearer.h new file mode 100644 index 0000000..5e58a7d --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/bearer.h @@ -0,0 +1,34 @@ +#ifndef CPR_BEARER_H +#define CPR_BEARER_H + +#include +#include + +#include + +namespace cpr { + +// Only supported with libcurl >= 7.61.0. +// As an alternative use SetHeader and add the token manually. +#if LIBCURL_VERSION_NUM >= 0x073D00 +class Bearer { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Bearer(std::string token) : token_string_{std::move(token)} {} + Bearer(const Bearer& other) = default; + Bearer(Bearer&& old) noexcept = default; + virtual ~Bearer() noexcept; + + Bearer& operator=(Bearer&& old) noexcept = default; + Bearer& operator=(const Bearer& other) = default; + + virtual const char* GetToken() const noexcept; + + protected: + std::string token_string_; +}; +#endif + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/body.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/body.h new file mode 100644 index 0000000..f691d9c --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/body.h @@ -0,0 +1,54 @@ +#ifndef CPR_BODY_H +#define CPR_BODY_H + +#include +#include +#include +#include +#include + +#include "cpr/buffer.h" +#include "cpr/cprtypes.h" +#include "cpr/file.h" + +namespace cpr { + +class Body : public StringHolder { + public: + Body() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Body(std::string body) : StringHolder(std::move(body)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Body(std::string_view body) : StringHolder(body) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Body(const char* body) : StringHolder(body) {} + Body(const char* str, size_t len) : StringHolder(str, len) {} + Body(const std::initializer_list args) : StringHolder(args) {} + // NOLINTNEXTLINE(google-explicit-constructor, cppcoreguidelines-pro-type-reinterpret-cast) + Body(const Buffer& buffer) : StringHolder(reinterpret_cast(buffer.data), static_cast(buffer.datalen)) {} + // NOLINTNEXTLINE(google-explicit-constructor) + Body(const File& file) { + std::ifstream is(file.filepath, std::ifstream::binary); + if (!is) { + throw std::invalid_argument("Can't open the file for HTTP request body!"); + } + + is.seekg(0, std::ios::end); + const std::streampos length = is.tellg(); + is.seekg(0, std::ios::beg); + std::string buffer; + buffer.resize(static_cast(length)); + is.read(buffer.data(), length); + str_ = std::move(buffer); + } + Body(const Body& other) = default; + Body(Body&& old) noexcept = default; + ~Body() override = default; + + Body& operator=(Body&& old) noexcept = default; + Body& operator=(const Body& other) = default; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/buffer.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/buffer.h new file mode 100644 index 0000000..5665faa --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/buffer.h @@ -0,0 +1,33 @@ +#ifndef CPR_BUFFER_H +#define CPR_BUFFER_H + +#include + +#include + +namespace cpr { + +struct Buffer { + using data_t = const char*; + + template + Buffer(Iterator begin, Iterator end, fs::path&& p_filename) + // Ignored here since libcurl reqires a long. + // There is also no way around the reinterpret_cast. + // NOLINTNEXTLINE(google-runtime-int, cppcoreguidelines-pro-type-reinterpret-cast) + : data{reinterpret_cast(&(*begin))}, datalen{static_cast(std::distance(begin, end))}, filename(std::move(p_filename)) { + is_random_access_iterator(begin, end); + static_assert(sizeof(*begin) == 1, "Only byte buffers can be used"); + } + + template + typename std::enable_if::iterator_category, std::random_access_iterator_tag>::value>::type is_random_access_iterator(Iterator /* begin */, Iterator /* end */) {} + + data_t data; + size_t datalen; + const fs::path filename; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/callback.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/callback.h new file mode 100644 index 0000000..dc1c6ee --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/callback.h @@ -0,0 +1,111 @@ +#ifndef CPR_CALLBACK_H +#define CPR_CALLBACK_H + +#include "cprtypes.h" + +#include +#include +#include +#include + +namespace cpr { + +class ReadCallback { + public: + ReadCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ReadCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), size{-1}, callback{std::move(p_callback)} {} + ReadCallback(cpr_off_t p_size, std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), size{p_size}, callback{std::move(p_callback)} {} + bool operator()(char* buffer, size_t& buffer_size) const { + return callback(buffer, buffer_size, userdata); + } + + intptr_t userdata{}; + cpr_off_t size{}; + std::function callback; +}; + +class HeaderCallback { + public: + HeaderCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + HeaderCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + bool operator()(std::string header) const { + return callback(std::move(header), userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +class WriteCallback { + public: + WriteCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + WriteCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + bool operator()(std::string data) const { + return callback(std::move(data), userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +class ProgressCallback { + public: + ProgressCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ProgressCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + bool operator()(cpr_pf_arg_t downloadTotal, cpr_pf_arg_t downloadNow, cpr_pf_arg_t uploadTotal, cpr_pf_arg_t uploadNow) const { + return callback(downloadTotal, downloadNow, uploadTotal, uploadNow, userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +class DebugCallback { + public: + enum class InfoType { + TEXT = 0, + HEADER_IN = 1, + HEADER_OUT = 2, + DATA_IN = 3, + DATA_OUT = 4, + SSL_DATA_IN = 5, + SSL_DATA_OUT = 6, + }; + DebugCallback() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + DebugCallback(std::function p_callback, intptr_t p_userdata = 0) : userdata(p_userdata), callback(std::move(p_callback)) {} + void operator()(InfoType type, std::string data) const { + callback(type, std::move(data), userdata); + } + + intptr_t userdata{}; + std::function callback; +}; + +/** + * Functor class for progress functions that will be used in cancellable requests. + */ +class CancellationCallback { + public: + CancellationCallback() = default; + explicit CancellationCallback(std::shared_ptr&& cs) : cancellation_state{std::move(cs)} {} + + CancellationCallback(std::shared_ptr&& cs, ProgressCallback& u_cb) : cancellation_state{std::move(cs)}, user_cb{std::reference_wrapper{u_cb}} {} + + bool operator()(cpr_pf_arg_t dltotal, cpr_pf_arg_t dlnow, cpr_pf_arg_t ultotal, cpr_pf_arg_t ulnow) const; + + void SetProgressCallback(ProgressCallback& u_cb); + + private: + std::shared_ptr cancellation_state; + std::optional> user_cb; +}; + + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cert_info.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cert_info.h new file mode 100644 index 0000000..6c328ee --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cert_info.h @@ -0,0 +1,35 @@ +#ifndef CPR_CERT_INFO_H +#define CPR_CERT_INFO_H + +#include +#include +#include + +namespace cpr { + +class CertInfo { + private: + std::vector cert_info_; + + public: + CertInfo() = default; + CertInfo(const std::initializer_list& entry) : cert_info_{entry} {}; + ~CertInfo() noexcept = default; + + using iterator = std::vector::iterator; + using const_iterator = std::vector::const_iterator; + + std::string& operator[](const size_t& pos); + iterator begin(); + iterator end(); + const_iterator begin() const; + const_iterator end() const; + const_iterator cbegin() const; + const_iterator cend() const; + void emplace_back(const std::string& str); + void push_back(const std::string& str); + void pop_back(); +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/connect_timeout.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/connect_timeout.h new file mode 100644 index 0000000..546e8a5 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/connect_timeout.h @@ -0,0 +1,18 @@ +#ifndef CPR_CONNECT_TIMEOUT_H +#define CPR_CONNECT_TIMEOUT_H + +#include "cpr/timeout.h" + +namespace cpr { + +class ConnectTimeout : public Timeout { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ConnectTimeout(const std::chrono::milliseconds& duration) : Timeout{duration} {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ConnectTimeout(const std::int32_t& milliseconds) : Timeout{milliseconds} {} +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cookies.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cookies.h new file mode 100644 index 0000000..c018ea4 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cookies.h @@ -0,0 +1,92 @@ +#ifndef CPR_COOKIES_H +#define CPR_COOKIES_H + +#include "cpr/curlholder.h" +#include +#include +#include +#include +#include + +namespace cpr { +/** + * EXPIRES_STRING_SIZE is an explicitly static and const variable that could be only accessed within the same namespace and is immutable. + * To be used for "std::array", the expression must have a constant value, so EXPIRES_STRING_SIZE must be a const value. + **/ +static const std::size_t EXPIRES_STRING_SIZE = 100; + +class Cookie { + public: + Cookie() = default; + /** + * Some notes for the default value used by expires: + * std::chrono::system_clock::time_point::min() won't work on Windows due to the min, max clash there. + * So we fall back to std::chrono::system_clock::from_time_t(0) for the minimum value here. + **/ + Cookie(const std::string& name, const std::string& value, const std::string& domain = "", bool p_isIncludingSubdomains = false, const std::string& path = "/", bool p_isHttpsOnly = false, std::chrono::system_clock::time_point expires = std::chrono::system_clock::from_time_t(0)) : name_{name}, value_{value}, domain_{domain}, includeSubdomains_{p_isIncludingSubdomains}, path_{path}, httpsOnly_{p_isHttpsOnly}, expires_{expires} {}; + const std::string GetDomain() const; + bool IsIncludingSubdomains() const; + const std::string GetPath() const; + bool IsHttpsOnly() const; + const std::chrono::system_clock::time_point GetExpires() const; + const std::string GetExpiresString() const; + const std::string GetName() const; + const std::string GetValue() const; + + private: + std::string name_; + std::string value_; + std::string domain_; + bool includeSubdomains_{}; + std::string path_; + bool httpsOnly_{}; + /** + * TODO: Update the implementation using `std::chrono::utc_clock` of C++20 + **/ + std::chrono::system_clock::time_point expires_{}; +}; + +class Cookies { + public: + /** + * Should we URL-encode cookies when making a request. + * Based on RFC6265, it is recommended but not mandatory to encode cookies. + * + * ------- + * To maximize compatibility with user agents, servers that wish to + * store arbitrary data in a cookie-value SHOULD encode that data, for + * example, using Base64 [RFC4648]. + * ------- + * Source: RFC6265 (https://www.ietf.org/rfc/rfc6265.txt) + **/ + bool encode{true}; + + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Cookies(bool p_encode = true) : encode{p_encode} {}; + Cookies(const std::initializer_list& cookies, bool p_encode = true) : encode{p_encode}, cookies_{cookies} {}; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Cookies(const cpr::Cookie& cookie, bool p_encode = true) : encode{p_encode}, cookies_{cookie} {}; + + cpr::Cookie& operator[](size_t pos); + const std::string GetEncoded(const CurlHolder& holder) const; + + using iterator = std::vector::iterator; + using const_iterator = std::vector::const_iterator; + + iterator begin(); + iterator end(); + const_iterator begin() const; + const_iterator end() const; + const_iterator cbegin() const; + const_iterator cend() const; + void emplace_back(const Cookie& str); + void push_back(const Cookie& str); + void pop_back(); + + private: + std::vector cookies_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cpr.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cpr.h new file mode 100644 index 0000000..fbad172 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cpr.h @@ -0,0 +1,46 @@ +#ifndef CPR_CPR_H +#define CPR_CPR_H + +#include "cpr/api.h" +#include "cpr/auth.h" +#include "cpr/bearer.h" +#include "cpr/callback.h" +#include "cpr/cert_info.h" +#include "cpr/connect_timeout.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/cprver.h" +#include "cpr/curl_container.h" +#include "cpr/curlholder.h" +#include "cpr/error.h" +#include "cpr/http_version.h" +#include "cpr/interceptor.h" +#include "cpr/interface.h" +#include "cpr/limit_rate.h" +#include "cpr/local_port.h" +#include "cpr/local_port_range.h" +#include "cpr/low_speed.h" +#include "cpr/multipart.h" +#include "cpr/multiperform.h" +#include "cpr/parameters.h" +#include "cpr/payload.h" +#include "cpr/proxies.h" +#include "cpr/proxyauth.h" +#include "cpr/range.h" +#include "cpr/redirect.h" +#include "cpr/reserve_size.h" +#include "cpr/resolve.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include "cpr/ssl_ctx.h" +#include "cpr/ssl_options.h" +#include "cpr/status_codes.h" +#include "cpr/timeout.h" +#include "cpr/unix_socket.h" +#include "cpr/user_agent.h" +#include "cpr/util.h" +#include "cpr/verbose.h" + +#define CPR_LIBCURL_VERSION_NUM LIBCURL_VERSION_NUM + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cprtypes.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cprtypes.h new file mode 100644 index 0000000..65da738 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cprtypes.h @@ -0,0 +1,144 @@ +#ifndef CPR_CPR_TYPES_H +#define CPR_CPR_TYPES_H + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace cpr { + +/** + * Wrapper around "curl_off_t" to prevent applications from having to link against libcurl. + **/ +using cpr_off_t = curl_off_t; + +/** + * The argument type for progress functions, dependent on libcurl version + **/ +#if LIBCURL_VERSION_NUM < 0x072000 +using cpr_pf_arg_t = double; +#else +using cpr_pf_arg_t = cpr_off_t; +#endif + +template +class StringHolder { + public: + StringHolder() = default; + explicit StringHolder(std::string str) : str_(std::move(str)) {} + explicit StringHolder(std::string_view str) : str_(str) {} + explicit StringHolder(const char* str) : str_(str) {} + StringHolder(const char* str, size_t len) : str_(str, len) {} + StringHolder(const std::initializer_list args) { + str_ = std::accumulate(args.begin(), args.end(), str_); + } + StringHolder(const StringHolder& other) = default; + StringHolder(StringHolder&& old) noexcept = default; + virtual ~StringHolder() = default; + + StringHolder& operator=(StringHolder&& old) noexcept = default; + + StringHolder& operator=(const StringHolder& other) = default; + + explicit operator std::string() const { + return str_; + } + + T operator+(const char* rhs) const { + return T(str_ + rhs); + } + + T operator+(const std::string& rhs) const { + return T(str_ + rhs); + } + + T operator+(const StringHolder& rhs) const { + return T(str_ + rhs.str_); + } + + void operator+=(const char* rhs) { + str_ += rhs; + } + void operator+=(const std::string& rhs) { + str_ += rhs; + } + void operator+=(const StringHolder& rhs) { + str_ += rhs; + } + + bool operator==(const char* rhs) const { + return str_ == rhs; + } + bool operator==(const std::string& rhs) const { + return str_ == rhs; + } + bool operator==(const StringHolder& rhs) const { + return str_ == rhs.str_; + } + + bool operator!=(const char* rhs) const { + return str_.c_str() != rhs; + } + bool operator!=(const std::string& rhs) const { + return str_ != rhs; + } + bool operator!=(const StringHolder& rhs) const { + return str_ != rhs.str_; + } + + const std::string& str() { + return str_; + } + const std::string& str() const { + return str_; + } + const char* c_str() const { + return str_.c_str(); + } + const char* data() const { + return str_.data(); + } + + protected: + std::string str_{}; +}; + +template +std::ostream& operator<<(std::ostream& os, const StringHolder& s) { + os << s.str(); + return os; +} + +class Url : public StringHolder { + public: + Url() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Url(std::string url) : StringHolder(std::move(url)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Url(std::string_view url) : StringHolder(url) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Url(const char* url) : StringHolder(url) {} + Url(const char* str, size_t len) : StringHolder(std::string(str, len)) {} + Url(const std::initializer_list args) : StringHolder(args) {} + Url(const Url& other) = default; + Url(Url&& old) noexcept = default; + ~Url() override = default; + + Url& operator=(Url&& old) noexcept = default; + Url& operator=(const Url& other) = default; +}; + +struct CaseInsensitiveCompare { + bool operator()(const std::string& a, const std::string& b) const noexcept; +}; + +using Header = std::map; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cprver.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cprver.h new file mode 100644 index 0000000..aaa4f9f --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/cprver.h @@ -0,0 +1,30 @@ +#ifndef CPR_CPRVER_H +#define CPR_CPRVER_H + +/** + * CPR version as a string. + **/ +#define CPR_VERSION "1.10.5" + +/** + * CPR version split up into parts. + **/ +#define CPR_VERSION_MAJOR 1 +#define CPR_VERSION_MINOR 10 +#define CPR_VERSION_PATCH 5 + +/** + * CPR version as a single hex digit. + * it can be split up into three parts: + * 0xAABBCC + * AA: The current CPR major version number in a hex format. + * BB: The current CPR minor version number in a hex format. + * CC: The current CPR patch version number in a hex format. + * + * Examples: + * '0x010702' -> 01.07.02 -> CPR_VERSION: 1.7.2 + * '0xA13722' -> A1.37.22 -> CPR_VERSION: 161.55.34 + **/ +#define CPR_VERSION_NUM 0x10a05 + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/curl_container.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/curl_container.h new file mode 100644 index 0000000..c2409b2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/curl_container.h @@ -0,0 +1,51 @@ +#ifndef CURL_CONTAINER_H +#define CURL_CONTAINER_H + +#include +#include +#include +#include + +#include "cpr/curlholder.h" + + +namespace cpr { + +struct Parameter { + Parameter(std::string p_key, std::string p_value) : key{std::move(p_key)}, value{std::move(p_value)} {} + + std::string key; + std::string value; +}; + +struct Pair { + Pair(std::string p_key, std::string p_value) : key(std::move(p_key)), value(std::move(p_value)) {} + + std::string key; + std::string value; +}; + + +template +class CurlContainer { + public: + /** + * Enables or disables URL encoding for keys and values when calling GetContent(...). + **/ + bool encode = true; + + CurlContainer() = default; + CurlContainer(const std::initializer_list&); + + void Add(const std::initializer_list&); + void Add(const T&); + + const std::string GetContent(const CurlHolder&) const; + + protected: + std::vector containerList_; +}; + +} // namespace cpr + +#endif // diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/curlholder.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/curlholder.h new file mode 100644 index 0000000..a9e1dc8 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/curlholder.h @@ -0,0 +1,54 @@ +#ifndef CPR_CURL_HOLDER_H +#define CPR_CURL_HOLDER_H + +#include +#include +#include + +#include + +namespace cpr { +struct CurlHolder { + private: + /** + * Mutex for curl_easy_init(). + * curl_easy_init() is not thread save. + * References: + * https://curl.haxx.se/libcurl/c/curl_easy_init.html + * https://curl.haxx.se/libcurl/c/threadsafe.html + **/ + + // Avoids initalization order problems in a static build + static std::mutex& curl_easy_init_mutex_() { + static std::mutex curl_easy_init_mutex_; + return curl_easy_init_mutex_; + } + + public: + CURL* handle{nullptr}; + struct curl_slist* chunk{nullptr}; + struct curl_slist* resolveCurlList{nullptr}; + curl_mime* multipart{nullptr}; + std::array error{}; + + CurlHolder(); + CurlHolder(const CurlHolder& other) = default; + CurlHolder(CurlHolder&& old) noexcept = default; + ~CurlHolder(); + + CurlHolder& operator=(CurlHolder&& old) noexcept = default; + CurlHolder& operator=(const CurlHolder& other) = default; + + /** + * Uses curl_easy_escape(...) for escaping the given string. + **/ + std::string urlEncode(const std::string& s) const; + + /** + * Uses curl_easy_unescape(...) for unescaping the given string. + **/ + std::string urlDecode(const std::string& s) const; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/curlmultiholder.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/curlmultiholder.h new file mode 100644 index 0000000..ccd504b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/curlmultiholder.h @@ -0,0 +1,18 @@ +#ifndef CPR_CURLMULTIHOLDER_H +#define CPR_CURLMULTIHOLDER_H + +#include + +namespace cpr { + +class CurlMultiHolder { + public: + CurlMultiHolder(); + ~CurlMultiHolder(); + + CURLM* handle{nullptr}; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/error.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/error.h new file mode 100644 index 0000000..bb59a4c --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/error.h @@ -0,0 +1,53 @@ +#ifndef CPR_ERROR_H +#define CPR_ERROR_H + +#include +#include + +#include "cpr/cprtypes.h" +#include + +namespace cpr { + +enum class ErrorCode { + OK = 0, + CONNECTION_FAILURE, + EMPTY_RESPONSE, + HOST_RESOLUTION_FAILURE, + INTERNAL_ERROR, + INVALID_URL_FORMAT, + NETWORK_RECEIVE_ERROR, + NETWORK_SEND_FAILURE, + OPERATION_TIMEDOUT, + PROXY_RESOLUTION_FAILURE, + SSL_CONNECT_ERROR, + SSL_LOCAL_CERTIFICATE_ERROR, + SSL_REMOTE_CERTIFICATE_ERROR, + SSL_CACERT_ERROR, + GENERIC_SSL_ERROR, + UNSUPPORTED_PROTOCOL, + REQUEST_CANCELLED, + TOO_MANY_REDIRECTS, + UNKNOWN_ERROR = 1000, +}; + +class Error { + public: + ErrorCode code = ErrorCode::OK; + std::string message{}; + + Error() = default; + + Error(const std::int32_t& curl_code, std::string&& p_error_message) : code{getErrorCodeForCurlError(curl_code)}, message(std::move(p_error_message)) {} + + explicit operator bool() const { + return code != ErrorCode::OK; + } + + private: + static ErrorCode getErrorCodeForCurlError(std::int32_t curl_code); +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/file.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/file.h new file mode 100644 index 0000000..b39914a --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/file.h @@ -0,0 +1,59 @@ +#ifndef CPR_FILE_H +#define CPR_FILE_H + +#include +#include +#include + +#include + +namespace cpr { + +struct File { + explicit File(std::string p_filepath, const std::string& p_overriden_filename = {}) : filepath(std::move(p_filepath)), overriden_filename(p_overriden_filename) {} + + std::string filepath; + std::string overriden_filename; + + [[nodiscard]] bool hasOverridenFilename() const noexcept { + return !overriden_filename.empty(); + }; +}; + +class Files { + public: + Files() = default; + // NOLINTNEXTLINE(google-explicit-constructor) + Files(const File& p_file) : files{p_file} {}; + + Files(const Files& other) = default; + Files(Files&& old) noexcept = default; + + Files(const std::initializer_list& p_files) : files{p_files} {}; + Files(const std::initializer_list& p_filepaths); + + ~Files() noexcept = default; + + Files& operator=(const Files& other); + Files& operator=(Files&& old) noexcept; + + using iterator = std::vector::iterator; + using const_iterator = std::vector::const_iterator; + + iterator begin(); + iterator end(); + [[nodiscard]] const_iterator begin() const; + [[nodiscard]] const_iterator end() const; + [[nodiscard]] const_iterator cbegin() const; + [[nodiscard]] const_iterator cend() const; + void emplace_back(const File& file); + void push_back(const File& file); + void pop_back(); + + private: + std::vector files; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/filesystem.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/filesystem.h new file mode 100644 index 0000000..f296770 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/filesystem.h @@ -0,0 +1,26 @@ +#ifndef CPR_FILESYSTEM_H +#define CPR_FILESYSTEM_H + +// Include filesystem into the namespace "fs" from either "filesystem" or "experimental/filesystem" or "boost/filesystem" +#ifdef CPR_USE_BOOST_FILESYSTEM +#define BOOST_FILESYSTEM_VERSION 4 // Use the latest, with the closest behavior to std::filesystem. +#include +namespace cpr { +namespace fs = boost::filesystem; +} +// cppcheck-suppress preprocessorErrorDirective +#elif __has_include() +#include +namespace cpr { +namespace fs = std::filesystem; +} +#elif __has_include("experimental/filesystem") +#include +namespace cpr { +namespace fs = std::experimental::filesystem; +} +#else +#error "Failed to include header!" +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/http_version.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/http_version.h new file mode 100644 index 0000000..45b5028 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/http_version.h @@ -0,0 +1,67 @@ +#ifndef CPR_HTTP_VERSION_H +#define CPR_HTTP_VERSION_H + +#include + +namespace cpr { +enum class HttpVersionCode { + /** + * Let libcurl decide which version is the best. + **/ + VERSION_NONE, + /** + * Enforce HTTP 1.0 requests. + **/ + VERSION_1_0, + /** + * Enforce HTTP 1.1 requests. + **/ + VERSION_1_1, +#if LIBCURL_VERSION_NUM >= 0x072100 // 7.33.0 + /** + * Attempt HTTP 2.0 requests. + * Fallback to HTTP 1.1 if negotiation fails. + **/ + VERSION_2_0, +#endif +#if LIBCURL_VERSION_NUM >= 0x072F00 // 7.47.0 + /** + * Attempt HTTP 2.0 for HTTPS requests only. + * Fallback to HTTP 1.1 if negotiation fails. + * HTTP 1.1 will be used for HTTP connections. + **/ + VERSION_2_0_TLS, +#endif +#if LIBCURL_VERSION_NUM >= 0x073100 // 7.49.0 + /** + * Start HTTP 2.0 for HTTP requests. + * Requires prior knowledge that the server supports HTTP 2.0. + * For HTTPS requests we will negotiate the protocol version in the TLS handshake. + **/ + VERSION_2_0_PRIOR_KNOWLEDGE, +#endif +#if LIBCURL_VERSION_NUM >= 0x074200 // 7.66.0 + /** + * Attempt HTTP 3.0 requests. + * Requires prior knowledge that the server supports HTTP 3.0 since there is no gracefully downgrade. + * Fallback to HTTP 1.1 if negotiation fails. + **/ + VERSION_3_0 +#endif +}; + +class HttpVersion { + public: + /** + * The HTTP version that should be used by libcurl when initiating a HTTP(S) connection. + * Default: HttpVersionCode::VERSION_NONE + **/ + HttpVersionCode code = HttpVersionCode::VERSION_NONE; + + HttpVersion() = default; + explicit HttpVersion(HttpVersionCode _code) : code(_code) {} +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/interceptor.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/interceptor.h new file mode 100644 index 0000000..34cfe50 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/interceptor.h @@ -0,0 +1,74 @@ +#ifndef CPR_INTERCEPTOR_H +#define CPR_INTERCEPTOR_H + +#include "cpr/multiperform.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include + +namespace cpr { +class Interceptor { + public: + enum class ProceedHttpMethod { + GET_REQUEST = 0, + POST_REQUEST, + PUT_REQUEST, + DELETE_REQUEST, + PATCH_REQUEST, + HEAD_REQUEST, + OPTIONS_REQUEST, + DOWNLOAD_CALLBACK_REQUEST, + DOWNLOAD_FILE_REQUEST, + }; + + Interceptor() = default; + Interceptor(const Interceptor& other) = default; + Interceptor(Interceptor&& old) = default; + virtual ~Interceptor() = default; + + Interceptor& operator=(const Interceptor& other) = default; + Interceptor& operator=(Interceptor&& old) = default; + + virtual Response intercept(Session& session) = 0; + + protected: + static Response proceed(Session& session); + static Response proceed(Session& session, ProceedHttpMethod httpMethod); + static Response proceed(Session& session, ProceedHttpMethod httpMethod, std::ofstream& file); + static Response proceed(Session& session, ProceedHttpMethod httpMethod, const WriteCallback& write); +}; + +class InterceptorMulti { + public: + enum class ProceedHttpMethod { + GET_REQUEST = 0, + POST_REQUEST, + PUT_REQUEST, + DELETE_REQUEST, + PATCH_REQUEST, + HEAD_REQUEST, + OPTIONS_REQUEST, + DOWNLOAD_CALLBACK_REQUEST, + DOWNLOAD_FILE_REQUEST, + }; + + InterceptorMulti() = default; + InterceptorMulti(const InterceptorMulti& other) = default; + InterceptorMulti(InterceptorMulti&& old) = default; + virtual ~InterceptorMulti() = default; + + InterceptorMulti& operator=(const InterceptorMulti& other) = default; + InterceptorMulti& operator=(InterceptorMulti&& old) = default; + + virtual std::vector intercept(MultiPerform& multi) = 0; + + protected: + static std::vector proceed(MultiPerform& multi); + + static void PrepareDownloadSession(MultiPerform& multi, size_t sessions_index, const WriteCallback& write); +}; + +} // namespace cpr + + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/interface.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/interface.h new file mode 100644 index 0000000..b98940e --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/interface.h @@ -0,0 +1,32 @@ +#ifndef CPR_INTERFACE_H +#define CPR_INTERFACE_H + +#include +#include + +#include "cpr/cprtypes.h" + +namespace cpr { + +class Interface : public StringHolder { + public: + Interface() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Interface(std::string iface) : StringHolder(std::move(iface)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Interface(std::string_view iface) : StringHolder(iface) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Interface(const char* iface) : StringHolder(iface) {} + Interface(const char* str, size_t len) : StringHolder(str, len) {} + Interface(const std::initializer_list args) : StringHolder(args) {} + Interface(const Interface& other) = default; + Interface(Interface&& old) noexcept = default; + ~Interface() override = default; + + Interface& operator=(Interface&& old) noexcept = default; + Interface& operator=(const Interface& other) = default; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/limit_rate.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/limit_rate.h new file mode 100644 index 0000000..2b0e8a2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/limit_rate.h @@ -0,0 +1,18 @@ +#ifndef CPR_SPEED_LIMIT_H +#define CPR_SPEED_LIMIT_H + +#include + +namespace cpr { + +class LimitRate { + public: + LimitRate(const std::int64_t p_downrate, const std::int64_t p_uprate) : downrate(p_downrate), uprate(p_uprate) {} + + std::int64_t downrate = 0; + std::int64_t uprate = 0; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/local_port.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/local_port.h new file mode 100644 index 0000000..e853425 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/local_port.h @@ -0,0 +1,23 @@ +#ifndef CPR_LOCAL_PORT_H +#define CPR_LOCAL_PORT_H + +#include + +namespace cpr { + +class LocalPort { + public: + // NOLINTNEXTLINE(google-explicit-constructor) + LocalPort(const std::uint16_t p_localport) : localport_(p_localport) {} + + operator std::uint16_t() const { + return localport_; + } + + private: + std::uint16_t localport_ = 0; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/local_port_range.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/local_port_range.h new file mode 100644 index 0000000..cc2d7e2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/local_port_range.h @@ -0,0 +1,23 @@ +#ifndef CPR_LOCAL_PORT_RANGE_H +#define CPR_LOCAL_PORT_RANGE_H + +#include + +namespace cpr { + +class LocalPortRange { + public: + // NOLINTNEXTLINE(google-explicit-constructor) + LocalPortRange(const std::uint16_t p_localportrange) : localportrange_(p_localportrange) {} + + operator std::uint16_t() const { + return localportrange_; + } + + private: + std::uint16_t localportrange_ = 0; +}; + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/low_speed.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/low_speed.h new file mode 100644 index 0000000..ff77fd2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/low_speed.h @@ -0,0 +1,18 @@ +#ifndef CPR_LOW_SPEED_H +#define CPR_LOW_SPEED_H + +#include + +namespace cpr { + +class LowSpeed { + public: + LowSpeed(const std::int32_t p_limit, const std::int32_t p_time) : limit(p_limit), time(p_time) {} + + std::int32_t limit; + std::int32_t time; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/multipart.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/multipart.h new file mode 100644 index 0000000..3eaaea7 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/multipart.h @@ -0,0 +1,43 @@ +#ifndef CPR_MULTIPART_H +#define CPR_MULTIPART_H + +#include +#include +#include +#include +#include + +#include "buffer.h" +#include "file.h" + +namespace cpr { + +struct Part { + Part(const std::string& p_name, const std::string& p_value, const std::string& p_content_type = {}) : name{p_name}, value{p_value}, content_type{p_content_type}, is_file{false}, is_buffer{false} {} + Part(const std::string& p_name, const std::int32_t& p_value, const std::string& p_content_type = {}) : name{p_name}, value{std::to_string(p_value)}, content_type{p_content_type}, is_file{false}, is_buffer{false} {} + Part(const std::string& p_name, const Files& p_files, const std::string& p_content_type = {}) : name{p_name}, content_type{p_content_type}, is_file{true}, is_buffer{false}, files{p_files} {} + Part(const std::string& p_name, Files&& p_files, const std::string& p_content_type = {}) : name{p_name}, content_type{p_content_type}, is_file{true}, is_buffer{false}, files{p_files} {} + Part(const std::string& p_name, const Buffer& buffer, const std::string& p_content_type = {}) : name{p_name}, value{buffer.filename.string()}, content_type{p_content_type}, data{buffer.data}, datalen{buffer.datalen}, is_file{false}, is_buffer{true} {} + + std::string name; + // We don't use fs::path here, as this leads to problems using windows + std::string value; + std::string content_type; + Buffer::data_t data{nullptr}; + size_t datalen{0}; + bool is_file; + bool is_buffer; + + Files files; +}; + +class Multipart { + public: + Multipart(const std::initializer_list& parts); + + std::vector parts; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/multiperform.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/multiperform.h new file mode 100644 index 0000000..d9ab978 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/multiperform.h @@ -0,0 +1,137 @@ +#ifndef CPR_MULTIPERFORM_H +#define CPR_MULTIPERFORM_H + +#include "cpr/curlmultiholder.h" +#include "cpr/response.h" +#include "cpr/session.h" +#include +#include +#include +#include +#include + +namespace cpr { + +class InterceptorMulti; + +class MultiPerform { + public: + enum class HttpMethod { + UNDEFINED = 0, + GET_REQUEST, + POST_REQUEST, + PUT_REQUEST, + DELETE_REQUEST, + PATCH_REQUEST, + HEAD_REQUEST, + OPTIONS_REQUEST, + DOWNLOAD_REQUEST, + }; + + MultiPerform(); + MultiPerform(const MultiPerform& other) = delete; + MultiPerform(MultiPerform&& old) = default; + ~MultiPerform(); + + MultiPerform& operator=(const MultiPerform& other) = delete; + MultiPerform& operator=(MultiPerform&& old) noexcept = default; + + std::vector Get(); + std::vector Delete(); + template + std::vector Download(DownloadArgTypes... args); + std::vector Put(); + std::vector Head(); + std::vector Options(); + std::vector Patch(); + std::vector Post(); + + std::vector Perform(); + template + std::vector PerformDownload(DownloadArgTypes... args); + + void AddSession(std::shared_ptr& session, HttpMethod method = HttpMethod::UNDEFINED); + void RemoveSession(const std::shared_ptr& session); + std::vector, HttpMethod>>& GetSessions(); + [[nodiscard]] const std::vector, HttpMethod>>& GetSessions() const; + + void AddInterceptor(const std::shared_ptr& pinterceptor); + + private: + // Interceptors should be able to call the private proceed() and PrepareDownloadSessions() functions + friend InterceptorMulti; + + void SetHttpMethod(HttpMethod method); + + void PrepareSessions(); + template + void PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg, DownloadArgTypes... args); + template + void PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg); + void PrepareDownloadSession(size_t sessions_index, std::ofstream& file); + void PrepareDownloadSession(size_t sessions_index, const WriteCallback& write); + + void PrepareGet(); + void PrepareDelete(); + void PreparePut(); + void PreparePatch(); + void PrepareHead(); + void PrepareOptions(); + void PreparePost(); + template + void PrepareDownload(DownloadArgTypes... args); + + std::vector intercept(); + std::vector proceed(); + std::vector MakeRequest(); + std::vector MakeDownloadRequest(); + + void DoMultiPerform(); + std::vector ReadMultiInfo(std::function&& complete_function); + + std::vector, HttpMethod>> sessions_; + std::unique_ptr multicurl_; + bool is_download_multi_perform{false}; + + std::queue> interceptors_; +}; + +template +void MultiPerform::PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg) { + PrepareDownloadSession(sessions_index, current_arg); +} + +template +void MultiPerform::PrepareDownloadSessions(size_t sessions_index, CurrentDownloadArgType current_arg, DownloadArgTypes... args) { + PrepareDownloadSession(sessions_index, current_arg); + PrepareDownloadSessions(sessions_index + 1, args...); +} + + +template +void MultiPerform::PrepareDownload(DownloadArgTypes... args) { + SetHttpMethod(HttpMethod::DOWNLOAD_REQUEST); + PrepareDownloadSessions(0, args...); +} + +template +std::vector MultiPerform::Download(DownloadArgTypes... args) { + if (sizeof...(args) != sessions_.size()) { + throw std::invalid_argument("Number of download arguments has to match the number of sessions added to the multiperform!"); + } + PrepareDownload(args...); + return MakeDownloadRequest(); +} + +template +std::vector MultiPerform::PerformDownload(DownloadArgTypes... args) { + if (sizeof...(args) != sessions_.size()) { + throw std::invalid_argument("Number of download arguments has to match the number of sessions added to the multiperform!"); + } + PrepareDownloadSessions(0, args...); + return MakeDownloadRequest(); +} + +} // namespace cpr + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/parameters.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/parameters.h new file mode 100644 index 0000000..0e34d4d --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/parameters.h @@ -0,0 +1,18 @@ +#ifndef CPR_PARAMETERS_H +#define CPR_PARAMETERS_H + +#include + +#include "cpr/curl_container.h" + +namespace cpr { + +class Parameters : public CurlContainer { + public: + Parameters() = default; + Parameters(const std::initializer_list& parameters); +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/payload.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/payload.h new file mode 100644 index 0000000..686b540 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/payload.h @@ -0,0 +1,23 @@ +#ifndef CPR_PAYLOAD_H +#define CPR_PAYLOAD_H + +#include + +#include "cpr/curl_container.h" + + +namespace cpr { +class Payload : public CurlContainer { + public: + template + Payload(const It begin, const It end) { + for (It pair = begin; pair != end; ++pair) { + Add(*pair); + } + } + Payload(const std::initializer_list& pairs); +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/proxies.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/proxies.h new file mode 100644 index 0000000..6970442 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/proxies.h @@ -0,0 +1,23 @@ +#ifndef CPR_PROXIES_H +#define CPR_PROXIES_H + +#include +#include +#include + +namespace cpr { +class Proxies { + public: + Proxies() = default; + Proxies(const std::initializer_list>& hosts); + Proxies(const std::map& hosts); + + bool has(const std::string& protocol) const; + const std::string& operator[](const std::string& protocol); + + private: + std::map hosts_; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/proxyauth.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/proxyauth.h new file mode 100644 index 0000000..7e34764 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/proxyauth.h @@ -0,0 +1,43 @@ +#ifndef CPR_PROXYAUTH_H +#define CPR_PROXYAUTH_H + +#include +#include + +#include "cpr/auth.h" +#include "cpr/util.h" + +namespace cpr { +class EncodedAuthentication { + public: + EncodedAuthentication() : auth_string_{""} {} + EncodedAuthentication(std::string username, std::string password) : auth_string_{cpr::util::urlEncode(std::move(username)) + ":" + cpr::util::urlEncode(std::move(password))} {} + EncodedAuthentication(const EncodedAuthentication& other) = default; + EncodedAuthentication(EncodedAuthentication&& old) noexcept = default; + virtual ~EncodedAuthentication() noexcept; + + EncodedAuthentication& operator=(EncodedAuthentication&& old) noexcept = default; + EncodedAuthentication& operator=(const EncodedAuthentication& other) = default; + + const char* GetAuthString() const noexcept; + + protected: + std::string auth_string_; +}; + +class ProxyAuthentication { + public: + ProxyAuthentication() = default; + ProxyAuthentication(const std::initializer_list>& auths) : proxyAuth_{auths} {} + ProxyAuthentication(const std::map& auths) : proxyAuth_{auths} {} + + bool has(const std::string& protocol) const; + const char* operator[](const std::string& protocol); + + private: + std::map proxyAuth_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/range.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/range.h new file mode 100644 index 0000000..2c5a145 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/range.h @@ -0,0 +1,44 @@ +#ifndef CPR_RANGE_H +#define CPR_RANGE_H + +#include +#include + +namespace cpr { + +class Range { + public: + Range(const std::optional p_resume_from = std::nullopt, const std::optional p_finish_at = std::nullopt) { + resume_from = p_resume_from.value_or(0); + finish_at = p_finish_at.value_or(-1); + } + + std::int64_t resume_from; + std::int64_t finish_at; + + const std::string str() const { + std::string from_str = (resume_from < 0U) ? "" : std::to_string(resume_from); + std::string to_str = (finish_at < 0U) ? "" : std::to_string(finish_at); + return from_str + "-" + to_str; + } +}; + +class MultiRange { + public: + MultiRange(std::initializer_list rs) : ranges{rs} {} + + const std::string str() const { + std::string multi_range_string{}; + for (Range range : ranges) { + multi_range_string += ((multi_range_string.empty()) ? "" : ", ") + range.str(); + } + return multi_range_string; + } + + private: + std::vector ranges; +}; // namespace cpr + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/redirect.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/redirect.h new file mode 100644 index 0000000..32b4372 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/redirect.h @@ -0,0 +1,84 @@ +#ifndef CPR_REDIRECT_H +#define CPR_REDIRECT_H + +#include + +namespace cpr { +enum class PostRedirectFlags : uint8_t { + /** + * Respect RFC 7231 (section 6.4.2 to 6.4.4). + * Same as CURL_REDIR_POST_301 (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_301 = 0x1 << 0, + /** + * Maintain the request method after a 302 redirect. + * Same as CURL_REDIR_POST_302 (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_302 = 0x1 << 1, + /** + * Maintain the request method after a 303 redirect. + * Same as CURL_REDIR_POST_303 (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_303 = 0x1 << 2, + /** + * Default value. + * Convenience option to enable all flags. + * Same as CURL_REDIR_POST_ALL (https://curl.se/libcurl/c/CURLOPT_POSTREDIR.html). + **/ + POST_ALL = POST_301 | POST_302 | POST_303, + /** + * * Convenience option to disable all flags. + **/ + NONE = 0x0 +}; + +PostRedirectFlags operator|(PostRedirectFlags lhs, PostRedirectFlags rhs); +PostRedirectFlags operator&(PostRedirectFlags lhs, PostRedirectFlags rhs); +PostRedirectFlags operator^(PostRedirectFlags lhs, PostRedirectFlags rhs); +PostRedirectFlags operator~(PostRedirectFlags flag); +PostRedirectFlags& operator|=(PostRedirectFlags& lhs, PostRedirectFlags rhs); +PostRedirectFlags& operator&=(PostRedirectFlags& lhs, PostRedirectFlags rhs); +PostRedirectFlags& operator^=(PostRedirectFlags& lhs, PostRedirectFlags rhs); +bool any(PostRedirectFlags flag); + +class Redirect { + public: + /** + * The maximum number of redirects to follow. + * 0: Refuse any redirects. + * -1: Infinite number of redirects. + * Default: 50 + * https://curl.se/libcurl/c/CURLOPT_MAXREDIRS.html + **/ + // NOLINTNEXTLINE (google-runtime-int) + long maximum{50L}; + /** + * Follow 3xx redirects. + * Default: true + * https://curl.se/libcurl/c/CURLOPT_FOLLOWLOCATION.html + **/ + bool follow{true}; + /** + * Continue to send authentication (user+password) credentials when following locations, even when hostname changed. + * Default: false + * https://curl.se/libcurl/c/CURLOPT_UNRESTRICTED_AUTH.html + **/ + bool cont_send_cred{false}; + /** + * Flags to control how to act after a redirect for a post request. + * Default: POST_ALL + **/ + PostRedirectFlags post_flags{PostRedirectFlags::POST_ALL}; + + Redirect() = default; + // NOLINTNEXTLINE (google-runtime-int) + Redirect(long p_maximum, bool p_follow, bool p_cont_send_cred, PostRedirectFlags p_post_flags) : maximum(p_maximum), follow(p_follow), cont_send_cred(p_cont_send_cred), post_flags(p_post_flags){}; + // NOLINTNEXTLINE (google-runtime-int) + explicit Redirect(long p_maximum) : maximum(p_maximum){}; + explicit Redirect(bool p_follow) : follow(p_follow){}; + Redirect(bool p_follow, bool p_cont_send_cred) : follow(p_follow), cont_send_cred(p_cont_send_cred){}; + explicit Redirect(PostRedirectFlags p_post_flags) : post_flags(p_post_flags){}; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/reserve_size.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/reserve_size.h new file mode 100644 index 0000000..5eae4c8 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/reserve_size.h @@ -0,0 +1,17 @@ +#ifndef CPR_RESERVE_SIZE_H +#define CPR_RESERVE_SIZE_H + +#include + +namespace cpr { + +class ReserveSize { + public: + ReserveSize(const size_t _size) : size(_size) {} + + size_t size = 0; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/resolve.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/resolve.h new file mode 100644 index 0000000..86a7c89 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/resolve.h @@ -0,0 +1,23 @@ +#ifndef CPR_RESOLVE_H +#define CPR_RESOLVE_H + +#include +#include + +namespace cpr { + class Resolve { + public: + std::string host; + std::string addr; + std::set ports; + + Resolve(const std::string& host_param, const std::string& addr_param, const std::set& ports_param = std::set{80U, 443U}): host(host_param), addr(addr_param), ports(ports_param) { + if (this->ports.empty()) { + this->ports.insert(80U); + this->ports.insert(443U); + } + } + }; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/response.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/response.h new file mode 100644 index 0000000..5c296da --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/response.h @@ -0,0 +1,58 @@ +#ifndef CPR_RESPONSE_H +#define CPR_RESPONSE_H + +#include +#include +#include +#include +#include +#include + +#include "cpr/cert_info.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/error.h" +#include "cpr/ssl_options.h" +#include "cpr/util.h" + +namespace cpr { + +class MultiPerform; + +class Response { + private: + friend MultiPerform; + std::shared_ptr curl_{nullptr}; + + public: + // Ignored here since libcurl uses a long for this. + // NOLINTNEXTLINE(google-runtime-int) + long status_code{}; + std::string text{}; + Header header{}; + Url url{}; + double elapsed{}; + Cookies cookies{}; + Error error{}; + std::string raw_header{}; + std::string status_line{}; + std::string reason{}; + cpr_off_t uploaded_bytes{}; + cpr_off_t downloaded_bytes{}; + // Ignored here since libcurl uses a long for this. + // NOLINTNEXTLINE(google-runtime-int) + long redirect_count{}; + + Response() = default; + Response(std::shared_ptr curl, std::string&& p_text, std::string&& p_header_string, Cookies&& p_cookies, Error&& p_error); + std::vector GetCertInfos(); + Response(const Response& other) = default; + Response(Response&& old) noexcept = default; + ~Response() noexcept = default; + + Response& operator=(Response&& old) noexcept = default; + Response& operator=(const Response& other) = default; +}; +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/session.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/session.h new file mode 100644 index 0000000..6b2b93e --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/session.h @@ -0,0 +1,308 @@ +#ifndef CPR_SESSION_H +#define CPR_SESSION_H + +#include +#include +#include +#include +#include +#include + +#include "cpr/accept_encoding.h" +#include "cpr/async_wrapper.h" +#include "cpr/auth.h" +#include "cpr/bearer.h" +#include "cpr/body.h" +#include "cpr/callback.h" +#include "cpr/connect_timeout.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/curlholder.h" +#include "cpr/http_version.h" +#include "cpr/interface.h" +#include "cpr/limit_rate.h" +#include "cpr/local_port.h" +#include "cpr/local_port_range.h" +#include "cpr/low_speed.h" +#include "cpr/multipart.h" +#include "cpr/parameters.h" +#include "cpr/payload.h" +#include "cpr/proxies.h" +#include "cpr/proxyauth.h" +#include "cpr/range.h" +#include "cpr/redirect.h" +#include "cpr/reserve_size.h" +#include "cpr/resolve.h" +#include "cpr/response.h" +#include "cpr/ssl_options.h" +#include "cpr/timeout.h" +#include "cpr/unix_socket.h" +#include "cpr/user_agent.h" +#include "cpr/util.h" +#include "cpr/verbose.h" + +namespace cpr { + +using AsyncResponse = AsyncWrapper; + +class Interceptor; +class MultiPerform; + +class Session : public std::enable_shared_from_this { + public: + Session(); + Session(const Session& other) = delete; + Session(Session&& old) = default; + + ~Session() = default; + + Session& operator=(Session&& old) noexcept = default; + Session& operator=(const Session& other) = delete; + + void SetUrl(const Url& url); + void SetParameters(const Parameters& parameters); + void SetParameters(Parameters&& parameters); + void SetHeader(const Header& header); + void UpdateHeader(const Header& header); + void SetTimeout(const Timeout& timeout); + void SetConnectTimeout(const ConnectTimeout& timeout); + void SetAuth(const Authentication& auth); +// Only supported with libcurl >= 7.61.0. +// As an alternative use SetHeader and add the token manually. +#if LIBCURL_VERSION_NUM >= 0x073D00 + void SetBearer(const Bearer& token); +#endif + void SetUserAgent(const UserAgent& ua); + void SetPayload(Payload&& payload); + void SetPayload(const Payload& payload); + void SetProxies(Proxies&& proxies); + void SetProxies(const Proxies& proxies); + void SetProxyAuth(ProxyAuthentication&& proxy_auth); + void SetProxyAuth(const ProxyAuthentication& proxy_auth); + void SetMultipart(Multipart&& multipart); + void SetMultipart(const Multipart& multipart); + void SetRedirect(const Redirect& redirect); + void SetCookies(const Cookies& cookies); + void SetBody(Body&& body); + void SetBody(const Body& body); + void SetLowSpeed(const LowSpeed& low_speed); + void SetVerifySsl(const VerifySsl& verify); + void SetUnixSocket(const UnixSocket& unix_socket); + void SetSslOptions(const SslOptions& options); + void SetReadCallback(const ReadCallback& read); + void SetHeaderCallback(const HeaderCallback& header); + void SetWriteCallback(const WriteCallback& write); + void SetProgressCallback(const ProgressCallback& progress); + void SetDebugCallback(const DebugCallback& debug); + void SetVerbose(const Verbose& verbose); + void SetInterface(const Interface& iface); + void SetLocalPort(const LocalPort& local_port); + void SetLocalPortRange(const LocalPortRange& local_port_range); + void SetHttpVersion(const HttpVersion& version); + void SetRange(const Range& range); + void SetResolve(const Resolve& resolve); + void SetResolves(const std::vector& resolves); + void SetMultiRange(const MultiRange& multi_range); + void SetReserveSize(const ReserveSize& reserve_size); + void SetAcceptEncoding(const AcceptEncoding& accept_encoding); + void SetAcceptEncoding(AcceptEncoding&& accept_encoding); + void SetLimitRate(const LimitRate& limit_rate); + + // For cancellable requests + void SetCancellationParam(std::shared_ptr param); + + // Used in templated functions + void SetOption(const Url& url); + void SetOption(const Parameters& parameters); + void SetOption(Parameters&& parameters); + void SetOption(const Header& header); + void SetOption(const Timeout& timeout); + void SetOption(const ConnectTimeout& timeout); + void SetOption(const Authentication& auth); +// Only supported with libcurl >= 7.61.0. +// As an alternative use SetHeader and add the token manually. +#if LIBCURL_VERSION_NUM >= 0x073D00 + void SetOption(const Bearer& auth); +#endif + void SetOption(const UserAgent& ua); + void SetOption(Payload&& payload); + void SetOption(const Payload& payload); + void SetOption(const LimitRate& limit_rate); + void SetOption(Proxies&& proxies); + void SetOption(const Proxies& proxies); + void SetOption(ProxyAuthentication&& proxy_auth); + void SetOption(const ProxyAuthentication& proxy_auth); + void SetOption(Multipart&& multipart); + void SetOption(const Multipart& multipart); + void SetOption(const Redirect& redirect); + void SetOption(const Cookies& cookies); + void SetOption(Body&& body); + void SetOption(const Body& body); + void SetOption(const ReadCallback& read); + void SetOption(const HeaderCallback& header); + void SetOption(const WriteCallback& write); + void SetOption(const ProgressCallback& progress); + void SetOption(const DebugCallback& debug); + void SetOption(const LowSpeed& low_speed); + void SetOption(const VerifySsl& verify); + void SetOption(const Verbose& verbose); + void SetOption(const UnixSocket& unix_socket); + void SetOption(const SslOptions& options); + void SetOption(const Interface& iface); + void SetOption(const LocalPort& local_port); + void SetOption(const LocalPortRange& local_port_range); + void SetOption(const HttpVersion& version); + void SetOption(const Range& range); + void SetOption(const MultiRange& multi_range); + void SetOption(const ReserveSize& reserve_size); + void SetOption(const AcceptEncoding& accept_encoding); + void SetOption(AcceptEncoding&& accept_encoding); + void SetOption(const Resolve& resolve); + void SetOption(const std::vector& resolves); + + cpr_off_t GetDownloadFileLength(); + /** + * Attempt to preallocate enough memory for specified number of characters in the response string. + * Pass 0 to disable this behavior and let the response string be allocated dynamically on demand. + * + * Example: + * cpr::Session session; + * session.SetUrl(cpr::Url{"http://xxx/file"}); + * session.ResponseStringReserve(1024 * 512); // Reserve space for at least 1024 * 512 characters + * cpr::Response r = session.Get(); + **/ + void ResponseStringReserve(size_t size); + Response Delete(); + Response Download(const WriteCallback& write); + Response Download(std::ofstream& file); + Response Get(); + Response Head(); + Response Options(); + Response Patch(); + Response Post(); + Response Put(); + + AsyncResponse GetAsync(); + AsyncResponse DeleteAsync(); + AsyncResponse DownloadAsync(const WriteCallback& write); + AsyncResponse DownloadAsync(std::ofstream& file); + AsyncResponse HeadAsync(); + AsyncResponse OptionsAsync(); + AsyncResponse PatchAsync(); + AsyncResponse PostAsync(); + AsyncResponse PutAsync(); + + template + auto GetCallback(Then then); + template + auto PostCallback(Then then); + template + auto PutCallback(Then then); + template + auto HeadCallback(Then then); + template + auto DeleteCallback(Then then); + template + auto OptionsCallback(Then then); + template + auto PatchCallback(Then then); + + std::shared_ptr GetCurlHolder(); + std::string GetFullRequestUrl(); + + void PrepareDelete(); + void PrepareGet(); + void PrepareHead(); + void PrepareOptions(); + void PreparePatch(); + void PreparePost(); + void PreparePut(); + void PrepareDownload(const WriteCallback& write); + void PrepareDownload(std::ofstream& file); + Response Complete(CURLcode curl_error); + Response CompleteDownload(CURLcode curl_error); + + void AddInterceptor(const std::shared_ptr& pinterceptor); + + private: + // Interceptors should be able to call the private proceed() function + friend Interceptor; + friend MultiPerform; + + + bool hasBodyOrPayload_{false}; + bool chunkedTransferEncoding_{false}; + std::shared_ptr curl_; + Url url_; + Parameters parameters_; + Proxies proxies_; + ProxyAuthentication proxyAuth_; + Header header_; + AcceptEncoding acceptEncoding_; + /** + * Will be set by the read callback. + * Ensures that the "Transfer-Encoding" is set to "chunked", if not overriden in header_. + **/ + ReadCallback readcb_; + HeaderCallback headercb_; + WriteCallback writecb_; + ProgressCallback progresscb_; + DebugCallback debugcb_; + CancellationCallback cancellationcb_; + + size_t response_string_reserve_size_{0}; + std::string response_string_; + std::string header_string_; + std::queue> interceptors_; + bool isUsedInMultiPerform{false}; + bool isCancellable{false}; + + Response makeDownloadRequest(); + Response makeRequest(); + Response proceed(); + Response intercept(); + void prepareCommon(); + void prepareCommonDownload(); + void SetHeaderInternal(); + std::shared_ptr GetSharedPtrFromThis(); + CURLcode DoEasyPerform(); +}; + +template +auto Session::GetCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Get()); }, std::move(then)); +} + +template +auto Session::PostCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Post()); }, std::move(then)); +} + +template +auto Session::PutCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Put()); }, std::move(then)); +} + +template +auto Session::HeadCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Head()); }, std::move(then)); +} + +template +auto Session::DeleteCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Delete()); }, std::move(then)); +} + +template +auto Session::OptionsCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Options()); }, std::move(then)); +} + +template +auto Session::PatchCallback(Then then) { + return async([shared_this = GetSharedPtrFromThis()](Then then_inner) { return then_inner(shared_this->Patch()); }, std::move(then)); +} + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/singleton.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/singleton.h new file mode 100644 index 0000000..e2ea13b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/singleton.h @@ -0,0 +1,47 @@ +#ifndef CPR_SINGLETON_H +#define CPR_SINGLETON_H + +#include + +#ifndef CPR_DISABLE_COPY +#define CPR_DISABLE_COPY(Class) \ + Class(const Class&) = delete; \ + Class& operator=(const Class&) = delete; +#endif + +#ifndef CPR_SINGLETON_DECL +#define CPR_SINGLETON_DECL(Class) \ + public: \ + static Class* GetInstance(); \ + static void ExitInstance(); \ + private: \ + CPR_DISABLE_COPY(Class) \ + static Class* s_pInstance; \ + static std::mutex s_mutex; +#endif + +#ifndef CPR_SINGLETON_IMPL +#define CPR_SINGLETON_IMPL(Class) \ + Class* Class::s_pInstance = nullptr; \ + std::mutex Class::s_mutex; \ + Class* Class::GetInstance() { \ + if (s_pInstance == nullptr) { \ + s_mutex.lock(); \ + if (s_pInstance == nullptr) { \ + s_pInstance = new Class; \ + } \ + s_mutex.unlock(); \ + } \ + return s_pInstance; \ + } \ + void Class::ExitInstance() { \ + s_mutex.lock(); \ + if (s_pInstance) { \ + delete s_pInstance; \ + s_pInstance = nullptr; \ + } \ + s_mutex.unlock(); \ + } +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/ssl_ctx.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/ssl_ctx.h new file mode 100644 index 0000000..d495fb2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/ssl_ctx.h @@ -0,0 +1,26 @@ +#ifndef CPR_SSL_CTX_H +#define CPR_SSL_CTX_H + +#include "cpr/ssl_options.h" +#include + +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION + +namespace cpr { + +/** + * This callback function loads a CA certificate from raw_cert_buf and gets called by libcurl + * just before the initialization of an SSL connection. + * The raw_cert_buf argument is set with the CURLOPT_SSL_CTX_DATA option and has to be a nul + * terminated buffer. + * + * Sources: https://curl.se/libcurl/c/CURLOPT_SSL_CTX_FUNCTION.html + * https://curl.se/libcurl/c/CURLOPT_SSL_CTX_DATA.html + */ +CURLcode sslctx_function_load_ca_cert_from_buffer(CURL* curl, void* sslctx, void* raw_cert_buf); + +} // Namespace cpr + +#endif + +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/ssl_options.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/ssl_options.h new file mode 100644 index 0000000..dfd38ad --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/ssl_options.h @@ -0,0 +1,622 @@ +#ifndef CPR_SSLOPTIONS_H +#define CPR_SSLOPTIONS_H + +#include +#include +#include + +#include +#include + +#include "cpr/util.h" +#include + +#define __LIBCURL_VERSION_GTE(major, minor) ((LIBCURL_VERSION_MAJOR > (major)) || ((LIBCURL_VERSION_MAJOR == (major)) && (LIBCURL_VERSION_MINOR >= (minor)))) +#define __LIBCURL_VERSION_LT(major, minor) ((LIBCURL_VERSION_MAJOR < (major)) || ((LIBCURL_VERSION_MAJOR == (major)) && (LIBCURL_VERSION_MINOR < (minor)))) + +#ifndef SUPPORT_ALPN +#define SUPPORT_ALPN __LIBCURL_VERSION_GTE(7, 36) +#endif +#ifndef SUPPORT_NPN +#define SUPPORT_NPN __LIBCURL_VERSION_GTE(7, 36) && __LIBCURL_VERSION_LT(7, 86) +#endif + +#ifndef SUPPORT_SSLv2 +#define SUPPORT_SSLv2 __LIBCURL_VERSION_LT(7, 19) +#endif +#ifndef SUPPORT_SSLv3 +#define SUPPORT_SSLv3 __LIBCURL_VERSION_LT(7, 39) +#endif +#ifndef SUPPORT_TLSv1_0 +#define SUPPORT_TLSv1_0 __LIBCURL_VERSION_GTE(7, 34) +#endif +#ifndef SUPPORT_TLSv1_1 +#define SUPPORT_TLSv1_1 __LIBCURL_VERSION_GTE(7, 34) +#endif +#ifndef SUPPORT_TLSv1_2 +#define SUPPORT_TLSv1_2 __LIBCURL_VERSION_GTE(7, 34) +#endif +#ifndef SUPPORT_TLSv1_3 +#define SUPPORT_TLSv1_3 __LIBCURL_VERSION_GTE(7, 52) +#endif +#ifndef SUPPORT_MAX_TLS_VERSION +#define SUPPORT_MAX_TLS_VERSION __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_MAX_TLSv1_1 +#define SUPPORT_MAX_TLSv1_1 __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_MAX_TLSv1_2 +#define SUPPORT_MAX_TLSv1_2 __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_MAX_TLSv1_3 +#define SUPPORT_MAX_TLSv1_3 __LIBCURL_VERSION_GTE(7, 54) +#endif +#ifndef SUPPORT_TLSv13_CIPHERS +#define SUPPORT_TLSv13_CIPHERS __LIBCURL_VERSION_GTE(7, 61) +#endif +#ifndef SUPPORT_SESSIONID_CACHE +#define SUPPORT_SESSIONID_CACHE __LIBCURL_VERSION_GTE(7, 16) +#endif +#ifndef SUPPORT_SSL_FALSESTART +#define SUPPORT_SSL_FALSESTART __LIBCURL_VERSION_GTE(7, 42) +#endif +#ifndef SUPPORT_SSL_NO_REVOKE +#define SUPPORT_SSL_NO_REVOKE __LIBCURL_VERSION_GTE(7, 44) +#endif +#ifndef SUPPORT_CURLOPT_SSLKEY_BLOB +#define SUPPORT_CURLOPT_SSLKEY_BLOB __LIBCURL_VERSION_GTE(7, 71) +#endif +#ifndef SUPPORT_CURLOPT_SSL_CTX_FUNCTION +#define SUPPORT_CURLOPT_SSL_CTX_FUNCTION __LIBCURL_VERSION_GTE(7, 11) +#endif + +namespace cpr { + +class VerifySsl { + public: + VerifySsl() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifySsl(bool p_verify) : verify(p_verify) {} + + explicit operator bool() const { + return verify; + } + + bool verify = true; +}; + +namespace ssl { + +// set SSL client certificate +class CertFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CertFile(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + virtual ~CertFile() = default; + + const fs::path filename; + + virtual const char* GetCertType() const { + return "PEM"; + } +}; + +using PemCert = CertFile; + +class DerCert : public CertFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + DerCert(fs::path&& p_filename) : CertFile(std::move(p_filename)) {} + + virtual ~DerCert() = default; + + const char* GetCertType() const override { + return "DER"; + } +}; + +// specify private keyfile for TLS and SSL client cert +class KeyFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + KeyFile(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + template + KeyFile(FileType&& p_filename, PassType p_password) : filename(std::forward(p_filename)), password(std::move(p_password)) {} + + virtual ~KeyFile() { + util::secureStringClear(password); + } + + fs::path filename; + std::string password; + + virtual const char* GetKeyType() const { + return "PEM"; + } +}; + +#if SUPPORT_CURLOPT_SSLKEY_BLOB +class KeyBlob { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + KeyBlob(std::string&& p_blob) : blob(std::move(p_blob)) {} + + template + KeyBlob(BlobType&& p_blob, PassType p_password) : blob(std::forward(p_blob)), password(std::move(p_password)) {} + + virtual ~KeyBlob() { + util::secureStringClear(password); + } + + std::string blob; + std::string password; + + virtual const char* GetKeyType() const { + return "PEM"; + } +}; +#endif + +using PemKey = KeyFile; + +class DerKey : public KeyFile { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + DerKey(fs::path&& p_filename) : KeyFile(std::move(p_filename)) {} + + template + DerKey(FileType&& p_filename, PassType p_password) : KeyFile(std::forward(p_filename), std::move(p_password)) {} + + virtual ~DerKey() = default; + + const char* GetKeyType() const override { + return "DER"; + } +}; + +class PinnedPublicKey { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + PinnedPublicKey(std::string&& p_pinned_public_key) : pinned_public_key(std::move(p_pinned_public_key)) {} + + const std::string pinned_public_key; +}; + +#if SUPPORT_ALPN +// This option enables/disables ALPN in the SSL handshake (if the SSL backend libcurl is built to +// use supports it), which can be used to negotiate http2. +class ALPN { + public: + ALPN() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + ALPN(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; +#endif // SUPPORT_ALPN + +#if SUPPORT_NPN +// This option enables/disables NPN in the SSL handshake (if the SSL backend libcurl is built to +// use supports it), which can be used to negotiate http2. +class NPN { + public: + NPN() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + NPN(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; +#endif // SUPPORT_NPN + +// This option determines whether libcurl verifies that the server cert is for the server it is +// known as. +class VerifyHost { + public: + VerifyHost() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifyHost(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; + +// This option determines whether libcurl verifies the authenticity of the peer's certificate. +class VerifyPeer { + public: + VerifyPeer() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifyPeer(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; + +// This option determines whether libcurl verifies the status of the server cert using the +// "Certificate Status Request" TLS extension (aka. OCSP stapling). +class VerifyStatus { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + VerifyStatus(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = false; +}; + +// TLS v1.0 or later +struct TLSv1 {}; +#if SUPPORT_SSLv2 +// SSL v2 (but not SSLv3) +struct SSLv2 {}; +#endif +#if SUPPORT_SSLv3 +// SSL v3 (but not SSLv2) +struct SSLv3 {}; +#endif +#if SUPPORT_TLSv1_0 +// TLS v1.0 or later (Added in 7.34.0) +struct TLSv1_0 {}; +#endif +#if SUPPORT_TLSv1_1 +// TLS v1.1 or later (Added in 7.34.0) +struct TLSv1_1 {}; +#endif +#if SUPPORT_TLSv1_2 +// TLS v1.2 or later (Added in 7.34.0) +struct TLSv1_2 {}; +#endif +#if SUPPORT_TLSv1_3 +// TLS v1.3 or later (Added in 7.52.0) +struct TLSv1_3 {}; +#endif +#if SUPPORT_MAX_TLS_VERSION +// The flag defines the maximum supported TLS version by libcurl, or the default value from the SSL +// library is used. +struct MaxTLSVersion {}; +#endif +#if SUPPORT_MAX_TLSv1_0 +// The flag defines maximum supported TLS version as TLSv1.0. (Added in 7.54.0) +struct MaxTLSv1_0 {}; +#endif +#if SUPPORT_MAX_TLSv1_1 +// The flag defines maximum supported TLS version as TLSv1.1. (Added in 7.54.0) +struct MaxTLSv1_1 {}; +#endif +#if SUPPORT_MAX_TLSv1_2 +// The flag defines maximum supported TLS version as TLSv1.2. (Added in 7.54.0) +struct MaxTLSv1_2 {}; +#endif +#if SUPPORT_MAX_TLSv1_3 +// The flag defines maximum supported TLS version as TLSv1.3. (Added in 7.54.0) +struct MaxTLSv1_3 {}; +#endif + +// path to Certificate Authority (CA) bundle +class CaInfo { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CaInfo(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + fs::path filename; +}; + +// specify directory holding CA certificates +class CaPath { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CaPath(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + fs::path filename; +}; + +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION +class CaBuffer { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + CaBuffer(std::string&& p_buffer) : buffer(std::move(p_buffer)) {} + + const std::string buffer; +}; +#endif + +// specify a Certificate Revocation List file +class Crl { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Crl(fs::path&& p_filename) : filename(std::move(p_filename)) {} + + fs::path filename; +}; + +// specify ciphers to use for TLS +class Ciphers { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Ciphers(std::string&& p_ciphers) : ciphers(std::move(p_ciphers)) {} + + std::string ciphers; +}; + +#if SUPPORT_TLSv13_CIPHERS +// specify ciphers suites to use for TLS 1.3 +class TLS13_Ciphers { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + TLS13_Ciphers(std::string&& p_ciphers) : ciphers(std::move(p_ciphers)) {} + + std::string ciphers; +}; +#endif + +#if SUPPORT_SESSIONID_CACHE +// enable/disable use of the SSL session-ID cache +class SessionIdCache { + public: + SessionIdCache() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + SessionIdCache(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = true; +}; +#endif + +#if SUPPORT_SSL_FALSESTART +class SslFastStart { + public: + SslFastStart() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + SslFastStart(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = false; +}; +#endif + +class NoRevoke { + public: + NoRevoke() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + NoRevoke(bool p_enabled) : enabled(p_enabled) {} + + explicit operator bool() const { + return enabled; + } + + bool enabled = false; +}; + +} // namespace ssl + +struct SslOptions { + // We don't use fs::path here, as this leads to problems using windows + std::string cert_file; + std::string cert_type; + // We don't use fs::path here, as this leads to problems using windows + std::string key_file; +#if SUPPORT_CURLOPT_SSLKEY_BLOB + std::string key_blob; +#endif + std::string key_type; + std::string key_pass; + std::string pinned_public_key; +#if SUPPORT_ALPN + bool enable_alpn = true; +#endif // SUPPORT_ALPN +#if SUPPORT_NPN + bool enable_npn = true; +#endif // SUPPORT_ALPN + bool verify_host = true; + bool verify_peer = true; + bool verify_status = false; + int ssl_version = CURL_SSLVERSION_DEFAULT; +#if SUPPORT_SSL_NO_REVOKE + bool ssl_no_revoke = false; +#endif +#if SUPPORT_MAX_TLS_VERSION + int max_version = CURL_SSLVERSION_MAX_DEFAULT; +#endif + // We don't use fs::path here, as this leads to problems using windows + std::string ca_info; + // We don't use fs::path here, as this leads to problems using windows + std::string ca_path; +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION + std::string ca_buffer; +#endif + // We don't use fs::path here, as this leads to problems using windows + std::string crl_file; + std::string ciphers; +#if SUPPORT_TLSv13_CIPHERS + std::string tls13_ciphers; +#endif +#if SUPPORT_SESSIONID_CACHE + bool session_id_cache = true; +#endif + + ~SslOptions() noexcept { +#if SUPPORT_CURLOPT_SSLKEY_BLOB + util::secureStringClear(key_blob); +#endif + util::secureStringClear(key_pass); + } + + void SetOption(const ssl::CertFile& opt) { + cert_file = opt.filename.string(); + cert_type = opt.GetCertType(); + } + void SetOption(const ssl::KeyFile& opt) { + key_file = opt.filename.string(); + key_type = opt.GetKeyType(); + key_pass = opt.password; + } +#if SUPPORT_CURLOPT_SSLKEY_BLOB + void SetOption(const ssl::KeyBlob& opt) { + key_blob = opt.blob; + key_type = opt.GetKeyType(); + key_pass = opt.password; + } +#endif + void SetOption(const ssl::PinnedPublicKey& opt) { + pinned_public_key = opt.pinned_public_key; + } + +#if SUPPORT_ALPN + void SetOption(const ssl::ALPN& opt) { + enable_alpn = opt.enabled; + } +#endif // SUPPORT_ALPN +#if SUPPORT_NPN + void SetOption(const ssl::NPN& opt) { + enable_npn = opt.enabled; + } +#endif // SUPPORT_NPN + void SetOption(const ssl::VerifyHost& opt) { + verify_host = opt.enabled; + } + void SetOption(const ssl::VerifyPeer& opt) { + verify_peer = opt.enabled; + } + void SetOption(const ssl::VerifyStatus& opt) { + verify_status = opt.enabled; + } + void SetOption(const ssl::TLSv1& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1; + } +#if SUPPORT_SSL_NO_REVOKE + void SetOption(const ssl::NoRevoke& opt) { + ssl_no_revoke = opt.enabled; + } +#endif +#if SUPPORT_SSLv2 + void SetOption(const ssl::SSLv2& /*opt*/) { + ssl_version = CURL_SSLVERSION_SSLv2; + } +#endif +#if SUPPORT_SSLv3 + void SetOption(const ssl::SSLv3& /*opt*/) { + ssl_version = CURL_SSLVERSION_SSLv3; + } +#endif +#if SUPPORT_TLSv1_0 + void SetOption(const ssl::TLSv1_0& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_0; + } +#endif +#if SUPPORT_TLSv1_1 + void SetOption(const ssl::TLSv1_1& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_1; + } +#endif +#if SUPPORT_TLSv1_2 + void SetOption(const ssl::TLSv1_2& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_2; + } +#endif +#if SUPPORT_TLSv1_3 + void SetOption(const ssl::TLSv1_3& /*opt*/) { + ssl_version = CURL_SSLVERSION_TLSv1_3; + } +#endif +#if SUPPORT_MAX_TLS_VERSION + void SetOption(const ssl::MaxTLSVersion& /*opt*/) { + max_version = CURL_SSLVERSION_DEFAULT; + } +#endif +#if SUPPORT_MAX_TLSv1_0 + void SetOption(const ssl::MaxTLSv1_0& opt) { + max_version = CURL_SSLVERSION_MAX_TLSv1_0; + } +#endif +#if SUPPORT_MAX_TLSv1_1 + void SetOption(const ssl::MaxTLSv1_1& /*opt*/) { + max_version = CURL_SSLVERSION_MAX_TLSv1_1; + } +#endif +#if SUPPORT_MAX_TLSv1_2 + void SetOption(const ssl::MaxTLSv1_2& /*opt*/) { + max_version = CURL_SSLVERSION_MAX_TLSv1_2; + } +#endif +#if SUPPORT_MAX_TLSv1_3 + void SetOption(const ssl::MaxTLSv1_3& /*opt*/) { + max_version = CURL_SSLVERSION_MAX_TLSv1_3; + } +#endif + void SetOption(const ssl::CaInfo& opt) { + ca_info = opt.filename.string(); + } + void SetOption(const ssl::CaPath& opt) { + ca_path = opt.filename.string(); + } +#if SUPPORT_CURLOPT_SSL_CTX_FUNCTION + void SetOption(const ssl::CaBuffer& opt) { + ca_buffer = opt.buffer; + } +#endif + void SetOption(const ssl::Crl& opt) { + crl_file = opt.filename.string(); + } + void SetOption(const ssl::Ciphers& opt) { + ciphers = opt.ciphers; + } +#if SUPPORT_TLSv13_CIPHERS + void SetOption(const ssl::TLS13_Ciphers& opt) { + tls13_ciphers = opt.ciphers; + } +#endif +#if SUPPORT_SESSIONID_CACHE + void SetOption(const ssl::SessionIdCache& opt) { + session_id_cache = opt.enabled; + } +#endif +}; + +namespace priv { + +template +void set_ssl_option(SslOptions& opts, T&& t) { + opts.SetOption(std::forward(t)); +} + +template +void set_ssl_option(SslOptions& opts, T&& t, Ts&&... ts) { + set_ssl_option(opts, std::forward(t)); + set_ssl_option(opts, std::move(ts)...); +} + +} // namespace priv + +template +SslOptions Ssl(Ts&&... ts) { + SslOptions opts; + priv::set_ssl_option(opts, std::move(ts)...); + return opts; +} + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/status_codes.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/status_codes.h new file mode 100644 index 0000000..6c7acd6 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/status_codes.h @@ -0,0 +1,100 @@ +#ifndef _CPR_STATUS_CODES +#define _CPR_STATUS_CODES +#include +namespace cpr { +namespace status { +// Information responses +constexpr std::int32_t HTTP_CONTINUE = 100; +constexpr std::int32_t HTTP_SWITCHING_PROTOCOL = 101; +constexpr std::int32_t HTTP_PROCESSING = 102; +constexpr std::int32_t HTTP_EARLY_HINTS = 103; +// Successful responses +constexpr std::int32_t HTTP_OK = 200; +constexpr std::int32_t HTTP_CREATED = 201; +constexpr std::int32_t HTTP_ACCEPTED = 202; +constexpr std::int32_t HTTP_NON_AUTHORITATIVE_INFORMATION = 203; +constexpr std::int32_t HTTP_NO_CONTENT = 204; +constexpr std::int32_t HTTP_RESET_CONTENT = 205; +constexpr std::int32_t HTTP_PARTIAL_CONTENT = 206; +constexpr std::int32_t HTTP_MULTI_STATUS = 207; +constexpr std::int32_t HTTP_ALREADY_REPORTED = 208; +constexpr std::int32_t HTTP_IM_USED = 226; +// Redirection messages +constexpr std::int32_t HTTP_MULTIPLE_CHOICE = 300; +constexpr std::int32_t HTTP_MOVED_PERMANENTLY = 301; +constexpr std::int32_t HTTP_FOUND = 302; +constexpr std::int32_t HTTP_SEE_OTHER = 303; +constexpr std::int32_t HTTP_NOT_MODIFIED = 304; +constexpr std::int32_t HTTP_USE_PROXY = 305; +constexpr std::int32_t HTTP_UNUSED = 306; +constexpr std::int32_t HTTP_TEMPORARY_REDIRECT = 307; +constexpr std::int32_t HTTP_PERMANENT_REDIRECT = 308; +// Client error responses +constexpr std::int32_t HTTP_BAD_REQUEST = 400; +constexpr std::int32_t HTTP_UNAUTHORIZED = 401; +constexpr std::int32_t HTTP_PAYMENT_REQUIRED = 402; +constexpr std::int32_t HTTP_FORBIDDEN = 403; +constexpr std::int32_t HTTP_NOT_FOUND = 404; +constexpr std::int32_t HTTP_METHOD_NOT_ALLOWED = 405; +constexpr std::int32_t HTTP_NOT_ACCEPTABLE = 406; +constexpr std::int32_t HTTP_PROXY_AUTHENTICATION_REQUIRED = 407; +constexpr std::int32_t HTTP_REQUEST_TIMEOUT = 408; +constexpr std::int32_t HTTP_CONFLICT = 409; +constexpr std::int32_t HTTP_GONE = 410; +constexpr std::int32_t HTTP_LENGTH_REQUIRED = 411; +constexpr std::int32_t HTTP_PRECONDITION_FAILED = 412; +constexpr std::int32_t HTTP_PAYLOAD_TOO_LARGE = 413; +constexpr std::int32_t HTTP_URI_TOO_LONG = 414; +constexpr std::int32_t HTTP_UNSUPPORTED_MEDIA_TYPE = 415; +constexpr std::int32_t HTTP_REQUESTED_RANGE_NOT_SATISFIABLE = 416; +constexpr std::int32_t HTTP_EXPECTATION_FAILED = 417; +constexpr std::int32_t HTTP_IM_A_TEAPOT = 418; +constexpr std::int32_t HTTP_MISDIRECTED_REQUEST = 421; +constexpr std::int32_t HTTP_UNPROCESSABLE_ENTITY = 422; +constexpr std::int32_t HTTP_LOCKED = 423; +constexpr std::int32_t HTTP_FAILED_DEPENDENCY = 424; +constexpr std::int32_t HTTP_TOO_EARLY = 425; +constexpr std::int32_t HTTP_UPGRADE_REQUIRED = 426; +constexpr std::int32_t HTTP_PRECONDITION_REQUIRED = 428; +constexpr std::int32_t HTTP_TOO_MANY_REQUESTS = 429; +constexpr std::int32_t HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431; +constexpr std::int32_t HTTP_UNAVAILABLE_FOR_LEGAL_REASONS = 451; +// Server response errors +constexpr std::int32_t HTTP_INTERNAL_SERVER_ERROR = 500; +constexpr std::int32_t HTTP_NOT_IMPLEMENTED = 501; +constexpr std::int32_t HTTP_BAD_GATEWAY = 502; +constexpr std::int32_t HTTP_SERVICE_UNAVAILABLE = 503; +constexpr std::int32_t HTTP_GATEWAY_TIMEOUT = 504; +constexpr std::int32_t HTTP_HTTP_VERSION_NOT_SUPPORTED = 505; +constexpr std::int32_t HTTP_VARIANT_ALSO_NEGOTIATES = 506; +constexpr std::int32_t HTTP_INSUFFICIENT_STORAGE = 507; +constexpr std::int32_t HTTP_LOOP_DETECTED = 508; +constexpr std::int32_t HTTP_NOT_EXTENDED = 510; +constexpr std::int32_t HTTP_NETWORK_AUTHENTICATION_REQUIRED = 511; + +constexpr std::int32_t INFO_CODE_OFFSET = 100; +constexpr std::int32_t SUCCESS_CODE_OFFSET = 200; +constexpr std::int32_t REDIRECT_CODE_OFFSET = 300; +constexpr std::int32_t CLIENT_ERROR_CODE_OFFSET = 400; +constexpr std::int32_t SERVER_ERROR_CODE_OFFSET = 500; +constexpr std::int32_t MISC_CODE_OFFSET = 600; + +constexpr bool is_informational(const std::int32_t code) { + return (code >= INFO_CODE_OFFSET && code < SUCCESS_CODE_OFFSET); +} +constexpr bool is_success(const std::int32_t code) { + return (code >= SUCCESS_CODE_OFFSET && code < REDIRECT_CODE_OFFSET); +} +constexpr bool is_redirect(const std::int32_t code) { + return (code >= REDIRECT_CODE_OFFSET && code < CLIENT_ERROR_CODE_OFFSET); +} +constexpr bool is_client_error(const std::int32_t code) { + return (code >= CLIENT_ERROR_CODE_OFFSET && code < SERVER_ERROR_CODE_OFFSET); +} +constexpr bool is_server_error(const std::int32_t code) { + return (code >= SERVER_ERROR_CODE_OFFSET && code < MISC_CODE_OFFSET); +} + +} // namespace status +} // namespace cpr +#endif \ No newline at end of file diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/threadpool.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/threadpool.h new file mode 100644 index 0000000..bb7e7f2 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/threadpool.h @@ -0,0 +1,122 @@ +#ifndef CPR_THREAD_POOL_H +#define CPR_THREAD_POOL_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define CPR_DEFAULT_THREAD_POOL_MAX_THREAD_NUM std::thread::hardware_concurrency() + +constexpr size_t CPR_DEFAULT_THREAD_POOL_MIN_THREAD_NUM = 1; +constexpr std::chrono::milliseconds CPR_DEFAULT_THREAD_POOL_MAX_IDLE_TIME{60000}; + +namespace cpr { + +class ThreadPool { + public: + using Task = std::function; + + explicit ThreadPool(size_t min_threads = CPR_DEFAULT_THREAD_POOL_MIN_THREAD_NUM, size_t max_threads = CPR_DEFAULT_THREAD_POOL_MAX_THREAD_NUM, std::chrono::milliseconds max_idle_ms = CPR_DEFAULT_THREAD_POOL_MAX_IDLE_TIME); + + virtual ~ThreadPool(); + + void SetMinThreadNum(size_t min_threads) { + min_thread_num = min_threads; + } + void SetMaxThreadNum(size_t max_threads) { + max_thread_num = max_threads; + } + void SetMaxIdleTime(std::chrono::milliseconds ms) { + max_idle_time = ms; + } + size_t GetCurrentThreadNum() { + return cur_thread_num; + } + size_t GetIdleThreadNum() { + return idle_thread_num; + } + bool IsStarted() { + return status != STOP; + } + bool IsStopped() { + return status == STOP; + } + + int Start(size_t start_threads = 0); + int Stop(); + int Pause(); + int Resume(); + int Wait(); + + /** + * Return a future, calling future.get() will wait task done and return RetType. + * Submit(fn, args...) + * Submit(std::bind(&Class::mem_fn, &obj)) + * Submit(std::mem_fn(&Class::mem_fn, &obj)) + **/ + template + auto Submit(Fn&& fn, Args&&... args) { + if (status == STOP) { + Start(); + } + if (idle_thread_num <= 0 && cur_thread_num < max_thread_num) { + CreateThread(); + } + using RetType = decltype(fn(args...)); + auto task = std::make_shared >(std::bind(std::forward(fn), std::forward(args)...)); + std::future future = task->get_future(); + { + std::lock_guard locker(task_mutex); + tasks.emplace([task] { (*task)(); }); + } + + task_cond.notify_one(); + return future; + } + + private: + bool CreateThread(); + void AddThread(std::thread* thread); + void DelThread(std::thread::id id); + + public: + size_t min_thread_num; + size_t max_thread_num; + std::chrono::milliseconds max_idle_time; + + private: + enum Status { + STOP, + RUNNING, + PAUSE, + }; + + struct ThreadData { + std::shared_ptr thread; + std::thread::id id; + Status status; + time_t start_time; + time_t stop_time; + }; + + std::atomic status; + std::atomic cur_thread_num; + std::atomic idle_thread_num; + std::list threads; + std::mutex thread_mutex; + std::queue tasks; + std::mutex task_mutex; + std::condition_variable task_cond; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/timeout.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/timeout.h new file mode 100644 index 0000000..83b3e68 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/timeout.h @@ -0,0 +1,27 @@ +#ifndef CPR_TIMEOUT_H +#define CPR_TIMEOUT_H + +#include +#include + +namespace cpr { + +class Timeout { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Timeout(const std::chrono::milliseconds& duration) : ms{duration} {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Timeout(const std::int32_t& milliseconds) : Timeout{std::chrono::milliseconds(milliseconds)} {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Timeout(const std::chrono::seconds& duration) : ms{std::chrono::milliseconds(duration).count()} {} + + // No way around since curl uses a long here. + // NOLINTNEXTLINE(google-runtime-int) + long Milliseconds() const; + + std::chrono::milliseconds ms; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/unix_socket.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/unix_socket.h new file mode 100644 index 0000000..152caf0 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/unix_socket.h @@ -0,0 +1,21 @@ +#ifndef CPR_UNIX_SOCKET_H +#define CPR_UNIX_SOCKET_H + +#include + +namespace cpr { + +class UnixSocket { + public: + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UnixSocket(std::string unix_socket) : unix_socket_(std::move(unix_socket)) {} + + const char* GetUnixSocketString() const noexcept; + + private: + const std::string unix_socket_; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/user_agent.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/user_agent.h new file mode 100644 index 0000000..a3cc129 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/user_agent.h @@ -0,0 +1,31 @@ +#ifndef CPR_USERAGENT_H +#define CPR_USERAGENT_H + +#include +#include + +#include "cpr/cprtypes.h" + +namespace cpr { +class UserAgent : public StringHolder { + public: + UserAgent() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UserAgent(std::string useragent) : StringHolder(std::move(useragent)) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UserAgent(std::string_view useragent) : StringHolder(useragent) {} + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + UserAgent(const char* useragent) : StringHolder(useragent) {} + UserAgent(const char* str, size_t len) : StringHolder(str, len) {} + UserAgent(const std::initializer_list args) : StringHolder(args) {} + UserAgent(const UserAgent& other) = default; + UserAgent(UserAgent&& old) noexcept = default; + ~UserAgent() override = default; + + UserAgent& operator=(UserAgent&& old) noexcept = default; + UserAgent& operator=(const UserAgent& other) = default; +}; + +} // namespace cpr + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/util.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/util.h new file mode 100644 index 0000000..d851e23 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/util.h @@ -0,0 +1,45 @@ +#ifndef CPR_UTIL_H +#define CPR_UTIL_H + +#include +#include +#include + +#include "cpr/callback.h" +#include "cpr/cookies.h" +#include "cpr/cprtypes.h" +#include "cpr/curlholder.h" + +namespace cpr::util { + +Header parseHeader(const std::string& headers, std::string* status_line = nullptr, std::string* reason = nullptr); +Cookies parseCookies(curl_slist* raw_cookies); +size_t readUserFunction(char* ptr, size_t size, size_t nitems, const ReadCallback* read); +size_t headerUserFunction(char* ptr, size_t size, size_t nmemb, const HeaderCallback* header); +size_t writeFunction(char* ptr, size_t size, size_t nmemb, std::string* data); +size_t writeFileFunction(char* ptr, size_t size, size_t nmemb, std::ofstream* file); +size_t writeUserFunction(char* ptr, size_t size, size_t nmemb, const WriteCallback* write); + +template +int progressUserFunction(const T* progress, cpr_pf_arg_t dltotal, cpr_pf_arg_t dlnow, cpr_pf_arg_t ultotal, cpr_pf_arg_t ulnow) { + const int cancel_retval{1}; + static_assert(cancel_retval != CURL_PROGRESSFUNC_CONTINUE); + return (*progress)(dltotal, dlnow, ultotal, ulnow) ? 0 : cancel_retval; +} +int debugUserFunction(CURL* handle, curl_infotype type, char* data, size_t size, const DebugCallback* debug); +std::vector split(const std::string& to_split, char delimiter); +std::string urlEncode(const std::string& s); +std::string urlDecode(const std::string& s); + +/** + * Override the content of the provided string to hide sensitive data. The + * string content after invocation is undefined. The string size is reset to zero. + * impl. based on: + * https://github.com/ojeda/secure_clear/blob/master/example-implementation/secure_clear.h + **/ +void secureStringClear(std::string& s); +bool isTrue(const std::string& s); + +} // namespace cpr::util + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/verbose.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/verbose.h new file mode 100644 index 0000000..2bf0df8 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/cpr/verbose.h @@ -0,0 +1,18 @@ +#ifndef CPR_VERBOSE_H_ +#define CPR_VERBOSE_H_ + +namespace cpr { + +class Verbose { + public: + Verbose() = default; + // NOLINTNEXTLINE(google-explicit-constructor, hicpp-explicit-conversions) + Verbose(const bool p_verbose) : verbose{p_verbose} {} + + bool verbose = true; +}; + +} // namespace cpr + + +#endif /* CPR_VERBOSE_H_ */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/curl.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/curl.h new file mode 100644 index 0000000..bf71d82 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/curl.h @@ -0,0 +1,3241 @@ +#ifndef CURLINC_CURL_H +#define CURLINC_CURL_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* + * If you have libcurl problems, all docs and details are found here: + * https://curl.se/libcurl/ + */ + +#ifdef CURL_NO_OLDIES +#define CURL_STRICTER +#endif + +/* Compile-time deprecation macros. */ +#if defined(__GNUC__) && \ + ((__GNUC__ > 12) || ((__GNUC__ == 12) && (__GNUC_MINOR__ >= 1 ))) && \ + !defined(__INTEL_COMPILER) && \ + !defined(CURL_DISABLE_DEPRECATION) && !defined(BUILDING_LIBCURL) +#define CURL_DEPRECATED(version, message) \ + __attribute__((deprecated("since " # version ". " message))) +#define CURL_IGNORE_DEPRECATION(statements) \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ + statements \ + _Pragma("GCC diagnostic pop") +#else +#define CURL_DEPRECATED(version, message) +#define CURL_IGNORE_DEPRECATION(statements) statements +#endif + +#include "curlver.h" /* libcurl version defines */ +#include "system.h" /* determine things run-time */ + +/* + * Define CURL_WIN32 when build target is Win32 API + */ + +#if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && \ + !defined(__SYMBIAN32__) +#define CURL_WIN32 +#endif + +#include +#include + +#if (defined(__FreeBSD__) && (__FreeBSD__ >= 2)) || defined(__MidnightBSD__) +/* Needed for __FreeBSD_version or __MidnightBSD_version symbol definition */ +#include +#endif + +/* The include stuff here below is mainly for time_t! */ +#include +#include + +#if defined(CURL_WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__) +#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || \ + defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H)) +/* The check above prevents the winsock2 inclusion if winsock.h already was + included, since they can't co-exist without problems */ +#include +#include +#endif +#endif + +/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish + libc5-based Linux systems. Only include it on systems that are known to + require it! */ +#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \ + defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \ + defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \ + defined(__CYGWIN__) || defined(AMIGA) || defined(__NuttX__) || \ + (defined(__FreeBSD_version) && (__FreeBSD_version < 800000)) || \ + (defined(__MidnightBSD_version) && (__MidnightBSD_version < 100000)) || \ + defined(__sun__) || defined(__serenity__) || defined(__vxworks__) +#include +#endif + +#if !defined(CURL_WIN32) && !defined(_WIN32_WCE) +#include +#endif + +#if !defined(CURL_WIN32) +#include +#endif + +/* Compatibility for non-Clang compilers */ +#ifndef __has_declspec_attribute +# define __has_declspec_attribute(x) 0 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) +typedef struct Curl_easy CURL; +typedef struct Curl_share CURLSH; +#else +typedef void CURL; +typedef void CURLSH; +#endif + +/* + * libcurl external API function linkage decorations. + */ + +#ifdef CURL_STATICLIB +# define CURL_EXTERN +#elif defined(CURL_WIN32) || defined(__SYMBIAN32__) || \ + (__has_declspec_attribute(dllexport) && \ + __has_declspec_attribute(dllimport)) +# if defined(BUILDING_LIBCURL) +# define CURL_EXTERN __declspec(dllexport) +# else +# define CURL_EXTERN __declspec(dllimport) +# endif +#elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS) +# define CURL_EXTERN CURL_EXTERN_SYMBOL +#else +# define CURL_EXTERN +#endif + +#ifndef curl_socket_typedef +/* socket typedef */ +#if defined(CURL_WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H) +typedef SOCKET curl_socket_t; +#define CURL_SOCKET_BAD INVALID_SOCKET +#else +typedef int curl_socket_t; +#define CURL_SOCKET_BAD -1 +#endif +#define curl_socket_typedef +#endif /* curl_socket_typedef */ + +/* enum for the different supported SSL backends */ +typedef enum { + CURLSSLBACKEND_NONE = 0, + CURLSSLBACKEND_OPENSSL = 1, + CURLSSLBACKEND_GNUTLS = 2, + CURLSSLBACKEND_NSS CURL_DEPRECATED(8.3.0, "") = 3, + CURLSSLBACKEND_OBSOLETE4 = 4, /* Was QSOSSL. */ + CURLSSLBACKEND_GSKIT CURL_DEPRECATED(8.3.0, "") = 5, + CURLSSLBACKEND_POLARSSL CURL_DEPRECATED(7.69.0, "") = 6, + CURLSSLBACKEND_WOLFSSL = 7, + CURLSSLBACKEND_SCHANNEL = 8, + CURLSSLBACKEND_SECURETRANSPORT = 9, + CURLSSLBACKEND_AXTLS CURL_DEPRECATED(7.61.0, "") = 10, + CURLSSLBACKEND_MBEDTLS = 11, + CURLSSLBACKEND_MESALINK CURL_DEPRECATED(7.82.0, "") = 12, + CURLSSLBACKEND_BEARSSL = 13, + CURLSSLBACKEND_RUSTLS = 14 +} curl_sslbackend; + +/* aliases for library clones and renames */ +#define CURLSSLBACKEND_AWSLC CURLSSLBACKEND_OPENSSL +#define CURLSSLBACKEND_BORINGSSL CURLSSLBACKEND_OPENSSL +#define CURLSSLBACKEND_LIBRESSL CURLSSLBACKEND_OPENSSL + +/* deprecated names: */ +#define CURLSSLBACKEND_CYASSL CURLSSLBACKEND_WOLFSSL +#define CURLSSLBACKEND_DARWINSSL CURLSSLBACKEND_SECURETRANSPORT + +struct curl_httppost { + struct curl_httppost *next; /* next entry in the list */ + char *name; /* pointer to allocated name */ + long namelength; /* length of name length */ + char *contents; /* pointer to allocated data contents */ + long contentslength; /* length of contents field, see also + CURL_HTTPPOST_LARGE */ + char *buffer; /* pointer to allocated buffer contents */ + long bufferlength; /* length of buffer field */ + char *contenttype; /* Content-Type */ + struct curl_slist *contentheader; /* list of extra headers for this form */ + struct curl_httppost *more; /* if one field name has more than one + file, this link should link to following + files */ + long flags; /* as defined below */ + +/* specified content is a file name */ +#define CURL_HTTPPOST_FILENAME (1<<0) +/* specified content is a file name */ +#define CURL_HTTPPOST_READFILE (1<<1) +/* name is only stored pointer do not free in formfree */ +#define CURL_HTTPPOST_PTRNAME (1<<2) +/* contents is only stored pointer do not free in formfree */ +#define CURL_HTTPPOST_PTRCONTENTS (1<<3) +/* upload file from buffer */ +#define CURL_HTTPPOST_BUFFER (1<<4) +/* upload file from pointer contents */ +#define CURL_HTTPPOST_PTRBUFFER (1<<5) +/* upload file contents by using the regular read callback to get the data and + pass the given pointer as custom pointer */ +#define CURL_HTTPPOST_CALLBACK (1<<6) +/* use size in 'contentlen', added in 7.46.0 */ +#define CURL_HTTPPOST_LARGE (1<<7) + + char *showfilename; /* The file name to show. If not set, the + actual file name will be used (if this + is a file part) */ + void *userp; /* custom pointer used for + HTTPPOST_CALLBACK posts */ + curl_off_t contentlen; /* alternative length of contents + field. Used if CURL_HTTPPOST_LARGE is + set. Added in 7.46.0 */ +}; + + +/* This is a return code for the progress callback that, when returned, will + signal libcurl to continue executing the default progress function */ +#define CURL_PROGRESSFUNC_CONTINUE 0x10000001 + +/* This is the CURLOPT_PROGRESSFUNCTION callback prototype. It is now + considered deprecated but was the only choice up until 7.31.0 */ +typedef int (*curl_progress_callback)(void *clientp, + double dltotal, + double dlnow, + double ultotal, + double ulnow); + +/* This is the CURLOPT_XFERINFOFUNCTION callback prototype. It was introduced + in 7.32.0, avoids the use of floating point numbers and provides more + detailed information. */ +typedef int (*curl_xferinfo_callback)(void *clientp, + curl_off_t dltotal, + curl_off_t dlnow, + curl_off_t ultotal, + curl_off_t ulnow); + +#ifndef CURL_MAX_READ_SIZE + /* The maximum receive buffer size configurable via CURLOPT_BUFFERSIZE. */ +#define CURL_MAX_READ_SIZE (10*1024*1024) +#endif + +#ifndef CURL_MAX_WRITE_SIZE + /* Tests have proven that 20K is a very bad buffer size for uploads on + Windows, while 16K for some odd reason performed a lot better. + We do the ifndef check to allow this value to easier be changed at build + time for those who feel adventurous. The practical minimum is about + 400 bytes since libcurl uses a buffer of this size as a scratch area + (unrelated to network send operations). */ +#define CURL_MAX_WRITE_SIZE 16384 +#endif + +#ifndef CURL_MAX_HTTP_HEADER +/* The only reason to have a max limit for this is to avoid the risk of a bad + server feeding libcurl with a never-ending header that will cause reallocs + infinitely */ +#define CURL_MAX_HTTP_HEADER (100*1024) +#endif + +/* This is a magic return code for the write callback that, when returned, + will signal libcurl to pause receiving on the current transfer. */ +#define CURL_WRITEFUNC_PAUSE 0x10000001 + +/* This is a magic return code for the write callback that, when returned, + will signal an error from the callback. */ +#define CURL_WRITEFUNC_ERROR 0xFFFFFFFF + +typedef size_t (*curl_write_callback)(char *buffer, + size_t size, + size_t nitems, + void *outstream); + +/* This callback will be called when a new resolver request is made */ +typedef int (*curl_resolver_start_callback)(void *resolver_state, + void *reserved, void *userdata); + +/* enumeration of file types */ +typedef enum { + CURLFILETYPE_FILE = 0, + CURLFILETYPE_DIRECTORY, + CURLFILETYPE_SYMLINK, + CURLFILETYPE_DEVICE_BLOCK, + CURLFILETYPE_DEVICE_CHAR, + CURLFILETYPE_NAMEDPIPE, + CURLFILETYPE_SOCKET, + CURLFILETYPE_DOOR, /* is possible only on Sun Solaris now */ + + CURLFILETYPE_UNKNOWN /* should never occur */ +} curlfiletype; + +#define CURLFINFOFLAG_KNOWN_FILENAME (1<<0) +#define CURLFINFOFLAG_KNOWN_FILETYPE (1<<1) +#define CURLFINFOFLAG_KNOWN_TIME (1<<2) +#define CURLFINFOFLAG_KNOWN_PERM (1<<3) +#define CURLFINFOFLAG_KNOWN_UID (1<<4) +#define CURLFINFOFLAG_KNOWN_GID (1<<5) +#define CURLFINFOFLAG_KNOWN_SIZE (1<<6) +#define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1<<7) + +/* Information about a single file, used when doing FTP wildcard matching */ +struct curl_fileinfo { + char *filename; + curlfiletype filetype; + time_t time; /* always zero! */ + unsigned int perm; + int uid; + int gid; + curl_off_t size; + long int hardlinks; + + struct { + /* If some of these fields is not NULL, it is a pointer to b_data. */ + char *time; + char *perm; + char *user; + char *group; + char *target; /* pointer to the target filename of a symlink */ + } strings; + + unsigned int flags; + + /* These are libcurl private struct fields. Previously used by libcurl, so + they must never be interfered with. */ + char *b_data; + size_t b_size; + size_t b_used; +}; + +/* return codes for CURLOPT_CHUNK_BGN_FUNCTION */ +#define CURL_CHUNK_BGN_FUNC_OK 0 +#define CURL_CHUNK_BGN_FUNC_FAIL 1 /* tell the lib to end the task */ +#define CURL_CHUNK_BGN_FUNC_SKIP 2 /* skip this chunk over */ + +/* if splitting of data transfer is enabled, this callback is called before + download of an individual chunk started. Note that parameter "remains" works + only for FTP wildcard downloading (for now), otherwise is not used */ +typedef long (*curl_chunk_bgn_callback)(const void *transfer_info, + void *ptr, + int remains); + +/* return codes for CURLOPT_CHUNK_END_FUNCTION */ +#define CURL_CHUNK_END_FUNC_OK 0 +#define CURL_CHUNK_END_FUNC_FAIL 1 /* tell the lib to end the task */ + +/* If splitting of data transfer is enabled this callback is called after + download of an individual chunk finished. + Note! After this callback was set then it have to be called FOR ALL chunks. + Even if downloading of this chunk was skipped in CHUNK_BGN_FUNC. + This is the reason why we don't need "transfer_info" parameter in this + callback and we are not interested in "remains" parameter too. */ +typedef long (*curl_chunk_end_callback)(void *ptr); + +/* return codes for FNMATCHFUNCTION */ +#define CURL_FNMATCHFUNC_MATCH 0 /* string corresponds to the pattern */ +#define CURL_FNMATCHFUNC_NOMATCH 1 /* pattern doesn't match the string */ +#define CURL_FNMATCHFUNC_FAIL 2 /* an error occurred */ + +/* callback type for wildcard downloading pattern matching. If the + string matches the pattern, return CURL_FNMATCHFUNC_MATCH value, etc. */ +typedef int (*curl_fnmatch_callback)(void *ptr, + const char *pattern, + const char *string); + +/* These are the return codes for the seek callbacks */ +#define CURL_SEEKFUNC_OK 0 +#define CURL_SEEKFUNC_FAIL 1 /* fail the entire transfer */ +#define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so + libcurl might try other means instead */ +typedef int (*curl_seek_callback)(void *instream, + curl_off_t offset, + int origin); /* 'whence' */ + +/* This is a return code for the read callback that, when returned, will + signal libcurl to immediately abort the current transfer. */ +#define CURL_READFUNC_ABORT 0x10000000 +/* This is a return code for the read callback that, when returned, will + signal libcurl to pause sending data on the current transfer. */ +#define CURL_READFUNC_PAUSE 0x10000001 + +/* Return code for when the trailing headers' callback has terminated + without any errors */ +#define CURL_TRAILERFUNC_OK 0 +/* Return code for when was an error in the trailing header's list and we + want to abort the request */ +#define CURL_TRAILERFUNC_ABORT 1 + +typedef size_t (*curl_read_callback)(char *buffer, + size_t size, + size_t nitems, + void *instream); + +typedef int (*curl_trailer_callback)(struct curl_slist **list, + void *userdata); + +typedef enum { + CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */ + CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */ + CURLSOCKTYPE_LAST /* never use */ +} curlsocktype; + +/* The return code from the sockopt_callback can signal information back + to libcurl: */ +#define CURL_SOCKOPT_OK 0 +#define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return + CURLE_ABORTED_BY_CALLBACK */ +#define CURL_SOCKOPT_ALREADY_CONNECTED 2 + +typedef int (*curl_sockopt_callback)(void *clientp, + curl_socket_t curlfd, + curlsocktype purpose); + +struct curl_sockaddr { + int family; + int socktype; + int protocol; + unsigned int addrlen; /* addrlen was a socklen_t type before 7.18.0 but it + turned really ugly and painful on the systems that + lack this type */ + struct sockaddr addr; +}; + +typedef curl_socket_t +(*curl_opensocket_callback)(void *clientp, + curlsocktype purpose, + struct curl_sockaddr *address); + +typedef int +(*curl_closesocket_callback)(void *clientp, curl_socket_t item); + +typedef enum { + CURLIOE_OK, /* I/O operation successful */ + CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ + CURLIOE_FAILRESTART, /* failed to restart the read */ + CURLIOE_LAST /* never use */ +} curlioerr; + +typedef enum { + CURLIOCMD_NOP, /* no operation */ + CURLIOCMD_RESTARTREAD, /* restart the read stream from start */ + CURLIOCMD_LAST /* never use */ +} curliocmd; + +typedef curlioerr (*curl_ioctl_callback)(CURL *handle, + int cmd, + void *clientp); + +#ifndef CURL_DID_MEMORY_FUNC_TYPEDEFS +/* + * The following typedef's are signatures of malloc, free, realloc, strdup and + * calloc respectively. Function pointers of these types can be passed to the + * curl_global_init_mem() function to set user defined memory management + * callback routines. + */ +typedef void *(*curl_malloc_callback)(size_t size); +typedef void (*curl_free_callback)(void *ptr); +typedef void *(*curl_realloc_callback)(void *ptr, size_t size); +typedef char *(*curl_strdup_callback)(const char *str); +typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size); + +#define CURL_DID_MEMORY_FUNC_TYPEDEFS +#endif + +/* the kind of data that is passed to information_callback */ +typedef enum { + CURLINFO_TEXT = 0, + CURLINFO_HEADER_IN, /* 1 */ + CURLINFO_HEADER_OUT, /* 2 */ + CURLINFO_DATA_IN, /* 3 */ + CURLINFO_DATA_OUT, /* 4 */ + CURLINFO_SSL_DATA_IN, /* 5 */ + CURLINFO_SSL_DATA_OUT, /* 6 */ + CURLINFO_END +} curl_infotype; + +typedef int (*curl_debug_callback) + (CURL *handle, /* the handle/transfer this concerns */ + curl_infotype type, /* what kind of data */ + char *data, /* points to the data */ + size_t size, /* size of the data pointed to */ + void *userptr); /* whatever the user please */ + +/* This is the CURLOPT_PREREQFUNCTION callback prototype. */ +typedef int (*curl_prereq_callback)(void *clientp, + char *conn_primary_ip, + char *conn_local_ip, + int conn_primary_port, + int conn_local_port); + +/* Return code for when the pre-request callback has terminated without + any errors */ +#define CURL_PREREQFUNC_OK 0 +/* Return code for when the pre-request callback wants to abort the + request */ +#define CURL_PREREQFUNC_ABORT 1 + +/* All possible error codes from all sorts of curl functions. Future versions + may return other values, stay prepared. + + Always add new return codes last. Never *EVER* remove any. The return + codes must remain the same! + */ + +typedef enum { + CURLE_OK = 0, + CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ + CURLE_FAILED_INIT, /* 2 */ + CURLE_URL_MALFORMAT, /* 3 */ + CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for + 7.17.0, reused in April 2011 for 7.21.5] */ + CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ + CURLE_COULDNT_RESOLVE_HOST, /* 6 */ + CURLE_COULDNT_CONNECT, /* 7 */ + CURLE_WEIRD_SERVER_REPLY, /* 8 */ + CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server + due to lack of access - when login fails + this is not returned. */ + CURLE_FTP_ACCEPT_FAILED, /* 10 - [was obsoleted in April 2006 for + 7.15.4, reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ + CURLE_FTP_ACCEPT_TIMEOUT, /* 12 - timeout occurred accepting server + [was obsoleted in August 2007 for 7.17.0, + reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ + CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ + CURLE_FTP_CANT_GET_HOST, /* 15 */ + CURLE_HTTP2, /* 16 - A problem in the http2 framing layer. + [was obsoleted in August 2007 for 7.17.0, + reused in July 2014 for 7.38.0] */ + CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ + CURLE_PARTIAL_FILE, /* 18 */ + CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ + CURLE_OBSOLETE20, /* 20 - NOT USED */ + CURLE_QUOTE_ERROR, /* 21 - quote command failure */ + CURLE_HTTP_RETURNED_ERROR, /* 22 */ + CURLE_WRITE_ERROR, /* 23 */ + CURLE_OBSOLETE24, /* 24 - NOT USED */ + CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ + CURLE_READ_ERROR, /* 26 - couldn't open/read from file */ + CURLE_OUT_OF_MEMORY, /* 27 */ + CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ + CURLE_OBSOLETE29, /* 29 - NOT USED */ + CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ + CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ + CURLE_OBSOLETE32, /* 32 - NOT USED */ + CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */ + CURLE_HTTP_POST_ERROR, /* 34 */ + CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ + CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */ + CURLE_FILE_COULDNT_READ_FILE, /* 37 */ + CURLE_LDAP_CANNOT_BIND, /* 38 */ + CURLE_LDAP_SEARCH_FAILED, /* 39 */ + CURLE_OBSOLETE40, /* 40 - NOT USED */ + CURLE_FUNCTION_NOT_FOUND, /* 41 - NOT USED starting with 7.53.0 */ + CURLE_ABORTED_BY_CALLBACK, /* 42 */ + CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ + CURLE_OBSOLETE44, /* 44 - NOT USED */ + CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ + CURLE_OBSOLETE46, /* 46 - NOT USED */ + CURLE_TOO_MANY_REDIRECTS, /* 47 - catch endless re-direct loops */ + CURLE_UNKNOWN_OPTION, /* 48 - User specified an unknown option */ + CURLE_SETOPT_OPTION_SYNTAX, /* 49 - Malformed setopt option */ + CURLE_OBSOLETE50, /* 50 - NOT USED */ + CURLE_OBSOLETE51, /* 51 - NOT USED */ + CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ + CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ + CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as + default */ + CURLE_SEND_ERROR, /* 55 - failed sending network data */ + CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ + CURLE_OBSOLETE57, /* 57 - NOT IN USE */ + CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ + CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */ + CURLE_PEER_FAILED_VERIFICATION, /* 60 - peer's certificate or fingerprint + wasn't verified fine */ + CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */ + CURLE_OBSOLETE62, /* 62 - NOT IN USE since 7.82.0 */ + CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ + CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ + CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind + that failed */ + CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ + CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not + accepted and we failed to login */ + CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ + CURLE_TFTP_PERM, /* 69 - permission problem on server */ + CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ + CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ + CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ + CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ + CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ + CURLE_OBSOLETE75, /* 75 - NOT IN USE since 7.82.0 */ + CURLE_OBSOLETE76, /* 76 - NOT IN USE since 7.82.0 */ + CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing + or wrong format */ + CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ + CURLE_SSH, /* 79 - error from the SSH layer, somewhat + generic so the error message will be of + interest when this has happened */ + + CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL + connection */ + CURLE_AGAIN, /* 81 - socket is not ready for send/recv, + wait till it's ready and try again (Added + in 7.18.2) */ + CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or + wrong format (Added in 7.19.0) */ + CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in + 7.19.0) */ + CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */ + CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */ + CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Ids */ + CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */ + CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */ + CURLE_NO_CONNECTION_AVAILABLE, /* 89 - No connection available, the + session will be queued */ + CURLE_SSL_PINNEDPUBKEYNOTMATCH, /* 90 - specified pinned public key did not + match */ + CURLE_SSL_INVALIDCERTSTATUS, /* 91 - invalid certificate status */ + CURLE_HTTP2_STREAM, /* 92 - stream error in HTTP/2 framing layer + */ + CURLE_RECURSIVE_API_CALL, /* 93 - an api function was called from + inside a callback */ + CURLE_AUTH_ERROR, /* 94 - an authentication function returned an + error */ + CURLE_HTTP3, /* 95 - An HTTP/3 layer problem */ + CURLE_QUIC_CONNECT_ERROR, /* 96 - QUIC connection error */ + CURLE_PROXY, /* 97 - proxy handshake error */ + CURLE_SSL_CLIENTCERT, /* 98 - client-side certificate required */ + CURLE_UNRECOVERABLE_POLL, /* 99 - poll/select returned fatal error */ + CURL_LAST /* never use! */ +} CURLcode; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Previously obsolete error code reused in 7.38.0 */ +#define CURLE_OBSOLETE16 CURLE_HTTP2 + +/* Previously obsolete error codes reused in 7.24.0 */ +#define CURLE_OBSOLETE10 CURLE_FTP_ACCEPT_FAILED +#define CURLE_OBSOLETE12 CURLE_FTP_ACCEPT_TIMEOUT + +/* compatibility with older names */ +#define CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING +#define CURLE_FTP_WEIRD_SERVER_REPLY CURLE_WEIRD_SERVER_REPLY + +/* The following were added in 7.62.0 */ +#define CURLE_SSL_CACERT CURLE_PEER_FAILED_VERIFICATION + +/* The following were added in 7.21.5, April 2011 */ +#define CURLE_UNKNOWN_TELNET_OPTION CURLE_UNKNOWN_OPTION + +/* Added for 7.78.0 */ +#define CURLE_TELNET_OPTION_SYNTAX CURLE_SETOPT_OPTION_SYNTAX + +/* The following were added in 7.17.1 */ +/* These are scheduled to disappear by 2009 */ +#define CURLE_SSL_PEER_CERTIFICATE CURLE_PEER_FAILED_VERIFICATION + +/* The following were added in 7.17.0 */ +/* These are scheduled to disappear by 2009 */ +#define CURLE_OBSOLETE CURLE_OBSOLETE50 /* no one should be using this! */ +#define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46 +#define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44 +#define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10 +#define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16 +#define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32 +#define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29 +#define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12 +#define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20 +#define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40 +#define CURLE_MALFORMAT_USER CURLE_OBSOLETE24 +#define CURLE_SHARE_IN_USE CURLE_OBSOLETE57 +#define CURLE_URL_MALFORMAT_USER CURLE_NOT_BUILT_IN + +#define CURLE_FTP_ACCESS_DENIED CURLE_REMOTE_ACCESS_DENIED +#define CURLE_FTP_COULDNT_SET_BINARY CURLE_FTP_COULDNT_SET_TYPE +#define CURLE_FTP_QUOTE_ERROR CURLE_QUOTE_ERROR +#define CURLE_TFTP_DISKFULL CURLE_REMOTE_DISK_FULL +#define CURLE_TFTP_EXISTS CURLE_REMOTE_FILE_EXISTS +#define CURLE_HTTP_RANGE_ERROR CURLE_RANGE_ERROR +#define CURLE_FTP_SSL_FAILED CURLE_USE_SSL_FAILED + +/* The following were added earlier */ + +#define CURLE_OPERATION_TIMEOUTED CURLE_OPERATION_TIMEDOUT +#define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR +#define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED +#define CURLE_FTP_COULDNT_STOR_FILE CURLE_UPLOAD_FAILED +#define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE +#define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME +#define CURLE_LDAP_INVALID_URL CURLE_OBSOLETE62 +#define CURLE_CONV_REQD CURLE_OBSOLETE76 +#define CURLE_CONV_FAILED CURLE_OBSOLETE75 + +/* This was the error code 50 in 7.7.3 and a few earlier versions, this + is no longer used by libcurl but is instead #defined here only to not + make programs break */ +#define CURLE_ALREADY_COMPLETE 99999 + +/* Provide defines for really old option names */ +#define CURLOPT_FILE CURLOPT_WRITEDATA /* name changed in 7.9.7 */ +#define CURLOPT_INFILE CURLOPT_READDATA /* name changed in 7.9.7 */ +#define CURLOPT_WRITEHEADER CURLOPT_HEADERDATA + +/* Since long deprecated options with no code in the lib that does anything + with them. */ +#define CURLOPT_WRITEINFO CURLOPT_OBSOLETE40 +#define CURLOPT_CLOSEPOLICY CURLOPT_OBSOLETE72 + +#endif /* !CURL_NO_OLDIES */ + +/* + * Proxy error codes. Returned in CURLINFO_PROXY_ERROR if CURLE_PROXY was + * return for the transfers. + */ +typedef enum { + CURLPX_OK, + CURLPX_BAD_ADDRESS_TYPE, + CURLPX_BAD_VERSION, + CURLPX_CLOSED, + CURLPX_GSSAPI, + CURLPX_GSSAPI_PERMSG, + CURLPX_GSSAPI_PROTECTION, + CURLPX_IDENTD, + CURLPX_IDENTD_DIFFER, + CURLPX_LONG_HOSTNAME, + CURLPX_LONG_PASSWD, + CURLPX_LONG_USER, + CURLPX_NO_AUTH, + CURLPX_RECV_ADDRESS, + CURLPX_RECV_AUTH, + CURLPX_RECV_CONNECT, + CURLPX_RECV_REQACK, + CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED, + CURLPX_REPLY_COMMAND_NOT_SUPPORTED, + CURLPX_REPLY_CONNECTION_REFUSED, + CURLPX_REPLY_GENERAL_SERVER_FAILURE, + CURLPX_REPLY_HOST_UNREACHABLE, + CURLPX_REPLY_NETWORK_UNREACHABLE, + CURLPX_REPLY_NOT_ALLOWED, + CURLPX_REPLY_TTL_EXPIRED, + CURLPX_REPLY_UNASSIGNED, + CURLPX_REQUEST_FAILED, + CURLPX_RESOLVE_HOST, + CURLPX_SEND_AUTH, + CURLPX_SEND_CONNECT, + CURLPX_SEND_REQUEST, + CURLPX_UNKNOWN_FAIL, + CURLPX_UNKNOWN_MODE, + CURLPX_USER_REJECTED, + CURLPX_LAST /* never use */ +} CURLproxycode; + +/* This prototype applies to all conversion callbacks */ +typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length); + +typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */ + void *ssl_ctx, /* actually an OpenSSL + or WolfSSL SSL_CTX, + or an mbedTLS + mbedtls_ssl_config */ + void *userptr); + +typedef enum { + CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use + CONNECT HTTP/1.1 */ + CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT + HTTP/1.0 */ + CURLPROXY_HTTPS = 2, /* HTTPS but stick to HTTP/1 added in 7.52.0 */ + CURLPROXY_HTTPS2 = 3, /* HTTPS and attempt HTTP/2 added in 8.2.0 */ + CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already + in 7.10 */ + CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ + CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ + CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the + host name rather than the IP address. added + in 7.18.0 */ +} curl_proxytype; /* this enum was added in 7.10 */ + +/* + * Bitmasks for CURLOPT_HTTPAUTH and CURLOPT_PROXYAUTH options: + * + * CURLAUTH_NONE - No HTTP authentication + * CURLAUTH_BASIC - HTTP Basic authentication (default) + * CURLAUTH_DIGEST - HTTP Digest authentication + * CURLAUTH_NEGOTIATE - HTTP Negotiate (SPNEGO) authentication + * CURLAUTH_GSSNEGOTIATE - Alias for CURLAUTH_NEGOTIATE (deprecated) + * CURLAUTH_NTLM - HTTP NTLM authentication + * CURLAUTH_DIGEST_IE - HTTP Digest authentication with IE flavour + * CURLAUTH_NTLM_WB - HTTP NTLM authentication delegated to winbind helper + * CURLAUTH_BEARER - HTTP Bearer token authentication + * CURLAUTH_ONLY - Use together with a single other type to force no + * authentication or just that single type + * CURLAUTH_ANY - All fine types set + * CURLAUTH_ANYSAFE - All fine types except Basic + */ + +#define CURLAUTH_NONE ((unsigned long)0) +#define CURLAUTH_BASIC (((unsigned long)1)<<0) +#define CURLAUTH_DIGEST (((unsigned long)1)<<1) +#define CURLAUTH_NEGOTIATE (((unsigned long)1)<<2) +/* Deprecated since the advent of CURLAUTH_NEGOTIATE */ +#define CURLAUTH_GSSNEGOTIATE CURLAUTH_NEGOTIATE +/* Used for CURLOPT_SOCKS5_AUTH to stay terminologically correct */ +#define CURLAUTH_GSSAPI CURLAUTH_NEGOTIATE +#define CURLAUTH_NTLM (((unsigned long)1)<<3) +#define CURLAUTH_DIGEST_IE (((unsigned long)1)<<4) +#define CURLAUTH_NTLM_WB (((unsigned long)1)<<5) +#define CURLAUTH_BEARER (((unsigned long)1)<<6) +#define CURLAUTH_AWS_SIGV4 (((unsigned long)1)<<7) +#define CURLAUTH_ONLY (((unsigned long)1)<<31) +#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE) +#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE)) + +#define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ +#define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ +#define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */ +#define CURLSSH_AUTH_PASSWORD (1<<1) /* password */ +#define CURLSSH_AUTH_HOST (1<<2) /* host key files */ +#define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */ +#define CURLSSH_AUTH_AGENT (1<<4) /* agent (ssh-agent, pageant...) */ +#define CURLSSH_AUTH_GSSAPI (1<<5) /* gssapi (kerberos, ...) */ +#define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY + +#define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */ +#define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */ +#define CURLGSSAPI_DELEGATION_FLAG (1<<1) /* delegate always */ + +#define CURL_ERROR_SIZE 256 + +enum curl_khtype { + CURLKHTYPE_UNKNOWN, + CURLKHTYPE_RSA1, + CURLKHTYPE_RSA, + CURLKHTYPE_DSS, + CURLKHTYPE_ECDSA, + CURLKHTYPE_ED25519 +}; + +struct curl_khkey { + const char *key; /* points to a null-terminated string encoded with base64 + if len is zero, otherwise to the "raw" data */ + size_t len; + enum curl_khtype keytype; +}; + +/* this is the set of return values expected from the curl_sshkeycallback + callback */ +enum curl_khstat { + CURLKHSTAT_FINE_ADD_TO_FILE, + CURLKHSTAT_FINE, + CURLKHSTAT_REJECT, /* reject the connection, return an error */ + CURLKHSTAT_DEFER, /* do not accept it, but we can't answer right now. + Causes a CURLE_PEER_FAILED_VERIFICATION error but the + connection will be left intact etc */ + CURLKHSTAT_FINE_REPLACE, /* accept and replace the wrong key */ + CURLKHSTAT_LAST /* not for use, only a marker for last-in-list */ +}; + +/* this is the set of status codes pass in to the callback */ +enum curl_khmatch { + CURLKHMATCH_OK, /* match */ + CURLKHMATCH_MISMATCH, /* host found, key mismatch! */ + CURLKHMATCH_MISSING, /* no matching host/key found */ + CURLKHMATCH_LAST /* not for use, only a marker for last-in-list */ +}; + +typedef int + (*curl_sshkeycallback) (CURL *easy, /* easy handle */ + const struct curl_khkey *knownkey, /* known */ + const struct curl_khkey *foundkey, /* found */ + enum curl_khmatch, /* libcurl's view on the keys */ + void *clientp); /* custom pointer passed with */ + /* CURLOPT_SSH_KEYDATA */ + +typedef int + (*curl_sshhostkeycallback) (void *clientp,/* custom pointer passed */ + /* with CURLOPT_SSH_HOSTKEYDATA */ + int keytype, /* CURLKHTYPE */ + const char *key, /* hostkey to check */ + size_t keylen); /* length of the key */ + /* return CURLE_OK to accept */ + /* or something else to refuse */ + + +/* parameter for the CURLOPT_USE_SSL option */ +typedef enum { + CURLUSESSL_NONE, /* do not attempt to use SSL */ + CURLUSESSL_TRY, /* try using SSL, proceed anyway otherwise */ + CURLUSESSL_CONTROL, /* SSL for the control connection or fail */ + CURLUSESSL_ALL, /* SSL for all communication or fail */ + CURLUSESSL_LAST /* not an option, never use */ +} curl_usessl; + +/* Definition of bits for the CURLOPT_SSL_OPTIONS argument: */ + +/* - ALLOW_BEAST tells libcurl to allow the BEAST SSL vulnerability in the + name of improving interoperability with older servers. Some SSL libraries + have introduced work-arounds for this flaw but those work-arounds sometimes + make the SSL communication fail. To regain functionality with those broken + servers, a user can this way allow the vulnerability back. */ +#define CURLSSLOPT_ALLOW_BEAST (1<<0) + +/* - NO_REVOKE tells libcurl to disable certificate revocation checks for those + SSL backends where such behavior is present. */ +#define CURLSSLOPT_NO_REVOKE (1<<1) + +/* - NO_PARTIALCHAIN tells libcurl to *NOT* accept a partial certificate chain + if possible. The OpenSSL backend has this ability. */ +#define CURLSSLOPT_NO_PARTIALCHAIN (1<<2) + +/* - REVOKE_BEST_EFFORT tells libcurl to ignore certificate revocation offline + checks and ignore missing revocation list for those SSL backends where such + behavior is present. */ +#define CURLSSLOPT_REVOKE_BEST_EFFORT (1<<3) + +/* - CURLSSLOPT_NATIVE_CA tells libcurl to use standard certificate store of + operating system. Currently implemented under MS-Windows. */ +#define CURLSSLOPT_NATIVE_CA (1<<4) + +/* - CURLSSLOPT_AUTO_CLIENT_CERT tells libcurl to automatically locate and use + a client certificate for authentication. (Schannel) */ +#define CURLSSLOPT_AUTO_CLIENT_CERT (1<<5) + +/* The default connection attempt delay in milliseconds for happy eyeballs. + CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3 and happy-eyeballs-timeout-ms.d document + this value, keep them in sync. */ +#define CURL_HET_DEFAULT 200L + +/* The default connection upkeep interval in milliseconds. */ +#define CURL_UPKEEP_INTERVAL_DEFAULT 60000L + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2009 */ + +#define CURLFTPSSL_NONE CURLUSESSL_NONE +#define CURLFTPSSL_TRY CURLUSESSL_TRY +#define CURLFTPSSL_CONTROL CURLUSESSL_CONTROL +#define CURLFTPSSL_ALL CURLUSESSL_ALL +#define CURLFTPSSL_LAST CURLUSESSL_LAST +#define curl_ftpssl curl_usessl +#endif /* !CURL_NO_OLDIES */ + +/* parameter for the CURLOPT_FTP_SSL_CCC option */ +typedef enum { + CURLFTPSSL_CCC_NONE, /* do not send CCC */ + CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */ + CURLFTPSSL_CCC_ACTIVE, /* Initiate the shutdown */ + CURLFTPSSL_CCC_LAST /* not an option, never use */ +} curl_ftpccc; + +/* parameter for the CURLOPT_FTPSSLAUTH option */ +typedef enum { + CURLFTPAUTH_DEFAULT, /* let libcurl decide */ + CURLFTPAUTH_SSL, /* use "AUTH SSL" */ + CURLFTPAUTH_TLS, /* use "AUTH TLS" */ + CURLFTPAUTH_LAST /* not an option, never use */ +} curl_ftpauth; + +/* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */ +typedef enum { + CURLFTP_CREATE_DIR_NONE, /* do NOT create missing dirs! */ + CURLFTP_CREATE_DIR, /* (FTP/SFTP) if CWD fails, try MKD and then CWD + again if MKD succeeded, for SFTP this does + similar magic */ + CURLFTP_CREATE_DIR_RETRY, /* (FTP only) if CWD fails, try MKD and then CWD + again even if MKD failed! */ + CURLFTP_CREATE_DIR_LAST /* not an option, never use */ +} curl_ftpcreatedir; + +/* parameter for the CURLOPT_FTP_FILEMETHOD option */ +typedef enum { + CURLFTPMETHOD_DEFAULT, /* let libcurl pick */ + CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */ + CURLFTPMETHOD_NOCWD, /* no CWD at all */ + CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */ + CURLFTPMETHOD_LAST /* not an option, never use */ +} curl_ftpmethod; + +/* bitmask defines for CURLOPT_HEADEROPT */ +#define CURLHEADER_UNIFIED 0 +#define CURLHEADER_SEPARATE (1<<0) + +/* CURLALTSVC_* are bits for the CURLOPT_ALTSVC_CTRL option */ +#define CURLALTSVC_READONLYFILE (1<<2) +#define CURLALTSVC_H1 (1<<3) +#define CURLALTSVC_H2 (1<<4) +#define CURLALTSVC_H3 (1<<5) + + +struct curl_hstsentry { + char *name; + size_t namelen; + unsigned int includeSubDomains:1; + char expire[18]; /* YYYYMMDD HH:MM:SS [null-terminated] */ +}; + +struct curl_index { + size_t index; /* the provided entry's "index" or count */ + size_t total; /* total number of entries to save */ +}; + +typedef enum { + CURLSTS_OK, + CURLSTS_DONE, + CURLSTS_FAIL +} CURLSTScode; + +typedef CURLSTScode (*curl_hstsread_callback)(CURL *easy, + struct curl_hstsentry *e, + void *userp); +typedef CURLSTScode (*curl_hstswrite_callback)(CURL *easy, + struct curl_hstsentry *e, + struct curl_index *i, + void *userp); + +/* CURLHSTS_* are bits for the CURLOPT_HSTS option */ +#define CURLHSTS_ENABLE (long)(1<<0) +#define CURLHSTS_READONLYFILE (long)(1<<1) + +/* The CURLPROTO_ defines below are for the **deprecated** CURLOPT_*PROTOCOLS + options. Do not use. */ +#define CURLPROTO_HTTP (1<<0) +#define CURLPROTO_HTTPS (1<<1) +#define CURLPROTO_FTP (1<<2) +#define CURLPROTO_FTPS (1<<3) +#define CURLPROTO_SCP (1<<4) +#define CURLPROTO_SFTP (1<<5) +#define CURLPROTO_TELNET (1<<6) +#define CURLPROTO_LDAP (1<<7) +#define CURLPROTO_LDAPS (1<<8) +#define CURLPROTO_DICT (1<<9) +#define CURLPROTO_FILE (1<<10) +#define CURLPROTO_TFTP (1<<11) +#define CURLPROTO_IMAP (1<<12) +#define CURLPROTO_IMAPS (1<<13) +#define CURLPROTO_POP3 (1<<14) +#define CURLPROTO_POP3S (1<<15) +#define CURLPROTO_SMTP (1<<16) +#define CURLPROTO_SMTPS (1<<17) +#define CURLPROTO_RTSP (1<<18) +#define CURLPROTO_RTMP (1<<19) +#define CURLPROTO_RTMPT (1<<20) +#define CURLPROTO_RTMPE (1<<21) +#define CURLPROTO_RTMPTE (1<<22) +#define CURLPROTO_RTMPS (1<<23) +#define CURLPROTO_RTMPTS (1<<24) +#define CURLPROTO_GOPHER (1<<25) +#define CURLPROTO_SMB (1<<26) +#define CURLPROTO_SMBS (1<<27) +#define CURLPROTO_MQTT (1<<28) +#define CURLPROTO_GOPHERS (1<<29) +#define CURLPROTO_ALL (~0) /* enable everything */ + +/* long may be 32 or 64 bits, but we should never depend on anything else + but 32 */ +#define CURLOPTTYPE_LONG 0 +#define CURLOPTTYPE_OBJECTPOINT 10000 +#define CURLOPTTYPE_FUNCTIONPOINT 20000 +#define CURLOPTTYPE_OFF_T 30000 +#define CURLOPTTYPE_BLOB 40000 + +/* *STRINGPOINT is an alias for OBJECTPOINT to allow tools to extract the + string options from the header file */ + + +#define CURLOPT(na,t,nu) na = t + nu +#define CURLOPTDEPRECATED(na,t,nu,v,m) na CURL_DEPRECATED(v,m) = t + nu + +/* CURLOPT aliases that make no run-time difference */ + +/* 'char *' argument to a string with a trailing zero */ +#define CURLOPTTYPE_STRINGPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'struct curl_slist *' argument */ +#define CURLOPTTYPE_SLISTPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'void *' argument passed untouched to callback */ +#define CURLOPTTYPE_CBPOINT CURLOPTTYPE_OBJECTPOINT + +/* 'long' argument with a set of values/bitmask */ +#define CURLOPTTYPE_VALUES CURLOPTTYPE_LONG + +/* + * All CURLOPT_* values. + */ + +typedef enum { + /* This is the FILE * or void * the regular output should be written to. */ + CURLOPT(CURLOPT_WRITEDATA, CURLOPTTYPE_CBPOINT, 1), + + /* The full URL to get/put */ + CURLOPT(CURLOPT_URL, CURLOPTTYPE_STRINGPOINT, 2), + + /* Port number to connect to, if other than default. */ + CURLOPT(CURLOPT_PORT, CURLOPTTYPE_LONG, 3), + + /* Name of proxy to use. */ + CURLOPT(CURLOPT_PROXY, CURLOPTTYPE_STRINGPOINT, 4), + + /* "user:password;options" to use when fetching. */ + CURLOPT(CURLOPT_USERPWD, CURLOPTTYPE_STRINGPOINT, 5), + + /* "user:password" to use with proxy. */ + CURLOPT(CURLOPT_PROXYUSERPWD, CURLOPTTYPE_STRINGPOINT, 6), + + /* Range to get, specified as an ASCII string. */ + CURLOPT(CURLOPT_RANGE, CURLOPTTYPE_STRINGPOINT, 7), + + /* not used */ + + /* Specified file stream to upload from (use as input): */ + CURLOPT(CURLOPT_READDATA, CURLOPTTYPE_CBPOINT, 9), + + /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE + * bytes big. */ + CURLOPT(CURLOPT_ERRORBUFFER, CURLOPTTYPE_OBJECTPOINT, 10), + + /* Function that will be called to store the output (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_WRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 11), + + /* Function that will be called to read the input (instead of fread). The + * parameters will use fread() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_READFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 12), + + /* Time-out the read operation after this amount of seconds */ + CURLOPT(CURLOPT_TIMEOUT, CURLOPTTYPE_LONG, 13), + + /* If CURLOPT_READDATA is used, this can be used to inform libcurl about + * how large the file being sent really is. That allows better error + * checking and better verifies that the upload was successful. -1 means + * unknown size. + * + * For large file support, there is also a _LARGE version of the key + * which takes an off_t type, allowing platforms with larger off_t + * sizes to handle larger files. See below for INFILESIZE_LARGE. + */ + CURLOPT(CURLOPT_INFILESIZE, CURLOPTTYPE_LONG, 14), + + /* POST static input fields. */ + CURLOPT(CURLOPT_POSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 15), + + /* Set the referrer page (needed by some CGIs) */ + CURLOPT(CURLOPT_REFERER, CURLOPTTYPE_STRINGPOINT, 16), + + /* Set the FTP PORT string (interface name, named or numerical IP address) + Use i.e '-' to use default address. */ + CURLOPT(CURLOPT_FTPPORT, CURLOPTTYPE_STRINGPOINT, 17), + + /* Set the User-Agent string (examined by some CGIs) */ + CURLOPT(CURLOPT_USERAGENT, CURLOPTTYPE_STRINGPOINT, 18), + + /* If the download receives less than "low speed limit" bytes/second + * during "low speed time" seconds, the operations is aborted. + * You could i.e if you have a pretty high speed connection, abort if + * it is less than 2000 bytes/sec during 20 seconds. + */ + + /* Set the "low speed limit" */ + CURLOPT(CURLOPT_LOW_SPEED_LIMIT, CURLOPTTYPE_LONG, 19), + + /* Set the "low speed time" */ + CURLOPT(CURLOPT_LOW_SPEED_TIME, CURLOPTTYPE_LONG, 20), + + /* Set the continuation offset. + * + * Note there is also a _LARGE version of this key which uses + * off_t types, allowing for large file offsets on platforms which + * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. + */ + CURLOPT(CURLOPT_RESUME_FROM, CURLOPTTYPE_LONG, 21), + + /* Set cookie in request: */ + CURLOPT(CURLOPT_COOKIE, CURLOPTTYPE_STRINGPOINT, 22), + + /* This points to a linked list of headers, struct curl_slist kind. This + list is also used for RTSP (in spite of its name) */ + CURLOPT(CURLOPT_HTTPHEADER, CURLOPTTYPE_SLISTPOINT, 23), + + /* This points to a linked list of post entries, struct curl_httppost */ + CURLOPTDEPRECATED(CURLOPT_HTTPPOST, CURLOPTTYPE_OBJECTPOINT, 24, + 7.56.0, "Use CURLOPT_MIMEPOST"), + + /* name of the file keeping your private SSL-certificate */ + CURLOPT(CURLOPT_SSLCERT, CURLOPTTYPE_STRINGPOINT, 25), + + /* password for the SSL or SSH private key */ + CURLOPT(CURLOPT_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 26), + + /* send TYPE parameter? */ + CURLOPT(CURLOPT_CRLF, CURLOPTTYPE_LONG, 27), + + /* send linked-list of QUOTE commands */ + CURLOPT(CURLOPT_QUOTE, CURLOPTTYPE_SLISTPOINT, 28), + + /* send FILE * or void * to store headers to, if you use a callback it + is simply passed to the callback unmodified */ + CURLOPT(CURLOPT_HEADERDATA, CURLOPTTYPE_CBPOINT, 29), + + /* point to a file to read the initial cookies from, also enables + "cookie awareness" */ + CURLOPT(CURLOPT_COOKIEFILE, CURLOPTTYPE_STRINGPOINT, 31), + + /* What version to specifically try to use. + See CURL_SSLVERSION defines below. */ + CURLOPT(CURLOPT_SSLVERSION, CURLOPTTYPE_VALUES, 32), + + /* What kind of HTTP time condition to use, see defines */ + CURLOPT(CURLOPT_TIMECONDITION, CURLOPTTYPE_VALUES, 33), + + /* Time to use with the above condition. Specified in number of seconds + since 1 Jan 1970 */ + CURLOPT(CURLOPT_TIMEVALUE, CURLOPTTYPE_LONG, 34), + + /* 35 = OBSOLETE */ + + /* Custom request, for customizing the get command like + HTTP: DELETE, TRACE and others + FTP: to use a different list command + */ + CURLOPT(CURLOPT_CUSTOMREQUEST, CURLOPTTYPE_STRINGPOINT, 36), + + /* FILE handle to use instead of stderr */ + CURLOPT(CURLOPT_STDERR, CURLOPTTYPE_OBJECTPOINT, 37), + + /* 38 is not used */ + + /* send linked-list of post-transfer QUOTE commands */ + CURLOPT(CURLOPT_POSTQUOTE, CURLOPTTYPE_SLISTPOINT, 39), + + /* OBSOLETE, do not use! */ + CURLOPT(CURLOPT_OBSOLETE40, CURLOPTTYPE_OBJECTPOINT, 40), + + /* talk a lot */ + CURLOPT(CURLOPT_VERBOSE, CURLOPTTYPE_LONG, 41), + + /* throw the header out too */ + CURLOPT(CURLOPT_HEADER, CURLOPTTYPE_LONG, 42), + + /* shut off the progress meter */ + CURLOPT(CURLOPT_NOPROGRESS, CURLOPTTYPE_LONG, 43), + + /* use HEAD to get http document */ + CURLOPT(CURLOPT_NOBODY, CURLOPTTYPE_LONG, 44), + + /* no output on http error codes >= 400 */ + CURLOPT(CURLOPT_FAILONERROR, CURLOPTTYPE_LONG, 45), + + /* this is an upload */ + CURLOPT(CURLOPT_UPLOAD, CURLOPTTYPE_LONG, 46), + + /* HTTP POST method */ + CURLOPT(CURLOPT_POST, CURLOPTTYPE_LONG, 47), + + /* bare names when listing directories */ + CURLOPT(CURLOPT_DIRLISTONLY, CURLOPTTYPE_LONG, 48), + + /* Append instead of overwrite on upload! */ + CURLOPT(CURLOPT_APPEND, CURLOPTTYPE_LONG, 50), + + /* Specify whether to read the user+password from the .netrc or the URL. + * This must be one of the CURL_NETRC_* enums below. */ + CURLOPT(CURLOPT_NETRC, CURLOPTTYPE_VALUES, 51), + + /* use Location: Luke! */ + CURLOPT(CURLOPT_FOLLOWLOCATION, CURLOPTTYPE_LONG, 52), + + /* transfer data in text/ASCII format */ + CURLOPT(CURLOPT_TRANSFERTEXT, CURLOPTTYPE_LONG, 53), + + /* HTTP PUT */ + CURLOPTDEPRECATED(CURLOPT_PUT, CURLOPTTYPE_LONG, 54, + 7.12.1, "Use CURLOPT_UPLOAD"), + + /* 55 = OBSOLETE */ + + /* DEPRECATED + * Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_progress_callback + * prototype defines. */ + CURLOPTDEPRECATED(CURLOPT_PROGRESSFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 56, + 7.32.0, "Use CURLOPT_XFERINFOFUNCTION"), + + /* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION + callbacks */ + CURLOPT(CURLOPT_XFERINFODATA, CURLOPTTYPE_CBPOINT, 57), +#define CURLOPT_PROGRESSDATA CURLOPT_XFERINFODATA + + /* We want the referrer field set automatically when following locations */ + CURLOPT(CURLOPT_AUTOREFERER, CURLOPTTYPE_LONG, 58), + + /* Port of the proxy, can be set in the proxy string as well with: + "[host]:[port]" */ + CURLOPT(CURLOPT_PROXYPORT, CURLOPTTYPE_LONG, 59), + + /* size of the POST input data, if strlen() is not good to use */ + CURLOPT(CURLOPT_POSTFIELDSIZE, CURLOPTTYPE_LONG, 60), + + /* tunnel non-http operations through an HTTP proxy */ + CURLOPT(CURLOPT_HTTPPROXYTUNNEL, CURLOPTTYPE_LONG, 61), + + /* Set the interface string to use as outgoing network interface */ + CURLOPT(CURLOPT_INTERFACE, CURLOPTTYPE_STRINGPOINT, 62), + + /* Set the krb4/5 security level, this also enables krb4/5 awareness. This + * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string + * is set but doesn't match one of these, 'private' will be used. */ + CURLOPT(CURLOPT_KRBLEVEL, CURLOPTTYPE_STRINGPOINT, 63), + + /* Set if we should verify the peer in ssl handshake, set 1 to verify. */ + CURLOPT(CURLOPT_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 64), + + /* The CApath or CAfile used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAINFO, CURLOPTTYPE_STRINGPOINT, 65), + + /* 66 = OBSOLETE */ + /* 67 = OBSOLETE */ + + /* Maximum number of http redirects to follow */ + CURLOPT(CURLOPT_MAXREDIRS, CURLOPTTYPE_LONG, 68), + + /* Pass a long set to 1 to get the date of the requested document (if + possible)! Pass a zero to shut it off. */ + CURLOPT(CURLOPT_FILETIME, CURLOPTTYPE_LONG, 69), + + /* This points to a linked list of telnet options */ + CURLOPT(CURLOPT_TELNETOPTIONS, CURLOPTTYPE_SLISTPOINT, 70), + + /* Max amount of cached alive connections */ + CURLOPT(CURLOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 71), + + /* OBSOLETE, do not use! */ + CURLOPT(CURLOPT_OBSOLETE72, CURLOPTTYPE_LONG, 72), + + /* 73 = OBSOLETE */ + + /* Set to explicitly use a new connection for the upcoming transfer. + Do not use this unless you're absolutely sure of this, as it makes the + operation slower and is less friendly for the network. */ + CURLOPT(CURLOPT_FRESH_CONNECT, CURLOPTTYPE_LONG, 74), + + /* Set to explicitly forbid the upcoming transfer's connection to be reused + when done. Do not use this unless you're absolutely sure of this, as it + makes the operation slower and is less friendly for the network. */ + CURLOPT(CURLOPT_FORBID_REUSE, CURLOPTTYPE_LONG, 75), + + /* Set to a file name that contains random data for libcurl to use to + seed the random engine when doing SSL connects. */ + CURLOPTDEPRECATED(CURLOPT_RANDOM_FILE, CURLOPTTYPE_STRINGPOINT, 76, + 7.84.0, "Serves no purpose anymore"), + + /* Set to the Entropy Gathering Daemon socket pathname */ + CURLOPTDEPRECATED(CURLOPT_EGDSOCKET, CURLOPTTYPE_STRINGPOINT, 77, + 7.84.0, "Serves no purpose anymore"), + + /* Time-out connect operations after this amount of seconds, if connects are + OK within this time, then fine... This only aborts the connect phase. */ + CURLOPT(CURLOPT_CONNECTTIMEOUT, CURLOPTTYPE_LONG, 78), + + /* Function that will be called to store headers (instead of fwrite). The + * parameters will use fwrite() syntax, make sure to follow them. */ + CURLOPT(CURLOPT_HEADERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 79), + + /* Set this to force the HTTP request to get back to GET. Only really usable + if POST, PUT or a custom request have been used first. + */ + CURLOPT(CURLOPT_HTTPGET, CURLOPTTYPE_LONG, 80), + + /* Set if we should verify the Common name from the peer certificate in ssl + * handshake, set 1 to check existence, 2 to ensure that it matches the + * provided hostname. */ + CURLOPT(CURLOPT_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 81), + + /* Specify which file name to write all known cookies in after completed + operation. Set file name to "-" (dash) to make it go to stdout. */ + CURLOPT(CURLOPT_COOKIEJAR, CURLOPTTYPE_STRINGPOINT, 82), + + /* Specify which SSL ciphers to use */ + CURLOPT(CURLOPT_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 83), + + /* Specify which HTTP version to use! This must be set to one of the + CURL_HTTP_VERSION* enums set below. */ + CURLOPT(CURLOPT_HTTP_VERSION, CURLOPTTYPE_VALUES, 84), + + /* Specifically switch on or off the FTP engine's use of the EPSV command. By + default, that one will always be attempted before the more traditional + PASV command. */ + CURLOPT(CURLOPT_FTP_USE_EPSV, CURLOPTTYPE_LONG, 85), + + /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */ + CURLOPT(CURLOPT_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 86), + + /* name of the file keeping your private SSL-key */ + CURLOPT(CURLOPT_SSLKEY, CURLOPTTYPE_STRINGPOINT, 87), + + /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */ + CURLOPT(CURLOPT_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 88), + + /* crypto engine for the SSL-sub system */ + CURLOPT(CURLOPT_SSLENGINE, CURLOPTTYPE_STRINGPOINT, 89), + + /* set the crypto engine for the SSL-sub system as default + the param has no meaning... + */ + CURLOPT(CURLOPT_SSLENGINE_DEFAULT, CURLOPTTYPE_LONG, 90), + + /* Non-zero value means to use the global dns cache */ + /* DEPRECATED, do not use! */ + CURLOPTDEPRECATED(CURLOPT_DNS_USE_GLOBAL_CACHE, CURLOPTTYPE_LONG, 91, + 7.11.1, "Use CURLOPT_SHARE"), + + /* DNS cache timeout */ + CURLOPT(CURLOPT_DNS_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 92), + + /* send linked-list of pre-transfer QUOTE commands */ + CURLOPT(CURLOPT_PREQUOTE, CURLOPTTYPE_SLISTPOINT, 93), + + /* set the debug function */ + CURLOPT(CURLOPT_DEBUGFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 94), + + /* set the data for the debug function */ + CURLOPT(CURLOPT_DEBUGDATA, CURLOPTTYPE_CBPOINT, 95), + + /* mark this as start of a cookie session */ + CURLOPT(CURLOPT_COOKIESESSION, CURLOPTTYPE_LONG, 96), + + /* The CApath directory used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAPATH, CURLOPTTYPE_STRINGPOINT, 97), + + /* Instruct libcurl to use a smaller receive buffer */ + CURLOPT(CURLOPT_BUFFERSIZE, CURLOPTTYPE_LONG, 98), + + /* Instruct libcurl to not use any signal/alarm handlers, even when using + timeouts. This option is useful for multi-threaded applications. + See libcurl-the-guide for more background information. */ + CURLOPT(CURLOPT_NOSIGNAL, CURLOPTTYPE_LONG, 99), + + /* Provide a CURLShare for mutexing non-ts data */ + CURLOPT(CURLOPT_SHARE, CURLOPTTYPE_OBJECTPOINT, 100), + + /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default), + CURLPROXY_HTTPS, CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and + CURLPROXY_SOCKS5. */ + CURLOPT(CURLOPT_PROXYTYPE, CURLOPTTYPE_VALUES, 101), + + /* Set the Accept-Encoding string. Use this to tell a server you would like + the response to be compressed. Before 7.21.6, this was known as + CURLOPT_ENCODING */ + CURLOPT(CURLOPT_ACCEPT_ENCODING, CURLOPTTYPE_STRINGPOINT, 102), + + /* Set pointer to private data */ + CURLOPT(CURLOPT_PRIVATE, CURLOPTTYPE_OBJECTPOINT, 103), + + /* Set aliases for HTTP 200 in the HTTP Response header */ + CURLOPT(CURLOPT_HTTP200ALIASES, CURLOPTTYPE_SLISTPOINT, 104), + + /* Continue to send authentication (user+password) when following locations, + even when hostname changed. This can potentially send off the name + and password to whatever host the server decides. */ + CURLOPT(CURLOPT_UNRESTRICTED_AUTH, CURLOPTTYPE_LONG, 105), + + /* Specifically switch on or off the FTP engine's use of the EPRT command ( + it also disables the LPRT attempt). By default, those ones will always be + attempted before the good old traditional PORT command. */ + CURLOPT(CURLOPT_FTP_USE_EPRT, CURLOPTTYPE_LONG, 106), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_USERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CURLOPT(CURLOPT_HTTPAUTH, CURLOPTTYPE_VALUES, 107), + + /* Set the ssl context callback function, currently only for OpenSSL or + WolfSSL ssl_ctx, or mbedTLS mbedtls_ssl_config in the second argument. + The function must match the curl_ssl_ctx_callback prototype. */ + CURLOPT(CURLOPT_SSL_CTX_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 108), + + /* Set the userdata for the ssl context callback function's third + argument */ + CURLOPT(CURLOPT_SSL_CTX_DATA, CURLOPTTYPE_CBPOINT, 109), + + /* FTP Option that causes missing dirs to be created on the remote server. + In 7.19.4 we introduced the convenience enums for this option using the + CURLFTP_CREATE_DIR prefix. + */ + CURLOPT(CURLOPT_FTP_CREATE_MISSING_DIRS, CURLOPTTYPE_LONG, 110), + + /* Set this to a bitmask value to enable the particular authentications + methods you like. Use this in combination with CURLOPT_PROXYUSERPWD. + Note that setting multiple bits may cause extra network round-trips. */ + CURLOPT(CURLOPT_PROXYAUTH, CURLOPTTYPE_VALUES, 111), + + /* Option that changes the timeout, in seconds, associated with getting a + response. This is different from transfer timeout time and essentially + places a demand on the server to acknowledge commands in a timely + manner. For FTP, SMTP, IMAP and POP3. */ + CURLOPT(CURLOPT_SERVER_RESPONSE_TIMEOUT, CURLOPTTYPE_LONG, 112), + + /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to + tell libcurl to use those IP versions only. This only has effect on + systems with support for more than one, i.e IPv4 _and_ IPv6. */ + CURLOPT(CURLOPT_IPRESOLVE, CURLOPTTYPE_VALUES, 113), + + /* Set this option to limit the size of a file that will be downloaded from + an HTTP or FTP server. + + Note there is also _LARGE version which adds large file support for + platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ + CURLOPT(CURLOPT_MAXFILESIZE, CURLOPTTYPE_LONG, 114), + + /* See the comment for INFILESIZE above, but in short, specifies + * the size of the file being uploaded. -1 means unknown. + */ + CURLOPT(CURLOPT_INFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 115), + + /* Sets the continuation offset. There is also a CURLOPTTYPE_LONG version + * of this; look above for RESUME_FROM. + */ + CURLOPT(CURLOPT_RESUME_FROM_LARGE, CURLOPTTYPE_OFF_T, 116), + + /* Sets the maximum size of data that will be downloaded from + * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. + */ + CURLOPT(CURLOPT_MAXFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 117), + + /* Set this option to the file name of your .netrc file you want libcurl + to parse (using the CURLOPT_NETRC option). If not set, libcurl will do + a poor attempt to find the user's home directory and check for a .netrc + file in there. */ + CURLOPT(CURLOPT_NETRC_FILE, CURLOPTTYPE_STRINGPOINT, 118), + + /* Enable SSL/TLS for FTP, pick one of: + CURLUSESSL_TRY - try using SSL, proceed anyway otherwise + CURLUSESSL_CONTROL - SSL for the control connection or fail + CURLUSESSL_ALL - SSL for all communication or fail + */ + CURLOPT(CURLOPT_USE_SSL, CURLOPTTYPE_VALUES, 119), + + /* The _LARGE version of the standard POSTFIELDSIZE option */ + CURLOPT(CURLOPT_POSTFIELDSIZE_LARGE, CURLOPTTYPE_OFF_T, 120), + + /* Enable/disable the TCP Nagle algorithm */ + CURLOPT(CURLOPT_TCP_NODELAY, CURLOPTTYPE_LONG, 121), + + /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 123 OBSOLETE. Gone in 7.16.0 */ + /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */ + /* 127 OBSOLETE. Gone in 7.16.0 */ + /* 128 OBSOLETE. Gone in 7.16.0 */ + + /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option + can be used to change libcurl's default action which is to first try + "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK + response has been received. + + Available parameters are: + CURLFTPAUTH_DEFAULT - let libcurl decide + CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS + CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL + */ + CURLOPT(CURLOPT_FTPSSLAUTH, CURLOPTTYPE_VALUES, 129), + + CURLOPTDEPRECATED(CURLOPT_IOCTLFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 130, + 7.18.0, "Use CURLOPT_SEEKFUNCTION"), + CURLOPTDEPRECATED(CURLOPT_IOCTLDATA, CURLOPTTYPE_CBPOINT, 131, + 7.18.0, "Use CURLOPT_SEEKDATA"), + + /* 132 OBSOLETE. Gone in 7.16.0 */ + /* 133 OBSOLETE. Gone in 7.16.0 */ + + /* null-terminated string for pass on to the FTP server when asked for + "account" info */ + CURLOPT(CURLOPT_FTP_ACCOUNT, CURLOPTTYPE_STRINGPOINT, 134), + + /* feed cookie into cookie engine */ + CURLOPT(CURLOPT_COOKIELIST, CURLOPTTYPE_STRINGPOINT, 135), + + /* ignore Content-Length */ + CURLOPT(CURLOPT_IGNORE_CONTENT_LENGTH, CURLOPTTYPE_LONG, 136), + + /* Set to non-zero to skip the IP address received in a 227 PASV FTP server + response. Typically used for FTP-SSL purposes but is not restricted to + that. libcurl will then instead use the same IP address it used for the + control connection. */ + CURLOPT(CURLOPT_FTP_SKIP_PASV_IP, CURLOPTTYPE_LONG, 137), + + /* Select "file method" to use when doing FTP, see the curl_ftpmethod + above. */ + CURLOPT(CURLOPT_FTP_FILEMETHOD, CURLOPTTYPE_VALUES, 138), + + /* Local port number to bind the socket to */ + CURLOPT(CURLOPT_LOCALPORT, CURLOPTTYPE_LONG, 139), + + /* Number of ports to try, including the first one set with LOCALPORT. + Thus, setting it to 1 will make no additional attempts but the first. + */ + CURLOPT(CURLOPT_LOCALPORTRANGE, CURLOPTTYPE_LONG, 140), + + /* no transfer, set up connection and let application use the socket by + extracting it with CURLINFO_LASTSOCKET */ + CURLOPT(CURLOPT_CONNECT_ONLY, CURLOPTTYPE_LONG, 141), + + /* Function that will be called to convert from the + network encoding (instead of using the iconv calls in libcurl) */ + CURLOPTDEPRECATED(CURLOPT_CONV_FROM_NETWORK_FUNCTION, + CURLOPTTYPE_FUNCTIONPOINT, 142, + 7.82.0, "Serves no purpose anymore"), + + /* Function that will be called to convert to the + network encoding (instead of using the iconv calls in libcurl) */ + CURLOPTDEPRECATED(CURLOPT_CONV_TO_NETWORK_FUNCTION, + CURLOPTTYPE_FUNCTIONPOINT, 143, + 7.82.0, "Serves no purpose anymore"), + + /* Function that will be called to convert from UTF8 + (instead of using the iconv calls in libcurl) + Note that this is used only for SSL certificate processing */ + CURLOPTDEPRECATED(CURLOPT_CONV_FROM_UTF8_FUNCTION, + CURLOPTTYPE_FUNCTIONPOINT, 144, + 7.82.0, "Serves no purpose anymore"), + + /* if the connection proceeds too quickly then need to slow it down */ + /* limit-rate: maximum number of bytes per second to send or receive */ + CURLOPT(CURLOPT_MAX_SEND_SPEED_LARGE, CURLOPTTYPE_OFF_T, 145), + CURLOPT(CURLOPT_MAX_RECV_SPEED_LARGE, CURLOPTTYPE_OFF_T, 146), + + /* Pointer to command string to send if USER/PASS fails. */ + CURLOPT(CURLOPT_FTP_ALTERNATIVE_TO_USER, CURLOPTTYPE_STRINGPOINT, 147), + + /* callback function for setting socket options */ + CURLOPT(CURLOPT_SOCKOPTFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 148), + CURLOPT(CURLOPT_SOCKOPTDATA, CURLOPTTYPE_CBPOINT, 149), + + /* set to 0 to disable session ID reuse for this transfer, default is + enabled (== 1) */ + CURLOPT(CURLOPT_SSL_SESSIONID_CACHE, CURLOPTTYPE_LONG, 150), + + /* allowed SSH authentication methods */ + CURLOPT(CURLOPT_SSH_AUTH_TYPES, CURLOPTTYPE_VALUES, 151), + + /* Used by scp/sftp to do public/private key authentication */ + CURLOPT(CURLOPT_SSH_PUBLIC_KEYFILE, CURLOPTTYPE_STRINGPOINT, 152), + CURLOPT(CURLOPT_SSH_PRIVATE_KEYFILE, CURLOPTTYPE_STRINGPOINT, 153), + + /* Send CCC (Clear Command Channel) after authentication */ + CURLOPT(CURLOPT_FTP_SSL_CCC, CURLOPTTYPE_LONG, 154), + + /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */ + CURLOPT(CURLOPT_TIMEOUT_MS, CURLOPTTYPE_LONG, 155), + CURLOPT(CURLOPT_CONNECTTIMEOUT_MS, CURLOPTTYPE_LONG, 156), + + /* set to zero to disable the libcurl's decoding and thus pass the raw body + data to the application even when it is encoded/compressed */ + CURLOPT(CURLOPT_HTTP_TRANSFER_DECODING, CURLOPTTYPE_LONG, 157), + CURLOPT(CURLOPT_HTTP_CONTENT_DECODING, CURLOPTTYPE_LONG, 158), + + /* Permission used when creating new files and directories on the remote + server for protocols that support it, SFTP/SCP/FILE */ + CURLOPT(CURLOPT_NEW_FILE_PERMS, CURLOPTTYPE_LONG, 159), + CURLOPT(CURLOPT_NEW_DIRECTORY_PERMS, CURLOPTTYPE_LONG, 160), + + /* Set the behavior of POST when redirecting. Values must be set to one + of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */ + CURLOPT(CURLOPT_POSTREDIR, CURLOPTTYPE_VALUES, 161), + + /* used by scp/sftp to verify the host's public key */ + CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_MD5, CURLOPTTYPE_STRINGPOINT, 162), + + /* Callback function for opening socket (instead of socket(2)). Optionally, + callback is able change the address or refuse to connect returning + CURL_SOCKET_BAD. The callback should have type + curl_opensocket_callback */ + CURLOPT(CURLOPT_OPENSOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 163), + CURLOPT(CURLOPT_OPENSOCKETDATA, CURLOPTTYPE_CBPOINT, 164), + + /* POST volatile input fields. */ + CURLOPT(CURLOPT_COPYPOSTFIELDS, CURLOPTTYPE_OBJECTPOINT, 165), + + /* set transfer mode (;type=) when doing FTP via an HTTP proxy */ + CURLOPT(CURLOPT_PROXY_TRANSFER_MODE, CURLOPTTYPE_LONG, 166), + + /* Callback function for seeking in the input stream */ + CURLOPT(CURLOPT_SEEKFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 167), + CURLOPT(CURLOPT_SEEKDATA, CURLOPTTYPE_CBPOINT, 168), + + /* CRL file */ + CURLOPT(CURLOPT_CRLFILE, CURLOPTTYPE_STRINGPOINT, 169), + + /* Issuer certificate */ + CURLOPT(CURLOPT_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 170), + + /* (IPv6) Address scope */ + CURLOPT(CURLOPT_ADDRESS_SCOPE, CURLOPTTYPE_LONG, 171), + + /* Collect certificate chain info and allow it to get retrievable with + CURLINFO_CERTINFO after the transfer is complete. */ + CURLOPT(CURLOPT_CERTINFO, CURLOPTTYPE_LONG, 172), + + /* "name" and "pwd" to use when fetching. */ + CURLOPT(CURLOPT_USERNAME, CURLOPTTYPE_STRINGPOINT, 173), + CURLOPT(CURLOPT_PASSWORD, CURLOPTTYPE_STRINGPOINT, 174), + + /* "name" and "pwd" to use with Proxy when fetching. */ + CURLOPT(CURLOPT_PROXYUSERNAME, CURLOPTTYPE_STRINGPOINT, 175), + CURLOPT(CURLOPT_PROXYPASSWORD, CURLOPTTYPE_STRINGPOINT, 176), + + /* Comma separated list of hostnames defining no-proxy zones. These should + match both hostnames directly, and hostnames within a domain. For + example, local.com will match local.com and www.local.com, but NOT + notlocal.com or www.notlocal.com. For compatibility with other + implementations of this, .local.com will be considered to be the same as + local.com. A single * is the only valid wildcard, and effectively + disables the use of proxy. */ + CURLOPT(CURLOPT_NOPROXY, CURLOPTTYPE_STRINGPOINT, 177), + + /* block size for TFTP transfers */ + CURLOPT(CURLOPT_TFTP_BLKSIZE, CURLOPTTYPE_LONG, 178), + + /* Socks Service */ + /* DEPRECATED, do not use! */ + CURLOPTDEPRECATED(CURLOPT_SOCKS5_GSSAPI_SERVICE, + CURLOPTTYPE_STRINGPOINT, 179, + 7.49.0, "Use CURLOPT_PROXY_SERVICE_NAME"), + + /* Socks Service */ + CURLOPT(CURLOPT_SOCKS5_GSSAPI_NEC, CURLOPTTYPE_LONG, 180), + + /* set the bitmask for the protocols that are allowed to be used for the + transfer, which thus helps the app which takes URLs from users or other + external inputs and want to restrict what protocol(s) to deal + with. Defaults to CURLPROTO_ALL. */ + CURLOPTDEPRECATED(CURLOPT_PROTOCOLS, CURLOPTTYPE_LONG, 181, + 7.85.0, "Use CURLOPT_PROTOCOLS_STR"), + + /* set the bitmask for the protocols that libcurl is allowed to follow to, + as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs + to be set in both bitmasks to be allowed to get redirected to. */ + CURLOPTDEPRECATED(CURLOPT_REDIR_PROTOCOLS, CURLOPTTYPE_LONG, 182, + 7.85.0, "Use CURLOPT_REDIR_PROTOCOLS_STR"), + + /* set the SSH knownhost file name to use */ + CURLOPT(CURLOPT_SSH_KNOWNHOSTS, CURLOPTTYPE_STRINGPOINT, 183), + + /* set the SSH host key callback, must point to a curl_sshkeycallback + function */ + CURLOPT(CURLOPT_SSH_KEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 184), + + /* set the SSH host key callback custom pointer */ + CURLOPT(CURLOPT_SSH_KEYDATA, CURLOPTTYPE_CBPOINT, 185), + + /* set the SMTP mail originator */ + CURLOPT(CURLOPT_MAIL_FROM, CURLOPTTYPE_STRINGPOINT, 186), + + /* set the list of SMTP mail receiver(s) */ + CURLOPT(CURLOPT_MAIL_RCPT, CURLOPTTYPE_SLISTPOINT, 187), + + /* FTP: send PRET before PASV */ + CURLOPT(CURLOPT_FTP_USE_PRET, CURLOPTTYPE_LONG, 188), + + /* RTSP request method (OPTIONS, SETUP, PLAY, etc...) */ + CURLOPT(CURLOPT_RTSP_REQUEST, CURLOPTTYPE_VALUES, 189), + + /* The RTSP session identifier */ + CURLOPT(CURLOPT_RTSP_SESSION_ID, CURLOPTTYPE_STRINGPOINT, 190), + + /* The RTSP stream URI */ + CURLOPT(CURLOPT_RTSP_STREAM_URI, CURLOPTTYPE_STRINGPOINT, 191), + + /* The Transport: header to use in RTSP requests */ + CURLOPT(CURLOPT_RTSP_TRANSPORT, CURLOPTTYPE_STRINGPOINT, 192), + + /* Manually initialize the client RTSP CSeq for this handle */ + CURLOPT(CURLOPT_RTSP_CLIENT_CSEQ, CURLOPTTYPE_LONG, 193), + + /* Manually initialize the server RTSP CSeq for this handle */ + CURLOPT(CURLOPT_RTSP_SERVER_CSEQ, CURLOPTTYPE_LONG, 194), + + /* The stream to pass to INTERLEAVEFUNCTION. */ + CURLOPT(CURLOPT_INTERLEAVEDATA, CURLOPTTYPE_CBPOINT, 195), + + /* Let the application define a custom write method for RTP data */ + CURLOPT(CURLOPT_INTERLEAVEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 196), + + /* Turn on wildcard matching */ + CURLOPT(CURLOPT_WILDCARDMATCH, CURLOPTTYPE_LONG, 197), + + /* Directory matching callback called before downloading of an + individual file (chunk) started */ + CURLOPT(CURLOPT_CHUNK_BGN_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 198), + + /* Directory matching callback called after the file (chunk) + was downloaded, or skipped */ + CURLOPT(CURLOPT_CHUNK_END_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 199), + + /* Change match (fnmatch-like) callback for wildcard matching */ + CURLOPT(CURLOPT_FNMATCH_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 200), + + /* Let the application define custom chunk data pointer */ + CURLOPT(CURLOPT_CHUNK_DATA, CURLOPTTYPE_CBPOINT, 201), + + /* FNMATCH_FUNCTION user pointer */ + CURLOPT(CURLOPT_FNMATCH_DATA, CURLOPTTYPE_CBPOINT, 202), + + /* send linked-list of name:port:address sets */ + CURLOPT(CURLOPT_RESOLVE, CURLOPTTYPE_SLISTPOINT, 203), + + /* Set a username for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 204), + + /* Set a password for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 205), + + /* Set authentication type for authenticated TLS */ + CURLOPT(CURLOPT_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 206), + + /* Set to 1 to enable the "TE:" header in HTTP requests to ask for + compressed transfer-encoded responses. Set to 0 to disable the use of TE: + in outgoing requests. The current default is 0, but it might change in a + future libcurl release. + + libcurl will ask for the compressed methods it knows of, and if that + isn't any, it will not ask for transfer-encoding at all even if this + option is set to 1. + + */ + CURLOPT(CURLOPT_TRANSFER_ENCODING, CURLOPTTYPE_LONG, 207), + + /* Callback function for closing socket (instead of close(2)). The callback + should have type curl_closesocket_callback */ + CURLOPT(CURLOPT_CLOSESOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 208), + CURLOPT(CURLOPT_CLOSESOCKETDATA, CURLOPTTYPE_CBPOINT, 209), + + /* allow GSSAPI credential delegation */ + CURLOPT(CURLOPT_GSSAPI_DELEGATION, CURLOPTTYPE_VALUES, 210), + + /* Set the name servers to use for DNS resolution */ + CURLOPT(CURLOPT_DNS_SERVERS, CURLOPTTYPE_STRINGPOINT, 211), + + /* Time-out accept operations (currently for FTP only) after this amount + of milliseconds. */ + CURLOPT(CURLOPT_ACCEPTTIMEOUT_MS, CURLOPTTYPE_LONG, 212), + + /* Set TCP keepalive */ + CURLOPT(CURLOPT_TCP_KEEPALIVE, CURLOPTTYPE_LONG, 213), + + /* non-universal keepalive knobs (Linux, AIX, HP-UX, more) */ + CURLOPT(CURLOPT_TCP_KEEPIDLE, CURLOPTTYPE_LONG, 214), + CURLOPT(CURLOPT_TCP_KEEPINTVL, CURLOPTTYPE_LONG, 215), + + /* Enable/disable specific SSL features with a bitmask, see CURLSSLOPT_* */ + CURLOPT(CURLOPT_SSL_OPTIONS, CURLOPTTYPE_VALUES, 216), + + /* Set the SMTP auth originator */ + CURLOPT(CURLOPT_MAIL_AUTH, CURLOPTTYPE_STRINGPOINT, 217), + + /* Enable/disable SASL initial response */ + CURLOPT(CURLOPT_SASL_IR, CURLOPTTYPE_LONG, 218), + + /* Function that will be called instead of the internal progress display + * function. This function should be defined as the curl_xferinfo_callback + * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */ + CURLOPT(CURLOPT_XFERINFOFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 219), + + /* The XOAUTH2 bearer token */ + CURLOPT(CURLOPT_XOAUTH2_BEARER, CURLOPTTYPE_STRINGPOINT, 220), + + /* Set the interface string to use as outgoing network + * interface for DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_INTERFACE, CURLOPTTYPE_STRINGPOINT, 221), + + /* Set the local IPv4 address to use for outgoing DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_LOCAL_IP4, CURLOPTTYPE_STRINGPOINT, 222), + + /* Set the local IPv6 address to use for outgoing DNS requests. + * Only supported by the c-ares DNS backend */ + CURLOPT(CURLOPT_DNS_LOCAL_IP6, CURLOPTTYPE_STRINGPOINT, 223), + + /* Set authentication options directly */ + CURLOPT(CURLOPT_LOGIN_OPTIONS, CURLOPTTYPE_STRINGPOINT, 224), + + /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */ + CURLOPTDEPRECATED(CURLOPT_SSL_ENABLE_NPN, CURLOPTTYPE_LONG, 225, + 7.86.0, "Has no function"), + + /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */ + CURLOPT(CURLOPT_SSL_ENABLE_ALPN, CURLOPTTYPE_LONG, 226), + + /* Time to wait for a response to an HTTP request containing an + * Expect: 100-continue header before sending the data anyway. */ + CURLOPT(CURLOPT_EXPECT_100_TIMEOUT_MS, CURLOPTTYPE_LONG, 227), + + /* This points to a linked list of headers used for proxy requests only, + struct curl_slist kind */ + CURLOPT(CURLOPT_PROXYHEADER, CURLOPTTYPE_SLISTPOINT, 228), + + /* Pass in a bitmask of "header options" */ + CURLOPT(CURLOPT_HEADEROPT, CURLOPTTYPE_VALUES, 229), + + /* The public key in DER form used to validate the peer public key + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 230), + + /* Path to Unix domain socket */ + CURLOPT(CURLOPT_UNIX_SOCKET_PATH, CURLOPTTYPE_STRINGPOINT, 231), + + /* Set if we should verify the certificate status. */ + CURLOPT(CURLOPT_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 232), + + /* Set if we should enable TLS false start. */ + CURLOPT(CURLOPT_SSL_FALSESTART, CURLOPTTYPE_LONG, 233), + + /* Do not squash dot-dot sequences */ + CURLOPT(CURLOPT_PATH_AS_IS, CURLOPTTYPE_LONG, 234), + + /* Proxy Service Name */ + CURLOPT(CURLOPT_PROXY_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 235), + + /* Service Name */ + CURLOPT(CURLOPT_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 236), + + /* Wait/don't wait for pipe/mutex to clarify */ + CURLOPT(CURLOPT_PIPEWAIT, CURLOPTTYPE_LONG, 237), + + /* Set the protocol used when curl is given a URL without a protocol */ + CURLOPT(CURLOPT_DEFAULT_PROTOCOL, CURLOPTTYPE_STRINGPOINT, 238), + + /* Set stream weight, 1 - 256 (default is 16) */ + CURLOPT(CURLOPT_STREAM_WEIGHT, CURLOPTTYPE_LONG, 239), + + /* Set stream dependency on another CURL handle */ + CURLOPT(CURLOPT_STREAM_DEPENDS, CURLOPTTYPE_OBJECTPOINT, 240), + + /* Set E-xclusive stream dependency on another CURL handle */ + CURLOPT(CURLOPT_STREAM_DEPENDS_E, CURLOPTTYPE_OBJECTPOINT, 241), + + /* Do not send any tftp option requests to the server */ + CURLOPT(CURLOPT_TFTP_NO_OPTIONS, CURLOPTTYPE_LONG, 242), + + /* Linked-list of host:port:connect-to-host:connect-to-port, + overrides the URL's host:port (only for the network layer) */ + CURLOPT(CURLOPT_CONNECT_TO, CURLOPTTYPE_SLISTPOINT, 243), + + /* Set TCP Fast Open */ + CURLOPT(CURLOPT_TCP_FASTOPEN, CURLOPTTYPE_LONG, 244), + + /* Continue to send data if the server responds early with an + * HTTP status code >= 300 */ + CURLOPT(CURLOPT_KEEP_SENDING_ON_ERROR, CURLOPTTYPE_LONG, 245), + + /* The CApath or CAfile used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAINFO, CURLOPTTYPE_STRINGPOINT, 246), + + /* The CApath directory used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAPATH, CURLOPTTYPE_STRINGPOINT, 247), + + /* Set if we should verify the proxy in ssl handshake, + set 1 to verify. */ + CURLOPT(CURLOPT_PROXY_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 248), + + /* Set if we should verify the Common name from the proxy certificate in ssl + * handshake, set 1 to check existence, 2 to ensure that it matches + * the provided hostname. */ + CURLOPT(CURLOPT_PROXY_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 249), + + /* What version to specifically try to use for proxy. + See CURL_SSLVERSION defines below. */ + CURLOPT(CURLOPT_PROXY_SSLVERSION, CURLOPTTYPE_VALUES, 250), + + /* Set a username for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_USERNAME, CURLOPTTYPE_STRINGPOINT, 251), + + /* Set a password for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_PASSWORD, CURLOPTTYPE_STRINGPOINT, 252), + + /* Set authentication type for authenticated TLS for proxy */ + CURLOPT(CURLOPT_PROXY_TLSAUTH_TYPE, CURLOPTTYPE_STRINGPOINT, 253), + + /* name of the file keeping your private SSL-certificate for proxy */ + CURLOPT(CURLOPT_PROXY_SSLCERT, CURLOPTTYPE_STRINGPOINT, 254), + + /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") for + proxy */ + CURLOPT(CURLOPT_PROXY_SSLCERTTYPE, CURLOPTTYPE_STRINGPOINT, 255), + + /* name of the file keeping your private SSL-key for proxy */ + CURLOPT(CURLOPT_PROXY_SSLKEY, CURLOPTTYPE_STRINGPOINT, 256), + + /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") for + proxy */ + CURLOPT(CURLOPT_PROXY_SSLKEYTYPE, CURLOPTTYPE_STRINGPOINT, 257), + + /* password for the SSL private key for proxy */ + CURLOPT(CURLOPT_PROXY_KEYPASSWD, CURLOPTTYPE_STRINGPOINT, 258), + + /* Specify which SSL ciphers to use for proxy */ + CURLOPT(CURLOPT_PROXY_SSL_CIPHER_LIST, CURLOPTTYPE_STRINGPOINT, 259), + + /* CRL file for proxy */ + CURLOPT(CURLOPT_PROXY_CRLFILE, CURLOPTTYPE_STRINGPOINT, 260), + + /* Enable/disable specific SSL features with a bitmask for proxy, see + CURLSSLOPT_* */ + CURLOPT(CURLOPT_PROXY_SSL_OPTIONS, CURLOPTTYPE_LONG, 261), + + /* Name of pre proxy to use. */ + CURLOPT(CURLOPT_PRE_PROXY, CURLOPTTYPE_STRINGPOINT, 262), + + /* The public key in DER form used to validate the proxy public key + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_PINNEDPUBLICKEY, CURLOPTTYPE_STRINGPOINT, 263), + + /* Path to an abstract Unix domain socket */ + CURLOPT(CURLOPT_ABSTRACT_UNIX_SOCKET, CURLOPTTYPE_STRINGPOINT, 264), + + /* Suppress proxy CONNECT response headers from user callbacks */ + CURLOPT(CURLOPT_SUPPRESS_CONNECT_HEADERS, CURLOPTTYPE_LONG, 265), + + /* The request target, instead of extracted from the URL */ + CURLOPT(CURLOPT_REQUEST_TARGET, CURLOPTTYPE_STRINGPOINT, 266), + + /* bitmask of allowed auth methods for connections to SOCKS5 proxies */ + CURLOPT(CURLOPT_SOCKS5_AUTH, CURLOPTTYPE_LONG, 267), + + /* Enable/disable SSH compression */ + CURLOPT(CURLOPT_SSH_COMPRESSION, CURLOPTTYPE_LONG, 268), + + /* Post MIME data. */ + CURLOPT(CURLOPT_MIMEPOST, CURLOPTTYPE_OBJECTPOINT, 269), + + /* Time to use with the CURLOPT_TIMECONDITION. Specified in number of + seconds since 1 Jan 1970. */ + CURLOPT(CURLOPT_TIMEVALUE_LARGE, CURLOPTTYPE_OFF_T, 270), + + /* Head start in milliseconds to give happy eyeballs. */ + CURLOPT(CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, CURLOPTTYPE_LONG, 271), + + /* Function that will be called before a resolver request is made */ + CURLOPT(CURLOPT_RESOLVER_START_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 272), + + /* User data to pass to the resolver start callback. */ + CURLOPT(CURLOPT_RESOLVER_START_DATA, CURLOPTTYPE_CBPOINT, 273), + + /* send HAProxy PROXY protocol header? */ + CURLOPT(CURLOPT_HAPROXYPROTOCOL, CURLOPTTYPE_LONG, 274), + + /* shuffle addresses before use when DNS returns multiple */ + CURLOPT(CURLOPT_DNS_SHUFFLE_ADDRESSES, CURLOPTTYPE_LONG, 275), + + /* Specify which TLS 1.3 ciphers suites to use */ + CURLOPT(CURLOPT_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 276), + CURLOPT(CURLOPT_PROXY_TLS13_CIPHERS, CURLOPTTYPE_STRINGPOINT, 277), + + /* Disallow specifying username/login in URL. */ + CURLOPT(CURLOPT_DISALLOW_USERNAME_IN_URL, CURLOPTTYPE_LONG, 278), + + /* DNS-over-HTTPS URL */ + CURLOPT(CURLOPT_DOH_URL, CURLOPTTYPE_STRINGPOINT, 279), + + /* Preferred buffer size to use for uploads */ + CURLOPT(CURLOPT_UPLOAD_BUFFERSIZE, CURLOPTTYPE_LONG, 280), + + /* Time in ms between connection upkeep calls for long-lived connections. */ + CURLOPT(CURLOPT_UPKEEP_INTERVAL_MS, CURLOPTTYPE_LONG, 281), + + /* Specify URL using CURL URL API. */ + CURLOPT(CURLOPT_CURLU, CURLOPTTYPE_OBJECTPOINT, 282), + + /* add trailing data just after no more data is available */ + CURLOPT(CURLOPT_TRAILERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 283), + + /* pointer to be passed to HTTP_TRAILER_FUNCTION */ + CURLOPT(CURLOPT_TRAILERDATA, CURLOPTTYPE_CBPOINT, 284), + + /* set this to 1L to allow HTTP/0.9 responses or 0L to disallow */ + CURLOPT(CURLOPT_HTTP09_ALLOWED, CURLOPTTYPE_LONG, 285), + + /* alt-svc control bitmask */ + CURLOPT(CURLOPT_ALTSVC_CTRL, CURLOPTTYPE_LONG, 286), + + /* alt-svc cache file name to possibly read from/write to */ + CURLOPT(CURLOPT_ALTSVC, CURLOPTTYPE_STRINGPOINT, 287), + + /* maximum age (idle time) of a connection to consider it for reuse + * (in seconds) */ + CURLOPT(CURLOPT_MAXAGE_CONN, CURLOPTTYPE_LONG, 288), + + /* SASL authorization identity */ + CURLOPT(CURLOPT_SASL_AUTHZID, CURLOPTTYPE_STRINGPOINT, 289), + + /* allow RCPT TO command to fail for some recipients */ + CURLOPT(CURLOPT_MAIL_RCPT_ALLOWFAILS, CURLOPTTYPE_LONG, 290), + + /* the private SSL-certificate as a "blob" */ + CURLOPT(CURLOPT_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 291), + CURLOPT(CURLOPT_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 292), + CURLOPT(CURLOPT_PROXY_SSLCERT_BLOB, CURLOPTTYPE_BLOB, 293), + CURLOPT(CURLOPT_PROXY_SSLKEY_BLOB, CURLOPTTYPE_BLOB, 294), + CURLOPT(CURLOPT_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 295), + + /* Issuer certificate for proxy */ + CURLOPT(CURLOPT_PROXY_ISSUERCERT, CURLOPTTYPE_STRINGPOINT, 296), + CURLOPT(CURLOPT_PROXY_ISSUERCERT_BLOB, CURLOPTTYPE_BLOB, 297), + + /* the EC curves requested by the TLS client (RFC 8422, 5.1); + * OpenSSL support via 'set_groups'/'set_curves': + * https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set1_groups.html + */ + CURLOPT(CURLOPT_SSL_EC_CURVES, CURLOPTTYPE_STRINGPOINT, 298), + + /* HSTS bitmask */ + CURLOPT(CURLOPT_HSTS_CTRL, CURLOPTTYPE_LONG, 299), + /* HSTS file name */ + CURLOPT(CURLOPT_HSTS, CURLOPTTYPE_STRINGPOINT, 300), + + /* HSTS read callback */ + CURLOPT(CURLOPT_HSTSREADFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 301), + CURLOPT(CURLOPT_HSTSREADDATA, CURLOPTTYPE_CBPOINT, 302), + + /* HSTS write callback */ + CURLOPT(CURLOPT_HSTSWRITEFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 303), + CURLOPT(CURLOPT_HSTSWRITEDATA, CURLOPTTYPE_CBPOINT, 304), + + /* Parameters for V4 signature */ + CURLOPT(CURLOPT_AWS_SIGV4, CURLOPTTYPE_STRINGPOINT, 305), + + /* Same as CURLOPT_SSL_VERIFYPEER but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYPEER, CURLOPTTYPE_LONG, 306), + + /* Same as CURLOPT_SSL_VERIFYHOST but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 307), + + /* Same as CURLOPT_SSL_VERIFYSTATUS but for DoH (DNS-over-HTTPS) servers. */ + CURLOPT(CURLOPT_DOH_SSL_VERIFYSTATUS, CURLOPTTYPE_LONG, 308), + + /* The CA certificates as "blob" used to validate the peer certificate + this option is used only if SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_CAINFO_BLOB, CURLOPTTYPE_BLOB, 309), + + /* The CA certificates as "blob" used to validate the proxy certificate + this option is used only if PROXY_SSL_VERIFYPEER is true */ + CURLOPT(CURLOPT_PROXY_CAINFO_BLOB, CURLOPTTYPE_BLOB, 310), + + /* used by scp/sftp to verify the host's public key */ + CURLOPT(CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256, CURLOPTTYPE_STRINGPOINT, 311), + + /* Function that will be called immediately before the initial request + is made on a connection (after any protocol negotiation step). */ + CURLOPT(CURLOPT_PREREQFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 312), + + /* Data passed to the CURLOPT_PREREQFUNCTION callback */ + CURLOPT(CURLOPT_PREREQDATA, CURLOPTTYPE_CBPOINT, 313), + + /* maximum age (since creation) of a connection to consider it for reuse + * (in seconds) */ + CURLOPT(CURLOPT_MAXLIFETIME_CONN, CURLOPTTYPE_LONG, 314), + + /* Set MIME option flags. */ + CURLOPT(CURLOPT_MIME_OPTIONS, CURLOPTTYPE_LONG, 315), + + /* set the SSH host key callback, must point to a curl_sshkeycallback + function */ + CURLOPT(CURLOPT_SSH_HOSTKEYFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 316), + + /* set the SSH host key callback custom pointer */ + CURLOPT(CURLOPT_SSH_HOSTKEYDATA, CURLOPTTYPE_CBPOINT, 317), + + /* specify which protocols that are allowed to be used for the transfer, + which thus helps the app which takes URLs from users or other external + inputs and want to restrict what protocol(s) to deal with. Defaults to + all built-in protocols. */ + CURLOPT(CURLOPT_PROTOCOLS_STR, CURLOPTTYPE_STRINGPOINT, 318), + + /* specify which protocols that libcurl is allowed to follow directs to */ + CURLOPT(CURLOPT_REDIR_PROTOCOLS_STR, CURLOPTTYPE_STRINGPOINT, 319), + + /* websockets options */ + CURLOPT(CURLOPT_WS_OPTIONS, CURLOPTTYPE_LONG, 320), + + /* CA cache timeout */ + CURLOPT(CURLOPT_CA_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 321), + + /* Can leak things, gonna exit() soon */ + CURLOPT(CURLOPT_QUICK_EXIT, CURLOPTTYPE_LONG, 322), + + /* set a specific client IP for HAProxy PROXY protocol header? */ + CURLOPT(CURLOPT_HAPROXY_CLIENT_IP, CURLOPTTYPE_STRINGPOINT, 323), + + CURLOPT_LASTENTRY /* the last unused */ +} CURLoption; + +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all + the obsolete stuff removed! */ + +/* Backwards compatibility with older names */ +/* These are scheduled to disappear by 2011 */ + +/* This was added in version 7.19.1 */ +#define CURLOPT_POST301 CURLOPT_POSTREDIR + +/* These are scheduled to disappear by 2009 */ + +/* The following were added in 7.17.0 */ +#define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD +#define CURLOPT_FTPAPPEND CURLOPT_APPEND +#define CURLOPT_FTPLISTONLY CURLOPT_DIRLISTONLY +#define CURLOPT_FTP_SSL CURLOPT_USE_SSL + +/* The following were added earlier */ + +#define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD +#define CURLOPT_KRB4LEVEL CURLOPT_KRBLEVEL + +/* */ +#define CURLOPT_FTP_RESPONSE_TIMEOUT CURLOPT_SERVER_RESPONSE_TIMEOUT + +/* Added in 8.2.0 */ +#define CURLOPT_MAIL_RCPT_ALLLOWFAILS CURLOPT_MAIL_RCPT_ALLOWFAILS + +#else +/* This is set if CURL_NO_OLDIES is defined at compile-time */ +#undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */ +#endif + + + /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host + name resolves addresses using more than one IP protocol version, this + option might be handy to force libcurl to use a specific IP version. */ +#define CURL_IPRESOLVE_WHATEVER 0 /* default, uses addresses to all IP + versions that your system allows */ +#define CURL_IPRESOLVE_V4 1 /* uses only IPv4 addresses/connections */ +#define CURL_IPRESOLVE_V6 2 /* uses only IPv6 addresses/connections */ + + /* Convenient "aliases" */ +#define CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER + + /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ +enum { + CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd + like the library to choose the best possible + for us! */ + CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ + CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ + CURL_HTTP_VERSION_2_0, /* please use HTTP 2 in the request */ + CURL_HTTP_VERSION_2TLS, /* use version 2 for HTTPS, version 1.1 for HTTP */ + CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE, /* please use HTTP 2 without HTTP/1.1 + Upgrade */ + CURL_HTTP_VERSION_3 = 30, /* Use HTTP/3, fallback to HTTP/2 or HTTP/1 if + needed. For HTTPS only. For HTTP, this option + makes libcurl return error. */ + CURL_HTTP_VERSION_3ONLY = 31, /* Use HTTP/3 without fallback. For HTTPS + only. For HTTP, this makes libcurl + return error. */ + + CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */ +}; + +/* Convenience definition simple because the name of the version is HTTP/2 and + not 2.0. The 2_0 version of the enum name was set while the version was + still planned to be 2.0 and we stick to it for compatibility. */ +#define CURL_HTTP_VERSION_2 CURL_HTTP_VERSION_2_0 + +/* + * Public API enums for RTSP requests + */ +enum { + CURL_RTSPREQ_NONE, /* first in list */ + CURL_RTSPREQ_OPTIONS, + CURL_RTSPREQ_DESCRIBE, + CURL_RTSPREQ_ANNOUNCE, + CURL_RTSPREQ_SETUP, + CURL_RTSPREQ_PLAY, + CURL_RTSPREQ_PAUSE, + CURL_RTSPREQ_TEARDOWN, + CURL_RTSPREQ_GET_PARAMETER, + CURL_RTSPREQ_SET_PARAMETER, + CURL_RTSPREQ_RECORD, + CURL_RTSPREQ_RECEIVE, + CURL_RTSPREQ_LAST /* last in list */ +}; + + /* These enums are for use with the CURLOPT_NETRC option. */ +enum CURL_NETRC_OPTION { + CURL_NETRC_IGNORED, /* The .netrc will never be read. + * This is the default. */ + CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred + * to one in the .netrc. */ + CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. + * Unless one is set programmatically, the .netrc + * will be queried. */ + CURL_NETRC_LAST +}; + +enum { + CURL_SSLVERSION_DEFAULT, + CURL_SSLVERSION_TLSv1, /* TLS 1.x */ + CURL_SSLVERSION_SSLv2, + CURL_SSLVERSION_SSLv3, + CURL_SSLVERSION_TLSv1_0, + CURL_SSLVERSION_TLSv1_1, + CURL_SSLVERSION_TLSv1_2, + CURL_SSLVERSION_TLSv1_3, + + CURL_SSLVERSION_LAST /* never use, keep last */ +}; + +enum { + CURL_SSLVERSION_MAX_NONE = 0, + CURL_SSLVERSION_MAX_DEFAULT = (CURL_SSLVERSION_TLSv1 << 16), + CURL_SSLVERSION_MAX_TLSv1_0 = (CURL_SSLVERSION_TLSv1_0 << 16), + CURL_SSLVERSION_MAX_TLSv1_1 = (CURL_SSLVERSION_TLSv1_1 << 16), + CURL_SSLVERSION_MAX_TLSv1_2 = (CURL_SSLVERSION_TLSv1_2 << 16), + CURL_SSLVERSION_MAX_TLSv1_3 = (CURL_SSLVERSION_TLSv1_3 << 16), + + /* never use, keep last */ + CURL_SSLVERSION_MAX_LAST = (CURL_SSLVERSION_LAST << 16) +}; + +enum CURL_TLSAUTH { + CURL_TLSAUTH_NONE, + CURL_TLSAUTH_SRP, + CURL_TLSAUTH_LAST /* never use, keep last */ +}; + +/* symbols to use with CURLOPT_POSTREDIR. + CURL_REDIR_POST_301, CURL_REDIR_POST_302 and CURL_REDIR_POST_303 + can be bitwise ORed so that CURL_REDIR_POST_301 | CURL_REDIR_POST_302 + | CURL_REDIR_POST_303 == CURL_REDIR_POST_ALL */ + +#define CURL_REDIR_GET_ALL 0 +#define CURL_REDIR_POST_301 1 +#define CURL_REDIR_POST_302 2 +#define CURL_REDIR_POST_303 4 +#define CURL_REDIR_POST_ALL \ + (CURL_REDIR_POST_301|CURL_REDIR_POST_302|CURL_REDIR_POST_303) + +typedef enum { + CURL_TIMECOND_NONE, + + CURL_TIMECOND_IFMODSINCE, + CURL_TIMECOND_IFUNMODSINCE, + CURL_TIMECOND_LASTMOD, + + CURL_TIMECOND_LAST +} curl_TimeCond; + +/* Special size_t value signaling a null-terminated string. */ +#define CURL_ZERO_TERMINATED ((size_t) -1) + +/* curl_strequal() and curl_strnequal() are subject for removal in a future + release */ +CURL_EXTERN int curl_strequal(const char *s1, const char *s2); +CURL_EXTERN int curl_strnequal(const char *s1, const char *s2, size_t n); + +/* Mime/form handling support. */ +typedef struct curl_mime curl_mime; /* Mime context. */ +typedef struct curl_mimepart curl_mimepart; /* Mime part context. */ + +/* CURLMIMEOPT_ defines are for the CURLOPT_MIME_OPTIONS option. */ +#define CURLMIMEOPT_FORMESCAPE (1<<0) /* Use backslash-escaping for forms. */ + +/* + * NAME curl_mime_init() + * + * DESCRIPTION + * + * Create a mime context and return its handle. The easy parameter is the + * target handle. + */ +CURL_EXTERN curl_mime *curl_mime_init(CURL *easy); + +/* + * NAME curl_mime_free() + * + * DESCRIPTION + * + * release a mime handle and its substructures. + */ +CURL_EXTERN void curl_mime_free(curl_mime *mime); + +/* + * NAME curl_mime_addpart() + * + * DESCRIPTION + * + * Append a new empty part to the given mime context and return a handle to + * the created part. + */ +CURL_EXTERN curl_mimepart *curl_mime_addpart(curl_mime *mime); + +/* + * NAME curl_mime_name() + * + * DESCRIPTION + * + * Set mime/form part name. + */ +CURL_EXTERN CURLcode curl_mime_name(curl_mimepart *part, const char *name); + +/* + * NAME curl_mime_filename() + * + * DESCRIPTION + * + * Set mime part remote file name. + */ +CURL_EXTERN CURLcode curl_mime_filename(curl_mimepart *part, + const char *filename); + +/* + * NAME curl_mime_type() + * + * DESCRIPTION + * + * Set mime part type. + */ +CURL_EXTERN CURLcode curl_mime_type(curl_mimepart *part, const char *mimetype); + +/* + * NAME curl_mime_encoder() + * + * DESCRIPTION + * + * Set mime data transfer encoder. + */ +CURL_EXTERN CURLcode curl_mime_encoder(curl_mimepart *part, + const char *encoding); + +/* + * NAME curl_mime_data() + * + * DESCRIPTION + * + * Set mime part data source from memory data, + */ +CURL_EXTERN CURLcode curl_mime_data(curl_mimepart *part, + const char *data, size_t datasize); + +/* + * NAME curl_mime_filedata() + * + * DESCRIPTION + * + * Set mime part data source from named file. + */ +CURL_EXTERN CURLcode curl_mime_filedata(curl_mimepart *part, + const char *filename); + +/* + * NAME curl_mime_data_cb() + * + * DESCRIPTION + * + * Set mime part data source from callback function. + */ +CURL_EXTERN CURLcode curl_mime_data_cb(curl_mimepart *part, + curl_off_t datasize, + curl_read_callback readfunc, + curl_seek_callback seekfunc, + curl_free_callback freefunc, + void *arg); + +/* + * NAME curl_mime_subparts() + * + * DESCRIPTION + * + * Set mime part data source from subparts. + */ +CURL_EXTERN CURLcode curl_mime_subparts(curl_mimepart *part, + curl_mime *subparts); +/* + * NAME curl_mime_headers() + * + * DESCRIPTION + * + * Set mime part headers. + */ +CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part, + struct curl_slist *headers, + int take_ownership); + +typedef enum { + /********* the first one is unused ************/ + CURLFORM_NOTHING CURL_DEPRECATED(7.56.0, ""), + CURLFORM_COPYNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), + CURLFORM_PTRNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), + CURLFORM_NAMELENGTH CURL_DEPRECATED(7.56.0, ""), + CURLFORM_COPYCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_PTRCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_CONTENTSLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_FILECONTENT CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), + CURLFORM_ARRAY CURL_DEPRECATED(7.56.0, ""), + CURLFORM_OBSOLETE, + CURLFORM_FILE CURL_DEPRECATED(7.56.0, "Use curl_mime_filedata()"), + + CURLFORM_BUFFER CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), + CURLFORM_BUFFERPTR CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_BUFFERLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + + CURLFORM_CONTENTTYPE CURL_DEPRECATED(7.56.0, "Use curl_mime_type()"), + CURLFORM_CONTENTHEADER CURL_DEPRECATED(7.56.0, "Use curl_mime_headers()"), + CURLFORM_FILENAME CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), + CURLFORM_END, + CURLFORM_OBSOLETE2, + + CURLFORM_STREAM CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), + CURLFORM_CONTENTLEN /* added in 7.46.0, provide a curl_off_t length */ + CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + + CURLFORM_LASTENTRY /* the last unused */ +} CURLformoption; + +/* structure to be used as parameter for CURLFORM_ARRAY */ +struct curl_forms { + CURLformoption option; + const char *value; +}; + +/* use this for multipart formpost building */ +/* Returns code for curl_formadd() + * + * Returns: + * CURL_FORMADD_OK on success + * CURL_FORMADD_MEMORY if the FormInfo allocation fails + * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form + * CURL_FORMADD_NULL if a null pointer was given for a char + * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed + * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used + * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error) + * CURL_FORMADD_MEMORY if a curl_httppost struct cannot be allocated + * CURL_FORMADD_MEMORY if some allocation for string copying failed. + * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array + * + ***************************************************************************/ +typedef enum { + CURL_FORMADD_OK CURL_DEPRECATED(7.56.0, ""), /* 1st, no error */ + + CURL_FORMADD_MEMORY CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_OPTION_TWICE CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_NULL CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_UNKNOWN_OPTION CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_INCOMPLETE CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_ILLEGAL_ARRAY CURL_DEPRECATED(7.56.0, ""), + /* libcurl was built with form api disabled */ + CURL_FORMADD_DISABLED CURL_DEPRECATED(7.56.0, ""), + + CURL_FORMADD_LAST /* last */ +} CURLFORMcode; + +/* + * NAME curl_formadd() + * + * DESCRIPTION + * + * Pretty advanced function for building multi-part formposts. Each invoke + * adds one part that together construct a full post. Then use + * CURLOPT_HTTPPOST to send it off to libcurl. + */ +CURL_EXTERN CURLFORMcode CURL_DEPRECATED(7.56.0, "Use curl_mime_init()") +curl_formadd(struct curl_httppost **httppost, + struct curl_httppost **last_post, + ...); + +/* + * callback function for curl_formget() + * The void *arg pointer will be the one passed as second argument to + * curl_formget(). + * The character buffer passed to it must not be freed. + * Should return the buffer length passed to it as the argument "len" on + * success. + */ +typedef size_t (*curl_formget_callback)(void *arg, const char *buf, + size_t len); + +/* + * NAME curl_formget() + * + * DESCRIPTION + * + * Serialize a curl_httppost struct built with curl_formadd(). + * Accepts a void pointer as second argument which will be passed to + * the curl_formget_callback function. + * Returns 0 on success. + */ +CURL_EXTERN int CURL_DEPRECATED(7.56.0, "") +curl_formget(struct curl_httppost *form, void *arg, + curl_formget_callback append); +/* + * NAME curl_formfree() + * + * DESCRIPTION + * + * Free a multipart formpost previously built with curl_formadd(). + */ +CURL_EXTERN void CURL_DEPRECATED(7.56.0, "Use curl_mime_free()") +curl_formfree(struct curl_httppost *form); + +/* + * NAME curl_getenv() + * + * DESCRIPTION + * + * Returns a malloc()'ed string that MUST be curl_free()ed after usage is + * complete. DEPRECATED - see lib/README.curlx + */ +CURL_EXTERN char *curl_getenv(const char *variable); + +/* + * NAME curl_version() + * + * DESCRIPTION + * + * Returns a static ascii string of the libcurl version. + */ +CURL_EXTERN char *curl_version(void); + +/* + * NAME curl_easy_escape() + * + * DESCRIPTION + * + * Escapes URL strings (converts all letters consider illegal in URLs to their + * %XX versions). This function returns a new allocated string or NULL if an + * error occurred. + */ +CURL_EXTERN char *curl_easy_escape(CURL *handle, + const char *string, + int length); + +/* the previous version: */ +CURL_EXTERN char *curl_escape(const char *string, + int length); + + +/* + * NAME curl_easy_unescape() + * + * DESCRIPTION + * + * Unescapes URL encoding in strings (converts all %XX codes to their 8bit + * versions). This function returns a new allocated string or NULL if an error + * occurred. + * Conversion Note: On non-ASCII platforms the ASCII %XX codes are + * converted into the host encoding. + */ +CURL_EXTERN char *curl_easy_unescape(CURL *handle, + const char *string, + int length, + int *outlength); + +/* the previous version */ +CURL_EXTERN char *curl_unescape(const char *string, + int length); + +/* + * NAME curl_free() + * + * DESCRIPTION + * + * Provided for de-allocation in the same translation unit that did the + * allocation. Added in libcurl 7.10 + */ +CURL_EXTERN void curl_free(void *p); + +/* + * NAME curl_global_init() + * + * DESCRIPTION + * + * curl_global_init() should be invoked exactly once for each application that + * uses libcurl and before any call of other libcurl functions. + + * This function is thread-safe if CURL_VERSION_THREADSAFE is set in the + * curl_version_info_data.features flag (fetch by curl_version_info()). + + */ +CURL_EXTERN CURLcode curl_global_init(long flags); + +/* + * NAME curl_global_init_mem() + * + * DESCRIPTION + * + * curl_global_init() or curl_global_init_mem() should be invoked exactly once + * for each application that uses libcurl. This function can be used to + * initialize libcurl and set user defined memory management callback + * functions. Users can implement memory management routines to check for + * memory leaks, check for mis-use of the curl library etc. User registered + * callback routines will be invoked by this library instead of the system + * memory management routines like malloc, free etc. + */ +CURL_EXTERN CURLcode curl_global_init_mem(long flags, + curl_malloc_callback m, + curl_free_callback f, + curl_realloc_callback r, + curl_strdup_callback s, + curl_calloc_callback c); + +/* + * NAME curl_global_cleanup() + * + * DESCRIPTION + * + * curl_global_cleanup() should be invoked exactly once for each application + * that uses libcurl + */ +CURL_EXTERN void curl_global_cleanup(void); + +/* + * NAME curl_global_trace() + * + * DESCRIPTION + * + * curl_global_trace() can be invoked at application start to + * configure which components in curl should participate in tracing. + + * This function is thread-safe if CURL_VERSION_THREADSAFE is set in the + * curl_version_info_data.features flag (fetch by curl_version_info()). + + */ +CURL_EXTERN CURLcode curl_global_trace(const char *config); + +/* linked-list structure for the CURLOPT_QUOTE option (and other) */ +struct curl_slist { + char *data; + struct curl_slist *next; +}; + +/* + * NAME curl_global_sslset() + * + * DESCRIPTION + * + * When built with multiple SSL backends, curl_global_sslset() allows to + * choose one. This function can only be called once, and it must be called + * *before* curl_global_init(). + * + * The backend can be identified by the id (e.g. CURLSSLBACKEND_OPENSSL). The + * backend can also be specified via the name parameter (passing -1 as id). + * If both id and name are specified, the name will be ignored. If neither id + * nor name are specified, the function will fail with + * CURLSSLSET_UNKNOWN_BACKEND and set the "avail" pointer to the + * NULL-terminated list of available backends. + * + * Upon success, the function returns CURLSSLSET_OK. + * + * If the specified SSL backend is not available, the function returns + * CURLSSLSET_UNKNOWN_BACKEND and sets the "avail" pointer to a NULL-terminated + * list of available SSL backends. + * + * The SSL backend can be set only once. If it has already been set, a + * subsequent attempt to change it will result in a CURLSSLSET_TOO_LATE. + */ + +struct curl_ssl_backend { + curl_sslbackend id; + const char *name; +}; +typedef struct curl_ssl_backend curl_ssl_backend; + +typedef enum { + CURLSSLSET_OK = 0, + CURLSSLSET_UNKNOWN_BACKEND, + CURLSSLSET_TOO_LATE, + CURLSSLSET_NO_BACKENDS /* libcurl was built without any SSL support */ +} CURLsslset; + +CURL_EXTERN CURLsslset curl_global_sslset(curl_sslbackend id, const char *name, + const curl_ssl_backend ***avail); + +/* + * NAME curl_slist_append() + * + * DESCRIPTION + * + * Appends a string to a linked list. If no list exists, it will be created + * first. Returns the new list, after appending. + */ +CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *list, + const char *data); + +/* + * NAME curl_slist_free_all() + * + * DESCRIPTION + * + * free a previously built curl_slist. + */ +CURL_EXTERN void curl_slist_free_all(struct curl_slist *list); + +/* + * NAME curl_getdate() + * + * DESCRIPTION + * + * Returns the time, in seconds since 1 Jan 1970 of the time string given in + * the first argument. The time argument in the second parameter is unused + * and should be set to NULL. + */ +CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused); + +/* info about the certificate chain, for SSL backends that support it. Asked + for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */ +struct curl_certinfo { + int num_of_certs; /* number of certificates with information */ + struct curl_slist **certinfo; /* for each index in this array, there's a + linked list with textual information for a + certificate in the format "name:content". + eg "Subject:foo", "Issuer:bar", etc. */ +}; + +/* Information about the SSL library used and the respective internal SSL + handle, which can be used to obtain further information regarding the + connection. Asked for with CURLINFO_TLS_SSL_PTR or CURLINFO_TLS_SESSION. */ +struct curl_tlssessioninfo { + curl_sslbackend backend; + void *internals; +}; + +#define CURLINFO_STRING 0x100000 +#define CURLINFO_LONG 0x200000 +#define CURLINFO_DOUBLE 0x300000 +#define CURLINFO_SLIST 0x400000 +#define CURLINFO_PTR 0x400000 /* same as SLIST */ +#define CURLINFO_SOCKET 0x500000 +#define CURLINFO_OFF_T 0x600000 +#define CURLINFO_MASK 0x0fffff +#define CURLINFO_TYPEMASK 0xf00000 + +typedef enum { + CURLINFO_NONE, /* first, never use this */ + CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, + CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, + CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, + CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, + CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, + CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6, + CURLINFO_SIZE_UPLOAD CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_UPLOAD_T") + = CURLINFO_DOUBLE + 7, + CURLINFO_SIZE_UPLOAD_T = CURLINFO_OFF_T + 7, + CURLINFO_SIZE_DOWNLOAD + CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_DOWNLOAD_T") + = CURLINFO_DOUBLE + 8, + CURLINFO_SIZE_DOWNLOAD_T = CURLINFO_OFF_T + 8, + CURLINFO_SPEED_DOWNLOAD + CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_DOWNLOAD_T") + = CURLINFO_DOUBLE + 9, + CURLINFO_SPEED_DOWNLOAD_T = CURLINFO_OFF_T + 9, + CURLINFO_SPEED_UPLOAD + CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_UPLOAD_T") + = CURLINFO_DOUBLE + 10, + CURLINFO_SPEED_UPLOAD_T = CURLINFO_OFF_T + 10, + CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, + CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, + CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, + CURLINFO_FILETIME = CURLINFO_LONG + 14, + CURLINFO_FILETIME_T = CURLINFO_OFF_T + 14, + CURLINFO_CONTENT_LENGTH_DOWNLOAD + CURL_DEPRECATED(7.55.0, + "Use CURLINFO_CONTENT_LENGTH_DOWNLOAD_T") + = CURLINFO_DOUBLE + 15, + CURLINFO_CONTENT_LENGTH_DOWNLOAD_T = CURLINFO_OFF_T + 15, + CURLINFO_CONTENT_LENGTH_UPLOAD + CURL_DEPRECATED(7.55.0, + "Use CURLINFO_CONTENT_LENGTH_UPLOAD_T") + = CURLINFO_DOUBLE + 16, + CURLINFO_CONTENT_LENGTH_UPLOAD_T = CURLINFO_OFF_T + 16, + CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, + CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, + CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, + CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, + CURLINFO_PRIVATE = CURLINFO_STRING + 21, + CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, + CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, + CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, + CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, + CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, + CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, + CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, + CURLINFO_LASTSOCKET CURL_DEPRECATED(7.45.0, "Use CURLINFO_ACTIVESOCKET") + = CURLINFO_LONG + 29, + CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, + CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31, + CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32, + CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33, + CURLINFO_CERTINFO = CURLINFO_PTR + 34, + CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35, + CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36, + CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37, + CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38, + CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39, + CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40, + CURLINFO_LOCAL_IP = CURLINFO_STRING + 41, + CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42, + CURLINFO_TLS_SESSION CURL_DEPRECATED(7.48.0, "Use CURLINFO_TLS_SSL_PTR") + = CURLINFO_PTR + 43, + CURLINFO_ACTIVESOCKET = CURLINFO_SOCKET + 44, + CURLINFO_TLS_SSL_PTR = CURLINFO_PTR + 45, + CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46, + CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47, + CURLINFO_PROTOCOL CURL_DEPRECATED(7.85.0, "Use CURLINFO_SCHEME") + = CURLINFO_LONG + 48, + CURLINFO_SCHEME = CURLINFO_STRING + 49, + CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50, + CURLINFO_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51, + CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52, + CURLINFO_PRETRANSFER_TIME_T = CURLINFO_OFF_T + 53, + CURLINFO_STARTTRANSFER_TIME_T = CURLINFO_OFF_T + 54, + CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55, + CURLINFO_APPCONNECT_TIME_T = CURLINFO_OFF_T + 56, + CURLINFO_RETRY_AFTER = CURLINFO_OFF_T + 57, + CURLINFO_EFFECTIVE_METHOD = CURLINFO_STRING + 58, + CURLINFO_PROXY_ERROR = CURLINFO_LONG + 59, + CURLINFO_REFERER = CURLINFO_STRING + 60, + CURLINFO_CAINFO = CURLINFO_STRING + 61, + CURLINFO_CAPATH = CURLINFO_STRING + 62, + CURLINFO_XFER_ID = CURLINFO_OFF_T + 63, + CURLINFO_CONN_ID = CURLINFO_OFF_T + 64, + CURLINFO_LASTONE = 64 +} CURLINFO; + +/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as + CURLINFO_HTTP_CODE */ +#define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE + +typedef enum { + CURLCLOSEPOLICY_NONE, /* first, never use this */ + + CURLCLOSEPOLICY_OLDEST, + CURLCLOSEPOLICY_LEAST_RECENTLY_USED, + CURLCLOSEPOLICY_LEAST_TRAFFIC, + CURLCLOSEPOLICY_SLOWEST, + CURLCLOSEPOLICY_CALLBACK, + + CURLCLOSEPOLICY_LAST /* last, never use this */ +} curl_closepolicy; + +#define CURL_GLOBAL_SSL (1<<0) /* no purpose since 7.57.0 */ +#define CURL_GLOBAL_WIN32 (1<<1) +#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) +#define CURL_GLOBAL_NOTHING 0 +#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL +#define CURL_GLOBAL_ACK_EINTR (1<<2) + + +/***************************************************************************** + * Setup defines, protos etc for the sharing stuff. + */ + +/* Different data locks for a single share */ +typedef enum { + CURL_LOCK_DATA_NONE = 0, + /* CURL_LOCK_DATA_SHARE is used internally to say that + * the locking is just made to change the internal state of the share + * itself. + */ + CURL_LOCK_DATA_SHARE, + CURL_LOCK_DATA_COOKIE, + CURL_LOCK_DATA_DNS, + CURL_LOCK_DATA_SSL_SESSION, + CURL_LOCK_DATA_CONNECT, + CURL_LOCK_DATA_PSL, + CURL_LOCK_DATA_HSTS, + CURL_LOCK_DATA_LAST +} curl_lock_data; + +/* Different lock access types */ +typedef enum { + CURL_LOCK_ACCESS_NONE = 0, /* unspecified action */ + CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */ + CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */ + CURL_LOCK_ACCESS_LAST /* never use */ +} curl_lock_access; + +typedef void (*curl_lock_function)(CURL *handle, + curl_lock_data data, + curl_lock_access locktype, + void *userptr); +typedef void (*curl_unlock_function)(CURL *handle, + curl_lock_data data, + void *userptr); + + +typedef enum { + CURLSHE_OK, /* all is fine */ + CURLSHE_BAD_OPTION, /* 1 */ + CURLSHE_IN_USE, /* 2 */ + CURLSHE_INVALID, /* 3 */ + CURLSHE_NOMEM, /* 4 out of memory */ + CURLSHE_NOT_BUILT_IN, /* 5 feature not present in lib */ + CURLSHE_LAST /* never use */ +} CURLSHcode; + +typedef enum { + CURLSHOPT_NONE, /* don't use */ + CURLSHOPT_SHARE, /* specify a data type to share */ + CURLSHOPT_UNSHARE, /* specify which data type to stop sharing */ + CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */ + CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */ + CURLSHOPT_USERDATA, /* pass in a user data pointer used in the lock/unlock + callback functions */ + CURLSHOPT_LAST /* never use */ +} CURLSHoption; + +CURL_EXTERN CURLSH *curl_share_init(void); +CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, + ...); +CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *share); + +/**************************************************************************** + * Structures for querying information about the curl library at runtime. + */ + +typedef enum { + CURLVERSION_FIRST, + CURLVERSION_SECOND, + CURLVERSION_THIRD, + CURLVERSION_FOURTH, + CURLVERSION_FIFTH, + CURLVERSION_SIXTH, + CURLVERSION_SEVENTH, + CURLVERSION_EIGHTH, + CURLVERSION_NINTH, + CURLVERSION_TENTH, + CURLVERSION_ELEVENTH, + CURLVERSION_LAST /* never actually use this */ +} CURLversion; + +/* The 'CURLVERSION_NOW' is the symbolic name meant to be used by + basically all programs ever that want to get version information. It is + meant to be a built-in version number for what kind of struct the caller + expects. If the struct ever changes, we redefine the NOW to another enum + from above. */ +#define CURLVERSION_NOW CURLVERSION_ELEVENTH + +struct curl_version_info_data { + CURLversion age; /* age of the returned struct */ + const char *version; /* LIBCURL_VERSION */ + unsigned int version_num; /* LIBCURL_VERSION_NUM */ + const char *host; /* OS/host/cpu/machine when configured */ + int features; /* bitmask, see defines below */ + const char *ssl_version; /* human readable string */ + long ssl_version_num; /* not used anymore, always 0 */ + const char *libz_version; /* human readable string */ + /* protocols is terminated by an entry with a NULL protoname */ + const char * const *protocols; + + /* The fields below this were added in CURLVERSION_SECOND */ + const char *ares; + int ares_num; + + /* This field was added in CURLVERSION_THIRD */ + const char *libidn; + + /* These field were added in CURLVERSION_FOURTH */ + + /* Same as '_libiconv_version' if built with HAVE_ICONV */ + int iconv_ver_num; + + const char *libssh_version; /* human readable string */ + + /* These fields were added in CURLVERSION_FIFTH */ + unsigned int brotli_ver_num; /* Numeric Brotli version + (MAJOR << 24) | (MINOR << 12) | PATCH */ + const char *brotli_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_SIXTH */ + unsigned int nghttp2_ver_num; /* Numeric nghttp2 version + (MAJOR << 16) | (MINOR << 8) | PATCH */ + const char *nghttp2_version; /* human readable string. */ + const char *quic_version; /* human readable quic (+ HTTP/3) library + + version or NULL */ + + /* These fields were added in CURLVERSION_SEVENTH */ + const char *cainfo; /* the built-in default CURLOPT_CAINFO, might + be NULL */ + const char *capath; /* the built-in default CURLOPT_CAPATH, might + be NULL */ + + /* These fields were added in CURLVERSION_EIGHTH */ + unsigned int zstd_ver_num; /* Numeric Zstd version + (MAJOR << 24) | (MINOR << 12) | PATCH */ + const char *zstd_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_NINTH */ + const char *hyper_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_TENTH */ + const char *gsasl_version; /* human readable string. */ + + /* These fields were added in CURLVERSION_ELEVENTH */ + /* feature_names is terminated by an entry with a NULL feature name */ + const char * const *feature_names; +}; +typedef struct curl_version_info_data curl_version_info_data; + +#define CURL_VERSION_IPV6 (1<<0) /* IPv6-enabled */ +#define CURL_VERSION_KERBEROS4 (1<<1) /* Kerberos V4 auth is supported + (deprecated) */ +#define CURL_VERSION_SSL (1<<2) /* SSL options are present */ +#define CURL_VERSION_LIBZ (1<<3) /* libz features are present */ +#define CURL_VERSION_NTLM (1<<4) /* NTLM auth is supported */ +#define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth is supported + (deprecated) */ +#define CURL_VERSION_DEBUG (1<<6) /* Built with debug capabilities */ +#define CURL_VERSION_ASYNCHDNS (1<<7) /* Asynchronous DNS resolves */ +#define CURL_VERSION_SPNEGO (1<<8) /* SPNEGO auth is supported */ +#define CURL_VERSION_LARGEFILE (1<<9) /* Supports files larger than 2GB */ +#define CURL_VERSION_IDN (1<<10) /* Internationized Domain Names are + supported */ +#define CURL_VERSION_SSPI (1<<11) /* Built against Windows SSPI */ +#define CURL_VERSION_CONV (1<<12) /* Character conversions supported */ +#define CURL_VERSION_CURLDEBUG (1<<13) /* Debug memory tracking supported */ +#define CURL_VERSION_TLSAUTH_SRP (1<<14) /* TLS-SRP auth is supported */ +#define CURL_VERSION_NTLM_WB (1<<15) /* NTLM delegation to winbind helper + is supported */ +#define CURL_VERSION_HTTP2 (1<<16) /* HTTP2 support built-in */ +#define CURL_VERSION_GSSAPI (1<<17) /* Built against a GSS-API library */ +#define CURL_VERSION_KERBEROS5 (1<<18) /* Kerberos V5 auth is supported */ +#define CURL_VERSION_UNIX_SOCKETS (1<<19) /* Unix domain sockets support */ +#define CURL_VERSION_PSL (1<<20) /* Mozilla's Public Suffix List, used + for cookie domain verification */ +#define CURL_VERSION_HTTPS_PROXY (1<<21) /* HTTPS-proxy support built-in */ +#define CURL_VERSION_MULTI_SSL (1<<22) /* Multiple SSL backends available */ +#define CURL_VERSION_BROTLI (1<<23) /* Brotli features are present. */ +#define CURL_VERSION_ALTSVC (1<<24) /* Alt-Svc handling built-in */ +#define CURL_VERSION_HTTP3 (1<<25) /* HTTP3 support built-in */ +#define CURL_VERSION_ZSTD (1<<26) /* zstd features are present */ +#define CURL_VERSION_UNICODE (1<<27) /* Unicode support on Windows */ +#define CURL_VERSION_HSTS (1<<28) /* HSTS is supported */ +#define CURL_VERSION_GSASL (1<<29) /* libgsasl is supported */ +#define CURL_VERSION_THREADSAFE (1<<30) /* libcurl API is thread-safe */ + + /* + * NAME curl_version_info() + * + * DESCRIPTION + * + * This function returns a pointer to a static copy of the version info + * struct. See above. + */ +CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion); + +/* + * NAME curl_easy_strerror() + * + * DESCRIPTION + * + * The curl_easy_strerror function may be used to turn a CURLcode value + * into the equivalent human readable error string. This is useful + * for printing meaningful error messages. + */ +CURL_EXTERN const char *curl_easy_strerror(CURLcode); + +/* + * NAME curl_share_strerror() + * + * DESCRIPTION + * + * The curl_share_strerror function may be used to turn a CURLSHcode value + * into the equivalent human readable error string. This is useful + * for printing meaningful error messages. + */ +CURL_EXTERN const char *curl_share_strerror(CURLSHcode); + +/* + * NAME curl_easy_pause() + * + * DESCRIPTION + * + * The curl_easy_pause function pauses or unpauses transfers. Select the new + * state by setting the bitmask, use the convenience defines below. + * + */ +CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask); + +#define CURLPAUSE_RECV (1<<0) +#define CURLPAUSE_RECV_CONT (0) + +#define CURLPAUSE_SEND (1<<2) +#define CURLPAUSE_SEND_CONT (0) + +#define CURLPAUSE_ALL (CURLPAUSE_RECV|CURLPAUSE_SEND) +#define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT) + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +/* unfortunately, the easy.h and multi.h include files need options and info + stuff before they can be included! */ +#include "easy.h" /* nothing in curl is fun without the easy stuff */ +#include "multi.h" +#include "urlapi.h" +#include "options.h" +#include "header.h" +#include "websockets.h" + +/* the typechecker doesn't work in C++ (yet) */ +#if defined(__GNUC__) && defined(__GNUC_MINOR__) && \ + ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && \ + !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK) +#include "typecheck-gcc.h" +#else +#if defined(__STDC__) && (__STDC__ >= 1) +/* This preprocessor magic that replaces a call with the exact same call is + only done to make sure application authors pass exactly three arguments + to these functions. */ +#define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param) +#define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg) +#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) +#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) +#endif /* __STDC__ >= 1 */ +#endif /* gcc >= 4.3 && !__cplusplus && !CURL_DISABLE_TYPECHECK */ + +#endif /* CURLINC_CURL_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/curlver.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/curlver.h new file mode 100644 index 0000000..44e6070 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/curlver.h @@ -0,0 +1,79 @@ +#ifndef CURLINC_CURLVER_H +#define CURLINC_CURLVER_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* This header file contains nothing but libcurl version info, generated by + a script at release-time. This was made its own header file in 7.11.2 */ + +/* This is the global package copyright */ +#define LIBCURL_COPYRIGHT "Daniel Stenberg, ." + +/* This is the version number of the libcurl package from which this header + file origins: */ +#define LIBCURL_VERSION "8.4.0" + +/* The numeric version number is also available "in parts" by using these + defines: */ +#define LIBCURL_VERSION_MAJOR 8 +#define LIBCURL_VERSION_MINOR 4 +#define LIBCURL_VERSION_PATCH 0 + +/* This is the numeric version of the libcurl version number, meant for easier + parsing and comparisons by programs. The LIBCURL_VERSION_NUM define will + always follow this syntax: + + 0xXXYYZZ + + Where XX, YY and ZZ are the main version, release and patch numbers in + hexadecimal (using 8 bits each). All three numbers are always represented + using two digits. 1.2 would appear as "0x010200" while version 9.11.7 + appears as "0x090b07". + + This 6-digit (24 bits) hexadecimal number does not show pre-release number, + and it is always a greater number in a more recent release. It makes + comparisons with greater than and less than work. + + Note: This define is the full hex number and _does not_ use the + CURL_VERSION_BITS() macro since curl's own configure script greps for it + and needs it to contain the full number. +*/ +#define LIBCURL_VERSION_NUM 0x080400 + +/* + * This is the date and time when the full source package was created. The + * timestamp is not stored in git, as the timestamp is properly set in the + * tarballs by the maketgz script. + * + * The format of the date follows this template: + * + * "2007-11-23" + */ +#define LIBCURL_TIMESTAMP "2023-10-11" + +#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z)) +#define CURL_AT_LEAST_VERSION(x,y,z) \ + (LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z)) + +#endif /* CURLINC_CURLVER_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/easy.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/easy.h new file mode 100644 index 0000000..1285101 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/easy.h @@ -0,0 +1,125 @@ +#ifndef CURLINC_EASY_H +#define CURLINC_EASY_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ +#ifdef __cplusplus +extern "C" { +#endif + +/* Flag bits in the curl_blob struct: */ +#define CURL_BLOB_COPY 1 /* tell libcurl to copy the data */ +#define CURL_BLOB_NOCOPY 0 /* tell libcurl to NOT copy the data */ + +struct curl_blob { + void *data; + size_t len; + unsigned int flags; /* bit 0 is defined, the rest are reserved and should be + left zeroes */ +}; + +CURL_EXTERN CURL *curl_easy_init(void); +CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...); +CURL_EXTERN CURLcode curl_easy_perform(CURL *curl); +CURL_EXTERN void curl_easy_cleanup(CURL *curl); + +/* + * NAME curl_easy_getinfo() + * + * DESCRIPTION + * + * Request internal information from the curl session with this function. + * The third argument MUST be pointing to the specific type of the used option + * which is documented in each man page of the option. The data pointed to + * will be filled in accordingly and can be relied upon only if the function + * returns CURLE_OK. This function is intended to get used *AFTER* a performed + * transfer, all results from this function are undefined until the transfer + * is completed. + */ +CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...); + + +/* + * NAME curl_easy_duphandle() + * + * DESCRIPTION + * + * Creates a new curl session handle with the same options set for the handle + * passed in. Duplicating a handle could only be a matter of cloning data and + * options, internal state info and things like persistent connections cannot + * be transferred. It is useful in multithreaded applications when you can run + * curl_easy_duphandle() for each new thread to avoid a series of identical + * curl_easy_setopt() invokes in every thread. + */ +CURL_EXTERN CURL *curl_easy_duphandle(CURL *curl); + +/* + * NAME curl_easy_reset() + * + * DESCRIPTION + * + * Re-initializes a CURL handle to the default values. This puts back the + * handle to the same state as it was in when it was just created. + * + * It does keep: live connections, the Session ID cache, the DNS cache and the + * cookies. + */ +CURL_EXTERN void curl_easy_reset(CURL *curl); + +/* + * NAME curl_easy_recv() + * + * DESCRIPTION + * + * Receives data from the connected socket. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, + size_t *n); + +/* + * NAME curl_easy_send() + * + * DESCRIPTION + * + * Sends data over the connected socket. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer, + size_t buflen, size_t *n); + + +/* + * NAME curl_easy_upkeep() + * + * DESCRIPTION + * + * Performs connection upkeep for the given session handle. + */ +CURL_EXTERN CURLcode curl_easy_upkeep(CURL *curl); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/header.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/header.h new file mode 100644 index 0000000..8df11e1 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/header.h @@ -0,0 +1,74 @@ +#ifndef CURLINC_HEADER_H +#define CURLINC_HEADER_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +struct curl_header { + char *name; /* this might not use the same case */ + char *value; + size_t amount; /* number of headers using this name */ + size_t index; /* ... of this instance, 0 or higher */ + unsigned int origin; /* see bits below */ + void *anchor; /* handle privately used by libcurl */ +}; + +/* 'origin' bits */ +#define CURLH_HEADER (1<<0) /* plain server header */ +#define CURLH_TRAILER (1<<1) /* trailers */ +#define CURLH_CONNECT (1<<2) /* CONNECT headers */ +#define CURLH_1XX (1<<3) /* 1xx headers */ +#define CURLH_PSEUDO (1<<4) /* pseudo headers */ + +typedef enum { + CURLHE_OK, + CURLHE_BADINDEX, /* header exists but not with this index */ + CURLHE_MISSING, /* no such header exists */ + CURLHE_NOHEADERS, /* no headers at all exist (yet) */ + CURLHE_NOREQUEST, /* no request with this number was used */ + CURLHE_OUT_OF_MEMORY, /* out of memory while processing */ + CURLHE_BAD_ARGUMENT, /* a function argument was not okay */ + CURLHE_NOT_BUILT_IN /* if API was disabled in the build */ +} CURLHcode; + +CURL_EXTERN CURLHcode curl_easy_header(CURL *easy, + const char *name, + size_t index, + unsigned int origin, + int request, + struct curl_header **hout); + +CURL_EXTERN struct curl_header *curl_easy_nextheader(CURL *easy, + unsigned int origin, + int request, + struct curl_header *prev); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_HEADER_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/mprintf.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/mprintf.h new file mode 100644 index 0000000..dc5664b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/mprintf.h @@ -0,0 +1,70 @@ +#ifndef CURLINC_MPRINTF_H +#define CURLINC_MPRINTF_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include +#include /* needed for FILE */ +#include "curl.h" /* for CURL_EXTERN */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if (defined(__GNUC__) || defined(__clang__)) && \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__MINGW32__) && !defined(CURL_NO_FMT_CHECKS) +#define CURL_TEMP_PRINTF(a,b) __attribute__ ((format(printf, a, b))) +#else +#define CURL_TEMP_PRINTF(a,b) +#endif + +CURL_EXTERN int curl_mprintf(const char *format, ...) CURL_TEMP_PRINTF(1, 2); +CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...) + CURL_TEMP_PRINTF(2, 3); +CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...) + CURL_TEMP_PRINTF(2, 3); +CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength, + const char *format, ...) CURL_TEMP_PRINTF(3, 4); +CURL_EXTERN int curl_mvprintf(const char *format, va_list args) + CURL_TEMP_PRINTF(1, 0); +CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args) + CURL_TEMP_PRINTF(2, 0); +CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args) + CURL_TEMP_PRINTF(2, 0); +CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength, + const char *format, va_list args) + CURL_TEMP_PRINTF(3, 0); +CURL_EXTERN char *curl_maprintf(const char *format, ...) + CURL_TEMP_PRINTF(1, 2); +CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args) + CURL_TEMP_PRINTF(1, 0); + +#undef CURL_TEMP_PRINTF + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_MPRINTF_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/multi.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/multi.h new file mode 100644 index 0000000..e79b48f --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/multi.h @@ -0,0 +1,471 @@ +#ifndef CURLINC_MULTI_H +#define CURLINC_MULTI_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ +/* + This is an "external" header file. Don't give away any internals here! + + GOALS + + o Enable a "pull" interface. The application that uses libcurl decides where + and when to ask libcurl to get/send data. + + o Enable multiple simultaneous transfers in the same thread without making it + complicated for the application. + + o Enable the application to select() on its own file descriptors and curl's + file descriptors simultaneous easily. + +*/ + +/* + * This header file should not really need to include "curl.h" since curl.h + * itself includes this file and we expect user applications to do #include + * without the need for especially including multi.h. + * + * For some reason we added this include here at one point, and rather than to + * break existing (wrongly written) libcurl applications, we leave it as-is + * but with this warning attached. + */ +#include "curl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER) +typedef struct Curl_multi CURLM; +#else +typedef void CURLM; +#endif + +typedef enum { + CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or + curl_multi_socket*() soon */ + CURLM_OK, + CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */ + CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */ + CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */ + CURLM_INTERNAL_ERROR, /* this is a libcurl bug */ + CURLM_BAD_SOCKET, /* the passed in socket argument did not match */ + CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */ + CURLM_ADDED_ALREADY, /* an easy handle already added to a multi handle was + attempted to get added - again */ + CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a + callback */ + CURLM_WAKEUP_FAILURE, /* wakeup is unavailable or failed */ + CURLM_BAD_FUNCTION_ARGUMENT, /* function called with a bad parameter */ + CURLM_ABORTED_BY_CALLBACK, + CURLM_UNRECOVERABLE_POLL, + CURLM_LAST +} CURLMcode; + +/* just to make code nicer when using curl_multi_socket() you can now check + for CURLM_CALL_MULTI_SOCKET too in the same style it works for + curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */ +#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM + +/* bitmask bits for CURLMOPT_PIPELINING */ +#define CURLPIPE_NOTHING 0L +#define CURLPIPE_HTTP1 1L +#define CURLPIPE_MULTIPLEX 2L + +typedef enum { + CURLMSG_NONE, /* first, not used */ + CURLMSG_DONE, /* This easy handle has completed. 'result' contains + the CURLcode of the transfer */ + CURLMSG_LAST /* last, not used */ +} CURLMSG; + +struct CURLMsg { + CURLMSG msg; /* what this message means */ + CURL *easy_handle; /* the handle it concerns */ + union { + void *whatever; /* message-specific data */ + CURLcode result; /* return code for transfer */ + } data; +}; +typedef struct CURLMsg CURLMsg; + +/* Based on poll(2) structure and values. + * We don't use pollfd and POLL* constants explicitly + * to cover platforms without poll(). */ +#define CURL_WAIT_POLLIN 0x0001 +#define CURL_WAIT_POLLPRI 0x0002 +#define CURL_WAIT_POLLOUT 0x0004 + +struct curl_waitfd { + curl_socket_t fd; + short events; + short revents; +}; + +/* + * Name: curl_multi_init() + * + * Desc: initialize multi-style curl usage + * + * Returns: a new CURLM handle to use in all 'curl_multi' functions. + */ +CURL_EXTERN CURLM *curl_multi_init(void); + +/* + * Name: curl_multi_add_handle() + * + * Desc: add a standard curl handle to the multi stack + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle, + CURL *curl_handle); + + /* + * Name: curl_multi_remove_handle() + * + * Desc: removes a curl handle from the multi stack again + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle, + CURL *curl_handle); + + /* + * Name: curl_multi_fdset() + * + * Desc: Ask curl for its fd_set sets. The app can use these to select() or + * poll() on. We want curl_multi_perform() called as soon as one of + * them are ready. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle, + fd_set *read_fd_set, + fd_set *write_fd_set, + fd_set *exc_fd_set, + int *max_fd); + +/* + * Name: curl_multi_wait() + * + * Desc: Poll on all fds within a CURLM set as well as any + * additional fds passed to the function. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle, + struct curl_waitfd extra_fds[], + unsigned int extra_nfds, + int timeout_ms, + int *ret); + +/* + * Name: curl_multi_poll() + * + * Desc: Poll on all fds within a CURLM set as well as any + * additional fds passed to the function. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_poll(CURLM *multi_handle, + struct curl_waitfd extra_fds[], + unsigned int extra_nfds, + int timeout_ms, + int *ret); + +/* + * Name: curl_multi_wakeup() + * + * Desc: wakes up a sleeping curl_multi_poll call. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_wakeup(CURLM *multi_handle); + + /* + * Name: curl_multi_perform() + * + * Desc: When the app thinks there's data available for curl it calls this + * function to read/write whatever there is right now. This returns + * as soon as the reads and writes are done. This function does not + * require that there actually is data available for reading or that + * data can be written, it can be called just in case. It returns + * the number of handles that still transfer data in the second + * argument's integer-pointer. + * + * Returns: CURLMcode type, general multi error code. *NOTE* that this only + * returns errors etc regarding the whole multi stack. There might + * still have occurred problems on individual transfers even when + * this returns OK. + */ +CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle, + int *running_handles); + + /* + * Name: curl_multi_cleanup() + * + * Desc: Cleans up and removes a whole multi stack. It does not free or + * touch any individual easy handles in any way. We need to define + * in what state those handles will be if this function is called + * in the middle of a transfer. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle); + +/* + * Name: curl_multi_info_read() + * + * Desc: Ask the multi handle if there's any messages/informationals from + * the individual transfers. Messages include informationals such as + * error code from the transfer or just the fact that a transfer is + * completed. More details on these should be written down as well. + * + * Repeated calls to this function will return a new struct each + * time, until a special "end of msgs" struct is returned as a signal + * that there is no more to get at this point. + * + * The data the returned pointer points to will not survive calling + * curl_multi_cleanup(). + * + * The 'CURLMsg' struct is meant to be very simple and only contain + * very basic information. If more involved information is wanted, + * we will provide the particular "transfer handle" in that struct + * and that should/could/would be used in subsequent + * curl_easy_getinfo() calls (or similar). The point being that we + * must never expose complex structs to applications, as then we'll + * undoubtably get backwards compatibility problems in the future. + * + * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out + * of structs. It also writes the number of messages left in the + * queue (after this read) in the integer the second argument points + * to. + */ +CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle, + int *msgs_in_queue); + +/* + * Name: curl_multi_strerror() + * + * Desc: The curl_multi_strerror function may be used to turn a CURLMcode + * value into the equivalent human readable error string. This is + * useful for printing meaningful error messages. + * + * Returns: A pointer to a null-terminated error message. + */ +CURL_EXTERN const char *curl_multi_strerror(CURLMcode); + +/* + * Name: curl_multi_socket() and + * curl_multi_socket_all() + * + * Desc: An alternative version of curl_multi_perform() that allows the + * application to pass in one of the file descriptors that have been + * detected to have "action" on them and let libcurl perform. + * See man page for details. + */ +#define CURL_POLL_NONE 0 +#define CURL_POLL_IN 1 +#define CURL_POLL_OUT 2 +#define CURL_POLL_INOUT 3 +#define CURL_POLL_REMOVE 4 + +#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD + +#define CURL_CSELECT_IN 0x01 +#define CURL_CSELECT_OUT 0x02 +#define CURL_CSELECT_ERR 0x04 + +typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */ + curl_socket_t s, /* socket */ + int what, /* see above */ + void *userp, /* private callback + pointer */ + void *socketp); /* private socket + pointer */ +/* + * Name: curl_multi_timer_callback + * + * Desc: Called by libcurl whenever the library detects a change in the + * maximum number of milliseconds the app is allowed to wait before + * curl_multi_socket() or curl_multi_perform() must be called + * (to allow libcurl's timed events to take place). + * + * Returns: The callback should return zero. + */ +typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */ + long timeout_ms, /* see above */ + void *userp); /* private callback + pointer */ + +CURL_EXTERN CURLMcode CURL_DEPRECATED(7.19.5, "Use curl_multi_socket_action()") +curl_multi_socket(CURLM *multi_handle, curl_socket_t s, int *running_handles); + +CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle, + curl_socket_t s, + int ev_bitmask, + int *running_handles); + +CURL_EXTERN CURLMcode CURL_DEPRECATED(7.19.5, "Use curl_multi_socket_action()") +curl_multi_socket_all(CURLM *multi_handle, int *running_handles); + +#ifndef CURL_ALLOW_OLD_MULTI_SOCKET +/* This macro below was added in 7.16.3 to push users who recompile to use + the new curl_multi_socket_action() instead of the old curl_multi_socket() +*/ +#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z) +#endif + +/* + * Name: curl_multi_timeout() + * + * Desc: Returns the maximum number of milliseconds the app is allowed to + * wait before curl_multi_socket() or curl_multi_perform() must be + * called (to allow libcurl's timed events to take place). + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle, + long *milliseconds); + +typedef enum { + /* This is the socket callback function pointer */ + CURLOPT(CURLMOPT_SOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 1), + + /* This is the argument passed to the socket callback */ + CURLOPT(CURLMOPT_SOCKETDATA, CURLOPTTYPE_OBJECTPOINT, 2), + + /* set to 1 to enable pipelining for this multi handle */ + CURLOPT(CURLMOPT_PIPELINING, CURLOPTTYPE_LONG, 3), + + /* This is the timer callback function pointer */ + CURLOPT(CURLMOPT_TIMERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 4), + + /* This is the argument passed to the timer callback */ + CURLOPT(CURLMOPT_TIMERDATA, CURLOPTTYPE_OBJECTPOINT, 5), + + /* maximum number of entries in the connection cache */ + CURLOPT(CURLMOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 6), + + /* maximum number of (pipelining) connections to one host */ + CURLOPT(CURLMOPT_MAX_HOST_CONNECTIONS, CURLOPTTYPE_LONG, 7), + + /* maximum number of requests in a pipeline */ + CURLOPT(CURLMOPT_MAX_PIPELINE_LENGTH, CURLOPTTYPE_LONG, 8), + + /* a connection with a content-length longer than this + will not be considered for pipelining */ + CURLOPT(CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 9), + + /* a connection with a chunk length longer than this + will not be considered for pipelining */ + CURLOPT(CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 10), + + /* a list of site names(+port) that are blocked from pipelining */ + CURLOPT(CURLMOPT_PIPELINING_SITE_BL, CURLOPTTYPE_OBJECTPOINT, 11), + + /* a list of server types that are blocked from pipelining */ + CURLOPT(CURLMOPT_PIPELINING_SERVER_BL, CURLOPTTYPE_OBJECTPOINT, 12), + + /* maximum number of open connections in total */ + CURLOPT(CURLMOPT_MAX_TOTAL_CONNECTIONS, CURLOPTTYPE_LONG, 13), + + /* This is the server push callback function pointer */ + CURLOPT(CURLMOPT_PUSHFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 14), + + /* This is the argument passed to the server push callback */ + CURLOPT(CURLMOPT_PUSHDATA, CURLOPTTYPE_OBJECTPOINT, 15), + + /* maximum number of concurrent streams to support on a connection */ + CURLOPT(CURLMOPT_MAX_CONCURRENT_STREAMS, CURLOPTTYPE_LONG, 16), + + CURLMOPT_LASTENTRY /* the last unused */ +} CURLMoption; + + +/* + * Name: curl_multi_setopt() + * + * Desc: Sets options for the multi handle. + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle, + CURLMoption option, ...); + + +/* + * Name: curl_multi_assign() + * + * Desc: This function sets an association in the multi handle between the + * given socket and a private pointer of the application. This is + * (only) useful for curl_multi_socket uses. + * + * Returns: CURLM error code. + */ +CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle, + curl_socket_t sockfd, void *sockp); + +/* + * Name: curl_multi_get_handles() + * + * Desc: Returns an allocated array holding all handles currently added to + * the multi handle. Marks the final entry with a NULL pointer. If + * there is no easy handle added to the multi handle, this function + * returns an array with the first entry as a NULL pointer. + * + * Returns: NULL on failure, otherwise a CURL **array pointer + */ +CURL_EXTERN CURL **curl_multi_get_handles(CURLM *multi_handle); + +/* + * Name: curl_push_callback + * + * Desc: This callback gets called when a new stream is being pushed by the + * server. It approves or denies the new stream. It can also decide + * to completely fail the connection. + * + * Returns: CURL_PUSH_OK, CURL_PUSH_DENY or CURL_PUSH_ERROROUT + */ +#define CURL_PUSH_OK 0 +#define CURL_PUSH_DENY 1 +#define CURL_PUSH_ERROROUT 2 /* added in 7.72.0 */ + +struct curl_pushheaders; /* forward declaration only */ + +CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h, + size_t num); +CURL_EXTERN char *curl_pushheader_byname(struct curl_pushheaders *h, + const char *name); + +typedef int (*curl_push_callback)(CURL *parent, + CURL *easy, + size_t num_headers, + struct curl_pushheaders *headers, + void *userp); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/options.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/options.h new file mode 100644 index 0000000..1ed76a9 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/options.h @@ -0,0 +1,70 @@ +#ifndef CURLINC_OPTIONS_H +#define CURLINC_OPTIONS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + CURLOT_LONG, /* long (a range of values) */ + CURLOT_VALUES, /* (a defined set or bitmask) */ + CURLOT_OFF_T, /* curl_off_t (a range of values) */ + CURLOT_OBJECT, /* pointer (void *) */ + CURLOT_STRING, /* (char * to null-terminated buffer) */ + CURLOT_SLIST, /* (struct curl_slist *) */ + CURLOT_CBPTR, /* (void * passed as-is to a callback) */ + CURLOT_BLOB, /* blob (struct curl_blob *) */ + CURLOT_FUNCTION /* function pointer */ +} curl_easytype; + +/* Flag bits */ + +/* "alias" means it is provided for old programs to remain functional, + we prefer another name */ +#define CURLOT_FLAG_ALIAS (1<<0) + +/* The CURLOPTTYPE_* id ranges can still be used to figure out what type/size + to use for curl_easy_setopt() for the given id */ +struct curl_easyoption { + const char *name; + CURLoption id; + curl_easytype type; + unsigned int flags; +}; + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_by_name(const char *name); + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_by_id(CURLoption id); + +CURL_EXTERN const struct curl_easyoption * +curl_easy_option_next(const struct curl_easyoption *prev); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif +#endif /* CURLINC_OPTIONS_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/stdcheaders.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/stdcheaders.h new file mode 100644 index 0000000..7451aa3 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/stdcheaders.h @@ -0,0 +1,35 @@ +#ifndef CURLINC_STDCHEADERS_H +#define CURLINC_STDCHEADERS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include + +size_t fread(void *, size_t, size_t, FILE *); +size_t fwrite(const void *, size_t, size_t, FILE *); + +int strcasecmp(const char *, const char *); +int strncasecmp(const char *, const char *, size_t); + +#endif /* CURLINC_STDCHEADERS_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/system.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/system.h new file mode 100644 index 0000000..97e0d03 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/system.h @@ -0,0 +1,521 @@ +#ifndef CURLINC_SYSTEM_H +#define CURLINC_SYSTEM_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* + * Try to keep one section per platform, compiler and architecture, otherwise, + * if an existing section is reused for a different one and later on the + * original is adjusted, probably the piggybacking one can be adversely + * changed. + * + * In order to differentiate between platforms/compilers/architectures use + * only compiler built in predefined preprocessor symbols. + * + * curl_off_t + * ---------- + * + * For any given platform/compiler curl_off_t must be typedef'ed to a 64-bit + * wide signed integral data type. The width of this data type must remain + * constant and independent of any possible large file support settings. + * + * As an exception to the above, curl_off_t shall be typedef'ed to a 32-bit + * wide signed integral data type if there is no 64-bit type. + * + * As a general rule, curl_off_t shall not be mapped to off_t. This rule shall + * only be violated if off_t is the only 64-bit data type available and the + * size of off_t is independent of large file support settings. Keep your + * build on the safe side avoiding an off_t gating. If you have a 64-bit + * off_t then take for sure that another 64-bit data type exists, dig deeper + * and you will find it. + * + */ + +#if defined(__DJGPP__) || defined(__GO32__) +# if defined(__DJGPP__) && (__DJGPP__ > 1) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__SALFORDC__) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__BORLANDC__) +# if (__BORLANDC__ < 0x520) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__TURBOC__) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__POCC__) +# if (__POCC__ < 280) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# elif defined(_MSC_VER) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# else +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__LCC__) +# if defined(__MCST__) /* MCST eLbrus Compiler Collection */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 +# else /* Local (or Little) C Compiler */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +# endif + +#elif defined(__SYMBIAN32__) +# if defined(__EABI__) /* Treat all ARM compilers equally */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__CW32__) +# pragma longlong on +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__VC32__) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(macintosh) +# include +# if TYPE_LONGLONG +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(__TANDEM) +# if ! defined(__LP64) + /* Required for 32-bit NonStop builds only. */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +# endif + +#elif defined(_WIN32_WCE) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__MINGW32__) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_WS2TCPIP_H 1 + +#elif defined(__VMS) +# if defined(__VAX) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int + +#elif defined(__OS400__) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__MVS__) +# if defined(_LONG_LONG) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__370__) +# if defined(__IBMC__) || defined(__IBMCPP__) +# if defined(_ILP32) +# elif defined(_LP64) +# endif +# if defined(_LONG_LONG) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 +# endif + +#elif defined(TPF) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +#elif defined(__TINYC__) /* also known as tcc */ +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* Oracle Solaris Studio */ +# if !defined(__LP64) && (defined(__ILP32) || \ + defined(__i386) || \ + defined(__sparcv8) || \ + defined(__sparcv8plus)) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__LP64) || \ + defined(__amd64) || defined(__sparcv9) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__xlc__) /* IBM xlc compiler */ +# if !defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#elif defined(__hpux) /* HP aCC compiler */ +# if !defined(_LP64) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +/* ===================================== */ +/* KEEP MSVC THE PENULTIMATE ENTRY */ +/* ===================================== */ + +#elif defined(_MSC_VER) +# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) +# define CURL_TYPEOF_CURL_OFF_T __int64 +# define CURL_FORMAT_CURL_OFF_T "I64d" +# define CURL_FORMAT_CURL_OFF_TU "I64u" +# define CURL_SUFFIX_CURL_OFF_T i64 +# define CURL_SUFFIX_CURL_OFF_TU ui64 +# else +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T int + +/* ===================================== */ +/* KEEP GENERIC GCC THE LAST ENTRY */ +/* ===================================== */ + +#elif defined(__GNUC__) && !defined(_SCO_DS) +# if !defined(__LP64__) && \ + (defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \ + defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \ + defined(__sparc__) || defined(__mips__) || defined(__sh__) || \ + defined(__XTENSA__) || \ + (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \ + (defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L)) +# define CURL_TYPEOF_CURL_OFF_T long long +# define CURL_FORMAT_CURL_OFF_T "lld" +# define CURL_FORMAT_CURL_OFF_TU "llu" +# define CURL_SUFFIX_CURL_OFF_T LL +# define CURL_SUFFIX_CURL_OFF_TU ULL +# elif defined(__LP64__) || \ + defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \ + defined(__e2k__) || \ + (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \ + (defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L) +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# endif +# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +# define CURL_PULL_SYS_TYPES_H 1 +# define CURL_PULL_SYS_SOCKET_H 1 + +#else +/* generic "safe guess" on old 32 bit style */ +# define CURL_TYPEOF_CURL_OFF_T long +# define CURL_FORMAT_CURL_OFF_T "ld" +# define CURL_FORMAT_CURL_OFF_TU "lu" +# define CURL_SUFFIX_CURL_OFF_T L +# define CURL_SUFFIX_CURL_OFF_TU UL +# define CURL_TYPEOF_CURL_SOCKLEN_T int +#endif + +#ifdef _AIX +/* AIX needs */ +#define CURL_PULL_SYS_POLL_H +#endif + + +/* CURL_PULL_WS2TCPIP_H is defined above when inclusion of header file */ +/* ws2tcpip.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_WS2TCPIP_H +# include +# include +# include +#endif + +/* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */ +/* sys/types.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_TYPES_H +# include +#endif + +/* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */ +/* sys/socket.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_SOCKET_H +# include +#endif + +/* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file */ +/* sys/poll.h is required here to properly make type definitions below. */ +#ifdef CURL_PULL_SYS_POLL_H +# include +#endif + +/* Data type definition of curl_socklen_t. */ +#ifdef CURL_TYPEOF_CURL_SOCKLEN_T + typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t; +#endif + +/* Data type definition of curl_off_t. */ + +#ifdef CURL_TYPEOF_CURL_OFF_T + typedef CURL_TYPEOF_CURL_OFF_T curl_off_t; +#endif + +/* + * CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow + * these to be visible and exported by the external libcurl interface API, + * while also making them visible to the library internals, simply including + * curl_setup.h, without actually needing to include curl.h internally. + * If some day this section would grow big enough, all this should be moved + * to its own header file. + */ + +/* + * Figure out if we can use the ## preprocessor operator, which is supported + * by ISO/ANSI C and C++. Some compilers support it without setting __STDC__ + * or __cplusplus so we need to carefully check for them too. + */ + +#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \ + defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \ + defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \ + defined(__ILEC400__) + /* This compiler is believed to have an ISO compatible preprocessor */ +#define CURL_ISOCPP +#else + /* This compiler is believed NOT to have an ISO compatible preprocessor */ +#undef CURL_ISOCPP +#endif + +/* + * Macros for minimum-width signed and unsigned curl_off_t integer constants. + */ + +#if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551) +# define CURLINC_OFF_T_C_HLPR2(x) x +# define CURLINC_OFF_T_C_HLPR1(x) CURLINC_OFF_T_C_HLPR2(x) +# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ + CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T) +# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ + CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU) +#else +# ifdef CURL_ISOCPP +# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix +# else +# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix +# endif +# define CURLINC_OFF_T_C_HLPR1(Val,Suffix) CURLINC_OFF_T_C_HLPR2(Val,Suffix) +# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T) +# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU) +#endif + +#endif /* CURLINC_SYSTEM_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/typecheck-gcc.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/typecheck-gcc.h new file mode 100644 index 0000000..b880f3d --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/typecheck-gcc.h @@ -0,0 +1,717 @@ +#ifndef CURLINC_TYPECHECK_GCC_H +#define CURLINC_TYPECHECK_GCC_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +/* wraps curl_easy_setopt() with typechecking */ + +/* To add a new kind of warning, add an + * if(curlcheck_sometype_option(_curl_opt)) + * if(!curlcheck_sometype(value)) + * _curl_easy_setopt_err_sometype(); + * block and define curlcheck_sometype_option, curlcheck_sometype and + * _curl_easy_setopt_err_sometype below + * + * NOTE: We use two nested 'if' statements here instead of the && operator, in + * order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x + * when compiling with -Wlogical-op. + * + * To add an option that uses the same type as an existing option, you'll just + * need to extend the appropriate _curl_*_option macro + */ +#define curl_easy_setopt(handle, option, value) \ + __extension__({ \ + CURLoption _curl_opt = (option); \ + if(__builtin_constant_p(_curl_opt)) { \ + CURL_IGNORE_DEPRECATION( \ + if(curlcheck_long_option(_curl_opt)) \ + if(!curlcheck_long(value)) \ + _curl_easy_setopt_err_long(); \ + if(curlcheck_off_t_option(_curl_opt)) \ + if(!curlcheck_off_t(value)) \ + _curl_easy_setopt_err_curl_off_t(); \ + if(curlcheck_string_option(_curl_opt)) \ + if(!curlcheck_string(value)) \ + _curl_easy_setopt_err_string(); \ + if(curlcheck_write_cb_option(_curl_opt)) \ + if(!curlcheck_write_cb(value)) \ + _curl_easy_setopt_err_write_callback(); \ + if((_curl_opt) == CURLOPT_RESOLVER_START_FUNCTION) \ + if(!curlcheck_resolver_start_callback(value)) \ + _curl_easy_setopt_err_resolver_start_callback(); \ + if((_curl_opt) == CURLOPT_READFUNCTION) \ + if(!curlcheck_read_cb(value)) \ + _curl_easy_setopt_err_read_cb(); \ + if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \ + if(!curlcheck_ioctl_cb(value)) \ + _curl_easy_setopt_err_ioctl_cb(); \ + if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \ + if(!curlcheck_sockopt_cb(value)) \ + _curl_easy_setopt_err_sockopt_cb(); \ + if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \ + if(!curlcheck_opensocket_cb(value)) \ + _curl_easy_setopt_err_opensocket_cb(); \ + if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \ + if(!curlcheck_progress_cb(value)) \ + _curl_easy_setopt_err_progress_cb(); \ + if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \ + if(!curlcheck_debug_cb(value)) \ + _curl_easy_setopt_err_debug_cb(); \ + if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \ + if(!curlcheck_ssl_ctx_cb(value)) \ + _curl_easy_setopt_err_ssl_ctx_cb(); \ + if(curlcheck_conv_cb_option(_curl_opt)) \ + if(!curlcheck_conv_cb(value)) \ + _curl_easy_setopt_err_conv_cb(); \ + if((_curl_opt) == CURLOPT_SEEKFUNCTION) \ + if(!curlcheck_seek_cb(value)) \ + _curl_easy_setopt_err_seek_cb(); \ + if(curlcheck_cb_data_option(_curl_opt)) \ + if(!curlcheck_cb_data(value)) \ + _curl_easy_setopt_err_cb_data(); \ + if((_curl_opt) == CURLOPT_ERRORBUFFER) \ + if(!curlcheck_error_buffer(value)) \ + _curl_easy_setopt_err_error_buffer(); \ + if((_curl_opt) == CURLOPT_STDERR) \ + if(!curlcheck_FILE(value)) \ + _curl_easy_setopt_err_FILE(); \ + if(curlcheck_postfields_option(_curl_opt)) \ + if(!curlcheck_postfields(value)) \ + _curl_easy_setopt_err_postfields(); \ + if((_curl_opt) == CURLOPT_HTTPPOST) \ + if(!curlcheck_arr((value), struct curl_httppost)) \ + _curl_easy_setopt_err_curl_httpost(); \ + if((_curl_opt) == CURLOPT_MIMEPOST) \ + if(!curlcheck_ptr((value), curl_mime)) \ + _curl_easy_setopt_err_curl_mimepost(); \ + if(curlcheck_slist_option(_curl_opt)) \ + if(!curlcheck_arr((value), struct curl_slist)) \ + _curl_easy_setopt_err_curl_slist(); \ + if((_curl_opt) == CURLOPT_SHARE) \ + if(!curlcheck_ptr((value), CURLSH)) \ + _curl_easy_setopt_err_CURLSH(); \ + ) \ + } \ + curl_easy_setopt(handle, _curl_opt, value); \ + }) + +/* wraps curl_easy_getinfo() with typechecking */ +#define curl_easy_getinfo(handle, info, arg) \ + __extension__({ \ + CURLINFO _curl_info = (info); \ + if(__builtin_constant_p(_curl_info)) { \ + CURL_IGNORE_DEPRECATION( \ + if(curlcheck_string_info(_curl_info)) \ + if(!curlcheck_arr((arg), char *)) \ + _curl_easy_getinfo_err_string(); \ + if(curlcheck_long_info(_curl_info)) \ + if(!curlcheck_arr((arg), long)) \ + _curl_easy_getinfo_err_long(); \ + if(curlcheck_double_info(_curl_info)) \ + if(!curlcheck_arr((arg), double)) \ + _curl_easy_getinfo_err_double(); \ + if(curlcheck_slist_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_slist *)) \ + _curl_easy_getinfo_err_curl_slist(); \ + if(curlcheck_tlssessioninfo_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_tlssessioninfo *)) \ + _curl_easy_getinfo_err_curl_tlssesssioninfo(); \ + if(curlcheck_certinfo_info(_curl_info)) \ + if(!curlcheck_arr((arg), struct curl_certinfo *)) \ + _curl_easy_getinfo_err_curl_certinfo(); \ + if(curlcheck_socket_info(_curl_info)) \ + if(!curlcheck_arr((arg), curl_socket_t)) \ + _curl_easy_getinfo_err_curl_socket(); \ + if(curlcheck_off_t_info(_curl_info)) \ + if(!curlcheck_arr((arg), curl_off_t)) \ + _curl_easy_getinfo_err_curl_off_t(); \ + ) \ + } \ + curl_easy_getinfo(handle, _curl_info, arg); \ + }) + +/* + * For now, just make sure that the functions are called with three arguments + */ +#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) +#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) + + +/* the actual warnings, triggered by calling the _curl_easy_setopt_err* + * functions */ + +/* To define a new warning, use _CURL_WARNING(identifier, "message") */ +#define CURLWARNING(id, message) \ + static void __attribute__((__warning__(message))) \ + __attribute__((__unused__)) __attribute__((__noinline__)) \ + id(void) { __asm__(""); } + +CURLWARNING(_curl_easy_setopt_err_long, + "curl_easy_setopt expects a long argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_off_t, + "curl_easy_setopt expects a curl_off_t argument for this option") +CURLWARNING(_curl_easy_setopt_err_string, + "curl_easy_setopt expects a " + "string ('char *' or char[]) argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_write_callback, + "curl_easy_setopt expects a curl_write_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_resolver_start_callback, + "curl_easy_setopt expects a " + "curl_resolver_start_callback argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_read_cb, + "curl_easy_setopt expects a curl_read_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_ioctl_cb, + "curl_easy_setopt expects a curl_ioctl_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_sockopt_cb, + "curl_easy_setopt expects a curl_sockopt_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_opensocket_cb, + "curl_easy_setopt expects a " + "curl_opensocket_callback argument for this option" + ) +CURLWARNING(_curl_easy_setopt_err_progress_cb, + "curl_easy_setopt expects a curl_progress_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_debug_cb, + "curl_easy_setopt expects a curl_debug_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_ssl_ctx_cb, + "curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_conv_cb, + "curl_easy_setopt expects a curl_conv_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_seek_cb, + "curl_easy_setopt expects a curl_seek_callback argument for this option") +CURLWARNING(_curl_easy_setopt_err_cb_data, + "curl_easy_setopt expects a " + "private data pointer as argument for this option") +CURLWARNING(_curl_easy_setopt_err_error_buffer, + "curl_easy_setopt expects a " + "char buffer of CURL_ERROR_SIZE as argument for this option") +CURLWARNING(_curl_easy_setopt_err_FILE, + "curl_easy_setopt expects a 'FILE *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_postfields, + "curl_easy_setopt expects a 'void *' or 'char *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_httpost, + "curl_easy_setopt expects a 'struct curl_httppost *' " + "argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_mimepost, + "curl_easy_setopt expects a 'curl_mime *' " + "argument for this option") +CURLWARNING(_curl_easy_setopt_err_curl_slist, + "curl_easy_setopt expects a 'struct curl_slist *' argument for this option") +CURLWARNING(_curl_easy_setopt_err_CURLSH, + "curl_easy_setopt expects a CURLSH* argument for this option") + +CURLWARNING(_curl_easy_getinfo_err_string, + "curl_easy_getinfo expects a pointer to 'char *' for this info") +CURLWARNING(_curl_easy_getinfo_err_long, + "curl_easy_getinfo expects a pointer to long for this info") +CURLWARNING(_curl_easy_getinfo_err_double, + "curl_easy_getinfo expects a pointer to double for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_slist, + "curl_easy_getinfo expects a pointer to 'struct curl_slist *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_tlssesssioninfo, + "curl_easy_getinfo expects a pointer to " + "'struct curl_tlssessioninfo *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_certinfo, + "curl_easy_getinfo expects a pointer to " + "'struct curl_certinfo *' for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_socket, + "curl_easy_getinfo expects a pointer to curl_socket_t for this info") +CURLWARNING(_curl_easy_getinfo_err_curl_off_t, + "curl_easy_getinfo expects a pointer to curl_off_t for this info") + +/* groups of curl_easy_setops options that take the same type of argument */ + +/* To add a new option to one of the groups, just add + * (option) == CURLOPT_SOMETHING + * to the or-expression. If the option takes a long or curl_off_t, you don't + * have to do anything + */ + +/* evaluates to true if option takes a long argument */ +#define curlcheck_long_option(option) \ + (0 < (option) && (option) < CURLOPTTYPE_OBJECTPOINT) + +#define curlcheck_off_t_option(option) \ + (((option) > CURLOPTTYPE_OFF_T) && ((option) < CURLOPTTYPE_BLOB)) + +/* evaluates to true if option takes a char* argument */ +#define curlcheck_string_option(option) \ + ((option) == CURLOPT_ABSTRACT_UNIX_SOCKET || \ + (option) == CURLOPT_ACCEPT_ENCODING || \ + (option) == CURLOPT_ALTSVC || \ + (option) == CURLOPT_CAINFO || \ + (option) == CURLOPT_CAPATH || \ + (option) == CURLOPT_COOKIE || \ + (option) == CURLOPT_COOKIEFILE || \ + (option) == CURLOPT_COOKIEJAR || \ + (option) == CURLOPT_COOKIELIST || \ + (option) == CURLOPT_CRLFILE || \ + (option) == CURLOPT_CUSTOMREQUEST || \ + (option) == CURLOPT_DEFAULT_PROTOCOL || \ + (option) == CURLOPT_DNS_INTERFACE || \ + (option) == CURLOPT_DNS_LOCAL_IP4 || \ + (option) == CURLOPT_DNS_LOCAL_IP6 || \ + (option) == CURLOPT_DNS_SERVERS || \ + (option) == CURLOPT_DOH_URL || \ + (option) == CURLOPT_EGDSOCKET || \ + (option) == CURLOPT_FTP_ACCOUNT || \ + (option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \ + (option) == CURLOPT_FTPPORT || \ + (option) == CURLOPT_HSTS || \ + (option) == CURLOPT_HAPROXY_CLIENT_IP || \ + (option) == CURLOPT_INTERFACE || \ + (option) == CURLOPT_ISSUERCERT || \ + (option) == CURLOPT_KEYPASSWD || \ + (option) == CURLOPT_KRBLEVEL || \ + (option) == CURLOPT_LOGIN_OPTIONS || \ + (option) == CURLOPT_MAIL_AUTH || \ + (option) == CURLOPT_MAIL_FROM || \ + (option) == CURLOPT_NETRC_FILE || \ + (option) == CURLOPT_NOPROXY || \ + (option) == CURLOPT_PASSWORD || \ + (option) == CURLOPT_PINNEDPUBLICKEY || \ + (option) == CURLOPT_PRE_PROXY || \ + (option) == CURLOPT_PROTOCOLS_STR || \ + (option) == CURLOPT_PROXY || \ + (option) == CURLOPT_PROXY_CAINFO || \ + (option) == CURLOPT_PROXY_CAPATH || \ + (option) == CURLOPT_PROXY_CRLFILE || \ + (option) == CURLOPT_PROXY_ISSUERCERT || \ + (option) == CURLOPT_PROXY_KEYPASSWD || \ + (option) == CURLOPT_PROXY_PINNEDPUBLICKEY || \ + (option) == CURLOPT_PROXY_SERVICE_NAME || \ + (option) == CURLOPT_PROXY_SSL_CIPHER_LIST || \ + (option) == CURLOPT_PROXY_SSLCERT || \ + (option) == CURLOPT_PROXY_SSLCERTTYPE || \ + (option) == CURLOPT_PROXY_SSLKEY || \ + (option) == CURLOPT_PROXY_SSLKEYTYPE || \ + (option) == CURLOPT_PROXY_TLS13_CIPHERS || \ + (option) == CURLOPT_PROXY_TLSAUTH_PASSWORD || \ + (option) == CURLOPT_PROXY_TLSAUTH_TYPE || \ + (option) == CURLOPT_PROXY_TLSAUTH_USERNAME || \ + (option) == CURLOPT_PROXYPASSWORD || \ + (option) == CURLOPT_PROXYUSERNAME || \ + (option) == CURLOPT_PROXYUSERPWD || \ + (option) == CURLOPT_RANDOM_FILE || \ + (option) == CURLOPT_RANGE || \ + (option) == CURLOPT_REDIR_PROTOCOLS_STR || \ + (option) == CURLOPT_REFERER || \ + (option) == CURLOPT_REQUEST_TARGET || \ + (option) == CURLOPT_RTSP_SESSION_ID || \ + (option) == CURLOPT_RTSP_STREAM_URI || \ + (option) == CURLOPT_RTSP_TRANSPORT || \ + (option) == CURLOPT_SASL_AUTHZID || \ + (option) == CURLOPT_SERVICE_NAME || \ + (option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \ + (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \ + (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 || \ + (option) == CURLOPT_SSH_KNOWNHOSTS || \ + (option) == CURLOPT_SSH_PRIVATE_KEYFILE || \ + (option) == CURLOPT_SSH_PUBLIC_KEYFILE || \ + (option) == CURLOPT_SSLCERT || \ + (option) == CURLOPT_SSLCERTTYPE || \ + (option) == CURLOPT_SSLENGINE || \ + (option) == CURLOPT_SSLKEY || \ + (option) == CURLOPT_SSLKEYTYPE || \ + (option) == CURLOPT_SSL_CIPHER_LIST || \ + (option) == CURLOPT_TLS13_CIPHERS || \ + (option) == CURLOPT_TLSAUTH_PASSWORD || \ + (option) == CURLOPT_TLSAUTH_TYPE || \ + (option) == CURLOPT_TLSAUTH_USERNAME || \ + (option) == CURLOPT_UNIX_SOCKET_PATH || \ + (option) == CURLOPT_URL || \ + (option) == CURLOPT_USERAGENT || \ + (option) == CURLOPT_USERNAME || \ + (option) == CURLOPT_AWS_SIGV4 || \ + (option) == CURLOPT_USERPWD || \ + (option) == CURLOPT_XOAUTH2_BEARER || \ + (option) == CURLOPT_SSL_EC_CURVES || \ + 0) + +/* evaluates to true if option takes a curl_write_callback argument */ +#define curlcheck_write_cb_option(option) \ + ((option) == CURLOPT_HEADERFUNCTION || \ + (option) == CURLOPT_WRITEFUNCTION) + +/* evaluates to true if option takes a curl_conv_callback argument */ +#define curlcheck_conv_cb_option(option) \ + ((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION || \ + (option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION || \ + (option) == CURLOPT_CONV_FROM_UTF8_FUNCTION) + +/* evaluates to true if option takes a data argument to pass to a callback */ +#define curlcheck_cb_data_option(option) \ + ((option) == CURLOPT_CHUNK_DATA || \ + (option) == CURLOPT_CLOSESOCKETDATA || \ + (option) == CURLOPT_DEBUGDATA || \ + (option) == CURLOPT_FNMATCH_DATA || \ + (option) == CURLOPT_HEADERDATA || \ + (option) == CURLOPT_HSTSREADDATA || \ + (option) == CURLOPT_HSTSWRITEDATA || \ + (option) == CURLOPT_INTERLEAVEDATA || \ + (option) == CURLOPT_IOCTLDATA || \ + (option) == CURLOPT_OPENSOCKETDATA || \ + (option) == CURLOPT_PREREQDATA || \ + (option) == CURLOPT_PROGRESSDATA || \ + (option) == CURLOPT_READDATA || \ + (option) == CURLOPT_SEEKDATA || \ + (option) == CURLOPT_SOCKOPTDATA || \ + (option) == CURLOPT_SSH_KEYDATA || \ + (option) == CURLOPT_SSL_CTX_DATA || \ + (option) == CURLOPT_WRITEDATA || \ + (option) == CURLOPT_RESOLVER_START_DATA || \ + (option) == CURLOPT_TRAILERDATA || \ + (option) == CURLOPT_SSH_HOSTKEYDATA || \ + 0) + +/* evaluates to true if option takes a POST data argument (void* or char*) */ +#define curlcheck_postfields_option(option) \ + ((option) == CURLOPT_POSTFIELDS || \ + (option) == CURLOPT_COPYPOSTFIELDS || \ + 0) + +/* evaluates to true if option takes a struct curl_slist * argument */ +#define curlcheck_slist_option(option) \ + ((option) == CURLOPT_HTTP200ALIASES || \ + (option) == CURLOPT_HTTPHEADER || \ + (option) == CURLOPT_MAIL_RCPT || \ + (option) == CURLOPT_POSTQUOTE || \ + (option) == CURLOPT_PREQUOTE || \ + (option) == CURLOPT_PROXYHEADER || \ + (option) == CURLOPT_QUOTE || \ + (option) == CURLOPT_RESOLVE || \ + (option) == CURLOPT_TELNETOPTIONS || \ + (option) == CURLOPT_CONNECT_TO || \ + 0) + +/* groups of curl_easy_getinfo infos that take the same type of argument */ + +/* evaluates to true if info expects a pointer to char * argument */ +#define curlcheck_string_info(info) \ + (CURLINFO_STRING < (info) && (info) < CURLINFO_LONG && \ + (info) != CURLINFO_PRIVATE) + +/* evaluates to true if info expects a pointer to long argument */ +#define curlcheck_long_info(info) \ + (CURLINFO_LONG < (info) && (info) < CURLINFO_DOUBLE) + +/* evaluates to true if info expects a pointer to double argument */ +#define curlcheck_double_info(info) \ + (CURLINFO_DOUBLE < (info) && (info) < CURLINFO_SLIST) + +/* true if info expects a pointer to struct curl_slist * argument */ +#define curlcheck_slist_info(info) \ + (((info) == CURLINFO_SSL_ENGINES) || ((info) == CURLINFO_COOKIELIST)) + +/* true if info expects a pointer to struct curl_tlssessioninfo * argument */ +#define curlcheck_tlssessioninfo_info(info) \ + (((info) == CURLINFO_TLS_SSL_PTR) || ((info) == CURLINFO_TLS_SESSION)) + +/* true if info expects a pointer to struct curl_certinfo * argument */ +#define curlcheck_certinfo_info(info) ((info) == CURLINFO_CERTINFO) + +/* true if info expects a pointer to struct curl_socket_t argument */ +#define curlcheck_socket_info(info) \ + (CURLINFO_SOCKET < (info) && (info) < CURLINFO_OFF_T) + +/* true if info expects a pointer to curl_off_t argument */ +#define curlcheck_off_t_info(info) \ + (CURLINFO_OFF_T < (info)) + + +/* typecheck helpers -- check whether given expression has requested type */ + +/* For pointers, you can use the curlcheck_ptr/curlcheck_arr macros, + * otherwise define a new macro. Search for __builtin_types_compatible_p + * in the GCC manual. + * NOTE: these macros MUST NOT EVALUATE their arguments! The argument is + * the actual expression passed to the curl_easy_setopt macro. This + * means that you can only apply the sizeof and __typeof__ operators, no + * == or whatsoever. + */ + +/* XXX: should evaluate to true if expr is a pointer */ +#define curlcheck_any_ptr(expr) \ + (sizeof(expr) == sizeof(void *)) + +/* evaluates to true if expr is NULL */ +/* XXX: must not evaluate expr, so this check is not accurate */ +#define curlcheck_NULL(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), __typeof__(NULL))) + +/* evaluates to true if expr is type*, const type* or NULL */ +#define curlcheck_ptr(expr, type) \ + (curlcheck_NULL(expr) || \ + __builtin_types_compatible_p(__typeof__(expr), type *) || \ + __builtin_types_compatible_p(__typeof__(expr), const type *)) + +/* evaluates to true if expr is one of type[], type*, NULL or const type* */ +#define curlcheck_arr(expr, type) \ + (curlcheck_ptr((expr), type) || \ + __builtin_types_compatible_p(__typeof__(expr), type [])) + +/* evaluates to true if expr is a string */ +#define curlcheck_string(expr) \ + (curlcheck_arr((expr), char) || \ + curlcheck_arr((expr), signed char) || \ + curlcheck_arr((expr), unsigned char)) + +/* evaluates to true if expr is a long (no matter the signedness) + * XXX: for now, int is also accepted (and therefore short and char, which + * are promoted to int when passed to a variadic function) */ +#define curlcheck_long(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), long) || \ + __builtin_types_compatible_p(__typeof__(expr), signed long) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned long) || \ + __builtin_types_compatible_p(__typeof__(expr), int) || \ + __builtin_types_compatible_p(__typeof__(expr), signed int) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned int) || \ + __builtin_types_compatible_p(__typeof__(expr), short) || \ + __builtin_types_compatible_p(__typeof__(expr), signed short) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned short) || \ + __builtin_types_compatible_p(__typeof__(expr), char) || \ + __builtin_types_compatible_p(__typeof__(expr), signed char) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned char)) + +/* evaluates to true if expr is of type curl_off_t */ +#define curlcheck_off_t(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), curl_off_t)) + +/* evaluates to true if expr is abuffer suitable for CURLOPT_ERRORBUFFER */ +/* XXX: also check size of an char[] array? */ +#define curlcheck_error_buffer(expr) \ + (curlcheck_NULL(expr) || \ + __builtin_types_compatible_p(__typeof__(expr), char *) || \ + __builtin_types_compatible_p(__typeof__(expr), char[])) + +/* evaluates to true if expr is of type (const) void* or (const) FILE* */ +#if 0 +#define curlcheck_cb_data(expr) \ + (curlcheck_ptr((expr), void) || \ + curlcheck_ptr((expr), FILE)) +#else /* be less strict */ +#define curlcheck_cb_data(expr) \ + curlcheck_any_ptr(expr) +#endif + +/* evaluates to true if expr is of type FILE* */ +#define curlcheck_FILE(expr) \ + (curlcheck_NULL(expr) || \ + (__builtin_types_compatible_p(__typeof__(expr), FILE *))) + +/* evaluates to true if expr can be passed as POST data (void* or char*) */ +#define curlcheck_postfields(expr) \ + (curlcheck_ptr((expr), void) || \ + curlcheck_arr((expr), char) || \ + curlcheck_arr((expr), unsigned char)) + +/* helper: __builtin_types_compatible_p distinguishes between functions and + * function pointers, hide it */ +#define curlcheck_cb_compatible(func, type) \ + (__builtin_types_compatible_p(__typeof__(func), type) || \ + __builtin_types_compatible_p(__typeof__(func) *, type)) + +/* evaluates to true if expr is of type curl_resolver_start_callback */ +#define curlcheck_resolver_start_callback(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_resolver_start_callback)) + +/* evaluates to true if expr is of type curl_read_callback or "similar" */ +#define curlcheck_read_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), __typeof__(fread) *) || \ + curlcheck_cb_compatible((expr), curl_read_callback) || \ + curlcheck_cb_compatible((expr), _curl_read_callback1) || \ + curlcheck_cb_compatible((expr), _curl_read_callback2) || \ + curlcheck_cb_compatible((expr), _curl_read_callback3) || \ + curlcheck_cb_compatible((expr), _curl_read_callback4) || \ + curlcheck_cb_compatible((expr), _curl_read_callback5) || \ + curlcheck_cb_compatible((expr), _curl_read_callback6)) +typedef size_t (*_curl_read_callback1)(char *, size_t, size_t, void *); +typedef size_t (*_curl_read_callback2)(char *, size_t, size_t, const void *); +typedef size_t (*_curl_read_callback3)(char *, size_t, size_t, FILE *); +typedef size_t (*_curl_read_callback4)(void *, size_t, size_t, void *); +typedef size_t (*_curl_read_callback5)(void *, size_t, size_t, const void *); +typedef size_t (*_curl_read_callback6)(void *, size_t, size_t, FILE *); + +/* evaluates to true if expr is of type curl_write_callback or "similar" */ +#define curlcheck_write_cb(expr) \ + (curlcheck_read_cb(expr) || \ + curlcheck_cb_compatible((expr), __typeof__(fwrite) *) || \ + curlcheck_cb_compatible((expr), curl_write_callback) || \ + curlcheck_cb_compatible((expr), _curl_write_callback1) || \ + curlcheck_cb_compatible((expr), _curl_write_callback2) || \ + curlcheck_cb_compatible((expr), _curl_write_callback3) || \ + curlcheck_cb_compatible((expr), _curl_write_callback4) || \ + curlcheck_cb_compatible((expr), _curl_write_callback5) || \ + curlcheck_cb_compatible((expr), _curl_write_callback6)) +typedef size_t (*_curl_write_callback1)(const char *, size_t, size_t, void *); +typedef size_t (*_curl_write_callback2)(const char *, size_t, size_t, + const void *); +typedef size_t (*_curl_write_callback3)(const char *, size_t, size_t, FILE *); +typedef size_t (*_curl_write_callback4)(const void *, size_t, size_t, void *); +typedef size_t (*_curl_write_callback5)(const void *, size_t, size_t, + const void *); +typedef size_t (*_curl_write_callback6)(const void *, size_t, size_t, FILE *); + +/* evaluates to true if expr is of type curl_ioctl_callback or "similar" */ +#define curlcheck_ioctl_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_ioctl_callback) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback1) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback2) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback3) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback4)) +typedef curlioerr (*_curl_ioctl_callback1)(CURL *, int, void *); +typedef curlioerr (*_curl_ioctl_callback2)(CURL *, int, const void *); +typedef curlioerr (*_curl_ioctl_callback3)(CURL *, curliocmd, void *); +typedef curlioerr (*_curl_ioctl_callback4)(CURL *, curliocmd, const void *); + +/* evaluates to true if expr is of type curl_sockopt_callback or "similar" */ +#define curlcheck_sockopt_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_sockopt_callback) || \ + curlcheck_cb_compatible((expr), _curl_sockopt_callback1) || \ + curlcheck_cb_compatible((expr), _curl_sockopt_callback2)) +typedef int (*_curl_sockopt_callback1)(void *, curl_socket_t, curlsocktype); +typedef int (*_curl_sockopt_callback2)(const void *, curl_socket_t, + curlsocktype); + +/* evaluates to true if expr is of type curl_opensocket_callback or + "similar" */ +#define curlcheck_opensocket_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_opensocket_callback) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback1) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback2) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback3) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback4)) +typedef curl_socket_t (*_curl_opensocket_callback1) + (void *, curlsocktype, struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback2) + (void *, curlsocktype, const struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback3) + (const void *, curlsocktype, struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback4) + (const void *, curlsocktype, const struct curl_sockaddr *); + +/* evaluates to true if expr is of type curl_progress_callback or "similar" */ +#define curlcheck_progress_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_progress_callback) || \ + curlcheck_cb_compatible((expr), _curl_progress_callback1) || \ + curlcheck_cb_compatible((expr), _curl_progress_callback2)) +typedef int (*_curl_progress_callback1)(void *, + double, double, double, double); +typedef int (*_curl_progress_callback2)(const void *, + double, double, double, double); + +/* evaluates to true if expr is of type curl_debug_callback or "similar" */ +#define curlcheck_debug_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_debug_callback) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback1) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback2) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback3) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback4) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback5) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback6) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback7) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback8)) +typedef int (*_curl_debug_callback1) (CURL *, + curl_infotype, char *, size_t, void *); +typedef int (*_curl_debug_callback2) (CURL *, + curl_infotype, char *, size_t, const void *); +typedef int (*_curl_debug_callback3) (CURL *, + curl_infotype, const char *, size_t, void *); +typedef int (*_curl_debug_callback4) (CURL *, + curl_infotype, const char *, size_t, const void *); +typedef int (*_curl_debug_callback5) (CURL *, + curl_infotype, unsigned char *, size_t, void *); +typedef int (*_curl_debug_callback6) (CURL *, + curl_infotype, unsigned char *, size_t, const void *); +typedef int (*_curl_debug_callback7) (CURL *, + curl_infotype, const unsigned char *, size_t, void *); +typedef int (*_curl_debug_callback8) (CURL *, + curl_infotype, const unsigned char *, size_t, const void *); + +/* evaluates to true if expr is of type curl_ssl_ctx_callback or "similar" */ +/* this is getting even messier... */ +#define curlcheck_ssl_ctx_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_ssl_ctx_callback) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback1) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback2) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback3) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback4) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback5) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback6) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback7) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback8)) +typedef CURLcode (*_curl_ssl_ctx_callback1)(CURL *, void *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback2)(CURL *, void *, const void *); +typedef CURLcode (*_curl_ssl_ctx_callback3)(CURL *, const void *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback4)(CURL *, const void *, + const void *); +#ifdef HEADER_SSL_H +/* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX + * this will of course break if we're included before OpenSSL headers... + */ +typedef CURLcode (*_curl_ssl_ctx_callback5)(CURL *, SSL_CTX *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback6)(CURL *, SSL_CTX *, const void *); +typedef CURLcode (*_curl_ssl_ctx_callback7)(CURL *, const SSL_CTX *, void *); +typedef CURLcode (*_curl_ssl_ctx_callback8)(CURL *, const SSL_CTX *, + const void *); +#else +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback5; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback6; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback7; +typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8; +#endif + +/* evaluates to true if expr is of type curl_conv_callback or "similar" */ +#define curlcheck_conv_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_conv_callback) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback1) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback2) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback3) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback4)) +typedef CURLcode (*_curl_conv_callback1)(char *, size_t length); +typedef CURLcode (*_curl_conv_callback2)(const char *, size_t length); +typedef CURLcode (*_curl_conv_callback3)(void *, size_t length); +typedef CURLcode (*_curl_conv_callback4)(const void *, size_t length); + +/* evaluates to true if expr is of type curl_seek_callback or "similar" */ +#define curlcheck_seek_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_seek_callback) || \ + curlcheck_cb_compatible((expr), _curl_seek_callback1) || \ + curlcheck_cb_compatible((expr), _curl_seek_callback2)) +typedef CURLcode (*_curl_seek_callback1)(void *, curl_off_t, int); +typedef CURLcode (*_curl_seek_callback2)(const void *, curl_off_t, int); + + +#endif /* CURLINC_TYPECHECK_GCC_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/urlapi.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/urlapi.h new file mode 100644 index 0000000..88cdeb3 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/urlapi.h @@ -0,0 +1,150 @@ +#ifndef CURLINC_URLAPI_H +#define CURLINC_URLAPI_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include "curl.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* the error codes for the URL API */ +typedef enum { + CURLUE_OK, + CURLUE_BAD_HANDLE, /* 1 */ + CURLUE_BAD_PARTPOINTER, /* 2 */ + CURLUE_MALFORMED_INPUT, /* 3 */ + CURLUE_BAD_PORT_NUMBER, /* 4 */ + CURLUE_UNSUPPORTED_SCHEME, /* 5 */ + CURLUE_URLDECODE, /* 6 */ + CURLUE_OUT_OF_MEMORY, /* 7 */ + CURLUE_USER_NOT_ALLOWED, /* 8 */ + CURLUE_UNKNOWN_PART, /* 9 */ + CURLUE_NO_SCHEME, /* 10 */ + CURLUE_NO_USER, /* 11 */ + CURLUE_NO_PASSWORD, /* 12 */ + CURLUE_NO_OPTIONS, /* 13 */ + CURLUE_NO_HOST, /* 14 */ + CURLUE_NO_PORT, /* 15 */ + CURLUE_NO_QUERY, /* 16 */ + CURLUE_NO_FRAGMENT, /* 17 */ + CURLUE_NO_ZONEID, /* 18 */ + CURLUE_BAD_FILE_URL, /* 19 */ + CURLUE_BAD_FRAGMENT, /* 20 */ + CURLUE_BAD_HOSTNAME, /* 21 */ + CURLUE_BAD_IPV6, /* 22 */ + CURLUE_BAD_LOGIN, /* 23 */ + CURLUE_BAD_PASSWORD, /* 24 */ + CURLUE_BAD_PATH, /* 25 */ + CURLUE_BAD_QUERY, /* 26 */ + CURLUE_BAD_SCHEME, /* 27 */ + CURLUE_BAD_SLASHES, /* 28 */ + CURLUE_BAD_USER, /* 29 */ + CURLUE_LACKS_IDN, /* 30 */ + CURLUE_LAST +} CURLUcode; + +typedef enum { + CURLUPART_URL, + CURLUPART_SCHEME, + CURLUPART_USER, + CURLUPART_PASSWORD, + CURLUPART_OPTIONS, + CURLUPART_HOST, + CURLUPART_PORT, + CURLUPART_PATH, + CURLUPART_QUERY, + CURLUPART_FRAGMENT, + CURLUPART_ZONEID /* added in 7.65.0 */ +} CURLUPart; + +#define CURLU_DEFAULT_PORT (1<<0) /* return default port number */ +#define CURLU_NO_DEFAULT_PORT (1<<1) /* act as if no port number was set, + if the port number matches the + default for the scheme */ +#define CURLU_DEFAULT_SCHEME (1<<2) /* return default scheme if + missing */ +#define CURLU_NON_SUPPORT_SCHEME (1<<3) /* allow non-supported scheme */ +#define CURLU_PATH_AS_IS (1<<4) /* leave dot sequences */ +#define CURLU_DISALLOW_USER (1<<5) /* no user+password allowed */ +#define CURLU_URLDECODE (1<<6) /* URL decode on get */ +#define CURLU_URLENCODE (1<<7) /* URL encode on set */ +#define CURLU_APPENDQUERY (1<<8) /* append a form style part */ +#define CURLU_GUESS_SCHEME (1<<9) /* legacy curl-style guessing */ +#define CURLU_NO_AUTHORITY (1<<10) /* Allow empty authority when the + scheme is unknown. */ +#define CURLU_ALLOW_SPACE (1<<11) /* Allow spaces in the URL */ +#define CURLU_PUNYCODE (1<<12) /* get the host name in punycode */ +#define CURLU_PUNY2IDN (1<<13) /* punycode => IDN conversion */ + +typedef struct Curl_URL CURLU; + +/* + * curl_url() creates a new CURLU handle and returns a pointer to it. + * Must be freed with curl_url_cleanup(). + */ +CURL_EXTERN CURLU *curl_url(void); + +/* + * curl_url_cleanup() frees the CURLU handle and related resources used for + * the URL parsing. It will not free strings previously returned with the URL + * API. + */ +CURL_EXTERN void curl_url_cleanup(CURLU *handle); + +/* + * curl_url_dup() duplicates a CURLU handle and returns a new copy. The new + * handle must also be freed with curl_url_cleanup(). + */ +CURL_EXTERN CURLU *curl_url_dup(const CURLU *in); + +/* + * curl_url_get() extracts a specific part of the URL from a CURLU + * handle. Returns error code. The returned pointer MUST be freed with + * curl_free() afterwards. + */ +CURL_EXTERN CURLUcode curl_url_get(const CURLU *handle, CURLUPart what, + char **part, unsigned int flags); + +/* + * curl_url_set() sets a specific part of the URL in a CURLU handle. Returns + * error code. The passed in string will be copied. Passing a NULL instead of + * a part string, clears that part. + */ +CURL_EXTERN CURLUcode curl_url_set(CURLU *handle, CURLUPart what, + const char *part, unsigned int flags); + +/* + * curl_url_strerror() turns a CURLUcode value into the equivalent human + * readable error string. This is useful for printing meaningful error + * messages. + */ +CURL_EXTERN const char *curl_url_strerror(CURLUcode); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* CURLINC_URLAPI_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/websockets.h b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/websockets.h new file mode 100644 index 0000000..6ef6a2b --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/include/curl/websockets.h @@ -0,0 +1,84 @@ +#ifndef CURLINC_WEBSOCKETS_H +#define CURLINC_WEBSOCKETS_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +struct curl_ws_frame { + int age; /* zero */ + int flags; /* See the CURLWS_* defines */ + curl_off_t offset; /* the offset of this data into the frame */ + curl_off_t bytesleft; /* number of pending bytes left of the payload */ + size_t len; /* size of the current data chunk */ +}; + +/* flag bits */ +#define CURLWS_TEXT (1<<0) +#define CURLWS_BINARY (1<<1) +#define CURLWS_CONT (1<<2) +#define CURLWS_CLOSE (1<<3) +#define CURLWS_PING (1<<4) +#define CURLWS_OFFSET (1<<5) + +/* + * NAME curl_ws_recv() + * + * DESCRIPTION + * + * Receives data from the websocket connection. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen, + size_t *recv, + const struct curl_ws_frame **metap); + +/* flags for curl_ws_send() */ +#define CURLWS_PONG (1<<6) + +/* + * NAME curl_ws_send() + * + * DESCRIPTION + * + * Sends data over the websocket connection. Use after successful + * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. + */ +CURL_EXTERN CURLcode curl_ws_send(CURL *curl, const void *buffer, + size_t buflen, size_t *sent, + curl_off_t fragsize, + unsigned int flags); + +/* bits for the CURLOPT_WS_OPTIONS bitmask: */ +#define CURLWS_RAW_MODE (1<<0) + +CURL_EXTERN const struct curl_ws_frame *curl_ws_meta(CURL *curl); + +#ifdef __cplusplus +} +#endif + +#endif /* CURLINC_WEBSOCKETS_H */ diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/lib/cmake/CURL/CURLConfig.cmake b/packages/libcpr.1.10.5/build/native/x86/Release/lib/cmake/CURL/CURLConfig.cmake new file mode 100644 index 0000000..5349512 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/lib/cmake/CURL/CURLConfig.cmake @@ -0,0 +1,62 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() ####### +####### Any changes to this file will be overwritten by the next CMake run #### +####### The input file was curl-config.cmake.in ######## + +get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE) + +macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() +endmacro() + +macro(check_required_components _NAME) + foreach(comp ${${_NAME}_FIND_COMPONENTS}) + if(NOT ${_NAME}_${comp}_FOUND) + if(${_NAME}_FIND_REQUIRED_${comp}) + set(${_NAME}_FOUND FALSE) + endif() + endif() + endforeach() +endmacro() + +#################################################################################### + +include(CMakeFindDependencyMacro) +if() + find_dependency(OpenSSL ) +endif() +if(OFF) + find_dependency(ZLIB ) +endif() + +include("${CMAKE_CURRENT_LIST_DIR}/CURLTargets.cmake") +check_required_components("CURL") + +# Alias for either shared or static library +add_library(CURL::libcurl ALIAS CURL::libcurl_shared) diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/lib/cmake/CURL/CURLConfigVersion.cmake b/packages/libcpr.1.10.5/build/native/x86/Release/lib/cmake/CURL/CURLConfigVersion.cmake new file mode 100644 index 0000000..91490ee --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/lib/cmake/CURL/CURLConfigVersion.cmake @@ -0,0 +1,70 @@ +if(NOT PACKAGE_FIND_VERSION_RANGE AND PACKAGE_FIND_VERSION_MAJOR STREQUAL "7") + # Version 8 satisfies version 7... requirements + set(PACKAGE_FIND_VERSION_MAJOR 8) + set(PACKAGE_FIND_VERSION_COUNT 1) +endif() +# This is a basic version file for the Config-mode of find_package(). +# It is used by write_basic_package_version_file() as input file for configure_file() +# to create a version-file which can be installed along a config.cmake file. +# +# The created file sets PACKAGE_VERSION_EXACT if the current version string and +# the requested version string are exactly the same and it sets +# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version, +# but only if the requested major version is the same as the current one. +# The variable CVF_VERSION must be set before calling configure_file(). + + +set(PACKAGE_VERSION "8.4.0") + +if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + + if("8.4.0" MATCHES "^([0-9]+)\\.") + set(CVF_VERSION_MAJOR "${CMAKE_MATCH_1}") + if(NOT CVF_VERSION_MAJOR VERSION_EQUAL 0) + string(REGEX REPLACE "^0+" "" CVF_VERSION_MAJOR "${CVF_VERSION_MAJOR}") + endif() + else() + set(CVF_VERSION_MAJOR "8.4.0") + endif() + + if(PACKAGE_FIND_VERSION_RANGE) + # both endpoints of the range must have the expected major version + math (EXPR CVF_VERSION_MAJOR_NEXT "${CVF_VERSION_MAJOR} + 1") + if (NOT PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR + OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX_MAJOR STREQUAL CVF_VERSION_MAJOR) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND NOT PACKAGE_FIND_VERSION_MAX VERSION_LESS_EQUAL CVF_VERSION_MAJOR_NEXT))) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + elseif(PACKAGE_FIND_VERSION_MIN_MAJOR STREQUAL CVF_VERSION_MAJOR + AND ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS_EQUAL PACKAGE_FIND_VERSION_MAX) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MAX))) + set(PACKAGE_VERSION_COMPATIBLE TRUE) + else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) + endif() + else() + if(PACKAGE_FIND_VERSION_MAJOR STREQUAL CVF_VERSION_MAJOR) + set(PACKAGE_VERSION_COMPATIBLE TRUE) + else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) + endif() + + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() + endif() +endif() + + +# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "4" STREQUAL "") + return() +endif() + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "4") + math(EXPR installedBits "4 * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/lib/cmake/CURL/CURLTargets-release.cmake b/packages/libcpr.1.10.5/build/native/x86/Release/lib/cmake/CURL/CURLTargets-release.cmake new file mode 100644 index 0000000..e80df75 --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/lib/cmake/CURL/CURLTargets-release.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file for configuration "Release". +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "CURL::libcurl_shared" for configuration "Release" +set_property(TARGET CURL::libcurl_shared APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(CURL::libcurl_shared PROPERTIES + IMPORTED_IMPLIB_RELEASE "${_IMPORT_PREFIX}/lib/libcurl_imp.lib" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/libcurl.dll" + ) + +list(APPEND _cmake_import_check_targets CURL::libcurl_shared ) +list(APPEND _cmake_import_check_files_for_CURL::libcurl_shared "${_IMPORT_PREFIX}/lib/libcurl_imp.lib" "${_IMPORT_PREFIX}/bin/libcurl.dll" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/lib/cmake/CURL/CURLTargets.cmake b/packages/libcpr.1.10.5/build/native/x86/Release/lib/cmake/CURL/CURLTargets.cmake new file mode 100644 index 0000000..64a4edd --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/lib/cmake/CURL/CURLTargets.cmake @@ -0,0 +1,102 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8) + message(FATAL_ERROR "CMake >= 2.8.0 required") +endif() +if(CMAKE_VERSION VERSION_LESS "2.8.3") + message(FATAL_ERROR "CMake >= 2.8.3 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.8.3...3.25) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_cmake_targets_defined "") +set(_cmake_targets_not_defined "") +set(_cmake_expected_targets "") +foreach(_cmake_expected_target IN ITEMS CURL::libcurl_shared) + list(APPEND _cmake_expected_targets "${_cmake_expected_target}") + if(TARGET "${_cmake_expected_target}") + list(APPEND _cmake_targets_defined "${_cmake_expected_target}") + else() + list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}") + endif() +endforeach() +unset(_cmake_expected_target) +if(_cmake_targets_defined STREQUAL _cmake_expected_targets) + unset(_cmake_targets_defined) + unset(_cmake_targets_not_defined) + unset(_cmake_expected_targets) + unset(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT _cmake_targets_defined STREQUAL "") + string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}") + string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n") +endif() +unset(_cmake_targets_defined) +unset(_cmake_targets_not_defined) +unset(_cmake_expected_targets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target CURL::libcurl_shared +add_library(CURL::libcurl_shared SHARED IMPORTED) + +set_target_properties(CURL::libcurl_shared PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" +) + +# Load information for each installed configuration. +file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/CURLTargets-*.cmake") +foreach(_cmake_config_file IN LISTS _cmake_config_files) + include("${_cmake_config_file}") +endforeach() +unset(_cmake_config_file) +unset(_cmake_config_files) + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(_cmake_target IN LISTS _cmake_import_check_targets) + foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}") + if(NOT EXISTS "${_cmake_file}") + message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file + \"${_cmake_file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_cmake_file) + unset("_cmake_import_check_files_for_${_cmake_target}") +endforeach() +unset(_cmake_target) +unset(_cmake_import_check_targets) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/packages/libcpr.1.10.5/build/native/x86/Release/lib/pkgconfig/libcurl.pc b/packages/libcpr.1.10.5/build/native/x86/Release/lib/pkgconfig/libcurl.pc new file mode 100644 index 0000000..5d808fc --- /dev/null +++ b/packages/libcpr.1.10.5/build/native/x86/Release/lib/pkgconfig/libcurl.pc @@ -0,0 +1,41 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +# This should most probably benefit from getting a "Requires:" field added +# dynamically by configure. +# +prefix=C:/Program Files (x86)/cpr +exec_prefix=${prefix} +libdir=C:/Program Files (x86)/cpr/lib +includedir=${prefix}/include +supported_protocols="HTTP HTTPS" +supported_features="SSL IPv6 unixsockets AsynchDNS Largefile SSPI alt-svc HSTS SPNEGO Kerberos NTLM HTTPS-proxy threadsafe" + +Name: libcurl +URL: https://curl.se/ +Description: Library to transfer files with ftp, http, etc. +Version: 8.4.0 +Libs: -L${libdir} -lcurl +Libs.private: -lws2_32 -ladvapi32 -lcrypt32 -lbcrypt +Cflags: -I${includedir} diff --git a/packages/libcpr.1.10.5/libcpr.1.10.5.nupkg b/packages/libcpr.1.10.5/libcpr.1.10.5.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..e59fa488fda013fa468ba1540c3d5355eaa10e1c GIT binary patch literal 5103200 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 z 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
gf(c_s-o-$6 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%0A6?D}A#XI@WoTyFI^g&lllM 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≈4`pNh1MSPpM=o6^j@P7d^_`-#B*5RFIL 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%0DIQQ(z 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 z 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

gK?&9iFAB&j87t~{)&|k_jE4w8DZ2;MX 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 z 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

  • ?)HhXOGMnJCDB7v0xfZm)7v7Dd zq12`wV_jGAfO$)>#Hrw_Mc&{(Fbq$CB(z;$6nJd_SgW%nOgjkX?1BtM%#UG!z7wjE zMFO&w2Egl}RQI1%!OGWAr=gG!Fpp;$bc4e=mm;(^h700Rz>EgS={D9kvU*k@s!06}GQN^h87r22 zN1c@WQagIEPMAl8anM5k7XVB^v%lZe+U8AKL*M_HB2QWRq#CGgB#gKVA|_23D~0__ zisS5{+31e&4@LtbZIbK2F%qtlH}@?a*ids88-65|M~VhS7YMq3yvGoR1X~E_HJCbf z6?@KYDSmKs{B#1RL<{DtXS{)mkR4U9gMr|iJlIbLy!JVw^RyiM2>gD)l+ zz;iICxKF*8Qom9(4Bo_=ODlyt_WvuTlsvIW7A>co77?y|Jtd3J%P#)&x^7LKk=^UF z*ZfH8k#@iNrOV!w!u56n<6Vg;r9e7(OgxYjfZESPWu43bYBZaEe^jvm0+}qBOv1%# zdxsF#@^PmzBtK1Z7<*!qwbsobJfWKrTJF?omg-Mz7B93)4ym?0xQ303Tw-xG0XfBa z&Ux37G77nAIu_P9tVpFRhqT>^NgNpI+4T@dx^eRmw9nY@x5npRwdvh8vPK7~$X7H4 zcl{=O<<+eymR*$}v)rZJkXd0eeZ{A82ff95xrmbx@iK+!@IIJMmxQ0B4G12i*^AVm zXawND$woSfXCJak1cX8E2*}Uz?@YW11pGB-*K#3_dZ*ReyXpa%wxdqko@|&SiMbKt^-=Ij4b#_xLf&XC@gWS~A9=s9T8!y7Sc=kg(Y}=jU zFRc5vi~kLiBtz%qC?_)jyJ46a97AI3Bwy{G4@a|N4htpD{hqe2dC3}xPLkmED1w9E z359U;x>XV1P2$H#y0-vRKoSz+Z2EFdeU9Abz#onpgHeS)zhg5xe1RfZpl-Whn*LG} zIXz$tt&3u~W!=+;QG*23ucV;F#;lDVv8@;>k_sZtxe@a9#6*-|Wgw(R?HcpsahgF? znunx8&|oz)HXfmSyAQDDv)7nND9qxqEZxDM6o%yt_^md2v0wKFUs=V0S5eEq7>eK} z@(q(-nld8gEvGu5YXyh`C#85KJ7F*mP>`GG={ z7^DzD_TZiZ$>q2R&6hFyC50jeD;3?fD>jlRYO*Vuo7%}lgh}xf*2JM#uy!F<&nnJ( z_U@Psl=mGidQM}fWK>tb6UWr%uxPj0o-;xIE<7^K*LdJSl$>f!7%Dc=rlmI4;8DgV z?Xi=B?nQ4r^1qBsgC0F(EBd(ImE^5v9BHFL??w`^dZt0EF>1)~sllPGf%u*p9Az2| zhaCe7G&puOASlq_B-6m}wq&peu8Uy*Ed0$hyj|bxZIiSiO=Hwda2xp9zETXZE-wZ- zcR5d_u>^loz0+}|p+4izrS{VNhVTrZDjF>fB}&be{l*kY^f%;QBGS>&7fc}tRg8}f zhfqXr@iC5(2(@qyTY8IG7$jjLXR|;Z(j(q-Oq8DDnwuo;G)N1`7(}P z|0#ws%u0Vq_lemf#?8I*Q|^%hEQudy^e+YGV=&++THdj z#k^*yFhC@~sLn-iaNS5XO;ckZm_c+NYQCIt$O@db7allO{dkxK#yUs^U24B`SMlV zILAc|uX@9gT)h)pLm~2}nBY^h;b*@+z(}?M>_33*cfRTy;GNlU0Jrvtbr-|oxaD`- zzLE;gP-+a9Pw3C14_C^G^dp!I`wx*bkO7> z2oL$2BYH#6lZS9>U9>aH*v}k`hUkUtLvGpdwnwBv*A|NT*NPsojt(S+9!U2i5&y6z z=70}Vh-4rBVU|iDjJjj^gGTq#g;Ixy@DVjI_Ieu8?vYP?7KtgiD+3GRq$nPWkAe$G zx5bu-WzS3WZ=f4iS}pKz^j*i8cLUTp;99Hqxl3pZt8;VhtCMq>Lbhd?tTE-J^hPn4 zzMbM@@BlD@Kp-hZ>$Dm~tch=<9H7R?-{o2k{l=hqmBtHfX{9+w7MgS9qB&B|BM$PS zchfb%AJxo{NG+(A@3eY+$WdMeRtv2dsAtz&_1hR+!diEw65_~8dyXu$=g38SFwfWE zqS5rT=LkPStdNqfYFKarj!rB+pE!CR^?JarcfZ2kvoH0~Sj8#HaTeM1O?IJ zAxxo3-v{wfh~ywCwlCV8c$F2Bh}(;hJR8iBV89J5Qn&=6X1S9?`fS*qp%T63qrePnF{fQ{+IU9WCl+03|-*D$|SOsA2zXU%k| z6Qgnaf%WtUq}wr!jgC zB9zo&`J&a^M8H9+h<>=iJu3URDIG}3g=Jr%`c4kf2b~O-i@DS-h(73~vD_=EZcSnN zwvol8c2+&e4XHgG-T-Hl=KF9+NPOB!vc^A@4yhNc8N2txHGqx1<}m!5%5jl}H1vl~FVuT`x zXHK^1_N3;6gy>HI5{o|&&-(6+ZwKS#sp>7|6B#99F(mB)PHmlMiu!FBM5}*u{?Y#m z1eT%|Xb@*eJ2cz9h~`LnsL0F2`xd^S_NO#IBLX_I2+qk^@z%iXz&Ard*w2uDMDr(L z!lo&v9fPsgsjVeVIHpPV8`s$lIm4qX9HW%aGk&n2(S(fC~28q%6^h zd4`7*#K~Y0X(t|J{X}dM-ZLdh6(;Y2^OpBtgMM#DS1y6@>`07YjS*6qCxaD@axl`| z1Z_$UB!{}Vgoh5&e}*T#A(r`&msfF&DOGv9X;u9p3_RP|z&rrCQ7Aj4Z4{?0j(&e3 zFOlRS_!ipL3(Za&q&39AG=q3XhnYMd_GlkWG!&9aT2$%+R`fvpq!KRuUJ56OgN|o2 zkv&~+!5s)Xv+T&&SI_j(`-PqK@Fm*1vkq{o>JEM+O#bYa3cLuVLZCuGOF+s6CtOKH z{tu3daQsk)C}H^#r6<@1KmA4epBQnws-^ZJFw8w{;K}+VXg;-eVjk!cu#*&UG|v?P zKX4gUT_4n)MobzSC6m{Q=4mbC8Rky0Ca5JpbDL=a%4zk~iaseo zLNi*RG%YcS8vH-@vu_5!C1@U63oaT&SLDM%qQ6B8=E0eLRcRq{VR;GtpI=`zv;OqZ zB#P(M!qNp9T8ac4l<<&MGEwqN9u%@v=mqe(2iWMNF5YkDwC|R0@WRBz_3)WL$QcSO z2LZ)r-BTM*%m9`1xl?ZWl;93x28e1Z?x4nXQ<9J$Mn>V!B;Ic=d4Vb50sx0jVWh5&Z78LV}QCeY@E|8XOF$< z1!Y1vy`J7!rkir;NoxdBuQqJSdAkcM;dqID1(xp(TfSmh)RQa~!Vgg8g&Hr1BFy#) zYn7bprpzbo8=!5pd8@5u8d`g6Rp}N}9UvsLNMw)5P?40K9j--v@^cn=+cdIBY4Llo zeP$Tf9k#+EOc?dp;X|&3>EdAd&U7o0#M^je`NCp@HppJ)P4>8=nOIh*fG0U)K&CxV zG;}-qJ$tNAvowtwrq)dB7qt(u%m`{QZ*V2hwF9ghDO>{YE__xvA)P)eDyac!dMF`* z%vGzixNvBe4wn8^hB8nsGfMrjilsF9h}=3Q8Vw#3?-t~@Tm}^1h?~3a(|vY^KZ0?j z6q%|>9x@Oj;tQBGX&ZHNYHGjn4Jj!ycr)1js_=~#**R`Rd;v*;f*y+8 z!a_9UvTiElg$x##%Kl7vOv*F3{{^Gc^dES7VFxk$F1w+nUwy)ipS`Z}lvbc+Jh&VV z8~t|f0hwHemzL)PxC=-%WV~y`WjAW&9>5)gNk@(6ogQ#k=s<`m&a%&mk7{L~l7&J) zgDpW7gYkq+&|(pCk1b85b8qG`P^?DtW9lieKB?8E%RxC}=bFNSziv>Ko8neVw>I!E zZibd7mwp$ns*aSSkVM`L{9H3!N0ROv%`4K-WgCD10(|Mm;x;{u^zHOMTgEXOVR5B? zdtiBY(}mq?Uv@LEe!uaDN=0kFFg&mIV=}#F_K2S4_lO<~_{L)?n_-WZ$Jf11u>(LtaTLUIo<_GprlUd1X;6BrD#f@{Y)}EY&0`FAlVKWgCz| zJDlCz3{=fRNfLmx`ko7a%rFq@{knq z;dvsmT#4533}aBFG3H2l^RN~T;1`WaikGDItW^y^c-`^1Ha?)bTlvn<&;=hZs7WaL zk^ncYgXr(TvvtUYyr?t&6L~N!b4&@E`BQTk$0_r#0jExtyfhqQ23M=_aj}x>bOq*J z)dB@`9SlXiFMuK{o28cExC%q1Eh9rZYNy$-UbF;a>#W@!Qw^}(Hrt2RpgLdK#_t?6 zIaYTo768MqZW2zABzl&44QR!w&PG5?T1m^z16H&lK5-dP3>B5ELHO;yCj#`VJkm1Y zQj-y}m_%l$+vW#Iz#}xTL>%ULs~3)DwxstT;rY^ zknMtM)X5(*cG2NX+bmLFoHvH;rv8GOp9e`a$r?Jg#nIhKecozc`YHlmeBO%gQ9EAH zY1hB(fy6iRjjy`leZ0a9N8a|Zj}3N;AOJ(Bf$Vt=tZ=3lFw=)odp$k)?x=I^W#&%L z3OeQqkK6vH2{Y>t?e1p5Q@md0dLDm1-_$dZOLWH(VXe>6{1)SCAHvxpOvA$(aUjs7 zcM)VtN^SQo%v!Bd-}btluf{6Sp^NWBIwB&SxyUigp@$sq8w<)hj}e&bCo>(`pZ~xh z7m}3(Pz0A6Pot}cLt8szk3bIiPr_BU^{{c_J6fan9gtH(=r=iqOa91gZ>xkUNLqF> z35@e6W;^>uZ6}xZIDb&AU)3yMr4EYqD=yyD(sHV*vMmz)qZQu*FC&fS4^{q~H%yYJ zDMBSkH&G?@g~51K4%v;-r*1;b79}&Bd3b8 z<_Wcab!@{8^Bh{gI3R zpM`%|VC5BQ?dC`St4Li=nF+`*V_&9MM*j>|XwD8qm{Vjza{?m0R$U(<-y_zR z(wgH(#I0=Z4~Bc*Ysmf%=~MXXHpcv$@_SKl5GO(}Q0kxK@i=_Kf^WANtd*=*0q=OFUFlDED{@8I1ANqBPPV8CGu zFlSlBN#@Ob)gpJu)-rhBG9ojy8UmA{<(3cz$*EIBuJV0C(bmum<56{Vt-M@ z+AIV!(_+l!fM8A)Hl<*Nn&mev`h#_pgJiWA&G)1$qZ@;ScO84zkk}f{CBC}Qg#G$7 zo{;~bk<$%&%DDc?HrMT;b~dC-gj}~PG+pW0`HS_tA;;A)I6s73MKIw%szB!lSoiG~^4by4yrFBoPvG8&* z;$W?6;T!ZW?+{leRrvCf5&BJ`k4*)ei?2p97Xeb!rL4mXZz`w %r!umaCy-2Pb@ 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Ì`#v&k7UE;^% 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