cjson
fuzzing
inputs
test1 test10 test11 test2 test3 test3.bu test3.uf test3.uu test4 test5 test6 test7 test8 test9library_config
cJSONConfig.cmake.in cJSONConfigVersion.cmake.in libcjson.pc.in libcjson_utils.pc.in uninstall.cmaketests
inputs
test1 test1.expected test10 test10.expected test11 test11.expected test2 test2.expected test3 test3.expected test4 test4.expected test5 test5.expected test6 test7 test7.expected test8 test8.expected test9 test9.expectedjson-patch-tests
.editorconfig .gitignore .npmignore README.md cjson-utils-tests.json package.json spec_tests.json tests.jsonunity
auto
colour_prompt.rb colour_reporter.rb generate_config.yml generate_module.rb generate_test_runner.rb parse_output.rb stylize_as_junit.rb test_file_filter.rb type_sanitizer.rb unity_test_summary.py unity_test_summary.rb unity_to_junit.pydocs
ThrowTheSwitchCodingStandard.md UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf UnityAssertionsReference.md UnityConfigurationGuide.md UnityGettingStartedGuide.md UnityHelperScriptsGuide.md license.txtexamples
unity_config.hcurl
.github
scripts
cleancmd.pl cmp-config.pl cmp-pkg-config.sh codespell-ignore.words codespell.sh distfiles.sh pyspelling.words pyspelling.yaml randcurl.pl requirements-docs.txt requirements-proselint.txt requirements.txt shellcheck-ci.sh shellcheck.sh spellcheck.curl trimmarkdownheader.pl typos.sh typos.toml verify-examples.pl verify-synopsis.pl yamlcheck.sh yamlcheck.yamlworkflows
appveyor-status.yml checkdocs.yml checksrc.yml checkurls.yml codeql.yml configure-vs-cmake.yml curl-for-win.yml distcheck.yml fuzz.yml http3-linux.yml label.yml linux-old.yml linux.yml macos.yml non-native.yml windows.ymlCMake
CurlSymbolHiding.cmake CurlTests.c FindBrotli.cmake FindCares.cmake FindGSS.cmake FindGnuTLS.cmake FindLDAP.cmake FindLibbacktrace.cmake FindLibgsasl.cmake FindLibidn2.cmake FindLibpsl.cmake FindLibssh.cmake FindLibssh2.cmake FindLibuv.cmake FindMbedTLS.cmake FindNGHTTP2.cmake FindNGHTTP3.cmake FindNGTCP2.cmake FindNettle.cmake FindQuiche.cmake FindRustls.cmake FindWolfSSL.cmake FindZstd.cmake Macros.cmake OtherTests.cmake PickyWarnings.cmake Utilities.cmake cmake_uninstall.in.cmake curl-config.in.cmake unix-cache.cmake win32-cache.cmakedocs
cmdline-opts
.gitignore CMakeLists.txt MANPAGE.md Makefile.am Makefile.inc _AUTHORS.md _BUGS.md _DESCRIPTION.md _ENVIRONMENT.md _EXITCODES.md _FILES.md _GLOBBING.md _NAME.md _OPTIONS.md _OUTPUT.md _PROGRESS.md _PROTOCOLS.md _PROXYPREFIX.md _SEEALSO.md _SYNOPSIS.md _URL.md _VARIABLES.md _VERSION.md _WWW.md abstract-unix-socket.md alt-svc.md anyauth.md append.md aws-sigv4.md basic.md ca-native.md cacert.md capath.md cert-status.md cert-type.md cert.md ciphers.md compressed-ssh.md compressed.md config.md connect-timeout.md connect-to.md continue-at.md cookie-jar.md cookie.md create-dirs.md create-file-mode.md crlf.md crlfile.md curves.md data-ascii.md data-binary.md data-raw.md data-urlencode.md data.md delegation.md digest.md disable-eprt.md disable-epsv.md disable.md disallow-username-in-url.md dns-interface.md dns-ipv4-addr.md dns-ipv6-addr.md dns-servers.md doh-cert-status.md doh-insecure.md doh-url.md dump-ca-embed.md dump-header.md ech.md egd-file.md engine.md etag-compare.md etag-save.md expect100-timeout.md fail-early.md fail-with-body.md fail.md false-start.md follow.md form-escape.md form-string.md form.md ftp-account.md ftp-alternative-to-user.md ftp-create-dirs.md ftp-method.md ftp-pasv.md ftp-port.md ftp-pret.md ftp-skip-pasv-ip.md ftp-ssl-ccc-mode.md ftp-ssl-ccc.md ftp-ssl-control.md get.md globoff.md happy-eyeballs-timeout-ms.md haproxy-clientip.md haproxy-protocol.md head.md header.md help.md hostpubmd5.md hostpubsha256.md hsts.md http0.9.md http1.0.md http1.1.md http2-prior-knowledge.md http2.md http3-only.md http3.md ignore-content-length.md insecure.md interface.md ip-tos.md ipfs-gateway.md ipv4.md ipv6.md json.md junk-session-cookies.md keepalive-cnt.md keepalive-time.md key-type.md key.md knownhosts.md krb.md libcurl.md limit-rate.md list-only.md local-port.md location-trusted.md location.md login-options.md mail-auth.md mail-from.md mail-rcpt-allowfails.md mail-rcpt.md mainpage.idx manual.md max-filesize.md max-redirs.md max-time.md metalink.md mptcp.md negotiate.md netrc-file.md netrc-optional.md netrc.md next.md no-alpn.md no-buffer.md no-clobber.md no-keepalive.md no-npn.md no-progress-meter.md no-sessionid.md noproxy.md ntlm-wb.md ntlm.md oauth2-bearer.md out-null.md output-dir.md output.md parallel-immediate.md parallel-max-host.md parallel-max.md parallel.md pass.md path-as-is.md pinnedpubkey.md post301.md post302.md post303.md preproxy.md progress-bar.md proto-default.md proto-redir.md proto.md proxy-anyauth.md proxy-basic.md proxy-ca-native.md proxy-cacert.md proxy-capath.md proxy-cert-type.md proxy-cert.md proxy-ciphers.md proxy-crlfile.md proxy-digest.md proxy-header.md proxy-http2.md proxy-insecure.md proxy-key-type.md proxy-key.md proxy-negotiate.md proxy-ntlm.md proxy-pass.md proxy-pinnedpubkey.md proxy-service-name.md proxy-ssl-allow-beast.md proxy-ssl-auto-client-cert.md proxy-tls13-ciphers.md proxy-tlsauthtype.md proxy-tlspassword.md proxy-tlsuser.md proxy-tlsv1.md proxy-user.md proxy.md proxy1.0.md proxytunnel.md pubkey.md quote.md random-file.md range.md rate.md raw.md referer.md remote-header-name.md remote-name-all.md remote-name.md remote-time.md remove-on-error.md request-target.md request.md resolve.md retry-all-errors.md retry-connrefused.md retry-delay.md retry-max-time.md retry.md sasl-authzid.md sasl-ir.md service-name.md show-error.md show-headers.md sigalgs.md silent.md skip-existing.md socks4.md socks4a.md socks5-basic.md socks5-gssapi-nec.md socks5-gssapi-service.md socks5-gssapi.md socks5-hostname.md socks5.md speed-limit.md speed-time.md ssl-allow-beast.md ssl-auto-client-cert.md ssl-no-revoke.md ssl-reqd.md ssl-revoke-best-effort.md ssl-sessions.md ssl.md sslv2.md sslv3.md stderr.md styled-output.md suppress-connect-headers.md tcp-fastopen.md tcp-nodelay.md telnet-option.md tftp-blksize.md tftp-no-options.md time-cond.md tls-earlydata.md tls-max.md tls13-ciphers.md tlsauthtype.md tlspassword.md tlsuser.md tlsv1.0.md tlsv1.1.md tlsv1.2.md tlsv1.3.md tlsv1.md tr-encoding.md trace-ascii.md trace-config.md trace-ids.md trace-time.md trace.md unix-socket.md upload-file.md upload-flags.md url-query.md url.md use-ascii.md user-agent.md user.md variable.md verbose.md version.md vlan-priority.md write-out.md xattr.mdexamples
.checksrc .gitignore 10-at-a-time.c CMakeLists.txt Makefile.am Makefile.example Makefile.inc README.md adddocsref.pl address-scope.c altsvc.c anyauthput.c block_ip.c cacertinmem.c certinfo.c chkspeed.c connect-to.c cookie_interface.c crawler.c debug.c default-scheme.c ephiperfifo.c evhiperfifo.c externalsocket.c fileupload.c ftp-delete.c ftp-wildcard.c ftpget.c ftpgetinfo.c ftpgetresp.c ftpsget.c ftpupload.c ftpuploadfrommem.c ftpuploadresume.c getinfo.c getinmemory.c getredirect.c getreferrer.c ghiper.c headerapi.c hiperfifo.c hsts-preload.c htmltidy.c htmltitle.cpp http-options.c http-post.c http2-download.c http2-pushinmemory.c http2-serverpush.c http2-upload.c http3-present.c http3.c httpcustomheader.c httpput-postfields.c httpput.c https.c imap-append.c imap-authzid.c imap-copy.c imap-create.c imap-delete.c imap-examine.c imap-fetch.c imap-list.c imap-lsub.c imap-multi.c imap-noop.c imap-search.c imap-ssl.c imap-store.c imap-tls.c interface.c ipv6.c keepalive.c localport.c log_failed_transfers.c maxconnects.c multi-app.c multi-debugcallback.c multi-double.c multi-event.c multi-formadd.c multi-legacy.c multi-post.c multi-single.c multi-uv.c netrc.c parseurl.c persistent.c pop3-authzid.c pop3-dele.c pop3-list.c pop3-multi.c pop3-noop.c pop3-retr.c pop3-ssl.c pop3-stat.c pop3-tls.c pop3-top.c pop3-uidl.c post-callback.c postinmemory.c postit2-formadd.c postit2.c progressfunc.c protofeats.c range.c resolve.c rtsp-options.c sendrecv.c sepheaders.c sessioninfo.c sftpget.c sftpuploadresume.c shared-connection-cache.c simple.c simplepost.c simplessl.c smooth-gtk-thread.c smtp-authzid.c smtp-expn.c smtp-mail.c smtp-mime.c smtp-multi.c smtp-ssl.c smtp-tls.c smtp-vrfy.c sslbackend.c synctime.c threaded.c unixsocket.c url2file.c urlapi.c usercertinmem.c version-check.pl websocket-cb.c websocket-updown.c websocket.c xmlstream.cinternals
BUFQ.md BUFREF.md CHECKSRC.md CLIENT-READERS.md CLIENT-WRITERS.md CODE_STYLE.md CONNECTION-FILTERS.md CREDENTIALS.md CURLX.md DYNBUF.md HASH.md LLIST.md MID.md MQTT.md MULTI-EV.md NEW-PROTOCOL.md PEERS.md PORTING.md RATELIMITS.md README.md SCORECARD.md SPLAY.md STRPARSE.md THRDPOOL-AND-QUEUE.md TIME-KEEPING.md TLS-SESSIONS.md UINT_SETS.md WEBSOCKET.mdlibcurl
opts
CMakeLists.txt CURLINFO_ACTIVESOCKET.md CURLINFO_APPCONNECT_TIME.md CURLINFO_APPCONNECT_TIME_T.md CURLINFO_CAINFO.md CURLINFO_CAPATH.md CURLINFO_CERTINFO.md CURLINFO_CONDITION_UNMET.md CURLINFO_CONNECT_TIME.md CURLINFO_CONNECT_TIME_T.md CURLINFO_CONN_ID.md CURLINFO_CONTENT_LENGTH_DOWNLOAD.md CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.md CURLINFO_CONTENT_LENGTH_UPLOAD.md CURLINFO_CONTENT_LENGTH_UPLOAD_T.md CURLINFO_CONTENT_TYPE.md CURLINFO_COOKIELIST.md CURLINFO_EARLYDATA_SENT_T.md CURLINFO_EFFECTIVE_METHOD.md CURLINFO_EFFECTIVE_URL.md CURLINFO_FILETIME.md CURLINFO_FILETIME_T.md CURLINFO_FTP_ENTRY_PATH.md CURLINFO_HEADER_SIZE.md CURLINFO_HTTPAUTH_AVAIL.md CURLINFO_HTTPAUTH_USED.md CURLINFO_HTTP_CONNECTCODE.md CURLINFO_HTTP_VERSION.md CURLINFO_LASTSOCKET.md CURLINFO_LOCAL_IP.md CURLINFO_LOCAL_PORT.md CURLINFO_NAMELOOKUP_TIME.md CURLINFO_NAMELOOKUP_TIME_T.md CURLINFO_NUM_CONNECTS.md CURLINFO_OS_ERRNO.md CURLINFO_POSTTRANSFER_TIME_T.md CURLINFO_PRETRANSFER_TIME.md CURLINFO_PRETRANSFER_TIME_T.md CURLINFO_PRIMARY_IP.md CURLINFO_PRIMARY_PORT.md CURLINFO_PRIVATE.md CURLINFO_PROTOCOL.md CURLINFO_PROXYAUTH_AVAIL.md CURLINFO_PROXYAUTH_USED.md CURLINFO_PROXY_ERROR.md CURLINFO_PROXY_SSL_VERIFYRESULT.md CURLINFO_QUEUE_TIME_T.md CURLINFO_REDIRECT_COUNT.md CURLINFO_REDIRECT_TIME.md CURLINFO_REDIRECT_TIME_T.md CURLINFO_REDIRECT_URL.md CURLINFO_REFERER.md CURLINFO_REQUEST_SIZE.md CURLINFO_RESPONSE_CODE.md CURLINFO_RETRY_AFTER.md CURLINFO_RTSP_CLIENT_CSEQ.md CURLINFO_RTSP_CSEQ_RECV.md CURLINFO_RTSP_SERVER_CSEQ.md CURLINFO_RTSP_SESSION_ID.md CURLINFO_SCHEME.md CURLINFO_SIZE_DELIVERED.md CURLINFO_SIZE_DOWNLOAD.md CURLINFO_SIZE_DOWNLOAD_T.md CURLINFO_SIZE_UPLOAD.md CURLINFO_SIZE_UPLOAD_T.md CURLINFO_SPEED_DOWNLOAD.md CURLINFO_SPEED_DOWNLOAD_T.md CURLINFO_SPEED_UPLOAD.md CURLINFO_SPEED_UPLOAD_T.md CURLINFO_SSL_ENGINES.md CURLINFO_SSL_VERIFYRESULT.md CURLINFO_STARTTRANSFER_TIME.md CURLINFO_STARTTRANSFER_TIME_T.md CURLINFO_TLS_SESSION.md CURLINFO_TLS_SSL_PTR.md CURLINFO_TOTAL_TIME.md CURLINFO_TOTAL_TIME_T.md CURLINFO_USED_PROXY.md CURLINFO_XFER_ID.md CURLMINFO_XFERS_ADDED.md CURLMINFO_XFERS_CURRENT.md CURLMINFO_XFERS_DONE.md CURLMINFO_XFERS_PENDING.md CURLMINFO_XFERS_RUNNING.md CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.md CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.md CURLMOPT_MAXCONNECTS.md CURLMOPT_MAX_CONCURRENT_STREAMS.md CURLMOPT_MAX_HOST_CONNECTIONS.md CURLMOPT_MAX_PIPELINE_LENGTH.md CURLMOPT_MAX_TOTAL_CONNECTIONS.md CURLMOPT_NETWORK_CHANGED.md CURLMOPT_NOTIFYDATA.md CURLMOPT_NOTIFYFUNCTION.md CURLMOPT_PIPELINING.md CURLMOPT_PIPELINING_SERVER_BL.md CURLMOPT_PIPELINING_SITE_BL.md CURLMOPT_PUSHDATA.md CURLMOPT_PUSHFUNCTION.md CURLMOPT_QUICK_EXIT.md CURLMOPT_RESOLVE_THREADS_MAX.md CURLMOPT_SOCKETDATA.md CURLMOPT_SOCKETFUNCTION.md CURLMOPT_TIMERDATA.md CURLMOPT_TIMERFUNCTION.md CURLOPT_ABSTRACT_UNIX_SOCKET.md CURLOPT_ACCEPTTIMEOUT_MS.md CURLOPT_ACCEPT_ENCODING.md CURLOPT_ADDRESS_SCOPE.md CURLOPT_ALTSVC.md CURLOPT_ALTSVC_CTRL.md CURLOPT_APPEND.md CURLOPT_AUTOREFERER.md CURLOPT_AWS_SIGV4.md CURLOPT_BUFFERSIZE.md CURLOPT_CAINFO.md CURLOPT_CAINFO_BLOB.md CURLOPT_CAPATH.md CURLOPT_CA_CACHE_TIMEOUT.md CURLOPT_CERTINFO.md CURLOPT_CHUNK_BGN_FUNCTION.md CURLOPT_CHUNK_DATA.md CURLOPT_CHUNK_END_FUNCTION.md CURLOPT_CLOSESOCKETDATA.md CURLOPT_CLOSESOCKETFUNCTION.md CURLOPT_CONNECTTIMEOUT.md CURLOPT_CONNECTTIMEOUT_MS.md CURLOPT_CONNECT_ONLY.md CURLOPT_CONNECT_TO.md CURLOPT_CONV_FROM_NETWORK_FUNCTION.md CURLOPT_CONV_FROM_UTF8_FUNCTION.md CURLOPT_CONV_TO_NETWORK_FUNCTION.md CURLOPT_COOKIE.md CURLOPT_COOKIEFILE.md CURLOPT_COOKIEJAR.md CURLOPT_COOKIELIST.md CURLOPT_COOKIESESSION.md CURLOPT_COPYPOSTFIELDS.md CURLOPT_CRLF.md CURLOPT_CRLFILE.md CURLOPT_CURLU.md CURLOPT_CUSTOMREQUEST.md CURLOPT_DEBUGDATA.md CURLOPT_DEBUGFUNCTION.md CURLOPT_DEFAULT_PROTOCOL.md CURLOPT_DIRLISTONLY.md CURLOPT_DISALLOW_USERNAME_IN_URL.md CURLOPT_DNS_CACHE_TIMEOUT.md CURLOPT_DNS_INTERFACE.md CURLOPT_DNS_LOCAL_IP4.md CURLOPT_DNS_LOCAL_IP6.md CURLOPT_DNS_SERVERS.md CURLOPT_DNS_SHUFFLE_ADDRESSES.md CURLOPT_DNS_USE_GLOBAL_CACHE.md CURLOPT_DOH_SSL_VERIFYHOST.md CURLOPT_DOH_SSL_VERIFYPEER.md CURLOPT_DOH_SSL_VERIFYSTATUS.md CURLOPT_DOH_URL.md CURLOPT_ECH.md CURLOPT_EGDSOCKET.md CURLOPT_ERRORBUFFER.md CURLOPT_EXPECT_100_TIMEOUT_MS.md CURLOPT_FAILONERROR.md CURLOPT_FILETIME.md CURLOPT_FNMATCH_DATA.md CURLOPT_FNMATCH_FUNCTION.md CURLOPT_FOLLOWLOCATION.md CURLOPT_FORBID_REUSE.md CURLOPT_FRESH_CONNECT.md CURLOPT_FTPPORT.md CURLOPT_FTPSSLAUTH.md CURLOPT_FTP_ACCOUNT.md CURLOPT_FTP_ALTERNATIVE_TO_USER.md CURLOPT_FTP_CREATE_MISSING_DIRS.md CURLOPT_FTP_FILEMETHOD.md CURLOPT_FTP_SKIP_PASV_IP.md CURLOPT_FTP_SSL_CCC.md CURLOPT_FTP_USE_EPRT.md CURLOPT_FTP_USE_EPSV.md CURLOPT_FTP_USE_PRET.md CURLOPT_GSSAPI_DELEGATION.md CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.md CURLOPT_HAPROXYPROTOCOL.md CURLOPT_HAPROXY_CLIENT_IP.md CURLOPT_HEADER.md CURLOPT_HEADERDATA.md CURLOPT_HEADERFUNCTION.md CURLOPT_HEADEROPT.md CURLOPT_HSTS.md CURLOPT_HSTSREADDATA.md CURLOPT_HSTSREADFUNCTION.md CURLOPT_HSTSWRITEDATA.md CURLOPT_HSTSWRITEFUNCTION.md CURLOPT_HSTS_CTRL.md CURLOPT_HTTP09_ALLOWED.md CURLOPT_HTTP200ALIASES.md CURLOPT_HTTPAUTH.md CURLOPT_HTTPGET.md CURLOPT_HTTPHEADER.md CURLOPT_HTTPPOST.md CURLOPT_HTTPPROXYTUNNEL.md CURLOPT_HTTP_CONTENT_DECODING.md CURLOPT_HTTP_TRANSFER_DECODING.md CURLOPT_HTTP_VERSION.md CURLOPT_IGNORE_CONTENT_LENGTH.md CURLOPT_INFILESIZE.md CURLOPT_INFILESIZE_LARGE.md CURLOPT_INTERFACE.md CURLOPT_INTERLEAVEDATA.md CURLOPT_INTERLEAVEFUNCTION.md CURLOPT_IOCTLDATA.md CURLOPT_IOCTLFUNCTION.md CURLOPT_IPRESOLVE.md CURLOPT_ISSUERCERT.md CURLOPT_ISSUERCERT_BLOB.md CURLOPT_KEEP_SENDING_ON_ERROR.md CURLOPT_KEYPASSWD.md CURLOPT_KRBLEVEL.md CURLOPT_LOCALPORT.md CURLOPT_LOCALPORTRANGE.md CURLOPT_LOGIN_OPTIONS.md CURLOPT_LOW_SPEED_LIMIT.md CURLOPT_LOW_SPEED_TIME.md CURLOPT_MAIL_AUTH.md CURLOPT_MAIL_FROM.md CURLOPT_MAIL_RCPT.md CURLOPT_MAIL_RCPT_ALLOWFAILS.md CURLOPT_MAXAGE_CONN.md CURLOPT_MAXCONNECTS.md CURLOPT_MAXFILESIZE.md CURLOPT_MAXFILESIZE_LARGE.md CURLOPT_MAXLIFETIME_CONN.md CURLOPT_MAXREDIRS.md CURLOPT_MAX_RECV_SPEED_LARGE.md CURLOPT_MAX_SEND_SPEED_LARGE.md CURLOPT_MIMEPOST.md CURLOPT_MIME_OPTIONS.md CURLOPT_NETRC.md CURLOPT_NETRC_FILE.md CURLOPT_NEW_DIRECTORY_PERMS.md CURLOPT_NEW_FILE_PERMS.md CURLOPT_NOBODY.md CURLOPT_NOPROGRESS.md CURLOPT_NOPROXY.md CURLOPT_NOSIGNAL.md CURLOPT_OPENSOCKETDATA.md CURLOPT_OPENSOCKETFUNCTION.md CURLOPT_PASSWORD.md CURLOPT_PATH_AS_IS.md CURLOPT_PINNEDPUBLICKEY.md CURLOPT_PIPEWAIT.md CURLOPT_PORT.md CURLOPT_POST.md CURLOPT_POSTFIELDS.md CURLOPT_POSTFIELDSIZE.md CURLOPT_POSTFIELDSIZE_LARGE.md CURLOPT_POSTQUOTE.md CURLOPT_POSTREDIR.md CURLOPT_PREQUOTE.md CURLOPT_PREREQDATA.md CURLOPT_PREREQFUNCTION.md CURLOPT_PRE_PROXY.md CURLOPT_PRIVATE.md CURLOPT_PROGRESSDATA.md CURLOPT_PROGRESSFUNCTION.md CURLOPT_PROTOCOLS.md CURLOPT_PROTOCOLS_STR.md CURLOPT_PROXY.md CURLOPT_PROXYAUTH.md CURLOPT_PROXYHEADER.md CURLOPT_PROXYPASSWORD.md CURLOPT_PROXYPORT.md CURLOPT_PROXYTYPE.md CURLOPT_PROXYUSERNAME.md CURLOPT_PROXYUSERPWD.md CURLOPT_PROXY_CAINFO.md CURLOPT_PROXY_CAINFO_BLOB.md CURLOPT_PROXY_CAPATH.md CURLOPT_PROXY_CRLFILE.md CURLOPT_PROXY_ISSUERCERT.md CURLOPT_PROXY_ISSUERCERT_BLOB.md CURLOPT_PROXY_KEYPASSWD.md CURLOPT_PROXY_PINNEDPUBLICKEY.md CURLOPT_PROXY_SERVICE_NAME.md CURLOPT_PROXY_SSLCERT.md CURLOPT_PROXY_SSLCERTTYPE.md CURLOPT_PROXY_SSLCERT_BLOB.md CURLOPT_PROXY_SSLKEY.md CURLOPT_PROXY_SSLKEYTYPE.md CURLOPT_PROXY_SSLKEY_BLOB.md CURLOPT_PROXY_SSLVERSION.md CURLOPT_PROXY_SSL_CIPHER_LIST.md CURLOPT_PROXY_SSL_OPTIONS.md CURLOPT_PROXY_SSL_VERIFYHOST.md CURLOPT_PROXY_SSL_VERIFYPEER.md CURLOPT_PROXY_TLS13_CIPHERS.md CURLOPT_PROXY_TLSAUTH_PASSWORD.md CURLOPT_PROXY_TLSAUTH_TYPE.md CURLOPT_PROXY_TLSAUTH_USERNAME.md CURLOPT_PROXY_TRANSFER_MODE.md CURLOPT_PUT.md CURLOPT_QUICK_EXIT.md CURLOPT_QUOTE.md CURLOPT_RANDOM_FILE.md CURLOPT_RANGE.md CURLOPT_READDATA.md CURLOPT_READFUNCTION.md CURLOPT_REDIR_PROTOCOLS.md CURLOPT_REDIR_PROTOCOLS_STR.md CURLOPT_REFERER.md CURLOPT_REQUEST_TARGET.md CURLOPT_RESOLVE.md CURLOPT_RESOLVER_START_DATA.md CURLOPT_RESOLVER_START_FUNCTION.md CURLOPT_RESUME_FROM.md CURLOPT_RESUME_FROM_LARGE.md CURLOPT_RTSP_CLIENT_CSEQ.md CURLOPT_RTSP_REQUEST.md CURLOPT_RTSP_SERVER_CSEQ.md CURLOPT_RTSP_SESSION_ID.md CURLOPT_RTSP_STREAM_URI.md CURLOPT_RTSP_TRANSPORT.md CURLOPT_SASL_AUTHZID.md CURLOPT_SASL_IR.md CURLOPT_SEEKDATA.md CURLOPT_SEEKFUNCTION.md CURLOPT_SERVER_RESPONSE_TIMEOUT.md CURLOPT_SERVER_RESPONSE_TIMEOUT_MS.md CURLOPT_SERVICE_NAME.md CURLOPT_SHARE.md CURLOPT_SOCKOPTDATA.md CURLOPT_SOCKOPTFUNCTION.md CURLOPT_SOCKS5_AUTH.md CURLOPT_SOCKS5_GSSAPI_NEC.md CURLOPT_SOCKS5_GSSAPI_SERVICE.md CURLOPT_SSH_AUTH_TYPES.md CURLOPT_SSH_COMPRESSION.md CURLOPT_SSH_HOSTKEYDATA.md CURLOPT_SSH_HOSTKEYFUNCTION.md CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.md CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.md CURLOPT_SSH_KEYDATA.md CURLOPT_SSH_KEYFUNCTION.md CURLOPT_SSH_KNOWNHOSTS.md CURLOPT_SSH_PRIVATE_KEYFILE.md CURLOPT_SSH_PUBLIC_KEYFILE.md CURLOPT_SSLCERT.md CURLOPT_SSLCERTTYPE.md CURLOPT_SSLCERT_BLOB.md CURLOPT_SSLENGINE.md CURLOPT_SSLENGINE_DEFAULT.md CURLOPT_SSLKEY.md CURLOPT_SSLKEYTYPE.md CURLOPT_SSLKEY_BLOB.md CURLOPT_SSLVERSION.md CURLOPT_SSL_CIPHER_LIST.md CURLOPT_SSL_CTX_DATA.md CURLOPT_SSL_CTX_FUNCTION.md CURLOPT_SSL_EC_CURVES.md CURLOPT_SSL_ENABLE_ALPN.md CURLOPT_SSL_ENABLE_NPN.md CURLOPT_SSL_FALSESTART.md CURLOPT_SSL_OPTIONS.md CURLOPT_SSL_SESSIONID_CACHE.md CURLOPT_SSL_SIGNATURE_ALGORITHMS.md CURLOPT_SSL_VERIFYHOST.md CURLOPT_SSL_VERIFYPEER.md CURLOPT_SSL_VERIFYSTATUS.md CURLOPT_STDERR.md CURLOPT_STREAM_DEPENDS.md CURLOPT_STREAM_DEPENDS_E.md CURLOPT_STREAM_WEIGHT.md CURLOPT_SUPPRESS_CONNECT_HEADERS.md CURLOPT_TCP_FASTOPEN.md CURLOPT_TCP_KEEPALIVE.md CURLOPT_TCP_KEEPCNT.md CURLOPT_TCP_KEEPIDLE.md CURLOPT_TCP_KEEPINTVL.md CURLOPT_TCP_NODELAY.md CURLOPT_TELNETOPTIONS.md CURLOPT_TFTP_BLKSIZE.md CURLOPT_TFTP_NO_OPTIONS.md CURLOPT_TIMECONDITION.md CURLOPT_TIMEOUT.md CURLOPT_TIMEOUT_MS.md CURLOPT_TIMEVALUE.md CURLOPT_TIMEVALUE_LARGE.md CURLOPT_TLS13_CIPHERS.md CURLOPT_TLSAUTH_PASSWORD.md CURLOPT_TLSAUTH_TYPE.md CURLOPT_TLSAUTH_USERNAME.md CURLOPT_TRAILERDATA.md CURLOPT_TRAILERFUNCTION.md CURLOPT_TRANSFERTEXT.md CURLOPT_TRANSFER_ENCODING.md CURLOPT_UNIX_SOCKET_PATH.md CURLOPT_UNRESTRICTED_AUTH.md CURLOPT_UPKEEP_INTERVAL_MS.md CURLOPT_UPLOAD.md CURLOPT_UPLOAD_BUFFERSIZE.md CURLOPT_UPLOAD_FLAGS.md CURLOPT_URL.md CURLOPT_USERAGENT.md CURLOPT_USERNAME.md CURLOPT_USERPWD.md CURLOPT_USE_SSL.md CURLOPT_VERBOSE.md CURLOPT_WILDCARDMATCH.md CURLOPT_WRITEDATA.md CURLOPT_WRITEFUNCTION.md CURLOPT_WS_OPTIONS.md CURLOPT_XFERINFODATA.md CURLOPT_XFERINFOFUNCTION.md CURLOPT_XOAUTH2_BEARER.md CURLSHOPT_LOCKFUNC.md CURLSHOPT_SHARE.md CURLSHOPT_UNLOCKFUNC.md CURLSHOPT_UNSHARE.md CURLSHOPT_USERDATA.md Makefile.am Makefile.incinclude
curl
Makefile.am curl.h curlver.h easy.h header.h mprintf.h multi.h options.h stdcheaders.h system.h typecheck-gcc.h urlapi.h websockets.hlib
curlx
base64.c base64.h basename.c basename.h dynbuf.c dynbuf.h fopen.c fopen.h inet_ntop.c inet_ntop.h inet_pton.c inet_pton.h multibyte.c multibyte.h nonblock.c nonblock.h snprintf.c snprintf.h strcopy.c strcopy.h strdup.c strdup.h strerr.c strerr.h strparse.c strparse.h timediff.c timediff.h timeval.c timeval.h version_win32.c version_win32.h wait.c wait.h warnless.c warnless.h winapi.c winapi.hvauth
cleartext.c cram.c digest.c digest.h digest_sspi.c gsasl.c krb5_gssapi.c krb5_sspi.c ntlm.c ntlm_sspi.c oauth2.c spnego_gssapi.c spnego_sspi.c vauth.c vauth.hvquic
curl_ngtcp2.c curl_ngtcp2.h curl_quiche.c curl_quiche.h vquic-tls.c vquic-tls.h vquic.c vquic.h vquic_int.hvtls
apple.c apple.h cipher_suite.c cipher_suite.h gtls.c gtls.h hostcheck.c hostcheck.h keylog.c keylog.h mbedtls.c mbedtls.h openssl.c openssl.h rustls.c rustls.h schannel.c schannel.h schannel_int.h schannel_verify.c vtls.c vtls.h vtls_int.h vtls_scache.c vtls_scache.h vtls_spack.c vtls_spack.h wolfssl.c wolfssl.h x509asn1.c x509asn1.hm4
.gitignore curl-amissl.m4 curl-apple-sectrust.m4 curl-compilers.m4 curl-confopts.m4 curl-functions.m4 curl-gnutls.m4 curl-mbedtls.m4 curl-openssl.m4 curl-override.m4 curl-reentrant.m4 curl-rustls.m4 curl-schannel.m4 curl-sysconfig.m4 curl-wolfssl.m4 xc-am-iface.m4 xc-cc-check.m4 xc-lt-iface.m4 xc-val-flgs.m4 zz40-xc-ovr.m4 zz50-xc-ovr.m4projects
OS400
.checksrc README.OS400 ccsidcurl.c ccsidcurl.h config400.default curl.cmd curl.inc.in curlcl.c curlmain.c initscript.sh make-docs.sh make-include.sh make-lib.sh make-src.sh make-tests.sh makefile.sh os400sys.c os400sys.hWindows
tmpl
.gitattributes README.txt curl-all.sln curl.sln curl.vcxproj curl.vcxproj.filters libcurl.sln libcurl.vcxproj libcurl.vcxproj.filtersvms
Makefile.am backup_gnv_curl_src.com build_curl-config_script.com build_gnv_curl.com build_gnv_curl_pcsi_desc.com build_gnv_curl_pcsi_text.com build_gnv_curl_release_notes.com build_libcurl_pc.com build_vms.com clean_gnv_curl.com compare_curl_source.com config_h.com curl_crtl_init.c curl_gnv_build_steps.txt curl_release_note_start.txt curl_startup.com curlmsg.h curlmsg.msg curlmsg.sdl curlmsg_vms.h generate_config_vms_h_curl.com generate_vax_transfer.com gnv_conftest.c_first gnv_curl_configure.sh gnv_libcurl_symbols.opt gnv_link_curl.com macro32_exactcase.patch make_gnv_curl_install.sh make_pcsi_curl_kit_name.com pcsi_gnv_curl_file_list.txt pcsi_product_gnv_curl.com readme report_openssl_version.c setup_gnv_curl_build.com stage_curl_install.com vms_eco_level.hscripts
.checksrc CMakeLists.txt Makefile.am badwords badwords-all badwords.txt cd2cd cd2nroff cdall checksrc-all.pl checksrc.pl cmakelint.sh completion.pl contributors.sh contrithanks.sh coverage.sh delta dmaketgz extract-unit-protos firefox-db2pem.sh installcheck.sh maketgz managen mdlinkcheck mk-ca-bundle.pl mk-unity.pl nroff2cd perlcheck.sh pythonlint.sh randdisable release-notes.pl release-tools.sh schemetable.c singleuse.pl spacecheck.pl top-complexity top-length verify-release wcurlsrc
.checksrc .gitignore CMakeLists.txt Makefile.am Makefile.inc config2setopts.c config2setopts.h curl.rc curlinfo.c mk-file-embed.pl mkhelp.pl slist_wc.c slist_wc.h terminal.c terminal.h tool_cb_dbg.c tool_cb_dbg.h tool_cb_hdr.c tool_cb_hdr.h tool_cb_prg.c tool_cb_prg.h tool_cb_rea.c tool_cb_rea.h tool_cb_see.c tool_cb_see.h tool_cb_soc.c tool_cb_soc.h tool_cb_wrt.c tool_cb_wrt.h tool_cfgable.c tool_cfgable.h tool_dirhie.c tool_dirhie.h tool_doswin.c tool_doswin.h tool_easysrc.c tool_easysrc.h tool_filetime.c tool_filetime.h tool_findfile.c tool_findfile.h tool_formparse.c tool_formparse.h tool_getparam.c tool_getparam.h tool_getpass.c tool_getpass.h tool_help.c tool_help.h tool_helpers.c tool_helpers.h tool_hugehelp.h tool_ipfs.c tool_ipfs.h tool_libinfo.c tool_libinfo.h tool_listhelp.c tool_main.c tool_main.h tool_msgs.c tool_msgs.h tool_operate.c tool_operate.h tool_operhlp.c tool_operhlp.h tool_paramhlp.c tool_paramhlp.h tool_parsecfg.c tool_parsecfg.h tool_progress.c tool_progress.h tool_sdecls.h tool_setopt.c tool_setopt.h tool_setup.h tool_ssls.c tool_ssls.h tool_stderr.c tool_stderr.h tool_urlglob.c tool_urlglob.h tool_util.c tool_util.h tool_version.h tool_vms.c tool_vms.h tool_writeout.c tool_writeout.h tool_writeout_json.c tool_writeout_json.h tool_xattr.c tool_xattr.h var.c var.htests
certs
.gitignore CMakeLists.txt Makefile.am Makefile.inc genserv.pl srp-verifier-conf srp-verifier-db test-ca.cnf test-ca.prm test-client-cert.prm test-client-eku-only.prm test-localhost-san-first.prm test-localhost-san-last.prm test-localhost.nn.prm test-localhost.prm test-localhost0h.prmdata
.gitignore DISABLED Makefile.am data-xml1 data1400.c data1401.c data1402.c data1403.c data1404.c data1405.c data1406.c data1407.c data1420.c data1461.txt data1463.txt data1465.c data1481.c data1705-1.md data1705-2.md data1705-3.md data1705-4.md data1705-stdout.1 data1706-1.md data1706-2.md data1706-3.md data1706-4.md data1706-stdout.txt data320.html test1 test10 test100 test1000 test1001 test1002 test1003 test1004 test1005 test1006 test1007 test1008 test1009 test101 test1010 test1011 test1012 test1013 test1014 test1015 test1016 test1017 test1018 test1019 test102 test1020 test1021 test1022 test1023 test1024 test1025 test1026 test1027 test1028 test1029 test103 test1030 test1031 test1032 test1033 test1034 test1035 test1036 test1037 test1038 test1039 test104 test1040 test1041 test1042 test1043 test1044 test1045 test1046 test1047 test1048 test1049 test105 test1050 test1051 test1052 test1053 test1054 test1055 test1056 test1057 test1058 test1059 test106 test1060 test1061 test1062 test1063 test1064 test1065 test1066 test1067 test1068 test1069 test107 test1070 test1071 test1072 test1073 test1074 test1075 test1076 test1077 test1078 test1079 test108 test1080 test1081 test1082 test1083 test1084 test1085 test1086 test1087 test1088 test1089 test109 test1090 test1091 test1092 test1093 test1094 test1095 test1096 test1097 test1098 test1099 test11 test110 test1100 test1101 test1102 test1103 test1104 test1105 test1106 test1107 test1108 test1109 test111 test1110 test1111 test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 test112 test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 test1128 test1129 test113 test1130 test1131 test1132 test1133 test1134 test1135 test1136 test1137 test1138 test1139 test114 test1140 test1141 test1142 test1143 test1144 test1145 test1146 test1147 test1148 test1149 test115 test1150 test1151 test1152 test1153 test1154 test1155 test1156 test1157 test1158 test1159 test116 test1160 test1161 test1162 test1163 test1164 test1165 test1166 test1167 test1168 test1169 test117 test1170 test1171 test1172 test1173 test1174 test1175 test1176 test1177 test1178 test1179 test118 test1180 test1181 test1182 test1183 test1184 test1185 test1186 test1187 test1188 test1189 test119 test1190 test1191 test1192 test1193 test1194 test1195 test1196 test1197 test1198 test1199 test12 test120 test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 test1208 test1209 test121 test1210 test1211 test1212 test1213 test1214 test1215 test1216 test1217 test1218 test1219 test122 test1220 test1221 test1222 test1223 test1224 test1225 test1226 test1227 test1228 test1229 test123 test1230 test1231 test1232 test1233 test1234 test1235 test1236 test1237 test1238 test1239 test124 test1240 test1241 test1242 test1243 test1244 test1245 test1246 test1247 test1248 test1249 test125 test1250 test1251 test1252 test1253 test1254 test1255 test1256 test1257 test1258 test1259 test126 test1260 test1261 test1262 test1263 test1264 test1265 test1266 test1267 test1268 test1269 test127 test1270 test1271 test1272 test1273 test1274 test1275 test1276 test1277 test1278 test1279 test128 test1280 test1281 test1282 test1283 test1284 test1285 test1286 test1287 test1288 test1289 test129 test1290 test1291 test1292 test1293 test1294 test1295 test1296 test1297 test1298 test1299 test13 test130 test1300 test1301 test1302 test1303 test1304 test1305 test1306 test1307 test1308 test1309 test131 test1310 test1311 test1312 test1313 test1314 test1315 test1316 test1317 test1318 test1319 test132 test1320 test1321 test1322 test1323 test1324 test1325 test1326 test1327 test1328 test1329 test133 test1330 test1331 test1332 test1333 test1334 test1335 test1336 test1337 test1338 test1339 test134 test1340 test1341 test1342 test1343 test1344 test1345 test1346 test1347 test1348 test1349 test135 test1350 test1351 test1352 test1353 test1354 test1355 test1356 test1357 test1358 test1359 test136 test1360 test1361 test1362 test1363 test1364 test1365 test1366 test1367 test1368 test1369 test137 test1370 test1371 test1372 test1373 test1374 test1375 test1376 test1377 test1378 test1379 test138 test1380 test1381 test1382 test1383 test1384 test1385 test1386 test1387 test1388 test1389 test139 test1390 test1391 test1392 test1393 test1394 test1395 test1396 test1397 test1398 test1399 test14 test140 test1400 test1401 test1402 test1403 test1404 test1405 test1406 test1407 test1408 test1409 test141 test1410 test1411 test1412 test1413 test1414 test1415 test1416 test1417 test1418 test1419 test142 test1420 test1421 test1422 test1423 test1424 test1425 test1426 test1427 test1428 test1429 test143 test1430 test1431 test1432 test1433 test1434 test1435 test1436 test1437 test1438 test1439 test144 test1440 test1441 test1442 test1443 test1444 test1445 test1446 test1447 test1448 test1449 test145 test1450 test1451 test1452 test1453 test1454 test1455 test1456 test1457 test1458 test1459 test146 test1460 test1461 test1462 test1463 test1464 test1465 test1466 test1467 test1468 test1469 test147 test1470 test1471 test1472 test1473 test1474 test1475 test1476 test1477 test1478 test1479 test148 test1480 test1481 test1482 test1483 test1484 test1485 test1486 test1487 test1488 test1489 test149 test1490 test1491 test1492 test1493 test1494 test1495 test1496 test1497 test1498 test1499 test15 test150 test1500 test1501 test1502 test1503 test1504 test1505 test1506 test1507 test1508 test1509 test151 test1510 test1511 test1512 test1513 test1514 test1515 test1516 test1517 test1518 test1519 test152 test1520 test1521 test1522 test1523 test1524 test1525 test1526 test1527 test1528 test1529 test153 test1530 test1531 test1532 test1533 test1534 test1535 test1536 test1537 test1538 test1539 test154 test1540 test1541 test1542 test1543 test1544 test1545 test1546 test1547 test1548 test1549 test155 test1550 test1551 test1552 test1553 test1554 test1555 test1556 test1557 test1558 test1559 test156 test1560 test1561 test1562 test1563 test1564 test1565 test1566 test1567 test1568 test1569 test157 test1570 test1571 test1572 test1573 test1574 test1575 test1576 test1577 test1578 test1579 test158 test1580 test1581 test1582 test1583 test1584 test1585 test1586 test1587 test1588 test1589 test159 test1590 test1591 test1592 test1593 test1594 test1595 test1596 test1597 test1598 test1599 test16 test160 test1600 test1601 test1602 test1603 test1604 test1605 test1606 test1607 test1608 test1609 test161 test1610 test1611 test1612 test1613 test1614 test1615 test1616 test1617 test1618 test1619 test162 test1620 test1621 test1622 test1623 test1624 test1625 test1626 test1627 test1628 test1629 test163 test1630 test1631 test1632 test1633 test1634 test1635 test1636 test1637 test1638 test1639 test164 test1640 test1641 test1642 test1643 test1644 test1645 test165 test1650 test1651 test1652 test1653 test1654 test1655 test1656 test1657 test1658 test1659 test166 test1660 test1661 test1662 test1663 test1664 test1665 test1666 test1667 test1668 test1669 test167 test1670 test1671 test1672 test1673 test1674 test1675 test1676 test168 test1680 test1681 test1682 test1683 test1684 test1685 test169 test17 test170 test1700 test1701 test1702 test1703 test1704 test1705 test1706 test1707 test1708 test1709 test171 test1710 test1711 test1712 test1713 test1714 test1715 test172 test1720 test1721 test173 test174 test175 test176 test177 test178 test179 test18 test180 test1800 test1801 test1802 test181 test182 test183 test184 test1847 test1848 test1849 test185 test1850 test1851 test186 test187 test188 test189 test19 test190 test1900 test1901 test1902 test1903 test1904 test1905 test1906 test1907 test1908 test1909 test191 test1910 test1911 test1912 test1913 test1914 test1915 test1916 test1917 test1918 test1919 test192 test1920 test1921 test193 test1933 test1934 test1935 test1936 test1937 test1938 test1939 test194 test1940 test1941 test1942 test1943 test1944 test1945 test1946 test1947 test1948 test195 test1955 test1956 test1957 test1958 test1959 test196 test1960 test1964 test1965 test1966 test197 test1970 test1971 test1972 test1973 test1974 test1975 test1976 test1977 test1978 test1979 test198 test1980 test1981 test1982 test1983 test1984 test199 test2 test20 test200 test2000 test2001 test2002 test2003 test2004 test2005 test2006 test2007 test2008 test2009 test201 test2010 test2011 test2012 test2013 test2014 test202 test2023 test2024 test2025 test2026 test2027 test2028 test2029 test203 test2030 test2031 test2032 test2033 test2034 test2035 test2037 test2038 test2039 test204 test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 test2048 test2049 test205 test2050 test2051 test2052 test2053 test2054 test2055 test2056 test2057 test2058 test2059 test206 test2060 test2061 test2062 test2063 test2064 test2065 test2066 test2067 test2068 test2069 test207 test2070 test2071 test2072 test2073 test2074 test2075 test2076 test2077 test2078 test2079 test208 test2080 test2081 test2082 test2083 test2084 test2085 test2086 test2087 test2088 test2089 test209 test2090 test2091 test2092 test21 test210 test2100 test2101 test2102 test2103 test2104 test211 test212 test213 test214 test215 test216 test217 test218 test219 test22 test220 test2200 test2201 test2202 test2203 test2204 test2205 test2206 test2207 test221 test222 test223 test224 test225 test226 test227 test228 test229 test23 test230 test2300 test2301 test2302 test2303 test2304 test2306 test2307 test2308 test2309 test231 test232 test233 test234 test235 test236 test237 test238 test239 test24 test240 test2400 test2401 test2402 test2403 test2404 test2405 test2406 test2407 test2408 test2409 test241 test2410 test2411 test242 test243 test244 test245 test246 test247 test248 test249 test25 test250 test2500 test2501 test2502 test2503 test2504 test2505 test2506 test251 test252 test253 test254 test255 test256 test257 test258 test259 test26 test260 test2600 test2601 test2602 test2603 test2604 test2605 test261 test262 test263 test264 test265 test266 test267 test268 test269 test27 test270 test2700 test2701 test2702 test2703 test2704 test2705 test2706 test2707 test2708 test2709 test271 test2710 test2711 test2712 test2713 test2714 test2715 test2716 test2717 test2718 test2719 test272 test2720 test2721 test2722 test2723 test273 test274 test275 test276 test277 test278 test279 test28 test280 test281 test282 test283 test284 test285 test286 test287 test288 test289 test29 test290 test291 test292 test293 test294 test295 test296 test297 test298 test299 test3 test30 test300 test3000 test3001 test3002 test3003 test3004 test3005 test3006 test3007 test3008 test3009 test301 test3010 test3011 test3012 test3013 test3014 test3015 test3016 test3017 test3018 test3019 test302 test3020 test3021 test3022 test3023 test3024 test3025 test3026 test3027 test3028 test3029 test303 test3030 test3031 test3032 test3033 test3034 test3035 test3036 test304 test305 test306 test307 test308 test309 test31 test310 test3100 test3101 test3102 test3103 test3104 test3105 test3106 test311 test312 test313 test314 test315 test316 test317 test318 test319 test32 test320 test3200 test3201 test3202 test3203 test3204 test3205 test3206 test3207 test3208 test3209 test321 test3210 test3211 test3212 test3213 test3214 test3215 test3216 test3217 test3218 test3219 test322 test3220 test323 test324 test325 test326 test327 test328 test329 test33 test330 test3300 test3301 test3302 test331 test332 test333 test334 test335 test336 test337 test338 test339 test34 test340 test341 test342 test343 test344 test345 test346 test347 test348 test349 test35 test350 test351 test352 test353 test354 test355 test356 test357 test358 test359 test36 test360 test361 test362 test363 test364 test365 test366 test367 test368 test369 test37 test370 test371 test372 test373 test374 test375 test376 test378 test379 test38 test380 test381 test383 test384 test385 test386 test387 test388 test389 test39 test390 test391 test392 test393 test394 test395 test396 test397 test398 test399 test4 test40 test400 test4000 test4001 test401 test402 test403 test404 test405 test406 test407 test408 test409 test41 test410 test411 test412 test413 test414 test415 test416 test417 test418 test419 test42 test420 test421 test422 test423 test424 test425 test426 test427 test428 test429 test43 test430 test431 test432 test433 test434 test435 test436 test437 test438 test439 test44 test440 test441 test442 test443 test444 test445 test446 test447 test448 test449 test45 test450 test451 test452 test453 test454 test455 test456 test457 test458 test459 test46 test460 test461 test462 test463 test467 test468 test469 test47 test470 test471 test472 test473 test474 test475 test476 test477 test478 test479 test48 test480 test481 test482 test483 test484 test485 test486 test487 test488 test489 test49 test490 test491 test492 test493 test494 test495 test496 test497 test498 test499 test5 test50 test500 test501 test502 test503 test504 test505 test506 test507 test508 test509 test51 test510 test511 test512 test513 test514 test515 test516 test517 test518 test519 test52 test520 test521 test522 test523 test524 test525 test526 test527 test528 test529 test53 test530 test531 test532 test533 test534 test535 test536 test537 test538 test539 test54 test540 test541 test542 test543 test544 test545 test546 test547 test548 test549 test55 test550 test551 test552 test553 test554 test555 test556 test557 test558 test559 test56 test560 test561 test562 test563 test564 test565 test566 test567 test568 test569 test57 test570 test571 test572 test573 test574 test575 test576 test577 test578 test579 test58 test580 test581 test582 test583 test584 test585 test586 test587 test588 test589 test59 test590 test591 test592 test593 test594 test595 test596 test597 test598 test599 test6 test60 test600 test601 test602 test603 test604 test605 test606 test607 test608 test609 test61 test610 test611 test612 test613 test614 test615 test616 test617 test618 test619 test62 test620 test621 test622 test623 test624 test625 test626 test627 test628 test629 test63 test630 test631 test632 test633 test634 test635 test636 test637 test638 test639 test64 test640 test641 test642 test643 test644 test645 test646 test647 test648 test649 test65 test650 test651 test652 test653 test654 test655 test656 test658 test659 test66 test660 test661 test662 test663 test664 test665 test666 test667 test668 test669 test67 test670 test671 test672 test673 test674 test675 test676 test677 test678 test679 test68 test680 test681 test682 test683 test684 test685 test686 test687 test688 test689 test69 test690 test691 test692 test693 test694 test695 test696 test697 test698 test699 test7 test70 test700 test701 test702 test703 test704 test705 test706 test707 test708 test709 test71 test710 test711 test712 test713 test714 test715 test716 test717 test718 test719 test72 test720 test721 test722 test723 test724 test725 test726 test727 test728 test729 test73 test730 test731 test732 test733 test734 test735 test736 test737 test738 test739 test74 test740 test741 test742 test743 test744 test745 test746 test747 test748 test749 test75 test750 test751 test752 test753 test754 test755 test756 test757 test758 test759 test76 test760 test761 test762 test763 test764 test765 test766 test767 test768 test769 test77 test770 test771 test772 test773 test774 test775 test776 test777 test778 test779 test78 test780 test781 test782 test783 test784 test785 test786 test787 test788 test789 test79 test790 test791 test792 test793 test794 test795 test796 test797 test798 test799 test8 test80 test800 test801 test802 test803 test804 test805 test806 test807 test808 test809 test81 test810 test811 test812 test813 test814 test815 test816 test817 test818 test819 test82 test820 test821 test822 test823 test824 test825 test826 test827 test828 test829 test83 test830 test831 test832 test833 test834 test835 test836 test837 test838 test839 test84 test840 test841 test842 test843 test844 test845 test846 test847 test848 test849 test85 test850 test851 test852 test853 test854 test855 test856 test857 test858 test859 test86 test860 test861 test862 test863 test864 test865 test866 test867 test868 test869 test87 test870 test871 test872 test873 test874 test875 test876 test877 test878 test879 test88 test880 test881 test882 test883 test884 test885 test886 test887 test888 test889 test89 test890 test891 test892 test893 test894 test895 test896 test897 test898 test899 test9 test90 test900 test901 test902 test903 test904 test905 test906 test907 test908 test909 test91 test910 test911 test912 test913 test914 test915 test916 test917 test918 test919 test92 test920 test921 test922 test923 test924 test925 test926 test927 test928 test929 test93 test930 test931 test932 test933 test934 test935 test936 test937 test938 test939 test94 test940 test941 test942 test943 test944 test945 test946 test947 test948 test949 test95 test950 test951 test952 test953 test954 test955 test956 test957 test958 test959 test96 test960 test961 test962 test963 test964 test965 test966 test967 test968 test969 test97 test970 test971 test972 test973 test974 test975 test976 test977 test978 test979 test98 test980 test981 test982 test983 test984 test985 test986 test987 test988 test989 test99 test990 test991 test992 test993 test994 test995 test996 test997 test998 test999http
testenv
__init__.py caddy.py certs.py client.py curl.py dante.py dnsd.py env.py httpd.py nghttpx.py ports.py sshd.py vsftpd.py ws_echo_server.pylibtest
.gitignore CMakeLists.txt Makefile.am Makefile.inc cli_ftp_upload.c cli_h2_pausing.c cli_h2_serverpush.c cli_h2_upgrade_extreme.c cli_hx_download.c cli_hx_upload.c cli_tls_session_reuse.c cli_upload_pausing.c cli_ws_data.c cli_ws_pingpong.c first.c first.h lib1156.c lib1301.c lib1308.c lib1485.c lib1500.c lib1501.c lib1502.c lib1506.c lib1507.c lib1508.c lib1509.c lib1510.c lib1511.c lib1512.c lib1513.c lib1514.c lib1515.c lib1517.c lib1518.c lib1520.c lib1522.c lib1523.c lib1525.c lib1526.c lib1527.c lib1528.c lib1529.c lib1530.c lib1531.c lib1532.c lib1533.c lib1534.c lib1535.c lib1536.c lib1537.c lib1538.c lib1540.c lib1541.c lib1542.c lib1545.c lib1549.c lib1550.c lib1551.c lib1552.c lib1553.c lib1554.c lib1555.c lib1556.c lib1557.c lib1558.c lib1559.c lib1560.c lib1564.c lib1565.c lib1567.c lib1568.c lib1569.c lib1571.c lib1576.c lib1582.c lib1587.c lib1588.c lib1589.c lib1591.c lib1592.c lib1593.c lib1594.c lib1597.c lib1598.c lib1599.c lib1662.c lib1900.c lib1901.c lib1902.c lib1903.c lib1905.c lib1906.c lib1907.c lib1908.c lib1910.c lib1911.c lib1912.c lib1913.c lib1915.c lib1916.c lib1918.c lib1919.c lib1920.c lib1921.c lib1933.c lib1934.c lib1935.c lib1936.c lib1937.c lib1938.c lib1939.c lib1940.c lib1945.c lib1947.c lib1948.c lib1955.c lib1956.c lib1957.c lib1958.c lib1959.c lib1960.c lib1964.c lib1965.c lib1970.c lib1971.c lib1972.c lib1973.c lib1974.c lib1975.c lib1977.c lib1978.c lib2023.c lib2032.c lib2082.c lib2301.c lib2302.c lib2304.c lib2306.c lib2308.c lib2309.c lib2402.c lib2404.c lib2405.c lib2502.c lib2504.c lib2505.c lib2506.c lib2700.c lib3010.c lib3025.c lib3026.c lib3027.c lib3033.c lib3034.c lib3100.c lib3101.c lib3102.c lib3103.c lib3104.c lib3105.c lib3207.c lib3208.c lib500.c lib501.c lib502.c lib503.c lib504.c lib505.c lib506.c lib507.c lib508.c lib509.c lib510.c lib511.c lib512.c lib513.c lib514.c lib515.c lib516.c lib517.c lib518.c lib519.c lib520.c lib521.c lib523.c lib524.c lib525.c lib526.c lib530.c lib533.c lib536.c lib537.c lib539.c lib540.c lib541.c lib542.c lib543.c lib544.c lib547.c lib549.c lib552.c lib553.c lib554.c lib555.c lib556.c lib557.c lib558.c lib559.c lib560.c lib562.c lib564.c lib566.c lib567.c lib568.c lib569.c lib570.c lib571.c lib572.c lib573.c lib574.c lib575.c lib576.c lib578.c lib579.c lib582.c lib583.c lib586.c lib589.c lib590.c lib591.c lib597.c lib598.c lib599.c lib643.c lib650.c lib651.c lib652.c lib653.c lib654.c lib655.c lib658.c lib659.c lib661.c lib666.c lib667.c lib668.c lib670.c lib674.c lib676.c lib677.c lib678.c lib694.c lib695.c lib751.c lib753.c lib757.c lib758.c lib766.c memptr.c mk-lib1521.pl test1013.pl test1022.pl test307.pl test610.pl test613.pl testtrace.c testtrace.h testutil.c testutil.h unitcheck.hserver
.checksrc .gitignore CMakeLists.txt Makefile.am Makefile.inc dnsd.c first.c first.h getpart.c mqttd.c resolve.c rtspd.c sockfilt.c socksd.c sws.c tftpd.c util.ctunit
.gitignore CMakeLists.txt Makefile.am Makefile.inc README.md tool1394.c tool1604.c tool1621.c tool1622.c tool1623.c tool1720.cunit
.gitignore CMakeLists.txt Makefile.am Makefile.inc README.md unit1300.c unit1302.c unit1303.c unit1304.c unit1305.c unit1307.c unit1309.c unit1323.c unit1330.c unit1395.c unit1396.c unit1397.c unit1398.c unit1399.c unit1600.c unit1601.c unit1602.c unit1603.c unit1605.c unit1606.c unit1607.c unit1608.c unit1609.c unit1610.c unit1611.c unit1612.c unit1614.c unit1615.c unit1616.c unit1620.c unit1625.c unit1626.c unit1627.c unit1636.c unit1650.c unit1651.c unit1652.c unit1653.c unit1654.c unit1655.c unit1656.c unit1657.c unit1658.c unit1660.c unit1661.c unit1663.c unit1664.c unit1666.c unit1667.c unit1668.c unit1669.c unit1674.c unit1675.c unit1676.c unit1979.c unit1980.c unit2600.c unit2601.c unit2602.c unit2603.c unit2604.c unit2605.c unit3200.c unit3205.c unit3211.c unit3212.c unit3213.c unit3214.c unit3216.c unit3219.c unit3300.c unit3301.c unit3302.cexamples
.env config.ini crypto_test.lua env_test.lua fs_example.lua http_server.lua https_test.lua ini_example.lua json.lua log.lua path_fs_example.lua process_example.lua request_download.lua request_test.lua run_all.lua sqlite_example.lua sqlite_http_template.lua stash_test.lua template_test.lua timer.lua websocket.luainiparser
example
iniexample.c iniwrite.c parse.c twisted-errors.ini twisted-genhuge.py twisted-ofkey.ini twisted-ofval.ini twisted.initest
CMakeLists.txt test_dictionary.c test_iniparser.c unity-config.yml unity_config.hjinjac
libjinjac
src
CMakeLists.txt ast.c ast.h block_statement.c block_statement.h buffer.c buffer.h buildin.c buildin.h common.h convert.c convert.h flex_decl.h jfunction.c jfunction.h jinja_expression.l jinja_expression.y jinjac_parse.c jinjac_parse.h jinjac_stream.c jinjac_stream.h jlist.c jlist.h jobject.c jobject.h parameter.c parameter.h str_obj.c str_obj.h trace.c trace.htest
.gitignore CMakeLists.txt autotest.rb test_01.expected test_01.jinja test_01b.expected test_01b.jinja test_01c.expected test_01c.jinja test_01d.expected test_01d.jinja test_02.expected test_02.jinja test_03.expected test_03.jinja test_04.expected test_04.jinja test_05.expected test_05.jinja test_06.expected test_06.jinja test_07.expected test_07.jinja test_08.expected test_08.jinja test_08b.expected test_08b.jinja test_09.expected test_09.jinja test_10.expected test_10.jinja test_11.expected test_11.jinja test_12.expected test_12.jinja test_13.expected test_13.jinja test_14.expected test_14.jinja test_15.expected test_15.jinja test_16.expected test_16.jinja test_17.expected test_17.jinja test_18.expected test_18.jinja test_18b.expected test_18b.jinja test_18c.expected test_18c.jinja test_19.expected test_19.jinja test_19b.expected test_19b.jinja test_19c.expected test_19c.jinja test_19d.expected test_19d.jinja test_19e.expected test_19e.jinja test_19f.expected test_19f.jinja test_20.expected test_20.jinja test_21.expected test_21.jinja test_22.expected test_22.jinja test_22a.expected test_22a.jinja test_22b.expected test_22b.jinja test_23.expected test_23.jinja test_24.expected test_24.jinjalibev
Changes LICENSE Makefile Makefile.am Makefile.in README Symbols.ev Symbols.event aclocal.m4 autogen.sh compile config.guess config.h config.h.in config.status config.sub configure configure.ac depcomp ev++.h ev.3 ev.c ev.h ev.pod ev_epoll.c ev_kqueue.c ev_poll.c ev_port.c ev_select.c ev_vars.h ev_win32.c ev_wrap.h event.c event.h install-sh libev.m4 libtool ltmain.sh missing mkinstalldirs stamp-h1luajit
doc
bluequad-print.css bluequad.css contact.html ext_buffer.html ext_c_api.html ext_ffi.html ext_ffi_api.html ext_ffi_semantics.html ext_ffi_tutorial.html ext_jit.html ext_profiler.html extensions.html install.html luajit.html running.htmldynasm
dasm_arm.h dasm_arm.lua dasm_arm64.h dasm_arm64.lua dasm_mips.h dasm_mips.lua dasm_mips64.lua dasm_ppc.h dasm_ppc.lua dasm_proto.h dasm_x64.lua dasm_x86.h dasm_x86.lua dynasm.luasrc
host
.gitignore README buildvm.c buildvm.h buildvm_asm.c buildvm_fold.c buildvm_lib.c buildvm_libbc.h buildvm_peobj.c genlibbc.lua genminilua.lua genversion.lua minilua.cjit
.gitignore bc.lua bcsave.lua dis_arm.lua dis_arm64.lua dis_arm64be.lua dis_mips.lua dis_mips64.lua dis_mips64el.lua dis_mips64r6.lua dis_mips64r6el.lua dis_mipsel.lua dis_ppc.lua dis_x64.lua dis_x86.lua dump.lua p.lua v.lua zone.luawolfssl
.github
workflows
ada.yml arduino.yml async-examples.yml async.yml atecc608-sim.yml bind.yml cmake-autoconf.yml cmake.yml codespell.yml coverity-scan-fixes.yml cryptocb-only.yml curl.yml cyrus-sasl.yml disable-pk-algs.yml docker-Espressif.yml docker-OpenWrt.yml emnet-nonblock.yml fil-c.yml freertos-mem-track.yml gencertbuf.yml grpc.yml haproxy.yml hostap-vm.yml intelasm-c-fallback.yml ipmitool.yml jwt-cpp.yml krb5.yml libspdm.yml libssh2.yml libvncserver.yml linuxkm.yml macos-apple-native-cert-validation.yml mbedtls.sh mbedtls.yml membrowse-comment.yml membrowse-onboard.yml membrowse-report.yml memcached.sh memcached.yml mono.yml mosquitto.yml msmtp.yml msys2.yml multi-arch.yml multi-compiler.yml net-snmp.yml nginx.yml no-malloc.yml no-tls.yml nss.sh nss.yml ntp.yml ocsp.yml openldap.yml openssh.yml openssl-ech.yml opensslcoexist.yml openvpn.yml os-check.yml packaging.yml pam-ipmi.yml pq-all.yml pr-commit-check.yml psk.yml puf.yml python.yml rng-tools.yml rust-wrapper.yml se050-sim.yml smallStackSize.yml socat.yml softhsm.yml sssd.yml stm32-sim.yml stsafe-a120-sim.yml stunnel.yml symbol-prefixes.yml threadx.yml tls-anvil.yml trackmemory.yml watcomc.yml win-csharp-test.yml wolfCrypt-Wconversion.yml wolfboot-integration.yml wolfsm.yml xcode.yml zephyr-4.x.yml zephyr.ymlIDE
ARDUINO
Arduino_README_prepend.md README.md include.am keywords.txt library.properties.template wolfssl-arduino.cpp wolfssl-arduino.sh wolfssl.hECLIPSE
Espressif
ESP-IDF
examples
template
CMakeLists.txt Makefile README.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp8266wolfssl_benchmark
VisualGDB
wolfssl_benchmark_IDF_v4.4_ESP32.sln wolfssl_benchmark_IDF_v4.4_ESP32.vgdbproj wolfssl_benchmark_IDF_v5_ESP32.sln wolfssl_benchmark_IDF_v5_ESP32.vgdbproj wolfssl_benchmark_IDF_v5_ESP32C3.sln wolfssl_benchmark_IDF_v5_ESP32C3.vgdbproj wolfssl_benchmark_IDF_v5_ESP32S3.sln wolfssl_benchmark_IDF_v5_ESP32S3.vgdbprojwolfssl_client
CMakeLists.txt Makefile README.md README_server_sm.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp32c2 sdkconfig.defaults.esp8266 wolfssl_client_ESP8266.vgdbprojwolfssl_server
CMakeLists.txt Makefile README.md README_server_sm.md partitions_singleapp_large.csv sdkconfig.defaults sdkconfig.defaults.esp32c2 sdkconfig.defaults.esp8266 wolfssl_server_ESP8266.vgdbprojwolfssl_test
VisualGDB
wolfssl_test-IDF_v5_ESP32.sln wolfssl_test-IDF_v5_ESP32.vgdbproj wolfssl_test-IDF_v5_ESP32C3.sln wolfssl_test-IDF_v5_ESP32C3.vgdbproj wolfssl_test-IDF_v5_ESP32C6.sln wolfssl_test-IDF_v5_ESP32C6.vgdbproj wolfssl_test_IDF_v5_ESP32S3.sln wolfssl_test_IDF_v5_ESP32S3.vgdbprojGCC-ARM
Makefile Makefile.bench Makefile.client Makefile.common Makefile.server Makefile.static Makefile.test README.md include.am linker.ld linker_fips.ldIAR-EWARM
embOS
SAMV71_XULT
embOS_SAMV71_XULT_user_settings
user_settings.h user_settings_simple_example.h user_settings_verbose_example.hembOS_wolfcrypt_benchmark_SAMV71_XULT
README_wolfcrypt_benchmark wolfcrypt_benchmark.ewd wolfcrypt_benchmark.ewpINTIME-RTOS
Makefile README.md include.am libwolfssl.c libwolfssl.vcxproj user_settings.h wolfExamples.c wolfExamples.h wolfExamples.sln wolfExamples.vcxproj wolfssl-lib.sln wolfssl-lib.vcxprojMQX
Makefile README-jp.md README.md client-tls.c include.am server-tls.c user_config.h user_settings.hMSVS-2019-AZSPHERE
wolfssl_new_azsphere
.gitignore CMakeLists.txt CMakeSettings.json app_manifest.json applibs_versions.h launch.vs.json main.cNETOS
Makefile.wolfcrypt.inc README.md include.am user_settings.h user_settings.h-cert2425 user_settings.h-cert3389 wolfssl_netos_custom.cPlatformIO
examples
wolfssl_benchmark
CMakeLists.txt README.md platformio.ini sdkconfig.defaults wolfssl_benchmark.code-workspaceROWLEY-CROSSWORKS-ARM
Kinetis_FlashPlacement.xml README.md arm_startup.c benchmark_main.c hw.h include.am kinetis_hw.c retarget.c test_main.c user_settings.h wolfssl.hzp wolfssl_ltc.hzpRenesas
e2studio
RA6M3
README.md README_APRA6M_en.md README_APRA6M_jp.md include.amRX72N
EnvisionKit
Simple
README_EN.md README_JP.mdwolfssl_demo
key_data.c key_data.h user_settings.h wolfssl_demo.c wolfssl_demo.h wolfssl_tsip_unit_test.cSTM32Cube
README.md STM32_Benchmarks.md default_conf.ftl include.am main.c wolfssl_example.c wolfssl_example.hWIN
README.txt include.am test.vcxproj user_settings.h user_settings_dtls.h wolfssl-fips.sln wolfssl-fips.vcxprojWIN-SRTP-KDF-140-3
README.txt include.am resource.h test.vcxproj user_settings.h wolfssl-fips.rc wolfssl-fips.sln wolfssl-fips.vcxprojWIN10
README.txt include.am resource.h test.vcxproj user_settings.h wolfssl-fips.rc wolfssl-fips.sln wolfssl-fips.vcxprojXCODE
Benchmark
include.amXilinxSDK
README.md bench.sh combine.sh eclipse_formatter_profile.xml graph.sh include.am user_settings.h wolfssl_example.capple-universal
wolfssl-multiplatform
iotsafe
Makefile README.md ca-cert.c devices.c devices.h include.am main.c memory-tls.c startup.c target.ld user_settings.hmynewt
README.md apps.wolfcrypttest.pkg.yml crypto.wolfssl.pkg.yml crypto.wolfssl.syscfg.yml include.am setup.shcerts
1024
ca-cert.der ca-cert.pem ca-key.der ca-key.pem client-cert.der client-cert.pem client-key.der client-key.pem client-keyPub.der dh1024.der dh1024.pem dsa-pub-1024.pem dsa1024.der dsa1024.pem include.am rsa1024.der server-cert.der server-cert.pem server-key.der server-key.pemcrl
extra-crls
ca-int-cert-revoked.pem claim-root.pem crl_critical_entry.pem crlnum_57oct.pem crlnum_64oct.pem general-server-crl.pem large_crlnum.pem large_crlnum2.pemdilithium
bench_dilithium_level2_key.der bench_dilithium_level3_key.der bench_dilithium_level5_key.der include.amecc
bp256r1-key.der bp256r1-key.pem ca-secp256k1-cert.pem ca-secp256k1-key.pem client-bp256r1-cert.der client-bp256r1-cert.pem client-secp256k1-cert.der client-secp256k1-cert.pem genecc.sh include.am secp256k1-key.der secp256k1-key.pem secp256k1-param.pem secp256k1-privkey.der secp256k1-privkey.pem server-bp256r1-cert.der server-bp256r1-cert.pem server-secp256k1-cert.der server-secp256k1-cert.pem server2-secp256k1-cert.der server2-secp256k1-cert.pem wolfssl.cnf wolfssl_384.cnfed25519
ca-ed25519-key.der ca-ed25519-key.pem ca-ed25519-priv.der ca-ed25519-priv.pem ca-ed25519.der ca-ed25519.pem client-ed25519-key.der client-ed25519-key.pem client-ed25519-priv.der client-ed25519-priv.pem client-ed25519.der client-ed25519.pem eddsa-ed25519.der eddsa-ed25519.pem gen-ed25519-certs.sh gen-ed25519-keys.sh gen-ed25519.sh include.am root-ed25519-key.der root-ed25519-key.pem root-ed25519-priv.der root-ed25519-priv.pem root-ed25519.der root-ed25519.pem server-ed25519-cert.pem server-ed25519-key.der server-ed25519-key.pem server-ed25519-priv.der server-ed25519-priv.pem server-ed25519.der server-ed25519.pemed448
ca-ed448-key.der ca-ed448-key.pem ca-ed448-priv.der ca-ed448-priv.pem ca-ed448.der ca-ed448.pem client-ed448-key.der client-ed448-key.pem client-ed448-priv.der client-ed448-priv.pem client-ed448.der client-ed448.pem gen-ed448-certs.sh gen-ed448-keys.sh include.am root-ed448-key.der root-ed448-key.pem root-ed448-priv.der root-ed448-priv.pem root-ed448.der root-ed448.pem server-ed448-cert.pem server-ed448-key.der server-ed448-key.pem server-ed448-priv.der server-ed448-priv.pem server-ed448.der server-ed448.pemexternal
DigiCertGlobalRootCA.pem README.txt ca-digicert-ev.pem ca-globalsign-root.pem ca-google-root.pem ca_collection.pem include.amintermediate
ca_false_intermediate
gentestcert.sh int_ca.key server.key test_ca.key test_ca.pem test_int_not_cacert.pem test_sign_bynoca_srv.pem wolfssl_base.conf wolfssl_srv.conflms
bc_hss_L2_H5_W8_root.der bc_hss_L3_H5_W4_root.der bc_lms_chain_ca.der bc_lms_chain_leaf.der bc_lms_native_bc_root.der bc_lms_sha256_h10_w8_root.der bc_lms_sha256_h5_w4_root.der include.ammldsa
README.txt include.am mldsa44-cert.der mldsa44-cert.pem mldsa44-key.pem mldsa44_bare-priv.der mldsa44_bare-seed.der mldsa44_oqskeypair.der mldsa44_priv-only.der mldsa44_pub-spki.der mldsa44_seed-only.der mldsa44_seed-priv.der mldsa65-cert.der mldsa65-cert.pem mldsa65-key.pem mldsa65_bare-priv.der mldsa65_bare-seed.der mldsa65_oqskeypair.der mldsa65_priv-only.der mldsa65_pub-spki.der mldsa65_seed-only.der mldsa65_seed-priv.der mldsa87-cert.der mldsa87-cert.pem mldsa87-key.pem mldsa87_bare-priv.der mldsa87_bare-seed.der mldsa87_oqskeypair.der mldsa87_priv-only.der mldsa87_pub-spki.der mldsa87_seed-only.der mldsa87_seed-priv.derocsp
imposter-root-ca-cert.der imposter-root-ca-cert.pem imposter-root-ca-key.der imposter-root-ca-key.pem include.am index-ca-and-intermediate-cas.txt index-ca-and-intermediate-cas.txt.attr index-intermediate1-ca-issued-certs.txt index-intermediate1-ca-issued-certs.txt.attr index-intermediate2-ca-issued-certs.txt index-intermediate2-ca-issued-certs.txt.attr index-intermediate3-ca-issued-certs.txt index-intermediate3-ca-issued-certs.txt.attr intermediate1-ca-cert.der intermediate1-ca-cert.pem intermediate1-ca-key.der intermediate1-ca-key.pem intermediate2-ca-cert.der intermediate2-ca-cert.pem intermediate2-ca-key.der intermediate2-ca-key.pem intermediate3-ca-cert.der intermediate3-ca-cert.pem intermediate3-ca-key.der intermediate3-ca-key.pem ocsp-responder-cert.der ocsp-responder-cert.pem ocsp-responder-key.der ocsp-responder-key.pem openssl.cnf renewcerts-for-test.sh renewcerts.sh root-ca-cert.der root-ca-cert.pem root-ca-crl.pem root-ca-key.der root-ca-key.pem server1-cert.der server1-cert.pem server1-chain-noroot.pem server1-key.der server1-key.pem server2-cert.der server2-cert.pem server2-key.der server2-key.pem server3-cert.der server3-cert.pem server3-key.der server3-key.pem server4-cert.der server4-cert.pem server4-key.der server4-key.pem server5-cert.der server5-cert.pem server5-key.der server5-key.pem test-leaf-response.der test-multi-response.der test-response-nointern.der test-response-rsapss.der test-response.derp521
ca-p521-key.der ca-p521-key.pem ca-p521-priv.der ca-p521-priv.pem ca-p521.der ca-p521.pem client-p521-key.der client-p521-key.pem client-p521-priv.der client-p521-priv.pem client-p521.der client-p521.pem gen-p521-certs.sh gen-p521-keys.sh include.am root-p521-key.der root-p521-key.pem root-p521-priv.der root-p521-priv.pem root-p521.der root-p521.pem server-p521-cert.pem server-p521-key.der server-p521-key.pem server-p521-priv.der server-p521-priv.pem server-p521.der server-p521.pemrpk
client-cert-rpk.der client-ecc-cert-rpk.der include.am server-cert-rpk.der server-ecc-cert-rpk.derrsapss
ca-3072-rsapss-key.der ca-3072-rsapss-key.pem ca-3072-rsapss-priv.der ca-3072-rsapss-priv.pem ca-3072-rsapss.der ca-3072-rsapss.pem ca-rsapss-key.der ca-rsapss-key.pem ca-rsapss-priv.der ca-rsapss-priv.pem ca-rsapss.der ca-rsapss.pem client-3072-rsapss-key.der client-3072-rsapss-key.pem client-3072-rsapss-priv.der client-3072-rsapss-priv.pem client-3072-rsapss.der client-3072-rsapss.pem client-rsapss-key.der client-rsapss-key.pem client-rsapss-priv.der client-rsapss-priv.pem client-rsapss.der client-rsapss.pem gen-rsapss-keys.sh include.am renew-rsapss-certs.sh root-3072-rsapss-key.der root-3072-rsapss-key.pem root-3072-rsapss-priv.der root-3072-rsapss-priv.pem root-3072-rsapss.der root-3072-rsapss.pem root-rsapss-key.der root-rsapss-key.pem root-rsapss-priv.der root-rsapss-priv.pem root-rsapss.der root-rsapss.pem server-3072-rsapss-cert.pem server-3072-rsapss-key.der server-3072-rsapss-key.pem server-3072-rsapss-priv.der server-3072-rsapss-priv.pem server-3072-rsapss.der server-3072-rsapss.pem server-mix-rsapss-cert.pem server-rsapss-cert.pem server-rsapss-key.der server-rsapss-key.pem server-rsapss-priv.der server-rsapss-priv.pem server-rsapss.der server-rsapss.pemslhdsa
bench_slhdsa_sha2_128f_key.der bench_slhdsa_sha2_128s_key.der bench_slhdsa_sha2_192f_key.der bench_slhdsa_sha2_192s_key.der bench_slhdsa_sha2_256f_key.der bench_slhdsa_sha2_256s_key.der bench_slhdsa_shake128f_key.der bench_slhdsa_shake128s_key.der bench_slhdsa_shake192f_key.der bench_slhdsa_shake192s_key.der bench_slhdsa_shake256f_key.der bench_slhdsa_shake256s_key.der client-mldsa44-priv.pem client-mldsa44-sha2.der client-mldsa44-sha2.pem client-mldsa44-shake.der client-mldsa44-shake.pem gen-slhdsa-mldsa-certs.sh include.am root-slhdsa-sha2-128s-priv.der root-slhdsa-sha2-128s-priv.pem root-slhdsa-sha2-128s.der root-slhdsa-sha2-128s.pem root-slhdsa-shake-128s-priv.der root-slhdsa-shake-128s-priv.pem root-slhdsa-shake-128s.der root-slhdsa-shake-128s.pem server-mldsa44-priv.pem server-mldsa44-sha2.der server-mldsa44-sha2.pem server-mldsa44-shake.der server-mldsa44-shake.pemsm2
ca-sm2-key.der ca-sm2-key.pem ca-sm2-priv.der ca-sm2-priv.pem ca-sm2.der ca-sm2.pem client-sm2-key.der client-sm2-key.pem client-sm2-priv.der client-sm2-priv.pem client-sm2.der client-sm2.pem fix_sm2_spki.py gen-sm2-certs.sh gen-sm2-keys.sh include.am root-sm2-key.der root-sm2-key.pem root-sm2-priv.der root-sm2-priv.pem root-sm2.der root-sm2.pem self-sm2-cert.pem self-sm2-key.pem self-sm2-priv.pem server-sm2-cert.der server-sm2-cert.pem server-sm2-key.der server-sm2-key.pem server-sm2-priv.der server-sm2-priv.pem server-sm2.der server-sm2.pemstatickeys
dh-ffdhe2048-params.pem dh-ffdhe2048-pub.der dh-ffdhe2048-pub.pem dh-ffdhe2048.der dh-ffdhe2048.pem ecc-secp256r1.der ecc-secp256r1.pem gen-static.sh include.am x25519-pub.der x25519-pub.pem x25519.der x25519.pemtest
catalog.txt cert-bad-neg-int.der cert-bad-oid.der cert-bad-utf8.der cert-ext-ia.cfg cert-ext-ia.der cert-ext-ia.pem cert-ext-joi.cfg cert-ext-joi.der cert-ext-joi.pem cert-ext-mnc.der cert-ext-multiple.cfg cert-ext-multiple.der cert-ext-multiple.pem cert-ext-nc-combined.der cert-ext-nc-combined.pem cert-ext-nc.cfg cert-ext-nc.der cert-ext-nc.pem cert-ext-ncdns.der cert-ext-ncdns.pem cert-ext-ncip.der cert-ext-ncip.pem cert-ext-ncmixed.der cert-ext-ncmulti.der cert-ext-ncmulti.pem cert-ext-ncrid.der cert-ext-ncrid.pem cert-ext-nct.cfg cert-ext-nct.der cert-ext-nct.pem cert-ext-ndir-exc.cfg cert-ext-ndir-exc.der cert-ext-ndir-exc.pem cert-ext-ndir.cfg cert-ext-ndir.der cert-ext-ndir.pem cert-ext-ns.der cert-over-max-altnames.cfg cert-over-max-altnames.der cert-over-max-altnames.pem cert-over-max-nc.cfg cert-over-max-nc.der cert-over-max-nc.pem client-ecc-cert-ski.hex cn-ip-literal.der cn-ip-wildcard.der crit-cert.pem crit-key.pem dh1024.der dh1024.pem dh512.der dh512.pem digsigku.pem encrypteddata.msg gen-badsig.sh gen-ext-certs.sh gen-testcerts.sh include.am kari-keyid-cms.msg ktri-keyid-cms.msg ossl-trusted-cert.pem server-badaltname.der server-badaltname.pem server-badaltnull.der server-badaltnull.pem server-badcn.der server-badcn.pem server-badcnnull.der server-badcnnull.pem server-cert-ecc-badsig.der server-cert-ecc-badsig.pem server-cert-rsa-badsig.der server-cert-rsa-badsig.pem server-duplicate-policy.pem server-garbage.der server-garbage.pem server-goodalt.der server-goodalt.pem server-goodaltwild.der server-goodaltwild.pem server-goodcn.der server-goodcn.pem server-goodcnwild.der server-goodcnwild.pem server-localhost.der server-localhost.pem smime-test-canon.p7s smime-test-multipart-badsig.p7s smime-test-multipart.p7s smime-test.p7stest-pathlen
assemble-chains.sh chainA-ICA1-key.pem chainA-ICA1-pathlen0.pem chainA-assembled.pem chainA-entity-key.pem chainA-entity.pem chainB-ICA1-key.pem chainB-ICA1-pathlen0.pem chainB-ICA2-key.pem chainB-ICA2-pathlen1.pem chainB-assembled.pem chainB-entity-key.pem chainB-entity.pem chainC-ICA1-key.pem chainC-ICA1-pathlen1.pem chainC-assembled.pem chainC-entity-key.pem chainC-entity.pem chainD-ICA1-key.pem chainD-ICA1-pathlen127.pem chainD-assembled.pem chainD-entity-key.pem chainD-entity.pem chainE-ICA1-key.pem chainE-ICA1-pathlen128.pem chainE-assembled.pem chainE-entity-key.pem chainE-entity.pem chainF-ICA1-key.pem chainF-ICA1-pathlen1.pem chainF-ICA2-key.pem chainF-ICA2-pathlen0.pem chainF-assembled.pem chainF-entity-key.pem chainF-entity.pem chainG-ICA1-key.pem chainG-ICA1-pathlen0.pem chainG-ICA2-key.pem chainG-ICA2-pathlen1.pem chainG-ICA3-key.pem chainG-ICA3-pathlen99.pem chainG-ICA4-key.pem chainG-ICA4-pathlen5.pem chainG-ICA5-key.pem chainG-ICA5-pathlen20.pem chainG-ICA6-key.pem chainG-ICA6-pathlen10.pem chainG-ICA7-key.pem chainG-ICA7-pathlen100.pem chainG-assembled.pem chainG-entity-key.pem chainG-entity.pem chainH-ICA1-key.pem chainH-ICA1-pathlen0.pem chainH-ICA2-key.pem chainH-ICA2-pathlen2.pem chainH-ICA3-key.pem chainH-ICA3-pathlen2.pem chainH-ICA4-key.pem chainH-ICA4-pathlen2.pem chainH-assembled.pem chainH-entity-key.pem chainH-entity.pem chainI-ICA1-key.pem chainI-ICA1-no_pathlen.pem chainI-ICA2-key.pem chainI-ICA2-no_pathlen.pem chainI-ICA3-key.pem chainI-ICA3-pathlen2.pem chainI-assembled.pem chainI-entity-key.pem chainI-entity.pem chainJ-ICA1-key.pem chainJ-ICA1-no_pathlen.pem chainJ-ICA2-key.pem chainJ-ICA2-no_pathlen.pem chainJ-ICA3-key.pem chainJ-ICA3-no_pathlen.pem chainJ-ICA4-key.pem chainJ-ICA4-pathlen2.pem chainJ-assembled.pem chainJ-entity-key.pem chainJ-entity.pem include.am refreshkeys.shtest-serial0
ee_normal.pem ee_serial0.pem generate_certs.sh include.am intermediate_serial0.pem root_serial0.pem root_serial0_key.pem selfsigned_nonca_serial0.pemxmss
bc_xmss_chain_ca.der bc_xmss_chain_leaf.der bc_xmss_sha2_10_256_root.der bc_xmss_sha2_16_256_root.der bc_xmssmt_sha2_20_2_256_root.der bc_xmssmt_sha2_20_4_256_root.der bc_xmssmt_sha2_40_8_256_root.der include.amcmake
Config.cmake.in README.md config.in functions.cmake include.am options.h.in wolfssl-config-version.cmake.in wolfssl-targets.cmake.indebian
changelog.in control.in copyright include.am libwolfssl-dev.install libwolfssl.install rules.indoc
dox_comments
header_files
aes.h arc4.h ascon.h asn.h asn_public.h blake2.h bn.h camellia.h chacha.h chacha20_poly1305.h cmac.h coding.h compress.h cryptocb.h curve25519.h curve448.h des3.h dh.h doxygen_groups.h doxygen_pages.h dsa.h ecc.h eccsi.h ed25519.h ed448.h error-crypt.h evp.h hash.h hmac.h iotsafe.h kdf.h logging.h md2.h md4.h md5.h memory.h ocsp.h pem.h pkcs11.h pkcs7.h poly1305.h psa.h puf.h pwdbased.h quic.h random.h ripemd.h rsa.h sakke.h sha.h sha256.h sha3.h sha512.h signature.h siphash.h srp.h ssl.h tfm.h types.h wc_encrypt.h wc_port.h wc_she.h wc_slhdsa.h wolfio.hheader_files-ja
aes.h arc4.h ascon.h asn.h asn_public.h blake2.h bn.h camellia.h chacha.h chacha20_poly1305.h cmac.h coding.h compress.h cryptocb.h curve25519.h curve448.h des3.h dh.h doxygen_groups.h doxygen_pages.h dsa.h ecc.h eccsi.h ed25519.h ed448.h error-crypt.h evp.h hash.h hmac.h iotsafe.h kdf.h logging.h md2.h md4.h md5.h memory.h ocsp.h pem.h pkcs11.h pkcs7.h poly1305.h psa.h pwdbased.h quic.h random.h ripemd.h rsa.h sakke.h sha.h sha256.h sha3.h sha512.h signature.h siphash.h srp.h ssl.h tfm.h types.h wc_encrypt.h wc_port.h wolfio.hexamples
async
Makefile README.md async_client.c async_server.c async_tls.c async_tls.h include.am user_settings.hconfigs
README.md include.am user_settings_EBSnet.h user_settings_all.h user_settings_arduino.h user_settings_baremetal.h user_settings_ca.h user_settings_curve25519nonblock.h user_settings_dtls13.h user_settings_eccnonblock.h user_settings_espressif.h user_settings_fipsv2.h user_settings_fipsv5.h user_settings_min_ecc.h user_settings_openssl_compat.h user_settings_pkcs7.h user_settings_platformio.h user_settings_pq.h user_settings_rsa_only.h user_settings_stm32.h user_settings_template.h user_settings_tls12.h user_settings_tls13.h user_settings_wolfboot_keytools.h user_settings_wolfssh.h user_settings_wolftpm.hechoclient
echoclient.c echoclient.h echoclient.sln echoclient.vcproj echoclient.vcxproj include.am quitlinuxkm
Kbuild Makefile README.md get_thread_size.c include.am linuxkm-fips-hash-wrapper.sh linuxkm-fips-hash.c linuxkm_memory.c linuxkm_memory.h linuxkm_wc_port.h lkcapi_aes_glue.c lkcapi_dh_glue.c lkcapi_ecdh_glue.c lkcapi_ecdsa_glue.c lkcapi_glue.c lkcapi_rsa_glue.c lkcapi_sha_glue.c module_exports.c.template module_hooks.c pie_redirect_table.c wolfcrypt.lds x86_vector_register_glue.cm4
ax_add_am_macro.m4 ax_am_jobserver.m4 ax_am_macros.m4 ax_append_compile_flags.m4 ax_append_flag.m4 ax_append_link_flags.m4 ax_append_to_file.m4 ax_atomic.m4 ax_bsdkm.m4 ax_check_compile_flag.m4 ax_check_link_flag.m4 ax_compiler_version.m4 ax_count_cpus.m4 ax_create_generic_config.m4 ax_debug.m4 ax_file_escapes.m4 ax_harden_compiler_flags.m4 ax_linuxkm.m4 ax_print_to_file.m4 ax_pthread.m4 ax_require_defined.m4 ax_tls.m4 ax_vcs_checkout.m4 hexversion.m4 lib_socket_nsl.m4 visibility.m4mqx
wolfcrypt_benchmark
ReferencedRSESystems.xml wolfcrypt_benchmark_twrk70f120m_Int_Flash_DDRData_Debug_PnE_U-MultiLink.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_DDRData_Release_PnE_U-MultiLink.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Debug_JTrace.jlink wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Debug_JTrace.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Debug_PnE_U-MultiLink.launch wolfcrypt_benchmark_twrk70f120m_Int_Flash_SramData_Release_PnE_U-MultiLink.launchwolfcrypt_test
ReferencedRSESystems.xml wolfcrypt_test_twrk70f120m_Int_Flash_DDRData_Debug_PnE_U-MultiLink.launch wolfcrypt_test_twrk70f120m_Int_Flash_DDRData_Release_PnE_U-MultiLink.launch wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Debug_JTrace.jlink wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Debug_JTrace.launch wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Debug_PnE_U-MultiLink.launch wolfcrypt_test_twrk70f120m_Int_Flash_SramData_Release_PnE_U-MultiLink.launchwolfssl_client
ReferencedRSESystems.xml wolfssl_client_twrk70f120m_Int_Flash_DDRData_Debug_PnE_U-MultiLink.launch wolfssl_client_twrk70f120m_Int_Flash_DDRData_Release_PnE_U-MultiLink.launch wolfssl_client_twrk70f120m_Int_Flash_SramData_Debug_JTrace.jlink wolfssl_client_twrk70f120m_Int_Flash_SramData_Debug_JTrace.launch wolfssl_client_twrk70f120m_Int_Flash_SramData_Debug_PnE_U-MultiLink.launch wolfssl_client_twrk70f120m_Int_Flash_SramData_Release_PnE_U-MultiLink.launchscripts
aria-cmake-build-test.sh asn1_oid_sum.pl benchmark.test benchmark_compare.sh cleanup_testfiles.sh crl-gen-openssl.test crl-revoked.test dertoc.pl dtls.test dtlscid.test external.test google.test include.am makedistsmall.sh memtest.sh ocsp-responder-openssl-interop.test ocsp-stapling-with-ca-as-responder.test ocsp-stapling-with-wolfssl-responder.test ocsp-stapling.test ocsp-stapling2.test ocsp-stapling_tls13multi.test ocsp.test openssl.test openssl_srtp.test pem.test ping.test pkcallbacks.test psk.test resume.test rsapss.test sniffer-gen.sh sniffer-ipv6.pcap sniffer-static-rsa.pcap sniffer-testsuite.test sniffer-tls12-keylog.out sniffer-tls12-keylog.pcap sniffer-tls12-keylog.sslkeylog sniffer-tls13-dh-resume.pcap sniffer-tls13-dh.pcap sniffer-tls13-ecc-resume.pcap sniffer-tls13-ecc.pcap sniffer-tls13-hrr.pcap sniffer-tls13-keylog.out sniffer-tls13-keylog.pcap sniffer-tls13-keylog.sslkeylog sniffer-tls13-x25519-resume.pcap sniffer-tls13-x25519.pcap stm32l4-v4_0_1_build.sh tls13.test trusted_peer.test unit.test.in user_settings_asm.shsrc
bio.c conf.c crl.c dtls.c dtls13.c include.am internal.c keys.c ocsp.c pk.c pk_ec.c pk_rsa.c quic.c sniffer.c ssl.c ssl_api_cert.c ssl_api_crl_ocsp.c ssl_api_pk.c ssl_asn1.c ssl_bn.c ssl_certman.c ssl_crypto.c ssl_ech.c ssl_load.c ssl_misc.c ssl_p7p12.c ssl_sess.c ssl_sk.c tls.c tls13.c wolfio.c x509.c x509_str.ctests
api
api.h api_decl.h create_ocsp_test_blobs.py include.am test_aes.c test_aes.h test_arc4.c test_arc4.h test_ascon.c test_ascon.h test_ascon_kats.h test_asn.c test_asn.h test_blake2.c test_blake2.h test_camellia.c test_camellia.h test_certman.c test_certman.h test_chacha.c test_chacha.h test_chacha20_poly1305.c test_chacha20_poly1305.h test_cmac.c test_cmac.h test_curve25519.c test_curve25519.h test_curve448.c test_curve448.h test_des3.c test_des3.h test_dh.c test_dh.h test_digest.h test_dsa.c test_dsa.h test_dtls.c test_dtls.h test_ecc.c test_ecc.h test_ed25519.c test_ed25519.h test_ed448.c test_ed448.h test_evp.c test_evp.h test_evp_cipher.c test_evp_cipher.h test_evp_digest.c test_evp_digest.h test_evp_pkey.c test_evp_pkey.h test_hash.c test_hash.h test_hmac.c test_hmac.h test_md2.c test_md2.h test_md4.c test_md4.h test_md5.c test_md5.h test_mldsa.c test_mldsa.h test_mlkem.c test_mlkem.h test_ocsp.c test_ocsp.h test_ocsp_test_blobs.h test_ossl_asn1.c test_ossl_asn1.h test_ossl_bio.c test_ossl_bio.h test_ossl_bn.c test_ossl_bn.h test_ossl_cipher.c test_ossl_cipher.h test_ossl_dgst.c test_ossl_dgst.h test_ossl_dh.c test_ossl_dh.h test_ossl_dsa.c test_ossl_dsa.h test_ossl_ec.c test_ossl_ec.h test_ossl_ecx.c test_ossl_ecx.h test_ossl_mac.c test_ossl_mac.h test_ossl_obj.c test_ossl_obj.h test_ossl_p7p12.c test_ossl_p7p12.h test_ossl_pem.c test_ossl_pem.h test_ossl_rand.c test_ossl_rand.h test_ossl_rsa.c test_ossl_rsa.h test_ossl_sk.c test_ossl_sk.h test_ossl_x509.c test_ossl_x509.h test_ossl_x509_acert.c test_ossl_x509_acert.h test_ossl_x509_crypto.c test_ossl_x509_crypto.h test_ossl_x509_ext.c test_ossl_x509_ext.h test_ossl_x509_info.c test_ossl_x509_info.h test_ossl_x509_io.c test_ossl_x509_io.h test_ossl_x509_lu.c test_ossl_x509_lu.h test_ossl_x509_name.c test_ossl_x509_name.h test_ossl_x509_pk.c test_ossl_x509_pk.h test_ossl_x509_str.c test_ossl_x509_str.h test_ossl_x509_vp.c test_ossl_x509_vp.h test_pkcs12.c test_pkcs12.h test_pkcs7.c test_pkcs7.h test_poly1305.c test_poly1305.h test_random.c test_random.h test_rc2.c test_rc2.h test_ripemd.c test_ripemd.h test_rsa.c test_rsa.h test_sha.c test_sha.h test_sha256.c test_sha256.h test_sha3.c test_sha3.h test_sha512.c test_sha512.h test_she.c test_she.h test_signature.c test_signature.h test_slhdsa.c test_slhdsa.h test_sm2.c test_sm2.h test_sm3.c test_sm3.h test_sm4.c test_sm4.h test_tls.c test_tls.h test_tls13.c test_tls13.h test_tls_ext.c test_tls_ext.h test_wc_encrypt.c test_wc_encrypt.h test_wolfmath.c test_wolfmath.h test_x509.c test_x509.hwolfcrypt
benchmark
README.md benchmark-VS2022.sln benchmark-VS2022.vcxproj benchmark-VS2022.vcxproj.user benchmark.c benchmark.h benchmark.sln benchmark.vcproj benchmark.vcxproj include.amsrc
port
Espressif
esp_crt_bundle
README.md cacrt_all.pem cacrt_deprecated.pem cacrt_local.pem esp_crt_bundle.c gen_crt_bundle.py pio_install_cryptography.pyRenesas
README.md renesas_common.c renesas_fspsm_aes.c renesas_fspsm_rsa.c renesas_fspsm_sha.c renesas_fspsm_util.c renesas_rx64_hw_sha.c renesas_rx64_hw_util.c renesas_tsip_aes.c renesas_tsip_rsa.c renesas_tsip_sha.c renesas_tsip_util.carm
armv8-32-aes-asm.S armv8-32-aes-asm_c.c armv8-32-chacha-asm.S armv8-32-chacha-asm_c.c armv8-32-curve25519.S armv8-32-curve25519_c.c armv8-32-mlkem-asm.S armv8-32-mlkem-asm_c.c armv8-32-poly1305-asm.S armv8-32-poly1305-asm_c.c armv8-32-sha256-asm.S armv8-32-sha256-asm_c.c armv8-32-sha3-asm.S armv8-32-sha3-asm_c.c armv8-32-sha512-asm.S armv8-32-sha512-asm_c.c armv8-aes-asm.S armv8-aes-asm_c.c armv8-aes.c armv8-chacha-asm.S armv8-chacha-asm_c.c armv8-curve25519.S armv8-curve25519_c.c armv8-mlkem-asm.S armv8-mlkem-asm_c.c armv8-poly1305-asm.S armv8-poly1305-asm_c.c armv8-sha256-asm.S armv8-sha256-asm_c.c armv8-sha256.c armv8-sha3-asm.S armv8-sha3-asm_c.c armv8-sha512-asm.S armv8-sha512-asm_c.c armv8-sha512.c cryptoCell.c cryptoCellHash.c thumb2-aes-asm.S thumb2-aes-asm_c.c thumb2-chacha-asm.S thumb2-chacha-asm_c.c thumb2-curve25519.S thumb2-curve25519_c.c thumb2-mlkem-asm.S thumb2-mlkem-asm_c.c thumb2-poly1305-asm.S thumb2-poly1305-asm_c.c thumb2-sha256-asm.S thumb2-sha256-asm_c.c thumb2-sha3-asm.S thumb2-sha3-asm_c.c thumb2-sha512-asm.S thumb2-sha512-asm_c.ccaam
README.md caam_aes.c caam_doc.pdf caam_driver.c caam_error.c caam_integrity.c caam_qnx.c caam_sha.c wolfcaam_aes.c wolfcaam_cmac.c wolfcaam_ecdsa.c wolfcaam_fsl_nxp.c wolfcaam_hash.c wolfcaam_hmac.c wolfcaam_init.c wolfcaam_qnx.c wolfcaam_rsa.c wolfcaam_seco.c wolfcaam_x25519.cdevcrypto
README.md devcrypto_aes.c devcrypto_ecdsa.c devcrypto_hash.c devcrypto_hmac.c devcrypto_rsa.c devcrypto_x25519.c wc_devcrypto.criscv
riscv-64-aes.c riscv-64-chacha.c riscv-64-poly1305.c riscv-64-sha256.c riscv-64-sha3.c riscv-64-sha512.cwolfssl
openssl
aes.h asn1.h asn1t.h bio.h bn.h buffer.h camellia.h cmac.h cms.h compat_types.h conf.h crypto.h des.h dh.h dsa.h ec.h ec25519.h ec448.h ecdh.h ecdsa.h ed25519.h ed448.h engine.h err.h evp.h fips_rand.h hmac.h include.am kdf.h lhash.h md4.h md5.h modes.h obj_mac.h objects.h ocsp.h opensslconf.h opensslv.h ossl_typ.h pem.h pkcs12.h pkcs7.h rand.h rc4.h ripemd.h rsa.h safestack.h sha.h sha3.h srp.h ssl.h ssl23.h stack.h tls1.h txt_db.h ui.h x509.h x509_vfy.h x509v3.hwolfcrypt
port
Renesas
renesas-fspsm-crypt.h renesas-fspsm-types.h renesas-rx64-hw-crypt.h renesas-tsip-crypt.h renesas_cmn.h renesas_fspsm_internal.h renesas_sync.h renesas_tsip_internal.h renesas_tsip_types.hcaam
caam_driver.h caam_error.h caam_qnx.h wolfcaam.h wolfcaam_aes.h wolfcaam_cmac.h wolfcaam_ecdsa.h wolfcaam_fsl_nxp.h wolfcaam_hash.h wolfcaam_qnx.h wolfcaam_rsa.h wolfcaam_seco.h wolfcaam_sha.h wolfcaam_x25519.hwrapper
Ada
examples
src
aes_verify_main.adb rsa_verify_main.adb sha256_main.adb spark_sockets.adb spark_sockets.ads spark_terminal.adb spark_terminal.ads tls_client.adb tls_client.ads tls_client_main.adb tls_server.adb tls_server.ads tls_server_main.adbtests
src
aes_bindings_tests.adb aes_bindings_tests.ads rsa_verify_bindings_tests.adb rsa_verify_bindings_tests.ads sha256_bindings_tests.adb sha256_bindings_tests.ads tests.adbCSharp
wolfSSL-Example-IOCallbacks
App.config wolfSSL-Example-IOCallbacks.cs wolfSSL-Example-IOCallbacks.csprojwolfSSL-TLS-ServerThreaded
App.config wolfSSL-TLS-ServerThreaded.cs wolfSSL-TLS-ServerThreaded.csprojrust
wolfssl-wolfcrypt
src
aes.rs blake2.rs chacha20_poly1305.rs cmac.rs cmac_mac.rs curve25519.rs dh.rs dilithium.rs ecc.rs ecdsa.rs ed25519.rs ed448.rs fips.rs hkdf.rs hmac.rs hmac_mac.rs kdf.rs lib.rs lms.rs mlkem.rs mlkem_kem.rs pbkdf2_password_hash.rs prf.rs random.rs rsa.rs rsa_pkcs1v15.rs sha.rs sha_digest.rs sys.rstests
test_aes.rs test_blake2.rs test_chacha20_poly1305.rs test_cmac.rs test_cmac_mac.rs test_curve25519.rs test_dh.rs test_dilithium.rs test_ecc.rs test_ecdsa.rs test_ed25519.rs test_ed448.rs test_hkdf.rs test_hmac.rs test_hmac_mac.rs test_kdf.rs test_lms.rs test_mlkem.rs test_mlkem_kem.rs test_pbkdf2_password_hash.rs test_prf.rs test_random.rs test_rsa.rs test_rsa_pkcs1v15.rs test_sha.rs test_sha_digest.rs test_wolfcrypt.rszephyr
samples
wolfssl_benchmark
CMakeLists.txt README install_test.sh prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.confwolfssl_test
CMakeLists.txt README install_test.sh prj-no-malloc.conf prj.conf sample.yaml zephyr_legacy.conf zephyr_v4.1.conf
curl/lib/setopt.c
raw
1/***************************************************************************
2 * _ _ ____ _
3 * Project ___| | | | _ \| |
4 * / __| | | | |_) | |
5 * | (__| |_| | _ <| |___
6 * \___|\___/|_| \_\_____|
7 *
8 * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
9 *
10 * This software is licensed as described in the file COPYING, which
11 * you should have received as part of this distribution. The terms
12 * are also available at https://curl.se/docs/copyright.html.
13 *
14 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
15 * copies of the Software, and permit persons to whom the Software is
16 * furnished to do so, under the terms of the COPYING file.
17 *
18 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19 * KIND, either express or implied.
20 *
21 * SPDX-License-Identifier: curl
22 *
23 ***************************************************************************/
24#include "curl_setup.h"
25
26#ifdef HAVE_NETINET_IN_H
27#include <netinet/in.h>
28#endif
29
30#ifdef HAVE_LINUX_TCP_H
31#include <linux/tcp.h>
32#elif defined(HAVE_NETINET_TCP_H)
33#include <netinet/tcp.h>
34#endif
35
36#include "urldata.h"
37#include "url.h"
38#include "progress.h"
39#include "content_encoding.h"
40#include "strcase.h"
41#include "curl_share.h"
42#include "vtls/vtls.h"
43#include "curl_trc.h"
44#include "hostip.h"
45#include "setopt.h"
46#include "altsvc.h"
47#include "hsts.h"
48#include "tftp.h"
49#include "curlx/strdup.h"
50#include "escape.h"
51#include "bufref.h"
52#include "vauth/vauth.h"
53
54static CURLcode setopt_set_timeout_sec(timediff_t *ptimeout_ms, long secs)
55{
56 if(secs < 0)
57 return CURLE_BAD_FUNCTION_ARGUMENT;
58#if LONG_MAX > (TIMEDIFF_T_MAX / 1000)
59 if(secs > (TIMEDIFF_T_MAX / 1000)) {
60 *ptimeout_ms = TIMEDIFF_T_MAX;
61 return CURLE_OK;
62 }
63#endif
64 *ptimeout_ms = (timediff_t)secs * 1000;
65 return CURLE_OK;
66}
67
68static CURLcode setopt_set_timeout_ms(timediff_t *ptimeout_ms, long ms)
69{
70 if(ms < 0)
71 return CURLE_BAD_FUNCTION_ARGUMENT;
72#if LONG_MAX > TIMEDIFF_T_MAX
73 if(ms > TIMEDIFF_T_MAX) {
74 *ptimeout_ms = TIMEDIFF_T_MAX;
75 return CURLE_OK;
76 }
77#endif
78 *ptimeout_ms = (timediff_t)ms;
79 return CURLE_OK;
80}
81
82CURLcode Curl_setstropt(char **charp, const char *s)
83{
84 /* Release the previous storage at `charp' and replace by a dynamic storage
85 copy of `s'. Return CURLE_OK or CURLE_OUT_OF_MEMORY. */
86
87 curlx_safefree(*charp);
88
89 if(s) {
90 if(strlen(s) > CURL_MAX_INPUT_LENGTH)
91 return CURLE_BAD_FUNCTION_ARGUMENT;
92
93 *charp = curlx_strdup(s);
94 if(!*charp)
95 return CURLE_OUT_OF_MEMORY;
96 }
97
98 return CURLE_OK;
99}
100
101CURLcode Curl_setblobopt(struct curl_blob **blobp,
102 const struct curl_blob *blob)
103{
104 /* free the previous storage at `blobp' and replace by a dynamic storage
105 copy of blob. If CURL_BLOB_COPY is set, the data is copied. */
106
107 curlx_safefree(*blobp);
108
109 if(blob) {
110 struct curl_blob *nblob;
111 if(!blob->len || (blob->len > CURL_MAX_INPUT_LENGTH))
112 return CURLE_BAD_FUNCTION_ARGUMENT;
113 nblob = (struct curl_blob *)
114 curlx_malloc(sizeof(struct curl_blob) +
115 ((blob->flags & CURL_BLOB_COPY) ? blob->len : 0));
116 if(!nblob)
117 return CURLE_OUT_OF_MEMORY;
118 *nblob = *blob;
119 if(blob->flags & CURL_BLOB_COPY) {
120 /* put the data after the blob struct in memory */
121 nblob->data = (char *)nblob + sizeof(struct curl_blob);
122 memcpy(nblob->data, blob->data, blob->len);
123 }
124
125 *blobp = nblob;
126 return CURLE_OK;
127 }
128
129 return CURLE_OK;
130}
131
132static CURLcode setstropt_userpwd(const char *option, char **userp,
133 char **passwdp)
134{
135 char *user = NULL;
136 char *passwd = NULL;
137
138 DEBUGASSERT(userp);
139 DEBUGASSERT(passwdp);
140
141 /* Parse the login details if specified. If not, then we treat NULL as a
142 hint to clear the existing data */
143 if(option) {
144 size_t len = strlen(option);
145 CURLcode result;
146 if(len > CURL_MAX_INPUT_LENGTH)
147 return CURLE_BAD_FUNCTION_ARGUMENT;
148
149 result = Curl_parse_login_details(option, len, &user, &passwd, NULL);
150 if(result)
151 return result;
152 }
153
154 curlx_free(*userp);
155 *userp = user;
156
157 curlx_free(*passwdp);
158 *passwdp = passwd;
159
160 return CURLE_OK;
161}
162
163static CURLcode setstropt_interface(char *option, char **devp,
164 char **ifacep, char **hostp)
165{
166 char *dev = NULL;
167 char *iface = NULL;
168 char *host = NULL;
169 CURLcode result;
170
171 DEBUGASSERT(devp);
172 DEBUGASSERT(ifacep);
173 DEBUGASSERT(hostp);
174
175 if(option) {
176 /* Parse the interface details if set, otherwise clear them all */
177 result = Curl_parse_interface(option, &dev, &iface, &host);
178 if(result)
179 return result;
180 }
181 curlx_free(*devp);
182 *devp = dev;
183
184 curlx_free(*ifacep);
185 *ifacep = iface;
186
187 curlx_free(*hostp);
188 *hostp = host;
189
190 return CURLE_OK;
191}
192
193#ifdef USE_SSL
194#define C_SSLVERSION_VALUE(x) ((x) & 0xffff)
195#define C_SSLVERSION_MAX_VALUE(x) ((unsigned long)(x) & 0xffff0000)
196#endif
197
198static CURLcode protocol2num(const char *str, curl_prot_t *val)
199{
200 /*
201 * We are asked to cherry-pick protocols, so play it safe and disallow all
202 * protocols to start with, and re-add the wanted ones back in.
203 */
204 *val = 0;
205
206 if(!str)
207 return CURLE_BAD_FUNCTION_ARGUMENT;
208
209 if(curl_strequal(str, "all")) {
210 *val = ~(curl_prot_t)0;
211 return CURLE_OK;
212 }
213
214 do {
215 const char *token = str;
216 size_t tlen;
217
218 str = strchr(str, ',');
219 tlen = str ? (size_t)(str - token) : strlen(token);
220 if(tlen) {
221 const struct Curl_scheme *h = Curl_getn_scheme(token, tlen);
222
223 if(!h || !h->run)
224 return CURLE_UNSUPPORTED_PROTOCOL;
225
226 *val |= h->protocol;
227 }
228 } while(str && str++);
229
230 if(!*val)
231 /* no protocol listed */
232 return CURLE_BAD_FUNCTION_ARGUMENT;
233 return CURLE_OK;
234}
235
236#if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_PROXY)
237static CURLcode httpauth(struct Curl_easy *data, bool proxy,
238 unsigned long auth)
239{
240 if(auth != CURLAUTH_NONE) {
241 int bitcheck = 0;
242 bool authbits = FALSE;
243 if(auth & CURLAUTH_DIGEST_IE) {
244 auth |= CURLAUTH_DIGEST; /* set standard digest bit */
245 auth &= ~CURLAUTH_DIGEST_IE; /* drop the legacy bit */
246 }
247
248 /* switch off bits we cannot support */
249#ifndef USE_NTLM
250 auth &= ~CURLAUTH_NTLM; /* no NTLM support */
251#endif
252#ifndef USE_SPNEGO
253 auth &= ~CURLAUTH_NEGOTIATE; /* no Negotiate (SPNEGO) auth without GSS-API
254 or SSPI */
255#endif
256
257 /* check if any auth bit lower than CURLAUTH_ONLY is still set */
258 while(bitcheck < 31) {
259 if(auth & (1UL << bitcheck++)) {
260 authbits = TRUE;
261 break;
262 }
263 }
264 if(!authbits)
265 return CURLE_NOT_BUILT_IN; /* no supported types left! */
266 }
267 if(proxy)
268 data->set.proxyauth = (uint32_t)auth;
269 else
270 data->set.httpauth = (uint32_t)auth;
271 return CURLE_OK;
272}
273#endif /* !CURL_DISABLE_HTTP || !CURL_DISABLE_PROXY */
274
275#ifndef CURL_DISABLE_HTTP
276static CURLcode setopt_HTTP_VERSION(struct Curl_easy *data, long arg)
277{
278 /*
279 * This sets a requested HTTP version to be used. The value is one of
280 * the listed enums in curl/curl.h.
281 */
282 switch(arg) {
283 case CURL_HTTP_VERSION_NONE:
284 /* accepted */
285 break;
286 case CURL_HTTP_VERSION_1_0:
287 case CURL_HTTP_VERSION_1_1:
288 /* accepted */
289 break;
290#ifdef USE_HTTP2
291 case CURL_HTTP_VERSION_2_0:
292 case CURL_HTTP_VERSION_2TLS:
293 case CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE:
294 /* accepted */
295 break;
296#endif
297#ifdef USE_HTTP3
298 case CURL_HTTP_VERSION_3:
299 case CURL_HTTP_VERSION_3ONLY:
300 /* accepted */
301 break;
302#endif
303 default:
304 /* not accepted */
305 if(arg < CURL_HTTP_VERSION_NONE)
306 return CURLE_BAD_FUNCTION_ARGUMENT;
307 return CURLE_UNSUPPORTED_PROTOCOL;
308 }
309 data->set.httpwant = (unsigned char)arg;
310 return CURLE_OK;
311}
312#endif /* !CURL_DISABLE_HTTP */
313
314#ifdef USE_SSL
315CURLcode Curl_setopt_SSLVERSION(struct Curl_easy *data, CURLoption option,
316 long arg)
317{
318 /*
319 * Set explicit SSL version to try to connect with, as some SSL
320 * implementations are lame.
321 */
322 {
323 long version, version_max;
324 struct ssl_primary_config *primary = &data->set.ssl.primary;
325#ifndef CURL_DISABLE_PROXY
326 if(option != CURLOPT_SSLVERSION)
327 primary = &data->set.proxy_ssl.primary;
328#else
329 if(option) {}
330#endif
331 version = C_SSLVERSION_VALUE(arg);
332 version_max = (long)C_SSLVERSION_MAX_VALUE(arg);
333
334 if(version < CURL_SSLVERSION_DEFAULT ||
335 version == CURL_SSLVERSION_SSLv2 ||
336 version == CURL_SSLVERSION_SSLv3 ||
337 version >= CURL_SSLVERSION_LAST ||
338 version_max < CURL_SSLVERSION_MAX_NONE ||
339 version_max >= CURL_SSLVERSION_MAX_LAST)
340 return CURLE_BAD_FUNCTION_ARGUMENT;
341 if(version == CURL_SSLVERSION_DEFAULT)
342 version = CURL_SSLVERSION_TLSv1_2;
343
344 primary->version = (unsigned char)version;
345 primary->version_max = (unsigned int)version_max;
346 }
347 return CURLE_OK;
348}
349#endif /* !USE_SSL */
350
351#ifndef CURL_DISABLE_RTSP
352static CURLcode setopt_RTSP_REQUEST(struct Curl_easy *data, long arg)
353{
354 /*
355 * Set the RTSP request method (OPTIONS, SETUP, PLAY, etc...) Would this be
356 * better if the RTSPREQ_* were moved into here?
357 */
358 Curl_RtspReq rtspreq = RTSPREQ_NONE;
359 switch(arg) {
360 case CURL_RTSPREQ_OPTIONS:
361 rtspreq = RTSPREQ_OPTIONS;
362 break;
363 case CURL_RTSPREQ_DESCRIBE:
364 rtspreq = RTSPREQ_DESCRIBE;
365 break;
366 case CURL_RTSPREQ_ANNOUNCE:
367 rtspreq = RTSPREQ_ANNOUNCE;
368 break;
369 case CURL_RTSPREQ_SETUP:
370 rtspreq = RTSPREQ_SETUP;
371 break;
372 case CURL_RTSPREQ_PLAY:
373 rtspreq = RTSPREQ_PLAY;
374 break;
375 case CURL_RTSPREQ_PAUSE:
376 rtspreq = RTSPREQ_PAUSE;
377 break;
378 case CURL_RTSPREQ_TEARDOWN:
379 rtspreq = RTSPREQ_TEARDOWN;
380 break;
381 case CURL_RTSPREQ_GET_PARAMETER:
382 rtspreq = RTSPREQ_GET_PARAMETER;
383 break;
384 case CURL_RTSPREQ_SET_PARAMETER:
385 rtspreq = RTSPREQ_SET_PARAMETER;
386 break;
387 case CURL_RTSPREQ_RECORD:
388 rtspreq = RTSPREQ_RECORD;
389 break;
390 case CURL_RTSPREQ_RECEIVE:
391 rtspreq = RTSPREQ_RECEIVE;
392 break;
393 default:
394 return CURLE_BAD_FUNCTION_ARGUMENT;
395 }
396
397 data->set.rtspreq = rtspreq;
398 return CURLE_OK;
399}
400#endif /* !CURL_DISABLE_RTSP */
401
402#ifdef USE_SSL
403static void set_ssl_options(struct ssl_config_data *ssl,
404 struct ssl_primary_config *config,
405 long arg)
406{
407 config->ssl_options = (unsigned char)(arg & 0xff);
408 ssl->enable_beast = !!(arg & CURLSSLOPT_ALLOW_BEAST);
409 ssl->no_revoke = !!(arg & CURLSSLOPT_NO_REVOKE);
410 ssl->no_partialchain = !!(arg & CURLSSLOPT_NO_PARTIALCHAIN);
411 ssl->revoke_best_effort = !!(arg & CURLSSLOPT_REVOKE_BEST_EFFORT);
412 ssl->native_ca_store = !!(arg & CURLSSLOPT_NATIVE_CA);
413 ssl->auto_client_cert = !!(arg & CURLSSLOPT_AUTO_CLIENT_CERT);
414 ssl->earlydata = !!(arg & CURLSSLOPT_EARLYDATA);
415}
416#endif
417
418static CURLcode setopt_long_bool(struct Curl_easy *data, CURLoption option,
419 long arg)
420{
421 bool enabled = !!arg;
422 int ok = 1;
423 struct UserDefined *s = &data->set;
424 switch(option) {
425 case CURLOPT_FORBID_REUSE:
426 /*
427 * When this transfer is done, it must not be left to be reused by a
428 * subsequent transfer but shall be closed immediately.
429 */
430 s->reuse_forbid = enabled;
431 break;
432 case CURLOPT_FRESH_CONNECT:
433 /*
434 * This transfer shall not use a previously cached connection but
435 * should be made with a fresh new connect!
436 */
437 s->reuse_fresh = enabled;
438 break;
439 case CURLOPT_VERBOSE:
440 /*
441 * Verbose means infof() calls that give a lot of information about
442 * the connection and transfer procedures as well as internal choices.
443 */
444 s->verbose = enabled;
445 break;
446 case CURLOPT_HEADER:
447 /*
448 * Set to include the header in the general data output stream.
449 */
450 s->include_header = enabled;
451 break;
452 case CURLOPT_NOPROGRESS:
453 /*
454 * Shut off the internal supported progress meter
455 */
456 data->progress.hide = enabled;
457 break;
458 case CURLOPT_NOBODY:
459 /*
460 * Do not include the body part in the output data stream.
461 */
462 s->opt_no_body = enabled;
463#ifndef CURL_DISABLE_HTTP
464 if(s->opt_no_body)
465 /* in HTTP lingo, no body means using the HEAD request... */
466 s->method = HTTPREQ_HEAD;
467 else if(s->method == HTTPREQ_HEAD)
468 s->method = HTTPREQ_GET;
469#endif
470 break;
471 case CURLOPT_FAILONERROR:
472 /*
473 * Do not output the >=400 error code HTML-page, but instead only
474 * return error.
475 */
476 s->http_fail_on_error = enabled;
477 break;
478 case CURLOPT_KEEP_SENDING_ON_ERROR:
479 s->http_keep_sending_on_error = enabled;
480 break;
481 case CURLOPT_UPLOAD:
482 case CURLOPT_PUT:
483 /*
484 * We want to send data to the remote host. If this is HTTP, that equals
485 * using the PUT request.
486 */
487 if(enabled) {
488 /* If this is HTTP, PUT is what's needed to "upload" */
489 s->method = HTTPREQ_PUT;
490 s->opt_no_body = FALSE; /* this is implied */
491 }
492 else
493 /* In HTTP, the opposite of upload is GET (unless NOBODY is true as
494 then this can be changed to HEAD later on) */
495 s->method = HTTPREQ_GET;
496 break;
497 case CURLOPT_FILETIME:
498 /*
499 * Try to get the file time of the remote document. The time will
500 * later (possibly) become available using curl_easy_getinfo().
501 */
502 s->get_filetime = enabled;
503 break;
504#ifndef CURL_DISABLE_HTTP
505 case CURLOPT_HTTP09_ALLOWED:
506 s->http09_allowed = enabled;
507 break;
508#ifndef CURL_DISABLE_COOKIES
509 case CURLOPT_COOKIESESSION:
510 /*
511 * Set this option to TRUE to start a new "cookie session". It will
512 * prevent the forthcoming read-cookies-from-file actions to accept
513 * cookies that are marked as being session cookies, as they belong to a
514 * previous session.
515 */
516 s->cookiesession = enabled;
517 break;
518#endif
519 case CURLOPT_AUTOREFERER:
520 /*
521 * Switch on automatic referer that gets set if curl follows locations.
522 */
523 s->http_auto_referer = enabled;
524 break;
525 case CURLOPT_TRANSFER_ENCODING:
526 s->http_transfer_encoding = enabled;
527 break;
528 case CURLOPT_UNRESTRICTED_AUTH:
529 /*
530 * Send authentication (user+password) when following locations, even when
531 * hostname changed.
532 */
533 s->allow_auth_to_other_hosts = enabled;
534 break;
535 case CURLOPT_HTTP_TRANSFER_DECODING:
536 /*
537 * disable libcurl transfer encoding is used
538 */
539 s->http_te_skip = !enabled; /* reversed */
540 break;
541 case CURLOPT_HTTP_CONTENT_DECODING:
542 /*
543 * raw data passed to the application when content encoding is used
544 */
545 s->http_ce_skip = !enabled; /* reversed */
546 break;
547 case CURLOPT_HTTPGET:
548 /*
549 * Set to force us do HTTP GET
550 */
551 if(enabled) {
552 s->method = HTTPREQ_GET;
553 s->opt_no_body = FALSE; /* this is implied */
554 }
555 break;
556 case CURLOPT_POST:
557 /* Does this option serve a purpose anymore? Yes it does, when
558 CURLOPT_POSTFIELDS is not used and the POST data is read off the
559 callback! */
560 if(enabled) {
561 s->method = HTTPREQ_POST;
562 s->opt_no_body = FALSE; /* this is implied */
563 }
564 else
565 s->method = HTTPREQ_GET;
566 break;
567#endif /* !CURL_DISABLE_HTTP */
568#ifndef CURL_DISABLE_PROXY
569 case CURLOPT_HTTPPROXYTUNNEL:
570 /*
571 * Tunnel operations through the proxy instead of normal proxy use
572 */
573 s->tunnel_thru_httpproxy = enabled;
574 break;
575 case CURLOPT_HAPROXYPROTOCOL:
576 /*
577 * Set to send the HAProxy Proxy Protocol header
578 */
579 s->haproxyprotocol = enabled;
580 break;
581 case CURLOPT_PROXY_SSL_VERIFYPEER:
582 /*
583 * Enable peer SSL verifying for proxy.
584 */
585 s->proxy_ssl.primary.verifypeer = enabled;
586
587 /* Update the current connection proxy_ssl_config. */
588 Curl_ssl_conn_config_update(data, TRUE);
589 break;
590 case CURLOPT_PROXY_SSL_VERIFYHOST:
591 /*
592 * Enable verification of the hostname in the peer certificate for proxy
593 */
594 s->proxy_ssl.primary.verifyhost = enabled;
595 ok = 2;
596 /* Update the current connection proxy_ssl_config. */
597 Curl_ssl_conn_config_update(data, TRUE);
598 break;
599 case CURLOPT_PROXY_TRANSFER_MODE:
600 /*
601 * set transfer mode (;type=<a|i>) when doing FTP via an HTTP proxy
602 */
603 s->proxy_transfer_mode = enabled;
604 break;
605#endif /* !CURL_DISABLE_PROXY */
606#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
607 case CURLOPT_SOCKS5_GSSAPI_NEC:
608 /*
609 * Set flag for NEC SOCKS5 support
610 */
611 s->socks5_gssapi_nec = enabled;
612 break;
613#endif
614#ifdef CURL_LIST_ONLY_PROTOCOL
615 case CURLOPT_DIRLISTONLY:
616 /*
617 * An option that changes the command to one that asks for a list only, no
618 * file info details. Used for FTP, POP3 and SFTP.
619 */
620 s->list_only = enabled;
621 break;
622#endif
623 case CURLOPT_APPEND:
624 /*
625 * We want to upload and append to an existing file. Used for FTP and
626 * SFTP.
627 */
628 s->remote_append = enabled;
629 break;
630#ifndef CURL_DISABLE_FTP
631 case CURLOPT_FTP_USE_EPRT:
632 s->ftp_use_eprt = enabled;
633 break;
634 case CURLOPT_FTP_USE_EPSV:
635 s->ftp_use_epsv = enabled;
636 break;
637 case CURLOPT_FTP_USE_PRET:
638 s->ftp_use_pret = enabled;
639 break;
640 case CURLOPT_FTP_SKIP_PASV_IP:
641 /*
642 * Enable or disable FTP_SKIP_PASV_IP, which will disable/enable the
643 * bypass of the IP address in PASV responses.
644 */
645 s->ftp_skip_ip = enabled;
646 break;
647 case CURLOPT_WILDCARDMATCH:
648 s->wildcard_enabled = enabled;
649 break;
650#endif
651 case CURLOPT_CRLF:
652 /*
653 * Kludgy option to enable CRLF conversions. Subject for removal.
654 */
655 s->crlf = enabled;
656 break;
657#ifndef CURL_DISABLE_TFTP
658 case CURLOPT_TFTP_NO_OPTIONS:
659 /*
660 * Option that prevents libcurl from sending TFTP option requests to the
661 * server.
662 */
663 s->tftp_no_options = enabled;
664 break;
665#endif /* !CURL_DISABLE_TFTP */
666 case CURLOPT_TRANSFERTEXT:
667 /*
668 * This option was previously named 'FTPASCII'. Renamed to work with
669 * more protocols than merely FTP.
670 *
671 * Transfer using ASCII (instead of BINARY).
672 */
673 s->prefer_ascii = enabled;
674 break;
675 case CURLOPT_SSL_VERIFYPEER:
676 /*
677 * Enable peer SSL verifying.
678 */
679 s->ssl.primary.verifypeer = enabled;
680
681 /* Update the current connection ssl_config. */
682 Curl_ssl_conn_config_update(data, FALSE);
683 break;
684#ifndef CURL_DISABLE_DOH
685 case CURLOPT_DOH_SSL_VERIFYPEER:
686 /*
687 * Enable peer SSL verifying for DoH.
688 */
689 s->doh_verifypeer = enabled;
690 break;
691 case CURLOPT_DOH_SSL_VERIFYHOST:
692 /*
693 * Enable verification of the hostname in the peer certificate for DoH
694 */
695 s->doh_verifyhost = enabled;
696 ok = 2;
697 break;
698 case CURLOPT_DOH_SSL_VERIFYSTATUS:
699 /*
700 * Enable certificate status verifying for DoH.
701 */
702 if(!Curl_ssl_cert_status_request())
703 return CURLE_NOT_BUILT_IN;
704
705 s->doh_verifystatus = enabled;
706 ok = 2;
707 break;
708#endif /* !CURL_DISABLE_DOH */
709 case CURLOPT_SSL_VERIFYHOST:
710 /*
711 * Enable verification of the hostname in the peer certificate
712 */
713
714 /* Obviously people are not reading documentation and too many thought
715 this argument took a boolean when it was not and misused it.
716 Treat 1 and 2 the same */
717 s->ssl.primary.verifyhost = enabled;
718 ok = 2;
719
720 /* Update the current connection ssl_config. */
721 Curl_ssl_conn_config_update(data, FALSE);
722 break;
723 case CURLOPT_SSL_VERIFYSTATUS:
724 /*
725 * Enable certificate status verifying.
726 */
727 if(!Curl_ssl_cert_status_request())
728 return CURLE_NOT_BUILT_IN;
729
730 s->ssl.primary.verifystatus = enabled;
731
732 /* Update the current connection ssl_config. */
733 Curl_ssl_conn_config_update(data, FALSE);
734 break;
735 case CURLOPT_CERTINFO:
736#ifdef USE_SSL
737 if(Curl_ssl_supports(data, SSLSUPP_CERTINFO))
738 s->ssl.certinfo = enabled;
739 else
740#endif
741 return CURLE_NOT_BUILT_IN;
742 break;
743 case CURLOPT_NOSIGNAL:
744 /*
745 * The application asks not to set any signal() or alarm() handlers,
746 * even when using a timeout.
747 */
748 s->no_signal = enabled;
749 break;
750 case CURLOPT_TCP_NODELAY:
751 /*
752 * Enable or disable TCP_NODELAY, which will disable/enable the Nagle
753 * algorithm
754 */
755 s->tcp_nodelay = enabled;
756 break;
757 case CURLOPT_IGNORE_CONTENT_LENGTH:
758 s->ignorecl = enabled;
759 break;
760 case CURLOPT_SSL_SESSIONID_CACHE:
761 s->ssl.primary.cache_session = enabled;
762#ifndef CURL_DISABLE_PROXY
763 s->proxy_ssl.primary.cache_session = s->ssl.primary.cache_session;
764#endif
765 break;
766#ifdef USE_SSH
767 case CURLOPT_SSH_COMPRESSION:
768 s->ssh_compression = enabled;
769 break;
770#endif /* !USE_SSH */
771#ifndef CURL_DISABLE_SMTP
772 case CURLOPT_MAIL_RCPT_ALLOWFAILS:
773 /* allow RCPT TO command to fail for some recipients */
774 s->mail_rcpt_allowfails = enabled;
775 break;
776#endif /* !CURL_DISABLE_SMTP */
777 case CURLOPT_SASL_IR:
778 /* Enable/disable SASL initial response */
779 s->sasl_ir = enabled;
780 break;
781 case CURLOPT_TCP_KEEPALIVE:
782 s->tcp_keepalive = enabled;
783 break;
784 case CURLOPT_TCP_FASTOPEN:
785#if defined(CONNECT_DATA_IDEMPOTENT) || defined(MSG_FASTOPEN) || \
786 defined(TCP_FASTOPEN_CONNECT)
787 s->tcp_fastopen = enabled;
788 break;
789#else
790 return CURLE_NOT_BUILT_IN;
791#endif
792 case CURLOPT_SSL_ENABLE_ALPN:
793 s->ssl_enable_alpn = enabled;
794 break;
795 case CURLOPT_PATH_AS_IS:
796 s->path_as_is = enabled;
797 break;
798 case CURLOPT_PIPEWAIT:
799 s->pipewait = enabled;
800 break;
801 case CURLOPT_SUPPRESS_CONNECT_HEADERS:
802 s->suppress_connect_headers = enabled;
803 break;
804#ifndef CURL_DISABLE_SHUFFLE_DNS
805 case CURLOPT_DNS_SHUFFLE_ADDRESSES:
806 s->dns_shuffle_addresses = enabled;
807 break;
808#endif
809 case CURLOPT_DISALLOW_USERNAME_IN_URL:
810 s->disallow_username_in_url = enabled;
811 break;
812 case CURLOPT_QUICK_EXIT:
813 s->quick_exit = enabled;
814 break;
815 default:
816 return CURLE_UNKNOWN_OPTION;
817 }
818 if((arg > ok) || (arg < 0))
819 /* reserve other values for future use */
820 infof(data, "boolean setopt(%d) got unsupported argument %ld,"
821 " treated as %d", option, arg, enabled);
822
823 return CURLE_OK;
824}
825
826static CURLcode value_range(long *value, long below_error, long min, long max)
827{
828 if(*value < below_error)
829 return CURLE_BAD_FUNCTION_ARGUMENT;
830 else if(*value < min)
831 *value = min;
832 else if(*value > max)
833 *value = max;
834 return CURLE_OK;
835}
836
837static CURLcode setopt_long_net(struct Curl_easy *data, CURLoption option,
838 long arg)
839{
840 CURLcode result = CURLE_OK;
841 struct UserDefined *s = &data->set;
842
843 switch(option) {
844 case CURLOPT_DNS_CACHE_TIMEOUT:
845 if(arg != -1)
846 return setopt_set_timeout_sec(&s->dns_cache_timeout_ms, arg);
847 s->dns_cache_timeout_ms = -1;
848 break;
849 case CURLOPT_MAXCONNECTS:
850 result = value_range(&arg, 1, 1, INT_MAX);
851 if(!result)
852 s->maxconnects = (uint32_t)arg;
853 break;
854 case CURLOPT_SERVER_RESPONSE_TIMEOUT:
855 return setopt_set_timeout_sec(&s->server_response_timeout, arg);
856 case CURLOPT_SERVER_RESPONSE_TIMEOUT_MS:
857 return setopt_set_timeout_ms(&s->server_response_timeout, arg);
858 case CURLOPT_LOW_SPEED_LIMIT:
859 if(arg < 0)
860 result = CURLE_BAD_FUNCTION_ARGUMENT;
861 else
862 s->low_speed_limit = arg;
863 break;
864 case CURLOPT_LOW_SPEED_TIME:
865 result = value_range(&arg, 0, 0, USHRT_MAX);
866 if(!result)
867 s->low_speed_time = (uint16_t)arg;
868 break;
869 case CURLOPT_PORT:
870 if((arg < 0) || (arg > 65535))
871 return CURLE_BAD_FUNCTION_ARGUMENT;
872 s->use_port = (unsigned short)arg;
873 break;
874 case CURLOPT_TIMEOUT:
875 return setopt_set_timeout_sec(&s->timeout, arg);
876 case CURLOPT_TIMEOUT_MS:
877 return setopt_set_timeout_ms(&s->timeout, arg);
878 case CURLOPT_CONNECTTIMEOUT:
879 return setopt_set_timeout_sec(&s->connecttimeout, arg);
880 case CURLOPT_CONNECTTIMEOUT_MS:
881 return setopt_set_timeout_ms(&s->connecttimeout, arg);
882#ifndef CURL_DISABLE_BINDLOCAL
883 case CURLOPT_LOCALPORT:
884 if((arg < 0) || (arg > 65535))
885 return CURLE_BAD_FUNCTION_ARGUMENT;
886 s->localport = curlx_sltous(arg);
887 break;
888 case CURLOPT_LOCALPORTRANGE:
889 if((arg < 0) || (arg > 65535))
890 return CURLE_BAD_FUNCTION_ARGUMENT;
891 s->localportrange = curlx_sltous(arg);
892 break;
893#endif
894 case CURLOPT_BUFFERSIZE:
895 result = value_range(&arg, 0, READBUFFER_MIN, READBUFFER_MAX);
896 if(!result)
897 s->buffer_size = (unsigned int)arg;
898 break;
899 case CURLOPT_UPLOAD_BUFFERSIZE:
900 result = value_range(&arg, 0, UPLOADBUFFER_MIN, UPLOADBUFFER_MAX);
901 if(!result)
902 s->upload_buffer_size = (unsigned int)arg;
903 break;
904 case CURLOPT_MAXFILESIZE:
905 if(arg < 0)
906 result = CURLE_BAD_FUNCTION_ARGUMENT;
907 else
908 s->max_filesize = arg;
909 break;
910 case CURLOPT_IPRESOLVE:
911 if((arg < CURL_IPRESOLVE_WHATEVER) || (arg > CURL_IPRESOLVE_V6))
912 result = CURLE_BAD_FUNCTION_ARGUMENT;
913 else
914 s->ipver = (unsigned char)arg;
915 break;
916 case CURLOPT_CONNECT_ONLY:
917 if(arg < 0 || arg > 2)
918 result = CURLE_BAD_FUNCTION_ARGUMENT;
919 else {
920 s->connect_only = !!arg;
921 s->connect_only_ws = (arg == 2);
922 }
923 break;
924#ifdef USE_IPV6
925 case CURLOPT_ADDRESS_SCOPE:
926#if SIZEOF_LONG > 4
927 if((unsigned long)arg > UINT_MAX)
928 result = CURLE_BAD_FUNCTION_ARGUMENT;
929 else
930#endif
931 s->scope_id = (unsigned int)arg;
932 break;
933#endif
934 case CURLOPT_TCP_KEEPIDLE:
935 result = value_range(&arg, 0, 0, INT_MAX);
936 if(!result)
937 s->tcp_keepidle = (int)arg;
938 break;
939 case CURLOPT_TCP_KEEPINTVL:
940 result = value_range(&arg, 0, 0, INT_MAX);
941 if(!result)
942 s->tcp_keepintvl = (int)arg;
943 break;
944 case CURLOPT_TCP_KEEPCNT:
945 result = value_range(&arg, 0, 0, INT_MAX);
946 if(!result)
947 s->tcp_keepcnt = (int)arg;
948 break;
949 case CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS:
950 return setopt_set_timeout_ms(&s->happy_eyeballs_timeout, arg);
951 case CURLOPT_UPKEEP_INTERVAL_MS:
952 return setopt_set_timeout_ms(&s->upkeep_interval_ms, arg);
953 case CURLOPT_MAXAGE_CONN:
954 return setopt_set_timeout_sec(&s->conn_max_idle_ms, arg);
955 case CURLOPT_MAXLIFETIME_CONN:
956 return setopt_set_timeout_sec(&s->conn_max_age_ms, arg);
957 case CURLOPT_DNS_USE_GLOBAL_CACHE:
958 /* deprecated */
959 break;
960 default:
961 return CURLE_UNKNOWN_OPTION;
962 }
963 return result;
964}
965
966static CURLcode setopt_long_ssl(struct Curl_easy *data, CURLoption option,
967 long arg)
968{
969#ifdef USE_SSL
970 CURLcode result = CURLE_OK;
971 struct UserDefined *s = &data->set;
972 switch(option) {
973 case CURLOPT_CA_CACHE_TIMEOUT:
974 if(Curl_ssl_supports(data, SSLSUPP_CA_CACHE)) {
975 result = value_range(&arg, -1, -1, INT_MAX);
976 if(!result)
977 s->general_ssl.ca_cache_timeout = (int)arg;
978 }
979 else
980 result = CURLE_NOT_BUILT_IN;
981 break;
982 case CURLOPT_SSLVERSION:
983#ifndef CURL_DISABLE_PROXY
984 case CURLOPT_PROXY_SSLVERSION:
985#endif
986 return Curl_setopt_SSLVERSION(data, option, arg);
987 case CURLOPT_SSL_FALSESTART:
988 result = CURLE_NOT_BUILT_IN;
989 break;
990 case CURLOPT_USE_SSL:
991 if((arg < CURLUSESSL_NONE) || (arg >= CURLUSESSL_LAST))
992 result = CURLE_BAD_FUNCTION_ARGUMENT;
993 else
994 s->use_ssl = (unsigned char)arg;
995 break;
996 case CURLOPT_SSL_OPTIONS:
997 set_ssl_options(&s->ssl, &s->ssl.primary, arg);
998 break;
999#ifndef CURL_DISABLE_PROXY
1000 case CURLOPT_PROXY_SSL_OPTIONS:
1001 set_ssl_options(&s->proxy_ssl, &s->proxy_ssl.primary, arg);
1002 break;
1003#endif
1004 case CURLOPT_SSL_ENABLE_NPN:
1005 break;
1006 case CURLOPT_SSLENGINE_DEFAULT:
1007 curlx_safefree(s->str[STRING_SSL_ENGINE]);
1008 result = Curl_ssl_set_engine_default(data);
1009 break;
1010 default:
1011 return CURLE_UNKNOWN_OPTION;
1012 }
1013 return result;
1014#else /* USE_SSL */
1015 (void)data;
1016 (void)option;
1017 (void)arg;
1018 return CURLE_UNKNOWN_OPTION;
1019#endif /* !USE_SSL */
1020}
1021
1022#ifndef CURL_DISABLE_PROXY
1023static void changeproxy(struct Curl_easy *data)
1024{
1025 Curl_auth_digest_cleanup(&data->state.proxydigest);
1026 memset(&data->state.authproxy, 0, sizeof(data->state.authproxy));
1027}
1028
1029static CURLcode setopt_long_proxy(struct Curl_easy *data, CURLoption option,
1030 long arg)
1031{
1032 struct UserDefined *s = &data->set;
1033
1034 switch(option) {
1035 case CURLOPT_PROXYPORT:
1036 if((arg < 0) || (arg > UINT16_MAX))
1037 return CURLE_BAD_FUNCTION_ARGUMENT;
1038 if(arg != s->proxyport)
1039 changeproxy(data);
1040 s->proxyport = (uint16_t)arg;
1041 break;
1042 case CURLOPT_PROXYAUTH:
1043 return httpauth(data, TRUE, (unsigned long)arg);
1044 case CURLOPT_PROXYTYPE:
1045 if((arg < CURLPROXY_HTTP) || (arg > CURLPROXY_SOCKS5_HOSTNAME))
1046 return CURLE_BAD_FUNCTION_ARGUMENT;
1047 s->proxytype = (unsigned char)arg;
1048 break;
1049 case CURLOPT_SOCKS5_AUTH:
1050 if(arg & ~(CURLAUTH_BASIC | CURLAUTH_GSSAPI))
1051 return CURLE_NOT_BUILT_IN;
1052 s->socks5auth = (unsigned char)arg;
1053 break;
1054 default:
1055 return CURLE_UNKNOWN_OPTION;
1056 }
1057 return CURLE_OK;
1058}
1059#else
1060static CURLcode setopt_long_proxy(struct Curl_easy *data, CURLoption option,
1061 long arg)
1062{
1063 (void)data;
1064 (void)option;
1065 (void)arg;
1066 return CURLE_UNKNOWN_OPTION;
1067}
1068#endif
1069
1070static CURLcode setopt_long_http(struct Curl_easy *data, CURLoption option,
1071 long arg)
1072{
1073#ifndef CURL_DISABLE_HTTP
1074 CURLcode result = CURLE_OK;
1075 struct UserDefined *s = &data->set;
1076
1077 switch(option) {
1078 case CURLOPT_FOLLOWLOCATION:
1079 if((unsigned long)arg > 3)
1080 result = CURLE_BAD_FUNCTION_ARGUMENT;
1081 else
1082 s->http_follow_mode = (unsigned char)arg;
1083 break;
1084 case CURLOPT_MAXREDIRS:
1085 result = value_range(&arg, -1, -1, 0x7fff);
1086 if(!result)
1087 s->maxredirs = (short)arg;
1088 break;
1089 case CURLOPT_POSTREDIR:
1090 if(arg < CURL_REDIR_GET_ALL)
1091 result = CURLE_BAD_FUNCTION_ARGUMENT;
1092 else {
1093 s->post301 = !!(arg & CURL_REDIR_POST_301);
1094 s->post302 = !!(arg & CURL_REDIR_POST_302);
1095 s->post303 = !!(arg & CURL_REDIR_POST_303);
1096 }
1097 break;
1098 case CURLOPT_HEADEROPT:
1099 s->sep_headers = !!(arg & CURLHEADER_SEPARATE);
1100 break;
1101 case CURLOPT_HTTPAUTH:
1102 return httpauth(data, FALSE, (unsigned long)arg);
1103 case CURLOPT_HTTP_VERSION:
1104 return setopt_HTTP_VERSION(data, arg);
1105 case CURLOPT_EXPECT_100_TIMEOUT_MS:
1106 result = value_range(&arg, 0, 0, 0xffff);
1107 if(!result)
1108 s->expect_100_timeout = (unsigned short)arg;
1109 break;
1110 case CURLOPT_STREAM_WEIGHT:
1111#if defined(USE_HTTP2) || defined(USE_HTTP3)
1112 if((arg >= 1) && (arg <= 256))
1113 s->priority.weight = (int)arg;
1114 break;
1115#else
1116 result = CURLE_NOT_BUILT_IN;
1117 break;
1118#endif
1119 default:
1120 return CURLE_UNKNOWN_OPTION;
1121 }
1122 return result;
1123#else
1124 (void)data;
1125 (void)option;
1126 (void)arg;
1127 return CURLE_UNKNOWN_OPTION;
1128#endif
1129}
1130
1131static CURLcode setopt_long_proto(struct Curl_easy *data, CURLoption option,
1132 long arg)
1133{
1134 CURLcode result = CURLE_OK;
1135 struct UserDefined *s = &data->set;
1136
1137 switch(option) {
1138#ifndef CURL_DISABLE_TFTP
1139 case CURLOPT_TFTP_BLKSIZE:
1140 result = value_range(&arg, 0, TFTP_BLKSIZE_MIN, TFTP_BLKSIZE_MAX);
1141 if(!result)
1142 s->tftp_blksize = (unsigned short)arg;
1143 break;
1144#endif
1145#ifndef CURL_DISABLE_NETRC
1146 case CURLOPT_NETRC:
1147 if((arg < CURL_NETRC_IGNORED) || (arg >= CURL_NETRC_LAST))
1148 result = CURLE_BAD_FUNCTION_ARGUMENT;
1149 else
1150 s->use_netrc = (unsigned char)arg;
1151 break;
1152#endif
1153#ifndef CURL_DISABLE_FTP
1154 case CURLOPT_FTP_FILEMETHOD:
1155 if((arg < CURLFTPMETHOD_DEFAULT) || (arg >= CURLFTPMETHOD_LAST))
1156 result = CURLE_BAD_FUNCTION_ARGUMENT;
1157 else
1158 s->ftp_filemethod = (unsigned char)arg;
1159 break;
1160 case CURLOPT_FTP_SSL_CCC:
1161 if((arg < CURLFTPSSL_CCC_NONE) || (arg >= CURLFTPSSL_CCC_LAST))
1162 result = CURLE_BAD_FUNCTION_ARGUMENT;
1163 else
1164 s->ftp_ccc = (unsigned char)arg;
1165 break;
1166 case CURLOPT_FTPSSLAUTH:
1167 if((arg < CURLFTPAUTH_DEFAULT) || (arg >= CURLFTPAUTH_LAST))
1168 result = CURLE_BAD_FUNCTION_ARGUMENT;
1169 else
1170 s->ftpsslauth = (unsigned char)arg;
1171 break;
1172 case CURLOPT_ACCEPTTIMEOUT_MS:
1173 return setopt_set_timeout_ms(&s->accepttimeout, arg);
1174#endif
1175#if !defined(CURL_DISABLE_FTP) || defined(USE_SSH)
1176 case CURLOPT_FTP_CREATE_MISSING_DIRS:
1177 if((arg < CURLFTP_CREATE_DIR_NONE) || (arg > CURLFTP_CREATE_DIR_RETRY))
1178 result = CURLE_BAD_FUNCTION_ARGUMENT;
1179 else
1180 s->ftp_create_missing_dirs = (unsigned char)arg;
1181 break;
1182 case CURLOPT_NEW_FILE_PERMS:
1183 if((arg < 0) || (arg > 0777))
1184 result = CURLE_BAD_FUNCTION_ARGUMENT;
1185 else
1186 s->new_file_perms = (unsigned int)arg;
1187 break;
1188#endif
1189#ifndef CURL_DISABLE_RTSP
1190 case CURLOPT_RTSP_REQUEST:
1191 return setopt_RTSP_REQUEST(data, arg);
1192 case CURLOPT_RTSP_CLIENT_CSEQ:
1193 result = value_range(&arg, 0, 0, INT_MAX);
1194 if(!result)
1195 data->state.rtsp_next_client_CSeq = (uint32_t)arg;
1196 break;
1197 case CURLOPT_RTSP_SERVER_CSEQ:
1198 result = value_range(&arg, 0, 0, INT_MAX);
1199 if(!result)
1200 data->state.rtsp_next_server_CSeq = (uint32_t)arg;
1201 break;
1202#endif
1203#ifdef USE_SSH
1204 case CURLOPT_SSH_AUTH_TYPES:
1205 s->ssh_auth_types = (uint32_t)arg;
1206 break;
1207 case CURLOPT_NEW_DIRECTORY_PERMS:
1208 if((arg < 0) || (arg > 0777))
1209 result = CURLE_BAD_FUNCTION_ARGUMENT;
1210 else
1211 s->new_directory_perms = (unsigned int)arg;
1212 break;
1213#endif
1214 case CURLOPT_PROTOCOLS:
1215 s->allowed_protocols = (curl_prot_t)arg;
1216 break;
1217 case CURLOPT_REDIR_PROTOCOLS:
1218 s->redir_protocols = (curl_prot_t)arg;
1219 break;
1220#ifndef CURL_DISABLE_WEBSOCKETS
1221 case CURLOPT_WS_OPTIONS:
1222 s->ws_raw_mode = (bool)(arg & CURLWS_RAW_MODE);
1223 s->ws_no_auto_pong = (bool)(arg & CURLWS_NOAUTOPONG);
1224 break;
1225#endif
1226 default:
1227 return CURLE_UNKNOWN_OPTION;
1228 }
1229 return result;
1230}
1231
1232static CURLcode setopt_long_misc(struct Curl_easy *data, CURLoption option,
1233 long arg)
1234{
1235 struct UserDefined *s = &data->set;
1236
1237 switch(option) {
1238 case CURLOPT_TIMECONDITION:
1239 if((arg < CURL_TIMECOND_NONE) || (arg >= CURL_TIMECOND_LAST))
1240 return CURLE_BAD_FUNCTION_ARGUMENT;
1241 s->timecondition = (unsigned char)arg;
1242 break;
1243 case CURLOPT_TIMEVALUE:
1244 s->timevalue = (time_t)arg;
1245 break;
1246 case CURLOPT_POSTFIELDSIZE:
1247 if(arg < -1)
1248 return CURLE_BAD_FUNCTION_ARGUMENT;
1249 if(s->postfieldsize < arg &&
1250 s->postfields == s->str[STRING_COPYPOSTFIELDS]) {
1251 curlx_safefree(s->str[STRING_COPYPOSTFIELDS]);
1252 s->postfields = NULL;
1253 }
1254 s->postfieldsize = arg;
1255 break;
1256 case CURLOPT_INFILESIZE:
1257 if(arg < -1)
1258 return CURLE_BAD_FUNCTION_ARGUMENT;
1259 s->filesize = arg;
1260 break;
1261 case CURLOPT_RESUME_FROM:
1262 if(arg < -1)
1263 return CURLE_BAD_FUNCTION_ARGUMENT;
1264 s->set_resume_from = arg;
1265 break;
1266 case CURLOPT_UPLOAD_FLAGS:
1267 s->upload_flags = (unsigned char)arg;
1268 break;
1269#ifndef CURL_DISABLE_MIME
1270 case CURLOPT_MIME_OPTIONS:
1271 s->mime_formescape = !!(arg & CURLMIMEOPT_FORMESCAPE);
1272 break;
1273#endif
1274#ifndef CURL_DISABLE_HSTS
1275 case CURLOPT_HSTS_CTRL:
1276 if(arg & CURLHSTS_ENABLE) {
1277 if(!data->hsts) {
1278 data->hsts = Curl_hsts_init();
1279 if(!data->hsts)
1280 return CURLE_OUT_OF_MEMORY;
1281 }
1282 }
1283 else if(!data->share || !data->share->hsts) {
1284 /* throw away the HSTS cache unless shared */
1285 Curl_hsts_cleanup(&data->hsts);
1286 /* flush all the entries */
1287 curl_slist_free_all(data->state.hstslist);
1288 data->state.hstslist = NULL;
1289 }
1290 else
1291 /* detach from shared HSTS cache without freeing it */
1292 data->hsts = NULL;
1293 break;
1294#endif
1295#ifndef CURL_DISABLE_ALTSVC
1296 case CURLOPT_ALTSVC_CTRL:
1297 return Curl_altsvc_ctrl(data, arg);
1298#endif
1299#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
1300 case CURLOPT_GSSAPI_DELEGATION:
1301 s->gssapi_delegation = (unsigned char)arg &
1302 (CURLGSSAPI_DELEGATION_POLICY_FLAG | CURLGSSAPI_DELEGATION_FLAG);
1303 break;
1304#endif
1305 default:
1306 return CURLE_UNKNOWN_OPTION;
1307 }
1308 return CURLE_OK;
1309}
1310
1311static CURLcode setopt_long(struct Curl_easy *data, CURLoption option,
1312 long arg)
1313{
1314 typedef CURLcode (*setoptfunc)(struct Curl_easy *data,
1315 CURLoption option, long arg);
1316 static const setoptfunc setopt_call[] = {
1317 setopt_long_bool,
1318 setopt_long_net,
1319 setopt_long_http,
1320 setopt_long_proxy,
1321 setopt_long_ssl,
1322 setopt_long_proto,
1323 setopt_long_misc
1324 };
1325 size_t i;
1326
1327 for(i = 0; i < CURL_ARRAYSIZE(setopt_call); i++) {
1328 CURLcode result = setopt_call[i](data, option, arg);
1329 if(result != CURLE_UNKNOWN_OPTION)
1330 return result;
1331 }
1332 return CURLE_UNKNOWN_OPTION;
1333}
1334
1335static CURLcode setopt_slist(struct Curl_easy *data, CURLoption option,
1336 struct curl_slist *slist)
1337{
1338 CURLcode result = CURLE_OK;
1339 struct UserDefined *s = &data->set;
1340 switch(option) {
1341#ifndef CURL_DISABLE_PROXY
1342 case CURLOPT_PROXYHEADER:
1343 /*
1344 * Set a list with proxy headers to use (or replace internals with)
1345 *
1346 * Since CURLOPT_HTTPHEADER was the only way to set HTTP headers for a
1347 * long time we remain doing it this way until CURLOPT_PROXYHEADER is
1348 * used. As soon as this option has been used, if set to anything but
1349 * NULL, custom headers for proxies are only picked from this list.
1350 *
1351 * Set this option to NULL to restore the previous behavior.
1352 */
1353 s->proxyheaders = slist;
1354 break;
1355#endif
1356#ifndef CURL_DISABLE_HTTP
1357 case CURLOPT_HTTP200ALIASES:
1358 /*
1359 * Set a list of aliases for HTTP 200 in response header
1360 */
1361 s->http200aliases = slist;
1362 break;
1363#endif
1364#if !defined(CURL_DISABLE_FTP) || defined(USE_SSH)
1365 case CURLOPT_POSTQUOTE:
1366 /*
1367 * List of RAW FTP commands to use after a transfer
1368 */
1369 s->postquote = slist;
1370 break;
1371 case CURLOPT_PREQUOTE:
1372 /*
1373 * List of RAW FTP commands to use prior to RETR (Wesley Laxton)
1374 */
1375 s->prequote = slist;
1376 break;
1377 case CURLOPT_QUOTE:
1378 /*
1379 * List of RAW FTP commands to use before a transfer
1380 */
1381 s->quote = slist;
1382 break;
1383#endif
1384 case CURLOPT_RESOLVE:
1385 /*
1386 * List of HOST:PORT:[addresses] strings to populate the DNS cache with
1387 * Entries added this way will remain in the cache until explicitly
1388 * removed or the handle is cleaned up.
1389 *
1390 * Prefix the HOST with plus sign (+) to have the entry expire like
1391 * automatically added entries.
1392 *
1393 * Prefix the HOST with dash (-) to _remove_ the entry from the cache.
1394 *
1395 * This API can remove any entry from the DNS cache, but only entries
1396 * that are not actually in use right now will be pruned immediately.
1397 */
1398 s->resolve = slist;
1399 data->state.resolve = s->resolve;
1400 break;
1401#if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_MIME)
1402 case CURLOPT_HTTPHEADER:
1403 /*
1404 * Set a list with HTTP headers to use (or replace internals with)
1405 */
1406 s->headers = slist;
1407 break;
1408#endif
1409#ifndef CURL_DISABLE_TELNET
1410 case CURLOPT_TELNETOPTIONS:
1411 /*
1412 * Set a linked list of telnet options
1413 */
1414 s->telnet_options = slist;
1415 break;
1416#endif
1417#ifndef CURL_DISABLE_SMTP
1418 case CURLOPT_MAIL_RCPT:
1419 /* Set the list of mail recipients */
1420 s->mail_rcpt = slist;
1421 break;
1422#endif
1423 case CURLOPT_CONNECT_TO:
1424 s->connect_to = slist;
1425 break;
1426 default:
1427 return CURLE_UNKNOWN_OPTION;
1428 }
1429 return result;
1430}
1431
1432#if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_SMTP) || \
1433 !defined(CURL_DISABLE_IMAP)
1434#ifndef CURL_DISABLE_MIME
1435static CURLcode setopt_mimepost(struct Curl_easy *data, curl_mime *mimep)
1436{
1437 /*
1438 * Set to make us do MIME POST
1439 */
1440 CURLcode result;
1441 struct UserDefined *s = &data->set;
1442 if(!s->mimepostp) {
1443 s->mimepostp = curlx_malloc(sizeof(*s->mimepostp));
1444 if(!s->mimepostp)
1445 return CURLE_OUT_OF_MEMORY;
1446 Curl_mime_initpart(s->mimepostp);
1447 }
1448
1449 result = Curl_mime_set_subparts(s->mimepostp, mimep, FALSE);
1450 if(!result) {
1451 s->method = HTTPREQ_POST_MIME;
1452 s->opt_no_body = FALSE; /* this is implied */
1453#ifndef CURL_DISABLE_FORM_API
1454 Curl_mime_cleanpart(data->state.formp);
1455 curlx_safefree(data->state.formp);
1456 data->state.mimepost = NULL;
1457#endif
1458 }
1459 return result;
1460}
1461#endif /* !CURL_DISABLE_MIME */
1462#endif /* !CURL_DISABLE_HTTP || !CURL_DISABLE_SMTP || !CURL_DISABLE_IMAP */
1463
1464/* assorted pointer type arguments */
1465static CURLcode setopt_pointers(struct Curl_easy *data, CURLoption option,
1466 va_list param)
1467{
1468 CURLcode result = CURLE_OK;
1469 struct UserDefined *s = &data->set;
1470 switch(option) {
1471 case CURLOPT_CURLU:
1472 /*
1473 * pass CURLU to set URL
1474 */
1475 Curl_bufref_free(&data->state.url);
1476 curlx_safefree(s->str[STRING_SET_URL]);
1477 s->uh = va_arg(param, CURLU *);
1478 break;
1479#ifndef CURL_DISABLE_HTTP
1480#ifndef CURL_DISABLE_FORM_API
1481 case CURLOPT_HTTPPOST:
1482 /*
1483 * Set to make us do HTTP POST. Legacy API-style.
1484 */
1485 s->httppost = va_arg(param, struct curl_httppost *);
1486 s->method = HTTPREQ_POST_FORM;
1487 s->opt_no_body = FALSE; /* this is implied */
1488 Curl_mime_cleanpart(data->state.formp);
1489 curlx_safefree(data->state.formp);
1490 data->state.mimepost = NULL;
1491 break;
1492#endif /* !CURL_DISABLE_FORM_API */
1493#endif /* !CURL_DISABLE_HTTP */
1494#if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_SMTP) || \
1495 !defined(CURL_DISABLE_IMAP)
1496#ifndef CURL_DISABLE_MIME
1497 case CURLOPT_MIMEPOST:
1498 result = setopt_mimepost(data, va_arg(param, curl_mime *));
1499 break;
1500#endif /* !CURL_DISABLE_MIME */
1501#endif /* !CURL_DISABLE_HTTP || !CURL_DISABLE_SMTP || !CURL_DISABLE_IMAP */
1502 case CURLOPT_STDERR:
1503 /*
1504 * Set to a FILE * that should receive all error writes. This
1505 * defaults to stderr for normal operations.
1506 */
1507 s->err = va_arg(param, FILE *);
1508 if(!s->err)
1509 s->err = stderr;
1510 break;
1511 case CURLOPT_SHARE: {
1512 struct Curl_share *set = va_arg(param, struct Curl_share *);
1513
1514 /* disconnect from old share, if any and possible */
1515 result = Curl_share_easy_unlink(data);
1516 if(result)
1517 return result;
1518
1519 /* use new share if it set */
1520 if(GOOD_SHARE_HANDLE(set)) {
1521 result = Curl_share_easy_link(data, set);
1522 if(result)
1523 return result;
1524 }
1525 break;
1526 }
1527
1528#ifdef USE_HTTP2
1529 case CURLOPT_STREAM_DEPENDS:
1530 case CURLOPT_STREAM_DEPENDS_E: {
1531 struct Curl_easy *dep = va_arg(param, struct Curl_easy *);
1532 if(!dep || GOOD_EASY_HANDLE(dep))
1533 return Curl_data_priority_add_child(dep, data,
1534 option == CURLOPT_STREAM_DEPENDS_E);
1535 break;
1536 }
1537#endif
1538
1539 default:
1540 return CURLE_UNKNOWN_OPTION;
1541 }
1542 return result;
1543}
1544
1545#ifndef CURL_DISABLE_COOKIES
1546static CURLcode cookielist(struct Curl_easy *data, const char *ptr)
1547{
1548 CURLcode result = CURLE_OK;
1549 if(!ptr)
1550 return CURLE_OK;
1551
1552 if(curl_strequal(ptr, "ALL")) {
1553 /* clear all cookies */
1554 Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
1555 Curl_cookie_clearall(data->cookies);
1556 Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
1557 }
1558 else if(curl_strequal(ptr, "SESS")) {
1559 /* clear session cookies */
1560 Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
1561 Curl_cookie_clearsess(data->cookies);
1562 Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
1563 }
1564 else if(curl_strequal(ptr, "FLUSH")) {
1565 /* flush cookies to file, takes care of the locking */
1566 Curl_flush_cookies(data, FALSE);
1567 }
1568 else if(curl_strequal(ptr, "RELOAD")) {
1569 /* reload cookies from file */
1570 return Curl_cookie_loadfiles(data);
1571 }
1572 else {
1573 if(!data->cookies) {
1574 /* if cookie engine was not running, activate it */
1575 data->cookies = Curl_cookie_init();
1576 if(!data->cookies)
1577 return CURLE_OUT_OF_MEMORY;
1578 data->state.cookie_engine = TRUE;
1579 }
1580
1581 /* general protection against mistakes and abuse */
1582 if(strlen(ptr) > CURL_MAX_INPUT_LENGTH)
1583 return CURLE_BAD_FUNCTION_ARGUMENT;
1584
1585 Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
1586 if(checkprefix("Set-Cookie:", ptr))
1587 /* HTTP Header format line */
1588 result = Curl_cookie_add(data, data->cookies, TRUE, FALSE, ptr + 11,
1589 NULL, NULL, TRUE);
1590 else
1591 /* Netscape format line */
1592 result = Curl_cookie_add(data, data->cookies, FALSE, FALSE, ptr, NULL,
1593 NULL, TRUE);
1594 Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
1595 }
1596 return result;
1597}
1598
1599static CURLcode cookiefile(struct Curl_easy *data, const char *ptr)
1600{
1601 /*
1602 * Set cookie file to read and parse. Can be used multiple times.
1603 */
1604 if(ptr) {
1605 struct curl_slist *cl;
1606 /* general protection against mistakes and abuse */
1607 if(strlen(ptr) > CURL_MAX_INPUT_LENGTH)
1608 return CURLE_BAD_FUNCTION_ARGUMENT;
1609 /* append the cookie filename to the list of filenames, and deal with
1610 them later */
1611 cl = curl_slist_append(data->state.cookielist, ptr);
1612 if(!cl) {
1613 curl_slist_free_all(data->state.cookielist);
1614 data->state.cookielist = NULL;
1615 return CURLE_OUT_OF_MEMORY;
1616 }
1617 data->state.cookielist = cl; /* store the list for later use */
1618 }
1619 else {
1620 /* clear the list of cookie files */
1621 curl_slist_free_all(data->state.cookielist);
1622 data->state.cookielist = NULL;
1623
1624 if(!data->share || !data->share->cookies) {
1625 /* throw away all existing cookies if this is not a shared cookie
1626 container */
1627 Curl_cookie_clearall(data->cookies);
1628 Curl_cookie_cleanup(data->cookies);
1629 }
1630 /* disable the cookie engine */
1631 data->cookies = NULL;
1632 }
1633 return CURLE_OK;
1634}
1635#endif
1636
1637#ifndef CURL_DISABLE_PROXY
1638static CURLcode setproxy(struct Curl_easy *data, const char *proxy)
1639{
1640 if((data->set.str[STRING_PROXY] && proxy) &&
1641 /* there was one set, is this a new one? */
1642 !strcmp(data->set.str[STRING_PROXY], proxy))
1643 return CURLE_OK; /* same one as before */
1644
1645 changeproxy(data);
1646 return Curl_setstropt(&data->set.str[STRING_PROXY], proxy);
1647}
1648
1649static CURLcode setopt_cptr_proxy(struct Curl_easy *data, CURLoption option,
1650 const char *ptr)
1651{
1652 CURLcode result = CURLE_OK;
1653 struct UserDefined *s = &data->set;
1654 switch(option) {
1655 case CURLOPT_PROXYUSERPWD: {
1656 /*
1657 * user:password needed to use the proxy
1658 */
1659 char *u = NULL;
1660 char *p = NULL;
1661 result = setstropt_userpwd(ptr, &u, &p);
1662
1663 /* URL decode the components */
1664 if(!result && u) {
1665 curlx_safefree(s->str[STRING_PROXYUSERNAME]);
1666 result = Curl_urldecode(u, 0, &s->str[STRING_PROXYUSERNAME], NULL,
1667 REJECT_ZERO);
1668 }
1669 if(!result && p) {
1670 curlx_safefree(s->str[STRING_PROXYPASSWORD]);
1671 result = Curl_urldecode(p, 0, &s->str[STRING_PROXYPASSWORD], NULL,
1672 REJECT_ZERO);
1673 }
1674 curlx_free(u);
1675 curlx_free(p);
1676 break;
1677 }
1678 case CURLOPT_PROXYUSERNAME:
1679 /*
1680 * authentication username to use in the operation
1681 */
1682 return Curl_setstropt(&s->str[STRING_PROXYUSERNAME], ptr);
1683
1684 case CURLOPT_PROXYPASSWORD:
1685 /*
1686 * authentication password to use in the operation
1687 */
1688 return Curl_setstropt(&s->str[STRING_PROXYPASSWORD], ptr);
1689
1690 case CURLOPT_NOPROXY:
1691 /*
1692 * proxy exception list
1693 */
1694 return Curl_setstropt(&s->str[STRING_NOPROXY], ptr);
1695 case CURLOPT_PROXY_SSLCERT:
1696 /*
1697 * String that holds filename of the SSL certificate to use for proxy
1698 */
1699 return Curl_setstropt(&s->str[STRING_CERT_PROXY], ptr);
1700 case CURLOPT_PROXY_SSLCERTTYPE:
1701 /*
1702 * String that holds file type of the SSL certificate to use for proxy
1703 */
1704 return Curl_setstropt(&s->str[STRING_CERT_TYPE_PROXY], ptr);
1705 case CURLOPT_PROXY_SSLKEY:
1706 /*
1707 * String that holds filename of the SSL key to use for proxy
1708 */
1709 return Curl_setstropt(&s->str[STRING_KEY_PROXY], ptr);
1710 case CURLOPT_PROXY_KEYPASSWD:
1711 /*
1712 * String that holds the SSL private key password for proxy.
1713 */
1714 return Curl_setstropt(&s->str[STRING_KEY_PASSWD_PROXY], ptr);
1715 case CURLOPT_PROXY_SSLKEYTYPE:
1716 /*
1717 * String that holds file type of the SSL key to use for proxy
1718 */
1719 return Curl_setstropt(&s->str[STRING_KEY_TYPE_PROXY], ptr);
1720 case CURLOPT_PROXY_SSL_CIPHER_LIST:
1721 if(Curl_ssl_supports(data, SSLSUPP_CIPHER_LIST)) {
1722 /* set a list of cipher we want to use in the SSL connection for proxy */
1723 return Curl_setstropt(&s->str[STRING_SSL_CIPHER_LIST_PROXY], ptr);
1724 }
1725 else
1726 return CURLE_NOT_BUILT_IN;
1727 case CURLOPT_PROXY_TLS13_CIPHERS:
1728 if(Curl_ssl_supports(data, SSLSUPP_TLS13_CIPHERSUITES))
1729 /* set preferred list of TLS 1.3 cipher suites for proxy */
1730 return Curl_setstropt(&s->str[STRING_SSL_CIPHER13_LIST_PROXY], ptr);
1731 else
1732 return CURLE_NOT_BUILT_IN;
1733 case CURLOPT_PROXY:
1734 /*
1735 * Set proxy server:port to use as proxy.
1736 *
1737 * If the proxy is set to "" (and CURLOPT_PRE_PROXY is set to "" or NULL)
1738 * we explicitly say that we do not want to use a proxy (even though there
1739 * might be environment variables saying so).
1740 *
1741 * Setting it to NULL, means no proxy but allows the environment variables
1742 * to decide for us (if CURLOPT_PRE_PROXY setting it to NULL).
1743 */
1744 return setproxy(data, ptr);
1745 case CURLOPT_PRE_PROXY:
1746 /*
1747 * Set proxy server:port to use as SOCKS proxy.
1748 *
1749 * If the proxy is set to "" or NULL we explicitly say that we do not want
1750 * to use the socks proxy.
1751 */
1752 return Curl_setstropt(&s->str[STRING_PRE_PROXY], ptr);
1753 case CURLOPT_SOCKS5_GSSAPI_SERVICE:
1754 case CURLOPT_PROXY_SERVICE_NAME:
1755 /*
1756 * Set proxy authentication service name for Kerberos 5 and SPNEGO
1757 */
1758 return Curl_setstropt(&s->str[STRING_PROXY_SERVICE_NAME], ptr);
1759 case CURLOPT_PROXY_PINNEDPUBLICKEY:
1760 /*
1761 * Set pinned public key for SSL connection.
1762 * Specify filename of the public key in DER format.
1763 */
1764#ifdef USE_SSL
1765 if(Curl_ssl_supports(data, SSLSUPP_PINNEDPUBKEY))
1766 return Curl_setstropt(&s->str[STRING_SSL_PINNEDPUBLICKEY_PROXY], ptr);
1767#endif
1768 return CURLE_NOT_BUILT_IN;
1769
1770 case CURLOPT_HAPROXY_CLIENT_IP:
1771 /*
1772 * Set the client IP to send through HAProxy PROXY protocol
1773 */
1774 result = Curl_setstropt(&s->str[STRING_HAPROXY_CLIENT_IP], ptr);
1775
1776 /* enable the HAProxy protocol if an IP is provided */
1777 s->haproxyprotocol = !!s->str[STRING_HAPROXY_CLIENT_IP];
1778 break;
1779 case CURLOPT_PROXY_CAINFO:
1780 /*
1781 * Set CA info SSL connection for proxy. Specify filename of the
1782 * CA certificate
1783 */
1784 s->proxy_ssl.custom_cafile = TRUE;
1785 return Curl_setstropt(&s->str[STRING_SSL_CAFILE_PROXY], ptr);
1786 case CURLOPT_PROXY_CRLFILE:
1787 /*
1788 * Set CRL file info for SSL connection for proxy. Specify filename of the
1789 * CRL to check certificates revocation
1790 */
1791 if(Curl_ssl_supports(data, SSLSUPP_CRLFILE))
1792 return Curl_setstropt(&s->str[STRING_SSL_CRLFILE_PROXY], ptr);
1793 return CURLE_NOT_BUILT_IN;
1794 case CURLOPT_PROXY_ISSUERCERT:
1795 /*
1796 * Set Issuer certificate file to check certificates issuer
1797 */
1798 if(Curl_ssl_supports(data, SSLSUPP_ISSUERCERT))
1799 return Curl_setstropt(&s->str[STRING_SSL_ISSUERCERT_PROXY], ptr);
1800 return CURLE_NOT_BUILT_IN;
1801 case CURLOPT_PROXY_CAPATH:
1802 /*
1803 * Set CA path info for SSL connection proxy. Specify directory name of the
1804 * CA certificates which have been prepared using openssl c_rehash utility.
1805 */
1806#ifdef USE_SSL
1807 if(Curl_ssl_supports(data, SSLSUPP_CA_PATH)) {
1808 /* This does not work on Windows. */
1809 s->proxy_ssl.custom_capath = TRUE;
1810 return Curl_setstropt(&s->str[STRING_SSL_CAPATH_PROXY], ptr);
1811 }
1812#endif
1813 return CURLE_NOT_BUILT_IN;
1814 default:
1815 return CURLE_UNKNOWN_OPTION;
1816 }
1817 return result;
1818}
1819#endif
1820
1821#if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_MQTT)
1822/*
1823 * A string with POST data. Makes curl HTTP POST. Even if it is NULL. If
1824 * needed, CURLOPT_POSTFIELDSIZE must have been set prior to
1825 * CURLOPT_COPYPOSTFIELDS and not altered later.
1826 */
1827static CURLcode setopt_copypostfields(const char *ptr, struct UserDefined *s)
1828{
1829 CURLcode result = CURLE_OK;
1830 if(!ptr || s->postfieldsize == -1)
1831 result = Curl_setstropt(&s->str[STRING_COPYPOSTFIELDS], ptr);
1832 else {
1833 size_t pflen;
1834
1835 if(s->postfieldsize < 0)
1836 return CURLE_BAD_FUNCTION_ARGUMENT;
1837 pflen = curlx_sotouz_range(s->postfieldsize, 0, SIZE_MAX);
1838 if(pflen == SIZE_MAX)
1839 return CURLE_OUT_OF_MEMORY;
1840 else {
1841 /* Allocate even when size == 0. This satisfies the need of possible
1842 later address compare to detect the COPYPOSTFIELDS mode, and to mark
1843 that postfields is used rather than read function or form data.
1844 */
1845 char *p = curlx_memdup0(ptr, pflen);
1846 if(!p)
1847 return CURLE_OUT_OF_MEMORY;
1848 else {
1849 curlx_free(s->str[STRING_COPYPOSTFIELDS]);
1850 s->str[STRING_COPYPOSTFIELDS] = p;
1851 }
1852 }
1853 }
1854
1855 s->postfields = s->str[STRING_COPYPOSTFIELDS];
1856 s->method = HTTPREQ_POST;
1857 return result;
1858}
1859#endif
1860
1861#ifdef USE_ECH
1862static CURLcode setopt_ech(struct Curl_easy *data, const char *ptr)
1863{
1864 struct UserDefined *s = &data->set;
1865 CURLcode result = CURLE_OK;
1866
1867 if(!ptr || !strcmp(ptr, "false"))
1868 s->tls_ech = CURLECH_DISABLE;
1869 else {
1870 size_t plen = strlen(ptr);
1871 if(plen > CURL_MAX_INPUT_LENGTH)
1872 result = CURLE_BAD_FUNCTION_ARGUMENT;
1873 else {
1874 if(!strcmp(ptr, "grease"))
1875 s->tls_ech = CURLECH_GREASE;
1876 else if(!strcmp(ptr, "true"))
1877 s->tls_ech = CURLECH_ENABLE;
1878 else if(!strcmp(ptr, "hard"))
1879 s->tls_ech = CURLECH_HARD;
1880 else if(plen > 4 && !strncmp(ptr, "ecl:", 4)) {
1881 if(!s->tls_ech)
1882 s->tls_ech = CURLECH_HARD;
1883 result = Curl_setstropt(&s->str[STRING_ECH_CONFIG], ptr + 4);
1884 }
1885 else if(plen > 3 && !strncmp(ptr, "pn:", 3)) {
1886 if(!s->tls_ech)
1887 s->tls_ech = CURLECH_HARD;
1888 result = Curl_setstropt(&s->str[STRING_ECH_PUBLIC], ptr + 3);
1889 }
1890 else
1891 result = CURLE_BAD_FUNCTION_ARGUMENT;
1892 }
1893 }
1894 return result;
1895}
1896#else
1897#define setopt_ech(x,y) CURLE_NOT_BUILT_IN
1898#endif
1899
1900static CURLcode setopt_cptr(struct Curl_easy *data, CURLoption option,
1901 char *ptr)
1902{
1903 CURLcode result;
1904 struct UserDefined *s = &data->set;
1905#ifndef CURL_DISABLE_PROXY
1906 result = setopt_cptr_proxy(data, option, ptr);
1907 if(result != CURLE_UNKNOWN_OPTION)
1908 return result;
1909#endif
1910 result = CURLE_OK;
1911
1912 switch(option) {
1913 case CURLOPT_CAINFO:
1914 /*
1915 * Set CA info for SSL connection. Specify filename of the CA certificate
1916 */
1917 s->ssl.custom_cafile = TRUE;
1918 return Curl_setstropt(&s->str[STRING_SSL_CAFILE], ptr);
1919 case CURLOPT_CAPATH:
1920 /*
1921 * Set CA path info for SSL connection. Specify directory name of the CA
1922 * certificates which have been prepared using openssl c_rehash utility.
1923 */
1924#ifdef USE_SSL
1925 if(Curl_ssl_supports(data, SSLSUPP_CA_PATH)) {
1926 /* This does not work on Windows. */
1927 s->ssl.custom_capath = TRUE;
1928 return Curl_setstropt(&s->str[STRING_SSL_CAPATH], ptr);
1929 }
1930#endif
1931 return CURLE_NOT_BUILT_IN;
1932 case CURLOPT_CRLFILE:
1933 /*
1934 * Set CRL file info for SSL connection. Specify filename of the CRL
1935 * to check certificates revocation
1936 */
1937 if(Curl_ssl_supports(data, SSLSUPP_CRLFILE))
1938 return Curl_setstropt(&s->str[STRING_SSL_CRLFILE], ptr);
1939 return CURLE_NOT_BUILT_IN;
1940 case CURLOPT_SSL_CIPHER_LIST:
1941 if(Curl_ssl_supports(data, SSLSUPP_CIPHER_LIST))
1942 /* set a list of cipher we want to use in the SSL connection */
1943 return Curl_setstropt(&s->str[STRING_SSL_CIPHER_LIST], ptr);
1944 else
1945 return CURLE_NOT_BUILT_IN;
1946 case CURLOPT_TLS13_CIPHERS:
1947 if(Curl_ssl_supports(data, SSLSUPP_TLS13_CIPHERSUITES)) {
1948 /* set preferred list of TLS 1.3 cipher suites */
1949 return Curl_setstropt(&s->str[STRING_SSL_CIPHER13_LIST], ptr);
1950 }
1951 else
1952 return CURLE_NOT_BUILT_IN;
1953 case CURLOPT_RANDOM_FILE:
1954 break;
1955 case CURLOPT_EGDSOCKET:
1956 break;
1957 case CURLOPT_REQUEST_TARGET:
1958 return Curl_setstropt(&s->str[STRING_TARGET], ptr);
1959#ifndef CURL_DISABLE_NETRC
1960 case CURLOPT_NETRC_FILE:
1961 /*
1962 * Use this file instead of the $HOME/.netrc file
1963 */
1964 return Curl_setstropt(&s->str[STRING_NETRC_FILE], ptr);
1965#endif
1966
1967#if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_MQTT)
1968 case CURLOPT_COPYPOSTFIELDS:
1969 return setopt_copypostfields(ptr, s);
1970
1971 case CURLOPT_POSTFIELDS:
1972 /*
1973 * Like above, but use static data instead of copying it.
1974 */
1975 s->postfields = ptr;
1976 /* Release old copied data. */
1977 curlx_safefree(s->str[STRING_COPYPOSTFIELDS]);
1978 s->method = HTTPREQ_POST;
1979 break;
1980#endif /* !CURL_DISABLE_HTTP || !CURL_DISABLE_MQTT */
1981
1982#ifndef CURL_DISABLE_HTTP
1983 case CURLOPT_TRAILERDATA:
1984 s->trailer_data = ptr;
1985 break;
1986 case CURLOPT_ACCEPT_ENCODING:
1987 /*
1988 * String to use at the value of Accept-Encoding header.
1989 *
1990 * If the encoding is set to "" we use an Accept-Encoding header that
1991 * encompasses all the encodings we support.
1992 * If the encoding is set to NULL we do not send an Accept-Encoding header
1993 * and ignore an received Content-Encoding header.
1994 *
1995 */
1996 if(ptr && !*ptr) {
1997 ptr = Curl_get_content_encodings();
1998 if(ptr) {
1999 curlx_free(s->str[STRING_ENCODING]);
2000 s->str[STRING_ENCODING] = ptr;
2001 }
2002 else
2003 result = CURLE_OUT_OF_MEMORY;
2004 return result;
2005 }
2006 return Curl_setstropt(&s->str[STRING_ENCODING], ptr);
2007
2008#ifndef CURL_DISABLE_AWS
2009 case CURLOPT_AWS_SIGV4:
2010 /*
2011 * String that is merged to some authentication
2012 * parameters are used by the algorithm.
2013 */
2014 result = Curl_setstropt(&s->str[STRING_AWS_SIGV4], ptr);
2015 /*
2016 * Basic been set by default it need to be unset here
2017 */
2018 if(s->str[STRING_AWS_SIGV4])
2019 s->httpauth = CURLAUTH_AWS_SIGV4;
2020 break;
2021#endif
2022 case CURLOPT_REFERER:
2023 /*
2024 * String to set in the HTTP Referer: field.
2025 */
2026 result = Curl_setstropt(&s->str[STRING_SET_REFERER], ptr);
2027 break;
2028
2029 case CURLOPT_USERAGENT:
2030 /*
2031 * String to use in the HTTP User-Agent field
2032 */
2033 return Curl_setstropt(&s->str[STRING_USERAGENT], ptr);
2034
2035#ifndef CURL_DISABLE_COOKIES
2036 case CURLOPT_COOKIE:
2037 /*
2038 * Cookie string to send to the remote server in the request.
2039 */
2040 return Curl_setstropt(&s->str[STRING_COOKIE], ptr);
2041
2042 case CURLOPT_COOKIEFILE:
2043 return cookiefile(data, ptr);
2044
2045 case CURLOPT_COOKIEJAR:
2046 /*
2047 * Set cookie filename to dump all cookies to when we are done.
2048 */
2049 result = Curl_setstropt(&s->str[STRING_COOKIEJAR], ptr);
2050 if(!result) {
2051 /*
2052 * Activate the cookie parser. This may or may not already
2053 * have been made.
2054 */
2055 if(!data->cookies)
2056 data->cookies = Curl_cookie_init();
2057 if(!data->cookies)
2058 result = CURLE_OUT_OF_MEMORY;
2059 else
2060 data->state.cookie_engine = TRUE;
2061 }
2062 break;
2063
2064 case CURLOPT_COOKIELIST:
2065 return cookielist(data, ptr);
2066#endif /* !CURL_DISABLE_COOKIES */
2067
2068#endif /* !CURL_DISABLE_HTTP */
2069
2070 case CURLOPT_CUSTOMREQUEST:
2071 /*
2072 * Set a custom string to use as request
2073 */
2074 return Curl_setstropt(&s->str[STRING_CUSTOMREQUEST], ptr);
2075
2076 /* we do not set s->method = HTTPREQ_CUSTOM; here, we continue as if we
2077 were using the already set type and this changes the actual request
2078 keyword */
2079 case CURLOPT_SERVICE_NAME:
2080 /*
2081 * Set authentication service name for DIGEST-MD5, Kerberos 5 and SPNEGO
2082 */
2083 return Curl_setstropt(&s->str[STRING_SERVICE_NAME], ptr);
2084
2085 case CURLOPT_HEADERDATA:
2086 /*
2087 * Custom pointer to pass the header write callback function
2088 */
2089 s->writeheader = ptr;
2090 break;
2091 case CURLOPT_READDATA:
2092 /*
2093 * FILE pointer to read the file to be uploaded from. Or possibly used as
2094 * argument to the read callback.
2095 */
2096 s->in_set = ptr;
2097 break;
2098 case CURLOPT_WRITEDATA:
2099 /*
2100 * FILE pointer to write to. Or possibly used as argument to the write
2101 * callback.
2102 */
2103 s->out = ptr;
2104 break;
2105 case CURLOPT_DEBUGDATA:
2106 /*
2107 * Set to a void * that should receive all error writes. This
2108 * defaults to CURLOPT_STDERR for normal operations.
2109 */
2110 s->debugdata = ptr;
2111 break;
2112 case CURLOPT_PROGRESSDATA:
2113 /*
2114 * Custom client data to pass to the progress callback
2115 */
2116 s->progress_client = ptr;
2117 break;
2118 case CURLOPT_SEEKDATA:
2119 /*
2120 * Seek control callback. Might be NULL.
2121 */
2122 s->seek_client = ptr;
2123 break;
2124 case CURLOPT_IOCTLDATA:
2125 /*
2126 * I/O control data pointer. Might be NULL.
2127 */
2128 s->ioctl_client = ptr;
2129 break;
2130 case CURLOPT_SSL_CTX_DATA:
2131 /*
2132 * Set an SSL_CTX callback parameter pointer
2133 */
2134#ifdef USE_SSL
2135 if(Curl_ssl_supports(data, SSLSUPP_SSL_CTX)) {
2136 s->ssl.fsslctxp = ptr;
2137 break;
2138 }
2139 else
2140#endif
2141 return CURLE_NOT_BUILT_IN;
2142 case CURLOPT_SOCKOPTDATA:
2143 /*
2144 * socket callback data pointer. Might be NULL.
2145 */
2146 s->sockopt_client = ptr;
2147 break;
2148 case CURLOPT_OPENSOCKETDATA:
2149 /*
2150 * socket callback data pointer. Might be NULL.
2151 */
2152 s->opensocket_client = ptr;
2153 break;
2154 case CURLOPT_RESOLVER_START_DATA:
2155 /*
2156 * resolver start callback data pointer. Might be NULL.
2157 */
2158 s->resolver_start_client = ptr;
2159 break;
2160 case CURLOPT_CLOSESOCKETDATA:
2161 /*
2162 * socket callback data pointer. Might be NULL.
2163 */
2164 s->closesocket_client = ptr;
2165 break;
2166 case CURLOPT_PREREQDATA:
2167 s->prereq_userp = ptr;
2168 break;
2169 case CURLOPT_ERRORBUFFER:
2170 /*
2171 * Error buffer provided by the caller to get the human readable error
2172 * string in.
2173 */
2174 s->errorbuffer = ptr;
2175 break;
2176
2177#ifndef CURL_DISABLE_FTP
2178 case CURLOPT_FTPPORT:
2179 /*
2180 * Use FTP PORT, this also specifies which IP address to use
2181 */
2182 result = Curl_setstropt(&s->str[STRING_FTPPORT], ptr);
2183 s->ftp_use_port = !!(s->str[STRING_FTPPORT]);
2184 break;
2185
2186 case CURLOPT_FTP_ACCOUNT:
2187 return Curl_setstropt(&s->str[STRING_FTP_ACCOUNT], ptr);
2188
2189 case CURLOPT_FTP_ALTERNATIVE_TO_USER:
2190 return Curl_setstropt(&s->str[STRING_FTP_ALTERNATIVE_TO_USER], ptr);
2191
2192 case CURLOPT_KRBLEVEL:
2193 return CURLE_NOT_BUILT_IN; /* removed in 8.17.0 */
2194 case CURLOPT_CHUNK_DATA:
2195 s->wildcardptr = ptr;
2196 break;
2197 case CURLOPT_FNMATCH_DATA:
2198 s->fnmatch_data = ptr;
2199 break;
2200#endif
2201 case CURLOPT_URL:
2202 /*
2203 * The URL to fetch.
2204 */
2205 result = Curl_setstropt(&s->str[STRING_SET_URL], ptr);
2206 Curl_bufref_set(&data->state.url, s->str[STRING_SET_URL], 0, NULL);
2207 break;
2208
2209 case CURLOPT_USERPWD:
2210 /*
2211 * user:password to use in the operation
2212 */
2213 return setstropt_userpwd(ptr, &s->str[STRING_USERNAME],
2214 &s->str[STRING_PASSWORD]);
2215
2216 case CURLOPT_USERNAME:
2217 /*
2218 * authentication username to use in the operation
2219 */
2220 return Curl_setstropt(&s->str[STRING_USERNAME], ptr);
2221
2222 case CURLOPT_PASSWORD:
2223 /*
2224 * authentication password to use in the operation
2225 */
2226 return Curl_setstropt(&s->str[STRING_PASSWORD], ptr);
2227
2228 case CURLOPT_LOGIN_OPTIONS:
2229 /*
2230 * authentication options to use in the operation
2231 */
2232 return Curl_setstropt(&s->str[STRING_OPTIONS], ptr);
2233
2234 case CURLOPT_XOAUTH2_BEARER:
2235 /*
2236 * OAuth 2.0 bearer token to use in the operation
2237 */
2238 return Curl_setstropt(&s->str[STRING_BEARER], ptr);
2239 case CURLOPT_RANGE:
2240 /*
2241 * What range of the file you want to transfer
2242 */
2243 return Curl_setstropt(&s->str[STRING_SET_RANGE], ptr);
2244 case CURLOPT_SSLCERT:
2245 /*
2246 * String that holds filename of the SSL certificate to use
2247 */
2248 return Curl_setstropt(&s->str[STRING_CERT], ptr);
2249 case CURLOPT_SSLCERTTYPE:
2250 /*
2251 * String that holds file type of the SSL certificate to use
2252 */
2253 return Curl_setstropt(&s->str[STRING_CERT_TYPE], ptr);
2254 case CURLOPT_SSLKEY:
2255 /*
2256 * String that holds filename of the SSL key to use
2257 */
2258 return Curl_setstropt(&s->str[STRING_KEY], ptr);
2259 case CURLOPT_SSLKEYTYPE:
2260 /*
2261 * String that holds file type of the SSL key to use
2262 */
2263 return Curl_setstropt(&s->str[STRING_KEY_TYPE], ptr);
2264 case CURLOPT_KEYPASSWD:
2265 /*
2266 * String that holds the SSL or SSH private key password.
2267 */
2268 return Curl_setstropt(&s->str[STRING_KEY_PASSWD], ptr);
2269 case CURLOPT_SSLENGINE:
2270 /*
2271 * String that holds the SSL crypto engine.
2272 */
2273 if(ptr && ptr[0]) {
2274 result = Curl_setstropt(&s->str[STRING_SSL_ENGINE], ptr);
2275 if(!result) {
2276 result = Curl_ssl_set_engine(data, ptr);
2277 }
2278 }
2279 break;
2280 case CURLOPT_INTERFACE:
2281 /*
2282 * Set what interface or address/hostname to bind the socket to when
2283 * performing an operation and thus what from-IP your connection will use.
2284 */
2285 return setstropt_interface(ptr,
2286 &s->str[STRING_DEVICE],
2287 &s->str[STRING_INTERFACE],
2288 &s->str[STRING_BINDHOST]);
2289 case CURLOPT_ISSUERCERT:
2290 /*
2291 * Set Issuer certificate file
2292 * to check certificates issuer
2293 */
2294 if(Curl_ssl_supports(data, SSLSUPP_ISSUERCERT))
2295 return Curl_setstropt(&s->str[STRING_SSL_ISSUERCERT], ptr);
2296 return CURLE_NOT_BUILT_IN;
2297 case CURLOPT_PRIVATE:
2298 /*
2299 * Set private data pointer.
2300 */
2301 s->private_data = ptr;
2302 break;
2303#ifdef USE_SSL
2304 case CURLOPT_SSL_EC_CURVES:
2305 /*
2306 * Set accepted curves in SSL connection setup.
2307 * Specify colon-delimited list of curve algorithm names.
2308 */
2309 if(Curl_ssl_supports(data, SSLSUPP_SSL_EC_CURVES))
2310 return Curl_setstropt(&s->str[STRING_SSL_EC_CURVES], ptr);
2311 return CURLE_NOT_BUILT_IN;
2312 case CURLOPT_SSL_SIGNATURE_ALGORITHMS:
2313 /*
2314 * Set accepted signature algorithms.
2315 * Specify colon-delimited list of signature scheme names.
2316 */
2317 if(Curl_ssl_supports(data, SSLSUPP_SIGNATURE_ALGORITHMS))
2318 return Curl_setstropt(&s->str[STRING_SSL_SIGNATURE_ALGORITHMS], ptr);
2319 return CURLE_NOT_BUILT_IN;
2320 case CURLOPT_PINNEDPUBLICKEY:
2321 /*
2322 * Set pinned public key for SSL connection.
2323 * Specify filename of the public key in DER format.
2324 */
2325 if(Curl_ssl_supports(data, SSLSUPP_PINNEDPUBKEY))
2326 return Curl_setstropt(&s->str[STRING_SSL_PINNEDPUBLICKEY], ptr);
2327 return CURLE_NOT_BUILT_IN;
2328#endif
2329#ifdef USE_SSH
2330 case CURLOPT_SSH_PUBLIC_KEYFILE:
2331 /*
2332 * Use this file instead of the $HOME/.ssh/id_dsa.pub file
2333 */
2334 return Curl_setstropt(&s->str[STRING_SSH_PUBLIC_KEY], ptr);
2335 case CURLOPT_SSH_PRIVATE_KEYFILE:
2336 /*
2337 * Use this file instead of the $HOME/.ssh/id_dsa file
2338 */
2339 return Curl_setstropt(&s->str[STRING_SSH_PRIVATE_KEY], ptr);
2340 case CURLOPT_SSH_KEYDATA:
2341 /*
2342 * Custom client data to pass to the SSH keyfunc callback
2343 */
2344 s->ssh_keyfunc_userp = ptr;
2345 break;
2346#if defined(USE_LIBSSH2) || defined(USE_LIBSSH)
2347 case CURLOPT_SSH_HOST_PUBLIC_KEY_MD5:
2348 /*
2349 * Option to allow for the MD5 of the host public key to be checked
2350 * for validation purposes.
2351 */
2352 return Curl_setstropt(&s->str[STRING_SSH_HOST_PUBLIC_KEY_MD5], ptr);
2353 case CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256:
2354 /*
2355 * Option to allow for the SHA256 of the host public key to be checked
2356 * for validation purposes.
2357 */
2358 return Curl_setstropt(&s->str[STRING_SSH_HOST_PUBLIC_KEY_SHA256], ptr);
2359 case CURLOPT_SSH_KNOWNHOSTS:
2360 /*
2361 * Store the filename to read known hosts from.
2362 */
2363 return Curl_setstropt(&s->str[STRING_SSH_KNOWNHOSTS], ptr);
2364#endif
2365#ifdef USE_LIBSSH2
2366 case CURLOPT_SSH_HOSTKEYDATA:
2367 /*
2368 * Custom client data to pass to the SSH keyfunc callback
2369 */
2370 s->ssh_hostkeyfunc_userp = ptr;
2371 break;
2372#endif /* USE_LIBSSH2 */
2373#endif /* USE_SSH */
2374 case CURLOPT_PROTOCOLS_STR:
2375 if(ptr) {
2376 curl_prot_t protos;
2377 result = protocol2num(ptr, &protos);
2378 if(!result)
2379 s->allowed_protocols = protos;
2380 }
2381 else
2382 /* make a NULL argument reset to default */
2383 s->allowed_protocols = (curl_prot_t)CURLPROTO_64ALL;
2384 break;
2385 case CURLOPT_REDIR_PROTOCOLS_STR:
2386 if(ptr) {
2387 curl_prot_t protos;
2388 result = protocol2num(ptr, &protos);
2389 if(!result)
2390 s->redir_protocols = protos;
2391 }
2392 else
2393 /* make a NULL argument reset to default */
2394 s->redir_protocols = (curl_prot_t)CURLPROTO_REDIR;
2395 break;
2396 case CURLOPT_DEFAULT_PROTOCOL:
2397 /* Set the protocol to use when the URL does not include any protocol */
2398 return Curl_setstropt(&s->str[STRING_DEFAULT_PROTOCOL], ptr);
2399#ifndef CURL_DISABLE_SMTP
2400 case CURLOPT_MAIL_FROM:
2401 /* Set the SMTP mail originator */
2402 return Curl_setstropt(&s->str[STRING_MAIL_FROM], ptr);
2403 case CURLOPT_MAIL_AUTH:
2404 /* Set the SMTP auth originator */
2405 return Curl_setstropt(&s->str[STRING_MAIL_AUTH], ptr);
2406#endif
2407 case CURLOPT_SASL_AUTHZID:
2408 /* Authorization identity (identity to act as) */
2409 return Curl_setstropt(&s->str[STRING_SASL_AUTHZID], ptr);
2410#ifndef CURL_DISABLE_RTSP
2411 case CURLOPT_RTSP_SESSION_ID:
2412 /*
2413 * Set the RTSP Session ID manually. Useful if the application is
2414 * resuming a previously established RTSP session
2415 */
2416 return Curl_setstropt(&s->str[STRING_RTSP_SESSION_ID], ptr);
2417 case CURLOPT_RTSP_STREAM_URI:
2418 /*
2419 * Set the Stream URI for the RTSP request. Unless the request is
2420 * for generic server options, the application will need to set this.
2421 */
2422 return Curl_setstropt(&s->str[STRING_RTSP_STREAM_URI], ptr);
2423 case CURLOPT_RTSP_TRANSPORT:
2424 /*
2425 * The content of the Transport: header for the RTSP request
2426 */
2427 return Curl_setstropt(&s->str[STRING_RTSP_TRANSPORT], ptr);
2428 case CURLOPT_INTERLEAVEDATA:
2429 s->rtp_out = ptr;
2430 break;
2431#endif /* !CURL_DISABLE_RTSP */
2432#ifdef USE_TLS_SRP
2433 case CURLOPT_TLSAUTH_USERNAME:
2434 return Curl_setstropt(&s->str[STRING_TLSAUTH_USERNAME], ptr);
2435 case CURLOPT_TLSAUTH_PASSWORD:
2436 return Curl_setstropt(&s->str[STRING_TLSAUTH_PASSWORD], ptr);
2437 case CURLOPT_TLSAUTH_TYPE:
2438 if(ptr && !curl_strequal(ptr, "SRP"))
2439 result = CURLE_BAD_FUNCTION_ARGUMENT;
2440 break;
2441#ifndef CURL_DISABLE_PROXY
2442 case CURLOPT_PROXY_TLSAUTH_USERNAME:
2443 return Curl_setstropt(&s->str[STRING_TLSAUTH_USERNAME_PROXY], ptr);
2444 case CURLOPT_PROXY_TLSAUTH_PASSWORD:
2445 return Curl_setstropt(&s->str[STRING_TLSAUTH_PASSWORD_PROXY], ptr);
2446 case CURLOPT_PROXY_TLSAUTH_TYPE:
2447 if(ptr && !curl_strequal(ptr, "SRP"))
2448 result = CURLE_BAD_FUNCTION_ARGUMENT;
2449 break;
2450#endif
2451#endif
2452#ifdef USE_RESOLV_ARES
2453 case CURLOPT_DNS_SERVERS:
2454 return Curl_setstropt(&s->str[STRING_DNS_SERVERS], ptr);
2455
2456 case CURLOPT_DNS_INTERFACE:
2457 return Curl_setstropt(&s->str[STRING_DNS_INTERFACE], ptr);
2458
2459 case CURLOPT_DNS_LOCAL_IP4:
2460 return Curl_setstropt(&s->str[STRING_DNS_LOCAL_IP4], ptr);
2461
2462 case CURLOPT_DNS_LOCAL_IP6:
2463 return Curl_setstropt(&s->str[STRING_DNS_LOCAL_IP6], ptr);
2464
2465#endif
2466#ifdef USE_UNIX_SOCKETS
2467 case CURLOPT_UNIX_SOCKET_PATH:
2468 s->abstract_unix_socket = FALSE;
2469 return Curl_setstropt(&s->str[STRING_UNIX_SOCKET_PATH], ptr);
2470
2471 case CURLOPT_ABSTRACT_UNIX_SOCKET:
2472 s->abstract_unix_socket = TRUE;
2473 return Curl_setstropt(&s->str[STRING_UNIX_SOCKET_PATH], ptr);
2474
2475#endif
2476
2477#ifndef CURL_DISABLE_DOH
2478 case CURLOPT_DOH_URL:
2479 result = Curl_setstropt(&s->str[STRING_DOH], ptr);
2480 s->doh = !!(s->str[STRING_DOH]);
2481 break;
2482#endif
2483#ifndef CURL_DISABLE_HSTS
2484 case CURLOPT_HSTSREADDATA:
2485 s->hsts_read_userp = ptr;
2486 break;
2487 case CURLOPT_HSTSWRITEDATA:
2488 s->hsts_write_userp = ptr;
2489 break;
2490 case CURLOPT_HSTS: {
2491 struct curl_slist *h;
2492 if(!data->hsts) {
2493 data->hsts = Curl_hsts_init();
2494 if(!data->hsts)
2495 return CURLE_OUT_OF_MEMORY;
2496 }
2497 if(ptr) {
2498 result = Curl_setstropt(&s->str[STRING_HSTS], ptr);
2499 if(result)
2500 return result;
2501 /* this needs to build a list of filenames to read from, so that it can
2502 read them later, as we might get a shared HSTS handle to load them
2503 into */
2504 h = curl_slist_append(data->state.hstslist, ptr);
2505 if(!h) {
2506 curl_slist_free_all(data->state.hstslist);
2507 data->state.hstslist = NULL;
2508 return CURLE_OUT_OF_MEMORY;
2509 }
2510 data->state.hstslist = h; /* store the list for later use */
2511 }
2512 else {
2513 /* clear the list of HSTS files */
2514 curl_slist_free_all(data->state.hstslist);
2515 data->state.hstslist = NULL;
2516 if(!data->share || !data->share->hsts)
2517 /* throw away the HSTS cache unless shared */
2518 Curl_hsts_cleanup(&data->hsts);
2519 }
2520 break;
2521 }
2522#endif /* !CURL_DISABLE_HSTS */
2523#ifndef CURL_DISABLE_ALTSVC
2524 case CURLOPT_ALTSVC:
2525 if(!data->asi) {
2526 data->asi = Curl_altsvc_init();
2527 if(!data->asi)
2528 return CURLE_OUT_OF_MEMORY;
2529 }
2530 result = Curl_setstropt(&s->str[STRING_ALTSVC], ptr);
2531 if(result)
2532 break;
2533 if(ptr)
2534 return Curl_altsvc_load(data->asi, ptr);
2535 break;
2536#endif /* !CURL_DISABLE_ALTSVC */
2537 case CURLOPT_ECH:
2538 return setopt_ech(data, ptr);
2539 default:
2540 return CURLE_UNKNOWN_OPTION;
2541 }
2542 return result;
2543}
2544
2545static CURLcode setopt_func(struct Curl_easy *data, CURLoption option,
2546 va_list param)
2547{
2548 struct UserDefined *s = &data->set;
2549 switch(option) {
2550 case CURLOPT_PROGRESSFUNCTION:
2551 /*
2552 * Progress callback function
2553 */
2554 s->fprogress = va_arg(param, curl_progress_callback);
2555 if(s->fprogress)
2556 data->progress.callback = TRUE; /* no longer internal */
2557 else
2558 data->progress.callback = FALSE; /* NULL enforces internal */
2559 break;
2560
2561 case CURLOPT_XFERINFOFUNCTION:
2562 /*
2563 * Transfer info callback function
2564 */
2565 s->fxferinfo = va_arg(param, curl_xferinfo_callback);
2566 if(s->fxferinfo)
2567 data->progress.callback = TRUE; /* no longer internal */
2568 else
2569 data->progress.callback = FALSE; /* NULL enforces internal */
2570
2571 break;
2572 case CURLOPT_DEBUGFUNCTION:
2573 /*
2574 * stderr write callback.
2575 */
2576 s->fdebug = va_arg(param, curl_debug_callback);
2577 /*
2578 * if the callback provided is NULL, it will use the default callback
2579 */
2580 break;
2581 case CURLOPT_HEADERFUNCTION:
2582 /*
2583 * Set header write callback
2584 */
2585 s->fwrite_header = va_arg(param, curl_write_callback);
2586 break;
2587 case CURLOPT_WRITEFUNCTION:
2588 /*
2589 * Set data write callback
2590 */
2591 s->fwrite_func = va_arg(param, curl_write_callback);
2592 if(!s->fwrite_func)
2593#if defined(__clang__) && __clang_major__ >= 16
2594#pragma clang diagnostic push
2595#pragma clang diagnostic ignored "-Wcast-function-type-strict"
2596#endif
2597 /* When set to NULL, reset to our internal default function */
2598 s->fwrite_func = (curl_write_callback)fwrite;
2599#if defined(__clang__) && __clang_major__ >= 16
2600#pragma clang diagnostic pop
2601#endif
2602 break;
2603 case CURLOPT_READFUNCTION:
2604 /*
2605 * Read data callback
2606 */
2607 s->fread_func_set = va_arg(param, curl_read_callback);
2608 if(!s->fread_func_set) {
2609 s->is_fread_set = 0;
2610#if defined(__clang__) && __clang_major__ >= 16
2611#pragma clang diagnostic push
2612#pragma clang diagnostic ignored "-Wcast-function-type-strict"
2613#endif
2614 /* When set to NULL, reset to our internal default function */
2615 s->fread_func_set = (curl_read_callback)fread;
2616#if defined(__clang__) && __clang_major__ >= 16
2617#pragma clang diagnostic pop
2618#endif
2619 }
2620 else
2621 s->is_fread_set = 1;
2622 break;
2623 case CURLOPT_SEEKFUNCTION:
2624 /*
2625 * Seek callback. Might be NULL.
2626 */
2627 s->seek_func = va_arg(param, curl_seek_callback);
2628 break;
2629 case CURLOPT_IOCTLFUNCTION:
2630 /*
2631 * I/O control callback. Might be NULL.
2632 */
2633 s->ioctl_func = va_arg(param, curl_ioctl_callback);
2634 break;
2635 case CURLOPT_SSL_CTX_FUNCTION:
2636 /*
2637 * Set an SSL_CTX callback
2638 */
2639#ifdef USE_SSL
2640 if(Curl_ssl_supports(data, SSLSUPP_SSL_CTX)) {
2641 s->ssl.fsslctx = va_arg(param, curl_ssl_ctx_callback);
2642 break;
2643 }
2644 else
2645#endif
2646 return CURLE_NOT_BUILT_IN;
2647
2648 case CURLOPT_SOCKOPTFUNCTION:
2649 /*
2650 * socket callback function: called after socket() but before connect()
2651 */
2652 s->fsockopt = va_arg(param, curl_sockopt_callback);
2653 break;
2654
2655 case CURLOPT_OPENSOCKETFUNCTION:
2656 /*
2657 * open/create socket callback function: called instead of socket(),
2658 * before connect()
2659 */
2660 s->fopensocket = va_arg(param, curl_opensocket_callback);
2661 break;
2662
2663 case CURLOPT_CLOSESOCKETFUNCTION:
2664 /*
2665 * close socket callback function: called instead of close()
2666 * when shutting down a connection
2667 */
2668 s->fclosesocket = va_arg(param, curl_closesocket_callback);
2669 break;
2670
2671 case CURLOPT_RESOLVER_START_FUNCTION:
2672 /*
2673 * resolver start callback function: called before a new resolver request
2674 * is started
2675 */
2676 s->resolver_start = va_arg(param, curl_resolver_start_callback);
2677 break;
2678
2679#ifdef USE_SSH
2680#ifdef USE_LIBSSH2
2681 case CURLOPT_SSH_HOSTKEYFUNCTION:
2682 /* the callback to check the hostkey without the knownhost file */
2683 s->ssh_hostkeyfunc = va_arg(param, curl_sshhostkeycallback);
2684 break;
2685#endif
2686
2687 case CURLOPT_SSH_KEYFUNCTION:
2688 /* setting to NULL is fine since the ssh.c functions themselves will
2689 then revert to use the internal default */
2690 s->ssh_keyfunc = va_arg(param, curl_sshkeycallback);
2691 break;
2692
2693#endif /* USE_SSH */
2694
2695#ifndef CURL_DISABLE_RTSP
2696 case CURLOPT_INTERLEAVEFUNCTION:
2697 /* Set the user defined RTP write function */
2698 s->fwrite_rtp = va_arg(param, curl_write_callback);
2699 break;
2700#endif
2701#ifndef CURL_DISABLE_FTP
2702 case CURLOPT_CHUNK_BGN_FUNCTION:
2703 s->chunk_bgn = va_arg(param, curl_chunk_bgn_callback);
2704 break;
2705 case CURLOPT_CHUNK_END_FUNCTION:
2706 s->chunk_end = va_arg(param, curl_chunk_end_callback);
2707 break;
2708 case CURLOPT_FNMATCH_FUNCTION:
2709 s->fnmatch = va_arg(param, curl_fnmatch_callback);
2710 break;
2711#endif
2712#ifndef CURL_DISABLE_HTTP
2713 case CURLOPT_TRAILERFUNCTION:
2714 s->trailer_callback = va_arg(param, curl_trailer_callback);
2715 break;
2716#endif
2717#ifndef CURL_DISABLE_HSTS
2718 case CURLOPT_HSTSREADFUNCTION:
2719 s->hsts_read = va_arg(param, curl_hstsread_callback);
2720 break;
2721 case CURLOPT_HSTSWRITEFUNCTION:
2722 s->hsts_write = va_arg(param, curl_hstswrite_callback);
2723 break;
2724#endif
2725 case CURLOPT_PREREQFUNCTION:
2726 s->fprereq = va_arg(param, curl_prereq_callback);
2727 break;
2728 default:
2729 return CURLE_UNKNOWN_OPTION;
2730 }
2731 return CURLE_OK;
2732}
2733
2734static CURLcode setopt_offt(struct Curl_easy *data, CURLoption option,
2735 curl_off_t offt)
2736{
2737 struct UserDefined *s = &data->set;
2738 switch(option) {
2739 case CURLOPT_TIMEVALUE_LARGE:
2740 /*
2741 * This is the value to compare with the remote document with the
2742 * method set with CURLOPT_TIMECONDITION
2743 */
2744 s->timevalue = (time_t)offt;
2745 break;
2746
2747 /* MQTT "borrows" some of the HTTP options */
2748 case CURLOPT_POSTFIELDSIZE_LARGE:
2749 /*
2750 * The size of the POSTFIELD data to prevent libcurl to do strlen() to
2751 * figure it out. Enables binary posts.
2752 */
2753 if(offt < -1)
2754 return CURLE_BAD_FUNCTION_ARGUMENT;
2755
2756 if(s->postfieldsize < offt &&
2757 s->postfields == s->str[STRING_COPYPOSTFIELDS]) {
2758 /* Previous CURLOPT_COPYPOSTFIELDS is no longer valid. */
2759 curlx_safefree(s->str[STRING_COPYPOSTFIELDS]);
2760 s->postfields = NULL;
2761 }
2762 s->postfieldsize = offt;
2763 break;
2764 case CURLOPT_INFILESIZE_LARGE:
2765 /*
2766 * If known, this should inform curl about the file size of the
2767 * to-be-uploaded file.
2768 */
2769 if(offt < -1)
2770 return CURLE_BAD_FUNCTION_ARGUMENT;
2771 s->filesize = offt;
2772 break;
2773 case CURLOPT_MAX_SEND_SPEED_LARGE:
2774 /*
2775 * When transfer uploads are faster then CURLOPT_MAX_SEND_SPEED_LARGE
2776 * bytes per second the transfer is throttled..
2777 */
2778 if(offt < 0)
2779 return CURLE_BAD_FUNCTION_ARGUMENT;
2780 s->max_send_speed = offt;
2781 Curl_rlimit_init(&data->progress.ul.rlimit, offt, offt,
2782 Curl_pgrs_now(data));
2783 break;
2784 case CURLOPT_MAX_RECV_SPEED_LARGE:
2785 /*
2786 * When receiving data faster than CURLOPT_MAX_RECV_SPEED_LARGE bytes per
2787 * second the transfer is throttled..
2788 */
2789 if(offt < 0)
2790 return CURLE_BAD_FUNCTION_ARGUMENT;
2791 s->max_recv_speed = offt;
2792 Curl_rlimit_init(&data->progress.dl.rlimit, offt, offt,
2793 Curl_pgrs_now(data));
2794 break;
2795 case CURLOPT_RESUME_FROM_LARGE:
2796 /*
2797 * Resume transfer at the given file position
2798 */
2799 if(offt < -1)
2800 return CURLE_BAD_FUNCTION_ARGUMENT;
2801 s->set_resume_from = offt;
2802 break;
2803 case CURLOPT_MAXFILESIZE_LARGE:
2804 /*
2805 * Set the maximum size of a file to download.
2806 */
2807 if(offt < 0)
2808 return CURLE_BAD_FUNCTION_ARGUMENT;
2809 s->max_filesize = offt;
2810 break;
2811
2812 default:
2813 return CURLE_UNKNOWN_OPTION;
2814 }
2815 return CURLE_OK;
2816}
2817
2818static CURLcode setopt_blob(struct Curl_easy *data, CURLoption option,
2819 struct curl_blob *blob)
2820{
2821 struct UserDefined *s = &data->set;
2822 switch(option) {
2823 case CURLOPT_SSLCERT_BLOB:
2824 /*
2825 * Blob that holds file content of the SSL certificate to use
2826 */
2827 return Curl_setblobopt(&s->blobs[BLOB_CERT], blob);
2828#ifndef CURL_DISABLE_PROXY
2829 case CURLOPT_PROXY_SSLCERT_BLOB:
2830 /*
2831 * Blob that holds file content of the SSL certificate to use for proxy
2832 */
2833 return Curl_setblobopt(&s->blobs[BLOB_CERT_PROXY], blob);
2834 case CURLOPT_PROXY_SSLKEY_BLOB:
2835 /*
2836 * Blob that holds file content of the SSL key to use for proxy
2837 */
2838 return Curl_setblobopt(&s->blobs[BLOB_KEY_PROXY], blob);
2839 case CURLOPT_PROXY_CAINFO_BLOB:
2840 /*
2841 * Blob that holds CA info for SSL connection proxy.
2842 * Specify entire PEM of the CA certificate
2843 */
2844#ifdef USE_SSL
2845 if(Curl_ssl_supports(data, SSLSUPP_CAINFO_BLOB)) {
2846 s->proxy_ssl.custom_cablob = TRUE;
2847 return Curl_setblobopt(&s->blobs[BLOB_CAINFO_PROXY], blob);
2848 }
2849#endif
2850 return CURLE_NOT_BUILT_IN;
2851 case CURLOPT_PROXY_ISSUERCERT_BLOB:
2852 /*
2853 * Blob that holds Issuer certificate to check certificates issuer
2854 */
2855 if(Curl_ssl_supports(data, SSLSUPP_ISSUERCERT_BLOB))
2856 return Curl_setblobopt(&s->blobs[BLOB_SSL_ISSUERCERT_PROXY], blob);
2857 return CURLE_NOT_BUILT_IN;
2858#endif
2859 case CURLOPT_SSLKEY_BLOB:
2860 /*
2861 * Blob that holds file content of the SSL key to use
2862 */
2863 return Curl_setblobopt(&s->blobs[BLOB_KEY], blob);
2864 case CURLOPT_CAINFO_BLOB:
2865 /*
2866 * Blob that holds CA info for SSL connection.
2867 * Specify entire PEM of the CA certificate
2868 */
2869#ifdef USE_SSL
2870 if(Curl_ssl_supports(data, SSLSUPP_CAINFO_BLOB)) {
2871 s->ssl.custom_cablob = TRUE;
2872 return Curl_setblobopt(&s->blobs[BLOB_CAINFO], blob);
2873 }
2874#endif
2875 return CURLE_NOT_BUILT_IN;
2876 case CURLOPT_ISSUERCERT_BLOB:
2877 /*
2878 * Blob that holds Issuer certificate to check certificates issuer
2879 */
2880 if(Curl_ssl_supports(data, SSLSUPP_ISSUERCERT_BLOB))
2881 return Curl_setblobopt(&s->blobs[BLOB_SSL_ISSUERCERT], blob);
2882 return CURLE_NOT_BUILT_IN;
2883
2884 default:
2885 return CURLE_UNKNOWN_OPTION;
2886 }
2887 /* unreachable */
2888}
2889
2890/*
2891 * Do not make Curl_vsetopt() static: it is called from
2892 * projects/OS400/ccsidcurl.c.
2893 */
2894CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
2895{
2896 if(option < CURLOPTTYPE_OBJECTPOINT)
2897 return setopt_long(data, option, va_arg(param, long));
2898 else if(option < CURLOPTTYPE_FUNCTIONPOINT) {
2899 /* unfortunately, different pointer types cannot be identified any other
2900 way than being listed explicitly */
2901 switch(option) {
2902 case CURLOPT_HTTPHEADER:
2903 case CURLOPT_QUOTE:
2904 case CURLOPT_POSTQUOTE:
2905 case CURLOPT_TELNETOPTIONS:
2906 case CURLOPT_PREQUOTE:
2907 case CURLOPT_HTTP200ALIASES:
2908 case CURLOPT_MAIL_RCPT:
2909 case CURLOPT_RESOLVE:
2910 case CURLOPT_PROXYHEADER:
2911 case CURLOPT_CONNECT_TO:
2912 return setopt_slist(data, option, va_arg(param, struct curl_slist *));
2913 case CURLOPT_HTTPPOST: /* curl_httppost * */
2914 case CURLOPT_MIMEPOST: /* curl_mime * */
2915 case CURLOPT_STDERR: /* FILE * */
2916 case CURLOPT_SHARE: /* CURLSH * */
2917 case CURLOPT_STREAM_DEPENDS: /* CURL * */
2918 case CURLOPT_STREAM_DEPENDS_E: /* CURL * */
2919 case CURLOPT_CURLU: /* CURLU * */
2920 return setopt_pointers(data, option, param);
2921 default:
2922 break;
2923 }
2924 /* the char pointer options */
2925 return setopt_cptr(data, option, va_arg(param, char *));
2926 }
2927 else if(option < CURLOPTTYPE_OFF_T)
2928 return setopt_func(data, option, param);
2929 else if(option < CURLOPTTYPE_BLOB)
2930 return setopt_offt(data, option, va_arg(param, curl_off_t));
2931 return setopt_blob(data, option, va_arg(param, struct curl_blob *));
2932}
2933
2934/*
2935 * curl_easy_setopt() is the external interface for setting options on an
2936 * easy handle.
2937 *
2938 * NOTE: This is one of few API functions that are allowed to be called from
2939 * within a callback.
2940 */
2941
2942#undef curl_easy_setopt
2943CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...)
2944{
2945 va_list arg;
2946 CURLcode result;
2947 struct Curl_easy *data = curl;
2948
2949 if(!data)
2950 return CURLE_BAD_FUNCTION_ARGUMENT;
2951
2952 va_start(arg, option);
2953
2954 result = Curl_vsetopt(data, option, arg);
2955
2956 va_end(arg);
2957 if(result == CURLE_BAD_FUNCTION_ARGUMENT)
2958 failf(data, "setopt 0x%x got bad argument", option);
2959 return result;
2960}