docs: introduce "curldown" for libcurl man page format
—
$ git checkout -f eefcc1bda4bccd800f5a56a0fe17a2f44a96e88b
Previous HEAD position was 1647017826 mksymbolsmanpage.pl: provide references to where the symbol is used
HEAD is now at eefcc1bda4 docs: introduce "curldown" for libcurl man page format
$ git clean -fdx
Removing Makefile
Removing Makefile.in
Removing aclocal.m4
Removing autom4te.cache/
Removing compile
Removing config.guess
Removing config.log
Removing config.status
Removing config.sub
Removing configure
Removing curl-config
Removing depcomp
Removing docs/Makefile
Removing docs/Makefile.in
Removing docs/cmdline-opts/Makefile
Removing docs/cmdline-opts/Makefile.in
Removing docs/curl-config.1
Removing docs/curl.1
Removing docs/examples/.deps/
Removing docs/examples/Makefile
Removing docs/examples/Makefile.in
Removing docs/libcurl/Makefile
Removing docs/libcurl/Makefile.in
Removing docs/libcurl/curl_easy_cleanup.3
Removing docs/libcurl/curl_easy_duphandle.3
Removing docs/libcurl/curl_easy_escape.3
Removing docs/libcurl/curl_easy_getinfo.3
Removing docs/libcurl/curl_easy_header.3
Removing docs/libcurl/curl_easy_init.3
Removing docs/libcurl/curl_easy_nextheader.3
Removing docs/libcurl/curl_easy_option_by_id.3
Removing docs/libcurl/curl_easy_option_by_name.3
Removing docs/libcurl/curl_easy_option_next.3
Removing docs/libcurl/curl_easy_pause.3
Removing docs/libcurl/curl_easy_perform.3
Removing docs/libcurl/curl_easy_recv.3
Removing docs/libcurl/curl_easy_reset.3
Removing docs/libcurl/curl_easy_send.3
Removing docs/libcurl/curl_easy_setopt.3
Removing docs/libcurl/curl_easy_strerror.3
Removing docs/libcurl/curl_easy_unescape.3
Removing docs/libcurl/curl_easy_upkeep.3
Removing docs/libcurl/curl_escape.3
Removing docs/libcurl/curl_formadd.3
Removing docs/libcurl/curl_formfree.3
Removing docs/libcurl/curl_formget.3
Removing docs/libcurl/curl_free.3
Removing docs/libcurl/curl_getdate.3
Removing docs/libcurl/curl_getenv.3
Removing docs/libcurl/curl_global_cleanup.3
Removing docs/libcurl/curl_global_init.3
Removing docs/libcurl/curl_global_init_mem.3
Removing docs/libcurl/curl_global_sslset.3
Removing docs/libcurl/curl_global_trace.3
Removing docs/libcurl/curl_mime_addpart.3
Removing docs/libcurl/curl_mime_data.3
Removing docs/libcurl/curl_mime_data_cb.3
Removing docs/libcurl/curl_mime_encoder.3
Removing docs/libcurl/curl_mime_filedata.3
Removing docs/libcurl/curl_mime_filename.3
Removing docs/libcurl/curl_mime_free.3
Removing docs/libcurl/curl_mime_headers.3
Removing docs/libcurl/curl_mime_init.3
Removing docs/libcurl/curl_mime_name.3
Removing docs/libcurl/curl_mime_subparts.3
Removing docs/libcurl/curl_mime_type.3
Removing docs/libcurl/curl_mprintf.3
Removing docs/libcurl/curl_multi_add_handle.3
Removing docs/libcurl/curl_multi_assign.3
Removing docs/libcurl/curl_multi_cleanup.3
Removing docs/libcurl/curl_multi_fdset.3
Removing docs/libcurl/curl_multi_get_handles.3
Removing docs/libcurl/curl_multi_info_read.3
Removing docs/libcurl/curl_multi_init.3
Removing docs/libcurl/curl_multi_perform.3
Removing docs/libcurl/curl_multi_poll.3
Removing docs/libcurl/curl_multi_remove_handle.3
Removing docs/libcurl/curl_multi_setopt.3
Removing docs/libcurl/curl_multi_socket.3
Removing docs/libcurl/curl_multi_socket_action.3
Removing docs/libcurl/curl_multi_socket_all.3
Removing docs/libcurl/curl_multi_strerror.3
Removing docs/libcurl/curl_multi_timeout.3
Removing docs/libcurl/curl_multi_wait.3
Removing docs/libcurl/curl_multi_wakeup.3
Removing docs/libcurl/curl_pushheader_byname.3
Removing docs/libcurl/curl_pushheader_bynum.3
Removing docs/libcurl/curl_share_cleanup.3
Removing docs/libcurl/curl_share_init.3
Removing docs/libcurl/curl_share_setopt.3
Removing docs/libcurl/curl_share_strerror.3
Removing docs/libcurl/curl_slist_append.3
Removing docs/libcurl/curl_slist_free_all.3
Removing docs/libcurl/curl_strequal.3
Removing docs/libcurl/curl_strnequal.3
Removing docs/libcurl/curl_unescape.3
Removing docs/libcurl/curl_url.3
Removing docs/libcurl/curl_url_cleanup.3
Removing docs/libcurl/curl_url_dup.3
Removing docs/libcurl/curl_url_get.3
Removing docs/libcurl/curl_url_set.3
Removing docs/libcurl/curl_url_strerror.3
Removing docs/libcurl/curl_version.3
Removing docs/libcurl/curl_version_info.3
Removing docs/libcurl/curl_ws_meta.3
Removing docs/libcurl/curl_ws_recv.3
Removing docs/libcurl/curl_ws_send.3
Removing docs/libcurl/libcurl-easy.3
Removing docs/libcurl/libcurl-env-dbg.3
Removing docs/libcurl/libcurl-env.3
Removing docs/libcurl/libcurl-errors.3
Removing docs/libcurl/libcurl-multi.3
Removing docs/libcurl/libcurl-security.3
Removing docs/libcurl/libcurl-share.3
Removing docs/libcurl/libcurl-symbols.3
Removing docs/libcurl/libcurl-symbols.md
Removing docs/libcurl/libcurl-thread.3
Removing docs/libcurl/libcurl-tutorial.3
Removing docs/libcurl/libcurl-url.3
Removing docs/libcurl/libcurl-ws.3
Removing docs/libcurl/libcurl.3
Removing docs/libcurl/opts/CURLINFO_ACTIVESOCKET.3
Removing docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.3
Removing docs/libcurl/opts/CURLINFO_APPCONNECT_TIME_T.3
Removing docs/libcurl/opts/CURLINFO_CAINFO.3
Removing docs/libcurl/opts/CURLINFO_CAPATH.3
Removing docs/libcurl/opts/CURLINFO_CERTINFO.3
Removing docs/libcurl/opts/CURLINFO_CONDITION_UNMET.3
Removing docs/libcurl/opts/CURLINFO_CONNECT_TIME.3
Removing docs/libcurl/opts/CURLINFO_CONNECT_TIME_T.3
Removing docs/libcurl/opts/CURLINFO_CONN_ID.3
Removing docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.3
Removing docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3
Removing docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.3
Removing docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD_T.3
Removing docs/libcurl/opts/CURLINFO_CONTENT_TYPE.3
Removing docs/libcurl/opts/CURLINFO_COOKIELIST.3
Removing docs/libcurl/opts/CURLINFO_EFFECTIVE_METHOD.3
Removing docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.3
Removing docs/libcurl/opts/CURLINFO_FILETIME.3
Removing docs/libcurl/opts/CURLINFO_FILETIME_T.3
Removing docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.3
Removing docs/libcurl/opts/CURLINFO_HEADER_SIZE.3
Removing docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.3
Removing docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.3
Removing docs/libcurl/opts/CURLINFO_HTTP_VERSION.3
Removing docs/libcurl/opts/CURLINFO_LASTSOCKET.3
Removing docs/libcurl/opts/CURLINFO_LOCAL_IP.3
Removing docs/libcurl/opts/CURLINFO_LOCAL_PORT.3
Removing docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.3
Removing docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME_T.3
Removing docs/libcurl/opts/CURLINFO_NUM_CONNECTS.3
Removing docs/libcurl/opts/CURLINFO_OS_ERRNO.3
Removing docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.3
Removing docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME_T.3
Removing docs/libcurl/opts/CURLINFO_PRIMARY_IP.3
Removing docs/libcurl/opts/CURLINFO_PRIMARY_PORT.3
Removing docs/libcurl/opts/CURLINFO_PRIVATE.3
Removing docs/libcurl/opts/CURLINFO_PROTOCOL.3
Removing docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.3
Removing docs/libcurl/opts/CURLINFO_PROXY_ERROR.3
Removing docs/libcurl/opts/CURLINFO_PROXY_SSL_VERIFYRESULT.3
Removing docs/libcurl/opts/CURLINFO_QUEUE_TIME_T.3
Removing docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.3
Removing docs/libcurl/opts/CURLINFO_REDIRECT_TIME.3
Removing docs/libcurl/opts/CURLINFO_REDIRECT_TIME_T.3
Removing docs/libcurl/opts/CURLINFO_REDIRECT_URL.3
Removing docs/libcurl/opts/CURLINFO_REFERER.3
Removing docs/libcurl/opts/CURLINFO_REQUEST_SIZE.3
Removing docs/libcurl/opts/CURLINFO_RESPONSE_CODE.3
Removing docs/libcurl/opts/CURLINFO_RETRY_AFTER.3
Removing docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.3
Removing docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.3
Removing docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.3
Removing docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.3
Removing docs/libcurl/opts/CURLINFO_SCHEME.3
Removing docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.3
Removing docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD_T.3
Removing docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.3
Removing docs/libcurl/opts/CURLINFO_SIZE_UPLOAD_T.3
Removing docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.3
Removing docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD_T.3
Removing docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.3
Removing docs/libcurl/opts/CURLINFO_SPEED_UPLOAD_T.3
Removing docs/libcurl/opts/CURLINFO_SSL_ENGINES.3
Removing docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.3
Removing docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.3
Removing docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME_T.3
Removing docs/libcurl/opts/CURLINFO_TLS_SESSION.3
Removing docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.3
Removing docs/libcurl/opts/CURLINFO_TOTAL_TIME.3
Removing docs/libcurl/opts/CURLINFO_TOTAL_TIME_T.3
Removing docs/libcurl/opts/CURLINFO_XFER_ID.3
Removing docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3
Removing docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3
Removing docs/libcurl/opts/CURLMOPT_MAXCONNECTS.3
Removing docs/libcurl/opts/CURLMOPT_MAX_CONCURRENT_STREAMS.3
Removing docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.3
Removing docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.3
Removing docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.3
Removing docs/libcurl/opts/CURLMOPT_PIPELINING.3
Removing docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.3
Removing docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.3
Removing docs/libcurl/opts/CURLMOPT_PUSHDATA.3
Removing docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.3
Removing docs/libcurl/opts/CURLMOPT_SOCKETDATA.3
Removing docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.3
Removing docs/libcurl/opts/CURLMOPT_TIMERDATA.3
Removing docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.3
Removing docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.3
Removing docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.3
Removing docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.3
Removing docs/libcurl/opts/CURLOPT_ALTSVC.3
Removing docs/libcurl/opts/CURLOPT_ALTSVC_CTRL.3
Removing docs/libcurl/opts/CURLOPT_APPEND.3
Removing docs/libcurl/opts/CURLOPT_AUTOREFERER.3
Removing docs/libcurl/opts/CURLOPT_AWS_SIGV4.3
Removing docs/libcurl/opts/CURLOPT_BUFFERSIZE.3
Removing docs/libcurl/opts/CURLOPT_CAINFO.3
Removing docs/libcurl/opts/CURLOPT_CAINFO_BLOB.3
Removing docs/libcurl/opts/CURLOPT_CAPATH.3
Removing docs/libcurl/opts/CURLOPT_CA_CACHE_TIMEOUT.3
Removing docs/libcurl/opts/CURLOPT_CERTINFO.3
Removing docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.3
Removing docs/libcurl/opts/CURLOPT_CHUNK_DATA.3
Removing docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.3
Removing docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.3
Removing docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.3
Removing docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.3
Removing docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3
Removing docs/libcurl/opts/CURLOPT_CONNECT_TO.3
Removing docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.3
Removing docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.3
Removing docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.3
Removing docs/libcurl/opts/CURLOPT_COOKIE.3
Removing docs/libcurl/opts/CURLOPT_COOKIEFILE.3
Removing docs/libcurl/opts/CURLOPT_COOKIEJAR.3
Removing docs/libcurl/opts/CURLOPT_COOKIELIST.3
Removing docs/libcurl/opts/CURLOPT_COOKIESESSION.3
Removing docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.3
Removing docs/libcurl/opts/CURLOPT_CRLF.3
Removing docs/libcurl/opts/CURLOPT_CRLFILE.3
Removing docs/libcurl/opts/CURLOPT_CURLU.3
Removing docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.3
Removing docs/libcurl/opts/CURLOPT_DEBUGDATA.3
Removing docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.3
Removing docs/libcurl/opts/CURLOPT_DIRLISTONLY.3
Removing docs/libcurl/opts/CURLOPT_DISALLOW_USERNAME_IN_URL.3
Removing docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.3
Removing docs/libcurl/opts/CURLOPT_DNS_INTERFACE.3
Removing docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.3
Removing docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.3
Removing docs/libcurl/opts/CURLOPT_DNS_SERVERS.3
Removing docs/libcurl/opts/CURLOPT_DNS_SHUFFLE_ADDRESSES.3
Removing docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.3
Removing docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYHOST.3
Removing docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYPEER.3
Removing docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYSTATUS.3
Removing docs/libcurl/opts/CURLOPT_DOH_URL.3
Removing docs/libcurl/opts/CURLOPT_EGDSOCKET.3
Removing docs/libcurl/opts/CURLOPT_ERRORBUFFER.3
Removing docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.3
Removing docs/libcurl/opts/CURLOPT_FAILONERROR.3
Removing docs/libcurl/opts/CURLOPT_FILETIME.3
Removing docs/libcurl/opts/CURLOPT_FNMATCH_DATA.3
Removing docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.3
Removing docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.3
Removing docs/libcurl/opts/CURLOPT_FORBID_REUSE.3
Removing docs/libcurl/opts/CURLOPT_FRESH_CONNECT.3
Removing docs/libcurl/opts/CURLOPT_FTPPORT.3
Removing docs/libcurl/opts/CURLOPT_FTPSSLAUTH.3
Removing docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.3
Removing docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.3
Removing docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.3
Removing docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.3
Removing docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.3
Removing docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.3
Removing docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.3
Removing docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.3
Removing docs/libcurl/opts/CURLOPT_FTP_USE_PRET.3
Removing docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.3
Removing docs/libcurl/opts/CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3
Removing docs/libcurl/opts/CURLOPT_HAPROXYPROTOCOL.3
Removing docs/libcurl/opts/CURLOPT_HAPROXY_CLIENT_IP.3
Removing docs/libcurl/opts/CURLOPT_HEADER.3
Removing docs/libcurl/opts/CURLOPT_HEADERDATA.3
Removing docs/libcurl/opts/CURLOPT_HEADERFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_HEADEROPT.3
Removing docs/libcurl/opts/CURLOPT_HSTS.3
Removing docs/libcurl/opts/CURLOPT_HSTSREADDATA.3
Removing docs/libcurl/opts/CURLOPT_HSTSREADFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_HSTSWRITEDATA.3
Removing docs/libcurl/opts/CURLOPT_HSTSWRITEFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_HSTS_CTRL.3
Removing docs/libcurl/opts/CURLOPT_HTTP09_ALLOWED.3
Removing docs/libcurl/opts/CURLOPT_HTTP200ALIASES.3
Removing docs/libcurl/opts/CURLOPT_HTTPAUTH.3
Removing docs/libcurl/opts/CURLOPT_HTTPGET.3
Removing docs/libcurl/opts/CURLOPT_HTTPHEADER.3
Removing docs/libcurl/opts/CURLOPT_HTTPPOST.3
Removing docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.3
Removing docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.3
Removing docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.3
Removing docs/libcurl/opts/CURLOPT_HTTP_VERSION.3
Removing docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.3
Removing docs/libcurl/opts/CURLOPT_INFILESIZE.3
Removing docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.3
Removing docs/libcurl/opts/CURLOPT_INTERFACE.3
Removing docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.3
Removing docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_IOCTLDATA.3
Removing docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_IPRESOLVE.3
Removing docs/libcurl/opts/CURLOPT_ISSUERCERT.3
Removing docs/libcurl/opts/CURLOPT_ISSUERCERT_BLOB.3
Removing docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.3
Removing docs/libcurl/opts/CURLOPT_KEYPASSWD.3
Removing docs/libcurl/opts/CURLOPT_KRBLEVEL.3
Removing docs/libcurl/opts/CURLOPT_LOCALPORT.3
Removing docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.3
Removing docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.3
Removing docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.3
Removing docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.3
Removing docs/libcurl/opts/CURLOPT_MAIL_AUTH.3
Removing docs/libcurl/opts/CURLOPT_MAIL_FROM.3
Removing docs/libcurl/opts/CURLOPT_MAIL_RCPT.3
Removing docs/libcurl/opts/CURLOPT_MAIL_RCPT_ALLOWFAILS.3
Removing docs/libcurl/opts/CURLOPT_MAXAGE_CONN.3
Removing docs/libcurl/opts/CURLOPT_MAXCONNECTS.3
Removing docs/libcurl/opts/CURLOPT_MAXFILESIZE.3
Removing docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.3
Removing docs/libcurl/opts/CURLOPT_MAXLIFETIME_CONN.3
Removing docs/libcurl/opts/CURLOPT_MAXREDIRS.3
Removing docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.3
Removing docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.3
Removing docs/libcurl/opts/CURLOPT_MIMEPOST.3
Removing docs/libcurl/opts/CURLOPT_MIME_OPTIONS.3
Removing docs/libcurl/opts/CURLOPT_NETRC.3
Removing docs/libcurl/opts/CURLOPT_NETRC_FILE.3
Removing docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.3
Removing docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.3
Removing docs/libcurl/opts/CURLOPT_NOBODY.3
Removing docs/libcurl/opts/CURLOPT_NOPROGRESS.3
Removing docs/libcurl/opts/CURLOPT_NOPROXY.3
Removing docs/libcurl/opts/CURLOPT_NOSIGNAL.3
Removing docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.3
Removing docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_PASSWORD.3
Removing docs/libcurl/opts/CURLOPT_PATH_AS_IS.3
Removing docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.3
Removing docs/libcurl/opts/CURLOPT_PIPEWAIT.3
Removing docs/libcurl/opts/CURLOPT_PORT.3
Removing docs/libcurl/opts/CURLOPT_POST.3
Removing docs/libcurl/opts/CURLOPT_POSTFIELDS.3
Removing docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.3
Removing docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.3
Removing docs/libcurl/opts/CURLOPT_POSTQUOTE.3
Removing docs/libcurl/opts/CURLOPT_POSTREDIR.3
Removing docs/libcurl/opts/CURLOPT_PREQUOTE.3
Removing docs/libcurl/opts/CURLOPT_PREREQDATA.3
Removing docs/libcurl/opts/CURLOPT_PREREQFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_PRE_PROXY.3
Removing docs/libcurl/opts/CURLOPT_PRIVATE.3
Removing docs/libcurl/opts/CURLOPT_PROGRESSDATA.3
Removing docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_PROTOCOLS.3
Removing docs/libcurl/opts/CURLOPT_PROTOCOLS_STR.3
Removing docs/libcurl/opts/CURLOPT_PROXY.3
Removing docs/libcurl/opts/CURLOPT_PROXYAUTH.3
Removing docs/libcurl/opts/CURLOPT_PROXYHEADER.3
Removing docs/libcurl/opts/CURLOPT_PROXYPASSWORD.3
Removing docs/libcurl/opts/CURLOPT_PROXYPORT.3
Removing docs/libcurl/opts/CURLOPT_PROXYTYPE.3
Removing docs/libcurl/opts/CURLOPT_PROXYUSERNAME.3
Removing docs/libcurl/opts/CURLOPT_PROXYUSERPWD.3
Removing docs/libcurl/opts/CURLOPT_PROXY_CAINFO.3
Removing docs/libcurl/opts/CURLOPT_PROXY_CAINFO_BLOB.3
Removing docs/libcurl/opts/CURLOPT_PROXY_CAPATH.3
Removing docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.3
Removing docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT.3
Removing docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT_BLOB.3
Removing docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.3
Removing docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.3
Removing docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.3
Removing docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.3
Removing docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.3
Removing docs/libcurl/opts/CURLOPT_PROXY_SSLCERT_BLOB.3
Removing docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.3
Removing docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.3
Removing docs/libcurl/opts/CURLOPT_PROXY_SSLKEY_BLOB.3
Removing docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.3
Removing docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.3
Removing docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.3
Removing docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.3
Removing docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.3
Removing docs/libcurl/opts/CURLOPT_PROXY_TLS13_CIPHERS.3
Removing docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.3
Removing docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.3
Removing docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.3
Removing docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.3
Removing docs/libcurl/opts/CURLOPT_PUT.3
Removing docs/libcurl/opts/CURLOPT_QUICK_EXIT.3
Removing docs/libcurl/opts/CURLOPT_QUOTE.3
Removing docs/libcurl/opts/CURLOPT_RANDOM_FILE.3
Removing docs/libcurl/opts/CURLOPT_RANGE.3
Removing docs/libcurl/opts/CURLOPT_READDATA.3
Removing docs/libcurl/opts/CURLOPT_READFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.3
Removing docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS_STR.3
Removing docs/libcurl/opts/CURLOPT_REFERER.3
Removing docs/libcurl/opts/CURLOPT_REQUEST_TARGET.3
Removing docs/libcurl/opts/CURLOPT_RESOLVE.3
Removing docs/libcurl/opts/CURLOPT_RESOLVER_START_DATA.3
Removing docs/libcurl/opts/CURLOPT_RESOLVER_START_FUNCTION.3
Removing docs/libcurl/opts/CURLOPT_RESUME_FROM.3
Removing docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.3
Removing docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.3
Removing docs/libcurl/opts/CURLOPT_RTSP_REQUEST.3
Removing docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.3
Removing docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.3
Removing docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.3
Removing docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.3
Removing docs/libcurl/opts/CURLOPT_SASL_AUTHZID.3
Removing docs/libcurl/opts/CURLOPT_SASL_IR.3
Removing docs/libcurl/opts/CURLOPT_SEEKDATA.3
Removing docs/libcurl/opts/CURLOPT_SEEKFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT.3
Removing docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT_MS.3
Removing docs/libcurl/opts/CURLOPT_SERVICE_NAME.3
Removing docs/libcurl/opts/CURLOPT_SHARE.3
Removing docs/libcurl/opts/CURLOPT_SOCKOPTDATA.3
Removing docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_SOCKS5_AUTH.3
Removing docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.3
Removing docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.3
Removing docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.3
Removing docs/libcurl/opts/CURLOPT_SSH_COMPRESSION.3
Removing docs/libcurl/opts/CURLOPT_SSH_HOSTKEYDATA.3
Removing docs/libcurl/opts/CURLOPT_SSH_HOSTKEYFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3
Removing docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.3
Removing docs/libcurl/opts/CURLOPT_SSH_KEYDATA.3
Removing docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.3
Removing docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.3
Removing docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.3
Removing docs/libcurl/opts/CURLOPT_SSLCERT.3
Removing docs/libcurl/opts/CURLOPT_SSLCERTTYPE.3
Removing docs/libcurl/opts/CURLOPT_SSLCERT_BLOB.3
Removing docs/libcurl/opts/CURLOPT_SSLENGINE.3
Removing docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.3
Removing docs/libcurl/opts/CURLOPT_SSLKEY.3
Removing docs/libcurl/opts/CURLOPT_SSLKEYTYPE.3
Removing docs/libcurl/opts/CURLOPT_SSLKEY_BLOB.3
Removing docs/libcurl/opts/CURLOPT_SSLVERSION.3
Removing docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.3
Removing docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.3
Removing docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.3
Removing docs/libcurl/opts/CURLOPT_SSL_EC_CURVES.3
Removing docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.3
Removing docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.3
Removing docs/libcurl/opts/CURLOPT_SSL_FALSESTART.3
Removing docs/libcurl/opts/CURLOPT_SSL_OPTIONS.3
Removing docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.3
Removing docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.3
Removing docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.3
Removing docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.3
Removing docs/libcurl/opts/CURLOPT_STDERR.3
Removing docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.3
Removing docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.3
Removing docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.3
Removing docs/libcurl/opts/CURLOPT_SUPPRESS_CONNECT_HEADERS.3
Removing docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.3
Removing docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.3
Removing docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.3
Removing docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.3
Removing docs/libcurl/opts/CURLOPT_TCP_NODELAY.3
Removing docs/libcurl/opts/CURLOPT_TELNETOPTIONS.3
Removing docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.3
Removing docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.3
Removing docs/libcurl/opts/CURLOPT_TIMECONDITION.3
Removing docs/libcurl/opts/CURLOPT_TIMEOUT.3
Removing docs/libcurl/opts/CURLOPT_TIMEOUT_MS.3
Removing docs/libcurl/opts/CURLOPT_TIMEVALUE.3
Removing docs/libcurl/opts/CURLOPT_TIMEVALUE_LARGE.3
Removing docs/libcurl/opts/CURLOPT_TLS13_CIPHERS.3
Removing docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.3
Removing docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.3
Removing docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.3
Removing docs/libcurl/opts/CURLOPT_TRAILERDATA.3
Removing docs/libcurl/opts/CURLOPT_TRAILERFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_TRANSFERTEXT.3
Removing docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.3
Removing docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.3
Removing docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.3
Removing docs/libcurl/opts/CURLOPT_UPKEEP_INTERVAL_MS.3
Removing docs/libcurl/opts/CURLOPT_UPLOAD.3
Removing docs/libcurl/opts/CURLOPT_UPLOAD_BUFFERSIZE.3
Removing docs/libcurl/opts/CURLOPT_URL.3
Removing docs/libcurl/opts/CURLOPT_USERAGENT.3
Removing docs/libcurl/opts/CURLOPT_USERNAME.3
Removing docs/libcurl/opts/CURLOPT_USERPWD.3
Removing docs/libcurl/opts/CURLOPT_USE_SSL.3
Removing docs/libcurl/opts/CURLOPT_VERBOSE.3
Removing docs/libcurl/opts/CURLOPT_WILDCARDMATCH.3
Removing docs/libcurl/opts/CURLOPT_WRITEDATA.3
Removing docs/libcurl/opts/CURLOPT_WRITEFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_WS_OPTIONS.3
Removing docs/libcurl/opts/CURLOPT_XFERINFODATA.3
Removing docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.3
Removing docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.3
Removing docs/libcurl/opts/CURLSHOPT_LOCKFUNC.3
Removing docs/libcurl/opts/CURLSHOPT_SHARE.3
Removing docs/libcurl/opts/CURLSHOPT_UNLOCKFUNC.3
Removing docs/libcurl/opts/CURLSHOPT_UNSHARE.3
Removing docs/libcurl/opts/CURLSHOPT_USERDATA.3
Removing docs/libcurl/opts/Makefile
Removing docs/libcurl/opts/Makefile.in
Removing docs/mk-ca-bundle.1
Removing include/Makefile
Removing include/Makefile.in
Removing include/curl/Makefile
Removing include/curl/Makefile.in
Removing install-sh
Removing lib/.deps/
Removing lib/.dirstamp
Removing lib/.libs/
Removing lib/Makefile
Removing lib/Makefile.in
Removing lib/base64.o
Removing lib/curl_config.h
Removing lib/curl_config.h.in
Removing lib/curl_multibyte.o
Removing lib/dynbuf.o
Removing lib/libcurl.la
Removing lib/libcurl.plist
Removing lib/libcurl.vers
Removing lib/libcurl_la-altsvc.lo
Removing lib/libcurl_la-altsvc.o
Removing lib/libcurl_la-amigaos.lo
Removing lib/libcurl_la-amigaos.o
Removing lib/libcurl_la-asyn-ares.lo
Removing lib/libcurl_la-asyn-ares.o
Removing lib/libcurl_la-asyn-thread.lo
Removing lib/libcurl_la-asyn-thread.o
Removing lib/libcurl_la-base64.lo
Removing lib/libcurl_la-base64.o
Removing lib/libcurl_la-bufq.lo
Removing lib/libcurl_la-bufq.o
Removing lib/libcurl_la-bufref.lo
Removing lib/libcurl_la-bufref.o
Removing lib/libcurl_la-c-hyper.lo
Removing lib/libcurl_la-c-hyper.o
Removing lib/libcurl_la-cf-h1-proxy.lo
Removing lib/libcurl_la-cf-h1-proxy.o
Removing lib/libcurl_la-cf-h2-proxy.lo
Removing lib/libcurl_la-cf-h2-proxy.o
Removing lib/libcurl_la-cf-haproxy.lo
Removing lib/libcurl_la-cf-haproxy.o
Removing lib/libcurl_la-cf-https-connect.lo
Removing lib/libcurl_la-cf-https-connect.o
Removing lib/libcurl_la-cf-socket.lo
Removing lib/libcurl_la-cf-socket.o
Removing lib/libcurl_la-cfilters.lo
Removing lib/libcurl_la-cfilters.o
Removing lib/libcurl_la-conncache.lo
Removing lib/libcurl_la-conncache.o
Removing lib/libcurl_la-connect.lo
Removing lib/libcurl_la-connect.o
Removing lib/libcurl_la-content_encoding.lo
Removing lib/libcurl_la-content_encoding.o
Removing lib/libcurl_la-cookie.lo
Removing lib/libcurl_la-cookie.o
Removing lib/libcurl_la-curl_addrinfo.lo
Removing lib/libcurl_la-curl_addrinfo.o
Removing lib/libcurl_la-curl_des.lo
Removing lib/libcurl_la-curl_des.o
Removing lib/libcurl_la-curl_endian.lo
Removing lib/libcurl_la-curl_endian.o
Removing lib/libcurl_la-curl_fnmatch.lo
Removing lib/libcurl_la-curl_fnmatch.o
Removing lib/libcurl_la-curl_get_line.lo
Removing lib/libcurl_la-curl_get_line.o
Removing lib/libcurl_la-curl_gethostname.lo
Removing lib/libcurl_la-curl_gethostname.o
Removing lib/libcurl_la-curl_gssapi.lo
Removing lib/libcurl_la-curl_gssapi.o
Removing lib/libcurl_la-curl_memrchr.lo
Removing lib/libcurl_la-curl_memrchr.o
Removing lib/libcurl_la-curl_multibyte.lo
Removing lib/libcurl_la-curl_multibyte.o
Removing lib/libcurl_la-curl_ntlm_core.lo
Removing lib/libcurl_la-curl_ntlm_core.o
Removing lib/libcurl_la-curl_ntlm_wb.lo
Removing lib/libcurl_la-curl_ntlm_wb.o
Removing lib/libcurl_la-curl_path.lo
Removing lib/libcurl_la-curl_path.o
Removing lib/libcurl_la-curl_range.lo
Removing lib/libcurl_la-curl_range.o
Removing lib/libcurl_la-curl_rtmp.lo
Removing lib/libcurl_la-curl_rtmp.o
Removing lib/libcurl_la-curl_sasl.lo
Removing lib/libcurl_la-curl_sasl.o
Removing lib/libcurl_la-curl_sspi.lo
Removing lib/libcurl_la-curl_sspi.o
Removing lib/libcurl_la-curl_threads.lo
Removing lib/libcurl_la-curl_threads.o
Removing lib/libcurl_la-curl_trc.lo
Removing lib/libcurl_la-curl_trc.o
Removing lib/libcurl_la-dict.lo
Removing lib/libcurl_la-dict.o
Removing lib/libcurl_la-doh.lo
Removing lib/libcurl_la-doh.o
Removing lib/libcurl_la-dynbuf.lo
Removing lib/libcurl_la-dynbuf.o
Removing lib/libcurl_la-dynhds.lo
Removing lib/libcurl_la-dynhds.o
Removing lib/libcurl_la-easy.lo
Removing lib/libcurl_la-easy.o
Removing lib/libcurl_la-easygetopt.lo
Removing lib/libcurl_la-easygetopt.o
Removing lib/libcurl_la-easyoptions.lo
Removing lib/libcurl_la-easyoptions.o
Removing lib/libcurl_la-escape.lo
Removing lib/libcurl_la-escape.o
Removing lib/libcurl_la-file.lo
Removing lib/libcurl_la-file.o
Removing lib/libcurl_la-fileinfo.lo
Removing lib/libcurl_la-fileinfo.o
Removing lib/libcurl_la-fopen.lo
Removing lib/libcurl_la-fopen.o
Removing lib/libcurl_la-formdata.lo
Removing lib/libcurl_la-formdata.o
Removing lib/libcurl_la-ftp.lo
Removing lib/libcurl_la-ftp.o
Removing lib/libcurl_la-ftplistparser.lo
Removing lib/libcurl_la-ftplistparser.o
Removing lib/libcurl_la-getenv.lo
Removing lib/libcurl_la-getenv.o
Removing lib/libcurl_la-getinfo.lo
Removing lib/libcurl_la-getinfo.o
Removing lib/libcurl_la-gopher.lo
Removing lib/libcurl_la-gopher.o
Removing lib/libcurl_la-hash.lo
Removing lib/libcurl_la-hash.o
Removing lib/libcurl_la-headers.lo
Removing lib/libcurl_la-headers.o
Removing lib/libcurl_la-hmac.lo
Removing lib/libcurl_la-hmac.o
Removing lib/libcurl_la-hostasyn.lo
Removing lib/libcurl_la-hostasyn.o
Removing lib/libcurl_la-hostip.lo
Removing lib/libcurl_la-hostip.o
Removing lib/libcurl_la-hostip4.lo
Removing lib/libcurl_la-hostip4.o
Removing lib/libcurl_la-hostip6.lo
Removing lib/libcurl_la-hostip6.o
Removing lib/libcurl_la-hostsyn.lo
Removing lib/libcurl_la-hostsyn.o
Removing lib/libcurl_la-hsts.lo
Removing lib/libcurl_la-hsts.o
Removing lib/libcurl_la-http.lo
Removing lib/libcurl_la-http.o
Removing lib/libcurl_la-http1.lo
Removing lib/libcurl_la-http1.o
Removing lib/libcurl_la-http2.lo
Removing lib/libcurl_la-http2.o
Removing lib/libcurl_la-http_aws_sigv4.lo
Removing lib/libcurl_la-http_aws_sigv4.o
Removing lib/libcurl_la-http_chunks.lo
Removing lib/libcurl_la-http_chunks.o
Removing lib/libcurl_la-http_digest.lo
Removing lib/libcurl_la-http_digest.o
Removing lib/libcurl_la-http_negotiate.lo
Removing lib/libcurl_la-http_negotiate.o
Removing lib/libcurl_la-http_ntlm.lo
Removing lib/libcurl_la-http_ntlm.o
Removing lib/libcurl_la-http_proxy.lo
Removing lib/libcurl_la-http_proxy.o
Removing lib/libcurl_la-idn.lo
Removing lib/libcurl_la-idn.o
Removing lib/libcurl_la-if2ip.lo
Removing lib/libcurl_la-if2ip.o
Removing lib/libcurl_la-imap.lo
Removing lib/libcurl_la-imap.o
Removing lib/libcurl_la-inet_ntop.lo
Removing lib/libcurl_la-inet_ntop.o
Removing lib/libcurl_la-inet_pton.lo
Removing lib/libcurl_la-inet_pton.o
Removing lib/libcurl_la-krb5.lo
Removing lib/libcurl_la-krb5.o
Removing lib/libcurl_la-ldap.lo
Removing lib/libcurl_la-ldap.o
Removing lib/libcurl_la-llist.lo
Removing lib/libcurl_la-llist.o
Removing lib/libcurl_la-macos.lo
Removing lib/libcurl_la-macos.o
Removing lib/libcurl_la-md4.lo
Removing lib/libcurl_la-md4.o
Removing lib/libcurl_la-md5.lo
Removing lib/libcurl_la-md5.o
Removing lib/libcurl_la-memdebug.lo
Removing lib/libcurl_la-memdebug.o
Removing lib/libcurl_la-mime.lo
Removing lib/libcurl_la-mime.o
Removing lib/libcurl_la-mprintf.lo
Removing lib/libcurl_la-mprintf.o
Removing lib/libcurl_la-mqtt.lo
Removing lib/libcurl_la-mqtt.o
Removing lib/libcurl_la-multi.lo
Removing lib/libcurl_la-multi.o
Removing lib/libcurl_la-netrc.lo
Removing lib/libcurl_la-netrc.o
Removing lib/libcurl_la-nonblock.lo
Removing lib/libcurl_la-nonblock.o
Removing lib/libcurl_la-noproxy.lo
Removing lib/libcurl_la-noproxy.o
Removing lib/libcurl_la-openldap.lo
Removing lib/libcurl_la-openldap.o
Removing lib/libcurl_la-parsedate.lo
Removing lib/libcurl_la-parsedate.o
Removing lib/libcurl_la-pingpong.lo
Removing lib/libcurl_la-pingpong.o
Removing lib/libcurl_la-pop3.lo
Removing lib/libcurl_la-pop3.o
Removing lib/libcurl_la-progress.lo
Removing lib/libcurl_la-progress.o
Removing lib/libcurl_la-psl.lo
Removing lib/libcurl_la-psl.o
Removing lib/libcurl_la-rand.lo
Removing lib/libcurl_la-rand.o
Removing lib/libcurl_la-rename.lo
Removing lib/libcurl_la-rename.o
Removing lib/libcurl_la-rtsp.lo
Removing lib/libcurl_la-rtsp.o
Removing lib/libcurl_la-select.lo
Removing lib/libcurl_la-select.o
Removing lib/libcurl_la-sendf.lo
Removing lib/libcurl_la-sendf.o
Removing lib/libcurl_la-setopt.lo
Removing lib/libcurl_la-setopt.o
Removing lib/libcurl_la-sha256.lo
Removing lib/libcurl_la-sha256.o
Removing lib/libcurl_la-share.lo
Removing lib/libcurl_la-share.o
Removing lib/libcurl_la-slist.lo
Removing lib/libcurl_la-slist.o
Removing lib/libcurl_la-smb.lo
Removing lib/libcurl_la-smb.o
Removing lib/libcurl_la-smtp.lo
Removing lib/libcurl_la-smtp.o
Removing lib/libcurl_la-socketpair.lo
Removing lib/libcurl_la-socketpair.o
Removing lib/libcurl_la-socks.lo
Removing lib/libcurl_la-socks.o
Removing lib/libcurl_la-socks_gssapi.lo
Removing lib/libcurl_la-socks_gssapi.o
Removing lib/libcurl_la-socks_sspi.lo
Removing lib/libcurl_la-socks_sspi.o
Removing lib/libcurl_la-speedcheck.lo
Removing lib/libcurl_la-speedcheck.o
Removing lib/libcurl_la-splay.lo
Removing lib/libcurl_la-splay.o
Removing lib/libcurl_la-strcase.lo
Removing lib/libcurl_la-strcase.o
Removing lib/libcurl_la-strdup.lo
Removing lib/libcurl_la-strdup.o
Removing lib/libcurl_la-strerror.lo
Removing lib/libcurl_la-strerror.o
Removing lib/libcurl_la-strtok.lo
Removing lib/libcurl_la-strtok.o
Removing lib/libcurl_la-strtoofft.lo
Removing lib/libcurl_la-strtoofft.o
Removing lib/libcurl_la-system_win32.lo
Removing lib/libcurl_la-system_win32.o
Removing lib/libcurl_la-telnet.lo
Removing lib/libcurl_la-telnet.o
Removing lib/libcurl_la-tftp.lo
Removing lib/libcurl_la-tftp.o
Removing lib/libcurl_la-timediff.lo
Removing lib/libcurl_la-timediff.o
Removing lib/libcurl_la-timeval.lo
Removing lib/libcurl_la-timeval.o
Removing lib/libcurl_la-transfer.lo
Removing lib/libcurl_la-transfer.o
Removing lib/libcurl_la-url.lo
Removing lib/libcurl_la-url.o
Removing lib/libcurl_la-urlapi.lo
Removing lib/libcurl_la-urlapi.o
Removing lib/libcurl_la-version.lo
Removing lib/libcurl_la-version.o
Removing lib/libcurl_la-version_win32.lo
Removing lib/libcurl_la-version_win32.o
Removing lib/libcurl_la-warnless.lo
Removing lib/libcurl_la-warnless.o
Removing lib/libcurl_la-ws.lo
Removing lib/libcurl_la-ws.o
Removing lib/nonblock.o
Removing lib/stamp-h1
Removing lib/strtoofft.o
Removing lib/timediff.o
Removing lib/vauth/.deps/
Removing lib/vauth/.dirstamp
Removing lib/vauth/libcurl_la-cleartext.lo
Removing lib/vauth/libcurl_la-cleartext.o
Removing lib/vauth/libcurl_la-cram.lo
Removing lib/vauth/libcurl_la-cram.o
Removing lib/vauth/libcurl_la-digest.lo
Removing lib/vauth/libcurl_la-digest.o
Removing lib/vauth/libcurl_la-digest_sspi.lo
Removing lib/vauth/libcurl_la-digest_sspi.o
Removing lib/vauth/libcurl_la-gsasl.lo
Removing lib/vauth/libcurl_la-gsasl.o
Removing lib/vauth/libcurl_la-krb5_gssapi.lo
Removing lib/vauth/libcurl_la-krb5_gssapi.o
Removing lib/vauth/libcurl_la-krb5_sspi.lo
Removing lib/vauth/libcurl_la-krb5_sspi.o
Removing lib/vauth/libcurl_la-ntlm.lo
Removing lib/vauth/libcurl_la-ntlm.o
Removing lib/vauth/libcurl_la-ntlm_sspi.lo
Removing lib/vauth/libcurl_la-ntlm_sspi.o
Removing lib/vauth/libcurl_la-oauth2.lo
Removing lib/vauth/libcurl_la-oauth2.o
Removing lib/vauth/libcurl_la-spnego_gssapi.lo
Removing lib/vauth/libcurl_la-spnego_gssapi.o
Removing lib/vauth/libcurl_la-spnego_sspi.lo
Removing lib/vauth/libcurl_la-spnego_sspi.o
Removing lib/vauth/libcurl_la-vauth.lo
Removing lib/vauth/libcurl_la-vauth.o
Removing lib/version_win32.o
Removing lib/vquic/.deps/
Removing lib/vquic/.dirstamp
Removing lib/vquic/libcurl_la-curl_msh3.lo
Removing lib/vquic/libcurl_la-curl_msh3.o
Removing lib/vquic/libcurl_la-curl_ngtcp2.lo
Removing lib/vquic/libcurl_la-curl_ngtcp2.o
Removing lib/vquic/libcurl_la-curl_osslq.lo
Removing lib/vquic/libcurl_la-curl_osslq.o
Removing lib/vquic/libcurl_la-curl_quiche.lo
Removing lib/vquic/libcurl_la-curl_quiche.o
Removing lib/vquic/libcurl_la-vquic-tls.lo
Removing lib/vquic/libcurl_la-vquic-tls.o
Removing lib/vquic/libcurl_la-vquic.lo
Removing lib/vquic/libcurl_la-vquic.o
Removing lib/vssh/.deps/
Removing lib/vssh/.dirstamp
Removing lib/vssh/libcurl_la-libssh.lo
Removing lib/vssh/libcurl_la-libssh.o
Removing lib/vssh/libcurl_la-libssh2.lo
Removing lib/vssh/libcurl_la-libssh2.o
Removing lib/vssh/libcurl_la-wolfssh.lo
Removing lib/vssh/libcurl_la-wolfssh.o
Removing lib/vtls/.deps/
Removing lib/vtls/.dirstamp
Removing lib/vtls/libcurl_la-bearssl.lo
Removing lib/vtls/libcurl_la-bearssl.o
Removing lib/vtls/libcurl_la-gtls.lo
Removing lib/vtls/libcurl_la-gtls.o
Removing lib/vtls/libcurl_la-hostcheck.lo
Removing lib/vtls/libcurl_la-hostcheck.o
Removing lib/vtls/libcurl_la-keylog.lo
Removing lib/vtls/libcurl_la-keylog.o
Removing lib/vtls/libcurl_la-mbedtls.lo
Removing lib/vtls/libcurl_la-mbedtls.o
Removing lib/vtls/libcurl_la-mbedtls_threadlock.lo
Removing lib/vtls/libcurl_la-mbedtls_threadlock.o
Removing lib/vtls/libcurl_la-openssl.lo
Removing lib/vtls/libcurl_la-openssl.o
Removing lib/vtls/libcurl_la-rustls.lo
Removing lib/vtls/libcurl_la-rustls.o
Removing lib/vtls/libcurl_la-schannel.lo
Removing lib/vtls/libcurl_la-schannel.o
Removing lib/vtls/libcurl_la-schannel_verify.lo
Removing lib/vtls/libcurl_la-schannel_verify.o
Removing lib/vtls/libcurl_la-sectransp.lo
Removing lib/vtls/libcurl_la-sectransp.o
Removing lib/vtls/libcurl_la-vtls.lo
Removing lib/vtls/libcurl_la-vtls.o
Removing lib/vtls/libcurl_la-wolfssl.lo
Removing lib/vtls/libcurl_la-wolfssl.o
Removing lib/vtls/libcurl_la-x509asn1.lo
Removing lib/vtls/libcurl_la-x509asn1.o
Removing lib/warnless.o
Removing libcurl.pc
Removing libtool
Removing ltmain.sh
Removing m4/libtool.m4
Removing m4/ltoptions.m4
Removing m4/ltsugar.m4
Removing m4/ltversion.m4
Removing m4/lt~obsolete.m4
Removing missing
Removing packages/Makefile
Removing packages/Makefile.in
Removing packages/vms/Makefile
Removing packages/vms/Makefile.in
Removing scripts/Makefile
Removing scripts/Makefile.in
Removing src/.deps/
Removing src/.libs/
Removing src/Makefile
Removing src/Makefile.in
Removing src/curl
Removing src/slist_wc.o
Removing src/tool_binmode.o
Removing src/tool_bname.o
Removing src/tool_cb_dbg.o
Removing src/tool_cb_hdr.o
Removing src/tool_cb_prg.o
Removing src/tool_cb_rea.o
Removing src/tool_cb_see.o
Removing src/tool_cb_wrt.o
Removing src/tool_cfgable.o
Removing src/tool_dirhie.o
Removing src/tool_doswin.o
Removing src/tool_easysrc.o
Removing src/tool_filetime.o
Removing src/tool_findfile.o
Removing src/tool_formparse.o
Removing src/tool_getparam.o
Removing src/tool_getpass.o
Removing src/tool_help.o
Removing src/tool_helpers.o
Removing src/tool_hugehelp.c
Removing src/tool_hugehelp.o
Removing src/tool_ipfs.o
Removing src/tool_libinfo.o
Removing src/tool_listhelp.o
Removing src/tool_main.o
Removing src/tool_msgs.o
Removing src/tool_operate.o
Removing src/tool_operhlp.o
Removing src/tool_paramhlp.o
Removing src/tool_parsecfg.o
Removing src/tool_progress.o
Removing src/tool_setopt.o
Removing src/tool_sleep.o
Removing src/tool_stderr.o
Removing src/tool_strdup.o
Removing src/tool_urlglob.o
Removing src/tool_util.o
Removing src/tool_vms.o
Removing src/tool_writeout.o
Removing src/tool_writeout_json.o
Removing src/tool_xattr.o
Removing src/var.o
Removing tests/Makefile
Removing tests/Makefile.in
Removing tests/certs/Makefile
Removing tests/certs/Makefile.in
Removing tests/certs/scripts/Makefile
Removing tests/certs/scripts/Makefile.in
Removing tests/config
Removing tests/configurehelp.pm
Removing tests/data/Makefile
Removing tests/data/Makefile.in
Removing tests/http/Makefile
Removing tests/http/Makefile.in
Removing tests/http/clients/.deps/
Removing tests/http/clients/Makefile
Removing tests/http/clients/Makefile.in
Removing tests/http/config.ini
Removing tests/libtest/.deps/
Removing tests/libtest/Makefile
Removing tests/libtest/Makefile.in
Removing tests/server/.deps/
Removing tests/server/Makefile
Removing tests/server/Makefile.in
Removing tests/unit/.deps/
Removing tests/unit/Makefile
Removing tests/unit/Makefile.in
$ autoreconf -fi
libtoolize: putting auxiliary files in '.'.
libtoolize: copying file './ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.
libtoolize: copying file 'm4/libtool.m4'
libtoolize: copying file 'm4/ltoptions.m4'
libtoolize: copying file 'm4/ltsugar.m4'
libtoolize: copying file 'm4/ltversion.m4'
libtoolize: copying file 'm4/lt~obsolete.m4'
libtoolize: Remember to add 'LT_INIT' to configure.ac.
configure.ac:123: installing './compile'
configure.ac:424: installing './config.guess'
configure.ac:424: installing './config.sub'
configure.ac:123: installing './install-sh'
configure.ac:129: installing './missing'
docs/examples/Makefile.am: installing './depcomp'
$ bash -c find . -name config.guess -exec cp /usr/share/misc/config.guess {} \;
$ bash -c find . -name config.sub -exec cp /usr/share/misc/config.sub {} \;
$ chmod +x configure
$ ./configure --disable-shared --without-ssl --disable-docs
checking whether to enable maintainer-specific portions of Makefiles... no
checking whether make supports nested variables... yes
checking whether to enable debug build options... no
checking whether to enable compiler optimizer... (assumed) yes
checking whether to enable strict compiler warnings... no
checking whether to enable compiler warnings as errors... no
checking whether to enable curl debug memory tracking... no
checking whether to enable hiding of library internal symbols... yes
checking whether to enable c-ares for DNS lookups... no
checking whether to disable dependency on -lrt... (assumed no)
checking whether to enable ECH support... no
checking for path separator... :
checking for sed... /usr/bin/sed
checking for grep... /usr/bin/grep
checking that grep -E works... yes
checking for ar... /usr/bin/ar
checking for a BSD-compatible install... /usr/bin/install -c
checking for gcc... ccache gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether ccache gcc accepts -g... yes
checking for ccache gcc option to enable C11 features... none needed
checking whether ccache gcc understands -c and -o together... yes
checking how to run the C preprocessor... ccache gcc -E
checking for stdio.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for strings.h... yes
checking for sys/stat.h... yes
checking for sys/types.h... yes
checking for unistd.h... yes
checking for stdatomic.h... yes
checking if _Atomic is available... yes
checking for a sed that does not truncate output... (cached) /usr/bin/sed
checking for code coverage support... no
checking whether build environment is sane... yes
checking for a race-free mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports the include directive... yes (GNU style)
checking dependency style of ccache gcc... gcc3
checking curl version... 8.6.0-DEV
checking for httpd... no
checking for apache2... no
checking for apachectl... no
checking for apxs... no
configure: httpd/apache2 not in PATH, http tests disabled
configure: apxs not in PATH, http tests disabled
checking for nghttpx... no
checking for caddy... no
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking for grep that handles long lines and -e... (cached) /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking if OS is AIX (to define _ALL_SOURCE)... no
checking if _THREAD_SAFE is already defined... no
checking if _THREAD_SAFE is actually needed... no
checking if _THREAD_SAFE is onwards defined... no
checking if _REENTRANT is already defined... no
checking if _REENTRANT is actually needed... no
checking if _REENTRANT is onwards defined... no
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... no
checking how to print strings... printf
checking for a sed that does not truncate output... (cached) /usr/bin/sed
checking for fgrep... /usr/bin/grep -F
checking for ld used by ccache gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from ccache gcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for mt... mt
checking if mt is a manifest tool... no
checking for dlfcn.h... yes
checking for objdir... .libs
checking if ccache gcc supports -fno-rtti -fno-exceptions... no
checking for ccache gcc option to produce PIC... -fPIC -DPIC
checking if ccache gcc PIC flag -fPIC -DPIC works... yes
checking if ccache gcc static flag -static works... yes
checking if ccache gcc supports -c -o file.o... yes
checking if ccache gcc supports -c -o file.o... (cached) yes
checking whether the ccache gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... no
checking whether to build static libraries... yes
checking whether to build shared libraries with -version-info... yes
checking whether to build shared libraries with -no-undefined... no
checking whether to build shared libraries with -mimpure-text... no
checking whether to build shared libraries with PIC... yes
checking whether to build static libraries with PIC... yes
checking whether to build shared libraries only... no
checking whether to build static libraries only... yes
checking for windres... no
checking for inline... inline
checking if cpp -P is needed... yes
checking if cpp -P works... yes
checking if compiler is DEC/Compaq/HP C... no
checking if compiler is HP-UX C... no
checking if compiler is IBM C... no
checking if compiler is Intel C... no
checking if compiler is clang... no
checking if compiler is GNU C... yes
checking compiler version... gcc '1100' (raw: '11')
checking if compiler is SGI MIPSpro C... no
checking if compiler is SGI MIPS C... no
checking if compiler is SunPro C... no
checking if compiler is Tiny C... no
checking whether build target is a native Windows one... no
checking if compiler accepts some basic options... yes
configure: compiler options added: -Werror-implicit-function-declaration
checking if compiler optimizer assumed setting might be used... yes
checking if compiler accepts optimizer enabling options... yes
configure: compiler options added: -O2
checking if compiler accepts strict warning options... yes
configure: compiler options added: -Wno-system-headers
checking if compiler halts on compilation errors... yes
checking if compiler halts on negative sized arrays... yes
checking if compiler halts on function prototype mismatch... yes
checking if compiler supports hiding library internal symbols... yes
checking whether build target supports WIN32 file API... no
checking whether build target supports WIN32 crypto API... no
checking for good-to-use Darwin CFLAGS... no
checking whether to link macOS CoreFoundation, CoreServices, and SystemConfiguration frameworks... no
checking to see if the compiler supports __builtin_available()... no
checking whether to support http... yes
checking whether to support ftp... yes
checking whether to support file... yes
checking whether to support ldap... yes
checking whether to support ldaps... yes
checking whether to support rtsp... yes
checking whether to support proxies... yes
checking whether to support dict... yes
checking whether to support telnet... yes
checking whether to support tftp... yes
checking whether to support pop3... yes
checking whether to support imap... yes
checking whether to support smb... yes
checking whether to support smtp... yes
checking whether to support gopher... yes
checking whether to support mqtt... no
checking whether to provide built-in manual... yes
checking whether to enable generation of C code... yes
checking whether to use libgcc... no
checking if X/Open network library is required... no
checking for gethostbyname... yes
checking whether build target is a native Windows one... (cached) no
checking for proto/bsdsocket.h... no
checking for connect in libraries... yes
checking for sys/types.h... (cached) yes
checking for sys/time.h... yes
checking for monotonic clock_gettime... yes
checking for clock_gettime in libraries... no additional lib required
checking if monotonic clock_gettime works... yes
checking for sys/types.h... (cached) yes
checking for sys/time.h... (cached) yes
checking for raw monotonic clock_gettime... yes
checking for pkg-config... /usr/bin/pkg-config
checking for zlib options with pkg-config... found
checking for zlib.h... yes
configure: found both libz and libz.h header
checking for BrotliDecoderDecompress in -lbrotlidec... no
checking for brotli/decode.h... no
checking for ZSTD_createDStream in -lzstd... no
checking for zstd.h... no
checking for lber.h... no
checking for ldap.h... no
checking for ldap_ssl.h... no
checking for LDAP libraries... cannot find LDAP libraries
checking whether to enable IPv6... yes
checking if struct sockaddr_in6 has sin6_scope_id member... yes
checking if argv can be written to... yes
checking if GSS-API support is requested... no
checking whether to enable Windows native SSL/TLS... no
checking whether to enable Secure Transport... no
checking whether to enable Amiga native SSL/TLS (AmiSSL v5)... no
checking for library containing psl_builtin... -lpsl
checking for library containing gsasl_init... no
checking for RTMP_Init in -lrtmp... no
checking whether versioned symbols are wanted... no
checking whether to enable Windows native IDN (Windows native builds only)... no
checking whether to build with libidn2... (assumed) yes
checking for pkg-config... (cached) /usr/bin/pkg-config
checking for libidn2 options with pkg-config... no
configure: IDN_LIBS: "-lidn2"
configure: IDN_LDFLAGS: ""
configure: IDN_CPPFLAGS: ""
configure: IDN_DIR: ""
checking if idn2_lookup_ul can be linked... no
checking for idn2.h... no
checking for pkg-config... (cached) /usr/bin/pkg-config
checking for libnghttp2 options with pkg-config... no
checking for nghttp2_session_get_stream_local_window_size in -lnghttp2... no
checking for pkg-config... (cached) /usr/bin/pkg-config
checking for libnghttp3 options with pkg-config... no
checking for pkg-config... (cached) /usr/bin/pkg-config
checking for fish options with pkg-config... no
checking for sys/types.h... (cached) yes
checking for sys/time.h... (cached) yes
checking for sys/select.h... yes
checking for sys/socket.h... yes
checking for sys/ioctl.h... yes
checking for unistd.h... (cached) yes
checking for stdlib.h... (cached) yes
checking for arpa/inet.h... yes
checking for net/if.h... yes
checking for netinet/in.h... yes
checking for netinet/in6.h... no
checking for sys/un.h... yes
checking for linux/tcp.h... yes
checking for netinet/tcp.h... yes
checking for netinet/udp.h... yes
checking for netdb.h... yes
checking for sys/sockio.h... no
checking for sys/stat.h... (cached) yes
checking for sys/param.h... yes
checking for termios.h... yes
checking for termio.h... yes
checking for fcntl.h... yes
checking for io.h... no
checking for pwd.h... yes
checking for utime.h... yes
checking for sys/utime.h... no
checking for sys/poll.h... yes
checking for poll.h... yes
checking for socket.h... no
checking for sys/resource.h... yes
checking for libgen.h... yes
checking for locale.h... yes
checking for stdbool.h... yes
checking for sys/filio.h... no
checking for sys/wait.h... yes
checking for setjmp.h... yes
checking for an ANSI C-conforming const... yes
checking for size_t... yes
checking for sys/types.h... (cached) yes
checking for sys/time.h... (cached) yes
checking for sys/socket.h... (cached) yes
checking for struct timeval... yes
checking run-time libs availability... fine
checking size of size_t... 8
checking size of long... 8
checking size of int... 4
checking size of time_t... 8
checking size of off_t... 8
checking size of curl_off_t... 8
checking size of curl_socket_t... 4
checking for long long... yes
checking for ssize_t... yes
checking for bool... yes
checking for sa_family_t... yes
checking for suseconds_t... yes
checking if time_t is unsigned... no
checking for in_addr_t... yes
checking for struct sockaddr_storage... yes
checking for sys/select.h... (cached) yes
checking for sys/socket.h... (cached) yes
checking for select... yes
checking for sys/types.h... (cached) yes
checking for sys/socket.h... (cached) yes
checking for recv... yes
checking for sys/types.h... (cached) yes
checking for sys/socket.h... (cached) yes
checking for send... yes
checking for sys/types.h... (cached) yes
checking for sys/socket.h... (cached) yes
checking for MSG_NOSIGNAL... yes
checking for sys/types.h... (cached) yes
checking for unistd.h... (cached) yes
checking if alarm can be linked... yes
checking if alarm is prototyped... yes
checking if alarm is compilable... yes
checking if alarm usage allowed... yes
checking if alarm might be used... yes
checking for sys/types.h... (cached) yes
checking for strings.h... (cached) yes
checking for sys/types.h... (cached) yes
checking for libgen.h... (cached) yes
checking if basename can be linked... yes
checking if basename is prototyped... yes
checking if basename is compilable... yes
checking if basename usage allowed... yes
checking if basename might be used... yes
checking for sys/types.h... (cached) yes
checking for socket.h... (cached) no
checking if closesocket can be linked... no
checking if closesocket might be used... no
checking for sys/types.h... (cached) yes
checking for sys/socket.h... (cached) yes
checking if CloseSocket can be linked... no
checking if CloseSocket might be used... no
checking for sys/types.h... (cached) yes
checking for unistd.h... (cached) yes
checking for fcntl.h... (cached) yes
checking if fcntl can be linked... yes
checking if fcntl is prototyped... yes
checking if fcntl is compilable... yes
checking if fcntl usage allowed... yes
checking if fcntl might be used... yes
checking if fcntl O_NONBLOCK is compilable... yes
checking if fcntl O_NONBLOCK usage allowed... yes
checking if fcntl O_NONBLOCK might be used... yes
checking whether build target is a native Windows one... (cached) no
checking for sys/types.h... (cached) yes
checking for netdb.h... (cached) yes
checking if freeaddrinfo can be linked... yes
checking if freeaddrinfo is prototyped... yes
checking if freeaddrinfo is compilable... yes
checking if freeaddrinfo usage allowed... yes
checking if freeaddrinfo might be used... yes
checking for sys/types.h... (cached) yes
checking for sys/xattr.h... yes
checking if fsetxattr can be linked... yes
checking if fsetxattr is prototyped... yes
checking if fsetxattr takes 5 args.... yes
checking if fsetxattr is compilable... yes
checking if fsetxattr usage allowed... yes
checking if fsetxattr might be used... yes
checking if ftruncate can be linked... yes
checking if ftruncate is prototyped... yes
checking if ftruncate is compilable... yes
checking if ftruncate usage allowed... yes
checking if ftruncate might be used... yes
checking for sys/types.h... (cached) yes
checking if getaddrinfo can be linked... yes
checking if getaddrinfo is prototyped... yes
checking if getaddrinfo is compilable... yes
checking if getaddrinfo seems to work... yes
checking if getaddrinfo usage allowed... yes
checking if getaddrinfo might be used... yes
checking if getaddrinfo is threadsafe... yes
checking if gethostbyname can be linked... yes
checking if gethostbyname is prototyped... yes
checking if gethostbyname is compilable... yes
checking if gethostbyname usage allowed... yes
checking if gethostbyname might be used... yes
checking if gethostbyname_r can be linked... yes
checking if gethostbyname_r is prototyped... yes
checking if gethostbyname_r takes 3 args.... no
checking if gethostbyname_r takes 5 args.... no
checking if gethostbyname_r takes 6 args.... yes
checking if gethostbyname_r is compilable... yes
checking if gethostbyname_r usage allowed... yes
checking if gethostbyname_r might be used... yes
checking if gethostname can be linked... yes
checking if gethostname is prototyped... yes
checking if gethostname is compilable... yes
checking for gethostname arg 2 data type... size_t
checking if gethostname usage allowed... yes
checking if gethostname might be used... yes
checking if getpeername can be linked... yes
checking if getpeername is prototyped... yes
checking if getpeername is compilable... yes
checking if getpeername usage allowed... yes
checking if getpeername might be used... yes
checking if getsockname can be linked... yes
checking if getsockname is prototyped... yes
checking if getsockname is compilable... yes
checking if getsockname usage allowed... yes
checking if getsockname might be used... yes
checking for net/if.h... (cached) yes
checking if if_nametoindex can be linked... yes
checking if if_nametoindex is prototyped... yes
checking if if_nametoindex is compilable... yes
checking if if_nametoindex usage allowed... yes
checking if if_nametoindex might be used... yes
checking for sys/types.h... (cached) yes
checking for sys/socket.h... (cached) yes
checking for netinet/in.h... (cached) yes
checking for ifaddrs.h... yes
checking if getifaddrs can be linked... yes
checking if getifaddrs is prototyped... yes
checking if getifaddrs is compilable... yes
checking if getifaddrs seems to work... yes
checking if getifaddrs usage allowed... yes
checking if getifaddrs might be used... yes
checking for sys/types.h... (cached) yes
checking for sys/time.h... (cached) yes
checking if gmtime_r can be linked... yes
checking if gmtime_r is prototyped... yes
checking if gmtime_r is compilable... yes
checking if gmtime_r seems to work... yes
checking if gmtime_r usage allowed... yes
checking if gmtime_r might be used... yes
checking for sys/types.h... (cached) yes
checking for sys/socket.h... (cached) yes
checking for netinet/in.h... (cached) yes
checking for arpa/inet.h... (cached) yes
checking if inet_ntop can be linked... yes
checking if inet_ntop is prototyped... yes
checking if inet_ntop is compilable... yes
checking if inet_ntop seems to work... yes
checking if inet_ntop usage allowed... yes
checking if inet_ntop might be used... yes
checking if inet_pton can be linked... yes
checking if inet_pton is prototyped... yes
checking if inet_pton is compilable... yes
checking if inet_pton seems to work... yes
checking if inet_pton usage allowed... yes
checking if inet_pton might be used... yes
checking for sys/types.h... (cached) yes
checking for unistd.h... (cached) yes
checking for sys/socket.h... (cached) yes
checking for sys/ioctl.h... (cached) yes
checking for stropts.h... no
checking if ioctl can be linked... yes
checking if ioctl is prototyped... yes
checking if ioctl is compilable... yes
checking if ioctl usage allowed... yes
checking if ioctl might be used... yes
checking if ioctl FIONBIO is compilable... yes
checking if ioctl FIONBIO usage allowed... yes
checking if ioctl FIONBIO might be used... yes
checking if ioctl SIOCGIFADDR is compilable... yes
checking if ioctl SIOCGIFADDR usage allowed... yes
checking if ioctl SIOCGIFADDR might be used... yes
checking if ioctlsocket can be linked... no
checking if ioctlsocket might be used... no
checking if IoctlSocket can be linked... no
checking if IoctlSocket might be used... no
checking if memrchr can be linked... yes
checking if memrchr is prototyped... no
checking if memrchr might be used... no
checking for sys/types.h... (cached) yes
checking for poll.h... (cached) yes
checking for sys/poll.h... (cached) yes
checking if poll can be linked... yes
checking if poll is prototyped... yes
checking if poll is compilable... yes
checking if poll seems to work... yes
checking if poll usage allowed... yes
checking if poll might be used... yes
checking for sys/types.h... (cached) yes
checking if sigaction can be linked... yes
checking if sigaction is prototyped... yes
checking if sigaction is compilable... yes
checking if sigaction usage allowed... yes
checking if sigaction might be used... yes
checking if siginterrupt can be linked... yes
checking if siginterrupt is prototyped... yes
checking if siginterrupt is compilable... yes
checking if siginterrupt usage allowed... yes
checking if siginterrupt might be used... yes
checking if signal can be linked... yes
checking if signal is prototyped... yes
checking if signal is compilable... yes
checking if signal usage allowed... yes
checking if signal might be used... yes
checking for sys/types.h... (cached) yes
checking if sigsetjmp can be linked... no
checking if sigsetjmp seems a macro... yes
checking if sigsetjmp is compilable... yes
checking if sigsetjmp usage allowed... yes
checking if sigsetjmp might be used... yes
checking if socket can be linked... yes
checking if socket is prototyped... yes
checking if socket is compilable... yes
checking if socket usage allowed... yes
checking if socket might be used... yes
checking if socketpair can be linked... yes
checking if socketpair is prototyped... yes
checking if socketpair is compilable... yes
checking if socketpair usage allowed... yes
checking if socketpair might be used... yes
checking if strcasecmp can be linked... yes
checking if strcasecmp is prototyped... yes
checking if strcasecmp is compilable... yes
checking if strcasecmp usage allowed... yes
checking if strcasecmp might be used... yes
checking if strcmpi can be linked... no
checking if strcmpi might be used... no
checking if strdup can be linked... yes
checking if strdup is prototyped... yes
checking if strdup is compilable... yes
checking if strdup usage allowed... yes
checking if strdup might be used... yes
checking if strerror_r can be linked... yes
checking if strerror_r is prototyped... yes
checking if strerror_r is compilable... yes
checking if strerror_r is glibc like... no
checking if strerror_r is POSIX like... yes
checking if strerror_r seems to work... yes
checking if strerror_r usage allowed... yes
checking if strerror_r might be used... yes
checking if stricmp can be linked... no
checking if stricmp might be used... no
checking if strtok_r can be linked... yes
checking if strtok_r is prototyped... yes
checking if strtok_r is compilable... yes
checking if strtok_r usage allowed... yes
checking if strtok_r might be used... yes
checking if strtoll can be linked... yes
checking if strtoll is prototyped... yes
checking if strtoll is compilable... yes
checking if strtoll usage allowed... yes
checking if strtoll might be used... yes
checking for ccache gcc options needed to detect all undeclared functions... none needed
checking whether getpwuid_r is declared... yes
checking for _fseeki64... no
checking deeper for _fseeki64... but still no
checking for arc4random... no
checking deeper for arc4random... but still no
checking for fnmatch... yes
checking for fseeko... yes
checking for geteuid... yes
checking for getpass_r... no
checking deeper for getpass_r... but still no
checking for getppid... yes
checking for getpwuid... yes
checking for getpwuid_r... yes
checking for getrlimit... yes
checking for gettimeofday... yes
checking for if_nametoindex... yes
checking for mach_absolute_time... no
checking deeper for mach_absolute_time... but still no
checking for pipe... yes
checking for sched_yield... yes
checking for sendmsg... yes
checking for setlocale... yes
checking for setmode... no
checking deeper for setmode... but still no
checking for setrlimit... yes
checking for snprintf... yes
checking for utime... yes
checking for utimes... yes
checking whether fseeko is declared... yes
checking how to set a socket into non-blocking mode... fcntl O_NONBLOCK
checking for perl... /usr/bin/perl
checking for gnroff... no
checking for nroff... /usr/bin/nroff
checking how to use *nroff to get plain text from man pages... -man
checking whether to enable the threaded resolver... yes
checking whether to use POSIX threads for threaded resolver... auto
checking for pthread.h... yes
checking for pthread_create... yes
checking convert -I options to -isystem... yes
checking whether to enable verbose strings... yes
checking whether to enable SSPI support (Windows native builds only)... no
checking whether to enable basic authentication method... yes
checking whether to enable bearer authentication method... yes
checking whether to enable digest authentication method... yes
checking whether to enable kerberos authentication method... yes
checking whether to enable negotiate authentication method... yes
checking whether to enable aws sig methods... yes
checking whether to support NTLM... yes
checking whether to enable NTLM delegation to winbind's helper... no
checking whether to enable TLS-SRP authentication... yes
checking whether to enable Unix domain sockets... auto
checking for struct sockaddr_un.sun_path... yes
checking whether to support cookies... yes
checking whether to support socketpair... yes
checking whether to support HTTP authentication... yes
checking whether to support DoH... yes
checking whether to support the MIME API... yes
checking whether to support binding connections locally... yes
checking whether to support the form API... yes
checking whether to support date parsing... yes
checking whether to support netrc parsing... yes
checking whether to support progress-meter... yes
checking whether to support DNS shuffling... yes
checking whether to support curl_easy_option*... yes
checking whether to support alt-svc... yes
checking whether to support headers-api... yes
configure: disables HSTS due to lack of SSL
checking whether to support WebSockets... no
checking whether hiding of library internal symbols will actually happen... yes
checking if this build supports HTTPS-proxy... no
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating docs/Makefile
config.status: creating docs/examples/Makefile
config.status: creating docs/libcurl/Makefile
config.status: creating docs/libcurl/opts/Makefile
config.status: creating docs/cmdline-opts/Makefile
config.status: creating include/Makefile
config.status: creating include/curl/Makefile
config.status: creating src/Makefile
config.status: creating lib/Makefile
config.status: creating scripts/Makefile
config.status: creating lib/libcurl.vers
config.status: creating lib/libcurl.plist
config.status: creating tests/Makefile
config.status: creating tests/config
config.status: creating tests/certs/Makefile
config.status: creating tests/certs/scripts/Makefile
config.status: creating tests/data/Makefile
config.status: creating tests/server/Makefile
config.status: creating tests/libtest/Makefile
config.status: creating tests/unit/Makefile
config.status: creating tests/http/config.ini
config.status: creating tests/http/Makefile
config.status: creating tests/http/clients/Makefile
config.status: creating packages/Makefile
config.status: creating packages/vms/Makefile
config.status: creating curl-config
config.status: creating libcurl.pc
config.status: creating lib/curl_config.h
config.status: executing depfiles commands
config.status: executing libtool commands
configure: Configured to build curl/libcurl:
Host setup: x86_64-pc-linux-gnu
Install prefix: /usr/local
Compiler: ccache gcc
CFLAGS: -Werror-implicit-function-declaration -O2 -Wno-system-headers
CPPFLAGS:
LDFLAGS:
LIBS: -lpsl -lz
curl version: 8.6.0-DEV
SSL: no (--with-{openssl,gnutls,mbedtls,wolfssl,schannel,secure-transport,amissl,bearssl,rustls} )
SSH: no (--with-{libssh,libssh2})
zlib: enabled
brotli: no (--with-brotli)
zstd: no (--with-zstd)
GSS-API: no (--with-gssapi)
GSASL: no (libgsasl not found)
TLS-SRP: no (--enable-tls-srp)
resolver: POSIX threaded
IPv6: enabled
Unix sockets: enabled
IDN: no (--with-{libidn2,winidn})
Build libcurl: Shared=no, Static=yes
Built-in manual: enabled
--libcurl option: enabled (--disable-libcurl-option)
Verbose errors: enabled (--disable-verbose)
Code coverage: disabled
SSPI: no (--enable-sspi)
ca cert bundle: no
ca cert path:
ca fallback:
LDAP: no (--enable-ldap / --with-ldap-lib / --with-lber-lib)
LDAPS: no (--enable-ldaps)
RTSP: enabled
RTMP: no (--with-librtmp)
PSL: enabled
Alt-svc: enabled (--disable-alt-svc)
Headers API: enabled (--disable-headers-api)
HSTS: no (--enable-hsts)
HTTP1: enabled (internal)
HTTP2: no (--with-nghttp2)
HTTP3: no (--with-ngtcp2 --with-nghttp3, --with-quiche, --with-openssl-quic, --with-msh3)
ECH: no (--enable-ech)
WebSockets: no (--enable-websockets)
Protocols: DICT FILE FTP GOPHER HTTP IMAP IPFS IPNS MQTT POP3 RTSP SMTP TELNET TFTP
Features: AsynchDNS IPv6 Largefile PSL UnixSockets alt-svc libz threadsafe
configure: WARNING: unrecognized options: --disable-docs
configure: WARNING: Cannot find libraries for LDAP support: LDAP disabled
configure: WARNING: libgsasl was not found
configure: WARNING: Cannot find libraries for IDN support: IDN disabled
configure: WARNING: unrecognized options: --disable-docs
$ make -j3
Making all in lib
make[1]: Entering directory '/root/asi_db/builds/curl/_worktrees/w0/lib'
make all-am
make[2]: Entering directory '/root/asi_db/builds/curl/_worktrees/w0/lib'
CC libcurl_la-altsvc.lo
CC libcurl_la-amigaos.lo
CC libcurl_la-asyn-ares.lo
CC libcurl_la-asyn-thread.lo
CC libcurl_la-base64.lo
CC libcurl_la-bufq.lo
CC libcurl_la-bufref.lo
CC libcurl_la-cf-h1-proxy.lo
CC libcurl_la-c-hyper.lo
CC libcurl_la-cf-h2-proxy.lo
CC libcurl_la-cf-haproxy.lo
CC libcurl_la-cf-https-connect.lo
CC libcurl_la-cf-socket.lo
CC libcurl_la-cfilters.lo
CC libcurl_la-conncache.lo
CC libcurl_la-connect.lo
CC libcurl_la-content_encoding.lo
CC libcurl_la-cookie.lo
CC libcurl_la-curl_addrinfo.lo
CC libcurl_la-curl_des.lo
CC libcurl_la-curl_endian.lo
CC libcurl_la-curl_fnmatch.lo
CC libcurl_la-curl_get_line.lo
CC libcurl_la-curl_gethostname.lo
CC libcurl_la-curl_gssapi.lo
CC libcurl_la-curl_memrchr.lo
CC libcurl_la-curl_multibyte.lo
CC libcurl_la-curl_ntlm_core.lo
CC libcurl_la-curl_ntlm_wb.lo
CC libcurl_la-curl_path.lo
CC libcurl_la-curl_range.lo
CC libcurl_la-curl_rtmp.lo
CC libcurl_la-curl_sasl.lo
CC libcurl_la-curl_sspi.lo
CC libcurl_la-curl_threads.lo
CC libcurl_la-curl_trc.lo
CC libcurl_la-doh.lo
CC libcurl_la-dict.lo
CC libcurl_la-dynbuf.lo
CC libcurl_la-dynhds.lo
CC libcurl_la-easy.lo
CC libcurl_la-easygetopt.lo
CC libcurl_la-easyoptions.lo
CC libcurl_la-escape.lo
CC libcurl_la-file.lo
CC libcurl_la-fileinfo.lo
CC libcurl_la-fopen.lo
CC libcurl_la-formdata.lo
CC libcurl_la-ftp.lo
CC libcurl_la-ftplistparser.lo
CC libcurl_la-getenv.lo
CC libcurl_la-getinfo.lo
CC libcurl_la-gopher.lo
CC libcurl_la-hash.lo
CC libcurl_la-headers.lo
CC libcurl_la-hmac.lo
CC libcurl_la-hostasyn.lo
CC libcurl_la-hostip.lo
CC libcurl_la-hostip4.lo
CC libcurl_la-hostip6.lo
CC libcurl_la-hostsyn.lo
CC libcurl_la-hsts.lo
CC libcurl_la-http.lo
CC libcurl_la-http1.lo
CC libcurl_la-http2.lo
CC libcurl_la-http_aws_sigv4.lo
CC libcurl_la-http_chunks.lo
CC libcurl_la-http_digest.lo
CC libcurl_la-http_negotiate.lo
CC libcurl_la-http_ntlm.lo
CC libcurl_la-http_proxy.lo
CC libcurl_la-idn.lo
CC libcurl_la-if2ip.lo
CC libcurl_la-imap.lo
CC libcurl_la-inet_ntop.lo
CC libcurl_la-inet_pton.lo
CC libcurl_la-krb5.lo
CC libcurl_la-ldap.lo
CC libcurl_la-llist.lo
CC libcurl_la-macos.lo
CC libcurl_la-md4.lo
CC libcurl_la-md5.lo
CC libcurl_la-memdebug.lo
CC libcurl_la-mime.lo
CC libcurl_la-mprintf.lo
CC libcurl_la-mqtt.lo
CC libcurl_la-multi.lo
CC libcurl_la-netrc.lo
CC libcurl_la-nonblock.lo
CC libcurl_la-noproxy.lo
CC libcurl_la-openldap.lo
CC libcurl_la-parsedate.lo
CC libcurl_la-pingpong.lo
CC libcurl_la-pop3.lo
CC libcurl_la-progress.lo
CC libcurl_la-psl.lo
CC libcurl_la-rand.lo
CC libcurl_la-rename.lo
CC libcurl_la-rtsp.lo
CC libcurl_la-select.lo
CC libcurl_la-sendf.lo
CC libcurl_la-setopt.lo
CC libcurl_la-sha256.lo
CC libcurl_la-share.lo
CC libcurl_la-slist.lo
CC libcurl_la-smb.lo
CC libcurl_la-smtp.lo
CC libcurl_la-socketpair.lo
CC libcurl_la-socks.lo
CC libcurl_la-socks_gssapi.lo
CC libcurl_la-socks_sspi.lo
CC libcurl_la-speedcheck.lo
CC libcurl_la-splay.lo
CC libcurl_la-strcase.lo
CC libcurl_la-strdup.lo
CC libcurl_la-strerror.lo
CC libcurl_la-strtok.lo
CC libcurl_la-strtoofft.lo
CC libcurl_la-system_win32.lo
CC libcurl_la-telnet.lo
CC libcurl_la-tftp.lo
CC libcurl_la-timediff.lo
CC libcurl_la-timeval.lo
CC libcurl_la-transfer.lo
CC libcurl_la-url.lo
CC libcurl_la-urlapi.lo
CC libcurl_la-version.lo
CC libcurl_la-version_win32.lo
CC libcurl_la-warnless.lo
CC libcurl_la-ws.lo
CC vauth/libcurl_la-cleartext.lo
CC vauth/libcurl_la-cram.lo
CC vauth/libcurl_la-digest.lo
CC vauth/libcurl_la-digest_sspi.lo
CC vauth/libcurl_la-gsasl.lo
CC vauth/libcurl_la-krb5_gssapi.lo
CC vauth/libcurl_la-krb5_sspi.lo
CC vauth/libcurl_la-ntlm.lo
CC vauth/libcurl_la-ntlm_sspi.lo
CC vauth/libcurl_la-oauth2.lo
CC vauth/libcurl_la-spnego_gssapi.lo
CC vauth/libcurl_la-spnego_sspi.lo
CC vauth/libcurl_la-vauth.lo
CC vtls/libcurl_la-bearssl.lo
CC vtls/libcurl_la-gtls.lo
CC vtls/libcurl_la-hostcheck.lo
CC vtls/libcurl_la-keylog.lo
CC vtls/libcurl_la-mbedtls.lo
CC vtls/libcurl_la-mbedtls_threadlock.lo
CC vtls/libcurl_la-openssl.lo
CC vtls/libcurl_la-rustls.lo
CC vtls/libcurl_la-schannel.lo
CC vtls/libcurl_la-schannel_verify.lo
CC vtls/libcurl_la-sectransp.lo
CC vtls/libcurl_la-vtls.lo
CC vtls/libcurl_la-wolfssl.lo
CC vtls/libcurl_la-x509asn1.lo
CC vquic/libcurl_la-curl_msh3.lo
CC vquic/libcurl_la-curl_ngtcp2.lo
CC vquic/libcurl_la-curl_osslq.lo
CC vquic/libcurl_la-curl_quiche.lo
CC vquic/libcurl_la-vquic.lo
CC vquic/libcurl_la-vquic-tls.lo
CC vssh/libcurl_la-libssh.lo
CC vssh/libcurl_la-libssh2.lo
CC vssh/libcurl_la-wolfssh.lo
CCLD libcurl.la
make[2]: Leaving directory '/root/asi_db/builds/curl/_worktrees/w0/lib'
make[1]: Leaving directory '/root/asi_db/builds/curl/_worktrees/w0/lib'
Making all in src
make[1]: Entering directory '/root/asi_db/builds/curl/_worktrees/w0/src'
Making all in ../docs
make[2]: Entering directory '/root/asi_db/builds/curl/_worktrees/w0/docs'
Making all in .
make[3]: Entering directory '/root/asi_db/builds/curl/_worktrees/w0/docs'
if test "..x" != "..x" -a -e "./curl.1"; then \
/usr/bin/install -c -m 644 "./curl.1" /root/asi_db/builds/curl/_worktrees/w0/docs/curl.1 \
&& touch -r "./curl.1" /root/asi_db/builds/curl/_worktrees/w0/docs/curl.1; fi
RENDER curl-config.1
cd cmdline-opts && make
RENDER mk-ca-bundle.1
make[4]: Entering directory '/root/asi_db/builds/curl/_worktrees/w0/docs/cmdline-opts'
GENERATE ../../docs/curl.1
make[4]: Leaving directory '/root/asi_db/builds/curl/_worktrees/w0/docs/cmdline-opts'
make[3]: Leaving directory '/root/asi_db/builds/curl/_worktrees/w0/docs'
Making all in cmdline-opts
make[3]: Entering directory '/root/asi_db/builds/curl/_worktrees/w0/docs/cmdline-opts'
make[3]: Nothing to be done for 'all'.
make[3]: Leaving directory '/root/asi_db/builds/curl/_worktrees/w0/docs/cmdline-opts'
Making all in libcurl
make[3]: Entering directory '/root/asi_db/builds/curl/_worktrees/w0/docs/libcurl'
Making all in opts
make[4]: Entering directory '/root/asi_db/builds/curl/_worktrees/w0/docs/libcurl/opts'
RENDER CURLINFO_APPCONNECT_TIME.3
RENDER CURLINFO_APPCONNECT_TIME_T.3
RENDER CURLINFO_ACTIVESOCKET.3
RENDER CURLINFO_CAINFO.3
RENDER CURLINFO_CAPATH.3
RENDER CURLINFO_CERTINFO.3
RENDER CURLINFO_CONDITION_UNMET.3
RENDER CURLINFO_CONNECT_TIME.3
RENDER CURLINFO_CONNECT_TIME_T.3
RENDER CURLINFO_CONN_ID.3
RENDER CURLINFO_CONTENT_LENGTH_DOWNLOAD.3
RENDER CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3
RENDER CURLINFO_CONTENT_LENGTH_UPLOAD.3
RENDER CURLINFO_CONTENT_TYPE.3
RENDER CURLINFO_CONTENT_LENGTH_UPLOAD_T.3
RENDER CURLINFO_COOKIELIST.3
RENDER CURLINFO_EFFECTIVE_METHOD.3
RENDER CURLINFO_EFFECTIVE_URL.3
RENDER CURLINFO_FILETIME.3
RENDER CURLINFO_FILETIME_T.3
RENDER CURLINFO_FTP_ENTRY_PATH.3
RENDER CURLINFO_HEADER_SIZE.3
RENDER CURLINFO_HTTP_CONNECTCODE.3
RENDER CURLINFO_HTTP_VERSION.3
RENDER CURLINFO_HTTPAUTH_AVAIL.3
RENDER CURLINFO_LASTSOCKET.3
RENDER CURLINFO_LOCAL_IP.3
RENDER CURLINFO_LOCAL_PORT.3
RENDER CURLINFO_NAMELOOKUP_TIME.3
RENDER CURLINFO_NAMELOOKUP_TIME_T.3
RENDER CURLINFO_NUM_CONNECTS.3
RENDER CURLINFO_OS_ERRNO.3
RENDER CURLINFO_PRETRANSFER_TIME.3
RENDER CURLINFO_PRETRANSFER_TIME_T.3
RENDER CURLINFO_PRIMARY_IP.3
RENDER CURLINFO_PRIMARY_PORT.3
RENDER CURLINFO_PRIVATE.3
RENDER CURLINFO_PROTOCOL.3
RENDER CURLINFO_PROXY_ERROR.3
RENDER CURLINFO_PROXY_SSL_VERIFYRESULT.3
RENDER CURLINFO_PROXYAUTH_AVAIL.3
RENDER CURLINFO_QUEUE_TIME_T.3
RENDER CURLINFO_REDIRECT_COUNT.3
RENDER CURLINFO_REDIRECT_TIME.3
RENDER CURLINFO_REDIRECT_TIME_T.3
RENDER CURLINFO_REDIRECT_URL.3
RENDER CURLINFO_REFERER.3
RENDER CURLINFO_REQUEST_SIZE.3
RENDER CURLINFO_RESPONSE_CODE.3
RENDER CURLINFO_RETRY_AFTER.3
RENDER CURLINFO_RTSP_CLIENT_CSEQ.3
RENDER CURLINFO_RTSP_CSEQ_RECV.3
RENDER CURLINFO_SCHEME.3
RENDER CURLINFO_RTSP_SESSION_ID.3
RENDER CURLINFO_RTSP_SERVER_CSEQ.3
RENDER CURLINFO_SIZE_DOWNLOAD.3
RENDER CURLINFO_SIZE_DOWNLOAD_T.3
RENDER CURLINFO_SIZE_UPLOAD.3
RENDER CURLINFO_SIZE_UPLOAD_T.3
RENDER CURLINFO_SPEED_DOWNLOAD.3
RENDER CURLINFO_SPEED_DOWNLOAD_T.3
RENDER CURLINFO_SPEED_UPLOAD.3
RENDER CURLINFO_SPEED_UPLOAD_T.3
RENDER CURLINFO_SSL_ENGINES.3
RENDER CURLINFO_SSL_VERIFYRESULT.3
RENDER CURLINFO_STARTTRANSFER_TIME.3
RENDER CURLINFO_STARTTRANSFER_TIME_T.3
RENDER CURLINFO_TLS_SESSION.3
RENDER CURLINFO_TLS_SSL_PTR.3
RENDER CURLINFO_TOTAL_TIME.3
RENDER CURLINFO_TOTAL_TIME_T.3
RENDER CURLINFO_XFER_ID.3
RENDER CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3
RENDER CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3
RENDER CURLMOPT_MAX_CONCURRENT_STREAMS.3
RENDER CURLMOPT_MAX_HOST_CONNECTIONS.3
RENDER CURLMOPT_MAX_PIPELINE_LENGTH.3
RENDER CURLMOPT_MAX_TOTAL_CONNECTIONS.3
RENDER CURLMOPT_MAXCONNECTS.3
RENDER CURLMOPT_PIPELINING.3
RENDER CURLMOPT_PIPELINING_SERVER_BL.3
RENDER CURLMOPT_PIPELINING_SITE_BL.3
RENDER CURLMOPT_PUSHDATA.3
RENDER CURLMOPT_PUSHFUNCTION.3
RENDER CURLMOPT_SOCKETDATA.3
RENDER CURLMOPT_SOCKETFUNCTION.3
RENDER CURLMOPT_TIMERDATA.3
RENDER CURLMOPT_TIMERFUNCTION.3
RENDER CURLOPT_ABSTRACT_UNIX_SOCKET.3
RENDER CURLOPT_ACCEPT_ENCODING.3
RENDER CURLOPT_ACCEPTTIMEOUT_MS.3
RENDER CURLOPT_ADDRESS_SCOPE.3
RENDER CURLOPT_ALTSVC.3
RENDER CURLOPT_ALTSVC_CTRL.3
RENDER CURLOPT_APPEND.3
RENDER CURLOPT_AUTOREFERER.3
RENDER CURLOPT_AWS_SIGV4.3
RENDER CURLOPT_BUFFERSIZE.3
RENDER CURLOPT_CAINFO.3
RENDER CURLOPT_CAINFO_BLOB.3
RENDER CURLOPT_CAPATH.3
RENDER CURLOPT_CERTINFO.3
RENDER CURLOPT_CA_CACHE_TIMEOUT.3
RENDER CURLOPT_CHUNK_BGN_FUNCTION.3
RENDER CURLOPT_CHUNK_DATA.3
RENDER CURLOPT_CHUNK_END_FUNCTION.3
RENDER CURLOPT_CLOSESOCKETDATA.3
RENDER CURLOPT_CLOSESOCKETFUNCTION.3
RENDER CURLOPT_CONNECT_ONLY.3
RENDER CURLOPT_CONNECT_TO.3
RENDER CURLOPT_CONV_FROM_NETWORK_FUNCTION.3
RENDER CURLOPT_CONNECTTIMEOUT_MS.3
RENDER CURLOPT_CONNECTTIMEOUT.3
RENDER CURLOPT_CONV_FROM_UTF8_FUNCTION.3
RENDER CURLOPT_CONV_TO_NETWORK_FUNCTION.3
RENDER CURLOPT_COOKIE.3
RENDER CURLOPT_COOKIEFILE.3
RENDER CURLOPT_COOKIELIST.3
RENDER CURLOPT_COOKIEJAR.3
RENDER CURLOPT_COOKIESESSION.3
RENDER CURLOPT_COPYPOSTFIELDS.3
RENDER CURLOPT_CRLF.3
RENDER CURLOPT_CRLFILE.3
RENDER CURLOPT_CURLU.3
RENDER CURLOPT_CUSTOMREQUEST.3
RENDER CURLOPT_DEBUGDATA.3
RENDER CURLOPT_DEBUGFUNCTION.3
RENDER CURLOPT_DEFAULT_PROTOCOL.3
RENDER CURLOPT_DIRLISTONLY.3
RENDER CURLOPT_DISALLOW_USERNAME_IN_URL.3
RENDER CURLOPT_DNS_CACHE_TIMEOUT.3
RENDER CURLOPT_DNS_INTERFACE.3
RENDER CURLOPT_DNS_LOCAL_IP4.3
RENDER CURLOPT_DNS_LOCAL_IP6.3
RENDER CURLOPT_DNS_SERVERS.3
RENDER CURLOPT_DNS_SHUFFLE_ADDRESSES.3
RENDER CURLOPT_DNS_USE_GLOBAL_CACHE.3
RENDER CURLOPT_DOH_SSL_VERIFYHOST.3
RENDER CURLOPT_DOH_SSL_VERIFYPEER.3
RENDER CURLOPT_DOH_URL.3
RENDER CURLOPT_DOH_SSL_VERIFYSTATUS.3
RENDER CURLOPT_EGDSOCKET.3
RENDER CURLOPT_ERRORBUFFER.3
RENDER CURLOPT_EXPECT_100_TIMEOUT_MS.3
RENDER CURLOPT_FAILONERROR.3
RENDER CURLOPT_FILETIME.3
RENDER CURLOPT_FNMATCH_DATA.3
RENDER CURLOPT_FNMATCH_FUNCTION.3
RENDER CURLOPT_FOLLOWLOCATION.3
RENDER CURLOPT_FORBID_REUSE.3
RENDER CURLOPT_FRESH_CONNECT.3
RENDER CURLOPT_FTP_ACCOUNT.3
RENDER CURLOPT_FTP_ALTERNATIVE_TO_USER.3
RENDER CURLOPT_FTP_CREATE_MISSING_DIRS.3
RENDER CURLOPT_FTP_FILEMETHOD.3
RENDER CURLOPT_FTP_SKIP_PASV_IP.3
RENDER CURLOPT_FTP_SSL_CCC.3
RENDER CURLOPT_FTP_USE_EPRT.3
RENDER CURLOPT_FTP_USE_PRET.3
RENDER CURLOPT_FTP_USE_EPSV.3
RENDER CURLOPT_FTPSSLAUTH.3
RENDER CURLOPT_FTPPORT.3
RENDER CURLOPT_GSSAPI_DELEGATION.3
RENDER CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3
RENDER CURLOPT_HAPROXYPROTOCOL.3
RENDER CURLOPT_HAPROXY_CLIENT_IP.3
RENDER CURLOPT_HEADER.3
RENDER CURLOPT_HEADERDATA.3
RENDER CURLOPT_HEADERFUNCTION.3
RENDER CURLOPT_HEADEROPT.3
RENDER CURLOPT_HSTS.3
RENDER CURLOPT_HSTS_CTRL.3
RENDER CURLOPT_HSTSREADDATA.3
RENDER CURLOPT_HSTSREADFUNCTION.3
RENDER CURLOPT_HSTSWRITEDATA.3
RENDER CURLOPT_HSTSWRITEFUNCTION.3
RENDER CURLOPT_HTTP09_ALLOWED.3
RENDER CURLOPT_HTTP200ALIASES.3
RENDER CURLOPT_HTTP_CONTENT_DECODING.3
RENDER CURLOPT_HTTP_TRANSFER_DECODING.3
RENDER CURLOPT_HTTP_VERSION.3
RENDER CURLOPT_HTTPGET.3
RENDER CURLOPT_HTTPAUTH.3
RENDER CURLOPT_HTTPHEADER.3
RENDER CURLOPT_HTTPPOST.3
RENDER CURLOPT_HTTPPROXYTUNNEL.3
RENDER CURLOPT_IGNORE_CONTENT_LENGTH.3
RENDER CURLOPT_INFILESIZE.3
RENDER CURLOPT_INFILESIZE_LARGE.3
RENDER CURLOPT_INTERFACE.3
RENDER CURLOPT_INTERLEAVEDATA.3
RENDER CURLOPT_INTERLEAVEFUNCTION.3
RENDER CURLOPT_IOCTLDATA.3
RENDER CURLOPT_IOCTLFUNCTION.3
RENDER CURLOPT_ISSUERCERT.3
RENDER CURLOPT_IPRESOLVE.3
RENDER CURLOPT_ISSUERCERT_BLOB.3
RENDER CURLOPT_KEYPASSWD.3
RENDER CURLOPT_KEEP_SENDING_ON_ERROR.3
RENDER CURLOPT_KRBLEVEL.3
RENDER CURLOPT_LOCALPORT.3
RENDER CURLOPT_LOCALPORTRANGE.3
RENDER CURLOPT_LOGIN_OPTIONS.3
RENDER CURLOPT_LOW_SPEED_LIMIT.3
RENDER CURLOPT_LOW_SPEED_TIME.3
RENDER CURLOPT_MAIL_AUTH.3
RENDER CURLOPT_MAIL_FROM.3
RENDER CURLOPT_MAIL_RCPT.3
RENDER CURLOPT_MAIL_RCPT_ALLOWFAILS.3
RENDER CURLOPT_MAX_RECV_SPEED_LARGE.3
RENDER CURLOPT_MAX_SEND_SPEED_LARGE.3
RENDER CURLOPT_MAXAGE_CONN.3
RENDER CURLOPT_MAXCONNECTS.3
RENDER CURLOPT_MAXFILESIZE.3
RENDER CURLOPT_MAXFILESIZE_LARGE.3
RENDER CURLOPT_MAXLIFETIME_CONN.3
RENDER CURLOPT_MAXREDIRS.3
RENDER CURLOPT_MIME_OPTIONS.3
RENDER CURLOPT_MIMEPOST.3
RENDER CURLOPT_NETRC.3
RENDER CURLOPT_NETRC_FILE.3
RENDER CURLOPT_NEW_FILE_PERMS.3
RENDER CURLOPT_NEW_DIRECTORY_PERMS.3
RENDER CURLOPT_NOBODY.3
RENDER CURLOPT_NOPROGRESS.3
RENDER CURLOPT_NOPROXY.3
RENDER CURLOPT_NOSIGNAL.3
RENDER CURLOPT_OPENSOCKETDATA.3
RENDER CURLOPT_OPENSOCKETFUNCTION.3
RENDER CURLOPT_PATH_AS_IS.3
RENDER CURLOPT_PASSWORD.3
RENDER CURLOPT_PINNEDPUBLICKEY.3
RENDER CURLOPT_PIPEWAIT.3
RENDER CURLOPT_PORT.3
RENDER CURLOPT_POST.3
RENDER CURLOPT_POSTFIELDS.3
RENDER CURLOPT_POSTFIELDSIZE.3
RENDER CURLOPT_POSTFIELDSIZE_LARGE.3
RENDER CURLOPT_POSTQUOTE.3
RENDER CURLOPT_POSTREDIR.3
RENDER CURLOPT_PRE_PROXY.3
RENDER CURLOPT_PREQUOTE.3
RENDER CURLOPT_PREREQDATA.3
RENDER CURLOPT_PREREQFUNCTION.3
RENDER CURLOPT_PRIVATE.3
RENDER CURLOPT_PROGRESSDATA.3
RENDER CURLOPT_PROGRESSFUNCTION.3
RENDER CURLOPT_PROTOCOLS.3
RENDER CURLOPT_PROTOCOLS_STR.3
RENDER CURLOPT_PROXY.3
RENDER CURLOPT_PROXY_CAINFO.3
RENDER CURLOPT_PROXY_CAINFO_BLOB.3
RENDER CURLOPT_PROXY_CAPATH.3
RENDER CURLOPT_PROXY_CRLFILE.3
RENDER CURLOPT_PROXY_ISSUERCERT.3
RENDER CURLOPT_PROXY_ISSUERCERT_BLOB.3
RENDER CURLOPT_PROXY_KEYPASSWD.3
RENDER CURLOPT_PROXY_PINNEDPUBLICKEY.3
RENDER CURLOPT_PROXY_SERVICE_NAME.3
RENDER CURLOPT_PROXY_SSL_CIPHER_LIST.3
RENDER CURLOPT_PROXY_SSL_OPTIONS.3
RENDER CURLOPT_PROXY_SSL_VERIFYHOST.3
RENDER CURLOPT_PROXY_SSL_VERIFYPEER.3
RENDER CURLOPT_PROXY_SSLCERT.3
RENDER CURLOPT_PROXY_SSLCERT_BLOB.3
RENDER CURLOPT_PROXY_SSLCERTTYPE.3
RENDER CURLOPT_PROXY_SSLKEY.3
RENDER CURLOPT_PROXY_SSLKEY_BLOB.3
RENDER CURLOPT_PROXY_SSLKEYTYPE.3
RENDER CURLOPT_PROXY_SSLVERSION.3
RENDER CURLOPT_PROXY_TLS13_CIPHERS.3
RENDER CURLOPT_PROXY_TLSAUTH_PASSWORD.3
RENDER CURLOPT_PROXY_TLSAUTH_TYPE.3
RENDER CURLOPT_PROXY_TLSAUTH_USERNAME.3
RENDER CURLOPT_PROXY_TRANSFER_MODE.3
RENDER CURLOPT_PROXYAUTH.3
RENDER CURLOPT_PROXYHEADER.3
RENDER CURLOPT_PROXYPASSWORD.3
RENDER CURLOPT_PROXYPORT.3
RENDER CURLOPT_PROXYTYPE.3
RENDER CURLOPT_PROXYUSERNAME.3
RENDER CURLOPT_PROXYUSERPWD.3
RENDER CURLOPT_PUT.3
RENDER CURLOPT_QUICK_EXIT.3
RENDER CURLOPT_QUOTE.3
RENDER CURLOPT_RANDOM_FILE.3
RENDER CURLOPT_RANGE.3
RENDER CURLOPT_READDATA.3
RENDER CURLOPT_READFUNCTION.3
RENDER CURLOPT_REDIR_PROTOCOLS.3
RENDER CURLOPT_REDIR_PROTOCOLS_STR.3
RENDER CURLOPT_REFERER.3
RENDER CURLOPT_REQUEST_TARGET.3
RENDER CURLOPT_RESOLVE.3
RENDER CURLOPT_RESOLVER_START_DATA.3
RENDER CURLOPT_RESOLVER_START_FUNCTION.3
RENDER CURLOPT_RESUME_FROM.3
RENDER CURLOPT_RESUME_FROM_LARGE.3
RENDER CURLOPT_RTSP_CLIENT_CSEQ.3
RENDER CURLOPT_RTSP_REQUEST.3
RENDER CURLOPT_RTSP_SERVER_CSEQ.3
RENDER CURLOPT_RTSP_SESSION_ID.3
RENDER CURLOPT_RTSP_STREAM_URI.3
RENDER CURLOPT_RTSP_TRANSPORT.3
RENDER CURLOPT_SASL_AUTHZID.3
RENDER CURLOPT_SASL_IR.3
RENDER CURLOPT_SEEKDATA.3
RENDER CURLOPT_SEEKFUNCTION.3
RENDER CURLOPT_SERVER_RESPONSE_TIMEOUT.3
RENDER CURLOPT_SERVER_RESPONSE_TIMEOUT_MS.3
RENDER CURLOPT_SERVICE_NAME.3
RENDER CURLOPT_SHARE.3
RENDER CURLOPT_SOCKOPTDATA.3
RENDER CURLOPT_SOCKOPTFUNCTION.3
RENDER CURLOPT_SOCKS5_AUTH.3
RENDER CURLOPT_SOCKS5_GSSAPI_NEC.3
RENDER CURLOPT_SOCKS5_GSSAPI_SERVICE.3
RENDER CURLOPT_SSH_AUTH_TYPES.3
RENDER CURLOPT_SSH_COMPRESSION.3
RENDER CURLOPT_SSH_HOSTKEYDATA.3
RENDER CURLOPT_SSH_HOSTKEYFUNCTION.3
RENDER CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3
RENDER CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.3
RENDER CURLOPT_SSH_KEYDATA.3
RENDER CURLOPT_SSH_KEYFUNCTION.3
RENDER CURLOPT_SSH_KNOWNHOSTS.3
RENDER CURLOPT_SSH_PRIVATE_KEYFILE.3
RENDER CURLOPT_SSH_PUBLIC_KEYFILE.3
RENDER CURLOPT_SSL_CIPHER_LIST.3
RENDER CURLOPT_SSL_CTX_DATA.3
RENDER CURLOPT_SSL_EC_CURVES.3
RENDER CURLOPT_SSL_CTX_FUNCTION.3
RENDER CURLOPT_SSL_ENABLE_ALPN.3
RENDER CURLOPT_SSL_ENABLE_NPN.3
RENDER CURLOPT_SSL_FALSESTART.3
RENDER CURLOPT_SSL_OPTIONS.3
RENDER CURLOPT_SSL_SESSIONID_CACHE.3
RENDER CURLOPT_SSL_VERIFYHOST.3
RENDER CURLOPT_SSL_VERIFYPEER.3
RENDER CURLOPT_SSL_VERIFYSTATUS.3
RENDER CURLOPT_SSLCERT.3
RENDER CURLOPT_SSLCERT_BLOB.3
RENDER CURLOPT_SSLCERTTYPE.3
RENDER CURLOPT_SSLENGINE.3
RENDER CURLOPT_SSLENGINE_DEFAULT.3
RENDER CURLOPT_SSLKEY_BLOB.3
RENDER CURLOPT_SSLKEY.3
RENDER CURLOPT_SSLKEYTYPE.3
RENDER CURLOPT_SSLVERSION.3
RENDER CURLOPT_STDERR.3
RENDER CURLOPT_STREAM_DEPENDS.3
RENDER CURLOPT_STREAM_DEPENDS_E.3
RENDER CURLOPT_SUPPRESS_CONNECT_HEADERS.3
RENDER CURLOPT_TCP_FASTOPEN.3
RENDER CURLOPT_STREAM_WEIGHT.3
RENDER CURLOPT_TCP_KEEPALIVE.3
RENDER CURLOPT_TCP_KEEPIDLE.3
RENDER CURLOPT_TCP_KEEPINTVL.3
RENDER CURLOPT_TCP_NODELAY.3
RENDER CURLOPT_TELNETOPTIONS.3
RENDER CURLOPT_TFTP_BLKSIZE.3
RENDER CURLOPT_TFTP_NO_OPTIONS.3
RENDER CURLOPT_TIMECONDITION.3
RENDER CURLOPT_TIMEOUT.3
RENDER CURLOPT_TIMEOUT_MS.3
RENDER CURLOPT_TIMEVALUE.3
RENDER CURLOPT_TIMEVALUE_LARGE.3
RENDER CURLOPT_TLSAUTH_PASSWORD.3
RENDER CURLOPT_TLS13_CIPHERS.3
RENDER CURLOPT_TLSAUTH_TYPE.3
RENDER CURLOPT_TLSAUTH_USERNAME.3
RENDER CURLOPT_TRAILERDATA.3
RENDER CURLOPT_TRAILERFUNCTION.3
RENDER CURLOPT_TRANSFER_ENCODING.3
RENDER CURLOPT_TRANSFERTEXT.3
RENDER CURLOPT_UNIX_SOCKET_PATH.3
RENDER CURLOPT_UNRESTRICTED_AUTH.3
RENDER CURLOPT_UPKEEP_INTERVAL_MS.3
RENDER CURLOPT_UPLOAD.3
RENDER CURLOPT_UPLOAD_BUFFERSIZE.3
RENDER CURLOPT_URL.3
RENDER CURLOPT_USERAGENT.3
RENDER CURLOPT_USE_SSL.3
RENDER CURLOPT_USERNAME.3
RENDER CURLOPT_USERPWD.3
RENDER CURLOPT_VERBOSE.3
RENDER CURLOPT_WRITEDATA.3
RENDER CURLOPT_WILDCARDMATCH.3
RENDER CURLOPT_WRITEFUNCTION.3
RENDER CURLOPT_WS_OPTIONS.3
RENDER CURLOPT_XFERINFOFUNCTION.3
RENDER CURLOPT_XFERINFODATA.3
RENDER CURLOPT_XOAUTH2_BEARER.3
RENDER CURLSHOPT_LOCKFUNC.3
RENDER CURLSHOPT_SHARE.3
RENDER CURLSHOPT_UNLOCKFUNC.3
RENDER CURLSHOPT_UNSHARE.3
RENDER CURLSHOPT_USERDATA.3
make[4]: Leaving directory '/root/asi_db/builds/curl/_worktrees/w0/docs/libcurl/opts'
make[4]: Entering directory '/root/asi_db/builds/curl/_worktrees/w0/docs/libcurl'
RENDER curl_easy_duphandle.3
RENDER curl_easy_cleanup.3
RENDER curl_easy_escape.3
RENDER curl_easy_getinfo.3
RENDER curl_easy_header.3
RENDER curl_easy_init.3
RENDER curl_easy_nextheader.3
RENDER curl_easy_option_by_id.3
RENDER curl_easy_option_by_name.3
RENDER curl_easy_option_next.3
RENDER curl_easy_pause.3
RENDER curl_easy_perform.3
RENDER curl_easy_recv.3
RENDER curl_easy_reset.3
RENDER curl_easy_send.3
RENDER curl_easy_setopt.3
RENDER curl_easy_strerror.3
RENDER curl_easy_unescape.3
RENDER curl_easy_upkeep.3
RENDER curl_escape.3
RENDER curl_formadd.3
RENDER curl_formfree.3
RENDER curl_formget.3
RENDER curl_free.3
RENDER curl_getdate.3
RENDER curl_getenv.3
RENDER curl_global_cleanup.3
RENDER curl_global_init.3
RENDER curl_global_init_mem.3
RENDER curl_global_trace.3
RENDER curl_global_sslset.3
RENDER curl_mime_addpart.3
RENDER curl_mime_data_cb.3
RENDER curl_mime_data.3
RENDER curl_mime_encoder.3
RENDER curl_mime_filedata.3
RENDER curl_mime_filename.3
RENDER curl_mime_free.3
RENDER curl_mime_headers.3
RENDER curl_mime_init.3
RENDER curl_mime_name.3
RENDER curl_mime_subparts.3
RENDER curl_mime_type.3
RENDER curl_mprintf.3
RENDER curl_multi_add_handle.3
RENDER curl_multi_assign.3
RENDER curl_multi_cleanup.3
RENDER curl_multi_fdset.3
RENDER curl_multi_get_handles.3
RENDER curl_multi_info_read.3
RENDER curl_multi_init.3
RENDER curl_multi_perform.3
RENDER curl_multi_poll.3
RENDER curl_multi_remove_handle.3
RENDER curl_multi_setopt.3
RENDER curl_multi_socket.3
RENDER curl_multi_socket_action.3
RENDER curl_multi_socket_all.3
RENDER curl_multi_strerror.3
RENDER curl_multi_timeout.3
RENDER curl_multi_wakeup.3
RENDER curl_multi_wait.3
RENDER curl_pushheader_bynum.3
RENDER curl_pushheader_byname.3
RENDER curl_share_cleanup.3
RENDER curl_share_init.3
RENDER curl_share_setopt.3
RENDER curl_share_strerror.3
RENDER curl_slist_append.3
RENDER curl_slist_free_all.3
RENDER curl_strequal.3
RENDER curl_strnequal.3
RENDER curl_unescape.3
RENDER curl_url.3
RENDER curl_url_cleanup.3
RENDER curl_url_dup.3
RENDER curl_url_get.3
RENDER curl_url_set.3
RENDER curl_url_strerror.3
RENDER curl_version.3
RENDER curl_version_info.3
RENDER curl_ws_meta.3
RENDER curl_ws_recv.3
RENDER curl_ws_send.3
RENDER libcurl-easy.3
RENDER libcurl-env.3
RENDER libcurl-env-dbg.3
RENDER libcurl-errors.3
RENDER libcurl-multi.3
RENDER libcurl-security.3
RENDER libcurl-share.3
RENDER libcurl-symbols.md
RENDER libcurl-thread.3
RENDER libcurl-tutorial.3
RENDER libcurl-url.3
RENDER libcurl-ws.3
RENDER libcurl.3
RENDER libcurl-symbols.3
make[4]: Leaving directory '/root/asi_db/builds/curl/_worktrees/w0/docs/libcurl'
make[3]: Leaving directory '/root/asi_db/builds/curl/_worktrees/w0/docs/libcurl'
make[2]: Leaving directory '/root/asi_db/builds/curl/_worktrees/w0/docs'
make[2]: Entering directory '/root/asi_db/builds/curl/_worktrees/w0/src'
CC tool_binmode.o
CC slist_wc.o
CC tool_bname.o
CC tool_cb_dbg.o
CC tool_cb_hdr.o
CC tool_cb_prg.o
CC tool_cb_rea.o
CC tool_cb_see.o
CC tool_cb_wrt.o
CC tool_cfgable.o
CC tool_dirhie.o
CC tool_doswin.o
CC tool_easysrc.o
CC tool_filetime.o
CC tool_findfile.o
CC tool_formparse.o
CC tool_getparam.o
CC tool_getpass.o
CC tool_help.o
CC tool_helpers.o
HUGE tool_hugehelp.c
CC tool_libinfo.o
CC tool_ipfs.o
CC tool_listhelp.o
CC tool_main.o
CC tool_msgs.o
CC tool_operate.o
CC tool_operhlp.o
CC tool_paramhlp.o
CC tool_parsecfg.o
CC tool_progress.o
CC tool_setopt.o
CC tool_sleep.o
CC tool_stderr.o
CC tool_strdup.o
CC tool_urlglob.o
CC tool_util.o
CC tool_vms.o
CC tool_writeout.o
CC tool_writeout_json.o
CC tool_xattr.o
CC var.o
CC ../lib/curl_multibyte.o
CC ../lib/base64.o
CC ../lib/dynbuf.o
CC ../lib/nonblock.o
CC ../lib/strtoofft.o
CC ../lib/timediff.o
CC ../lib/version_win32.o
CC ../lib/warnless.o
CC tool_hugehelp.o
CCLD curl
make[2]: Leaving directory '/root/asi_db/builds/curl/_worktrees/w0/src'
make[1]: Leaving directory '/root/asi_db/builds/curl/_worktrees/w0/src'
make[1]: Entering directory '/root/asi_db/builds/curl/_worktrees/w0'
make[1]: Nothing to be done for 'all-am'.
make[1]: Leaving directory '/root/asi_db/builds/curl/_worktrees/w0'
| @@ -71,6 +71,7 @@ while(<F>) { | |
| $_ =~ s/curl_url_(dup)//g; | |
| $_ =~ s/curl_pushheader_by(name|num)//g; | |
| $_ =~ s/libcurl-(env|ws)//g; | |
| + | $_ =~ s/libcurl\\-(env|ws)//g; |
| $_ =~ s/(^|\W)((tftp|https|http|ftp):\/\/[a-z0-9\-._~%:\/?\#\[\]\@!\$&'()*+,;=]+)//gi; | |
| print O $_; | |
| } | |
| @@ -83,6 +83,7 @@ CCC | |
| CDN | |
| CentOS | |
| CFLAGS | |
| + | cflags |
| CGI's | |
| CHACHA | |
| chacha | |
| @@ -138,10 +139,11 @@ cshrc | |
| CTRL | |
| cURL | |
| CURLcode | |
| + | curldown |
| CURLE | |
| CURLH | |
| - | CURLINFO |
| curlimages | |
| + | CURLINFO |
| curlrc | |
| curltest | |
| customizable | |
| @@ -161,8 +163,8 @@ deepcode | |
| DELE | |
| DER | |
| deselectable | |
| - | Deserialized |
| deserialization | |
| + | Deserialized |
| destructor | |
| detections | |
| dev | |
| @@ -350,11 +352,10 @@ interoperable | |
| interoperates | |
| IoT | |
| ipadOS | |
| + | IPCXN |
| IPFS | |
| - | IPNS |
| ipld | |
| - | trustless |
| - | IPCXN |
| + | IPNS |
| IPv | |
| IPv4 | |
| IPv4/6 | |
| @@ -804,6 +805,7 @@ TPF | |
| TrackMemory | |
| transcode | |
| Tru | |
| + | trustless |
| Tse | |
| Tsujikawa | |
| TTL | |
| @@ -826,6 +828,7 @@ unencoded | |
| unencrypted | |
| unescape | |
| Unglobbed | |
| + | Unicode |
| UNICOS | |
| unix | |
| UnixSockets | |
| @@ -91,12 +91,20 @@ sub extract { | |
| return ($fail ? 0 : $l); | |
| } | |
| + | my $count; |
| for my $m (@files) { | |
| - | print "Verify $m\n"; |
| + | #print "Verify $m\n"; |
| my $out = extract($m); | |
| if($out) { | |
| $error |= testcompile($m); | |
| $error |= checksrc($m); | |
| } | |
| + | $count++; |
| + | } |
| + | if(!$error) { |
| + | print "Verified $count man pages ok\n"; |
| + | } |
| + | else { |
| + | print "Detected problems\n"; |
| } | |
| exit $error; | |
| @@ -28,5 +28,8 @@ jobs: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| + | - name: render nroff versions |
| + | run: autoreconf -fi && ./configure --without-ssl --without-libpsl && make -C docs |
| + | |
| - name: verify examples | |
| run: ./.github/scripts/verify-examples.pl docs/libcurl/curl*.3 docs/libcurl/opts/*.3 | |
| @@ -42,7 +42,8 @@ jobs: | |
| "checks": { | |
| "typography.diacritical_marks": false, | |
| "typography.symbols": false, | |
| - | "annotations.misc": false |
| + | "annotations.misc": false, |
| + | "security.password": false |
| } | |
| } | |
| JSON | |
| @@ -153,12 +153,6 @@ dist-hook: | |
| cp -p $$file $(distdir)$$strip; \ | |
| done) | |
| - | html: |
| - | cd docs && $(MAKE) html |
| - | |
| - | pdf: |
| - | cd docs && $(MAKE) pdf |
| - | |
| check: test examples check-docs | |
| if CROSSCOMPILING | |
| @@ -84,7 +84,7 @@ environment: | |
| ENABLE_UNICODE: 'OFF' | |
| HTTP_ONLY: 'OFF' | |
| TESTING: 'ON' | |
| - | DISABLED_TESTS: '!1139 !1501' |
| + | DISABLED_TESTS: '!1139 !1501 !1140 !1173 !1177 !1477' |
| - job_name: 'CMake, VS2022, Debug, x64, Schannel, Static, Unicode' | |
| APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' | |
| BUILD_SYSTEM: CMake | |
| @@ -95,7 +95,7 @@ environment: | |
| ENABLE_UNICODE: 'ON' | |
| HTTP_ONLY: 'OFF' | |
| TESTING: 'ON' | |
| - | DISABLED_TESTS: '!1139 !1501' |
| + | DISABLED_TESTS: '!1139 !1501 !1140 !1173 !1177 !1477' |
| - job_name: 'CMake, VS2022, Debug, x64, no SSL, Static' | |
| APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' | |
| BUILD_SYSTEM: CMake | |
| @@ -106,7 +106,7 @@ environment: | |
| ENABLE_UNICODE: 'OFF' | |
| HTTP_ONLY: 'OFF' | |
| TESTING: 'ON' | |
| - | DISABLED_TESTS: '!1139 !1501' |
| + | DISABLED_TESTS: '!1139 !1501 !1140 !1173 !1177 !1477' |
| - job_name: 'CMake, VS2022, Debug, x64, no SSL, Static, HTTP only' | |
| APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' | |
| BUILD_SYSTEM: CMake | |
| @@ -117,7 +117,7 @@ environment: | |
| ENABLE_UNICODE: 'OFF' | |
| HTTP_ONLY: 'ON' | |
| TESTING: 'ON' | |
| - | DISABLED_TESTS: '!1139 !1501' |
| + | DISABLED_TESTS: '!1139 !1501 !1140 !1173 !1177 !1477' |
| # generated CMake-based MSYS Makefiles builds (mingw cross-compiling) | |
| - job_name: 'CMake, mingw-w64, gcc 13, Debug, x64, Schannel, Static, Unicode, Unity' | |
| APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' | |
| @@ -128,7 +128,7 @@ environment: | |
| ENABLE_UNICODE: 'ON' | |
| HTTP_ONLY: 'OFF' | |
| TESTING: 'ON' | |
| - | DISABLED_TESTS: '!1086 !1139 !1451 !1501' |
| + | DISABLED_TESTS: '!1086 !1139 !1451 !1501 !1140 !1173 !1177 !1477' |
| ADD_PATH: 'C:/msys64/mingw64/bin' | |
| MSYS2_ARG_CONV_EXCL: '/*' | |
| BUILD_OPT: -k | |
| @@ -142,7 +142,7 @@ environment: | |
| ENABLE_UNICODE: 'ON' | |
| HTTP_ONLY: 'OFF' | |
| TESTING: 'ON' | |
| - | DISABLED_TESTS: '!1086 !1139 !1451 !1501' |
| + | DISABLED_TESTS: '!1086 !1139 !1451 !1501 !1140 !1173 !1177 !1477' |
| ADD_PATH: 'C:/mingw-w64/x86_64-7.2.0-posix-seh-rt_v5-rev1/mingw64/bin' | |
| MSYS2_ARG_CONV_EXCL: '/*' | |
| BUILD_OPT: -k | |
| @@ -156,7 +156,7 @@ environment: | |
| HTTP_ONLY: 'OFF' | |
| TESTING: 'ON' | |
| # test 286 disabled due to https://github.com/curl/curl/issues/12040 | |
| - | DISABLED_TESTS: '~286 !1086 !1139 !1451 !1501' |
| + | DISABLED_TESTS: '~286 !1086 !1139 !1451 !1501 !1140 !1173 !1177 !1477' |
| ADD_PATH: 'C:/msys64/mingw64/bin' | |
| MSYS2_ARG_CONV_EXCL: '/*' | |
| BUILD_OPT: -k | |
| @@ -170,7 +170,7 @@ environment: | |
| ENABLE_UNICODE: 'OFF' | |
| HTTP_ONLY: 'OFF' | |
| TESTING: 'ON' | |
| - | DISABLED_TESTS: '!1086 !1139 !1451 !1501' |
| + | DISABLED_TESTS: '!1086 !1139 !1451 !1501 !1140 !1173 !1177 !1477' |
| ADD_PATH: 'C:/mingw-w64/i686-6.3.0-posix-dwarf-rt_v5-rev1/mingw32/bin' | |
| MSYS2_ARG_CONV_EXCL: '/*' | |
| BUILD_OPT: -k | |
| @@ -2,7 +2,5 @@ | |
| # | |
| # SPDX-License-Identifier: curl | |
| - | *.html |
| - | |
| - | curl.1 |
| - | *.1.dist |
| + | *.1 |
| + | *.3 |
| @@ -116,7 +116,7 @@ features are working as they are supposed to. To maintain this situation and | |
| improve it, all new features and functions that are added need to be tested | |
| in the test suite. Every feature that is added should get at least one valid | |
| test case that verifies that it works as documented. If every submitter also | |
| - | posts a few test cases, it will not end up as a heavy burden on a single person! |
| + | posts a few test cases, it will not end up as a heavy burden on a single person. |
| If you do not have test cases or perhaps you have done something that is hard | |
| to write tests for, do explain exactly how you have otherwise tested and | |
| @@ -0,0 +1,125 @@ | |
| + | # curldown |
| + | |
| + | A markdown-like syntax for libcurl man pages. |
| + | |
| + | ## Purpose |
| + | |
| + | A text format for writing libcurl documentation in the shape of man pages. |
| + | |
| + | Make it easier for users to contribute and write documentation. A format that |
| + | is easier on the eye in its source format. |
| + | |
| + | Make it harder to do syntactical mistakes. |
| + | |
| + | Use a format that allows creating man pages that end up looking exactly like |
| + | the man pages did when we wrote them in nroff format. |
| + | |
| + | Take advantage of the fact that people these days are accustomed to markdown |
| + | by using a markdown-like syntax. |
| + | |
| + | This allows us to fix issues in the nroff format easier since now we generate |
| + | them. For example: escaping minus to prevent them from being turned into |
| + | Unicode by man. |
| + | |
| + | Generate nroff output that looks (next to) *identical* to the previous files, |
| + | so that the look, existing test cases, HTML conversions, existing |
| + | infrastructure etc remain mostly intact. |
| + | |
| + | Contains meta-data in a structured way to allow better output (for example the |
| + | see also information) and general awareness of what the file is about. |
| + | |
| + | ## File extension |
| + | |
| + | Since curldown looks similar to markdown, we use `.md` extensions on the |
| + | files. |
| + | |
| + | ## Conversion |
| + | |
| + | Convert **from curldown to nroff** with `cd2nroff`. Generates nroff man pages. |
| + | |
| + | Convert **from nroff to curldown** with `nroff2cd`. This is only meant to be |
| + | used for the initial conversion to curldown and should ideally never be needed |
| + | again. |
| + | |
| + | Convert, check or clean up an existing curldown to nicer, better, cleaner |
| + | curldown with **cd2cd**. |
| + | |
| + | Mass-convert all curldown files to nroff in specified directories with |
| + | `cdall`: |
| + | |
| + | cdall [dir1] [dir2] [dir3] .. |
| + | |
| + | ## Known issues |
| + | |
| + | The `cd2nroff` tool does not yet handle *italics* or **bold** where the start |
| + | and the end markers are used on separate lines. |
| + | |
| + | The `nroff2cd` tool generates code style quotes for all `.fi` sections since |
| + | the nroff format does not carry a distinction. |
| + | |
| + | # Format |
| + | |
| + | Each curldown starts with a header with meta-data: |
| + | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_AWS_SIGV4 |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_HEADEROPT (3) |
| + | - CURLOPT_HTTPAUTH (3) |
| + | --- |
| + | |
| + | All curldown files *must* have all the headers present and at least one |
| + | `See-also:` entry specified. |
| + | |
| + | Following the header in the file, is the manual page using markdown-like |
| + | syntax: |
| + | |
| + | ~~~ |
| + | # NAME |
| + | a page - this is a page descriving something |
| + | |
| + | # SYNOPSIS |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_AWS_SIGV4, char *param); |
| + | ~~~ |
| + | ~~~ |
| + | |
| + | Quoted source code should start with `~~~c` and end with `~~~` while regular |
| + | quotes can start with `~~~` or just be indented with 4 spaces. |
| + | |
| + | Headers at top-level `#` get converted to `.SH`. |
| + | |
| + | `nroff2cd` supports the `##` next level header which gets converted to `.IP`. |
| + | |
| + | Write bold words or phrases within `**` like: |
| + | |
| + | This is a **bold** word. |
| + | |
| + | Write italics like: |
| + | |
| + | This is *italics*. |
| + | |
| + | Due to how man pages don't support backticks especially formatted, such |
| + | occurrences in the source will instead just use italics in the generated |
| + | output: |
| + | |
| + | This `word` appears in italics. |
| + | |
| + | When generating the nroff output, the tooling will remove superfluous newlines, |
| + | meaning they can be used freely in the source file to make the text more |
| + | readable. |
| + | |
| + | All mentioned curl symbols that have their own man pages, like |
| + | `curl_easy_perform(3)` will automatically be rendered using italics in the |
| + | output without having to enclose it with asterisks. This helps ensuring that |
| + | they get converted to links properly later in the HTML version on the website, |
| + | as converted with `roffit`. This makes the curldown text easier to read even |
| + | when mentioning many curl symbols. |
| + | |
| + | This auto-linking works for patterns matching `(lib|)curl[^ ]*(3)`. |
| @@ -179,4 +179,4 @@ this. | |
| ### Stop being a maintainer | |
| If you (appear to) not be active in the project anymore, you may be removed as | |
| - | a maintainer. Thank you for your service! |
| + | a maintainer. Thank you for your service. |
| @@ -327,7 +327,7 @@ April: added the cyassl backend (later renamed to WolfSSL) | |
| January: the curl tool defaults to HTTP/2 for HTTPS URLs | |
| - | December: curl 7.52.0 introduced support for HTTPS-proxy! |
| + | December: curl 7.52.0 introduced support for HTTPS-proxy |
| First TLS 1.3 support | |
| @@ -26,24 +26,21 @@ AUTOMAKE_OPTIONS = foreign no-dependencies | |
| # EXTRA_DIST breaks with $(abs_builddir) so build it using this variable | |
| # but distribute it (using the relative file name) in the next variable | |
| - | man_MANS = $(abs_builddir)/curl.1 |
| + | man_MANS = $(abs_builddir)/curl.1 mk-ca-bundle.1 |
| noinst_man_MANS = curl.1 mk-ca-bundle.1 | |
| dist_man_MANS = curl-config.1 | |
| - | GENHTMLPAGES = curl.html curl-config.html mk-ca-bundle.html |
| - | PDFPAGES = curl.pdf curl-config.pdf mk-ca-bundle.pdf |
| - | MANDISTPAGES = curl.1.dist curl-config.1.dist |
| - | |
| - | HTMLPAGES = $(GENHTMLPAGES) |
| + | CURLPAGES = curl-config.md mk-ca-bundle.md |
| # Build targets in this file (.) before cmdline-opts to ensure that | |
| # the curl.1 rule below runs first | |
| - | SUBDIRS = . cmdline-opts |
| - | DIST_SUBDIRS = $(SUBDIRS) examples libcurl |
| + | SUBDIRS = . cmdline-opts libcurl |
| + | DIST_SUBDIRS = $(SUBDIRS) examples |
| - | CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) $(MANDISTPAGES) curl.1 |
| + | CLEANFILES = $(man_MANS) curl.1 curl-config.1 mk-ca-bundle.1 |
| + | nodist_MANS = $(CLEANFILES) |
| EXTRA_DIST = \ | |
| - | $(noinst_man_MANS) \ |
| + | $(CURLPAGES) \ |
| ALTSVC.md \ | |
| BINDINGS.md \ | |
| BUFREF.md \ | |
| @@ -59,6 +56,7 @@ EXTRA_DIST = \ | |
| CONNECTION-FILTERS.md \ | |
| CONTRIBUTE.md \ | |
| CURL-DISABLE.md \ | |
| + | CURLDOWN.md \ |
| DEPRECATE.md \ | |
| DYNBUF.md \ | |
| EARLY-RELEASE.md \ | |
| @@ -98,9 +96,14 @@ EXTRA_DIST = \ | |
| VULN-DISCLOSURE-POLICY.md \ | |
| WEBSOCKET.md | |
| - | MAN2HTML= roffit $< >$@ |
| + | CD2NROFF = $(top_srcdir)/scripts/cd2nroff $< >$@ |
| + | |
| + | CD2 = $(CD2_$(V)) |
| + | CD2_0 = @echo " RENDER " $@; |
| + | CD2_1 = |
| + | CD2_ = $(CD2_0) |
| - | SUFFIXES = .1 .html .pdf |
| + | SUFFIXES = .1 .md |
| # $(abs_builddir) is to disable VPATH when searching for this file, which | |
| # would otherwise find the copy in $(srcdir) which breaks the $(HUGE) | |
| @@ -116,21 +119,10 @@ $(abs_builddir)/curl.1: | |
| && touch -r "$(srcdir)/curl.1" $@; fi | |
| cd cmdline-opts && $(MAKE) | |
| - | html: $(HTMLPAGES) |
| - | cd libcurl && $(MAKE) html |
| - | |
| - | pdf: $(PDFPAGES) |
| - | cd libcurl && $(MAKE) pdf |
| - | |
| - | .1.html: |
| - | $(MAN2HTML) |
| + | .md.1: |
| + | $(CD2)$(CD2NROFF) |
| - | .1.pdf: |
| - | @(foo=`echo $@ | sed -e 's/\.[0-9]$$//g'`; \ |
| - | groff -Tps -man $< >$$foo.ps; \ |
| - | ps2pdf $$foo.ps $@; \ |
| - | rm $$foo.ps; \ |
| - | echo "converted $< to $@") |
| + | curl-config.1: curl-config.md |
| distclean: | |
| rm -f $(CLEANFILES) | |
| @@ -116,10 +116,10 @@ server, do one of the following: | |
| 4. Windows Directory (e.g. C:\windows) | |
| 5. all directories along %PATH% | |
| - | 5. Get a better/different/newer CA cert bundle! One option is to extract the |
| - | one a recent Firefox browser uses by running 'make ca-bundle' in the curl |
| - | build tree root, or possibly download a version that was generated this |
| - | way for you: [CA Extract](https://curl.se/docs/caextract.html) |
| + | 5. Get another CA cert bundle. One option is to extract the one a recent |
| + | Firefox browser uses by running 'make ca-bundle' in the curl build tree |
| + | root, or possibly download a version that was generated this way for you: |
| + | [CA Extract](https://curl.se/docs/caextract.html) |
| Neglecting to use one of the above methods when dealing with a server using a | |
| certificate that is not signed by one of the certificates in the installed CA | |
| @@ -1,105 +1,124 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH curl-config 1 "25 Oct 2007" curl-config curl-config |
| - | .SH NAME |
| - | curl-config \- Get information about a libcurl installation |
| - | .SH SYNOPSIS |
| - | .B curl-config [options] |
| - | .SH DESCRIPTION |
| - | .B curl-config |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl-config |
| + | Section: 1 |
| + | Source: curl-config |
| + | See-also: |
| + | - curl (1) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl-config - Get information about a libcurl installation |
| + | |
| + | # SYNOPSIS |
| + | |
| + | **curl-config [options]** |
| + | |
| + | # DESCRIPTION |
| + | |
| + | **curl-config** |
| displays information about the curl and libcurl installation. | |
| - | .SH OPTIONS |
| - | .IP "--ca" |
| + | |
| + | # OPTIONS |
| + | |
| + | ## --ca |
| + | |
| Displays the built-in path to the CA cert bundle this libcurl uses. | |
| - | .IP "--cc" |
| + | |
| + | ## --cc |
| + | |
| Displays the compiler used to build libcurl. | |
| - | .IP "--cflags" |
| + | |
| + | ## --cflags |
| + | |
| Set of compiler options (CFLAGS) to use when compiling files that use | |
| libcurl. Currently that is only the include path to the curl include files. | |
| - | .IP "--checkfor [version]" |
| + | |
| + | ## --checkfor [version] |
| + | |
| Specify the oldest possible libcurl version string you want, and this | |
| script will return 0 if the current installation is new enough or it | |
| returns 1 and outputs a text saying that the current version is not new | |
| enough. (Added in 7.15.4) | |
| - | .IP "--configure" |
| + | |
| + | ## --configure |
| + | |
| Displays the arguments given to configure when building curl. | |
| - | .IP "--feature" |
| + | |
| + | ## --feature |
| + | |
| Lists what particular main features the installed libcurl was built with. At | |
| the time of writing, this list may include SSL, KRB4 or IPv6. Do not assume | |
| any particular order. The keywords will be separated by newlines. There may be | |
| none, one, or several keywords in the list. | |
| - | .IP "--help" |
| + | |
| + | ## --help |
| + | |
| Displays the available options. | |
| - | .IP "--libs" |
| + | |
| + | ## --libs |
| + | |
| Shows the complete set of libs and other linker options you will need in order | |
| to link your application with libcurl. | |
| - | .IP "--prefix" |
| + | |
| + | ## --prefix |
| + | |
| This is the prefix used when libcurl was installed. Libcurl is then installed | |
| in $prefix/lib and its header files are installed in $prefix/include and so | |
| on. The prefix is set with "configure --prefix". | |
| - | .IP "--protocols" |
| + | |
| + | ## --protocols |
| + | |
| Lists what particular protocols the installed libcurl was built to support. At | |
| the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, FILE, | |
| TELNET, LDAP, DICT and many more. Do not assume any particular order. The | |
| protocols will be listed using uppercase and are separated by newlines. There | |
| may be none, one, or several protocols in the list. (Added in 7.13.0) | |
| - | .IP "--ssl-backends" |
| + | |
| + | ## --ssl-backends |
| + | |
| Lists the SSL backends that were enabled when libcurl was built. It might be | |
| no, one or several names. If more than one name, they will appear | |
| comma-separated. (Added in 7.58.0) | |
| - | .IP "--static-libs" |
| + | |
| + | ## --static-libs |
| + | |
| Shows the complete set of libs and other linker options you will need in order | |
| to link your application with libcurl statically. (Added in 7.17.1) | |
| - | .IP "--version" |
| + | |
| + | ## --version |
| + | |
| Outputs version information about the installed libcurl. | |
| - | .IP "--vernum" |
| + | |
| + | ## --vernum |
| + | |
| Outputs version information about the installed libcurl, in numerical mode. | |
| This outputs the version number, in hexadecimal, with 8 bits for each part: | |
| major, minor, and patch. So that libcurl 7.7.4 would appear as 070704 and libcurl | |
| 12.13.14 would appear as 0c0d0e... Note that the initial zero might be | |
| omitted. (This option was broken in the 7.15.0 release.) | |
| - | .SH "EXAMPLES" |
| + | |
| + | # EXAMPLES |
| + | |
| What linker options do I need when I link with libcurl? | |
| - | .nf |
| + | ~~~ |
| $ curl-config --libs | |
| - | .fi |
| + | ~~~ |
| What compiler options do I need when I compile using libcurl functions? | |
| - | .nf |
| + | ~~~ |
| $ curl-config --cflags | |
| - | .fi |
| + | ~~~ |
| How do I know if libcurl was built with SSL support? | |
| - | .nf |
| + | ~~~ |
| $ curl-config --feature | grep SSL | |
| - | .fi |
| + | ~~~ |
| What's the installed libcurl version? | |
| - | .nf |
| + | ~~~ |
| $ curl-config --version | |
| - | .fi |
| + | ~~~ |
| How do I build a single file with a one-line command? | |
| - | .nf |
| - | $ `curl-config --cc --cflags` -o example example.c `curl-config --libs` |
| - | .fi |
| - | .SH "SEE ALSO" |
| - | .BR curl (1) |
| + | ~~~ |
| + | $ `curl-config --cc --cflags` -o example source.c `curl-config --libs` |
| + | ~~~ |
| @@ -1,8 +0,0 @@ | |
| - | # Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | # |
| - | # SPDX-License-Identifier: curl |
| - | |
| - | *.html |
| - | |
| - | *.3.dist |
| - | libcurl-symbols.3 |
| @@ -28,53 +28,27 @@ SUBDIRS = opts | |
| include Makefile.inc | |
| - | man_DISTMANS = $(man_MANS:.3=.3.dist) |
| - | |
| - | HTMLPAGES = $(man_MANS:.3=.html) |
| - | |
| - | PDFPAGES = $(man_MANS:.3=.pdf) |
| + | CURLPAGES = $(man_MANS:.3=.md) |
| m4macrodir = $(datadir)/aclocal | |
| dist_m4macro_DATA = libcurl.m4 | |
| - | CLEANFILES = $(HTMLPAGES) $(PDFPAGES) $(TESTS) $(man_DISTMANS) \ |
| - | libcurl-symbols.3 |
| + | CLEANFILES = $(man_MANS) libcurl-symbols.md |
| + | nodist_MANS = $(man_MANS) |
| - | EXTRA_DIST = $(man_MANS) ABI.md symbols-in-versions symbols.pl \ |
| + | EXTRA_DIST = $(CURLPAGES) ABI.md symbols-in-versions symbols.pl \ |
| mksymbolsmanpage.pl CMakeLists.txt | |
| - | MAN2HTML= roffit --mandir=. $< >$@ |
| - | |
| - | SUFFIXES = .3 .html |
| - | |
| - | libcurl-symbols.3: $(srcdir)/symbols-in-versions $(srcdir)/mksymbolsmanpage.pl |
| - | perl $(srcdir)/mksymbolsmanpage.pl < $(srcdir)/symbols-in-versions > $@ |
| - | |
| - | html: $(HTMLPAGES) |
| - | cd opts && $(MAKE) html |
| - | |
| - | .3.html: |
| - | $(MAN2HTML) |
| - | |
| - | pdf: $(PDFPAGES) |
| - | cd opts && $(MAKE) pdf |
| - | .3.pdf: |
| - | @(foo=`echo $@ | sed -e 's/\.[0-9]$$//g'`; \ |
| - | groff -Tps -man $< >$$foo.ps; \ |
| - | ps2pdf $$foo.ps $@; \ |
| - | rm $$foo.ps; \ |
| - | echo "converted $< to $@") |
| + | CD2NROFF = $(top_srcdir)/scripts/cd2nroff $< >$@ |
| + | CD2 = $(CD2_$(V)) |
| + | CD2_0 = @echo " RENDER " $@; |
| + | CD2_1 = |
| + | CD2_ = $(CD2_0) |
| - | # Make sure each option man page is referenced in the main man page |
| - | TESTS = check-easy check-multi |
| - | LOG_COMPILER = $(PERL) |
| - | # The test fails if the log file contains any text |
| - | AM_LOG_FLAGS = -p -e 'die "$$_" if ($$_);' |
| + | SUFFIXES = .3 .md |
| - | check-easy: $(srcdir)/curl_easy_setopt.3 $(srcdir)/opts/CURLOPT*.3 |
| - | OPTS="$$(ls $(srcdir)/opts/CURLOPT*.3 | $(SED) -e 's,^.*/,,' -e 's,\.3$$,,')" && \ |
| - | for opt in $$OPTS; do grep "^\.IP $$opt$$" $(srcdir)/curl_easy_setopt.3 >/dev/null || echo Missing $$opt; done > $@ |
| + | libcurl-symbols.md: $(srcdir)/symbols-in-versions $(srcdir)/mksymbolsmanpage.pl |
| + | $(CD2)perl $(srcdir)/mksymbolsmanpage.pl < $(srcdir)/symbols-in-versions > $@ |
| - | check-multi: $(srcdir)/curl_multi_setopt.3 $(srcdir)/opts/CURLMOPT*.3 |
| - | OPTS="$$(ls $(srcdir)/opts/CURLMOPT*.3 | $(SED) -e 's,^.*/,,' -e 's,\.3$$,,')" && \ |
| - | for opt in $$OPTS; do grep "^\.IP $$opt$$" $(srcdir)/curl_multi_setopt.3 >/dev/null || echo Missing $$opt; done > $@ |
| + | .md.3: |
| + | $(CD2)$(CD2NROFF) |
| @@ -1,82 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH curl_easy_cleanup 3 "22 Aug 2007" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_easy_cleanup - End a libcurl easy handle |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | void curl_easy_cleanup(CURL *handle); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function is the opposite of \fIcurl_easy_init(3)\fP. It closes down and |
| - | frees all resources previously associated with this easy handle. |
| - | |
| - | This call closes all connections this handle has used and possibly has kept |
| - | open until now unless the easy handle was attached to a multi handle while |
| - | doing the transfers. Do not call this function if you intend to transfer more |
| - | files, reusing handles is a key to good performance with libcurl. |
| - | |
| - | Occasionally you may get your progress callback or header callback called from |
| - | within \fIcurl_easy_cleanup(3)\fP (if previously set for the handle using |
| - | \fIcurl_easy_setopt(3)\fP). Like if libcurl decides to shut down the |
| - | connection and the protocol is of a kind that requires a command/response |
| - | sequence before disconnect. Examples of such protocols are FTP, POP3 and IMAP. |
| - | |
| - | Any use of the easy \fBhandle\fP after this function has been called and have |
| - | returned, is illegal. |
| - | |
| - | To close an easy handle that has been used with the multi interface, make sure |
| - | to first call \fIcurl_multi_remove_handle(3)\fP to remove it from the multi |
| - | handle before it is closed. |
| - | |
| - | Passing in a NULL pointer in \fIhandle\fP makes this function return |
| - | immediately with no action. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(res) |
| - | printf("error: %s\\n", curl_easy_strerror(res)); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.1 |
| - | .SH RETURN VALUE |
| - | None |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_duphandle (3), |
| - | .BR curl_easy_init (3), |
| - | .BR curl_easy_reset (3), |
| - | .BR curl_multi_cleanup (3), |
| - | .BR curl_multi_remove_handle (3) |
| @@ -0,0 +1,76 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_cleanup |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_duphandle (3) |
| + | - curl_easy_init (3) |
| + | - curl_easy_reset (3) |
| + | - curl_multi_cleanup (3) |
| + | - curl_multi_remove_handle (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_easy_cleanup - End a libcurl easy handle |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | void curl_easy_cleanup(CURL *handle); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function is the opposite of curl_easy_init(3). It closes down and frees |
| + | all resources previously associated with this easy handle. |
| + | |
| + | This call closes all connections this handle has used and possibly has kept |
| + | open until now unless the easy handle was attached to a multi handle while |
| + | doing the transfers. Do not call this function if you intend to transfer more |
| + | files, reusing handles is a key to good performance with libcurl. |
| + | |
| + | Occasionally you may get your progress callback or header callback called from |
| + | within curl_easy_cleanup(3) (if previously set for the handle using |
| + | curl_easy_setopt(3)). Like if libcurl decides to shut down the connection and |
| + | the protocol is of a kind that requires a command/response sequence before |
| + | disconnect. Examples of such protocols are FTP, POP3 and IMAP. |
| + | |
| + | Any use of the easy **handle** after this function has been called and have |
| + | returned, is illegal. |
| + | |
| + | To close an easy handle that has been used with the multi interface, make sure |
| + | to first call curl_multi_remove_handle(3) to remove it from the multi handle |
| + | before it is closed. |
| + | |
| + | Passing in a NULL pointer in *handle* makes this function return immediately |
| + | with no action. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(res) |
| + | printf("error: %s\n", curl_easy_strerror(res)); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.1 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | None |
| @@ -1,78 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_easy_duphandle 3 "19 Sep 2014" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_easy_duphandle - Clone a libcurl session handle |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURL *curl_easy_duphandle(CURL *handle); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function returns a new curl handle, a duplicate, using all the options |
| - | previously set in the input curl \fIhandle\fP. Both handles can subsequently |
| - | be used independently and they must both be freed with |
| - | \fIcurl_easy_cleanup(3)\fP. |
| - | |
| - | Any options that the input handle has been told to point to (as opposed to |
| - | copy) with previous calls to \fIcurl_easy_setopt(3)\fP, are pointed to by the |
| - | new handle as well. You must therefore make sure to keep the data around until |
| - | both handles have been cleaned up. |
| - | |
| - | The new handle does \fBnot\fP inherit any state information, no connections, |
| - | no SSL sessions and no cookies. It also does not inherit any share object |
| - | states or options (created as if \fICURLOPT_SHARE(3)\fP was set to NULL). |
| - | |
| - | If the source handle has HSTS or alt-svc enabled, the duplicate gets data read |
| - | data from the main file name to populate the cache. |
| - | |
| - | In multi-threaded programs, this function must be called in a synchronous way, |
| - | the input handle may not be in use when cloned. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | CURL *nother; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | nother = curl_easy_duphandle(curl); |
| - | res = curl_easy_perform(nother); |
| - | curl_easy_cleanup(nother); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.9 |
| - | .SH RETURN VALUE |
| - | If this function returns NULL, something went wrong and no valid handle was |
| - | returned. |
| - | .SH SEE ALSO |
| - | .BR curl_easy_cleanup (3), |
| - | .BR curl_easy_init (3), |
| - | .BR curl_easy_reset (3), |
| - | .BR curl_global_init (3) |
| @@ -0,0 +1,72 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_duphandle |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_cleanup (3) |
| + | - curl_easy_init (3) |
| + | - curl_easy_reset (3) |
| + | - curl_global_init (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_easy_duphandle - Clone a libcurl session handle |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURL *curl_easy_duphandle(CURL *handle); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function returns a new curl handle, a duplicate, using all the options |
| + | previously set in the input curl *handle*. Both handles can subsequently be |
| + | used independently and they must both be freed with curl_easy_cleanup(3). |
| + | |
| + | Any options that the input handle has been told to point to (as opposed to |
| + | copy) with previous calls to curl_easy_setopt(3), are pointed to by the new |
| + | handle as well. You must therefore make sure to keep the data around until |
| + | both handles have been cleaned up. |
| + | |
| + | The new handle does **not** inherit any state information, no connections, no |
| + | SSL sessions and no cookies. It also does not inherit any share object states |
| + | or options (created as if CURLOPT_SHARE(3) was set to NULL). |
| + | |
| + | If the source handle has HSTS or alt-svc enabled, the duplicate gets data read |
| + | data from the main file name to populate the cache. |
| + | |
| + | In multi-threaded programs, this function must be called in a synchronous way, |
| + | the input handle may not be in use when cloned. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | CURL *nother; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | nother = curl_easy_duphandle(curl); |
| + | res = curl_easy_perform(nother); |
| + | curl_easy_cleanup(nother); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.9 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | If this function returns NULL, something went wrong and no valid handle was |
| + | returned. |
| @@ -1,79 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH curl_easy_escape 3 "7 April 2006" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_easy_escape - URL encodes the given string |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | char *curl_easy_escape(CURL *curl, const char *string, int length); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function converts the given input \fIstring\fP to a URL encoded string |
| - | and returns that as a new allocated string. All input characters that are not |
| - | a-z, A-Z, 0-9, '-', '.', '_' or '~' are converted to their "URL escaped" |
| - | version (\fB%NN\fP where \fBNN\fP is a two-digit hexadecimal number). |
| - | |
| - | If \fIlength\fP is set to 0 (zero), \fIcurl_easy_escape(3)\fP uses strlen() on |
| - | the input \fIstring\fP to find out the size. This function does not accept |
| - | input strings longer than \fBCURL_MAX_INPUT_LENGTH\fP (8 MB). |
| - | |
| - | Since 7.82.0, the \fBcurl\fP parameter is ignored. Prior to that there was |
| - | per-handle character conversion support for some old operating systems such as |
| - | TPF, but it was otherwise ignored. |
| - | |
| - | You must \fIcurl_free(3)\fP the returned string when you are done with it. |
| - | .SH ENCODING |
| - | libcurl is typically not aware of, nor does it care about, character |
| - | encodings. \fIcurl_easy_escape(3)\fP encodes the data byte-by-byte into the |
| - | URL encoded version without knowledge or care for what particular character |
| - | encoding the application or the receiving server may assume that the data |
| - | uses. |
| - | |
| - | The caller of \fIcurl_easy_escape(3)\fP must make sure that the data passed in |
| - | to the function is encoded correctly. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | char *output = curl_easy_escape(curl, "data to convert", 15); |
| - | if(output) { |
| - | printf("Encoded: %s\\n", output); |
| - | curl_free(output); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.15.4 and replaces the old \fIcurl_escape(3)\fP function. |
| - | .SH RETURN VALUE |
| - | A pointer to a null-terminated string or NULL if it failed. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_unescape (3), |
| - | .BR curl_free (3) |
| @@ -0,0 +1,75 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_escape |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_unescape (3) |
| + | - curl_free (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_easy_escape - URL encodes the given string |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | char *curl_easy_escape(CURL *curl, const char *string, int length); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function converts the given input *string* to a URL encoded string |
| + | and returns that as a new allocated string. All input characters that are not |
| + | a-z, A-Z, 0-9, '-', '.', '_' or '~' are converted to their "URL escaped" |
| + | version (**%NN** where **NN** is a two-digit hexadecimal number). |
| + | |
| + | If *length* is set to 0 (zero), curl_easy_escape(3) uses strlen() on |
| + | the input *string* to find out the size. This function does not accept |
| + | input strings longer than **CURL_MAX_INPUT_LENGTH** (8 MB). |
| + | |
| + | Since 7.82.0, the **curl** parameter is ignored. Prior to that there was |
| + | per-handle character conversion support for some old operating systems such as |
| + | TPF, but it was otherwise ignored. |
| + | |
| + | You must curl_free(3) the returned string when you are done with it. |
| + | |
| + | # ENCODING |
| + | |
| + | libcurl is typically not aware of, nor does it care about, character |
| + | encodings. curl_easy_escape(3) encodes the data byte-by-byte into the |
| + | URL encoded version without knowledge or care for what particular character |
| + | encoding the application or the receiving server may assume that the data |
| + | uses. |
| + | |
| + | The caller of curl_easy_escape(3) must make sure that the data passed in |
| + | to the function is encoded correctly. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | char *output = curl_easy_escape(curl, "data to convert", 15); |
| + | if(output) { |
| + | printf("Encoded: %s\n", output); |
| + | curl_free(output); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.15.4 and replaces the old curl_escape(3) function. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | A pointer to a null-terminated string or NULL if it failed. |
| @@ -1,336 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH curl_easy_getinfo 3 "11 Feb 2009" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_easy_getinfo - extract information from a curl handle |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... ); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Get the \fIinfo\fP kept in the \fIcurl\fP handle. The third argument |
| - | \fBMUST\fP be pointing to the specific type of the used option which is |
| - | documented in each man page of the \fIinfo\fP option. The data is stored |
| - | accordingly and can be relied upon only if this function returns CURLE_OK. Use |
| - | this function after a performed transfer if you want to get transfer related |
| - | data. |
| - | |
| - | You should not free the memory returned by this function unless it is |
| - | explicitly mentioned below. |
| - | .SH AVAILABLE INFORMATION |
| - | The following information can be extracted: |
| - | .IP CURLINFO_EFFECTIVE_METHOD |
| - | Last used HTTP method. |
| - | See \fICURLINFO_EFFECTIVE_METHOD(3)\fP |
| - | .IP CURLINFO_EFFECTIVE_URL |
| - | Last used URL. |
| - | See \fICURLINFO_EFFECTIVE_URL(3)\fP |
| - | .IP CURLINFO_RESPONSE_CODE |
| - | Last received response code. |
| - | See \fICURLINFO_RESPONSE_CODE(3)\fP |
| - | .IP CURLINFO_REFERER |
| - | Referrer header. |
| - | See \fICURLINFO_REFERER(3)\fP |
| - | .IP CURLINFO_HTTP_CONNECTCODE |
| - | Last proxy CONNECT response code. |
| - | See \fICURLINFO_HTTP_CONNECTCODE(3)\fP |
| - | .IP CURLINFO_HTTP_VERSION |
| - | The http version used in the connection. |
| - | See \fICURLINFO_HTTP_VERSION(3)\fP |
| - | .IP CURLINFO_FILETIME |
| - | Remote time of the retrieved document. See \fICURLINFO_FILETIME(3)\fP |
| - | .IP CURLINFO_FILETIME_T |
| - | Remote time of the retrieved document. See \fICURLINFO_FILETIME_T(3)\fP |
| - | .IP CURLINFO_TOTAL_TIME |
| - | Total time of previous transfer. |
| - | See \fICURLINFO_TOTAL_TIME(3)\fP |
| - | .IP CURLINFO_TOTAL_TIME_T |
| - | Total time of previous transfer. |
| - | See \fICURLINFO_TOTAL_TIME_T(3)\fP |
| - | .IP CURLINFO_NAMELOOKUP_TIME |
| - | Time from start until name resolving completed. |
| - | See \fICURLINFO_NAMELOOKUP_TIME(3)\fP |
| - | .IP CURLINFO_NAMELOOKUP_TIME_T |
| - | Time from start until name resolving completed. |
| - | See \fICURLINFO_NAMELOOKUP_TIME_T(3)\fP |
| - | .IP CURLINFO_CONNECT_TIME |
| - | Time from start until remote host or proxy completed. |
| - | See \fICURLINFO_CONNECT_TIME(3)\fP |
| - | .IP CURLINFO_CONNECT_TIME_T |
| - | Time from start until remote host or proxy completed. |
| - | See \fICURLINFO_CONNECT_TIME_T(3)\fP |
| - | .IP CURLINFO_APPCONNECT_TIME |
| - | Time from start until SSL/SSH handshake completed. |
| - | See \fICURLINFO_APPCONNECT_TIME(3)\fP |
| - | .IP CURLINFO_APPCONNECT_TIME_T |
| - | Time from start until SSL/SSH handshake completed. |
| - | See \fICURLINFO_APPCONNECT_TIME_T(3)\fP |
| - | .IP CURLINFO_PRETRANSFER_TIME |
| - | Time from start until just before the transfer begins. |
| - | See \fICURLINFO_PRETRANSFER_TIME(3)\fP |
| - | .IP CURLINFO_PRETRANSFER_TIME_T |
| - | Time from start until just before the transfer begins. |
| - | See \fICURLINFO_PRETRANSFER_TIME_T(3)\fP |
| - | .IP CURLINFO_QUEUE_TIME_T |
| - | Time during which this transfer was held in a waiting queue. |
| - | See \fICURLINFO_QUEUE_TIME_T(3\fP |
| - | .IP CURLINFO_STARTTRANSFER_TIME |
| - | Time from start until just when the first byte is received. |
| - | See \fICURLINFO_STARTTRANSFER_TIME(3)\fP |
| - | .IP CURLINFO_STARTTRANSFER_TIME_T |
| - | Time from start until just when the first byte is received. |
| - | See \fICURLINFO_STARTTRANSFER_TIME_T(3)\fP |
| - | .IP CURLINFO_REDIRECT_TIME |
| - | Time taken for all redirect steps before the final transfer. |
| - | See \fICURLINFO_REDIRECT_TIME(3)\fP |
| - | .IP CURLINFO_REDIRECT_TIME_T |
| - | Time taken for all redirect steps before the final transfer. |
| - | See \fICURLINFO_REDIRECT_TIME_T(3)\fP |
| - | .IP CURLINFO_REDIRECT_COUNT |
| - | Total number of redirects that were followed. |
| - | See \fICURLINFO_REDIRECT_COUNT(3)\fP |
| - | .IP CURLINFO_REDIRECT_URL |
| - | URL a redirect would take you to, had you enabled redirects. |
| - | See \fICURLINFO_REDIRECT_URL(3)\fP |
| - | .IP CURLINFO_SIZE_UPLOAD |
| - | (Deprecated) Number of bytes uploaded. |
| - | See \fICURLINFO_SIZE_UPLOAD(3)\fP |
| - | .IP CURLINFO_SIZE_UPLOAD_T |
| - | Number of bytes uploaded. |
| - | See \fICURLINFO_SIZE_UPLOAD_T(3)\fP |
| - | .IP CURLINFO_SIZE_DOWNLOAD |
| - | (Deprecated) Number of bytes downloaded. |
| - | See \fICURLINFO_SIZE_DOWNLOAD(3)\fP |
| - | .IP CURLINFO_SIZE_DOWNLOAD_T |
| - | Number of bytes downloaded. |
| - | See \fICURLINFO_SIZE_DOWNLOAD_T(3)\fP |
| - | .IP CURLINFO_SPEED_DOWNLOAD |
| - | (Deprecated) Average download speed. |
| - | See \fICURLINFO_SPEED_DOWNLOAD(3)\fP |
| - | .IP CURLINFO_SPEED_DOWNLOAD_T |
| - | Average download speed. |
| - | See \fICURLINFO_SPEED_DOWNLOAD_T(3)\fP |
| - | .IP CURLINFO_SPEED_UPLOAD |
| - | (Deprecated) Average upload speed. |
| - | See \fICURLINFO_SPEED_UPLOAD(3)\fP |
| - | .IP CURLINFO_SPEED_UPLOAD_T |
| - | Average upload speed. |
| - | See \fICURLINFO_SPEED_UPLOAD_T(3)\fP |
| - | .IP CURLINFO_HEADER_SIZE |
| - | Number of bytes of all headers received. |
| - | See \fICURLINFO_HEADER_SIZE(3)\fP |
| - | .IP CURLINFO_REQUEST_SIZE |
| - | Number of bytes sent in the issued HTTP requests. |
| - | See \fICURLINFO_REQUEST_SIZE(3)\fP |
| - | .IP CURLINFO_SSL_VERIFYRESULT |
| - | Certificate verification result. |
| - | See \fICURLINFO_SSL_VERIFYRESULT(3)\fP |
| - | .IP CURLINFO_PROXY_ERROR |
| - | Detailed proxy error. |
| - | See \fICURLINFO_PROXY_ERROR(3)\fP |
| - | .IP CURLINFO_PROXY_SSL_VERIFYRESULT |
| - | Proxy certificate verification result. |
| - | See \fICURLINFO_PROXY_SSL_VERIFYRESULT(3)\fP |
| - | .IP CURLINFO_SSL_ENGINES |
| - | A list of OpenSSL crypto engines. |
| - | See \fICURLINFO_SSL_ENGINES(3)\fP |
| - | .IP CURLINFO_CONTENT_LENGTH_DOWNLOAD |
| - | (Deprecated) Content length from the Content-Length header. |
| - | See \fICURLINFO_CONTENT_LENGTH_DOWNLOAD(3)\fP |
| - | .IP CURLINFO_CONTENT_LENGTH_DOWNLOAD_T |
| - | Content length from the Content-Length header. |
| - | See \fICURLINFO_CONTENT_LENGTH_DOWNLOAD_T(3)\fP |
| - | .IP CURLINFO_CONTENT_LENGTH_UPLOAD |
| - | (Deprecated) Upload size. See \fICURLINFO_CONTENT_LENGTH_UPLOAD(3)\fP |
| - | .IP CURLINFO_CONTENT_LENGTH_UPLOAD_T |
| - | Upload size. See \fICURLINFO_CONTENT_LENGTH_UPLOAD_T(3)\fP |
| - | .IP CURLINFO_CONTENT_TYPE |
| - | Content type from the Content-Type header. |
| - | See \fICURLINFO_CONTENT_TYPE(3)\fP |
| - | .IP CURLINFO_RETRY_AFTER |
| - | The value from the Retry-After header. |
| - | See \fICURLINFO_RETRY_AFTER(3)\fP |
| - | .IP CURLINFO_PRIVATE |
| - | User's private data pointer. |
| - | See \fICURLINFO_PRIVATE(3)\fP |
| - | .IP CURLINFO_HTTPAUTH_AVAIL |
| - | Available HTTP authentication methods. |
| - | See \fICURLINFO_HTTPAUTH_AVAIL(3)\fP |
| - | .IP CURLINFO_PROXYAUTH_AVAIL |
| - | Available HTTP proxy authentication methods. |
| - | See \fICURLINFO_PROXYAUTH_AVAIL(3)\fP |
| - | .IP CURLINFO_OS_ERRNO |
| - | The errno from the last failure to connect. |
| - | See \fICURLINFO_OS_ERRNO(3)\fP |
| - | .IP CURLINFO_NUM_CONNECTS |
| - | Number of new successful connections used for previous transfer. |
| - | See \fICURLINFO_NUM_CONNECTS(3)\fP |
| - | .IP CURLINFO_PRIMARY_IP |
| - | Destination IP address of the last connection. |
| - | See \fICURLINFO_PRIMARY_IP(3)\fP |
| - | .IP CURLINFO_PRIMARY_PORT |
| - | Destination port of the last connection. |
| - | See \fICURLINFO_PRIMARY_PORT(3)\fP |
| - | .IP CURLINFO_LOCAL_IP |
| - | Source IP address of the last connection. |
| - | See \fICURLINFO_LOCAL_IP(3)\fP |
| - | .IP CURLINFO_LOCAL_PORT |
| - | Source port number of the last connection. |
| - | See \fICURLINFO_LOCAL_PORT(3)\fP |
| - | .IP CURLINFO_COOKIELIST |
| - | List of all known cookies. |
| - | See \fICURLINFO_COOKIELIST(3)\fP |
| - | .IP CURLINFO_LASTSOCKET |
| - | (Deprecated) Last socket used. |
| - | See \fICURLINFO_LASTSOCKET(3)\fP |
| - | .IP CURLINFO_ACTIVESOCKET |
| - | The session's active socket. |
| - | See \fICURLINFO_ACTIVESOCKET(3)\fP |
| - | .IP CURLINFO_FTP_ENTRY_PATH |
| - | The entry path after logging in to an FTP server. |
| - | See \fICURLINFO_FTP_ENTRY_PATH(3)\fP |
| - | .IP CURLINFO_CAPATH |
| - | Get the default value for \fICURLOPT_CAPATH(3)\fP. |
| - | See \fICURLINFO_CAPATH(3)\fP |
| - | .IP CURLINFO_CAINFO |
| - | Get the default value for \fICURLOPT_CAINFO(3)\fP. |
| - | See \fICURLINFO_CAINFO(3)\fP |
| - | .IP CURLINFO_CERTINFO |
| - | Certificate chain. |
| - | See \fICURLINFO_CERTINFO(3)\fP |
| - | .IP CURLINFO_TLS_SSL_PTR |
| - | TLS session info that can be used for further processing. |
| - | See \fICURLINFO_TLS_SSL_PTR(3)\fP |
| - | .IP CURLINFO_TLS_SESSION |
| - | TLS session info that can be used for further processing. See |
| - | \fICURLINFO_TLS_SESSION(3)\fP. Deprecated option, use |
| - | \fICURLINFO_TLS_SSL_PTR(3)\fP instead! |
| - | .IP CURLINFO_CONDITION_UNMET |
| - | Whether or not a time conditional was met or 304 HTTP response. |
| - | See \fICURLINFO_CONDITION_UNMET(3)\fP |
| - | .IP CURLINFO_RTSP_SESSION_ID |
| - | RTSP session ID. |
| - | See \fICURLINFO_RTSP_SESSION_ID(3)\fP |
| - | .IP CURLINFO_RTSP_CLIENT_CSEQ |
| - | The RTSP client CSeq that is expected next. |
| - | See \fICURLINFO_RTSP_CLIENT_CSEQ(3)\fP |
| - | .IP CURLINFO_RTSP_SERVER_CSEQ |
| - | The RTSP server CSeq that is expected next. |
| - | See \fICURLINFO_RTSP_SERVER_CSEQ(3)\fP |
| - | .IP CURLINFO_RTSP_CSEQ_RECV |
| - | RTSP CSeq last received. |
| - | See \fICURLINFO_RTSP_CSEQ_RECV(3)\fP |
| - | .IP CURLINFO_PROTOCOL |
| - | (Deprecated) The protocol used for the connection. (Added in 7.52.0) |
| - | See \fICURLINFO_PROTOCOL(3)\fP |
| - | .IP CURLINFO_SCHEME |
| - | The scheme used for the connection. (Added in 7.52.0) |
| - | See \fICURLINFO_SCHEME(3)\fP |
| - | .IP CURLINFO_CONN_ID |
| - | The ID of the last connection used by the transfer. (Added in 8.2.0) |
| - | See \fICURLINFO_CONN_ID(3)\fP |
| - | .IP CURLINFO_XFER_ID |
| - | The ID of the transfer. (Added in 8.2.0) |
| - | See \fICURLINFO_XFER_ID(3)\fP |
| - | .SH TIMES |
| - | An overview of the time values available from \fIcurl_easy_getinfo(3)\fP |
| - | .nf |
| - | |
| - | curl_easy_perform() |
| - | | |
| - | |--QUEUE_TIME |
| - | |--|--NAMELOOKUP |
| - | |--|--|--CONNECT |
| - | |--|--|--|--APPCONNECT |
| - | |--|--|--|--|--PRETRANSFER |
| - | |--|--|--|--|--|--STARTTRANSFER |
| - | |--|--|--|--|--|--|--TOTAL |
| - | |--|--|--|--|--|--|--REDIRECT |
| - | .fi |
| - | .IP "QUEUE_TIME" |
| - | \fICURLINFO_QUEUE_TIME_T(3\fP. The time during which the transfer was held in |
| - | a waiting queue before it could start for real. (Added in 8.6.0) |
| - | .IP NAMELOOKUP |
| - | \fICURLINFO_NAMELOOKUP_TIME(3)\fP and \fICURLINFO_NAMELOOKUP_TIME_T(3)\fP. |
| - | The time it took from the start until the name resolving was completed. |
| - | .IP CONNECT |
| - | \fICURLINFO_CONNECT_TIME(3)\fP and \fICURLINFO_CONNECT_TIME_T(3)\fP. The time |
| - | it took from the start until the connect to the remote host (or proxy) was |
| - | completed. |
| - | .IP APPCONNECT |
| - | \fICURLINFO_APPCONNECT_TIME(3)\fP and \fICURLINFO_APPCONNECT_TIME_T(3)\fP. |
| - | The time it took from the start until the SSL connect/handshake with the |
| - | remote host was completed. (Added in 7.19.0) The latter is the integer version |
| - | (measuring microseconds). (Added in 7.60.0) |
| - | .IP PRETRANSFER |
| - | \fICURLINFO_PRETRANSFER_TIME(3)\fP and \fICURLINFO_PRETRANSFER_TIME_T(3)\fP. |
| - | The time it took from the start until the file transfer is just about to |
| - | begin. This includes all pre-transfer commands and negotiations that are |
| - | specific to the particular protocol(s) involved. |
| - | .IP STARTTRANSFER |
| - | \fICURLINFO_STARTTRANSFER_TIME(3)\fP and |
| - | \fICURLINFO_STARTTRANSFER_TIME_T(3)\fP. The time it took from the start until |
| - | the first byte is received by libcurl. |
| - | .IP TOTAL |
| - | \fICURLINFO_TOTAL_TIME(3)\fP and \fICURLINFO_TOTAL_TIME_T(3)\fP. Total time |
| - | of the previous request. |
| - | .IP REDIRECT |
| - | \fICURLINFO_REDIRECT_TIME(3)\fP and \fICURLINFO_REDIRECT_TIME_T(3)\fP. The |
| - | time it took for all redirection steps include name lookup, connect, |
| - | pretransfer and transfer before final transaction was started. So, this is |
| - | zero if no redirection took place. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/"); |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(CURLE_OK == res) { |
| - | char *ct; |
| - | /* ask for the content-type */ |
| - | res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct); |
| - | |
| - | if((CURLE_OK == res) && ct) |
| - | printf("We received Content-Type: %s\\n", ct); |
| - | } |
| - | |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.4.1 |
| - | .SH RETURN VALUE |
| - | If the operation was successful, CURLE_OK is returned. Otherwise an |
| - | appropriate error code is returned. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_setopt (3) |
| @@ -0,0 +1,483 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_getinfo |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_easy_getinfo - extract information from a curl handle |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... ); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Get the *info* kept in the *curl* handle. The third argument **MUST** be |
| + | pointing to the specific type of the used option which is documented in each |
| + | man page of the *info* option. The data is stored accordingly and can be |
| + | relied upon only if this function returns CURLE_OK. Use this function after a |
| + | performed transfer if you want to get transfer related data. |
| + | |
| + | You should not free the memory returned by this function unless it is |
| + | explicitly mentioned below. |
| + | |
| + | # AVAILABLE INFORMATION |
| + | |
| + | The following information can be extracted: |
| + | |
| + | ## CURLINFO_EFFECTIVE_METHOD |
| + | |
| + | Last used HTTP method. See CURLINFO_EFFECTIVE_METHOD(3) |
| + | |
| + | ## CURLINFO_EFFECTIVE_URL |
| + | |
| + | Last used URL. See CURLINFO_EFFECTIVE_URL(3) |
| + | |
| + | ## CURLINFO_RESPONSE_CODE |
| + | |
| + | Last received response code. See CURLINFO_RESPONSE_CODE(3) |
| + | |
| + | ## CURLINFO_REFERER |
| + | |
| + | Referrer header. See CURLINFO_REFERER(3) |
| + | |
| + | ## CURLINFO_HTTP_CONNECTCODE |
| + | |
| + | Last proxy CONNECT response code. See CURLINFO_HTTP_CONNECTCODE(3) |
| + | |
| + | ## CURLINFO_HTTP_VERSION |
| + | |
| + | The http version used in the connection. See CURLINFO_HTTP_VERSION(3) |
| + | |
| + | ## CURLINFO_FILETIME |
| + | |
| + | Remote time of the retrieved document. See CURLINFO_FILETIME(3) |
| + | |
| + | ## CURLINFO_FILETIME_T |
| + | |
| + | Remote time of the retrieved document. See CURLINFO_FILETIME_T(3) |
| + | |
| + | ## CURLINFO_TOTAL_TIME |
| + | |
| + | Total time of previous transfer. See CURLINFO_TOTAL_TIME(3) |
| + | |
| + | ## CURLINFO_TOTAL_TIME_T |
| + | |
| + | Total time of previous transfer. See CURLINFO_TOTAL_TIME_T(3) |
| + | |
| + | ## CURLINFO_NAMELOOKUP_TIME |
| + | |
| + | Time from start until name resolving completed. See |
| + | CURLINFO_NAMELOOKUP_TIME(3) |
| + | |
| + | ## CURLINFO_NAMELOOKUP_TIME_T |
| + | |
| + | Time from start until name resolving completed. See |
| + | CURLINFO_NAMELOOKUP_TIME_T(3) |
| + | |
| + | ## CURLINFO_CONNECT_TIME |
| + | |
| + | Time from start until remote host or proxy completed. |
| + | See CURLINFO_CONNECT_TIME(3) |
| + | |
| + | ## CURLINFO_CONNECT_TIME_T |
| + | |
| + | Time from start until remote host or proxy completed. |
| + | See CURLINFO_CONNECT_TIME_T(3) |
| + | |
| + | ## CURLINFO_APPCONNECT_TIME |
| + | |
| + | Time from start until SSL/SSH handshake completed. |
| + | See CURLINFO_APPCONNECT_TIME(3) |
| + | |
| + | ## CURLINFO_APPCONNECT_TIME_T |
| + | |
| + | Time from start until SSL/SSH handshake completed. |
| + | See CURLINFO_APPCONNECT_TIME_T(3) |
| + | |
| + | ## CURLINFO_PRETRANSFER_TIME |
| + | |
| + | Time from start until just before the transfer begins. |
| + | See CURLINFO_PRETRANSFER_TIME(3) |
| + | |
| + | ## CURLINFO_PRETRANSFER_TIME_T |
| + | |
| + | Time from start until just before the transfer begins. |
| + | See CURLINFO_PRETRANSFER_TIME_T(3) |
| + | |
| + | ## CURLINFO_QUEUE_TIME_T |
| + | |
| + | Time during which this transfer was held in a waiting queue. |
| + | See CURLINFO_QUEUE_TIME_T(3) |
| + | |
| + | ## CURLINFO_STARTTRANSFER_TIME |
| + | |
| + | Time from start until just when the first byte is received. |
| + | See CURLINFO_STARTTRANSFER_TIME(3) |
| + | |
| + | ## CURLINFO_STARTTRANSFER_TIME_T |
| + | |
| + | Time from start until just when the first byte is received. |
| + | See CURLINFO_STARTTRANSFER_TIME_T(3) |
| + | |
| + | ## CURLINFO_REDIRECT_TIME |
| + | |
| + | Time taken for all redirect steps before the final transfer. |
| + | See CURLINFO_REDIRECT_TIME(3) |
| + | |
| + | ## CURLINFO_REDIRECT_TIME_T |
| + | |
| + | Time taken for all redirect steps before the final transfer. |
| + | See CURLINFO_REDIRECT_TIME_T(3) |
| + | |
| + | ## CURLINFO_REDIRECT_COUNT |
| + | |
| + | Total number of redirects that were followed. |
| + | See CURLINFO_REDIRECT_COUNT(3) |
| + | |
| + | ## CURLINFO_REDIRECT_URL |
| + | |
| + | URL a redirect would take you to, had you enabled redirects. |
| + | See CURLINFO_REDIRECT_URL(3) |
| + | |
| + | ## CURLINFO_SIZE_UPLOAD |
| + | |
| + | (Deprecated) Number of bytes uploaded. |
| + | See CURLINFO_SIZE_UPLOAD(3) |
| + | |
| + | ## CURLINFO_SIZE_UPLOAD_T |
| + | |
| + | Number of bytes uploaded. |
| + | See CURLINFO_SIZE_UPLOAD_T(3) |
| + | |
| + | ## CURLINFO_SIZE_DOWNLOAD |
| + | |
| + | (Deprecated) Number of bytes downloaded. |
| + | See CURLINFO_SIZE_DOWNLOAD(3) |
| + | |
| + | ## CURLINFO_SIZE_DOWNLOAD_T |
| + | |
| + | Number of bytes downloaded. |
| + | See CURLINFO_SIZE_DOWNLOAD_T(3) |
| + | |
| + | ## CURLINFO_SPEED_DOWNLOAD |
| + | |
| + | (Deprecated) Average download speed. |
| + | See CURLINFO_SPEED_DOWNLOAD(3) |
| + | |
| + | ## CURLINFO_SPEED_DOWNLOAD_T |
| + | |
| + | Average download speed. |
| + | See CURLINFO_SPEED_DOWNLOAD_T(3) |
| + | |
| + | ## CURLINFO_SPEED_UPLOAD |
| + | |
| + | (Deprecated) Average upload speed. |
| + | See CURLINFO_SPEED_UPLOAD(3) |
| + | |
| + | ## CURLINFO_SPEED_UPLOAD_T |
| + | |
| + | Average upload speed. |
| + | See CURLINFO_SPEED_UPLOAD_T(3) |
| + | |
| + | ## CURLINFO_HEADER_SIZE |
| + | |
| + | Number of bytes of all headers received. |
| + | See CURLINFO_HEADER_SIZE(3) |
| + | |
| + | ## CURLINFO_REQUEST_SIZE |
| + | |
| + | Number of bytes sent in the issued HTTP requests. |
| + | See CURLINFO_REQUEST_SIZE(3) |
| + | |
| + | ## CURLINFO_SSL_VERIFYRESULT |
| + | |
| + | Certificate verification result. |
| + | See CURLINFO_SSL_VERIFYRESULT(3) |
| + | |
| + | ## CURLINFO_PROXY_ERROR |
| + | |
| + | Detailed proxy error. |
| + | See CURLINFO_PROXY_ERROR(3) |
| + | |
| + | ## CURLINFO_PROXY_SSL_VERIFYRESULT |
| + | |
| + | Proxy certificate verification result. |
| + | See CURLINFO_PROXY_SSL_VERIFYRESULT(3) |
| + | |
| + | ## CURLINFO_SSL_ENGINES |
| + | |
| + | A list of OpenSSL crypto engines. |
| + | See CURLINFO_SSL_ENGINES(3) |
| + | |
| + | ## CURLINFO_CONTENT_LENGTH_DOWNLOAD |
| + | |
| + | (Deprecated) Content length from the Content-Length header. |
| + | See CURLINFO_CONTENT_LENGTH_DOWNLOAD(3) |
| + | |
| + | ## CURLINFO_CONTENT_LENGTH_DOWNLOAD_T |
| + | |
| + | Content length from the Content-Length header. |
| + | See CURLINFO_CONTENT_LENGTH_DOWNLOAD_T(3) |
| + | |
| + | ## CURLINFO_CONTENT_LENGTH_UPLOAD |
| + | |
| + | (Deprecated) Upload size. See CURLINFO_CONTENT_LENGTH_UPLOAD(3) |
| + | |
| + | ## CURLINFO_CONTENT_LENGTH_UPLOAD_T |
| + | |
| + | Upload size. See CURLINFO_CONTENT_LENGTH_UPLOAD_T(3) |
| + | |
| + | ## CURLINFO_CONTENT_TYPE |
| + | |
| + | Content type from the Content-Type header. |
| + | See CURLINFO_CONTENT_TYPE(3) |
| + | |
| + | ## CURLINFO_RETRY_AFTER |
| + | |
| + | The value from the Retry-After header. |
| + | See CURLINFO_RETRY_AFTER(3) |
| + | |
| + | ## CURLINFO_PRIVATE |
| + | |
| + | User's private data pointer. |
| + | See CURLINFO_PRIVATE(3) |
| + | |
| + | ## CURLINFO_HTTPAUTH_AVAIL |
| + | |
| + | Available HTTP authentication methods. |
| + | See CURLINFO_HTTPAUTH_AVAIL(3) |
| + | |
| + | ## CURLINFO_PROXYAUTH_AVAIL |
| + | |
| + | Available HTTP proxy authentication methods. |
| + | See CURLINFO_PROXYAUTH_AVAIL(3) |
| + | |
| + | ## CURLINFO_OS_ERRNO |
| + | |
| + | The errno from the last failure to connect. |
| + | See CURLINFO_OS_ERRNO(3) |
| + | |
| + | ## CURLINFO_NUM_CONNECTS |
| + | |
| + | Number of new successful connections used for previous transfer. |
| + | See CURLINFO_NUM_CONNECTS(3) |
| + | |
| + | ## CURLINFO_PRIMARY_IP |
| + | |
| + | Destination IP address of the last connection. |
| + | See CURLINFO_PRIMARY_IP(3) |
| + | |
| + | ## CURLINFO_PRIMARY_PORT |
| + | |
| + | Destination port of the last connection. |
| + | See CURLINFO_PRIMARY_PORT(3) |
| + | |
| + | ## CURLINFO_LOCAL_IP |
| + | |
| + | Source IP address of the last connection. |
| + | See CURLINFO_LOCAL_IP(3) |
| + | |
| + | ## CURLINFO_LOCAL_PORT |
| + | |
| + | Source port number of the last connection. |
| + | See CURLINFO_LOCAL_PORT(3) |
| + | |
| + | ## CURLINFO_COOKIELIST |
| + | |
| + | List of all known cookies. |
| + | See CURLINFO_COOKIELIST(3) |
| + | |
| + | ## CURLINFO_LASTSOCKET |
| + | |
| + | (Deprecated) Last socket used. |
| + | See CURLINFO_LASTSOCKET(3) |
| + | |
| + | ## CURLINFO_ACTIVESOCKET |
| + | |
| + | The session's active socket. |
| + | See CURLINFO_ACTIVESOCKET(3) |
| + | |
| + | ## CURLINFO_FTP_ENTRY_PATH |
| + | |
| + | The entry path after logging in to an FTP server. |
| + | See CURLINFO_FTP_ENTRY_PATH(3) |
| + | |
| + | ## CURLINFO_CAPATH |
| + | |
| + | Get the default value for CURLOPT_CAPATH(3). |
| + | See CURLINFO_CAPATH(3) |
| + | |
| + | ## CURLINFO_CAINFO |
| + | |
| + | Get the default value for CURLOPT_CAINFO(3). |
| + | See CURLINFO_CAINFO(3) |
| + | |
| + | ## CURLINFO_CERTINFO |
| + | |
| + | Certificate chain. |
| + | See CURLINFO_CERTINFO(3) |
| + | |
| + | ## CURLINFO_TLS_SSL_PTR |
| + | |
| + | TLS session info that can be used for further processing. |
| + | See CURLINFO_TLS_SSL_PTR(3) |
| + | |
| + | ## CURLINFO_TLS_SESSION |
| + | |
| + | TLS session info that can be used for further processing. See |
| + | CURLINFO_TLS_SESSION(3). Deprecated option, use |
| + | CURLINFO_TLS_SSL_PTR(3) instead! |
| + | |
| + | ## CURLINFO_CONDITION_UNMET |
| + | |
| + | Whether or not a time conditional was met or 304 HTTP response. |
| + | See CURLINFO_CONDITION_UNMET(3) |
| + | |
| + | ## CURLINFO_RTSP_SESSION_ID |
| + | |
| + | RTSP session ID. |
| + | See CURLINFO_RTSP_SESSION_ID(3) |
| + | |
| + | ## CURLINFO_RTSP_CLIENT_CSEQ |
| + | |
| + | The RTSP client CSeq that is expected next. |
| + | See CURLINFO_RTSP_CLIENT_CSEQ(3) |
| + | |
| + | ## CURLINFO_RTSP_SERVER_CSEQ |
| + | |
| + | The RTSP server CSeq that is expected next. |
| + | See CURLINFO_RTSP_SERVER_CSEQ(3) |
| + | |
| + | ## CURLINFO_RTSP_CSEQ_RECV |
| + | |
| + | RTSP CSeq last received. |
| + | See CURLINFO_RTSP_CSEQ_RECV(3) |
| + | |
| + | ## CURLINFO_PROTOCOL |
| + | |
| + | (Deprecated) The protocol used for the connection. (Added in 7.52.0) |
| + | See CURLINFO_PROTOCOL(3) |
| + | |
| + | ## CURLINFO_SCHEME |
| + | |
| + | The scheme used for the connection. (Added in 7.52.0) |
| + | See CURLINFO_SCHEME(3) |
| + | |
| + | ## CURLINFO_CONN_ID |
| + | |
| + | The ID of the last connection used by the transfer. (Added in 8.2.0) |
| + | See CURLINFO_CONN_ID(3) |
| + | |
| + | ## CURLINFO_XFER_ID |
| + | |
| + | The ID of the transfer. (Added in 8.2.0) |
| + | See CURLINFO_XFER_ID(3) |
| + | |
| + | # TIMES |
| + | |
| + | An overview of the time values available from curl_easy_getinfo(3) |
| + | |
| + | ~~~ |
| + | curl_easy_perform() |
| + | | |
| + | |--QUEUE_TIME |
| + | |--|--NAMELOOKUP |
| + | |--|--|--CONNECT |
| + | |--|--|--|--APPCONNECT |
| + | |--|--|--|--|--PRETRANSFER |
| + | |--|--|--|--|--|--STARTTRANSFER |
| + | |--|--|--|--|--|--|--TOTAL |
| + | |--|--|--|--|--|--|--REDIRECT |
| + | ~~~ |
| + | |
| + | ## QUEUE_TIME |
| + | |
| + | CURLINFO_QUEUE_TIME_T(3). The time during which the transfer was held in a |
| + | waiting queue before it could start for real. (Added in 8.6.0) |
| + | |
| + | ## NAMELOOKUP |
| + | |
| + | CURLINFO_NAMELOOKUP_TIME(3) and CURLINFO_NAMELOOKUP_TIME_T(3). The time it |
| + | took from the start until the name resolving was completed. |
| + | |
| + | ## CONNECT |
| + | |
| + | CURLINFO_CONNECT_TIME(3) and CURLINFO_CONNECT_TIME_T(3). The time it took from |
| + | the start until the connect to the remote host (or proxy) was completed. |
| + | |
| + | ## APPCONNECT |
| + | |
| + | CURLINFO_APPCONNECT_TIME(3) and CURLINFO_APPCONNECT_TIME_T(3). The time it |
| + | took from the start until the SSL connect/handshake with the remote host was |
| + | completed. (Added in 7.19.0) The latter is the integer version (measuring |
| + | microseconds). (Added in 7.60.0) |
| + | |
| + | ## PRETRANSFER |
| + | |
| + | CURLINFO_PRETRANSFER_TIME(3) and CURLINFO_PRETRANSFER_TIME_T(3). The time it |
| + | took from the start until the file transfer is just about to begin. This |
| + | includes all pre-transfer commands and negotiations that are specific to the |
| + | particular protocol(s) involved. |
| + | |
| + | ## STARTTRANSFER |
| + | |
| + | CURLINFO_STARTTRANSFER_TIME(3) and CURLINFO_STARTTRANSFER_TIME_T(3). The time |
| + | it took from the start until the first byte is received by libcurl. |
| + | |
| + | ## TOTAL |
| + | |
| + | CURLINFO_TOTAL_TIME(3) and CURLINFO_TOTAL_TIME_T(3). Total time |
| + | of the previous request. |
| + | |
| + | ## REDIRECT |
| + | |
| + | CURLINFO_REDIRECT_TIME(3) and CURLINFO_REDIRECT_TIME_T(3). The time it took |
| + | for all redirection steps include name lookup, connect, pretransfer and |
| + | transfer before final transaction was started. So, this is zero if no |
| + | redirection took place. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/"); |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(CURLE_OK == res) { |
| + | char *ct; |
| + | /* ask for the content-type */ |
| + | res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct); |
| + | |
| + | if((CURLE_OK == res) && ct) |
| + | printf("We received Content-Type: %s\n", ct); |
| + | } |
| + | |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.4.1 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | If the operation was successful, CURLE_OK is returned. Otherwise an |
| + | appropriate error code is returned. |
| @@ -1,31 +1,24 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_easy_header 3 "13 March 2022" "libcurl" "libcurl" |
| - | .SH NAME |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_header |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_CONTENT_TYPE (3) |
| + | - CURLOPT_HEADERFUNCTION (3) |
| + | - curl_easy_nextheader (3) |
| + | - curl_easy_perform (3) |
| + | - libcurl-errors (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| curl_easy_header - get an HTTP header | |
| - | .SH SYNOPSIS |
| - | .nf |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| CURLHcode curl_easy_header(CURL *easy, | |
| @@ -34,24 +27,26 @@ CURLHcode curl_easy_header(CURL *easy, | |
| unsigned int origin, | |
| int request, | |
| struct curl_header **hout); | |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_easy_header(3)\fP returns a pointer to a "curl_header" struct in |
| - | \fBhout\fP with data for the HTTP response header \fIname\fP. The case |
| - | insensitive null-terminated header name should be specified without colon. |
| - | |
| - | \fIindex\fP 0 means asking for the first instance of the header. If the |
| - | returned header struct has \fBamount\fP set larger than 1, it means there are |
| - | more instances of the same header name available to get. Asking for a too big |
| - | index makes \fBCURLHE_BADINDEX\fP get returned. |
| - | |
| - | The \fIorigin\fP argument is for specifying which headers to receive, as a |
| - | single HTTP transfer might provide headers from several different places and |
| - | they may then have different importance to the user and headers using the same |
| - | name might be used. The \fIorigin\fP is a bitmask for what header sources you |
| - | want. See the descriptions below. |
| - | |
| - | The \fIrequest\fP argument tells libcurl from which request you want headers |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_easy_header(3) returns a pointer to a "curl_header" struct in **hout** |
| + | with data for the HTTP response header *name*. The case insensitive |
| + | null-terminated header name should be specified without colon. |
| + | |
| + | *index* 0 means asking for the first instance of the header. If the returned |
| + | header struct has **amount** set larger than 1, it means there are more |
| + | instances of the same header name available to get. Asking for a too big index |
| + | makes **CURLHE_BADINDEX** get returned. |
| + | |
| + | The *origin* argument is for specifying which headers to receive, as a single |
| + | HTTP transfer might provide headers from several different places and they may |
| + | then have different importance to the user and headers using the same name |
| + | might be used. The *origin* is a bitmask for what header sources you want. See |
| + | the descriptions below. |
| + | |
| + | The *request* argument tells libcurl from which request you want headers |
| from. A single transfer might consist of a series of HTTP requests and this | |
| argument lets you specify which particular individual request you want the | |
| headers from. 0 being the first request and then the number increases for | |
| @@ -66,10 +61,10 @@ second, then only the first one is provided. An application using this API | |
| does not have to bother about multiple headers used wrongly. | |
| The memory for the returned struct is associated with the easy handle and | |
| - | subsequent calls to \fIcurl_easy_header(3)\fP clobber the struct used in the |
| + | subsequent calls to curl_easy_header(3) clobber the struct used in the |
| previous calls for the same easy handle. Applications need to copy the data if | |
| it wants to keep it around. The memory used for the struct gets freed with | |
| - | calling \fIcurl_easy_cleanup(3)\fP of the easy handle. |
| + | calling curl_easy_cleanup(3) of the easy handle. |
| The first line in an HTTP response is called the status line. It is not | |
| considered a header by this function. Headers are the "name: value" lines | |
| @@ -78,8 +73,10 @@ following the status. | |
| This function can be used before (all) headers have been received and is fine | |
| to call from within libcurl callbacks. It returns the state of the headers at | |
| the time it is called. | |
| - | .SH "The header struct" |
| - | .nf |
| + | |
| + | # The header struct |
| + | |
| + | ~~~c |
| struct curl_header { | |
| char *name; | |
| char *value; | |
| @@ -88,45 +85,58 @@ struct curl_header { | |
| unsigned int origin; | |
| void *anchor; | |
| }; | |
| - | .fi |
| + | ~~~ |
| - | The data \fBname\fP field points to, is the same as the requested name, but |
| + | The data **name** field points to, is the same as the requested name, but |
| might have a different case. | |
| - | The data \fBvalue\fP field points to, comes exactly as delivered over the |
| + | The data **value** field points to, comes exactly as delivered over the |
| network but with leading and trailing whitespace and newlines stripped | |
| off. The `value` data is null-terminated. For legacy HTTP/1 "folded headers", | |
| this API provides the full single value in an unfolded manner with a single | |
| whitespace between the lines. | |
| - | \fBamount\fP is how many headers using this name that exist, within the origin |
| + | **amount** is how many headers using this name that exist, within the origin |
| and request scope asked for. | |
| - | \fBindex\fP is the zero based entry number of this particular header, which in |
| + | **index** is the zero based entry number of this particular header, which in |
| case this header was used more than once in the requested scope can be larger | |
| - | than 0 but is always less than \fBamount\fP. |
| + | than 0 but is always less than **amount**. |
| - | The \fBorigin\fP field in the "curl_header" struct has one of the origin bits |
| + | The **origin** field in the "curl_header" struct has one of the origin bits |
| set, indicating where from the header originates. At the time of this writing, | |
| there are 5 bits with defined use. The undocumented 27 remaining bits are | |
| reserved for future use and must not be assumed to have any particular value. | |
| - | \fBanchor\fP is a private handle used by libcurl internals. Do not modify. |
| - | .SH ORIGINS |
| - | .IP CURLH_HEADER |
| + | **anchor** is a private handle used by libcurl internals. Do not modify. |
| + | |
| + | # ORIGINS |
| + | |
| + | ## CURLH_HEADER |
| + | |
| The header arrived as a header from the server. | |
| - | .IP CURLH_TRAILER |
| + | |
| + | ## CURLH_TRAILER |
| + | |
| The header arrived as a trailer. A header that arrives after the body. | |
| - | .IP CURLH_CONNECT |
| + | |
| + | ## CURLH_CONNECT |
| + | |
| The header arrived in a CONNECT response. A CONNECT request is being done to | |
| setup a transfer "through" an HTTP(S) proxy. | |
| - | .IP CURLH_1XX |
| + | |
| + | ## CURLH_1XX |
| + | |
| The header arrived in an HTTP 1xx response. A 1xx response is an "intermediate" | |
| response that might happen before the "real" response. | |
| - | .IP CURLH_PSEUDO |
| + | |
| + | ## CURLH_PSEUDO |
| + | |
| The header is an HTTP/2 or HTTP/3 pseudo header | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| int main(void) | |
| { | |
| struct curl_header *type; | |
| @@ -139,14 +149,12 @@ int main(void) | |
| curl_easy_cleanup(curl); | |
| } | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| Added in 7.83.0. Officially supported since 7.84.0. | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| This function returns a CURLHcode indicating success or error. | |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_nextheader (3), |
| - | .BR curl_easy_perform (3), |
| - | .BR CURLINFO_CONTENT_TYPE (3), |
| - | .BR CURLOPT_HEADERFUNCTION (3), |
| - | .BR libcurl-errors (3) |
| @@ -1,82 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_easy_init 3 "4 March 2002" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_easy_init - Start a libcurl easy session |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURL *curl_easy_init(); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function allocates and returns a CURL easy handle. Such a handle is used |
| - | as input to other functions in the easy interface. This call must have a |
| - | corresponding call to \fIcurl_easy_cleanup(3)\fP when the operation is |
| - | complete. |
| - | |
| - | The easy handle is used to hold and control a single network transfer. It is |
| - | encouraged to reuse easy handles for repeated transfers. |
| - | |
| - | An alternative way to get a new easy handle is to duplicate an already |
| - | existing one with \fIcurl_easy_duphandle(3)\fP, which has the upside that it |
| - | gets all the options that were set in the source handle set in the new copy as |
| - | well. |
| - | |
| - | If you did not already call \fIcurl_global_init(3)\fP before calling this |
| - | function, \fIcurl_easy_init(3)\fP does it automatically. This may be lethal in |
| - | multi-threaded cases, if \fIcurl_global_init(3)\fP is not thread-safe in your |
| - | system, and it may then result in resource problems because there is no |
| - | corresponding cleanup. |
| - | |
| - | You are strongly advised to not allow this automatic behavior, by calling |
| - | \fIcurl_global_init(3)\fP yourself properly. See the description in |
| - | \fBlibcurl\fP(3) of global environment requirements for details of how to use |
| - | this function. |
| - | |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Always |
| - | .SH RETURN VALUE |
| - | If this function returns NULL, something went wrong and you cannot use the |
| - | other curl functions. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_cleanup (3), |
| - | .BR curl_easy_duphandle (3), |
| - | .BR curl_easy_perform (3), |
| - | .BR curl_easy_reset (3), |
| - | .BR curl_global_init (3), |
| - | .BR curl_multi_init (3) |
| @@ -0,0 +1,73 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_init |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_cleanup (3) |
| + | - curl_easy_duphandle (3) |
| + | - curl_easy_perform (3) |
| + | - curl_easy_reset (3) |
| + | - curl_global_init (3) |
| + | - curl_multi_init (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_easy_init - Start a libcurl easy session |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURL *curl_easy_init(); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function allocates and returns a CURL easy handle. Such a handle is used |
| + | as input to other functions in the easy interface. This call must have a |
| + | corresponding call to curl_easy_cleanup(3) when the operation is complete. |
| + | |
| + | The easy handle is used to hold and control a single network transfer. It is |
| + | encouraged to reuse easy handles for repeated transfers. |
| + | |
| + | An alternative way to get a new easy handle is to duplicate an already |
| + | existing one with curl_easy_duphandle(3), which has the upside that it gets |
| + | all the options that were set in the source handle set in the new copy as |
| + | well. |
| + | |
| + | If you did not already call curl_global_init(3) before calling this function, |
| + | curl_easy_init(3) does it automatically. This may be lethal in multi-threaded |
| + | cases, if curl_global_init(3) is not thread-safe in your system, and it may |
| + | then result in resource problems because there is no corresponding cleanup. |
| + | |
| + | You are strongly advised to not allow this automatic behavior, by calling |
| + | curl_global_init(3) yourself properly. See the description in libcurl(3) of |
| + | global environment requirements for details of how to use this function. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Always |
| + | |
| + | # RETURN VALUE |
| + | |
| + | If this function returns NULL, something went wrong and you cannot use the |
| + | other curl functions. |
| @@ -1,106 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_easy_nextheader 3 "13 March 2022" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_easy_nextheader - get the next HTTP header |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | struct curl_header *curl_easy_nextheader(CURL *easy, |
| - | unsigned int origin, |
| - | int request, |
| - | struct curl_header *prev); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function lets an application iterate over all previously received HTTP |
| - | headers. |
| - | |
| - | The \fIorigin\fP argument is for specifying which headers to receive, as a |
| - | single HTTP transfer might provide headers from several different places and |
| - | they may then have different importance to the user and headers using the same |
| - | name might be used. The \fIorigin\fP is a bitmask for what header sources you |
| - | want. See the \fIcurl_easy_header(3)\fP man page for the origin descriptions. |
| - | |
| - | The \fIrequest\fP argument tells libcurl from which request you want headers |
| - | from. A single transfer might consist of a series of HTTP requests and this |
| - | argument lets you specify which particular individual request you want the |
| - | headers from. 0 being the first request and then the number increases for |
| - | further redirects or when multi-state authentication is used. Passing in -1 is |
| - | a shortcut to "the last" request in the series, independently of the actual |
| - | amount of requests used. |
| - | |
| - | It is suggested that you pass in the same \fBorigin\fP and \fBrequest\fP when |
| - | iterating over a range of headers as changing the value mid-loop might give |
| - | you unexpected results. |
| - | |
| - | If \fIprev\fP is NULL, this function returns a pointer to the first header |
| - | stored within the given scope (origin + request). |
| - | |
| - | If \fIprev\fP is a pointer to a previously returned header struct, |
| - | \fIcurl_easy_nextheader(3)\fP returns a pointer the next header stored within |
| - | the given scope. This way, an application can iterate over all available |
| - | headers. |
| - | |
| - | The memory for the struct this points to, is owned and managed by libcurl and |
| - | is associated with the easy handle. Applications must copy the data if they |
| - | want it to survive subsequent API calls or the life-time of the easy handle. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | struct curl_header *prev = NULL; |
| - | struct curl_header *h; |
| - | |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | curl_easy_perform(curl); |
| - | |
| - | /* extract the normal headers from the first request */ |
| - | while((h = curl_easy_nextheader(curl, CURLH_HEADER, 0, prev))) { |
| - | printf("%s: %s\\n", h->name, h->value); |
| - | prev = h; |
| - | } |
| - | |
| - | /* extract the normal headers + 1xx + trailers from the last request */ |
| - | unsigned int origin = CURLH_HEADER| CURLH_1XX | CURLH_TRAILER; |
| - | while((h = curl_easy_nextheader(curl, origin, -1, prev))) { |
| - | printf("%s: %s\\n", h->name, h->value); |
| - | prev = h; |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.83.0. Officially supported since 7.84.0. |
| - | .SH RETURN VALUE |
| - | This function returns the next header, or NULL when there are no more |
| - | (matching) headers or an error occurred. |
| - | |
| - | If this function returns NULL when \fIprev\fP was set to NULL, then there are |
| - | no headers available within the scope to return. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_header (3), |
| - | .BR curl_easy_perform (3) |
| @@ -0,0 +1,100 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_nextheader |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_header (3) |
| + | - curl_easy_perform (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_easy_nextheader - get the next HTTP header |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | struct curl_header *curl_easy_nextheader(CURL *easy, |
| + | unsigned int origin, |
| + | int request, |
| + | struct curl_header *prev); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function lets an application iterate over all previously received HTTP |
| + | headers. |
| + | |
| + | The *origin* argument is for specifying which headers to receive, as a single |
| + | HTTP transfer might provide headers from several different places and they may |
| + | then have different importance to the user and headers using the same name |
| + | might be used. The *origin* is a bitmask for what header sources you want. See |
| + | the curl_easy_header(3) man page for the origin descriptions. |
| + | |
| + | The *request* argument tells libcurl from which request you want headers |
| + | from. A single transfer might consist of a series of HTTP requests and this |
| + | argument lets you specify which particular individual request you want the |
| + | headers from. 0 being the first request and then the number increases for |
| + | further redirects or when multi-state authentication is used. Passing in -1 is |
| + | a shortcut to "the last" request in the series, independently of the actual |
| + | amount of requests used. |
| + | |
| + | It is suggested that you pass in the same **origin** and **request** when |
| + | iterating over a range of headers as changing the value mid-loop might give |
| + | you unexpected results. |
| + | |
| + | If *prev* is NULL, this function returns a pointer to the first header stored |
| + | within the given scope (origin + request). |
| + | |
| + | If *prev* is a pointer to a previously returned header struct, |
| + | curl_easy_nextheader(3) returns a pointer the next header stored within the |
| + | given scope. This way, an application can iterate over all available headers. |
| + | |
| + | The memory for the struct this points to, is owned and managed by libcurl and |
| + | is associated with the easy handle. Applications must copy the data if they |
| + | want it to survive subsequent API calls or the life-time of the easy handle. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | struct curl_header *prev = NULL; |
| + | struct curl_header *h; |
| + | |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | curl_easy_perform(curl); |
| + | |
| + | /* extract the normal headers from the first request */ |
| + | while((h = curl_easy_nextheader(curl, CURLH_HEADER, 0, prev))) { |
| + | printf("%s: %s\n", h->name, h->value); |
| + | prev = h; |
| + | } |
| + | |
| + | /* extract the normal headers + 1xx + trailers from the last request */ |
| + | unsigned int origin = CURLH_HEADER| CURLH_1XX | CURLH_TRAILER; |
| + | while((h = curl_easy_nextheader(curl, origin, -1, prev))) { |
| + | printf("%s: %s\n", h->name, h->value); |
| + | prev = h; |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.83.0. Officially supported since 7.84.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | This function returns the next header, or NULL when there are no more |
| + | (matching) headers or an error occurred. |
| + | |
| + | If this function returns NULL when *prev* was set to NULL, then there are no |
| + | headers available within the scope to return. |
| @@ -1,59 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_easy_option_by_id 3 "27 Aug 2020" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_easy_option_by_id - find an easy setopt option by id |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | const struct curl_easyoption *curl_easy_option_by_id(CURLoption id); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Given a \fICURLoption\fP \fBid\fP, this function returns a pointer to the |
| - | \fIcurl_easyoption\fP struct, holding information about the |
| - | \fIcurl_easy_setopt(3)\fP option using that id. The option id is the CURLOPT_ |
| - | prefix ones provided in the standard curl/curl.h header file. This function |
| - | returns the non-alias version of the cases where there is an alias function as |
| - | well. |
| - | |
| - | If libcurl has no option with the given id, this function returns NULL. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | const struct curl_easyoption *opt = curl_easy_option_by_id(CURLOPT_URL); |
| - | if(opt) { |
| - | printf("This option wants type %x\\n", opt->type); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This function was added in libcurl 7.73.0 |
| - | .SH RETURN VALUE |
| - | A pointer to the \fIcurl_easyoption\fP struct for the option or NULL. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_option_by_name (3), |
| - | .BR curl_easy_option_next (3), |
| - | .BR curl_easy_setopt (3) |
| @@ -0,0 +1,54 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_option_by_id |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_option_by_name (3) |
| + | - curl_easy_option_next (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_easy_option_by_id - find an easy setopt option by id |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | const struct curl_easyoption *curl_easy_option_by_id(CURLoption id); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Given a *CURLoption* **id**, this function returns a pointer to the |
| + | *curl_easyoption* struct, holding information about the |
| + | curl_easy_setopt(3) option using that id. The option id is the CURLOPT_ |
| + | prefix ones provided in the standard curl/curl.h header file. This function |
| + | returns the non-alias version of the cases where there is an alias function as |
| + | well. |
| + | |
| + | If libcurl has no option with the given id, this function returns NULL. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | const struct curl_easyoption *opt = curl_easy_option_by_id(CURLOPT_URL); |
| + | if(opt) { |
| + | printf("This option wants type %x\n", opt->type); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This function was added in libcurl 7.73.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | A pointer to the *curl_easyoption* struct for the option or NULL. |
| @@ -1,58 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_easy_option_by_name 3 "27 Aug 2020" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_easy_option_by_name - find an easy setopt option by name |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | const struct curl_easyoption *curl_easy_option_by_name(const char *name); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Given a \fBname\fP, this function returns a pointer to the |
| - | \fIcurl_easyoption\fP struct, holding information about the |
| - | \fIcurl_easy_setopt(3)\fP option using that name. The name should be specified |
| - | without the "CURLOPT_" prefix and the name comparison is made case |
| - | insensitive. |
| - | |
| - | If libcurl has no option with the given name, this function returns NULL. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | const struct curl_easyoption *opt = curl_easy_option_by_name("URL"); |
| - | if(opt) { |
| - | printf("This option wants CURLoption %x\\n", (int)opt->id); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This function was added in libcurl 7.73.0 |
| - | .SH RETURN VALUE |
| - | A pointer to the \fIcurl_easyoption\fP struct for the option or NULL. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_option_by_id (3), |
| - | .BR curl_easy_option_next (3), |
| - | .BR curl_easy_setopt (3) |
| @@ -0,0 +1,53 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_option_by_name |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_option_by_id (3) |
| + | - curl_easy_option_next (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_easy_option_by_name - find an easy setopt option by name |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | const struct curl_easyoption *curl_easy_option_by_name(const char *name); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Given a **name**, this function returns a pointer to the |
| + | *curl_easyoption* struct, holding information about the |
| + | curl_easy_setopt(3) option using that name. The name should be specified |
| + | without the "CURLOPT_" prefix and the name comparison is made case |
| + | insensitive. |
| + | |
| + | If libcurl has no option with the given name, this function returns NULL. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | const struct curl_easyoption *opt = curl_easy_option_by_name("URL"); |
| + | if(opt) { |
| + | printf("This option wants CURLoption %x\n", (int)opt->id); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This function was added in libcurl 7.73.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | A pointer to the *curl_easyoption* struct for the option or NULL. |
| @@ -1,92 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_easy_option_next 3 "27 Aug 2020" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_easy_option_next - iterate over easy setopt options |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | const struct curl_easyoption * |
| - | curl_easy_option_next(const struct curl_easyoption *prev); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function returns a pointer to the first or the next \fIcurl_easyoption\fP |
| - | struct, providing an ability to iterate over all known options for |
| - | \fIcurl_easy_setopt(3)\fP in this instance of libcurl. |
| - | |
| - | Pass a \fBNULL\fP argument as \fBprev\fP to get the first option returned, or |
| - | pass in the current option to get the next one returned. If there is no more |
| - | option to return, \fIcurl_easy_option_next(3)\fP returns NULL. |
| - | |
| - | The options returned by this functions are the ones known to this libcurl and |
| - | information about what argument type they want. |
| - | |
| - | If the \fBCURLOT_FLAG_ALIAS\fP bit is set in the flags field, it means the |
| - | name is provided for backwards compatibility as an alias. |
| - | .SH struct |
| - | .nf |
| - | typedef enum { |
| - | CURLOT_LONG, /* long (a range of values) */ |
| - | CURLOT_VALUES, /* (a defined set or bitmask) */ |
| - | CURLOT_OFF_T, /* curl_off_t (a range of values) */ |
| - | CURLOT_OBJECT, /* pointer (void *) */ |
| - | CURLOT_STRING, /* (char * to null-terminated buffer) */ |
| - | CURLOT_SLIST, /* (struct curl_slist *) */ |
| - | CURLOT_CBPTR, /* (void * passed as-is to a callback) */ |
| - | CURLOT_BLOB, /* blob (struct curl_blob *) */ |
| - | CURLOT_FUNCTION /* function pointer */ |
| - | } curl_easytype; |
| - | |
| - | /* The CURLOPTTYPE_* id ranges can still be used to figure out what type/size |
| - | to use for curl_easy_setopt() for the given id */ |
| - | struct curl_easyoption { |
| - | const char *name; |
| - | CURLoption id; |
| - | curl_easytype type; |
| - | unsigned int flags; |
| - | }; |
| - | .fi |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | /* iterate over all available options */ |
| - | const struct curl_easyoption *opt; |
| - | opt = curl_easy_option_next(NULL); |
| - | while(opt) { |
| - | printf("Name: %s\\n", opt->name); |
| - | opt = curl_easy_option_next(opt); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This function was added in libcurl 7.73.0 |
| - | .SH RETURN VALUE |
| - | A pointer to the \fIcurl_easyoption\fP struct for the next option or NULL if |
| - | no more options. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_option_by_id (3), |
| - | .BR curl_easy_option_by_name (3), |
| - | .BR curl_easy_setopt (3) |
| @@ -0,0 +1,89 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_option_next |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_option_by_id (3) |
| + | - curl_easy_option_by_name (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_easy_option_next - iterate over easy setopt options |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | const struct curl_easyoption * |
| + | curl_easy_option_next(const struct curl_easyoption *prev); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function returns a pointer to the first or the next *curl_easyoption* |
| + | struct, providing an ability to iterate over all known options for |
| + | curl_easy_setopt(3) in this instance of libcurl. |
| + | |
| + | Pass a **NULL** argument as **prev** to get the first option returned, or |
| + | pass in the current option to get the next one returned. If there is no more |
| + | option to return, curl_easy_option_next(3) returns NULL. |
| + | |
| + | The options returned by this functions are the ones known to this libcurl and |
| + | information about what argument type they want. |
| + | |
| + | If the **CURLOT_FLAG_ALIAS** bit is set in the flags field, it means the |
| + | name is provided for backwards compatibility as an alias. |
| + | |
| + | # struct |
| + | |
| + | ~~~c |
| + | typedef enum { |
| + | CURLOT_LONG, /* long (a range of values) */ |
| + | CURLOT_VALUES, /* (a defined set or bitmask) */ |
| + | CURLOT_OFF_T, /* curl_off_t (a range of values) */ |
| + | CURLOT_OBJECT, /* pointer (void *) */ |
| + | CURLOT_STRING, /* (char * to null-terminated buffer) */ |
| + | CURLOT_SLIST, /* (struct curl_slist *) */ |
| + | CURLOT_CBPTR, /* (void * passed as-is to a callback) */ |
| + | CURLOT_BLOB, /* blob (struct curl_blob *) */ |
| + | CURLOT_FUNCTION /* function pointer */ |
| + | } curl_easytype; |
| + | |
| + | /* The CURLOPTTYPE_* id ranges can still be used to figure out what type/size |
| + | to use for curl_easy_setopt() for the given id */ |
| + | struct curl_easyoption { |
| + | const char *name; |
| + | CURLoption id; |
| + | curl_easytype type; |
| + | unsigned int flags; |
| + | }; |
| + | ~~~ |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | /* iterate over all available options */ |
| + | const struct curl_easyoption *opt; |
| + | opt = curl_easy_option_next(NULL); |
| + | while(opt) { |
| + | printf("Name: %s\n", opt->name); |
| + | opt = curl_easy_option_next(opt); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This function was added in libcurl 7.73.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | A pointer to the *curl_easyoption* struct for the next option or NULL if |
| + | no more options. |
| @@ -1,84 +1,88 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_easy_pause 3 "17 Dec 2007" "libcurl" "libcurl" |
| - | .SH NAME |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_pause |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_cleanup (3) |
| + | - curl_easy_reset (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| curl_easy_pause - pause and unpause a connection | |
| - | .SH SYNOPSIS |
| - | .nf |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| CURLcode curl_easy_pause(CURL *handle, int bitmask ); | |
| - | .fi |
| - | .SH DESCRIPTION |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| Using this function, you can explicitly mark a running connection to get | |
| paused, and you can unpause a connection that was previously paused. Unlike | |
| - | most other libcurl functions, \fIcurl_easy_pause(3)\fP can be used from within |
| + | most other libcurl functions, curl_easy_pause(3) can be used from within |
| callbacks. | |
| A connection can be paused by using this function or by letting the read or | |
| the write callbacks return the proper magic return code | |
| - | (\fICURL_READFUNC_PAUSE\fP and \fICURL_WRITEFUNC_PAUSE\fP). A write callback |
| + | (*CURL_READFUNC_PAUSE* and *CURL_WRITEFUNC_PAUSE*). A write callback |
| that returns pause signals to the library that it could not take care of any | |
| data at all, and that data is then delivered again to the callback when the | |
| transfer is unpaused. | |
| While it may feel tempting, take care and notice that you cannot call this | |
| function from another thread. To unpause, you may for example call it from the | |
| - | progress callback (\fICURLOPT_PROGRESSFUNCTION(3)\fP). |
| + | progress callback (CURLOPT_PROGRESSFUNCTION(3)). |
| When this function is called to unpause receiving, the write callback might | |
| get called before this function returns to deliver cached content. When | |
| libcurl delivers such cached data to the write callback, it is delivered as | |
| fast as possible, which may overstep the boundary set in | |
| - | \fICURLOPT_MAX_RECV_SPEED_LARGE(3)\fP etc. |
| + | CURLOPT_MAX_RECV_SPEED_LARGE(3) etc. |
| - | The \fBhandle\fP argument identifies the transfer you want to pause or |
| + | The **handle** argument identifies the transfer you want to pause or |
| unpause. | |
| A paused transfer is excluded from low speed cancels via the | |
| - | \fICURLOPT_LOW_SPEED_LIMIT(3)\fP option and unpausing a transfer resets the |
| + | CURLOPT_LOW_SPEED_LIMIT(3) option and unpausing a transfer resets the |
| time period required for the low speed limit to be met. | |
| - | The \fBbitmask\fP argument is a set of bits that sets the new state of the |
| + | The **bitmask** argument is a set of bits that sets the new state of the |
| connection. The following bits can be used: | |
| - | .IP CURLPAUSE_RECV |
| + | |
| + | ## CURLPAUSE_RECV |
| + | |
| Pause receiving data. There is no data received on this connection until this | |
| function is called again without this bit set. Thus, the write callback | |
| - | (\fICURLOPT_WRITEFUNCTION(3)\fP) is not called. |
| - | .IP CURLPAUSE_SEND |
| + | (CURLOPT_WRITEFUNCTION(3)) is not called. |
| + | |
| + | ## CURLPAUSE_SEND |
| + | |
| Pause sending data. There is no data sent on this connection until this | |
| function is called again without this bit set. Thus, the read callback | |
| - | (\fICURLOPT_READFUNCTION(3)\fP) is not called. |
| - | .IP CURLPAUSE_ALL |
| + | (CURLOPT_READFUNCTION(3)) is not called. |
| + | |
| + | ## CURLPAUSE_ALL |
| + | |
| Convenience define that pauses both directions. | |
| - | .IP CURLPAUSE_CONT |
| + | |
| + | ## CURLPAUSE_CONT |
| + | |
| Convenience define that unpauses both directions. | |
| - | .SH LIMITATIONS |
| + | |
| + | # LIMITATIONS |
| + | |
| The pausing of transfers does not work with protocols that work without | |
| network connectivity, like FILE://. Trying to pause such a transfer, in any | |
| direction, might cause problems or error. | |
| - | .SH MULTIPLEXED |
| + | |
| + | # MULTIPLEXED |
| + | |
| When a connection is used multiplexed, like for HTTP/2, and one of the | |
| transfers over the connection is paused and the others continue flowing, | |
| libcurl might end up buffering contents for the paused transfer. It has to do | |
| @@ -90,8 +94,10 @@ buffering 32 megabyte of data for a paused stream. | |
| When such a paused stream is unpaused again, any buffered data is delivered | |
| first. | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| int main(void) | |
| { | |
| CURL *curl = curl_easy_init(); | |
| @@ -101,8 +107,10 @@ int main(void) | |
| } | |
| } | |
| - | .fi |
| - | .SH "MEMORY USE" |
| + | ~~~ |
| + | |
| + | # MEMORY USE |
| + | |
| When pausing a download transfer by returning the magic return code from a | |
| write callback, the read data is already in libcurl's internal buffers so it | |
| has to keep it in an allocated buffer until the receiving is again unpaused | |
| @@ -113,19 +121,20 @@ automatically on download, libcurl continues to uncompress the entire | |
| downloaded chunk and it caches the data uncompressed. This has the side- | |
| effect that if you download something that is compressed a lot, it can result | |
| in a large data amount needing to be allocated to save the data during the | |
| - | pause. consider not using paused receiving if you allow libcurl to uncompress |
| + | pause. Consider not using paused receiving if you allow libcurl to uncompress |
| data automatically. | |
| If the download is done with HTTP/2 or HTTP/3, there is up to a stream window | |
| size worth of data that curl cannot stop but instead needs to cache while the | |
| transfer is paused. This means that if a window size of 64 MB is used, libcurl | |
| might end up having to cache 64 MB of data. | |
| - | .SH AVAILABILITY |
| + | |
| + | # AVAILABILITY |
| + | |
| Added in 7.18.0. | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| CURLE_OK (zero) means that the option was set properly, and a non-zero return | |
| code means something wrong occurred after the new state was set. See the | |
| - | \fIlibcurl-errors(3)\fP man page for the full list with descriptions. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_cleanup (3), |
| - | .BR curl_easy_reset (3) |
| + | libcurl-errors(3) man page for the full list with descriptions. |
| @@ -1,90 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_easy_perform 3 "5 Mar 2001" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_easy_perform - perform a blocking file transfer |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_perform(CURL *easy_handle); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_easy_perform(3)\fP performs a network transfer in a blocking manner |
| - | and returns when done, or earlier if it fails. For non-blocking behavior, see |
| - | \fIcurl_multi_perform(3)\fP. |
| - | |
| - | Invoke this function after \fIcurl_easy_init(3)\fP and all the |
| - | \fIcurl_easy_setopt(3)\fP calls are made, and it performs the transfer as |
| - | described in the options. It must be called with the same \fBeasy_handle\fP as |
| - | input as the \fIcurl_easy_init(3)\fP call returned. |
| - | |
| - | You can do any amount of calls to \fIcurl_easy_perform(3)\fP while using the |
| - | same \fBeasy_handle\fP. If you intend to transfer more than one file, you are |
| - | even encouraged to do so. libcurl attempts to reuse existing connections for |
| - | the following transfers, thus making the operations faster, less CPU intense |
| - | and using less network resources. You probably want to use |
| - | \fIcurl_easy_setopt(3)\fP between the invokes to set options for the following |
| - | \fIcurl_easy_perform(3)\fP call. |
| - | |
| - | You must never call this function simultaneously from two places using the |
| - | same \fBeasy_handle\fP. Let the function return first before invoking it |
| - | another time. If you want parallel transfers, you must use several curl |
| - | easy_handles. |
| - | |
| - | A network transfer moves data to a peer or from a peer. An application tells |
| - | libcurl how to receive data by setting the \fICURLOPT_WRITEFUNCTION(3)\fP and |
| - | \fICURLOPT_WRITEDATA(3)\fP options. To tell libcurl what data to send, there |
| - | are a few more alternatives but two common ones are |
| - | \fICURLOPT_READFUNCTION(3)\fP and \fICURLOPT_POSTFIELDS(3)\fP. |
| - | |
| - | While the \fBeasy_handle\fP is added to a multi handle, it cannot be used by |
| - | \fIcurl_easy_perform(3)\fP. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Always |
| - | .SH RETURN VALUE |
| - | CURLE_OK (0) means everything was OK, non-zero means an error occurred as |
| - | .I <curl/curl.h> |
| - | defines - see \fIlibcurl-errors(3)\fP. If the \fICURLOPT_ERRORBUFFER(3)\fP was |
| - | set with \fIcurl_easy_setopt(3)\fP there is a readable error message stored in |
| - | the error buffer when non-zero is returned. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_init (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR curl_multi_add_handle (3), |
| - | .BR curl_multi_perform (3), |
| - | .BR libcurl-errors (3) |
| @@ -0,0 +1,83 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_perform |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_init (3) |
| + | - curl_easy_setopt (3) |
| + | - curl_multi_add_handle (3) |
| + | - curl_multi_perform (3) |
| + | - libcurl-errors (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_easy_perform - perform a blocking file transfer |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_perform(CURL *easy_handle); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_easy_perform(3) performs a network transfer in a blocking manner and |
| + | returns when done, or earlier if it fails. For non-blocking behavior, see |
| + | curl_multi_perform(3). |
| + | |
| + | Invoke this function after curl_easy_init(3) and all the curl_easy_setopt(3) |
| + | calls are made, and it performs the transfer as described in the options. It |
| + | must be called with the same **easy_handle** as input as the curl_easy_init(3) |
| + | call returned. |
| + | |
| + | You can do any amount of calls to curl_easy_perform(3) while using the same |
| + | **easy_handle**. If you intend to transfer more than one file, you are even |
| + | encouraged to do so. libcurl attempts to reuse existing connections for the |
| + | following transfers, thus making the operations faster, less CPU intense and |
| + | using less network resources. You probably want to use curl_easy_setopt(3) |
| + | between the invokes to set options for the following curl_easy_perform(3) |
| + | call. |
| + | |
| + | You must never call this function simultaneously from two places using the |
| + | same **easy_handle**. Let the function return first before invoking it another |
| + | time. If you want parallel transfers, you must use several curl easy_handles. |
| + | |
| + | A network transfer moves data to a peer or from a peer. An application tells |
| + | libcurl how to receive data by setting the CURLOPT_WRITEFUNCTION(3) and |
| + | CURLOPT_WRITEDATA(3) options. To tell libcurl what data to send, there are a |
| + | few more alternatives but two common ones are CURLOPT_READFUNCTION(3) and |
| + | CURLOPT_POSTFIELDS(3). |
| + | |
| + | While the **easy_handle** is added to a multi handle, it cannot be used by |
| + | curl_easy_perform(3). |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Always |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLE_OK (0) means everything was OK, non-zero means an error occurred as |
| + | *<curl/curl.h>* defines - see libcurl-errors(3). If the CURLOPT_ERRORBUFFER(3) |
| + | was set with curl_easy_setopt(3) there is a readable error message stored in |
| + | the error buffer when non-zero is returned. |
| @@ -1,109 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH curl_easy_recv 3 "29 April 2008" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_easy_recv - receives raw data on an "easy" connection |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, size_t *n); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function receives raw data from the established connection. You may use |
| - | it together with \fIcurl_easy_send(3)\fP to implement custom protocols using |
| - | libcurl. This functionality can be particularly useful if you use proxies |
| - | and/or SSL encryption: libcurl takes care of proxy negotiation and connection |
| - | setup. |
| - | |
| - | \fBbuffer\fP is a pointer to your buffer memory that gets populated by the |
| - | received data. \fBbuflen\fP is the maximum amount of data you can get in that |
| - | buffer. The variable \fBn\fP points to receives the number of received bytes. |
| - | |
| - | To establish the connection, set \fICURLOPT_CONNECT_ONLY(3)\fP option before |
| - | calling \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP. Note that |
| - | \fIcurl_easy_recv(3)\fP does not work on connections that were created without |
| - | this option. |
| - | |
| - | The call returns \fBCURLE_AGAIN\fP if there is no data to read - the socket is |
| - | used in non-blocking mode internally. When \fBCURLE_AGAIN\fP is returned, use |
| - | your operating system facilities like \fIselect(2)\fP to wait for data. The |
| - | socket may be obtained using \fIcurl_easy_getinfo(3)\fP with |
| - | \fICURLINFO_ACTIVESOCKET(3)\fP. |
| - | |
| - | Wait on the socket only if \fIcurl_easy_recv(3)\fP returns \fBCURLE_AGAIN\fP. |
| - | The reason for this is libcurl or the SSL library may internally cache some |
| - | data, therefore you should call \fIcurl_easy_recv(3)\fP until all data is |
| - | read which would include any cached data. |
| - | |
| - | Furthermore if you wait on the socket and it tells you there is data to read, |
| - | \fIcurl_easy_recv(3)\fP may return \fBCURLE_AGAIN\fP if the only data that was |
| - | read was for internal SSL processing, and no other data is available. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | /* Do not do the transfer - only connect to host */ |
| - | curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L); |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(res == CURLE_OK) { |
| - | char buf[256]; |
| - | size_t nread; |
| - | long sockfd; |
| - | |
| - | /* Extract the socket from the curl handle - we need it for waiting. */ |
| - | res = curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sockfd); |
| - | |
| - | /* read data */ |
| - | res = curl_easy_recv(curl, buf, sizeof(buf), &nread); |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.18.2. |
| - | .SH RETURN VALUE |
| - | On success, returns \fBCURLE_OK\fP, stores the received data into |
| - | \fBbuffer\fP, and the number of bytes it actually read into \fB*n\fP. |
| - | |
| - | On failure, returns the appropriate error code. |
| - | |
| - | The function may return \fBCURLE_AGAIN\fP. In this case, use your operating |
| - | system facilities to wait until data can be read, and retry. |
| - | |
| - | Reading exactly 0 bytes indicates a closed connection. |
| - | |
| - | If there is no socket available to use from the previous transfer, this function |
| - | returns \fBCURLE_UNSUPPORTED_PROTOCOL\fP. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_perform (3), |
| - | .BR curl_easy_send (3), |
| - | .BR curl_easy_setopt (3) |
| @@ -0,0 +1,103 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_recv |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_perform (3) |
| + | - curl_easy_send (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_easy_recv - receives raw data on an "easy" connection |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, size_t *n); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function receives raw data from the established connection. You may use |
| + | it together with curl_easy_send(3) to implement custom protocols using |
| + | libcurl. This functionality can be particularly useful if you use proxies |
| + | and/or SSL encryption: libcurl takes care of proxy negotiation and connection |
| + | setup. |
| + | |
| + | **buffer** is a pointer to your buffer memory that gets populated by the |
| + | received data. **buflen** is the maximum amount of data you can get in that |
| + | buffer. The variable **n** points to receives the number of received bytes. |
| + | |
| + | To establish the connection, set CURLOPT_CONNECT_ONLY(3) option before |
| + | calling curl_easy_perform(3) or curl_multi_perform(3). Note that |
| + | curl_easy_recv(3) does not work on connections that were created without |
| + | this option. |
| + | |
| + | The call returns **CURLE_AGAIN** if there is no data to read - the socket is |
| + | used in non-blocking mode internally. When **CURLE_AGAIN** is returned, use |
| + | your operating system facilities like *select(2)* to wait for data. The |
| + | socket may be obtained using curl_easy_getinfo(3) with |
| + | CURLINFO_ACTIVESOCKET(3). |
| + | |
| + | Wait on the socket only if curl_easy_recv(3) returns **CURLE_AGAIN**. |
| + | The reason for this is libcurl or the SSL library may internally cache some |
| + | data, therefore you should call curl_easy_recv(3) until all data is |
| + | read which would include any cached data. |
| + | |
| + | Furthermore if you wait on the socket and it tells you there is data to read, |
| + | curl_easy_recv(3) may return **CURLE_AGAIN** if the only data that was |
| + | read was for internal SSL processing, and no other data is available. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | /* Do not do the transfer - only connect to host */ |
| + | curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L); |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(res == CURLE_OK) { |
| + | char buf[256]; |
| + | size_t nread; |
| + | long sockfd; |
| + | |
| + | /* Extract the socket from the curl handle - we need it for waiting. */ |
| + | res = curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sockfd); |
| + | |
| + | /* read data */ |
| + | res = curl_easy_recv(curl, buf, sizeof(buf), &nread); |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.18.2. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | On success, returns **CURLE_OK**, stores the received data into |
| + | **buffer**, and the number of bytes it actually read into ***n**. |
| + | |
| + | On failure, returns the appropriate error code. |
| + | |
| + | The function may return **CURLE_AGAIN**. In this case, use your operating |
| + | system facilities to wait until data can be read, and retry. |
| + | |
| + | Reading exactly 0 bytes indicates a closed connection. |
| + | |
| + | If there is no socket available to use from the previous transfer, this function |
| + | returns **CURLE_UNSUPPORTED_PROTOCOL**. |
| @@ -1,61 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_easy_reset 3 "31 July 2004" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_easy_reset - reset all options of a libcurl session handle |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | void curl_easy_reset(CURL *handle); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Re-initializes all options previously set on a specified CURL handle to the |
| - | default values. This puts back the handle to the same state as it was in when |
| - | it was just created with \fIcurl_easy_init(3)\fP. |
| - | |
| - | It does not change the following information kept in the handle: live |
| - | connections, the Session ID cache, the DNS cache, the cookies, the shares or |
| - | the alt-svc cache. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | |
| - | /* ... the handle is used and options are set ... */ |
| - | curl_easy_reset(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This function was added in libcurl 7.12.1 |
| - | .SH RETURN VALUE |
| - | Nothing |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_cleanup (3), |
| - | .BR curl_easy_duphandle (3), |
| - | .BR curl_easy_init (3), |
| - | .BR curl_easy_setopt (3) |
| @@ -0,0 +1,56 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_reset |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_cleanup (3) |
| + | - curl_easy_duphandle (3) |
| + | - curl_easy_init (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_easy_reset - reset all options of a libcurl session handle |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | void curl_easy_reset(CURL *handle); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Re-initializes all options previously set on a specified CURL handle to the |
| + | default values. This puts back the handle to the same state as it was in when |
| + | it was just created with curl_easy_init(3). |
| + | |
| + | It does not change the following information kept in the handle: live |
| + | connections, the Session ID cache, the DNS cache, the cookies, the shares or |
| + | the alt-svc cache. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | |
| + | /* ... the handle is used and options are set ... */ |
| + | curl_easy_reset(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This function was added in libcurl 7.12.1 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Nothing |
| @@ -1,101 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH curl_easy_send 3 "29 April 2008" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_easy_send - sends raw data over an "easy" connection |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_send(CURL *curl, const void *buffer, |
| - | size_t buflen, size_t *n); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function sends arbitrary data over the established connection. You may |
| - | use it together with \fIcurl_easy_recv(3)\fP to implement custom protocols |
| - | using libcurl. This functionality can be particularly useful if you use |
| - | proxies and/or SSL encryption: libcurl takes care of proxy negotiation and |
| - | connection setup. |
| - | |
| - | \fBbuffer\fP is a pointer to the data of length \fBbuflen\fP that you want |
| - | sent. The variable \fBn\fP points to receives the number of sent bytes. |
| - | |
| - | To establish the connection, set \fICURLOPT_CONNECT_ONLY(3)\fP option before |
| - | calling \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP. Note that |
| - | \fIcurl_easy_send(3)\fP does not work on connections that were created without |
| - | this option. |
| - | |
| - | The call returns \fBCURLE_AGAIN\fP if it's not possible to send data right now |
| - | - the socket is used in non-blocking mode internally. When \fBCURLE_AGAIN\fP |
| - | is returned, use your operating system facilities like \fIselect(2)\fP to wait |
| - | until the socket is writable. The socket may be obtained using |
| - | \fIcurl_easy_getinfo(3)\fP with \fICURLINFO_ACTIVESOCKET(3)\fP. |
| - | |
| - | Furthermore if you wait on the socket and it tells you it's writable, |
| - | \fIcurl_easy_send(3)\fP may return \fBCURLE_AGAIN\fP if the only data that was |
| - | sent was for internal SSL processing, and no other data could be sent. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | /* Do not do the transfer - only connect to host */ |
| - | curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L); |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(res == CURLE_OK) { |
| - | long sockfd; |
| - | size_t sent; |
| - | /* Extract the socket from the curl handle - we need it for waiting. */ |
| - | res = curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sockfd); |
| - | |
| - | /* send data */ |
| - | res = curl_easy_send(curl, "hello", 5, &sent); |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.18.2. |
| - | .SH RETURN VALUE |
| - | On success, returns \fBCURLE_OK\fP and stores the number of bytes actually |
| - | sent into \fB*n\fP. Note that this may be less than the amount you wanted to |
| - | send. |
| - | |
| - | On failure, returns the appropriate error code. |
| - | |
| - | This function may return \fBCURLE_AGAIN\fP. In this case, use your operating |
| - | system facilities to wait until the socket is writable, and retry. |
| - | |
| - | If there is no socket available to use from the previous transfer, this function |
| - | returns \fBCURLE_UNSUPPORTED_PROTOCOL\fP. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_setopt (3), |
| - | .BR curl_easy_perform (3), |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_recv (3) |
| @@ -0,0 +1,95 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_send |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_perform (3) |
| + | - curl_easy_recv (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_easy_send - sends raw data over an "easy" connection |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_send(CURL *curl, const void *buffer, |
| + | size_t buflen, size_t *n); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function sends arbitrary data over the established connection. You may |
| + | use it together with curl_easy_recv(3) to implement custom protocols |
| + | using libcurl. This functionality can be particularly useful if you use |
| + | proxies and/or SSL encryption: libcurl takes care of proxy negotiation and |
| + | connection setup. |
| + | |
| + | **buffer** is a pointer to the data of length **buflen** that you want |
| + | sent. The variable **n** points to receives the number of sent bytes. |
| + | |
| + | To establish the connection, set CURLOPT_CONNECT_ONLY(3) option before |
| + | calling curl_easy_perform(3) or curl_multi_perform(3). Note that |
| + | curl_easy_send(3) does not work on connections that were created without |
| + | this option. |
| + | |
| + | The call returns **CURLE_AGAIN** if it's not possible to send data right now |
| + | - the socket is used in non-blocking mode internally. When **CURLE_AGAIN** |
| + | is returned, use your operating system facilities like *select(2)* to wait |
| + | until the socket is writable. The socket may be obtained using |
| + | curl_easy_getinfo(3) with CURLINFO_ACTIVESOCKET(3). |
| + | |
| + | Furthermore if you wait on the socket and it tells you it's writable, |
| + | curl_easy_send(3) may return **CURLE_AGAIN** if the only data that was |
| + | sent was for internal SSL processing, and no other data could be sent. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | /* Do not do the transfer - only connect to host */ |
| + | curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L); |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(res == CURLE_OK) { |
| + | long sockfd; |
| + | size_t sent; |
| + | /* Extract the socket from the curl handle - we need it for waiting. */ |
| + | res = curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sockfd); |
| + | |
| + | /* send data */ |
| + | res = curl_easy_send(curl, "hello", 5, &sent); |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.18.2. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | On success, returns **CURLE_OK** and stores the number of bytes actually |
| + | sent into ***n**. Note that this may be less than the amount you wanted to |
| + | send. |
| + | |
| + | On failure, returns the appropriate error code. |
| + | |
| + | This function may return **CURLE_AGAIN**. In this case, use your operating |
| + | system facilities to wait until the socket is writable, and retry. |
| + | |
| + | If there is no socket available to use from the previous transfer, this function |
| + | returns **CURLE_UNSUPPORTED_PROTOCOL**. |
| @@ -1,751 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH curl_easy_setopt 3 "25 Jun 2014" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_easy_setopt \- set options for a curl easy handle |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_easy_setopt(3)\fP is used to tell libcurl how to behave. By setting |
| - | the appropriate options, the application can change libcurl's behavior. All |
| - | options are set with an \fIoption\fP followed by a \fIparameter\fP. That |
| - | parameter can be a \fBlong\fP, a \fBfunction pointer\fP, an \fBobject |
| - | pointer\fP or a \fBcurl_off_t\fP, depending on what the specific option |
| - | expects. Read this manual carefully as bad input values may cause libcurl to |
| - | behave badly! You can only set one option in each function call. A typical |
| - | application uses many \fIcurl_easy_setopt(3)\fP calls in the setup phase. |
| - | |
| - | Options set with this function call are valid for all forthcoming transfers |
| - | performed using this \fIhandle\fP. The options are not in any way reset |
| - | between transfers, so if you want subsequent transfers with different options, |
| - | you must change them between the transfers. You can optionally reset all |
| - | options back to internal default with \fIcurl_easy_reset(3)\fP. |
| - | |
| - | Strings passed to libcurl as 'char *' arguments, are copied by the library; |
| - | the string storage associated to the pointer argument may be discarded or |
| - | reused after \fIcurl_easy_setopt(3)\fP returns. The only exception to this |
| - | rule is really \fICURLOPT_POSTFIELDS(3)\fP, but the alternative that copies |
| - | the string \fICURLOPT_COPYPOSTFIELDS(3)\fP has some usage characteristics you |
| - | need to read up on. This function does not accept input strings longer than |
| - | \fBCURL_MAX_INPUT_LENGTH\fP (8 MB). |
| - | |
| - | The order in which the options are set does not matter. |
| - | |
| - | Before version 7.17.0, strings were not copied. Instead the user was forced |
| - | keep them available until libcurl no longer needed them. |
| - | |
| - | The \fIhandle\fP is the return code from a \fIcurl_easy_init(3)\fP or |
| - | \fIcurl_easy_duphandle(3)\fP call. |
| - | .SH BEHAVIOR OPTIONS |
| - | .IP CURLOPT_VERBOSE |
| - | Display verbose information. See \fICURLOPT_VERBOSE(3)\fP |
| - | .IP CURLOPT_HEADER |
| - | Include the header in the body output. See \fICURLOPT_HEADER(3)\fP |
| - | .IP CURLOPT_NOPROGRESS |
| - | Shut off the progress meter. See \fICURLOPT_NOPROGRESS(3)\fP |
| - | .IP CURLOPT_NOSIGNAL |
| - | Do not install signal handlers. See \fICURLOPT_NOSIGNAL(3)\fP |
| - | .IP CURLOPT_WILDCARDMATCH |
| - | Transfer multiple files according to a file name pattern. See \fICURLOPT_WILDCARDMATCH(3)\fP |
| - | .SH CALLBACK OPTIONS |
| - | .IP CURLOPT_WRITEFUNCTION |
| - | Callback for writing data. See \fICURLOPT_WRITEFUNCTION(3)\fP |
| - | .IP CURLOPT_WRITEDATA |
| - | Data pointer to pass to the write callback. See \fICURLOPT_WRITEDATA(3)\fP |
| - | .IP CURLOPT_READFUNCTION |
| - | Callback for reading data. See \fICURLOPT_READFUNCTION(3)\fP |
| - | .IP CURLOPT_READDATA |
| - | Data pointer to pass to the read callback. See \fICURLOPT_READDATA(3)\fP |
| - | .IP CURLOPT_IOCTLFUNCTION |
| - | \fBDeprecated option\fP Callback for I/O operations. |
| - | See \fICURLOPT_IOCTLFUNCTION(3)\fP |
| - | .IP CURLOPT_IOCTLDATA |
| - | \fBDeprecated option\fP Data pointer to pass to the I/O callback. |
| - | See \fICURLOPT_IOCTLDATA(3)\fP |
| - | .IP CURLOPT_SEEKFUNCTION |
| - | Callback for seek operations. See \fICURLOPT_SEEKFUNCTION(3)\fP |
| - | .IP CURLOPT_SEEKDATA |
| - | Data pointer to pass to the seek callback. See \fICURLOPT_SEEKDATA(3)\fP |
| - | .IP CURLOPT_SOCKOPTFUNCTION |
| - | Callback for sockopt operations. See \fICURLOPT_SOCKOPTFUNCTION(3)\fP |
| - | .IP CURLOPT_SOCKOPTDATA |
| - | Data pointer to pass to the sockopt callback. See \fICURLOPT_SOCKOPTDATA(3)\fP |
| - | .IP CURLOPT_OPENSOCKETFUNCTION |
| - | Callback for socket creation. See \fICURLOPT_OPENSOCKETFUNCTION(3)\fP |
| - | .IP CURLOPT_OPENSOCKETDATA |
| - | Data pointer to pass to the open socket callback. See \fICURLOPT_OPENSOCKETDATA(3)\fP |
| - | .IP CURLOPT_CLOSESOCKETFUNCTION |
| - | Callback for closing socket. See \fICURLOPT_CLOSESOCKETFUNCTION(3)\fP |
| - | .IP CURLOPT_CLOSESOCKETDATA |
| - | Data pointer to pass to the close socket callback. See \fICURLOPT_CLOSESOCKETDATA(3)\fP |
| - | .IP CURLOPT_PROGRESSFUNCTION |
| - | \fBOBSOLETE\fP callback for progress meter. |
| - | See \fICURLOPT_PROGRESSFUNCTION(3)\fP |
| - | .IP CURLOPT_PROGRESSDATA |
| - | Data pointer to pass to the progress meter callback. See \fICURLOPT_PROGRESSDATA(3)\fP |
| - | .IP CURLOPT_XFERINFOFUNCTION |
| - | Callback for progress meter. See \fICURLOPT_XFERINFOFUNCTION(3)\fP |
| - | .IP CURLOPT_XFERINFODATA |
| - | Data pointer to pass to the progress meter callback. See \fICURLOPT_XFERINFODATA(3)\fP |
| - | .IP CURLOPT_HEADERFUNCTION |
| - | Callback for writing received headers. See \fICURLOPT_HEADERFUNCTION(3)\fP |
| - | .IP CURLOPT_HEADERDATA |
| - | Data pointer to pass to the header callback. See \fICURLOPT_HEADERDATA(3)\fP |
| - | .IP CURLOPT_DEBUGFUNCTION |
| - | Callback for debug information. See \fICURLOPT_DEBUGFUNCTION(3)\fP |
| - | .IP CURLOPT_DEBUGDATA |
| - | Data pointer to pass to the debug callback. See \fICURLOPT_DEBUGDATA(3)\fP |
| - | .IP CURLOPT_SSL_CTX_FUNCTION |
| - | Callback for SSL context logic. See \fICURLOPT_SSL_CTX_FUNCTION(3)\fP |
| - | .IP CURLOPT_SSL_CTX_DATA |
| - | Data pointer to pass to the SSL context callback. See \fICURLOPT_SSL_CTX_DATA(3)\fP |
| - | .IP CURLOPT_CONV_TO_NETWORK_FUNCTION |
| - | \fBOBSOLETE\fP Callback for code base conversion. |
| - | See \fICURLOPT_CONV_TO_NETWORK_FUNCTION(3)\fP |
| - | .IP CURLOPT_CONV_FROM_NETWORK_FUNCTION |
| - | \fBOBSOLETE\fP Callback for code base conversion. |
| - | See \fICURLOPT_CONV_FROM_NETWORK_FUNCTION(3)\fP |
| - | .IP CURLOPT_CONV_FROM_UTF8_FUNCTION |
| - | \fBOBSOLETE\fP Callback for code base conversion. |
| - | See \fICURLOPT_CONV_FROM_UTF8_FUNCTION(3)\fP |
| - | .IP CURLOPT_INTERLEAVEFUNCTION |
| - | Callback for RTSP interleaved data. See \fICURLOPT_INTERLEAVEFUNCTION(3)\fP |
| - | .IP CURLOPT_INTERLEAVEDATA |
| - | Data pointer to pass to the RTSP interleave callback. See \fICURLOPT_INTERLEAVEDATA(3)\fP |
| - | .IP CURLOPT_CHUNK_BGN_FUNCTION |
| - | Callback for wildcard download start of chunk. See \fICURLOPT_CHUNK_BGN_FUNCTION(3)\fP |
| - | .IP CURLOPT_CHUNK_END_FUNCTION |
| - | Callback for wildcard download end of chunk. See \fICURLOPT_CHUNK_END_FUNCTION(3)\fP |
| - | .IP CURLOPT_CHUNK_DATA |
| - | Data pointer to pass to the chunk callbacks. See \fICURLOPT_CHUNK_DATA(3)\fP |
| - | .IP CURLOPT_FNMATCH_FUNCTION |
| - | Callback for wildcard matching. See \fICURLOPT_FNMATCH_FUNCTION(3)\fP |
| - | .IP CURLOPT_FNMATCH_DATA |
| - | Data pointer to pass to the wildcard matching callback. See \fICURLOPT_FNMATCH_DATA(3)\fP |
| - | .IP CURLOPT_SUPPRESS_CONNECT_HEADERS |
| - | Suppress proxy CONNECT response headers from user callbacks. See \fICURLOPT_SUPPRESS_CONNECT_HEADERS(3)\fP |
| - | .IP CURLOPT_RESOLVER_START_FUNCTION |
| - | Callback to be called before a new resolve request is started. See \fICURLOPT_RESOLVER_START_FUNCTION(3)\fP |
| - | .IP CURLOPT_RESOLVER_START_DATA |
| - | Data pointer to pass to resolver start callback. See \fICURLOPT_RESOLVER_START_DATA(3)\fP |
| - | .IP CURLOPT_PREREQFUNCTION |
| - | Callback to be called after a connection is established but before a request is made on that connection. See \fICURLOPT_PREREQFUNCTION(3)\fP |
| - | .IP CURLOPT_PREREQDATA |
| - | Data pointer to pass to the CURLOPT_PREREQFUNCTION callback. See \fICURLOPT_PREREQDATA(3)\fP |
| - | .SH ERROR OPTIONS |
| - | .IP CURLOPT_ERRORBUFFER |
| - | Error message buffer. See \fICURLOPT_ERRORBUFFER(3)\fP |
| - | .IP CURLOPT_STDERR |
| - | stderr replacement stream. See \fICURLOPT_STDERR(3)\fP |
| - | .IP CURLOPT_FAILONERROR |
| - | Fail on HTTP 4xx errors. \fICURLOPT_FAILONERROR(3)\fP |
| - | .IP CURLOPT_KEEP_SENDING_ON_ERROR |
| - | Keep sending on HTTP >= 300 errors. \fICURLOPT_KEEP_SENDING_ON_ERROR(3)\fP |
| - | .SH NETWORK OPTIONS |
| - | .IP CURLOPT_URL |
| - | URL to work on. See \fICURLOPT_URL(3)\fP |
| - | .IP CURLOPT_PATH_AS_IS |
| - | Disable squashing /../ and /./ sequences in the path. See \fICURLOPT_PATH_AS_IS(3)\fP |
| - | .IP CURLOPT_PROTOCOLS |
| - | \fBDeprecated option\fP Allowed protocols. See \fICURLOPT_PROTOCOLS(3)\fP |
| - | .IP CURLOPT_PROTOCOLS_STR |
| - | Allowed protocols. See \fICURLOPT_PROTOCOLS_STR(3)\fP |
| - | .IP CURLOPT_REDIR_PROTOCOLS |
| - | \fBDeprecated option\fP Protocols to allow redirects to. See |
| - | \fICURLOPT_REDIR_PROTOCOLS(3)\fP |
| - | .IP CURLOPT_REDIR_PROTOCOLS_STR |
| - | Protocols to allow redirects to. See \fICURLOPT_REDIR_PROTOCOLS_STR(3)\fP |
| - | .IP CURLOPT_DEFAULT_PROTOCOL |
| - | Default protocol. See \fICURLOPT_DEFAULT_PROTOCOL(3)\fP |
| - | .IP CURLOPT_PROXY |
| - | Proxy to use. See \fICURLOPT_PROXY(3)\fP |
| - | .IP CURLOPT_PRE_PROXY |
| - | Socks proxy to use. See \fICURLOPT_PRE_PROXY(3)\fP |
| - | .IP CURLOPT_PROXYPORT |
| - | Proxy port to use. See \fICURLOPT_PROXYPORT(3)\fP |
| - | .IP CURLOPT_PROXYTYPE |
| - | Proxy type. See \fICURLOPT_PROXYTYPE(3)\fP |
| - | .IP CURLOPT_NOPROXY |
| - | Filter out hosts from proxy use. \fICURLOPT_NOPROXY(3)\fP |
| - | .IP CURLOPT_HTTPPROXYTUNNEL |
| - | Tunnel through the HTTP proxy. \fICURLOPT_HTTPPROXYTUNNEL(3)\fP |
| - | .IP CURLOPT_CONNECT_TO |
| - | Connect to a specific host and port. See \fICURLOPT_CONNECT_TO(3)\fP |
| - | .IP CURLOPT_SOCKS5_AUTH |
| - | Socks5 authentication methods. See \fICURLOPT_SOCKS5_AUTH(3)\fP |
| - | .IP CURLOPT_SOCKS5_GSSAPI_SERVICE |
| - | \fBDeprecated option\fP Socks5 GSSAPI service name. |
| - | See \fICURLOPT_SOCKS5_GSSAPI_SERVICE(3)\fP |
| - | .IP CURLOPT_SOCKS5_GSSAPI_NEC |
| - | Socks5 GSSAPI NEC mode. See \fICURLOPT_SOCKS5_GSSAPI_NEC(3)\fP |
| - | .IP CURLOPT_PROXY_SERVICE_NAME |
| - | Proxy authentication service name. \fICURLOPT_PROXY_SERVICE_NAME(3)\fP |
| - | .IP CURLOPT_HAPROXYPROTOCOL |
| - | Send an HAProxy PROXY protocol v1 header. See \fICURLOPT_HAPROXYPROTOCOL(3)\fP |
| - | .IP CURLOPT_HAPROXY_CLIENT_IP |
| - | Spoof the client IP in an HAProxy PROXY protocol v1 header. See \fICURLOPT_HAPROXY_CLIENT_IP(3)\fP |
| - | .IP CURLOPT_SERVICE_NAME |
| - | Authentication service name. \fICURLOPT_SERVICE_NAME(3)\fP |
| - | .IP CURLOPT_INTERFACE |
| - | Bind connection locally to this. See \fICURLOPT_INTERFACE(3)\fP |
| - | .IP CURLOPT_LOCALPORT |
| - | Bind connection locally to this port. See \fICURLOPT_LOCALPORT(3)\fP |
| - | .IP CURLOPT_LOCALPORTRANGE |
| - | Bind connection locally to port range. See \fICURLOPT_LOCALPORTRANGE(3)\fP |
| - | .IP CURLOPT_DNS_CACHE_TIMEOUT |
| - | Timeout for DNS cache. See \fICURLOPT_DNS_CACHE_TIMEOUT(3)\fP |
| - | .IP CURLOPT_DNS_USE_GLOBAL_CACHE |
| - | \fBOBSOLETE\fP Enable global DNS cache. |
| - | See \fICURLOPT_DNS_USE_GLOBAL_CACHE(3)\fP |
| - | .IP CURLOPT_DOH_URL |
| - | Use this DoH server for name resolves. See \fICURLOPT_DOH_URL(3)\fP |
| - | .IP CURLOPT_BUFFERSIZE |
| - | Ask for alternate buffer size. See \fICURLOPT_BUFFERSIZE(3)\fP |
| - | .IP CURLOPT_PORT |
| - | Port number to connect to. See \fICURLOPT_PORT(3)\fP |
| - | .IP CURLOPT_TCP_FASTOPEN |
| - | Enable TCP Fast Open. See \fICURLOPT_TCP_FASTOPEN(3)\fP |
| - | .IP CURLOPT_TCP_NODELAY |
| - | Disable the Nagle algorithm. See \fICURLOPT_TCP_NODELAY(3)\fP |
| - | .IP CURLOPT_ADDRESS_SCOPE |
| - | IPv6 scope for local addresses. See \fICURLOPT_ADDRESS_SCOPE(3)\fP |
| - | .IP CURLOPT_TCP_KEEPALIVE |
| - | Enable TCP keep-alive. See \fICURLOPT_TCP_KEEPALIVE(3)\fP |
| - | .IP CURLOPT_TCP_KEEPIDLE |
| - | Idle time before sending keep-alive. See \fICURLOPT_TCP_KEEPIDLE(3)\fP |
| - | .IP CURLOPT_TCP_KEEPINTVL |
| - | Interval between keep-alive probes. See \fICURLOPT_TCP_KEEPINTVL(3)\fP |
| - | .IP CURLOPT_UNIX_SOCKET_PATH |
| - | Path to a Unix domain socket. See \fICURLOPT_UNIX_SOCKET_PATH(3)\fP |
| - | .IP CURLOPT_ABSTRACT_UNIX_SOCKET |
| - | Path to an abstract Unix domain socket. See \fICURLOPT_ABSTRACT_UNIX_SOCKET(3)\fP |
| - | .SH NAMES and PASSWORDS OPTIONS (Authentication) |
| - | .IP CURLOPT_NETRC |
| - | Enable .netrc parsing. See \fICURLOPT_NETRC(3)\fP |
| - | .IP CURLOPT_NETRC_FILE |
| - | \&.netrc file name. See \fICURLOPT_NETRC_FILE(3)\fP |
| - | .IP CURLOPT_USERPWD |
| - | User name and password. See \fICURLOPT_USERPWD(3)\fP |
| - | .IP CURLOPT_PROXYUSERPWD |
| - | Proxy user name and password. See \fICURLOPT_PROXYUSERPWD(3)\fP |
| - | .IP CURLOPT_USERNAME |
| - | User name. See \fICURLOPT_USERNAME(3)\fP |
| - | .IP CURLOPT_PASSWORD |
| - | Password. See \fICURLOPT_PASSWORD(3)\fP |
| - | .IP CURLOPT_LOGIN_OPTIONS |
| - | Login options. See \fICURLOPT_LOGIN_OPTIONS(3)\fP |
| - | .IP CURLOPT_PROXYUSERNAME |
| - | Proxy user name. See \fICURLOPT_PROXYUSERNAME(3)\fP |
| - | .IP CURLOPT_PROXYPASSWORD |
| - | Proxy password. See \fICURLOPT_PROXYPASSWORD(3)\fP |
| - | .IP CURLOPT_HTTPAUTH |
| - | HTTP server authentication methods. See \fICURLOPT_HTTPAUTH(3)\fP |
| - | .IP CURLOPT_TLSAUTH_USERNAME |
| - | TLS authentication user name. See \fICURLOPT_TLSAUTH_USERNAME(3)\fP |
| - | .IP CURLOPT_PROXY_TLSAUTH_USERNAME |
| - | Proxy TLS authentication user name. See \fICURLOPT_PROXY_TLSAUTH_USERNAME(3)\fP |
| - | .IP CURLOPT_TLSAUTH_PASSWORD |
| - | TLS authentication password. See \fICURLOPT_TLSAUTH_PASSWORD(3)\fP |
| - | .IP CURLOPT_PROXY_TLSAUTH_PASSWORD |
| - | Proxy TLS authentication password. See \fICURLOPT_PROXY_TLSAUTH_PASSWORD(3)\fP |
| - | .IP CURLOPT_TLSAUTH_TYPE |
| - | TLS authentication methods. See \fICURLOPT_TLSAUTH_TYPE(3)\fP |
| - | .IP CURLOPT_PROXY_TLSAUTH_TYPE |
| - | Proxy TLS authentication methods. See \fICURLOPT_PROXY_TLSAUTH_TYPE(3)\fP |
| - | .IP CURLOPT_PROXYAUTH |
| - | HTTP proxy authentication methods. See \fICURLOPT_PROXYAUTH(3)\fP |
| - | .IP CURLOPT_SASL_AUTHZID |
| - | SASL authorization identity (identity to act as). See \fICURLOPT_SASL_AUTHZID(3)\fP |
| - | .IP CURLOPT_SASL_IR |
| - | Enable SASL initial response. See \fICURLOPT_SASL_IR(3)\fP |
| - | .IP CURLOPT_XOAUTH2_BEARER |
| - | OAuth2 bearer token. See \fICURLOPT_XOAUTH2_BEARER(3)\fP |
| - | .IP CURLOPT_DISALLOW_USERNAME_IN_URL |
| - | Do not allow username in URL. See \fICURLOPT_DISALLOW_USERNAME_IN_URL(3)\fP |
| - | .SH HTTP OPTIONS |
| - | .IP CURLOPT_AUTOREFERER |
| - | Automatically set Referer: header. See \fICURLOPT_AUTOREFERER(3)\fP |
| - | .IP CURLOPT_ACCEPT_ENCODING |
| - | Accept-Encoding and automatic decompressing data. See \fICURLOPT_ACCEPT_ENCODING(3)\fP |
| - | .IP CURLOPT_TRANSFER_ENCODING |
| - | Request Transfer-Encoding. See \fICURLOPT_TRANSFER_ENCODING(3)\fP |
| - | .IP CURLOPT_FOLLOWLOCATION |
| - | Follow HTTP redirects. See \fICURLOPT_FOLLOWLOCATION(3)\fP |
| - | .IP CURLOPT_UNRESTRICTED_AUTH |
| - | Do not restrict authentication to original host. \fICURLOPT_UNRESTRICTED_AUTH(3)\fP |
| - | .IP CURLOPT_MAXREDIRS |
| - | Maximum number of redirects to follow. See \fICURLOPT_MAXREDIRS(3)\fP |
| - | .IP CURLOPT_POSTREDIR |
| - | How to act on redirects after POST. See \fICURLOPT_POSTREDIR(3)\fP |
| - | .IP CURLOPT_PUT |
| - | \fBDeprecated option\fP Issue an HTTP PUT request. See \fICURLOPT_PUT(3)\fP |
| - | .IP CURLOPT_POST |
| - | Issue an HTTP POST request. See \fICURLOPT_POST(3)\fP |
| - | .IP CURLOPT_POSTFIELDS |
| - | Send a POST with this data. See \fICURLOPT_POSTFIELDS(3)\fP |
| - | .IP CURLOPT_POSTFIELDSIZE |
| - | The POST data is this big. See \fICURLOPT_POSTFIELDSIZE(3)\fP |
| - | .IP CURLOPT_POSTFIELDSIZE_LARGE |
| - | The POST data is this big. See \fICURLOPT_POSTFIELDSIZE_LARGE(3)\fP |
| - | .IP CURLOPT_COPYPOSTFIELDS |
| - | Send a POST with this data - and copy it. See \fICURLOPT_COPYPOSTFIELDS(3)\fP |
| - | .IP CURLOPT_HTTPPOST |
| - | \fBDeprecated option\fP Multipart formpost HTTP POST. |
| - | See \fICURLOPT_HTTPPOST(3)\fP |
| - | .IP CURLOPT_REFERER |
| - | Referer: header. See \fICURLOPT_REFERER(3)\fP |
| - | .IP CURLOPT_USERAGENT |
| - | User-Agent: header. See \fICURLOPT_USERAGENT(3)\fP |
| - | .IP CURLOPT_HTTPHEADER |
| - | Custom HTTP headers. See \fICURLOPT_HTTPHEADER(3)\fP |
| - | .IP CURLOPT_HEADEROPT |
| - | Control custom headers. See \fICURLOPT_HEADEROPT(3)\fP |
| - | .IP CURLOPT_PROXYHEADER |
| - | Custom HTTP headers sent to proxy. See \fICURLOPT_PROXYHEADER(3)\fP |
| - | .IP CURLOPT_HTTP200ALIASES |
| - | Alternative versions of 200 OK. See \fICURLOPT_HTTP200ALIASES(3)\fP |
| - | .IP CURLOPT_COOKIE |
| - | Cookie(s) to send. See \fICURLOPT_COOKIE(3)\fP |
| - | .IP CURLOPT_COOKIEFILE |
| - | File to read cookies from. See \fICURLOPT_COOKIEFILE(3)\fP |
| - | .IP CURLOPT_COOKIEJAR |
| - | File to write cookies to. See \fICURLOPT_COOKIEJAR(3)\fP |
| - | .IP CURLOPT_COOKIESESSION |
| - | Start a new cookie session. See \fICURLOPT_COOKIESESSION(3)\fP |
| - | .IP CURLOPT_COOKIELIST |
| - | Add or control cookies. See \fICURLOPT_COOKIELIST(3)\fP |
| - | .IP CURLOPT_ALTSVC |
| - | Specify the Alt-Svc: cache file name. See \fICURLOPT_ALTSVC(3)\fP |
| - | .IP CURLOPT_ALTSVC_CTRL |
| - | Enable and configure Alt-Svc: treatment. See \fICURLOPT_ALTSVC_CTRL(3)\fP |
| - | .IP CURLOPT_HSTS |
| - | Set HSTS cache file. See \fICURLOPT_HSTS(3)\fP |
| - | .IP CURLOPT_HSTS_CTRL |
| - | Enable HSTS. See \fICURLOPT_HSTS_CTRL(3)\fP |
| - | .IP CURLOPT_HSTSREADFUNCTION |
| - | Set HSTS read callback. See \fICURLOPT_HSTSREADFUNCTION(3)\fP |
| - | .IP CURLOPT_HSTSREADDATA |
| - | Pass pointer to the HSTS read callback. See \fICURLOPT_HSTSREADDATA(3)\fP |
| - | .IP CURLOPT_HSTSWRITEFUNCTION |
| - | Set HSTS write callback. See \fICURLOPT_HSTSWRITEFUNCTION(3)\fP |
| - | .IP CURLOPT_HSTSWRITEDATA |
| - | Pass pointer to the HSTS write callback. See \fICURLOPT_HSTSWRITEDATA(3)\fP |
| - | .IP CURLOPT_HTTPGET |
| - | Do an HTTP GET request. See \fICURLOPT_HTTPGET(3)\fP |
| - | .IP CURLOPT_REQUEST_TARGET |
| - | Set the request target. \fICURLOPT_REQUEST_TARGET(3)\fP |
| - | .IP CURLOPT_HTTP_VERSION |
| - | HTTP version to use. \fICURLOPT_HTTP_VERSION(3)\fP |
| - | .IP CURLOPT_HTTP09_ALLOWED |
| - | Allow HTTP/0.9 responses. \fICURLOPT_HTTP09_ALLOWED(3)\fP |
| - | .IP CURLOPT_IGNORE_CONTENT_LENGTH |
| - | Ignore Content-Length. See \fICURLOPT_IGNORE_CONTENT_LENGTH(3)\fP |
| - | .IP CURLOPT_HTTP_CONTENT_DECODING |
| - | Disable Content decoding. See \fICURLOPT_HTTP_CONTENT_DECODING(3)\fP |
| - | .IP CURLOPT_HTTP_TRANSFER_DECODING |
| - | Disable Transfer decoding. See \fICURLOPT_HTTP_TRANSFER_DECODING(3)\fP |
| - | .IP CURLOPT_EXPECT_100_TIMEOUT_MS |
| - | 100-continue timeout. See \fICURLOPT_EXPECT_100_TIMEOUT_MS(3)\fP |
| - | .IP CURLOPT_TRAILERFUNCTION |
| - | Set callback for sending trailing headers. See |
| - | \fICURLOPT_TRAILERFUNCTION(3)\fP |
| - | .IP CURLOPT_TRAILERDATA |
| - | Custom pointer passed to the trailing headers callback. See |
| - | \fICURLOPT_TRAILERDATA(3)\fP |
| - | .IP CURLOPT_PIPEWAIT |
| - | Wait on connection to pipeline on it. See \fICURLOPT_PIPEWAIT(3)\fP |
| - | .IP CURLOPT_STREAM_DEPENDS |
| - | This HTTP/2 stream depends on another. See \fICURLOPT_STREAM_DEPENDS(3)\fP |
| - | .IP CURLOPT_STREAM_DEPENDS_E |
| - | This HTTP/2 stream depends on another exclusively. See |
| - | \fICURLOPT_STREAM_DEPENDS_E(3)\fP |
| - | .IP CURLOPT_STREAM_WEIGHT |
| - | Set this HTTP/2 stream's weight. See \fICURLOPT_STREAM_WEIGHT(3)\fP |
| - | .SH SMTP OPTIONS |
| - | .IP CURLOPT_MAIL_FROM |
| - | Address of the sender. See \fICURLOPT_MAIL_FROM(3)\fP |
| - | .IP CURLOPT_MAIL_RCPT |
| - | Address of the recipients. See \fICURLOPT_MAIL_RCPT(3)\fP |
| - | .IP CURLOPT_MAIL_AUTH |
| - | Authentication address. See \fICURLOPT_MAIL_AUTH(3)\fP |
| - | .IP CURLOPT_MAIL_RCPT_ALLOWFAILS |
| - | Allow RCPT TO command to fail for some recipients. See |
| - | \fICURLOPT_MAIL_RCPT_ALLOWFAILS(3)\fP |
| - | .SH TFTP OPTIONS |
| - | .IP CURLOPT_TFTP_BLKSIZE |
| - | TFTP block size. See \fICURLOPT_TFTP_BLKSIZE(3)\fP |
| - | .IP CURLOPT_TFTP_NO_OPTIONS |
| - | Do not send TFTP options requests. See \fICURLOPT_TFTP_NO_OPTIONS(3)\fP |
| - | .SH FTP OPTIONS |
| - | .IP CURLOPT_FTPPORT |
| - | Use active FTP. See \fICURLOPT_FTPPORT(3)\fP |
| - | .IP CURLOPT_QUOTE |
| - | Commands to run before transfer. See \fICURLOPT_QUOTE(3)\fP |
| - | .IP CURLOPT_POSTQUOTE |
| - | Commands to run after transfer. See \fICURLOPT_POSTQUOTE(3)\fP |
| - | .IP CURLOPT_PREQUOTE |
| - | Commands to run just before transfer. See \fICURLOPT_PREQUOTE(3)\fP |
| - | .IP CURLOPT_APPEND |
| - | Append to remote file. See \fICURLOPT_APPEND(3)\fP |
| - | .IP CURLOPT_FTP_USE_EPRT |
| - | Use EPRT. See \fICURLOPT_FTP_USE_EPRT(3)\fP |
| - | .IP CURLOPT_FTP_USE_EPSV |
| - | Use EPSV. See \fICURLOPT_FTP_USE_EPSV(3)\fP |
| - | .IP CURLOPT_FTP_USE_PRET |
| - | Use PRET. See \fICURLOPT_FTP_USE_PRET(3)\fP |
| - | .IP CURLOPT_FTP_CREATE_MISSING_DIRS |
| - | Create missing directories on the remote server. See \fICURLOPT_FTP_CREATE_MISSING_DIRS(3)\fP |
| - | .IP CURLOPT_SERVER_RESPONSE_TIMEOUT |
| - | Timeout for server responses. See \fICURLOPT_SERVER_RESPONSE_TIMEOUT(3)\fP |
| - | .IP CURLOPT_SERVER_RESPONSE_TIMEOUT_MS |
| - | Timeout for server responses. See \fICURLOPT_SERVER_RESPONSE_TIMEOUT_MS(3)\fP |
| - | .IP CURLOPT_FTP_ALTERNATIVE_TO_USER |
| - | Alternative to USER. See \fICURLOPT_FTP_ALTERNATIVE_TO_USER(3)\fP |
| - | .IP CURLOPT_FTP_SKIP_PASV_IP |
| - | Ignore the IP address in the PASV response. See \fICURLOPT_FTP_SKIP_PASV_IP(3)\fP |
| - | .IP CURLOPT_FTPSSLAUTH |
| - | Control how to do TLS. See \fICURLOPT_FTPSSLAUTH(3)\fP |
| - | .IP CURLOPT_FTP_SSL_CCC |
| - | Back to non-TLS again after authentication. See \fICURLOPT_FTP_SSL_CCC(3)\fP |
| - | .IP CURLOPT_FTP_ACCOUNT |
| - | Send ACCT command. See \fICURLOPT_FTP_ACCOUNT(3)\fP |
| - | .IP CURLOPT_FTP_FILEMETHOD |
| - | Specify how to reach files. See \fICURLOPT_FTP_FILEMETHOD(3)\fP |
| - | .SH RTSP OPTIONS |
| - | .IP CURLOPT_RTSP_REQUEST |
| - | RTSP request. See \fICURLOPT_RTSP_REQUEST(3)\fP |
| - | .IP CURLOPT_RTSP_SESSION_ID |
| - | RTSP session-id. See \fICURLOPT_RTSP_SESSION_ID(3)\fP |
| - | .IP CURLOPT_RTSP_STREAM_URI |
| - | RTSP stream URI. See \fICURLOPT_RTSP_STREAM_URI(3)\fP |
| - | .IP CURLOPT_RTSP_TRANSPORT |
| - | RTSP Transport: header. See \fICURLOPT_RTSP_TRANSPORT(3)\fP |
| - | .IP CURLOPT_RTSP_CLIENT_CSEQ |
| - | Client CSEQ number. See \fICURLOPT_RTSP_CLIENT_CSEQ(3)\fP |
| - | .IP CURLOPT_RTSP_SERVER_CSEQ |
| - | CSEQ number for RTSP Server->Client request. See \fICURLOPT_RTSP_SERVER_CSEQ(3)\fP |
| - | .IP CURLOPT_AWS_SIGV4 |
| - | AWS HTTP V4 Signature. See \fICURLOPT_AWS_SIGV4(3)\fP |
| - | .SH PROTOCOL OPTIONS |
| - | .IP CURLOPT_TRANSFERTEXT |
| - | Use text transfer. See \fICURLOPT_TRANSFERTEXT(3)\fP |
| - | .IP CURLOPT_PROXY_TRANSFER_MODE |
| - | Add transfer mode to URL over proxy. See \fICURLOPT_PROXY_TRANSFER_MODE(3)\fP |
| - | .IP CURLOPT_CRLF |
| - | Convert newlines. See \fICURLOPT_CRLF(3)\fP |
| - | .IP CURLOPT_RANGE |
| - | Range requests. See \fICURLOPT_RANGE(3)\fP |
| - | .IP CURLOPT_RESUME_FROM |
| - | Resume a transfer. See \fICURLOPT_RESUME_FROM(3)\fP |
| - | .IP CURLOPT_RESUME_FROM_LARGE |
| - | Resume a transfer. See \fICURLOPT_RESUME_FROM_LARGE(3)\fP |
| - | .IP CURLOPT_CURLU |
| - | Set URL to work on with a URL handle. See \fICURLOPT_CURLU(3)\fP |
| - | .IP CURLOPT_CUSTOMREQUEST |
| - | Custom request/method. See \fICURLOPT_CUSTOMREQUEST(3)\fP |
| - | .IP CURLOPT_FILETIME |
| - | Request file modification date and time. See \fICURLOPT_FILETIME(3)\fP |
| - | .IP CURLOPT_DIRLISTONLY |
| - | List only. See \fICURLOPT_DIRLISTONLY(3)\fP |
| - | .IP CURLOPT_NOBODY |
| - | Do not get the body contents. See \fICURLOPT_NOBODY(3)\fP |
| - | .IP CURLOPT_INFILESIZE |
| - | Size of file to send. \fICURLOPT_INFILESIZE(3)\fP |
| - | .IP CURLOPT_INFILESIZE_LARGE |
| - | Size of file to send. \fICURLOPT_INFILESIZE_LARGE(3)\fP |
| - | .IP CURLOPT_UPLOAD |
| - | Upload data. See \fICURLOPT_UPLOAD(3)\fP |
| - | .IP CURLOPT_UPLOAD_BUFFERSIZE |
| - | Set upload buffer size. See \fICURLOPT_UPLOAD_BUFFERSIZE(3)\fP |
| - | .IP CURLOPT_MIMEPOST |
| - | Post/send MIME data. See \fICURLOPT_MIMEPOST(3)\fP |
| - | .IP CURLOPT_MIME_OPTIONS |
| - | Set MIME option flags. See \fICURLOPT_MIME_OPTIONS(3)\fP |
| - | .IP CURLOPT_MAXFILESIZE |
| - | Maximum file size to get. See \fICURLOPT_MAXFILESIZE(3)\fP |
| - | .IP CURLOPT_MAXFILESIZE_LARGE |
| - | Maximum file size to get. See \fICURLOPT_MAXFILESIZE_LARGE(3)\fP |
| - | .IP CURLOPT_TIMECONDITION |
| - | Make a time conditional request. See \fICURLOPT_TIMECONDITION(3)\fP |
| - | .IP CURLOPT_TIMEVALUE |
| - | Time value for the time conditional request. See \fICURLOPT_TIMEVALUE(3)\fP |
| - | .IP CURLOPT_TIMEVALUE_LARGE |
| - | Time value for the time conditional request. See \fICURLOPT_TIMEVALUE_LARGE(3)\fP |
| - | .SH CONNECTION OPTIONS |
| - | .IP CURLOPT_TIMEOUT |
| - | Timeout for the entire request. See \fICURLOPT_TIMEOUT(3)\fP |
| - | .IP CURLOPT_TIMEOUT_MS |
| - | Millisecond timeout for the entire request. See \fICURLOPT_TIMEOUT_MS(3)\fP |
| - | .IP CURLOPT_LOW_SPEED_LIMIT |
| - | Low speed limit to abort transfer. See \fICURLOPT_LOW_SPEED_LIMIT(3)\fP |
| - | .IP CURLOPT_LOW_SPEED_TIME |
| - | Time to be below the speed to trigger low speed abort. See \fICURLOPT_LOW_SPEED_TIME(3)\fP |
| - | .IP CURLOPT_MAX_SEND_SPEED_LARGE |
| - | Cap the upload speed to this. See \fICURLOPT_MAX_SEND_SPEED_LARGE(3)\fP |
| - | .IP CURLOPT_MAX_RECV_SPEED_LARGE |
| - | Cap the download speed to this. See \fICURLOPT_MAX_RECV_SPEED_LARGE(3)\fP |
| - | .IP CURLOPT_MAXCONNECTS |
| - | Maximum number of connections in the connection pool. See \fICURLOPT_MAXCONNECTS(3)\fP |
| - | .IP CURLOPT_FRESH_CONNECT |
| - | Use a new connection. \fICURLOPT_FRESH_CONNECT(3)\fP |
| - | .IP CURLOPT_FORBID_REUSE |
| - | Prevent subsequent connections from reusing this. See \fICURLOPT_FORBID_REUSE(3)\fP |
| - | .IP CURLOPT_MAXAGE_CONN |
| - | Limit the age (idle time) of connections for reuse. See \fICURLOPT_MAXAGE_CONN(3)\fP |
| - | .IP CURLOPT_MAXLIFETIME_CONN |
| - | Limit the age (since creation) of connections for reuse. See \fICURLOPT_MAXLIFETIME_CONN(3)\fP |
| - | .IP CURLOPT_CONNECTTIMEOUT |
| - | Timeout for the connection phase. See \fICURLOPT_CONNECTTIMEOUT(3)\fP |
| - | .IP CURLOPT_CONNECTTIMEOUT_MS |
| - | Millisecond timeout for the connection phase. See \fICURLOPT_CONNECTTIMEOUT_MS(3)\fP |
| - | .IP CURLOPT_IPRESOLVE |
| - | IP version to use. See \fICURLOPT_IPRESOLVE(3)\fP |
| - | .IP CURLOPT_CONNECT_ONLY |
| - | Only connect, nothing else. See \fICURLOPT_CONNECT_ONLY(3)\fP |
| - | .IP CURLOPT_USE_SSL |
| - | Use TLS/SSL. See \fICURLOPT_USE_SSL(3)\fP |
| - | .IP CURLOPT_RESOLVE |
| - | Provide fixed/fake name resolves. See \fICURLOPT_RESOLVE(3)\fP |
| - | .IP CURLOPT_DNS_INTERFACE |
| - | Bind name resolves to this interface. See \fICURLOPT_DNS_INTERFACE(3)\fP |
| - | .IP CURLOPT_DNS_LOCAL_IP4 |
| - | Bind name resolves to this IP4 address. See \fICURLOPT_DNS_LOCAL_IP4(3)\fP |
| - | .IP CURLOPT_DNS_LOCAL_IP6 |
| - | Bind name resolves to this IP6 address. See \fICURLOPT_DNS_LOCAL_IP6(3)\fP |
| - | .IP CURLOPT_DNS_SERVERS |
| - | Preferred DNS servers. See \fICURLOPT_DNS_SERVERS(3)\fP |
| - | .IP CURLOPT_DNS_SHUFFLE_ADDRESSES |
| - | Shuffle addresses before use. See \fICURLOPT_DNS_SHUFFLE_ADDRESSES(3)\fP |
| - | .IP CURLOPT_ACCEPTTIMEOUT_MS |
| - | Timeout for waiting for the server's connect back to be accepted. See \fICURLOPT_ACCEPTTIMEOUT_MS(3)\fP |
| - | .IP CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS |
| - | Timeout for happy eyeballs. See \fICURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS(3)\fP |
| - | .IP CURLOPT_UPKEEP_INTERVAL_MS |
| - | Sets the interval at which connection upkeep are performed. See |
| - | \fICURLOPT_UPKEEP_INTERVAL_MS(3)\fP |
| - | .SH SSL and SECURITY OPTIONS |
| - | .IP CURLOPT_SSLCERT |
| - | Client cert. See \fICURLOPT_SSLCERT(3)\fP |
| - | .IP CURLOPT_SSLCERT_BLOB |
| - | Client cert memory buffer. See \fICURLOPT_SSLCERT_BLOB(3)\fP |
| - | .IP CURLOPT_PROXY_SSLCERT |
| - | Proxy client cert. See \fICURLOPT_PROXY_SSLCERT(3)\fP |
| - | .IP CURLOPT_PROXY_SSLCERT_BLOB |
| - | Proxy client cert memory buffer. See \fICURLOPT_PROXY_SSLCERT_BLOB(3)\fP |
| - | .IP CURLOPT_SSLCERTTYPE |
| - | Client cert type. See \fICURLOPT_SSLCERTTYPE(3)\fP |
| - | .IP CURLOPT_PROXY_SSLCERTTYPE |
| - | Proxy client cert type. See \fICURLOPT_PROXY_SSLCERTTYPE(3)\fP |
| - | .IP CURLOPT_SSLKEY |
| - | Client key. See \fICURLOPT_SSLKEY(3)\fP |
| - | .IP CURLOPT_SSLKEY_BLOB |
| - | Client key memory buffer. See \fICURLOPT_SSLKEY_BLOB(3)\fP |
| - | .IP CURLOPT_PROXY_SSLKEY |
| - | Proxy client key. See \fICURLOPT_PROXY_SSLKEY(3)\fP |
| - | .IP CURLOPT_PROXY_SSLKEY_BLOB |
| - | Proxy client key. See \fICURLOPT_PROXY_SSLKEY_BLOB(3)\fP |
| - | .IP CURLOPT_SSLKEYTYPE |
| - | Client key type. See \fICURLOPT_SSLKEYTYPE(3)\fP |
| - | .IP CURLOPT_PROXY_SSLKEYTYPE |
| - | Proxy client key type. See \fICURLOPT_PROXY_SSLKEYTYPE(3)\fP |
| - | .IP CURLOPT_KEYPASSWD |
| - | Client key password. See \fICURLOPT_KEYPASSWD(3)\fP |
| - | .IP CURLOPT_PROXY_KEYPASSWD |
| - | Proxy client key password. See \fICURLOPT_PROXY_KEYPASSWD(3)\fP |
| - | .IP CURLOPT_SSL_EC_CURVES |
| - | Set key exchange curves. See \fICURLOPT_SSL_EC_CURVES(3)\fP |
| - | .IP CURLOPT_SSL_ENABLE_ALPN |
| - | Enable use of ALPN. See \fICURLOPT_SSL_ENABLE_ALPN(3)\fP |
| - | .IP CURLOPT_SSL_ENABLE_NPN |
| - | \fBOBSOLETE\fP Enable use of NPN. See \fICURLOPT_SSL_ENABLE_NPN(3)\fP |
| - | .IP CURLOPT_SSLENGINE |
| - | Use identifier with SSL engine. See \fICURLOPT_SSLENGINE(3)\fP |
| - | .IP CURLOPT_SSLENGINE_DEFAULT |
| - | Default SSL engine. See \fICURLOPT_SSLENGINE_DEFAULT(3)\fP |
| - | .IP CURLOPT_SSL_FALSESTART |
| - | Enable TLS False Start. See \fICURLOPT_SSL_FALSESTART(3)\fP |
| - | .IP CURLOPT_SSLVERSION |
| - | SSL version to use. See \fICURLOPT_SSLVERSION(3)\fP |
| - | .IP CURLOPT_PROXY_SSLVERSION |
| - | Proxy SSL version to use. See \fICURLOPT_PROXY_SSLVERSION(3)\fP |
| - | .IP CURLOPT_SSL_VERIFYHOST |
| - | Verify the host name in the SSL certificate. See \fICURLOPT_SSL_VERIFYHOST(3)\fP |
| - | .IP CURLOPT_DOH_SSL_VERIFYHOST |
| - | Verify the host name in the DoH (DNS-over-HTTPS) SSL certificate. See |
| - | \fICURLOPT_DOH_SSL_VERIFYHOST(3)\fP |
| - | .IP CURLOPT_PROXY_SSL_VERIFYHOST |
| - | Verify the host name in the proxy SSL certificate. See \fICURLOPT_PROXY_SSL_VERIFYHOST(3)\fP |
| - | .IP CURLOPT_SSL_VERIFYPEER |
| - | Verify the SSL certificate. See \fICURLOPT_SSL_VERIFYPEER(3)\fP |
| - | .IP CURLOPT_DOH_SSL_VERIFYPEER |
| - | Verify the DoH (DNS-over-HTTPS) SSL certificate. See |
| - | \fICURLOPT_DOH_SSL_VERIFYPEER(3)\fP |
| - | .IP CURLOPT_PROXY_SSL_VERIFYPEER |
| - | Verify the proxy SSL certificate. See \fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP |
| - | .IP CURLOPT_SSL_VERIFYSTATUS |
| - | Verify the SSL certificate's status. See \fICURLOPT_SSL_VERIFYSTATUS(3)\fP |
| - | .IP CURLOPT_DOH_SSL_VERIFYSTATUS |
| - | Verify the DoH (DNS-over-HTTPS) SSL certificate's status. See |
| - | \fICURLOPT_DOH_SSL_VERIFYSTATUS(3)\fP |
| - | .IP CURLOPT_CAINFO |
| - | CA cert bundle. See \fICURLOPT_CAINFO(3)\fP |
| - | .IP CURLOPT_CAINFO_BLOB |
| - | CA cert bundle memory buffer. See \fICURLOPT_CAINFO_BLOB(3)\fP |
| - | .IP CURLOPT_PROXY_CAINFO |
| - | Proxy CA cert bundle. See \fICURLOPT_PROXY_CAINFO(3)\fP |
| - | .IP CURLOPT_PROXY_CAINFO_BLOB |
| - | Proxy CA cert bundle memory buffer. See \fICURLOPT_PROXY_CAINFO_BLOB(3)\fP |
| - | .IP CURLOPT_ISSUERCERT |
| - | Issuer certificate. See \fICURLOPT_ISSUERCERT(3)\fP |
| - | .IP CURLOPT_ISSUERCERT_BLOB |
| - | Issuer certificate memory buffer. See \fICURLOPT_ISSUERCERT_BLOB(3)\fP |
| - | .IP CURLOPT_PROXY_ISSUERCERT |
| - | Proxy issuer certificate. See \fICURLOPT_PROXY_ISSUERCERT(3)\fP |
| - | .IP CURLOPT_PROXY_ISSUERCERT_BLOB |
| - | Proxy issuer certificate memory buffer. See \fICURLOPT_PROXY_ISSUERCERT_BLOB(3)\fP |
| - | .IP CURLOPT_CAPATH |
| - | Path to CA cert bundle. See \fICURLOPT_CAPATH(3)\fP |
| - | .IP CURLOPT_PROXY_CAPATH |
| - | Path to proxy CA cert bundle. See \fICURLOPT_PROXY_CAPATH(3)\fP |
| - | .IP CURLOPT_CRLFILE |
| - | Certificate Revocation List. See \fICURLOPT_CRLFILE(3)\fP |
| - | .IP CURLOPT_PROXY_CRLFILE |
| - | Proxy Certificate Revocation List. See \fICURLOPT_PROXY_CRLFILE(3)\fP |
| - | .IP CURLOPT_CA_CACHE_TIMEOUT |
| - | Timeout for CA cache. See \fICURLOPT_CA_CACHE_TIMEOUT(3)\fP |
| - | .IP CURLOPT_CERTINFO |
| - | Extract certificate info. See \fICURLOPT_CERTINFO(3)\fP |
| - | .IP CURLOPT_PINNEDPUBLICKEY |
| - | Set pinned SSL public key . See \fICURLOPT_PINNEDPUBLICKEY(3)\fP |
| - | .IP CURLOPT_PROXY_PINNEDPUBLICKEY |
| - | Set the proxy's pinned SSL public key. See |
| - | \fICURLOPT_PROXY_PINNEDPUBLICKEY(3)\fP |
| - | .IP CURLOPT_RANDOM_FILE |
| - | \fBOBSOLETE\fP Provide source for entropy random data. |
| - | See \fICURLOPT_RANDOM_FILE(3)\fP |
| - | .IP CURLOPT_EGDSOCKET |
| - | \fBOBSOLETE\fP Identify EGD socket for entropy. See \fICURLOPT_EGDSOCKET(3)\fP |
| - | .IP CURLOPT_SSL_CIPHER_LIST |
| - | Ciphers to use. See \fICURLOPT_SSL_CIPHER_LIST(3)\fP |
| - | .IP CURLOPT_PROXY_SSL_CIPHER_LIST |
| - | Proxy ciphers to use. See \fICURLOPT_PROXY_SSL_CIPHER_LIST(3)\fP |
| - | .IP CURLOPT_TLS13_CIPHERS |
| - | TLS 1.3 cipher suites to use. See \fICURLOPT_TLS13_CIPHERS(3)\fP |
| - | .IP CURLOPT_PROXY_TLS13_CIPHERS |
| - | Proxy TLS 1.3 cipher suites to use. See \fICURLOPT_PROXY_TLS13_CIPHERS(3)\fP |
| - | .IP CURLOPT_SSL_SESSIONID_CACHE |
| - | Disable SSL session-id cache. See \fICURLOPT_SSL_SESSIONID_CACHE(3)\fP |
| - | .IP CURLOPT_SSL_OPTIONS |
| - | Control SSL behavior. See \fICURLOPT_SSL_OPTIONS(3)\fP |
| - | .IP CURLOPT_PROXY_SSL_OPTIONS |
| - | Control proxy SSL behavior. See \fICURLOPT_PROXY_SSL_OPTIONS(3)\fP |
| - | .IP CURLOPT_KRBLEVEL |
| - | Kerberos security level. See \fICURLOPT_KRBLEVEL(3)\fP |
| - | .IP CURLOPT_GSSAPI_DELEGATION |
| - | Disable GSS-API delegation. See \fICURLOPT_GSSAPI_DELEGATION(3)\fP |
| - | .SH SSH OPTIONS |
| - | .IP CURLOPT_SSH_AUTH_TYPES |
| - | SSH authentication types. See \fICURLOPT_SSH_AUTH_TYPES(3)\fP |
| - | .IP CURLOPT_SSH_COMPRESSION |
| - | Enable SSH compression. See \fICURLOPT_SSH_COMPRESSION(3)\fP |
| - | .IP CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 |
| - | MD5 of host's public key. See \fICURLOPT_SSH_HOST_PUBLIC_KEY_MD5(3)\fP |
| - | .IP CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 |
| - | SHA256 of host's public key. See \fICURLOPT_SSH_HOST_PUBLIC_KEY_SHA256(3)\fP |
| - | .IP CURLOPT_SSH_PUBLIC_KEYFILE |
| - | File name of public key. See \fICURLOPT_SSH_PUBLIC_KEYFILE(3)\fP |
| - | .IP CURLOPT_SSH_PRIVATE_KEYFILE |
| - | File name of private key. See \fICURLOPT_SSH_PRIVATE_KEYFILE(3)\fP |
| - | .IP CURLOPT_SSH_KNOWNHOSTS |
| - | File name with known hosts. See \fICURLOPT_SSH_KNOWNHOSTS(3)\fP |
| - | .IP CURLOPT_SSH_KEYFUNCTION |
| - | Callback for known hosts handling. See \fICURLOPT_SSH_KEYFUNCTION(3)\fP |
| - | .IP CURLOPT_SSH_KEYDATA |
| - | Custom pointer to pass to ssh key callback. See \fICURLOPT_SSH_KEYDATA(3)\fP |
| - | .IP CURLOPT_SSH_HOSTKEYFUNCTION |
| - | Callback for checking host key handling. See \fICURLOPT_SSH_HOSTKEYFUNCTION(3)\fP |
| - | .IP CURLOPT_SSH_HOSTKEYDATA |
| - | Custom pointer to pass to ssh host key callback. See \fICURLOPT_SSH_HOSTKEYDATA(3)\fP |
| - | .SH WEBSOCKET |
| - | .IP CURLOPT_WS_OPTIONS |
| - | Set WebSocket options. See \fICURLOPT_WS_OPTIONS(3)\fP |
| - | .SH OTHER OPTIONS |
| - | .IP CURLOPT_PRIVATE |
| - | Private pointer to store. See \fICURLOPT_PRIVATE(3)\fP |
| - | .IP CURLOPT_SHARE |
| - | Share object to use. See \fICURLOPT_SHARE(3)\fP |
| - | .IP CURLOPT_NEW_FILE_PERMS |
| - | Mode for creating new remote files. See \fICURLOPT_NEW_FILE_PERMS(3)\fP |
| - | .IP CURLOPT_NEW_DIRECTORY_PERMS |
| - | Mode for creating new remote directories. See \fICURLOPT_NEW_DIRECTORY_PERMS(3)\fP |
| - | .IP CURLOPT_QUICK_EXIT |
| - | To be set by toplevel tools like "curl" to skip lengthy cleanups when they are about to call exit() anyway. See \fICURLOPT_QUICK_EXIT(3)\fP |
| - | .SH TELNET OPTIONS |
| - | .IP CURLOPT_TELNETOPTIONS |
| - | TELNET options. See \fICURLOPT_TELNETOPTIONS(3)\fP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Always |
| - | .SH RETURN VALUE |
| - | \fICURLE_OK\fP (zero) means that the option was set properly, non-zero means an |
| - | error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors(3)\fP |
| - | man page for the full list with descriptions. |
| - | |
| - | Strings passed on to libcurl must be shorter than 8000000 bytes, otherwise |
| - | \fIcurl_easy_setopt(3)\fP returns \fBCURLE_BAD_FUNCTION_ARGUMENT\fP (added in |
| - | 7.65.0). |
| - | |
| - | \fBCURLE_BAD_FUNCTION_ARGUMENT\fP is returned when the argument to an option |
| - | is invalid, like perhaps out of range. |
| - | |
| - | If you try to set an option that libcurl does not know about, perhaps because |
| - | the library is too old to support it or the option was removed in a recent |
| - | version, this function returns \fICURLE_UNKNOWN_OPTION\fP. If support for the |
| - | option was disabled at compile-time, it returns \fICURLE_NOT_BUILT_IN\fP. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_cleanup (3), |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_init (3), |
| - | .BR curl_easy_option_by_id (3), |
| - | .BR curl_easy_option_by_name (3), |
| - | .BR curl_easy_option_next (3), |
| - | .BR curl_easy_reset (3), |
| - | .BR curl_multi_setopt (3) |
| @@ -0,0 +1,1381 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_setopt |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_cleanup (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_init (3) |
| + | - curl_easy_option_by_id (3) |
| + | - curl_easy_option_by_name (3) |
| + | - curl_easy_option_next (3) |
| + | - curl_easy_reset (3) |
| + | - curl_multi_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_easy_setopt - set options for a curl easy handle |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_easy_setopt(3) is used to tell libcurl how to behave. By setting the |
| + | appropriate options, the application can change libcurl's behavior. All |
| + | options are set with an *option* followed by a *parameter*. That parameter can |
| + | be a **long**, a **function pointer**, an **object pointer** or a |
| + | **curl_off_t**, depending on what the specific option expects. Read this |
| + | manual carefully as bad input values may cause libcurl to behave badly! You |
| + | can only set one option in each function call. A typical application uses many |
| + | curl_easy_setopt(3) calls in the setup phase. |
| + | |
| + | Options set with this function call are valid for all forthcoming transfers |
| + | performed using this *handle*. The options are not in any way reset between |
| + | transfers, so if you want subsequent transfers with different options, you |
| + | must change them between the transfers. You can optionally reset all options |
| + | back to internal default with curl_easy_reset(3). |
| + | |
| + | Strings passed to libcurl as 'char *' arguments, are copied by the library; |
| + | the string storage associated to the pointer argument may be discarded or |
| + | reused after curl_easy_setopt(3) returns. The only exception to this rule is |
| + | really CURLOPT_POSTFIELDS(3), but the alternative that copies the string |
| + | CURLOPT_COPYPOSTFIELDS(3) has some usage characteristics you need to read up |
| + | on. This function does not accept input strings longer than |
| + | **CURL_MAX_INPUT_LENGTH** (8 MB). |
| + | |
| + | The order in which the options are set does not matter. |
| + | |
| + | Before version 7.17.0, strings were not copied. Instead the user was forced |
| + | keep them available until libcurl no longer needed them. |
| + | |
| + | The *handle* is the return code from a curl_easy_init(3) or |
| + | curl_easy_duphandle(3) call. |
| + | |
| + | # BEHAVIOR OPTIONS |
| + | |
| + | ## CURLOPT_VERBOSE |
| + | |
| + | Display verbose information. See CURLOPT_VERBOSE(3) |
| + | |
| + | ## CURLOPT_HEADER |
| + | |
| + | Include the header in the body output. See CURLOPT_HEADER(3) |
| + | |
| + | ## CURLOPT_NOPROGRESS |
| + | |
| + | Shut off the progress meter. See CURLOPT_NOPROGRESS(3) |
| + | |
| + | ## CURLOPT_NOSIGNAL |
| + | |
| + | Do not install signal handlers. See CURLOPT_NOSIGNAL(3) |
| + | |
| + | ## CURLOPT_WILDCARDMATCH |
| + | |
| + | Transfer multiple files according to a file name pattern. See |
| + | CURLOPT_WILDCARDMATCH(3) |
| + | |
| + | # CALLBACK OPTIONS |
| + | |
| + | ## CURLOPT_WRITEFUNCTION |
| + | |
| + | Callback for writing data. See CURLOPT_WRITEFUNCTION(3) |
| + | |
| + | ## CURLOPT_WRITEDATA |
| + | |
| + | Data pointer to pass to the write callback. See CURLOPT_WRITEDATA(3) |
| + | |
| + | ## CURLOPT_READFUNCTION |
| + | |
| + | Callback for reading data. See CURLOPT_READFUNCTION(3) |
| + | |
| + | ## CURLOPT_READDATA |
| + | |
| + | Data pointer to pass to the read callback. See CURLOPT_READDATA(3) |
| + | |
| + | ## CURLOPT_IOCTLFUNCTION |
| + | |
| + | **Deprecated option** Callback for I/O operations. |
| + | See CURLOPT_IOCTLFUNCTION(3) |
| + | |
| + | ## CURLOPT_IOCTLDATA |
| + | |
| + | **Deprecated option** Data pointer to pass to the I/O callback. |
| + | See CURLOPT_IOCTLDATA(3) |
| + | |
| + | ## CURLOPT_SEEKFUNCTION |
| + | |
| + | Callback for seek operations. See CURLOPT_SEEKFUNCTION(3) |
| + | |
| + | ## CURLOPT_SEEKDATA |
| + | |
| + | Data pointer to pass to the seek callback. See CURLOPT_SEEKDATA(3) |
| + | |
| + | ## CURLOPT_SOCKOPTFUNCTION |
| + | |
| + | Callback for sockopt operations. See CURLOPT_SOCKOPTFUNCTION(3) |
| + | |
| + | ## CURLOPT_SOCKOPTDATA |
| + | |
| + | Data pointer to pass to the sockopt callback. See CURLOPT_SOCKOPTDATA(3) |
| + | |
| + | ## CURLOPT_OPENSOCKETFUNCTION |
| + | |
| + | Callback for socket creation. See CURLOPT_OPENSOCKETFUNCTION(3) |
| + | |
| + | ## CURLOPT_OPENSOCKETDATA |
| + | |
| + | Data pointer to pass to the open socket callback. See CURLOPT_OPENSOCKETDATA(3) |
| + | |
| + | ## CURLOPT_CLOSESOCKETFUNCTION |
| + | |
| + | Callback for closing socket. See CURLOPT_CLOSESOCKETFUNCTION(3) |
| + | |
| + | ## CURLOPT_CLOSESOCKETDATA |
| + | |
| + | Data pointer to pass to the close socket callback. See CURLOPT_CLOSESOCKETDATA(3) |
| + | |
| + | ## CURLOPT_PROGRESSFUNCTION |
| + | |
| + | **OBSOLETE** callback for progress meter. |
| + | See CURLOPT_PROGRESSFUNCTION(3) |
| + | |
| + | ## CURLOPT_PROGRESSDATA |
| + | |
| + | Data pointer to pass to the progress meter callback. See CURLOPT_PROGRESSDATA(3) |
| + | |
| + | ## CURLOPT_XFERINFOFUNCTION |
| + | |
| + | Callback for progress meter. See CURLOPT_XFERINFOFUNCTION(3) |
| + | |
| + | ## CURLOPT_XFERINFODATA |
| + | |
| + | Data pointer to pass to the progress meter callback. See CURLOPT_XFERINFODATA(3) |
| + | |
| + | ## CURLOPT_HEADERFUNCTION |
| + | |
| + | Callback for writing received headers. See CURLOPT_HEADERFUNCTION(3) |
| + | |
| + | ## CURLOPT_HEADERDATA |
| + | |
| + | Data pointer to pass to the header callback. See CURLOPT_HEADERDATA(3) |
| + | |
| + | ## CURLOPT_DEBUGFUNCTION |
| + | |
| + | Callback for debug information. See CURLOPT_DEBUGFUNCTION(3) |
| + | |
| + | ## CURLOPT_DEBUGDATA |
| + | |
| + | Data pointer to pass to the debug callback. See CURLOPT_DEBUGDATA(3) |
| + | |
| + | ## CURLOPT_SSL_CTX_FUNCTION |
| + | |
| + | Callback for SSL context logic. See CURLOPT_SSL_CTX_FUNCTION(3) |
| + | |
| + | ## CURLOPT_SSL_CTX_DATA |
| + | |
| + | Data pointer to pass to the SSL context callback. See CURLOPT_SSL_CTX_DATA(3) |
| + | |
| + | ## CURLOPT_CONV_TO_NETWORK_FUNCTION |
| + | |
| + | **OBSOLETE** Callback for code base conversion. |
| + | See CURLOPT_CONV_TO_NETWORK_FUNCTION(3) |
| + | |
| + | ## CURLOPT_CONV_FROM_NETWORK_FUNCTION |
| + | |
| + | **OBSOLETE** Callback for code base conversion. |
| + | See CURLOPT_CONV_FROM_NETWORK_FUNCTION(3) |
| + | |
| + | ## CURLOPT_CONV_FROM_UTF8_FUNCTION |
| + | |
| + | **OBSOLETE** Callback for code base conversion. |
| + | See CURLOPT_CONV_FROM_UTF8_FUNCTION(3) |
| + | |
| + | ## CURLOPT_INTERLEAVEFUNCTION |
| + | |
| + | Callback for RTSP interleaved data. See CURLOPT_INTERLEAVEFUNCTION(3) |
| + | |
| + | ## CURLOPT_INTERLEAVEDATA |
| + | |
| + | Data pointer to pass to the RTSP interleave callback. See CURLOPT_INTERLEAVEDATA(3) |
| + | |
| + | ## CURLOPT_CHUNK_BGN_FUNCTION |
| + | |
| + | Callback for wildcard download start of chunk. See CURLOPT_CHUNK_BGN_FUNCTION(3) |
| + | |
| + | ## CURLOPT_CHUNK_END_FUNCTION |
| + | |
| + | Callback for wildcard download end of chunk. See CURLOPT_CHUNK_END_FUNCTION(3) |
| + | |
| + | ## CURLOPT_CHUNK_DATA |
| + | |
| + | Data pointer to pass to the chunk callbacks. See CURLOPT_CHUNK_DATA(3) |
| + | |
| + | ## CURLOPT_FNMATCH_FUNCTION |
| + | |
| + | Callback for wildcard matching. See CURLOPT_FNMATCH_FUNCTION(3) |
| + | |
| + | ## CURLOPT_FNMATCH_DATA |
| + | |
| + | Data pointer to pass to the wildcard matching callback. See CURLOPT_FNMATCH_DATA(3) |
| + | |
| + | ## CURLOPT_SUPPRESS_CONNECT_HEADERS |
| + | |
| + | Suppress proxy CONNECT response headers from user callbacks. See |
| + | CURLOPT_SUPPRESS_CONNECT_HEADERS(3) |
| + | |
| + | ## CURLOPT_RESOLVER_START_FUNCTION |
| + | |
| + | Callback to be called before a new resolve request is started. See |
| + | CURLOPT_RESOLVER_START_FUNCTION(3) |
| + | |
| + | ## CURLOPT_RESOLVER_START_DATA |
| + | |
| + | Data pointer to pass to resolver start callback. See CURLOPT_RESOLVER_START_DATA(3) |
| + | |
| + | ## CURLOPT_PREREQFUNCTION |
| + | |
| + | Callback to be called after a connection is established but before a request |
| + | is made on that connection. See CURLOPT_PREREQFUNCTION(3) |
| + | |
| + | ## CURLOPT_PREREQDATA |
| + | |
| + | Data pointer to pass to the CURLOPT_PREREQFUNCTION callback. See |
| + | CURLOPT_PREREQDATA(3) |
| + | |
| + | # ERROR OPTIONS |
| + | |
| + | ## CURLOPT_ERRORBUFFER |
| + | |
| + | Error message buffer. See CURLOPT_ERRORBUFFER(3) |
| + | |
| + | ## CURLOPT_STDERR |
| + | |
| + | stderr replacement stream. See CURLOPT_STDERR(3) |
| + | |
| + | ## CURLOPT_FAILONERROR |
| + | |
| + | Fail on HTTP 4xx errors. CURLOPT_FAILONERROR(3) |
| + | |
| + | ## CURLOPT_KEEP_SENDING_ON_ERROR |
| + | |
| + | Keep sending on HTTP >= 300 errors. CURLOPT_KEEP_SENDING_ON_ERROR(3) |
| + | |
| + | # NETWORK OPTIONS |
| + | |
| + | ## CURLOPT_URL |
| + | |
| + | URL to work on. See CURLOPT_URL(3) |
| + | |
| + | ## CURLOPT_PATH_AS_IS |
| + | |
| + | Disable squashing /../ and /./ sequences in the path. See CURLOPT_PATH_AS_IS(3) |
| + | |
| + | ## CURLOPT_PROTOCOLS |
| + | |
| + | **Deprecated option** Allowed protocols. See CURLOPT_PROTOCOLS(3) |
| + | |
| + | ## CURLOPT_PROTOCOLS_STR |
| + | |
| + | Allowed protocols. See CURLOPT_PROTOCOLS_STR(3) |
| + | |
| + | ## CURLOPT_REDIR_PROTOCOLS |
| + | |
| + | **Deprecated option** Protocols to allow redirects to. See |
| + | CURLOPT_REDIR_PROTOCOLS(3) |
| + | |
| + | ## CURLOPT_REDIR_PROTOCOLS_STR |
| + | |
| + | Protocols to allow redirects to. See CURLOPT_REDIR_PROTOCOLS_STR(3) |
| + | |
| + | ## CURLOPT_DEFAULT_PROTOCOL |
| + | |
| + | Default protocol. See CURLOPT_DEFAULT_PROTOCOL(3) |
| + | |
| + | ## CURLOPT_PROXY |
| + | |
| + | Proxy to use. See CURLOPT_PROXY(3) |
| + | |
| + | ## CURLOPT_PRE_PROXY |
| + | |
| + | Socks proxy to use. See CURLOPT_PRE_PROXY(3) |
| + | |
| + | ## CURLOPT_PROXYPORT |
| + | |
| + | Proxy port to use. See CURLOPT_PROXYPORT(3) |
| + | |
| + | ## CURLOPT_PROXYTYPE |
| + | |
| + | Proxy type. See CURLOPT_PROXYTYPE(3) |
| + | |
| + | ## CURLOPT_NOPROXY |
| + | |
| + | Filter out hosts from proxy use. CURLOPT_NOPROXY(3) |
| + | |
| + | ## CURLOPT_HTTPPROXYTUNNEL |
| + | |
| + | Tunnel through the HTTP proxy. CURLOPT_HTTPPROXYTUNNEL(3) |
| + | |
| + | ## CURLOPT_CONNECT_TO |
| + | |
| + | Connect to a specific host and port. See CURLOPT_CONNECT_TO(3) |
| + | |
| + | ## CURLOPT_SOCKS5_AUTH |
| + | |
| + | Socks5 authentication methods. See CURLOPT_SOCKS5_AUTH(3) |
| + | |
| + | ## CURLOPT_SOCKS5_GSSAPI_SERVICE |
| + | |
| + | **Deprecated option** Socks5 GSSAPI service name. |
| + | See CURLOPT_SOCKS5_GSSAPI_SERVICE(3) |
| + | |
| + | ## CURLOPT_SOCKS5_GSSAPI_NEC |
| + | |
| + | Socks5 GSSAPI NEC mode. See CURLOPT_SOCKS5_GSSAPI_NEC(3) |
| + | |
| + | ## CURLOPT_PROXY_SERVICE_NAME |
| + | |
| + | Proxy authentication service name. CURLOPT_PROXY_SERVICE_NAME(3) |
| + | |
| + | ## CURLOPT_HAPROXYPROTOCOL |
| + | |
| + | Send an HAProxy PROXY protocol v1 header. See CURLOPT_HAPROXYPROTOCOL(3) |
| + | |
| + | ## CURLOPT_HAPROXY_CLIENT_IP |
| + | |
| + | Spoof the client IP in an HAProxy PROXY protocol v1 header. See |
| + | CURLOPT_HAPROXY_CLIENT_IP(3) |
| + | |
| + | ## CURLOPT_SERVICE_NAME |
| + | |
| + | Authentication service name. CURLOPT_SERVICE_NAME(3) |
| + | |
| + | ## CURLOPT_INTERFACE |
| + | |
| + | Bind connection locally to this. See CURLOPT_INTERFACE(3) |
| + | |
| + | ## CURLOPT_LOCALPORT |
| + | |
| + | Bind connection locally to this port. See CURLOPT_LOCALPORT(3) |
| + | |
| + | ## CURLOPT_LOCALPORTRANGE |
| + | |
| + | Bind connection locally to port range. See CURLOPT_LOCALPORTRANGE(3) |
| + | |
| + | ## CURLOPT_DNS_CACHE_TIMEOUT |
| + | |
| + | Timeout for DNS cache. See CURLOPT_DNS_CACHE_TIMEOUT(3) |
| + | |
| + | ## CURLOPT_DNS_USE_GLOBAL_CACHE |
| + | |
| + | **OBSOLETE** Enable global DNS cache. |
| + | See CURLOPT_DNS_USE_GLOBAL_CACHE(3) |
| + | |
| + | ## CURLOPT_DOH_URL |
| + | |
| + | Use this DoH server for name resolves. See CURLOPT_DOH_URL(3) |
| + | |
| + | ## CURLOPT_BUFFERSIZE |
| + | |
| + | Ask for alternate buffer size. See CURLOPT_BUFFERSIZE(3) |
| + | |
| + | ## CURLOPT_PORT |
| + | |
| + | Port number to connect to. See CURLOPT_PORT(3) |
| + | |
| + | ## CURLOPT_TCP_FASTOPEN |
| + | |
| + | Enable TCP Fast Open. See CURLOPT_TCP_FASTOPEN(3) |
| + | |
| + | ## CURLOPT_TCP_NODELAY |
| + | |
| + | Disable the Nagle algorithm. See CURLOPT_TCP_NODELAY(3) |
| + | |
| + | ## CURLOPT_ADDRESS_SCOPE |
| + | |
| + | IPv6 scope for local addresses. See CURLOPT_ADDRESS_SCOPE(3) |
| + | |
| + | ## CURLOPT_TCP_KEEPALIVE |
| + | |
| + | Enable TCP keep-alive. See CURLOPT_TCP_KEEPALIVE(3) |
| + | |
| + | ## CURLOPT_TCP_KEEPIDLE |
| + | |
| + | Idle time before sending keep-alive. See CURLOPT_TCP_KEEPIDLE(3) |
| + | |
| + | ## CURLOPT_TCP_KEEPINTVL |
| + | |
| + | Interval between keep-alive probes. See CURLOPT_TCP_KEEPINTVL(3) |
| + | |
| + | ## CURLOPT_UNIX_SOCKET_PATH |
| + | |
| + | Path to a Unix domain socket. See CURLOPT_UNIX_SOCKET_PATH(3) |
| + | |
| + | ## CURLOPT_ABSTRACT_UNIX_SOCKET |
| + | |
| + | Path to an abstract Unix domain socket. See CURLOPT_ABSTRACT_UNIX_SOCKET(3) |
| + | |
| + | # NAMES and PASSWORDS OPTIONS (Authentication) |
| + | |
| + | ## CURLOPT_NETRC |
| + | |
| + | Enable .netrc parsing. See CURLOPT_NETRC(3) |
| + | |
| + | ## CURLOPT_NETRC_FILE |
| + | |
| + | &.netrc file name. See CURLOPT_NETRC_FILE(3) |
| + | |
| + | ## CURLOPT_USERPWD |
| + | |
| + | User name and password. See CURLOPT_USERPWD(3) |
| + | |
| + | ## CURLOPT_PROXYUSERPWD |
| + | |
| + | Proxy user name and password. See CURLOPT_PROXYUSERPWD(3) |
| + | |
| + | ## CURLOPT_USERNAME |
| + | |
| + | User name. See CURLOPT_USERNAME(3) |
| + | |
| + | ## CURLOPT_PASSWORD |
| + | |
| + | Password. See CURLOPT_PASSWORD(3) |
| + | |
| + | ## CURLOPT_LOGIN_OPTIONS |
| + | |
| + | Login options. See CURLOPT_LOGIN_OPTIONS(3) |
| + | |
| + | ## CURLOPT_PROXYUSERNAME |
| + | |
| + | Proxy user name. See CURLOPT_PROXYUSERNAME(3) |
| + | |
| + | ## CURLOPT_PROXYPASSWORD |
| + | |
| + | Proxy password. See CURLOPT_PROXYPASSWORD(3) |
| + | |
| + | ## CURLOPT_HTTPAUTH |
| + | |
| + | HTTP server authentication methods. See CURLOPT_HTTPAUTH(3) |
| + | |
| + | ## CURLOPT_TLSAUTH_USERNAME |
| + | |
| + | TLS authentication user name. See CURLOPT_TLSAUTH_USERNAME(3) |
| + | |
| + | ## CURLOPT_PROXY_TLSAUTH_USERNAME |
| + | |
| + | Proxy TLS authentication user name. See CURLOPT_PROXY_TLSAUTH_USERNAME(3) |
| + | |
| + | ## CURLOPT_TLSAUTH_PASSWORD |
| + | |
| + | TLS authentication password. See CURLOPT_TLSAUTH_PASSWORD(3) |
| + | |
| + | ## CURLOPT_PROXY_TLSAUTH_PASSWORD |
| + | |
| + | Proxy TLS authentication password. See CURLOPT_PROXY_TLSAUTH_PASSWORD(3) |
| + | |
| + | ## CURLOPT_TLSAUTH_TYPE |
| + | |
| + | TLS authentication methods. See CURLOPT_TLSAUTH_TYPE(3) |
| + | |
| + | ## CURLOPT_PROXY_TLSAUTH_TYPE |
| + | |
| + | Proxy TLS authentication methods. See CURLOPT_PROXY_TLSAUTH_TYPE(3) |
| + | |
| + | ## CURLOPT_PROXYAUTH |
| + | |
| + | HTTP proxy authentication methods. See CURLOPT_PROXYAUTH(3) |
| + | |
| + | ## CURLOPT_SASL_AUTHZID |
| + | |
| + | SASL authorization identity (identity to act as). See CURLOPT_SASL_AUTHZID(3) |
| + | |
| + | ## CURLOPT_SASL_IR |
| + | |
| + | Enable SASL initial response. See CURLOPT_SASL_IR(3) |
| + | |
| + | ## CURLOPT_XOAUTH2_BEARER |
| + | |
| + | OAuth2 bearer token. See CURLOPT_XOAUTH2_BEARER(3) |
| + | |
| + | ## CURLOPT_DISALLOW_USERNAME_IN_URL |
| + | |
| + | Do not allow username in URL. See CURLOPT_DISALLOW_USERNAME_IN_URL(3) |
| + | |
| + | # HTTP OPTIONS |
| + | |
| + | ## CURLOPT_AUTOREFERER |
| + | |
| + | Automatically set Referer: header. See CURLOPT_AUTOREFERER(3) |
| + | |
| + | ## CURLOPT_ACCEPT_ENCODING |
| + | |
| + | Accept-Encoding and automatic decompressing data. See CURLOPT_ACCEPT_ENCODING(3) |
| + | |
| + | ## CURLOPT_TRANSFER_ENCODING |
| + | |
| + | Request Transfer-Encoding. See CURLOPT_TRANSFER_ENCODING(3) |
| + | |
| + | ## CURLOPT_FOLLOWLOCATION |
| + | |
| + | Follow HTTP redirects. See CURLOPT_FOLLOWLOCATION(3) |
| + | |
| + | ## CURLOPT_UNRESTRICTED_AUTH |
| + | |
| + | Do not restrict authentication to original host. CURLOPT_UNRESTRICTED_AUTH(3) |
| + | |
| + | ## CURLOPT_MAXREDIRS |
| + | |
| + | Maximum number of redirects to follow. See CURLOPT_MAXREDIRS(3) |
| + | |
| + | ## CURLOPT_POSTREDIR |
| + | |
| + | How to act on redirects after POST. See CURLOPT_POSTREDIR(3) |
| + | |
| + | ## CURLOPT_PUT |
| + | |
| + | **Deprecated option** Issue an HTTP PUT request. See CURLOPT_PUT(3) |
| + | |
| + | ## CURLOPT_POST |
| + | |
| + | Issue an HTTP POST request. See CURLOPT_POST(3) |
| + | |
| + | ## CURLOPT_POSTFIELDS |
| + | |
| + | Send a POST with this data. See CURLOPT_POSTFIELDS(3) |
| + | |
| + | ## CURLOPT_POSTFIELDSIZE |
| + | |
| + | The POST data is this big. See CURLOPT_POSTFIELDSIZE(3) |
| + | |
| + | ## CURLOPT_POSTFIELDSIZE_LARGE |
| + | |
| + | The POST data is this big. See CURLOPT_POSTFIELDSIZE_LARGE(3) |
| + | |
| + | ## CURLOPT_COPYPOSTFIELDS |
| + | |
| + | Send a POST with this data - and copy it. See CURLOPT_COPYPOSTFIELDS(3) |
| + | |
| + | ## CURLOPT_HTTPPOST |
| + | |
| + | **Deprecated option** Multipart formpost HTTP POST. |
| + | See CURLOPT_HTTPPOST(3) |
| + | |
| + | ## CURLOPT_REFERER |
| + | |
| + | Referer: header. See CURLOPT_REFERER(3) |
| + | |
| + | ## CURLOPT_USERAGENT |
| + | |
| + | User-Agent: header. See CURLOPT_USERAGENT(3) |
| + | |
| + | ## CURLOPT_HTTPHEADER |
| + | |
| + | Custom HTTP headers. See CURLOPT_HTTPHEADER(3) |
| + | |
| + | ## CURLOPT_HEADEROPT |
| + | |
| + | Control custom headers. See CURLOPT_HEADEROPT(3) |
| + | |
| + | ## CURLOPT_PROXYHEADER |
| + | |
| + | Custom HTTP headers sent to proxy. See CURLOPT_PROXYHEADER(3) |
| + | |
| + | ## CURLOPT_HTTP200ALIASES |
| + | |
| + | Alternative versions of 200 OK. See CURLOPT_HTTP200ALIASES(3) |
| + | |
| + | ## CURLOPT_COOKIE |
| + | |
| + | Cookie(s) to send. See CURLOPT_COOKIE(3) |
| + | |
| + | ## CURLOPT_COOKIEFILE |
| + | |
| + | File to read cookies from. See CURLOPT_COOKIEFILE(3) |
| + | |
| + | ## CURLOPT_COOKIEJAR |
| + | |
| + | File to write cookies to. See CURLOPT_COOKIEJAR(3) |
| + | |
| + | ## CURLOPT_COOKIESESSION |
| + | |
| + | Start a new cookie session. See CURLOPT_COOKIESESSION(3) |
| + | |
| + | ## CURLOPT_COOKIELIST |
| + | |
| + | Add or control cookies. See CURLOPT_COOKIELIST(3) |
| + | |
| + | ## CURLOPT_ALTSVC |
| + | |
| + | Specify the Alt-Svc: cache file name. See CURLOPT_ALTSVC(3) |
| + | |
| + | ## CURLOPT_ALTSVC_CTRL |
| + | |
| + | Enable and configure Alt-Svc: treatment. See CURLOPT_ALTSVC_CTRL(3) |
| + | |
| + | ## CURLOPT_HSTS |
| + | |
| + | Set HSTS cache file. See CURLOPT_HSTS(3) |
| + | |
| + | ## CURLOPT_HSTS_CTRL |
| + | |
| + | Enable HSTS. See CURLOPT_HSTS_CTRL(3) |
| + | |
| + | ## CURLOPT_HSTSREADFUNCTION |
| + | |
| + | Set HSTS read callback. See CURLOPT_HSTSREADFUNCTION(3) |
| + | |
| + | ## CURLOPT_HSTSREADDATA |
| + | |
| + | Pass pointer to the HSTS read callback. See CURLOPT_HSTSREADDATA(3) |
| + | |
| + | ## CURLOPT_HSTSWRITEFUNCTION |
| + | |
| + | Set HSTS write callback. See CURLOPT_HSTSWRITEFUNCTION(3) |
| + | |
| + | ## CURLOPT_HSTSWRITEDATA |
| + | |
| + | Pass pointer to the HSTS write callback. See CURLOPT_HSTSWRITEDATA(3) |
| + | |
| + | ## CURLOPT_HTTPGET |
| + | |
| + | Do an HTTP GET request. See CURLOPT_HTTPGET(3) |
| + | |
| + | ## CURLOPT_REQUEST_TARGET |
| + | |
| + | Set the request target. CURLOPT_REQUEST_TARGET(3) |
| + | |
| + | ## CURLOPT_HTTP_VERSION |
| + | |
| + | HTTP version to use. CURLOPT_HTTP_VERSION(3) |
| + | |
| + | ## CURLOPT_HTTP09_ALLOWED |
| + | |
| + | Allow HTTP/0.9 responses. CURLOPT_HTTP09_ALLOWED(3) |
| + | |
| + | ## CURLOPT_IGNORE_CONTENT_LENGTH |
| + | |
| + | Ignore Content-Length. See CURLOPT_IGNORE_CONTENT_LENGTH(3) |
| + | |
| + | ## CURLOPT_HTTP_CONTENT_DECODING |
| + | |
| + | Disable Content decoding. See CURLOPT_HTTP_CONTENT_DECODING(3) |
| + | |
| + | ## CURLOPT_HTTP_TRANSFER_DECODING |
| + | |
| + | Disable Transfer decoding. See CURLOPT_HTTP_TRANSFER_DECODING(3) |
| + | |
| + | ## CURLOPT_EXPECT_100_TIMEOUT_MS |
| + | |
| + | 100-continue timeout. See CURLOPT_EXPECT_100_TIMEOUT_MS(3) |
| + | |
| + | ## CURLOPT_TRAILERFUNCTION |
| + | |
| + | Set callback for sending trailing headers. See |
| + | CURLOPT_TRAILERFUNCTION(3) |
| + | |
| + | ## CURLOPT_TRAILERDATA |
| + | |
| + | Custom pointer passed to the trailing headers callback. See |
| + | CURLOPT_TRAILERDATA(3) |
| + | |
| + | ## CURLOPT_PIPEWAIT |
| + | |
| + | Wait on connection to pipeline on it. See CURLOPT_PIPEWAIT(3) |
| + | |
| + | ## CURLOPT_STREAM_DEPENDS |
| + | |
| + | This HTTP/2 stream depends on another. See CURLOPT_STREAM_DEPENDS(3) |
| + | |
| + | ## CURLOPT_STREAM_DEPENDS_E |
| + | |
| + | This HTTP/2 stream depends on another exclusively. See |
| + | CURLOPT_STREAM_DEPENDS_E(3) |
| + | |
| + | ## CURLOPT_STREAM_WEIGHT |
| + | |
| + | Set this HTTP/2 stream's weight. See CURLOPT_STREAM_WEIGHT(3) |
| + | |
| + | # SMTP OPTIONS |
| + | |
| + | ## CURLOPT_MAIL_FROM |
| + | |
| + | Address of the sender. See CURLOPT_MAIL_FROM(3) |
| + | |
| + | ## CURLOPT_MAIL_RCPT |
| + | |
| + | Address of the recipients. See CURLOPT_MAIL_RCPT(3) |
| + | |
| + | ## CURLOPT_MAIL_AUTH |
| + | |
| + | Authentication address. See CURLOPT_MAIL_AUTH(3) |
| + | |
| + | ## CURLOPT_MAIL_RCPT_ALLOWFAILS |
| + | |
| + | Allow RCPT TO command to fail for some recipients. See |
| + | CURLOPT_MAIL_RCPT_ALLOWFAILS(3) |
| + | |
| + | # TFTP OPTIONS |
| + | |
| + | ## CURLOPT_TFTP_BLKSIZE |
| + | |
| + | TFTP block size. See CURLOPT_TFTP_BLKSIZE(3) |
| + | |
| + | ## CURLOPT_TFTP_NO_OPTIONS |
| + | |
| + | Do not send TFTP options requests. See CURLOPT_TFTP_NO_OPTIONS(3) |
| + | |
| + | # FTP OPTIONS |
| + | |
| + | ## CURLOPT_FTPPORT |
| + | |
| + | Use active FTP. See CURLOPT_FTPPORT(3) |
| + | |
| + | ## CURLOPT_QUOTE |
| + | |
| + | Commands to run before transfer. See CURLOPT_QUOTE(3) |
| + | |
| + | ## CURLOPT_POSTQUOTE |
| + | |
| + | Commands to run after transfer. See CURLOPT_POSTQUOTE(3) |
| + | |
| + | ## CURLOPT_PREQUOTE |
| + | |
| + | Commands to run just before transfer. See CURLOPT_PREQUOTE(3) |
| + | |
| + | ## CURLOPT_APPEND |
| + | |
| + | Append to remote file. See CURLOPT_APPEND(3) |
| + | |
| + | ## CURLOPT_FTP_USE_EPRT |
| + | |
| + | Use EPRT. See CURLOPT_FTP_USE_EPRT(3) |
| + | |
| + | ## CURLOPT_FTP_USE_EPSV |
| + | |
| + | Use EPSV. See CURLOPT_FTP_USE_EPSV(3) |
| + | |
| + | ## CURLOPT_FTP_USE_PRET |
| + | |
| + | Use PRET. See CURLOPT_FTP_USE_PRET(3) |
| + | |
| + | ## CURLOPT_FTP_CREATE_MISSING_DIRS |
| + | |
| + | Create missing directories on the remote server. See CURLOPT_FTP_CREATE_MISSING_DIRS(3) |
| + | |
| + | ## CURLOPT_SERVER_RESPONSE_TIMEOUT |
| + | |
| + | Timeout for server responses. See CURLOPT_SERVER_RESPONSE_TIMEOUT(3) |
| + | |
| + | ## CURLOPT_SERVER_RESPONSE_TIMEOUT_MS |
| + | |
| + | Timeout for server responses. See CURLOPT_SERVER_RESPONSE_TIMEOUT_MS(3) |
| + | |
| + | ## CURLOPT_FTP_ALTERNATIVE_TO_USER |
| + | |
| + | Alternative to USER. See CURLOPT_FTP_ALTERNATIVE_TO_USER(3) |
| + | |
| + | ## CURLOPT_FTP_SKIP_PASV_IP |
| + | |
| + | Ignore the IP address in the PASV response. See CURLOPT_FTP_SKIP_PASV_IP(3) |
| + | |
| + | ## CURLOPT_FTPSSLAUTH |
| + | |
| + | Control how to do TLS. See CURLOPT_FTPSSLAUTH(3) |
| + | |
| + | ## CURLOPT_FTP_SSL_CCC |
| + | |
| + | Back to non-TLS again after authentication. See CURLOPT_FTP_SSL_CCC(3) |
| + | |
| + | ## CURLOPT_FTP_ACCOUNT |
| + | |
| + | Send ACCT command. See CURLOPT_FTP_ACCOUNT(3) |
| + | |
| + | ## CURLOPT_FTP_FILEMETHOD |
| + | |
| + | Specify how to reach files. See CURLOPT_FTP_FILEMETHOD(3) |
| + | |
| + | # RTSP OPTIONS |
| + | |
| + | ## CURLOPT_RTSP_REQUEST |
| + | |
| + | RTSP request. See CURLOPT_RTSP_REQUEST(3) |
| + | |
| + | ## CURLOPT_RTSP_SESSION_ID |
| + | |
| + | RTSP session-id. See CURLOPT_RTSP_SESSION_ID(3) |
| + | |
| + | ## CURLOPT_RTSP_STREAM_URI |
| + | |
| + | RTSP stream URI. See CURLOPT_RTSP_STREAM_URI(3) |
| + | |
| + | ## CURLOPT_RTSP_TRANSPORT |
| + | |
| + | RTSP Transport: header. See CURLOPT_RTSP_TRANSPORT(3) |
| + | |
| + | ## CURLOPT_RTSP_CLIENT_CSEQ |
| + | |
| + | Client CSEQ number. See CURLOPT_RTSP_CLIENT_CSEQ(3) |
| + | |
| + | ## CURLOPT_RTSP_SERVER_CSEQ |
| + | |
| + | CSEQ number for RTSP Server->Client request. See CURLOPT_RTSP_SERVER_CSEQ(3) |
| + | |
| + | ## CURLOPT_AWS_SIGV4 |
| + | |
| + | AWS HTTP V4 Signature. See CURLOPT_AWS_SIGV4(3) |
| + | |
| + | # PROTOCOL OPTIONS |
| + | |
| + | ## CURLOPT_TRANSFERTEXT |
| + | |
| + | Use text transfer. See CURLOPT_TRANSFERTEXT(3) |
| + | |
| + | ## CURLOPT_PROXY_TRANSFER_MODE |
| + | |
| + | Add transfer mode to URL over proxy. See CURLOPT_PROXY_TRANSFER_MODE(3) |
| + | |
| + | ## CURLOPT_CRLF |
| + | |
| + | Convert newlines. See CURLOPT_CRLF(3) |
| + | |
| + | ## CURLOPT_RANGE |
| + | |
| + | Range requests. See CURLOPT_RANGE(3) |
| + | |
| + | ## CURLOPT_RESUME_FROM |
| + | |
| + | Resume a transfer. See CURLOPT_RESUME_FROM(3) |
| + | |
| + | ## CURLOPT_RESUME_FROM_LARGE |
| + | |
| + | Resume a transfer. See CURLOPT_RESUME_FROM_LARGE(3) |
| + | |
| + | ## CURLOPT_CURLU |
| + | |
| + | Set URL to work on with a URL handle. See CURLOPT_CURLU(3) |
| + | |
| + | ## CURLOPT_CUSTOMREQUEST |
| + | |
| + | Custom request/method. See CURLOPT_CUSTOMREQUEST(3) |
| + | |
| + | ## CURLOPT_FILETIME |
| + | |
| + | Request file modification date and time. See CURLOPT_FILETIME(3) |
| + | |
| + | ## CURLOPT_DIRLISTONLY |
| + | |
| + | List only. See CURLOPT_DIRLISTONLY(3) |
| + | |
| + | ## CURLOPT_NOBODY |
| + | |
| + | Do not get the body contents. See CURLOPT_NOBODY(3) |
| + | |
| + | ## CURLOPT_INFILESIZE |
| + | |
| + | Size of file to send. CURLOPT_INFILESIZE(3) |
| + | |
| + | ## CURLOPT_INFILESIZE_LARGE |
| + | |
| + | Size of file to send. CURLOPT_INFILESIZE_LARGE(3) |
| + | |
| + | ## CURLOPT_UPLOAD |
| + | |
| + | Upload data. See CURLOPT_UPLOAD(3) |
| + | |
| + | ## CURLOPT_UPLOAD_BUFFERSIZE |
| + | |
| + | Set upload buffer size. See CURLOPT_UPLOAD_BUFFERSIZE(3) |
| + | |
| + | ## CURLOPT_MIMEPOST |
| + | |
| + | Post/send MIME data. See CURLOPT_MIMEPOST(3) |
| + | |
| + | ## CURLOPT_MIME_OPTIONS |
| + | |
| + | Set MIME option flags. See CURLOPT_MIME_OPTIONS(3) |
| + | |
| + | ## CURLOPT_MAXFILESIZE |
| + | |
| + | Maximum file size to get. See CURLOPT_MAXFILESIZE(3) |
| + | |
| + | ## CURLOPT_MAXFILESIZE_LARGE |
| + | |
| + | Maximum file size to get. See CURLOPT_MAXFILESIZE_LARGE(3) |
| + | |
| + | ## CURLOPT_TIMECONDITION |
| + | |
| + | Make a time conditional request. See CURLOPT_TIMECONDITION(3) |
| + | |
| + | ## CURLOPT_TIMEVALUE |
| + | |
| + | Time value for the time conditional request. See CURLOPT_TIMEVALUE(3) |
| + | |
| + | ## CURLOPT_TIMEVALUE_LARGE |
| + | |
| + | Time value for the time conditional request. See CURLOPT_TIMEVALUE_LARGE(3) |
| + | |
| + | # CONNECTION OPTIONS |
| + | |
| + | ## CURLOPT_TIMEOUT |
| + | |
| + | Timeout for the entire request. See CURLOPT_TIMEOUT(3) |
| + | |
| + | ## CURLOPT_TIMEOUT_MS |
| + | |
| + | Millisecond timeout for the entire request. See CURLOPT_TIMEOUT_MS(3) |
| + | |
| + | ## CURLOPT_LOW_SPEED_LIMIT |
| + | |
| + | Low speed limit to abort transfer. See CURLOPT_LOW_SPEED_LIMIT(3) |
| + | |
| + | ## CURLOPT_LOW_SPEED_TIME |
| + | |
| + | Time to be below the speed to trigger low speed abort. See CURLOPT_LOW_SPEED_TIME(3) |
| + | |
| + | ## CURLOPT_MAX_SEND_SPEED_LARGE |
| + | |
| + | Cap the upload speed to this. See CURLOPT_MAX_SEND_SPEED_LARGE(3) |
| + | |
| + | ## CURLOPT_MAX_RECV_SPEED_LARGE |
| + | |
| + | Cap the download speed to this. See CURLOPT_MAX_RECV_SPEED_LARGE(3) |
| + | |
| + | ## CURLOPT_MAXCONNECTS |
| + | |
| + | Maximum number of connections in the connection pool. See CURLOPT_MAXCONNECTS(3) |
| + | |
| + | ## CURLOPT_FRESH_CONNECT |
| + | |
| + | Use a new connection. CURLOPT_FRESH_CONNECT(3) |
| + | |
| + | ## CURLOPT_FORBID_REUSE |
| + | |
| + | Prevent subsequent connections from reusing this. See CURLOPT_FORBID_REUSE(3) |
| + | |
| + | ## CURLOPT_MAXAGE_CONN |
| + | |
| + | Limit the age (idle time) of connections for reuse. See CURLOPT_MAXAGE_CONN(3) |
| + | |
| + | ## CURLOPT_MAXLIFETIME_CONN |
| + | |
| + | Limit the age (since creation) of connections for reuse. See |
| + | CURLOPT_MAXLIFETIME_CONN(3) |
| + | |
| + | ## CURLOPT_CONNECTTIMEOUT |
| + | |
| + | Timeout for the connection phase. See CURLOPT_CONNECTTIMEOUT(3) |
| + | |
| + | ## CURLOPT_CONNECTTIMEOUT_MS |
| + | |
| + | Millisecond timeout for the connection phase. See CURLOPT_CONNECTTIMEOUT_MS(3) |
| + | |
| + | ## CURLOPT_IPRESOLVE |
| + | |
| + | IP version to use. See CURLOPT_IPRESOLVE(3) |
| + | |
| + | ## CURLOPT_CONNECT_ONLY |
| + | |
| + | Only connect, nothing else. See CURLOPT_CONNECT_ONLY(3) |
| + | |
| + | ## CURLOPT_USE_SSL |
| + | |
| + | Use TLS/SSL. See CURLOPT_USE_SSL(3) |
| + | |
| + | ## CURLOPT_RESOLVE |
| + | |
| + | Provide fixed/fake name resolves. See CURLOPT_RESOLVE(3) |
| + | |
| + | ## CURLOPT_DNS_INTERFACE |
| + | |
| + | Bind name resolves to this interface. See CURLOPT_DNS_INTERFACE(3) |
| + | |
| + | ## CURLOPT_DNS_LOCAL_IP4 |
| + | |
| + | Bind name resolves to this IP4 address. See CURLOPT_DNS_LOCAL_IP4(3) |
| + | |
| + | ## CURLOPT_DNS_LOCAL_IP6 |
| + | |
| + | Bind name resolves to this IP6 address. See CURLOPT_DNS_LOCAL_IP6(3) |
| + | |
| + | ## CURLOPT_DNS_SERVERS |
| + | |
| + | Preferred DNS servers. See CURLOPT_DNS_SERVERS(3) |
| + | |
| + | ## CURLOPT_DNS_SHUFFLE_ADDRESSES |
| + | |
| + | Shuffle addresses before use. See CURLOPT_DNS_SHUFFLE_ADDRESSES(3) |
| + | |
| + | ## CURLOPT_ACCEPTTIMEOUT_MS |
| + | |
| + | Timeout for waiting for the server's connect back to be accepted. See |
| + | CURLOPT_ACCEPTTIMEOUT_MS(3) |
| + | |
| + | ## CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS |
| + | |
| + | Timeout for happy eyeballs. See CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS(3) |
| + | |
| + | ## CURLOPT_UPKEEP_INTERVAL_MS |
| + | |
| + | Sets the interval at which connection upkeep are performed. See |
| + | CURLOPT_UPKEEP_INTERVAL_MS(3) |
| + | |
| + | # SSL and SECURITY OPTIONS |
| + | |
| + | ## CURLOPT_SSLCERT |
| + | |
| + | Client cert. See CURLOPT_SSLCERT(3) |
| + | |
| + | ## CURLOPT_SSLCERT_BLOB |
| + | |
| + | Client cert memory buffer. See CURLOPT_SSLCERT_BLOB(3) |
| + | |
| + | ## CURLOPT_PROXY_SSLCERT |
| + | |
| + | Proxy client cert. See CURLOPT_PROXY_SSLCERT(3) |
| + | |
| + | ## CURLOPT_PROXY_SSLCERT_BLOB |
| + | |
| + | Proxy client cert memory buffer. See CURLOPT_PROXY_SSLCERT_BLOB(3) |
| + | |
| + | ## CURLOPT_SSLCERTTYPE |
| + | |
| + | Client cert type. See CURLOPT_SSLCERTTYPE(3) |
| + | |
| + | ## CURLOPT_PROXY_SSLCERTTYPE |
| + | |
| + | Proxy client cert type. See CURLOPT_PROXY_SSLCERTTYPE(3) |
| + | |
| + | ## CURLOPT_SSLKEY |
| + | |
| + | Client key. See CURLOPT_SSLKEY(3) |
| + | |
| + | ## CURLOPT_SSLKEY_BLOB |
| + | |
| + | Client key memory buffer. See CURLOPT_SSLKEY_BLOB(3) |
| + | |
| + | ## CURLOPT_PROXY_SSLKEY |
| + | |
| + | Proxy client key. See CURLOPT_PROXY_SSLKEY(3) |
| + | |
| + | ## CURLOPT_PROXY_SSLKEY_BLOB |
| + | |
| + | Proxy client key. See CURLOPT_PROXY_SSLKEY_BLOB(3) |
| + | |
| + | ## CURLOPT_SSLKEYTYPE |
| + | |
| + | Client key type. See CURLOPT_SSLKEYTYPE(3) |
| + | |
| + | ## CURLOPT_PROXY_SSLKEYTYPE |
| + | |
| + | Proxy client key type. See CURLOPT_PROXY_SSLKEYTYPE(3) |
| + | |
| + | ## CURLOPT_KEYPASSWD |
| + | |
| + | Client key password. See CURLOPT_KEYPASSWD(3) |
| + | |
| + | ## CURLOPT_PROXY_KEYPASSWD |
| + | |
| + | Proxy client key password. See CURLOPT_PROXY_KEYPASSWD(3) |
| + | |
| + | ## CURLOPT_SSL_EC_CURVES |
| + | |
| + | Set key exchange curves. See CURLOPT_SSL_EC_CURVES(3) |
| + | |
| + | ## CURLOPT_SSL_ENABLE_ALPN |
| + | |
| + | Enable use of ALPN. See CURLOPT_SSL_ENABLE_ALPN(3) |
| + | |
| + | ## CURLOPT_SSL_ENABLE_NPN |
| + | |
| + | **OBSOLETE** Enable use of NPN. See CURLOPT_SSL_ENABLE_NPN(3) |
| + | |
| + | ## CURLOPT_SSLENGINE |
| + | |
| + | Use identifier with SSL engine. See CURLOPT_SSLENGINE(3) |
| + | |
| + | ## CURLOPT_SSLENGINE_DEFAULT |
| + | |
| + | Default SSL engine. See CURLOPT_SSLENGINE_DEFAULT(3) |
| + | |
| + | ## CURLOPT_SSL_FALSESTART |
| + | |
| + | Enable TLS False Start. See CURLOPT_SSL_FALSESTART(3) |
| + | |
| + | ## CURLOPT_SSLVERSION |
| + | |
| + | SSL version to use. See CURLOPT_SSLVERSION(3) |
| + | |
| + | ## CURLOPT_PROXY_SSLVERSION |
| + | |
| + | Proxy SSL version to use. See CURLOPT_PROXY_SSLVERSION(3) |
| + | |
| + | ## CURLOPT_SSL_VERIFYHOST |
| + | |
| + | Verify the host name in the SSL certificate. See CURLOPT_SSL_VERIFYHOST(3) |
| + | |
| + | ## CURLOPT_DOH_SSL_VERIFYHOST |
| + | |
| + | Verify the host name in the DoH (DNS-over-HTTPS) SSL certificate. See |
| + | CURLOPT_DOH_SSL_VERIFYHOST(3) |
| + | |
| + | ## CURLOPT_PROXY_SSL_VERIFYHOST |
| + | |
| + | Verify the host name in the proxy SSL certificate. See |
| + | CURLOPT_PROXY_SSL_VERIFYHOST(3) |
| + | |
| + | ## CURLOPT_SSL_VERIFYPEER |
| + | |
| + | Verify the SSL certificate. See CURLOPT_SSL_VERIFYPEER(3) |
| + | |
| + | ## CURLOPT_DOH_SSL_VERIFYPEER |
| + | |
| + | Verify the DoH (DNS-over-HTTPS) SSL certificate. See |
| + | CURLOPT_DOH_SSL_VERIFYPEER(3) |
| + | |
| + | ## CURLOPT_PROXY_SSL_VERIFYPEER |
| + | |
| + | Verify the proxy SSL certificate. See CURLOPT_PROXY_SSL_VERIFYPEER(3) |
| + | |
| + | ## CURLOPT_SSL_VERIFYSTATUS |
| + | |
| + | Verify the SSL certificate's status. See CURLOPT_SSL_VERIFYSTATUS(3) |
| + | |
| + | ## CURLOPT_DOH_SSL_VERIFYSTATUS |
| + | |
| + | Verify the DoH (DNS-over-HTTPS) SSL certificate's status. See |
| + | CURLOPT_DOH_SSL_VERIFYSTATUS(3) |
| + | |
| + | ## CURLOPT_CAINFO |
| + | |
| + | CA cert bundle. See CURLOPT_CAINFO(3) |
| + | |
| + | ## CURLOPT_CAINFO_BLOB |
| + | |
| + | CA cert bundle memory buffer. See CURLOPT_CAINFO_BLOB(3) |
| + | |
| + | ## CURLOPT_PROXY_CAINFO |
| + | |
| + | Proxy CA cert bundle. See CURLOPT_PROXY_CAINFO(3) |
| + | |
| + | ## CURLOPT_PROXY_CAINFO_BLOB |
| + | |
| + | Proxy CA cert bundle memory buffer. See CURLOPT_PROXY_CAINFO_BLOB(3) |
| + | |
| + | ## CURLOPT_ISSUERCERT |
| + | |
| + | Issuer certificate. See CURLOPT_ISSUERCERT(3) |
| + | |
| + | ## CURLOPT_ISSUERCERT_BLOB |
| + | |
| + | Issuer certificate memory buffer. See CURLOPT_ISSUERCERT_BLOB(3) |
| + | |
| + | ## CURLOPT_PROXY_ISSUERCERT |
| + | |
| + | Proxy issuer certificate. See CURLOPT_PROXY_ISSUERCERT(3) |
| + | |
| + | ## CURLOPT_PROXY_ISSUERCERT_BLOB |
| + | |
| + | Proxy issuer certificate memory buffer. See CURLOPT_PROXY_ISSUERCERT_BLOB(3) |
| + | |
| + | ## CURLOPT_CAPATH |
| + | |
| + | Path to CA cert bundle. See CURLOPT_CAPATH(3) |
| + | |
| + | ## CURLOPT_PROXY_CAPATH |
| + | |
| + | Path to proxy CA cert bundle. See CURLOPT_PROXY_CAPATH(3) |
| + | |
| + | ## CURLOPT_CRLFILE |
| + | |
| + | Certificate Revocation List. See CURLOPT_CRLFILE(3) |
| + | |
| + | ## CURLOPT_PROXY_CRLFILE |
| + | |
| + | Proxy Certificate Revocation List. See CURLOPT_PROXY_CRLFILE(3) |
| + | |
| + | ## CURLOPT_CA_CACHE_TIMEOUT |
| + | |
| + | Timeout for CA cache. See CURLOPT_CA_CACHE_TIMEOUT(3) |
| + | |
| + | ## CURLOPT_CERTINFO |
| + | |
| + | Extract certificate info. See CURLOPT_CERTINFO(3) |
| + | |
| + | ## CURLOPT_PINNEDPUBLICKEY |
| + | |
| + | Set pinned SSL public key . See CURLOPT_PINNEDPUBLICKEY(3) |
| + | |
| + | ## CURLOPT_PROXY_PINNEDPUBLICKEY |
| + | |
| + | Set the proxy's pinned SSL public key. See |
| + | CURLOPT_PROXY_PINNEDPUBLICKEY(3) |
| + | |
| + | ## CURLOPT_RANDOM_FILE |
| + | |
| + | **OBSOLETE** Provide source for entropy random data. |
| + | See CURLOPT_RANDOM_FILE(3) |
| + | |
| + | ## CURLOPT_EGDSOCKET |
| + | |
| + | **OBSOLETE** Identify EGD socket for entropy. See CURLOPT_EGDSOCKET(3) |
| + | |
| + | ## CURLOPT_SSL_CIPHER_LIST |
| + | |
| + | Ciphers to use. See CURLOPT_SSL_CIPHER_LIST(3) |
| + | |
| + | ## CURLOPT_PROXY_SSL_CIPHER_LIST |
| + | |
| + | Proxy ciphers to use. See CURLOPT_PROXY_SSL_CIPHER_LIST(3) |
| + | |
| + | ## CURLOPT_TLS13_CIPHERS |
| + | |
| + | TLS 1.3 cipher suites to use. See CURLOPT_TLS13_CIPHERS(3) |
| + | |
| + | ## CURLOPT_PROXY_TLS13_CIPHERS |
| + | |
| + | Proxy TLS 1.3 cipher suites to use. See CURLOPT_PROXY_TLS13_CIPHERS(3) |
| + | |
| + | ## CURLOPT_SSL_SESSIONID_CACHE |
| + | |
| + | Disable SSL session-id cache. See CURLOPT_SSL_SESSIONID_CACHE(3) |
| + | |
| + | ## CURLOPT_SSL_OPTIONS |
| + | |
| + | Control SSL behavior. See CURLOPT_SSL_OPTIONS(3) |
| + | |
| + | ## CURLOPT_PROXY_SSL_OPTIONS |
| + | |
| + | Control proxy SSL behavior. See CURLOPT_PROXY_SSL_OPTIONS(3) |
| + | |
| + | ## CURLOPT_KRBLEVEL |
| + | |
| + | Kerberos security level. See CURLOPT_KRBLEVEL(3) |
| + | |
| + | ## CURLOPT_GSSAPI_DELEGATION |
| + | |
| + | Disable GSS-API delegation. See CURLOPT_GSSAPI_DELEGATION(3) |
| + | |
| + | # SSH OPTIONS |
| + | |
| + | ## CURLOPT_SSH_AUTH_TYPES |
| + | |
| + | SSH authentication types. See CURLOPT_SSH_AUTH_TYPES(3) |
| + | |
| + | ## CURLOPT_SSH_COMPRESSION |
| + | |
| + | Enable SSH compression. See CURLOPT_SSH_COMPRESSION(3) |
| + | |
| + | ## CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 |
| + | |
| + | MD5 of host's public key. See CURLOPT_SSH_HOST_PUBLIC_KEY_MD5(3) |
| + | |
| + | ## CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 |
| + | |
| + | SHA256 of host's public key. See CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256(3) |
| + | |
| + | ## CURLOPT_SSH_PUBLIC_KEYFILE |
| + | |
| + | File name of public key. See CURLOPT_SSH_PUBLIC_KEYFILE(3) |
| + | |
| + | ## CURLOPT_SSH_PRIVATE_KEYFILE |
| + | |
| + | File name of private key. See CURLOPT_SSH_PRIVATE_KEYFILE(3) |
| + | |
| + | ## CURLOPT_SSH_KNOWNHOSTS |
| + | |
| + | File name with known hosts. See CURLOPT_SSH_KNOWNHOSTS(3) |
| + | |
| + | ## CURLOPT_SSH_KEYFUNCTION |
| + | |
| + | Callback for known hosts handling. See CURLOPT_SSH_KEYFUNCTION(3) |
| + | |
| + | ## CURLOPT_SSH_KEYDATA |
| + | |
| + | Custom pointer to pass to ssh key callback. See CURLOPT_SSH_KEYDATA(3) |
| + | |
| + | ## CURLOPT_SSH_HOSTKEYFUNCTION |
| + | |
| + | Callback for checking host key handling. See CURLOPT_SSH_HOSTKEYFUNCTION(3) |
| + | |
| + | ## CURLOPT_SSH_HOSTKEYDATA |
| + | |
| + | Custom pointer to pass to ssh host key callback. See CURLOPT_SSH_HOSTKEYDATA(3) |
| + | |
| + | # WEBSOCKET |
| + | |
| + | ## CURLOPT_WS_OPTIONS |
| + | |
| + | Set WebSocket options. See CURLOPT_WS_OPTIONS(3) |
| + | |
| + | # OTHER OPTIONS |
| + | |
| + | ## CURLOPT_PRIVATE |
| + | |
| + | Private pointer to store. See CURLOPT_PRIVATE(3) |
| + | |
| + | ## CURLOPT_SHARE |
| + | |
| + | Share object to use. See CURLOPT_SHARE(3) |
| + | |
| + | ## CURLOPT_NEW_FILE_PERMS |
| + | |
| + | Mode for creating new remote files. See CURLOPT_NEW_FILE_PERMS(3) |
| + | |
| + | ## CURLOPT_NEW_DIRECTORY_PERMS |
| + | |
| + | Mode for creating new remote directories. See CURLOPT_NEW_DIRECTORY_PERMS(3) |
| + | |
| + | ## CURLOPT_QUICK_EXIT |
| + | |
| + | To be set by toplevel tools like "curl" to skip lengthy cleanups when they are |
| + | about to call exit() anyway. See CURLOPT_QUICK_EXIT(3) |
| + | |
| + | # TELNET OPTIONS |
| + | |
| + | ## CURLOPT_TELNETOPTIONS |
| + | |
| + | TELNET options. See CURLOPT_TELNETOPTIONS(3) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Always |
| + | |
| + | # RETURN VALUE |
| + | |
| + | *CURLE_OK* (zero) means that the option was set properly, non-zero means an |
| + | error occurred as *<curl/curl.h>* defines. See the libcurl-errors(3) man page |
| + | for the full list with descriptions. |
| + | |
| + | Strings passed on to libcurl must be shorter than 8000000 bytes, otherwise |
| + | curl_easy_setopt(3) returns **CURLE_BAD_FUNCTION_ARGUMENT** (added in 7.65.0). |
| + | |
| + | **CURLE_BAD_FUNCTION_ARGUMENT** is returned when the argument to an option is |
| + | invalid, like perhaps out of range. |
| + | |
| + | If you try to set an option that libcurl does not know about, perhaps because |
| + | the library is too old to support it or the option was removed in a recent |
| + | version, this function returns *CURLE_UNKNOWN_OPTION*. If support for the |
| + | option was disabled at compile-time, it returns *CURLE_NOT_BUILT_IN*. |
| @@ -1,64 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_easy_strerror 3 "26 Apr 2004" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_easy_strerror - return string describing error code |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | const char *curl_easy_strerror(CURLcode errornum); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | The \fIcurl_easy_strerror(3)\fP function returns a string describing the |
| - | CURLcode error code passed in the argument \fIerrornum\fP. |
| - | |
| - | Typically applications also appreciate \fICURLOPT_ERRORBUFFER(3)\fP for more |
| - | specific error descriptions generated at runtime. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | /* set options */ |
| - | /* Perform the entire transfer */ |
| - | res = curl_easy_perform(curl); |
| - | /* Check for errors */ |
| - | if(res != CURLE_OK) |
| - | fprintf(stderr, "curl_easy_perform() failed: %s\\n", |
| - | curl_easy_strerror(res)); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This function was added in libcurl 7.12.0 |
| - | .SH RETURN VALUE |
| - | A pointer to a null-terminated string. |
| - | .SH "SEE ALSO" |
| - | .BR libcurl-errors (3), |
| - | .BR curl_multi_strerror (3), |
| - | .BR curl_share_strerror (3), |
| - | .BR curl_url_strerror (3) |
| @@ -0,0 +1,59 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_strerror |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_multi_strerror (3) |
| + | - curl_share_strerror (3) |
| + | - curl_url_strerror (3) |
| + | - libcurl-errors (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_easy_strerror - return string describing error code |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | const char *curl_easy_strerror(CURLcode errornum); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | The curl_easy_strerror(3) function returns a string describing the |
| + | CURLcode error code passed in the argument *errornum*. |
| + | |
| + | Typically applications also appreciate CURLOPT_ERRORBUFFER(3) for more |
| + | specific error descriptions generated at runtime. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | /* set options */ |
| + | /* Perform the entire transfer */ |
| + | res = curl_easy_perform(curl); |
| + | /* Check for errors */ |
| + | if(res != CURLE_OK) |
| + | fprintf(stderr, "curl_easy_perform() failed: %s\n", |
| + | curl_easy_strerror(res)); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This function was added in libcurl 7.12.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | A pointer to a null-terminated string. |
| @@ -1,79 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH curl_easy_unescape 3 "7 April 2006" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_easy_unescape - URL decodes the given string |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | char *curl_easy_unescape(CURL *curl, const char *input, |
| - | int inlength, int *outlength); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function converts the URL encoded string \fBinput\fP to a "plain string" |
| - | and returns that in an allocated memory area. All input characters that are URL |
| - | encoded (%XX where XX is a two-digit hexadecimal number) are converted to their |
| - | binary versions. |
| - | |
| - | If the \fBlength\fP argument is set to 0 (zero), \fIcurl_easy_unescape(3)\fP |
| - | uses strlen() on \fBinput\fP to find out the size. |
| - | |
| - | If \fBoutlength\fP is non-NULL, the function writes the length of the returned |
| - | string in the integer it points to. This allows proper handling even for |
| - | strings containing %00. Since this is a pointer to an \fIint\fP type, it can |
| - | only return a value up to \fIINT_MAX\fP so no longer string can be returned in |
| - | this parameter. |
| - | |
| - | Since 7.82.0, the \fBcurl\fP parameter is ignored. Prior to that there was |
| - | per-handle character conversion support for some old operating systems such as |
| - | TPF, but it was otherwise ignored. |
| - | |
| - | You must \fIcurl_free(3)\fP the returned string when you are done with it. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | int decodelen; |
| - | char *decoded = curl_easy_unescape(curl, "%63%75%72%6c", 12, &decodelen); |
| - | if(decoded) { |
| - | /* do not assume printf() works on the decoded data! */ |
| - | printf("Decoded: "); |
| - | /* ... */ |
| - | curl_free(decoded); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.15.4 and replaces the old \fIcurl_unescape(3)\fP function. |
| - | .SH RETURN VALUE |
| - | A pointer to a null-terminated string or NULL if it failed. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_escape (3), |
| - | .BR curl_free (3) |
| @@ -0,0 +1,73 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_unescape |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_escape (3) |
| + | - curl_free (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_easy_unescape - URL decodes the given string |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | char *curl_easy_unescape(CURL *curl, const char *input, |
| + | int inlength, int *outlength); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function converts the URL encoded string **input** to a "plain string" |
| + | and returns that in an allocated memory area. All input characters that are URL |
| + | encoded (%XX where XX is a two-digit hexadecimal number) are converted to their |
| + | binary versions. |
| + | |
| + | If the **length** argument is set to 0 (zero), curl_easy_unescape(3) |
| + | uses strlen() on **input** to find out the size. |
| + | |
| + | If **outlength** is non-NULL, the function writes the length of the returned |
| + | string in the integer it points to. This allows proper handling even for |
| + | strings containing %00. Since this is a pointer to an *int* type, it can |
| + | only return a value up to *INT_MAX* so no longer string can be returned in |
| + | this parameter. |
| + | |
| + | Since 7.82.0, the **curl** parameter is ignored. Prior to that there was |
| + | per-handle character conversion support for some old operating systems such as |
| + | TPF, but it was otherwise ignored. |
| + | |
| + | You must curl_free(3) the returned string when you are done with it. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | int decodelen; |
| + | char *decoded = curl_easy_unescape(curl, "%63%75%72%6c", 12, &decodelen); |
| + | if(decoded) { |
| + | /* do not assume printf() works on the decoded data! */ |
| + | printf("Decoded: "); |
| + | /* ... */ |
| + | curl_free(decoded); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.15.4 and replaces the old curl_unescape(3) function. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | A pointer to a null-terminated string or NULL if it failed. |
| @@ -1,84 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH curl_easy_upkeep 3 "31 Oct 2018" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_easy_upkeep - Perform any connection upkeep checks. |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_upkeep(CURL *handle); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | |
| - | Some protocols have "connection upkeep" mechanisms. These mechanisms usually |
| - | send some traffic on existing connections in order to keep them alive; this |
| - | can prevent connections from being closed due to overzealous firewalls, for |
| - | example. |
| - | |
| - | Currently the only protocol with a connection upkeep mechanism is HTTP/2: when |
| - | the connection upkeep interval is exceeded and \fIcurl_easy_upkeep(3)\fP |
| - | is called, an HTTP/2 PING frame is sent on the connection. |
| - | |
| - | This function must be explicitly called in order to perform the upkeep work. |
| - | The connection upkeep interval is set with |
| - | \fICURLOPT_UPKEEP_INTERVAL_MS(3)\fP. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | /* Make a connection to an HTTP/2 server. */ |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Set the interval to 30000ms / 30s */ |
| - | curl_easy_setopt(curl, CURLOPT_UPKEEP_INTERVAL_MS, 30000L); |
| - | |
| - | curl_easy_perform(curl); |
| - | |
| - | /* Perform more work here. */ |
| - | |
| - | /* While the connection is being held open, curl_easy_upkeep() can be |
| - | called. If curl_easy_upkeep() is called and the time since the last |
| - | upkeep exceeds the interval, then an HTTP/2 PING is sent. */ |
| - | curl_easy_upkeep(curl); |
| - | |
| - | /* Perform more work here. */ |
| - | |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.62.0. |
| - | .SH RETURN VALUE |
| - | On success, returns \fBCURLE_OK\fP. |
| - | |
| - | On failure, returns the appropriate error code. |
| - | .SH SEE ALSO |
| - | .BR CURLOPT_TCP_KEEPALIVE "(3), " |
| - | .BR CURLOPT_TCP_KEEPIDLE "(3), " |
| @@ -0,0 +1,77 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_easy_upkeep |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_TCP_KEEPALIVE (3) |
| + | - CURLOPT_TCP_KEEPIDLE (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_easy_upkeep - Perform any connection upkeep checks. |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_upkeep(CURL *handle); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Some protocols have "connection upkeep" mechanisms. These mechanisms usually |
| + | send some traffic on existing connections in order to keep them alive; this |
| + | can prevent connections from being closed due to overzealous firewalls, for |
| + | example. |
| + | |
| + | Currently the only protocol with a connection upkeep mechanism is HTTP/2: when |
| + | the connection upkeep interval is exceeded and curl_easy_upkeep(3) |
| + | is called, an HTTP/2 PING frame is sent on the connection. |
| + | |
| + | This function must be explicitly called in order to perform the upkeep work. |
| + | The connection upkeep interval is set with |
| + | CURLOPT_UPKEEP_INTERVAL_MS(3). |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | /* Make a connection to an HTTP/2 server. */ |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Set the interval to 30000ms / 30s */ |
| + | curl_easy_setopt(curl, CURLOPT_UPKEEP_INTERVAL_MS, 30000L); |
| + | |
| + | curl_easy_perform(curl); |
| + | |
| + | /* Perform more work here. */ |
| + | |
| + | /* While the connection is being held open, curl_easy_upkeep() can be |
| + | called. If curl_easy_upkeep() is called and the time since the last |
| + | upkeep exceeds the interval, then an HTTP/2 PING is sent. */ |
| + | curl_easy_upkeep(curl); |
| + | |
| + | /* Perform more work here. */ |
| + | |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.62.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | On success, returns **CURLE_OK**. |
| + | |
| + | On failure, returns the appropriate error code. |
| @@ -1,63 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_escape 3 "6 March 2002" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_escape - URL encodes the given string |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | char *curl_escape(const char *string, int length); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Obsolete function. Use \fIcurl_easy_escape(3)\fP instead! |
| - | |
| - | This function converts the given input \fBstring\fP to a URL encoded string |
| - | and return that as a new allocated string. All input characters that are not |
| - | a-z, A-Z or 0-9 are converted to their "URL escaped" version (\fB%NN\fP where |
| - | \fBNN\fP is a two-digit hexadecimal number). |
| - | |
| - | If the \fBlength\fP argument is set to 0, \fIcurl_escape(3)\fP uses strlen() |
| - | on \fBstring\fP to find out the size. |
| - | |
| - | You must \fIcurl_free(3)\fP the returned string when you are done with it. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | char *output = curl_escape("data to convert", 15); |
| - | if(output) { |
| - | printf("Encoded: %s\\n", output); |
| - | curl_free(output); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Since 7.15.4, \fIcurl_easy_escape(3)\fP should be used. This function might be |
| - | removed in a future release. |
| - | .SH RETURN VALUE |
| - | A pointer to a null-terminated string or NULL if it failed. |
| - | .SH "SEE ALSO" |
| - | .BR curl_unescape (3), |
| - | .BR curl_free (3) |
| @@ -0,0 +1,58 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_escape |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_free (3) |
| + | - curl_unescape (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_escape - URL encodes the given string |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | char *curl_escape(const char *string, int length); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Obsolete function. Use curl_easy_escape(3) instead! |
| + | |
| + | This function converts the given input **string** to a URL encoded string |
| + | and return that as a new allocated string. All input characters that are not |
| + | a-z, A-Z or 0-9 are converted to their "URL escaped" version (**%NN** where |
| + | **NN** is a two-digit hexadecimal number). |
| + | |
| + | If the **length** argument is set to 0, curl_escape(3) uses strlen() |
| + | on **string** to find out the size. |
| + | |
| + | You must curl_free(3) the returned string when you are done with it. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | char *output = curl_escape("data to convert", 15); |
| + | if(output) { |
| + | printf("Encoded: %s\n", output); |
| + | curl_free(output); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Since 7.15.4, curl_easy_escape(3) should be used. This function might be |
| + | removed in a future release. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | A pointer to a null-terminated string or NULL if it failed. |
| @@ -1,55 +1,48 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_formadd 3 "24 June 2002" "libcurl" "libcurl" |
| - | .SH NAME |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_formadd |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_setopt (3) |
| + | - curl_formfree (3) |
| + | - curl_mime_init (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| curl_formadd - add a section to a multipart form POST | |
| - | .SH SYNOPSIS |
| - | .nf |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| CURLFORMcode curl_formadd(struct curl_httppost **firstitem, | |
| struct curl_httppost **lastitem, ...); | |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fBThis function is deprecated.\fP Use \fIcurl_mime_init(3)\fP instead. |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | **This function is deprecated.** Use curl_mime_init(3) instead. |
| curl_formadd() is used to append sections when building a multipart form | |
| post. Append one section at a time until you have added all the sections you | |
| - | want included and then you pass the \fIfirstitem\fP pointer as parameter to |
| - | \fICURLOPT_HTTPPOST(3)\fP. \fIlastitem\fP is set after each |
| - | \fIcurl_formadd(3)\fP call and on repeated invokes it should be left as set to |
| - | allow repeated invokes to find the end of the list faster. |
| + | want included and then you pass the *firstitem* pointer as parameter to |
| + | CURLOPT_HTTPPOST(3). *lastitem* is set after each curl_formadd(3) call and |
| + | on repeated invokes it should be left as set to allow repeated invokes to find |
| + | the end of the list faster. |
| - | After the \fIlastitem\fP pointer follow the real arguments. |
| + | After the *lastitem* pointer follow the real arguments. |
| - | The pointers \fIfirstitem\fP and \fIlastitem\fP should both be pointing to |
| + | The pointers *firstitem* and *lastitem* should both be pointing to |
| NULL in the first call to this function. All list-data is allocated by the | |
| - | function itself. You must call \fIcurl_formfree(3)\fP on the \fIfirstitem\fP |
| + | function itself. You must call curl_formfree(3) on the *firstitem* |
| after the form post has been done to free the resources. | |
| Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. | |
| - | You can disable this header with \fICURLOPT_HTTPHEADER(3)\fP as usual. |
| + | You can disable this header with CURLOPT_HTTPHEADER(3) as usual. |
| First, there are some basics you need to understand about multipart form | |
| posts. Each part consists of at least a NAME and a CONTENTS part. If the part | |
| @@ -58,123 +51,158 @@ Below, we discuss what options you use to set these properties in the parts | |
| you want to add to your post. | |
| The options listed first are for making normal parts. The options from | |
| - | \fICURLFORM_FILE\fP through \fICURLFORM_BUFFERLENGTH\fP are for file upload |
| + | *CURLFORM_FILE* through *CURLFORM_BUFFERLENGTH* are for file upload |
| parts. | |
| - | .SH OPTIONS |
| - | .IP CURLFORM_COPYNAME |
| - | followed by a string which provides the \fIname\fP of this part. libcurl |
| + | |
| + | # OPTIONS |
| + | |
| + | ## CURLFORM_COPYNAME |
| + | |
| + | followed by a string which provides the *name* of this part. libcurl |
| copies the string so your application does not need to keep it around after | |
| this function call. If the name is not null-terminated, you must set its | |
| - | length with \fBCURLFORM_NAMELENGTH\fP. The \fIname\fP is not allowed to |
| - | contain zero-valued bytes. The copied data is freed by \fIcurl_formfree(3)\fP. |
| - | .IP CURLFORM_PTRNAME |
| - | followed by a string which provides the \fIname\fP of this part. libcurl uses |
| - | the pointer and refer to the data in your application, so you must make sure |
| - | it remains until curl no longer needs it. If the name is not null-terminated, |
| - | you must set its length with \fBCURLFORM_NAMELENGTH\fP. The \fIname\fP is not |
| - | allowed to contain zero-valued bytes. |
| - | .IP CURLFORM_COPYCONTENTS |
| + | length with **CURLFORM_NAMELENGTH**. The *name* is not allowed to |
| + | contain zero-valued bytes. The copied data is freed by curl_formfree(3). |
| + | |
| + | ## CURLFORM_PTRNAME |
| + | |
| + | followed by a string which provides the *name* of this part. libcurl uses the |
| + | pointer and refer to the data in your application, so you must make sure it |
| + | remains until curl no longer needs it. If the name is not null-terminated, you |
| + | must set its length with **CURLFORM_NAMELENGTH**. The *name* is not allowed to |
| + | contain zero-valued bytes. |
| + | |
| + | ## CURLFORM_COPYCONTENTS |
| + | |
| followed by a pointer to the contents of this part, the actual data to send | |
| away. libcurl copies the provided data, so your application does not need to | |
| keep it around after this function call. If the data is not null terminated, | |
| or if you would like it to contain zero bytes, you must set the length of the | |
| - | name with \fBCURLFORM_CONTENTSLENGTH\fP. The copied data is freed by |
| - | \fIcurl_formfree(3)\fP. |
| - | .IP CURLFORM_PTRCONTENTS |
| + | name with **CURLFORM_CONTENTSLENGTH**. The copied data is freed by |
| + | curl_formfree(3). |
| + | |
| + | ## CURLFORM_PTRCONTENTS |
| + | |
| followed by a pointer to the contents of this part, the actual data to send | |
| away. libcurl uses the pointer and refer to the data in your application, so | |
| - | you must make sure it remains until curl no longer needs it. If the data is |
| + | you must make sure it remains until curl no longer needs it. If the data is |
| not null-terminated, or if you would like it to contain zero bytes, you must | |
| - | set its length with \fBCURLFORM_CONTENTSLENGTH\fP. |
| - | .IP CURLFORM_CONTENTLEN |
| + | set its length with **CURLFORM_CONTENTSLENGTH**. |
| + | |
| + | ## CURLFORM_CONTENTLEN |
| + | |
| followed by a curl_off_t value giving the length of the contents. Note that | |
| - | for \fICURLFORM_STREAM\fP contents, this option is mandatory. |
| + | for *CURLFORM_STREAM* contents, this option is mandatory. |
| If you pass a 0 (zero) for this option, libcurl calls strlen() on the contents | |
| to figure out the size. If you really want to send a zero byte content then | |
| you must make sure strlen() on the data pointer returns zero. | |
| (Option added in 7.46.0) | |
| - | .IP CURLFORM_CONTENTSLENGTH |
| - | (This option is deprecated. Use \fICURLFORM_CONTENTLEN\fP instead!) |
| + | |
| + | ## CURLFORM_CONTENTSLENGTH |
| + | |
| + | (This option is deprecated. Use *CURLFORM_CONTENTLEN* instead!) |
| followed by a long giving the length of the contents. Note that for | |
| - | \fICURLFORM_STREAM\fP contents, this option is mandatory. |
| + | *CURLFORM_STREAM* contents, this option is mandatory. |
| If you pass a 0 (zero) for this option, libcurl calls strlen() on the contents | |
| to figure out the size. If you really want to send a zero byte content then | |
| you must make sure strlen() on the data pointer returns zero. | |
| - | .IP CURLFORM_FILECONTENT |
| + | |
| + | ## CURLFORM_FILECONTENT |
| + | |
| followed by a filename, causes that file to be read and its contents used | |
| - | as data in this part. This part does \fInot\fP automatically become a file |
| + | as data in this part. This part does *not* automatically become a file |
| upload part simply because its data was read from a file. | |
| The specified file needs to kept around until the associated transfer is done. | |
| - | .IP CURLFORM_FILE |
| + | |
| + | ## CURLFORM_FILE |
| + | |
| followed by a filename, makes this part a file upload part. It sets the | |
| - | \fIfilename\fP field to the basename of the provided filename, it reads the |
| + | *filename* field to the basename of the provided filename, it reads the |
| contents of the file and passes them as data and sets the content-type if the | |
| given file match one of the internally known file extensions. For | |
| - | \fBCURLFORM_FILE\fP the user may send one or more files in one part by |
| - | providing multiple \fBCURLFORM_FILE\fP arguments each followed by the filename |
| - | (and each \fICURLFORM_FILE\fP is allowed to have a |
| - | \fICURLFORM_CONTENTTYPE\fP). |
| + | **CURLFORM_FILE** the user may send one or more files in one part by |
| + | providing multiple **CURLFORM_FILE** arguments each followed by the filename |
| + | (and each *CURLFORM_FILE* is allowed to have a |
| + | *CURLFORM_CONTENTTYPE*). |
| The given upload file has to exist in its full in the file system already when | |
| the upload starts, as libcurl needs to read the correct file size beforehand. | |
| The specified file needs to kept around until the associated transfer is done. | |
| - | .IP CURLFORM_CONTENTTYPE |
| - | is used in combination with \fICURLFORM_FILE\fP. Followed by a pointer to a |
| + | |
| + | ## CURLFORM_CONTENTTYPE |
| + | |
| + | is used in combination with *CURLFORM_FILE*. Followed by a pointer to a |
| string which provides the content-type for this part, possibly instead of an | |
| internally chosen one. | |
| - | .IP CURLFORM_FILENAME |
| - | is used in combination with \fICURLFORM_FILE\fP. Followed by a pointer to a |
| - | string, it tells libcurl to use the given string as the \fIfilename\fP in the |
| + | |
| + | ## CURLFORM_FILENAME |
| + | |
| + | is used in combination with *CURLFORM_FILE*. Followed by a pointer to a |
| + | string, it tells libcurl to use the given string as the *filename* in the |
| file upload part instead of the actual file name. | |
| - | .IP CURLFORM_BUFFER |
| - | is used for custom file upload parts without use of \fICURLFORM_FILE\fP. It |
| + | |
| + | ## CURLFORM_BUFFER |
| + | |
| + | is used for custom file upload parts without use of *CURLFORM_FILE*. It |
| tells libcurl that the file contents are already present in a buffer. The | |
| - | parameter is a string which provides the \fIfilename\fP field in the content |
| + | parameter is a string which provides the *filename* field in the content |
| header. | |
| - | .IP CURLFORM_BUFFERPTR |
| - | is used in combination with \fICURLFORM_BUFFER\fP. The parameter is a pointer |
| + | |
| + | ## CURLFORM_BUFFERPTR |
| + | |
| + | is used in combination with *CURLFORM_BUFFER*. The parameter is a pointer |
| to the buffer to be uploaded. This buffer must not be freed until after | |
| - | \fIcurl_easy_cleanup(3)\fP is called. You must also use |
| - | \fICURLFORM_BUFFERLENGTH\fP to set the number of bytes in the buffer. |
| - | .IP CURLFORM_BUFFERLENGTH |
| - | is used in combination with \fICURLFORM_BUFFER\fP. The parameter is a |
| + | curl_easy_cleanup(3) is called. You must also use |
| + | *CURLFORM_BUFFERLENGTH* to set the number of bytes in the buffer. |
| + | |
| + | ## CURLFORM_BUFFERLENGTH |
| + | |
| + | is used in combination with *CURLFORM_BUFFER*. The parameter is a |
| long which gives the length of the buffer. | |
| - | .IP CURLFORM_STREAM |
| - | Tells libcurl to use the \fICURLOPT_READFUNCTION(3)\fP callback to get |
| - | data. The parameter you pass to \fICURLFORM_STREAM\fP is the pointer passed on |
| + | |
| + | ## CURLFORM_STREAM |
| + | |
| + | Tells libcurl to use the CURLOPT_READFUNCTION(3) callback to get |
| + | data. The parameter you pass to *CURLFORM_STREAM* is the pointer passed on |
| to the read callback's fourth argument. If you want the part to look like a | |
| - | file upload one, set the \fICURLFORM_FILENAME\fP parameter as well. Note that |
| - | when using \fICURLFORM_STREAM\fP, \fICURLFORM_CONTENTSLENGTH\fP must also be |
| + | file upload one, set the *CURLFORM_FILENAME* parameter as well. Note that |
| + | when using *CURLFORM_STREAM*, *CURLFORM_CONTENTSLENGTH* must also be |
| set with the total expected length of the part unless the formpost is sent | |
| chunked encoded. (Option added in libcurl 7.18.2) | |
| - | .IP CURLFORM_ARRAY |
| + | |
| + | ## CURLFORM_ARRAY |
| + | |
| Another possibility to send options to curl_formadd() is the | |
| - | \fBCURLFORM_ARRAY\fP option, that passes a struct curl_forms array pointer as |
| - | its value. Each curl_forms structure element has a \fICURLformoption\fP and a |
| + | **CURLFORM_ARRAY** option, that passes a struct curl_forms array pointer as |
| + | its value. Each curl_forms structure element has a *CURLformoption* and a |
| char pointer. The final element in the array must be a CURLFORM_END. All | |
| available options can be used in an array, except the CURLFORM_ARRAY option | |
| - | itself. The last argument in such an array must always be \fBCURLFORM_END\fP. |
| - | .IP CURLFORM_CONTENTHEADER |
| + | itself. The last argument in such an array must always be **CURLFORM_END**. |
| + | |
| + | ## CURLFORM_CONTENTHEADER |
| + | |
| specifies extra headers for the form POST section. This takes a curl_slist | |
| - | prepared in the usual way using \fBcurl_slist_append\fP and appends the list |
| + | prepared in the usual way using **curl_slist_append** and appends the list |
| of headers to those libcurl automatically generates. The list must exist while | |
| the POST occurs, if you free it before the post completes you may experience | |
| problems. | |
| - | When you have passed the \fIstruct curl_httppost\fP pointer to |
| - | \fIcurl_easy_setopt(3)\fP (using the \fICURLOPT_HTTPPOST(3)\fP option), you |
| - | must not free the list until after you have called \fIcurl_easy_cleanup(3)\fP |
| + | When you have passed the *struct curl_httppost* pointer to |
| + | curl_easy_setopt(3) (using the CURLOPT_HTTPPOST(3) option), you |
| + | must not free the list until after you have called curl_easy_cleanup(3) |
| for the curl handle. | |
| See example below. | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| #include <string.h> /* for strlen */ | |
| static const char record[]="data in a buffer"; | |
| @@ -196,7 +224,7 @@ int main(void) | |
| /* add null character into htmlbuffer, to demonstrate that | |
| transfers of buffers containing null characters actually work | |
| */ | |
| - | htmlbuffer[8] = '\\0'; |
| + | htmlbuffer[8] = '\0'; |
| /* Add simple name/content section */ | |
| curl_formadd(&post, &last, CURLFORM_COPYNAME, "name", | |
| @@ -267,19 +295,19 @@ int main(void) | |
| curl_formfree(post); | |
| } | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| Deprecated in 7.56.0. Before this release, field names were allowed to | |
| contain zero-valued bytes. The pseudo-filename "-" to read stdin is | |
| discouraged although still supported, but data is not read before being | |
| actually sent: the effective data size can then not be automatically | |
| determined, resulting in a chunked encoding transfer. Backslashes and | |
| double quotes in field and file names are now escaped before transmission. | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| 0 means everything was OK, non-zero means an error occurred corresponding | |
| to a CURL_FORMADD_* constant defined in | |
| - | .I <curl/curl.h> |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_setopt (3), |
| - | .BR curl_formfree (3), |
| - | .BR curl_mime_init (3) |
| + | *<curl/curl.h>* |
| @@ -1,81 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_formfree 3 "6 April 2001" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_formfree - free a previously build multipart form post chain |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | void curl_formfree(struct curl_httppost *form); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function is deprecated. Do not use. See \fIcurl_mime_init(3)\fP instead! |
| - | |
| - | curl_formfree() is used to clean up data previously built/appended with |
| - | \fIcurl_formadd(3)\fP. This must be called when the data has been used, which |
| - | typically means after \fIcurl_easy_perform(3)\fP has been called. |
| - | |
| - | The pointer to free is the same pointer you passed to the |
| - | \fICURLOPT_HTTPPOST(3)\fP option, which is the \fIfirstitem\fP pointer from |
| - | the \fIcurl_formadd(3)\fP invoke(s). |
| - | |
| - | \fBform\fP is the pointer as returned from a previous call to |
| - | \fIcurl_formadd(3)\fP and may be NULL. |
| - | |
| - | Passing in a NULL pointer in \fIform\fP makes this function return immediately |
| - | with no action. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | struct curl_httppost *formpost; |
| - | struct curl_httppost *lastptr; |
| - | |
| - | /* Fill in a file upload field */ |
| - | curl_formadd(&formpost, |
| - | &lastptr, |
| - | CURLFORM_COPYNAME, "file", |
| - | CURLFORM_FILE, "nice-image.jpg", |
| - | CURLFORM_END); |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost); |
| - | |
| - | curl_easy_perform(curl); |
| - | |
| - | /* then cleanup the formpost chain */ |
| - | curl_formfree(formpost); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Deprecated in 7.56.0. |
| - | .SH RETURN VALUE |
| - | None |
| - | .SH "SEE ALSO" |
| - | .BR curl_formadd (3), |
| - | .BR curl_mime_init (3), |
| - | .BR curl_mime_free (3) |
| @@ -0,0 +1,76 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_formfree |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_formadd (3) |
| + | - curl_mime_free (3) |
| + | - curl_mime_init (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_formfree - free a previously build multipart form post chain |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | void curl_formfree(struct curl_httppost *form); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function is deprecated. Do not use. See curl_mime_init(3) instead! |
| + | |
| + | curl_formfree() is used to clean up data previously built/appended with |
| + | curl_formadd(3). This must be called when the data has been used, which |
| + | typically means after curl_easy_perform(3) has been called. |
| + | |
| + | The pointer to free is the same pointer you passed to the |
| + | CURLOPT_HTTPPOST(3) option, which is the *firstitem* pointer from |
| + | the curl_formadd(3) invoke(s). |
| + | |
| + | **form** is the pointer as returned from a previous call to |
| + | curl_formadd(3) and may be NULL. |
| + | |
| + | Passing in a NULL pointer in *form* makes this function return immediately |
| + | with no action. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | struct curl_httppost *formpost; |
| + | struct curl_httppost *lastptr; |
| + | |
| + | /* Fill in a file upload field */ |
| + | curl_formadd(&formpost, |
| + | &lastptr, |
| + | CURLFORM_COPYNAME, "file", |
| + | CURLFORM_FILE, "nice-image.jpg", |
| + | CURLFORM_END); |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost); |
| + | |
| + | curl_easy_perform(curl); |
| + | |
| + | /* then cleanup the formpost chain */ |
| + | curl_formfree(formpost); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Deprecated in 7.56.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | None |
| @@ -1,77 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_formget 3 "20 June 2006" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_formget - serialize a previously built multipart form POST chain |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | int curl_formget(struct curl_httppost * form, void *userp, |
| - | curl_formget_callback append); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | curl_formget() serializes data previously built with \fIcurl_formadd(3)\fP. It |
| - | accepts a void pointer as second argument named \fIuserp\fP which is passed as |
| - | the first argument to the curl_formget_callback function. |
| - | |
| - | .nf |
| - | typedef size_t (*curl_formget_callback)(void *userp, const char *buf, |
| - | size_t len);" |
| - | .fi |
| - | |
| - | The curl_formget_callback is invoked for each part of the HTTP POST chain. The |
| - | character buffer passed to the callback must not be freed. The callback should |
| - | return the buffer length passed to it on success. |
| - | |
| - | If the \fBCURLFORM_STREAM\fP option is used in the formpost, it prevents |
| - | \fIcurl_formget(3)\fP from working until you have performed the actual HTTP |
| - | request. This, because first then does libcurl known which actual read |
| - | callback to use! |
| - | .SH EXAMPLE |
| - | .nf |
| - | size_t print_httppost_callback(void *arg, const char *buf, size_t len) |
| - | { |
| - | fwrite(buf, len, 1, stdout); |
| - | (*(size_t *) arg) += len; |
| - | return len; |
| - | } |
| - | |
| - | size_t print_httppost(struct curl_httppost *post) |
| - | { |
| - | size_t total_size = 0; |
| - | if(curl_formget(post, &total_size, print_httppost_callback)) { |
| - | return (size_t) -1; |
| - | } |
| - | return total_size; |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This function was added in libcurl 7.15.5. The form API is deprecated in |
| - | libcurl 7.56.0. |
| - | .SH RETURN VALUE |
| - | 0 means everything was OK, non-zero means an error occurred |
| - | .SH "SEE ALSO" |
| - | .BR curl_formadd (3), |
| - | .BR curl_mime_init (3) |
| @@ -0,0 +1,72 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_formget |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_formadd (3) |
| + | - curl_mime_init (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_formget - serialize a previously built multipart form POST chain |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | int curl_formget(struct curl_httppost * form, void *userp, |
| + | curl_formget_callback append); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_formget() serializes data previously built with curl_formadd(3). It |
| + | accepts a void pointer as second argument named *userp* which is passed as |
| + | the first argument to the curl_formget_callback function. |
| + | |
| + | ~~~c |
| + | typedef size_t (*curl_formget_callback)(void *userp, const char *buf, |
| + | size_t len);" |
| + | ~~~ |
| + | |
| + | The curl_formget_callback is invoked for each part of the HTTP POST chain. The |
| + | character buffer passed to the callback must not be freed. The callback should |
| + | return the buffer length passed to it on success. |
| + | |
| + | If the **CURLFORM_STREAM** option is used in the formpost, it prevents |
| + | curl_formget(3) from working until you have performed the actual HTTP |
| + | request. This, because first then does libcurl known which actual read |
| + | callback to use! |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | size_t print_httppost_callback(void *arg, const char *buf, size_t len) |
| + | { |
| + | fwrite(buf, len, 1, stdout); |
| + | (*(size_t *) arg) += len; |
| + | return len; |
| + | } |
| + | |
| + | size_t print_httppost(struct curl_httppost *post) |
| + | { |
| + | size_t total_size = 0; |
| + | if(curl_formget(post, &total_size, print_httppost_callback)) { |
| + | return (size_t) -1; |
| + | } |
| + | return total_size; |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This function was added in libcurl 7.15.5. The form API is deprecated in |
| + | libcurl 7.56.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | 0 means everything was OK, non-zero means an error occurred |
| @@ -1,57 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_free 3 "12 Aug 2003" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_free - reclaim memory that has been obtained through a libcurl call |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | void curl_free(void *ptr); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | curl_free reclaims memory that has been obtained through a libcurl call. Use |
| - | \fIcurl_free(3)\fP instead of free() to avoid anomalies that can result from |
| - | differences in memory management between your application and libcurl. |
| - | |
| - | Passing in a NULL pointer in \fIptr\fP makes this function return immediately |
| - | with no action. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | char *width = curl_getenv("COLUMNS"); |
| - | if(width) { |
| - | /* it was set! */ |
| - | curl_free(width); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Always |
| - | .SH RETURN VALUE |
| - | None |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_escape (3), |
| - | .BR curl_easy_unescape (3) |
| @@ -0,0 +1,52 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_free |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_escape (3) |
| + | - curl_easy_unescape (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_free - reclaim memory that has been obtained through a libcurl call |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | void curl_free(void *ptr); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_free reclaims memory that has been obtained through a libcurl call. Use |
| + | curl_free(3) instead of free() to avoid anomalies that can result from |
| + | differences in memory management between your application and libcurl. |
| + | |
| + | Passing in a NULL pointer in *ptr* makes this function return immediately |
| + | with no action. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | char *width = curl_getenv("COLUMNS"); |
| + | if(width) { |
| + | /* it was set! */ |
| + | curl_free(width); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Always |
| + | |
| + | # RETURN VALUE |
| + | |
| + | None |
| @@ -1,70 +1,77 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_getdate 3 "12 Aug 2005" "libcurl" "libcurl" |
| - | .SH NAME |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_getdate |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_TIMECONDITION (3) |
| + | - CURLOPT_TIMEVALUE (3) |
| + | - curl_easy_escape (3) |
| + | - curl_easy_unescape (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| curl_getdate - Convert a date string to number of seconds | |
| - | .SH SYNOPSIS |
| - | .nf |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| time_t curl_getdate(const char *datestring, const time_t *now); | |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_getdate(3)\fP returns the number of seconds since the Epoch, January |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_getdate(3) returns the number of seconds since the Epoch, January |
| 1st 1970 00:00:00 in the UTC time zone, for the date and time that the | |
| - | \fIdatestring\fP parameter specifies. The \fInow\fP parameter is not used, |
| + | *datestring* parameter specifies. The *now* parameter is not used, |
| pass a NULL there. | |
| This function works with valid dates and does not always detect and reject | |
| wrong dates, such as February 30. | |
| - | .SH PARSING DATES AND TIMES |
| + | # PARSING DATES AND TIMES |
| + | |
| A "date" is a string containing several items separated by whitespace. The | |
| order of the items is immaterial. A date string may contain many flavors of | |
| items: | |
| - | .IP "calendar date items" |
| + | |
| + | ## calendar date items |
| + | |
| Can be specified several ways. Month names can only be three-letter English | |
| abbreviations, numbers can be zero-prefixed and the year may use 2 or 4 | |
| - | digits. Examples: 06 Nov 1994, 06-Nov-94 and Nov-94 6. |
| - | .IP "time of the day items" |
| + | digits. Examples: 06 Nov 1994, 06-Nov-94 and Nov-94 6. |
| + | |
| + | ## time of the day items |
| + | |
| This string specifies the time on a given day. You must specify it with 6 | |
| digits with two colons: HH:MM:SS. If there is no time given in a provided date | |
| string, 00:00:00 is assumed. Example: 18:19:21. | |
| - | .IP "time zone items" |
| + | |
| + | ## time zone items |
| + | |
| Specifies international time zone. There are a few acronyms supported, but in | |
| general you should instead use the specific relative time compared to | |
| UTC. Supported formats include: -1200, MST, +0100. | |
| - | .IP "day of the week items" |
| + | |
| + | ## day of the week items |
| + | |
| Specifies a day of the week. Days of the week may be spelled out in full | |
| (using English): `Sunday', `Monday', etc or they may be abbreviated to their | |
| first three letters. This is usually not info that adds anything. | |
| - | .IP "pure numbers" |
| + | |
| + | ## pure numbers |
| + | |
| If a decimal number of the form YYYYMMDD appears, then YYYY is read as the | |
| year, MM as the month number and DD as the day of the month, for the specified | |
| calendar date. | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| int main(void) | |
| { | |
| time_t t; | |
| @@ -91,16 +98,22 @@ int main(void) | |
| t = curl_getdate("20040912 15:05:58 -0700", NULL); | |
| t = curl_getdate("20040911 +0200", NULL); | |
| } | |
| - | .fi |
| - | .SH STANDARDS |
| + | ~~~ |
| + | |
| + | # STANDARDS |
| + | |
| This parser handles date formats specified in RFC 822 (including the update in | |
| RFC 1123) using time zone name or time zone delta and RFC 850 (obsoleted by | |
| - | RFC 1036) and ANSI C's \fIasctime()\fP format. |
| + | RFC 1036) and ANSI C's *asctime()* format. |
| These formats are the only ones RFC 7231 says HTTP applications may use. | |
| - | .SH AVAILABILITY |
| + | |
| + | # AVAILABILITY |
| + | |
| Always | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| This function returns -1 when it fails to parse the date string. Otherwise it | |
| returns the number of seconds as described. | |
| @@ -113,8 +126,3 @@ less than 1970, this function returns -1. | |
| On systems with 64 bit time_t: if the year is less than 1583, this function | |
| returns -1. (The Gregorian calendar was first introduced 1582 so no "real" | |
| dates in this way of doing dates existed before then.) | |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_escape (3), |
| - | .BR curl_easy_unescape (3), |
| - | .BR CURLOPT_TIMECONDITION (3), |
| - | .BR CURLOPT_TIMEVALUE (3) |
| @@ -1,60 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_getenv 3 "30 April 2004" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_getenv - return value for environment name |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | char *curl_getenv(const char *name); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | curl_getenv() is a portable wrapper for the getenv() function, meant to |
| - | emulate its behavior and provide an identical interface for all operating |
| - | systems libcurl builds on (including win32). |
| - | |
| - | You must \fIcurl_free(3)\fP the returned string when you are done with it. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | char *width = curl_getenv("COLUMNS"); |
| - | if(width) { |
| - | /* it was set! */ |
| - | curl_free(width); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Always |
| - | .SH RETURN VALUE |
| - | A pointer to a null-terminated string or NULL if it failed to find the |
| - | specified name. |
| - | .SH NOTE |
| - | Under unix operating systems, there is no point in returning an allocated |
| - | memory, although other systems does not work properly if this is not done. The |
| - | unix implementation thus suffers slightly from the drawbacks of other systems. |
| - | .SH "SEE ALSO" |
| - | .BR getenv (3C) |
| @@ -0,0 +1,57 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_getenv |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - getenv (3C) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_getenv - return value for environment name |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | char *curl_getenv(const char *name); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_getenv() is a portable wrapper for the getenv() function, meant to |
| + | emulate its behavior and provide an identical interface for all operating |
| + | systems libcurl builds on (including win32). |
| + | |
| + | You must curl_free(3) the returned string when you are done with it. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | char *width = curl_getenv("COLUMNS"); |
| + | if(width) { |
| + | /* it was set! */ |
| + | curl_free(width); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Always |
| + | |
| + | # RETURN VALUE |
| + | |
| + | A pointer to a null-terminated string or NULL if it failed to find the |
| + | specified name. |
| + | |
| + | # NOTE |
| + | |
| + | Under unix operating systems, there is no point in returning an allocated |
| + | memory, although other systems does not work properly if this is not done. The |
| + | unix implementation thus suffers slightly from the drawbacks of other systems. |
| @@ -1,77 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_global_cleanup 3 "17 Feb 2006" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_global_cleanup - global libcurl cleanup |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | void curl_global_cleanup(void); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function releases resources acquired by \fIcurl_global_init(3)\fP. |
| - | |
| - | You should call \fIcurl_global_cleanup(3)\fP once for each call you make to |
| - | \fIcurl_global_init(3)\fP, after you are done using libcurl. |
| - | |
| - | This function is thread-safe since libcurl 7.84.0 if |
| - | \fIcurl_version_info(3)\fP has the CURL_VERSION_THREADSAFE feature bit set |
| - | (most platforms). |
| - | |
| - | If this is not thread-safe, you must not call this function when any other |
| - | thread in the program (i.e. a thread sharing the same memory) is running. |
| - | This does not just mean no other thread that is using libcurl. Because |
| - | \fIcurl_global_cleanup(3)\fP calls functions of other libraries that are |
| - | similarly thread unsafe, it could conflict with any other thread that uses |
| - | these other libraries. |
| - | |
| - | See the description in \fIlibcurl(3)\fP of global environment requirements for |
| - | details of how to use this function. |
| - | .SH CAUTION |
| - | \fIcurl_global_cleanup(3)\fP does not block waiting for any libcurl-created |
| - | threads to terminate (such as threads used for name resolving). If a module |
| - | containing libcurl is dynamically unloaded while libcurl-created threads are |
| - | still running then your program may crash or other corruption may occur. We |
| - | recommend you do not run libcurl from any module that may be unloaded |
| - | dynamically. This behavior may be addressed in the future. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | curl_global_init(CURL_GLOBAL_DEFAULT); |
| - | |
| - | /* use libcurl, then before exiting... */ |
| - | |
| - | curl_global_cleanup(); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.8 |
| - | .SH RETURN VALUE |
| - | None |
| - | .SH "SEE ALSO" |
| - | .BR curl_global_init (3), |
| - | .BR libcurl (3), |
| - | .BR libcurl-thread (3) |
| @@ -0,0 +1,74 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_global_cleanup |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_global_init (3) |
| + | - libcurl (3) |
| + | - libcurl-thread (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_global_cleanup - global libcurl cleanup |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | void curl_global_cleanup(void); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function releases resources acquired by curl_global_init(3). |
| + | |
| + | You should call curl_global_cleanup(3) once for each call you make to |
| + | curl_global_init(3), after you are done using libcurl. |
| + | |
| + | This function is thread-safe since libcurl 7.84.0 if |
| + | curl_version_info(3) has the CURL_VERSION_THREADSAFE feature bit set |
| + | (most platforms). |
| + | |
| + | If this is not thread-safe, you must not call this function when any other |
| + | thread in the program (i.e. a thread sharing the same memory) is running. |
| + | This does not just mean no other thread that is using libcurl. Because |
| + | curl_global_cleanup(3) calls functions of other libraries that are |
| + | similarly thread unsafe, it could conflict with any other thread that uses |
| + | these other libraries. |
| + | |
| + | See the description in libcurl(3) of global environment requirements for |
| + | details of how to use this function. |
| + | |
| + | # CAUTION |
| + | |
| + | curl_global_cleanup(3) does not block waiting for any libcurl-created |
| + | threads to terminate (such as threads used for name resolving). If a module |
| + | containing libcurl is dynamically unloaded while libcurl-created threads are |
| + | still running then your program may crash or other corruption may occur. We |
| + | recommend you do not run libcurl from any module that may be unloaded |
| + | dynamically. This behavior may be addressed in the future. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | curl_global_init(CURL_GLOBAL_DEFAULT); |
| + | |
| + | /* use libcurl, then before exiting... */ |
| + | |
| + | curl_global_cleanup(); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.8 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | None |
| @@ -1,36 +1,32 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_global_init 3 "11 May 2004" "libcurl" "libcurl" |
| - | .SH NAME |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_global_init |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_init (3) |
| + | - curl_global_cleanup (3) |
| + | - curl_global_init_mem (3) |
| + | - curl_global_sslset (3) |
| + | - curl_global_trace (3) |
| + | - libcurl (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| curl_global_init - Global libcurl initialization | |
| - | .SH SYNOPSIS |
| - | .nf |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| CURLcode curl_global_init(long flags); | |
| - | .fi |
| - | .SH DESCRIPTION |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| This function sets up the program environment that libcurl needs. Think of it | |
| as an extension of the library loader. | |
| @@ -47,28 +43,32 @@ value unless you are familiar with it and mean to control internal operations | |
| of libcurl. | |
| This function is thread-safe since libcurl 7.84.0 if | |
| - | \fIcurl_version_info(3)\fP has the CURL_VERSION_THREADSAFE feature bit set |
| + | curl_version_info(3) has the CURL_VERSION_THREADSAFE feature bit set |
| (most platforms). | |
| If this is not thread-safe, you must not call this function when any other | |
| thread in the program (i.e. a thread sharing the same memory) is running. | |
| This does not just mean no other thread that is using libcurl. Because | |
| - | \fIcurl_global_init(3)\fP calls functions of other libraries that are |
| + | curl_global_init(3) calls functions of other libraries that are |
| similarly thread unsafe, it could conflict with any other thread that uses | |
| these other libraries. | |
| If you are initializing libcurl from a Windows DLL you should not initialize | |
| - | it from \fIDllMain\fP or a static initializer because Windows holds the loader |
| + | it from *DllMain* or a static initializer because Windows holds the loader |
| lock during that time and it could cause a deadlock. | |
| - | See the description in \fIlibcurl(3)\fP of global environment requirements for |
| + | See the description in libcurl(3) of global environment requirements for |
| details of how to use this function. | |
| - | .SH FLAGS |
| - | .IP CURL_GLOBAL_ALL |
| + | |
| + | # FLAGS |
| + | |
| + | ## CURL_GLOBAL_ALL |
| + | |
| Initialize everything possible. This sets all known bits except | |
| - | \fBCURL_GLOBAL_ACK_EINTR\fP. |
| + | **CURL_GLOBAL_ACK_EINTR**. |
| + | |
| + | ## CURL_GLOBAL_SSL |
| - | .IP CURL_GLOBAL_SSL |
| (This flag's presence or absence serves no meaning since 7.57.0. The | |
| description below is for older libcurl versions.) | |
| @@ -81,26 +81,36 @@ backend libcurl uses. | |
| Doing TLS based transfers without having the TLS layer initialized may lead to | |
| unexpected behaviors. | |
| - | .IP CURL_GLOBAL_WIN32 |
| + | |
| + | ## CURL_GLOBAL_WIN32 |
| + | |
| Initialize the Win32 socket libraries. | |
| The implication here is that if this bit is not set, the initialization of | |
| winsock has to be done by the application or you risk getting undefined | |
| behaviors. This option exists for when the initialization is handled outside | |
| of libcurl so there is no need for libcurl to do it again. | |
| - | .IP CURL_GLOBAL_NOTHING |
| + | |
| + | ## CURL_GLOBAL_NOTHING |
| + | |
| Initialize nothing extra. This sets no bit. | |
| - | .IP CURL_GLOBAL_DEFAULT |
| + | |
| + | ## CURL_GLOBAL_DEFAULT |
| + | |
| A sensible default. It initializes both SSL and Win32. Right now, this equals | |
| - | the functionality of the \fBCURL_GLOBAL_ALL\fP mask. |
| - | .IP CURL_GLOBAL_ACK_EINTR |
| + | the functionality of the **CURL_GLOBAL_ALL** mask. |
| + | |
| + | ## CURL_GLOBAL_ACK_EINTR |
| + | |
| This bit has no point since 7.69.0 but its behavior is instead the default. | |
| Before 7.69.0: when this flag is set, curl acknowledges EINTR condition when | |
| connecting or when waiting for data. Otherwise, curl waits until full timeout | |
| elapses. (Added in 7.30.0) | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| int main(void) | |
| { | |
| curl_global_init(CURL_GLOBAL_DEFAULT); | |
| @@ -109,16 +119,13 @@ int main(void) | |
| curl_global_cleanup(); | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| Added in 7.8 | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| If this function returns non-zero, something went wrong and you cannot use the | |
| other curl functions. | |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_init (3), |
| - | .BR curl_global_cleanup (3), |
| - | .BR curl_global_init_mem (3), |
| - | .BR curl_global_sslset (3), |
| - | .BR curl_global_trace (3), |
| - | .BR libcurl (3) |
| @@ -1,88 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_global_init_mem 3 "10 May 2004" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_global_init_mem - Global libcurl initialization with memory callbacks |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_global_init_mem(long flags, |
| - | curl_malloc_callback m, |
| - | curl_free_callback f, |
| - | curl_realloc_callback r, |
| - | curl_strdup_callback s, |
| - | curl_calloc_callback c); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function works exactly as \fIcurl_global_init(3)\fP with one addition: it |
| - | allows the application to set callbacks to replace the otherwise used internal |
| - | memory functions. |
| - | |
| - | If you are using libcurl from multiple threads or libcurl was built with the |
| - | threaded resolver option then the callback functions must be thread safe. The |
| - | threaded resolver is a common build option to enable (and in some cases the |
| - | default) so we strongly urge you to make your callback functions thread safe. |
| - | |
| - | All callback arguments must be set to valid function pointers. The |
| - | prototypes for the given callbacks must match these: |
| - | .IP "void *malloc_callback(size_t size);" |
| - | To replace malloc() |
| - | .IP "void free_callback(void *ptr);" |
| - | To replace free() |
| - | .IP "void *realloc_callback(void *ptr, size_t size);" |
| - | To replace realloc() |
| - | .IP "char *strdup_callback(const char *str);" |
| - | To replace strdup() |
| - | .IP "void *calloc_callback(size_t nmemb, size_t size);" |
| - | To replace calloc() |
| - | |
| - | This function is otherwise the same as \fIcurl_global_init(3)\fP, please refer |
| - | to that man page for documentation. |
| - | .SH CAUTION |
| - | Manipulating these gives considerable powers to the application to severely |
| - | screw things up for libcurl. Take care! |
| - | .SH EXAMPLE |
| - | .nf |
| - | extern void *malloc_cb(size_t); |
| - | extern void free_cb(void *); |
| - | extern void *realloc_cb(void *, size_t); |
| - | extern char *strdup_cb(const char *); |
| - | extern void *calloc_cb(size_t, size_t); |
| - | |
| - | int main(void) |
| - | { |
| - | curl_global_init_mem(CURL_GLOBAL_DEFAULT, malloc_cb, |
| - | free_cb, realloc_cb, |
| - | strdup_cb, calloc_cb); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.12.0 |
| - | .SH RETURN VALUE |
| - | CURLE_OK (0) means everything was OK, non-zero means an error occurred as |
| - | \fI<curl/curl.h>\fP defines - see \fIlibcurl-errors(3)\fP. |
| - | .SH "SEE ALSO" |
| - | .BR curl_global_init (3), |
| - | .BR curl_global_cleanup (3) |
| @@ -0,0 +1,95 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_global_init_mem |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_global_cleanup (3) |
| + | - curl_global_init (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_global_init_mem - Global libcurl initialization with memory callbacks |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_global_init_mem(long flags, |
| + | curl_malloc_callback m, |
| + | curl_free_callback f, |
| + | curl_realloc_callback r, |
| + | curl_strdup_callback s, |
| + | curl_calloc_callback c); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function works exactly as curl_global_init(3) with one addition: it |
| + | allows the application to set callbacks to replace the otherwise used internal |
| + | memory functions. |
| + | |
| + | If you are using libcurl from multiple threads or libcurl was built with the |
| + | threaded resolver option then the callback functions must be thread safe. The |
| + | threaded resolver is a common build option to enable (and in some cases the |
| + | default) so we strongly urge you to make your callback functions thread safe. |
| + | |
| + | All callback arguments must be set to valid function pointers. The |
| + | prototypes for the given callbacks must match these: |
| + | |
| + | ## void *malloc_callback(size_t size); |
| + | |
| + | To replace malloc() |
| + | |
| + | ## void free_callback(void *ptr); |
| + | |
| + | To replace free() |
| + | |
| + | ## void *realloc_callback(void *ptr, size_t size); |
| + | |
| + | To replace realloc() |
| + | |
| + | ## char *strdup_callback(const char *str); |
| + | |
| + | To replace strdup() |
| + | |
| + | ## void *calloc_callback(size_t nmemb, size_t size); |
| + | |
| + | To replace calloc() |
| + | |
| + | This function is otherwise the same as curl_global_init(3), please refer |
| + | to that man page for documentation. |
| + | |
| + | # CAUTION |
| + | |
| + | Manipulating these gives considerable powers to the application to severely |
| + | screw things up for libcurl. Take care! |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | extern void *malloc_cb(size_t); |
| + | extern void free_cb(void *); |
| + | extern void *realloc_cb(void *, size_t); |
| + | extern char *strdup_cb(const char *); |
| + | extern void *calloc_cb(size_t, size_t); |
| + | |
| + | int main(void) |
| + | { |
| + | curl_global_init_mem(CURL_GLOBAL_DEFAULT, malloc_cb, |
| + | free_cb, realloc_cb, |
| + | strdup_cb, calloc_cb); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.12.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLE_OK (0) means everything was OK, non-zero means an error occurred as |
| + | *<curl/curl.h>* defines - see libcurl-errors(3). |
| @@ -1,139 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_global_sslset 3 "15 July 2017" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_global_sslset - Select SSL backend to use with libcurl |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLsslset curl_global_sslset(curl_sslbackend id, |
| - | const char *name, |
| - | const curl_ssl_backend ***avail); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function configures at runtime which SSL backend to use with |
| - | libcurl. This function can only be used to select an SSL backend once, and it |
| - | must be called \fBbefore\fP \fIcurl_global_init(3)\fP. |
| - | |
| - | The backend can be identified by the \fIid\fP |
| - | (e.g. \fBCURLSSLBACKEND_OPENSSL\fP). The backend can also be specified via the |
| - | \fIname\fP parameter for a case insensitive match (passing |
| - | \fBCURLSSLBACKEND_NONE\fP as \fIid\fP). If both \fIid\fP and \fIname\fP are |
| - | specified, the \fIname\fP is ignored. |
| - | |
| - | If neither \fIid\fP nor \fPname\fP are specified, the function fails with |
| - | \fBCURLSSLSET_UNKNOWN_BACKEND\fP and set the \fIavail\fP pointer to the |
| - | NULL-terminated list of available backends. The available backends are those |
| - | that this particular build of libcurl supports. |
| - | |
| - | Since libcurl 7.60.0, the \fIavail\fP pointer is always set to the list of |
| - | alternatives if non-NULL. |
| - | |
| - | Upon success, the function returns \fBCURLSSLSET_OK\fP. |
| - | |
| - | If the specified SSL backend is not available, the function returns |
| - | \fBCURLSSLSET_UNKNOWN_BACKEND\fP and sets the \fIavail\fP pointer to a |
| - | NULL-terminated list of available SSL backends. In this case, you may call the |
| - | function again to try to select a different backend. |
| - | |
| - | The SSL backend can be set only once. If it has already been set, a subsequent |
| - | attempt to change it results in a \fBCURLSSLSET_TOO_LATE\fP getting returned. |
| - | |
| - | This function is thread-safe since libcurl 7.84.0 if |
| - | \fIcurl_version_info(3)\fP has the CURL_VERSION_THREADSAFE feature bit set |
| - | (most platforms). |
| - | |
| - | If this is not thread-safe, you must not call this function when any other |
| - | thread in the program (i.e. a thread sharing the same memory) is running. |
| - | This does not just mean no other thread that is using libcurl. |
| - | .SH OpenSSL |
| - | The name "OpenSSL" is used for all versions of OpenSSL and its associated |
| - | forks/flavors in this function. OpenSSL, BoringSSL, libressl, quictls and |
| - | AmiSSL are all supported by libcurl, but in the eyes of |
| - | \fIcurl_global_sslset(3)\fP they are all just "OpenSSL". They all mostly |
| - | provide the same API. |
| - | |
| - | \fIcurl_version_info(3)\fP can return more specific info about the exact |
| - | OpenSSL flavor and version number is use. |
| - | .SH struct |
| - | .nf |
| - | typedef struct { |
| - | curl_sslbackend id; |
| - | const char *name; |
| - | } curl_ssl_backend; |
| - | |
| - | typedef enum { |
| - | CURLSSLBACKEND_NONE = 0, |
| - | CURLSSLBACKEND_OPENSSL = 1, /* or one of its forks */ |
| - | CURLSSLBACKEND_GNUTLS = 2, |
| - | CURLSSLBACKEND_NSS = 3, |
| - | CURLSSLBACKEND_GSKIT = 5, /* deprecated */ |
| - | CURLSSLBACKEND_POLARSSL = 6, /* deprecated */ |
| - | CURLSSLBACKEND_WOLFSSL = 7, |
| - | CURLSSLBACKEND_SCHANNEL = 8, |
| - | CURLSSLBACKEND_SECURETRANSPORT = 9, |
| - | CURLSSLBACKEND_AXTLS = 10, /* deprecated */ |
| - | CURLSSLBACKEND_MBEDTLS = 11, |
| - | CURLSSLBACKEND_MESALINK = 12, /* deprecated */ |
| - | CURLSSLBACKEND_BEARSSL = 13, |
| - | CURLSSLBACKEND_RUSTLS = 14 |
| - | } curl_sslbackend; |
| - | .fi |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | int i; |
| - | /* choose a specific backend */ |
| - | curl_global_sslset(CURLSSLBACKEND_WOLFSSL, NULL, NULL); |
| - | |
| - | /* list the available ones */ |
| - | const curl_ssl_backend **list; |
| - | curl_global_sslset(CURLSSLBACKEND_NONE, NULL, &list); |
| - | |
| - | for(i = 0; list[i]; i++) |
| - | printf("SSL backend #%d: '%s' (ID: %d)\\n", |
| - | i, list[i]->name, list[i]->id); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This function was added in libcurl 7.56.0. Before this version, there was no |
| - | support for choosing SSL backends at runtime. |
| - | .SH RETURN VALUE |
| - | If this function returns \fICURLSSLSET_OK\fP, the backend was successfully |
| - | selected. |
| - | |
| - | If the chosen backend is unknown (or support for the chosen backend has not |
| - | been compiled into libcurl), the function returns |
| - | \fICURLSSLSET_UNKNOWN_BACKEND\fP. |
| - | |
| - | If the backend had been configured previously, or if \fIcurl_global_init(3)\fP |
| - | has already been called, the function returns \fICURLSSLSET_TOO_LATE\fP. |
| - | |
| - | If this libcurl was built completely without SSL support, with no backends at |
| - | all, this function returns \fICURLSSLSET_NO_BACKENDS\fP. |
| - | .SH "SEE ALSO" |
| - | .BR curl_global_init (3), |
| - | .BR libcurl (3) |
| @@ -0,0 +1,138 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_global_sslset |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_global_init (3) |
| + | - libcurl (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_global_sslset - Select SSL backend to use with libcurl |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLsslset curl_global_sslset(curl_sslbackend id, |
| + | const char *name, |
| + | const curl_ssl_backend ***avail); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function configures at runtime which SSL backend to use with |
| + | libcurl. This function can only be used to select an SSL backend once, and it |
| + | must be called **before** curl_global_init(3). |
| + | |
| + | The backend can be identified by the *id* |
| + | (e.g. **CURLSSLBACKEND_OPENSSL**). The backend can also be specified via the |
| + | *name* parameter for a case insensitive match (passing |
| + | **CURLSSLBACKEND_NONE** as *id*). If both *id* and *name* are |
| + | specified, the *name* is ignored. |
| + | |
| + | If neither *id* nor *name* are specified, the function fails with |
| + | **CURLSSLSET_UNKNOWN_BACKEND** and set the *avail* pointer to the |
| + | NULL-terminated list of available backends. The available backends are those |
| + | that this particular build of libcurl supports. |
| + | |
| + | Since libcurl 7.60.0, the *avail* pointer is always set to the list of |
| + | alternatives if non-NULL. |
| + | |
| + | Upon success, the function returns **CURLSSLSET_OK**. |
| + | |
| + | If the specified SSL backend is not available, the function returns |
| + | **CURLSSLSET_UNKNOWN_BACKEND** and sets the *avail* pointer to a |
| + | NULL-terminated list of available SSL backends. In this case, you may call the |
| + | function again to try to select a different backend. |
| + | |
| + | The SSL backend can be set only once. If it has already been set, a subsequent |
| + | attempt to change it results in a **CURLSSLSET_TOO_LATE** getting returned. |
| + | |
| + | This function is thread-safe since libcurl 7.84.0 if |
| + | curl_version_info(3) has the CURL_VERSION_THREADSAFE feature bit set |
| + | (most platforms). |
| + | |
| + | If this is not thread-safe, you must not call this function when any other |
| + | thread in the program (i.e. a thread sharing the same memory) is running. |
| + | This does not just mean no other thread that is using libcurl. |
| + | |
| + | # OpenSSL |
| + | |
| + | The name "OpenSSL" is used for all versions of OpenSSL and its associated |
| + | forks/flavors in this function. OpenSSL, BoringSSL, libressl, quictls and |
| + | AmiSSL are all supported by libcurl, but in the eyes of |
| + | curl_global_sslset(3) they are all just "OpenSSL". They all mostly |
| + | provide the same API. |
| + | |
| + | curl_version_info(3) can return more specific info about the exact |
| + | OpenSSL flavor and version number is use. |
| + | |
| + | # struct |
| + | |
| + | ~~~c |
| + | typedef struct { |
| + | curl_sslbackend id; |
| + | const char *name; |
| + | } curl_ssl_backend; |
| + | |
| + | typedef enum { |
| + | CURLSSLBACKEND_NONE = 0, |
| + | CURLSSLBACKEND_OPENSSL = 1, /* or one of its forks */ |
| + | CURLSSLBACKEND_GNUTLS = 2, |
| + | CURLSSLBACKEND_NSS = 3, |
| + | CURLSSLBACKEND_GSKIT = 5, /* deprecated */ |
| + | CURLSSLBACKEND_POLARSSL = 6, /* deprecated */ |
| + | CURLSSLBACKEND_WOLFSSL = 7, |
| + | CURLSSLBACKEND_SCHANNEL = 8, |
| + | CURLSSLBACKEND_SECURETRANSPORT = 9, |
| + | CURLSSLBACKEND_AXTLS = 10, /* deprecated */ |
| + | CURLSSLBACKEND_MBEDTLS = 11, |
| + | CURLSSLBACKEND_MESALINK = 12, /* deprecated */ |
| + | CURLSSLBACKEND_BEARSSL = 13, |
| + | CURLSSLBACKEND_RUSTLS = 14 |
| + | } curl_sslbackend; |
| + | ~~~ |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | int i; |
| + | /* choose a specific backend */ |
| + | curl_global_sslset(CURLSSLBACKEND_WOLFSSL, NULL, NULL); |
| + | |
| + | /* list the available ones */ |
| + | const curl_ssl_backend **list; |
| + | curl_global_sslset(CURLSSLBACKEND_NONE, NULL, &list); |
| + | |
| + | for(i = 0; list[i]; i++) |
| + | printf("SSL backend #%d: '%s' (ID: %d)\n", |
| + | i, list[i]->name, list[i]->id); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This function was added in libcurl 7.56.0. Before this version, there was no |
| + | support for choosing SSL backends at runtime. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | If this function returns *CURLSSLSET_OK*, the backend was successfully |
| + | selected. |
| + | |
| + | If the chosen backend is unknown (or support for the chosen backend has not |
| + | been compiled into libcurl), the function returns |
| + | *CURLSSLSET_UNKNOWN_BACKEND*. |
| + | |
| + | If the backend had been configured previously, or if curl_global_init(3) |
| + | has already been called, the function returns *CURLSSLSET_TOO_LATE*. |
| + | |
| + | If this libcurl was built completely without SSL support, with no backends at |
| + | all, this function returns *CURLSSLSET_NO_BACKENDS*. |
| @@ -1,36 +1,28 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_global_trace 3 "01 August 2023" "libcurl" "libcurl" |
| - | .SH NAME |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_global_trace |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_global_init (3) |
| + | - libcurl (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| curl_global_trace - Global libcurl logging configuration | |
| - | .SH SYNOPSIS |
| - | .nf |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| CURLcode curl_global_trace(const char *config); | |
| - | .fi |
| - | .SH DESCRIPTION |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| This function configures the logging behavior, allowing to make some | |
| parts of curl more verbose or silent than others. | |
| @@ -42,21 +34,21 @@ Calling this function after transfers have been started is undefined. On | |
| some platforms/architectures it might take effect, on others not. | |
| This function is thread-safe since libcurl 8.3.0 if | |
| - | \fIcurl_version_info(3)\fP has the CURL_VERSION_THREADSAFE feature bit set |
| + | curl_version_info(3) has the CURL_VERSION_THREADSAFE feature bit set |
| (most platforms). | |
| If this is not thread-safe, you must not call this function when any other | |
| thread in the program (i.e. a thread sharing the same memory) is running. | |
| This does not just mean no other thread that is using libcurl. Because | |
| - | \fIcurl_global_init(3)\fP may call functions of other libraries that are |
| + | curl_global_init(3) may call functions of other libraries that are |
| similarly thread unsafe, it could conflict with any other thread that uses | |
| these other libraries. | |
| If you are initializing libcurl from a Windows DLL you should not initialize | |
| - | it from \fIDllMain\fP or a static initializer because Windows holds the loader |
| + | it from *DllMain* or a static initializer because Windows holds the loader |
| lock during that time and it could cause a deadlock. | |
| - | The \fIconfig\fP string is a list of comma-separated component names. Names |
| + | The *config* string is a list of comma-separated component names. Names |
| are case-insensitive and unknown names are ignored. The special name "all" | |
| applies to all components. Names may be prefixed with '+' or '-' to enable | |
| or disable detailed logging for a component. | |
| @@ -68,19 +60,29 @@ upgrading libcurl. Given that, some names can be expected to be fairly stable | |
| and are listed below for easy reference. | |
| Note that log configuration applies only to transfers where debug logging | |
| - | is enabled. See \fICURLOPT_VERBOSE(3)\fP or \fICURLOPT_DEBUGFUNCTION(3)\fP |
| + | is enabled. See CURLOPT_VERBOSE(3) or CURLOPT_DEBUGFUNCTION(3) |
| on how to control that. | |
| - | .SH TRACE COMPONENTS |
| - | .IP tcp |
| + | # TRACE COMPONENTS |
| + | |
| + | ## tcp |
| + | |
| Tracing of TCP socket handling: connect, reads, writes. | |
| - | .IP ssl |
| + | |
| + | ## ssl |
| + | |
| Tracing of SSL/TLS operations, whichever SSL backend is used in your build. | |
| - | .IP http/2 |
| + | |
| + | ## http/2 |
| + | |
| Details about HTTP/2 handling: frames, events, I/O, etc. | |
| - | .IP http/3 |
| + | |
| + | ## http/3 |
| + | |
| Details about HTTP/3 handling: connect, frames, events, I/O etc. | |
| - | .IP http-proxy |
| + | |
| + | ## http-proxy |
| + | |
| Involved when transfers are tunneled through a HTTP proxy. "h1-proxy" or | |
| "h2-proxy" are also involved, depending on the HTTP version negotiated with | |
| the proxy. | |
| @@ -89,8 +91,9 @@ In order to find out all components involved in a transfer, run it with "all" | |
| configured. You can then see all names involved in your libcurl version in the | |
| trace. | |
| - | .SH EXAMPLE |
| - | .nf |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| int main(void) | |
| { | |
| /* log details of HTTP/2 and SSL handling */ | |
| @@ -99,23 +102,23 @@ int main(void) | |
| /* log all details, except SSL handling */ | |
| curl_global_trace("all,-ssl"); | |
| } | |
| - | .fi |
| + | ~~~ |
| Below is a trace sample where "http/2" was configured. The trace output | |
| of an enabled component appears at the beginning in brackets. | |
| - | .nf |
| + | ~~~ |
| * [HTTP/2] [h2sid=1] cf_send(len=96) submit https://example.com/ | |
| - | \&... |
| + | ... |
| * [HTTP/2] [h2sid=1] FRAME[HEADERS] | |
| * [HTTP/2] [h2sid=1] 249 header bytes | |
| - | \&... |
| - | .fi |
| + | ... |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| - | .SH AVAILABILITY |
| Added in 8.3 | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| If this function returns non-zero, something went wrong and the configuration | |
| may not have any effects or may only been applied partially. | |
| - | .SH "SEE ALSO" |
| - | .BR curl_global_init (3), |
| - | .BR libcurl (3) |
| @@ -1,75 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_mime_addpart 3 "22 August 2017" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_mime_addpart - append a new empty part to a mime structure |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | curl_mimepart *curl_mime_addpart(curl_mime *mime); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_mime_addpart(3)\fP creates and appends a new empty part to the given |
| - | mime structure and returns a handle to it. The returned part handle can |
| - | subsequently be populated using functions from the mime API. |
| - | |
| - | \fImime\fP is the handle of the mime structure in which the new part must be |
| - | appended. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | curl_mime *mime; |
| - | curl_mimepart *part; |
| - | |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | /* create a mime handle */ |
| - | mime = curl_mime_init(curl); |
| - | |
| - | /* add a part */ |
| - | part = curl_mime_addpart(mime); |
| - | |
| - | /* continue and set name + data to the part */ |
| - | curl_mime_data(part, "This is the field data", CURL_ZERO_TERMINATED); |
| - | curl_mime_name(part, "data"); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| - | .SH RETURN VALUE |
| - | A mime part structure handle, or NULL upon failure. |
| - | .SH "SEE ALSO" |
| - | .BR curl_mime_data (3), |
| - | .BR curl_mime_data_cb (3), |
| - | .BR curl_mime_encoder (3), |
| - | .BR curl_mime_filedata (3), |
| - | .BR curl_mime_filename (3), |
| - | .BR curl_mime_headers (3), |
| - | .BR curl_mime_init (3), |
| - | .BR curl_mime_name (3), |
| - | .BR curl_mime_subparts (3), |
| - | .BR curl_mime_type (3) |
| @@ -0,0 +1,70 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_mime_addpart |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_mime_data (3) |
| + | - curl_mime_data_cb (3) |
| + | - curl_mime_encoder (3) |
| + | - curl_mime_filedata (3) |
| + | - curl_mime_filename (3) |
| + | - curl_mime_headers (3) |
| + | - curl_mime_init (3) |
| + | - curl_mime_name (3) |
| + | - curl_mime_subparts (3) |
| + | - curl_mime_type (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_mime_addpart - append a new empty part to a mime structure |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | curl_mimepart *curl_mime_addpart(curl_mime *mime); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_mime_addpart(3) creates and appends a new empty part to the given |
| + | mime structure and returns a handle to it. The returned part handle can |
| + | subsequently be populated using functions from the mime API. |
| + | |
| + | *mime* is the handle of the mime structure in which the new part must be |
| + | appended. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | curl_mime *mime; |
| + | curl_mimepart *part; |
| + | |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | /* create a mime handle */ |
| + | mime = curl_mime_init(curl); |
| + | |
| + | /* add a part */ |
| + | part = curl_mime_addpart(mime); |
| + | |
| + | /* continue and set name + data to the part */ |
| + | curl_mime_data(part, "This is the field data", CURL_ZERO_TERMINATED); |
| + | curl_mime_name(part, "data"); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | A mime part structure handle, or NULL upon failure. |
| @@ -1,81 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_mime_data 3 "22 August 2017" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_mime_data - set a mime part's body data from memory |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_mime_data(curl_mimepart *part, const char *data, |
| - | size_t datasize); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_mime_data(3)\fP sets a mime part's body content from memory data. |
| - | |
| - | \fIpart\fP is the mime part to assign contents to, created with |
| - | \fIcurl_mime_addpart(3)\fP. |
| - | |
| - | \fIdata\fP points to the data that gets copied by this function. The storage |
| - | may safely be reused after the call. |
| - | |
| - | \fIdatasize\fP is the number of bytes \fIdata\fP points to. It can be set to |
| - | \fICURL_ZERO_TERMINATED\fP to indicate \fIdata\fP is a null-terminated |
| - | character string. |
| - | |
| - | Setting a part's contents multiple times is valid: only the value set by the |
| - | last call is retained. It is possible to unassign part's contents by setting |
| - | \fIdata\fP to NULL. |
| - | |
| - | Setting large data is memory consuming: one might consider using |
| - | \fIcurl_mime_data_cb(3)\fP in such a case. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | curl_mime *mime; |
| - | curl_mimepart *part; |
| - | |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | /* create a mime handle */ |
| - | mime = curl_mime_init(curl); |
| - | |
| - | /* add a part */ |
| - | part = curl_mime_addpart(mime); |
| - | |
| - | /* add data to the part */ |
| - | curl_mime_data(part, "raw contents to send", CURL_ZERO_TERMINATED); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| - | .SH RETURN VALUE |
| - | CURLE_OK or a CURL error code upon failure. |
| - | .SH "SEE ALSO" |
| - | .BR curl_mime_addpart (3), |
| - | .BR curl_mime_data_cb (3), |
| - | .BR curl_mime_name (3), |
| - | .BR curl_mime_type (3) |
| @@ -0,0 +1,76 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_mime_data |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_mime_addpart (3) |
| + | - curl_mime_data_cb (3) |
| + | - curl_mime_name (3) |
| + | - curl_mime_type (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_mime_data - set a mime part's body data from memory |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_mime_data(curl_mimepart *part, const char *data, |
| + | size_t datasize); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_mime_data(3) sets a mime part's body content from memory data. |
| + | |
| + | *part* is the mime part to assign contents to, created with |
| + | curl_mime_addpart(3). |
| + | |
| + | *data* points to the data that gets copied by this function. The storage |
| + | may safely be reused after the call. |
| + | |
| + | *datasize* is the number of bytes *data* points to. It can be set to |
| + | *CURL_ZERO_TERMINATED* to indicate *data* is a null-terminated |
| + | character string. |
| + | |
| + | Setting a part's contents multiple times is valid: only the value set by the |
| + | last call is retained. It is possible to unassign part's contents by setting |
| + | *data* to NULL. |
| + | |
| + | Setting large data is memory consuming: one might consider using |
| + | curl_mime_data_cb(3) in such a case. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | curl_mime *mime; |
| + | curl_mimepart *part; |
| + | |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | /* create a mime handle */ |
| + | mime = curl_mime_init(curl); |
| + | |
| + | /* add a part */ |
| + | part = curl_mime_addpart(mime); |
| + | |
| + | /* add data to the part */ |
| + | curl_mime_data(part, "raw contents to send", CURL_ZERO_TERMINATED); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLE_OK or a CURL error code upon failure. |
| @@ -1,31 +1,23 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_mime_data_cb 3 "22 August 2017" "libcurl" "libcurl" |
| - | .SH NAME |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_mime_data_cb |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_duphandle (3) |
| + | - curl_mime_addpart (3) |
| + | - curl_mime_data (3) |
| + | - curl_mime_name (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| curl_mime_data_cb - set a callback-based data source for a mime part's body | |
| - | .SH SYNOPSIS |
| - | .nf |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| size_t readfunc(char *buffer, size_t size, size_t nitems, void *arg); | |
| @@ -38,32 +30,34 @@ CURLcode curl_mime_data_cb(curl_mimepart *part, curl_off_t datasize, | |
| curl_read_callback readfunc, | |
| curl_seek_callback seekfunc, | |
| curl_free_callback freefunc, void *arg); | |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_mime_data_cb(3)\fP sets the data source of a mime part's body content |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_mime_data_cb(3) sets the data source of a mime part's body content |
| from a data read callback function. | |
| - | \fIpart\fP is the part's to assign contents to. |
| + | *part* is the part's to assign contents to. |
| - | \fIreadfunc\fP is a pointer to a data read callback function, with a signature |
| + | *readfunc* is a pointer to a data read callback function, with a signature |
| as shown by the above prototype. It may not be set to NULL. | |
| - | \fIseekfunc\fP is a pointer to a seek callback function, with a signature as |
| + | *seekfunc* is a pointer to a seek callback function, with a signature as |
| shown by the above prototype. This function is used when resending data (i.e.: | |
| after a redirect); this pointer may be set to NULL, in which case a resend | |
| might not be not possible. | |
| - | \fIfreefunc\fP is a pointer to a user resource freeing callback function, with |
| + | *freefunc* is a pointer to a user resource freeing callback function, with |
| a signature as shown by the above prototype. If no resource is to be freed, it | |
| may safely be set to NULL. This function is called upon mime structure | |
| freeing. | |
| - | \fIarg\fP is a user defined argument to callback functions. |
| + | *arg* is a user defined argument to callback functions. |
| The read callback function gets called by libcurl as soon as it needs to | |
| read data in order to send it to the peer - like if you ask it to upload or | |
| - | post data to the server. The data area pointed at by the pointer \fIbuffer\fP |
| - | should be filled up with at most \fIsize\fP multiplied with \fInitems\fP number |
| + | post data to the server. The data area pointed at by the pointer *buffer* |
| + | should be filled up with at most *size* multiplied with *nitems* number |
| of bytes by your function. | |
| Your read function must then return the actual number of bytes that it stored | |
| @@ -75,35 +69,37 @@ the server expected it, like when you have said you intend to upload N bytes | |
| and yet you upload less than N bytes), you may experience that the server | |
| "hangs" waiting for the rest of the data that does not come. | |
| - | The read callback may return \fICURL_READFUNC_ABORT\fP to stop the current |
| - | operation immediately, resulting in a \fICURLE_ABORTED_BY_CALLBACK\fP error |
| + | The read callback may return *CURL_READFUNC_ABORT* to stop the current |
| + | operation immediately, resulting in a *CURLE_ABORTED_BY_CALLBACK* error |
| code from the transfer. | |
| - | The callback can return \fICURL_READFUNC_PAUSE\fP to cause reading from this |
| - | connection to pause. See \fIcurl_easy_pause(3)\fP for further details. |
| + | The callback can return *CURL_READFUNC_PAUSE* to cause reading from this |
| + | connection to pause. See curl_easy_pause(3) for further details. |
| The seek function gets called by libcurl to rewind input stream data or to | |
| seek to a certain position. The function shall work like fseek(3) or lseek(3) | |
| - | and it gets SEEK_SET, SEEK_CUR or SEEK_END as argument for \fIorigin\fP, |
| + | and it gets SEEK_SET, SEEK_CUR or SEEK_END as argument for *origin*, |
| although libcurl currently only passes SEEK_SET. | |
| - | The callback function must return \fICURL_SEEKFUNC_OK\fP on success, |
| - | \fICURL_SEEKFUNC_FAIL\fP to cause the upload operation to fail or |
| - | \fICURL_SEEKFUNC_CANTSEEK\fP to indicate that while the seek failed, libcurl |
| + | The callback function must return *CURL_SEEKFUNC_OK* on success, |
| + | *CURL_SEEKFUNC_FAIL* to cause the upload operation to fail or |
| + | *CURL_SEEKFUNC_CANTSEEK* to indicate that while the seek failed, libcurl |
| is free to work around the problem if possible. The latter can sometimes be | |
| done by instead reading from the input or similar. | |
| Care must be taken if the part is bound to a curl easy handle that is later | |
| - | duplicated: the \fIarg\fP pointer argument is also duplicated, resulting in |
| + | duplicated: the *arg* pointer argument is also duplicated, resulting in |
| the pointed item to be shared between the original and the copied handle. In | |
| - | particular, special attention should be given to the \fIfreefunc\fP procedure |
| + | particular, special attention should be given to the *freefunc* procedure |
| code since it then gets called twice with the same argument. | |
| - | .SH EXAMPLE |
| + | |
| + | # EXAMPLE |
| + | |
| Sending a huge data string causes the same amount of memory to be allocated: | |
| to avoid overhead resources consumption, one might want to use a callback | |
| source to avoid data duplication. In this case, original data must be retained | |
| until after the transfer terminates. | |
| - | .nf |
| + | ~~~c |
| #include <string.h> /* for memcpy */ | |
| char hugedata[512000]; | |
| @@ -161,13 +157,12 @@ int main(void) | |
| &hugectl); | |
| } | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| CURLE_OK or a CURL error code upon failure. | |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_duphandle (3), |
| - | .BR curl_mime_addpart (3), |
| - | .BR curl_mime_data (3), |
| - | .BR curl_mime_name (3) |
| @@ -1,105 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_mime_encoder 3 "22 August 2017" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_mime_encoder - set a mime part's encoder and content transfer encoding |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_mime_encoder(curl_mimepart *part, const char *encoding); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | curl_mime_encoder() requests a mime part's content to be encoded before being |
| - | transmitted. |
| - | |
| - | \fIpart\fP is the part's handle to assign an encoder. |
| - | \fIencoding\fP is a pointer to a null-terminated encoding scheme. It may be |
| - | set to NULL to disable an encoder previously attached to the part. The encoding |
| - | scheme storage may safely be reused after this function returns. |
| - | |
| - | Setting a part's encoder multiple times is valid: only the value set by the |
| - | last call is retained. |
| - | |
| - | Upon multipart rendering, the part's content is encoded according to the |
| - | pertaining scheme and a corresponding \fI"Content-Transfer-Encoding"\fP header |
| - | is added to the part. |
| - | |
| - | Supported encoding schemes are: |
| - | |
| - | "\fIbinary\fP": the data is left unchanged, the header is added. |
| - | |
| - | "\fI8bit\fP": header added, no data change. |
| - | |
| - | "\fI7bit\fP": the data is unchanged, but is each byte is checked |
| - | to be a 7-bit value; if not, a read error occurs. |
| - | |
| - | "\fIbase64\fP": Data is converted to base64 encoding, then split in |
| - | CRLF-terminated lines of at most 76 characters. |
| - | |
| - | "\fIquoted-printable\fP": data is encoded in quoted printable lines of |
| - | at most 76 characters. Since the resulting size of the final data cannot be |
| - | determined prior to reading the original data, it is left as unknown, causing |
| - | chunked transfer in HTTP. For the same reason, this encoder may not be used |
| - | with IMAP. This encoder targets text data that is mostly ASCII and should |
| - | not be used with other types of data. |
| - | |
| - | If the original data is already encoded in such a scheme, a custom |
| - | \fIContent-Transfer-Encoding\fP header should be added with |
| - | \fIcurl_mime_headers(3)\fP instead of setting a part encoder. |
| - | |
| - | Encoding should not be applied to multiparts, thus the use of this function on |
| - | a part with content set with \fIcurl_mime_subparts(3)\fP is strongly |
| - | discouraged. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | curl_mime *mime; |
| - | curl_mimepart *part; |
| - | |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | /* create a mime handle */ |
| - | mime = curl_mime_init(curl); |
| - | |
| - | /* add a part */ |
| - | part = curl_mime_addpart(mime); |
| - | |
| - | /* send a file */ |
| - | curl_mime_filedata(part, "image.png"); |
| - | |
| - | /* encode file data in base64 for transfer */ |
| - | curl_mime_encoder(part, "base64"); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| - | .SH RETURN VALUE |
| - | CURLE_OK or a CURL error code upon failure. |
| - | .SH "SEE ALSO" |
| - | .BR curl_mime_addpart (3), |
| - | .BR curl_mime_headers (3), |
| - | .BR curl_mime_subparts (3) |
| @@ -0,0 +1,100 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_mime_encoder |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_mime_addpart (3) |
| + | - curl_mime_headers (3) |
| + | - curl_mime_subparts (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_mime_encoder - set a mime part's encoder and content transfer encoding |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_mime_encoder(curl_mimepart *part, const char *encoding); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_mime_encoder() requests a mime part's content to be encoded before being |
| + | transmitted. |
| + | |
| + | *part* is the part's handle to assign an encoder. |
| + | *encoding* is a pointer to a null-terminated encoding scheme. It may be |
| + | set to NULL to disable an encoder previously attached to the part. The encoding |
| + | scheme storage may safely be reused after this function returns. |
| + | |
| + | Setting a part's encoder multiple times is valid: only the value set by the |
| + | last call is retained. |
| + | |
| + | Upon multipart rendering, the part's content is encoded according to the |
| + | pertaining scheme and a corresponding *"Content-Transfer-Encoding"* header |
| + | is added to the part. |
| + | |
| + | Supported encoding schemes are: |
| + | |
| + | "*binary*": the data is left unchanged, the header is added. |
| + | |
| + | "*8bit*": header added, no data change. |
| + | |
| + | "*7bit*": the data is unchanged, but is each byte is checked |
| + | to be a 7-bit value; if not, a read error occurs. |
| + | |
| + | "*base64*": Data is converted to base64 encoding, then split in |
| + | CRLF-terminated lines of at most 76 characters. |
| + | |
| + | "*quoted-printable*": data is encoded in quoted printable lines of |
| + | at most 76 characters. Since the resulting size of the final data cannot be |
| + | determined prior to reading the original data, it is left as unknown, causing |
| + | chunked transfer in HTTP. For the same reason, this encoder may not be used |
| + | with IMAP. This encoder targets text data that is mostly ASCII and should |
| + | not be used with other types of data. |
| + | |
| + | If the original data is already encoded in such a scheme, a custom |
| + | *Content-Transfer-Encoding* header should be added with |
| + | curl_mime_headers(3) instead of setting a part encoder. |
| + | |
| + | Encoding should not be applied to multiparts, thus the use of this function on |
| + | a part with content set with curl_mime_subparts(3) is strongly |
| + | discouraged. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | curl_mime *mime; |
| + | curl_mimepart *part; |
| + | |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | /* create a mime handle */ |
| + | mime = curl_mime_init(curl); |
| + | |
| + | /* add a part */ |
| + | part = curl_mime_addpart(mime); |
| + | |
| + | /* send a file */ |
| + | curl_mime_filedata(part, "image.png"); |
| + | |
| + | /* encode file data in base64 for transfer */ |
| + | curl_mime_encoder(part, "base64"); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLE_OK or a CURL error code upon failure. |
| @@ -1,93 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_mime_filedata 3 "22 August 2017" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_mime_filedata - set a mime part's body data from a file contents |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_mime_filedata(curl_mimepart *part, |
| - | const char *filename); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_mime_filedata(3)\fP sets a mime part's body content from the named |
| - | file's contents. This is an alternative to \fIcurl_mime_data(3)\fP for setting |
| - | data to a mime part. |
| - | |
| - | \fIpart\fP is the part's to assign contents to. |
| - | |
| - | \fIfilename\fP points to the null-terminated file's path name. The pointer can |
| - | be NULL to detach the previous part contents settings. Filename storage can |
| - | be safely be reused after this call. |
| - | |
| - | As a side effect, the part's remote file name is set to the base name of the |
| - | given \fIfilename\fP if it is a valid named file. This can be undone or |
| - | overridden by a subsequent call to \fIcurl_mime_filename(3)\fP. |
| - | |
| - | The contents of the file is read during the file transfer in a streaming |
| - | manner to allow huge files to get transferred without using much memory. It |
| - | therefore requires that the file is kept intact during the entire request. |
| - | |
| - | If the file size cannot be determined before actually reading it (such as for |
| - | a character device or named pipe), the whole mime structure containing the |
| - | part is transferred using chunks by HTTP but is rejected by IMAP. |
| - | |
| - | Setting a part's contents multiple times is valid: only the value set by the |
| - | last call is retained. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | curl_mime *mime; |
| - | curl_mimepart *part; |
| - | |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | /* create a mime handle */ |
| - | mime = curl_mime_init(curl); |
| - | |
| - | /* add a part */ |
| - | part = curl_mime_addpart(mime); |
| - | |
| - | /* send data from this file */ |
| - | curl_mime_filedata(part, "image.png"); |
| - | |
| - | /* set name */ |
| - | curl_mime_name(part, "data"); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| - | .SH RETURN VALUE |
| - | CURLE_OK or a CURL error code upon failure. CURLE_READ_ERROR is only an |
| - | indication that the file is not yet readable: it can be safely ignored at |
| - | this time, but the file must be made readable before the pertaining |
| - | easy handle is performed. |
| - | .SH "SEE ALSO" |
| - | .BR curl_mime_addpart (3), |
| - | .BR curl_mime_data (3), |
| - | .BR curl_mime_filename (3), |
| - | .BR curl_mime_name (3) |
| @@ -0,0 +1,88 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_mime_filedata |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_mime_addpart (3) |
| + | - curl_mime_data (3) |
| + | - curl_mime_filename (3) |
| + | - curl_mime_name (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_mime_filedata - set a mime part's body data from a file contents |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_mime_filedata(curl_mimepart *part, |
| + | const char *filename); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_mime_filedata(3) sets a mime part's body content from the named |
| + | file's contents. This is an alternative to curl_mime_data(3) for setting |
| + | data to a mime part. |
| + | |
| + | *part* is the part's to assign contents to. |
| + | |
| + | *filename* points to the null-terminated file's path name. The pointer can |
| + | be NULL to detach the previous part contents settings. Filename storage can |
| + | be safely be reused after this call. |
| + | |
| + | As a side effect, the part's remote file name is set to the base name of the |
| + | given *filename* if it is a valid named file. This can be undone or |
| + | overridden by a subsequent call to curl_mime_filename(3). |
| + | |
| + | The contents of the file is read during the file transfer in a streaming |
| + | manner to allow huge files to get transferred without using much memory. It |
| + | therefore requires that the file is kept intact during the entire request. |
| + | |
| + | If the file size cannot be determined before actually reading it (such as for |
| + | a character device or named pipe), the whole mime structure containing the |
| + | part is transferred using chunks by HTTP but is rejected by IMAP. |
| + | |
| + | Setting a part's contents multiple times is valid: only the value set by the |
| + | last call is retained. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | curl_mime *mime; |
| + | curl_mimepart *part; |
| + | |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | /* create a mime handle */ |
| + | mime = curl_mime_init(curl); |
| + | |
| + | /* add a part */ |
| + | part = curl_mime_addpart(mime); |
| + | |
| + | /* send data from this file */ |
| + | curl_mime_filedata(part, "image.png"); |
| + | |
| + | /* set name */ |
| + | curl_mime_name(part, "data"); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLE_OK or a CURL error code upon failure. CURLE_READ_ERROR is only an |
| + | indication that the file is not yet readable: it can be safely ignored at |
| + | this time, but the file must be made readable before the pertaining |
| + | easy handle is performed. |
| @@ -1,84 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_mime_filename 3 "22 August 2017" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_mime_filename - set a mime part's remote file name |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_mime_filename(curl_mimepart *part, |
| - | const char *filename); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_mime_filename(3)\fP sets a mime part's remote file name. When remote |
| - | file name is set, content data is processed as a file, whatever is the part's |
| - | content source. A part's remote file name is transmitted to the server in the |
| - | associated Content-Disposition generated header. |
| - | |
| - | \fIpart\fP is the part's handle to assign the remote file name to. |
| - | |
| - | \fIfilename\fP points to the null-terminated file name string; it may be set |
| - | to NULL to remove a previously attached remote file name. |
| - | |
| - | The remote file name string is copied into the part, thus the associated |
| - | storage may safely be released or reused after call. Setting a part's file |
| - | name multiple times is valid: only the value set by the last call is retained. |
| - | .SH EXAMPLE |
| - | .nf |
| - | |
| - | static char imagebuf[]="imagedata"; |
| - | |
| - | int main(void) |
| - | { |
| - | curl_mime *mime; |
| - | curl_mimepart *part; |
| - | |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | /* create a mime handle */ |
| - | mime = curl_mime_init(curl); |
| - | |
| - | /* add a part */ |
| - | part = curl_mime_addpart(mime); |
| - | |
| - | /* send image data from memory */ |
| - | curl_mime_data(part, imagebuf, sizeof(imagebuf)); |
| - | |
| - | /* set a file name to make it look like a file upload */ |
| - | curl_mime_filename(part, "image.png"); |
| - | |
| - | /* set name */ |
| - | curl_mime_name(part, "data"); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| - | .SH RETURN VALUE |
| - | CURLE_OK or a CURL error code upon failure. |
| - | .SH "SEE ALSO" |
| - | .BR curl_mime_addpart (3), |
| - | .BR curl_mime_data (3), |
| - | .BR curl_mime_filedata (3) |
| @@ -0,0 +1,79 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_mime_filename |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_mime_addpart (3) |
| + | - curl_mime_data (3) |
| + | - curl_mime_filedata (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_mime_filename - set a mime part's remote file name |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_mime_filename(curl_mimepart *part, |
| + | const char *filename); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_mime_filename(3) sets a mime part's remote file name. When remote |
| + | file name is set, content data is processed as a file, whatever is the part's |
| + | content source. A part's remote file name is transmitted to the server in the |
| + | associated Content-Disposition generated header. |
| + | |
| + | *part* is the part's handle to assign the remote file name to. |
| + | |
| + | *filename* points to the null-terminated file name string; it may be set |
| + | to NULL to remove a previously attached remote file name. |
| + | |
| + | The remote file name string is copied into the part, thus the associated |
| + | storage may safely be released or reused after call. Setting a part's file |
| + | name multiple times is valid: only the value set by the last call is retained. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | |
| + | static char imagebuf[]="imagedata"; |
| + | |
| + | int main(void) |
| + | { |
| + | curl_mime *mime; |
| + | curl_mimepart *part; |
| + | |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | /* create a mime handle */ |
| + | mime = curl_mime_init(curl); |
| + | |
| + | /* add a part */ |
| + | part = curl_mime_addpart(mime); |
| + | |
| + | /* send image data from memory */ |
| + | curl_mime_data(part, imagebuf, sizeof(imagebuf)); |
| + | |
| + | /* set a file name to make it look like a file upload */ |
| + | curl_mime_filename(part, "image.png"); |
| + | |
| + | /* set name */ |
| + | curl_mime_name(part, "data"); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLE_OK or a CURL error code upon failure. |
| @@ -1,70 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_mime_free 3 "22 August 2017" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_mime_free - free a previously built mime structure |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | void curl_mime_free(curl_mime *mime); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_mime_free(3)\fP is used to clean up data previously built/appended |
| - | with \fIcurl_mime_addpart(3)\fP and other mime-handling functions. This must |
| - | be called when the data has been used, which typically means after |
| - | \fIcurl_easy_perform(3)\fP has been called. |
| - | |
| - | The handle to free is the one you passed to the \fICURLOPT_MIMEPOST(3)\fP |
| - | option: attached sub part mime structures must not be explicitly freed as they |
| - | are by the top structure freeing. |
| - | |
| - | \fBmime\fP is the handle as returned from a previous call to |
| - | \fIcurl_mime_init(3)\fP and may be NULL. |
| - | |
| - | Passing in a NULL pointer in \fImime\fP makes this function return immediately |
| - | with no action. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | /* Build the mime message. */ |
| - | curl_mime *mime = curl_mime_init(curl); |
| - | |
| - | /* send off the transfer */ |
| - | |
| - | /* Free multipart message. */ |
| - | curl_mime_free(mime); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| - | .SH RETURN VALUE |
| - | None |
| - | .SH "SEE ALSO" |
| - | .BR curl_free (3), |
| - | .BR curl_mime_init (3) |
| @@ -0,0 +1,65 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_mime_free |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_free (3) |
| + | - curl_mime_init (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_mime_free - free a previously built mime structure |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | void curl_mime_free(curl_mime *mime); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_mime_free(3) is used to clean up data previously built/appended |
| + | with curl_mime_addpart(3) and other mime-handling functions. This must |
| + | be called when the data has been used, which typically means after |
| + | curl_easy_perform(3) has been called. |
| + | |
| + | The handle to free is the one you passed to the CURLOPT_MIMEPOST(3) |
| + | option: attached sub part mime structures must not be explicitly freed as they |
| + | are by the top structure freeing. |
| + | |
| + | **mime** is the handle as returned from a previous call to |
| + | curl_mime_init(3) and may be NULL. |
| + | |
| + | Passing in a NULL pointer in *mime* makes this function return immediately |
| + | with no action. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | /* Build the mime message. */ |
| + | curl_mime *mime = curl_mime_init(curl); |
| + | |
| + | /* send off the transfer */ |
| + | |
| + | /* Free multipart message. */ |
| + | curl_mime_free(mime); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | None |
| @@ -1,83 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_mime_headers 3 "22 August 2017" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_mime_headers - set a mime part's custom headers |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_mime_headers(curl_mimepart *part, |
| - | struct curl_slist *headers, int take_ownership); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_mime_headers(3)\fP sets a mime part's custom headers. |
| - | |
| - | \fIpart\fP is the part's handle to assign the custom headers list to. |
| - | |
| - | \fIheaders\fP is the head of a list of custom headers; it may be set to NULL |
| - | to remove a previously attached custom header list. |
| - | |
| - | \fItake_ownership\fP: when non-zero, causes the list to be freed upon |
| - | replacement or mime structure deletion; in this case the list must not be |
| - | freed explicitly. |
| - | |
| - | Setting a part's custom headers list multiple times is valid: only the value |
| - | set by the last call is retained. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | struct curl_slist *headers = NULL; |
| - | CURL *easy = curl_easy_init(); |
| - | curl_mime *mime; |
| - | curl_mimepart *part; |
| - | |
| - | headers = curl_slist_append(headers, "Custom-Header: mooo"); |
| - | |
| - | mime = curl_mime_init(easy); |
| - | part = curl_mime_addpart(mime); |
| - | |
| - | /* use these headers in the part, takes ownership */ |
| - | curl_mime_headers(part, headers, 1); |
| - | |
| - | /* pass on this data */ |
| - | curl_mime_data(part, "12345679", CURL_ZERO_TERMINATED); |
| - | |
| - | /* set name */ |
| - | curl_mime_name(part, "numbers"); |
| - | |
| - | /* Post and send it. */ |
| - | curl_easy_setopt(easy, CURLOPT_MIMEPOST, mime); |
| - | curl_easy_setopt(easy, CURLOPT_URL, "https://example.com"); |
| - | curl_easy_perform(easy); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| - | .SH RETURN VALUE |
| - | CURLE_OK or a CURL error code upon failure. |
| - | .SH "SEE ALSO" |
| - | .BR curl_mime_addpart (3), |
| - | .BR curl_mime_name (3) |
| @@ -0,0 +1,78 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_mime_headers |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_mime_addpart (3) |
| + | - curl_mime_name (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_mime_headers - set a mime part's custom headers |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_mime_headers(curl_mimepart *part, |
| + | struct curl_slist *headers, int take_ownership); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_mime_headers(3) sets a mime part's custom headers. |
| + | |
| + | *part* is the part's handle to assign the custom headers list to. |
| + | |
| + | *headers* is the head of a list of custom headers; it may be set to NULL |
| + | to remove a previously attached custom header list. |
| + | |
| + | *take_ownership*: when non-zero, causes the list to be freed upon |
| + | replacement or mime structure deletion; in this case the list must not be |
| + | freed explicitly. |
| + | |
| + | Setting a part's custom headers list multiple times is valid: only the value |
| + | set by the last call is retained. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | struct curl_slist *headers = NULL; |
| + | CURL *easy = curl_easy_init(); |
| + | curl_mime *mime; |
| + | curl_mimepart *part; |
| + | |
| + | headers = curl_slist_append(headers, "Custom-Header: mooo"); |
| + | |
| + | mime = curl_mime_init(easy); |
| + | part = curl_mime_addpart(mime); |
| + | |
| + | /* use these headers in the part, takes ownership */ |
| + | curl_mime_headers(part, headers, 1); |
| + | |
| + | /* pass on this data */ |
| + | curl_mime_data(part, "12345679", CURL_ZERO_TERMINATED); |
| + | |
| + | /* set name */ |
| + | curl_mime_name(part, "numbers"); |
| + | |
| + | /* Post and send it. */ |
| + | curl_easy_setopt(easy, CURLOPT_MIMEPOST, mime); |
| + | curl_easy_setopt(easy, CURLOPT_URL, "https://example.com"); |
| + | curl_easy_perform(easy); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLE_OK or a CURL error code upon failure. |
| @@ -1,77 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_mime_init 3 "22 August 2017" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_mime_init - create a mime handle |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | curl_mime *curl_mime_init(CURL *easy_handle); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_mime_init(3)\fP creates a handle to a new empty mime structure. |
| - | This mime structure can be subsequently filled using the mime API, then |
| - | attached to some easy handle using option \fICURLOPT_MIMEPOST(3)\fP within |
| - | a \fIcurl_easy_setopt(3)\fP call or added as a multipart in another mime |
| - | handle's part using \fIcurl_mime_subparts(3)\fP. |
| - | |
| - | \fIeasy_handle\fP is used for part separator randomization and error |
| - | reporting. Since 7.87.0, it does not need to be the final target handle. |
| - | |
| - | Using a mime handle is the recommended way to post an HTTP form, format and |
| - | send a multi-part email with SMTP or upload such an email to an IMAP server. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *easy = curl_easy_init(); |
| - | curl_mime *mime; |
| - | curl_mimepart *part; |
| - | |
| - | /* Build an HTTP form with a single field named "data", */ |
| - | mime = curl_mime_init(easy); |
| - | part = curl_mime_addpart(mime); |
| - | curl_mime_data(part, "This is the field data", CURL_ZERO_TERMINATED); |
| - | curl_mime_name(part, "data"); |
| - | |
| - | /* Post and send it. */ |
| - | curl_easy_setopt(easy, CURLOPT_MIMEPOST, mime); |
| - | curl_easy_setopt(easy, CURLOPT_URL, "https://example.com"); |
| - | curl_easy_perform(easy); |
| - | |
| - | /* Clean-up. */ |
| - | curl_easy_cleanup(easy); |
| - | curl_mime_free(mime); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| - | .SH RETURN VALUE |
| - | A mime struct handle, or NULL upon failure. |
| - | .SH "SEE ALSO" |
| - | .BR curl_mime_addpart (3), |
| - | .BR curl_mime_free (3), |
| - | .BR curl_mime_subparts (3), |
| - | .BR CURLOPT_MIMEPOST (3) |
| @@ -0,0 +1,72 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_mime_init |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_MIMEPOST (3) |
| + | - curl_mime_addpart (3) |
| + | - curl_mime_free (3) |
| + | - curl_mime_subparts (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_mime_init - create a mime handle |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | curl_mime *curl_mime_init(CURL *easy_handle); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_mime_init(3) creates a handle to a new empty mime structure. |
| + | This mime structure can be subsequently filled using the mime API, then |
| + | attached to some easy handle using option CURLOPT_MIMEPOST(3) within |
| + | a curl_easy_setopt(3) call or added as a multipart in another mime |
| + | handle's part using curl_mime_subparts(3). |
| + | |
| + | *easy_handle* is used for part separator randomization and error |
| + | reporting. Since 7.87.0, it does not need to be the final target handle. |
| + | |
| + | Using a mime handle is the recommended way to post an HTTP form, format and |
| + | send a multi-part email with SMTP or upload such an email to an IMAP server. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *easy = curl_easy_init(); |
| + | curl_mime *mime; |
| + | curl_mimepart *part; |
| + | |
| + | /* Build an HTTP form with a single field named "data", */ |
| + | mime = curl_mime_init(easy); |
| + | part = curl_mime_addpart(mime); |
| + | curl_mime_data(part, "This is the field data", CURL_ZERO_TERMINATED); |
| + | curl_mime_name(part, "data"); |
| + | |
| + | /* Post and send it. */ |
| + | curl_easy_setopt(easy, CURLOPT_MIMEPOST, mime); |
| + | curl_easy_setopt(easy, CURLOPT_URL, "https://example.com"); |
| + | curl_easy_perform(easy); |
| + | |
| + | /* Clean-up. */ |
| + | curl_easy_cleanup(easy); |
| + | curl_mime_free(mime); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | A mime struct handle, or NULL upon failure. |
| @@ -1,72 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_mime_name 3 "22 August 2017" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_mime_name - set a mime part's name |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_mime_name(curl_mimepart *part, const char *name); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_mime_name(3)\fP sets a mime part's name. This is the way HTTP form |
| - | fields are named. |
| - | |
| - | \fIpart\fP is the part's handle to assign a name to. |
| - | |
| - | \fIname\fP points to the null-terminated name string. |
| - | |
| - | The name string is copied into the part, thus the associated storage may |
| - | safely be released or reused after call. Setting a part's name multiple times |
| - | is valid: only the value set by the last call is retained. It is possible to |
| - | reset the name of a part by setting \fIname\fP to NULL. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | curl_mime *mime; |
| - | curl_mimepart *part; |
| - | |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | /* create a mime handle */ |
| - | mime = curl_mime_init(curl); |
| - | |
| - | /* add a part */ |
| - | part = curl_mime_addpart(mime); |
| - | |
| - | /* give the part a name */ |
| - | curl_mime_name(part, "shoe_size"); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| - | .SH RETURN VALUE |
| - | CURLE_OK or a CURL error code upon failure. |
| - | .SH "SEE ALSO" |
| - | .BR curl_mime_addpart (3), |
| - | .BR curl_mime_data (3), |
| - | .BR curl_mime_type (3) |
| @@ -0,0 +1,67 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_mime_name |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_mime_addpart (3) |
| + | - curl_mime_data (3) |
| + | - curl_mime_type (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_mime_name - set a mime part's name |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_mime_name(curl_mimepart *part, const char *name); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_mime_name(3) sets a mime part's name. This is the way HTTP form |
| + | fields are named. |
| + | |
| + | *part* is the part's handle to assign a name to. |
| + | |
| + | *name* points to the null-terminated name string. |
| + | |
| + | The name string is copied into the part, thus the associated storage may |
| + | safely be released or reused after call. Setting a part's name multiple times |
| + | is valid: only the value set by the last call is retained. It is possible to |
| + | reset the name of a part by setting *name* to NULL. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | curl_mime *mime; |
| + | curl_mimepart *part; |
| + | |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | /* create a mime handle */ |
| + | mime = curl_mime_init(curl); |
| + | |
| + | /* add a part */ |
| + | part = curl_mime_addpart(mime); |
| + | |
| + | /* give the part a name */ |
| + | curl_mime_name(part, "shoe_size"); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLE_OK or a CURL error code upon failure. |
| @@ -1,88 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_mime_subparts 3 "22 August 2017" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_mime_subparts - set sub-parts of a multipart mime part |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_mime_subparts(curl_mimepart *part, curl_mime *subparts); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_mime_subparts(3)\fP sets a multipart mime part's content from a mime |
| - | structure. |
| - | |
| - | \fIpart\fP is a handle to the multipart part. |
| - | |
| - | \fIsubparts\fP is a mime structure handle holding the sub-parts. After |
| - | \fIcurl_mime_subparts(3)\fP succeeds, the mime structure handle belongs to the |
| - | multipart part and must not be freed explicitly. It may however be updated by |
| - | subsequent calls to mime API functions. |
| - | |
| - | Setting a part's contents multiple times is valid: only the value set by the |
| - | last call is retained. It is possible to unassign previous part's contents by |
| - | setting \fIsubparts\fP to NULL. |
| - | .SH EXAMPLE |
| - | .nf |
| - | |
| - | static char *inline_html = "<title>example</title>"; |
| - | static char *inline_text = "once upon the time"; |
| - | |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | struct curl_slist *slist; |
| - | |
| - | /* The inline part is an alternative proposing the html and the text |
| - | versions of the email. */ |
| - | curl_mime *alt = curl_mime_init(curl); |
| - | curl_mimepart *part; |
| - | |
| - | /* HTML message. */ |
| - | part = curl_mime_addpart(alt); |
| - | curl_mime_data(part, inline_html, CURL_ZERO_TERMINATED); |
| - | curl_mime_type(part, "text/html"); |
| - | |
| - | /* Text message. */ |
| - | part = curl_mime_addpart(alt); |
| - | curl_mime_data(part, inline_text, CURL_ZERO_TERMINATED); |
| - | |
| - | /* Create the inline part. */ |
| - | part = curl_mime_addpart(alt); |
| - | curl_mime_subparts(part, alt); |
| - | curl_mime_type(part, "multipart/alternative"); |
| - | slist = curl_slist_append(NULL, "Content-Disposition: inline"); |
| - | curl_mime_headers(part, slist, 1); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| - | .SH RETURN VALUE |
| - | CURLE_OK or a CURL error code upon failure. |
| - | .SH "SEE ALSO" |
| - | .BR curl_mime_addpart (3), |
| - | .BR curl_mime_init (3) |
| @@ -0,0 +1,83 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_mime_subparts |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_mime_addpart (3) |
| + | - curl_mime_init (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_mime_subparts - set sub-parts of a multipart mime part |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_mime_subparts(curl_mimepart *part, curl_mime *subparts); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_mime_subparts(3) sets a multipart mime part's content from a mime |
| + | structure. |
| + | |
| + | *part* is a handle to the multipart part. |
| + | |
| + | *subparts* is a mime structure handle holding the sub-parts. After |
| + | curl_mime_subparts(3) succeeds, the mime structure handle belongs to the |
| + | multipart part and must not be freed explicitly. It may however be updated by |
| + | subsequent calls to mime API functions. |
| + | |
| + | Setting a part's contents multiple times is valid: only the value set by the |
| + | last call is retained. It is possible to unassign previous part's contents by |
| + | setting *subparts* to NULL. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | |
| + | static char *inline_html = "<title>example</title>"; |
| + | static char *inline_text = "once upon the time"; |
| + | |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | struct curl_slist *slist; |
| + | |
| + | /* The inline part is an alternative proposing the html and the text |
| + | versions of the email. */ |
| + | curl_mime *alt = curl_mime_init(curl); |
| + | curl_mimepart *part; |
| + | |
| + | /* HTML message. */ |
| + | part = curl_mime_addpart(alt); |
| + | curl_mime_data(part, inline_html, CURL_ZERO_TERMINATED); |
| + | curl_mime_type(part, "text/html"); |
| + | |
| + | /* Text message. */ |
| + | part = curl_mime_addpart(alt); |
| + | curl_mime_data(part, inline_text, CURL_ZERO_TERMINATED); |
| + | |
| + | /* Create the inline part. */ |
| + | part = curl_mime_addpart(alt); |
| + | curl_mime_subparts(part, alt); |
| + | curl_mime_type(part, "multipart/alternative"); |
| + | slist = curl_slist_append(NULL, "Content-Disposition: inline"); |
| + | curl_mime_headers(part, slist, 1); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLE_OK or a CURL error code upon failure. |
| @@ -1,91 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_mime_type 3 "22 August 2017" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_mime_type - set a mime part's content type |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_mime_type(curl_mimepart *part, const char *mimetype); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_mime_type(3)\fP sets a mime part's content type. |
| - | |
| - | \fIpart\fP is the part's handle to assign the content type to. |
| - | |
| - | \fImimetype\fP points to the null-terminated file mime type string; it may be |
| - | set to NULL to remove a previously attached mime type. |
| - | |
| - | The mime type string is copied into the part, thus the associated storage may |
| - | safely be released or reused after call. Setting a part's type multiple times |
| - | is valid: only the value set by the last call is retained. |
| - | |
| - | In the absence of a mime type and if needed by the protocol specifications, |
| - | a default mime type is determined by the context: |
| - | |
| - | - If set as a custom header, use this value. |
| - | |
| - | - application/form-data for an HTTP form post. |
| - | |
| - | - If a remote file name is set, the mime type is taken from the file name |
| - | extension, or application/octet-stream by default. |
| - | |
| - | - For a multipart part, multipart/mixed. |
| - | |
| - | - text/plain in other cases. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | curl_mime *mime; |
| - | curl_mimepart *part; |
| - | |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | /* create a mime handle */ |
| - | mime = curl_mime_init(curl); |
| - | |
| - | /* add a part */ |
| - | part = curl_mime_addpart(mime); |
| - | |
| - | /* get data from this file */ |
| - | curl_mime_filedata(part, "image.png"); |
| - | |
| - | /* content-type for this part */ |
| - | curl_mime_type(part, "image/png"); |
| - | |
| - | /* set name */ |
| - | curl_mime_name(part, "image"); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| - | .SH RETURN VALUE |
| - | CURLE_OK or a CURL error code upon failure. |
| - | .SH "SEE ALSO" |
| - | .BR curl_mime_addpart (3), |
| - | .BR curl_mime_data (3), |
| - | .BR curl_mime_name (3) |
| @@ -0,0 +1,86 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_mime_type |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_mime_addpart (3) |
| + | - curl_mime_data (3) |
| + | - curl_mime_name (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_mime_type - set a mime part's content type |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_mime_type(curl_mimepart *part, const char *mimetype); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_mime_type(3) sets a mime part's content type. |
| + | |
| + | *part* is the part's handle to assign the content type to. |
| + | |
| + | *mimetype* points to the null-terminated file mime type string; it may be |
| + | set to NULL to remove a previously attached mime type. |
| + | |
| + | The mime type string is copied into the part, thus the associated storage may |
| + | safely be released or reused after call. Setting a part's type multiple times |
| + | is valid: only the value set by the last call is retained. |
| + | |
| + | In the absence of a mime type and if needed by the protocol specifications, |
| + | a default mime type is determined by the context: |
| + | |
| + | - If set as a custom header, use this value. |
| + | |
| + | - application/form-data for an HTTP form post. |
| + | |
| + | - If a remote file name is set, the mime type is taken from the file name |
| + | extension, or application/octet-stream by default. |
| + | |
| + | - For a multipart part, multipart/mixed. |
| + | |
| + | - text/plain in other cases. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | curl_mime *mime; |
| + | curl_mimepart *part; |
| + | |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | /* create a mime handle */ |
| + | mime = curl_mime_init(curl); |
| + | |
| + | /* add a part */ |
| + | part = curl_mime_addpart(mime); |
| + | |
| + | /* get data from this file */ |
| + | curl_mime_filedata(part, "image.png"); |
| + | |
| + | /* content-type for this part */ |
| + | curl_mime_type(part, "image/png"); |
| + | |
| + | /* set name */ |
| + | curl_mime_name(part, "image"); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLE_OK or a CURL error code upon failure. |
| @@ -1,33 +1,25 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_printf 3 "30 April 2004" "libcurl" "libcurl" |
| - | .SH NAME |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_printf |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - fprintf (3) |
| + | - printf (3) |
| + | - sprintf (3) |
| + | - vprintf (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| curl_maprintf, curl_mfprintf, curl_mprintf, curl_msnprintf, curl_msprintf | |
| curl_mvaprintf, curl_mvfprintf, curl_mvprintf, curl_mvsnprintf, | |
| curl_mvsprintf - formatted output conversion | |
| - | .SH SYNOPSIS |
| - | .nf |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/mprintf.h> | |
| int curl_mprintf(const char *format, ...); | |
| @@ -41,8 +33,10 @@ int curl_mvsnprintf(char *buffer, size_t maxlength, const char *format, | |
| va_list args); | |
| char *curl_maprintf(const char *format , ...); | |
| char *curl_mvaprintf(const char *format, va_list args); | |
| - | .fi |
| - | .SH DESCRIPTION |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| These functions produce output according to the format string and given | |
| arguments. They are mostly clones of the well-known C-style functions but | |
| there are slight differences in behavior. | |
| @@ -50,41 +44,43 @@ there are slight differences in behavior. | |
| We discourage users from using any of these functions in new applications. | |
| Functions in the curl_mprintf() family produce output according to a format as | |
| - | described below. The functions \fBcurl_mprintf()\fP and \fBcurl_mvprintf()\fP |
| - | write output to stdout, the standard output stream; \fBcurl_mfprintf()\fP and |
| - | \fBcurl_mvfprintf()\fP write output to the given output stream; |
| - | \fBcurl_msprintf()\fP, \fBcurl_msnprintf()\fP, \fBcurl_mvsprintf()\fP, and |
| - | \fBcurl_mvsnprintf()\fP write to the character string \fBbuffer\fP. |
| - | |
| - | The functions \fBcurl_msnprintf()\fP and \fBcurl_mvsnprintf()\fP write at most |
| - | \fImaxlength\fP bytes (including the terminating null byte ('\\0')) to |
| - | \fIbuffer\fP. |
| - | |
| - | The functions \fBcurl_mvprintf()\fP, \fBcurl_mvfprintf()\fP, |
| - | \fBcurl_mvsprintf()\fP, \fBcurl_mvsnprintf()\fP are equivalent to the |
| - | functions \fBcurl_mprintf()\fP, \fBcurl_mfprintf()\fP, \fBcurl_msprintf()\fP, |
| - | \fBcurl_msnprintf()\fP, respectively, except that they are called with a |
| - | \fIva_list\fP instead of a variable number of arguments. These functions do |
| - | not call the \fIva_end\fP macro. Because they invoke the \fIva_arg\fP macro, |
| - | the value of \fIap\fP is undefined after the call. |
| - | |
| - | The functions \fBcurl_maprintf()\fP and \fBcurl_mvaprintf()\fP return the |
| + | described below. The functions **curl_mprintf()** and **curl_mvprintf()** |
| + | write output to stdout, the standard output stream; **curl_mfprintf()** and |
| + | **curl_mvfprintf()** write output to the given output stream; |
| + | **curl_msprintf()**, **curl_msnprintf()**, **curl_mvsprintf()**, and |
| + | **curl_mvsnprintf()** write to the character string **buffer**. |
| + | |
| + | The functions **curl_msnprintf()** and **curl_mvsnprintf()** write at most |
| + | *maxlength* bytes (including the terminating null byte ('0')) to |
| + | *buffer*. |
| + | |
| + | The functions **curl_mvprintf()**, **curl_mvfprintf()**, |
| + | **curl_mvsprintf()**, **curl_mvsnprintf()** are equivalent to the |
| + | functions **curl_mprintf()**, **curl_mfprintf()**, **curl_msprintf()**, |
| + | **curl_msnprintf()**, respectively, except that they are called with a |
| + | *va_list* instead of a variable number of arguments. These functions do |
| + | not call the *va_end* macro. Because they invoke the *va_arg* macro, |
| + | the value of *ap* is undefined after the call. |
| + | |
| + | The functions **curl_maprintf()** and **curl_mvaprintf()** return the |
| output string as pointer to a newly allocated memory area. The returned string | |
| - | must be \fIcurl_free(3)\fPed by the receiver. |
| + | must be curl_free(3)ed by the receiver. |
| All of these functions write the output under the control of a format string | |
| that specifies how subsequent arguments are converted for output. | |
| - | .SH FORMAT STRING |
| + | # FORMAT STRING |
| + | |
| The format string is composed of zero or more directives: ordinary characters | |
| (not %), which are copied unchanged to the output stream; and conversion | |
| specifications, each of which results in fetching zero or more subsequent | |
| arguments. Each conversion specification is introduced by the character %, and | |
| ends with a conversion specifier. In between there may be (in this order) zero | |
| - | or more \fIflags\fP, an optional minimum \fIfield width\fP, an optional |
| - | \fIprecision\fP and an optional \fIlength modifier\fP. |
| + | or more *flags*, an optional minimum *field width*, an optional |
| + | *precision* and an optional *length modifier*. |
| + | |
| + | # The $ modifier |
| - | .SH "The $ modifier" |
| The arguments must correspond properly with the conversion specifier. By | |
| default, the arguments are used in the order given, where each '*' (see Field | |
| width and Precision below) and each conversion specifier asks for the next | |
| @@ -93,13 +89,13 @@ can also specify explicitly which argument is taken, at each place where an | |
| argument is required, by writing "%m$" instead of '%' and "*m$" instead | |
| of '*', where the decimal integer m denotes the position in the argument list | |
| of the desired argument, indexed starting from 1. Thus, | |
| - | .nf |
| + | ~~~c |
| curl_mprintf("%*d", width, num); | |
| - | .fi |
| + | ~~~ |
| and | |
| - | .nf |
| + | ~~~c |
| curl_mprintf("%2$*1$d", width, num); | |
| - | .fi |
| + | ~~~ |
| are equivalent. The second style allows repeated references to the same | |
| argument. | |
| @@ -110,130 +106,183 @@ the numbers of arguments specified using '$'; for example, if arguments 1 and | |
| 3 are specified, argument 2 must also be specified somewhere in the format | |
| string. | |
| - | .SH "Flag characters" |
| + | # Flag characters |
| + | |
| The character % is followed by zero or more of the following flags: | |
| - | .IP # |
| + | ## # |
| + | |
| The value should be converted to its "alternate form". | |
| - | .IP 0 |
| + | |
| + | ## 0 |
| + | |
| The value should be zero padded. | |
| - | .IP - |
| - | The converted value is to be left adjusted on the field boundary. (The |
| - | default is right justification.) The converted value is padded on the right |
| - | with blanks, rather than on the left with blanks or zeros. A '-' overrides a |
| - | \&'0' if both are given. |
| - | .IP ' ' |
| - | (a space) A blank should be left before a positive number (or empty string) |
| - | produced by a signed conversion. |
| - | .IP + |
| + | |
| + | ## - |
| + | |
| + | The converted value is to be left adjusted on the field boundary. (The default |
| + | is right justification.) The converted value is padded on the right with |
| + | blanks, rather than on the left with blanks or zeros. A '-' overrides a &'0' |
| + | if both are given. |
| + | |
| + | ## (space) |
| + | |
| + | (a space: ' ') A blank should be left before a positive number (or empty |
| + | string) produced by a signed conversion. |
| + | |
| + | ## + |
| + | |
| A sign (+ or -) should always be placed before a number produced by a signed | |
| conversion. By default, a sign is used only for negative numbers. A '+' | |
| overrides a space if both are used. | |
| - | .SH "Field width" |
| + | |
| + | # Field width |
| + | |
| An optional decimal digit string (with nonzero first digit) specifying a | |
| minimum field width. If the converted value has fewer characters than the | |
| field width, it gets padded with spaces on the left (or right, if the | |
| left-adjustment flag has been given). Instead of a decimal digit string one | |
| may write "*" or "*m$" (for some decimal integer m) to specify that the field | |
| - | width is given in the next argument, or in the \fIm-th\fP argument, |
| + | width is given in the next argument, or in the *m-th* argument, |
| respectively, which must be of type int. A negative field width is taken as | |
| a '-' flag followed by a positive field width. In no case does a nonexistent | |
| or small field width cause truncation of a field; if the result of a | |
| conversion is wider than the field width, the field is expanded to contain the | |
| conversion result. | |
| - | .SH "Precision" |
| + | |
| + | # Precision |
| + | |
| An optional precision in the form of a period ('.') followed by an optional | |
| decimal digit string. Instead of a decimal digit string one may write "*" or | |
| "*m$" (for some decimal integer m) to specify that the precision is given in | |
| - | the next argument, or in the \fIm-th\fP argument, respectively, which must be of |
| + | the next argument, or in the *m-th* argument, respectively, which must be of |
| type int. If the precision is given as just '.', the precision is taken to be | |
| zero. A negative precision is taken as if the precision were omitted. This | |
| - | gives the minimum number of digits to appear for \fBd\fP, \fBi\fP, \fBo\fP, |
| - | \fBu\fP, \fBx\fP, and \fBX\fP conversions, the number of digits to appear |
| - | after the radix character for \fBa\fP, \fBA\fP, \fBe\fP, \fBE\fP, \fBf\fP, and |
| - | \fBF\fP conversions, the maximum number of significant digits for \fBg\fP and |
| - | \fBG\fP conversions, or the maximum number of characters to be printed from a |
| - | string for \fBs\fP and \fBS\fP conversions. |
| - | .SH "Length modifier" |
| - | .IP h |
| - | A following integer conversion corresponds to a \fIshort\fP or \fIunsigned |
| - | short\fP argument. |
| - | .IP l |
| - | (ell) A following integer conversion corresponds to a \fIlong\fP or |
| - | \fIunsigned long\fP argument, or a following n conversion corresponds to a |
| + | gives the minimum number of digits to appear for **d**, **i**, **o**, |
| + | **u**, **x**, and **X** conversions, the number of digits to appear |
| + | after the radix character for **a**, **A**, **e**, **E**, **f**, and |
| + | **F** conversions, the maximum number of significant digits for **g** and |
| + | **G** conversions, or the maximum number of characters to be printed from a |
| + | string for **s** and **S** conversions. |
| + | |
| + | # Length modifier |
| + | |
| + | ## h |
| + | |
| + | A following integer conversion corresponds to a *short* or *unsigned short* |
| + | argument. |
| + | |
| + | ## l |
| + | |
| + | (ell) A following integer conversion corresponds to a *long* or |
| + | *unsigned long* argument, or a following n conversion corresponds to a |
| pointer to a long argument | |
| - | .IP ll |
| - | (ell-ell). A following integer conversion corresponds to a \fIlong long\fP or |
| - | \fIunsigned long long\fP argument, or a following n conversion corresponds to |
| + | |
| + | ## ll |
| + | |
| + | (ell-ell). A following integer conversion corresponds to a *long long* or |
| + | *unsigned long long* argument, or a following n conversion corresponds to |
| a pointer to a long long argument. | |
| - | .IP q |
| - | A synonym for \fBll\fP. |
| - | .IP L |
| + | |
| + | ## q |
| + | |
| + | A synonym for **ll**. |
| + | |
| + | ## L |
| + | |
| A following a, A, e, E, f, F, g, or G conversion corresponds to a long double | |
| argument. | |
| - | .IP z |
| - | A following integer conversion corresponds to a \fIsize_t\fP or \fIssize_t\fP |
| + | |
| + | ## z |
| + | |
| + | A following integer conversion corresponds to a *size_t* or *ssize_t* |
| argument. | |
| - | .SH "Conversion specifiers" |
| + | |
| + | # Conversion specifiers |
| + | |
| A character that specifies the type of conversion to be applied. The | |
| conversion specifiers and their meanings are: | |
| - | .IP "d, i" |
| + | |
| + | ## d, i |
| + | |
| The int argument is converted to signed decimal notation. The precision, if | |
| any, gives the minimum number of digits that must appear; if the converted | |
| value requires fewer digits, it is padded on the left with zeros. The default | |
| precision is 1. When 0 is printed with an explicit precision 0, the output is | |
| empty. | |
| - | .IP "o, u, x, X" |
| + | |
| + | ## o, u, x, X |
| + | |
| The unsigned int argument is converted to unsigned octal (o), unsigned decimal | |
| - | (u), or unsigned hexadecimal (\fBx\fP and \fBX\fP) notation. The letters |
| - | \fIabcdef\fP are used for \fBx\fP conversions; the letters \fIABCDEF\fP are |
| - | used for \fBX\fP conversions. The precision, if any, gives the minimum number |
| + | (u), or unsigned hexadecimal (**x** and **X**) notation. The letters |
| + | *abcdef* are used for **x** conversions; the letters *ABCDEF* are |
| + | used for **X** conversions. The precision, if any, gives the minimum number |
| of digits that must appear; if the converted value requires fewer digits, it | |
| is padded on the left with zeros. The default precision is 1. When 0 is | |
| printed with an explicit precision 0, the output is empty. | |
| - | .IP "e, E" |
| - | The double argument is rounded and output in the style \fB"[-]d.ddde±dd"\fP |
| - | .IP "f, F" |
| + | |
| + | ## e, E |
| + | |
| + | The double argument is rounded and output in the style **"[-]d.ddde±dd"** |
| + | |
| + | ## f, F |
| + | |
| The double argument is rounded and output to decimal notation in the style | |
| - | \fB"[-]ddd.ddd"\fP. |
| - | .IP "g, G" |
| + | **"[-]ddd.ddd"**. |
| + | |
| + | ## g, G |
| + | |
| The double argument is converted in style f or e. | |
| - | .IP "c" |
| + | |
| + | ## c |
| + | |
| The int argument is converted to an unsigned char, and the resulting character | |
| is written. | |
| - | .IP "s" |
| - | The \fIconst char *\fP argument is expected to be a pointer to an array of |
| + | |
| + | ## s |
| + | |
| + | The *const char ** argument is expected to be a pointer to an array of |
| character type (pointer to a string). Characters from the array are written up | |
| to (but not including) a terminating null byte. If a precision is specified, | |
| no more than the number specified are written. If a precision is given, no | |
| null byte need be present; if the precision is not specified, or is greater | |
| than the size of the array, the array must contain a terminating null byte. | |
| - | .IP "p" |
| - | The \fIvoid *\fP pointer argument is printed in hexadecimal. |
| - | .IP "n" |
| + | |
| + | ## p |
| + | |
| + | The *void ** pointer argument is printed in hexadecimal. |
| + | |
| + | ## n |
| + | |
| The number of characters written so far is stored into the integer pointed to | |
| by the corresponding argument. | |
| - | .IP "%" |
| + | |
| + | ## % |
| + | |
| A '%' symbol is written. No argument is converted. | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| const char *name = "John"; | |
| int main(void) | |
| { | |
| - | curl_mprintf("My name is %s\\n", name); |
| - | curl_mprintf("Pi is almost %f\\n", (double)25.0/8); |
| + | curl_mprintf("My name is %s\n", name); |
| + | curl_mprintf("Pi is almost %f\n", (double)25.0/8); |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| These functions might be removed from the public libcurl API in the future. Do | |
| not use them in new programs or projects. | |
| - | .SH RETURN VALUE |
| - | The \fBcurl_maprintf\fP and \fBcurl_mvaprintf\fP functions return a pointer to |
| + | |
| + | # RETURN VALUE |
| + | |
| + | The **curl_maprintf** and **curl_mvaprintf** functions return a pointer to |
| a newly allocated string, or NULL if it failed. | |
| All other functions return the number of characters actually printed | |
| (excluding the null byte used to end output to strings). Note that this | |
| sometimes differ from how the POSIX versions of these functions work. | |
| - | .SH "SEE ALSO" |
| - | .BR printf "(3), " sprintf "(3), " fprintf "(3), " vprintf "(3) " |
| @@ -1,93 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_multi_add_handle 3 "4 March 2002" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_multi_add_handle - add an easy handle to a multi session |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *easy_handle); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Adds the \fIeasy handle\fP to the \fImulti_handle\fP. |
| - | |
| - | While an easy handle is added to a multi stack, you cannot and you must not |
| - | use \fIcurl_easy_perform(3)\fP on that handle. After having removed the easy |
| - | handle from the multi stack again, it is perfectly fine to use it with the |
| - | easy interface again. |
| - | |
| - | If the easy handle is not set to use a shared (\fICURLOPT_SHARE(3)\fP) cache, |
| - | it is made to use a DNS cache that is shared between all easy handles within |
| - | the multi handle when \fIcurl_multi_add_handle(3)\fP is called. |
| - | |
| - | When an easy interface is added to a multi handle, it is set to use a shared |
| - | connection cache owned by the multi handle. Removing and adding new easy |
| - | handles does not affect the pool of connections or the ability to do |
| - | connection reuse. |
| - | |
| - | If you have \fICURLMOPT_TIMERFUNCTION(3)\fP set in the multi handle (as you |
| - | should if you are working event-based with \fIcurl_multi_socket_action(3)\fP |
| - | and friends), that callback is called from within this function to ask for an |
| - | updated timer so that your main event loop gets the activity on this handle to |
| - | get started. |
| - | |
| - | The easy handle remains added to the multi handle until you remove it again |
| - | with \fIcurl_multi_remove_handle(3)\fP - even when a transfer with that |
| - | specific easy handle is completed. |
| - | |
| - | You should remove the easy handle from the multi stack before you terminate |
| - | first the easy handle and then the multi handle: |
| - | |
| - | 1 - \fIcurl_multi_remove_handle(3)\fP |
| - | |
| - | 2 - \fIcurl_easy_cleanup(3)\fP |
| - | |
| - | 3 - \fIcurl_multi_cleanup(3)\fP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | /* init a multi stack */ |
| - | CURLM *multi = curl_multi_init(); |
| - | |
| - | /* create two easy handles */ |
| - | CURL *http_handle = curl_easy_init(); |
| - | CURL *http_handle2 = curl_easy_init(); |
| - | |
| - | /* add individual transfers */ |
| - | curl_multi_add_handle(multi, http_handle); |
| - | curl_multi_add_handle(multi, http_handle2); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.9.6 |
| - | .SH RETURN VALUE |
| - | CURLMcode type, general libcurl multi interface error code. |
| - | .SH "SEE ALSO" |
| - | .BR curl_multi_cleanup (3), |
| - | .BR curl_multi_get_handles (3), |
| - | .BR curl_multi_init (3), |
| - | .BR curl_multi_setopt (3), |
| - | .BR curl_multi_socket_action (3) |
| @@ -0,0 +1,88 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_multi_add_handle |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_multi_cleanup (3) |
| + | - curl_multi_get_handles (3) |
| + | - curl_multi_init (3) |
| + | - curl_multi_setopt (3) |
| + | - curl_multi_socket_action (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_multi_add_handle - add an easy handle to a multi session |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *easy_handle); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Adds the *easy handle* to the *multi_handle*. |
| + | |
| + | While an easy handle is added to a multi stack, you cannot and you must not |
| + | use curl_easy_perform(3) on that handle. After having removed the easy |
| + | handle from the multi stack again, it is perfectly fine to use it with the |
| + | easy interface again. |
| + | |
| + | If the easy handle is not set to use a shared (CURLOPT_SHARE(3)) cache, |
| + | it is made to use a DNS cache that is shared between all easy handles within |
| + | the multi handle when curl_multi_add_handle(3) is called. |
| + | |
| + | When an easy interface is added to a multi handle, it is set to use a shared |
| + | connection cache owned by the multi handle. Removing and adding new easy |
| + | handles does not affect the pool of connections or the ability to do |
| + | connection reuse. |
| + | |
| + | If you have CURLMOPT_TIMERFUNCTION(3) set in the multi handle (as you |
| + | should if you are working event-based with curl_multi_socket_action(3) |
| + | and friends), that callback is called from within this function to ask for an |
| + | updated timer so that your main event loop gets the activity on this handle to |
| + | get started. |
| + | |
| + | The easy handle remains added to the multi handle until you remove it again |
| + | with curl_multi_remove_handle(3) - even when a transfer with that |
| + | specific easy handle is completed. |
| + | |
| + | You should remove the easy handle from the multi stack before you terminate |
| + | first the easy handle and then the multi handle: |
| + | |
| + | 1 - curl_multi_remove_handle(3) |
| + | |
| + | 2 - curl_easy_cleanup(3) |
| + | |
| + | 3 - curl_multi_cleanup(3) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | /* init a multi stack */ |
| + | CURLM *multi = curl_multi_init(); |
| + | |
| + | /* create two easy handles */ |
| + | CURL *http_handle = curl_easy_init(); |
| + | CURL *http_handle2 = curl_easy_init(); |
| + | |
| + | /* add individual transfers */ |
| + | curl_multi_add_handle(multi, http_handle); |
| + | curl_multi_add_handle(multi, http_handle2); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.9.6 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLMcode type, general libcurl multi interface error code. |
| @@ -1,84 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_multi_assign 3 "9 Jul 2006" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_multi_assign \- set data to associate with an internal socket |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_assign(CURLM *multi_handle, curl_socket_t sockfd, |
| - | void *sockptr); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function creates an association in the multi handle between the given |
| - | socket and a private pointer of the application. This is designed for |
| - | \fIcurl_multi_socket_action(3)\fP uses. |
| - | |
| - | When set, the \fIsockptr\fP pointer is passed to all future socket callbacks |
| - | for the specific \fIsockfd\fP socket. |
| - | |
| - | If the given \fIsockfd\fP is not already in use by libcurl, this function |
| - | returns an error. |
| - | |
| - | libcurl only keeps one single pointer associated with a socket, so calling |
| - | this function several times for the same socket makes the last set pointer get |
| - | used. |
| - | |
| - | The idea here being that this association (socket to private pointer) is |
| - | something that just about every application that uses this API needs and then |
| - | libcurl can just as well do it since it already has the necessary |
| - | functionality. |
| - | |
| - | It is acceptable to call this function from your multi callback functions. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLM *multi = curl_multi_init(); |
| - | void *ourstructp; /* pointer to our data */ |
| - | curl_socket_t fd; /* file descriptor to associate our data with */ |
| - | |
| - | /* make our struct pointer associated with socket fd */ |
| - | CURLMcode mc = curl_multi_assign(multi, fd, ourstructp); |
| - | if(mc) |
| - | printf("error: %s\\n", curl_multi_strerror(mc)); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.15.5 |
| - | .SH RETURN VALUE |
| - | The standard CURLMcode for multi interface error codes. |
| - | .SH TYPICAL USAGE |
| - | In a typical application you allocate a struct or at least use some kind of |
| - | semi-dynamic data for each socket that we must wait for action on when using |
| - | the \fIcurl_multi_socket_action(3)\fP approach. |
| - | |
| - | When our socket-callback gets called by libcurl and we get to know about yet |
| - | another socket to wait for, we can use \fIcurl_multi_assign(3)\fP to point out |
| - | the particular data so that when we get updates about this same socket again, |
| - | we do not have to find the struct associated with this socket by ourselves. |
| - | .SH "SEE ALSO" |
| - | .BR curl_multi_setopt (3), |
| - | .BR curl_multi_socket_action (3) |
| @@ -0,0 +1,81 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_multi_assign |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_multi_setopt (3) |
| + | - curl_multi_socket_action (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_multi_assign - set data to associate with an internal socket |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_assign(CURLM *multi_handle, curl_socket_t sockfd, |
| + | void *sockptr); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function creates an association in the multi handle between the given |
| + | socket and a private pointer of the application. This is designed for |
| + | curl_multi_socket_action(3) uses. |
| + | |
| + | When set, the *sockptr* pointer is passed to all future socket callbacks |
| + | for the specific *sockfd* socket. |
| + | |
| + | If the given *sockfd* is not already in use by libcurl, this function |
| + | returns an error. |
| + | |
| + | libcurl only keeps one single pointer associated with a socket, so calling |
| + | this function several times for the same socket makes the last set pointer get |
| + | used. |
| + | |
| + | The idea here being that this association (socket to private pointer) is |
| + | something that just about every application that uses this API needs and then |
| + | libcurl can just as well do it since it already has the necessary |
| + | functionality. |
| + | |
| + | It is acceptable to call this function from your multi callback functions. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLM *multi = curl_multi_init(); |
| + | void *ourstructp; /* pointer to our data */ |
| + | curl_socket_t fd; /* file descriptor to associate our data with */ |
| + | |
| + | /* make our struct pointer associated with socket fd */ |
| + | CURLMcode mc = curl_multi_assign(multi, fd, ourstructp); |
| + | if(mc) |
| + | printf("error: %s\n", curl_multi_strerror(mc)); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.15.5 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | The standard CURLMcode for multi interface error codes. |
| + | |
| + | # TYPICAL USAGE |
| + | |
| + | In a typical application you allocate a struct or at least use some kind of |
| + | semi-dynamic data for each socket that we must wait for action on when using |
| + | the curl_multi_socket_action(3) approach. |
| + | |
| + | When our socket-callback gets called by libcurl and we get to know about yet |
| + | another socket to wait for, we can use curl_multi_assign(3) to point out |
| + | the particular data so that when we get updates about this same socket again, |
| + | we do not have to find the struct associated with this socket by ourselves. |
| @@ -1,70 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_multi_cleanup 3 "1 March 2002" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_multi_cleanup - close down a multi session |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_cleanup(CURLM *multi_handle); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Cleans up and removes a whole multi stack. It does not free or touch any |
| - | individual easy handles in any way - they still need to be closed |
| - | individually, using the usual \fIcurl_easy_cleanup(3)\fP way. The order of |
| - | cleaning up should be: |
| - | |
| - | 1 - \fIcurl_multi_remove_handle(3)\fP before any easy handles are cleaned up |
| - | |
| - | 2 - \fIcurl_easy_cleanup(3)\fP can now be called independently since the easy |
| - | handle is no longer connected to the multi handle |
| - | |
| - | 3 - \fIcurl_multi_cleanup(3)\fP should be called when all easy handles are |
| - | removed |
| - | |
| - | Passing in a NULL pointer in \fImulti_handle\fP makes this function return |
| - | CURLM_BAD_HANDLE immediately with no other action. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLM *multi = curl_multi_init(); |
| - | |
| - | /* when the multi transfer is done ... */ |
| - | |
| - | /* remove all easy handles, then: */ |
| - | curl_multi_cleanup(multi); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.9.6 |
| - | .SH RETURN VALUE |
| - | CURLMcode type, general libcurl multi interface error code. On success, |
| - | CURLM_OK is returned. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_cleanup (3), |
| - | .BR curl_multi_get_handles (3), |
| - | .BR curl_easy_init (3), |
| - | .BR curl_multi_init (3) |
| @@ -0,0 +1,65 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_multi_cleanup |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_cleanup (3) |
| + | - curl_easy_init (3) |
| + | - curl_multi_get_handles (3) |
| + | - curl_multi_init (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_multi_cleanup - close down a multi session |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_cleanup(CURLM *multi_handle); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Cleans up and removes a whole multi stack. It does not free or touch any |
| + | individual easy handles in any way - they still need to be closed |
| + | individually, using the usual curl_easy_cleanup(3) way. The order of |
| + | cleaning up should be: |
| + | |
| + | 1 - curl_multi_remove_handle(3) before any easy handles are cleaned up |
| + | |
| + | 2 - curl_easy_cleanup(3) can now be called independently since the easy |
| + | handle is no longer connected to the multi handle |
| + | |
| + | 3 - curl_multi_cleanup(3) should be called when all easy handles are |
| + | removed |
| + | |
| + | Passing in a NULL pointer in *multi_handle* makes this function return |
| + | CURLM_BAD_HANDLE immediately with no other action. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLM *multi = curl_multi_init(); |
| + | |
| + | /* when the multi transfer is done ... */ |
| + | |
| + | /* remove all easy handles, then: */ |
| + | curl_multi_cleanup(multi); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.9.6 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLMcode type, general libcurl multi interface error code. On success, |
| + | CURLM_OK is returned. |
| @@ -1,124 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_multi_fdset 3 "2 Jan 2006" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_multi_fdset - extracts file descriptor information from a multi handle |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_fdset(CURLM *multi_handle, |
| - | fd_set *read_fd_set, |
| - | fd_set *write_fd_set, |
| - | fd_set *exc_fd_set, |
| - | int *max_fd); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function extracts file descriptor information from a given multi_handle. |
| - | libcurl returns its \fIfd_set\fP sets. The application can use these to |
| - | select() on, but be sure to \fIFD_ZERO\fP them before calling this function as |
| - | \fIcurl_multi_fdset(3)\fP only adds its own descriptors, it does not zero or |
| - | otherwise remove any others. The \fIcurl_multi_perform(3)\fP function should |
| - | be called as soon as one of them is ready to be read from or written to. |
| - | |
| - | The \fIread_fd_set\fP argument should point to an object of type \fBfd_set\fP |
| - | that on returns specifies the file descriptors to be checked for being ready |
| - | to read. |
| - | |
| - | The \fIwrite_fd_set\fP argument should point to an object of type \fBfd_set\fP |
| - | that on return specifies the file descriptors to be checked for being ready to |
| - | write. |
| - | |
| - | The \fIexc_fd_set\fP argument should point to an object of type \fBfd_set\fP |
| - | that on return specifies the file descriptors to be checked for error |
| - | conditions. |
| - | |
| - | If no file descriptors are set by libcurl, \fImax_fd\fP contain -1 when this |
| - | function returns. Otherwise it contains the highest descriptor number libcurl |
| - | set. When libcurl returns -1 in \fImax_fd\fP, it is because libcurl currently |
| - | does something that is not possible for your application to monitor with a |
| - | socket and unfortunately you can then not know exactly when the current action |
| - | is completed using select(). You then need to wait a while before you proceed |
| - | and call \fIcurl_multi_perform(3)\fP anyway. How long to wait? Unless |
| - | \fIcurl_multi_timeout(3)\fP gives you a lower number, we suggest 100 |
| - | milliseconds or so, but you may want to test it out in your own particular |
| - | conditions to find a suitable value. |
| - | |
| - | When doing select(), you should use \fIcurl_multi_timeout(3)\fP to figure out |
| - | how long to wait for action. Call \fIcurl_multi_perform(3)\fP even if no |
| - | activity has been seen on the \fBfd_sets\fP after the timeout expires as |
| - | otherwise internal retries and timeouts may not work as you would think and |
| - | want. |
| - | |
| - | If one of the sockets used by libcurl happens to be larger than what can be |
| - | set in an \fBfd_set\fP, which on POSIX systems means that the file descriptor |
| - | is larger than \fBFD_SETSIZE\fP, then libcurl tries to not set it. Setting a |
| - | too large file descriptor in an \fBfd_set\fP implies an out of bounds write |
| - | which can cause crashes, or worse. The effect of NOT storing it might possibly |
| - | save you from the crash, but makes your program NOT wait for sockets it should |
| - | wait for... |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | fd_set fdread; |
| - | fd_set fdwrite; |
| - | fd_set fdexcep; |
| - | int maxfd; |
| - | int rc; |
| - | CURLMcode mc; |
| - | struct timeval timeout = {1, 0}; |
| - | |
| - | CURLM *multi = curl_multi_init(); |
| - | |
| - | do { |
| - | |
| - | /* call curl_multi_perform() */ |
| - | |
| - | /* get file descriptors from the transfers */ |
| - | mc = curl_multi_fdset(multi, &fdread, &fdwrite, &fdexcep, &maxfd); |
| - | |
| - | if(mc != CURLM_OK) { |
| - | fprintf(stderr, "curl_multi_fdset() failed, code %d.\\n", mc); |
| - | break; |
| - | } |
| - | |
| - | /* wait for activity on one of the sockets */ |
| - | rc = select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout); |
| - | |
| - | } while(!mc); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.9.6 |
| - | .SH RETURN VALUE |
| - | \fBCURLMcode\fP type, general libcurl multi interface error code. See |
| - | \fIlibcurl-errors(3)\fP |
| - | .SH "SEE ALSO" |
| - | .BR curl_multi_cleanup (3), |
| - | .BR curl_multi_init (3), |
| - | .BR curl_multi_perform (3), |
| - | .BR curl_multi_timeout (3), |
| - | .BR curl_multi_wait (3), |
| - | .BR select (2) |
| @@ -0,0 +1,119 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_multi_fdset |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_multi_cleanup (3) |
| + | - curl_multi_init (3) |
| + | - curl_multi_perform (3) |
| + | - curl_multi_timeout (3) |
| + | - curl_multi_wait (3) |
| + | - select (2) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_multi_fdset - extracts file descriptor information from a multi handle |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_fdset(CURLM *multi_handle, |
| + | fd_set *read_fd_set, |
| + | fd_set *write_fd_set, |
| + | fd_set *exc_fd_set, |
| + | int *max_fd); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function extracts file descriptor information from a given multi_handle. |
| + | libcurl returns its *fd_set* sets. The application can use these to |
| + | select() on, but be sure to *FD_ZERO* them before calling this function as |
| + | curl_multi_fdset(3) only adds its own descriptors, it does not zero or |
| + | otherwise remove any others. The curl_multi_perform(3) function should |
| + | be called as soon as one of them is ready to be read from or written to. |
| + | |
| + | The *read_fd_set* argument should point to an object of type **fd_set** |
| + | that on returns specifies the file descriptors to be checked for being ready |
| + | to read. |
| + | |
| + | The *write_fd_set* argument should point to an object of type **fd_set** |
| + | that on return specifies the file descriptors to be checked for being ready to |
| + | write. |
| + | |
| + | The *exc_fd_set* argument should point to an object of type **fd_set** |
| + | that on return specifies the file descriptors to be checked for error |
| + | conditions. |
| + | |
| + | If no file descriptors are set by libcurl, *max_fd* contain -1 when this |
| + | function returns. Otherwise it contains the highest descriptor number libcurl |
| + | set. When libcurl returns -1 in *max_fd*, it is because libcurl currently |
| + | does something that is not possible for your application to monitor with a |
| + | socket and unfortunately you can then not know exactly when the current action |
| + | is completed using select(). You then need to wait a while before you proceed |
| + | and call curl_multi_perform(3) anyway. How long to wait? Unless |
| + | curl_multi_timeout(3) gives you a lower number, we suggest 100 |
| + | milliseconds or so, but you may want to test it out in your own particular |
| + | conditions to find a suitable value. |
| + | |
| + | When doing select(), you should use curl_multi_timeout(3) to figure out |
| + | how long to wait for action. Call curl_multi_perform(3) even if no |
| + | activity has been seen on the **fd_sets** after the timeout expires as |
| + | otherwise internal retries and timeouts may not work as you would think and |
| + | want. |
| + | |
| + | If one of the sockets used by libcurl happens to be larger than what can be |
| + | set in an **fd_set**, which on POSIX systems means that the file descriptor |
| + | is larger than **FD_SETSIZE**, then libcurl tries to not set it. Setting a |
| + | too large file descriptor in an **fd_set** implies an out of bounds write |
| + | which can cause crashes, or worse. The effect of NOT storing it might possibly |
| + | save you from the crash, but makes your program NOT wait for sockets it should |
| + | wait for... |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | fd_set fdread; |
| + | fd_set fdwrite; |
| + | fd_set fdexcep; |
| + | int maxfd; |
| + | int rc; |
| + | CURLMcode mc; |
| + | struct timeval timeout = {1, 0}; |
| + | |
| + | CURLM *multi = curl_multi_init(); |
| + | |
| + | do { |
| + | |
| + | /* call curl_multi_perform() */ |
| + | |
| + | /* get file descriptors from the transfers */ |
| + | mc = curl_multi_fdset(multi, &fdread, &fdwrite, &fdexcep, &maxfd); |
| + | |
| + | if(mc != CURLM_OK) { |
| + | fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc); |
| + | break; |
| + | } |
| + | |
| + | /* wait for activity on one of the sockets */ |
| + | rc = select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout); |
| + | |
| + | } while(!mc); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.9.6 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | **CURLMcode** type, general libcurl multi interface error code. See |
| + | libcurl-errors(3) |
| @@ -1,82 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_multi_get_handles 3 "28 August 2023" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_multi_get_handles - returns all added easy handles |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURL **curl_multi_get_handles(CURLM *multi_handle); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Returns an array with pointers to all added easy handles. The end of the list |
| - | is marked with a NULL pointer. |
| - | |
| - | Even if there is not a single easy handle added, this still returns an array |
| - | but with only a single NULL pointer entry. |
| - | |
| - | The returned array contains all the handles that are present at the time of |
| - | the call. As soon as a handle has been removed from or a handle has been added |
| - | to the multi handle after the handle array was returned, the two data points |
| - | are out of sync. |
| - | |
| - | The order of the easy handles within the array is not guaranteed. |
| - | |
| - | The returned array must be freed with a call to \fIcurl_free(3)\fP after use. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | /* init a multi stack */ |
| - | CURLM *multi = curl_multi_init(); |
| - | CURL *curl = curl_easy_init(); |
| - | |
| - | if(curl) { |
| - | /* add the transfer */ |
| - | curl_multi_add_handle(multi, curl); |
| - | |
| - | /* extract all added handles */ |
| - | CURL **list = curl_multi_get_handles(multi); |
| - | |
| - | if(list) { |
| - | int i; |
| - | /* remove all added handles */ |
| - | for(i = 0; list[i]; i++) { |
| - | curl_multi_remove_handle(multi, list[i]); |
| - | } |
| - | curl_free(list); |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 8.4.0 |
| - | .SH RETURN VALUE |
| - | Returns NULL on failure. Otherwise it returns a pointer to an allocated array. |
| - | .SH "SEE ALSO" |
| - | .BR curl_multi_add_handle (3), |
| - | .BR curl_multi_cleanup (3), |
| - | .BR curl_multi_init (3), |
| - | .BR curl_multi_remove_handle (3) |
| @@ -0,0 +1,77 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_multi_get_handles |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_multi_add_handle (3) |
| + | - curl_multi_cleanup (3) |
| + | - curl_multi_init (3) |
| + | - curl_multi_remove_handle (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_multi_get_handles - returns all added easy handles |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURL **curl_multi_get_handles(CURLM *multi_handle); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Returns an array with pointers to all added easy handles. The end of the list |
| + | is marked with a NULL pointer. |
| + | |
| + | Even if there is not a single easy handle added, this still returns an array |
| + | but with only a single NULL pointer entry. |
| + | |
| + | The returned array contains all the handles that are present at the time of |
| + | the call. As soon as a handle has been removed from or a handle has been added |
| + | to the multi handle after the handle array was returned, the two data points |
| + | are out of sync. |
| + | |
| + | The order of the easy handles within the array is not guaranteed. |
| + | |
| + | The returned array must be freed with a call to curl_free(3) after use. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | /* init a multi stack */ |
| + | CURLM *multi = curl_multi_init(); |
| + | CURL *curl = curl_easy_init(); |
| + | |
| + | if(curl) { |
| + | /* add the transfer */ |
| + | curl_multi_add_handle(multi, curl); |
| + | |
| + | /* extract all added handles */ |
| + | CURL **list = curl_multi_get_handles(multi); |
| + | |
| + | if(list) { |
| + | int i; |
| + | /* remove all added handles */ |
| + | for(i = 0; list[i]; i++) { |
| + | curl_multi_remove_handle(multi, list[i]); |
| + | } |
| + | curl_free(list); |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 8.4.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns NULL on failure. Otherwise it returns a pointer to an allocated array. |
| @@ -1,36 +1,29 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_multi_info_read 3 "18 Dec 2004" "libcurl" "libcurl" |
| - | .SH NAME |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_multi_info_read |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_multi_cleanup (3) |
| + | - curl_multi_init (3) |
| + | - curl_multi_perform (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| curl_multi_info_read - read multi stack information | |
| - | .SH SYNOPSIS |
| - | .nf |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| CURLMsg *curl_multi_info_read(CURLM *multi_handle, int *msgs_in_queue); | |
| - | .fi |
| - | .SH DESCRIPTION |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| Ask the multi handle if there are any messages from the individual | |
| transfers. Messages may include information such as an error code from the | |
| transfer or just the fact that a transfer is completed. More details on these | |
| @@ -38,7 +31,7 @@ should be written down as well. | |
| Repeated calls to this function returns a new struct each time, until a NULL | |
| is returned as a signal that there is no more to get at this point. The | |
| - | integer pointed to with \fImsgs_in_queue\fP contains the number of remaining |
| + | integer pointed to with *msgs_in_queue* contains the number of remaining |
| messages after this function was called. | |
| When you fetch a message using this function, it is removed from the internal | |
| @@ -46,16 +39,16 @@ queue so calling this function again does not return the same message | |
| again. It instead returns new messages at each new invoke until the queue is | |
| emptied. | |
| - | \fBWARNING:\fP The data the returned pointer points to does not survive |
| - | calling \fIcurl_multi_cleanup(3)\fP, \fIcurl_multi_remove_handle(3)\fP or |
| - | \fIcurl_easy_cleanup(3)\fP. |
| + | **WARNING:** The data the returned pointer points to does not survive |
| + | calling curl_multi_cleanup(3), curl_multi_remove_handle(3) or |
| + | curl_easy_cleanup(3). |
| - | The \fICURLMsg\fP struct is simple and only contains basic information. If |
| + | The *CURLMsg* struct is simple and only contains basic information. If |
| more involved information is wanted, the particular "easy handle" is present | |
| in that struct and can be used in subsequent regular | |
| - | \fIcurl_easy_getinfo(3)\fP calls (or similar): |
| + | curl_easy_getinfo(3) calls (or similar): |
| - | .nf |
| + | ~~~c |
| struct CURLMsg { | |
| CURLMSG msg; /* what this message means */ | |
| CURL *easy_handle; /* the handle it concerns */ | |
| @@ -64,14 +57,16 @@ in that struct and can be used in subsequent regular | |
| CURLcode result; /* return code for transfer */ | |
| } data; | |
| }; | |
| - | .fi |
| - | When \fBmsg\fP is \fICURLMSG_DONE\fP, the message identifies a transfer that |
| - | is done, and then \fBresult\fP contains the return code for the easy handle |
| + | ~~~ |
| + | When **msg** is *CURLMSG_DONE*, the message identifies a transfer that |
| + | is done, and then **result** contains the return code for the easy handle |
| that just completed. | |
| - | At this point, there are no other \fBmsg\fP types defined. |
| - | .SH EXAMPLE |
| - | .nf |
| + | At this point, there are no other **msg** types defined. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| int main(void) | |
| { | |
| CURLM *multi = curl_multi_init(); | |
| @@ -94,14 +89,14 @@ int main(void) | |
| } while(m); | |
| } | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| Added in 7.9.6 | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| A pointer to a filled-in struct, or NULL if it failed or ran out of | |
| structs. It also writes the number of messages left in the queue (after this | |
| read) in the integer the second argument points to. | |
| - | .SH "SEE ALSO" |
| - | .BR curl_multi_cleanup (3), |
| - | .BR curl_multi_init (3), |
| - | .BR curl_multi_perform (3) |
| @@ -1,62 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_multi_init 3 "1 March 2002" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_multi_init - create a multi handle |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLM *curl_multi_init(); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function returns a pointer to a \fICURLM\fP handle to be used as input to |
| - | all the other multi-functions, sometimes referred to as a multi handle in some |
| - | places in the documentation. This init call MUST have a corresponding call to |
| - | \fIcurl_multi_cleanup(3)\fP when the operation is complete. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | /* init a multi stack */ |
| - | CURLM *multi = curl_multi_init(); |
| - | CURL *curl = curl_easy_init(); |
| - | CURL *curl2 = curl_easy_init(); |
| - | |
| - | /* add individual transfers */ |
| - | curl_multi_add_handle(multi, curl); |
| - | curl_multi_add_handle(multi, curl2); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.9.6 |
| - | .SH RETURN VALUE |
| - | If this function returns NULL, something went wrong and you cannot use the |
| - | other curl functions. |
| - | .SH "SEE ALSO" |
| - | .BR curl_multi_cleanup (3), |
| - | .BR curl_multi_add_handle (3), |
| - | .BR curl_multi_get_handles (3), |
| - | .BR curl_global_init (3), |
| - | .BR curl_easy_init (3) |
| @@ -0,0 +1,57 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_multi_init |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_init (3) |
| + | - curl_global_init (3) |
| + | - curl_multi_add_handle (3) |
| + | - curl_multi_cleanup (3) |
| + | - curl_multi_get_handles (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_multi_init - create a multi handle |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLM *curl_multi_init(); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function returns a pointer to a *CURLM* handle to be used as input to |
| + | all the other multi-functions, sometimes referred to as a multi handle in some |
| + | places in the documentation. This init call MUST have a corresponding call to |
| + | curl_multi_cleanup(3) when the operation is complete. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | /* init a multi stack */ |
| + | CURLM *multi = curl_multi_init(); |
| + | CURL *curl = curl_easy_init(); |
| + | CURL *curl2 = curl_easy_init(); |
| + | |
| + | /* add individual transfers */ |
| + | curl_multi_add_handle(multi, curl); |
| + | curl_multi_add_handle(multi, curl2); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.9.6 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | If this function returns NULL, something went wrong and you cannot use the |
| + | other curl functions. |
| @@ -1,110 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_multi_perform 3 "1 March 2002" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_multi_perform - reads/writes available data from easy handles |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function performs transfers on all the added handles that need attention |
| - | in a non-blocking fashion. The easy handles have previously been added to the |
| - | multi handle with \fIcurl_multi_add_handle(3)\fP. |
| - | |
| - | When an application has found out there is data available for the multi_handle |
| - | or a timeout has elapsed, the application should call this function to |
| - | read/write whatever there is to read or write right now etc. |
| - | \fIcurl_multi_perform(3)\fP returns as soon as the reads/writes are done. This |
| - | function does not require that there actually is any data available for |
| - | reading or that data can be written, it can be called just in case. It stores |
| - | the number of handles that still transfer data in the second argument's |
| - | integer-pointer. |
| - | |
| - | If the amount of \fIrunning_handles\fP is changed from the previous call (or |
| - | is less than the amount of easy handles you have added to the multi handle), |
| - | you know that there is one or more transfers less "running". You can then call |
| - | \fIcurl_multi_info_read(3)\fP to get information about each individual |
| - | completed transfer, and that returned info includes CURLcode and more. If an |
| - | added handle fails quickly, it may never be counted as a running_handle. You |
| - | could use \fIcurl_multi_info_read(3)\fP to track actual status of the added |
| - | handles in that case. |
| - | |
| - | When \fIrunning_handles\fP is set to zero (0) on the return of this function, |
| - | there is no longer any transfers in progress. |
| - | |
| - | When this function returns error, the state of all transfers are uncertain and |
| - | they cannot be continued. \fIcurl_multi_perform(3)\fP should not be called |
| - | again on the same multi handle after an error has been returned, unless first |
| - | removing all the handles and adding new ones. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | int still_running; |
| - | CURL *multi = curl_multi_init(); |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | curl_multi_add_handle(multi, curl); |
| - | do { |
| - | CURLMcode mc = curl_multi_perform(multi, &still_running); |
| - | |
| - | if(!mc && still_running) |
| - | /* wait for activity, timeout or "nothing" */ |
| - | mc = curl_multi_poll(multi, NULL, 0, 1000, NULL); |
| - | |
| - | if(mc) { |
| - | fprintf(stderr, "curl_multi_poll() failed, code %d.\\n", (int)mc); |
| - | break; |
| - | } |
| - | |
| - | /* if there are still transfers, loop! */ |
| - | } while(still_running); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.9.6 |
| - | .SH RETURN VALUE |
| - | CURLMcode type, general libcurl multi interface error code. |
| - | |
| - | This function returns errors regarding the whole multi stack. Problems on |
| - | individual transfers may have occurred even when this function returns |
| - | \fICURLM_OK\fP. Use \fIcurl_multi_info_read(3)\fP to figure out how individual |
| - | transfers did. |
| - | .SH "TYPICAL USAGE" |
| - | Most applications use \fIcurl_multi_poll(3)\fP to make libcurl wait for |
| - | activity on any of the ongoing transfers. As soon as one or more file |
| - | descriptor has activity or the function times out, the application calls |
| - | \fIcurl_multi_perform(3)\fP. |
| - | .SH "SEE ALSO" |
| - | .BR curl_multi_add_handle (3), |
| - | .BR curl_multi_cleanup (3), |
| - | .BR curl_multi_fdset (3), |
| - | .BR curl_multi_info_read (3), |
| - | .BR curl_multi_init (3), |
| - | .BR curl_multi_wait (3), |
| - | .BR libcurl-errors (3) |
| @@ -0,0 +1,107 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_multi_perform |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_multi_add_handle (3) |
| + | - curl_multi_cleanup (3) |
| + | - curl_multi_fdset (3) |
| + | - curl_multi_info_read (3) |
| + | - curl_multi_init (3) |
| + | - curl_multi_wait (3) |
| + | - libcurl-errors (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_multi_perform - reads/writes available data from easy handles |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function performs transfers on all the added handles that need attention |
| + | in a non-blocking fashion. The easy handles have previously been added to the |
| + | multi handle with curl_multi_add_handle(3). |
| + | |
| + | When an application has found out there is data available for the multi_handle |
| + | or a timeout has elapsed, the application should call this function to |
| + | read/write whatever there is to read or write right now etc. |
| + | curl_multi_perform(3) returns as soon as the reads/writes are done. This |
| + | function does not require that there actually is any data available for |
| + | reading or that data can be written, it can be called just in case. It stores |
| + | the number of handles that still transfer data in the second argument's |
| + | integer-pointer. |
| + | |
| + | If the amount of *running_handles* is changed from the previous call (or |
| + | is less than the amount of easy handles you have added to the multi handle), |
| + | you know that there is one or more transfers less "running". You can then call |
| + | curl_multi_info_read(3) to get information about each individual |
| + | completed transfer, and that returned info includes CURLcode and more. If an |
| + | added handle fails quickly, it may never be counted as a running_handle. You |
| + | could use curl_multi_info_read(3) to track actual status of the added |
| + | handles in that case. |
| + | |
| + | When *running_handles* is set to zero (0) on the return of this function, |
| + | there is no longer any transfers in progress. |
| + | |
| + | When this function returns error, the state of all transfers are uncertain and |
| + | they cannot be continued. curl_multi_perform(3) should not be called |
| + | again on the same multi handle after an error has been returned, unless first |
| + | removing all the handles and adding new ones. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | int still_running; |
| + | CURL *multi = curl_multi_init(); |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | curl_multi_add_handle(multi, curl); |
| + | do { |
| + | CURLMcode mc = curl_multi_perform(multi, &still_running); |
| + | |
| + | if(!mc && still_running) |
| + | /* wait for activity, timeout or "nothing" */ |
| + | mc = curl_multi_poll(multi, NULL, 0, 1000, NULL); |
| + | |
| + | if(mc) { |
| + | fprintf(stderr, "curl_multi_poll() failed, code %d.\n", (int)mc); |
| + | break; |
| + | } |
| + | |
| + | /* if there are still transfers, loop! */ |
| + | } while(still_running); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.9.6 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLMcode type, general libcurl multi interface error code. |
| + | |
| + | This function returns errors regarding the whole multi stack. Problems on |
| + | individual transfers may have occurred even when this function returns |
| + | *CURLM_OK*. Use curl_multi_info_read(3) to figure out how individual |
| + | transfers did. |
| + | |
| + | # TYPICAL USAGE |
| + | |
| + | Most applications use curl_multi_poll(3) to make libcurl wait for |
| + | activity on any of the ongoing transfers. As soon as one or more file |
| + | descriptor has activity or the function times out, the application calls |
| + | curl_multi_perform(3). |
| @@ -1,31 +1,23 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_multi_poll 3 "29 Jul 2019" "libcurl" "libcurl" |
| - | .SH NAME |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_multi_poll |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_multi_fdset (3) |
| + | - curl_multi_perform (3) |
| + | - curl_multi_wait (3) |
| + | - curl_multi_wakeup (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| curl_multi_poll - polls on all easy handles in a multi handle | |
| - | .SH SYNOPSIS |
| - | .nf |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| CURLMcode curl_multi_poll(CURLM *multi_handle, | |
| @@ -33,56 +25,68 @@ CURLMcode curl_multi_poll(CURLM *multi_handle, | |
| unsigned int extra_nfds, | |
| int timeout_ms, | |
| int *numfds); | |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_multi_poll(3)\fP polls all file descriptors used by the curl easy |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_multi_poll(3) polls all file descriptors used by the curl easy |
| handles contained in the given multi handle set. It blocks until activity is | |
| - | detected on at least one of the handles or \fItimeout_ms\fP has passed. |
| + | detected on at least one of the handles or *timeout_ms* has passed. |
| Alternatively, if the multi handle has a pending internal timeout that has a | |
| - | shorter expiry time than \fItimeout_ms\fP, that shorter time is used instead |
| + | shorter expiry time than *timeout_ms*, that shorter time is used instead |
| to make sure timeout accuracy is reasonably kept. | |
| The calling application may pass additional curl_waitfd structures which are | |
| - | similar to \fIpoll(2)\fP's \fIpollfd\fP structure to be waited on in the same |
| + | similar to *poll(2)*'s *pollfd* structure to be waited on in the same |
| call. | |
| - | On completion, if \fInumfds\fP is non-NULL, it gets populated with the total |
| + | On completion, if *numfds* is non-NULL, it gets populated with the total |
| number of file descriptors on which interesting events occurred. This number | |
| can include both libcurl internal descriptors as well as descriptors provided | |
| - | in \fIextra_fds\fP. |
| + | in *extra_fds*. |
| - | The \fIcurl_multi_wakeup(3)\fP function can be used from another thread to |
| + | The curl_multi_wakeup(3) function can be used from another thread to |
| wake up this function and return faster. This is one of the details | |
| - | that makes this function different than \fIcurl_multi_wait(3)\fP which cannot |
| + | that makes this function different than curl_multi_wait(3) which cannot |
| be woken up this way. | |
| If no extra file descriptors are provided and libcurl has no file descriptor | |
| - | to offer to wait for, this function instead waits during \fItimeout_ms\fP |
| + | to offer to wait for, this function instead waits during *timeout_ms* |
| milliseconds (or shorter if an internal timer indicates so). This is the other | |
| - | detail that makes this function different than \fIcurl_multi_wait(3)\fP. |
| + | detail that makes this function different than curl_multi_wait(3). |
| This function is encouraged to be used instead of select(3) when using the | |
| multi interface to allow applications to easier circumvent the common problem | |
| with 1024 maximum file descriptors. | |
| - | .SH curl_waitfd |
| - | .nf |
| + | |
| + | # curl_waitfd |
| + | |
| + | ~~~c |
| struct curl_waitfd { | |
| curl_socket_t fd; | |
| short events; | |
| short revents; | |
| }; | |
| - | .fi |
| - | .IP CURL_WAIT_POLLIN |
| + | ~~~ |
| + | |
| + | ## CURL_WAIT_POLLIN |
| + | |
| Bit flag to curl_waitfd.events indicating the socket should poll on read | |
| events such as new data received. | |
| - | .IP CURL_WAIT_POLLPRI |
| + | |
| + | ## CURL_WAIT_POLLPRI |
| + | |
| Bit flag to curl_waitfd.events indicating the socket should poll on high | |
| priority read events such as out of band data. | |
| - | .IP CURL_WAIT_POLLOUT |
| + | |
| + | ## CURL_WAIT_POLLOUT |
| + | |
| Bit flag to curl_waitfd.events indicating the socket should poll on write | |
| events such as the socket being clear to write without blocking. | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| int main(void) | |
| { | |
| CURL *easy_handle; | |
| @@ -104,7 +108,7 @@ int main(void) | |
| } | |
| if(mc != CURLM_OK) { | |
| - | fprintf(stderr, "curl_multi failed, code %d.\\n", mc); |
| + | fprintf(stderr, "curl_multi failed, code %d.\n", mc); |
| break; | |
| } | |
| @@ -112,14 +116,13 @@ int main(void) | |
| curl_multi_remove_handle(multi_handle, easy_handle); | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| Added in 7.66.0. | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| CURLMcode type, general libcurl multi interface error code. See | |
| - | \fIlibcurl-errors(3)\fP |
| - | .SH "SEE ALSO" |
| - | .BR curl_multi_fdset (3), |
| - | .BR curl_multi_perform (3), |
| - | .BR curl_multi_wait (3), |
| - | .BR curl_multi_wakeup (3) |
| + | libcurl-errors(3) |
| @@ -1,78 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_multi_remove_handle 3 "6 March 2002" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_multi_remove_handle - remove an easy handle from a multi session |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *easy_handle); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Removes a given \fIeasy_handle\fP from the \fImulti_handle\fP. This makes the |
| - | specified easy handle be removed from this multi handle's control. |
| - | |
| - | When the easy handle has been removed from a multi stack, it is again |
| - | perfectly legal to invoke \fIcurl_easy_perform(3)\fP on this easy handle. |
| - | |
| - | Removing an easy handle while being in use is perfectly legal and effectively |
| - | halts the transfer in progress involving that easy handle. All other easy |
| - | handles and transfers remain unaffected. |
| - | |
| - | It is fine to remove a handle at any time during a transfer, just not from |
| - | within any libcurl callback function. |
| - | |
| - | Removing an easy handle from the multi handle before the corresponding |
| - | transfer is complete might cause libcurl to close the connection - if the |
| - | state of it and the internal protocol handler deem it necessary. Otherwise |
| - | libcurl keeps the connection alive in the connection pool associated with the |
| - | multi handle, ready to get reused for a future transfer using this multi |
| - | handle. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLM *multi = curl_multi_init(); |
| - | int queued = 0; |
| - | |
| - | /* when an easy handle has completed, remove it */ |
| - | CURLMsg *msg = curl_multi_info_read(multi, &queued); |
| - | if(msg) { |
| - | if(msg->msg == CURLMSG_DONE) { |
| - | /* a transfer ended */ |
| - | fprintf(stderr, "Transfer completed\\n"); |
| - | curl_multi_remove_handle(multi, msg->easy_handle); |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.9.6 |
| - | .SH RETURN VALUE |
| - | CURLMcode type, general libcurl multi interface error code. |
| - | .SH "SEE ALSO" |
| - | .BR curl_multi_add_handle (3), |
| - | .BR curl_multi_cleanup (3), |
| - | .BR curl_multi_init (3) |
| @@ -0,0 +1,73 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_multi_remove_handle |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_multi_add_handle (3) |
| + | - curl_multi_cleanup (3) |
| + | - curl_multi_init (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_multi_remove_handle - remove an easy handle from a multi session |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *easy_handle); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Removes a given *easy_handle* from the *multi_handle*. This makes the |
| + | specified easy handle be removed from this multi handle's control. |
| + | |
| + | When the easy handle has been removed from a multi stack, it is again |
| + | perfectly legal to invoke curl_easy_perform(3) on this easy handle. |
| + | |
| + | Removing an easy handle while being in use is perfectly legal and effectively |
| + | halts the transfer in progress involving that easy handle. All other easy |
| + | handles and transfers remain unaffected. |
| + | |
| + | It is fine to remove a handle at any time during a transfer, just not from |
| + | within any libcurl callback function. |
| + | |
| + | Removing an easy handle from the multi handle before the corresponding |
| + | transfer is complete might cause libcurl to close the connection - if the |
| + | state of it and the internal protocol handler deem it necessary. Otherwise |
| + | libcurl keeps the connection alive in the connection pool associated with the |
| + | multi handle, ready to get reused for a future transfer using this multi |
| + | handle. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLM *multi = curl_multi_init(); |
| + | int queued = 0; |
| + | |
| + | /* when an easy handle has completed, remove it */ |
| + | CURLMsg *msg = curl_multi_info_read(multi, &queued); |
| + | if(msg) { |
| + | if(msg->msg == CURLMSG_DONE) { |
| + | /* a transfer ended */ |
| + | fprintf(stderr, "Transfer completed\n"); |
| + | curl_multi_remove_handle(multi, msg->easy_handle); |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.9.6 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLMcode type, general libcurl multi interface error code. |
| @@ -1,98 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_multi_setopt 3 "4 Nov 2014" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_multi_setopt \- set options for a curl multi handle |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_setopt(CURLM *multi_handle, CURLMoption option, parameter); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_multi_setopt(3)\fP is used to tell a libcurl multi handle how to |
| - | behave. By using the appropriate options to \fIcurl_multi_setopt(3)\fP, you |
| - | can change libcurl's behavior when using that multi handle. All options are |
| - | set with the \fIoption\fP followed by the \fIparameter\fP. That parameter can |
| - | be a \fBlong\fP, a \fBfunction pointer\fP, an \fBobject pointer\fP or a |
| - | \fBcurl_off_t\fP type, depending on what the specific option expects. Read |
| - | this manual carefully as bad input values may cause libcurl to behave |
| - | badly. You can only set one option in each function call. |
| - | |
| - | .SH OPTIONS |
| - | .IP CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE |
| - | See \fICURLMOPT_CHUNK_LENGTH_PENALTY_SIZE(3)\fP |
| - | .IP CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE |
| - | See \fICURLMOPT_CONTENT_LENGTH_PENALTY_SIZE(3)\fP |
| - | .IP CURLMOPT_MAX_HOST_CONNECTIONS |
| - | See \fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP |
| - | .IP CURLMOPT_MAX_PIPELINE_LENGTH |
| - | See \fICURLMOPT_MAX_PIPELINE_LENGTH(3)\fP |
| - | .IP CURLMOPT_MAX_TOTAL_CONNECTIONS |
| - | See \fICURLMOPT_MAX_TOTAL_CONNECTIONS(3)\fP |
| - | .IP CURLMOPT_MAXCONNECTS |
| - | See \fICURLMOPT_MAXCONNECTS(3)\fP |
| - | .IP CURLMOPT_PIPELINING |
| - | See \fICURLMOPT_PIPELINING(3)\fP |
| - | .IP CURLMOPT_PIPELINING_SITE_BL |
| - | See \fICURLMOPT_PIPELINING_SITE_BL(3)\fP |
| - | .IP CURLMOPT_PIPELINING_SERVER_BL |
| - | See \fICURLMOPT_PIPELINING_SERVER_BL(3)\fP |
| - | .IP CURLMOPT_PUSHFUNCTION |
| - | See \fICURLMOPT_PUSHFUNCTION(3)\fP |
| - | .IP CURLMOPT_PUSHDATA |
| - | See \fICURLMOPT_PUSHDATA(3)\fP |
| - | .IP CURLMOPT_SOCKETFUNCTION |
| - | See \fICURLMOPT_SOCKETFUNCTION(3)\fP |
| - | .IP CURLMOPT_SOCKETDATA |
| - | See \fICURLMOPT_SOCKETDATA(3)\fP |
| - | .IP CURLMOPT_TIMERFUNCTION |
| - | See \fICURLMOPT_TIMERFUNCTION(3)\fP |
| - | .IP CURLMOPT_TIMERDATA |
| - | See \fICURLMOPT_TIMERDATA(3)\fP |
| - | .IP CURLMOPT_MAX_CONCURRENT_STREAMS |
| - | See \fICURLMOPT_MAX_CONCURRENT_STREAMS(3)\fP |
| - | .SH EXAMPLE |
| - | .nf |
| - | |
| - | #define MAX_PARALLEL 45 |
| - | |
| - | int main(void) |
| - | { |
| - | CURLM *multi; |
| - | /* Limit the amount of simultaneous connections curl should allow: */ |
| - | curl_multi_setopt(multi, CURLMOPT_MAXCONNECTS, (long)MAX_PARALLEL); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.15.4 |
| - | .SH RETURN VALUE |
| - | The standard CURLMcode for multi interface error codes. Note that it returns a |
| - | CURLM_UNKNOWN_OPTION if you try setting an option that this version of libcurl |
| - | does not know of. |
| - | .SH "SEE ALSO" |
| - | .BR curl_multi_cleanup (3), |
| - | .BR curl_multi_info_read (3), |
| - | .BR curl_multi_init (3), |
| - | .BR curl_multi_socket (3) |
| @@ -0,0 +1,125 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_multi_setopt |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_multi_cleanup (3) |
| + | - curl_multi_info_read (3) |
| + | - curl_multi_init (3) |
| + | - curl_multi_socket (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_multi_setopt - set options for a curl multi handle |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_setopt(CURLM *multi_handle, CURLMoption option, parameter); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_multi_setopt(3) is used to tell a libcurl multi handle how to |
| + | behave. By using the appropriate options to curl_multi_setopt(3), you |
| + | can change libcurl's behavior when using that multi handle. All options are |
| + | set with the *option* followed by the *parameter*. That parameter can |
| + | be a **long**, a **function pointer**, an **object pointer** or a |
| + | **curl_off_t** type, depending on what the specific option expects. Read |
| + | this manual carefully as bad input values may cause libcurl to behave |
| + | badly. You can only set one option in each function call. |
| + | |
| + | # OPTIONS |
| + | |
| + | ## CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE |
| + | |
| + | See CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE(3) |
| + | |
| + | ## CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE |
| + | |
| + | See CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE(3) |
| + | |
| + | ## CURLMOPT_MAX_HOST_CONNECTIONS |
| + | |
| + | See CURLMOPT_MAX_HOST_CONNECTIONS(3) |
| + | |
| + | ## CURLMOPT_MAX_PIPELINE_LENGTH |
| + | |
| + | See CURLMOPT_MAX_PIPELINE_LENGTH(3) |
| + | |
| + | ## CURLMOPT_MAX_TOTAL_CONNECTIONS |
| + | |
| + | See CURLMOPT_MAX_TOTAL_CONNECTIONS(3) |
| + | |
| + | ## CURLMOPT_MAXCONNECTS |
| + | |
| + | See CURLMOPT_MAXCONNECTS(3) |
| + | |
| + | ## CURLMOPT_PIPELINING |
| + | |
| + | See CURLMOPT_PIPELINING(3) |
| + | |
| + | ## CURLMOPT_PIPELINING_SITE_BL |
| + | |
| + | See CURLMOPT_PIPELINING_SITE_BL(3) |
| + | |
| + | ## CURLMOPT_PIPELINING_SERVER_BL |
| + | |
| + | See CURLMOPT_PIPELINING_SERVER_BL(3) |
| + | |
| + | ## CURLMOPT_PUSHFUNCTION |
| + | |
| + | See CURLMOPT_PUSHFUNCTION(3) |
| + | |
| + | ## CURLMOPT_PUSHDATA |
| + | |
| + | See CURLMOPT_PUSHDATA(3) |
| + | |
| + | ## CURLMOPT_SOCKETFUNCTION |
| + | |
| + | See CURLMOPT_SOCKETFUNCTION(3) |
| + | |
| + | ## CURLMOPT_SOCKETDATA |
| + | |
| + | See CURLMOPT_SOCKETDATA(3) |
| + | |
| + | ## CURLMOPT_TIMERFUNCTION |
| + | |
| + | See CURLMOPT_TIMERFUNCTION(3) |
| + | |
| + | ## CURLMOPT_TIMERDATA |
| + | |
| + | See CURLMOPT_TIMERDATA(3) |
| + | |
| + | ## CURLMOPT_MAX_CONCURRENT_STREAMS |
| + | |
| + | See CURLMOPT_MAX_CONCURRENT_STREAMS(3) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | |
| + | #define MAX_PARALLEL 45 |
| + | |
| + | int main(void) |
| + | { |
| + | CURLM *multi; |
| + | /* Limit the amount of simultaneous connections curl should allow: */ |
| + | curl_multi_setopt(multi, CURLMOPT_MAXCONNECTS, (long)MAX_PARALLEL); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.15.4 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | The standard CURLMcode for multi interface error codes. Note that it returns a |
| + | CURLM_UNKNOWN_OPTION if you try setting an option that this version of libcurl |
| + | does not know of. |
| @@ -1,100 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_multi_socket 3 "9 Jul 2006" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_multi_socket \- reads/writes available data |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t sockfd, |
| - | int *running_handles); |
| - | |
| - | CURLMcode curl_multi_socket_all(CURLM *multi_handle, |
| - | int *running_handles); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | These functions are deprecated. Do not use. See |
| - | \fIcurl_multi_socket_action(3)\fP instead. |
| - | |
| - | At return, the integer \fBrunning_handles\fP points to contains the number of |
| - | still running easy handles within the multi handle. When this number reaches |
| - | zero, all transfers are complete/done. Note that when you call |
| - | \fIcurl_multi_socket_action(3)\fP on a specific socket and the counter |
| - | decreases by one, it DOES NOT necessarily mean that this exact socket/transfer |
| - | is the one that completed. Use \fIcurl_multi_info_read(3)\fP to figure out |
| - | which easy handle that completed. |
| - | |
| - | The \fIcurl_multi_socket_action(3)\fP functions inform the application about |
| - | updates in the socket (file descriptor) status by doing none, one, or multiple |
| - | calls to the socket callback function set with the |
| - | \fICURLMOPT_SOCKETFUNCTION(3)\fP option to \fIcurl_multi_setopt(3)\fP. They |
| - | update the status with changes since the previous time the callback was |
| - | called. |
| - | |
| - | Get the timeout time by setting the \fICURLMOPT_TIMERFUNCTION(3)\fP option |
| - | with \fIcurl_multi_setopt(3)\fP. Your application then gets called with |
| - | information on how long to wait for socket actions at most before doing the |
| - | timeout action: call the \fIcurl_multi_socket_action(3)\fP function with the |
| - | \fBsockfd\fP argument set to CURL_SOCKET_TIMEOUT. You can also use the |
| - | \fIcurl_multi_timeout(3)\fP function to poll the value at any given time, but |
| - | for an event-based system using the callback is far better than relying on |
| - | polling the timeout value. |
| - | |
| - | Usage of \fIcurl_multi_socket(3)\fP is deprecated, whereas the function is |
| - | equivalent to \fIcurl_multi_socket_action(3)\fP with \fBev_bitmask\fP set to |
| - | 0. |
| - | |
| - | Force libcurl to (re-)check all its internal sockets and transfers instead of |
| - | just a single one by calling \fIcurl_multi_socket_all(3)\fP. Note that there |
| - | should not be any reason to use this function. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | /* the event-library gets told when there activity on the socket 'fd', |
| - | which we translate to a call to curl_multi_socket_action() */ |
| - | int running; |
| - | int rc; |
| - | int fd; |
| - | CURLM *multi; |
| - | rc = curl_multi_socket(multi, fd, &running); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This function was added in libcurl 7.15.4, and is deemed stable since |
| - | 7.16.0. |
| - | |
| - | \fIcurl_multi_socket(3)\fP is deprecated, use |
| - | \fIcurl_multi_socket_action(3)\fP instead! |
| - | .SH "RETURN VALUE" |
| - | CURLMcode type, general libcurl multi interface error code. |
| - | |
| - | The return code is for the whole multi stack. Problems still might have |
| - | occurred on individual transfers even when one of these functions return OK. |
| - | .SH "SEE ALSO" |
| - | .BR curl_multi_cleanup (3), |
| - | .BR curl_multi_init (3), |
| - | .BR curl_multi_fdset (3), |
| - | .BR curl_multi_info_read (3), |
| - | .BR the hiperfifo.c example |
| @@ -0,0 +1,95 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_multi_socket |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_multi_cleanup (3) |
| + | - curl_multi_fdset (3) |
| + | - curl_multi_info_read (3) |
| + | - curl_multi_init (3) |
| + | - the hiperfifo.c example |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_multi_socket - reads/writes available data |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t sockfd, |
| + | int *running_handles); |
| + | |
| + | CURLMcode curl_multi_socket_all(CURLM *multi_handle, |
| + | int *running_handles); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | These functions are deprecated. Do not use. See |
| + | curl_multi_socket_action(3) instead. |
| + | |
| + | At return, the integer **running_handles** points to contains the number of |
| + | still running easy handles within the multi handle. When this number reaches |
| + | zero, all transfers are complete/done. Note that when you call |
| + | curl_multi_socket_action(3) on a specific socket and the counter |
| + | decreases by one, it DOES NOT necessarily mean that this exact socket/transfer |
| + | is the one that completed. Use curl_multi_info_read(3) to figure out |
| + | which easy handle that completed. |
| + | |
| + | The curl_multi_socket_action(3) functions inform the application about |
| + | updates in the socket (file descriptor) status by doing none, one, or multiple |
| + | calls to the socket callback function set with the |
| + | CURLMOPT_SOCKETFUNCTION(3) option to curl_multi_setopt(3). They |
| + | update the status with changes since the previous time the callback was |
| + | called. |
| + | |
| + | Get the timeout time by setting the CURLMOPT_TIMERFUNCTION(3) option |
| + | with curl_multi_setopt(3). Your application then gets called with |
| + | information on how long to wait for socket actions at most before doing the |
| + | timeout action: call the curl_multi_socket_action(3) function with the |
| + | **sockfd** argument set to CURL_SOCKET_TIMEOUT. You can also use the |
| + | curl_multi_timeout(3) function to poll the value at any given time, but |
| + | for an event-based system using the callback is far better than relying on |
| + | polling the timeout value. |
| + | |
| + | Usage of curl_multi_socket(3) is deprecated, whereas the function is |
| + | equivalent to curl_multi_socket_action(3) with **ev_bitmask** set to |
| + | 0. |
| + | |
| + | Force libcurl to (re-)check all its internal sockets and transfers instead of |
| + | just a single one by calling curl_multi_socket_all(3). Note that there |
| + | should not be any reason to use this function. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | /* the event-library gets told when there activity on the socket 'fd', |
| + | which we translate to a call to curl_multi_socket_action() */ |
| + | int running; |
| + | int rc; |
| + | int fd; |
| + | CURLM *multi; |
| + | rc = curl_multi_socket(multi, fd, &running); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This function was added in libcurl 7.15.4, and is deemed stable since |
| + | 7.16.0. |
| + | |
| + | curl_multi_socket(3) is deprecated, use |
| + | curl_multi_socket_action(3) instead! |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLMcode type, general libcurl multi interface error code. |
| + | |
| + | The return code is for the whole multi stack. Problems still might have |
| + | occurred on individual transfers even when one of these functions return OK. |
| @@ -1,123 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_multi_socket_action 3 "9 Jul 2006" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_multi_socket_action \- reads/writes available data given an action |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_socket_action(CURLM *multi_handle, |
| - | curl_socket_t sockfd, |
| - | int ev_bitmask, |
| - | int *running_handles); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | When the application has detected action on a socket handled by libcurl, it |
| - | should call \fIcurl_multi_socket_action(3)\fP with the \fBsockfd\fP argument |
| - | set to the socket with the action. When the events on a socket are known, they |
| - | can be passed as an events bitmask \fBev_bitmask\fP by first setting |
| - | \fBev_bitmask\fP to 0, and then adding using bitwise OR (|) any combination of |
| - | events to be chosen from CURL_CSELECT_IN, CURL_CSELECT_OUT or |
| - | CURL_CSELECT_ERR. When the events on a socket are unknown, pass 0 instead, and |
| - | libcurl tests the descriptor internally. It is also permissible to pass |
| - | CURL_SOCKET_TIMEOUT to the \fBsockfd\fP parameter in order to initiate the |
| - | whole process or when a timeout occurs. |
| - | |
| - | At return, \fBrunning_handles\fP points to the number of running easy handles |
| - | within the multi handle. When this number reaches zero, all transfers are |
| - | complete/done. When you call \fIcurl_multi_socket_action(3)\fP on a specific |
| - | socket and the counter decreases by one, it DOES NOT necessarily mean that |
| - | this exact socket/transfer is the one that completed. Use |
| - | \fIcurl_multi_info_read(3)\fP to figure out which easy handle that completed. |
| - | |
| - | The \fIcurl_multi_socket_action(3)\fP function informs the application about |
| - | updates in the socket (file descriptor) status by doing none, one, or multiple |
| - | calls to the socket callback function set with the |
| - | \fICURLMOPT_SOCKETFUNCTION(3)\fP option to \fIcurl_multi_setopt(3)\fP. They |
| - | update the status with changes since the previous time the callback was |
| - | called. |
| - | |
| - | Get the timeout time by setting the \fICURLMOPT_TIMERFUNCTION(3)\fP option |
| - | with \fIcurl_multi_setopt(3)\fP. Your application then gets called with |
| - | information on how long to wait for socket actions at most before doing the |
| - | timeout action: call the \fIcurl_multi_socket_action(3)\fP function with the |
| - | \fBsockfd\fP argument set to CURL_SOCKET_TIMEOUT. You can also use the |
| - | \fIcurl_multi_timeout(3)\fP function to poll the value at any given time, but |
| - | for an event-based system using the callback is far better than relying on |
| - | polling the timeout value. |
| - | |
| - | When this function returns error, the state of all transfers are uncertain and |
| - | they cannot be continued. \fIcurl_multi_socket_action(3)\fP should not be |
| - | called again on the same multi handle after an error has been returned, unless |
| - | first removing all the handles and adding new ones. |
| - | .SH "TYPICAL USAGE" |
| - | 1. Create a multi handle |
| - | |
| - | 2. Set the socket callback with \fICURLMOPT_SOCKETFUNCTION(3)\fP |
| - | |
| - | 3. Set the timeout callback with \fICURLMOPT_TIMERFUNCTION(3)\fP, to get to |
| - | know what timeout value to use when waiting for socket activities. |
| - | |
| - | 4. Add easy handles with curl_multi_add_handle() |
| - | |
| - | 5. Provide some means to manage the sockets libcurl is using, so you can check |
| - | them for activity. This can be done through your application code, or by way |
| - | of an external library such as libevent or glib. |
| - | |
| - | 6. Call curl_multi_socket_action(..., CURL_SOCKET_TIMEOUT, 0, ...) |
| - | to kickstart everything. To get one or more callbacks called. |
| - | |
| - | 7. Wait for activity on any of libcurl's sockets, use the timeout value your |
| - | callback has been told. |
| - | |
| - | 8, When activity is detected, call curl_multi_socket_action() for the |
| - | socket(s) that got action. If no activity is detected and the timeout expires, |
| - | call \fIcurl_multi_socket_action(3)\fP with \fICURL_SOCKET_TIMEOUT\fP. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | /* the event-library gets told when there activity on the socket 'fd', |
| - | which we translate to a call to curl_multi_socket_action() */ |
| - | int running; |
| - | CURLM *multi; /* the stack we work with */ |
| - | int fd; /* the descriptor that had action */ |
| - | int bitmask; /* what activity that happened */ |
| - | CURLMcode mc = curl_multi_socket_action(multi, fd, bitmask, &running); |
| - | if(mc) |
| - | printf("error: %s\\n", curl_multi_strerror(mc)); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This function was added in libcurl 7.15.4, and is deemed stable since 7.16.0. |
| - | .SH RETURN VALUE |
| - | CURLMcode type, general libcurl multi interface error code. See |
| - | \fIlibcurl-errors(3)\fP |
| - | .SH "SEE ALSO" |
| - | .BR curl_multi_cleanup (3), |
| - | .BR curl_multi_fdset (3), |
| - | .BR curl_multi_info_read (3), |
| - | .BR curl_multi_init (3), |
| - | .BR the hiperfifo.c example |
| @@ -0,0 +1,120 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_multi_socket_action |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_multi_cleanup (3) |
| + | - curl_multi_fdset (3) |
| + | - curl_multi_info_read (3) |
| + | - curl_multi_init (3) |
| + | - the hiperfifo.c example |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_multi_socket_action - reads/writes available data given an action |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_socket_action(CURLM *multi_handle, |
| + | curl_socket_t sockfd, |
| + | int ev_bitmask, |
| + | int *running_handles); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | When the application has detected action on a socket handled by libcurl, it |
| + | should call curl_multi_socket_action(3) with the **sockfd** argument |
| + | set to the socket with the action. When the events on a socket are known, they |
| + | can be passed as an events bitmask **ev_bitmask** by first setting |
| + | **ev_bitmask** to 0, and then adding using bitwise OR (|) any combination of |
| + | events to be chosen from CURL_CSELECT_IN, CURL_CSELECT_OUT or |
| + | CURL_CSELECT_ERR. When the events on a socket are unknown, pass 0 instead, and |
| + | libcurl tests the descriptor internally. It is also permissible to pass |
| + | CURL_SOCKET_TIMEOUT to the **sockfd** parameter in order to initiate the |
| + | whole process or when a timeout occurs. |
| + | |
| + | At return, **running_handles** points to the number of running easy handles |
| + | within the multi handle. When this number reaches zero, all transfers are |
| + | complete/done. When you call curl_multi_socket_action(3) on a specific |
| + | socket and the counter decreases by one, it DOES NOT necessarily mean that |
| + | this exact socket/transfer is the one that completed. Use |
| + | curl_multi_info_read(3) to figure out which easy handle that completed. |
| + | |
| + | The curl_multi_socket_action(3) function informs the application about |
| + | updates in the socket (file descriptor) status by doing none, one, or multiple |
| + | calls to the socket callback function set with the |
| + | CURLMOPT_SOCKETFUNCTION(3) option to curl_multi_setopt(3). They |
| + | update the status with changes since the previous time the callback was |
| + | called. |
| + | |
| + | Get the timeout time by setting the CURLMOPT_TIMERFUNCTION(3) option |
| + | with curl_multi_setopt(3). Your application then gets called with |
| + | information on how long to wait for socket actions at most before doing the |
| + | timeout action: call the curl_multi_socket_action(3) function with the |
| + | **sockfd** argument set to CURL_SOCKET_TIMEOUT. You can also use the |
| + | curl_multi_timeout(3) function to poll the value at any given time, but |
| + | for an event-based system using the callback is far better than relying on |
| + | polling the timeout value. |
| + | |
| + | When this function returns error, the state of all transfers are uncertain and |
| + | they cannot be continued. curl_multi_socket_action(3) should not be |
| + | called again on the same multi handle after an error has been returned, unless |
| + | first removing all the handles and adding new ones. |
| + | |
| + | # TYPICAL USAGE |
| + | |
| + | 1. Create a multi handle |
| + | |
| + | 2. Set the socket callback with CURLMOPT_SOCKETFUNCTION(3) |
| + | |
| + | 3. Set the timeout callback with CURLMOPT_TIMERFUNCTION(3), to get to |
| + | know what timeout value to use when waiting for socket activities. |
| + | |
| + | 4. Add easy handles with curl_multi_add_handle() |
| + | |
| + | 5. Provide some means to manage the sockets libcurl is using, so you can check |
| + | them for activity. This can be done through your application code, or by way |
| + | of an external library such as libevent or glib. |
| + | |
| + | 6. Call curl_multi_socket_action(..., CURL_SOCKET_TIMEOUT, 0, ...) |
| + | to kickstart everything. To get one or more callbacks called. |
| + | |
| + | 7. Wait for activity on any of libcurl's sockets, use the timeout value your |
| + | callback has been told. |
| + | |
| + | 8, When activity is detected, call curl_multi_socket_action() for the |
| + | socket(s) that got action. If no activity is detected and the timeout expires, |
| + | call curl_multi_socket_action(3) with *CURL_SOCKET_TIMEOUT*. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | /* the event-library gets told when there activity on the socket 'fd', |
| + | which we translate to a call to curl_multi_socket_action() */ |
| + | int running; |
| + | CURLM *multi; /* the stack we work with */ |
| + | int fd; /* the descriptor that had action */ |
| + | int bitmask; /* what activity that happened */ |
| + | CURLMcode mc = curl_multi_socket_action(multi, fd, bitmask, &running); |
| + | if(mc) |
| + | printf("error: %s\n", curl_multi_strerror(mc)); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This function was added in libcurl 7.15.4, and is deemed stable since 7.16.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLMcode type, general libcurl multi interface error code. See |
| + | libcurl-errors(3) |
| @@ -1 +0,0 @@ | |
| - | .so man3/curl_multi_socket.3 |
| @@ -0,0 +1,95 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_multi_socket |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_multi_cleanup (3) |
| + | - curl_multi_fdset (3) |
| + | - curl_multi_info_read (3) |
| + | - curl_multi_init (3) |
| + | - the hiperfifo.c example |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_multi_socket - reads/writes available data |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t sockfd, |
| + | int *running_handles); |
| + | |
| + | CURLMcode curl_multi_socket_all(CURLM *multi_handle, |
| + | int *running_handles); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | These functions are deprecated. Do not use. See |
| + | curl_multi_socket_action(3) instead. |
| + | |
| + | At return, the integer **running_handles** points to contains the number of |
| + | still running easy handles within the multi handle. When this number reaches |
| + | zero, all transfers are complete/done. Note that when you call |
| + | curl_multi_socket_action(3) on a specific socket and the counter |
| + | decreases by one, it DOES NOT necessarily mean that this exact socket/transfer |
| + | is the one that completed. Use curl_multi_info_read(3) to figure out |
| + | which easy handle that completed. |
| + | |
| + | The curl_multi_socket_action(3) functions inform the application about |
| + | updates in the socket (file descriptor) status by doing none, one, or multiple |
| + | calls to the socket callback function set with the |
| + | CURLMOPT_SOCKETFUNCTION(3) option to curl_multi_setopt(3). They |
| + | update the status with changes since the previous time the callback was |
| + | called. |
| + | |
| + | Get the timeout time by setting the CURLMOPT_TIMERFUNCTION(3) option |
| + | with curl_multi_setopt(3). Your application then gets called with |
| + | information on how long to wait for socket actions at most before doing the |
| + | timeout action: call the curl_multi_socket_action(3) function with the |
| + | **sockfd** argument set to CURL_SOCKET_TIMEOUT. You can also use the |
| + | curl_multi_timeout(3) function to poll the value at any given time, but |
| + | for an event-based system using the callback is far better than relying on |
| + | polling the timeout value. |
| + | |
| + | Usage of curl_multi_socket(3) is deprecated, whereas the function is |
| + | equivalent to curl_multi_socket_action(3) with **ev_bitmask** set to |
| + | 0. |
| + | |
| + | Force libcurl to (re-)check all its internal sockets and transfers instead of |
| + | just a single one by calling curl_multi_socket_all(3). Note that there |
| + | should not be any reason to use this function. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | /* the event-library gets told when there activity on the socket 'fd', |
| + | which we translate to a call to curl_multi_socket_action() */ |
| + | int running; |
| + | int rc; |
| + | int fd; |
| + | CURLM *multi; |
| + | rc = curl_multi_socket(multi, fd, &running); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This function was added in libcurl 7.15.4, and is deemed stable since |
| + | 7.16.0. |
| + | |
| + | curl_multi_socket(3) is deprecated, use |
| + | curl_multi_socket_action(3) instead! |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLMcode type, general libcurl multi interface error code. |
| + | |
| + | The return code is for the whole multi stack. Problems still might have |
| + | occurred on individual transfers even when one of these functions return OK. |
| @@ -1,56 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_multi_strerror 3 "26 Apr 2004" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_multi_strerror - return string describing error code |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | const char *curl_multi_strerror(CURLMcode errornum); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function returns a string describing the \fICURLMcode\fP error code |
| - | passed in the argument \fIerrornum\fP. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | int still_running; |
| - | CURLM *multi = curl_multi_init(); |
| - | |
| - | CURLMcode mc = curl_multi_perform(multi, &still_running); |
| - | if(mc) |
| - | printf("error: %s\\n", curl_multi_strerror(mc)); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This function was added in libcurl 7.12.0 |
| - | .SH RETURN VALUE |
| - | A pointer to a null-terminated string. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_strerror (3), |
| - | .BR curl_share_strerror (3), |
| - | .BR curl_url_strerror (3), |
| - | .BR libcurl-errors (3) |
| @@ -0,0 +1,51 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_multi_strerror |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_strerror (3) |
| + | - curl_share_strerror (3) |
| + | - curl_url_strerror (3) |
| + | - libcurl-errors (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_multi_strerror - return string describing error code |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | const char *curl_multi_strerror(CURLMcode errornum); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function returns a string describing the *CURLMcode* error code |
| + | passed in the argument *errornum*. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | int still_running; |
| + | CURLM *multi = curl_multi_init(); |
| + | |
| + | CURLMcode mc = curl_multi_perform(multi, &still_running); |
| + | if(mc) |
| + | printf("error: %s\n", curl_multi_strerror(mc)); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This function was added in libcurl 7.12.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | A pointer to a null-terminated string. |
| @@ -1,93 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_multi_timeout 3 "2 Jan 2006" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_multi_timeout \- how long to wait for action before proceeding |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_timeout(CURLM *multi_handle, long *timeout); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | |
| - | An application using the libcurl multi interface should call |
| - | \fIcurl_multi_timeout(3)\fP to figure out how long it should wait for socket |
| - | actions \- at most \- before proceeding. |
| - | |
| - | Proceeding means either doing the socket-style timeout action: call the |
| - | \fIcurl_multi_socket_action(3)\fP function with the \fBsockfd\fP argument set |
| - | to CURL_SOCKET_TIMEOUT, or call \fIcurl_multi_perform(3)\fP if you are using |
| - | the simpler and older multi interface approach. |
| - | |
| - | The timeout value returned in the long \fBtimeout\fP points to, is in number |
| - | of milliseconds at this moment. If 0, it means you should proceed immediately |
| - | without waiting for anything. If it returns -1, there is no timeout at all set. |
| - | |
| - | An application that uses the multi_socket API SHOULD NOT use this function, |
| - | but SHOULD instead use the \fICURLMOPT_TIMERFUNCTION(3)\fP option for proper |
| - | and desired behavior. |
| - | |
| - | Note: if libcurl returns a -1 timeout here, it just means that libcurl |
| - | currently has no stored timeout value. You must not wait too long (more than a |
| - | few seconds perhaps) before you call \fIcurl_multi_perform(3)\fP again. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | struct timeval timeout; |
| - | long timeo; |
| - | fd_set fdread; |
| - | fd_set fdwrite; |
| - | fd_set fdexcep; |
| - | int maxfd; |
| - | CURLM *multi = curl_multi_init(); |
| - | |
| - | curl_multi_timeout(multi, &timeo); |
| - | if(timeo < 0) |
| - | /* no set timeout, use a default */ |
| - | timeo = 980; |
| - | |
| - | timeout.tv_sec = timeo / 1000; |
| - | timeout.tv_usec = (timeo % 1000) * 1000; |
| - | |
| - | /* wait for activities no longer than the set timeout */ |
| - | select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout); |
| - | } |
| - | .fi |
| - | .SH TYPICAL USAGE |
| - | Call \fIcurl_multi_timeout(3)\fP, then wait for action on the sockets. Figure |
| - | out which sockets to wait for by calling \fIcurl_multi_fdset(3)\fP. |
| - | |
| - | When there is activity or timeout, call \fIcurl_multi_perform(3)\fP and then |
| - | loop - until all transfers are complete. |
| - | .SH AVAILABILITY |
| - | This function was added in libcurl 7.15.4. |
| - | .SH RETURN VALUE |
| - | The standard CURLMcode for multi interface error codes. |
| - | .SH "SEE ALSO" |
| - | .BR curl_multi_fdset (3), |
| - | .BR curl_multi_info_read (3), |
| - | .BR curl_multi_setopt (3), |
| - | .BR curl_multi_socket (3) |
| @@ -0,0 +1,89 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_multi_timeout |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_multi_fdset (3) |
| + | - curl_multi_info_read (3) |
| + | - curl_multi_setopt (3) |
| + | - curl_multi_socket (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_multi_timeout - how long to wait for action before proceeding |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_timeout(CURLM *multi_handle, long *timeout); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | An application using the libcurl multi interface should call |
| + | curl_multi_timeout(3) to figure out how long it should wait for socket |
| + | actions - at most - before proceeding. |
| + | |
| + | Proceeding means either doing the socket-style timeout action: call the |
| + | curl_multi_socket_action(3) function with the **sockfd** argument set |
| + | to CURL_SOCKET_TIMEOUT, or call curl_multi_perform(3) if you are using |
| + | the simpler and older multi interface approach. |
| + | |
| + | The timeout value returned in the long **timeout** points to, is in number |
| + | of milliseconds at this moment. If 0, it means you should proceed immediately |
| + | without waiting for anything. If it returns -1, there is no timeout at all set. |
| + | |
| + | An application that uses the *multi_socket* API should not use this function. |
| + | It should instead use the CURLMOPT_TIMERFUNCTION(3) option for proper and |
| + | desired behavior. |
| + | |
| + | Note: if libcurl returns a -1 timeout here, it just means that libcurl |
| + | currently has no stored timeout value. You must not wait too long (more than a |
| + | few seconds perhaps) before you call curl_multi_perform(3) again. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | struct timeval timeout; |
| + | long timeo; |
| + | fd_set fdread; |
| + | fd_set fdwrite; |
| + | fd_set fdexcep; |
| + | int maxfd; |
| + | CURLM *multi = curl_multi_init(); |
| + | |
| + | curl_multi_timeout(multi, &timeo); |
| + | if(timeo < 0) |
| + | /* no set timeout, use a default */ |
| + | timeo = 980; |
| + | |
| + | timeout.tv_sec = timeo / 1000; |
| + | timeout.tv_usec = (timeo % 1000) * 1000; |
| + | |
| + | /* wait for activities no longer than the set timeout */ |
| + | select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout); |
| + | } |
| + | ~~~ |
| + | |
| + | # TYPICAL USAGE |
| + | |
| + | Call curl_multi_timeout(3), then wait for action on the sockets. Figure |
| + | out which sockets to wait for by calling curl_multi_fdset(3). |
| + | |
| + | When there is activity or timeout, call curl_multi_perform(3) and then |
| + | loop - until all transfers are complete. |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This function was added in libcurl 7.15.4. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | The standard CURLMcode for multi interface error codes. |
| @@ -1,118 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_multi_wait 3 "12 Jul 2012" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_multi_wait - polls on all easy handles in a multi handle |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_wait(CURLM *multi_handle, |
| - | struct curl_waitfd extra_fds[], |
| - | unsigned int extra_nfds, |
| - | int timeout_ms, |
| - | int *numfds); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_multi_wait(3)\fP polls all file descriptors used by the curl easy |
| - | handles contained in the given multi handle set. It blocks until activity is |
| - | detected on at least one of the handles or \fItimeout_ms\fP has passed. |
| - | Alternatively, if the multi handle has a pending internal timeout that has a |
| - | shorter expiry time than \fItimeout_ms\fP, that shorter time is be used |
| - | instead to make sure timeout accuracy is reasonably kept. |
| - | |
| - | The calling application may pass additional \fIcurl_waitfd\fP structures which |
| - | are similar to \fIpoll(2)\fP's \fIpollfd\fP structure to be waited on in the |
| - | same call. |
| - | |
| - | On completion, if \fInumfds\fP is non-NULL, it gets populated with the total |
| - | number of file descriptors on which interesting events occurred. This number |
| - | can include both libcurl internal descriptors as well as descriptors provided |
| - | in \fIextra_fds\fP. |
| - | |
| - | If no extra file descriptors are provided and libcurl has no file descriptor |
| - | to offer to wait for, this function returns immediately. (Consider using |
| - | \fIcurl_multi_poll(3)\fP to avoid this behavior.) |
| - | |
| - | This function is encouraged to be used instead of select(3) when using the |
| - | multi interface to allow applications to easier circumvent the common problem |
| - | with 1024 maximum file descriptors. |
| - | .SH curl_waitfd |
| - | .nf |
| - | struct curl_waitfd { |
| - | curl_socket_t fd; |
| - | short events; |
| - | short revents; |
| - | }; |
| - | .fi |
| - | .IP CURL_WAIT_POLLIN |
| - | Bit flag to \fIcurl_waitfd.events\fP indicating the socket should poll on read |
| - | events such as new data received. |
| - | .IP CURL_WAIT_POLLPRI |
| - | Bit flag to \fIcurl_waitfd.events\fP indicating the socket should poll on high |
| - | priority read events such as out of band data. |
| - | .IP CURL_WAIT_POLLOUT |
| - | Bit flag to \fIcurl_waitfd.events\fP indicating the socket should poll on |
| - | write events such as the socket being clear to write without blocking. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *easy; |
| - | CURLM *multi = curl_multi_init(); |
| - | int still_running; |
| - | |
| - | /* add the individual easy handle */ |
| - | curl_multi_add_handle(multi, easy); |
| - | |
| - | do { |
| - | CURLMcode mc; |
| - | int numfds; |
| - | |
| - | mc = curl_multi_perform(multi, &still_running); |
| - | |
| - | if(mc == CURLM_OK) { |
| - | /* wait for activity, timeout or "nothing" */ |
| - | mc = curl_multi_wait(multi, NULL, 0, 1000, &numfds); |
| - | } |
| - | |
| - | if(mc != CURLM_OK) { |
| - | fprintf(stderr, "curl_multi failed, code %d.\\n", mc); |
| - | break; |
| - | } |
| - | |
| - | } while(still_running); |
| - | |
| - | curl_multi_remove_handle(multi, easy); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This function was added in libcurl 7.28.0. |
| - | .SH RETURN VALUE |
| - | CURLMcode type, general libcurl multi interface error code. See |
| - | \fIlibcurl-errors(3)\fP |
| - | .SH "SEE ALSO" |
| - | .BR curl_multi_fdset (3), |
| - | .BR curl_multi_perform (3), |
| - | .BR curl_multi_poll (3) |
| @@ -0,0 +1,121 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_multi_wait |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_multi_fdset (3) |
| + | - curl_multi_perform (3) |
| + | - curl_multi_poll (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_multi_wait - polls on all easy handles in a multi handle |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_wait(CURLM *multi_handle, |
| + | struct curl_waitfd extra_fds[], |
| + | unsigned int extra_nfds, |
| + | int timeout_ms, |
| + | int *numfds); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_multi_wait(3) polls all file descriptors used by the curl easy |
| + | handles contained in the given multi handle set. It blocks until activity is |
| + | detected on at least one of the handles or *timeout_ms* has passed. |
| + | Alternatively, if the multi handle has a pending internal timeout that has a |
| + | shorter expiry time than *timeout_ms*, that shorter time is be used |
| + | instead to make sure timeout accuracy is reasonably kept. |
| + | |
| + | The calling application may pass additional *curl_waitfd* structures which |
| + | are similar to *poll(2)*'s *pollfd* structure to be waited on in the |
| + | same call. |
| + | |
| + | On completion, if *numfds* is non-NULL, it gets populated with the total |
| + | number of file descriptors on which interesting events occurred. This number |
| + | can include both libcurl internal descriptors as well as descriptors provided |
| + | in *extra_fds*. |
| + | |
| + | If no extra file descriptors are provided and libcurl has no file descriptor |
| + | to offer to wait for, this function returns immediately. (Consider using |
| + | curl_multi_poll(3) to avoid this behavior.) |
| + | |
| + | This function is encouraged to be used instead of select(3) when using the |
| + | multi interface to allow applications to easier circumvent the common problem |
| + | with 1024 maximum file descriptors. |
| + | |
| + | # curl_waitfd |
| + | |
| + | ~~~c |
| + | struct curl_waitfd { |
| + | curl_socket_t fd; |
| + | short events; |
| + | short revents; |
| + | }; |
| + | ~~~ |
| + | |
| + | ## CURL_WAIT_POLLIN |
| + | |
| + | Bit flag to *curl_waitfd.events* indicating the socket should poll on read |
| + | events such as new data received. |
| + | |
| + | ## CURL_WAIT_POLLPRI |
| + | |
| + | Bit flag to *curl_waitfd.events* indicating the socket should poll on high |
| + | priority read events such as out of band data. |
| + | |
| + | ## CURL_WAIT_POLLOUT |
| + | |
| + | Bit flag to *curl_waitfd.events* indicating the socket should poll on |
| + | write events such as the socket being clear to write without blocking. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *easy; |
| + | CURLM *multi = curl_multi_init(); |
| + | int still_running; |
| + | |
| + | /* add the individual easy handle */ |
| + | curl_multi_add_handle(multi, easy); |
| + | |
| + | do { |
| + | CURLMcode mc; |
| + | int numfds; |
| + | |
| + | mc = curl_multi_perform(multi, &still_running); |
| + | |
| + | if(mc == CURLM_OK) { |
| + | /* wait for activity, timeout or "nothing" */ |
| + | mc = curl_multi_wait(multi, NULL, 0, 1000, &numfds); |
| + | } |
| + | |
| + | if(mc != CURLM_OK) { |
| + | fprintf(stderr, "curl_multi failed, code %d.\n", mc); |
| + | break; |
| + | } |
| + | |
| + | } while(still_running); |
| + | |
| + | curl_multi_remove_handle(multi, easy); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This function was added in libcurl 7.28.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLMcode type, general libcurl multi interface error code. See |
| + | libcurl-errors(3) |
| @@ -1,96 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_multi_wakeup 3 "17 Nov 2019" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_multi_wakeup - wakes up a sleeping curl_multi_poll call |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_wakeup(CURLM *multi_handle); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function can be called from any thread and it wakes up a sleeping |
| - | \fIcurl_multi_poll(3)\fP call that is currently (or is about to be) waiting |
| - | for activity or a timeout. |
| - | |
| - | If the function is called when there is no \fIcurl_multi_poll(3)\fP call, it |
| - | causes the next call to return immediately. |
| - | |
| - | Calling this function only guarantees to wake up the current (or the next if |
| - | there is no current) \fIcurl_multi_poll(3)\fP call, which means it is possible |
| - | that multiple calls to this function wake up the same waiting operation. |
| - | |
| - | This function has no effect on \fIcurl_multi_wait(3)\fP calls. |
| - | .SH EXAMPLE |
| - | .nf |
| - | extern int time_to_die(void); |
| - | extern int set_something_to_signal_thread_1_to_exit(void); |
| - | extern int decide_to_stop_thread1(); |
| - | |
| - | int main(void) |
| - | { |
| - | CURL *easy; |
| - | CURLM *multi; |
| - | int still_running; |
| - | |
| - | /* add the individual easy handle */ |
| - | curl_multi_add_handle(multi, easy); |
| - | |
| - | /* this is thread 1 */ |
| - | do { |
| - | CURLMcode mc; |
| - | int numfds; |
| - | |
| - | mc = curl_multi_perform(multi, &still_running); |
| - | |
| - | if(mc == CURLM_OK) { |
| - | /* wait for activity, timeout or wakeup */ |
| - | mc = curl_multi_poll(multi, NULL, 0, 10000, &numfds); |
| - | } |
| - | |
| - | if(time_to_die()) |
| - | return 1; |
| - | |
| - | } while(still_running); |
| - | |
| - | curl_multi_remove_handle(multi, easy); |
| - | |
| - | /* this is thread 2 */ |
| - | |
| - | if(decide_to_stop_thread1()) { |
| - | |
| - | set_something_to_signal_thread_1_to_exit(); |
| - | |
| - | curl_multi_wakeup(multi); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.68.0 |
| - | .SH RETURN VALUE |
| - | CURLMcode type, general libcurl multi interface error code. |
| - | .SH "SEE ALSO" |
| - | .BR curl_multi_poll (3), |
| - | .BR curl_multi_wait (3) |
| @@ -0,0 +1,91 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_multi_wakeup |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_multi_poll (3) |
| + | - curl_multi_wait (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_multi_wakeup - wakes up a sleeping curl_multi_poll call |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_wakeup(CURLM *multi_handle); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function can be called from any thread and it wakes up a sleeping |
| + | curl_multi_poll(3) call that is currently (or is about to be) waiting |
| + | for activity or a timeout. |
| + | |
| + | If the function is called when there is no curl_multi_poll(3) call, it |
| + | causes the next call to return immediately. |
| + | |
| + | Calling this function only guarantees to wake up the current (or the next if |
| + | there is no current) curl_multi_poll(3) call, which means it is possible |
| + | that multiple calls to this function wake up the same waiting operation. |
| + | |
| + | This function has no effect on curl_multi_wait(3) calls. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | extern int time_to_die(void); |
| + | extern int set_something_to_signal_thread_1_to_exit(void); |
| + | extern int decide_to_stop_thread1(); |
| + | |
| + | int main(void) |
| + | { |
| + | CURL *easy; |
| + | CURLM *multi; |
| + | int still_running; |
| + | |
| + | /* add the individual easy handle */ |
| + | curl_multi_add_handle(multi, easy); |
| + | |
| + | /* this is thread 1 */ |
| + | do { |
| + | CURLMcode mc; |
| + | int numfds; |
| + | |
| + | mc = curl_multi_perform(multi, &still_running); |
| + | |
| + | if(mc == CURLM_OK) { |
| + | /* wait for activity, timeout or wakeup */ |
| + | mc = curl_multi_poll(multi, NULL, 0, 10000, &numfds); |
| + | } |
| + | |
| + | if(time_to_die()) |
| + | return 1; |
| + | |
| + | } while(still_running); |
| + | |
| + | curl_multi_remove_handle(multi, easy); |
| + | |
| + | /* this is thread 2 */ |
| + | |
| + | if(decide_to_stop_thread1()) { |
| + | |
| + | set_something_to_signal_thread_1_to_exit(); |
| + | |
| + | curl_multi_wakeup(multi); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.68.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLMcode type, general libcurl multi interface error code. |
| @@ -1,38 +1,30 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_pushheader_byname 3 "9 Jun 2023" "libcurl" "libcurl" |
| - | .SH NAME |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_pushheader_byname |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLMOPT_PUSHFUNCTION (3) |
| + | - curl_pushheader_bynum (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| curl_pushheader_byname - get a push header by name | |
| - | .SH SYNOPSIS |
| - | .nf |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| char *curl_pushheader_byname(struct curl_pushheaders *h, const char *name); | |
| - | .fi |
| - | .SH DESCRIPTION |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| This is a function that is only functional within a | |
| - | \fICURLMOPT_PUSHFUNCTION(3)\fP callback. It makes no sense to try to use it |
| + | CURLMOPT_PUSHFUNCTION(3) callback. It makes no sense to try to use it |
| elsewhere and it has no function then. | |
| It returns the value for the given header field name (or NULL) for the | |
| @@ -41,8 +33,9 @@ not have to loop through all headers to find the one it is interested in. The | |
| data this function points to is freed when this callback returns. If more than | |
| one header field use the same name, this returns only the first one. | |
| - | .SH EXAMPLE |
| - | .nf |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| #include <string.h> /* for strncmp */ | |
| static int push_cb(CURL *parent, | |
| @@ -56,7 +49,7 @@ static int push_cb(CURL *parent, | |
| FILE *out; | |
| headp = curl_pushheader_byname(headers, ":path"); | |
| if(headp && !strncmp(headp, "/push-", 6)) { | |
| - | fprintf(stderr, "The PATH is %s\\n", headp); |
| + | fprintf(stderr, "The PATH is %s\n", headp); |
| /* save the push here */ | |
| out = fopen("pushed-stream", "wb"); | |
| @@ -78,11 +71,12 @@ int main(void) | |
| curl_multi_setopt(multi, CURLMOPT_PUSHFUNCTION, push_cb); | |
| curl_multi_setopt(multi, CURLMOPT_PUSHDATA, &counter); | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| Added in 7.44.0 | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| Returns a pointer to the header field content or NULL. | |
| - | .SH "SEE ALSO" |
| - | .BR CURLMOPT_PUSHFUNCTION (3), |
| - | .BR curl_pushheader_bynum (3) |
| @@ -1,75 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_pushheader_bynum 3 "9 Jun 2023" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_pushheader_bynum - get a push header by index |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | char *curl_pushheader_bynum(struct curl_pushheaders *h, size_t num); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This is a function that is only functional within a |
| - | \fICURLMOPT_PUSHFUNCTION(3)\fP callback. It makes no sense to try to use it |
| - | elsewhere and it has no function then. |
| - | |
| - | It returns the value for the header field at the given index \fBnum\fP, for |
| - | the incoming server push request or NULL. The data pointed to is freed by |
| - | libcurl when this callback returns. The returned pointer points to a |
| - | "name:value" string that gets freed when this callback returns. |
| - | |
| - | .SH EXAMPLE |
| - | .nf |
| - | /* output all the incoming push request headers */ |
| - | static int push_cb(CURL *parent, |
| - | CURL *easy, |
| - | size_t num_headers, |
| - | struct curl_pushheaders *headers, |
| - | void *clientp) |
| - | { |
| - | int i = 0; |
| - | char *field; |
| - | do { |
| - | field = curl_pushheader_bynum(headers, i); |
| - | if(field) |
| - | fprintf(stderr, "Push header: %s\\n", field); |
| - | i++; |
| - | } while(field); |
| - | return CURL_PUSH_OK; /* permission granted */ |
| - | } |
| - | |
| - | int main(void) |
| - | { |
| - | CURLM *multi = curl_multi_init(); |
| - | curl_multi_setopt(multi, CURLMOPT_PUSHFUNCTION, push_cb); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.44.0 |
| - | .SH RETURN VALUE |
| - | Returns a pointer to the header field content or NULL. |
| - | .SH "SEE ALSO" |
| - | .BR CURLMOPT_PUSHFUNCTION (3), |
| - | .BR curl_pushheader_byname (3) |
| @@ -0,0 +1,69 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_pushheader_bynum |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLMOPT_PUSHFUNCTION (3) |
| + | - curl_pushheader_byname (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_pushheader_bynum - get a push header by index |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | char *curl_pushheader_bynum(struct curl_pushheaders *h, size_t num); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This is a function that is only functional within a |
| + | CURLMOPT_PUSHFUNCTION(3) callback. It makes no sense to try to use it |
| + | elsewhere and it has no function then. |
| + | |
| + | It returns the value for the header field at the given index **num**, for |
| + | the incoming server push request or NULL. The data pointed to is freed by |
| + | libcurl when this callback returns. The returned pointer points to a |
| + | "name:value" string that gets freed when this callback returns. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | /* output all the incoming push request headers */ |
| + | static int push_cb(CURL *parent, |
| + | CURL *easy, |
| + | size_t num_headers, |
| + | struct curl_pushheaders *headers, |
| + | void *clientp) |
| + | { |
| + | int i = 0; |
| + | char *field; |
| + | do { |
| + | field = curl_pushheader_bynum(headers, i); |
| + | if(field) |
| + | fprintf(stderr, "Push header: %s\n", field); |
| + | i++; |
| + | } while(field); |
| + | return CURL_PUSH_OK; /* permission granted */ |
| + | } |
| + | |
| + | int main(void) |
| + | { |
| + | CURLM *multi = curl_multi_init(); |
| + | curl_multi_setopt(multi, CURLMOPT_PUSHFUNCTION, push_cb); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.44.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns a pointer to the header field content or NULL. |
| @@ -1,59 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_share_cleanup 3 "8 Aug 2003" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_share_cleanup - Clean up a shared object |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLSHcode curl_share_cleanup(CURLSH *share_handle); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function deletes a shared object. The share handle cannot be used anymore |
| - | when this function has been called. |
| - | |
| - | Passing in a NULL pointer in \fIshare_handle\fP makes this function return |
| - | immediately with no action. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLSHcode sh; |
| - | CURLSH *share = curl_share_init(); |
| - | sh = curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT); |
| - | /* use the share, then ... */ |
| - | curl_share_cleanup(share); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.10 |
| - | .SH RETURN VALUE |
| - | CURLSHE_OK (zero) means that the option was set properly, non-zero means an |
| - | error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors(3)\fP |
| - | man page for the full list with descriptions. If an error occurs, then the |
| - | share object is not deleted. |
| - | .SH "SEE ALSO" |
| - | .BR curl_share_init (3), |
| - | .BR curl_share_setopt (3) |
| @@ -0,0 +1,54 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_share_cleanup |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_share_init (3) |
| + | - curl_share_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_share_cleanup - Clean up a shared object |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLSHcode curl_share_cleanup(CURLSH *share_handle); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function deletes a shared object. The share handle cannot be used anymore |
| + | when this function has been called. |
| + | |
| + | Passing in a NULL pointer in *share_handle* makes this function return |
| + | immediately with no action. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLSHcode sh; |
| + | CURLSH *share = curl_share_init(); |
| + | sh = curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT); |
| + | /* use the share, then ... */ |
| + | curl_share_cleanup(share); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.10 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLSHE_OK (zero) means that the option was set properly, non-zero means an |
| + | error occurred as *<curl/curl.h>* defines. See the libcurl-errors(3) |
| + | man page for the full list with descriptions. If an error occurs, then the |
| + | share object is not deleted. |
| @@ -1,61 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_share_init 3 "Aug 3, 2003" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_share_init - Create a shared object |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLSH *curl_share_init(); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function returns a pointer to a \fICURLSH\fP handle to be used as input |
| - | to all the other share-functions, sometimes referred to as a share handle in |
| - | some places in the documentation. This init call MUST have a corresponding |
| - | call to \fIcurl_share_cleanup(3)\fP when all operations using the share are |
| - | complete. |
| - | |
| - | This \fIshare handle\fP is what you pass to curl using the |
| - | \fICURLOPT_SHARE(3)\fP option with \fIcurl_easy_setopt(3)\fP, to make that |
| - | specific curl handle use the data in this share. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLSHcode sh; |
| - | CURLSH *share = curl_share_init(); |
| - | sh = curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT); |
| - | if(sh) |
| - | printf("Error: %s\\n", curl_share_strerror(sh)); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.10 |
| - | .SH RETURN VALUE |
| - | If this function returns NULL, something went wrong (out of memory, etc.) |
| - | and therefore the share object was not created. |
| - | .SH "SEE ALSO" |
| - | .BR curl_share_cleanup (3), |
| - | .BR curl_share_setopt (3) |
| @@ -0,0 +1,56 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_share_init |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_share_cleanup (3) |
| + | - curl_share_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_share_init - Create a shared object |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLSH *curl_share_init(); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function returns a pointer to a *CURLSH* handle to be used as input |
| + | to all the other share-functions, sometimes referred to as a share handle in |
| + | some places in the documentation. This init call MUST have a corresponding |
| + | call to curl_share_cleanup(3) when all operations using the share are |
| + | complete. |
| + | |
| + | This *share handle* is what you pass to curl using the |
| + | CURLOPT_SHARE(3) option with curl_easy_setopt(3), to make that |
| + | specific curl handle use the data in this share. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLSHcode sh; |
| + | CURLSH *share = curl_share_init(); |
| + | sh = curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT); |
| + | if(sh) |
| + | printf("Error: %s\n", curl_share_strerror(sh)); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.10 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | If this function returns NULL, something went wrong (out of memory, etc.) |
| + | and therefore the share object was not created. |
| @@ -1,65 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_share_setopt 3 "8 Aug 2003" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_share_setopt - Set options for a shared object |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, parameter); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Set the \fIoption\fP to \fIparameter\fP for the given \fIshare\fP. |
| - | .SH OPTIONS |
| - | .IP CURLSHOPT_LOCKFUNC |
| - | See \fICURLSHOPT_LOCKFUNC(3)\fP. |
| - | .IP CURLSHOPT_UNLOCKFUNC |
| - | See \fICURLSHOPT_UNLOCKFUNC(3)\fP. |
| - | .IP CURLSHOPT_SHARE |
| - | See \fICURLSHOPT_SHARE(3)\fP. |
| - | .IP CURLSHOPT_UNSHARE |
| - | See \fICURLSHOPT_UNSHARE(3)\fP. |
| - | .IP CURLSHOPT_USERDATA |
| - | See \fICURLSHOPT_USERDATA(3)\fP. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLSHcode sh; |
| - | CURLSH *share = curl_share_init(); |
| - | sh = curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT); |
| - | if(sh) |
| - | printf("Error: %s\\n", curl_share_strerror(sh)); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.10 |
| - | .SH RETURN VALUE |
| - | CURLSHE_OK (zero) means that the option was set properly, non-zero means an |
| - | error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors(3)\fP |
| - | man page for the full list with descriptions. |
| - | .SH "SEE ALSO" |
| - | .BR curl_share_cleanup (3), |
| - | .BR curl_share_init (3) |
| @@ -0,0 +1,71 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_share_setopt |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_share_cleanup (3) |
| + | - curl_share_init (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_share_setopt - Set options for a shared object |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, parameter); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Set the *option* to *parameter* for the given *share*. |
| + | |
| + | # OPTIONS |
| + | |
| + | ## CURLSHOPT_LOCKFUNC |
| + | |
| + | See CURLSHOPT_LOCKFUNC(3). |
| + | |
| + | ## CURLSHOPT_UNLOCKFUNC |
| + | |
| + | See CURLSHOPT_UNLOCKFUNC(3). |
| + | |
| + | ## CURLSHOPT_SHARE |
| + | |
| + | See CURLSHOPT_SHARE(3). |
| + | |
| + | ## CURLSHOPT_UNSHARE |
| + | |
| + | See CURLSHOPT_UNSHARE(3). |
| + | |
| + | ## CURLSHOPT_USERDATA |
| + | |
| + | See CURLSHOPT_USERDATA(3). |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLSHcode sh; |
| + | CURLSH *share = curl_share_init(); |
| + | sh = curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT); |
| + | if(sh) |
| + | printf("Error: %s\n", curl_share_strerror(sh)); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.10 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLSHE_OK (zero) means that the option was set properly, non-zero means an |
| + | error occurred as *<curl/curl.h>* defines. See the libcurl-errors(3) |
| + | man page for the full list with descriptions. |
| @@ -1,55 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_share_strerror 3 "Apr 26, 2004" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_share_strerror - return string describing error code |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | const char *curl_share_strerror(CURLSHcode errornum); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | The \fIcurl_share_strerror(3)\fP function returns a string describing the |
| - | \fICURLSHcode\fP error code passed in the argument \fIerrornum\fP. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLSHcode sh; |
| - | CURLSH *share = curl_share_init(); |
| - | sh = curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT); |
| - | if(sh) |
| - | printf("Error: %s\\n", curl_share_strerror(sh)); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This function was added in libcurl 7.12.0 |
| - | .SH RETURN VALUE |
| - | A pointer to a null-terminated string. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_strerror (3), |
| - | .BR curl_multi_strerror (3), |
| - | .BR curl_url_strerror (3), |
| - | .BR libcurl-errors (3) |
| @@ -0,0 +1,50 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_share_strerror |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_strerror (3) |
| + | - curl_multi_strerror (3) |
| + | - curl_url_strerror (3) |
| + | - libcurl-errors (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_share_strerror - return string describing error code |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | const char *curl_share_strerror(CURLSHcode errornum); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | The curl_share_strerror(3) function returns a string describing the |
| + | *CURLSHcode* error code passed in the argument *errornum*. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLSHcode sh; |
| + | CURLSH *share = curl_share_init(); |
| + | sh = curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT); |
| + | if(sh) |
| + | printf("Error: %s\n", curl_share_strerror(sh)); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This function was added in libcurl 7.12.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | A pointer to a null-terminated string. |
| @@ -1,80 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_slist_append 3 "19 Jun 2003" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_slist_append - add a string to an slist |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | struct curl_slist *curl_slist_append(struct curl_slist *list, |
| - | const char *string); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | \fIcurl_slist_append(3)\fP appends a string to a linked list of strings. The |
| - | existing \fBlist\fP should be passed as the first argument and the new list is |
| - | returned from this function. Pass in NULL in the \fBlist\fP argument to create |
| - | a new list. The specified \fBstring\fP has been appended when this function |
| - | returns. \fIcurl_slist_append(3)\fP copies the string. |
| - | |
| - | The list should be freed again (after usage) with |
| - | \fIcurl_slist_free_all(3)\fP. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *handle; |
| - | struct curl_slist *slist = NULL; |
| - | struct curl_slist *temp = NULL; |
| - | |
| - | slist = curl_slist_append(slist, "pragma:"); |
| - | |
| - | if(!slist) |
| - | return -1; |
| - | |
| - | temp = curl_slist_append(slist, "Accept:"); |
| - | |
| - | if(!temp) { |
| - | curl_slist_free_all(slist); |
| - | return -1; |
| - | } |
| - | |
| - | slist = temp; |
| - | |
| - | curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist); |
| - | |
| - | curl_easy_perform(handle); |
| - | |
| - | curl_slist_free_all(slist); /* free the list again */ |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Always |
| - | .SH RETURN VALUE |
| - | A null pointer is returned if anything went wrong, otherwise the new list |
| - | pointer is returned. To avoid overwriting an existing non-empty list on |
| - | failure, the new list should be returned to a temporary variable which can |
| - | be tested for NULL before updating the original list pointer. |
| - | .SH "SEE ALSO" |
| - | .BR curl_slist_free_all (3) |
| @@ -0,0 +1,75 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_slist_append |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_slist_free_all (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_slist_append - add a string to an slist |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | struct curl_slist *curl_slist_append(struct curl_slist *list, |
| + | const char *string); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_slist_append(3) appends a string to a linked list of strings. The |
| + | existing **list** should be passed as the first argument and the new list is |
| + | returned from this function. Pass in NULL in the **list** argument to create |
| + | a new list. The specified **string** has been appended when this function |
| + | returns. curl_slist_append(3) copies the string. |
| + | |
| + | The list should be freed again (after usage) with |
| + | curl_slist_free_all(3). |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *handle; |
| + | struct curl_slist *slist = NULL; |
| + | struct curl_slist *temp = NULL; |
| + | |
| + | slist = curl_slist_append(slist, "pragma:"); |
| + | |
| + | if(!slist) |
| + | return -1; |
| + | |
| + | temp = curl_slist_append(slist, "Accept:"); |
| + | |
| + | if(!temp) { |
| + | curl_slist_free_all(slist); |
| + | return -1; |
| + | } |
| + | |
| + | slist = temp; |
| + | |
| + | curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist); |
| + | |
| + | curl_easy_perform(handle); |
| + | |
| + | curl_slist_free_all(slist); /* free the list again */ |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Always |
| + | |
| + | # RETURN VALUE |
| + | |
| + | A null pointer is returned if anything went wrong, otherwise the new list |
| + | pointer is returned. To avoid overwriting an existing non-empty list on |
| + | failure, the new list should be returned to a temporary variable which can |
| + | be tested for NULL before updating the original list pointer. |
| @@ -1,63 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_slist_free_all 3 "5 March 2001" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_slist_free_all - free an entire curl_slist list |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | void curl_slist_free_all(struct curl_slist *list); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | curl_slist_free_all() removes all traces of a previously built curl_slist |
| - | linked list. |
| - | |
| - | Passing in a NULL pointer in \fIlist\fP makes this function return immediately |
| - | with no action. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *handle; |
| - | struct curl_slist *slist = NULL; |
| - | |
| - | slist = curl_slist_append(slist, "X-libcurl: coolness"); |
| - | |
| - | if(!slist) |
| - | return -1; |
| - | |
| - | curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist); |
| - | |
| - | curl_easy_perform(handle); |
| - | |
| - | curl_slist_free_all(slist); /* free the list again */ |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Always |
| - | .SH RETURN VALUE |
| - | Nothing. |
| - | .SH "SEE ALSO" |
| - | .BR curl_slist_append (3) |
| @@ -0,0 +1,58 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_slist_free_all |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_slist_append (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_slist_free_all - free an entire curl_slist list |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | void curl_slist_free_all(struct curl_slist *list); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | curl_slist_free_all() removes all traces of a previously built curl_slist |
| + | linked list. |
| + | |
| + | Passing in a NULL pointer in *list* makes this function return immediately |
| + | with no action. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *handle; |
| + | struct curl_slist *slist = NULL; |
| + | |
| + | slist = curl_slist_append(slist, "X-libcurl: coolness"); |
| + | |
| + | if(!slist) |
| + | return -1; |
| + | |
| + | curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist); |
| + | |
| + | curl_easy_perform(handle); |
| + | |
| + | curl_slist_free_all(slist); /* free the list again */ |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Always |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Nothing. |
| @@ -1,61 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_strequal 3 "30 April 2004" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_strequal, curl_strnequal - case insensitive string comparisons |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | int curl_strequal(const char *str1, const char *str2); |
| - | int curl_strnequal(const char *str1, const char *str2, size_t length); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | The \fIcurl_strequal(3)\fP function compares the two strings \fIstr1\fP and |
| - | \fIstr2\fP, ignoring the case of the characters. It returns a non-zero (TRUE) |
| - | integer if the strings are identical. |
| - | |
| - | The \fBcurl_strnequal()\fP function is similar, except it only compares the |
| - | first \fIlength\fP characters of \fIstr1\fP. |
| - | |
| - | These functions are provided by libcurl to enable applications to compare |
| - | strings in a truly portable manner. There are no standard portable case |
| - | insensitive string comparison functions. These two work on all platforms. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(int argc, char **argv) |
| - | { |
| - | const char *name = "compare"; |
| - | if(curl_strequal(name, argv[1])) |
| - | printf("Name and input matches\\n"); |
| - | if(curl_strnequal(name, argv[1], 5)) |
| - | printf("Name and input matches in the 5 first bytes\\n"); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Always |
| - | .SH RETURN VALUE |
| - | Non-zero if the strings are identical. Zero if they are not. |
| - | .SH "SEE ALSO" |
| - | .BR strcmp "(3), " strcasecmp "(3)" |
| @@ -0,0 +1,57 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_strequal |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - strcasecmp (3) |
| + | - strcmp (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_strequal, curl_strnequal - case insensitive string comparisons |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | int curl_strequal(const char *str1, const char *str2); |
| + | int curl_strnequal(const char *str1, const char *str2, size_t length); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | The curl_strequal(3) function compares the two strings *str1* and |
| + | *str2*, ignoring the case of the characters. It returns a non-zero (TRUE) |
| + | integer if the strings are identical. |
| + | |
| + | The **curl_strnequal()** function is similar, except it only compares the |
| + | first *length* characters of *str1*. |
| + | |
| + | These functions are provided by libcurl to enable applications to compare |
| + | strings in a truly portable manner. There are no standard portable case |
| + | insensitive string comparison functions. These two work on all platforms. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(int argc, char **argv) |
| + | { |
| + | const char *name = "compare"; |
| + | if(curl_strequal(name, argv[1])) |
| + | printf("Name and input matches\n"); |
| + | if(curl_strnequal(name, argv[1], 5)) |
| + | printf("Name and input matches in the 5 first bytes\n"); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Always |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Non-zero if the strings are identical. Zero if they are not. |
| @@ -1 +0,0 @@ | |
| - | .so man3/curl_strequal.3 |
| @@ -0,0 +1,57 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_strequal |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - strcasecmp (3) |
| + | - strcmp (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_strequal, curl_strnequal - case insensitive string comparisons |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | int curl_strequal(const char *str1, const char *str2); |
| + | int curl_strnequal(const char *str1, const char *str2, size_t length); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | The curl_strequal(3) function compares the two strings *str1* and |
| + | *str2*, ignoring the case of the characters. It returns a non-zero (TRUE) |
| + | integer if the strings are identical. |
| + | |
| + | The **curl_strnequal()** function is similar, except it only compares the |
| + | first *length* characters of *str1*. |
| + | |
| + | These functions are provided by libcurl to enable applications to compare |
| + | strings in a truly portable manner. There are no standard portable case |
| + | insensitive string comparison functions. These two work on all platforms. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(int argc, char **argv) |
| + | { |
| + | const char *name = "compare"; |
| + | if(curl_strequal(name, argv[1])) |
| + | printf("Name and input matches\n"); |
| + | if(curl_strnequal(name, argv[1], 5)) |
| + | printf("Name and input matches in the 5 first bytes\n"); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Always |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Non-zero if the strings are identical. Zero if they are not. |
| @@ -1,70 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_unescape 3 "22 March 2001" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_unescape - URL decodes the given string |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | char *curl_unescape(const char *input, int length); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Obsolete function. Use \fIcurl_easy_unescape(3)\fP instead! |
| - | |
| - | This function converts the URL encoded string \fBinput\fP to a "plain string" |
| - | and return that as a new allocated string. All input characters that are URL |
| - | encoded (%XX where XX is a two-digit hexadecimal number) are converted to |
| - | their plain text versions. |
| - | |
| - | If the \fBlength\fP argument is set to 0, \fIcurl_unescape(3)\fP calls |
| - | strlen() on \fBinput\fP to find out the size. |
| - | |
| - | You must \fIcurl_free(3)\fP the returned string when you are done with it. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | char *decoded = curl_unescape("%63%75%72%6c", 12); |
| - | if(decoded) { |
| - | /* do not assume printf() works on the decoded data! */ |
| - | printf("Decoded: "); |
| - | /* ... */ |
| - | curl_free(decoded); |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Since 7.15.4, \fIcurl_easy_unescape(3)\fP should be used. This function might |
| - | be removed in a future release. |
| - | .SH RETURN VALUE |
| - | A pointer to a null-terminated string or NULL if it failed. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_escape (3), |
| - | .BR curl_easy_unescape (3), |
| - | .BR curl_free (3), |
| - | .BR RFC 2396 |
| @@ -0,0 +1,65 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_unescape |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - RFC 2396 |
| + | - curl_easy_escape (3) |
| + | - curl_easy_unescape (3) |
| + | - curl_free (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_unescape - URL decodes the given string |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | char *curl_unescape(const char *input, int length); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Obsolete function. Use curl_easy_unescape(3) instead. |
| + | |
| + | This function converts the URL encoded string **input** to a "plain string" |
| + | and return that as a new allocated string. All input characters that are URL |
| + | encoded (%XX where XX is a two-digit hexadecimal number) are converted to |
| + | their plain text versions. |
| + | |
| + | If the **length** argument is set to 0, curl_unescape(3) calls |
| + | strlen() on **input** to find out the size. |
| + | |
| + | You must curl_free(3) the returned string when you are done with it. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | char *decoded = curl_unescape("%63%75%72%6c", 12); |
| + | if(decoded) { |
| + | /* do not assume printf() works on the decoded data */ |
| + | printf("Decoded: "); |
| + | /* ... */ |
| + | curl_free(decoded); |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Since 7.15.4, curl_easy_unescape(3) should be used. This function might |
| + | be removed in a future release. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | A pointer to a null-terminated string or NULL if it failed. |
| @@ -1,69 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_url 3 "6 Aug 2018" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_url - returns a new URL handle |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLU *curl_url(); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function allocates a URL object and returns a \fICURLU\fP handle for it, |
| - | to be used as input to all other URL API functions. |
| - | |
| - | This is a handle to a URL object that holds or can hold URL components for a |
| - | single URL. When the object is first created, there is of course no components |
| - | stored. They are then set in the object with the \fIcurl_url_set(3)\fP |
| - | function. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLUcode rc; |
| - | CURLU *url = curl_url(); |
| - | rc = curl_url_set(url, CURLUPART_URL, "https://example.com", 0); |
| - | if(!rc) { |
| - | char *scheme; |
| - | rc = curl_url_get(url, CURLUPART_SCHEME, &scheme, 0); |
| - | if(!rc) { |
| - | printf("the scheme is %s\\n", scheme); |
| - | curl_free(scheme); |
| - | } |
| - | curl_url_cleanup(url); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.62.0 |
| - | .SH RETURN VALUE |
| - | Returns a \fBCURLU *\fP if successful, or NULL if out of memory. |
| - | .SH "SEE ALSO" |
| - | .BR curl_url_cleanup (3), |
| - | .BR curl_url_dup (3), |
| - | .BR curl_url_get (3), |
| - | .BR curl_url_set (3), |
| - | .BR curl_url_strerror (3), |
| - | .BR CURLOPT_CURLU (3) |
| @@ -0,0 +1,64 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_url |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CURLU (3) |
| + | - curl_url_cleanup (3) |
| + | - curl_url_dup (3) |
| + | - curl_url_get (3) |
| + | - curl_url_set (3) |
| + | - curl_url_strerror (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_url - returns a new URL handle |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLU *curl_url(); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function allocates a URL object and returns a *CURLU* handle for it, |
| + | to be used as input to all other URL API functions. |
| + | |
| + | This is a handle to a URL object that holds or can hold URL components for a |
| + | single URL. When the object is first created, there is of course no components |
| + | stored. They are then set in the object with the curl_url_set(3) |
| + | function. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLUcode rc; |
| + | CURLU *url = curl_url(); |
| + | rc = curl_url_set(url, CURLUPART_URL, "https://example.com", 0); |
| + | if(!rc) { |
| + | char *scheme; |
| + | rc = curl_url_get(url, CURLUPART_SCHEME, &scheme, 0); |
| + | if(!rc) { |
| + | printf("the scheme is %s\n", scheme); |
| + | curl_free(scheme); |
| + | } |
| + | curl_url_cleanup(url); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.62.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns a **CURLU *** if successful, or NULL if out of memory. |
| @@ -1,56 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_url_cleanup 3 "6 Aug 2018" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_url_cleanup - free the URL handle |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | void curl_url_cleanup(CURLU *handle); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Frees all the resources associated with the given \fICURLU\fP handle! |
| - | |
| - | Passing in a NULL pointer in \fIhandle\fP makes this function return |
| - | immediately with no action. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLU *url = curl_url(); |
| - | curl_url_set(url, CURLUPART_URL, "https://example.com", 0); |
| - | curl_url_cleanup(url); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.62.0 |
| - | .SH RETURN VALUE |
| - | none |
| - | .SH "SEE ALSO" |
| - | .BR curl_url_dup (3), |
| - | .BR curl_url (3), |
| - | .BR curl_url_set (3), |
| - | .BR curl_url_get (3), |
| - | .BR CURLOPT_CURLU (3) |
| @@ -0,0 +1,51 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_url_cleanup |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CURLU (3) |
| + | - curl_url (3) |
| + | - curl_url_dup (3) |
| + | - curl_url_get (3) |
| + | - curl_url_set (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_url_cleanup - free the URL handle |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | void curl_url_cleanup(CURLU *handle); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Frees all the resources associated with the given *CURLU* handle! |
| + | |
| + | Passing in a NULL pointer in *handle* makes this function return |
| + | immediately with no action. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLU *url = curl_url(); |
| + | curl_url_set(url, CURLUPART_URL, "https://example.com", 0); |
| + | curl_url_cleanup(url); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.62.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | none |
| @@ -1,61 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_url_dup 3 "6 Aug 2018" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_url_dup - duplicate a URL handle |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLU *curl_url_dup(const CURLU *inhandle); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Duplicates the URL object the input \fICURLU\fP \fIinhandle\fP identifies and |
| - | returns a pointer to the copy as a new \fICURLU\fP handle. The new handle also |
| - | needs to be freed with \fIcurl_url_cleanup(3)\fP. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLUcode rc; |
| - | CURLU *url = curl_url(); |
| - | CURLU *url2; |
| - | rc = curl_url_set(url, CURLUPART_URL, "https://example.com", 0); |
| - | if(!rc) { |
| - | url2 = curl_url_dup(url); /* clone it! */ |
| - | curl_url_cleanup(url2); |
| - | } |
| - | curl_url_cleanup(url); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.62.0 |
| - | .SH RETURN VALUE |
| - | Returns a new handle or NULL if out of memory. |
| - | .SH "SEE ALSO" |
| - | .BR curl_url (3), |
| - | .BR curl_url_cleanup (3), |
| - | .BR curl_url_get (3), |
| - | .BR curl_url_set (3), |
| - | .BR CURLOPT_CURLU (3) |
| @@ -0,0 +1,56 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_url_dup |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CURLU (3) |
| + | - curl_url (3) |
| + | - curl_url_cleanup (3) |
| + | - curl_url_get (3) |
| + | - curl_url_set (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_url_dup - duplicate a URL handle |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLU *curl_url_dup(const CURLU *inhandle); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Duplicates the URL object the input *CURLU* *inhandle* identifies and |
| + | returns a pointer to the copy as a new *CURLU* handle. The new handle also |
| + | needs to be freed with curl_url_cleanup(3). |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLUcode rc; |
| + | CURLU *url = curl_url(); |
| + | CURLU *url2; |
| + | rc = curl_url_set(url, CURLUPART_URL, "https://example.com", 0); |
| + | if(!rc) { |
| + | url2 = curl_url_dup(url); /* clone it! */ |
| + | curl_url_cleanup(url2); |
| + | } |
| + | curl_url_cleanup(url); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.62.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns a new handle or NULL if out of memory. |
| @@ -1,62 +1,68 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_url_get 3 "6 Aug 2018" "libcurl" "libcurl" |
| - | .SH NAME |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_url_get |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CURLU (3) |
| + | - curl_url (3) |
| + | - curl_url_cleanup (3) |
| + | - curl_url_dup (3) |
| + | - curl_url_set (3) |
| + | - curl_url_strerror (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| curl_url_get - extract a part from a URL | |
| - | .SH SYNOPSIS |
| - | .nf |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| CURLUcode curl_url_get(const CURLU *url, | |
| CURLUPart part, | |
| char **content, | |
| unsigned int flags); | |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Given a \fIurl\fP handle of a URL object, this function extracts an individual |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Given a *url* handle of a URL object, this function extracts an individual |
| piece or the full URL from it. | |
| - | The \fIpart\fP argument specifies which part to extract (see list below) and |
| - | \fIcontent\fP points to a 'char *' to get updated to point to a newly |
| + | The *part* argument specifies which part to extract (see list below) and |
| + | *content* points to a 'char *' to get updated to point to a newly |
| allocated string with the contents. | |
| - | The \fIflags\fP argument is a bitmask with individual features. |
| + | The *flags* argument is a bitmask with individual features. |
| + | |
| + | The returned content pointer must be freed with curl_free(3) after use. |
| + | |
| + | # FLAGS |
| - | The returned content pointer must be freed with \fIcurl_free(3)\fP after use. |
| - | .SH FLAGS |
| The flags argument is zero, one or more bits set in a bitmask. | |
| - | .IP CURLU_DEFAULT_PORT |
| - | If the handle has no port stored, this option makes \fIcurl_url_get(3)\fP |
| + | |
| + | ## CURLU_DEFAULT_PORT |
| + | |
| + | If the handle has no port stored, this option makes curl_url_get(3) |
| return the default port for the used scheme. | |
| - | .IP CURLU_DEFAULT_SCHEME |
| - | If the handle has no scheme stored, this option makes \fIcurl_url_get(3)\fP |
| + | |
| + | ## CURLU_DEFAULT_SCHEME |
| + | |
| + | If the handle has no scheme stored, this option makes curl_url_get(3) |
| return the default scheme instead of error. | |
| - | .IP CURLU_NO_DEFAULT_PORT |
| - | Instructs \fIcurl_url_get(3)\fP to not return a port number if it matches the |
| + | |
| + | ## CURLU_NO_DEFAULT_PORT |
| + | |
| + | Instructs curl_url_get(3) to not return a port number if it matches the |
| default port for the scheme. | |
| - | .IP CURLU_URLDECODE |
| - | Asks \fIcurl_url_get(3)\fP to URL decode the contents before returning it. It |
| + | |
| + | ## CURLU_URLDECODE |
| + | |
| + | Asks curl_url_get(3) to URL decode the contents before returning it. It |
| does not decode the scheme, the port number or the full URL. | |
| The query component also gets plus-to-space conversion as a bonus when this | |
| @@ -67,84 +73,113 @@ string back with data that could be intended for a particular encoding. | |
| If there are byte values lower than 32 in the decoded string, the get | |
| operation returns an error instead. | |
| - | .IP CURLU_URLENCODE |
| - | If set, \fIcurl_url_get(3)\fP URL encodes the host name part when a full URL |
| + | |
| + | ## CURLU_URLENCODE |
| + | |
| + | If set, curl_url_get(3) URL encodes the host name part when a full URL |
| is retrieved. If not set (default), libcurl returns the URL with the host name | |
| "raw" to support IDN names to appear as-is. IDN host names are typically using | |
| non-ASCII bytes that otherwise gets percent-encoded. | |
| Note that even when not asking for URL encoding, the '%' (byte 37) is URL | |
| encoded to make sure the host name remains valid. | |
| - | .IP CURLU_PUNYCODE |
| - | If set and \fICURLU_URLENCODE\fP is not set, and asked to retrieve the |
| - | \fBCURLUPART_HOST\fP or \fBCURLUPART_URL\fP parts, libcurl returns the host |
| + | |
| + | ## CURLU_PUNYCODE |
| + | |
| + | If set and *CURLU_URLENCODE* is not set, and asked to retrieve the |
| + | **CURLUPART_HOST** or **CURLUPART_URL** parts, libcurl returns the host |
| name in its punycode version if it contains any non-ASCII octets (and is an | |
| IDN name). | |
| If libcurl is built without IDN capabilities, using this bit makes | |
| - | \fIcurl_url_get(3)\fP return \fICURLUE_LACKS_IDN\fP if the host name contains |
| + | curl_url_get(3) return *CURLUE_LACKS_IDN* if the host name contains |
| anything outside the ASCII range. | |
| (Added in curl 7.88.0) | |
| - | .IP CURLU_PUNY2IDN |
| - | If set and asked to retrieve the \fBCURLUPART_HOST\fP or \fBCURLUPART_URL\fP |
| + | |
| + | ## CURLU_PUNY2IDN |
| + | |
| + | If set and asked to retrieve the **CURLUPART_HOST** or **CURLUPART_URL** |
| parts, libcurl returns the host name in its IDN (International Domain Name) | |
| UTF-8 version if it otherwise is a punycode version. If the punycode name | |
| cannot be converted to IDN correctly, libcurl returns | |
| - | \fICURLUE_BAD_HOSTNAME\fP. |
| + | *CURLUE_BAD_HOSTNAME*. |
| If libcurl is built without IDN capabilities, using this bit makes | |
| - | \fIcurl_url_get(3)\fP return \fICURLUE_LACKS_IDN\fP if the host name is using |
| + | curl_url_get(3) return *CURLUE_LACKS_IDN* if the host name is using |
| punycode. | |
| (Added in curl 8.3.0) | |
| - | .SH PARTS |
| - | .IP CURLUPART_URL |
| - | When asked to return the full URL, \fIcurl_url_get(3)\fP returns a normalized |
| + | |
| + | # PARTS |
| + | |
| + | ## CURLUPART_URL |
| + | |
| + | When asked to return the full URL, curl_url_get(3) returns a normalized |
| and possibly cleaned up version using all available URL parts. | |
| - | We advise using the \fICURLU_PUNYCODE\fP option to get the URL as "normalized" |
| + | We advise using the *CURLU_PUNYCODE* option to get the URL as "normalized" |
| as possible since IDN allows host names to be written in many different ways | |
| that still end up the same punycode version. | |
| - | .IP CURLUPART_SCHEME |
| + | |
| + | ## CURLUPART_SCHEME |
| + | |
| Scheme cannot be URL decoded on get. | |
| - | .IP CURLUPART_USER |
| - | .IP CURLUPART_PASSWORD |
| - | .IP CURLUPART_OPTIONS |
| + | |
| + | ## CURLUPART_USER |
| + | |
| + | ## CURLUPART_PASSWORD |
| + | |
| + | ## CURLUPART_OPTIONS |
| + | |
| The options field is an optional field that might follow the password in the | |
| userinfo part. It is only recognized/used when parsing URLs for the following | |
| schemes: pop3, smtp and imap. The URL API still allows users to set and get | |
| this field independently of scheme when not parsing full URLs. | |
| - | .IP CURLUPART_HOST |
| + | |
| + | ## CURLUPART_HOST |
| + | |
| The host name. If it is an IPv6 numeric address, the zone id is not part of it | |
| - | but is provided separately in \fICURLUPART_ZONEID\fP. IPv6 numerical addresses |
| + | but is provided separately in *CURLUPART_ZONEID*. IPv6 numerical addresses |
| are returned within brackets ([]). | |
| IPv6 names are normalized when set, which should make them as short as | |
| possible while maintaining correct syntax. | |
| - | .IP CURLUPART_ZONEID |
| + | |
| + | ## CURLUPART_ZONEID |
| + | |
| If the host name is a numeric IPv6 address, this field might also be set. | |
| - | .IP CURLUPART_PORT |
| + | |
| + | ## CURLUPART_PORT |
| + | |
| A port cannot be URL decoded on get. This number is returned in a string just | |
| like all other parts. That string is guaranteed to hold a valid port number in | |
| ASCII using base 10. | |
| - | .IP CURLUPART_PATH |
| - | The \fIpart\fP is always at least a slash ('/') even if no path was supplied |
| + | |
| + | ## CURLUPART_PATH |
| + | |
| + | The *part* is always at least a slash ('/') even if no path was supplied |
| in the URL. A URL path always starts with a slash. | |
| - | .IP CURLUPART_QUERY |
| + | |
| + | ## CURLUPART_QUERY |
| + | |
| The initial question mark that denotes the beginning of the query part is a | |
| - | delimiter only. It is not part of the query contents. |
| + | delimiter only. It is not part of the query contents. |
| - | A not-present query returns \fIpart\fP set to NULL. |
| - | A zero-length query returns \fIpart\fP as a zero-length string. |
| + | A not-present query returns *part* set to NULL. |
| + | A zero-length query returns *part* as a zero-length string. |
| The query part gets pluses converted to space when asked to URL decode on get | |
| with the CURLU_URLDECODE bit. | |
| - | .IP CURLUPART_FRAGMENT |
| + | |
| + | ## CURLUPART_FRAGMENT |
| + | |
| The initial hash sign that denotes the beginning of the fragment is a | |
| delimiter only. It is not part of the fragment contents. | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| int main(void) | |
| { | |
| CURLUcode rc; | |
| @@ -154,25 +189,22 @@ int main(void) | |
| char *scheme; | |
| rc = curl_url_get(url, CURLUPART_SCHEME, &scheme, 0); | |
| if(!rc) { | |
| - | printf("the scheme is %s\\n", scheme); |
| + | printf("the scheme is %s\n", scheme); |
| curl_free(scheme); | |
| } | |
| curl_url_cleanup(url); | |
| } | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| Added in 7.62.0. CURLUPART_ZONEID was added in 7.65.0. | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| Returns a CURLUcode error value, which is CURLUE_OK (0) if everything went | |
| - | fine. See the \fIlibcurl-errors(3)\fP man page for the full list with |
| + | fine. See the libcurl-errors(3) man page for the full list with |
| descriptions. | |
| If this function returns an error, no URL part is returned. | |
| - | .SH "SEE ALSO" |
| - | .BR curl_url (3), |
| - | .BR curl_url_cleanup (3), |
| - | .BR curl_url_dup (3), |
| - | .BR curl_url_set (3), |
| - | .BR curl_url_strerror (3), |
| - | .BR CURLOPT_CURLU (3) |
| @@ -1,64 +1,60 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_url_set 3 "6 Aug 2018" "libcurl" "libcurl" |
| - | .SH NAME |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_url_set |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CURLU (3) |
| + | - curl_url (3) |
| + | - curl_url_cleanup (3) |
| + | - curl_url_dup (3) |
| + | - curl_url_get (3) |
| + | - curl_url_strerror (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| curl_url_set - set a URL part | |
| - | .SH SYNOPSIS |
| - | .nf |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| CURLUcode curl_url_set(CURLU *url, | |
| CURLUPart part, | |
| const char *content, | |
| unsigned int flags); | |
| - | .fi |
| - | .SH DESCRIPTION |
| - | The \fIurl\fP handle to work on, passed in as the first argument, must be a |
| - | handle previously created by \fIcurl_url(3)\fP or \fIcurl_url_dup(3)\fP. |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | The *url* handle to work on, passed in as the first argument, must be a |
| + | handle previously created by curl_url(3) or curl_url_dup(3). |
| This function sets or updates individual URL components, or parts, held by the | |
| URL object the handle identifies. | |
| - | The \fIpart\fP argument should identify the particular URL part (see list |
| - | below) to set or change, with \fIcontent\fP pointing to a null-terminated |
| + | The *part* argument should identify the particular URL part (see list |
| + | below) to set or change, with *content* pointing to a null-terminated |
| string with the new contents for that URL part. The contents should be in the | |
| form and encoding they would use in a URL: URL encoded. | |
| When setting part in the URL object that was previously already set, it | |
| replaces the data that was previously stored for that part with the new | |
| - | \fIcontent\fP. |
| + | *content*. |
| - | The caller does not have to keep \fIcontent\fP around after a successful call |
| + | The caller does not have to keep *content* around after a successful call |
| as this function copies the content. | |
| Setting a part to a NULL pointer removes that part's contents from the | |
| - | \fICURLU\fP handle. |
| + | *CURLU* handle. |
| By default, this API only accepts URLs using schemes for protocols that are | |
| supported built-in. To make libcurl parse URLs generically even for schemes it | |
| - | does not know about, the \fBCURLU_NON_SUPPORT_SCHEME\fP flags bit must be |
| - | set. Otherwise, this function returns \fICURLUE_UNSUPPORTED_SCHEME\fP for URL |
| + | does not know about, the **CURLU_NON_SUPPORT_SCHEME** flags bit must be |
| + | set. Otherwise, this function returns *CURLUE_UNSUPPORTED_SCHEME* for URL |
| schemes it does not recognize. | |
| This function has an 8 MB maximum length limit for all provided input strings. | |
| @@ -70,71 +66,100 @@ accept data that would not be otherwise possible to set in the string when it | |
| gets populated as a result of a full URL parse. Beware. If done so, extracting | |
| a full URL later on from such components might render an invalid URL. | |
| - | The \fIflags\fP argument is a bitmask with independent features. |
| - | .SH PARTS |
| - | .IP CURLUPART_URL |
| + | The *flags* argument is a bitmask with independent features. |
| + | |
| + | # PARTS |
| + | |
| + | ## CURLUPART_URL |
| + | |
| Allows the full URL of the handle to be replaced. If the handle already is | |
| populated with a URL, the new URL can be relative to the previous. | |
| When successfully setting a new URL, relative or absolute, the handle contents | |
| is replaced with the components of the newly set URL. | |
| - | Pass a pointer to a null-terminated string to the \fIurl\fP parameter. The |
| + | Pass a pointer to a null-terminated string to the *url* parameter. The |
| string must point to a correctly formatted "RFC 3986+" URL or be a NULL | |
| pointer. | |
| - | Unless \fICURLU_NO_AUTHORITY\fP is set, a blank host name is not allowed in |
| + | Unless *CURLU_NO_AUTHORITY* is set, a blank host name is not allowed in |
| the URL. | |
| - | .IP CURLUPART_SCHEME |
| + | |
| + | ## CURLUPART_SCHEME |
| + | |
| Scheme cannot be URL decoded on set. libcurl only accepts setting schemes up | |
| to 40 bytes long. | |
| - | .IP CURLUPART_USER |
| - | .IP CURLUPART_PASSWORD |
| - | .IP CURLUPART_OPTIONS |
| + | |
| + | ## CURLUPART_USER |
| + | |
| + | ## CURLUPART_PASSWORD |
| + | |
| + | ## CURLUPART_OPTIONS |
| + | |
| The options field is an optional field that might follow the password in the | |
| userinfo part. It is only recognized/used when parsing URLs for the following | |
| schemes: pop3, smtp and imap. This function however allows users to | |
| independently set this field. | |
| - | .IP CURLUPART_HOST |
| + | |
| + | ## CURLUPART_HOST |
| + | |
| The host name. If it is International Domain Name (IDN) the string must then | |
| be encoded as your locale says or UTF-8 (when WinIDN is used). If it is a | |
| bracketed IPv6 numeric address it may contain a zone id (or you can use | |
| - | \fICURLUPART_ZONEID\fP). |
| + | *CURLUPART_ZONEID*). |
| + | |
| + | Unless *CURLU_NO_AUTHORITY* is set, a blank host name is not allowed to set. |
| + | |
| + | ## CURLUPART_ZONEID |
| - | Unless \fICURLU_NO_AUTHORITY\fP is set, a blank host name is not allowed to set. |
| - | .IP CURLUPART_ZONEID |
| If the host name is a numeric IPv6 address, this field can also be set. | |
| - | .IP CURLUPART_PORT |
| + | |
| + | ## CURLUPART_PORT |
| + | |
| The port number cannot be URL encoded on set. The given port number is | |
| provided as a string and the decimal number in it must be between 0 and | |
| 65535. Anything else returns an error. | |
| - | .IP CURLUPART_PATH |
| + | |
| + | ## CURLUPART_PATH |
| + | |
| If a path is set in the URL without a leading slash, a slash is prepended | |
| automatically. | |
| - | .IP CURLUPART_QUERY |
| + | |
| + | ## CURLUPART_QUERY |
| + | |
| The query part gets spaces converted to pluses when asked to URL encode on set | |
| - | with the \fICURLU_URLENCODE\fP bit. |
| + | with the *CURLU_URLENCODE* bit. |
| - | If used together with the \fICURLU_APPENDQUERY\fP bit, the provided part is |
| + | If used together with the *CURLU_APPENDQUERY* bit, the provided part is |
| appended on the end of the existing query. | |
| The question mark in the URL is not part of the actual query contents. | |
| - | .IP CURLUPART_FRAGMENT |
| + | |
| + | ## CURLUPART_FRAGMENT |
| + | |
| The hash sign in the URL is not part of the actual fragment contents. | |
| - | .SH FLAGS |
| + | |
| + | # FLAGS |
| + | |
| The flags argument is zero, one or more bits set in a bitmask. | |
| - | .IP CURLU_APPENDQUERY |
| - | Can be used when setting the \fICURLUPART_QUERY\fP component. The provided new |
| + | |
| + | ## CURLU_APPENDQUERY |
| + | |
| + | Can be used when setting the *CURLUPART_QUERY* component. The provided new |
| part is then appended at the end of the existing query - and if the previous | |
| part did not end with an ampersand (&), an ampersand gets inserted before the | |
| new appended part. | |
| - | When \fICURLU_APPENDQUERY\fP is used together with \fICURLU_URLENCODE\fP, the |
| + | When *CURLU_APPENDQUERY* is used together with *CURLU_URLENCODE*, the |
| first '=' symbol is not URL encoded. | |
| - | .IP CURLU_NON_SUPPORT_SCHEME |
| - | If set, allows \fIcurl_url_set(3)\fP to set a non-supported scheme. |
| - | .IP CURLU_URLENCODE |
| - | When set, \fIcurl_url_set(3)\fP URL encodes the part on entry, except for |
| + | |
| + | ## CURLU_NON_SUPPORT_SCHEME |
| + | |
| + | If set, allows curl_url_set(3) to set a non-supported scheme. |
| + | |
| + | ## CURLU_URLENCODE |
| + | |
| + | When set, curl_url_set(3) URL encodes the part on entry, except for |
| scheme, port and URL. | |
| When setting the path component with URL encoding enabled, the slash character | |
| @@ -144,41 +169,55 @@ The query part gets space-to-plus conversion before the URL conversion. | |
| This URL encoding is charset unaware and converts the input in a byte-by-byte | |
| manner. | |
| - | .IP CURLU_DEFAULT_SCHEME |
| + | |
| + | ## CURLU_DEFAULT_SCHEME |
| + | |
| If set, allows the URL to be set without a scheme and then sets that to the | |
| - | default scheme: HTTPS. Overrides the \fICURLU_GUESS_SCHEME\fP option if both |
| + | default scheme: HTTPS. Overrides the *CURLU_GUESS_SCHEME* option if both |
| are set. | |
| - | .IP CURLU_GUESS_SCHEME |
| + | |
| + | ## CURLU_GUESS_SCHEME |
| + | |
| If set, allows the URL to be set without a scheme and it instead "guesses" | |
| which scheme that was intended based on the host name. If the outermost | |
| subdomain name matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that scheme | |
| is used, otherwise it picks HTTP. Conflicts with the | |
| - | \fICURLU_DEFAULT_SCHEME\fP option which takes precedence if both are set. |
| - | .IP CURLU_NO_AUTHORITY |
| + | *CURLU_DEFAULT_SCHEME* option which takes precedence if both are set. |
| + | |
| + | ## CURLU_NO_AUTHORITY |
| + | |
| If set, skips authority checks. The RFC allows individual schemes to omit the | |
| host part (normally the only mandatory part of the authority), but libcurl | |
| cannot know whether this is permitted for custom schemes. Specifying the flag | |
| permits empty authority sections, similar to how file scheme is handled. | |
| - | .IP CURLU_PATH_AS_IS |
| - | When set for \fBCURLUPART_URL\fP, this skips the normalization of the |
| + | |
| + | ## CURLU_PATH_AS_IS |
| + | |
| + | When set for **CURLUPART_URL**, this skips the normalization of the |
| path. That is the procedure where libcurl otherwise removes sequences of | |
| dot-slash and dot-dot etc. The same option used for transfers is called | |
| - | \fICURLOPT_PATH_AS_IS(3)\fP. |
| - | .IP CURLU_ALLOW_SPACE |
| + | CURLOPT_PATH_AS_IS(3). |
| + | |
| + | ## CURLU_ALLOW_SPACE |
| + | |
| If set, the URL parser allows space (ASCII 32) where possible. The URL syntax | |
| does normally not allow spaces anywhere, but they should be encoded as %20 | |
| or '+'. When spaces are allowed, they are still not allowed in the scheme. | |
| When space is used and allowed in a URL, it is stored as-is unless | |
| - | \fICURLU_URLENCODE\fP is also set, which then makes libcurl URL encode the |
| + | *CURLU_URLENCODE* is also set, which then makes libcurl URL encode the |
| space before stored. This affects how the URL is constructed when | |
| - | \fIcurl_url_get(3)\fP is subsequently used to extract the full URL or |
| + | curl_url_get(3) is subsequently used to extract the full URL or |
| individual parts. (Added in 7.78.0) | |
| - | .IP CURLU_DISALLOW_USER |
| + | |
| + | ## CURLU_DISALLOW_USER |
| + | |
| If set, the URL parser does not accept embedded credentials for the | |
| - | \fBCURLUPART_URL\fP, and instead returns \fBCURLUE_USER_NOT_ALLOWED\fP for |
| + | **CURLUPART_URL**, and instead returns **CURLUE_USER_NOT_ALLOWED** for |
| such URLs. | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| int main(void) | |
| { | |
| CURLUcode rc; | |
| @@ -190,22 +229,19 @@ int main(void) | |
| } | |
| curl_url_cleanup(url); | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| Added in 7.62.0. CURLUPART_ZONEID was added in 7.65.0. | |
| - | .SH RETURN VALUE |
| - | Returns a \fICURLUcode\fP error value, which is CURLUE_OK (0) if everything |
| - | went fine. See the \fIlibcurl-errors(3)\fP man page for the full list with |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns a *CURLUcode* error value, which is CURLUE_OK (0) if everything |
| + | went fine. See the libcurl-errors(3) man page for the full list with |
| descriptions. | |
| - | The input string passed to \fIcurl_url_set(3)\fP must be shorter than eight |
| - | million bytes. Otherwise this function returns \fBCURLUE_MALFORMED_INPUT\fP. |
| + | The input string passed to curl_url_set(3) must be shorter than eight |
| + | million bytes. Otherwise this function returns **CURLUE_MALFORMED_INPUT**. |
| If this function returns an error, no URL part is set. | |
| - | .SH "SEE ALSO" |
| - | .BR curl_url (3), |
| - | .BR curl_url_cleanup (3), |
| - | .BR curl_url_dup (3), |
| - | .BR curl_url_get (3), |
| - | .BR curl_url_strerror (3), |
| - | .BR CURLOPT_CURLU (3) |
| @@ -1,58 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_url_strerror 3 "21 Aug 2021" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_url_strerror - return string describing error code |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | const char *curl_url_strerror(CURLUcode errornum); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function returns a string describing the CURLUcode error code passed in |
| - | the argument \fIerrornum\fP. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLUcode rc; |
| - | CURLU *url = curl_url(); |
| - | rc = curl_url_set(url, CURLUPART_URL, "https://example.com", 0); |
| - | if(rc) |
| - | printf("URL error: %s\\n", curl_url_strerror(rc)); |
| - | curl_url_cleanup(url); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.80.0 |
| - | .SH RETURN VALUE |
| - | A pointer to a null-terminated string. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_strerror (3), |
| - | .BR curl_multi_strerror (3), |
| - | .BR curl_share_strerror (3), |
| - | .BR curl_url_get (3), |
| - | .BR curl_url_set (3), |
| - | .BR libcurl-errors (3) |
| @@ -0,0 +1,53 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_url_strerror |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_strerror (3) |
| + | - curl_multi_strerror (3) |
| + | - curl_share_strerror (3) |
| + | - curl_url_get (3) |
| + | - curl_url_set (3) |
| + | - libcurl-errors (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_url_strerror - return string describing error code |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | const char *curl_url_strerror(CURLUcode errornum); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function returns a string describing the CURLUcode error code passed in |
| + | the argument *errornum*. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLUcode rc; |
| + | CURLU *url = curl_url(); |
| + | rc = curl_url_set(url, CURLUPART_URL, "https://example.com", 0); |
| + | if(rc) |
| + | printf("URL error: %s\n", curl_url_strerror(rc)); |
| + | curl_url_cleanup(url); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.80.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | A pointer to a null-terminated string. |
| @@ -1,52 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH curl_version 3 "5 March 2001" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_version - returns the libcurl version string |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | char *curl_version(); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Returns a human readable string with the version number of libcurl and some of |
| - | its important components (like OpenSSL version). |
| - | |
| - | We recommend using \fIcurl_version_info(3)\fP instead! |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | printf("libcurl version %s\\n", curl_version()); |
| - | } |
| - | .fi |
| - | |
| - | .SH AVAILABILITY |
| - | Always |
| - | .SH RETURN VALUE |
| - | A pointer to a null-terminated string. The string resides in a statically |
| - | allocated buffer and must not be freed by the caller. |
| - | .SH "SEE ALSO" |
| - | .BR curl_version_info (3) |
| @@ -0,0 +1,46 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_version |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_version_info (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_version - returns the libcurl version string |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | char *curl_version(); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Returns a human readable string with the version number of libcurl and some of |
| + | its important components (like OpenSSL version). |
| + | |
| + | We recommend using curl_version_info(3) instead! |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | printf("libcurl version %s\n", curl_version()); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Always |
| + | |
| + | # RETURN VALUE |
| + | |
| + | A pointer to a null-terminated string. The string resides in a statically |
| + | allocated buffer and must not be freed by the caller. |
| @@ -1,57 +1,47 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH curl_version_info 3 "2 Nov 2014" "libcurl" "libcurl" |
| - | .SH NAME |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_version_info |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_version (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| curl_version_info - returns runtime libcurl version info | |
| - | .SH SYNOPSIS |
| - | .nf |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| curl_version_info_data *curl_version_info(CURLversion age); | |
| - | .fi |
| - | .SH DESCRIPTION |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| Returns a pointer to a filled in static struct with information about various | |
| - | features in the running version of libcurl. \fIage\fP should be set to the |
| + | features in the running version of libcurl. *age* should be set to the |
| version of this functionality by the time you write your program. This way, | |
| libcurl always returns a proper struct that your program understands, while | |
| - | programs in the future might get a different struct. \fBCURLVERSION_NOW\fP is |
| + | programs in the future might get a different struct. **CURLVERSION_NOW** is |
| the most recent one for the library you have installed: | |
| - | .nf |
| + | ~~~c |
| data = curl_version_info(CURLVERSION_NOW); | |
| - | .fi |
| + | ~~~ |
| Applications should use this information to judge if things are possible to do | |
| or not, instead of using compile-time checks, as dynamic/DLL libraries can be | |
| changed independent of applications. | |
| This function can alter the returned static data as long as | |
| - | \fIcurl_global_init(3)\fP has not been called. It is therefore not thread-safe |
| + | curl_global_init(3) has not been called. It is therefore not thread-safe |
| before libcurl initialization occurs. | |
| The curl_version_info_data struct looks like this | |
| - | .nf |
| + | ~~~c |
| typedef struct { | |
| CURLversion age; /* see description below */ | |
| @@ -113,211 +103,279 @@ typedef struct { | |
| below exist */ | |
| const char *const *feature_names; /* Feature names. */ | |
| } curl_version_info_data; | |
| - | .fi |
| + | ~~~ |
| - | \fIage\fP describes what the age of this struct is. The number depends on how |
| + | *age* describes what the age of this struct is. The number depends on how |
| new the libcurl you are using is. You are however guaranteed to get a struct | |
| that you have a matching struct for in the header, as you tell libcurl your | |
| "age" with the input argument. | |
| - | \fIversion\fP is just an ascii string for the libcurl version. |
| + | *version* is just an ascii string for the libcurl version. |
| - | \fIversion_num\fP is a 24 bit number created like this: <8 bits major number> |
| + | *version_num* is a 24 bit number created like this: <8 bits major number> |
| | <8 bits minor number> | <8 bits patch number>. Version 7.9.8 is therefore | |
| returned as 0x070908. | |
| - | \fIhost\fP is an ascii string showing what host information that this libcurl |
| + | *host* is an ascii string showing what host information that this libcurl |
| was built for. As discovered by a configure script or set by the build | |
| environment. | |
| - | \fIfeatures\fP is a bit mask representing available features. It can |
| - | have none, one or more bits set. |
| - | The use of this field is deprecated: use \fIfeature_names\fP instead. |
| - | The feature names description below lists the associated bits. |
| + | *features* is a bit mask representing available features. It can have none, |
| + | one or more bits set. The use of this field is deprecated: use |
| + | *feature_names* instead. The feature names description below lists the |
| + | associated bits. |
| - | \fIfeature_names\fP is a pointer to an array of string pointers, containing the |
| + | *feature_names* is a pointer to an array of string pointers, containing the |
| names of the features that libcurl supports. The array is terminated by a NULL | |
| - | entry. Currently defined names are: |
| - | .RS |
| - | .IP """alt-svc""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_ALTSVC |
| + | entry. See the list of features names below. |
| + | |
| + | *ssl_version* is an ASCII string for the TLS library name + version |
| + | used. If libcurl has no SSL support, this is NULL. For example "Schannel", |
| + | &"Secure Transport" or "OpenSSL/1.1.0g". |
| + | |
| + | *ssl_version_num* is always 0. |
| + | |
| + | *libz_version* is an ASCII string (there is no numerical version). If |
| + | libcurl has no libz support, this is NULL. |
| + | |
| + | *protocols* is a pointer to an array of char * pointers, containing the |
| + | names protocols that libcurl supports (using lowercase letters). The protocol |
| + | names are the same as would be used in URLs. The array is terminated by a NULL |
| + | entry. |
| + | |
| + | # FEATURES |
| + | |
| + | ## alt-svc |
| + | |
| + | *features* mask bit: CURL_VERSION_ALTSVC |
| HTTP Alt-Svc parsing and the associated options (Added in 7.64.1) | |
| - | .IP """AsynchDNS""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_ASYNCHDNS |
| + | |
| + | ## AsynchDNS |
| + | |
| + | *features* mask bit: CURL_VERSION_ASYNCHDNS |
| libcurl was built with support for asynchronous name lookups, which allows | |
| more exact timeouts (even on Windows) and less blocking when using the multi | |
| interface. (added in 7.10.7) | |
| - | .IP """brotli""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_BROTLI |
| + | |
| + | ## brotli |
| + | |
| + | *features* mask bit: CURL_VERSION_BROTLI |
| supports HTTP Brotli content encoding using libbrotlidec (Added in 7.57.0) | |
| - | .IP """Debug""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_DEBUG |
| + | |
| + | ## Debug |
| + | |
| + | *features* mask bit: CURL_VERSION_DEBUG |
| libcurl was built with debug capabilities (added in 7.10.6) | |
| - | .IP """gsasl""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_GSASL |
| + | |
| + | ## gsasl |
| + | |
| + | *features* mask bit: CURL_VERSION_GSASL |
| libcurl was built with libgsasl and thus with some extra SCRAM-SHA | |
| authentication methods. (added in 7.76.0) | |
| - | .IP """GSS-API""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_GSSAPI |
| + | |
| + | ## GSS-API |
| + | |
| + | *features* mask bit: CURL_VERSION_GSSAPI |
| libcurl was built with support for GSS-API. This makes libcurl use provided | |
| functions for Kerberos and SPNEGO authentication. It also allows libcurl | |
| to use the current user credentials without the app having to pass them on. | |
| (Added in 7.38.0) | |
| - | .IP """HSTS""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_HSTS |
| + | |
| + | ## HSTS |
| + | |
| + | *features* mask bit: CURL_VERSION_HSTS |
| libcurl was built with support for HSTS (HTTP Strict Transport Security) | |
| (Added in 7.74.0) | |
| - | .IP """HTTP2""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_HTTP2 |
| + | |
| + | ## HTTP2 |
| + | |
| + | *features* mask bit: CURL_VERSION_HTTP2 |
| libcurl was built with support for HTTP2. | |
| (Added in 7.33.0) | |
| - | .IP """HTTP3""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_HTTP3 |
| + | |
| + | ## HTTP3 |
| + | |
| + | *features* mask bit: CURL_VERSION_HTTP3 |
| HTTP/3 and QUIC support are built-in (Added in 7.66.0) | |
| - | .IP """HTTPS-proxy""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_HTTPS_PROXY |
| + | |
| + | ## HTTPS-proxy |
| + | |
| + | *features* mask bit: CURL_VERSION_HTTPS_PROXY |
| libcurl was built with support for HTTPS-proxy. | |
| (Added in 7.52.0) | |
| - | .IP """IDN""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_IDN |
| + | |
| + | ## IDN |
| + | |
| + | *features* mask bit: CURL_VERSION_IDN |
| libcurl was built with support for IDNA, domain names with international | |
| letters. (Added in 7.12.0) | |
| - | .IP """IPv6""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_IPV6 |
| + | |
| + | ## IPv6 |
| + | |
| + | *features* mask bit: CURL_VERSION_IPV6 |
| supports IPv6 | |
| - | .IP """Kerberos""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_KERBEROS5 |
| + | |
| + | ## Kerberos |
| + | |
| + | *features* mask bit: CURL_VERSION_KERBEROS5 |
| supports Kerberos V5 authentication for FTP, IMAP, LDAP, POP3, SMTP and | |
| SOCKSv5 proxy. (Added in 7.40.0) | |
| - | .IP """Largefile""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_LARGEFILE |
| + | |
| + | ## Largefile |
| + | |
| + | *features* mask bit: CURL_VERSION_LARGEFILE |
| libcurl was built with support for large files. (Added in 7.11.1) | |
| - | .IP """libz""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_LIBZ |
| + | |
| + | ## libz |
| + | |
| + | *features* mask bit: CURL_VERSION_LIBZ |
| supports HTTP deflate using libz (Added in 7.10) | |
| - | .IP """MultiSSL""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_MULTI_SSL |
| + | |
| + | ## MultiSSL |
| + | |
| + | *features* mask bit: CURL_VERSION_MULTI_SSL |
| libcurl was built with multiple SSL backends. For details, see | |
| - | \fIcurl_global_sslset(3)\fP. |
| + | curl_global_sslset(3). |
| (Added in 7.56.0) | |
| - | .IP """NTLM""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_NTLM |
| + | |
| + | ## NTLM |
| + | |
| + | *features* mask bit: CURL_VERSION_NTLM |
| supports HTTP NTLM (added in 7.10.6) | |
| - | .IP """NTLM_WB""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_NTLM_WB |
| + | |
| + | ## NTLM_WB |
| + | |
| + | *features* mask bit: CURL_VERSION_NTLM_WB |
| libcurl was built with support for NTLM delegation to a winbind helper. | |
| (Added in 7.22.0) | |
| - | .IP """PSL""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_PSL |
| + | |
| + | ## PSL |
| + | |
| + | *features* mask bit: CURL_VERSION_PSL |
| libcurl was built with support for Mozilla's Public Suffix List. This makes | |
| libcurl ignore cookies with a domain that is on the list. | |
| (Added in 7.47.0) | |
| - | .IP """SPNEGO""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_SPNEGO |
| + | |
| + | ## SPNEGO |
| + | |
| + | *features* mask bit: CURL_VERSION_SPNEGO |
| libcurl was built with support for SPNEGO authentication (Simple and Protected | |
| GSS-API Negotiation Mechanism, defined in RFC 2478.) (added in 7.10.8) | |
| - | .IP """SSL""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_SSL |
| + | |
| + | ## SSL |
| + | |
| + | *features* mask bit: CURL_VERSION_SSL |
| supports SSL (HTTPS/FTPS) (Added in 7.10) | |
| - | .IP """SSPI""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_SSPI |
| + | |
| + | ## SSPI |
| + | |
| + | *features* mask bit: CURL_VERSION_SSPI |
| libcurl was built with support for SSPI. This is only available on Windows and | |
| makes libcurl use Windows-provided functions for Kerberos, NTLM, SPNEGO and | |
| Digest authentication. It also allows libcurl to use the current user | |
| credentials without the app having to pass them on. (Added in 7.13.2) | |
| - | .IP """threadsafe""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_THREADSAFE |
| + | |
| + | ## threadsafe |
| + | |
| + | *features* mask bit: CURL_VERSION_THREADSAFE |
| libcurl was built with thread-safety support (Atomic or SRWLOCK) to protect | |
| - | curl initialization. (Added in 7.84.0) See \fIlibcurl-thread(3)\fP |
| - | .IP """TLS-SRP""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_TLSAUTH_SRP |
| + | curl initialization. (Added in 7.84.0) See libcurl-thread(3) |
| + | |
| + | ## TLS-SRP |
| + | |
| + | *features* mask bit: CURL_VERSION_TLSAUTH_SRP |
| libcurl was built with support for TLS-SRP (in one or more of the built-in TLS | |
| backends). (Added in 7.21.4) | |
| - | .IP """TrackMemory""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_CURLDEBUG |
| + | |
| + | ## TrackMemory |
| + | |
| + | *features* mask bit: CURL_VERSION_CURLDEBUG |
| libcurl was built with memory tracking debug capabilities. This is mainly of | |
| interest for libcurl hackers. (added in 7.19.6) | |
| - | .IP """Unicode""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_UNICODE |
| + | |
| + | ## Unicode |
| + | |
| + | *features* mask bit: CURL_VERSION_UNICODE |
| libcurl was built with Unicode support on Windows. This makes non-ASCII | |
| characters work in filenames and options passed to libcurl. (Added in 7.72.0) | |
| - | .IP """UnixSockets""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_UNIX_SOCKETS |
| + | |
| + | ## UnixSockets |
| + | |
| + | *features* mask bit: CURL_VERSION_UNIX_SOCKETS |
| libcurl was built with support for Unix domain sockets. | |
| (Added in 7.40.0) | |
| - | .IP """zstd""" |
| - | \fIfeatures\fP mask bit: CURL_VERSION_ZSTD |
| + | |
| + | ## zstd |
| + | |
| + | *features* mask bit: CURL_VERSION_ZSTD |
| supports HTTP zstd content encoding using zstd library (Added in 7.72.0) | |
| - | .IP none |
| - | \fIfeatures\fP mask bit: CURL_VERSION_CONV |
| + | |
| + | ## no name |
| + | |
| + | *features* mask bit: CURL_VERSION_CONV |
| libcurl was built with support for character conversions, as provided by the | |
| - | CURLOPT_CONV_* callbacks. Always 0 since 7.82.0. (Added in 7.15.4) |
| - | .IP none |
| - | \fIfeatures\fP mask bit: CURL_VERSION_GSSNEGOTIATE |
| + | CURLOPT_CONV_* callbacks. Always 0 since 7.82.0. (Added in 7.15.4, |
| + | deprecated.) |
| + | |
| + | ## no name |
| + | |
| + | *features* mask bit: CURL_VERSION_GSSNEGOTIATE |
| supports HTTP GSS-Negotiate (added in 7.10.6, deprecated in 7.38.0) | |
| - | .IP none |
| - | \fIfeatures\fP mask bit: CURL_VERSION_KERBEROS4 |
| - | supports Kerberos V4 (when using FTP). Legacy bit. Deprecated since 7.33.0. |
| - | .RE |
| + | ## no name |
| - | \fIssl_version\fP is an ASCII string for the TLS library name + version |
| - | used. If libcurl has no SSL support, this is NULL. For example "Schannel", |
| - | \&"Secure Transport" or "OpenSSL/1.1.0g". |
| + | *features* mask bit: CURL_VERSION_KERBEROS4 |
| - | \fIssl_version_num\fP is always 0. |
| + | supports Kerberos V4 (when using FTP). Legacy bit. Deprecated since 7.33.0. |
| - | \fIlibz_version\fP is an ASCII string (there is no numerical version). If |
| - | libcurl has no libz support, this is NULL. |
| + | # EXAMPLE |
| - | \fIprotocols\fP is a pointer to an array of char * pointers, containing the |
| - | names protocols that libcurl supports (using lowercase letters). The protocol |
| - | names are the same as would be used in URLs. The array is terminated by a NULL |
| - | entry. |
| - | .SH EXAMPLE |
| - | .nf |
| + | ~~~c |
| int main(void) | |
| { | |
| curl_version_info_data *ver = curl_version_info(CURLVERSION_NOW); | |
| - | printf("libcurl version %u.%u.%u\\n", |
| + | printf("libcurl version %u.%u.%u\n", |
| (ver->version_num >> 16) & 0xff, | |
| (ver->version_num >> 8) & 0xff, | |
| ver->version_num & 0xff); | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| Added in 7.10 | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| A pointer to a curl_version_info_data struct. | |
| - | .SH "SEE ALSO" |
| - | \fIcurl_version(3)\fP |
| + | curl_version(3) |
| @@ -1,41 +1,35 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH curl_ws_meta 3 "12 Jun 2022" "libcurl" "libcurl" |
| - | .SH NAME |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_ws_meta |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | - curl_ws_recv (3) |
| + | - curl_ws_send (3) |
| + | - libcurl-ws (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| curl_ws_meta - meta data WebSocket information | |
| - | .SH SYNOPSIS |
| - | .nf |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| const struct curl_ws_frame *curl_ws_meta(CURL *curl); | |
| - | .fi |
| - | .SH DESCRIPTION |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| This function call is EXPERIMENTAL. | |
| - | When the write callback (\fICURLOPT_WRITEFUNCTION(3)\fP) is invoked on |
| - | received WebSocket traffic, \fIcurl_ws_meta(3)\fP can be called from within |
| + | When the write callback (CURLOPT_WRITEFUNCTION(3)) is invoked on |
| + | received WebSocket traffic, curl_ws_meta(3) can be called from within |
| the callback to provide additional information about the current frame. | |
| This function only works from within the callback, and only when receiving | |
| @@ -44,45 +38,67 @@ WebSocket data. | |
| This function requires an easy handle as input argument for libcurl to know | |
| what transfer the question is about, but as there is no such pointer provided | |
| to the callback by libcurl itself, applications that want to use | |
| - | \fIcurl_ws_meta(3)\fP need to pass it on to the callback on its own. |
| + | curl_ws_meta(3) need to pass it on to the callback on its own. |
| - | .SH "struct curl_ws_frame" |
| - | .nf |
| + | # struct curl_ws_frame |
| + | |
| + | ~~~c |
| struct curl_ws_frame { | |
| int age; | |
| int flags; | |
| curl_off_t offset; | |
| curl_off_t bytesleft; | |
| }; | |
| - | .fi |
| - | .IP age |
| + | ~~~ |
| + | |
| + | ## age |
| + | |
| This field specify the age of this struct. It is always zero for now. | |
| - | .IP flags |
| + | |
| + | ## flags |
| + | |
| This is a bitmask with individual bits set that describes the WebSocket | |
| data. See the list below. | |
| - | .IP offset |
| + | |
| + | ## offset |
| + | |
| When this frame is a continuation of fragment data already delivered, this is | |
| the offset into the final fragment where this piece belongs. | |
| - | .IP bytesleft |
| - | If this is not a complete fragment, the \fIbytesleft\fP field informs about |
| + | |
| + | ## bytesleft |
| + | |
| + | If this is not a complete fragment, the *bytesleft* field informs about |
| how many additional bytes are expected to arrive before this fragment is | |
| complete. | |
| - | .SH FLAGS |
| - | .IP CURLWS_TEXT |
| + | |
| + | # FLAGS |
| + | |
| + | ## CURLWS_TEXT |
| + | |
| The buffer contains text data. Note that this makes a difference to WebSocket | |
| but libcurl itself does not make any verification of the content or | |
| precautions that you actually receive valid UTF-8 content. | |
| - | .IP CURLWS_BINARY |
| + | |
| + | ## CURLWS_BINARY |
| + | |
| This is binary data. | |
| - | .IP CURLWS_CONT |
| + | |
| + | ## CURLWS_CONT |
| + | |
| This is not the final fragment of the message, it implies that there is | |
| another fragment coming as part of the same message. | |
| - | .IP CURLWS_CLOSE |
| + | |
| + | ## CURLWS_CLOSE |
| + | |
| This transfer is now closed. | |
| - | .IP CURLWS_PING |
| + | |
| + | ## CURLWS_PING |
| + | |
| This as an incoming ping message, that expects a pong response. | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| /* we pass a pointer to this struct to the callback */ | |
| struct customdata { | |
| @@ -96,7 +112,7 @@ static size_t writecb(unsigned char *buffer, | |
| struct customdata *c = (struct customdata *)p; | |
| const struct curl_ws_frame *m = curl_ws_meta(c->easy); | |
| - | printf("flags: %x\\n", m->flags); |
| + | printf("flags: %x\n", m->flags); |
| } | |
| int main(void) | |
| @@ -113,17 +129,15 @@ int main(void) | |
| } | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| Added in 7.86.0. | |
| - | .SH RETURN VALUE |
| - | This function returns a pointer to a \fIcurl_ws_frame\fP struct with read-only |
| + | |
| + | # RETURN VALUE |
| + | |
| + | This function returns a pointer to a *curl_ws_frame* struct with read-only |
| information that is valid for this specific callback invocation. If it cannot | |
| return this information, or if the function is called in the wrong context, it | |
| returns NULL. | |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_setopt (3), |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_ws_send (3), |
| - | .BR curl_ws_recv (3), |
| - | .BR libcurl-ws (3) |
| @@ -1,79 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH curl_ws_recv 3 "12 Jun 2022" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_ws_recv - receive WebSocket data |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen, |
| - | size_t *recv, const struct curl_ws_frame **meta); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function call is EXPERIMENTAL. |
| - | |
| - | Retrieves as much as possible of a received WebSocket data fragment into the |
| - | \fBbuffer\fP, but not more than \fBbuflen\fP bytes. \fIrecv\fP is set to the |
| - | number of bytes actually stored. |
| - | |
| - | If there is more fragment data to deliver than what fits in the provided |
| - | \fIbuffer\fP, libcurl returns a full buffer and the application needs to call |
| - | this function again to continue draining the buffer. |
| - | |
| - | The \fImeta\fP pointer gets set to point to a \fIconst struct curl_ws_frame\fP |
| - | that contains information about the received data. See the |
| - | \fIcurl_ws_meta(3)\fP for details on that struct. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | size_t rlen; |
| - | const struct curl_ws_frame *meta; |
| - | char buffer[256]; |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res = curl_ws_recv(curl, buffer, sizeof(buffer), &rlen, &meta); |
| - | if(res) |
| - | printf("error: %s\\n", curl_easy_strerror(res)); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.86.0. |
| - | .SH RETURN VALUE |
| - | Returns \fBCURLE_OK\fP if everything is okay, and a non-zero number for |
| - | errors. Returns \fBCURLE_GOT_NOTHING\fP if the associated connection is |
| - | closed. |
| - | |
| - | Instead of blocking, the function returns \fBCURLE_AGAIN\fP. The correct |
| - | behavior is then to wait for the socket to signal readability before calling |
| - | this function again. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_setopt (3), |
| - | .BR curl_easy_perform (3), |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_ws_send (3), |
| - | .BR libcurl-ws (3) |
| @@ -0,0 +1,73 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_ws_recv |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_perform (3) |
| + | - curl_easy_setopt (3) |
| + | - curl_ws_send (3) |
| + | - libcurl-ws (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_ws_recv - receive WebSocket data |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen, |
| + | size_t *recv, const struct curl_ws_frame **meta); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function call is EXPERIMENTAL. |
| + | |
| + | Retrieves as much as possible of a received WebSocket data fragment into the |
| + | **buffer**, but not more than **buflen** bytes. *recv* is set to the |
| + | number of bytes actually stored. |
| + | |
| + | If there is more fragment data to deliver than what fits in the provided |
| + | *buffer*, libcurl returns a full buffer and the application needs to call |
| + | this function again to continue draining the buffer. |
| + | |
| + | The *meta* pointer gets set to point to a *const struct curl_ws_frame* |
| + | that contains information about the received data. See the |
| + | curl_ws_meta(3) for details on that struct. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | size_t rlen; |
| + | const struct curl_ws_frame *meta; |
| + | char buffer[256]; |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res = curl_ws_recv(curl, buffer, sizeof(buffer), &rlen, &meta); |
| + | if(res) |
| + | printf("error: %s\n", curl_easy_strerror(res)); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.86.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns **CURLE_OK** if everything is okay, and a non-zero number for |
| + | errors. Returns **CURLE_GOT_NOTHING** if the associated connection is |
| + | closed. |
| + | |
| + | Instead of blocking, the function returns **CURLE_AGAIN**. The correct |
| + | behavior is then to wait for the socket to signal readability before calling |
| + | this function again. |
| @@ -1,111 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH curl_ws_send 3 "12 Jun 2022" "libcurl" "libcurl" |
| - | .SH NAME |
| - | curl_ws_send - send WebSocket data |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_ws_send(CURL *curl, const void *buffer, size_t buflen, |
| - | size_t *sent, curl_off_t fragsize, |
| - | unsigned int flags); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This function call is EXPERIMENTAL. |
| - | |
| - | Send the specific message fragment over an established WebSocket |
| - | connection. The \fIbuffer\fP holds the data to send and it is \fIbuflen\fP |
| - | number of payload bytes in that memory area. |
| - | |
| - | \fIsent\fP is returned as the number of payload bytes actually sent. |
| - | |
| - | To send a (huge) fragment using multiple calls with partial content per |
| - | invoke, set the \fICURLWS_OFFSET\fP bit and the \fIfragsize\fP argument as the |
| - | total expected size for the first part, then set the \fICURLWS_OFFSET\fP with |
| - | a zero \fIfragsize\fP for the following parts. |
| - | |
| - | If not sending a partial fragment or if this is raw mode, \fIfragsize\fP |
| - | should be set to zero. |
| - | |
| - | If \fBCURLWS_RAW_MODE\fP is enabled in \fICURLOPT_WS_OPTIONS(3)\fP, the |
| - | \fBflags\fP argument should be set to 0. |
| - | |
| - | To send a message consisting of multiple frames, set the \fICURLWS_CONT\fP bit |
| - | in all frames except the final one. |
| - | .SH FLAGS |
| - | .IP CURLWS_TEXT |
| - | The buffer contains text data. Note that this makes a difference to WebSocket |
| - | but libcurl itself does not make any verification of the content or |
| - | precautions that you actually send valid UTF-8 content. |
| - | .IP CURLWS_BINARY |
| - | This is binary data. |
| - | .IP CURLWS_CONT |
| - | This is not the final fragment of the message, which implies that there is |
| - | another fragment coming as part of the same message where this bit is not set. |
| - | .IP CURLWS_CLOSE |
| - | Close this transfer. |
| - | .IP CURLWS_PING |
| - | This is a ping. |
| - | .IP CURLWS_PONG |
| - | This is a pong. |
| - | .IP CURLWS_OFFSET |
| - | The provided data is only a partial fragment and there is more coming in a |
| - | following call to \fIcurl_ws_send()\fP. When sending only a piece of the |
| - | fragment like this, the \fIfragsize\fP must be provided with the total |
| - | expected fragment size in the first call and it needs to be zero in subsequent |
| - | calls. |
| - | .SH EXAMPLE |
| - | .nf |
| - | #include <string.h> /* for strlen */ |
| - | |
| - | const char *send_payload = "magic"; |
| - | |
| - | int main(void) |
| - | { |
| - | size_t sent; |
| - | CURLcode res; |
| - | CURL *curl = curl_easy_init(); |
| - | curl_easy_setopt(curl, CURLOPT_URL, "wss://example.com/"); |
| - | curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 2L); |
| - | curl_easy_perform(curl); |
| - | res = curl_ws_send(curl, send_payload, strlen(send_payload), &sent, 0, |
| - | CURLWS_PING); |
| - | curl_easy_cleanup(curl); |
| - | return (int)res; |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.86.0. |
| - | .SH RETURN VALUE |
| - | \fICURLE_OK\fP (zero) means that the data was sent properly, non-zero means an |
| - | error occurred as \fI<curl/curl.h>\fP defines. See the \fIlibcurl-errors(3)\fP |
| - | man page for the full list with descriptions. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_setopt (3), |
| - | .BR curl_easy_perform (3), |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_ws_recv (3), |
| - | .BR libcurl-ws (3) |
| @@ -0,0 +1,120 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: curl_ws_send |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_perform (3) |
| + | - curl_easy_setopt (3) |
| + | - curl_ws_recv (3) |
| + | - libcurl-ws (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | curl_ws_send - send WebSocket data |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_ws_send(CURL *curl, const void *buffer, size_t buflen, |
| + | size_t *sent, curl_off_t fragsize, |
| + | unsigned int flags); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This function call is EXPERIMENTAL. |
| + | |
| + | Send the specific message fragment over an established WebSocket |
| + | connection. The *buffer* holds the data to send and it is *buflen* |
| + | number of payload bytes in that memory area. |
| + | |
| + | *sent* is returned as the number of payload bytes actually sent. |
| + | |
| + | To send a (huge) fragment using multiple calls with partial content per |
| + | invoke, set the *CURLWS_OFFSET* bit and the *fragsize* argument as the |
| + | total expected size for the first part, then set the *CURLWS_OFFSET* with |
| + | a zero *fragsize* for the following parts. |
| + | |
| + | If not sending a partial fragment or if this is raw mode, *fragsize* |
| + | should be set to zero. |
| + | |
| + | If **CURLWS_RAW_MODE** is enabled in CURLOPT_WS_OPTIONS(3), the |
| + | **flags** argument should be set to 0. |
| + | |
| + | To send a message consisting of multiple frames, set the *CURLWS_CONT* bit |
| + | in all frames except the final one. |
| + | |
| + | # FLAGS |
| + | |
| + | ## CURLWS_TEXT |
| + | |
| + | The buffer contains text data. Note that this makes a difference to WebSocket |
| + | but libcurl itself does not make any verification of the content or |
| + | precautions that you actually send valid UTF-8 content. |
| + | |
| + | ## CURLWS_BINARY |
| + | |
| + | This is binary data. |
| + | |
| + | ## CURLWS_CONT |
| + | |
| + | This is not the final fragment of the message, which implies that there is |
| + | another fragment coming as part of the same message where this bit is not set. |
| + | |
| + | ## CURLWS_CLOSE |
| + | |
| + | Close this transfer. |
| + | |
| + | ## CURLWS_PING |
| + | |
| + | This is a ping. |
| + | |
| + | ## CURLWS_PONG |
| + | |
| + | This is a pong. |
| + | |
| + | ## CURLWS_OFFSET |
| + | |
| + | The provided data is only a partial fragment and there is more coming in a |
| + | following call to *curl_ws_send()*. When sending only a piece of the |
| + | fragment like this, the *fragsize* must be provided with the total |
| + | expected fragment size in the first call and it needs to be zero in subsequent |
| + | calls. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | #include <string.h> /* for strlen */ |
| + | |
| + | const char *send_payload = "magic"; |
| + | |
| + | int main(void) |
| + | { |
| + | size_t sent; |
| + | CURLcode res; |
| + | CURL *curl = curl_easy_init(); |
| + | curl_easy_setopt(curl, CURLOPT_URL, "wss://example.com/"); |
| + | curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 2L); |
| + | curl_easy_perform(curl); |
| + | res = curl_ws_send(curl, send_payload, strlen(send_payload), &sent, 0, |
| + | CURLWS_PING); |
| + | curl_easy_cleanup(curl); |
| + | return (int)res; |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.86.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | *CURLE_OK* (zero) means that the data was sent properly, non-zero means an |
| + | error occurred as *<curl/curl.h>* defines. See the libcurl-errors(3) |
| + | man page for the full list with descriptions. |
| @@ -1,65 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH libcurl 3 "19 Sep 2014" "libcurl" "libcurl" |
| - | .SH NAME |
| - | libcurl-easy \- easy interface overview |
| - | .SH DESCRIPTION |
| - | When using libcurl's "easy" interface you init your session and get a handle |
| - | (often referred to as an "easy handle"), which you use as input to the easy |
| - | interface functions you use. Use \fIcurl_easy_init(3)\fP to get the handle. |
| - | |
| - | You continue by setting all the options you want in the upcoming transfer, the |
| - | most important among them is the URL itself (you cannot transfer anything |
| - | without a specified URL as you may have figured out yourself). You might want |
| - | to set some callbacks as well that are called from the library when data is |
| - | available etc. \fIcurl_easy_setopt(3)\fP is used for all this. |
| - | |
| - | \fICURLOPT_URL(3)\fP is the only option you really must set, as otherwise |
| - | there can be no transfer. Another commonly used option is |
| - | \fICURLOPT_VERBOSE(3)\fP that helps you see what libcurl is doing under the |
| - | hood, which is useful when debugging for example. The |
| - | \fIcurl_easy_setopt(3)\fP man page has a full index of the almost 300 |
| - | available options. |
| - | |
| - | If you at any point would like to blank all previously set options for a |
| - | single easy handle, you can call \fIcurl_easy_reset(3)\fP and you can also |
| - | make a clone of an easy handle (with all its set options) using |
| - | \fIcurl_easy_duphandle(3)\fP. |
| - | |
| - | When all is setup, you tell libcurl to perform the transfer using |
| - | \fIcurl_easy_perform(3)\fP. It performs the entire transfer operation and does |
| - | not return until it is done (successfully or not). |
| - | |
| - | After the transfer has been made, you can set new options and make another |
| - | transfer, or if you are done, cleanup the session by calling |
| - | \fIcurl_easy_cleanup(3)\fP. If you want persistent connections, you do not |
| - | cleanup immediately, but instead run ahead and perform other transfers using |
| - | the same easy handle. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_init (3), |
| - | .BR curl_easy_cleanup (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR libcurl-errors (3), |
| - | .BR libcurl-multi (3), |
| - | .BR libcurl (3) |
| @@ -0,0 +1,52 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: libcurl |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_cleanup (3) |
| + | - curl_easy_init (3) |
| + | - curl_easy_setopt (3) |
| + | - libcurl (3) |
| + | - libcurl-errors (3) |
| + | - libcurl-multi (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | libcurl-easy - easy interface overview |
| + | |
| + | # DESCRIPTION |
| + | |
| + | When using libcurl's "easy" interface you init your session and get a handle |
| + | (often referred to as an "easy handle"), which you use as input to the easy |
| + | interface functions you use. Use curl_easy_init(3) to get the handle. |
| + | |
| + | You continue by setting all the options you want in the upcoming transfer, the |
| + | most important among them is the URL itself (you cannot transfer anything |
| + | without a specified URL as you may have figured out yourself). You might want |
| + | to set some callbacks as well that are called from the library when data is |
| + | available etc. curl_easy_setopt(3) is used for all this. |
| + | |
| + | CURLOPT_URL(3) is the only option you really must set, as otherwise |
| + | there can be no transfer. Another commonly used option is |
| + | CURLOPT_VERBOSE(3) that helps you see what libcurl is doing under the |
| + | hood, which is useful when debugging for example. The |
| + | curl_easy_setopt(3) man page has a full index of the almost 300 |
| + | available options. |
| + | |
| + | If you at any point would like to blank all previously set options for a |
| + | single easy handle, you can call curl_easy_reset(3) and you can also |
| + | make a clone of an easy handle (with all its set options) using |
| + | curl_easy_duphandle(3). |
| + | |
| + | When all is setup, you tell libcurl to perform the transfer using |
| + | curl_easy_perform(3). It performs the entire transfer operation and does |
| + | not return until it is done (successfully or not). |
| + | |
| + | After the transfer has been made, you can set new options and make another |
| + | transfer, or if you are done, cleanup the session by calling |
| + | curl_easy_cleanup(3). If you want persistent connections, you do not |
| + | cleanup immediately, but instead run ahead and perform other transfers using |
| + | the same easy handle. |
| @@ -1,97 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH libcurl-env-dbg 3 "18 September 2023" "libcurl" "libcurl" |
| - | .SH NAME |
| - | libcurl-env-dbg \- environment variables libcurl DEBUGBUILD understands |
| - | .SH DESCRIPTION |
| - | This is a set of variables only recognized and used if libcurl was built |
| - | "debug enabled", which should never be true for a library used in production. |
| - | These variables are intended for internal use only, subject to change and have |
| - | many effects on the behavior of libcurl. Refer to the source code to determine |
| - | how exactly they are being used. |
| - | .RS |
| - | .IP "CURL_ALTSVC_HTTP" |
| - | Bypass the AltSvc HTTPS protocol restriction if this variable exists. |
| - | .IP "CURL_DBG_SOCK_RBLOCK" |
| - | The percentage of recv() calls that should be answered with a EAGAIN at random. |
| - | For TCP/UNIX sockets. |
| - | .IP "CURL_DBG_SOCK_RMAX" |
| - | The maximum data that shall be received from the network in one recv() call. |
| - | For TCP/UNIX sockets. This is applied to every recv. |
| - | |
| - | Example: \fBCURL_DBG_SOCK_RMAX=400\fP means recv buffer size is limited to a |
| - | maximum of 400 bytes. |
| - | .IP "CURL_DBG_SOCK_WBLOCK" |
| - | The percentage of send() calls that should be answered with a EAGAIN at random. |
| - | For TCP/UNIX sockets. |
| - | .IP "CURL_DBG_SOCK_WPARTIAL" |
| - | The percentage of data that shall be written to the network. For TCP/UNIX |
| - | sockets. This is applied to every send. |
| - | |
| - | Example: \fBCURL_DBG_SOCK_WPARTIAL=80\fP means a send with 1000 bytes would |
| - | only send 800. |
| - | .IP "CURL_DBG_QUIC_WBLOCK" |
| - | The percentage of send() calls that should be answered with EAGAIN at random. |
| - | QUIC only. |
| - | .IP "CURL_DEBUG" |
| - | Trace logging behavior as an alternative to calling \fIcurl_global_trace(3)\fP. |
| - | |
| - | Example: \fBCURL_DEBUG=http/2\fP means trace details about HTTP/2 handling. |
| - | .IP "CURL_DEBUG_SIZE" |
| - | Fake the size returned by CURLINFO_HEADER_SIZE and CURLINFO_REQUEST_SIZE. |
| - | .IP "CURL_GETHOSTNAME" |
| - | Fake the local machine's unqualified hostname for NTLM and SMTP. |
| - | .IP "CURL_HSTS_HTTP" |
| - | Bypass the HSTS HTTPS protocol restriction if this variable exists. |
| - | .IP "CURL_FORCETIME" |
| - | A time of 0 is used for AWS signatures and NTLM if this variable exists. |
| - | .IP "CURL_ENTROPY" |
| - | A fixed faked value to use instead of a proper random number so that functions |
| - | in libcurl that are otherwise getting random outputs can be tested for what |
| - | they generate. |
| - | .IP "CURL_SMALLREQSEND" |
| - | An alternative size of HTTP data to be sent at a time only if smaller than the |
| - | current. |
| - | .IP "CURL_SMALLSENDS" |
| - | An alternative size of socket data to be sent at a time only if smaller than |
| - | the current. |
| - | .IP "CURL_TIME" |
| - | Fake unix timestamp to use for AltSvc, HSTS and CURLINFO variables that are |
| - | time related. |
| - | |
| - | This variable can also be used to fake the data returned by some CURLINFO |
| - | variables that are not time-related (such as CURLINFO_LOCAL_PORT), and in that |
| - | case the value is not a timestamp. |
| - | .IP "CURL_TRACE" |
| - | LDAP tracing is enabled if this variable exists and its value is 1 or greater. |
| - | |
| - | OpenLDAP tracing is separate. Refer to CURL_OPENLDAP_TRACE. |
| - | .IP "CURL_NTLM_WB_FILE" |
| - | Debug-version of the \fIntlm-wb\fP executable. |
| - | .IP "CURL_OPENLDAP_TRACE" |
| - | OpenLDAP tracing is enabled if this variable exists and its value is 1 or |
| - | greater. There's a number of debug levels, refer to \fIopenldap.c\fP comments. |
| - | .RE |
| - | .SH "SEE ALSO" |
| - | .BR libcurl-env (3) |
| @@ -0,0 +1,118 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: libcurl-env-dbg |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - libcurl-env (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | libcurl-env-dbg - environment variables libcurl DEBUGBUILD understands |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This is a set of variables only recognized and used if libcurl was built |
| + | "debug enabled", which should never be true for a library used in production. |
| + | These variables are intended for internal use only, subject to change and have |
| + | many effects on the behavior of libcurl. Refer to the source code to determine |
| + | how exactly they are being used. |
| + | |
| + | ## CURL_ALTSVC_HTTP |
| + | |
| + | Bypass the AltSvc HTTPS protocol restriction if this variable exists. |
| + | |
| + | ## CURL_DBG_SOCK_RBLOCK |
| + | |
| + | The percentage of recv() calls that should be answered with a EAGAIN at random. |
| + | For TCP/UNIX sockets. |
| + | |
| + | ## CURL_DBG_SOCK_RMAX |
| + | |
| + | The maximum data that shall be received from the network in one recv() call. |
| + | For TCP/UNIX sockets. This is applied to every recv. |
| + | |
| + | Example: **CURL_DBG_SOCK_RMAX=400** means recv buffer size is limited to a |
| + | maximum of 400 bytes. |
| + | |
| + | ## CURL_DBG_SOCK_WBLOCK |
| + | |
| + | The percentage of send() calls that should be answered with a EAGAIN at random. |
| + | For TCP/UNIX sockets. |
| + | |
| + | ## CURL_DBG_SOCK_WPARTIAL |
| + | |
| + | The percentage of data that shall be written to the network. For TCP/UNIX |
| + | sockets. This is applied to every send. |
| + | |
| + | Example: **CURL_DBG_SOCK_WPARTIAL=80** means a send with 1000 bytes would |
| + | only send 800. |
| + | |
| + | ## CURL_DBG_QUIC_WBLOCK |
| + | |
| + | The percentage of send() calls that should be answered with EAGAIN at random. |
| + | QUIC only. |
| + | |
| + | ## CURL_DEBUG |
| + | |
| + | Trace logging behavior as an alternative to calling curl_global_trace(3). |
| + | |
| + | Example: **CURL_DEBUG=http/2** means trace details about HTTP/2 handling. |
| + | |
| + | ## CURL_DEBUG_SIZE |
| + | |
| + | Fake the size returned by CURLINFO_HEADER_SIZE and CURLINFO_REQUEST_SIZE. |
| + | |
| + | ## CURL_GETHOSTNAME |
| + | |
| + | Fake the local machine's unqualified hostname for NTLM and SMTP. |
| + | |
| + | ## CURL_HSTS_HTTP |
| + | |
| + | Bypass the HSTS HTTPS protocol restriction if this variable exists. |
| + | |
| + | ## CURL_FORCETIME |
| + | |
| + | A time of 0 is used for AWS signatures and NTLM if this variable exists. |
| + | |
| + | ## CURL_ENTROPY |
| + | |
| + | A fixed faked value to use instead of a proper random number so that functions |
| + | in libcurl that are otherwise getting random outputs can be tested for what |
| + | they generate. |
| + | |
| + | ## CURL_SMALLREQSEND |
| + | |
| + | An alternative size of HTTP data to be sent at a time only if smaller than the |
| + | current. |
| + | |
| + | ## CURL_SMALLSENDS |
| + | |
| + | An alternative size of socket data to be sent at a time only if smaller than |
| + | the current. |
| + | |
| + | ## CURL_TIME |
| + | |
| + | Fake unix timestamp to use for AltSvc, HSTS and CURLINFO variables that are |
| + | time related. |
| + | |
| + | This variable can also be used to fake the data returned by some CURLINFO |
| + | variables that are not time-related (such as CURLINFO_LOCAL_PORT), and in that |
| + | case the value is not a timestamp. |
| + | |
| + | ## CURL_TRACE |
| + | |
| + | LDAP tracing is enabled if this variable exists and its value is 1 or greater. |
| + | |
| + | OpenLDAP tracing is separate. Refer to CURL_OPENLDAP_TRACE. |
| + | |
| + | ## CURL_NTLM_WB_FILE |
| + | |
| + | Debug-version of the *ntlm-wb* executable. |
| + | |
| + | ## CURL_OPENLDAP_TRACE |
| + | |
| + | OpenLDAP tracing is enabled if this variable exists and its value is 1 or |
| + | greater. There's a number of debug levels, refer to *openldap.c* comments. |
| @@ -1,92 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH libcurl-env 3 "20 January 2018" "libcurl" "libcurl" |
| - | .SH NAME |
| - | libcurl-env \- environment variables libcurl understands |
| - | .SH DESCRIPTION |
| - | libcurl reads and understands a set of environment variables that if set |
| - | controls and changes behaviors. This is the full list of variables to set and |
| - | description of what they do. Also note that curl, the command line tool, |
| - | supports a set of additional environment variables independently of this. |
| - | .RS |
| - | .IP "[scheme]_proxy" |
| - | When libcurl is given a URL to use in a transfer, it first extracts the scheme |
| - | part from the URL and checks if there is a given proxy set for that in its |
| - | corresponding environment variable. A URL like https://example.com makes |
| - | libcurl use the \fBhttp_proxy\fP variable, while a URL like ftp://example.com |
| - | uses the \fBftp_proxy\fP variable. |
| - | |
| - | These proxy variables are also checked for in their uppercase versions, except |
| - | the \fBhttp_proxy\fP one which is only used lowercase. Note also that some |
| - | systems actually have a case insensitive handling of environment variables and |
| - | then of course \fBHTTP_PROXY\fP still works. |
| - | |
| - | An exception exists for the WebSocket \fBws\fP and \fBwss\fP URL schemes, |
| - | where libcurl first checks \fBws_proxy\fP or \fBwss_proxy\fP but if they are |
| - | not set, it will fall back and try the http and https versions instead if set. |
| - | .IP ALL_PROXY |
| - | This is a setting to set proxy for all URLs, independently of what scheme is |
| - | being used. Note that the scheme specific variables overrides this one if set. |
| - | .IP CURL_SSL_BACKEND |
| - | When libcurl is built to support multiple SSL backends, it selects a specific |
| - | backend at first use. If no selection is done by the program using libcurl, |
| - | this variable's selection is used. Setting a name that is not a built-in |
| - | alternative makes libcurl stay with the default. |
| - | |
| - | SSL backend names (case-insensitive): BearSSL, GnuTLS, mbedTLS, |
| - | nss, OpenSSL, rustls, Schannel, Secure-Transport, wolfSSL |
| - | .IP HOME |
| - | When the netrc feature is used (\fICURLOPT_NETRC(3)\fP), this variable is |
| - | checked as the primary way to find the "current" home directory in which |
| - | the .netrc file is likely to exist. |
| - | .IP USERPROFILE |
| - | When the netrc feature is used (\fICURLOPT_NETRC(3)\fP), this variable is |
| - | checked as the secondary way to find the "current" home directory (on Windows |
| - | only) in which the .netrc file is likely to exist. |
| - | .IP LOGNAME |
| - | User name to use when invoking the \fIntlm-wb\fP tool, if \fINTLMUSER\fP was |
| - | not set. |
| - | .IP NO_PROXY |
| - | This has the same functionality as the \fICURLOPT_NOPROXY(3)\fP option: it |
| - | gives libcurl a comma-separated list of host name patterns for which libcurl |
| - | should not use a proxy. |
| - | .IP NTLMUSER |
| - | User name to use when invoking the \fIntlm-wb\fP tool. |
| - | .IP SSLKEYLOGFILE |
| - | When set and libcurl runs with a SSL backend that supports this feature, |
| - | libcurl saves SSL secrets into the given file name. Using those SSL secrets, |
| - | other tools (such as Wireshark) can decrypt the SSL communication and |
| - | analyze/view the traffic. |
| - | |
| - | These secrets and this file might be sensitive. Users are advised to take |
| - | precautions so that they are not stolen or otherwise inadvertently revealed. |
| - | .IP USER |
| - | User name to use when invoking the \fIntlm-wb\fP tool, if \fINTLMUSER\fP and |
| - | \fILOGNAME\fP were not set. |
| - | .RE |
| - | .SH "Debug Variables" |
| - | Debug variables are intended for internal use and are documented in |
| - | \fIlibcurl-env-dbg(3)\fP. |
| - | .SH "SEE ALSO" |
| - | .BR libcurl-env-dbg (3) |
| @@ -0,0 +1,99 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: libcurl-env |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - libcurl-env-dbg (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | libcurl-env - environment variables libcurl understands |
| + | |
| + | # DESCRIPTION |
| + | |
| + | libcurl reads and understands a set of environment variables that if set |
| + | controls and changes behaviors. This is the full list of variables to set and |
| + | description of what they do. Also note that curl, the command line tool, |
| + | supports a set of additional environment variables independently of this. |
| + | |
| + | ## [scheme]_proxy |
| + | |
| + | When libcurl is given a URL to use in a transfer, it first extracts the scheme |
| + | part from the URL and checks if there is a given proxy set for that in its |
| + | corresponding environment variable. A URL like https://example.com makes |
| + | libcurl use the **http_proxy** variable, while a URL like ftp://example.com |
| + | uses the **ftp_proxy** variable. |
| + | |
| + | These proxy variables are also checked for in their uppercase versions, except |
| + | the **http_proxy** one which is only used lowercase. Note also that some |
| + | systems actually have a case insensitive handling of environment variables and |
| + | then of course **HTTP_PROXY** still works. |
| + | |
| + | An exception exists for the WebSocket **ws** and **wss** URL schemes, |
| + | where libcurl first checks **ws_proxy** or **wss_proxy** but if they are |
| + | not set, it will fall back and try the http and https versions instead if set. |
| + | |
| + | ## ALL_PROXY |
| + | |
| + | This is a setting to set proxy for all URLs, independently of what scheme is |
| + | being used. Note that the scheme specific variables overrides this one if set. |
| + | |
| + | ## CURL_SSL_BACKEND |
| + | |
| + | When libcurl is built to support multiple SSL backends, it selects a specific |
| + | backend at first use. If no selection is done by the program using libcurl, |
| + | this variable's selection is used. Setting a name that is not a built-in |
| + | alternative makes libcurl stay with the default. |
| + | |
| + | SSL backend names (case-insensitive): BearSSL, GnuTLS, mbedTLS, |
| + | nss, OpenSSL, rustls, Schannel, Secure-Transport, wolfSSL |
| + | |
| + | ## HOME |
| + | |
| + | When the netrc feature is used (CURLOPT_NETRC(3)), this variable is |
| + | checked as the primary way to find the "current" home directory in which |
| + | the .netrc file is likely to exist. |
| + | |
| + | ## USERPROFILE |
| + | |
| + | When the netrc feature is used (CURLOPT_NETRC(3)), this variable is |
| + | checked as the secondary way to find the "current" home directory (on Windows |
| + | only) in which the .netrc file is likely to exist. |
| + | |
| + | ## LOGNAME |
| + | |
| + | User name to use when invoking the *ntlm-wb* tool, if *NTLMUSER* was |
| + | not set. |
| + | |
| + | ## NO_PROXY |
| + | |
| + | This has the same functionality as the CURLOPT_NOPROXY(3) option: it |
| + | gives libcurl a comma-separated list of host name patterns for which libcurl |
| + | should not use a proxy. |
| + | |
| + | ## NTLMUSER |
| + | |
| + | User name to use when invoking the *ntlm-wb* tool. |
| + | |
| + | ## SSLKEYLOGFILE |
| + | |
| + | When set and libcurl runs with a SSL backend that supports this feature, |
| + | libcurl saves SSL secrets into the given file name. Using those SSL secrets, |
| + | other tools (such as Wireshark) can decrypt the SSL communication and |
| + | analyze/view the traffic. |
| + | |
| + | These secrets and this file might be sensitive. Users are advised to take |
| + | precautions so that they are not stolen or otherwise inadvertently revealed. |
| + | |
| + | ## USER |
| + | |
| + | User name to use when invoking the *ntlm-wb* tool, if *NTLMUSER* and |
| + | *LOGNAME* were not set. |
| + | |
| + | # Debug Variables |
| + | |
| + | Debug variables are intended for internal use and are documented in |
| + | libcurl-env-dbg(3). |
| @@ -1,443 +1,757 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH libcurl-errors 3 "23 Nov 2021" "libcurl" "libcurl" |
| - | .SH NAME |
| - | libcurl-errors \- error codes in libcurl |
| - | .SH DESCRIPTION |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: libcurl-errors |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_DEBUGFUNCTION (3) |
| + | - CURLOPT_ERRORBUFFER (3) |
| + | - CURLOPT_VERBOSE (3) |
| + | - curl_easy_strerror (3) |
| + | - curl_multi_strerror (3) |
| + | - curl_share_strerror (3) |
| + | - curl_url_strerror (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | libcurl-errors - error codes in libcurl |
| + | |
| + | # DESCRIPTION |
| + | |
| This man page includes most, if not all, available error codes in libcurl. | |
| Why they occur and possibly what you can do to fix the problem are also included. | |
| - | .SH "CURLcode" |
| + | |
| + | # CURLcode |
| + | |
| Almost all "easy" interface functions return a CURLcode error code. No matter | |
| - | what, using the \fIcurl_easy_setopt(3)\fP option \fICURLOPT_ERRORBUFFER(3)\fP |
| + | what, using the curl_easy_setopt(3) option CURLOPT_ERRORBUFFER(3) |
| is a good idea as it gives you a human readable error string that may offer | |
| more details about the cause of the error than just the error code. | |
| - | \fIcurl_easy_strerror(3)\fP can be called to get an error string from a given |
| + | curl_easy_strerror(3) can be called to get an error string from a given |
| CURLcode number. | |
| CURLcode is one of the following: | |
| - | .IP "CURLE_OK (0)" |
| + | |
| + | ## CURLE_OK (0) |
| + | |
| All fine. Proceed as usual. | |
| - | .IP "CURLE_UNSUPPORTED_PROTOCOL (1)" |
| + | |
| + | ## CURLE_UNSUPPORTED_PROTOCOL (1) |
| + | |
| The URL you passed to libcurl used a protocol that this libcurl does not | |
| support. The support might be a compile-time option that you did not use, it | |
| can be a misspelled protocol string or just a protocol libcurl has no code | |
| for. | |
| - | .IP "CURLE_FAILED_INIT (2)" |
| + | |
| + | ## CURLE_FAILED_INIT (2) |
| + | |
| Early initialization code failed. This is likely to be an internal error or | |
| problem, or a resource problem where something fundamental could not get done | |
| at init time. | |
| - | .IP "CURLE_URL_MALFORMAT (3)" |
| + | |
| + | ## CURLE_URL_MALFORMAT (3) |
| + | |
| The URL was not properly formatted. | |
| - | .IP "CURLE_NOT_BUILT_IN (4)" |
| + | |
| + | ## CURLE_NOT_BUILT_IN (4) |
| + | |
| A requested feature, protocol or option was not found built-in in this libcurl | |
| due to a build-time decision. This means that a feature or option was not | |
| enabled or explicitly disabled when libcurl was built and in order to get it | |
| to function you have to get a rebuilt libcurl. | |
| - | .IP "CURLE_COULDNT_RESOLVE_PROXY (5)" |
| + | |
| + | ## CURLE_COULDNT_RESOLVE_PROXY (5) |
| + | |
| Could not resolve proxy. The given proxy host could not be resolved. | |
| - | .IP "CURLE_COULDNT_RESOLVE_HOST (6)" |
| + | |
| + | ## CURLE_COULDNT_RESOLVE_HOST (6) |
| + | |
| Could not resolve host. The given remote host was not resolved. | |
| - | .IP "CURLE_COULDNT_CONNECT (7)" |
| + | |
| + | ## CURLE_COULDNT_CONNECT (7) |
| + | |
| Failed to connect() to host or proxy. | |
| - | .IP "CURLE_WEIRD_SERVER_REPLY (8)" |
| + | |
| + | ## CURLE_WEIRD_SERVER_REPLY (8) |
| + | |
| The server sent data libcurl could not parse. This error code was known as | |
| - | \fICURLE_FTP_WEIRD_SERVER_REPLY\fP before 7.51.0. |
| - | .IP "CURLE_REMOTE_ACCESS_DENIED (9)" |
| + | *CURLE_FTP_WEIRD_SERVER_REPLY* before 7.51.0. |
| + | |
| + | ## CURLE_REMOTE_ACCESS_DENIED (9) |
| + | |
| We were denied access to the resource given in the URL. For FTP, this occurs | |
| while trying to change to the remote directory. | |
| - | .IP "CURLE_FTP_ACCEPT_FAILED (10)" |
| + | |
| + | ## CURLE_FTP_ACCEPT_FAILED (10) |
| + | |
| While waiting for the server to connect back when an active FTP session is | |
| used, an error code was sent over the control connection or similar. | |
| - | .IP "CURLE_FTP_WEIRD_PASS_REPLY (11)" |
| + | |
| + | ## CURLE_FTP_WEIRD_PASS_REPLY (11) |
| + | |
| After having sent the FTP password to the server, libcurl expects a proper | |
| reply. This error code indicates that an unexpected code was returned. | |
| - | .IP "CURLE_FTP_ACCEPT_TIMEOUT (12)" |
| + | |
| + | ## CURLE_FTP_ACCEPT_TIMEOUT (12) |
| + | |
| During an active FTP session while waiting for the server to connect, the | |
| - | \fICURLOPT_ACCEPTTIMEOUT_MS(3)\fP (or the internal default) timeout expired. |
| - | .IP "CURLE_FTP_WEIRD_PASV_REPLY (13)" |
| + | CURLOPT_ACCEPTTIMEOUT_MS(3) (or the internal default) timeout expired. |
| + | |
| + | ## CURLE_FTP_WEIRD_PASV_REPLY (13) |
| + | |
| libcurl failed to get a sensible result back from the server as a response to | |
| either a PASV or a EPSV command. The server is flawed. | |
| - | .IP "CURLE_FTP_WEIRD_227_FORMAT (14)" |
| + | |
| + | ## CURLE_FTP_WEIRD_227_FORMAT (14) |
| + | |
| FTP servers return a 227-line as a response to a PASV command. If libcurl | |
| fails to parse that line, this return code is passed back. | |
| - | .IP "CURLE_FTP_CANT_GET_HOST (15)" |
| + | |
| + | ## CURLE_FTP_CANT_GET_HOST (15) |
| + | |
| An internal failure to lookup the host used for the new connection. | |
| - | .IP "CURLE_HTTP2 (16)" |
| + | |
| + | ## CURLE_HTTP2 (16) |
| + | |
| A problem was detected in the HTTP2 framing layer. This is somewhat generic | |
| and can be one out of several problems, see the error buffer for details. | |
| - | .IP "CURLE_FTP_COULDNT_SET_TYPE (17)" |
| + | |
| + | ## CURLE_FTP_COULDNT_SET_TYPE (17) |
| + | |
| Received an error when trying to set the transfer mode to binary or ASCII. | |
| - | .IP "CURLE_PARTIAL_FILE (18)" |
| + | |
| + | ## CURLE_PARTIAL_FILE (18) |
| + | |
| A file transfer was shorter or larger than expected. This happens when the | |
| server first reports an expected transfer size, and then delivers data that | |
| does not match the previously given size. | |
| - | .IP "CURLE_FTP_COULDNT_RETR_FILE (19)" |
| + | |
| + | ## CURLE_FTP_COULDNT_RETR_FILE (19) |
| + | |
| This was either a weird reply to a 'RETR' command or a zero byte transfer | |
| complete. | |
| - | .IP "Obsolete error (20)" |
| + | |
| + | ## Obsolete error (20) |
| + | |
| Not used in modern versions. | |
| - | .IP "CURLE_QUOTE_ERROR (21)" |
| + | |
| + | ## CURLE_QUOTE_ERROR (21) |
| + | |
| When sending custom "QUOTE" commands to the remote server, one of the commands | |
| returned an error code that was 400 or higher (for FTP) or otherwise | |
| indicated unsuccessful completion of the command. | |
| - | .IP "CURLE_HTTP_RETURNED_ERROR (22)" |
| - | This is returned if \fICURLOPT_FAILONERROR(3)\fP is set TRUE and the HTTP |
| + | |
| + | ## CURLE_HTTP_RETURNED_ERROR (22) |
| + | |
| + | This is returned if CURLOPT_FAILONERROR(3) is set TRUE and the HTTP |
| server returns an error code that is >= 400. | |
| - | .IP "CURLE_WRITE_ERROR (23)" |
| + | |
| + | ## CURLE_WRITE_ERROR (23) |
| + | |
| An error occurred when writing received data to a local file, or an error was | |
| returned to libcurl from a write callback. | |
| - | .IP "Obsolete error (24)" |
| + | |
| + | ## Obsolete error (24) |
| + | |
| Not used in modern versions. | |
| - | .IP "CURLE_UPLOAD_FAILED (25)" |
| + | |
| + | ## CURLE_UPLOAD_FAILED (25) |
| + | |
| Failed starting the upload. For FTP, the server typically denied the STOR | |
| command. The error buffer usually contains the server's explanation for this. | |
| - | .IP "CURLE_READ_ERROR (26)" |
| + | |
| + | ## CURLE_READ_ERROR (26) |
| + | |
| There was a problem reading a local file or an error returned by the read | |
| callback. | |
| - | .IP "CURLE_OUT_OF_MEMORY (27)" |
| + | |
| + | ## CURLE_OUT_OF_MEMORY (27) |
| + | |
| A memory allocation request failed. This is serious badness and | |
| things are severely screwed up if this ever occurs. | |
| - | .IP "CURLE_OPERATION_TIMEDOUT (28)" |
| + | |
| + | ## CURLE_OPERATION_TIMEDOUT (28) |
| + | |
| Operation timeout. The specified time-out period was reached according to the | |
| conditions. | |
| - | .IP "Obsolete error (29)" |
| + | |
| + | ## Obsolete error (29) |
| + | |
| Not used in modern versions. | |
| - | .IP "CURLE_FTP_PORT_FAILED (30)" |
| + | |
| + | ## CURLE_FTP_PORT_FAILED (30) |
| + | |
| The FTP PORT command returned error. This mostly happens when you have not | |
| specified a good enough address for libcurl to use. See | |
| - | \fICURLOPT_FTPPORT(3)\fP. |
| - | .IP "CURLE_FTP_COULDNT_USE_REST (31)" |
| + | CURLOPT_FTPPORT(3). |
| + | |
| + | ## CURLE_FTP_COULDNT_USE_REST (31) |
| + | |
| The FTP REST command returned error. This should never happen if the server is | |
| sane. | |
| - | .IP "Obsolete error (32)" |
| + | |
| + | ## Obsolete error (32) |
| + | |
| Not used in modern versions. | |
| - | .IP "CURLE_RANGE_ERROR (33)" |
| + | |
| + | ## CURLE_RANGE_ERROR (33) |
| + | |
| The server does not support or accept range requests. | |
| - | .IP "CURLE_HTTP_POST_ERROR (34)" |
| + | |
| + | ## CURLE_HTTP_POST_ERROR (34) |
| + | |
| This is an odd error that mainly occurs due to internal confusion. | |
| - | .IP "CURLE_SSL_CONNECT_ERROR (35)" |
| + | |
| + | ## CURLE_SSL_CONNECT_ERROR (35) |
| + | |
| A problem occurred somewhere in the SSL/TLS handshake. You really want the | |
| error buffer and read the message there as it pinpoints the problem slightly | |
| more. Could be certificates (file formats, paths, permissions), passwords, and | |
| others. | |
| - | .IP "CURLE_BAD_DOWNLOAD_RESUME (36)" |
| + | |
| + | ## CURLE_BAD_DOWNLOAD_RESUME (36) |
| + | |
| The download could not be resumed because the specified offset was out of the | |
| file boundary. | |
| - | .IP "CURLE_FILE_COULDNT_READ_FILE (37)" |
| + | |
| + | ## CURLE_FILE_COULDNT_READ_FILE (37) |
| + | |
| A file given with FILE:// could not be opened. Most likely because the file | |
| path does not identify an existing file. Did you check file permissions? | |
| - | .IP "CURLE_LDAP_CANNOT_BIND (38)" |
| + | |
| + | ## CURLE_LDAP_CANNOT_BIND (38) |
| + | |
| LDAP cannot bind. LDAP bind operation failed. | |
| - | .IP "CURLE_LDAP_SEARCH_FAILED (39)" |
| + | |
| + | ## CURLE_LDAP_SEARCH_FAILED (39) |
| + | |
| LDAP search failed. | |
| - | .IP "Obsolete error (40)" |
| + | |
| + | ## Obsolete error (40) |
| + | |
| Not used in modern versions. | |
| - | .IP "CURLE_FUNCTION_NOT_FOUND (41)" |
| + | |
| + | ## CURLE_FUNCTION_NOT_FOUND (41) |
| + | |
| Function not found. A required zlib function was not found. | |
| - | .IP "CURLE_ABORTED_BY_CALLBACK (42)" |
| + | |
| + | ## CURLE_ABORTED_BY_CALLBACK (42) |
| + | |
| Aborted by callback. A callback returned "abort" to libcurl. | |
| - | .IP "CURLE_BAD_FUNCTION_ARGUMENT (43)" |
| + | |
| + | ## CURLE_BAD_FUNCTION_ARGUMENT (43) |
| + | |
| A function was called with a bad parameter. | |
| - | .IP "Obsolete error (44)" |
| + | |
| + | ## Obsolete error (44) |
| + | |
| Not used in modern versions. | |
| - | .IP "CURLE_INTERFACE_FAILED (45)" |
| + | |
| + | ## CURLE_INTERFACE_FAILED (45) |
| + | |
| Interface error. A specified outgoing interface could not be used. Set which | |
| interface to use for outgoing connections' source IP address with | |
| - | \fICURLOPT_INTERFACE(3)\fP. |
| - | .IP "Obsolete error (46)" |
| + | CURLOPT_INTERFACE(3). |
| + | |
| + | ## Obsolete error (46) |
| + | |
| Not used in modern versions. | |
| - | .IP "CURLE_TOO_MANY_REDIRECTS (47)" |
| + | |
| + | ## CURLE_TOO_MANY_REDIRECTS (47) |
| + | |
| Too many redirects. When following redirects, libcurl hit the maximum amount. | |
| - | Set your limit with \fICURLOPT_MAXREDIRS(3)\fP. |
| - | .IP "CURLE_UNKNOWN_OPTION (48)" |
| + | Set your limit with CURLOPT_MAXREDIRS(3). |
| + | |
| + | ## CURLE_UNKNOWN_OPTION (48) |
| + | |
| An option passed to libcurl is not recognized/known. Refer to the appropriate | |
| documentation. This is most likely a problem in the program that uses | |
| libcurl. The error buffer might contain more specific information about which | |
| exact option it concerns. | |
| - | .IP "CURLE_SETOPT_OPTION_SYNTAX (49)" |
| + | |
| + | ## CURLE_SETOPT_OPTION_SYNTAX (49) |
| + | |
| An option passed in to a setopt was wrongly formatted. See error message for | |
| details about what option. | |
| - | .IP "Obsolete errors (50-51)" |
| + | |
| + | ## Obsolete errors (50-51) |
| + | |
| Not used in modern versions. | |
| - | .IP "CURLE_GOT_NOTHING (52)" |
| + | |
| + | ## CURLE_GOT_NOTHING (52) |
| + | |
| Nothing was returned from the server, and under the circumstances, getting | |
| nothing is considered an error. | |
| - | .IP "CURLE_SSL_ENGINE_NOTFOUND (53)" |
| + | |
| + | ## CURLE_SSL_ENGINE_NOTFOUND (53) |
| + | |
| The specified crypto engine was not found. | |
| - | .IP "CURLE_SSL_ENGINE_SETFAILED (54)" |
| + | |
| + | ## CURLE_SSL_ENGINE_SETFAILED (54) |
| + | |
| Failed setting the selected SSL crypto engine as default. | |
| - | .IP "CURLE_SEND_ERROR (55)" |
| + | |
| + | ## CURLE_SEND_ERROR (55) |
| + | |
| Failed sending network data. | |
| - | .IP "CURLE_RECV_ERROR (56)" |
| + | |
| + | ## CURLE_RECV_ERROR (56) |
| + | |
| Failure with receiving network data. | |
| - | .IP "Obsolete error (57)" |
| + | |
| + | ## Obsolete error (57) |
| + | |
| Not used in modern versions. | |
| - | .IP "CURLE_SSL_CERTPROBLEM (58)" |
| + | |
| + | ## CURLE_SSL_CERTPROBLEM (58) |
| + | |
| problem with the local client certificate. | |
| - | .IP "CURLE_SSL_CIPHER (59)" |
| + | |
| + | ## CURLE_SSL_CIPHER (59) |
| + | |
| Could not use specified cipher. | |
| - | .IP "CURLE_PEER_FAILED_VERIFICATION (60)" |
| + | |
| + | ## CURLE_PEER_FAILED_VERIFICATION (60) |
| + | |
| The remote server's SSL certificate or SSH fingerprint was deemed not OK. | |
| This error code has been unified with CURLE_SSL_CACERT since 7.62.0. Its | |
| previous value was 51. | |
| - | .IP "CURLE_BAD_CONTENT_ENCODING (61)" |
| + | |
| + | ## CURLE_BAD_CONTENT_ENCODING (61) |
| + | |
| Unrecognized transfer encoding. | |
| - | .IP "Obsolete error (62)" |
| + | |
| + | ## Obsolete error (62) |
| + | |
| Not used in modern versions. | |
| - | .IP "CURLE_FILESIZE_EXCEEDED (63)" |
| + | |
| + | ## CURLE_FILESIZE_EXCEEDED (63) |
| + | |
| Maximum file size exceeded. | |
| - | .IP "CURLE_USE_SSL_FAILED (64)" |
| + | |
| + | ## CURLE_USE_SSL_FAILED (64) |
| + | |
| Requested FTP SSL level failed. | |
| - | .IP "CURLE_SEND_FAIL_REWIND (65)" |
| + | |
| + | ## CURLE_SEND_FAIL_REWIND (65) |
| + | |
| When doing a send operation curl had to rewind the data to retransmit, but the | |
| rewinding operation failed. | |
| - | .IP "CURLE_SSL_ENGINE_INITFAILED (66)" |
| + | |
| + | ## CURLE_SSL_ENGINE_INITFAILED (66) |
| + | |
| Initiating the SSL Engine failed. | |
| - | .IP "CURLE_LOGIN_DENIED (67)" |
| + | |
| + | ## CURLE_LOGIN_DENIED (67) |
| + | |
| The remote server denied curl to login (Added in 7.13.1) | |
| - | .IP "CURLE_TFTP_NOTFOUND (68)" |
| + | |
| + | ## CURLE_TFTP_NOTFOUND (68) |
| + | |
| File not found on TFTP server. | |
| - | .IP "CURLE_TFTP_PERM (69)" |
| + | |
| + | ## CURLE_TFTP_PERM (69) |
| + | |
| Permission problem on TFTP server. | |
| - | .IP "CURLE_REMOTE_DISK_FULL (70)" |
| + | |
| + | ## CURLE_REMOTE_DISK_FULL (70) |
| + | |
| Out of disk space on the server. | |
| - | .IP "CURLE_TFTP_ILLEGAL (71)" |
| + | |
| + | ## CURLE_TFTP_ILLEGAL (71) |
| + | |
| Illegal TFTP operation. | |
| - | .IP "CURLE_TFTP_UNKNOWNID (72)" |
| + | |
| + | ## CURLE_TFTP_UNKNOWNID (72) |
| + | |
| Unknown TFTP transfer ID. | |
| - | .IP "CURLE_REMOTE_FILE_EXISTS (73)" |
| + | |
| + | ## CURLE_REMOTE_FILE_EXISTS (73) |
| + | |
| File already exists and is not overwritten. | |
| - | .IP "CURLE_TFTP_NOSUCHUSER (74)" |
| + | |
| + | ## CURLE_TFTP_NOSUCHUSER (74) |
| + | |
| This error should never be returned by a properly functioning TFTP server. | |
| - | .IP "Obsolete error (75-76)" |
| + | |
| + | ## Obsolete error (75-76) |
| + | |
| Not used in modern versions. | |
| - | .IP "CURLE_SSL_CACERT_BADFILE (77)" |
| + | |
| + | ## CURLE_SSL_CACERT_BADFILE (77) |
| + | |
| Problem with reading the SSL CA cert (path? access rights?) | |
| - | .IP "CURLE_REMOTE_FILE_NOT_FOUND (78)" |
| + | |
| + | ## CURLE_REMOTE_FILE_NOT_FOUND (78) |
| + | |
| The resource referenced in the URL does not exist. | |
| - | .IP "CURLE_SSH (79)" |
| + | |
| + | ## CURLE_SSH (79) |
| + | |
| An unspecified error occurred during the SSH session. | |
| - | .IP "CURLE_SSL_SHUTDOWN_FAILED (80)" |
| + | |
| + | ## CURLE_SSL_SHUTDOWN_FAILED (80) |
| + | |
| Failed to shut down the SSL connection. | |
| - | .IP "CURLE_AGAIN (81)" |
| + | |
| + | ## CURLE_AGAIN (81) |
| + | |
| Socket is not ready for send/recv wait till it's ready and try again. This | |
| - | return code is only returned from \fIcurl_easy_recv(3)\fP and |
| - | \fIcurl_easy_send(3)\fP (Added in 7.18.2) |
| - | .IP "CURLE_SSL_CRL_BADFILE (82)" |
| + | return code is only returned from curl_easy_recv(3) and |
| + | curl_easy_send(3) (Added in 7.18.2) |
| + | |
| + | ## CURLE_SSL_CRL_BADFILE (82) |
| + | |
| Failed to load CRL file (Added in 7.19.0) | |
| - | .IP "CURLE_SSL_ISSUER_ERROR (83)" |
| + | |
| + | ## CURLE_SSL_ISSUER_ERROR (83) |
| + | |
| Issuer check failed (Added in 7.19.0) | |
| - | .IP "CURLE_FTP_PRET_FAILED (84)" |
| + | |
| + | ## CURLE_FTP_PRET_FAILED (84) |
| + | |
| The FTP server does not understand the PRET command at all or does not support | |
| - | the given argument. Be careful when using \fICURLOPT_CUSTOMREQUEST(3)\fP, a |
| + | the given argument. Be careful when using CURLOPT_CUSTOMREQUEST(3), a |
| custom LIST command is sent with the PRET command before PASV as well. (Added | |
| in 7.20.0) | |
| - | .IP "CURLE_RTSP_CSEQ_ERROR (85)" |
| + | |
| + | ## CURLE_RTSP_CSEQ_ERROR (85) |
| + | |
| Mismatch of RTSP CSeq numbers. | |
| - | .IP "CURLE_RTSP_SESSION_ERROR (86)" |
| + | |
| + | ## CURLE_RTSP_SESSION_ERROR (86) |
| + | |
| Mismatch of RTSP Session Identifiers. | |
| - | .IP "CURLE_FTP_BAD_FILE_LIST (87)" |
| + | |
| + | ## CURLE_FTP_BAD_FILE_LIST (87) |
| + | |
| Unable to parse FTP file list (during FTP wildcard downloading). | |
| - | .IP "CURLE_CHUNK_FAILED (88)" |
| + | |
| + | ## CURLE_CHUNK_FAILED (88) |
| + | |
| Chunk callback reported error. | |
| - | .IP "CURLE_NO_CONNECTION_AVAILABLE (89)" |
| + | |
| + | ## CURLE_NO_CONNECTION_AVAILABLE (89) |
| + | |
| (For internal use only, is never returned by libcurl) No connection available, | |
| the session is queued. (added in 7.30.0) | |
| - | .IP "CURLE_SSL_PINNEDPUBKEYNOTMATCH (90)" |
| - | Failed to match the pinned key specified with \fICURLOPT_PINNEDPUBLICKEY(3)\fP. |
| - | .IP "CURLE_SSL_INVALIDCERTSTATUS (91)" |
| - | Status returned failure when asked with \fICURLOPT_SSL_VERIFYSTATUS(3)\fP. |
| - | .IP "CURLE_HTTP2_STREAM (92)" |
| + | |
| + | ## CURLE_SSL_PINNEDPUBKEYNOTMATCH (90) |
| + | |
| + | Failed to match the pinned key specified with CURLOPT_PINNEDPUBLICKEY(3). |
| + | |
| + | ## CURLE_SSL_INVALIDCERTSTATUS (91) |
| + | |
| + | Status returned failure when asked with CURLOPT_SSL_VERIFYSTATUS(3). |
| + | |
| + | ## CURLE_HTTP2_STREAM (92) |
| + | |
| Stream error in the HTTP/2 framing layer. | |
| - | .IP "CURLE_RECURSIVE_API_CALL (93)" |
| + | |
| + | ## CURLE_RECURSIVE_API_CALL (93) |
| + | |
| An API function was called from inside a callback. | |
| - | .IP "CURLE_AUTH_ERROR (94)" |
| + | |
| + | ## CURLE_AUTH_ERROR (94) |
| + | |
| An authentication function returned an error. | |
| - | .IP "CURLE_HTTP3 (95)" |
| + | |
| + | ## CURLE_HTTP3 (95) |
| + | |
| A problem was detected in the HTTP/3 layer. This is somewhat generic and can | |
| be one out of several problems, see the error buffer for details. | |
| - | .IP "CURLE_QUIC_CONNECT_ERROR (96)" |
| + | |
| + | ## CURLE_QUIC_CONNECT_ERROR (96) |
| + | |
| QUIC connection error. This error may be caused by an SSL library error. QUIC | |
| is the protocol used for HTTP/3 transfers. | |
| - | .IP "CURLE_PROXY (97)" |
| - | Proxy handshake error. \fICURLINFO_PROXY_ERROR(3)\fP provides extra details on |
| + | |
| + | ## CURLE_PROXY (97) |
| + | |
| + | Proxy handshake error. CURLINFO_PROXY_ERROR(3) provides extra details on |
| the specific problem. | |
| - | .IP "CURLE_SSL_CLIENTCERT (98)" |
| + | |
| + | ## CURLE_SSL_CLIENTCERT (98) |
| + | |
| SSL Client Certificate required. | |
| - | .IP "CURLE_UNRECOVERABLE_POLL (99)" |
| + | |
| + | ## CURLE_UNRECOVERABLE_POLL (99) |
| + | |
| An internal call to poll() or select() returned error that is not recoverable. | |
| - | .IP "CURLE_TOO_LARGE (100)" |
| + | |
| + | ## CURLE_TOO_LARGE (100) |
| + | |
| A value or data field grew larger than allowed. | |
| - | .SH "CURLMcode" |
| + | |
| + | # CURLMcode |
| + | |
| This is the generic return code used by functions in the libcurl multi | |
| - | interface. Also consider \fIcurl_multi_strerror(3)\fP. |
| - | .IP "CURLM_CALL_MULTI_PERFORM (-1)" |
| + | interface. Also consider curl_multi_strerror(3). |
| + | |
| + | ## CURLM_CALL_MULTI_PERFORM (-1) |
| + | |
| This is not really an error. It means you should call | |
| - | \fIcurl_multi_perform(3)\fP again without doing select() or similar in |
| + | curl_multi_perform(3) again without doing select() or similar in |
| between. Before version 7.20.0 (released on February 9 2010) this could be returned by | |
| - | \fIcurl_multi_perform(3)\fP, but in later versions this return code is never |
| + | curl_multi_perform(3), but in later versions this return code is never |
| used. | |
| - | .IP "CURLM_OK (0)" |
| + | |
| + | ## CURLM_OK (0) |
| + | |
| Things are fine. | |
| - | .IP "CURLM_BAD_HANDLE (1)" |
| - | The passed-in handle is not a valid \fICURLM\fP handle. |
| - | .IP "CURLM_BAD_EASY_HANDLE (2)" |
| + | |
| + | ## CURLM_BAD_HANDLE (1) |
| + | |
| + | The passed-in handle is not a valid *CURLM* handle. |
| + | |
| + | ## CURLM_BAD_EASY_HANDLE (2) |
| + | |
| An easy handle was not good/valid. It could mean that it is not an easy handle | |
| at all, or possibly that the handle already is in use by this or another multi | |
| handle. | |
| - | .IP "CURLM_OUT_OF_MEMORY (3)" |
| + | |
| + | ## CURLM_OUT_OF_MEMORY (3) |
| + | |
| You are doomed. | |
| - | .IP "CURLM_INTERNAL_ERROR (4)" |
| + | |
| + | ## CURLM_INTERNAL_ERROR (4) |
| + | |
| This can only be returned if libcurl bugs. Please report it to us! | |
| - | .IP "CURLM_BAD_SOCKET (5)" |
| + | |
| + | ## CURLM_BAD_SOCKET (5) |
| + | |
| The passed-in socket is not a valid one that libcurl already knows about. | |
| (Added in 7.15.4) | |
| - | .IP "CURLM_UNKNOWN_OPTION (6)" |
| + | |
| + | ## CURLM_UNKNOWN_OPTION (6) |
| + | |
| curl_multi_setopt() with unsupported option | |
| (Added in 7.15.4) | |
| - | .IP "CURLM_ADDED_ALREADY (7)" |
| + | |
| + | ## CURLM_ADDED_ALREADY (7) |
| + | |
| An easy handle already added to a multi handle was attempted to get added a | |
| second time. (Added in 7.32.1) | |
| - | .IP "CURLM_RECURSIVE_API_CALL (8)" |
| + | |
| + | ## CURLM_RECURSIVE_API_CALL (8) |
| + | |
| An API function was called from inside a callback. | |
| - | .IP "CURLM_WAKEUP_FAILURE (9)" |
| + | |
| + | ## CURLM_WAKEUP_FAILURE (9) |
| + | |
| Wake up is unavailable or failed. | |
| - | .IP "CURLM_BAD_FUNCTION_ARGUMENT (10)" |
| + | |
| + | ## CURLM_BAD_FUNCTION_ARGUMENT (10) |
| + | |
| A function was called with a bad parameter. | |
| - | .IP "CURLM_ABORTED_BY_CALLBACK (11)" |
| + | |
| + | ## CURLM_ABORTED_BY_CALLBACK (11) |
| + | |
| A multi handle callback returned error. | |
| - | .IP "CURLM_UNRECOVERABLE_POLL (12)" |
| + | |
| + | ## CURLM_UNRECOVERABLE_POLL (12) |
| + | |
| An internal call to poll() or select() returned error that is not recoverable. | |
| - | .SH "CURLSHcode" |
| - | The "share" interface returns a \fBCURLSHcode\fP to indicate when an error has |
| - | occurred. Also consider \fIcurl_share_strerror(3)\fP. |
| - | .IP "CURLSHE_OK (0)" |
| + | |
| + | # CURLSHcode |
| + | |
| + | The "share" interface returns a **CURLSHcode** to indicate when an error has |
| + | occurred. Also consider curl_share_strerror(3). |
| + | |
| + | ## CURLSHE_OK (0) |
| + | |
| All fine. Proceed as usual. | |
| - | .IP "CURLSHE_BAD_OPTION (1)" |
| + | |
| + | ## CURLSHE_BAD_OPTION (1) |
| + | |
| An invalid option was passed to the function. | |
| - | .IP "CURLSHE_IN_USE (2)" |
| + | |
| + | ## CURLSHE_IN_USE (2) |
| + | |
| The share object is currently in use. | |
| - | .IP "CURLSHE_INVALID (3)" |
| + | |
| + | ## CURLSHE_INVALID (3) |
| + | |
| An invalid share object was passed to the function. | |
| - | .IP "CURLSHE_NOMEM (4)" |
| + | |
| + | ## CURLSHE_NOMEM (4) |
| + | |
| Not enough memory was available. | |
| (Added in 7.12.0) | |
| - | .IP "CURLSHE_NOT_BUILT_IN (5)" |
| + | |
| + | ## CURLSHE_NOT_BUILT_IN (5) |
| + | |
| The requested sharing could not be done because the library you use do not have | |
| that particular feature enabled. (Added in 7.23.0) | |
| - | .SH "CURLUcode" |
| - | The URL interface returns a \fICURLUcode\fP to indicate when an error has |
| - | occurred. Also consider \fIcurl_url_strerror(3)\fP. |
| - | .IP "CURLUE_OK (0)" |
| + | |
| + | # CURLUcode |
| + | |
| + | The URL interface returns a *CURLUcode* to indicate when an error has |
| + | occurred. Also consider curl_url_strerror(3). |
| + | |
| + | ## CURLUE_OK (0) |
| + | |
| All fine. Proceed as usual. | |
| - | .IP "CURLUE_BAD_HANDLE (1)" |
| + | |
| + | ## CURLUE_BAD_HANDLE (1) |
| + | |
| An invalid URL handle was passed as argument. | |
| - | .IP "CURLUE_BAD_PARTPOINTER (2)" |
| + | |
| + | ## CURLUE_BAD_PARTPOINTER (2) |
| + | |
| An invalid 'part' argument was passed as argument. | |
| - | .IP "CURLUE_MALFORMED_INPUT (3)" |
| + | |
| + | ## CURLUE_MALFORMED_INPUT (3) |
| + | |
| A malformed input was passed to a URL API function. | |
| - | .IP "CURLUE_BAD_PORT_NUMBER (4)" |
| + | |
| + | ## CURLUE_BAD_PORT_NUMBER (4) |
| + | |
| The port number was not a decimal number between 0 and 65535. | |
| - | .IP "CURLUE_UNSUPPORTED_SCHEME (5)" |
| + | |
| + | ## CURLUE_UNSUPPORTED_SCHEME (5) |
| + | |
| This libcurl build does not support the given URL scheme. | |
| - | .IP "CURLUE_URLDECODE (6)" |
| + | |
| + | ## CURLUE_URLDECODE (6) |
| + | |
| URL decode error, most likely because of rubbish in the input. | |
| - | .IP "CURLUE_OUT_OF_MEMORY (7)" |
| + | |
| + | ## CURLUE_OUT_OF_MEMORY (7) |
| + | |
| A memory function failed. | |
| - | .IP "CURLUE_USER_NOT_ALLOWED (8)" |
| + | |
| + | ## CURLUE_USER_NOT_ALLOWED (8) |
| + | |
| Credentials was passed in the URL when prohibited. | |
| - | .IP "CURLUE_UNKNOWN_PART (9)" |
| + | |
| + | ## CURLUE_UNKNOWN_PART (9) |
| + | |
| An unknown part ID was passed to a URL API function. | |
| - | .IP "CURLUE_NO_SCHEME (10)" |
| + | |
| + | ## CURLUE_NO_SCHEME (10) |
| + | |
| There is no scheme part in the URL. | |
| - | .IP "CURLUE_NO_USER (11)" |
| + | |
| + | ## CURLUE_NO_USER (11) |
| + | |
| There is no user part in the URL. | |
| - | .IP "CURLUE_NO_PASSWORD (12)" |
| + | |
| + | ## CURLUE_NO_PASSWORD (12) |
| + | |
| There is no password part in the URL. | |
| - | .IP "CURLUE_NO_OPTIONS (13)" |
| + | |
| + | ## CURLUE_NO_OPTIONS (13) |
| + | |
| There is no options part in the URL. | |
| - | .IP "CURLUE_NO_HOST (14)" |
| + | |
| + | ## CURLUE_NO_HOST (14) |
| + | |
| There is no host part in the URL. | |
| - | .IP "CURLUE_NO_PORT (15)" |
| + | |
| + | ## CURLUE_NO_PORT (15) |
| + | |
| There is no port part in the URL. | |
| - | .IP "CURLUE_NO_QUERY (16)" |
| + | |
| + | ## CURLUE_NO_QUERY (16) |
| + | |
| There is no query part in the URL. | |
| - | .IP "CURLUE_NO_FRAGMENT (17)" |
| + | |
| + | ## CURLUE_NO_FRAGMENT (17) |
| + | |
| There is no fragment part in the URL. | |
| - | .IP "CURLUE_NO_ZONEID (18)" |
| + | |
| + | ## CURLUE_NO_ZONEID (18) |
| + | |
| There is no zone id set in the URL. | |
| - | .IP "CURLUE_BAD_FILE_URL (19)" |
| + | |
| + | ## CURLUE_BAD_FILE_URL (19) |
| + | |
| The file:// URL is invalid. | |
| - | .IP "CURLUE_BAD_FRAGMENT (20)" |
| + | |
| + | ## CURLUE_BAD_FRAGMENT (20) |
| + | |
| The fragment part of the URL contained bad or invalid characters. | |
| - | .IP "CURLUE_BAD_HOSTNAME (21)" |
| + | |
| + | ## CURLUE_BAD_HOSTNAME (21) |
| + | |
| The hostname contained bad or invalid characters. | |
| - | .IP "CURLUE_BAD_IPV6 (22)" |
| + | |
| + | ## CURLUE_BAD_IPV6 (22) |
| + | |
| The IPv6 address hostname contained bad or invalid characters. | |
| - | .IP "CURLUE_BAD_LOGIN (23)" |
| + | |
| + | ## CURLUE_BAD_LOGIN (23) |
| + | |
| The login part of the URL contained bad or invalid characters. | |
| - | .IP "CURLUE_BAD_PASSWORD (24)" |
| + | |
| + | ## CURLUE_BAD_PASSWORD (24) |
| + | |
| The password part of the URL contained bad or invalid characters. | |
| - | .IP "CURLUE_BAD_PATH (25)" |
| + | |
| + | ## CURLUE_BAD_PATH (25) |
| + | |
| The path part of the URL contained bad or invalid characters. | |
| - | .IP "CURLUE_BAD_QUERY (26)" |
| + | |
| + | ## CURLUE_BAD_QUERY (26) |
| + | |
| The query part of the URL contained bad or invalid characters. | |
| - | .IP "CURLUE_BAD_SCHEME (27)" |
| + | |
| + | ## CURLUE_BAD_SCHEME (27) |
| + | |
| The scheme part of the URL contained bad or invalid characters. | |
| - | .IP "CURLUE_BAD_SLASHES (28)" |
| + | |
| + | ## CURLUE_BAD_SLASHES (28) |
| + | |
| The URL contained an invalid number of slashes. | |
| - | .IP "CURLUE_BAD_USER (29)" |
| + | |
| + | ## CURLUE_BAD_USER (29) |
| + | |
| The user part of the URL contained bad or invalid characters. | |
| - | .IP "CURLUE_LACKS_IDN (30)" |
| + | |
| + | ## CURLUE_LACKS_IDN (30) |
| + | |
| libcurl lacks IDN support. | |
| - | .IP "CURLUE_TOO_LARGE (31)" |
| + | |
| + | ## CURLUE_TOO_LARGE (31) |
| + | |
| A value or data field is larger than allowed. | |
| - | .SH "CURLHcode" |
| - | The header interface returns a \fICURLHcode\fP to indicate when an error has |
| + | |
| + | # CURLHcode |
| + | |
| + | The header interface returns a *CURLHcode* to indicate when an error has |
| occurred. | |
| - | .IP "CURLHE_OK (0)" |
| + | |
| + | ## CURLHE_OK (0) |
| + | |
| All fine. Proceed as usual. | |
| - | .IP "CURLHE_BADINDEX (1)" |
| + | |
| + | ## CURLHE_BADINDEX (1) |
| + | |
| There is no header with the requested index. | |
| - | .IP "CURLHE_MISSING (2)" |
| + | |
| + | ## CURLHE_MISSING (2) |
| + | |
| No such header exists. | |
| - | .IP "CURLHE_NOHEADERS (3)" |
| + | |
| + | ## CURLHE_NOHEADERS (3) |
| + | |
| No headers at all have been recorded. | |
| - | .IP "CURLHE_NOREQUEST (4)" |
| + | |
| + | ## CURLHE_NOREQUEST (4) |
| + | |
| There was no such request number. | |
| - | .IP "CURLHE_OUT_OF_MEMORY (5)" |
| + | |
| + | ## CURLHE_OUT_OF_MEMORY (5) |
| + | |
| Out of resources | |
| - | .IP "CURLHE_BAD_ARGUMENT (6)" |
| + | |
| + | ## CURLHE_BAD_ARGUMENT (6) |
| + | |
| One or more of the given arguments are bad. | |
| - | .IP "CURLHE_NOT_BUILT_IN (7)" |
| + | |
| + | ## CURLHE_NOT_BUILT_IN (7) |
| + | |
| HTTP support or the header API has been disabled in the build. | |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_strerror (3), |
| - | .BR curl_multi_strerror (3), |
| - | .BR curl_share_strerror (3), |
| - | .BR curl_url_strerror (3), |
| - | .BR CURLOPT_ERRORBUFFER (3), |
| - | .BR CURLOPT_VERBOSE (3), |
| - | .BR CURLOPT_DEBUGFUNCTION (3) |
| @@ -1,39 +1,31 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH libcurl-multi 3 "19 Sep 2014" "libcurl" "libcurl" |
| - | .SH NAME |
| - | libcurl-multi \- how to use the multi interface |
| - | .SH DESCRIPTION |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: libcurl-multi |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - libcurl (3) |
| + | - libcurl-easy (3) |
| + | - libcurl-errors (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | libcurl-multi - how to use the multi interface |
| + | |
| + | # DESCRIPTION |
| + | |
| This is an overview on how to use the libcurl multi interface in your C | |
| programs. There are specific man pages for each function mentioned in | |
| - | here. There is also the \fIlibcurl-tutorial(3)\fP man page for a complete |
| - | tutorial to programming with libcurl and the \fIlibcurl-easy(3)\fP man page |
| + | here. There is also the libcurl-tutorial(3) man page for a complete |
| + | tutorial to programming with libcurl and the libcurl-easy(3) man page |
| for an overview of the libcurl easy interface. | |
| All functions in the multi interface are prefixed with curl_multi. | |
| - | .SH "OBJECTIVES" |
| + | |
| + | # OBJECTIVES |
| + | |
| The multi interface offers several abilities that the easy interface does not. | |
| They are mainly: | |
| @@ -48,15 +40,17 @@ curl's file descriptors simultaneously. | |
| 4. Enable event-based handling and scaling transfers up to and beyond | |
| thousands of parallel connections. | |
| - | .SH "ONE MULTI HANDLE MANY EASY HANDLES" |
| + | |
| + | # ONE MULTI HANDLE MANY EASY HANDLES |
| + | |
| To use the multi interface, you must first create a 'multi handle' with | |
| - | \fIcurl_multi_init(3)\fP. This handle is then used as input to all further |
| + | curl_multi_init(3). This handle is then used as input to all further |
| curl_multi_* functions. | |
| With a multi handle and the multi interface you can do several simultaneous | |
| transfers in parallel. Each single transfer is built up around an easy | |
| handle. You create all the easy handles you need, and setup the appropriate | |
| - | options for each easy handle using \fIcurl_easy_setopt(3)\fP. |
| + | options for each easy handle using curl_easy_setopt(3). |
| There are two flavors of the multi interface, the select() oriented one and | |
| the event based one we call multi_socket. You benefit from reading through the | |
| @@ -64,21 +58,21 @@ description of both versions to fully understand how they work and | |
| differentiate. We start out with the select() oriented version. | |
| When an easy handle is setup and ready for transfer, then instead of using | |
| - | \fIcurl_easy_perform(3)\fP like when using the easy interface for transfers, |
| + | curl_easy_perform(3) like when using the easy interface for transfers, |
| you should add the easy handle to the multi handle with | |
| - | \fIcurl_multi_add_handle(3)\fP. You can add more easy handles to a multi |
| + | curl_multi_add_handle(3). You can add more easy handles to a multi |
| handle at any point, even if other transfers are already running. | |
| Should you change your mind, the easy handle is again removed from the multi | |
| - | stack using \fIcurl_multi_remove_handle(3)\fP. Once removed from the multi |
| + | stack using curl_multi_remove_handle(3). Once removed from the multi |
| handle, you can again use other easy interface functions like | |
| - | \fIcurl_easy_perform(3)\fP on the handle or whatever you think is |
| + | curl_easy_perform(3) on the handle or whatever you think is |
| necessary. You can remove handles at any point during transfers. | |
| Adding the easy handle to the multi handle does not start the transfer. | |
| Remember that one of the main ideas with this interface is to let your | |
| application drive. You drive the transfers by invoking | |
| - | \fIcurl_multi_perform(3)\fP. libcurl then transfers data if there is anything |
| + | curl_multi_perform(3). libcurl then transfers data if there is anything |
| available to transfer. It uses the callbacks and everything else you have | |
| setup in the individual easy handles. It transfers data on all current | |
| transfers in the multi stack that are ready to transfer anything. It may be | |
| @@ -87,22 +81,22 @@ to the calling application. | |
| Your application extracts info from libcurl about when it would like to get | |
| invoked to transfer data or do other work. The most convenient way is to use | |
| - | \fIcurl_multi_poll(3)\fP that helps you wait until the application should call |
| + | curl_multi_poll(3) that helps you wait until the application should call |
| libcurl again. The older API to accomplish the same thing is | |
| - | \fIcurl_multi_fdset(3)\fP that extracts \fIfd_sets\fP from libcurl to use in |
| + | curl_multi_fdset(3) that extracts *fd_sets* from libcurl to use in |
| select() or poll() calls in order to get to know when the transfers in the | |
| multi stack might need attention. Both these APIs allow for your program to | |
| wait for input on your own private file descriptors at the same time. | |
| - | \fIcurl_multi_timeout(3)\fP also helps you with providing a suitable timeout |
| + | curl_multi_timeout(3) also helps you with providing a suitable timeout |
| period for your select() calls. | |
| - | \fIcurl_multi_perform(3)\fP stores the number of still running transfers in |
| + | curl_multi_perform(3) stores the number of still running transfers in |
| one of its input arguments, and by reading that you can figure out when all | |
| the transfers in the multi handles are done. 'done' does not mean | |
| successful. One or more of the transfers may have failed. | |
| To get information about completed transfers, to figure out success or not and | |
| - | similar, \fIcurl_multi_info_read(3)\fP should be called. It can return a |
| + | similar, curl_multi_info_read(3) should be called. It can return a |
| message about a current or previous transfer. Repeated invokes of the function | |
| get more messages until the message queue is empty. The information you | |
| receive there includes an easy handle pointer which you may use to identify | |
| @@ -110,31 +104,33 @@ which easy handle the information regards. | |
| When a single transfer is completed, the easy handle is still left added to | |
| the multi stack. You need to first remove the easy handle with | |
| - | \fIcurl_multi_remove_handle(3)\fP and then close it with |
| - | \fIcurl_easy_cleanup(3)\fP, or possibly set new options to it and add it again |
| - | with \fIcurl_multi_add_handle(3)\fP to start another transfer. |
| + | curl_multi_remove_handle(3) and then close it with |
| + | curl_easy_cleanup(3), or possibly set new options to it and add it again |
| + | with curl_multi_add_handle(3) to start another transfer. |
| When all transfers in the multi stack are done, close the multi handle with | |
| - | \fIcurl_multi_cleanup(3)\fP. Be careful and please note that you \fBMUST\fP |
| - | invoke separate \fIcurl_easy_cleanup(3)\fP calls for every single easy handle |
| + | curl_multi_cleanup(3). Be careful and please note that you **MUST** |
| + | invoke separate curl_easy_cleanup(3) calls for every single easy handle |
| to clean them up properly. | |
| If you want to reuse an easy handle that was added to the multi handle for | |
| transfer, you must first remove it from the multi stack and then re-add it | |
| again (possibly after having altered some options at your own choice). | |
| - | .SH "MULTI_SOCKET" |
| - | \fIcurl_multi_socket_action(3)\fP function offers a way for applications to |
| + | |
| + | # MULTI_SOCKET |
| + | |
| + | curl_multi_socket_action(3) function offers a way for applications to |
| not only avoid being forced to use select(), but it also offers a much more | |
| high-performance API that makes a significant difference for applications | |
| using large numbers of simultaneous connections. | |
| - | \fIcurl_multi_socket_action(3)\fP is then used instead of |
| - | \fIcurl_multi_perform(3)\fP. |
| + | curl_multi_socket_action(3) is then used instead of |
| + | curl_multi_perform(3). |
| When using this API, you add easy handles to the multi handle just as with the | |
| normal multi interface. Then you also set two callbacks with the | |
| - | \fICURLMOPT_SOCKETFUNCTION(3)\fP and \fICURLMOPT_TIMERFUNCTION(3)\fP options |
| - | to \fIcurl_multi_setopt(3)\fP. They are two callback functions that libcurl |
| + | CURLMOPT_SOCKETFUNCTION(3) and CURLMOPT_TIMERFUNCTION(3) options |
| + | to curl_multi_setopt(3). They are two callback functions that libcurl |
| calls with information about what sockets to wait for, and for what activity, | |
| and what the current timeout time is - if that expires libcurl should be | |
| notified. | |
| @@ -144,14 +140,14 @@ sockets libcurl is currently using and for what activities (read and/or write) | |
| on those sockets your application is expected to wait for. | |
| Your application must make sure to receive all sockets informed about in the | |
| - | \fICURLMOPT_SOCKETFUNCTION(3)\fP callback and make sure it reacts on the given |
| + | CURLMOPT_SOCKETFUNCTION(3) callback and make sure it reacts on the given |
| activity on them. When a socket has the given activity, you call | |
| - | \fIcurl_multi_socket_action(3)\fP specifying which socket and action there |
| + | curl_multi_socket_action(3) specifying which socket and action there |
| are. | |
| - | The \fICURLMOPT_TIMERFUNCTION(3)\fP callback is called to set a timeout. When |
| + | The CURLMOPT_TIMERFUNCTION(3) callback is called to set a timeout. When |
| that timeout expires, your application should call the | |
| - | \fIcurl_multi_socket_action(3)\fP function saying it was due to a timeout. |
| + | curl_multi_socket_action(3) function saying it was due to a timeout. |
| This API is typically used with an event-driven underlying functionality (like | |
| libevent, libev, kqueue, epoll or similar) with which the application | |
| @@ -160,25 +156,23 @@ better scale upward and beyond thousands of simultaneous transfers without | |
| losing performance. | |
| When you have added your initial set of handles, you call | |
| - | \fIcurl_multi_socket_action(3)\fP with CURL_SOCKET_TIMEOUT set in the |
| - | \fIsockfd\fP argument, and you get callbacks invoked that set you up and you |
| - | then continue to call \fIcurl_multi_socket_action(3)\fP accordingly when you |
| + | curl_multi_socket_action(3) with CURL_SOCKET_TIMEOUT set in the |
| + | *sockfd* argument, and you get callbacks invoked that set you up and you |
| + | then continue to call curl_multi_socket_action(3) accordingly when you |
| get activity on the sockets you have been asked to wait on, or if the timeout | |
| timer expires. | |
| - | You can poll \fIcurl_multi_info_read(3)\fP to see if any transfer has |
| + | You can poll curl_multi_info_read(3) to see if any transfer has |
| completed, as it then has a message saying so. | |
| - | .SH "BLOCKING" |
| + | |
| + | # BLOCKING |
| + | |
| A few areas in the code are still using blocking code, even when used from the | |
| multi interface. While we certainly want and intend for these to get fixed in | |
| the future, you should be aware of the following current restrictions: | |
| - | .nf |
| + | ~~~c |
| - Name resolves unless the c-ares or threaded-resolver backends are used | |
| - file:// transfers | |
| - TELNET transfers | |
| - | .fi |
| - | .SH "SEE ALSO" |
| - | .BR libcurl-errors (3), |
| - | .BR libcurl-easy (3), |
| - | .BR libcurl (3) |
| + | ~~~ |
| @@ -1,31 +1,19 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH libcurl-security 3 "13 Feb 2018" "libcurl" "libcurl" |
| - | .SH NAME |
| - | libcurl-security \- security considerations when using libcurl |
| - | .SH "Security" |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: libcurl-security |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - libcurl-thread (3) |
| + | --- |
| + | <!-- markdown-link-check-disable --> |
| + | # NAME |
| + | |
| + | libcurl-security - security considerations when using libcurl |
| + | |
| + | # Security |
| + | |
| The libcurl project takes security seriously. The library is written with | |
| caution and precautions are taken to mitigate many kinds of risks encountered | |
| while operating with potentially malicious servers on the Internet. It is a | |
| @@ -42,17 +30,21 @@ classes of attacks that robust applications should consider. The Common | |
| Weakness Enumeration project at https://cwe.mitre.org/ is a good reference for | |
| many of these and similar types of weaknesses of which application writers | |
| should be aware. | |
| - | .SH "Command Lines" |
| + | |
| + | # Command Lines |
| + | |
| If you use a command line tool (such as curl) that uses libcurl, and you give | |
| options to the tool on the command line those options can get read by other | |
| - | users of your system when they use \fIps\fP or other tools to list currently |
| + | users of your system when they use *ps* or other tools to list currently |
| running processes. | |
| To avoid these problems, never feed sensitive things to programs using command | |
| - | line options. Write them to a protected file and use the \-K option to avoid |
| + | line options. Write them to a protected file and use the -K option to avoid |
| this. | |
| - | .SH ".netrc" |
| - | \&.netrc is a pretty handy file/feature that allows you to login quickly and |
| + | |
| + | # .netrc |
| + | |
| + | &.netrc is a pretty handy file/feature that allows you to login quickly and |
| automatically to frequently visited sites. The file contains passwords in | |
| clear text and is a real security risk. In some cases, your .netrc is also | |
| stored in a home directory that is NFS mounted or used on another network | |
| @@ -64,7 +56,9 @@ URL might then be possible to pass on passwords. | |
| To avoid these problems, do not use .netrc files and never store passwords in | |
| plain text anywhere. | |
| - | .SH "Clear Text Passwords" |
| + | |
| + | # Clear Text Passwords |
| + | |
| Many of the protocols libcurl supports send name and password unencrypted as | |
| clear text (HTTP Basic authentication, FTP, TELNET etc). It is easy for anyone | |
| on your network or a network nearby yours to just fire up a network analyzer | |
| @@ -76,7 +70,9 @@ To avoid this problem, use an authentication mechanism or other protocol that | |
| does not let snoopers see your password: Digest, CRAM-MD5, Kerberos, SPNEGO or | |
| NTLM authentication. Or even better: use authenticated protocols that protect | |
| the entire connection and everything sent over it. | |
| - | .SH "Unauthenticated Connections" |
| + | |
| + | # Unauthenticated Connections |
| + | |
| Protocols that do not have any form of cryptographic authentication cannot | |
| with any certainty know that they communicate with the right remote server. | |
| @@ -90,12 +86,18 @@ before it reaches the intended server. If it even reaches the intended server | |
| at all. | |
| Remedies: | |
| - | .IP "Restrict operations to authenticated transfers" |
| + | |
| + | ## Restrict operations to authenticated transfers |
| + | |
| Use authenticated protocols protected with HTTPS or SSH. | |
| - | .IP "Make sure the server's certificate etc is verified" |
| + | |
| + | ## Make sure the server's certificate etc is verified |
| + | |
| Never ever switch off certificate verification. | |
| - | .SH "Redirects" |
| - | The \fICURLOPT_FOLLOWLOCATION(3)\fP option automatically follows HTTP |
| + | |
| + | # Redirects |
| + | |
| + | The CURLOPT_FOLLOWLOCATION(3) option automatically follows HTTP |
| redirects sent by a remote server. These redirects can refer to any kind of | |
| URL, not just HTTP. libcurl restricts the protocols allowed to be used in | |
| redirects for security reasons: only HTTP, HTTPS, FTP and FTPS are | |
| @@ -105,64 +107,68 @@ A redirect to a file: URL would cause the libcurl to read (or write) arbitrary | |
| files from the local filesystem. If the application returns the data back to | |
| the user (as would happen in some kinds of CGI scripts), an attacker could | |
| leverage this to read otherwise forbidden data (e.g. | |
| - | \fBfile://localhost/etc/passwd\fP). |
| + | **file://localhost/etc/passwd**). |
| If authentication credentials are stored in the ~/.netrc file, or Kerberos is | |
| in use, any other URL type (not just file:) that requires authentication is | |
| - | also at risk. A redirect such as ftp://some-internal-server/private-file would |
| + | also at risk. A redirect such as **ftp://some-internal-server/private-file** would |
| then return data even when the server is password protected. | |
| In the same way, if an unencrypted SSH private key has been configured for the | |
| user running the libcurl application, SCP: or SFTP: URLs could access password | |
| or private-key protected resources, | |
| - | e.g. \fBsftp://user@some-internal-server/etc/passwd\fP |
| + | e.g. **sftp://user@some-internal-server/etc/passwd** |
| - | The \fICURLOPT_REDIR_PROTOCOLS(3)\fP and \fICURLOPT_NETRC(3)\fP options can be |
| + | The CURLOPT_REDIR_PROTOCOLS(3) and CURLOPT_NETRC(3) options can be |
| used to mitigate against this kind of attack. | |
| A redirect can also specify a location available only on the machine running | |
| libcurl, including servers hidden behind a firewall from the attacker. | |
| - | e.g. http://127.0.0.1/ or http://intranet/delete-stuff.cgi?delete=all or |
| - | tftp://bootp-server/pc-config-data |
| + | E.g. **http://127.0.0.1/** or **http://intranet/delete-stuff.cgi?delete=all** or |
| + | **tftp://bootp-server/pc-config-data** |
| Applications can mitigate against this by disabling | |
| - | \fICURLOPT_FOLLOWLOCATION(3)\fP and handling redirects itself, sanitizing URLs |
| - | as necessary. Alternately, an app could leave \fICURLOPT_FOLLOWLOCATION(3)\fP |
| - | enabled but set \fICURLOPT_REDIR_PROTOCOLS(3)\fP and install a |
| - | \fICURLOPT_OPENSOCKETFUNCTION(3)\fP or \fICURLOPT_PREREQFUNCTION(3)\fP callback |
| + | CURLOPT_FOLLOWLOCATION(3) and handling redirects itself, sanitizing URLs |
| + | as necessary. Alternately, an app could leave CURLOPT_FOLLOWLOCATION(3) |
| + | enabled but set CURLOPT_REDIR_PROTOCOLS(3) and install a |
| + | CURLOPT_OPENSOCKETFUNCTION(3) or CURLOPT_PREREQFUNCTION(3) callback |
| function in which addresses are sanitized before use. | |
| - | .SH "CRLF in Headers" |
| + | |
| + | # CRLF in Headers |
| + | |
| For all options in libcurl which specify headers, including but not limited to | |
| - | \fICURLOPT_HTTPHEADER(3)\fP, \fICURLOPT_PROXYHEADER(3)\fP, |
| - | \fICURLOPT_COOKIE(3)\fP, \fICURLOPT_USERAGENT(3)\fP, \fICURLOPT_REFERER(3)\fP |
| - | and \fICURLOPT_RANGE(3)\fP, libcurl sends the headers as-is and does not apply |
| + | CURLOPT_HTTPHEADER(3), CURLOPT_PROXYHEADER(3), |
| + | CURLOPT_COOKIE(3), CURLOPT_USERAGENT(3), CURLOPT_REFERER(3) |
| + | and CURLOPT_RANGE(3), libcurl sends the headers as-is and does not apply |
| any special sanitation or normalization to them. | |
| If you allow untrusted user input into these options without sanitizing CRLF | |
| sequences in them, someone malicious may be able to modify the request in a | |
| way you did not intend such as injecting new headers. | |
| - | .SH "Local Resources" |
| + | |
| + | # Local Resources |
| + | |
| A user who can control the DNS server of a domain being passed in within a URL | |
| can change the address of the host to a local, private address which a | |
| - | server-side libcurl-using application could then use. e.g. the innocuous URL |
| - | \fBhttp://fuzzybunnies.example.com/\fP could actually resolve to the IP |
| + | server-side libcurl-using application could then use. E.g. the innocuous URL |
| + | **http://fuzzybunnies.example.com/** could actually resolve to the IP |
| address of a server behind a firewall, such as 127.0.0.1 or | |
| 10.1.2.3. Applications can mitigate against this by setting a | |
| - | \fICURLOPT_OPENSOCKETFUNCTION(3)\fP or \fICURLOPT_PREREQFUNCTION(3)\fP and |
| + | CURLOPT_OPENSOCKETFUNCTION(3) or CURLOPT_PREREQFUNCTION(3) and |
| checking the address before a connection. | |
| All the malicious scenarios regarding redirected URLs apply just as well to | |
| non-redirected URLs, if the user is allowed to specify an arbitrary URL that | |
| could point to a private resource. For example, a web app providing a | |
| - | translation service might happily translate \fBfile://localhost/etc/passwd\fP |
| + | translation service might happily translate **file://localhost/etc/passwd** |
| and display the result. Applications can mitigate against this with the | |
| - | \fICURLOPT_PROTOCOLS(3)\fP option as well as by similar mitigation techniques |
| + | CURLOPT_PROTOCOLS(3) option as well as by similar mitigation techniques |
| for redirections. | |
| A malicious FTP server could in response to the PASV command return an IP | |
| address and port number for a server local to the app running libcurl but | |
| behind a firewall. Applications can mitigate against this by using the | |
| - | \fICURLOPT_FTP_SKIP_PASV_IP(3)\fP option or \fICURLOPT_FTPPORT(3)\fP. |
| + | CURLOPT_FTP_SKIP_PASV_IP(3) option or CURLOPT_FTPPORT(3). |
| Local servers sometimes assume local access comes from friends and trusted | |
| users. An application that expects https://example.com/file_to_read that and | |
| @@ -173,61 +179,75 @@ Allowing your application to connect to local hosts, be it the same machine | |
| that runs the application or a machine on the same local network, might be | |
| possible to exploit by an attacker who then perhaps can "port-scan" the | |
| particular hosts - depending on how the application and servers acts. | |
| - | .SH "IPv4 Addresses" |
| + | |
| + | # IPv4 Addresses |
| + | |
| Some users might be tempted to filter access to local resources or similar | |
| based on numerical IPv4 addresses used in URLs. This is a bad and error-prone | |
| idea because of the many different ways a numerical IPv4 address can be | |
| specified and libcurl accepts: one to four dot-separated fields using one of | |
| or a mix of decimal, octal or hexadecimal encoding. | |
| - | .SH "IPv6 Addresses" |
| + | |
| + | # IPv6 Addresses |
| + | |
| libcurl handles IPv6 addresses transparently and just as easily as IPv4 | |
| addresses. That means that a sanitizing function that filters out addresses | |
| - | like 127.0.0.1 is not sufficient - the equivalent IPv6 addresses \fB::1\fP, |
| - | \fB::\fP, \fB0:00::0:1\fP, \fB::127.0.0.1\fP and \fB::ffff:7f00:1\fP supplied |
| + | like 127.0.0.1 is not sufficient - the equivalent IPv6 addresses **::1**, |
| + | **::**, **0:00::0:1**, **::127.0.0.1** and **::ffff:7f00:1** supplied |
| somehow by an attacker would all bypass a naive filter and could allow access | |
| to undesired local resources. IPv6 also has special address blocks like | |
| link-local and site-local that generally should not be accessed by a | |
| server-side libcurl-using application. A poorly configured firewall installed | |
| in a data center, organization or server may also be configured to limit IPv4 | |
| connections but leave IPv6 connections wide open. In some cases, setting | |
| - | \fICURLOPT_IPRESOLVE(3)\fP to CURL_IPRESOLVE_V4 can be used to limit resolved |
| + | CURLOPT_IPRESOLVE(3) to CURL_IPRESOLVE_V4 can be used to limit resolved |
| addresses to IPv4 only and bypass these issues. | |
| - | .SH Uploads |
| + | |
| + | # Uploads |
| + | |
| When uploading, a redirect can cause a local (or remote) file to be | |
| overwritten. Applications must not allow any unsanitized URL to be passed in | |
| - | for uploads. Also, \fICURLOPT_FOLLOWLOCATION(3)\fP should not be used on |
| + | for uploads. Also, CURLOPT_FOLLOWLOCATION(3) should not be used on |
| uploads. Instead, the applications should consider handling redirects itself, | |
| sanitizing each URL first. | |
| - | .SH Authentication |
| - | Use of \fICURLOPT_UNRESTRICTED_AUTH(3)\fP could cause authentication |
| + | |
| + | # Authentication |
| + | |
| + | Use of CURLOPT_UNRESTRICTED_AUTH(3) could cause authentication |
| information to be sent to an unknown second server. Applications can mitigate | |
| - | against this by disabling \fICURLOPT_FOLLOWLOCATION(3)\fP and handling |
| + | against this by disabling CURLOPT_FOLLOWLOCATION(3) and handling |
| redirects itself, sanitizing where necessary. | |
| - | Use of the CURLAUTH_ANY option to \fICURLOPT_HTTPAUTH(3)\fP could result in |
| + | Use of the CURLAUTH_ANY option to CURLOPT_HTTPAUTH(3) could result in |
| user name and password being sent in clear text to an HTTP server. Instead, | |
| use CURLAUTH_ANYSAFE which ensures that the password is encrypted over the | |
| network, or else fail the request. | |
| - | Use of the CURLUSESSL_TRY option to \fICURLOPT_USE_SSL(3)\fP could result in |
| + | Use of the CURLUSESSL_TRY option to CURLOPT_USE_SSL(3) could result in |
| user name and password being sent in clear text to an FTP server. Instead, | |
| use CURLUSESSL_CONTROL to ensure that an encrypted connection is used or else | |
| fail the request. | |
| - | .SH Cookies |
| + | |
| + | # Cookies |
| + | |
| If cookies are enabled and cached, then a user could craft a URL which | |
| performs some malicious action to a site whose authentication is already | |
| - | stored in a cookie. e.g. http://mail.example.com/delete-stuff.cgi?delete=all |
| - | Applications can mitigate against this by disabling cookies or clearing them |
| - | between requests. |
| - | .SH "Dangerous SCP URLs" |
| + | stored in a cookie. E.g. |
| + | **http://mail.example.com/delete-stuff.cgi?delete=all** Applications can |
| + | mitigate against this by disabling cookies or clearing them between requests. |
| + | |
| + | # Dangerous SCP URLs |
| + | |
| SCP URLs can contain raw commands within the scp: URL, which is a side effect | |
| - | of how the SCP protocol is designed. e.g. |
| - | .nf |
| + | of how the SCP protocol is designed. E.g. |
| + | ~~~ |
| scp://user:pass@host/a;date >/tmp/test; | |
| - | .fi |
| + | ~~~ |
| Applications must not allow unsanitized SCP: URLs to be passed in for | |
| downloads. | |
| - | .SH "file://" |
| + | |
| + | # file:// |
| + | |
| By default curl and libcurl support file:// URLs. Such a URL is always an | |
| access, or attempted access, to a local resource. If your application wants to | |
| avoid that, keep control of what URLs to use and/or prevent curl/libcurl from | |
| @@ -235,7 +255,8 @@ using the protocol. | |
| By default, libcurl prohibits redirects to file:// URLs. | |
| - | .SH "Warning: file:// on Windows" |
| + | # Warning: file:// on Windows |
| + | |
| The Windows operating system tries automatically, and without any way for | |
| applications to disable it, to establish a connection to another host over the | |
| network and access it (over SMB or other protocols), if only the correct file | |
| @@ -260,7 +281,9 @@ If you use curl or libcurl on Windows (any version), disable the use of the | |
| FILE protocol in curl or be prepared that accesses to a range of "magic paths" | |
| potentially make your system access other hosts on your network. curl cannot | |
| protect you against this. | |
| - | .SH "What if the user can set the URL" |
| + | |
| + | # What if the user can set the URL |
| + | |
| Applications may find it tempting to let users set the URL that it can work | |
| on. That is probably fine, but opens up for mischief and trickery that you as | |
| an application author may want to address or take precautions against. | |
| @@ -278,14 +301,22 @@ particular scheme in the URL but point to a server doing a different protocol | |
| on a non-standard port. | |
| Remedies: | |
| - | .IP "Use --proto" |
| - | curl command lines can use \fI--proto\fP to limit what URL schemes it accepts |
| - | .IP "Use CURLOPT_PROTOCOLS" |
| - | libcurl programs can use \fICURLOPT_PROTOCOLS(3)\fP to limit what URL schemes it accepts |
| - | .IP "consider not allowing the user to set the full URL" |
| + | |
| + | ## Use --proto |
| + | |
| + | curl command lines can use *--proto* to limit what URL schemes it accepts |
| + | |
| + | ## Use CURLOPT_PROTOCOLS |
| + | |
| + | libcurl programs can use CURLOPT_PROTOCOLS(3) to limit what URL schemes it accepts |
| + | |
| + | ## consider not allowing the user to set the full URL |
| + | |
| Maybe just let the user provide data for parts of it? Or maybe filter input to | |
| only allow specific choices? | |
| - | .SH "RFC 3986 vs WHATWG URL" |
| + | |
| + | # RFC 3986 vs WHATWG URL |
| + | |
| curl supports URLs mostly according to how they are defined in RFC 3986, and | |
| has done so since the beginning. | |
| @@ -298,9 +329,11 @@ assumptions about a link. This can mislead users into getting the wrong thing, | |
| connecting to the wrong host or otherwise not working identically. | |
| Within an application, this can be mitigated by always using the | |
| - | \fIcurl_url(3)\fP API to parse URLs, ensuring that they are parsed the same way |
| + | curl_url(3) API to parse URLs, ensuring that they are parsed the same way |
| as within libcurl itself. | |
| - | .SH "FTP uses two connections" |
| + | |
| + | # FTP uses two connections |
| + | |
| When performing an FTP transfer, two TCP connections are used: one for setting | |
| up the transfer and one for the actual data. | |
| @@ -329,46 +362,56 @@ instead of back to curl. | |
| The fact that FTP uses two connections makes it vulnerable in a way that is | |
| hard to avoid. | |
| - | .SH "Denial of Service" |
| + | |
| + | # Denial of Service |
| + | |
| A malicious server could cause libcurl to effectively hang by sending data | |
| slowly, or even no data at all but just keeping the TCP connection open. This | |
| could effectively result in a denial-of-service attack. The | |
| - | \fICURLOPT_TIMEOUT(3)\fP and/or \fICURLOPT_LOW_SPEED_LIMIT(3)\fP options can |
| + | CURLOPT_TIMEOUT(3) and/or CURLOPT_LOW_SPEED_LIMIT(3) options can |
| be used to mitigate against this. | |
| A malicious server could cause libcurl to download an infinite amount of data, | |
| potentially causing all of memory or disk to be filled. Setting the | |
| - | \fICURLOPT_MAXFILESIZE_LARGE(3)\fP option is not sufficient to guard against |
| + | CURLOPT_MAXFILESIZE_LARGE(3) option is not sufficient to guard against |
| this. Instead, applications should monitor the amount of data received within | |
| the write or progress callback and abort once the limit is reached. | |
| A malicious HTTP server could cause an infinite redirection loop, causing a | |
| denial-of-service. This can be mitigated by using the | |
| - | \fICURLOPT_MAXREDIRS(3)\fP option. |
| - | .SH "Arbitrary Headers" |
| + | CURLOPT_MAXREDIRS(3) option. |
| + | |
| + | # Arbitrary Headers |
| + | |
| User-supplied data must be sanitized when used in options like | |
| - | \fICURLOPT_USERAGENT(3)\fP, \fICURLOPT_HTTPHEADER(3)\fP, |
| - | \fICURLOPT_POSTFIELDS(3)\fP and others that are used to generate structured |
| + | CURLOPT_USERAGENT(3), CURLOPT_HTTPHEADER(3), |
| + | CURLOPT_POSTFIELDS(3) and others that are used to generate structured |
| data. Characters like embedded carriage returns or ampersands could allow the | |
| user to create additional headers or fields that could cause malicious | |
| transactions. | |
| - | .SH "Server-supplied Names" |
| + | |
| + | # Server-supplied Names |
| + | |
| A server can supply data which the application may, in some cases, use as a | |
| file name. The curl command-line tool does this with | |
| - | \fI--remote-header-name\fP, using the Content-disposition: header to generate |
| - | a file name. An application could also use \fICURLINFO_EFFECTIVE_URL(3)\fP to |
| + | *--remote-header-name*, using the Content-disposition: header to generate |
| + | a file name. An application could also use CURLINFO_EFFECTIVE_URL(3) to |
| generate a file name from a server-supplied redirect URL. Special care must be | |
| taken to sanitize such names to avoid the possibility of a malicious server | |
| - | supplying one like \fB"/etc/passwd"\fP, \fB"\\autoexec.bat"\fP, \fB"prn:"\fP |
| - | or even \fB".bashrc"\fP. |
| - | .SH "Server Certificates" |
| - | A secure application should never use the \fICURLOPT_SSL_VERIFYPEER(3)\fP |
| + | supplying one like **"/etc/passwd"**, **"autoexec.bat"**, **"prn:"** |
| + | or even **".bashrc"**. |
| + | |
| + | # Server Certificates |
| + | |
| + | A secure application should never use the CURLOPT_SSL_VERIFYPEER(3) |
| option to disable certificate validation. There are numerous attacks that are | |
| enabled by applications that fail to properly validate server TLS/SSL | |
| certificates, thus enabling a malicious server to spoof a legitimate | |
| one. HTTPS without validated certificates is potentially as insecure as a | |
| plain HTTP connection. | |
| - | .SH "Showing What You Do" |
| + | |
| + | # Showing What You Do |
| + | |
| Relatedly, be aware that in situations when you have problems with libcurl and | |
| ask someone for help, everything you reveal in order to get best possible help | |
| might also impose certain security related risks. Host names, user names, | |
| @@ -384,7 +427,9 @@ sensitive data. | |
| To avoid this problem, you must of course use your common sense. Often, you | |
| can just edit out the sensitive data or just search/replace your true | |
| information with faked data. | |
| - | .SH "setuid applications using libcurl" |
| + | |
| + | # setuid applications using libcurl |
| + | |
| libcurl-using applications that set the 'setuid' bit to run with elevated or | |
| modified rights also implicitly give that extra power to libcurl and this | |
| should only be done after careful considerations. | |
| @@ -396,16 +441,20 @@ that the user is otherwise not able to view (like credentials for a login | |
| etc), it should be noted that libcurl still might understand proxy environment | |
| variables that allow the user to redirect libcurl operations to use a proxy | |
| controlled by the user. | |
| - | .SH "File descriptors, fork and NTLM" |
| - | An application that uses libcurl and invokes \fIfork()\fP gets all file |
| + | |
| + | # File descriptors, fork and NTLM |
| + | |
| + | An application that uses libcurl and invokes *fork()* gets all file |
| descriptors duplicated in the child process, including the ones libcurl | |
| created. | |
| - | libcurl itself uses \fIfork()\fP and \fIexecl()\fP if told to use the |
| - | \fBCURLAUTH_NTLM_WB\fP authentication method which then invokes the helper |
| + | libcurl itself uses *fork()* and *execl()* if told to use the |
| + | **CURLAUTH_NTLM_WB** authentication method which then invokes the helper |
| command in a child process with file descriptors duplicated. Make sure that | |
| only the trusted and reliable helper program is invoked! | |
| - | .SH "Secrets in memory" |
| + | |
| + | # Secrets in memory |
| + | |
| When applications pass user names, passwords or other sensitive data to | |
| libcurl to be used for upcoming transfers, those secrets are kept around as-is | |
| in memory. In many cases they are stored in the heap for as long as the handle | |
| @@ -417,17 +466,23 @@ core dump file, such data might be accessible. | |
| Further, when eventually closing a handle and the secrets are no longer | |
| needed, libcurl does not explicitly clear memory before freeing it, so | |
| credentials may be left in freed data. | |
| - | .SH "Saving files" |
| + | |
| + | # Saving files |
| + | |
| libcurl cannot protect against attacks where an attacker has write access to | |
| the same directory where libcurl is directed to save files. | |
| - | .SH "Cookies" |
| + | |
| + | # Cookies |
| + | |
| If libcurl is built with PSL (**Public Suffix List**) support, it detects and | |
| discards cookies that are specified for such suffix domains that should not be | |
| allowed to have cookies. | |
| if libcurl is *not* built with PSL support, it has no ability to stop super | |
| cookies. | |
| - | .SH "Report Security Problems" |
| + | |
| + | # Report Security Problems |
| + | |
| Should you detect or just suspect a security problem in libcurl or curl, | |
| contact the project curl security team immediately. See | |
| https://curl.se/dev/secprocess.html for details. | |
| @@ -1,71 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH libcurl-share 3 "8 Aug 2003" "libcurl" "libcurl" |
| - | .SH NAME |
| - | libcurl-share \- how to use the share interface |
| - | .SH DESCRIPTION |
| - | This is an overview on how to use the libcurl share interface in your C |
| - | programs. There are specific man pages for each function mentioned in |
| - | here. |
| - | |
| - | All functions in the share interface are prefixed with curl_share. |
| - | |
| - | .SH "OBJECTIVES" |
| - | The share interface was added to enable sharing of data between curl |
| - | \&"handles". |
| - | .SH "ONE SET OF DATA - MANY TRANSFERS" |
| - | You can have multiple easy handles share data between them. Have them update |
| - | and use the \fBsame\fP cookie database, DNS cache, TLS session cache and/or |
| - | connection cache! This way, each single transfer takes advantage from data |
| - | updates made by the other transfer(s). |
| - | .SH "SHARE OBJECT" |
| - | You create a shared object with \fIcurl_share_init(3)\fP. It returns a handle |
| - | for a newly created one. |
| - | |
| - | You tell the shared object what data you want it to share by using |
| - | \fIcurl_share_setopt(3)\fP. |
| - | |
| - | Since you can use this share from multiple threads, and libcurl has no |
| - | internal thread synchronization, you must provide mutex callbacks if you are |
| - | using this multi-threaded. You set lock and unlock functions with |
| - | \fIcurl_share_setopt(3)\fP too. |
| - | |
| - | Then, you make an easy handle to use this share, you set the |
| - | \fICURLOPT_SHARE(3)\fP option with \fIcurl_easy_setopt(3)\fP, and pass in |
| - | share handle. You can make any number of easy handles share the same share |
| - | handle. |
| - | |
| - | To make an easy handle stop using that particular share, you set |
| - | \fICURLOPT_SHARE(3)\fP to NULL for that easy handle. To make a handle stop |
| - | sharing a particular data, you can \fICURLSHOPT_UNSHARE(3)\fP it. |
| - | |
| - | When you are done using the share, make sure that no easy handle is still using |
| - | it, and call \fIcurl_share_cleanup(3)\fP on the handle. |
| - | .SH "SEE ALSO" |
| - | .BR curl_share_init (3), |
| - | .BR curl_share_setopt (3), |
| - | .BR curl_share_cleanup (3), |
| - | .BR libcurl-errors (3), |
| - | .BR libcurl-easy (3), |
| - | .BR libcurl-multi (3) |
| @@ -0,0 +1,63 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: libcurl-share |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_share_cleanup (3) |
| + | - curl_share_init (3) |
| + | - curl_share_setopt (3) |
| + | - libcurl-easy (3) |
| + | - libcurl-errors (3) |
| + | - libcurl-multi (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | libcurl-share - how to use the share interface |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This is an overview on how to use the libcurl share interface in your C |
| + | programs. There are specific man pages for each function mentioned in |
| + | here. |
| + | |
| + | All functions in the share interface are prefixed with curl_share. |
| + | |
| + | # OBJECTIVES |
| + | |
| + | The share interface was added to enable sharing of data between curl |
| + | &"handles". |
| + | |
| + | # ONE SET OF DATA - MANY TRANSFERS |
| + | |
| + | You can have multiple easy handles share data between them. Have them update |
| + | and use the **same** cookie database, DNS cache, TLS session cache and/or |
| + | connection cache! This way, each single transfer takes advantage from data |
| + | updates made by the other transfer(s). |
| + | |
| + | # SHARE OBJECT |
| + | |
| + | You create a shared object with curl_share_init(3). It returns a handle |
| + | for a newly created one. |
| + | |
| + | You tell the shared object what data you want it to share by using |
| + | curl_share_setopt(3). |
| + | |
| + | Since you can use this share from multiple threads, and libcurl has no |
| + | internal thread synchronization, you must provide mutex callbacks if you are |
| + | using this multi-threaded. You set lock and unlock functions with |
| + | curl_share_setopt(3) too. |
| + | |
| + | Then, you make an easy handle to use this share, you set the |
| + | CURLOPT_SHARE(3) option with curl_easy_setopt(3), and pass in |
| + | share handle. You can make any number of easy handles share the same share |
| + | handle. |
| + | |
| + | To make an easy handle stop using that particular share, you set |
| + | CURLOPT_SHARE(3) to NULL for that easy handle. To make a handle stop |
| + | sharing a particular data, you can CURLSHOPT_UNSHARE(3) it. |
| + | |
| + | When you are done using the share, make sure that no easy handle is still using |
| + | it, and call curl_share_cleanup(3) on the handle. |
| @@ -1,96 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH libcurl-thread 3 "13 Jul 2015" "libcurl" "libcurl" |
| - | .SH NAME |
| - | libcurl-thread \- libcurl thread safety |
| - | .SH "Multi-threading with libcurl" |
| - | libcurl is thread safe but has no internal thread synchronization. You may have |
| - | to provide your own locking should you meet any of the thread safety exceptions |
| - | below. |
| - | |
| - | .SH "Handles" |
| - | You must \fBnever\fP share the same handle in multiple threads. You can pass |
| - | the handles around among threads, but you must never use a single handle from |
| - | more than one thread at any given time. |
| - | .SH "Shared objects" |
| - | You can share certain data between multiple handles by using the share |
| - | interface but you must provide your own locking and set |
| - | \fIcurl_share_setopt(3)\fP CURLSHOPT_LOCKFUNC and CURLSHOPT_UNLOCKFUNC. |
| - | |
| - | Note that some items are specifically documented as not thread-safe in the |
| - | share API (the connection pool and HSTS cache for example). |
| - | .SH TLS |
| - | All current TLS libraries libcurl supports are thread-safe. OpenSSL 1.1.0+ can |
| - | be safely used in multi-threaded applications provided that support for the |
| - | underlying OS threading API is built-in. For older versions of OpenSSL, the |
| - | user must set mutex callbacks. |
| - | .SH "Signals" |
| - | Signals are used for timing out name resolves (during DNS lookup) - when built |
| - | without using either the c-ares or threaded resolver backends. On systems that |
| - | have a signal concept. |
| - | |
| - | When using multiple threads you should set the \fICURLOPT_NOSIGNAL(3)\fP |
| - | option to 1L for all handles. Everything works fine except that timeouts |
| - | cannot be honored during DNS lookups - which you can work around by building |
| - | libcurl with c-ares or threaded-resolver support. c-ares is a library that |
| - | provides asynchronous name resolves. On some platforms, libcurl simply cannot |
| - | function properly multi-threaded unless the \fICURLOPT_NOSIGNAL(3)\fP option |
| - | is set. |
| - | |
| - | When \fICURLOPT_NOSIGNAL(3)\fP is set to 1L, your application needs to deal |
| - | with the risk of a SIGPIPE (that at least the OpenSSL backend can |
| - | trigger). Note that setting \fICURLOPT_NOSIGNAL(3)\fP to 0L does not work in a |
| - | threaded situation as there is a race condition where libcurl risks restoring |
| - | the former signal handler while another thread should still ignore it. |
| - | .SH "Name resolving" |
| - | The \fBgethostbyname\fP or \fBgetaddrinfo\fP and other name resolving system |
| - | calls used by libcurl are provided by your operating system and must be thread |
| - | safe. It is important that libcurl can find and use thread safe versions of |
| - | these and other system calls, as otherwise it cannot function fully thread |
| - | safe. Some operating systems are known to have faulty thread |
| - | implementations. We have previously received problem reports on *BSD (at least |
| - | in the past, they may be working fine these days). Some operating systems that |
| - | are known to have solid and working thread support are Linux, Solaris and |
| - | Windows. |
| - | .SH "curl_global_* functions" |
| - | These functions are thread-safe since libcurl 7.84.0 if |
| - | \fIcurl_version_info(3)\fP has the \fBCURL_VERSION_THREADSAFE\fP feature bit |
| - | set (most platforms). |
| - | |
| - | If these functions are not thread-safe and you are using libcurl with multiple |
| - | threads it is especially important that before use you call |
| - | \fIcurl_global_init(3)\fP or \fIcurl_global_init_mem(3)\fP to explicitly |
| - | initialize the library and its dependents, rather than rely on the "lazy" |
| - | fail-safe initialization that takes place the first time |
| - | \fIcurl_easy_init(3)\fP is called. For an in-depth explanation refer to |
| - | \fIlibcurl(3)\fP section \fBGLOBAL CONSTANTS\fP. |
| - | .SH "Memory functions" |
| - | These functions, provided either by your operating system or your own |
| - | replacements, must be thread safe. You can use \fIcurl_global_init_mem(3)\fP |
| - | to set your own replacement memory functions. |
| - | .SH "Non-safe functions" |
| - | \fICURLOPT_DNS_USE_GLOBAL_CACHE(3)\fP is not thread-safe. |
| - | |
| - | \fIcurl_version_info(3)\fP is not thread-safe before libcurl initialization. |
| @@ -0,0 +1,99 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: libcurl-thread |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - libcurl-security (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | libcurl-thread - libcurl thread safety |
| + | |
| + | # Multi-threading with libcurl |
| + | |
| + | libcurl is thread safe but has no internal thread synchronization. You may have |
| + | to provide your own locking should you meet any of the thread safety exceptions |
| + | below. |
| + | |
| + | # Handles |
| + | |
| + | You must **never** share the same handle in multiple threads. You can pass the |
| + | handles around among threads, but you must never use a single handle from more |
| + | than one thread at any given time. |
| + | |
| + | # Shared objects |
| + | |
| + | You can share certain data between multiple handles by using the share |
| + | interface but you must provide your own locking and set |
| + | curl_share_setopt(3) CURLSHOPT_LOCKFUNC and CURLSHOPT_UNLOCKFUNC. |
| + | |
| + | Note that some items are specifically documented as not thread-safe in the |
| + | share API (the connection pool and HSTS cache for example). |
| + | |
| + | # TLS |
| + | |
| + | All current TLS libraries libcurl supports are thread-safe. OpenSSL 1.1.0+ can |
| + | be safely used in multi-threaded applications provided that support for the |
| + | underlying OS threading API is built-in. For older versions of OpenSSL, the |
| + | user must set mutex callbacks. |
| + | |
| + | # Signals |
| + | |
| + | Signals are used for timing out name resolves (during DNS lookup) - when built |
| + | without using either the c-ares or threaded resolver backends. On systems that |
| + | have a signal concept. |
| + | |
| + | When using multiple threads you should set the CURLOPT_NOSIGNAL(3) |
| + | option to 1L for all handles. Everything works fine except that timeouts |
| + | cannot be honored during DNS lookups - which you can work around by building |
| + | libcurl with c-ares or threaded-resolver support. c-ares is a library that |
| + | provides asynchronous name resolves. On some platforms, libcurl simply cannot |
| + | function properly multi-threaded unless the CURLOPT_NOSIGNAL(3) option |
| + | is set. |
| + | |
| + | When CURLOPT_NOSIGNAL(3) is set to 1L, your application needs to deal |
| + | with the risk of a SIGPIPE (that at least the OpenSSL backend can |
| + | trigger). Note that setting CURLOPT_NOSIGNAL(3) to 0L does not work in a |
| + | threaded situation as there is a race condition where libcurl risks restoring |
| + | the former signal handler while another thread should still ignore it. |
| + | |
| + | # Name resolving |
| + | |
| + | The **gethostbyname** or **getaddrinfo** and other name resolving system |
| + | calls used by libcurl are provided by your operating system and must be thread |
| + | safe. It is important that libcurl can find and use thread safe versions of |
| + | these and other system calls, as otherwise it cannot function fully thread |
| + | safe. Some operating systems are known to have faulty thread |
| + | implementations. We have previously received problem reports on *BSD (at least |
| + | in the past, they may be working fine these days). Some operating systems that |
| + | are known to have solid and working thread support are Linux, Solaris and |
| + | Windows. |
| + | |
| + | # curl_global_* functions |
| + | |
| + | These functions are thread-safe since libcurl 7.84.0 if |
| + | curl_version_info(3) has the **CURL_VERSION_THREADSAFE** feature bit |
| + | set (most platforms). |
| + | |
| + | If these functions are not thread-safe and you are using libcurl with multiple |
| + | threads it is especially important that before use you call |
| + | curl_global_init(3) or curl_global_init_mem(3) to explicitly |
| + | initialize the library and its dependents, rather than rely on the "lazy" |
| + | fail-safe initialization that takes place the first time |
| + | curl_easy_init(3) is called. For an in-depth explanation refer to |
| + | libcurl(3) section **GLOBAL CONSTANTS**. |
| + | |
| + | # Memory functions |
| + | |
| + | These functions, provided either by your operating system or your own |
| + | replacements, must be thread safe. You can use curl_global_init_mem(3) |
| + | to set your own replacement memory functions. |
| + | |
| + | # Non-safe functions |
| + | |
| + | CURLOPT_DNS_USE_GLOBAL_CACHE(3) is not thread-safe. |
| + | |
| + | curl_version_info(3) is not thread-safe before libcurl initialization. |
| @@ -1,38 +1,29 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH libcurl-tutorial 3 "19 Sep 2014" "libcurl" "libcurl" |
| - | .SH NAME |
| - | libcurl-tutorial \- libcurl programming tutorial |
| - | .SH "Objective" |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: libcurl-tutorial |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - libcurl-easy (3) |
| + | - libcurl-errors (3) |
| + | - libcurl-multi (3) |
| + | - libcurl-url (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | libcurl-tutorial - libcurl programming tutorial |
| + | |
| + | # Objective |
| + | |
| This document attempts to describe the general principles and some basic | |
| approaches to consider when programming with libcurl. The text focuses on the | |
| C interface but should apply fairly well on other language bindings as well as | |
| they usually follow the C API pretty closely. | |
| This document refers to 'the user' as the person writing the source code that | |
| - | uses libcurl. That would probably be you or someone in your position. What is |
| + | uses libcurl. That would probably be you or someone in your position. What is |
| generally referred to as 'the program' is the collected source code that you | |
| write that is using libcurl for transfers. The program is outside libcurl and | |
| libcurl is outside of the program. | |
| @@ -40,48 +31,58 @@ libcurl is outside of the program. | |
| To get more details on all options and functions described herein, please | |
| refer to their respective man pages. | |
| - | .SH "Building" |
| + | # Building |
| + | |
| There are many different ways to build C programs. This chapter assumes a Unix | |
| style build process. If you use a different build system, you can still read | |
| this to get general information that may apply to your environment as well. | |
| - | .IP "Compiling the Program" |
| + | |
| + | ## Compiling the Program |
| + | |
| Your compiler needs to know where the libcurl headers are located. Therefore | |
| you must set your compiler's include path to point to the directory where you | |
| installed them. The 'curl-config'[3] tool can be used to get this information: | |
| - | .nf |
| + | ~~~c |
| $ curl-config --cflags | |
| - | .fi |
| - | .IP "Linking the Program with libcurl" |
| + | ~~~ |
| + | |
| + | ## Linking the Program with libcurl |
| + | |
| When having compiled the program, you need to link your object files to create | |
| a single executable. For that to succeed, you need to link with libcurl and | |
| possibly also with other libraries that libcurl itself depends on. Like the | |
| OpenSSL libraries, but even some standard OS libraries may be needed on the | |
| command line. To figure out which flags to use, once again the 'curl-config' | |
| tool comes to the rescue: | |
| - | .nf |
| + | ~~~c |
| $ curl-config --libs | |
| - | .fi |
| - | .IP "SSL or Not" |
| + | ~~~ |
| + | |
| + | ## SSL or Not |
| + | |
| libcurl can be built and customized in many ways. One of the things that | |
| varies from different libraries and builds is the support for SSL-based | |
| transfers, like HTTPS and FTPS. If a supported SSL library was detected | |
| properly at build-time, libcurl is built with SSL support. To figure out if an | |
| - | installed libcurl has been built with SSL support enabled, use \&'curl-config' |
| + | installed libcurl has been built with SSL support enabled, use &'curl-config' |
| like this: | |
| - | .nf |
| + | ~~~c |
| $ curl-config --feature | |
| - | .fi |
| - | And if SSL is supported, the keyword \fISSL\fP is written to stdout, possibly |
| + | ~~~ |
| + | And if SSL is supported, the keyword *SSL* is written to stdout, possibly |
| together with a other features that could be either on or off on for different | |
| libcurls. | |
| See also the "Features libcurl Provides" further down. | |
| - | .IP "autoconf macro" |
| + | |
| + | ## autoconf macro |
| + | |
| When you write your configure script to detect libcurl and setup variables | |
| accordingly, we offer a macro that probably does everything you need in this | |
| area. See docs/libcurl/libcurl.m4 file - it includes docs on how to use it. | |
| - | .SH "Portable Code in a Portable World" |
| + | # Portable Code in a Portable World |
| + | |
| The people behind libcurl have put a considerable effort to make libcurl work | |
| on a large amount of different operating systems and environments. | |
| @@ -90,54 +91,59 @@ are only a few minor details that differ. If you just make sure to write your | |
| code portable enough, you can create a portable program. libcurl should not | |
| stop you from that. | |
| - | .SH "Global Preparation" |
| + | # Global Preparation |
| + | |
| The program must initialize some of the libcurl functionality globally. That | |
| means it should be done exactly once, no matter how many times you intend to | |
| use the library. Once for your program's entire life time. This is done using | |
| - | .nf |
| + | ~~~c |
| curl_global_init() | |
| - | .fi |
| + | ~~~ |
| and it takes one parameter which is a bit pattern that tells libcurl what to | |
| - | initialize. Using \fICURL_GLOBAL_ALL\fP makes it initialize all known internal |
| + | initialize. Using *CURL_GLOBAL_ALL* makes it initialize all known internal |
| sub modules, and might be a good default option. The current two bits that are | |
| specified are: | |
| - | .RS |
| - | .IP "CURL_GLOBAL_WIN32" |
| + | |
| + | ## CURL_GLOBAL_WIN32 |
| + | |
| which only does anything on Windows machines. When used on a Windows machine, | |
| it makes libcurl initialize the win32 socket stuff. Without having that | |
| initialized properly, your program cannot use sockets properly. You should | |
| only do this once for each application, so if your program already does this | |
| or of another library in use does it, you should not tell libcurl to do this | |
| as well. | |
| - | .IP CURL_GLOBAL_SSL |
| + | |
| + | ## CURL_GLOBAL_SSL |
| + | |
| which only does anything on libcurls compiled and built SSL-enabled. On these | |
| systems, this makes libcurl initialize the SSL library properly for this | |
| application. This only needs to be done once for each application so if your | |
| program or another library already does this, this bit should not be needed. | |
| - | .RE |
| libcurl has a default protection mechanism that detects if | |
| - | \fIcurl_global_init(3)\fP has not been called by the time |
| - | \fIcurl_easy_perform(3)\fP is called and if that is the case, libcurl runs the |
| + | curl_global_init(3) has not been called by the time |
| + | curl_easy_perform(3) is called and if that is the case, libcurl runs the |
| function itself with a guessed bit pattern. Please note that depending solely | |
| on this is not considered nice nor good. | |
| When the program no longer uses libcurl, it should call | |
| - | \fIcurl_global_cleanup(3)\fP, which is the opposite of the init call. It |
| + | curl_global_cleanup(3), which is the opposite of the init call. It |
| performs the reversed operations to cleanup the resources the | |
| - | \fIcurl_global_init(3)\fP call initialized. |
| + | curl_global_init(3) call initialized. |
| - | Repeated calls to \fIcurl_global_init(3)\fP and \fIcurl_global_cleanup(3)\fP |
| + | Repeated calls to curl_global_init(3) and curl_global_cleanup(3) |
| should be avoided. They should only be called once each. | |
| - | .SH "Features libcurl Provides" |
| + | # Features libcurl Provides |
| + | |
| It is considered best-practice to determine libcurl features at runtime rather | |
| than at build-time (if possible of course). By calling | |
| - | \fIcurl_version_info(3)\fP and checking out the details of the returned |
| + | curl_version_info(3) and checking out the details of the returned |
| struct, your program can figure out exactly what the currently running libcurl | |
| supports. | |
| - | .SH "Two Interfaces" |
| + | # Two Interfaces |
| + | |
| libcurl first introduced the so called easy interface. All operations in the | |
| easy interface are prefixed with 'curl_easy'. The easy interface lets you do | |
| single transfers with a synchronous and blocking function call. | |
| @@ -147,101 +153,103 @@ transfers in a single thread, the so called multi interface. More about that | |
| interface is detailed in a separate chapter further down. You still need to | |
| understand the easy interface first, so please continue reading for better | |
| understanding. | |
| - | .SH "Handle the Easy libcurl" |
| + | |
| + | # Handle the Easy libcurl |
| + | |
| To use the easy interface, you must first create yourself an easy handle. You | |
| need one handle for each easy session you want to perform. Basically, you | |
| should use one handle for every thread you plan to use for transferring. You | |
| must never share the same handle in multiple threads. | |
| Get an easy handle with | |
| - | .nf |
| + | ~~~c |
| handle = curl_easy_init(); | |
| - | .fi |
| + | ~~~ |
| It returns an easy handle. Using that you proceed to the next step: setting | |
| up your preferred actions. A handle is just a logic entity for the upcoming | |
| transfer or series of transfers. | |
| You set properties and options for this handle using | |
| - | \fIcurl_easy_setopt(3)\fP. They control how the subsequent transfer or |
| + | curl_easy_setopt(3). They control how the subsequent transfer or |
| transfers using this handle are made. Options remain set in the handle until | |
| set again to something different. They are sticky. Multiple requests using the | |
| same handle use the same options. | |
| If you at any point would like to blank all previously set options for a | |
| - | single easy handle, you can call \fIcurl_easy_reset(3)\fP and you can also |
| + | single easy handle, you can call curl_easy_reset(3) and you can also |
| make a clone of an easy handle (with all its set options) using | |
| - | \fIcurl_easy_duphandle(3)\fP. |
| + | curl_easy_duphandle(3). |
| Many of the options you set in libcurl are "strings", pointers to data | |
| terminated with a zero byte. When you set strings with | |
| - | \fIcurl_easy_setopt(3)\fP, libcurl makes its own copy so that they do not need |
| + | curl_easy_setopt(3), libcurl makes its own copy so that they do not need |
| to be kept around in your application after being set[4]. | |
| One of the most basic properties to set in the handle is the URL. You set your | |
| - | preferred URL to transfer with \fICURLOPT_URL(3)\fP in a manner similar to: |
| + | preferred URL to transfer with CURLOPT_URL(3) in a manner similar to: |
| - | .nf |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_URL, "http://domain.com/"); | |
| - | .fi |
| + | ~~~ |
| Let's assume for a while that you want to receive data as the URL identifies a | |
| remote resource you want to get here. Since you write a sort of application | |
| that needs this transfer, I assume that you would like to get the data passed | |
| to you directly instead of simply getting it passed to stdout. So, you write | |
| your own function that matches this prototype: | |
| - | .nf |
| + | ~~~c |
| size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp); | |
| - | .fi |
| + | ~~~ |
| You tell libcurl to pass all data to this function by issuing a function | |
| similar to this: | |
| - | .nf |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, write_data); | |
| - | .fi |
| + | ~~~ |
| You can control what data your callback function gets in the fourth argument | |
| by setting another property: | |
| - | .nf |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_WRITEDATA, &internal_struct); | |
| - | .fi |
| + | ~~~ |
| Using that property, you can easily pass local data between your application | |
| and the function that gets invoked by libcurl. libcurl itself does not touch | |
| - | the data you pass with \fICURLOPT_WRITEDATA(3)\fP. |
| + | the data you pass with CURLOPT_WRITEDATA(3). |
| libcurl offers its own default internal callback that takes care of the data | |
| - | if you do not set the callback with \fICURLOPT_WRITEFUNCTION(3)\fP. It simply |
| + | if you do not set the callback with CURLOPT_WRITEFUNCTION(3). It simply |
| outputs the received data to stdout. You can have the default callback write | |
| the data to a different file handle by passing a 'FILE *' to a file opened for | |
| - | writing with the \fICURLOPT_WRITEDATA(3)\fP option. |
| + | writing with the CURLOPT_WRITEDATA(3) option. |
| Now, we need to take a step back and take a deep breath. Here is one of those | |
| rare platform-dependent nitpicks. Did you spot it? On some platforms[2], | |
| libcurl is not able to operate on file handles opened by the | |
| program. Therefore, if you use the default callback and pass in an open file | |
| - | handle with \fICURLOPT_WRITEDATA(3)\fP, libcurl crashes. You should avoid this |
| + | handle with CURLOPT_WRITEDATA(3), libcurl crashes. You should avoid this |
| to make your program run fine virtually everywhere. | |
| - | (\fICURLOPT_WRITEDATA(3)\fP was formerly known as \fICURLOPT_FILE\fP. Both |
| + | (CURLOPT_WRITEDATA(3) was formerly known as *CURLOPT_FILE*. Both |
| names still work and do the same thing). | |
| If you are using libcurl as a win32 DLL, you MUST use the | |
| - | \fICURLOPT_WRITEFUNCTION(3)\fP if you set \fICURLOPT_WRITEDATA(3)\fP - or |
| + | CURLOPT_WRITEFUNCTION(3) if you set CURLOPT_WRITEDATA(3) - or |
| experience crashes. | |
| There are of course many more options you can set, and we get back to a few of | |
| them later. Let's instead continue to the actual transfer: | |
| - | .nf |
| + | ~~~c |
| success = curl_easy_perform(handle); | |
| - | .fi |
| - | \fIcurl_easy_perform(3)\fP connects to the remote site, does the necessary |
| + | ~~~ |
| + | curl_easy_perform(3) connects to the remote site, does the necessary |
| commands and performs the transfer. Whenever it receives data, it calls the | |
| callback function we previously set. The function may get one byte at a time, | |
| or it may get many kilobytes at once. libcurl delivers as much as possible as | |
| often as possible. Your callback function should return the number of bytes it | |
| - | \&"took care of". If that is not the same amount of bytes that was passed to |
| + | &"took care of". If that is not the same amount of bytes that was passed to |
| it, libcurl aborts the operation and returns with an error code. | |
| When the transfer is complete, the function returns a return code that informs | |
| you if it succeeded in its mission or not. If a return code is not enough for | |
| - | you, you can use the \fICURLOPT_ERRORBUFFER(3)\fP to point libcurl to a buffer |
| + | you, you can use the CURLOPT_ERRORBUFFER(3) to point libcurl to a buffer |
| of yours where it stores a human readable error message as well. | |
| If you then want to transfer another file, the handle is ready to be used | |
| @@ -255,39 +263,42 @@ finally transferring the file data. libcurl takes care of all that | |
| complication for you. Given simply the URL to a file, libcurl takes care of | |
| all the details needed to get the file moved from one machine to another. | |
| - | .SH "Multi-threading Issues" |
| + | # Multi-threading Issues |
| + | |
| libcurl is thread safe but there are a few exceptions. Refer to | |
| - | \fIlibcurl-thread(3)\fP for more information. |
| + | libcurl-thread(3) for more information. |
| + | |
| + | # When It does not Work |
| - | .SH "When It does not Work" |
| There are times when the transfer fails for some reason. You might have set | |
| the wrong libcurl option or misunderstood what the libcurl option actually | |
| does, or the remote server might return non-standard replies that confuse the | |
| library which then confuses your program. | |
| There is one golden rule when these things occur: set the | |
| - | \fICURLOPT_VERBOSE(3)\fP option to 1. it causes the library to spew out the |
| + | CURLOPT_VERBOSE(3) option to 1. it causes the library to spew out the |
| entire protocol details it sends, some internal info and some received | |
| protocol data as well (especially when using FTP). If you are using HTTP, | |
| adding the headers in the received output to study is also a clever way to get | |
| a better understanding why the server behaves the way it does. Include headers | |
| - | in the normal body output with \fICURLOPT_HEADER(3)\fP set 1. |
| + | in the normal body output with CURLOPT_HEADER(3) set 1. |
| Of course, there are bugs left. We need to know about them to be able to fix | |
| them, so we are quite dependent on your bug reports. When you do report | |
| suspected bugs in libcurl, please include as many details as you possibly can: | |
| - | a protocol dump that \fICURLOPT_VERBOSE(3)\fP produces, library version, as |
| + | a protocol dump that CURLOPT_VERBOSE(3) produces, library version, as |
| much as possible of your code that uses libcurl, operating system name and | |
| version, compiler name and version etc. | |
| - | If \fICURLOPT_VERBOSE(3)\fP is not enough, you increase the level of debug |
| - | data your application receive by using the \fICURLOPT_DEBUGFUNCTION(3)\fP. |
| + | If CURLOPT_VERBOSE(3) is not enough, you increase the level of debug |
| + | data your application receive by using the CURLOPT_DEBUGFUNCTION(3). |
| Getting some in-depth knowledge about the protocols involved is never wrong, | |
| and if you are trying to do funny things, you might understand libcurl and how | |
| to use it better if you study the appropriate RFC documents at least briefly. | |
| - | .SH "Upload Data to a Remote Site" |
| + | # Upload Data to a Remote Site |
| + | |
| libcurl tries to keep a protocol independent approach to most transfers, thus | |
| uploading to a remote FTP site is similar to uploading data to an HTTP server | |
| with a PUT request. | |
| @@ -300,40 +311,41 @@ Since we write an application, we most likely want libcurl to get the upload | |
| data by asking us for it. To make it do that, we set the read callback and the | |
| custom pointer libcurl passes to our read callback. The read callback should | |
| have a prototype similar to: | |
| - | .nf |
| + | ~~~c |
| size_t function(char *bufptr, size_t size, size_t nitems, void *userp); | |
| - | .fi |
| - | Where \fIbufptr\fP is the pointer to a buffer we fill in with data to upload |
| - | and \fIsize*nitems\fP is the size of the buffer and therefore also the maximum |
| - | amount of data we can return to libcurl in this call. The \fIuserp\fP pointer |
| + | ~~~ |
| + | Where *bufptr* is the pointer to a buffer we fill in with data to upload |
| + | and *size*nitems* is the size of the buffer and therefore also the maximum |
| + | amount of data we can return to libcurl in this call. The *userp* pointer |
| is the custom pointer we set to point to a struct of ours to pass private data | |
| between the application and the callback. | |
| - | .nf |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_READFUNCTION, read_function); | |
| curl_easy_setopt(handle, CURLOPT_READDATA, &filedata); | |
| - | .fi |
| + | ~~~ |
| Tell libcurl that we want to upload: | |
| - | .nf |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_UPLOAD, 1L); | |
| - | .fi |
| + | ~~~ |
| A few protocols do not behave properly when uploads are done without any prior | |
| knowledge of the expected file size. So, set the upload file size using the | |
| - | \fICURLOPT_INFILESIZE_LARGE(3)\fP for all known file sizes like this[1]: |
| + | CURLOPT_INFILESIZE_LARGE(3) for all known file sizes like this[1]: |
| - | .nf |
| + | ~~~c |
| /* in this example, file_size must be an curl_off_t variable */ | |
| curl_easy_setopt(handle, CURLOPT_INFILESIZE_LARGE, file_size); | |
| - | .fi |
| + | ~~~ |
| - | When you call \fIcurl_easy_perform(3)\fP this time, it performs all the |
| + | When you call curl_easy_perform(3) this time, it performs all the |
| necessary operations and when it has invoked the upload it calls your supplied | |
| callback to get the data to upload. The program should return as much data as | |
| possible in every invoke, as that is likely to make the upload perform as fast | |
| as possible. The callback should return the number of bytes it wrote in the | |
| buffer. Returning 0 signals the end of the upload. | |
| - | .SH "Passwords" |
| + | # Passwords |
| + | |
| Many protocols use or even require that user name and password are provided | |
| to be able to download or upload the data of your choice. libcurl offers | |
| several ways to specify them. | |
| @@ -341,46 +353,46 @@ several ways to specify them. | |
| Most protocols support that you specify the name and password in the URL | |
| itself. libcurl detects this and use them accordingly. This is written like | |
| this: | |
| - | .nf |
| + | ~~~c |
| protocol://user:[email protected]/path/ | |
| - | .fi |
| + | ~~~ |
| If you need any odd letters in your user name or password, you should enter | |
| them URL encoded, as %XX where XX is a two-digit hexadecimal number. | |
| libcurl also provides options to set various passwords. The user name and | |
| password as shown embedded in the URL can instead get set with the | |
| - | \fICURLOPT_USERPWD(3)\fP option. The argument passed to libcurl should be a |
| + | CURLOPT_USERPWD(3) option. The argument passed to libcurl should be a |
| char * to a string in the format "user:password". In a manner like this: | |
| - | .nf |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_USERPWD, "myname:thesecret"); | |
| - | .fi |
| + | ~~~ |
| Another case where name and password might be needed at times, is for those | |
| users who need to authenticate themselves to a proxy they use. libcurl offers | |
| - | another option for this, the \fICURLOPT_PROXYUSERPWD(3)\fP. It is used quite |
| - | similar to the \fICURLOPT_USERPWD(3)\fP option like this: |
| - | .nf |
| + | another option for this, the CURLOPT_PROXYUSERPWD(3). It is used quite |
| + | similar to the CURLOPT_USERPWD(3) option like this: |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_PROXYUSERPWD, "myname:thesecret"); | |
| - | .fi |
| + | ~~~ |
| There is a long time Unix "standard" way of storing FTP user names and | |
| passwords, namely in the $HOME/.netrc file (on Windows, libcurl also checks | |
| - | the \fI%USERPROFILE% environment\fP variable if \fI%HOME%\fP is unset, and |
| + | the *%USERPROFILE% environment* variable if *%HOME%* is unset, and |
| tries "_netrc" as name). The file should be made private so that only the user | |
| may read it (see also the "Security Considerations" chapter), as it might | |
| contain the password in plain text. libcurl has the ability to use this file | |
| to figure out what set of user name and password to use for a particular | |
| host. As an extension to the normal functionality, libcurl also supports this | |
| file for non-FTP protocols such as HTTP. To make curl use this file, use the | |
| - | \fICURLOPT_NETRC(3)\fP option: |
| - | .nf |
| + | CURLOPT_NETRC(3) option: |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_NETRC, 1L); | |
| - | .fi |
| + | ~~~ |
| And a basic example of how such a .netrc file may look like: | |
| - | .nf |
| + | ~~~c |
| machine myhost.mydomain.com | |
| login userlogin | |
| password secretword | |
| - | .fi |
| + | ~~~ |
| All these examples have been cases where the password has been optional, or | |
| at least you could leave it out and have libcurl attempt to do its job | |
| @@ -388,10 +400,12 @@ without it. There are times when the password is not optional, like when | |
| you are using an SSL private key for secure transfers. | |
| To pass the known private key password to libcurl: | |
| - | .nf |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_KEYPASSWD, "keypassword"); | |
| - | .fi |
| - | .SH "HTTP Authentication" |
| + | ~~~ |
| + | |
| + | # HTTP Authentication |
| + | |
| The previous chapter showed how to set user name and password for getting URLs | |
| that require authentication. When using the HTTP protocol, there are many | |
| different ways a client can provide those credentials to the server and you | |
| @@ -401,29 +415,30 @@ in the HTTP request, base64-encoded. This is insecure. | |
| At the time of this writing, libcurl can be built to use: Basic, Digest, NTLM, | |
| Negotiate (SPNEGO). You can tell libcurl which one to use | |
| - | with \fICURLOPT_HTTPAUTH(3)\fP as in: |
| - | .nf |
| + | with CURLOPT_HTTPAUTH(3) as in: |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); | |
| - | .fi |
| + | ~~~ |
| And when you send authentication to a proxy, you can also set authentication | |
| - | type the same way but instead with \fICURLOPT_PROXYAUTH(3)\fP: |
| - | .nf |
| + | type the same way but instead with CURLOPT_PROXYAUTH(3): |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_PROXYAUTH, CURLAUTH_NTLM); | |
| - | .fi |
| + | ~~~ |
| Both these options allow you to set multiple types (by ORing them together), | |
| to make libcurl pick the most secure one out of the types the server/proxy | |
| claims to support. This method does however add a round-trip since libcurl | |
| must first ask the server what it supports: | |
| - | .nf |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST|CURLAUTH_BASIC); | |
| - | .fi |
| - | For convenience, you can use the \fICURLAUTH_ANY\fP define (instead of a list |
| + | ~~~ |
| + | For convenience, you can use the *CURLAUTH_ANY* define (instead of a list |
| with specific types) which allows libcurl to use whatever method it wants. | |
| When asking for multiple types, libcurl picks the available one it considers | |
| "best" in its own internal order of preference. | |
| - | .SH "HTTP POSTing" |
| + | # HTTP POSTing |
| + | |
| We get many questions regarding how to issue HTTP POSTs with libcurl the | |
| proper way. This chapter thus includes examples using both different versions | |
| of HTTP POST that libcurl supports. | |
| @@ -432,16 +447,16 @@ The first version is the simple POST, the most common version, that most HTML | |
| pages using the <form> tag uses. We provide a pointer to the data and tell | |
| libcurl to post it all to the remote site: | |
| - | .nf |
| + | ~~~c |
| char *data="name=daniel&project=curl"; | |
| curl_easy_setopt(handle, CURLOPT_POSTFIELDS, data); | |
| curl_easy_setopt(handle, CURLOPT_URL, "http://posthere.com/"); | |
| curl_easy_perform(handle); /* post away! */ | |
| - | .fi |
| + | ~~~ |
| Simple enough, huh? Since you set the POST options with the | |
| - | \fICURLOPT_POSTFIELDS(3)\fP, this automatically switches the handle to use |
| + | CURLOPT_POSTFIELDS(3), this automatically switches the handle to use |
| POST in the upcoming request. | |
| What if you want to post binary data that also requires you to set the | |
| @@ -451,7 +466,7 @@ tell libcurl the size of the post data. Setting headers in libcurl requests are | |
| done in a generic way, by building a list of our own headers and then passing | |
| that list to libcurl. | |
| - | .nf |
| + | ~~~c |
| struct curl_slist *headers=NULL; | |
| headers = curl_slist_append(headers, "Content-Type: text/xml"); | |
| @@ -467,34 +482,35 @@ that list to libcurl. | |
| curl_easy_perform(handle); /* post away! */ | |
| curl_slist_free_all(headers); /* free the header list */ | |
| - | .fi |
| + | ~~~ |
| While the simple examples above cover the majority of all cases where HTTP | |
| POST operations are required, they do not do multi-part formposts. Multi-part | |
| formposts were introduced as a better way to post (possibly large) binary data | |
| - | and were first documented in the RFC 1867 (updated in RFC 2388). they are |
| + | and were first documented in the RFC 1867 (updated in RFC 2388). They are |
| called multi-part because they are built by a chain of parts, each part being | |
| a single unit of data. Each part has its own name and contents. You can in | |
| fact create and post a multi-part formpost with the regular libcurl POST | |
| support described above, but that would require that you build a formpost | |
| - | yourself and provide to libcurl. To make that easier, libcurl provides a MIME |
| - | API consisting in several functions: using those, you can create and fill a |
| - | multi-part form. Function \fIcurl_mime_init(3)\fP creates a multi-part body; |
| - | you can then append new parts to a multi-part body using |
| - | \fIcurl_mime_addpart(3)\fP. There are three possible data sources for a part: |
| - | memory using \fIcurl_mime_data(3)\fP, file using \fIcurl_mime_filedata(3)\fP |
| - | and user-defined data read callback using \fIcurl_mime_data_cb(3)\fP. |
| - | \fIcurl_mime_name(3)\fP sets a part's (i.e.: form field) name, while |
| - | \fIcurl_mime_filename(3)\fP fills in the remote file name. With |
| - | \fIcurl_mime_type(3)\fP, you can tell the MIME type of a part, |
| - | \fIcurl_mime_headers(3)\fP allows defining the part's headers. When a |
| - | multi-part body is no longer needed, you can destroy it using |
| - | \fIcurl_mime_free(3)\fP. |
| + | yourself and provide to libcurl. |
| + | |
| + | To make that easier, libcurl provides a MIME API consisting in several |
| + | functions: using those, you can create and fill a multi-part form. Function |
| + | curl_mime_init(3) creates a multi-part body; you can then append new parts |
| + | to a multi-part body using curl_mime_addpart(3). |
| + | |
| + | There are three possible data sources for a part: memory using |
| + | curl_mime_data(3), file using curl_mime_filedata(3) and user-defined data |
| + | read callback using curl_mime_data_cb(3). curl_mime_name(3) sets a part's |
| + | (i.e.: form field) name, while curl_mime_filename(3) fills in the remote |
| + | file name. With curl_mime_type(3), you can tell the MIME type of a part, |
| + | curl_mime_headers(3) allows defining the part's headers. When a multi-part |
| + | body is no longer needed, you can destroy it using curl_mime_free(3). |
| The following example sets two simple text parts with plain textual contents, | |
| and then a file with binary contents and uploads the whole thing. | |
| - | .nf |
| + | ~~~c |
| curl_mime *multipart = curl_mime_init(handle); | |
| curl_mimepart *part = curl_mime_addpart(multipart); | |
| curl_mime_name(part, "name"); | |
| @@ -513,31 +529,31 @@ and then a file with binary contents and uploads the whole thing. | |
| /* free the post data again */ | |
| curl_mime_free(multipart); | |
| - | .fi |
| + | ~~~ |
| To post multiple files for a single form field, you must supply each file in | |
| a separate part, all with the same field name. Although function | |
| - | \fIcurl_mime_subparts(3)\fP implements nested multi-parts, this way of |
| + | curl_mime_subparts(3) implements nested multi-parts, this way of |
| multiple files posting is deprecated by RFC 7578, chapter 4.3. | |
| To set the data source from an already opened FILE pointer, use: | |
| - | .nf |
| + | ~~~c |
| curl_mime_data_cb(part, filesize, (curl_read_callback) fread, | |
| (curl_seek_callback) fseek, NULL, filepointer); | |
| - | .fi |
| + | ~~~ |
| - | A deprecated \fIcurl_formadd(3)\fP function is still supported in libcurl. |
| + | A deprecated curl_formadd(3) function is still supported in libcurl. |
| It should however not be used anymore for new designs and programs using it | |
| ought to be converted to the MIME API. It is however described here as an | |
| aid to conversion. | |
| - | Using \fIcurl_formadd\fP, you add parts to the form. When you are done adding |
| + | Using *curl_formadd*, you add parts to the form. When you are done adding |
| parts, you post the whole form. | |
| The MIME API example above is expressed as follows using this function: | |
| - | .nf |
| + | ~~~c |
| struct curl_httppost *post=NULL; | |
| struct curl_httppost *last=NULL; | |
| curl_formadd(&post, &last, | |
| @@ -557,7 +573,7 @@ The MIME API example above is expressed as follows using this function: | |
| /* free the post data again */ | |
| curl_formfree(post); | |
| - | .fi |
| + | ~~~ |
| Multipart formposts are chains of parts using MIME-style separators and | |
| headers. It means that each one of these separate parts get a few headers set | |
| @@ -568,7 +584,7 @@ of course supply headers to as many parts as you like, but this little example | |
| shows how you set headers to one specific part when you add that to the post | |
| handle: | |
| - | .nf |
| + | ~~~c |
| struct curl_slist *headers=NULL; | |
| headers = curl_slist_append(headers, "Content-Type: text/xml"); | |
| @@ -582,20 +598,21 @@ handle: | |
| curl_formfree(post); /* free post */ | |
| curl_slist_free_all(headers); /* free custom header list */ | |
| - | .fi |
| + | ~~~ |
| Since all options on an easy handle are "sticky", they remain the same until | |
| - | changed even if you do call \fIcurl_easy_perform(3)\fP, you may need to tell |
| + | changed even if you do call curl_easy_perform(3), you may need to tell |
| curl to go back to a plain GET request if you intend to do one as your next | |
| request. You force an easy handle to go back to GET by using the | |
| - | \fICURLOPT_HTTPGET(3)\fP option: |
| - | .nf |
| + | CURLOPT_HTTPGET(3) option: |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_HTTPGET, 1L); | |
| - | .fi |
| - | Just setting \fICURLOPT_POSTFIELDS(3)\fP to "" or NULL does *not* stop libcurl |
| + | ~~~ |
| + | Just setting CURLOPT_POSTFIELDS(3) to "" or NULL does *not* stop libcurl |
| from doing a POST. It just makes it POST without any data to send! | |
| - | .SH "Converting from deprecated form API to MIME API" |
| + | # Converting from deprecated form API to MIME API |
| + | |
| Four rules have to be respected in building the multi-part: | |
| - The easy handle must be created before building the multi-part. | |
| @@ -605,68 +622,68 @@ Four rules have to be respected in building the multi-part: | |
| - Each part is created by a call to curl_mime_addpart(multipart). | |
| - When complete, the multi-part must be bound to the easy handle using | |
| - | \fICURLOPT_MIMEPOST(3)\fP instead of \fICURLOPT_HTTPPOST(3)\fP. |
| + | CURLOPT_MIMEPOST(3) instead of CURLOPT_HTTPPOST(3). |
| - | Here are some example of \fIcurl_formadd\fP calls to MIME API sequences: |
| + | Here are some example of *curl_formadd* calls to MIME API sequences: |
| - | .nf |
| + | ~~~c |
| curl_formadd(&post, &last, | |
| CURLFORM_COPYNAME, "id", | |
| CURLFORM_COPYCONTENTS, "daniel", CURLFORM_END); | |
| CURLFORM_CONTENTHEADER, headers, | |
| CURLFORM_END); | |
| - | .fi |
| + | ~~~ |
| becomes: | |
| - | .nf |
| + | ~~~c |
| part = curl_mime_addpart(multipart); | |
| curl_mime_name(part, "id"); | |
| curl_mime_data(part, "daniel", CURL_ZERO_TERMINATED); | |
| curl_mime_headers(part, headers, FALSE); | |
| - | .fi |
| + | ~~~ |
| - | Setting the last \fIcurl_mime_headers(3)\fP argument to TRUE would have caused |
| + | Setting the last curl_mime_headers(3) argument to TRUE would have caused |
| the headers to be automatically released upon destroyed the multi-part, thus | |
| - | saving a clean-up call to \fIcurl_slist_free_all(3)\fP. |
| + | saving a clean-up call to curl_slist_free_all(3). |
| - | .nf |
| + | ~~~c |
| curl_formadd(&post, &last, | |
| CURLFORM_PTRNAME, "logotype-image", | |
| CURLFORM_FILECONTENT, "-", | |
| CURLFORM_END); | |
| - | .fi |
| + | ~~~ |
| becomes: | |
| - | .nf |
| + | ~~~c |
| part = curl_mime_addpart(multipart); | |
| curl_mime_name(part, "logotype-image"); | |
| curl_mime_data_cb(part, (curl_off_t) -1, fread, fseek, NULL, stdin); | |
| - | .fi |
| + | ~~~ |
| - | \fIcurl_mime_name(3)\fP always copies the field name. The special file name |
| - | "-" is not supported by \fIcurl_mime_filename(3)\fP: to read an open file, use |
| + | curl_mime_name(3) always copies the field name. The special file name |
| + | "-" is not supported by curl_mime_filename(3): to read an open file, use |
| a callback source using fread(). The transfer is be chunk-encoded since the | |
| data size is unknown. | |
| - | .nf |
| + | ~~~c |
| curl_formadd(&post, &last, | |
| CURLFORM_COPYNAME, "datafile[]", | |
| CURLFORM_FILE, "file1", | |
| CURLFORM_FILE, "file2", | |
| CURLFORM_END); | |
| - | .fi |
| + | ~~~ |
| becomes: | |
| - | .nf |
| + | ~~~c |
| part = curl_mime_addpart(multipart); | |
| curl_mime_name(part, "datafile[]"); | |
| curl_mime_filedata(part, "file1"); | |
| part = curl_mime_addpart(multipart); | |
| curl_mime_name(part, "datafile[]"); | |
| curl_mime_filedata(part, "file2"); | |
| - | .fi |
| + | ~~~ |
| The deprecated multipart/mixed implementation of multiple files field is | |
| translated to two distinct parts with the same name. | |
| - | .nf |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_READFUNCTION, myreadfunc); | |
| curl_formadd(&post, &last, | |
| CURLFORM_COPYNAME, "stream", | |
| @@ -675,87 +692,87 @@ translated to two distinct parts with the same name. | |
| CURLFORM_FILENAME, "archive.zip", | |
| CURLFORM_CONTENTTYPE, "application/zip", | |
| CURLFORM_END); | |
| - | .fi |
| + | ~~~ |
| becomes: | |
| - | .nf |
| + | ~~~c |
| part = curl_mime_addpart(multipart); | |
| curl_mime_name(part, "stream"); | |
| curl_mime_data_cb(part, (curl_off_t) datasize, | |
| myreadfunc, NULL, NULL, arg); | |
| curl_mime_filename(part, "archive.zip"); | |
| curl_mime_type(part, "application/zip"); | |
| - | .fi |
| + | ~~~ |
| - | \fICURLOPT_READFUNCTION(3)\fP callback is not used: it is replace by directly |
| + | CURLOPT_READFUNCTION(3) callback is not used: it is replace by directly |
| setting the part source data from the callback read function. | |
| - | .nf |
| + | ~~~c |
| curl_formadd(&post, &last, | |
| CURLFORM_COPYNAME, "memfile", | |
| CURLFORM_BUFFER, "memfile.bin", | |
| CURLFORM_BUFFERPTR, databuffer, | |
| CURLFORM_BUFFERLENGTH, (long) sizeof databuffer, | |
| CURLFORM_END); | |
| - | .fi |
| + | ~~~ |
| becomes: | |
| - | .nf |
| + | ~~~c |
| part = curl_mime_addpart(multipart); | |
| curl_mime_name(part, "memfile"); | |
| curl_mime_data(part, databuffer, (curl_off_t) sizeof databuffer); | |
| curl_mime_filename(part, "memfile.bin"); | |
| - | .fi |
| + | ~~~ |
| - | \fIcurl_mime_data(3)\fP always copies the initial data: data buffer is thus |
| + | curl_mime_data(3) always copies the initial data: data buffer is thus |
| free for immediate reuse. | |
| - | .nf |
| + | ~~~c |
| curl_formadd(&post, &last, | |
| CURLFORM_COPYNAME, "message", | |
| CURLFORM_FILECONTENT, "msg.txt", | |
| CURLFORM_END); | |
| - | .fi |
| + | ~~~ |
| becomes: | |
| - | .nf |
| + | ~~~c |
| part = curl_mime_addpart(multipart); | |
| curl_mime_name(part, "message"); | |
| curl_mime_filedata(part, "msg.txt"); | |
| curl_mime_filename(part, NULL); | |
| - | .fi |
| + | ~~~ |
| - | Use of \fIcurl_mime_filedata(3)\fP sets the remote file name as a side effect: |
| - | it is therefore necessary to clear it for \fICURLFORM_FILECONTENT\fP |
| + | Use of curl_mime_filedata(3) sets the remote file name as a side effect: |
| + | it is therefore necessary to clear it for *CURLFORM_FILECONTENT* |
| emulation. | |
| - | .SH "Showing Progress" |
| + | # Showing Progress |
| For historical and traditional reasons, libcurl has a built-in progress meter | |
| that can be switched on and then makes it present a progress meter in your | |
| terminal. | |
| Switch on the progress meter by, oddly enough, setting | |
| - | \fICURLOPT_NOPROGRESS(3)\fP to zero. This option is set to 1 by default. |
| + | CURLOPT_NOPROGRESS(3) to zero. This option is set to 1 by default. |
| For most applications however, the built-in progress meter is useless and what | |
| instead is interesting is the ability to specify a progress callback. The | |
| function pointer you pass to libcurl is then called on irregular intervals | |
| with information about the current transfer. | |
| - | Set the progress callback by using \fICURLOPT_PROGRESSFUNCTION(3)\fP. And pass |
| + | Set the progress callback by using CURLOPT_PROGRESSFUNCTION(3). And pass |
| a pointer to a function that matches this prototype: | |
| - | .nf |
| + | ~~~c |
| int progress_callback(void *clientp, | |
| double dltotal, | |
| double dlnow, | |
| double ultotal, | |
| double ulnow); | |
| - | .fi |
| + | ~~~ |
| If any of the input arguments is unknown, a 0 is provided. The first argument, | |
| the 'clientp' is the pointer you pass to libcurl with | |
| - | \fICURLOPT_PROGRESSDATA(3)\fP. libcurl does not touch it. |
| + | CURLOPT_PROGRESSDATA(3). libcurl does not touch it. |
| - | .SH "libcurl with C++" |
| + | # libcurl with C++ |
| There is basically only one thing to keep in mind when using C++ instead of C | |
| when interfacing libcurl: | |
| @@ -764,7 +781,7 @@ The callbacks CANNOT be non-static class member functions | |
| Example C++ code: | |
| - | .nf |
| + | ~~~c |
| class AClass { | |
| static size_t write_data(void *ptr, size_t size, size_t nmemb, | |
| void *ourpointer) | |
| @@ -772,9 +789,9 @@ class AClass { | |
| /* do what you want with the data */ | |
| } | |
| } | |
| - | .fi |
| + | ~~~ |
| - | .SH "Proxies" |
| + | # Proxies |
| What "proxy" means according to Merriam-Webster: "a person authorized to act | |
| for another" but also "the agency, function, or office of a deputy who acts as | |
| @@ -800,53 +817,55 @@ at times it is important to understand that all operations over an HTTP proxy | |
| use the HTTP protocol. For example, you cannot invoke your own custom FTP | |
| commands or even proper FTP directory listings. | |
| - | .IP "Proxy Options" |
| + | ## Proxy Options |
| To tell libcurl to use a proxy at a given port number: | |
| - | .nf |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_PROXY, "proxy-host.com:8080"); | |
| - | .fi |
| + | ~~~ |
| Some proxies require user authentication before allowing a request, and you | |
| pass that information similar to this: | |
| - | .nf |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_PROXYUSERPWD, "user:password"); | |
| - | .fi |
| + | ~~~ |
| If you want to, you can specify the host name only in the | |
| - | \fICURLOPT_PROXY(3)\fP option, and set the port number separately with |
| - | \fICURLOPT_PROXYPORT(3)\fP. |
| + | CURLOPT_PROXY(3) option, and set the port number separately with |
| + | CURLOPT_PROXYPORT(3). |
| - | Tell libcurl what kind of proxy it is with \fICURLOPT_PROXYTYPE(3)\fP (if not, |
| + | Tell libcurl what kind of proxy it is with CURLOPT_PROXYTYPE(3) (if not, |
| it defaults to assuming an HTTP proxy): | |
| - | .nf |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4); | |
| - | .fi |
| - | .IP "Environment Variables" |
| + | ~~~ |
| + | |
| + | ## Environment Variables |
| libcurl automatically checks and uses a set of environment variables to know | |
| what proxies to use for certain protocols. The names of the variables are | |
| following an old tradition and are built up as "[protocol]_proxy" (note the | |
| - | lower casing). Which makes the variable \&'http_proxy' checked for a name of a |
| + | lower casing). Which makes the variable &'http_proxy' checked for a name of a |
| proxy to use when the input URL is HTTP. Following the same rule, the variable | |
| named 'ftp_proxy' is checked for FTP URLs. Again, the proxies are always HTTP | |
| proxies, the different names of the variables simply allows different HTTP | |
| proxies to be used. | |
| The proxy environment variable contents should be in the format | |
| - | \&"[protocol://][user:password@]machine[:port]". Where the protocol:// part |
| + | "[protocol://][user:password@]machine[:port]". Where the protocol:// part |
| specifies which type of proxy it is, and the optional port number specifies on | |
| which port the proxy operates. If not specified, the internal default port | |
| number is used and that is most likely not the one you would like it to be. | |
| There are two special environment variables. 'all_proxy' is what sets proxy | |
| for any URL in case the protocol specific variable was not set, and | |
| - | \&'no_proxy' defines a list of hosts that should not use a proxy even though a |
| + | &'no_proxy' defines a list of hosts that should not use a proxy even though a |
| variable may say so. If 'no_proxy' is a plain asterisk ("*") it matches all | |
| hosts. | |
| To explicitly disable libcurl's checking for and using the proxy environment | |
| variables, set the proxy name to "" - an empty string - with | |
| - | \fICURLOPT_PROXY(3)\fP. |
| - | .IP "SSL and Proxies" |
| + | CURLOPT_PROXY(3). |
| + | |
| + | ## SSL and Proxies |
| SSL is for secure point-to-point connections. This involves strong encryption | |
| and similar things, which effectively makes it impossible for a proxy to | |
| @@ -866,7 +885,8 @@ few advantages that come from using a proxy, such as caching. Many | |
| organizations prevent this kind of tunneling to other destination port numbers | |
| than 443 (which is the default HTTPS port number). | |
| - | .IP "Tunneling Through Proxy" |
| + | ## Tunneling Through Proxy |
| + | |
| As explained above, tunneling is required for SSL to work and often even | |
| restricted to the operation intended for SSL; HTTPS. | |
| @@ -882,18 +902,18 @@ Again, this is often prevented by the administrators of proxies and is | |
| rarely allowed. | |
| Tell libcurl to use proxy tunneling like this: | |
| - | .nf |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_HTTPPROXYTUNNEL, 1L); | |
| - | .fi |
| + | ~~~ |
| In fact, there might even be times when you want to do plain HTTP operations | |
| using a tunnel like this, as it then enables you to operate on the remote | |
| server instead of asking the proxy to do so. libcurl does not stand in the way | |
| for such innovative actions either! | |
| - | .IP "Proxy Auto-Config" |
| + | ## Proxy Auto-Config |
| Netscape first came up with this. It is basically a web page (usually using a | |
| - | \&.pac extension) with a JavaScript that when executed by the browser with the |
| + | &.pac extension) with a JavaScript that when executed by the browser with the |
| requested URL as input, returns information to the browser on how to connect | |
| to the URL. The returned information might be "DIRECT" (which means no proxy | |
| should be used), "PROXY host:port" (to tell the browser where the proxy for | |
| @@ -914,12 +934,12 @@ Mozilla JavaScript engine in the past. | |
| - Ask your admins to stop this, for a static proxy setup or similar. | |
| - | .SH "Persistence Is The Way to Happiness" |
| + | # Persistence Is The Way to Happiness |
| Re-cycling the same easy handle several times when doing multiple requests is | |
| the way to go. | |
| - | After each single \fIcurl_easy_perform(3)\fP operation, libcurl keeps the |
| + | After each single curl_easy_perform(3) operation, libcurl keeps the |
| connection alive and open. A subsequent request using the same easy handle to | |
| the same host might just be able to use the already open connection! This | |
| reduces network impact a lot. | |
| @@ -941,36 +961,41 @@ may also be added in the future. | |
| Each easy handle attempts to keep the last few connections alive for a while | |
| in case they are to be used again. You can set the size of this "cache" with | |
| - | the \fICURLOPT_MAXCONNECTS(3)\fP option. Default is 5. There is rarely any |
| + | the CURLOPT_MAXCONNECTS(3) option. Default is 5. There is rarely any |
| point in changing this value, and if you think of changing this it is often | |
| just a matter of thinking again. | |
| To force your upcoming request to not use an already existing connection, you | |
| - | can do that by setting \fICURLOPT_FRESH_CONNECT(3)\fP to 1. In a similar |
| + | can do that by setting CURLOPT_FRESH_CONNECT(3) to 1. In a similar |
| spirit, you can also forbid the upcoming request to be "lying" around and | |
| possibly get reused after the request by setting | |
| - | \fICURLOPT_FORBID_REUSE(3)\fP to 1. |
| + | CURLOPT_FORBID_REUSE(3) to 1. |
| + | |
| + | # HTTP Headers Used by libcurl |
| - | .SH "HTTP Headers Used by libcurl" |
| When you use libcurl to do HTTP requests, it passes along a series of headers | |
| automatically. It might be good for you to know and understand these. You can | |
| - | replace or remove them by using the \fICURLOPT_HTTPHEADER(3)\fP option. |
| + | replace or remove them by using the CURLOPT_HTTPHEADER(3) option. |
| + | |
| + | ## Host |
| - | .IP "Host" |
| This header is required by HTTP 1.1 and even many 1.0 servers and should be | |
| the name of the server we want to talk to. This includes the port number if | |
| anything but default. | |
| - | .IP "Accept" |
| - | \&"*/*". |
| + | ## Accept |
| + | |
| + | &"*/*". |
| - | .IP "Expect" |
| - | When doing POST requests, libcurl sets this header to \&"100-continue" to ask |
| + | ## Expect |
| + | |
| + | When doing POST requests, libcurl sets this header to &"100-continue" to ask |
| the server for an "OK" message before it proceeds with sending the data part | |
| of the post. If the posted data amount is deemed "small", libcurl does not use | |
| this header. | |
| - | .SH "Customizing Operations" |
| + | # Customizing Operations |
| + | |
| There is an ongoing development today where more and more protocols are built | |
| upon HTTP for transport. This has obvious benefits as HTTP is a tested and | |
| reliable protocol that is widely deployed and has excellent proxy-support. | |
| @@ -981,50 +1006,53 @@ manners. You may need to change words, headers or various data. | |
| libcurl is your friend here too. | |
| - | .IP CUSTOMREQUEST |
| + | ## CUSTOMREQUEST |
| + | |
| If just changing the actual HTTP request keyword is what you want, like when | |
| - | GET, HEAD or POST is not good enough for you, \fICURLOPT_CUSTOMREQUEST(3)\fP |
| + | GET, HEAD or POST is not good enough for you, CURLOPT_CUSTOMREQUEST(3) |
| is there for you. It is simple to use: | |
| - | .nf |
| - | curl_easy_setopt(handle, CURLOPT_CUSTOMREQUEST, "MYOWNREQUEST"); |
| - | .fi |
| + | ~~~c |
| + | curl_easy_setopt(handle, CURLOPT_CUSTOMREQUEST, "MYOWNREQUEST"); |
| + | ~~~ |
| When using the custom request, you change the request keyword of the actual | |
| - | request you are performing. Thus, by default you make a GET request but you can |
| - | also make a POST operation (as described before) and then replace the POST |
| - | keyword if you want to. you are the boss. |
| + | request you are performing. Thus, by default you make a GET request but you |
| + | can also make a POST operation (as described before) and then replace the POST |
| + | keyword if you want to. You are the boss. |
| + | |
| + | ## Modify Headers |
| - | .IP "Modify Headers" |
| HTTP-like protocols pass a series of headers to the server when doing the | |
| request, and you are free to pass any amount of extra headers that you | |
| think fit. Adding headers is this easy: | |
| - | .nf |
| - | struct curl_slist *headers=NULL; /* init to NULL is important */ |
| + | ~~~c |
| + | struct curl_slist *headers=NULL; /* init to NULL is important */ |
| - | headers = curl_slist_append(headers, "Hey-server-hey: how are you?"); |
| - | headers = curl_slist_append(headers, "X-silly-content: yes"); |
| + | headers = curl_slist_append(headers, "Hey-server-hey: how are you?"); |
| + | headers = curl_slist_append(headers, "X-silly-content: yes"); |
| - | /* pass our list of custom made headers */ |
| - | curl_easy_setopt(handle, CURLOPT_HTTPHEADER, headers); |
| + | /* pass our list of custom made headers */ |
| + | curl_easy_setopt(handle, CURLOPT_HTTPHEADER, headers); |
| - | curl_easy_perform(handle); /* transfer http */ |
| + | curl_easy_perform(handle); /* transfer http */ |
| - | curl_slist_free_all(headers); /* free the header list */ |
| - | .fi |
| + | curl_slist_free_all(headers); /* free the header list */ |
| + | ~~~ |
| - | \&... and if you think some of the internally generated headers, such as |
| + | &... and if you think some of the internally generated headers, such as |
| Accept: or Host: do not contain the data you want them to contain, you can | |
| replace them by simply setting them too: | |
| - | .nf |
| - | headers = curl_slist_append(headers, "Accept: Agent-007"); |
| - | headers = curl_slist_append(headers, "Host: munged.host.line"); |
| - | .fi |
| + | ~~~c |
| + | headers = curl_slist_append(headers, "Accept: Agent-007"); |
| + | headers = curl_slist_append(headers, "Host: munged.host.line"); |
| + | ~~~ |
| + | |
| + | ## Delete Headers |
| - | .IP "Delete Headers" |
| If you replace an existing header with one with no contents, you prevent the | |
| header from being sent. For instance, if you want to completely prevent the | |
| - | \&"Accept:" header from being sent, you can disable it with code similar to |
| + | &"Accept:" header from being sent, you can disable it with code similar to |
| this: | |
| headers = curl_slist_append(headers, "Accept:"); | |
| @@ -1033,7 +1061,7 @@ Both replacing and canceling internal headers should be done with careful | |
| consideration and you should be aware that you may violate the HTTP protocol | |
| when doing so. | |
| - | .IP "Enforcing chunked transfer-encoding" |
| + | ## Enforcing chunked transfer-encoding |
| By making sure a request uses the custom header "Transfer-Encoding: chunked" | |
| when doing a non-GET HTTP operation, libcurl switches over to "chunked" | |
| @@ -1041,7 +1069,7 @@ upload, even though the size of the data to upload might be known. By default, | |
| libcurl usually switches over to chunked upload automatically if the upload | |
| data size is unknown. | |
| - | .IP "HTTP Version" |
| + | ## HTTP Version |
| All HTTP requests includes the version number to tell the server which version | |
| we support. libcurl speaks HTTP 1.1 by default. Some old servers do not like | |
| @@ -1050,7 +1078,7 @@ can tell libcurl to use 1.0 instead by doing something like this: | |
| curl_easy_setopt(handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); | |
| - | .IP "FTP Custom Commands" |
| + | ## FTP Custom Commands |
| Not all protocols are HTTP-like, and thus the above may not help you when | |
| you want to make, for example, your FTP transfers to behave differently. | |
| @@ -1067,7 +1095,7 @@ correct remote directory. | |
| A little example that deletes a given file before an operation: | |
| - | .nf |
| + | ~~~c |
| headers = curl_slist_append(headers, "DELE file-to-remove"); | |
| /* pass the list of custom commands to the handle */ | |
| @@ -1076,35 +1104,37 @@ A little example that deletes a given file before an operation: | |
| curl_easy_perform(handle); /* transfer ftp data! */ | |
| curl_slist_free_all(headers); /* free the header list */ | |
| - | .fi |
| + | ~~~ |
| If you would instead want this operation (or chain of operations) to happen | |
| - | _after_ the data transfer took place the option to \fIcurl_easy_setopt(3)\fP |
| - | would instead be called \fICURLOPT_POSTQUOTE(3)\fP and used the exact same |
| + | _after_ the data transfer took place the option to curl_easy_setopt(3) |
| + | would instead be called CURLOPT_POSTQUOTE(3) and used the exact same |
| way. | |
| The custom FTP commands are issued to the server in the same order they are | |
| added to the list, and if a command gets an error code returned back from the | |
| server, no more commands are issued and libcurl bails out with an error code | |
| - | (CURLE_QUOTE_ERROR). Note that if you use \fICURLOPT_QUOTE(3)\fP to send |
| + | (CURLE_QUOTE_ERROR). Note that if you use CURLOPT_QUOTE(3) to send |
| commands before a transfer, no transfer actually takes place when a quote | |
| command has failed. | |
| - | If you set the \fICURLOPT_HEADER(3)\fP to 1, you tell libcurl to get |
| + | If you set the CURLOPT_HEADER(3) to 1, you tell libcurl to get |
| information about the target file and output "headers" about it. The headers | |
| are in "HTTP-style", looking like they do in HTTP. | |
| The option to enable headers or to run custom FTP commands may be useful to | |
| - | combine with \fICURLOPT_NOBODY(3)\fP. If this option is set, no actual file |
| + | combine with CURLOPT_NOBODY(3). If this option is set, no actual file |
| content transfer is performed. | |
| - | .IP "FTP Custom CUSTOMREQUEST" |
| + | ## FTP Custom CUSTOMREQUEST |
| + | |
| If you do want to list the contents of an FTP directory using your own defined | |
| - | FTP command, \fICURLOPT_CUSTOMREQUEST(3)\fP does just that. "NLST" is the |
| + | FTP command, CURLOPT_CUSTOMREQUEST(3) does just that. "NLST" is the |
| default one for listing directories but you are free to pass in your idea of a | |
| good alternative. | |
| - | .SH "Cookies Without Chocolate Chips" |
| + | # Cookies Without Chocolate Chips |
| + | |
| In the HTTP sense, a cookie is a name with an associated value. A server sends | |
| the name and value to the client, and expects it to get sent back on every | |
| subsequent request to the server that matches the particular conditions | |
| @@ -1118,10 +1148,10 @@ Cookies are sent from server to clients with the header Set-Cookie: and | |
| they are sent from clients to servers with the Cookie: header. | |
| To just send whatever cookie you want to a server, you can use | |
| - | \fICURLOPT_COOKIE(3)\fP to set a cookie string like this: |
| - | .nf |
| + | CURLOPT_COOKIE(3) to set a cookie string like this: |
| + | ~~~c |
| curl_easy_setopt(handle, CURLOPT_COOKIE, "name1=var1; name2=var2;"); | |
| - | .fi |
| + | ~~~ |
| In many cases, that is not enough. You might want to dynamically save | |
| whatever cookies the remote server passes to you, and make sure those cookies | |
| are then used accordingly on later requests. | |
| @@ -1129,33 +1159,33 @@ are then used accordingly on later requests. | |
| One way to do this, is to save all headers you receive in a plain file and | |
| when you make a request, you tell libcurl to read the previous headers to | |
| figure out which cookies to use. Set the header file to read cookies from with | |
| - | \fICURLOPT_COOKIEFILE(3)\fP. |
| + | CURLOPT_COOKIEFILE(3). |
| - | The \fICURLOPT_COOKIEFILE(3)\fP option also automatically enables the cookie |
| + | The CURLOPT_COOKIEFILE(3) option also automatically enables the cookie |
| parser in libcurl. Until the cookie parser is enabled, libcurl does not parse | |
| or understand incoming cookies and they are just be ignored. However, when the | |
| parser is enabled the cookies are understood and the cookies are kept in | |
| memory and used properly in subsequent requests when the same handle is | |
| used. Many times this is enough, and you may not have to save the cookies to | |
| - | disk at all. Note that the file you specify to \fICURLOPT_COOKIEFILE(3)\fP |
| + | disk at all. Note that the file you specify to CURLOPT_COOKIEFILE(3) |
| does not have to exist to enable the parser, so a common way to just enable | |
| the parser and not read any cookies is to use the name of a file you know does | |
| not exist. | |
| If you would rather use existing cookies that you have previously received | |
| with your Netscape or Mozilla browsers, you can make libcurl use that cookie | |
| - | file as input. The \fICURLOPT_COOKIEFILE(3)\fP is used for that too, as |
| + | file as input. The CURLOPT_COOKIEFILE(3) is used for that too, as |
| libcurl automatically finds out what kind of file it is and acts accordingly. | |
| Perhaps the most advanced cookie operation libcurl offers, is saving the | |
| entire internal cookie state back into a Netscape/Mozilla formatted cookie | |
| file. We call that the cookie-jar. When you set a file name with | |
| - | \fICURLOPT_COOKIEJAR(3)\fP, that file name is created and all received cookies |
| - | get stored in it when \fIcurl_easy_cleanup(3)\fP is called. This enables |
| + | CURLOPT_COOKIEJAR(3), that file name is created and all received cookies |
| + | get stored in it when curl_easy_cleanup(3) is called. This enables |
| cookies to get passed on properly between multiple handles without any | |
| information getting lost. | |
| - | .SH "FTP Peculiarities We Need" |
| + | # FTP Peculiarities We Need |
| FTP transfers use a second TCP/IP connection for the data transfer. This is | |
| usually a fact you can forget and ignore but at times this detail comes back | |
| @@ -1171,22 +1201,23 @@ work it tries PASV instead. (EPSV is an extension to the original FTP spec | |
| and does not exist nor work on all FTP servers.) | |
| You can prevent libcurl from first trying the EPSV command by setting | |
| - | \fICURLOPT_FTP_USE_EPSV(3)\fP to zero. |
| + | CURLOPT_FTP_USE_EPSV(3) to zero. |
| In some cases, you want to have the server connect back to you for the second | |
| connection. This might be when the server is perhaps behind a firewall or | |
| something and only allows connections on a single port. libcurl then informs | |
| - | the remote server which IP address and port number to connect to. This is |
| - | made with the \fICURLOPT_FTPPORT(3)\fP option. If you set it to "-", libcurl |
| - | uses your system's "default IP address". If you want to use a particular IP, |
| - | you can set the full IP address, a host name to resolve to an IP address or |
| - | even a local network interface name that libcurl gets the IP address from. |
| + | the remote server which IP address and port number to connect to. This is made |
| + | with the CURLOPT_FTPPORT(3) option. If you set it to "-", libcurl uses your |
| + | system's "default IP address". If you want to use a particular IP, you can set |
| + | the full IP address, a host name to resolve to an IP address or even a local |
| + | network interface name that libcurl gets the IP address from. |
| When doing the "PORT" approach, libcurl attempts to use the EPRT and the LPRT | |
| before trying PORT, as they work with more protocols. You can disable this | |
| - | behavior by setting \fICURLOPT_FTP_USE_EPRT(3)\fP to zero. |
| + | behavior by setting CURLOPT_FTP_USE_EPRT(3) to zero. |
| + | |
| + | # MIME API revisited for SMTP and IMAP |
| - | .SH "MIME API revisited for SMTP and IMAP" |
| In addition to support HTTP multi-part form fields, the MIME API can be used | |
| to build structured email messages and send them via SMTP or append such | |
| messages to IMAP directories. | |
| @@ -1198,26 +1229,26 @@ text formats alternatives. This can be nested to any level. | |
| To build such a message, you prepare the nth-level multi-part and then include | |
| it as a source to the parent multi-part using function | |
| - | \fIcurl_mime_subparts(3)\fP. Once it has been |
| + | curl_mime_subparts(3). Once it has been |
| bound to its parent multi-part, a nth-level multi-part belongs to it and | |
| should not be freed explicitly. | |
| Email messages data is not supposed to be non-ascii and line length is | |
| limited: fortunately, some transfer encodings are defined by the standards to | |
| support the transmission of such incompatible data. Function | |
| - | \fIcurl_mime_encoder(3)\fP tells a part that its source data must be encoded |
| + | curl_mime_encoder(3) tells a part that its source data must be encoded |
| before being sent. It also generates the corresponding header for that part. | |
| If the part data you want to send is already encoded in such a scheme, do not | |
| use this function (this would over-encode it), but explicitly set the | |
| corresponding part header. | |
| Upon sending such a message, libcurl prepends it with the header list | |
| - | set with \fICURLOPT_HTTPHEADER(3)\fP, as zero level mime part headers. |
| + | set with CURLOPT_HTTPHEADER(3), as zero level mime part headers. |
| Here is an example building an email message with an inline plain/html text | |
| alternative and a file attachment encoded in base64: | |
| - | .nf |
| + | ~~~c |
| curl_mime *message = curl_mime_init(handle); | |
| /* The inline part is an alternative proposing the html and the text | |
| @@ -1255,37 +1286,40 @@ alternative and a file attachment encoded in base64: | |
| /* Set these into the easy handle. */ | |
| curl_easy_setopt(handle, CURLOPT_HTTPHEADER, headers); | |
| curl_easy_setopt(handle, CURLOPT_MIMEPOST, mime); | |
| - | .fi |
| + | ~~~ |
| It should be noted that appending a message to an IMAP directory requires | |
| the message size to be known prior upload. It is therefore not possible to | |
| include parts with unknown data size in this context. | |
| - | .SH "Headers Equal Fun" |
| + | # Headers Equal Fun |
| Some protocols provide "headers", meta-data separated from the normal | |
| data. These headers are by default not included in the normal data stream, but | |
| - | you can make them appear in the data stream by setting \fICURLOPT_HEADER(3)\fP |
| + | you can make them appear in the data stream by setting CURLOPT_HEADER(3) |
| to 1. | |
| What might be even more useful, is libcurl's ability to separate the headers | |
| from the data and thus make the callbacks differ. You can for example set a | |
| different pointer to pass to the ordinary write callback by setting | |
| - | \fICURLOPT_HEADERDATA(3)\fP. |
| + | CURLOPT_HEADERDATA(3). |
| Or, you can set an entirely separate function to receive the headers, by using | |
| - | \fICURLOPT_HEADERFUNCTION(3)\fP. |
| + | CURLOPT_HEADERFUNCTION(3). |
| The headers are passed to the callback function one by one, and you can | |
| depend on that fact. It makes it easier for you to add custom header parsers | |
| etc. | |
| - | \&"Headers" for FTP transfers equal all the FTP server responses. They are not |
| + | &"Headers" for FTP transfers equal all the FTP server responses. They are not |
| actually true headers, but in this case we pretend they are! ;-) | |
| - | .SH "Post Transfer Information" |
| - | See \fIcurl_easy_getinfo(3)\fP. |
| - | .SH "The multi Interface" |
| + | # Post Transfer Information |
| + | |
| + | See curl_easy_getinfo(3). |
| + | |
| + | # The multi Interface |
| + | |
| The easy interface as described in detail in this document is a synchronous | |
| interface that transfers one file at a time and does not return until it is | |
| done. | |
| @@ -1312,14 +1346,14 @@ a "multi stack". | |
| You create the easy handles you want, one for each concurrent transfer, and | |
| you set all the options just like you learned above, and then you create a | |
| - | multi handle with \fIcurl_multi_init(3)\fP and add all those easy handles to |
| - | that multi handle with \fIcurl_multi_add_handle(3)\fP. |
| + | multi handle with curl_multi_init(3) and add all those easy handles to |
| + | that multi handle with curl_multi_add_handle(3). |
| When you have added the handles you have for the moment (you can still add new | |
| ones at any time), you start the transfers by calling | |
| - | \fIcurl_multi_perform(3)\fP. |
| + | curl_multi_perform(3). |
| - | \fIcurl_multi_perform(3)\fP is asynchronous. It only performs what can be done |
| + | curl_multi_perform(3) is asynchronous. It only performs what can be done |
| now and then return control to your program. It is designed to never | |
| block. You need to keep calling the function until all transfers are | |
| completed. | |
| @@ -1328,37 +1362,38 @@ The best usage of this interface is when you do a select() on all possible | |
| file descriptors or sockets to know when to call libcurl again. This also | |
| makes it easy for you to wait and respond to actions on your own application's | |
| sockets/handles. You figure out what to select() for by using | |
| - | \fIcurl_multi_fdset(3)\fP, that fills in a set of \fIfd_set\fP variables for |
| + | curl_multi_fdset(3), that fills in a set of *fd_set* variables for |
| you with the particular file descriptors libcurl uses for the moment. | |
| When you then call select(), it returns when one of the file handles signal | |
| - | action and you then call \fIcurl_multi_perform(3)\fP to allow libcurl to do |
| + | action and you then call curl_multi_perform(3) to allow libcurl to do |
| what it wants to do. Take note that libcurl does also feature some time-out | |
| code so we advise you to never use long timeouts on select() before you call | |
| - | \fIcurl_multi_perform(3)\fP again. \fIcurl_multi_timeout(3)\fP is provided to |
| + | curl_multi_perform(3) again. curl_multi_timeout(3) is provided to |
| help you get a suitable timeout period. | |
| - | Another precaution you should use: always call \fIcurl_multi_fdset(3)\fP |
| + | Another precaution you should use: always call curl_multi_fdset(3) |
| immediately before the select() call since the current set of file descriptors | |
| may change in any curl function invoke. | |
| If you want to stop the transfer of one of the easy handles in the stack, you | |
| - | can use \fIcurl_multi_remove_handle(3)\fP to remove individual easy |
| - | handles. Remember that easy handles should be \fIcurl_easy_cleanup(3)\fPed. |
| + | can use curl_multi_remove_handle(3) to remove individual easy |
| + | handles. Remember that easy handles should be curl_easy_cleanup(3)ed. |
| When a transfer within the multi stack has finished, the counter of running | |
| - | transfers (as filled in by \fIcurl_multi_perform(3)\fP) decreases. When the |
| + | transfers (as filled in by curl_multi_perform(3)) decreases. When the |
| number reaches zero, all transfers are done. | |
| - | \fIcurl_multi_info_read(3)\fP can be used to get information about completed |
| + | curl_multi_info_read(3) can be used to get information about completed |
| transfers. It then returns the CURLcode for each easy transfer, to allow you | |
| to figure out success on each individual transfer. | |
| - | .SH "SSL, Certificates and Other Tricks" |
| + | # SSL, Certificates and Other Tricks |
| [ seeding, passwords, keys, certificates, ENGINE, ca certs ] | |
| - | .SH "Sharing Data Between Easy Handles" |
| + | # Sharing Data Between Easy Handles |
| + | |
| You can share some data between easy handles when the easy interface is used, | |
| and some data is share automatically when you use the multi interface. | |
| @@ -1370,29 +1405,32 @@ The DNS cache is shared between handles within a multi handle, making | |
| subsequent name resolving faster, and the connection pool that is kept to | |
| better allow persistent connections and connection reuse is also shared. If | |
| you are using the easy interface, you can still share these between specific | |
| - | easy handles by using the share interface, see \fIlibcurl-share(3)\fP. |
| + | easy handles by using the share interface, see libcurl-share(3). |
| Some things are never shared automatically, not within multi handles, like for | |
| example cookies so the only way to share that is with the share interface. | |
| - | .SH "Footnotes" |
| - | .IP "[1]" |
| + | # Footnotes |
| + | |
| + | ## [1] |
| + | |
| libcurl 7.10.3 and later have the ability to switch over to chunked | |
| Transfer-Encoding in cases where HTTP uploads are done with data of an unknown | |
| size. | |
| - | .IP "[2]" |
| + | |
| + | ## [2] |
| + | |
| This happens on Windows machines when libcurl is built and used as a | |
| DLL. However, you can still do this on Windows if you link with a static | |
| library. | |
| - | .IP "[3]" |
| + | |
| + | ## [3] |
| + | |
| The curl-config tool is generated at build-time (on Unix-like systems) and | |
| should be installed with the 'make install' or similar instruction that | |
| installs the library, header files, man pages etc. | |
| - | .IP "[4]" |
| + | |
| + | ## [4] |
| + | |
| This behavior was different in versions before 7.17.0, where strings had to | |
| - | remain valid past the end of the \fIcurl_easy_setopt(3)\fP call. |
| - | .SH "SEE ALSO" |
| - | .BR libcurl-easy (3), |
| - | .BR libcurl-errors (3), |
| - | .BR libcurl-multi (3), |
| - | .BR libcurl-url (3) |
| + | remain valid past the end of the curl_easy_setopt(3) call. |
| @@ -1,80 +1,91 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH libcurl 3 "10 Sep 2018" "libcurl" "libcurl" |
| - | .SH NAME |
| - | libcurl-url \- URL interface overview |
| - | .SH DESCRIPTION |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: libcurl |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_URL (3) |
| + | - curl_url (3) |
| + | - curl_url_cleanup (3) |
| + | - curl_url_dup (3) |
| + | - curl_url_get (3) |
| + | - curl_url_set (3) |
| + | - curl_url_strerror (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | libcurl-url - URL interface overview |
| + | |
| + | # DESCRIPTION |
| + | |
| The URL interface provides functions for parsing and generating URLs. | |
| - | .SH INCLUDE |
| + | |
| + | # INCLUDE |
| + | |
| You still only include <curl/curl.h> in your code. | |
| - | .SH CREATE |
| - | Create a handle that holds URL info and resources with \fIcurl_url(3)\fP: |
| - | .nf |
| + | |
| + | # CREATE |
| + | |
| + | Create a handle that holds URL info and resources with curl_url(3): |
| + | ~~~c |
| CURLU *h = curl_url(); | |
| - | .fi |
| - | .SH CLEANUP |
| - | When done with it, clean it up with \fIcurl_url_cleanup(3)\fP |
| - | .nf |
| + | ~~~ |
| + | |
| + | # CLEANUP |
| + | |
| + | When done with it, clean it up with curl_url_cleanup(3) |
| + | ~~~c |
| curl_url_cleanup(h); | |
| - | .fi |
| - | .SH DUPLICATE |
| - | When you need a copy of a handle, just duplicate it with \fIcurl_url_dup(3)\fP: |
| - | .nf |
| + | ~~~ |
| + | |
| + | # DUPLICATE |
| + | |
| + | When you need a copy of a handle, just duplicate it with curl_url_dup(3): |
| + | ~~~c |
| CURLU *nh = curl_url_dup(h); | |
| - | .fi |
| - | .SH PARSING |
| - | By setting a URL to the handle with \fIcurl_url_set(3)\fP, the URL is parsed |
| + | ~~~ |
| + | |
| + | # PARSING |
| + | |
| + | By setting a URL to the handle with curl_url_set(3), the URL is parsed |
| and stored in the handle. If the URL is not syntactically correct it returns | |
| an error instead. | |
| - | .nf |
| + | ~~~c |
| rc = curl_url_set(h, CURLUPART_URL, | |
| "https://example.com:449/foo/bar?name=moo", 0); | |
| - | .fi |
| + | ~~~ |
| The zero in the fourth argument is a bitmask for changing specific features. | |
| If successful, this stores the URL in its individual parts within the handle. | |
| - | .SH REDIRECT |
| + | |
| + | # REDIRECT |
| + | |
| When a handle already contains info about a URL, setting a relative URL makes | |
| it "redirect" to that. | |
| - | .nf |
| + | ~~~c |
| rc = curl_url_set(h, CURLUPART_URL, "../test?another", 0); | |
| - | .fi |
| - | .SH "GET URL" |
| - | The \fBCURLU\fP handle represents a URL and you can easily extract that with |
| - | \fIcurl_url_get(3)\fP: |
| - | .nf |
| + | ~~~ |
| + | |
| + | # GET URL |
| + | |
| + | The **CURLU** handle represents a URL and you can easily extract that with |
| + | curl_url_get(3): |
| + | ~~~c |
| char *url; | |
| rc = curl_url_get(h, CURLUPART_URL, &url, 0); | |
| curl_free(url); | |
| - | .fi |
| + | ~~~ |
| The zero in the fourth argument is a bitmask for changing specific features. | |
| - | .SH "GET PARTS" |
| + | |
| + | # GET PARTS |
| + | |
| When a URL has been parsed or parts have been set, you can extract those | |
| pieces from the handle at any time. | |
| - | .nf |
| + | ~~~c |
| rc = curl_url_get(h, CURLUPART_FRAGMENT, &fragment, 0); | |
| rc = curl_url_get(h, CURLUPART_HOST, &host, 0); | |
| rc = curl_url_get(h, CURLUPART_PASSWORD, &password, 0); | |
| @@ -84,18 +95,20 @@ pieces from the handle at any time. | |
| rc = curl_url_get(h, CURLUPART_SCHEME, &scheme, 0); | |
| rc = curl_url_get(h, CURLUPART_USER, &user, 0); | |
| rc = curl_url_get(h, CURLUPART_ZONEID, &zoneid, 0); | |
| - | .fi |
| + | ~~~ |
| Extracted parts are not URL decoded unless the user also asks for it with the | |
| - | \fICURLU_URLDECODE\fP flag set in the fourth bitmask argument. |
| + | *CURLU_URLDECODE* flag set in the fourth bitmask argument. |
| - | Remember to free the returned string with \fIcurl_free(3)\fP when you are done |
| + | Remember to free the returned string with curl_free(3) when you are done |
| with it! | |
| - | .SH "SET PARTS" |
| + | |
| + | # SET PARTS |
| + | |
| A user set individual URL parts, either after having parsed a full URL or | |
| instead of parsing such. | |
| - | .nf |
| + | ~~~c |
| rc = curl_url_set(urlp, CURLUPART_FRAGMENT, "anchor", 0); | |
| rc = curl_url_set(urlp, CURLUPART_HOST, "www.example.com", 0); | |
| rc = curl_url_set(urlp, CURLUPART_PASSWORD, "doe", 0); | |
| @@ -105,20 +118,22 @@ instead of parsing such. | |
| rc = curl_url_set(urlp, CURLUPART_SCHEME, "https", 0); | |
| rc = curl_url_set(urlp, CURLUPART_USER, "john", 0); | |
| rc = curl_url_set(urlp, CURLUPART_ZONEID, "eth0", 0); | |
| - | .fi |
| + | ~~~ |
| Set parts are not URL encoded unless the user asks for it with the | |
| - | \fICURLU_URLENCODE\fP flag. |
| - | .SH "CURLU_APPENDQUERY" |
| + | *CURLU_URLENCODE* flag. |
| + | |
| + | # CURLU_APPENDQUERY |
| + | |
| An application can append a string to the right end of the query part with the | |
| - | \fICURLU_APPENDQUERY\fP flag to \fIcurl_url_set(3)\fP. |
| + | *CURLU_APPENDQUERY* flag to curl_url_set(3). |
| Imagine a handle that holds the URL "https://example.com/?shoes=2". An | |
| application can then add the string "hat=1" to the query part like this: | |
| - | .nf |
| + | ~~~c |
| rc = curl_url_set(urlp, CURLUPART_QUERY, "hat=1", CURLU_APPENDQUERY); | |
| - | .fi |
| + | ~~~ |
| It notices the lack of an ampersand (&) separator and injects one, and the | |
| handle's full URL then equals "https://example.com/?shoes=2&hat=1". | |
| @@ -127,25 +142,19 @@ The appended string can of course also get URL encoded on add, and if asked to | |
| URL encode, the encoding process skips the '=' character. For example, append | |
| "candy=N&N" to what we already have, and URL encode it to deal with the | |
| ampersand in the data: | |
| - | .nf |
| + | ~~~c |
| rc = curl_url_set(urlp, CURLUPART_QUERY, "candy=N&N", | |
| CURLU_APPENDQUERY | CURLU_URLENCODE); | |
| - | .fi |
| + | ~~~ |
| Now the URL looks like | |
| - | .nf |
| + | ~~~c |
| https://example.com/?shoes=2&hat=1&candy=N%26N | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| The URL API was introduced in libcurl 7.62.0. | |
| A URL with a literal IPv6 address can be parsed even when IPv6 support is not | |
| enabled. | |
| - | .SH "SEE ALSO" |
| - | .BR curl_url (3), |
| - | .BR curl_url_cleanup (3), |
| - | .BR curl_url_dup (3), |
| - | .BR curl_url_get (3), |
| - | .BR curl_url_set (3), |
| - | .BR curl_url_strerror (3), |
| - | .BR CURLOPT_URL (3) |
| @@ -1,36 +1,35 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH libcurl 3 "10 Sep 2018" "libcurl" "libcurl" |
| - | .SH NAME |
| - | libcurl-ws \- WebSocket interface overview |
| - | .SH DESCRIPTION |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: libcurl |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CONNECT_ONLY (3) |
| + | - CURLOPT_WRITEFUNCTION (3) |
| + | - CURLOPT_WS_OPTIONS (3) |
| + | - curl_easy_init (3) |
| + | - curl_ws_meta (3) |
| + | - curl_ws_recv (3) |
| + | - curl_ws_send (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | libcurl-ws - WebSocket interface overview |
| + | |
| + | # DESCRIPTION |
| + | |
| The WebSocket interface provides functions for receiving and sending WebSocket | |
| data. | |
| - | .SH INCLUDE |
| + | |
| + | # INCLUDE |
| + | |
| You still only include <curl/curl.h> in your code. | |
| - | .SH SETUP |
| - | WebSocket is also often known as \fIWebSockets\fP, in plural. It is done by |
| + | |
| + | # SETUP |
| + | |
| + | WebSocket is also often known as *WebSockets*, in plural. It is done by |
| upgrading a regular HTTP(S) GET request to a WebSocket connection. | |
| WebSocket is a TCP-like message-based communication protocol done over HTTP, | |
| @@ -44,7 +43,9 @@ A WebSocket request is done as an HTTP/1 GET request with an "Upgrade | |
| WebSocket" request header field. When the upgrade is accepted by the server, | |
| it responds with a 101 Switching and then the client can speak WebSocket with | |
| the server. The communication can happen in both directions at the same time. | |
| - | .SH MESSAGES |
| + | |
| + | # MESSAGES |
| + | |
| WebSocket communication is message based. That means that both ends send and | |
| receive entire messages, not streams like TCP. A WebSocket message is sent | |
| over the wire in one or more frames. Each frame in a message can have a size | |
| @@ -58,9 +59,11 @@ arrive for the same frame. | |
| A message has an unknown size until the last frame header for the message has | |
| been received since only frames have set sizes. | |
| - | .SH "Raw mode" |
| + | |
| + | # Raw mode |
| + | |
| libcurl can be told to speak WebSocket in "raw mode" by setting the | |
| - | \fBCURLWS_RAW_MODE\fP bit to the \fICURLOPT_WS_OPTIONS(3)\fP option. |
| + | **CURLWS_RAW_MODE** bit to the CURLOPT_WS_OPTIONS(3) option. |
| Raw WebSocket means that libcurl passes on the data from the network without | |
| parsing it leaving that entirely to the application. This mode assumes that | |
| @@ -69,50 +72,52 @@ itself. | |
| This mode is intended for applications that already have a WebSocket | |
| parser/engine that want to switch over to use libcurl for enabling WebSocket, | |
| - | but keep parts of the existing software architecture. |
| - | .SH PING |
| + | and keep parts of the existing software architecture. |
| + | |
| + | # PING |
| + | |
| WebSocket is designed to allow long-lived sessions and in order to keep the | |
| connections alive, both ends can send PING messages for the other end to | |
| respond with a PONG. | |
| libcurl automatically responds to server PING messages with a PONG. It does | |
| not send any PING messages automatically. | |
| - | .SH MODELS |
| + | |
| + | # MODELS |
| + | |
| Because of the many different ways WebSocket can be used, which is much more | |
| flexible than limited to plain downloads or uploads, libcurl offers two | |
| different API models to use it: | |
| - | 1. Using a write callback with \fICURLOPT_WRITEFUNCTION(3)\fP much like other |
| + | 1. Using a write callback with CURLOPT_WRITEFUNCTION(3) much like other |
| downloads for when the traffic is download oriented. | |
| - | 2. Using \fICURLOPT_CONNECT_ONLY(3)\fP and use the WebSocket recv/send |
| + | 2. Using CURLOPT_CONNECT_ONLY(3) and use the WebSocket recv/send |
| functions. | |
| - | .SH "Callback model" |
| + | |
| + | # Callback model |
| + | |
| When a write callback is set and a WebSocket transfer is performed, the | |
| callback is called to deliver all WebSocket data that arrives. | |
| - | The callback can then call \fIcurl_ws_meta(3)\fP to learn about the details of |
| + | The callback can then call curl_ws_meta(3) to learn about the details of |
| the incoming data fragment. | |
| - | .SH "CONNECT_ONLY model" |
| - | By setting \fICURLOPT_CONNECT_ONLY(3)\fP to \fB2L\fP, the transfer only |
| + | |
| + | # CONNECT_ONLY model |
| + | |
| + | By setting CURLOPT_CONNECT_ONLY(3) to **2L**, the transfer only |
| establishes and setups the WebSocket communication and then returns control | |
| back to the application. | |
| Once such a setup has been successfully performed, the application can proceed | |
| - | and use \fIcurl_ws_recv(3)\fP and \fIcurl_ws_send(3)\fP freely to exchange |
| + | and use curl_ws_recv(3) and curl_ws_send(3) freely to exchange |
| WebSocket messages with the server. | |
| - | .SH AVAILABILITY |
| + | |
| + | # AVAILABILITY |
| + | |
| The WebSocket API was introduced as experimental in 7.86.0 and is still | |
| experimental today. | |
| It is only built-in if explicitly opted in at build time. We discourage use of | |
| the WebSocket API in production because of its experimental state. We might | |
| change API, ABI and behavior before this "goes live". | |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_init (3), |
| - | .BR curl_ws_meta (3), |
| - | .BR curl_ws_recv (3), |
| - | .BR curl_ws_send (3), |
| - | .BR CURLOPT_CONNECT_ONLY (3), |
| - | .BR CURLOPT_WRITEFUNCTION (3), |
| - | .BR CURLOPT_WS_OPTIONS (3) |
| @@ -1,87 +1,97 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .TH libcurl 3 "March 19, 2002" "libcurl" "libcurl" |
| - | .SH NAME |
| - | libcurl \- client-side URL transfers |
| - | .SH DESCRIPTION |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: libcurl |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - libcurl-easy (3) |
| + | - libcurl-multi (3) |
| + | - libcurl-security (3) |
| + | - libcurl-thread (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | libcurl - client-side URL transfers |
| + | |
| + | # DESCRIPTION |
| + | |
| This is a short overview on how to use libcurl in your C programs. There are | |
| specific man pages for each function mentioned in here. See | |
| - | \fIlibcurl-easy(3)\fP, \fIlibcurl-multi(3)\fP, \fIlibcurl-share(3)\fP, |
| - | \fIlibcurl-url(3)\fP, \fIlibcurl-ws(3)\fP and \fIlibcurl-tutorial(3)\fP for |
| + | libcurl-easy(3), libcurl-multi(3), libcurl-share(3), |
| + | libcurl-url(3), libcurl-ws(3) and libcurl-tutorial(3) for |
| in-depth understanding on how to program with libcurl. | |
| There are many bindings available that bring libcurl access to your favorite | |
| language. Look elsewhere for documentation on those. | |
| - | .SH TRANSFERS |
| - | To transfer files, you create an "easy handle" using \fIcurl_easy_init(3)\fP |
| + | |
| + | # TRANSFERS |
| + | |
| + | To transfer files, you create an "easy handle" using curl_easy_init(3) |
| for a single individual transfer (in either direction). You then set your | |
| - | desired set of options in that handle with \fIcurl_easy_setopt(3)\fP. Options |
| - | you set with \fIcurl_easy_setopt(3)\fP stick. They are then used for every |
| + | desired set of options in that handle with curl_easy_setopt(3). Options |
| + | you set with curl_easy_setopt(3) stick. They are then used for every |
| repeated use of this handle until you either change the option, or you reset | |
| - | them all with \fIcurl_easy_reset(3)\fP. |
| + | them all with curl_easy_reset(3). |
| To actually transfer data you have the option of using the "easy" interface, | |
| or the "multi" interface. | |
| The easy interface is a synchronous interface with which you call | |
| - | \fIcurl_easy_perform(3)\fP and let it perform the transfer. When it is |
| + | curl_easy_perform(3) and let it perform the transfer. When it is |
| completed, the function returns and you can continue. More details are found in | |
| - | the \fIlibcurl-easy(3)\fP man page. |
| + | the libcurl-easy(3) man page. |
| The multi interface on the other hand is an asynchronous interface, that you | |
| call and that performs only a little piece of the transfer on each invoke. It | |
| is perfect if you want to do things while the transfer is in progress, or | |
| similar. The multi interface allows you to select() on libcurl action, and | |
| even to easily download multiple files simultaneously using a single | |
| - | thread. See further details in the \fIlibcurl-multi(3)\fP man page. |
| + | thread. See further details in the libcurl-multi(3) man page. |
| + | |
| + | # SUPPORT INTERFACES |
| - | .SH "SUPPORT INTERFACES" |
| There is also a series of other helpful functions and interface families to | |
| use, including these: | |
| - | .RS |
| - | .IP curl_version_info() |
| + | |
| + | ## curl_version_info() |
| + | |
| gets detailed libcurl (and other used libraries) version info. See | |
| - | \fIcurl_version_info(3)\fP |
| - | .IP curl_getdate() |
| - | converts a date string to time_t. See \fIcurl_getdate(3)\fP |
| - | .IP curl_easy_getinfo() |
| - | get information about a performed transfer. See \fIcurl_easy_getinfo(3)\fP |
| - | .IP curl_mime_addpart() |
| - | helps building an HTTP form POST. See \fIcurl_mime_addpart(3)\fP |
| - | .IP curl_slist_append() |
| - | builds a linked list. See \fIcurl_slist_append(3)\fP |
| - | .IP "Sharing data between transfers" |
| + | curl_version_info(3) |
| + | |
| + | ## curl_getdate() |
| + | |
| + | converts a date string to time_t. See curl_getdate(3) |
| + | |
| + | ## curl_easy_getinfo() |
| + | |
| + | get information about a performed transfer. See curl_easy_getinfo(3) |
| + | |
| + | ## curl_mime_addpart() |
| + | |
| + | helps building an HTTP form POST. See curl_mime_addpart(3) |
| + | |
| + | ## curl_slist_append() |
| + | |
| + | builds a linked list. See curl_slist_append(3) |
| + | |
| + | ## Sharing data between transfers |
| + | |
| You can have multiple easy handles share certain data, even if they are used | |
| in different threads. This magic is setup using the share interface, as | |
| - | described in the \fIlibcurl-share(3)\fP man page. |
| - | .IP "URL Parsing" |
| - | URL parsing and manipulations. See \fIlibcurl-url(3)\fP |
| - | .IP "WebSocket communication" |
| - | See \fIlibcurl-ws(3)\fP |
| - | .RE |
| - | |
| - | .SH "LINKING WITH LIBCURL" |
| + | described in the libcurl-share(3) man page. |
| + | |
| + | ## URL Parsing |
| + | |
| + | URL parsing and manipulations. See libcurl-url(3) |
| + | |
| + | ## WebSocket communication |
| + | |
| + | See libcurl-ws(3) |
| + | |
| + | # LINKING WITH LIBCURL |
| + | |
| On unix-like machines, there is a tool named curl-config that gets installed | |
| with the rest of the curl stuff when 'make install' is performed. | |
| @@ -90,7 +100,7 @@ and developers to learn about libcurl and how to use it. | |
| Run 'curl-config --libs' to get the (additional) linker options you need to | |
| link with the particular version of libcurl you have installed. See the | |
| - | \fIcurl-config(1)\fP man page for further details. |
| + | *curl-config(1)* man page for further details. |
| Unix-like operating system that ship libcurl as part of their distributions | |
| often do not provide the curl-config tool, but simply install the library and | |
| @@ -98,42 +108,51 @@ headers in the common path for this purpose. | |
| Many Linux and similar systems use pkg-config to provide build and link | |
| options about libraries and libcurl supports that as well. | |
| - | .SH "LIBCURL SYMBOL NAMES" |
| + | |
| + | # LIBCURL SYMBOL NAMES |
| + | |
| All public functions in the libcurl interface are prefixed with 'curl_' (with | |
| a lowercase c). You can find other functions in the library source code, but | |
| other prefixes indicate that the functions are private and may change without | |
| further notice in the next release. | |
| Only use documented functions and functionality! | |
| - | .SH "PORTABILITY" |
| + | |
| + | # PORTABILITY |
| + | |
| libcurl works | |
| - | .B exactly |
| + | **exactly** |
| the same, on any of the platforms it compiles and builds on. | |
| - | .SH "THREADS" |
| + | |
| + | # THREADS |
| + | |
| libcurl is thread safe but there are a few exceptions. Refer to | |
| - | \fIlibcurl-thread(3)\fP for more information. |
| + | libcurl-thread(3) for more information. |
| + | |
| + | # PERSISTENT CONNECTIONS |
| - | .SH "PERSISTENT CONNECTIONS" |
| Persistent connections means that libcurl can reuse the same connection for | |
| several transfers, if the conditions are right. | |
| libcurl always attempts to use persistent connections. Whenever you use | |
| - | \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP etc, libcurl |
| + | curl_easy_perform(3) or curl_multi_perform(3) etc, libcurl |
| attempts to use an existing connection to do the transfer, and if none exists | |
| it opens a new one that is subject for reuse on a possible following call to | |
| - | \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP. |
| + | curl_easy_perform(3) or curl_multi_perform(3). |
| To allow libcurl to take full advantage of persistent connections, you should | |
| do as many of your file transfers as possible using the same handle. | |
| - | If you use the easy interface, and you call \fIcurl_easy_cleanup(3)\fP, all |
| + | If you use the easy interface, and you call curl_easy_cleanup(3), all |
| the possibly open connections held by libcurl are closed and forgotten. | |
| When you have created a multi handle and are using the multi interface, the | |
| connection pool is instead kept in the multi handle so closing and creating | |
| new easy handles to do transfers do not affect them. Instead all added easy | |
| handles can take advantage of the single shared pool. | |
| - | .SH "GLOBAL CONSTANTS" |
| + | |
| + | # GLOBAL CONSTANTS |
| + | |
| There are a variety of constants that libcurl uses, mainly through its | |
| internal use of other libraries, which are too complicated for the | |
| library loader to set up. Therefore, a program must call a library | |
| @@ -142,19 +161,19 @@ the library code. For example, when libcurl is built for SSL | |
| capability via the GNU TLS library, there is an elaborate tree inside | |
| that library that describes the SSL protocol. | |
| - | \fIcurl_global_init(3)\fP is the function that you must call. This may |
| + | curl_global_init(3) is the function that you must call. This may |
| allocate resources (e.g. the memory for the GNU TLS tree mentioned above), so | |
| - | the companion function \fIcurl_global_cleanup(3)\fP releases them. |
| + | the companion function curl_global_cleanup(3) releases them. |
| If libcurl was compiled with support for multiple SSL backends, the function | |
| - | \fIcurl_global_sslset(3)\fP can be called before \fIcurl_global_init(3)\fP |
| + | curl_global_sslset(3) can be called before curl_global_init(3) |
| to select the active SSL backend. | |
| The global constant functions are thread-safe since libcurl 7.84.0 if | |
| - | \fIcurl_version_info(3)\fP has the CURL_VERSION_THREADSAFE feature bit set |
| - | (most platforms). Read \fIlibcurl-thread(3)\fP for thread safety guidelines. |
| + | curl_version_info(3) has the CURL_VERSION_THREADSAFE feature bit set |
| + | (most platforms). Read libcurl-thread(3) for thread safety guidelines. |
| - | If the global constant functions are \fInot thread safe\fP, then you must |
| + | If the global constant functions are *not thread safe*, then you must |
| not call them when any other thread in the program is running. It | |
| is not good enough that no other thread is using libcurl at the time, | |
| because these functions internally call similar functions of other | |
| @@ -162,11 +181,11 @@ libraries, and those functions are similarly thread-unsafe. You cannot | |
| generally know what these libraries are, or whether other threads are | |
| using them. | |
| - | If the global constant functions are \fInot thread safe\fP, then the basic rule |
| + | If the global constant functions are *not thread safe*, then the basic rule |
| for constructing a program that uses libcurl is this: Call | |
| - | \fIcurl_global_init(3)\fP, with a \fICURL_GLOBAL_ALL\fP argument, immediately |
| + | curl_global_init(3), with a *CURL_GLOBAL_ALL* argument, immediately |
| after the program starts, while it is still only one thread and before it uses | |
| - | libcurl at all. Call \fIcurl_global_cleanup(3)\fP immediately before the |
| + | libcurl at all. Call curl_global_cleanup(3) immediately before the |
| program exits, when the program is again only one thread and after its last | |
| use of libcurl. | |
| @@ -184,11 +203,11 @@ know whether they use libcurl or not. And its code does not necessarily | |
| run at the start and end of the whole program. | |
| A module like this must have global constant functions of its own, just like | |
| - | \fIcurl_global_init(3)\fP and \fIcurl_global_cleanup(3)\fP. The module thus |
| + | curl_global_init(3) and curl_global_cleanup(3). The module thus |
| has control at the beginning and end of the program and has a place to call | |
| the libcurl functions. If multiple modules in the program use libcurl, they | |
| all separately call the libcurl functions, and that is OK because only the | |
| - | first \fIcurl_global_init(3)\fP and the last \fIcurl_global_cleanup(3)\fP in a |
| + | first curl_global_init(3) and the last curl_global_cleanup(3) in a |
| program change anything. (libcurl uses a reference count in static memory). | |
| In a C++ module, it is common to deal with the global constant situation by | |
| @@ -197,28 +216,28 @@ the module. A program always has exactly one object of the class, in static | |
| storage. That way, the program automatically calls the constructor of the | |
| object as the program starts up and the destructor as it terminates. As the | |
| author of this libcurl-using module, you can make the constructor call | |
| - | \fIcurl_global_init(3)\fP and the destructor call \fIcurl_global_cleanup(3)\fP |
| + | curl_global_init(3) and the destructor call curl_global_cleanup(3) |
| and satisfy libcurl's requirements without your user having to think about it. | |
| (Caveat: If you are initializing libcurl from a Windows DLL you should not | |
| - | initialize it from \fIDllMain\fP or a static initializer because Windows holds |
| + | initialize it from *DllMain* or a static initializer because Windows holds |
| the loader lock during that time and it could cause a deadlock.) | |
| - | \fIcurl_global_init(3)\fP has an argument that tells what particular parts of |
| + | curl_global_init(3) has an argument that tells what particular parts of |
| the global constant environment to set up. In order to successfully use any | |
| - | value except \fICURL_GLOBAL_ALL\fP (which says to set up the whole thing), you |
| + | value except *CURL_GLOBAL_ALL* (which says to set up the whole thing), you |
| must have specific knowledge of internal workings of libcurl and all other | |
| parts of the program of which it is part. | |
| A special part of the global constant environment is the identity of the | |
| - | memory allocator. \fIcurl_global_init(3)\fP selects the system default memory |
| - | allocator, but you can use \fIcurl_global_init_mem(3)\fP to supply one of your |
| - | own. However, there is no way to use \fIcurl_global_init_mem(3)\fP in a |
| + | memory allocator. curl_global_init(3) selects the system default memory |
| + | allocator, but you can use curl_global_init_mem(3) to supply one of your |
| + | own. However, there is no way to use curl_global_init_mem(3) in a |
| modular program -- all modules in the program that might use libcurl would | |
| have to agree on one allocator. | |
| There is a failsafe in libcurl that makes it usable in simple situations | |
| without you having to worry about the global constant environment at all: | |
| - | \fIcurl_easy_init(3)\fP sets up the environment itself if it has not been done |
| + | curl_easy_init(3) sets up the environment itself if it has not been done |
| yet. The resources it acquires to do so get released by the operating system | |
| automatically when the program exits. | |
| @@ -23,8 +23,6 @@ | |
| # * | |
| # *************************************************************************** | |
| - | my $version="7.41.0"; |
| - | |
| use POSIX qw(strftime); | |
| my @ts; | |
| if (defined($ENV{SOURCE_DATE_EPOCH})) { | |
| @@ -36,33 +34,21 @@ my $date = strftime "%b %e, %Y", @ts; | |
| my $year = strftime "%Y", @ts; | |
| print <<HEADER | |
| - | .\\" ************************************************************************** |
| - | .\\" * _ _ ____ _ |
| - | .\\" * Project ___| | | | _ \\| | |
| - | .\\" * / __| | | | |_) | | |
| - | .\\" * | (__| |_| | _ <| |___ |
| - | .\\" * \\___|\\___/|_| \\_\\_____| |
| - | .\\" * |
| - | .\\" * Copyright (C) Daniel Stenberg, <daniel\@haxx.se>, et al. |
| - | .\\" * |
| - | .\\" * This software is licensed as described in the file COPYING, which |
| - | .\\" * you should have received as part of this distribution. The terms |
| - | .\\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\\" * |
| - | .\\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\\" * copies of the Software, and permit persons to whom the Software is |
| - | .\\" * furnished to do so, under the terms of the COPYING file. |
| - | .\\" * |
| - | .\\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\\" * KIND, either express or implied. |
| - | .\\" * |
| - | .\\" * SPDX-License-Identifier: curl |
| - | .\\" * |
| - | .\\" ************************************************************************** |
| - | .TH libcurl-symbols 3 "$date" "libcurl" "libcurl" |
| - | .SH NAME |
| - | libcurl-symbols \\- libcurl symbol version information |
| - | .SH "libcurl symbols" |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: libcurl-symbols |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - libcurl (3) |
| + | - libcurl-easy (3) |
| + | - libcurl-multi (3) |
| + | - libcurl-security (3) |
| + | - libcurl-thread (3) |
| + | --- |
| + | # libcurl symbols |
| + | |
| This man page details version information for public symbols provided in the | |
| libcurl header files. This lists the first version in which the symbol was | |
| introduced and for some symbols two additional information pieces: | |
| @@ -91,13 +77,13 @@ while(<STDIN>) { | |
| if($rest =~ s/^([0-9.]*) *//) { | |
| $rem = $1; | |
| } | |
| - | print ".IP $symbol\nIntroduced in $intro\n"; |
| + | print "\n## $symbol\nIntroduced in $intro."; |
| if($dep) { | |
| - | print "Deprecated since $dep\n"; |
| + | print " Deprecated since $dep."; |
| } | |
| if($rem) { | |
| - | print "Last used in $rem\n"; |
| + | print " Last used in $rem."; |
| } | |
| + | print "\n"; |
| } | |
| - | |
| } | |
| @@ -1,81 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_ACTIVESOCKET 3 "12 Sep 2015" "libcurl" "libcurl" |
| - | .SH NAME |
| - | CURLINFO_ACTIVESOCKET \- get the active socket |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_ACTIVESOCKET, |
| - | curl_socket_t *socket); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a curl_socket_t to receive the most recently active socket |
| - | used for the transfer connection by this curl session. If the socket is no |
| - | longer valid, \fICURL_SOCKET_BAD\fP is returned. When you are finished working |
| - | with the socket, you must call \fIcurl_easy_cleanup(3)\fP as usual on the easy |
| - | handle and let libcurl close the socket and cleanup other resources associated |
| - | with the handle. This option returns the active socket only after the transfer |
| - | is complete, and is typically used in combination with |
| - | \fICURLOPT_CONNECT_ONLY(3)\fP, which skips the transfer phase. |
| - | |
| - | \fICURLINFO_ACTIVESOCKET(3)\fP was added as a replacement for |
| - | \fICURLINFO_LASTSOCKET(3)\fP since that one is not working on all platforms. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_socket_t sockfd; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Do not do the transfer - only connect to host */ |
| - | curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L); |
| - | res = curl_easy_perform(curl); |
| - | |
| - | /* Extract the socket from the curl handle */ |
| - | res = curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sockfd); |
| - | |
| - | if(res != CURLE_OK) { |
| - | printf("Error: %s\\n", curl_easy_strerror(res)); |
| - | return 1; |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.45.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_LASTSOCKET (3), |
| - | .BR CURLOPT_CONNECT_ONLY (3) |
| @@ -0,0 +1,77 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_ACTIVESOCKET |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_LASTSOCKET (3) |
| + | - CURLOPT_CONNECT_ONLY (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_ACTIVESOCKET - get the active socket |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_ACTIVESOCKET, |
| + | curl_socket_t *socket); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a curl_socket_t to receive the most recently active socket |
| + | used for the transfer connection by this curl session. If the socket is no |
| + | longer valid, *CURL_SOCKET_BAD* is returned. When you are finished working |
| + | with the socket, you must call curl_easy_cleanup(3) as usual on the easy |
| + | handle and let libcurl close the socket and cleanup other resources associated |
| + | with the handle. This option returns the active socket only after the transfer |
| + | is complete, and is typically used in combination with |
| + | CURLOPT_CONNECT_ONLY(3), which skips the transfer phase. |
| + | |
| + | CURLINFO_ACTIVESOCKET(3) was added as a replacement for |
| + | CURLINFO_LASTSOCKET(3) since that one is not working on all platforms. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_socket_t sockfd; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Do not do the transfer - only connect to host */ |
| + | curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L); |
| + | res = curl_easy_perform(curl); |
| + | |
| + | /* Extract the socket from the curl handle */ |
| + | res = curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sockfd); |
| + | |
| + | if(res != CURLE_OK) { |
| + | printf("Error: %s\n", curl_easy_strerror(res)); |
| + | return 1; |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.45.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,75 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_APPCONNECT_TIME 3 "28 Aug 2015" "libcurl" "libcurl" |
| - | .SH NAME |
| - | CURLINFO_APPCONNECT_TIME \- get the time until the SSL/SSH handshake is completed |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME, |
| - | double *timep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a double to receive the time, in seconds, it took from the |
| - | start until the SSL/SSH connect/handshake to the remote host was completed. |
| - | This time is most often close to the \fICURLINFO_PRETRANSFER_TIME(3)\fP time, |
| - | except for cases such as HTTP pipelining where the pretransfer time can be |
| - | delayed due to waits in line for the pipeline and more. |
| - | |
| - | When a redirect is followed, the time from each request is added together. |
| - | |
| - | See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | double connect; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| - | res = curl_easy_perform(curl); |
| - | if(CURLE_OK == res) { |
| - | res = curl_easy_getinfo(curl, CURLINFO_APPCONNECT_TIME, &connect); |
| - | if(CURLE_OK == res) { |
| - | printf("Time: %.1f", connect); |
| - | } |
| - | } |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.19.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_APPCONNECT_TIME_T (3) |
| @@ -0,0 +1,71 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_APPCONNECT_TIME |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_APPCONNECT_TIME_T (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_APPCONNECT_TIME - get the time until the SSL/SSH handshake is completed |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME, |
| + | double *timep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a double to receive the time, in seconds, it took from the |
| + | start until the SSL/SSH connect/handshake to the remote host was completed. |
| + | This time is most often close to the CURLINFO_PRETRANSFER_TIME(3) time, |
| + | except for cases such as HTTP pipelining where the pretransfer time can be |
| + | delayed due to waits in line for the pipeline and more. |
| + | |
| + | When a redirect is followed, the time from each request is added together. |
| + | |
| + | See also the TIMES overview in the curl_easy_getinfo(3) man page. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | double connect; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| + | res = curl_easy_perform(curl); |
| + | if(CURLE_OK == res) { |
| + | res = curl_easy_getinfo(curl, CURLINFO_APPCONNECT_TIME, &connect); |
| + | if(CURLE_OK == res) { |
| + | printf("Time: %.1f", connect); |
| + | } |
| + | } |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.19.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,77 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_APPCONNECT_TIME_T 3 "28 Apr 2018" "libcurl" "libcurl" |
| - | .SH NAME |
| - | CURLINFO_APPCONNECT_TIME_T \- time until the SSL/SSH handshake completed |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME_T, |
| - | curl_off_t *timep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a curl_off_t to receive the time, in microseconds, it took |
| - | from the start until the SSL/SSH connect/handshake to the remote host was |
| - | completed. This time is most often close to the |
| - | \fICURLINFO_PRETRANSFER_TIME_T(3)\fP time, except for cases such as HTTP |
| - | pipelining where the pretransfer time can be delayed due to waits in line for |
| - | the pipeline and more. |
| - | |
| - | When a redirect is followed, the time from each request is added together. |
| - | |
| - | See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_off_t connect; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| - | res = curl_easy_perform(curl); |
| - | if(CURLE_OK == res) { |
| - | res = curl_easy_getinfo(curl, CURLINFO_APPCONNECT_TIME_T, &connect); |
| - | if(CURLE_OK == res) { |
| - | printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", connect / 1000000, |
| - | (long)(connect % 1000000)); |
| - | } |
| - | } |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.61.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_APPCONNECT_TIME (3) |
| @@ -0,0 +1,73 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_APPCONNECT_TIME_T |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_APPCONNECT_TIME (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_APPCONNECT_TIME_T - time until the SSL/SSH handshake completed |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME_T, |
| + | curl_off_t *timep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a curl_off_t to receive the time, in microseconds, it took |
| + | from the start until the SSL/SSH connect/handshake to the remote host was |
| + | completed. This time is most often close to the |
| + | CURLINFO_PRETRANSFER_TIME_T(3) time, except for cases such as HTTP |
| + | pipelining where the pretransfer time can be delayed due to waits in line for |
| + | the pipeline and more. |
| + | |
| + | When a redirect is followed, the time from each request is added together. |
| + | |
| + | See also the TIMES overview in the curl_easy_getinfo(3) man page. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_off_t connect; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| + | res = curl_easy_perform(curl); |
| + | if(CURLE_OK == res) { |
| + | res = curl_easy_getinfo(curl, CURLINFO_APPCONNECT_TIME_T, &connect); |
| + | if(CURLE_OK == res) { |
| + | printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", connect / 1000000, |
| + | (long)(connect % 1000000)); |
| + | } |
| + | } |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.61.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,70 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_CAINFO 3 "20 May 2022" "libcurl" "libcurl" |
| - | .SH NAME |
| - | CURLINFO_CAINFO \- get the default built-in CA certificate path |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CAINFO, char **path); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a char pointer to receive the pointer to a null-terminated |
| - | string holding the default built-in path used for the \fICURLOPT_CAINFO(3)\fP |
| - | option unless set by the user. |
| - | |
| - | Note that in a situation where libcurl has been built to support multiple TLS |
| - | libraries, this option might return a string even if the specific TLS library |
| - | currently set to be used does not support \fICURLOPT_CAINFO(3)\fP. |
| - | |
| - | This is a path identifying a single file containing CA certificates. |
| - | |
| - | The \fBpath\fP pointer is set to NULL if there is no default path. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | char *cainfo = NULL; |
| - | curl_easy_getinfo(curl, CURLINFO_CAINFO, &cainfo); |
| - | if(cainfo) { |
| - | printf("default ca info path: %s\\n", cainfo); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.84.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_CAPATH (3) |
| @@ -0,0 +1,66 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_CAINFO |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_CAPATH (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_CAINFO - get the default built-in CA certificate path |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CAINFO, char **path); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a char pointer to receive the pointer to a null-terminated |
| + | string holding the default built-in path used for the CURLOPT_CAINFO(3) |
| + | option unless set by the user. |
| + | |
| + | Note that in a situation where libcurl has been built to support multiple TLS |
| + | libraries, this option might return a string even if the specific TLS library |
| + | currently set to be used does not support CURLOPT_CAINFO(3). |
| + | |
| + | This is a path identifying a single file containing CA certificates. |
| + | |
| + | The **path** pointer is set to NULL if there is no default path. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | char *cainfo = NULL; |
| + | curl_easy_getinfo(curl, CURLINFO_CAINFO, &cainfo); |
| + | if(cainfo) { |
| + | printf("default ca info path: %s\n", cainfo); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.84.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,70 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_CAPATH 3 "20 May 2022" "libcurl" "libcurl" |
| - | .SH NAME |
| - | CURLINFO_CAPATH \- get the default built-in CA path string |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CAPATH, char **path); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a char pointer to receive the pointer to a null-terminated |
| - | string holding the default built-in path used for the \fICURLOPT_CAPATH(3)\fP |
| - | option unless set by the user. |
| - | |
| - | Note that in a situation where libcurl has been built to support multiple TLS |
| - | libraries, this option might return a string even if the specific TLS library |
| - | currently set to be used does not support \fICURLOPT_CAPATH(3)\fP. |
| - | |
| - | This is a path identifying a directory. |
| - | |
| - | The \fBpath\fP pointer is set to NULL if there is no default path. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | char *capath = NULL; |
| - | curl_easy_getinfo(curl, CURLINFO_CAPATH, &capath); |
| - | if(capath) { |
| - | printf("default ca path: %s\\n", capath); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.84.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_CAINFO (3) |
| @@ -0,0 +1,66 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_CAPATH |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_CAINFO (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_CAPATH - get the default built-in CA path string |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CAPATH, char **path); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a char pointer to receive the pointer to a null-terminated |
| + | string holding the default built-in path used for the CURLOPT_CAPATH(3) |
| + | option unless set by the user. |
| + | |
| + | Note that in a situation where libcurl has been built to support multiple TLS |
| + | libraries, this option might return a string even if the specific TLS library |
| + | currently set to be used does not support CURLOPT_CAPATH(3). |
| + | |
| + | This is a path identifying a directory. |
| + | |
| + | The **path** pointer is set to NULL if there is no default path. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | char *capath = NULL; |
| + | curl_easy_getinfo(curl, CURLINFO_CAPATH, &capath); |
| + | if(capath) { |
| + | printf("default ca path: %s\n", capath); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.84.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,105 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_CERTINFO 3 "12 Sep 2015" "libcurl" "libcurl" |
| - | .SH NAME |
| - | CURLINFO_CERTINFO \- get the TLS certificate chain |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CERTINFO, |
| - | struct curl_certinfo **chainp); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a \fIstruct curl_certinfo *\fP and it is set to point to a |
| - | struct that holds info about the server's certificate chain, assuming you had |
| - | \fICURLOPT_CERTINFO(3)\fP enabled when the request was made. |
| - | |
| - | .nf |
| - | struct curl_certinfo { |
| - | int num_of_certs; |
| - | struct curl_slist **certinfo; |
| - | }; |
| - | .fi |
| - | |
| - | The \fIcertinfo\fP struct member is an array of linked lists of certificate |
| - | information. The \fInum_of_certs\fP struct member is the number of |
| - | certificates which is the number of elements in the array. Each certificate's |
| - | list has items with textual information in the format "name:content" such as |
| - | \&"Subject:Foo", "Issuer:Bar", etc. The items in each list varies depending on |
| - | the SSL backend and the certificate. |
| - | .SH PROTOCOLS |
| - | All TLS-based |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/"); |
| - | |
| - | /* connect to any HTTPS site, trusted or not */ |
| - | curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); |
| - | curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_CERTINFO, 1L); |
| - | |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | int i; |
| - | struct curl_certinfo *ci; |
| - | res = curl_easy_getinfo(curl, CURLINFO_CERTINFO, &ci); |
| - | |
| - | if(!res) { |
| - | printf("%d certs!\\n", ci->num_of_certs); |
| - | |
| - | for(i = 0; i < ci->num_of_certs; i++) { |
| - | struct curl_slist *slist; |
| - | |
| - | for(slist = ci->certinfo[i]; slist; slist = slist->next) |
| - | printf("%s\\n", slist->data); |
| - | } |
| - | } |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | |
| - | See also the \fIcertinfo.c\fP example. |
| - | .SH AVAILABILITY |
| - | This option is only working in libcurl built with OpenSSL, GnuTLS, Schannel or |
| - | Secure Transport. GnuTLS support added in 7.42.0. Schannel support added in |
| - | 7.50.0. Secure Transport support added in 7.79.0. |
| - | |
| - | Added in 7.19.1 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_CAPATH (3) |
| @@ -0,0 +1,101 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_CERTINFO |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_CAPATH (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_CERTINFO - get the TLS certificate chain |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CERTINFO, |
| + | struct curl_certinfo **chainp); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a *struct curl_certinfo ** and it is set to point to a |
| + | struct that holds info about the server's certificate chain, assuming you had |
| + | CURLOPT_CERTINFO(3) enabled when the request was made. |
| + | |
| + | ~~~c |
| + | struct curl_certinfo { |
| + | int num_of_certs; |
| + | struct curl_slist **certinfo; |
| + | }; |
| + | ~~~ |
| + | |
| + | The *certinfo* struct member is an array of linked lists of certificate |
| + | information. The *num_of_certs* struct member is the number of |
| + | certificates which is the number of elements in the array. Each certificate's |
| + | list has items with textual information in the format "name:content" such as |
| + | &"Subject:Foo", "Issuer:Bar", etc. The items in each list varies depending on |
| + | the SSL backend and the certificate. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All TLS-based |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/"); |
| + | |
| + | /* connect to any HTTPS site, trusted or not */ |
| + | curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); |
| + | curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_CERTINFO, 1L); |
| + | |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | int i; |
| + | struct curl_certinfo *ci; |
| + | res = curl_easy_getinfo(curl, CURLINFO_CERTINFO, &ci); |
| + | |
| + | if(!res) { |
| + | printf("%d certs!\n", ci->num_of_certs); |
| + | |
| + | for(i = 0; i < ci->num_of_certs; i++) { |
| + | struct curl_slist *slist; |
| + | |
| + | for(slist = ci->certinfo[i]; slist; slist = slist->next) |
| + | printf("%s\n", slist->data); |
| + | } |
| + | } |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | See also the *certinfo.c* example. |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This option is only working in libcurl built with OpenSSL, GnuTLS, Schannel or |
| + | Secure Transport. GnuTLS support added in 7.42.0. Schannel support added in |
| + | 7.50.0. Secure Transport support added in 7.79.0. |
| + | |
| + | Added in 7.19.1 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,84 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_CONDITION_UNMET 3 "1 Sep 2015" "libcurl" "libcurl" |
| - | .SH NAME |
| - | CURLINFO_CONDITION_UNMET \- get info on unmet time conditional or 304 HTTP response. |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONDITION_UNMET, |
| - | long *unmet); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive the number 1 if the condition provided in |
| - | the previous request did not match (see \fICURLOPT_TIMECONDITION(3)\fP). Alas, |
| - | if this returns a 1 you know that the reason you did not get data in return is |
| - | because it did not fulfill the condition. The long this argument points to |
| - | gets a zero stored if the condition instead was met. This can also return 1 if |
| - | the server responded with a 304 HTTP status code, for example after sending a |
| - | custom "If-Match-*" header. |
| - | .SH PROTOCOLS |
| - | HTTP and some |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* January 1, 2020 is 1577833200 */ |
| - | curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L); |
| - | |
| - | /* If-Modified-Since the above time stamp */ |
| - | curl_easy_setopt(curl, CURLOPT_TIMECONDITION, |
| - | (long)CURL_TIMECOND_IFMODSINCE); |
| - | |
| - | /* Perform the request */ |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | /* check the time condition */ |
| - | long unmet; |
| - | res = curl_easy_getinfo(curl, CURLINFO_CONDITION_UNMET, &unmet); |
| - | if(!res) { |
| - | printf("The time condition was %sfulfilled\\n", unmet?"NOT":""); |
| - | } |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.19.4 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLOPT_TIMECONDITION (3), |
| - | .BR CURLOPT_TIMEVALUE (3) |
| @@ -0,0 +1,80 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_CONDITION_UNMET |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_TIMECONDITION (3) |
| + | - CURLOPT_TIMEVALUE (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_CONDITION_UNMET - get info on unmet time conditional or 304 HTTP response. |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONDITION_UNMET, |
| + | long *unmet); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive the number 1 if the condition provided in |
| + | the previous request did not match (see CURLOPT_TIMECONDITION(3)). Alas, |
| + | if this returns a 1 you know that the reason you did not get data in return is |
| + | because it did not fulfill the condition. The long this argument points to |
| + | gets a zero stored if the condition instead was met. This can also return 1 if |
| + | the server responded with a 304 HTTP status code, for example after sending a |
| + | custom "If-Match-*" header. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP and some |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* January 1, 2020 is 1577833200 */ |
| + | curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L); |
| + | |
| + | /* If-Modified-Since the above time stamp */ |
| + | curl_easy_setopt(curl, CURLOPT_TIMECONDITION, |
| + | (long)CURL_TIMECOND_IFMODSINCE); |
| + | |
| + | /* Perform the request */ |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | /* check the time condition */ |
| + | long unmet; |
| + | res = curl_easy_getinfo(curl, CURLINFO_CONDITION_UNMET, &unmet); |
| + | if(!res) { |
| + | printf("The time condition was %sfulfilled\n", unmet?"NOT":""); |
| + | } |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.19.4 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,71 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_CONNECT_TIME 3 "28 Aug 2015" "libcurl" "libcurl" |
| - | .SH NAME |
| - | CURLINFO_CONNECT_TIME \- get the time until connect |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONNECT_TIME, double *timep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a double to receive the total time in seconds from the start |
| - | until the connection to the remote host (or proxy) was completed. |
| - | |
| - | When a redirect is followed, the time from each request is added together. |
| - | |
| - | See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | double connect; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(CURLE_OK == res) { |
| - | res = curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME, &connect); |
| - | if(CURLE_OK == res) { |
| - | printf("Time: %.1f", connect); |
| - | } |
| - | } |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.4.1 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_CONNECT_TIME_T (3) |
| @@ -0,0 +1,67 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_CONNECT_TIME |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_CONNECT_TIME_T (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_CONNECT_TIME - get the time until connect |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONNECT_TIME, double *timep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a double to receive the total time in seconds from the start |
| + | until the connection to the remote host (or proxy) was completed. |
| + | |
| + | When a redirect is followed, the time from each request is added together. |
| + | |
| + | See also the TIMES overview in the curl_easy_getinfo(3) man page. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | double connect; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(CURLE_OK == res) { |
| + | res = curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME, &connect); |
| + | if(CURLE_OK == res) { |
| + | printf("Time: %.1f", connect); |
| + | } |
| + | } |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.4.1 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,74 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_CONNECT_TIME_T 3 "28 Apr 2018" "libcurl" "libcurl" |
| - | .SH NAME |
| - | CURLINFO_CONNECT_TIME_T \- get the time until connect |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONNECT_TIME_T, |
| - | curl_off_t *timep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a curl_off_t to receive the total time in microseconds from |
| - | the start until the connection to the remote host (or proxy) was completed. |
| - | |
| - | When a redirect is followed, the time from each request is added together. |
| - | |
| - | See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_off_t connect; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(CURLE_OK == res) { |
| - | res = curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME_T, &connect); |
| - | if(CURLE_OK == res) { |
| - | printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", connect / 1000000, |
| - | (long)(connect % 1000000)); |
| - | } |
| - | } |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.61.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_CONNECT_TIME (3), |
| - | .BR CURLOPT_CONNECTTIMEOUT (3) |
| @@ -0,0 +1,70 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_CONNECT_TIME_T |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_CONNECT_TIME (3) |
| + | - CURLOPT_CONNECTTIMEOUT (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_CONNECT_TIME_T - get the time until connect |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONNECT_TIME_T, |
| + | curl_off_t *timep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a curl_off_t to receive the total time in microseconds from |
| + | the start until the connection to the remote host (or proxy) was completed. |
| + | |
| + | When a redirect is followed, the time from each request is added together. |
| + | |
| + | See also the TIMES overview in the curl_easy_getinfo(3) man page. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_off_t connect; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(CURLE_OK == res) { |
| + | res = curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME_T, &connect); |
| + | if(CURLE_OK == res) { |
| + | printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", connect / 1000000, |
| + | (long)(connect % 1000000)); |
| + | } |
| + | } |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.61.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,75 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_CONN_ID 3 "07 June 2023" "libcurl" "libcurl" |
| - | .SH NAME |
| - | CURLINFO_CONN_ID \- get the ID of the last connection used by the handle |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONN_ID, |
| - | curl_off_t *conn_id); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a \fIcurl_off_t\fP to receive the connection identifier last |
| - | used by the handle. Stores -1 if there was no connection used. |
| - | |
| - | The connection id is unique among all connections using the same |
| - | connection cache. This is implicitly the case for all connections in the |
| - | same multi handle. |
| - | |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Perform the request */ |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | curl_off_t conn_id; |
| - | res = curl_easy_getinfo(curl, CURLINFO_CONN_ID, &conn_id); |
| - | if(!res) { |
| - | printf("Connection used: %" CURL_FORMAT_CURL_OFF_T "\\n", conn_id); |
| - | } |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 8.2.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_XFER_ID (3) |
| @@ -0,0 +1,70 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_CONN_ID |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_XFER_ID (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_CONN_ID - get the ID of the last connection used by the handle |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONN_ID, |
| + | curl_off_t *conn_id); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a *curl_off_t* to receive the connection identifier last |
| + | used by the handle. Stores -1 if there was no connection used. |
| + | |
| + | The connection id is unique among all connections using the same |
| + | connection cache. This is implicitly the case for all connections in the |
| + | same multi handle. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Perform the request */ |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | curl_off_t conn_id; |
| + | res = curl_easy_getinfo(curl, CURLINFO_CONN_ID, &conn_id); |
| + | if(!res) { |
| + | printf("Connection used: %" CURL_FORMAT_CURL_OFF_T "\n", conn_id); |
| + | } |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 8.2.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,74 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_CONTENT_LENGTH_DOWNLOAD 3 "1 Sep 2015" "libcurl" "libcurl" |
| - | .SH NAME |
| - | CURLINFO_CONTENT_LENGTH_DOWNLOAD \- get content-length of download |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, |
| - | double *content_length); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a double to receive the content-length of the download. This |
| - | is the value read from the Content-Length: field. Since 7.19.4, this returns |
| - | -1 if the size is not known. |
| - | |
| - | \fICURLINFO_CONTENT_LENGTH_DOWNLOAD_T(3)\fP is a newer replacement that returns a more |
| - | sensible variable type. |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Perform the request */ |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | /* check the size */ |
| - | double cl; |
| - | res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &cl); |
| - | if(!res) { |
| - | printf("Size: %.0f\\n", cl); |
| - | } |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.6.1. Deprecated since 7.55.0. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_CONTENT_LENGTH_UPLOAD (3) |
| @@ -0,0 +1,70 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_CONTENT_LENGTH_DOWNLOAD |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_CONTENT_LENGTH_UPLOAD (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_CONTENT_LENGTH_DOWNLOAD - get content-length of download |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, |
| + | double *content_length); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a double to receive the content-length of the download. This |
| + | is the value read from the Content-Length: field. Since 7.19.4, this returns |
| + | -1 if the size is not known. |
| + | |
| + | CURLINFO_CONTENT_LENGTH_DOWNLOAD_T(3) is a newer replacement that returns a more |
| + | sensible variable type. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Perform the request */ |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | /* check the size */ |
| + | double cl; |
| + | res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &cl); |
| + | if(!res) { |
| + | printf("Size: %.0f\n", cl); |
| + | } |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.6.1. Deprecated since 7.55.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,71 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_CONTENT_LENGTH_DOWNLOAD_T 3 "25 May 2017" "libcurl" "libcurl" |
| - | .SH NAME |
| - | CURLINFO_CONTENT_LENGTH_DOWNLOAD_T \- get content-length of download |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, |
| - | curl_off_t *content_length); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a \fIcurl_off_t\fP to receive the content-length of the |
| - | download. This is the value read from the Content-Length: field. Stores -1 if |
| - | the size is not known. |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Perform the request */ |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | /* check the size */ |
| - | curl_off_t cl; |
| - | res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, &cl); |
| - | if(!res) { |
| - | printf("Download size: %" CURL_FORMAT_CURL_OFF_T "\\n", cl); |
| - | } |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.55.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_CONTENT_LENGTH_UPLOAD_T (3) |
| @@ -0,0 +1,67 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_CONTENT_LENGTH_DOWNLOAD_T |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_CONTENT_LENGTH_UPLOAD_T (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_CONTENT_LENGTH_DOWNLOAD_T - get content-length of download |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, |
| + | curl_off_t *content_length); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a *curl_off_t* to receive the content-length of the |
| + | download. This is the value read from the Content-Length: field. Stores -1 if |
| + | the size is not known. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Perform the request */ |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | /* check the size */ |
| + | curl_off_t cl; |
| + | res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, &cl); |
| + | if(!res) { |
| + | printf("Download size: %" CURL_FORMAT_CURL_OFF_T "\n", cl); |
| + | } |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.55.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,73 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_CONTENT_LENGTH_UPLOAD 3 "1 Sep 2015" "libcurl" "libcurl" |
| - | .SH NAME |
| - | CURLINFO_CONTENT_LENGTH_UPLOAD \- get the specified size of the upload |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD, |
| - | double *content_length); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a double to receive the specified size of the upload. Since |
| - | 7.19.4, this returns -1 if the size is not known. |
| - | |
| - | \fICURLINFO_CONTENT_LENGTH_UPLOAD_T(3)\fP is a newer replacement that returns a |
| - | more sensible variable type. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Perform the upload */ |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | /* check the size */ |
| - | double cl; |
| - | res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_UPLOAD, &cl); |
| - | if(!res) { |
| - | printf("Size: %.0f\\n", cl); |
| - | } |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.6.1. Deprecated since 7.55.0. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_CONTENT_LENGTH_DOWNLOAD_T (3) |
| @@ -0,0 +1,69 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_CONTENT_LENGTH_UPLOAD |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_CONTENT_LENGTH_DOWNLOAD_T (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_CONTENT_LENGTH_UPLOAD - get the specified size of the upload |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD, |
| + | double *content_length); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a double to receive the specified size of the upload. Since |
| + | 7.19.4, this returns -1 if the size is not known. |
| + | |
| + | CURLINFO_CONTENT_LENGTH_UPLOAD_T(3) is a newer replacement that returns a |
| + | more sensible variable type. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Perform the upload */ |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | /* check the size */ |
| + | double cl; |
| + | res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_UPLOAD, &cl); |
| + | if(!res) { |
| + | printf("Size: %.0f\n", cl); |
| + | } |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.6.1. Deprecated since 7.55.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,70 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_CONTENT_LENGTH_UPLOAD_T 3 "25 May 2017" "libcurl" "libcurl" |
| - | .SH NAME |
| - | CURLINFO_CONTENT_LENGTH_UPLOAD_T \- get the specified size of the upload |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD_T, |
| - | curl_off_t *content_length); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a \fIcurl_off_t\fP to receive the specified size of the |
| - | upload. Stores -1 if the size is not known. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Perform the upload */ |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | /* check the size */ |
| - | curl_off_t cl; |
| - | res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_UPLOAD_T, &cl); |
| - | if(!res) { |
| - | printf("Upload size: %" CURL_FORMAT_CURL_OFF_T "\\n", cl); |
| - | } |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.55.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_CONTENT_LENGTH_DOWNLOAD_T (3) |
| @@ -0,0 +1,66 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_CONTENT_LENGTH_UPLOAD_T |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_CONTENT_LENGTH_DOWNLOAD_T (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_CONTENT_LENGTH_UPLOAD_T - get the specified size of the upload |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD_T, |
| + | curl_off_t *content_length); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a *curl_off_t* to receive the specified size of the |
| + | upload. Stores -1 if the size is not known. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Perform the upload */ |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | /* check the size */ |
| + | curl_off_t cl; |
| + | res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_UPLOAD_T, &cl); |
| + | if(!res) { |
| + | printf("Upload size: %" CURL_FORMAT_CURL_OFF_T "\n", cl); |
| + | } |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.55.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,79 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_CONTENT_TYPE 3 "1 Sep 2015" "libcurl" "libcurl" |
| - | .SH NAME |
| - | CURLINFO_CONTENT_TYPE \- get Content-Type |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_TYPE, char **ct); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a char pointer to receive the content-type of the downloaded |
| - | object. This is the value read from the Content-Type: field. If you get NULL, |
| - | it means that the server did not send a valid Content-Type header or that the |
| - | protocol used does not support this. |
| - | |
| - | The \fBct\fP pointer is set to NULL or pointing to private memory. You MUST |
| - | NOT free it - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the |
| - | corresponding CURL handle. |
| - | |
| - | The modern way to get this header from a response is to instead use the |
| - | \fIcurl_easy_header(3)\fP function. |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | /* extract the content-type */ |
| - | char *ct = NULL; |
| - | res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct); |
| - | if(!res && ct) { |
| - | printf("Content-Type: %s\\n", ct); |
| - | } |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.9.4 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_header (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLOPT_HEADERFUNCTION (3) |
| @@ -0,0 +1,75 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_CONTENT_TYPE |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_HEADERFUNCTION (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_header (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_CONTENT_TYPE - get Content-Type |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_TYPE, char **ct); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a char pointer to receive the content-type of the downloaded |
| + | object. This is the value read from the Content-Type: field. If you get NULL, |
| + | it means that the server did not send a valid Content-Type header or that the |
| + | protocol used does not support this. |
| + | |
| + | The **ct** pointer is set to NULL or pointing to private memory. You MUST |
| + | NOT free it - it gets freed when you call curl_easy_cleanup(3) on the |
| + | corresponding CURL handle. |
| + | |
| + | The modern way to get this header from a response is to instead use the |
| + | curl_easy_header(3) function. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | /* extract the content-type */ |
| + | char *ct = NULL; |
| + | res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct); |
| + | if(!res && ct) { |
| + | printf("Content-Type: %s\n", ct); |
| + | } |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.9.4 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,86 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_COOKIELIST 3 "1 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_COOKIELIST \- get all known cookies |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_COOKIELIST, |
| - | struct curl_slist **cookies); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a 'struct curl_slist *' to receive a linked-list of all |
| - | cookies curl knows (expired ones, too). do not forget to call |
| - | \fIcurl_slist_free_all(3)\fP on the list after it has been used. If there are |
| - | no cookies (cookies for the handle have not been enabled or simply none have |
| - | been received) the 'struct curl_slist *' is made a NULL pointer. |
| - | |
| - | Since 7.43.0 cookies that were imported in the Set-Cookie format without a |
| - | domain name are not exported by this option. |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* enable the cookie engine */ |
| - | curl_easy_setopt(curl, CURLOPT_COOKIEFILE, ""); |
| - | |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | /* extract all known cookies */ |
| - | struct curl_slist *cookies = NULL; |
| - | res = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies); |
| - | if(!res && cookies) { |
| - | /* a linked list of cookies in cookie file format */ |
| - | struct curl_slist *each = cookies; |
| - | while(each) { |
| - | printf("%s\\n", each->data); |
| - | each = each->next; |
| - | } |
| - | /* we must free these cookies when we are done */ |
| - | curl_slist_free_all(cookies); |
| - | } |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.14.1 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLOPT_COOKIELIST (3) |
| @@ -0,0 +1,82 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_COOKIELIST |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_COOKIELIST (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_COOKIELIST - get all known cookies |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_COOKIELIST, |
| + | struct curl_slist **cookies); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a 'struct curl_slist *' to receive a linked-list of all |
| + | cookies curl knows (expired ones, too). Do not forget to call |
| + | curl_slist_free_all(3) on the list after it has been used. If there are no |
| + | cookies (cookies for the handle have not been enabled or simply none have been |
| + | received) the 'struct curl_slist *' is made a NULL pointer. |
| + | |
| + | Since 7.43.0 cookies that were imported in the Set-Cookie format without a |
| + | domain name are not exported by this option. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* enable the cookie engine */ |
| + | curl_easy_setopt(curl, CURLOPT_COOKIEFILE, ""); |
| + | |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | /* extract all known cookies */ |
| + | struct curl_slist *cookies = NULL; |
| + | res = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies); |
| + | if(!res && cookies) { |
| + | /* a linked list of cookies in cookie file format */ |
| + | struct curl_slist *each = cookies; |
| + | while(each) { |
| + | printf("%s\n", each->data); |
| + | each = each->next; |
| + | } |
| + | /* we must free these cookies when we are done */ |
| + | curl_slist_free_all(cookies); |
| + | } |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.14.1 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,76 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_EFFECTIVE_METHOD 3 "28 Aug 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_EFFECTIVE_METHOD \- get the last used HTTP method |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_EFFECTIVE_METHOD, |
| - | char **methodp); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass in a pointer to a char pointer and get the last used effective HTTP |
| - | method. |
| - | |
| - | In cases when you have asked libcurl to follow redirects, the method may not be |
| - | the same method the first request would use. |
| - | |
| - | The \fBmethodp\fP pointer is NULL or points to private memory. You MUST NOT |
| - | free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the |
| - | corresponding CURL handle. |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "data"); |
| - | curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | char *method = NULL; |
| - | curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_METHOD, &method); |
| - | if(method) |
| - | printf("Redirected to method: %s\\n", method); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.72.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLOPT_CUSTOMREQUEST (3), |
| - | .BR CURLOPT_FOLLOWLOCATION (3) |
| @@ -0,0 +1,72 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_EFFECTIVE_METHOD |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CUSTOMREQUEST (3) |
| + | - CURLOPT_FOLLOWLOCATION (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_EFFECTIVE_METHOD - get the last used HTTP method |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_EFFECTIVE_METHOD, |
| + | char **methodp); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass in a pointer to a char pointer and get the last used effective HTTP |
| + | method. |
| + | |
| + | In cases when you have asked libcurl to follow redirects, the method may not be |
| + | the same method the first request would use. |
| + | |
| + | The **methodp** pointer is NULL or points to private memory. You MUST NOT |
| + | free - it gets freed when you call curl_easy_cleanup(3) on the |
| + | corresponding CURL handle. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "data"); |
| + | curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | char *method = NULL; |
| + | curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_METHOD, &method); |
| + | if(method) |
| + | printf("Redirected to method: %s\n", method); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.72.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,72 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_EFFECTIVE_URL 3 "28 Aug 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_EFFECTIVE_URL \- get the last used URL |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_EFFECTIVE_URL, char **urlp); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass in a pointer to a char pointer and get the last used effective URL. |
| - | |
| - | In cases when you have asked libcurl to follow redirects, it may not be the same |
| - | value you set with \fICURLOPT_URL(3)\fP. |
| - | |
| - | The \fBurlp\fP pointer is NULL or points to private memory. You MUST NOT free |
| - | - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the corresponding |
| - | CURL handle. |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | char *url = NULL; |
| - | curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &url); |
| - | if(url) |
| - | printf("Redirect to: %s\\n", url); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.4 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLOPT_FOLLOWLOCATION (3) |
| @@ -0,0 +1,68 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_EFFECTIVE_URL |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_FOLLOWLOCATION (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_EFFECTIVE_URL - get the last used URL |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_EFFECTIVE_URL, char **urlp); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass in a pointer to a char pointer and get the last used effective URL. |
| + | |
| + | In cases when you have asked libcurl to follow redirects, it may not be the same |
| + | value you set with CURLOPT_URL(3). |
| + | |
| + | The **urlp** pointer is NULL or points to private memory. You MUST NOT free |
| + | - it gets freed when you call curl_easy_cleanup(3) on the corresponding |
| + | CURL handle. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | char *url = NULL; |
| + | curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &url); |
| + | if(url) |
| + | printf("Redirect to: %s\n", url); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.4 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,80 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_FILETIME 3 "28 Aug 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_FILETIME \- get the remote time of the retrieved document |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME, long *timep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive the remote time of the retrieved document |
| - | in number of seconds since January 1 1970 in the GMT/UTC time zone. If you get |
| - | -1, it can be because of many reasons (it might be unknown, the server might |
| - | hide it or the server does not support the command that tells document time |
| - | etc) and the time of the document is unknown. |
| - | |
| - | You must tell libcurl to collect this information before the transfer is made, |
| - | by using the \fICURLOPT_FILETIME(3)\fP option to \fIcurl_easy_setopt(3)\fP or |
| - | you this unconditionally gets a -1 back. |
| - | |
| - | Consider using \fICURLINFO_FILETIME_T(3)\fP to be able to extract dates beyond |
| - | the year 2038 on systems using 32 bit longs (Windows). |
| - | .SH PROTOCOLS |
| - | HTTP(S), FTP(S), SFTP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | /* Ask for filetime */ |
| - | curl_easy_setopt(curl, CURLOPT_FILETIME, 1L); |
| - | res = curl_easy_perform(curl); |
| - | if(CURLE_OK == res) { |
| - | long filetime = 0; |
| - | res = curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime); |
| - | if((CURLE_OK == res) && (filetime >= 0)) { |
| - | time_t file_time = (time_t)filetime; |
| - | printf("filetime: %s", ctime(&file_time)); |
| - | } |
| - | } |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.5 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLOPT_FILETIME (3) |
| @@ -0,0 +1,76 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_FILETIME |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_FILETIME (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_FILETIME - get the remote time of the retrieved document |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME, long *timep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive the remote time of the retrieved document |
| + | in number of seconds since January 1 1970 in the GMT/UTC time zone. If you get |
| + | -1, it can be because of many reasons (it might be unknown, the server might |
| + | hide it or the server does not support the command that tells document time |
| + | etc) and the time of the document is unknown. |
| + | |
| + | You must tell libcurl to collect this information before the transfer is made, |
| + | by using the CURLOPT_FILETIME(3) option to curl_easy_setopt(3) or |
| + | you this unconditionally gets a -1 back. |
| + | |
| + | Consider using CURLINFO_FILETIME_T(3) to be able to extract dates beyond |
| + | the year 2038 on systems using 32 bit longs (Windows). |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S), FTP(S), SFTP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | /* Ask for filetime */ |
| + | curl_easy_setopt(curl, CURLOPT_FILETIME, 1L); |
| + | res = curl_easy_perform(curl); |
| + | if(CURLE_OK == res) { |
| + | long filetime = 0; |
| + | res = curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime); |
| + | if((CURLE_OK == res) && (filetime >= 0)) { |
| + | time_t file_time = (time_t)filetime; |
| + | printf("filetime: %s", ctime(&file_time)); |
| + | } |
| + | } |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.5 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,82 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_FILETIME 3 "25 Jan 2018" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_FILETIME_T \- get the remote time of the retrieved document |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME_T, |
| - | curl_off_t *timep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a curl_off_t to receive the remote time of the retrieved |
| - | document in number of seconds since January 1 1970 in the GMT/UTC time |
| - | zone. If you get -1, it can be because of many reasons (it might be unknown, |
| - | the server might hide it or the server does not support the command that tells |
| - | document time etc) and the time of the document is unknown. |
| - | |
| - | You must ask libcurl to collect this information before the transfer is made, |
| - | by using the \fICURLOPT_FILETIME(3)\fP option to \fIcurl_easy_setopt(3)\fP or |
| - | you unconditionally get a -1 back. |
| - | |
| - | This option is an alternative to \fICURLINFO_FILETIME(3)\fP to allow systems |
| - | with 32 bit long variables to extract dates outside of the 32bit timestamp |
| - | range. |
| - | .SH PROTOCOLS |
| - | HTTP(S), FTP(S), SFTP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| - | /* Ask for filetime */ |
| - | curl_easy_setopt(curl, CURLOPT_FILETIME, 1L); |
| - | res = curl_easy_perform(curl); |
| - | if(CURLE_OK == res) { |
| - | curl_off_t filetime; |
| - | res = curl_easy_getinfo(curl, CURLINFO_FILETIME_T, &filetime); |
| - | if((CURLE_OK == res) && (filetime >= 0)) { |
| - | time_t file_time = (time_t)filetime; |
| - | printf("filetime: %s", ctime(&file_time)); |
| - | } |
| - | } |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.59.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLOPT_FILETIME (3) |
| @@ -0,0 +1,78 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_FILETIME |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_FILETIME (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_FILETIME_T - get the remote time of the retrieved document |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME_T, |
| + | curl_off_t *timep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a curl_off_t to receive the remote time of the retrieved |
| + | document in number of seconds since January 1 1970 in the GMT/UTC time |
| + | zone. If you get -1, it can be because of many reasons (it might be unknown, |
| + | the server might hide it or the server does not support the command that tells |
| + | document time etc) and the time of the document is unknown. |
| + | |
| + | You must ask libcurl to collect this information before the transfer is made, |
| + | by using the CURLOPT_FILETIME(3) option to curl_easy_setopt(3) or |
| + | you unconditionally get a -1 back. |
| + | |
| + | This option is an alternative to CURLINFO_FILETIME(3) to allow systems |
| + | with 32 bit long variables to extract dates outside of the 32bit timestamp |
| + | range. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S), FTP(S), SFTP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| + | /* Ask for filetime */ |
| + | curl_easy_setopt(curl, CURLOPT_FILETIME, 1L); |
| + | res = curl_easy_perform(curl); |
| + | if(CURLE_OK == res) { |
| + | curl_off_t filetime; |
| + | res = curl_easy_getinfo(curl, CURLINFO_FILETIME_T, &filetime); |
| + | if((CURLE_OK == res) && (filetime >= 0)) { |
| + | time_t file_time = (time_t)filetime; |
| + | printf("filetime: %s", ctime(&file_time)); |
| + | } |
| + | } |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.59.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,74 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_FTP_ENTRY_PATH 3 "12 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_FTP_ENTRY_PATH \- get entry path in FTP server |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FTP_ENTRY_PATH, char **path); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a char pointer to receive a pointer to a string holding the |
| - | path of the entry path. That is the initial path libcurl ended up in when |
| - | logging on to the remote FTP server. This stores a NULL as pointer if |
| - | something is wrong. |
| - | |
| - | The \fBpath\fP pointer is NULL or points to private memory. You MUST NOT free |
| - | - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the corresponding |
| - | CURL handle. |
| - | .SH PROTOCOLS |
| - | FTP(S) and SFTP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com"); |
| - | |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | /* extract the entry path */ |
| - | char *ep = NULL; |
| - | res = curl_easy_getinfo(curl, CURLINFO_FTP_ENTRY_PATH, &ep); |
| - | if(!res && ep) { |
| - | printf("Entry path was: %s\\n", ep); |
| - | } |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.15.4. Works for SFTP since 7.21.4 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3) |
| @@ -0,0 +1,70 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_FTP_ENTRY_PATH |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_FTP_ENTRY_PATH - get entry path in FTP server |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FTP_ENTRY_PATH, char **path); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a char pointer to receive a pointer to a string holding the |
| + | path of the entry path. That is the initial path libcurl ended up in when |
| + | logging on to the remote FTP server. This stores a NULL as pointer if |
| + | something is wrong. |
| + | |
| + | The **path** pointer is NULL or points to private memory. You MUST NOT free |
| + | - it gets freed when you call curl_easy_cleanup(3) on the corresponding |
| + | CURL handle. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | FTP(S) and SFTP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com"); |
| + | |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | /* extract the entry path */ |
| + | char *ep = NULL; |
| + | res = curl_easy_getinfo(curl, CURLINFO_FTP_ENTRY_PATH, &ep); |
| + | if(!res && ep) { |
| + | printf("Entry path was: %s\n", ep); |
| + | } |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.15.4. Works for SFTP since 7.21.4 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,69 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_HEADER_SIZE 3 "1 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_HEADER_SIZE \- get size of retrieved headers |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HEADER_SIZE, long *sizep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive the total size of all the headers |
| - | received. Measured in number of bytes. |
| - | |
| - | The total includes the size of any received headers suppressed by |
| - | \fICURLOPT_SUPPRESS_CONNECT_HEADERS(3)\fP. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | long size; |
| - | res = curl_easy_getinfo(curl, CURLINFO_HEADER_SIZE, &size); |
| - | if(!res) |
| - | printf("Header size: %ld bytes\\n", size); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.4.1 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_REQUEST_SIZE (3), |
| - | .BR CURLINFO_SIZE_DOWNLOAD (3) |
| @@ -0,0 +1,65 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_HEADER_SIZE |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_REQUEST_SIZE (3) |
| + | - CURLINFO_SIZE_DOWNLOAD (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_HEADER_SIZE - get size of retrieved headers |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HEADER_SIZE, long *sizep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive the total size of all the headers |
| + | received. Measured in number of bytes. |
| + | |
| + | The total includes the size of any received headers suppressed by |
| + | CURLOPT_SUPPRESS_CONNECT_HEADERS(3). |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | long size; |
| + | res = curl_easy_getinfo(curl, CURLINFO_HEADER_SIZE, &size); |
| + | if(!res) |
| + | printf("Header size: %ld bytes\n", size); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.4.1 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,81 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_HTTPAUTH_AVAIL 3 "12 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_HTTPAUTH_AVAIL \- get available HTTP authentication methods |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTPAUTH_AVAIL, long *authp); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive a bitmask indicating the authentication |
| - | method(s) available according to the previous response. The meaning of the |
| - | bits is explained in the \fICURLOPT_HTTPAUTH(3)\fP option for |
| - | \fIcurl_easy_setopt(3)\fP. |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | /* extract the available authentication types */ |
| - | long auth; |
| - | res = curl_easy_getinfo(curl, CURLINFO_HTTPAUTH_AVAIL, &auth); |
| - | if(!res) { |
| - | if(!auth) |
| - | printf("No auth available, perhaps no 401?\\n"); |
| - | else { |
| - | printf("%s%s%s%s\\n", |
| - | auth & CURLAUTH_BASIC ? "Basic ":"", |
| - | auth & CURLAUTH_DIGEST ? "Digest ":"", |
| - | auth & CURLAUTH_NEGOTIATE ? "Negotiate ":"", |
| - | auth % CURLAUTH_NTLM ? "NTLM ":""); |
| - | } |
| - | } |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added RFC 2617 in 7.10.8 |
| - | Added RFC 7616 in 7.57.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_PROXYAUTH_AVAIL (3), |
| - | .BR CURLOPT_HTTPAUTH (3) |
| @@ -0,0 +1,77 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_HTTPAUTH_AVAIL |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_PROXYAUTH_AVAIL (3) |
| + | - CURLOPT_HTTPAUTH (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_HTTPAUTH_AVAIL - get available HTTP authentication methods |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTPAUTH_AVAIL, long *authp); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive a bitmask indicating the authentication |
| + | method(s) available according to the previous response. The meaning of the |
| + | bits is explained in the CURLOPT_HTTPAUTH(3) option for |
| + | curl_easy_setopt(3). |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | /* extract the available authentication types */ |
| + | long auth; |
| + | res = curl_easy_getinfo(curl, CURLINFO_HTTPAUTH_AVAIL, &auth); |
| + | if(!res) { |
| + | if(!auth) |
| + | printf("No auth available, perhaps no 401?\n"); |
| + | else { |
| + | printf("%s%s%s%s\n", |
| + | auth & CURLAUTH_BASIC ? "Basic ":"", |
| + | auth & CURLAUTH_DIGEST ? "Digest ":"", |
| + | auth & CURLAUTH_NEGOTIATE ? "Negotiate ":"", |
| + | auth % CURLAUTH_NTLM ? "NTLM ":""); |
| + | } |
| + | } |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added RFC 2617 in 7.10.8 |
| + | Added RFC 7616 in 7.57.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,69 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_HTTP_CONNECTCODE 3 "28 Aug 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_HTTP_CONNECTCODE \- get the CONNECT response code |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_CONNECTCODE, long *p); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive the last received HTTP proxy response code |
| - | to a CONNECT request. The returned value is zero if no such response code was |
| - | available. |
| - | .SH PROTOCOLS |
| - | HTTP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* typically CONNECT is used to do HTTPS over HTTP proxies */ |
| - | curl_easy_setopt(curl, CURLOPT_PROXY, "http://127.0.0.1"); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | long code; |
| - | res = curl_easy_getinfo(curl, CURLINFO_HTTP_CONNECTCODE, &code); |
| - | if(!res && code) |
| - | printf("The CONNECT response code: %03ld\\n", code); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.10.7 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_RESPONSE_CODE (3) |
| @@ -0,0 +1,65 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_HTTP_CONNECTCODE |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_RESPONSE_CODE (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_HTTP_CONNECTCODE - get the CONNECT response code |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_CONNECTCODE, long *p); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive the last received HTTP proxy response code |
| + | to a CONNECT request. The returned value is zero if no such response code was |
| + | available. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* typically CONNECT is used to do HTTPS over HTTP proxies */ |
| + | curl_easy_setopt(curl, CURLOPT_PROXY, "http://127.0.0.1"); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | long code; |
| + | res = curl_easy_getinfo(curl, CURLINFO_HTTP_CONNECTCODE, &code); |
| + | if(!res && code) |
| + | printf("The CONNECT response code: %03ld\n", code); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.10.7 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,65 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_HTTP_VERSION 3 "11 May 2016" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_HTTP_VERSION \- get the http version used in the connection |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_VERSION, long *p); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive the version used in the last http |
| - | connection done using this handle. The returned value is |
| - | CURL_HTTP_VERSION_1_0, CURL_HTTP_VERSION_1_1, CURL_HTTP_VERSION_2_0, |
| - | CURL_HTTP_VERSION_3 or 0 if the version cannot be determined. |
| - | .SH PROTOCOLS |
| - | HTTP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | long http_version; |
| - | curl_easy_getinfo(curl, CURLINFO_HTTP_VERSION, &http_version); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.50.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_RESPONSE_CODE (3) |
| @@ -0,0 +1,61 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_HTTP_VERSION |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_RESPONSE_CODE (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_HTTP_VERSION - get the http version used in the connection |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_VERSION, long *p); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive the version used in the last http |
| + | connection done using this handle. The returned value is |
| + | CURL_HTTP_VERSION_1_0, CURL_HTTP_VERSION_1_1, CURL_HTTP_VERSION_2_0, |
| + | CURL_HTTP_VERSION_3 or 0 if the version cannot be determined. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | long http_version; |
| + | curl_easy_getinfo(curl, CURLINFO_HTTP_VERSION, &http_version); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.50.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,81 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_LASTSOCKET 3 "12 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_LASTSOCKET \- get the last socket used |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LASTSOCKET, long *socket); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Deprecated since 7.45.0. Use \fICURLINFO_ACTIVESOCKET(3)\fP instead. |
| - | |
| - | Pass a pointer to a long to receive the last socket used by this curl |
| - | session. If the socket is no longer valid, -1 is returned. When you finish |
| - | working with the socket, you must call \fIcurl_easy_cleanup(3)\fP as usual and |
| - | let libcurl close the socket and cleanup other resources associated with the |
| - | handle. This is typically used in combination with |
| - | \fICURLOPT_CONNECT_ONLY(3)\fP. |
| - | |
| - | NOTE: this API is deprecated since it is not working on win64 where the SOCKET |
| - | type is 64 bits large while its 'long' is 32 bits. Use the |
| - | \fICURLINFO_ACTIVESOCKET(3)\fP instead, if possible. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | long sockfd; /* does not work on win64! */ |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Do not do the transfer - only connect to host */ |
| - | curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L); |
| - | res = curl_easy_perform(curl); |
| - | |
| - | /* Extract the socket from the curl handle */ |
| - | res = curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, &sockfd); |
| - | |
| - | if(res != CURLE_OK) { |
| - | printf("Error: %s\\n", curl_easy_strerror(res)); |
| - | return 1; |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.15.2 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_ACTIVESOCKET (3), |
| - | .BR CURLOPT_CONNECT_ONLY (3) |
| @@ -0,0 +1,77 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_LASTSOCKET |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_ACTIVESOCKET (3) |
| + | - CURLOPT_CONNECT_ONLY (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_LASTSOCKET - get the last socket used |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LASTSOCKET, long *socket); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Deprecated since 7.45.0. Use CURLINFO_ACTIVESOCKET(3) instead. |
| + | |
| + | Pass a pointer to a long to receive the last socket used by this curl |
| + | session. If the socket is no longer valid, -1 is returned. When you finish |
| + | working with the socket, you must call curl_easy_cleanup(3) as usual and |
| + | let libcurl close the socket and cleanup other resources associated with the |
| + | handle. This is typically used in combination with |
| + | CURLOPT_CONNECT_ONLY(3). |
| + | |
| + | NOTE: this API is deprecated since it is not working on win64 where the SOCKET |
| + | type is 64 bits large while its 'long' is 32 bits. Use the |
| + | CURLINFO_ACTIVESOCKET(3) instead, if possible. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | long sockfd; /* does not work on win64! */ |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Do not do the transfer - only connect to host */ |
| + | curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L); |
| + | res = curl_easy_perform(curl); |
| + | |
| + | /* Extract the socket from the curl handle */ |
| + | res = curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, &sockfd); |
| + | |
| + | if(res != CURLE_OK) { |
| + | printf("Error: %s\n", curl_easy_strerror(res)); |
| + | return 1; |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.15.2 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,76 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_LOCAL_IP 3 "12 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_LOCAL_IP \- get local IP address of last connection |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_IP, char **ip); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a char pointer to receive the pointer to a null-terminated |
| - | string holding the IP address of the local end of most recent connection done |
| - | with this \fBcurl\fP handle. This string may be IPv6 when that is |
| - | enabled. Note that you get a pointer to a memory area that is reused at next |
| - | request so you need to copy the string if you want to keep the information. |
| - | |
| - | The \fBip\fP pointer is NULL or points to private memory. You MUST NOT free - |
| - | it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the corresponding |
| - | CURL handle. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | char *ip; |
| - | CURLcode res; |
| - | CURL *curl = curl_easy_init(); |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Perform the transfer */ |
| - | res = curl_easy_perform(curl); |
| - | /* Check for errors */ |
| - | if((res == CURLE_OK) && |
| - | !curl_easy_getinfo(curl, CURLINFO_LOCAL_IP, &ip) && ip) { |
| - | printf("Local IP: %s\\n", ip); |
| - | } |
| - | |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.21.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_PRIMARY_IP (3), |
| - | .BR CURLINFO_LOCAL_PORT (3) |
| @@ -0,0 +1,72 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_LOCAL_IP |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_LOCAL_PORT (3) |
| + | - CURLINFO_PRIMARY_IP (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_LOCAL_IP - get local IP address of last connection |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_IP, char **ip); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a char pointer to receive the pointer to a null-terminated |
| + | string holding the IP address of the local end of most recent connection done |
| + | with this **curl** handle. This string may be IPv6 when that is |
| + | enabled. Note that you get a pointer to a memory area that is reused at next |
| + | request so you need to copy the string if you want to keep the information. |
| + | |
| + | The **ip** pointer is NULL or points to private memory. You MUST NOT free - |
| + | it gets freed when you call curl_easy_cleanup(3) on the corresponding |
| + | CURL handle. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | char *ip; |
| + | CURLcode res; |
| + | CURL *curl = curl_easy_init(); |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Perform the transfer */ |
| + | res = curl_easy_perform(curl); |
| + | /* Check for errors */ |
| + | if((res == CURLE_OK) && |
| + | !curl_easy_getinfo(curl, CURLINFO_LOCAL_IP, &ip) && ip) { |
| + | printf("Local IP: %s\n", ip); |
| + | } |
| + | |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.21.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,72 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_LOCAL_PORT 3 "12 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_LOCAL_PORT \- get the latest local port number |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_PORT, long *portp); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive the local port number of the most recent |
| - | connection done with this \fBcurl\fP handle. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl; |
| - | CURLcode res; |
| - | |
| - | curl = curl_easy_init(); |
| - | if(curl) { |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(CURLE_OK == res) { |
| - | long port; |
| - | res = curl_easy_getinfo(curl, CURLINFO_LOCAL_PORT, &port); |
| - | |
| - | if(CURLE_OK == res) { |
| - | printf("We used local port: %ld\\n", port); |
| - | } |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | return 0; |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.21.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_LOCAL_IP (3), |
| - | .BR CURLINFO_PRIMARY_PORT (3) |
| @@ -0,0 +1,68 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_LOCAL_PORT |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_LOCAL_IP (3) |
| + | - CURLINFO_PRIMARY_PORT (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_LOCAL_PORT - get the latest local port number |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_PORT, long *portp); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive the local port number of the most recent |
| + | connection done with this **curl** handle. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl; |
| + | CURLcode res; |
| + | |
| + | curl = curl_easy_init(); |
| + | if(curl) { |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(CURLE_OK == res) { |
| + | long port; |
| + | res = curl_easy_getinfo(curl, CURLINFO_LOCAL_PORT, &port); |
| + | |
| + | if(CURLE_OK == res) { |
| + | printf("We used local port: %ld\n", port); |
| + | } |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | return 0; |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.21.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,72 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_NAMELOOKUP_TIME 3 "28 Aug 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_NAMELOOKUP_TIME \- get the name lookup time |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NAMELOOKUP_TIME, |
| - | double *timep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a double to receive the total time in seconds from the start |
| - | until the name resolving was completed. |
| - | |
| - | When a redirect is followed, the time from each request is added together. |
| - | |
| - | See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | double namelookup; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| - | res = curl_easy_perform(curl); |
| - | if(CURLE_OK == res) { |
| - | res = curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME, &namelookup); |
| - | if(CURLE_OK == res) { |
| - | printf("Time: %.1f", namelookup); |
| - | } |
| - | } |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.4.1 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_NAMELOOKUP_TIME_T (3) |
| @@ -0,0 +1,68 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_NAMELOOKUP_TIME |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_NAMELOOKUP_TIME_T (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_NAMELOOKUP_TIME - get the name lookup time |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NAMELOOKUP_TIME, |
| + | double *timep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a double to receive the total time in seconds from the start |
| + | until the name resolving was completed. |
| + | |
| + | When a redirect is followed, the time from each request is added together. |
| + | |
| + | See also the TIMES overview in the curl_easy_getinfo(3) man page. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | double namelookup; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| + | res = curl_easy_perform(curl); |
| + | if(CURLE_OK == res) { |
| + | res = curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME, &namelookup); |
| + | if(CURLE_OK == res) { |
| + | printf("Time: %.1f", namelookup); |
| + | } |
| + | } |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.4.1 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,73 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_NAMELOOKUP_TIME_T 3 "28 Apr 2018" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_NAMELOOKUP_TIME_T \- get the name lookup time in microseconds |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NAMELOOKUP_TIME_T, |
| - | curl_off_t *timep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a curl_off_t to receive the total time in microseconds |
| - | from the start until the name resolving was completed. |
| - | |
| - | When a redirect is followed, the time from each request is added together. |
| - | |
| - | See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_off_t namelookup; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(CURLE_OK == res) { |
| - | res = curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME_T, &namelookup); |
| - | if(CURLE_OK == res) { |
| - | printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", namelookup / 1000000, |
| - | (long)(namelookup % 1000000)); |
| - | } |
| - | } |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.61.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_NAMELOOKUP_TIME (3) |
| @@ -0,0 +1,69 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_NAMELOOKUP_TIME_T |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_NAMELOOKUP_TIME (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_NAMELOOKUP_TIME_T - get the name lookup time in microseconds |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NAMELOOKUP_TIME_T, |
| + | curl_off_t *timep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a curl_off_t to receive the total time in microseconds |
| + | from the start until the name resolving was completed. |
| + | |
| + | When a redirect is followed, the time from each request is added together. |
| + | |
| + | See also the TIMES overview in the curl_easy_getinfo(3) man page. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_off_t namelookup; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(CURLE_OK == res) { |
| + | res = curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME_T, &namelookup); |
| + | if(CURLE_OK == res) { |
| + | printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", namelookup / 1000000, |
| + | (long)(namelookup % 1000000)); |
| + | } |
| + | } |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.61.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,69 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_NUM_CONNECTS 3 "12 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_NUM_CONNECTS \- get number of created connections |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NUM_CONNECTS, long *nump); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive how many new connections libcurl had to |
| - | create to achieve the previous transfer (only the successful connects are |
| - | counted). Combined with \fICURLINFO_REDIRECT_COUNT(3)\fP you are able to know |
| - | how many times libcurl successfully reused existing connection(s) or not. See |
| - | the connection options of \fIcurl_easy_setopt(3)\fP to see how libcurl tries |
| - | to make persistent connections to save time. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | long connects; |
| - | res = curl_easy_getinfo(curl, CURLINFO_NUM_CONNECTS, &connects); |
| - | if(res) |
| - | printf("It needed %ld connects\\n", connects); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.12.3 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3) |
| @@ -0,0 +1,65 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_NUM_CONNECTS |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_NUM_CONNECTS - get number of created connections |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NUM_CONNECTS, long *nump); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive how many new connections libcurl had to |
| + | create to achieve the previous transfer (only the successful connects are |
| + | counted). Combined with CURLINFO_REDIRECT_COUNT(3) you are able to know how |
| + | many times libcurl successfully reused existing connection(s) or not. See the |
| + | connection options of curl_easy_setopt(3) to see how libcurl tries to make |
| + | persistent connections to save time. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | long connects; |
| + | res = curl_easy_getinfo(curl, CURLINFO_NUM_CONNECTS, &connects); |
| + | if(res) |
| + | printf("It needed %ld connects\n", connects); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.12.3 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,66 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_OS_ERRNO 3 "1 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_OS_ERRNO \- get errno number from last connect failure |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_OS_ERRNO, long *errnop); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive the errno variable from a connect failure. |
| - | Note that the value is only set on failure, it is not reset upon a successful |
| - | operation. The number is OS and system specific. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(res != CURLE_OK) { |
| - | long error; |
| - | res = curl_easy_getinfo(curl, CURLINFO_OS_ERRNO, &error); |
| - | if(res && error) { |
| - | printf("Errno: %ld\\n", error); |
| - | } |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.12.2 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3) |
| @@ -0,0 +1,62 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_OS_ERRNO |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_OS_ERRNO - get errno number from last connect failure |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_OS_ERRNO, long *errnop); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive the errno variable from a connect failure. |
| + | Note that the value is only set on failure, it is not reset upon a successful |
| + | operation. The number is OS and system specific. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(res != CURLE_OK) { |
| + | long error; |
| + | res = curl_easy_getinfo(curl, CURLINFO_OS_ERRNO, &error); |
| + | if(res && error) { |
| + | printf("Errno: %ld\n", error); |
| + | } |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.12.2 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,77 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_PRETRANSFER_TIME 3 "28 Aug 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_PRETRANSFER_TIME \- get the time until the file transfer start |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME, |
| - | double *timep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a double to receive the time, in seconds, it took from the |
| - | start until the file transfer is just about to begin. |
| - | |
| - | This time-stamp includes all pre-transfer commands and negotiations that are |
| - | specific to the particular protocol(s) involved. It includes the sending of |
| - | the protocol-specific instructions that trigger a transfer. |
| - | |
| - | When a redirect is followed, the time from each request is added together. |
| - | |
| - | See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | double pretransfer; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(CURLE_OK == res) { |
| - | res = curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME, &pretransfer); |
| - | if(CURLE_OK == res) { |
| - | printf("Time: %.1f", pretransfer); |
| - | } |
| - | } |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.4.1 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_CONNECT_TIME_T (3), |
| - | .BR CURLINFO_PRETRANSFER_TIME_T (3) |
| @@ -0,0 +1,73 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_PRETRANSFER_TIME |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_CONNECT_TIME_T (3) |
| + | - CURLINFO_PRETRANSFER_TIME_T (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_PRETRANSFER_TIME - get the time until the file transfer start |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME, |
| + | double *timep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a double to receive the time, in seconds, it took from the |
| + | start until the file transfer is just about to begin. |
| + | |
| + | This time-stamp includes all pre-transfer commands and negotiations that are |
| + | specific to the particular protocol(s) involved. It includes the sending of |
| + | the protocol-specific instructions that trigger a transfer. |
| + | |
| + | When a redirect is followed, the time from each request is added together. |
| + | |
| + | See also the TIMES overview in the curl_easy_getinfo(3) man page. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | double pretransfer; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(CURLE_OK == res) { |
| + | res = curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME, &pretransfer); |
| + | if(CURLE_OK == res) { |
| + | printf("Time: %.1f", pretransfer); |
| + | } |
| + | } |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.4.1 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,79 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_PRETRANSFER_TIME_T 3 "28 Apr 2018" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_PRETRANSFER_TIME_T \- get the time until the file transfer start |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME_T, |
| - | curl_off_t *timep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a curl_off_t to receive the time, in microseconds, it took |
| - | from the start until the file transfer is just about to begin. |
| - | |
| - | This time-stamp includes all pre-transfer commands and negotiations that are |
| - | specific to the particular protocol(s) involved. It includes the sending of |
| - | the protocol-specific instructions that trigger a transfer. |
| - | |
| - | When a redirect is followed, the time from each request is added together. |
| - | |
| - | See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_off_t pretransfer; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| - | res = curl_easy_perform(curl); |
| - | if(CURLE_OK == res) { |
| - | res = curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME_T, &pretransfer); |
| - | if(CURLE_OK == res) { |
| - | printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld\\n", |
| - | pretransfer / 1000000, |
| - | (long)(pretransfer % 1000000)); |
| - | } |
| - | } |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.61.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_CONNECT_TIME (3), |
| - | .BR CURLINFO_PRETRANSFER_TIME_T (3) |
| @@ -0,0 +1,75 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_PRETRANSFER_TIME_T |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_CONNECT_TIME (3) |
| + | - CURLINFO_PRETRANSFER_TIME_T (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_PRETRANSFER_TIME_T - get the time until the file transfer start |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME_T, |
| + | curl_off_t *timep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a curl_off_t to receive the time, in microseconds, it took |
| + | from the start until the file transfer is just about to begin. |
| + | |
| + | This time-stamp includes all pre-transfer commands and negotiations that are |
| + | specific to the particular protocol(s) involved. It includes the sending of |
| + | the protocol-specific instructions that trigger a transfer. |
| + | |
| + | When a redirect is followed, the time from each request is added together. |
| + | |
| + | See also the TIMES overview in the curl_easy_getinfo(3) man page. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_off_t pretransfer; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| + | res = curl_easy_perform(curl); |
| + | if(CURLE_OK == res) { |
| + | res = curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME_T, &pretransfer); |
| + | if(CURLE_OK == res) { |
| + | printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld\n", |
| + | pretransfer / 1000000, |
| + | (long)(pretransfer % 1000000)); |
| + | } |
| + | } |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.61.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,77 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_PRIMARY_IP 3 "12 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_PRIMARY_IP \- get IP address of last connection |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_IP, char **ip); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a char pointer to receive the pointer to a null-terminated |
| - | string holding the IP address of the most recent connection done with this |
| - | \fBcurl\fP handle. This string may be IPv6 when that is enabled. Note that you |
| - | get a pointer to a memory area that is reused at next request so you need to |
| - | copy the string if you want to keep the information. |
| - | |
| - | The \fBip\fP pointer is NULL or points to private memory. You MUST NOT free - |
| - | it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the corresponding |
| - | CURL handle. |
| - | .SH PROTOCOLS |
| - | All network based ones |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | char *ip; |
| - | CURLcode res; |
| - | CURL *curl = curl_easy_init(); |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Perform the transfer */ |
| - | res = curl_easy_perform(curl); |
| - | /* Check for errors */ |
| - | if((res == CURLE_OK) && |
| - | !curl_easy_getinfo(curl, CURLINFO_PRIMARY_IP, &ip) && ip) { |
| - | printf("IP: %s\\n", ip); |
| - | } |
| - | |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.19.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_LOCAL_IP (3), |
| - | .BR CURLINFO_LOCAL_PORT (3), |
| - | .BR CURLINFO_PRIMARY_PORT (3) |
| @@ -0,0 +1,73 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_PRIMARY_IP |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_LOCAL_IP (3) |
| + | - CURLINFO_LOCAL_PORT (3) |
| + | - CURLINFO_PRIMARY_PORT (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_PRIMARY_IP - get IP address of last connection |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_IP, char **ip); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a char pointer to receive the pointer to a null-terminated |
| + | string holding the IP address of the most recent connection done with this |
| + | **curl** handle. This string may be IPv6 when that is enabled. Note that you |
| + | get a pointer to a memory area that is reused at next request so you need to |
| + | copy the string if you want to keep the information. |
| + | |
| + | The **ip** pointer is NULL or points to private memory. You MUST NOT free - |
| + | it gets freed when you call curl_easy_cleanup(3) on the corresponding |
| + | CURL handle. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All network based ones |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | char *ip; |
| + | CURLcode res; |
| + | CURL *curl = curl_easy_init(); |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Perform the transfer */ |
| + | res = curl_easy_perform(curl); |
| + | /* Check for errors */ |
| + | if((res == CURLE_OK) && |
| + | !curl_easy_getinfo(curl, CURLINFO_PRIMARY_IP, &ip) && ip) { |
| + | printf("IP: %s\n", ip); |
| + | } |
| + | |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.19.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,71 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_PRIMARY_PORT 3 "12 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_PRIMARY_PORT \- get the latest destination port number |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_PORT, long *portp); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive the destination port of the most recent |
| - | connection done with this \fBcurl\fP handle. |
| - | |
| - | This is the destination port of the actual TCP or UDP connection libcurl used. |
| - | If a proxy was used for the most recent transfer, this is the port number of |
| - | the proxy, if no proxy was used it is the port number of the most recently |
| - | accessed URL. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | long port; |
| - | res = curl_easy_getinfo(curl, CURLINFO_PRIMARY_PORT, &port); |
| - | if(!res) |
| - | printf("Connected to remote port: %ld\\n", port); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.21.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_LOCAL_PORT (3), |
| - | .BR CURLINFO_PRIMARY_IP (3) |
| @@ -0,0 +1,67 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_PRIMARY_PORT |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_LOCAL_PORT (3) |
| + | - CURLINFO_PRIMARY_IP (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_PRIMARY_PORT - get the latest destination port number |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_PORT, long *portp); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive the destination port of the most recent |
| + | connection done with this **curl** handle. |
| + | |
| + | This is the destination port of the actual TCP or UDP connection libcurl used. |
| + | If a proxy was used for the most recent transfer, this is the port number of |
| + | the proxy, if no proxy was used it is the port number of the most recently |
| + | accessed URL. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | long port; |
| + | res = curl_easy_getinfo(curl, CURLINFO_PRIMARY_PORT, &port); |
| + | if(!res) |
| + | printf("Connected to remote port: %ld\n", port); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.21.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,72 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_PRIVATE 3 "1 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_PRIVATE \- get the private pointer |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIVATE, char **private); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a char pointer to receive the pointer to the private data |
| - | associated with the curl handle (set with the \fICURLOPT_PRIVATE(3)\fP). |
| - | Please note that for internal reasons, the value is returned as a char |
| - | pointer, although effectively being a 'void *'. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | void *pointer = (void *)0x2345454; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| - | |
| - | /* set the private pointer */ |
| - | curl_easy_setopt(curl, CURLOPT_PRIVATE, pointer); |
| - | res = curl_easy_perform(curl); |
| - | |
| - | /* extract the private pointer again */ |
| - | res = curl_easy_getinfo(curl, CURLINFO_PRIVATE, &pointer); |
| - | |
| - | if(res) |
| - | printf("error: %s\\n", curl_easy_strerror(res)); |
| - | |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.10.3 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLOPT_PRIVATE (3) |
| @@ -0,0 +1,68 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_PRIVATE |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_PRIVATE (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_PRIVATE - get the private pointer |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIVATE, char **private); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a char pointer to receive the pointer to the private data |
| + | associated with the curl handle (set with the CURLOPT_PRIVATE(3)). |
| + | Please note that for internal reasons, the value is returned as a char |
| + | pointer, although effectively being a 'void *'. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | void *pointer = (void *)0x2345454; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| + | |
| + | /* set the private pointer */ |
| + | curl_easy_setopt(curl, CURLOPT_PRIVATE, pointer); |
| + | res = curl_easy_perform(curl); |
| + | |
| + | /* extract the private pointer again */ |
| + | res = curl_easy_getinfo(curl, CURLINFO_PRIVATE, &pointer); |
| + | |
| + | if(res) |
| + | printf("error: %s\n", curl_easy_strerror(res)); |
| + | |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.10.3 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,76 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_PROTOCOL 3 "23 November 2016" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_PROTOCOL \- get the protocol used in the connection |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROTOCOL, long *p); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This option is deprecated. We strongly recommend using |
| - | \fICURLINFO_SCHEME(3)\fP instead, because this option cannot return all |
| - | possible protocols! |
| - | |
| - | Pass a pointer to a long to receive the version used in the last http |
| - | connection. The returned value is set to one of the CURLPROTO_* values: |
| - | |
| - | .nf |
| - | CURLPROTO_DICT, CURLPROTO_FILE, CURLPROTO_FTP, CURLPROTO_FTPS, |
| - | CURLPROTO_GOPHER, CURLPROTO_HTTP, CURLPROTO_HTTPS, CURLPROTO_IMAP, |
| - | CURLPROTO_IMAPS, CURLPROTO_LDAP, CURLPROTO_LDAPS, CURLPROTO_POP3, |
| - | CURLPROTO_POP3S, CURLPROTO_RTMP, CURLPROTO_RTMPE, CURLPROTO_RTMPS, |
| - | CURLPROTO_RTMPT, CURLPROTO_RTMPTE, CURLPROTO_RTMPTS, CURLPROTO_RTSP, |
| - | CURLPROTO_SCP, CURLPROTO_SFTP, CURLPROTO_SMB, CURLPROTO_SMBS, CURLPROTO_SMTP, |
| - | CURLPROTO_SMTPS, CURLPROTO_TELNET, CURLPROTO_TFTP, CURLPROTO_MQTT |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | long protocol; |
| - | curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.52.0. Deprecated since 7.85.0. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_RESPONSE_CODE (3) |
| @@ -0,0 +1,73 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_PROTOCOL |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_RESPONSE_CODE (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_PROTOCOL - get the protocol used in the connection |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROTOCOL, long *p); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This option is deprecated. We strongly recommend using |
| + | CURLINFO_SCHEME(3) instead, because this option cannot return all |
| + | possible protocols! |
| + | |
| + | Pass a pointer to a long to receive the version used in the last http |
| + | connection. The returned value is set to one of the CURLPROTO_* values: |
| + | |
| + | ~~~c |
| + | CURLPROTO_DICT, CURLPROTO_FILE, CURLPROTO_FTP, CURLPROTO_FTPS, |
| + | CURLPROTO_GOPHER, CURLPROTO_HTTP, CURLPROTO_HTTPS, CURLPROTO_IMAP, |
| + | CURLPROTO_IMAPS, CURLPROTO_LDAP, CURLPROTO_LDAPS, CURLPROTO_POP3, |
| + | CURLPROTO_POP3S, CURLPROTO_RTMP, CURLPROTO_RTMPE, CURLPROTO_RTMPS, |
| + | CURLPROTO_RTMPT, CURLPROTO_RTMPTE, CURLPROTO_RTMPTS, CURLPROTO_RTSP, |
| + | CURLPROTO_SCP, CURLPROTO_SFTP, CURLPROTO_SMB, CURLPROTO_SMBS, CURLPROTO_SMTP, |
| + | CURLPROTO_SMTPS, CURLPROTO_TELNET, CURLPROTO_TFTP, CURLPROTO_MQTT |
| + | ~~~ |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | long protocol; |
| + | curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.52.0. Deprecated since 7.85.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,82 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_PROXYAUTH_AVAIL 3 "12 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_PROXYAUTH_AVAIL \- get available HTTP proxy authentication methods |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXYAUTH_AVAIL, |
| - | long *authp); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive a bitmask indicating the authentication |
| - | method(s) available according to the previous response. The meaning of the |
| - | bits is explained in the \fICURLOPT_PROXYAUTH(3)\fP option for |
| - | \fIcurl_easy_setopt(3)\fP. |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | curl_easy_setopt(curl, CURLOPT_PROXY, "http://127.0.0.1:80"); |
| - | |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | /* extract the available proxy authentication types */ |
| - | long auth; |
| - | res = curl_easy_getinfo(curl, CURLINFO_PROXYAUTH_AVAIL, &auth); |
| - | if(!res) { |
| - | if(!auth) |
| - | printf("No proxy auth available, perhaps no 407?\\n"); |
| - | else { |
| - | printf("%s%s%s%s\\n", |
| - | auth & CURLAUTH_BASIC ? "Basic ":"", |
| - | auth & CURLAUTH_DIGEST ? "Digest ":"", |
| - | auth & CURLAUTH_NEGOTIATE ? "Negotiate ":"", |
| - | auth % CURLAUTH_NTLM ? "NTLM ":""); |
| - | } |
| - | } |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added RFC 2617 in 7.10.8 |
| - | Added RFC 7616 in 7.57.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_HTTPAUTH_AVAIL (3) |
| @@ -0,0 +1,78 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_PROXYAUTH_AVAIL |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_HTTPAUTH_AVAIL (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_PROXYAUTH_AVAIL - get available HTTP proxy authentication methods |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXYAUTH_AVAIL, |
| + | long *authp); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive a bitmask indicating the authentication |
| + | method(s) available according to the previous response. The meaning of the |
| + | bits is explained in the CURLOPT_PROXYAUTH(3) option for |
| + | curl_easy_setopt(3). |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | curl_easy_setopt(curl, CURLOPT_PROXY, "http://127.0.0.1:80"); |
| + | |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | /* extract the available proxy authentication types */ |
| + | long auth; |
| + | res = curl_easy_getinfo(curl, CURLINFO_PROXYAUTH_AVAIL, &auth); |
| + | if(!res) { |
| + | if(!auth) |
| + | printf("No proxy auth available, perhaps no 407?\n"); |
| + | else { |
| + | printf("%s%s%s%s\n", |
| + | auth & CURLAUTH_BASIC ? "Basic ":"", |
| + | auth & CURLAUTH_DIGEST ? "Digest ":"", |
| + | auth & CURLAUTH_NEGOTIATE ? "Negotiate ":"", |
| + | auth % CURLAUTH_NTLM ? "NTLM ":""); |
| + | } |
| + | } |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added RFC 2617 in 7.10.8 |
| + | Added RFC 7616 in 7.57.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,109 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_PROXY_ERROR 3 "3 Aug 2020" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_PROXY_ERROR \- get the detailed (SOCKS) proxy error |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | typedef enum { |
| - | CURLPX_OK, |
| - | CURLPX_BAD_ADDRESS_TYPE, |
| - | CURLPX_BAD_VERSION, |
| - | CURLPX_CLOSED, |
| - | CURLPX_GSSAPI, |
| - | CURLPX_GSSAPI_PERMSG, |
| - | CURLPX_GSSAPI_PROTECTION, |
| - | CURLPX_IDENTD, |
| - | CURLPX_IDENTD_DIFFER, |
| - | CURLPX_LONG_HOSTNAME, |
| - | CURLPX_LONG_PASSWD, |
| - | CURLPX_LONG_USER, |
| - | CURLPX_NO_AUTH, |
| - | CURLPX_RECV_ADDRESS, |
| - | CURLPX_RECV_AUTH, |
| - | CURLPX_RECV_CONNECT, |
| - | CURLPX_RECV_REQACK, |
| - | CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED, |
| - | CURLPX_REPLY_COMMAND_NOT_SUPPORTED, |
| - | CURLPX_REPLY_CONNECTION_REFUSED, |
| - | CURLPX_REPLY_GENERAL_SERVER_FAILURE, |
| - | CURLPX_REPLY_HOST_UNREACHABLE, |
| - | CURLPX_REPLY_NETWORK_UNREACHABLE, |
| - | CURLPX_REPLY_NOT_ALLOWED, |
| - | CURLPX_REPLY_TTL_EXPIRED, |
| - | CURLPX_REPLY_UNASSIGNED, |
| - | CURLPX_REQUEST_FAILED, |
| - | CURLPX_RESOLVE_HOST, |
| - | CURLPX_SEND_AUTH, |
| - | CURLPX_SEND_CONNECT, |
| - | CURLPX_SEND_REQUEST, |
| - | CURLPX_UNKNOWN_FAIL, |
| - | CURLPX_UNKNOWN_MODE, |
| - | CURLPX_USER_REJECTED, |
| - | CURLPX_LAST /* never use */ |
| - | } CURLproxycode; |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXY_ERROR, long *detail); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive a detailed error code when the most recent |
| - | transfer returned a \fBCURLE_PROXY\fP error. That error code matches the |
| - | \fBCURLproxycode\fP set. |
| - | |
| - | The error code is zero (\fBCURLPX_OK\fP) if no response code was available. |
| - | .SH PROTOCOLS |
| - | All that can be done over SOCKS |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_PROXY, "socks5://127.0.0.1"); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_PROXY) { |
| - | long proxycode; |
| - | res = curl_easy_getinfo(curl, CURLINFO_PROXY_ERROR, &proxycode); |
| - | if(!res && proxycode) |
| - | printf("The detailed proxy error: %ld\\n", proxycode); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.73.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_RESPONSE_CODE (3), |
| - | .BR libcurl-errors (3) |
| @@ -0,0 +1,105 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_PROXY_ERROR |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_RESPONSE_CODE (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | - libcurl-errors (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_PROXY_ERROR - get the detailed (SOCKS) proxy error |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | typedef enum { |
| + | CURLPX_OK, |
| + | CURLPX_BAD_ADDRESS_TYPE, |
| + | CURLPX_BAD_VERSION, |
| + | CURLPX_CLOSED, |
| + | CURLPX_GSSAPI, |
| + | CURLPX_GSSAPI_PERMSG, |
| + | CURLPX_GSSAPI_PROTECTION, |
| + | CURLPX_IDENTD, |
| + | CURLPX_IDENTD_DIFFER, |
| + | CURLPX_LONG_HOSTNAME, |
| + | CURLPX_LONG_PASSWD, |
| + | CURLPX_LONG_USER, |
| + | CURLPX_NO_AUTH, |
| + | CURLPX_RECV_ADDRESS, |
| + | CURLPX_RECV_AUTH, |
| + | CURLPX_RECV_CONNECT, |
| + | CURLPX_RECV_REQACK, |
| + | CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED, |
| + | CURLPX_REPLY_COMMAND_NOT_SUPPORTED, |
| + | CURLPX_REPLY_CONNECTION_REFUSED, |
| + | CURLPX_REPLY_GENERAL_SERVER_FAILURE, |
| + | CURLPX_REPLY_HOST_UNREACHABLE, |
| + | CURLPX_REPLY_NETWORK_UNREACHABLE, |
| + | CURLPX_REPLY_NOT_ALLOWED, |
| + | CURLPX_REPLY_TTL_EXPIRED, |
| + | CURLPX_REPLY_UNASSIGNED, |
| + | CURLPX_REQUEST_FAILED, |
| + | CURLPX_RESOLVE_HOST, |
| + | CURLPX_SEND_AUTH, |
| + | CURLPX_SEND_CONNECT, |
| + | CURLPX_SEND_REQUEST, |
| + | CURLPX_UNKNOWN_FAIL, |
| + | CURLPX_UNKNOWN_MODE, |
| + | CURLPX_USER_REJECTED, |
| + | CURLPX_LAST /* never use */ |
| + | } CURLproxycode; |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXY_ERROR, long *detail); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive a detailed error code when the most recent |
| + | transfer returned a **CURLE_PROXY** error. That error code matches the |
| + | **CURLproxycode** set. |
| + | |
| + | The error code is zero (**CURLPX_OK**) if no response code was available. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All that can be done over SOCKS |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_PROXY, "socks5://127.0.0.1"); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_PROXY) { |
| + | long proxycode; |
| + | res = curl_easy_getinfo(curl, CURLINFO_PROXY_ERROR, &proxycode); |
| + | if(!res && proxycode) |
| + | printf("The detailed proxy error: %ld\n", proxycode); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.73.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,68 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_PROXY_SSL_VERIFYRESULT 3 "16 Nov 2016" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_PROXY_SSL_VERIFYRESULT \- get the result of the proxy certificate verification |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXY_SSL_VERIFYRESULT, |
| - | long *result); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive the result of the certificate verification |
| - | that was requested (using the \fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP |
| - | option. This is only used for HTTPS proxies. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | long verifyresult; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy:443"); |
| - | res = curl_easy_perform(curl); |
| - | if(res) |
| - | printf("error: %s\\n", curl_easy_strerror(res)); |
| - | curl_easy_getinfo(curl, CURLINFO_PROXY_SSL_VERIFYRESULT, &verifyresult); |
| - | printf("The peer verification said %s\\n", verifyresult? |
| - | "fine" : "bad"); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.52.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_SSL_VERIFYRESULT (3) |
| @@ -0,0 +1,64 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_PROXY_SSL_VERIFYRESULT |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_SSL_VERIFYRESULT (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_PROXY_SSL_VERIFYRESULT - get the result of the proxy certificate verification |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXY_SSL_VERIFYRESULT, |
| + | long *result); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive the result of the certificate verification |
| + | that was requested (using the CURLOPT_PROXY_SSL_VERIFYPEER(3) |
| + | option. This is only used for HTTPS proxies. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | long verifyresult; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy:443"); |
| + | res = curl_easy_perform(curl); |
| + | if(res) |
| + | printf("error: %s\n", curl_easy_strerror(res)); |
| + | curl_easy_getinfo(curl, CURLINFO_PROXY_SSL_VERIFYRESULT, &verifyresult); |
| + | printf("The peer verification said %s\n", verifyresult? |
| + | "fine" : "bad"); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.52.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,74 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_QUEUE_TIME_T 3 "28 Apr 2018" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_QUEUE_TIME_T \- time this transfer was queued |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_QUEUE_TIME_T, |
| - | curl_off_t *timep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a curl_off_t to receive the time, in microseconds, this |
| - | transfer was held in a waiting queue before it started "for real". A transfer |
| - | might be put in a queue if after getting started, it cannot create a new |
| - | connection etc due to set conditions and limits imposed by the application. |
| - | |
| - | See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_off_t queue; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(CURLE_OK == res) { |
| - | res = curl_easy_getinfo(curl, CURLINFO_QUEUE_TIME_T, &queue); |
| - | if(CURLE_OK == res) { |
| - | printf("Queued: %" CURL_FORMAT_CURL_OFF_T ".%06ld us", queue / 1000000, |
| - | (long)(queue % 1000000)); |
| - | } |
| - | } |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 8.6.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_STARTTRANSFER_TIME_T (3), |
| - | .BR CURLOPT_TIMEOUT (3) |
| @@ -0,0 +1,70 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_QUEUE_TIME_T |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_STARTTRANSFER_TIME_T (3) |
| + | - CURLOPT_TIMEOUT (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_QUEUE_TIME_T - time this transfer was queued |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_QUEUE_TIME_T, |
| + | curl_off_t *timep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a curl_off_t to receive the time, in microseconds, this |
| + | transfer was held in a waiting queue before it started "for real". A transfer |
| + | might be put in a queue if after getting started, it cannot create a new |
| + | connection etc due to set conditions and limits imposed by the application. |
| + | |
| + | See also the TIMES overview in the curl_easy_getinfo(3) man page. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_off_t queue; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(CURLE_OK == res) { |
| + | res = curl_easy_getinfo(curl, CURLINFO_QUEUE_TIME_T, &queue); |
| + | if(CURLE_OK == res) { |
| + | printf("Queued: %" CURL_FORMAT_CURL_OFF_T ".%06ld us", queue / 1000000, |
| + | (long)(queue % 1000000)); |
| + | } |
| + | } |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 8.6.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,66 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_REDIRECT_COUNT 3 "28 Aug 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_REDIRECT_COUNT \- get the number of redirects |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_COUNT, |
| - | long *countp); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive the total number of redirections that were |
| - | actually followed. |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | long redirects; |
| - | curl_easy_getinfo(curl, CURLINFO_REDIRECT_COUNT, &redirects); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.9.7 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_REDIRECT_URL (3), |
| - | .BR CURLOPT_FOLLOWLOCATION (3) |
| @@ -0,0 +1,62 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_REDIRECT_COUNT |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_REDIRECT_URL (3) |
| + | - CURLOPT_FOLLOWLOCATION (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_REDIRECT_COUNT - get the number of redirects |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_COUNT, |
| + | long *countp); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive the total number of redirections that were |
| + | actually followed. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | long redirects; |
| + | curl_easy_getinfo(curl, CURLINFO_REDIRECT_COUNT, &redirects); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.9.7 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,74 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_REDIRECT_TIME 3 "28 Aug 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_REDIRECT_TIME \- get the time for all redirection steps |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME, |
| - | double *timep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a double to receive the total time, in seconds, it took for |
| - | all redirection steps include name lookup, connect, pretransfer and transfer |
| - | before final transaction was started. \fICURLINFO_REDIRECT_TIME(3)\fP contains |
| - | the complete execution time for multiple redirections. |
| - | |
| - | See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | double redirect; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(CURLE_OK == res) { |
| - | res = curl_easy_getinfo(curl, CURLINFO_REDIRECT_TIME, &redirect); |
| - | if(CURLE_OK == res) { |
| - | printf("Time: %.1f", redirect); |
| - | } |
| - | } |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.9.7 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_REDIRECT_COUNT (3), |
| - | .BR CURLINFO_REDIRECT_TIME_T (3), |
| - | .BR CURLINFO_REDIRECT_URL (3) |
| @@ -0,0 +1,70 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_REDIRECT_TIME |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_REDIRECT_COUNT (3) |
| + | - CURLINFO_REDIRECT_TIME_T (3) |
| + | - CURLINFO_REDIRECT_URL (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_REDIRECT_TIME - get the time for all redirection steps |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME, |
| + | double *timep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a double to receive the total time, in seconds, it took for |
| + | all redirection steps include name lookup, connect, pretransfer and transfer |
| + | before final transaction was started. CURLINFO_REDIRECT_TIME(3) contains |
| + | the complete execution time for multiple redirections. |
| + | |
| + | See also the TIMES overview in the curl_easy_getinfo(3) man page. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | double redirect; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(CURLE_OK == res) { |
| + | res = curl_easy_getinfo(curl, CURLINFO_REDIRECT_TIME, &redirect); |
| + | if(CURLE_OK == res) { |
| + | printf("Time: %.1f", redirect); |
| + | } |
| + | } |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.9.7 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,76 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_REDIRECT_TIME_T 3 "28 Apr 2018" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_REDIRECT_TIME_T \- get the time for all redirection steps |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME_T, |
| - | curl_off_t *timep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a curl_off_t to receive the total time, in microseconds, it |
| - | took for all redirection steps include name lookup, connect, pretransfer and |
| - | transfer before final transaction was started. |
| - | \fICURLINFO_REDIRECT_TIME_T(3)\fP holds the complete execution time for |
| - | multiple redirections. |
| - | |
| - | See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_off_t redirect; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(CURLE_OK == res) { |
| - | res = curl_easy_getinfo(curl, CURLINFO_REDIRECT_TIME_T, &redirect); |
| - | if(CURLE_OK == res) { |
| - | printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", redirect / 1000000, |
| - | (long)(redirect % 1000000)); |
| - | } |
| - | } |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.61.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_REDIRECT_COUNT (3), |
| - | .BR CURLINFO_REDIRECT_TIME (3), |
| - | .BR CURLINFO_REDIRECT_URL (3) |
| @@ -0,0 +1,72 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_REDIRECT_TIME_T |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_REDIRECT_COUNT (3) |
| + | - CURLINFO_REDIRECT_TIME (3) |
| + | - CURLINFO_REDIRECT_URL (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_REDIRECT_TIME_T - get the time for all redirection steps |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME_T, |
| + | curl_off_t *timep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a curl_off_t to receive the total time, in microseconds, it |
| + | took for all redirection steps include name lookup, connect, pretransfer and |
| + | transfer before final transaction was started. |
| + | CURLINFO_REDIRECT_TIME_T(3) holds the complete execution time for |
| + | multiple redirections. |
| + | |
| + | See also the TIMES overview in the curl_easy_getinfo(3) man page. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_off_t redirect; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(CURLE_OK == res) { |
| + | res = curl_easy_getinfo(curl, CURLINFO_REDIRECT_TIME_T, &redirect); |
| + | if(CURLE_OK == res) { |
| + | printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", redirect / 1000000, |
| + | (long)(redirect % 1000000)); |
| + | } |
| + | } |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.61.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,73 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_REDIRECT_URL 3 "28 Aug 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_REDIRECT_URL \- get the URL a redirect would go to |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_URL, char **urlp); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a char pointer to receive the URL a redirect \fIwould\fP |
| - | take you to if you would enable \fICURLOPT_FOLLOWLOCATION(3)\fP. This can come |
| - | handy if you think using the built-in libcurl redirect logic is not good enough |
| - | for you but you would still prefer to avoid implementing all the magic of |
| - | figuring out the new URL. |
| - | |
| - | This URL is also set if the \fICURLOPT_MAXREDIRS(3)\fP limit prevented a |
| - | redirect to happen (since 7.54.1). |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | char *url = NULL; |
| - | curl_easy_getinfo(curl, CURLINFO_REDIRECT_URL, &url); |
| - | if(url) |
| - | printf("Redirect to: %s\\n", url); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.18.2 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_REDIRECT_COUNT (3), |
| - | .BR CURLINFO_REDIRECT_TIME_T (3), |
| - | .BR CURLOPT_FOLLOWLOCATION (3) |
| @@ -0,0 +1,69 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_REDIRECT_URL |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_REDIRECT_COUNT (3) |
| + | - CURLINFO_REDIRECT_TIME_T (3) |
| + | - CURLOPT_FOLLOWLOCATION (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_REDIRECT_URL - get the URL a redirect would go to |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_URL, char **urlp); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a char pointer to receive the URL a redirect *would* |
| + | take you to if you would enable CURLOPT_FOLLOWLOCATION(3). This can come |
| + | handy if you think using the built-in libcurl redirect logic is not good enough |
| + | for you but you would still prefer to avoid implementing all the magic of |
| + | figuring out the new URL. |
| + | |
| + | This URL is also set if the CURLOPT_MAXREDIRS(3) limit prevented a |
| + | redirect to happen (since 7.54.1). |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | char *url = NULL; |
| + | curl_easy_getinfo(curl, CURLINFO_REDIRECT_URL, &url); |
| + | if(url) |
| + | printf("Redirect to: %s\n", url); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.18.2 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,71 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_REFERER 3 "11 Feb 2021" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_REFERER \- get the used referrer request header |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REFERER, char **hdrp); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass in a pointer to a char pointer and get the referrer header used in the |
| - | most recent request. |
| - | |
| - | The \fBhdrp\fP pointer is NULL or points to private memory you MUST NOT free - |
| - | it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the corresponding |
| - | CURL handle. |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | curl_easy_setopt(curl, CURLOPT_REFERER, "https://example.org/referrer"); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | char *hdr = NULL; |
| - | curl_easy_getinfo(curl, CURLINFO_REFERER, &hdr); |
| - | if(hdr) |
| - | printf("Referrer header: %s\\n", hdr); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.76.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_header (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLOPT_REFERER (3) |
| @@ -0,0 +1,67 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_REFERER |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_REFERER (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_header (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_REFERER - get the used referrer request header |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REFERER, char **hdrp); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass in a pointer to a char pointer and get the referrer header used in the |
| + | most recent request. |
| + | |
| + | The **hdrp** pointer is NULL or points to private memory you MUST NOT free - |
| + | it gets freed when you call curl_easy_cleanup(3) on the corresponding |
| + | CURL handle. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | curl_easy_setopt(curl, CURLOPT_REFERER, "https://example.org/referrer"); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | char *hdr = NULL; |
| + | curl_easy_getinfo(curl, CURLINFO_REFERER, &hdr); |
| + | if(hdr) |
| + | printf("Referrer header: %s\n", hdr); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.76.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,67 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_REQUEST_SIZE 3 "1 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_REQUEST_SIZE \- get size of sent request |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REQUEST_SIZE, long *sizep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive the total size of the issued |
| - | requests. This is so far only for HTTP requests. Note that this may be more |
| - | than one request if \fICURLOPT_FOLLOWLOCATION(3)\fP is enabled. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | long req; |
| - | res = curl_easy_getinfo(curl, CURLINFO_REQUEST_SIZE, &req); |
| - | if(!res) |
| - | printf("Request size: %ld bytes\\n", req); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.4.1 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_HEADER_SIZE (3), |
| - | .BR CURLINFO_SIZE_DOWNLOAD_T (3) |
| @@ -0,0 +1,63 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_REQUEST_SIZE |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_HEADER_SIZE (3) |
| + | - CURLINFO_SIZE_DOWNLOAD_T (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_REQUEST_SIZE - get size of sent request |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REQUEST_SIZE, long *sizep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive the total size of the issued |
| + | requests. This is so far only for HTTP requests. Note that this may be more |
| + | than one request if CURLOPT_FOLLOWLOCATION(3) is enabled. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | long req; |
| + | res = curl_easy_getinfo(curl, CURLINFO_REQUEST_SIZE, &req); |
| + | if(!res) |
| + | printf("Request size: %ld bytes\n", req); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.4.1 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,69 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_RESPONSE_CODE 3 "28 Aug 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_RESPONSE_CODE \- get the last response code |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RESPONSE_CODE, long *codep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive the last received HTTP, FTP, SMTP or LDAP |
| - | (OpenLDAP only) response code. This option was previously known as |
| - | CURLINFO_HTTP_CODE in libcurl 7.10.7 and earlier. The stored value is zero if |
| - | no server response code has been received. |
| - | |
| - | Note that a proxy's CONNECT response should be read with |
| - | \fICURLINFO_HTTP_CONNECTCODE(3)\fP and not this. |
| - | .SH PROTOCOLS |
| - | HTTP, FTP, SMTP and LDAP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | long response_code; |
| - | curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.10.8. CURLINFO_HTTP_CODE was added in 7.4.1. |
| - | Support for SMTP responses added in 7.25.0, for OpenLDAP in 7.81.0. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_HTTP_CONNECTCODE (3) |
| @@ -0,0 +1,65 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_RESPONSE_CODE |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_HTTP_CONNECTCODE (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_RESPONSE_CODE - get the last response code |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RESPONSE_CODE, long *codep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive the last received HTTP, FTP, SMTP or LDAP |
| + | (OpenLDAP only) response code. This option was previously known as |
| + | CURLINFO_HTTP_CODE in libcurl 7.10.7 and earlier. The stored value is zero if |
| + | no server response code has been received. |
| + | |
| + | Note that a proxy's CONNECT response should be read with |
| + | CURLINFO_HTTP_CONNECTCODE(3) and not this. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP, FTP, SMTP and LDAP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | long response_code; |
| + | curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.10.8. CURLINFO_HTTP_CODE was added in 7.4.1. |
| + | Support for SMTP responses added in 7.25.0, for OpenLDAP in 7.81.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,73 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_RETRY_AFTER 3 "6 Aug 2019" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_RETRY_AFTER \- returns the Retry-After retry delay |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RETRY_AFTER, |
| - | curl_off_t *retry); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a curl_off_t variable to receive the number of seconds the |
| - | HTTP server suggests the client should wait until the next request is |
| - | issued. The information from the "Retry-After:" header. |
| - | |
| - | While the HTTP header might contain a fixed date string, the |
| - | \fICURLINFO_RETRY_AFTER(3)\fP always returns the number of seconds to wait - |
| - | or zero if there was no header or the header could not be parsed. |
| - | .SH DEFAULT |
| - | Returns zero delay if there was no header. |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | curl_off_t wait = 0; |
| - | curl_easy_getinfo(curl, CURLINFO_RETRY_AFTER, &wait); |
| - | if(wait) |
| - | printf("Wait for %" CURL_FORMAT_CURL_OFF_T " seconds\\n", wait); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.66.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_header (3), |
| - | .BR CURLOPT_HEADERFUNCTION (3), |
| - | .BR CURLOPT_STDERR (3) |
| @@ -0,0 +1,71 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_RETRY_AFTER |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_HEADERFUNCTION (3) |
| + | - CURLOPT_STDERR (3) |
| + | - curl_easy_header (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_RETRY_AFTER - returns the Retry-After retry delay |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RETRY_AFTER, |
| + | curl_off_t *retry); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a curl_off_t variable to receive the number of seconds the |
| + | HTTP server suggests the client should wait until the next request is |
| + | issued. The information from the "Retry-After:" header. |
| + | |
| + | While the HTTP header might contain a fixed date string, the |
| + | CURLINFO_RETRY_AFTER(3) always returns the number of seconds to wait - |
| + | or zero if there was no header or the header could not be parsed. |
| + | |
| + | # DEFAULT |
| + | |
| + | Returns zero delay if there was no header. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | curl_off_t wait = 0; |
| + | curl_easy_getinfo(curl, CURLINFO_RETRY_AFTER, &wait); |
| + | if(wait) |
| + | printf("Wait for %" CURL_FORMAT_CURL_OFF_T " seconds\n", wait); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.66.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,65 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_RTSP_CLIENT_CSEQ 3 "1 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_RTSP_CLIENT_CSEQ \- get the next RTSP client CSeq |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CLIENT_CSEQ, |
| - | long *cseq); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive the next CSeq that is expected to be used |
| - | by the application. |
| - | .SH PROTOCOLS |
| - | RTSP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | long cseq; |
| - | curl_easy_getinfo(curl, CURLINFO_RTSP_CLIENT_CSEQ, &cseq); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.20.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_RTSP_CSEQ_RECV (3), |
| - | .BR CURLINFO_RTSP_SERVER_CSEQ (3) |
| @@ -0,0 +1,61 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_RTSP_CLIENT_CSEQ |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_RTSP_CSEQ_RECV (3) |
| + | - CURLINFO_RTSP_SERVER_CSEQ (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_RTSP_CLIENT_CSEQ - get the next RTSP client CSeq |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CLIENT_CSEQ, |
| + | long *cseq); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive the next CSeq that is expected to be used |
| + | by the application. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | RTSP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | long cseq; |
| + | curl_easy_getinfo(curl, CURLINFO_RTSP_CLIENT_CSEQ, &cseq); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.20.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,65 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_RTSP_CSEQ_RECV 3 "12 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_RTSP_CSEQ_RECV \- get the recently received CSeq |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CSEQ_RECV, long *cseq); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive the most recently received CSeq from the |
| - | server. If your application encounters a \fICURLE_RTSP_CSEQ_ERROR\fP then you |
| - | may wish to troubleshoot and/or fix the CSeq mismatch by peeking at this |
| - | value. |
| - | .SH PROTOCOLS |
| - | RTSP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | long cseq; |
| - | curl_easy_getinfo(curl, CURLINFO_RTSP_CSEQ_RECV, &cseq); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.20.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_RTSP_SERVER_CSEQ (3) |
| @@ -0,0 +1,61 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_RTSP_CSEQ_RECV |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_RTSP_SERVER_CSEQ (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_RTSP_CSEQ_RECV - get the recently received CSeq |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CSEQ_RECV, long *cseq); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive the most recently received CSeq from the |
| + | server. If your application encounters a *CURLE_RTSP_CSEQ_ERROR* then you |
| + | may wish to troubleshoot and/or fix the CSeq mismatch by peeking at this |
| + | value. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | RTSP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | long cseq; |
| + | curl_easy_getinfo(curl, CURLINFO_RTSP_CSEQ_RECV, &cseq); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.20.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,69 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_RTSP_SERVER_CSEQ 3 "1 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_RTSP_SERVER_CSEQ \- get the next RTSP server CSeq |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SERVER_CSEQ, |
| - | long *cseq); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive the next CSeq that is expected to be used |
| - | by the application. |
| - | |
| - | Listening for server initiated requests is not implemented! |
| - | |
| - | Applications wishing to resume an RTSP session on another connection should |
| - | retrieve this info before closing the active connection. |
| - | .SH PROTOCOLS |
| - | RTSP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | long cseq; |
| - | curl_easy_getinfo(curl, CURLINFO_RTSP_SERVER_CSEQ, &cseq); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.20.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_RTSP_CSEQ_RECV (3) |
| @@ -0,0 +1,65 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_RTSP_SERVER_CSEQ |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_RTSP_CSEQ_RECV (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_RTSP_SERVER_CSEQ - get the next RTSP server CSeq |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SERVER_CSEQ, |
| + | long *cseq); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive the next CSeq that is expected to be used |
| + | by the application. |
| + | |
| + | Listening for server initiated requests is not implemented! |
| + | |
| + | Applications wishing to resume an RTSP session on another connection should |
| + | retrieve this info before closing the active connection. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | RTSP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | long cseq; |
| + | curl_easy_getinfo(curl, CURLINFO_RTSP_SERVER_CSEQ, &cseq); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.20.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,70 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_RTSP_SESSION_ID 3 "12 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_RTSP_SESSION_ID \- get RTSP session ID |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SESSION_ID, char **id); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a char pointer to receive a pointer to a string holding the |
| - | most recent RTSP Session ID. |
| - | |
| - | Applications wishing to resume an RTSP session on another connection should |
| - | retrieve this info before closing the active connection. |
| - | |
| - | The \fBid\fP pointer is NULL or points to private memory. You MUST NOT free - |
| - | it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the corresponding |
| - | CURL handle. |
| - | .SH PROTOCOLS |
| - | RTSP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | char *id; |
| - | curl_easy_getinfo(curl, CURLINFO_RTSP_SESSION_ID, &id); |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.20.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_RTSP_CSEQ_RECV (3) |
| @@ -0,0 +1,66 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_RTSP_SESSION_ID |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_RTSP_CSEQ_RECV (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_RTSP_SESSION_ID - get RTSP session ID |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SESSION_ID, char **id); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a char pointer to receive a pointer to a string holding the |
| + | most recent RTSP Session ID. |
| + | |
| + | Applications wishing to resume an RTSP session on another connection should |
| + | retrieve this info before closing the active connection. |
| + | |
| + | The **id** pointer is NULL or points to private memory. You MUST NOT free - |
| + | it gets freed when you call curl_easy_cleanup(3) on the corresponding |
| + | CURL handle. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | RTSP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | char *id; |
| + | curl_easy_getinfo(curl, CURLINFO_RTSP_SESSION_ID, &id); |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.20.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,72 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_SCHEME 3 "23 November 2016" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_SCHEME \- get the URL scheme (sometimes called protocol) used in the connection |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SCHEME, char **scheme); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a char pointer to receive the pointer to a null-terminated |
| - | string holding the URL scheme used for the most recent connection done with |
| - | this CURL \fBhandle\fP. |
| - | |
| - | The \fBscheme\fP pointer is NULL or points to private memory. You MUST NOT |
| - | free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the |
| - | corresponding CURL handle. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(res == CURLE_OK) { |
| - | char *scheme = NULL; |
| - | curl_easy_getinfo(curl, CURLINFO_SCHEME, &scheme); |
| - | if(scheme) |
| - | printf("scheme: %s\\n", scheme); /* scheme: HTTP */ |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.52.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_EFFECTIVE_URL (3), |
| - | .BR CURLINFO_PROTOCOL (3), |
| - | .BR CURLINFO_RESPONSE_CODE (3) |
| @@ -0,0 +1,68 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_SCHEME |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_EFFECTIVE_URL (3) |
| + | - CURLINFO_PROTOCOL (3) |
| + | - CURLINFO_RESPONSE_CODE (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_SCHEME - get the URL scheme (sometimes called protocol) used in the connection |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SCHEME, char **scheme); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a char pointer to receive the pointer to a null-terminated |
| + | string holding the URL scheme used for the most recent connection done with |
| + | this CURL **handle**. |
| + | |
| + | The **scheme** pointer is NULL or points to private memory. You MUST NOT |
| + | free - it gets freed when you call curl_easy_cleanup(3) on the |
| + | corresponding CURL handle. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(res == CURLE_OK) { |
| + | char *scheme = NULL; |
| + | curl_easy_getinfo(curl, CURLINFO_SCHEME, &scheme); |
| + | if(scheme) |
| + | printf("scheme: %s\n", scheme); /* scheme: HTTP */ |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.52.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,77 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_SIZE_DOWNLOAD 3 "28 Aug 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_SIZE_DOWNLOAD \- get the number of downloaded bytes |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD, double *dlp); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a double to receive the total amount of bytes that were |
| - | downloaded. The amount is only for the latest transfer and gets reset again |
| - | for each new transfer. This counts actual payload data, what's also commonly |
| - | called body. All meta and header data is excluded and not included in this |
| - | number. |
| - | |
| - | \fICURLINFO_SIZE_DOWNLOAD_T(3)\fP is a newer replacement that returns a more |
| - | sensible variable type. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Perform the request */ |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | /* check the size */ |
| - | double dl; |
| - | res = curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD, &dl); |
| - | if(!res) { |
| - | printf("Downloaded %.0f bytes\\n", dl); |
| - | } |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.4.1. Deprecated since 7.55.0. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_SIZE_DOWNLOAD_T (3), |
| - | .BR CURLINFO_SIZE_UPLOAD_T (3), |
| - | .BR CURLOPT_MAXFILESIZE (3) |
| @@ -0,0 +1,73 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_SIZE_DOWNLOAD |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_SIZE_DOWNLOAD_T (3) |
| + | - CURLINFO_SIZE_UPLOAD_T (3) |
| + | - CURLOPT_MAXFILESIZE (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_SIZE_DOWNLOAD - get the number of downloaded bytes |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD, double *dlp); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a double to receive the total amount of bytes that were |
| + | downloaded. The amount is only for the latest transfer and gets reset again |
| + | for each new transfer. This counts actual payload data, what's also commonly |
| + | called body. All meta and header data is excluded and not included in this |
| + | number. |
| + | |
| + | CURLINFO_SIZE_DOWNLOAD_T(3) is a newer replacement that returns a more |
| + | sensible variable type. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Perform the request */ |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | /* check the size */ |
| + | double dl; |
| + | res = curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD, &dl); |
| + | if(!res) { |
| + | printf("Downloaded %.0f bytes\n", dl); |
| + | } |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.4.1. Deprecated since 7.55.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,74 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_SIZE_DOWNLOAD_T 3 "25 May 2017" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_SIZE_DOWNLOAD_T \- get the number of downloaded bytes |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD_T, |
| - | curl_off_t *dlp); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a \fIcurl_off_t\fP to receive the total amount of bytes that |
| - | were downloaded. The amount is only for the latest transfer and gets reset |
| - | again for each new transfer. This counts actual payload data, what's also |
| - | commonly called body. All meta and header data is excluded from this amount. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Perform the request */ |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | /* check the size */ |
| - | curl_off_t dl; |
| - | res = curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD_T, &dl); |
| - | if(!res) { |
| - | printf("Downloaded %" CURL_FORMAT_CURL_OFF_T " bytes\\n", dl); |
| - | } |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.55.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_SIZE_DOWNLOAD (3), |
| - | .BR CURLINFO_SIZE_UPLOAD_T (3), |
| - | .BR CURLOPT_MAXFILESIZE (3) |
| @@ -0,0 +1,70 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_SIZE_DOWNLOAD_T |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_SIZE_DOWNLOAD (3) |
| + | - CURLINFO_SIZE_UPLOAD_T (3) |
| + | - CURLOPT_MAXFILESIZE (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_SIZE_DOWNLOAD_T - get the number of downloaded bytes |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD_T, |
| + | curl_off_t *dlp); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a *curl_off_t* to receive the total amount of bytes that |
| + | were downloaded. The amount is only for the latest transfer and gets reset |
| + | again for each new transfer. This counts actual payload data, what's also |
| + | commonly called body. All meta and header data is excluded from this amount. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Perform the request */ |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | /* check the size */ |
| + | curl_off_t dl; |
| + | res = curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD_T, &dl); |
| + | if(!res) { |
| + | printf("Downloaded %" CURL_FORMAT_CURL_OFF_T " bytes\n", dl); |
| + | } |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.55.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,73 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_SIZE_UPLOAD 3 "28 Aug 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_SIZE_UPLOAD \- get the number of uploaded bytes |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD, |
| - | double *uploadp); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a double to receive the total amount of bytes that were |
| - | uploaded. |
| - | |
| - | \fICURLINFO_SIZE_UPLOAD_T(3)\fP is a newer replacement that returns a more |
| - | sensible variable type. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Perform the request */ |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | double ul; |
| - | res = curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD, &ul); |
| - | if(!res) { |
| - | printf("Uploaded %.0f bytes\\n", ul); |
| - | } |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.4.1. Deprecated since 7.55.0. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_SIZE_DOWNLOAD_T (3), |
| - | .BR CURLINFO_SIZE_UPLOAD_T (3) |
| @@ -0,0 +1,69 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_SIZE_UPLOAD |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_SIZE_DOWNLOAD_T (3) |
| + | - CURLINFO_SIZE_UPLOAD_T (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_SIZE_UPLOAD - get the number of uploaded bytes |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD, |
| + | double *uploadp); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a double to receive the total amount of bytes that were |
| + | uploaded. |
| + | |
| + | CURLINFO_SIZE_UPLOAD_T(3) is a newer replacement that returns a more |
| + | sensible variable type. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Perform the request */ |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | double ul; |
| + | res = curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD, &ul); |
| + | if(!res) { |
| + | printf("Uploaded %.0f bytes\n", ul); |
| + | } |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.4.1. Deprecated since 7.55.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,70 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_SIZE_UPLOAD_T 3 "25 May 2017" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_SIZE_UPLOAD_T \- get the number of uploaded bytes |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD_T, |
| - | curl_off_t *uploadp); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a \fIcurl_off_t\fP to receive the total amount of bytes that |
| - | were uploaded. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Perform the request */ |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | curl_off_t ul; |
| - | res = curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD_T, &ul); |
| - | if(!res) { |
| - | printf("Uploaded %" CURL_FORMAT_CURL_OFF_T " bytes\\n", ul); |
| - | } |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.55.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_SIZE_DOWNLOAD_T (3), |
| - | .BR CURLINFO_SIZE_UPLOAD (3) |
| @@ -0,0 +1,66 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_SIZE_UPLOAD_T |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_SIZE_DOWNLOAD_T (3) |
| + | - CURLINFO_SIZE_UPLOAD (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_SIZE_UPLOAD_T - get the number of uploaded bytes |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD_T, |
| + | curl_off_t *uploadp); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a *curl_off_t* to receive the total amount of bytes that |
| + | were uploaded. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Perform the request */ |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | curl_off_t ul; |
| + | res = curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD_T, &ul); |
| + | if(!res) { |
| + | printf("Uploaded %" CURL_FORMAT_CURL_OFF_T " bytes\n", ul); |
| + | } |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.55.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,72 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_SPEED_DOWNLOAD 3 "28 Aug 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_SPEED_DOWNLOAD \- get download speed |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD, |
| - | double *speed); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a double to receive the average download speed that curl |
| - | measured for the complete download. Measured in bytes/second. |
| - | |
| - | \fICURLINFO_SPEED_DOWNLOAD_T(3)\fP is a newer replacement that returns a more |
| - | sensible variable type. |
| - | .SH PROTOCOLS |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Perform the request */ |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | double speed; |
| - | res = curl_easy_getinfo(curl, CURLINFO_SPEED_DOWNLOAD, &speed); |
| - | if(!res) { |
| - | printf("Download speed %.0f bytes/sec\\n", speed); |
| - | } |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.4.1. Deprecated since 7.55.0. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_SIZE_UPLOAD_T (3), |
| - | .BR CURLINFO_SPEED_UPLOAD (3) |
| @@ -0,0 +1,67 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_SPEED_DOWNLOAD |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_SIZE_UPLOAD_T (3) |
| + | - CURLINFO_SPEED_UPLOAD (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_SPEED_DOWNLOAD - get download speed |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD, |
| + | double *speed); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a double to receive the average download speed that curl |
| + | measured for the complete download. Measured in bytes/second. |
| + | |
| + | CURLINFO_SPEED_DOWNLOAD_T(3) is a newer replacement that returns a more |
| + | sensible variable type. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Perform the request */ |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | double speed; |
| + | res = curl_easy_getinfo(curl, CURLINFO_SPEED_DOWNLOAD, &speed); |
| + | if(!res) { |
| + | printf("Download speed %.0f bytes/sec\n", speed); |
| + | } |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.4.1. Deprecated since 7.55.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,70 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_SPEED_DOWNLOAD_T 3 "28 Aug 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_SPEED_DOWNLOAD_T \- get download speed |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD_T, |
| - | curl_off_t *speed); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a \fIcurl_off_t\fP to receive the average download speed |
| - | that curl measured for the complete download. Measured in bytes/second. |
| - | .SH PROTOCOLS |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Perform the request */ |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | curl_off_t speed; |
| - | res = curl_easy_getinfo(curl, CURLINFO_SPEED_DOWNLOAD_T, &speed); |
| - | if(!res) { |
| - | printf("Download speed %" CURL_FORMAT_CURL_OFF_T " bytes/sec\\n", |
| - | speed); |
| - | } |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.55.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_SIZE_UPLOAD_T (3), |
| - | .BR CURLINFO_SPEED_UPLOAD_T (3) |
| @@ -0,0 +1,65 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_SPEED_DOWNLOAD_T |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_SIZE_UPLOAD_T (3) |
| + | - CURLINFO_SPEED_UPLOAD_T (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_SPEED_DOWNLOAD_T - get download speed |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD_T, |
| + | curl_off_t *speed); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a *curl_off_t* to receive the average download speed |
| + | that curl measured for the complete download. Measured in bytes/second. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Perform the request */ |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | curl_off_t speed; |
| + | res = curl_easy_getinfo(curl, CURLINFO_SPEED_DOWNLOAD_T, &speed); |
| + | if(!res) { |
| + | printf("Download speed %" CURL_FORMAT_CURL_OFF_T " bytes/sec\n", |
| + | speed); |
| + | } |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.55.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,70 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_SPEED_UPLOAD 3 "28 Aug 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_SPEED_UPLOAD \- get upload speed |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD, double *speed); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a double to receive the average upload speed that curl |
| - | measured for the complete upload. Measured in bytes/second. |
| - | |
| - | \fICURLINFO_SPEED_UPLOAD_T(3)\fP is a newer replacement that returns a more |
| - | sensible variable type. |
| - | .SH PROTOCOLS |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Perform the request */ |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | double speed; |
| - | res = curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD, &speed); |
| - | if(!res) { |
| - | printf("Upload speed %.0f bytes/sec\\n", speed); |
| - | } |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.4.1. Deprecated since 7.55.0. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_SPEED_DOWNLOAD_T (3) |
| @@ -0,0 +1,65 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_SPEED_UPLOAD |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_SPEED_DOWNLOAD_T (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_SPEED_UPLOAD - get upload speed |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD, double *speed); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a double to receive the average upload speed that curl |
| + | measured for the complete upload. Measured in bytes/second. |
| + | |
| + | CURLINFO_SPEED_UPLOAD_T(3) is a newer replacement that returns a more |
| + | sensible variable type. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Perform the request */ |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | double speed; |
| + | res = curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD, &speed); |
| + | if(!res) { |
| + | printf("Upload speed %.0f bytes/sec\n", speed); |
| + | } |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.4.1. Deprecated since 7.55.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,68 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_SPEED_UPLOAD_T 3 "25 May 2017" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_SPEED_UPLOAD_T \- get upload speed |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD_T, |
| - | curl_off_t *speed); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a \fIcurl_off_t\fP to receive the average upload speed that |
| - | curl measured for the complete upload. Measured in bytes/second. |
| - | .SH PROTOCOLS |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Perform the request */ |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | curl_off_t speed; |
| - | res = curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD_T, &speed); |
| - | if(!res) { |
| - | printf("Upload speed %" CURL_FORMAT_CURL_OFF_T " bytes/sec\\n", speed); |
| - | } |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.55.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_SPEED_DOWNLOAD_T (3) |
| @@ -0,0 +1,63 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_SPEED_UPLOAD_T |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_SPEED_DOWNLOAD_T (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_SPEED_UPLOAD_T - get upload speed |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD_T, |
| + | curl_off_t *speed); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a *curl_off_t* to receive the average upload speed that |
| + | curl measured for the complete upload. Measured in bytes/second. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Perform the request */ |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | curl_off_t speed; |
| + | res = curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD_T, &speed); |
| + | if(!res) { |
| + | printf("Upload speed %" CURL_FORMAT_CURL_OFF_T " bytes/sec\n", speed); |
| + | } |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.55.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,69 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_SSL_ENGINES 3 "1 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_SSL_ENGINES \- get an slist of OpenSSL crypto-engines |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_ENGINES, |
| - | struct curl_slist **engine_list); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass the address of a 'struct curl_slist *' to receive a linked-list of |
| - | OpenSSL crypto-engines supported. Note that engines are normally implemented |
| - | in separate dynamic libraries. Hence not all the returned engines may be |
| - | available at runtime. \fBNOTE:\fP you must call \fIcurl_slist_free_all(3)\fP |
| - | on the list pointer once you are done with it, as libcurl does not free this |
| - | data for you. |
| - | .SH PROTOCOLS |
| - | All TLS based ones. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | struct curl_slist *engines; |
| - | res = curl_easy_getinfo(curl, CURLINFO_SSL_ENGINES, &engines); |
| - | if((res == CURLE_OK) && engines) { |
| - | /* we have a list, free it when done using it */ |
| - | curl_slist_free_all(engines); |
| - | } |
| - | |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.12.3. Available in OpenSSL builds with "engine" support. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLOPT_SSLENGINE (3) |
| @@ -0,0 +1,65 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_SSL_ENGINES |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_SSLENGINE (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_SSL_ENGINES - get an slist of OpenSSL crypto-engines |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_ENGINES, |
| + | struct curl_slist **engine_list); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass the address of a 'struct curl_slist *' to receive a linked-list of |
| + | OpenSSL crypto-engines supported. Note that engines are normally implemented |
| + | in separate dynamic libraries. Hence not all the returned engines may be |
| + | available at runtime. **NOTE:** you must call curl_slist_free_all(3) |
| + | on the list pointer once you are done with it, as libcurl does not free this |
| + | data for you. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All TLS based ones. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | struct curl_slist *engines; |
| + | res = curl_easy_getinfo(curl, CURLINFO_SSL_ENGINES, &engines); |
| + | if((res == CURLE_OK) && engines) { |
| + | /* we have a list, free it when done using it */ |
| + | curl_slist_free_all(engines); |
| + | } |
| + | |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.12.3. Available in OpenSSL builds with "engine" support. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,69 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_SSL_VERIFYRESULT 3 "1 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_SSL_VERIFYRESULT \- get the result of the certificate verification |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_VERIFYRESULT, |
| - | long *result); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a long to receive the result of the server SSL certificate |
| - | verification that was requested (using the \fICURLOPT_SSL_VERIFYPEER(3)\fP |
| - | option). |
| - | |
| - | 0 is a positive result. Non-zero is an error. |
| - | .SH PROTOCOLS |
| - | All using TLS |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | long verifyresult; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(res) |
| - | printf("error: %s\\n", curl_easy_strerror(res)); |
| - | curl_easy_getinfo(curl, CURLINFO_SSL_VERIFYRESULT, &verifyresult); |
| - | printf("The peer verification said %s\\n", verifyresult? |
| - | "BAAAD":"fine"); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.5. Only set by the OpenSSL/libressl/boringssl and GnuTLS backends. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_PROXY_SSL_VERIFYRESULT (3) |
| @@ -0,0 +1,65 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_SSL_VERIFYRESULT |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_PROXY_SSL_VERIFYRESULT (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_SSL_VERIFYRESULT - get the result of the certificate verification |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_VERIFYRESULT, |
| + | long *result); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a long to receive the result of the server SSL certificate |
| + | verification that was requested (using the CURLOPT_SSL_VERIFYPEER(3) |
| + | option). |
| + | |
| + | 0 is a positive result. Non-zero is an error. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All using TLS |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | long verifyresult; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(res) |
| + | printf("error: %s\n", curl_easy_strerror(res)); |
| + | curl_easy_getinfo(curl, CURLINFO_SSL_VERIFYRESULT, &verifyresult); |
| + | printf("The peer verification said %s\n", verifyresult? |
| + | "BAAAD":"fine"); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.5. Only set by the OpenSSL/libressl/boringssl and GnuTLS backends. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,75 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_STARTTRANSFER_TIME 3 "28 Aug 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_STARTTRANSFER_TIME \- get the time until the first byte is received |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_STARTTRANSFER_TIME, |
| - | double *timep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a double to receive the time, in seconds, it took from the |
| - | start until the first byte is received by libcurl. This includes |
| - | \fICURLINFO_PRETRANSFER_TIME(3)\fP and also the time the server needs to |
| - | calculate the result. |
| - | |
| - | When a redirect is followed, the time from each request is added together. |
| - | |
| - | See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | double start; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(CURLE_OK == res) { |
| - | res = curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME, &start); |
| - | if(CURLE_OK == res) { |
| - | printf("Time: %.1f", start); |
| - | } |
| - | } |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.9.2 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_STARTTRANSFER_TIME_T (3), |
| - | .BR CURLOPT_TIMEOUT (3) |
| @@ -0,0 +1,71 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_STARTTRANSFER_TIME |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_STARTTRANSFER_TIME_T (3) |
| + | - CURLOPT_TIMEOUT (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_STARTTRANSFER_TIME - get the time until the first byte is received |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_STARTTRANSFER_TIME, |
| + | double *timep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a double to receive the time, in seconds, it took from the |
| + | start until the first byte is received by libcurl. This includes |
| + | CURLINFO_PRETRANSFER_TIME(3) and also the time the server needs to |
| + | calculate the result. |
| + | |
| + | When a redirect is followed, the time from each request is added together. |
| + | |
| + | See also the TIMES overview in the curl_easy_getinfo(3) man page. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | double start; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(CURLE_OK == res) { |
| + | res = curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME, &start); |
| + | if(CURLE_OK == res) { |
| + | printf("Time: %.1f", start); |
| + | } |
| + | } |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.9.2 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,77 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_STARTTRANSFER_TIME_T 3 "28 Apr 2018" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_STARTTRANSFER_TIME_T \- get the time until the first byte is received |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_STARTTRANSFER_TIME_T, |
| - | curl_off_t *timep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a curl_off_t to receive the time, in microseconds, |
| - | it took from the |
| - | start until the first byte is received by libcurl. This includes |
| - | \fICURLINFO_PRETRANSFER_TIME_T(3)\fP and also the time the server needs to |
| - | calculate the result. |
| - | |
| - | When a redirect is followed, the time from each request is added together. |
| - | |
| - | See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_off_t start; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(CURLE_OK == res) { |
| - | res = curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME_T, &start); |
| - | if(CURLE_OK == res) { |
| - | printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", start / 1000000, |
| - | (long)(start % 1000000)); |
| - | } |
| - | } |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.61.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_STARTTRANSFER_TIME (3), |
| - | .BR CURLOPT_TIMEOUT (3) |
| @@ -0,0 +1,73 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_STARTTRANSFER_TIME_T |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_STARTTRANSFER_TIME (3) |
| + | - CURLOPT_TIMEOUT (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_STARTTRANSFER_TIME_T - get the time until the first byte is received |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_STARTTRANSFER_TIME_T, |
| + | curl_off_t *timep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a curl_off_t to receive the time, in microseconds, |
| + | it took from the |
| + | start until the first byte is received by libcurl. This includes |
| + | CURLINFO_PRETRANSFER_TIME_T(3) and also the time the server needs to |
| + | calculate the result. |
| + | |
| + | When a redirect is followed, the time from each request is added together. |
| + | |
| + | See also the TIMES overview in the curl_easy_getinfo(3) man page. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_off_t start; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(CURLE_OK == res) { |
| + | res = curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME_T, &start); |
| + | if(CURLE_OK == res) { |
| + | printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", start / 1000000, |
| + | (long)(start % 1000000)); |
| + | } |
| + | } |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.61.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,78 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_TLS_SESSION 3 "12 Sep 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_TLS_SESSION \- get TLS session info |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SESSION, |
| - | struct curl_tlssessioninfo **session); |
| - | .SH DESCRIPTION |
| - | \fBThis option has been superseded\fP by \fICURLINFO_TLS_SSL_PTR(3)\fP which |
| - | was added in 7.48.0. The only reason you would use this option instead is if |
| - | you could be using a version of libcurl earlier than 7.48.0. |
| - | |
| - | This option is exactly the same as \fICURLINFO_TLS_SSL_PTR(3)\fP except in the |
| - | case of OpenSSL. If the session \fIbackend\fP is CURLSSLBACKEND_OPENSSL the |
| - | session \fIinternals\fP pointer varies depending on the option: |
| - | |
| - | \fICURLINFO_TLS_SESSION(3)\fP OpenSSL session \fIinternals\fP is \fBSSL_CTX *\fP. |
| - | |
| - | \fICURLINFO_TLS_SSL_PTR(3)\fP OpenSSL session \fIinternals\fP is \fBSSL *\fP. |
| - | |
| - | You can obtain an \fBSSL_CTX\fP pointer from an SSL pointer using OpenSSL |
| - | function \fISSL_get_SSL_CTX(3)\fP. Therefore unless you need compatibility |
| - | with older versions of libcurl use \fICURLINFO_TLS_SSL_PTR(3)\fP. Refer to |
| - | that document for more information. |
| - | .SH PROTOCOLS |
| - | All TLS-based |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | struct curl_tlssessioninfo *tls; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(res) |
| - | printf("error: %s\\n", curl_easy_strerror(res)); |
| - | curl_easy_getinfo(curl, CURLINFO_TLS_SESSION, &tls); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.34.0. Deprecated since 7.48.0 and supported OpenSSL, GnuTLS, and |
| - | NSS only up until this version was released. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_TLS_SSL_PTR (3) |
| @@ -0,0 +1,75 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_TLS_SESSION |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_TLS_SSL_PTR (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_TLS_SESSION - get TLS session info |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SESSION, |
| + | struct curl_tlssessioninfo **session); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | **This option has been superseded** by CURLINFO_TLS_SSL_PTR(3) which |
| + | was added in 7.48.0. The only reason you would use this option instead is if |
| + | you could be using a version of libcurl earlier than 7.48.0. |
| + | |
| + | This option is exactly the same as CURLINFO_TLS_SSL_PTR(3) except in the |
| + | case of OpenSSL. If the session *backend* is CURLSSLBACKEND_OPENSSL the |
| + | session *internals* pointer varies depending on the option: |
| + | |
| + | CURLINFO_TLS_SESSION(3) OpenSSL session *internals* is **SSL_CTX ***. |
| + | |
| + | CURLINFO_TLS_SSL_PTR(3) OpenSSL session *internals* is **SSL ***. |
| + | |
| + | You can obtain an **SSL_CTX** pointer from an SSL pointer using OpenSSL |
| + | function *SSL_get_SSL_CTX(3)*. Therefore unless you need compatibility |
| + | with older versions of libcurl use CURLINFO_TLS_SSL_PTR(3). Refer to |
| + | that document for more information. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All TLS-based |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | struct curl_tlssessioninfo *tls; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(res) |
| + | printf("error: %s\n", curl_easy_strerror(res)); |
| + | curl_easy_getinfo(curl, CURLINFO_TLS_SESSION, &tls); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.34.0. Deprecated since 7.48.0 and supported OpenSSL, GnuTLS, and |
| + | NSS only up until this version was released. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,32 +1,22 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_TLS_SSL_PTR 3 "23 Feb 2016" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_TLS_SESSION, CURLINFO_TLS_SSL_PTR \- get TLS session info |
| - | .SH SYNOPSIS |
| - | .nf |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_TLS_SSL_PTR |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_TLS_SESSION (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_TLS_SESSION, CURLINFO_TLS_SSL_PTR - get TLS session info |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SSL_PTR, | |
| @@ -37,60 +27,75 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SSL_PTR, | |
| CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SESSION, | |
| struct curl_tlssessioninfo **session); | |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a \fIstruct curl_tlssessioninfo *\fP. The pointer is |
| - | initialized to refer to a \fIstruct curl_tlssessioninfo *\fP that contains an |
| - | enum indicating the SSL library used for the handshake and a pointer to the |
| - | respective internal TLS session structure of this underlying SSL library. |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a *struct curl_tlssessioninfo **. The pointer is initialized |
| + | to refer to a *struct curl_tlssessioninfo ** that contains an enum indicating |
| + | the SSL library used for the handshake and a pointer to the respective |
| + | internal TLS session structure of this underlying SSL library. |
| This option may be useful for example to extract certificate information in a | |
| format convenient for further processing, such as manual validation. Refer to | |
| - | the \fBLIMITATIONS\fP section. |
| + | the **LIMITATIONS** section. |
| - | .nf |
| + | ~~~c |
| struct curl_tlssessioninfo { | |
| curl_sslbackend backend; | |
| void *internals; | |
| }; | |
| - | .fi |
| + | ~~~ |
| - | The \fIbackend\fP struct member is one of the defines in the CURLSSLBACKEND_* |
| + | The *backend* struct member is one of the defines in the CURLSSLBACKEND_* |
| series: CURLSSLBACKEND_NONE (when built without TLS support), | |
| CURLSSLBACKEND_WOLFSSL, CURLSSLBACKEND_SECURETRANSPORT, CURLSSLBACKEND_GNUTLS, | |
| CURLSSLBACKEND_MBEDTLS, CURLSSLBACKEND_NSS, CURLSSLBACKEND_OPENSSL, | |
| CURLSSLBACKEND_SCHANNEL or CURLSSLBACKEND_MESALINK. (Note that the OpenSSL | |
| forks are all reported as just OpenSSL here.) | |
| - | The \fIinternals\fP struct member points to a TLS library specific pointer for |
| + | The *internals* struct member points to a TLS library specific pointer for |
| the active ("in use") SSL connection, with the following underlying types: | |
| - | .RS |
| - | .IP GnuTLS |
| - | \fBgnutls_session_t\fP |
| - | .IP NSS |
| - | \fBPRFileDesc *\fP |
| - | .IP OpenSSL |
| - | \fICURLINFO_TLS_SESSION(3)\fP: \fBSSL_CTX *\fP |
| - | |
| - | \fICURLINFO_TLS_SSL_PTR(3)\fP: \fBSSL *\fP |
| - | .RE |
| - | Since 7.48.0 the \fIinternals\fP member can point to these other SSL backends |
| + | |
| + | ## GnuTLS |
| + | |
| + | **gnutls_session_t** |
| + | |
| + | ## NSS |
| + | |
| + | **PRFileDesc *** |
| + | |
| + | ## OpenSSL |
| + | |
| + | CURLINFO_TLS_SESSION(3): **SSL_CTX *** |
| + | |
| + | CURLINFO_TLS_SSL_PTR(3): **SSL *** |
| + | Since 7.48.0 the *internals* member can point to these other SSL backends |
| as well: | |
| - | .RS |
| - | .IP mbedTLS |
| - | \fBmbedTLS_ssl_context *\fP |
| - | .IP "Secure Channel" |
| - | \fBCtxtHandle *\fP |
| - | .IP "Secure Transport" |
| - | \fBSSLContext *\fP |
| - | .IP "wolfSSL" |
| - | \fBSSL *\fP |
| - | .RE |
| - | |
| - | If the \fIinternals\fP pointer is NULL then either the SSL backend is not |
| + | |
| + | ## mbedTLS |
| + | |
| + | **mbedTLS_ssl_context *** |
| + | |
| + | ## Secure Channel |
| + | |
| + | **CtxtHandle *** |
| + | |
| + | ## Secure Transport |
| + | |
| + | **SSLContext *** |
| + | |
| + | ## wolfSSL |
| + | |
| + | **SSL *** |
| + | |
| + | If the *internals* pointer is NULL then either the SSL backend is not |
| supported, an SSL session has not yet been established or the connection is no | |
| - | longer associated with the easy handle (e.g. \fIcurl_easy_perform(3)\fP has |
| + | longer associated with the easy handle (e.g. curl_easy_perform(3) has |
| returned). | |
| - | .SH LIMITATIONS |
| + | |
| + | # LIMITATIONS |
| + | |
| This option has some limitations that could make it unsafe when it comes to | |
| the manual verification of certificates. | |
| @@ -102,7 +107,7 @@ retrieve a second in-use SSL session associated with an easy handle. | |
| This option has not been thoroughly tested with clear text protocols that can | |
| be upgraded/downgraded to/from SSL: FTP, SMTP, POP3, IMAP when used with | |
| - | \fICURLOPT_USE_SSL(3)\fP. Though you can to retrieve the SSL pointer, it's |
| + | CURLOPT_USE_SSL(3). Though you can to retrieve the SSL pointer, it's |
| possible that before you can do that, data (including auth) may have already | |
| been sent over a connection after it was upgraded. | |
| @@ -113,16 +118,20 @@ after renegotiation but before you are able to get the (possibly) changed SSL | |
| pointer, with the (possibly) changed certificate information. | |
| Instead of using this option to poll for certificate changes use | |
| - | \fICURLOPT_SSL_CTX_FUNCTION(3)\fP to set a verification callback, if supported. |
| + | CURLOPT_SSL_CTX_FUNCTION(3) to set a verification callback, if supported. |
| That is safer and does not suffer from any of the problems above. | |
| How are you using this option? Are you affected by any of these limitations? | |
| Please let us know by making a comment at | |
| https://github.com/curl/curl/issues/685 | |
| - | .SH PROTOCOLS |
| + | |
| + | # PROTOCOLS |
| + | |
| All TLS-based | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| #include <openssl/ssl.h> | |
| @@ -133,7 +142,7 @@ static size_t wf(void *ptr, size_t size, size_t nmemb, void *stream) | |
| CURLcode res = curl_easy_getinfo(curl, CURLINFO_TLS_SSL_PTR, &info); | |
| if(info && !res) { | |
| if(CURLSSLBACKEND_OPENSSL == info->backend) { | |
| - | printf("OpenSSL ver. %s\\n", SSL_get_version((SSL*)info->internals)); |
| + | printf("OpenSSL ver. %s\n", SSL_get_version((SSL*)info->internals)); |
| } | |
| } | |
| return size * nmemb; | |
| @@ -151,15 +160,15 @@ int main(int argc, char **argv) | |
| } | |
| return res; | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| Added in 7.48.0. | |
| - | This option supersedes \fICURLINFO_TLS_SESSION(3)\fP which was added in 7.34.0. |
| + | This option supersedes CURLINFO_TLS_SESSION(3) which was added in 7.34.0. |
| This option is exactly the same as that option except in the case of OpenSSL. | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. | |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_TLS_SESSION (3) |
| @@ -1,73 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_TOTAL_TIME 3 "28 Aug 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_TOTAL_TIME \- get total time of previous transfer |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TOTAL_TIME, double *timep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a double to receive the total time in seconds for the |
| - | previous transfer, including name resolving, TCP connect etc. The double |
| - | represents the time in seconds, including fractions. |
| - | |
| - | When a redirect is followed, the time from each request is added together. |
| - | |
| - | See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | double total; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| - | res = curl_easy_perform(curl); |
| - | if(CURLE_OK == res) { |
| - | res = curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &total); |
| - | if(CURLE_OK == res) { |
| - | printf("Time: %.1f", total); |
| - | } |
| - | } |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.4.1 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_TOTAL_TIME_T (3), |
| - | .BR CURLOPT_TIMEOUT (3) |
| @@ -0,0 +1,69 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_TOTAL_TIME |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_TOTAL_TIME_T (3) |
| + | - CURLOPT_TIMEOUT (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_TOTAL_TIME - get total time of previous transfer |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TOTAL_TIME, double *timep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a double to receive the total time in seconds for the |
| + | previous transfer, including name resolving, TCP connect etc. The double |
| + | represents the time in seconds, including fractions. |
| + | |
| + | When a redirect is followed, the time from each request is added together. |
| + | |
| + | See also the TIMES overview in the curl_easy_getinfo(3) man page. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | double total; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| + | res = curl_easy_perform(curl); |
| + | if(CURLE_OK == res) { |
| + | res = curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &total); |
| + | if(CURLE_OK == res) { |
| + | printf("Time: %.1f", total); |
| + | } |
| + | } |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.4.1 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,75 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_TOTAL_TIME_T 3 "28 Apr 2018" libcurl libcurl |
| - | .SH NAME |
| - | CURLINFO_TOTAL_TIME_T \- get total time of previous transfer in microseconds |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TOTAL_TIME_T, |
| - | curl_off_t *timep); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a curl_off_t to receive the total time in microseconds |
| - | for the previous transfer, including name resolving, TCP connect etc. |
| - | The curl_off_t represents the time in microseconds. |
| - | |
| - | When a redirect is followed, the time from each request is added together. |
| - | |
| - | See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_off_t total; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | res = curl_easy_perform(curl); |
| - | if(CURLE_OK == res) { |
| - | res = curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME_T, &total); |
| - | if(CURLE_OK == res) { |
| - | printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", total / 1000000, |
| - | (long)(total % 1000000)); |
| - | } |
| - | } |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.61.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_TOTAL_TIME (3), |
| - | .BR CURLOPT_TIMEOUT (3) |
| @@ -0,0 +1,71 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_TOTAL_TIME_T |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_TOTAL_TIME (3) |
| + | - CURLOPT_TIMEOUT (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_TOTAL_TIME_T - get total time of previous transfer in microseconds |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TOTAL_TIME_T, |
| + | curl_off_t *timep); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a curl_off_t to receive the total time in microseconds |
| + | for the previous transfer, including name resolving, TCP connect etc. |
| + | The curl_off_t represents the time in microseconds. |
| + | |
| + | When a redirect is followed, the time from each request is added together. |
| + | |
| + | See also the TIMES overview in the curl_easy_getinfo(3) man page. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_off_t total; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | res = curl_easy_perform(curl); |
| + | if(CURLE_OK == res) { |
| + | res = curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME_T, &total); |
| + | if(CURLE_OK == res) { |
| + | printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", total / 1000000, |
| + | (long)(total % 1000000)); |
| + | } |
| + | } |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.61.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,75 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLINFO_XFER_ID 3 "07 June 2023" "libcurl" "libcurl" |
| - | .SH NAME |
| - | CURLINFO_XFER_ID \- get the ID of a transfer |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_XFER_ID, |
| - | curl_off_t *xfer_id); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a \fIcurl_off_t\fP to receive the identifier of the |
| - | current/last transfer done with the handle. Stores -1 if no transfer |
| - | has been started yet for the handle. |
| - | |
| - | The transfer id is unique among all transfers performed using the same |
| - | connection cache. This is implicitly the case for all transfers in the |
| - | same multi handle. |
| - | |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* Perform the request */ |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | curl_off_t xfer_id; |
| - | res = curl_easy_getinfo(curl, CURLINFO_XFER_ID, &xfer_id); |
| - | if(!res) { |
| - | printf("Transfer ID: %" CURL_FORMAT_CURL_OFF_T "\\n", xfer_id); |
| - | } |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 8.2.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_getinfo (3), |
| - | .BR curl_easy_setopt (3), |
| - | .BR CURLINFO_CONN_ID (3) |
| @@ -0,0 +1,70 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLINFO_XFER_ID |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_CONN_ID (3) |
| + | - curl_easy_getinfo (3) |
| + | - curl_easy_setopt (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLINFO_XFER_ID - get the ID of a transfer |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_XFER_ID, |
| + | curl_off_t *xfer_id); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a *curl_off_t* to receive the identifier of the |
| + | current/last transfer done with the handle. Stores -1 if no transfer |
| + | has been started yet for the handle. |
| + | |
| + | The transfer id is unique among all transfers performed using the same |
| + | connection cache. This is implicitly the case for all transfers in the |
| + | same multi handle. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* Perform the request */ |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | curl_off_t xfer_id; |
| + | res = curl_easy_getinfo(curl, CURLINFO_XFER_ID, &xfer_id); |
| + | if(!res) { |
| + | printf("Transfer ID: %" CURL_FORMAT_CURL_OFF_T "\n", xfer_id); |
| + | } |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 8.2.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,63 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE 3 "4 Nov 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE \- chunk length threshold for pipelining |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, |
| - | long size); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | No function since pipelining was removed in 7.62.0. |
| - | |
| - | Pass a long with a \fBsize\fP in bytes. If a transfer in a pipeline is |
| - | currently processing a chunked (Transfer-encoding: chunked) request with a |
| - | current chunk length larger than \fICURLMOPT_CHUNK_LENGTH_PENALTY_SIZE(3)\fP, |
| - | that pipeline is not considered for additional requests, even if it is shorter |
| - | than \fICURLMOPT_MAX_PIPELINE_LENGTH(3)\fP. |
| - | .SH DEFAULT |
| - | The default value is 0, which means that the penalization is inactive. |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLM *m = curl_multi_init(); |
| - | long maxchunk = 10000; |
| - | curl_multi_setopt(m, CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, maxchunk); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.30.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE (3), |
| - | .BR CURLMOPT_MAX_PIPELINE_LENGTH (3), |
| - | .BR CURLMOPT_PIPELINING (3) |
| @@ -0,0 +1,61 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE (3) |
| + | - CURLMOPT_MAX_PIPELINE_LENGTH (3) |
| + | - CURLMOPT_PIPELINING (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE - chunk length threshold for pipelining |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, |
| + | long size); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | No function since pipelining was removed in 7.62.0. |
| + | |
| + | Pass a long with a **size** in bytes. If a transfer in a pipeline is |
| + | currently processing a chunked (Transfer-encoding: chunked) request with a |
| + | current chunk length larger than CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE(3), |
| + | that pipeline is not considered for additional requests, even if it is shorter |
| + | than CURLMOPT_MAX_PIPELINE_LENGTH(3). |
| + | |
| + | # DEFAULT |
| + | |
| + | The default value is 0, which means that the penalization is inactive. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLM *m = curl_multi_init(); |
| + | long maxchunk = 10000; |
| + | curl_multi_setopt(m, CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, maxchunk); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.30.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| @@ -1,62 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE 3 "4 Nov 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE \- size threshold for pipelining penalty |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, |
| - | long size); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | No function since pipelining was removed in 7.62.0. |
| - | |
| - | Pass a long with a \fBsize\fP in bytes. If a transfer in a pipeline is |
| - | currently processing a request with a Content-Length larger than this |
| - | \fICURLMOPT_CONTENT_LENGTH_PENALTY_SIZE(3)\fP, that pipeline is not considered |
| - | for additional requests, even if it is shorter than |
| - | \fICURLMOPT_MAX_PIPELINE_LENGTH(3)\fP. |
| - | .SH DEFAULT |
| - | The default value is 0, which means that the size penalization is inactive. |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLM *m = curl_multi_init(); |
| - | long maxlength = 10000; |
| - | curl_multi_setopt(m, CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, maxlength); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.30.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLMOPT_PIPELINING (3), |
| - | .BR CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE (3) |
| @@ -0,0 +1,60 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE (3) |
| + | - CURLMOPT_PIPELINING (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE - size threshold for pipelining penalty |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, |
| + | long size); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | No function since pipelining was removed in 7.62.0. |
| + | |
| + | Pass a long with a **size** in bytes. If a transfer in a pipeline is |
| + | currently processing a request with a Content-Length larger than this |
| + | CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE(3), that pipeline is not considered |
| + | for additional requests, even if it is shorter than |
| + | CURLMOPT_MAX_PIPELINE_LENGTH(3). |
| + | |
| + | # DEFAULT |
| + | |
| + | The default value is 0, which means that the size penalization is inactive. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLM *m = curl_multi_init(); |
| + | long maxlength = 10000; |
| + | curl_multi_setopt(m, CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, maxlength); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.30.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| @@ -1,72 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLMOPT_MAXCONNECTS 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLMOPT_MAXCONNECTS \- size of connection cache |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAXCONNECTS, long max); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long indicating the \fBmax\fP. The set number is used as the maximum |
| - | amount of simultaneously open connections that libcurl may keep in its |
| - | connection cache after completed use. By default libcurl enlarges the size for |
| - | each added easy handle to make it fit 4 times the number of added easy |
| - | handles. |
| - | |
| - | By setting this option, you can prevent the cache size from growing beyond the |
| - | limit set by you. |
| - | |
| - | When the cache is full, curl closes the oldest one in the cache to prevent the |
| - | number of open connections from increasing. |
| - | |
| - | This option is for the multi handle's use only, when using the easy interface |
| - | you should instead use the \fICURLOPT_MAXCONNECTS(3)\fP option. |
| - | |
| - | See \fICURLMOPT_MAX_TOTAL_CONNECTIONS(3)\fP for limiting the number of active |
| - | connections. |
| - | |
| - | .SH DEFAULT |
| - | See DESCRIPTION |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLM *m = curl_multi_init(); |
| - | /* only keep 10 connections in the cache */ |
| - | curl_multi_setopt(m, CURLMOPT_MAXCONNECTS, 10L); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.16.3 |
| - | .SH RETURN VALUE |
| - | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLMOPT_MAX_HOST_CONNECTIONS (3), |
| - | .BR CURLOPT_MAXCONNECTS (3) |
| @@ -0,0 +1,69 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLMOPT_MAXCONNECTS |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLMOPT_MAX_HOST_CONNECTIONS (3) |
| + | - CURLOPT_MAXCONNECTS (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLMOPT_MAXCONNECTS - size of connection cache |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAXCONNECTS, long max); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long indicating the **max**. The set number is used as the maximum |
| + | amount of simultaneously open connections that libcurl may keep in its |
| + | connection cache after completed use. By default libcurl enlarges the size for |
| + | each added easy handle to make it fit 4 times the number of added easy |
| + | handles. |
| + | |
| + | By setting this option, you can prevent the cache size from growing beyond the |
| + | limit set by you. |
| + | |
| + | When the cache is full, curl closes the oldest one in the cache to prevent the |
| + | number of open connections from increasing. |
| + | |
| + | This option is for the multi handle's use only, when using the easy interface |
| + | you should instead use the CURLOPT_MAXCONNECTS(3) option. |
| + | |
| + | See CURLMOPT_MAX_TOTAL_CONNECTIONS(3) for limiting the number of active |
| + | connections. |
| + | |
| + | # DEFAULT |
| + | |
| + | See DESCRIPTION |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLM *m = curl_multi_init(); |
| + | /* only keep 10 connections in the cache */ |
| + | curl_multi_setopt(m, CURLMOPT_MAXCONNECTS, 10L); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.16.3 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| @@ -1,61 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLMOPT_MAX_CONCURRENT_STREAMS 3 "06 Nov 2019" libcurl libcurl |
| - | .SH NAME |
| - | CURLMOPT_MAX_CONCURRENT_STREAMS \- max concurrent streams for http2 |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_CONCURRENT_STREAMS, |
| - | long max); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long indicating the \fBmax\fP. The set number is used as the maximum |
| - | number of concurrent streams libcurl should support on connections done using |
| - | HTTP/2 or HTTP/3. |
| - | |
| - | Valid values range from 1 to 2147483647 (2^31 - 1) and defaults to 100. The |
| - | value passed here would be honored based on other system resources properties. |
| - | .SH DEFAULT |
| - | 100 |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLM *m = curl_multi_init(); |
| - | /* max concurrent streams 200 */ |
| - | curl_multi_setopt(m, CURLMOPT_MAX_CONCURRENT_STREAMS, 200L); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.67.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLMOPT_MAXCONNECTS (3), |
| - | .BR CURLOPT_MAXCONNECTS (3) |
| @@ -0,0 +1,59 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLMOPT_MAX_CONCURRENT_STREAMS |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLMOPT_MAXCONNECTS (3) |
| + | - CURLOPT_MAXCONNECTS (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLMOPT_MAX_CONCURRENT_STREAMS - max concurrent streams for http2 |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_CONCURRENT_STREAMS, |
| + | long max); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long indicating the **max**. The set number is used as the maximum |
| + | number of concurrent streams libcurl should support on connections done using |
| + | HTTP/2 or HTTP/3. |
| + | |
| + | Valid values range from 1 to 2147483647 (2^31 - 1) and defaults to 100. The |
| + | value passed here would be honored based on other system resources properties. |
| + | |
| + | # DEFAULT |
| + | |
| + | 100 |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLM *m = curl_multi_init(); |
| + | /* max concurrent streams 200 */ |
| + | curl_multi_setopt(m, CURLMOPT_MAX_CONCURRENT_STREAMS, 200L); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.67.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| @@ -1,74 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLMOPT_MAX_HOST_CONNECTIONS 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLMOPT_MAX_HOST_CONNECTIONS \- max number of connections to a single host |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_HOST_CONNECTIONS, |
| - | long max); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long to indicate \fBmax\fP. The set number is used as the maximum |
| - | amount of simultaneously open connections to a single host (a host being the |
| - | same as a host name + port number pair). For each new session to a host, |
| - | libcurl might open a new connection up to the limit set by |
| - | \fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP. When the limit is reached, new |
| - | sessions are kept pending until a connection becomes available. |
| - | |
| - | The default \fBmax\fP value is 0, unlimited. This set limit is also used for |
| - | proxy connections, and then the proxy is considered to be the host for which |
| - | this limit counts. |
| - | |
| - | When more transfers are added to the multi handle than what can be performed |
| - | due to the set limit, they are queued up waiting for their chance. When that |
| - | happens, the \fICURLOPT_TIMEOUT_MS(3)\fP timeout is inclusive of the waiting |
| - | time, meaning that if you set a too narrow timeout in such a case the transfer |
| - | might never even start before it times out. |
| - | |
| - | Even in the queued up situation, the \fICURLOPT_CONNECTTIMEOUT_MS(3)\fP |
| - | timeout is however treated as a per-connect timeout. |
| - | .SH DEFAULT |
| - | 0 |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLM *m = curl_multi_init(); |
| - | /* do no more than 2 connections per host */ |
| - | curl_multi_setopt(m, CURLMOPT_MAX_HOST_CONNECTIONS, 2L); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.30.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLMOPT_MAXCONNECTS (3), |
| - | .BR CURLMOPT_MAX_TOTAL_CONNECTIONS (3) |
| @@ -0,0 +1,72 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLMOPT_MAX_HOST_CONNECTIONS |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLMOPT_MAXCONNECTS (3) |
| + | - CURLMOPT_MAX_TOTAL_CONNECTIONS (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLMOPT_MAX_HOST_CONNECTIONS - max number of connections to a single host |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_HOST_CONNECTIONS, |
| + | long max); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long to indicate **max**. The set number is used as the maximum |
| + | amount of simultaneously open connections to a single host (a host being the |
| + | same as a host name + port number pair). For each new session to a host, |
| + | libcurl might open a new connection up to the limit set by |
| + | CURLMOPT_MAX_HOST_CONNECTIONS(3). When the limit is reached, new |
| + | sessions are kept pending until a connection becomes available. |
| + | |
| + | The default **max** value is 0, unlimited. This set limit is also used for |
| + | proxy connections, and then the proxy is considered to be the host for which |
| + | this limit counts. |
| + | |
| + | When more transfers are added to the multi handle than what can be performed |
| + | due to the set limit, they are queued up waiting for their chance. When that |
| + | happens, the CURLOPT_TIMEOUT_MS(3) timeout is inclusive of the waiting |
| + | time, meaning that if you set a too narrow timeout in such a case the transfer |
| + | might never even start before it times out. |
| + | |
| + | Even in the queued up situation, the CURLOPT_CONNECTTIMEOUT_MS(3) |
| + | timeout is however treated as a per-connect timeout. |
| + | |
| + | # DEFAULT |
| + | |
| + | 0 |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLM *m = curl_multi_init(); |
| + | /* do no more than 2 connections per host */ |
| + | curl_multi_setopt(m, CURLMOPT_MAX_HOST_CONNECTIONS, 2L); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.30.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| @@ -1,66 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLMOPT_MAX_PIPELINE_LENGTH 3 "4 Nov 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLMOPT_MAX_PIPELINE_LENGTH \- maximum number of requests in a pipeline |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_PIPELINE_LENGTH, |
| - | long max); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | No function since pipelining was removed in 7.62.0. |
| - | |
| - | Pass a long. The set \fBmax\fP number is used as the maximum amount of |
| - | outstanding requests in an HTTP/1.1 pipeline. This option is only used for |
| - | HTTP/1.1 pipelining, not for HTTP/2 multiplexing. |
| - | |
| - | When this limit is reached, libcurl creates another connection to the same |
| - | host (see \fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP), or queue the request until |
| - | one of the pipelines to the host is ready to accept a request. Thus, the |
| - | total number of requests in-flight is \fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP * |
| - | \fICURLMOPT_MAX_PIPELINE_LENGTH(3)\fP. |
| - | .SH DEFAULT |
| - | 5 |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLM *m = curl_multi_init(); |
| - | /* set a more conservative pipe length */ |
| - | curl_multi_setopt(m, CURLMOPT_MAX_PIPELINE_LENGTH, 3L); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.30.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLMOPT_PIPELINING (3), |
| - | .BR CURLMOPT_MAX_HOST_CONNECTIONS (3) |
| @@ -0,0 +1,64 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLMOPT_MAX_PIPELINE_LENGTH |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLMOPT_MAX_HOST_CONNECTIONS (3) |
| + | - CURLMOPT_PIPELINING (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLMOPT_MAX_PIPELINE_LENGTH - maximum number of requests in a pipeline |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_PIPELINE_LENGTH, |
| + | long max); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | No function since pipelining was removed in 7.62.0. |
| + | |
| + | Pass a long. The set **max** number is used as the maximum amount of |
| + | outstanding requests in an HTTP/1.1 pipeline. This option is only used for |
| + | HTTP/1.1 pipelining, not for HTTP/2 multiplexing. |
| + | |
| + | When this limit is reached, libcurl creates another connection to the same |
| + | host (see CURLMOPT_MAX_HOST_CONNECTIONS(3)), or queue the request until one |
| + | of the pipelines to the host is ready to accept a request. Thus, the total |
| + | number of requests in-flight is CURLMOPT_MAX_HOST_CONNECTIONS(3) * |
| + | CURLMOPT_MAX_PIPELINE_LENGTH(3). |
| + | |
| + | # DEFAULT |
| + | |
| + | 5 |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLM *m = curl_multi_init(); |
| + | /* set a more conservative pipe length */ |
| + | curl_multi_setopt(m, CURLMOPT_MAX_PIPELINE_LENGTH, 3L); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.30.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| @@ -1,72 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLMOPT_MAX_TOTAL_CONNECTIONS 3 "4 Nov 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLMOPT_MAX_TOTAL_CONNECTIONS \- max simultaneously open connections |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_TOTAL_CONNECTIONS, |
| - | long amount); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long for the \fBamount\fP. The set number is used as the maximum number |
| - | of simultaneously open connections in total using this multi handle. For each |
| - | new session, libcurl might open a new connection up to the limit set by |
| - | \fICURLMOPT_MAX_TOTAL_CONNECTIONS(3)\fP. When the limit is reached, new |
| - | sessions are held pending until there are available connections. If |
| - | \fICURLMOPT_PIPELINING(3)\fP is enabled, libcurl can try multiplexing if the |
| - | host is capable of it. |
| - | |
| - | When more transfers are added to the multi handle than what can be performed |
| - | due to the set limit, they get queued up waiting for their chance. When that |
| - | happens, the \fICURLOPT_TIMEOUT_MS(3)\fP timeout is counted inclusive of the |
| - | waiting time, meaning that if you set a too narrow timeout in such a case the |
| - | transfer might never even start before it times out. |
| - | |
| - | Even in the queued up situation, the \fICURLOPT_CONNECTTIMEOUT_MS(3)\fP |
| - | timeout is however treated as a per-connect timeout. |
| - | .SH DEFAULT |
| - | The default value is 0, which means that there is no limit. It is then simply |
| - | controlled by the number of easy handles added. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLM *m = curl_multi_init(); |
| - | /* never do more than 15 connections */ |
| - | curl_multi_setopt(m, CURLMOPT_MAX_TOTAL_CONNECTIONS, 15L); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.30.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLMOPT_MAXCONNECTS (3), |
| - | .BR CURLMOPT_MAX_HOST_CONNECTIONS (3) |
| @@ -0,0 +1,70 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLMOPT_MAX_TOTAL_CONNECTIONS |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLMOPT_MAXCONNECTS (3) |
| + | - CURLMOPT_MAX_HOST_CONNECTIONS (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLMOPT_MAX_TOTAL_CONNECTIONS - max simultaneously open connections |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_TOTAL_CONNECTIONS, |
| + | long amount); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long for the **amount**. The set number is used as the maximum number |
| + | of simultaneously open connections in total using this multi handle. For each |
| + | new session, libcurl might open a new connection up to the limit set by |
| + | CURLMOPT_MAX_TOTAL_CONNECTIONS(3). When the limit is reached, new |
| + | sessions are held pending until there are available connections. If |
| + | CURLMOPT_PIPELINING(3) is enabled, libcurl can try multiplexing if the |
| + | host is capable of it. |
| + | |
| + | When more transfers are added to the multi handle than what can be performed |
| + | due to the set limit, they get queued up waiting for their chance. When that |
| + | happens, the CURLOPT_TIMEOUT_MS(3) timeout is counted inclusive of the |
| + | waiting time, meaning that if you set a too narrow timeout in such a case the |
| + | transfer might never even start before it times out. |
| + | |
| + | Even in the queued up situation, the CURLOPT_CONNECTTIMEOUT_MS(3) |
| + | timeout is however treated as a per-connect timeout. |
| + | |
| + | # DEFAULT |
| + | |
| + | The default value is 0, which means that there is no limit. It is then simply |
| + | controlled by the number of easy handles added. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLM *m = curl_multi_init(); |
| + | /* never do more than 15 connections */ |
| + | curl_multi_setopt(m, CURLMOPT_MAX_TOTAL_CONNECTIONS, 15L); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.30.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| @@ -1,74 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLMOPT_PIPELINING 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLMOPT_PIPELINING \- enable HTTP pipelining and multiplexing |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING, long bitmask); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass in the correct value in the \fBbitmask\fP parameter to instruct libcurl |
| - | to enable multiplexing for this multi handle. |
| - | |
| - | With multiplexing enabled, libcurl attempts to do multiple transfers over the |
| - | same connection when doing parallel transfers to the same hosts. |
| - | |
| - | .IP CURLPIPE_NOTHING (0) |
| - | Default, which means doing no attempts at multiplexing. |
| - | .IP CURLPIPE_HTTP1 (1) |
| - | This bit is deprecated and has no effect since version 7.62.0. |
| - | .IP CURLPIPE_MULTIPLEX (2) |
| - | If this bit is set, libcurl tries to multiplex the new transfer over an |
| - | existing connection if possible. This requires HTTP/2 or HTTP/3. |
| - | .SH DEFAULT |
| - | Since 7.62.0, \fBCURLPIPE_MULTIPLEX\fP is enabled by default. |
| - | |
| - | Before that, default was \fBCURLPIPE_NOTHING\fP. |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURLM *m = curl_multi_init(); |
| - | /* try HTTP/2 multiplexing */ |
| - | curl_multi_setopt(m, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.16.0. Multiplex support bit added in 7.43.0. HTTP/1 Pipelining |
| - | support was disabled in 7.62.0. |
| - | .SH RETURN VALUE |
| - | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE (3), |
| - | .BR CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE (3), |
| - | .BR CURLMOPT_MAX_HOST_CONNECTIONS (3), |
| - | .BR CURLMOPT_MAX_PIPELINE_LENGTH (3), |
| - | .BR CURLMOPT_MAXCONNECTS (3), |
| - | .BR CURLMOPT_PIPELINING_SITE_BL (3) |
| @@ -0,0 +1,77 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLMOPT_PIPELINING |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE (3) |
| + | - CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE (3) |
| + | - CURLMOPT_MAXCONNECTS (3) |
| + | - CURLMOPT_MAX_HOST_CONNECTIONS (3) |
| + | - CURLMOPT_MAX_PIPELINE_LENGTH (3) |
| + | - CURLMOPT_PIPELINING_SITE_BL (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLMOPT_PIPELINING - enable HTTP pipelining and multiplexing |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING, long bitmask); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass in the correct value in the **bitmask** parameter to instruct libcurl |
| + | to enable multiplexing for this multi handle. |
| + | |
| + | With multiplexing enabled, libcurl attempts to do multiple transfers over the |
| + | same connection when doing parallel transfers to the same hosts. |
| + | |
| + | ## CURLPIPE_NOTHING (0) |
| + | |
| + | Default, which means doing no attempts at multiplexing. |
| + | |
| + | ## CURLPIPE_HTTP1 (1) |
| + | |
| + | This bit is deprecated and has no effect since version 7.62.0. |
| + | |
| + | ## CURLPIPE_MULTIPLEX (2) |
| + | |
| + | If this bit is set, libcurl tries to multiplex the new transfer over an |
| + | existing connection if possible. This requires HTTP/2 or HTTP/3. |
| + | |
| + | # DEFAULT |
| + | |
| + | Since 7.62.0, **CURLPIPE_MULTIPLEX** is enabled by default. |
| + | |
| + | Before that, default was **CURLPIPE_NOTHING**. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURLM *m = curl_multi_init(); |
| + | /* try HTTP/2 multiplexing */ |
| + | curl_multi_setopt(m, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.16.0. Multiplex support bit added in 7.43.0. HTTP/1 Pipelining |
| + | support was disabled in 7.62.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| @@ -1,71 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLMOPT_PIPELINING_SERVER_BL 3 "4 Nov 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLMOPT_PIPELINING_SERVER_BL \- pipelining server block list |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING_SERVER_BL, |
| - | char **servers); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | No function since pipelining was removed in 7.62.0. |
| - | |
| - | Pass a \fBservers\fP array of char *, ending with a NULL entry. This is a list |
| - | of server types prefixes (in the Server: HTTP header) that are blocked from |
| - | pipelining, i.e server types that are known to not support HTTP |
| - | pipelining. The array is copied by libcurl. |
| - | |
| - | Note that the comparison matches if the Server: header begins with the string |
| - | in the block list, i.e "Server: Ninja 1.2.3" and "Server: Ninja 1.4.0" can |
| - | both be blocked by having "Ninja" in the list. |
| - | |
| - | Pass a NULL pointer to clear the block list. |
| - | .SH DEFAULT |
| - | The default value is NULL, which means that there is no block list. |
| - | .SH PROTOCOLS |
| - | .SH EXAMPLE |
| - | .nf |
| - | static char *server_block_list[] = |
| - | { |
| - | "Microsoft-IIS/6.0", |
| - | "nginx/0.8.54", |
| - | NULL |
| - | }; |
| - | int main(void) |
| - | { |
| - | CURLM *m = curl_multi_init(); |
| - | curl_multi_setopt(m, CURLMOPT_PIPELINING_SERVER_BL, server_block_list); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.30.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLMOPT_PIPELINING (3), |
| - | .BR CURLMOPT_PIPELINING_SITE_BL (3) |
| @@ -0,0 +1,68 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLMOPT_PIPELINING_SERVER_BL |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLMOPT_PIPELINING (3) |
| + | - CURLMOPT_PIPELINING_SITE_BL (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLMOPT_PIPELINING_SERVER_BL - pipelining server block list |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING_SERVER_BL, |
| + | char **servers); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | No function since pipelining was removed in 7.62.0. |
| + | |
| + | Pass a **servers** array of char *, ending with a NULL entry. This is a list |
| + | of server types prefixes (in the Server: HTTP header) that are blocked from |
| + | pipelining, i.e server types that are known to not support HTTP |
| + | pipelining. The array is copied by libcurl. |
| + | |
| + | Note that the comparison matches if the Server: header begins with the string |
| + | in the block list, i.e "Server: Ninja 1.2.3" and "Server: Ninja 1.4.0" can |
| + | both be blocked by having "Ninja" in the list. |
| + | |
| + | Pass a NULL pointer to clear the block list. |
| + | |
| + | # DEFAULT |
| + | |
| + | The default value is NULL, which means that there is no block list. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | static char *server_block_list[] = |
| + | { |
| + | "Microsoft-IIS/6.0", |
| + | "nginx/0.8.54", |
| + | NULL |
| + | }; |
| + | int main(void) |
| + | { |
| + | CURLM *m = curl_multi_init(); |
| + | curl_multi_setopt(m, CURLMOPT_PIPELINING_SERVER_BL, server_block_list); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.30.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| @@ -1,68 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLMOPT_PIPELINING_SITE_BL 3 "4 Nov 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLMOPT_PIPELINING_SITE_BL \- pipelining host block list |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING_SITE_BL, |
| - | char **hosts); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | No function since pipelining was removed in 7.62.0. |
| - | |
| - | Pass a \fBhosts\fP array of char *, ending with a NULL entry. This is a list |
| - | of sites that are blocked from pipelining, i.e sites that are known to not |
| - | support HTTP pipelining. The array is copied by libcurl. |
| - | |
| - | Pass a NULL pointer to clear the block list. |
| - | .SH DEFAULT |
| - | The default value is NULL, which means that there is no block list. |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | static char *site_block_list[] = |
| - | { |
| - | "www.haxx.se", |
| - | "www.example.com:1234", |
| - | NULL |
| - | }; |
| - | |
| - | int main(void) |
| - | { |
| - | CURLM *m = curl_multi_init(); |
| - | curl_multi_setopt(m, CURLMOPT_PIPELINING_SITE_BL, site_block_list); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.30.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLMOPT_PIPELINING (3), |
| - | .BR CURLMOPT_PIPELINING_SERVER_BL (3) |
| @@ -0,0 +1,66 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLMOPT_PIPELINING_SITE_BL |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLMOPT_PIPELINING (3) |
| + | - CURLMOPT_PIPELINING_SERVER_BL (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLMOPT_PIPELINING_SITE_BL - pipelining host block list |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING_SITE_BL, |
| + | char **hosts); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | No function since pipelining was removed in 7.62.0. |
| + | |
| + | Pass a **hosts** array of char *, ending with a NULL entry. This is a list |
| + | of sites that are blocked from pipelining, i.e sites that are known to not |
| + | support HTTP pipelining. The array is copied by libcurl. |
| + | |
| + | Pass a NULL pointer to clear the block list. |
| + | |
| + | # DEFAULT |
| + | |
| + | The default value is NULL, which means that there is no block list. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | static char *site_block_list[] = |
| + | { |
| + | "www.haxx.se", |
| + | "www.example.com:1234", |
| + | NULL |
| + | }; |
| + | |
| + | int main(void) |
| + | { |
| + | CURLM *m = curl_multi_init(); |
| + | curl_multi_setopt(m, CURLMOPT_PIPELINING_SITE_BL, site_block_list); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.30.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| @@ -1,89 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLMOPT_PUSHDATA 3 "1 Jun 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLMOPT_PUSHDATA \- pointer to pass to push callback |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PUSHDATA, void *pointer); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Set a \fIpointer\fP to pass as the last argument to the |
| - | \fICURLMOPT_PUSHFUNCTION(3)\fP callback. The pointer is not touched or used by |
| - | libcurl itself, only passed on to the callback function. |
| - | .SH DEFAULT |
| - | NULL |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | #include <string.h> |
| - | |
| - | /* only allow pushes for file names starting with "push-" */ |
| - | int push_callback(CURL *parent, |
| - | CURL *easy, |
| - | size_t num_headers, |
| - | struct curl_pushheaders *headers, |
| - | void *clientp) |
| - | { |
| - | char *headp; |
| - | int *transfers = (int *)clientp; |
| - | FILE *out; |
| - | headp = curl_pushheader_byname(headers, ":path"); |
| - | if(headp && !strncmp(headp, "/push-", 6)) { |
| - | fprintf(stderr, "The PATH is %s\\n", headp); |
| - | |
| - | /* save the push here */ |
| - | out = fopen("pushed-stream", "wb"); |
| - | |
| - | /* write to this file */ |
| - | curl_easy_setopt(easy, CURLOPT_WRITEDATA, out); |
| - | |
| - | (*transfers)++; /* one more */ |
| - | |
| - | return CURL_PUSH_OK; |
| - | } |
| - | return CURL_PUSH_DENY; |
| - | } |
| - | |
| - | int main(void) |
| - | { |
| - | int counter; |
| - | CURLM *multi = curl_multi_init(); |
| - | curl_multi_setopt(multi, CURLMOPT_PUSHFUNCTION, push_callback); |
| - | curl_multi_setopt(multi, CURLMOPT_PUSHDATA, &counter); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.44.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLMOPT_PIPELINING (3), |
| - | .BR CURLMOPT_PUSHFUNCTION (3), |
| - | .BR CURLOPT_PIPEWAIT (3), |
| - | .BR RFC 7540 |
| @@ -0,0 +1,87 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLMOPT_PUSHDATA |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLMOPT_PIPELINING (3) |
| + | - CURLMOPT_PUSHFUNCTION (3) |
| + | - CURLOPT_PIPEWAIT (3) |
| + | - RFC 7540 |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLMOPT_PUSHDATA - pointer to pass to push callback |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PUSHDATA, void *pointer); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Set a *pointer* to pass as the last argument to the |
| + | CURLMOPT_PUSHFUNCTION(3) callback. The pointer is not touched or used by |
| + | libcurl itself, only passed on to the callback function. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | #include <string.h> |
| + | |
| + | /* only allow pushes for file names starting with "push-" */ |
| + | int push_callback(CURL *parent, |
| + | CURL *easy, |
| + | size_t num_headers, |
| + | struct curl_pushheaders *headers, |
| + | void *clientp) |
| + | { |
| + | char *headp; |
| + | int *transfers = (int *)clientp; |
| + | FILE *out; |
| + | headp = curl_pushheader_byname(headers, ":path"); |
| + | if(headp && !strncmp(headp, "/push-", 6)) { |
| + | fprintf(stderr, "The PATH is %s\n", headp); |
| + | |
| + | /* save the push here */ |
| + | out = fopen("pushed-stream", "wb"); |
| + | |
| + | /* write to this file */ |
| + | curl_easy_setopt(easy, CURLOPT_WRITEDATA, out); |
| + | |
| + | (*transfers)++; /* one more */ |
| + | |
| + | return CURL_PUSH_OK; |
| + | } |
| + | return CURL_PUSH_DENY; |
| + | } |
| + | |
| + | int main(void) |
| + | { |
| + | int counter; |
| + | CURLM *multi = curl_multi_init(); |
| + | curl_multi_setopt(multi, CURLMOPT_PUSHFUNCTION, push_callback); |
| + | curl_multi_setopt(multi, CURLMOPT_PUSHDATA, &counter); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.44.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| @@ -1,32 +1,23 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLMOPT_PUSHFUNCTION 3 "1 Jun 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLMOPT_PUSHFUNCTION \- callback that approves or denies server pushes |
| - | .SH SYNOPSIS |
| - | .nf |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLMOPT_PUSHFUNCTION |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLMOPT_PIPELINING (3) |
| + | - CURLMOPT_PUSHDATA (3) |
| + | - CURLOPT_PIPEWAIT (3) |
| + | - RFC 7540 |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLMOPT_PUSHFUNCTION - callback that approves or denies server pushes |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| int curl_push_callback(CURL *parent, | |
| @@ -37,60 +28,79 @@ int curl_push_callback(CURL *parent, | |
| CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PUSHFUNCTION, | |
| curl_push_callback func); | |
| - | .fi |
| - | .SH DESCRIPTION |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| This callback gets called when a new HTTP/2 stream is being pushed by the | |
| server (using the PUSH_PROMISE frame). If no push callback is set, all offered | |
| pushes are denied automatically. | |
| - | .SH CALLBACK DESCRIPTION |
| + | |
| + | # CALLBACK DESCRIPTION |
| + | |
| The callback gets its arguments like this: | |
| - | \fIparent\fP is the handle of the stream on which this push arrives. The new |
| + | *parent* is the handle of the stream on which this push arrives. The new |
| handle has been duplicated from the parent, meaning that it has gotten all its | |
| options inherited. It is then up to the application to alter any options if | |
| desired. | |
| - | \fIeasy\fP is a newly created handle that represents this upcoming transfer. |
| + | *easy* is a newly created handle that represents this upcoming transfer. |
| - | \fInum_headers\fP is the number of name+value pairs that was received and can |
| + | *num_headers* is the number of name+value pairs that was received and can |
| be accessed | |
| - | \fIheaders\fP is a handle used to access push headers using the accessor |
| + | *headers* is a handle used to access push headers using the accessor |
| functions described below. This only accesses and provides the PUSH_PROMISE | |
| headers, the normal response headers are provided in the header callback as | |
| usual. | |
| - | \fIclientp\fP is the pointer set with \fICURLMOPT_PUSHDATA(3)\fP |
| + | *clientp* is the pointer set with CURLMOPT_PUSHDATA(3) |
| If the callback returns CURL_PUSH_OK, the new easy handle is added to the | |
| multi handle, the callback must not do that by itself. | |
| The callback can access PUSH_PROMISE headers with two accessor | |
| functions. These functions can only be used from within this callback and they | |
| - | can only access the PUSH_PROMISE headers: \fIcurl_pushheader_byname(3)\fP and |
| - | \fIcurl_pushheader_bynum(3)\fP. The normal response headers are passed to the |
| + | can only access the PUSH_PROMISE headers: curl_pushheader_byname(3) and |
| + | curl_pushheader_bynum(3). The normal response headers are passed to the |
| header callback for pushed streams just as for normal streams. | |
| - | The header fields can also be accessed with \fIcurl_easy_header(3)\fP, |
| + | The header fields can also be accessed with curl_easy_header(3), |
| introduced in later libcurl versions. | |
| - | .SH CALLBACK RETURN VALUE |
| - | .IP "CURL_PUSH_OK (0)" |
| + | |
| + | # CALLBACK RETURN VALUE |
| + | |
| + | ## CURL_PUSH_OK (0) |
| + | |
| The application has accepted the stream and it can now start receiving data, | |
| the ownership of the CURL handle has been taken over by the application. | |
| - | .IP "CURL_PUSH_DENY (1)" |
| + | |
| + | ## CURL_PUSH_DENY (1) |
| + | |
| The callback denies the stream and no data reaches the application, the easy | |
| handle is destroyed by libcurl. | |
| - | .IP "CURL_PUSH_ERROROUT (2)" |
| + | |
| + | ## CURL_PUSH_ERROROUT (2) |
| + | |
| Returning this code rejects the pushed stream and returns an error back on the | |
| parent stream making it get closed with an error. (Added in 7.72.0) | |
| - | .IP * |
| + | |
| + | ## * |
| + | |
| All other return codes are reserved for future use. | |
| - | .SH DEFAULT |
| + | |
| + | # DEFAULT |
| + | |
| NULL, no callback | |
| - | .SH PROTOCOLS |
| + | |
| + | # PROTOCOLS |
| + | |
| HTTP(S) (HTTP/2 only) | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| #include <string.h> | |
| /* only allow pushes for file names starting with "push-" */ | |
| @@ -105,7 +115,7 @@ int push_callback(CURL *parent, | |
| FILE *out; | |
| headp = curl_pushheader_byname(headers, ":path"); | |
| if(headp && !strncmp(headp, "/push-", 6)) { | |
| - | fprintf(stderr, "The PATH is %s\\n", headp); |
| + | fprintf(stderr, "The PATH is %s\n", headp); |
| /* save the push here */ | |
| out = fopen("pushed-stream", "wb"); | |
| @@ -127,13 +137,12 @@ int main(void) | |
| curl_multi_setopt(multi, CURLMOPT_PUSHFUNCTION, push_callback); | |
| curl_multi_setopt(multi, CURLMOPT_PUSHDATA, &counter); | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| Added in 7.44.0 | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. | |
| - | .SH "SEE ALSO" |
| - | .BR CURLMOPT_PUSHDATA (3), |
| - | .BR CURLMOPT_PIPELINING (3), |
| - | .BR CURLOPT_PIPEWAIT (3), |
| - | .BR RFC 7540 |
| @@ -1,83 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLMOPT_SOCKETDATA 3 "3 Nov 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLMOPT_SOCKETDATA \- custom pointer passed to the socket callback |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_SOCKETDATA, void *pointer); |
| - | .SH DESCRIPTION |
| - | A data \fIpointer\fP to pass to the socket callback set with the |
| - | \fICURLMOPT_SOCKETFUNCTION(3)\fP option. |
| - | |
| - | This pointer is not touched by libcurl but is only passed in as the socket |
| - | callbacks's \fBclientp\fP argument. |
| - | .SH DEFAULT |
| - | NULL |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | struct priv { |
| - | void *ours; |
| - | }; |
| - | |
| - | static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp) |
| - | { |
| - | struct priv *p = sockp; |
| - | printf("my ptr: %p\\n", p->ours); |
| - | |
| - | if(what == CURL_POLL_REMOVE) { |
| - | /* remove the socket from our collection */ |
| - | } |
| - | if(what & CURL_POLL_IN) { |
| - | /* wait for read on this socket */ |
| - | } |
| - | if(what & CURL_POLL_OUT) { |
| - | /* wait for write on this socket */ |
| - | } |
| - | |
| - | return 0; |
| - | } |
| - | |
| - | int main(void) |
| - | { |
| - | struct priv setup; |
| - | CURLM *multi = curl_multi_init(); |
| - | /* ... use socket callback and custom pointer */ |
| - | curl_multi_setopt(multi, CURLMOPT_SOCKETFUNCTION, sock_cb); |
| - | curl_multi_setopt(multi, CURLMOPT_SOCKETDATA, &setup); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.15.4 |
| - | .SH RETURN VALUE |
| - | Returns CURLM_OK. |
| - | .SH "SEE ALSO" |
| - | .BR curl_multi_socket_action (3), |
| - | .BR CURLMOPT_SOCKETFUNCTION (3), |
| - | .BR CURLMOPT_TIMERFUNCTION (3) |
| @@ -0,0 +1,82 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLMOPT_SOCKETDATA |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLMOPT_SOCKETFUNCTION (3) |
| + | - CURLMOPT_TIMERFUNCTION (3) |
| + | - curl_multi_socket_action (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLMOPT_SOCKETDATA - custom pointer passed to the socket callback |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_SOCKETDATA, void *pointer); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | A data *pointer* to pass to the socket callback set with the |
| + | CURLMOPT_SOCKETFUNCTION(3) option. |
| + | |
| + | This pointer is not touched by libcurl but is only passed in as the socket |
| + | callbacks's **clientp** argument. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | struct priv { |
| + | void *ours; |
| + | }; |
| + | |
| + | static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp) |
| + | { |
| + | struct priv *p = sockp; |
| + | printf("my ptr: %p\n", p->ours); |
| + | |
| + | if(what == CURL_POLL_REMOVE) { |
| + | /* remove the socket from our collection */ |
| + | } |
| + | if(what & CURL_POLL_IN) { |
| + | /* wait for read on this socket */ |
| + | } |
| + | if(what & CURL_POLL_OUT) { |
| + | /* wait for write on this socket */ |
| + | } |
| + | |
| + | return 0; |
| + | } |
| + | |
| + | int main(void) |
| + | { |
| + | struct priv setup; |
| + | CURLM *multi = curl_multi_init(); |
| + | /* ... use socket callback and custom pointer */ |
| + | curl_multi_setopt(multi, CURLMOPT_SOCKETFUNCTION, sock_cb); |
| + | curl_multi_setopt(multi, CURLMOPT_SOCKETDATA, &setup); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.15.4 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLM_OK. |
| @@ -1,126 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLMOPT_SOCKETFUNCTION 3 "3 Nov 2016" libcurl libcurl |
| - | .SH NAME |
| - | CURLMOPT_SOCKETFUNCTION \- callback informed about what to wait for |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | int socket_callback(CURL *easy, /* easy handle */ |
| - | curl_socket_t s, /* socket */ |
| - | int what, /* describes the socket */ |
| - | void *clientp, /* private callback pointer */ |
| - | void *socketp); /* private socket pointer */ |
| - | |
| - | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_SOCKETFUNCTION, socket_callback); |
| - | .SH DESCRIPTION |
| - | Pass a pointer to your callback function, which should match the prototype |
| - | shown above. |
| - | |
| - | When the \fIcurl_multi_socket_action(3)\fP function is called, it uses this |
| - | callback to inform the application about updates in the socket (file |
| - | descriptor) status by doing none, one, or multiple calls to the |
| - | \fBsocket_callback\fP. The callback function gets status updates with changes |
| - | since the previous time the callback was called. If the given callback pointer |
| - | is set to NULL, no callback is called. |
| - | |
| - | libcurl then expects the application to monitor the sockets for the specific |
| - | activities and tell libcurl again when something happens on one of them. Tell |
| - | libcurl by calling \fIcurl_multi_socket_action(3)\fP. |
| - | .SH "CALLBACK ARGUMENTS" |
| - | \fIeasy\fP identifies the specific transfer for which this update is related. |
| - | |
| - | \fIs\fP is the specific socket this function invocation concerns. If the |
| - | \fBwhat\fP argument is not CURL_POLL_REMOVE then it holds information about |
| - | what activity on this socket the application is supposed to |
| - | monitor. Subsequent calls to this callback might update the \fBwhat\fP bits |
| - | for a socket that is already monitored. |
| - | |
| - | The socket callback should return 0 on success, and -1 on error. If this |
| - | callback returns error, \fBall\fP transfers currently in progress in this |
| - | multi handle are aborted and made to fail. |
| - | |
| - | \fBclientp\fP is set with \fICURLMOPT_SOCKETDATA(3)\fP. |
| - | |
| - | \fBsocketp\fP is set with \fIcurl_multi_assign(3)\fP or NULL. |
| - | |
| - | The \fBwhat\fP parameter informs the callback on the status of the given |
| - | socket. It can hold one of these values: |
| - | .IP CURL_POLL_IN |
| - | Wait for incoming data. For the socket to become readable. |
| - | .IP CURL_POLL_OUT |
| - | Wait for outgoing data. For the socket to become writable. |
| - | .IP CURL_POLL_INOUT |
| - | Wait for incoming and outgoing data. For the socket to become readable or |
| - | writable. |
| - | .IP CURL_POLL_REMOVE |
| - | The specified socket/file descriptor is no longer used by libcurl for any |
| - | active transfer. It might soon be added again. |
| - | .SH DEFAULT |
| - | NULL (no callback) |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | struct priv { |
| - | void *ours; |
| - | }; |
| - | |
| - | static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp) |
| - | { |
| - | struct priv *p = sockp; |
| - | printf("our ptr: %p\\n", p->ours); |
| - | |
| - | if(what == CURL_POLL_REMOVE) { |
| - | /* remove the socket from our collection */ |
| - | } |
| - | if(what & CURL_POLL_IN) { |
| - | /* wait for read on this socket */ |
| - | } |
| - | if(what & CURL_POLL_OUT) { |
| - | /* wait for write on this socket */ |
| - | } |
| - | |
| - | return 0; |
| - | } |
| - | |
| - | int main(void) |
| - | { |
| - | struct priv setup; |
| - | CURLM *multi = curl_multi_init(); |
| - | /* ... use socket callback and custom pointer */ |
| - | curl_multi_setopt(multi, CURLMOPT_SOCKETFUNCTION, sock_cb); |
| - | curl_multi_setopt(multi, CURLMOPT_SOCKETDATA, &setup); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.15.4 |
| - | .SH RETURN VALUE |
| - | Returns CURLM_OK. |
| - | .SH "SEE ALSO" |
| - | .BR curl_multi_socket_action (3), |
| - | .BR CURLMOPT_SOCKETDATA (3), |
| - | .BR CURLMOPT_TIMERFUNCTION (3) |
| @@ -0,0 +1,135 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLMOPT_SOCKETFUNCTION |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLMOPT_SOCKETDATA (3) |
| + | - CURLMOPT_TIMERFUNCTION (3) |
| + | - curl_multi_socket_action (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLMOPT_SOCKETFUNCTION - callback informed about what to wait for |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | int socket_callback(CURL *easy, /* easy handle */ |
| + | curl_socket_t s, /* socket */ |
| + | int what, /* describes the socket */ |
| + | void *clientp, /* private callback pointer */ |
| + | void *socketp); /* private socket pointer */ |
| + | |
| + | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_SOCKETFUNCTION, socket_callback); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to your callback function, which should match the prototype |
| + | shown above. |
| + | |
| + | When the curl_multi_socket_action(3) function is called, it uses this |
| + | callback to inform the application about updates in the socket (file |
| + | descriptor) status by doing none, one, or multiple calls to the |
| + | **socket_callback**. The callback function gets status updates with changes |
| + | since the previous time the callback was called. If the given callback pointer |
| + | is set to NULL, no callback is called. |
| + | |
| + | libcurl then expects the application to monitor the sockets for the specific |
| + | activities and tell libcurl again when something happens on one of them. Tell |
| + | libcurl by calling curl_multi_socket_action(3). |
| + | |
| + | # CALLBACK ARGUMENTS |
| + | |
| + | *easy* identifies the specific transfer for which this update is related. |
| + | |
| + | *s* is the specific socket this function invocation concerns. If the |
| + | **what** argument is not CURL_POLL_REMOVE then it holds information about |
| + | what activity on this socket the application is supposed to |
| + | monitor. Subsequent calls to this callback might update the **what** bits |
| + | for a socket that is already monitored. |
| + | |
| + | The socket callback should return 0 on success, and -1 on error. If this |
| + | callback returns error, **all** transfers currently in progress in this |
| + | multi handle are aborted and made to fail. |
| + | |
| + | **clientp** is set with CURLMOPT_SOCKETDATA(3). |
| + | |
| + | **socketp** is set with curl_multi_assign(3) or NULL. |
| + | |
| + | The **what** parameter informs the callback on the status of the given |
| + | socket. It can hold one of these values: |
| + | |
| + | ## CURL_POLL_IN |
| + | |
| + | Wait for incoming data. For the socket to become readable. |
| + | |
| + | ## CURL_POLL_OUT |
| + | |
| + | Wait for outgoing data. For the socket to become writable. |
| + | |
| + | ## CURL_POLL_INOUT |
| + | |
| + | Wait for incoming and outgoing data. For the socket to become readable or |
| + | writable. |
| + | |
| + | ## CURL_POLL_REMOVE |
| + | |
| + | The specified socket/file descriptor is no longer used by libcurl for any |
| + | active transfer. It might soon be added again. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL (no callback) |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | struct priv { |
| + | void *ours; |
| + | }; |
| + | |
| + | static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp) |
| + | { |
| + | struct priv *p = sockp; |
| + | printf("our ptr: %p\n", p->ours); |
| + | |
| + | if(what == CURL_POLL_REMOVE) { |
| + | /* remove the socket from our collection */ |
| + | } |
| + | if(what & CURL_POLL_IN) { |
| + | /* wait for read on this socket */ |
| + | } |
| + | if(what & CURL_POLL_OUT) { |
| + | /* wait for write on this socket */ |
| + | } |
| + | |
| + | return 0; |
| + | } |
| + | |
| + | int main(void) |
| + | { |
| + | struct priv setup; |
| + | CURLM *multi = curl_multi_init(); |
| + | /* ... use socket callback and custom pointer */ |
| + | curl_multi_setopt(multi, CURLMOPT_SOCKETFUNCTION, sock_cb); |
| + | curl_multi_setopt(multi, CURLMOPT_SOCKETDATA, &setup); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.15.4 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLM_OK. |
| @@ -1,76 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLMOPT_TIMERDATA 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLMOPT_TIMERDATA \- custom pointer to pass to timer callback |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_TIMERDATA, void *pointer); |
| - | .SH DESCRIPTION |
| - | A data \fBpointer\fP to pass to the timer callback set with the |
| - | \fICURLMOPT_TIMERFUNCTION(3)\fP option. |
| - | |
| - | This pointer is not touched by libcurl but is only be passed in to the timer |
| - | callbacks's \fBclientp\fP argument. |
| - | .SH DEFAULT |
| - | NULL |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | struct priv { |
| - | void *custom; |
| - | }; |
| - | |
| - | static int timerfunc(CURLM *multi, long timeout_ms, void *clientp) |
| - | { |
| - | struct priv *mydata = clientp; |
| - | printf("our ptr: %p\\n", mydata->custom); |
| - | |
| - | if(timeout_ms) { |
| - | /* this is the new single timeout to wait for */ |
| - | } |
| - | else { |
| - | /* delete the timeout, nothing to wait for now */ |
| - | } |
| - | } |
| - | |
| - | int main(void) |
| - | { |
| - | struct priv mydata; |
| - | CURLM *multi = curl_multi_init(); |
| - | curl_multi_setopt(multi, CURLMOPT_TIMERFUNCTION, timerfunc); |
| - | curl_multi_setopt(multi, CURLMOPT_TIMERDATA, &mydata); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.16.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLMOPT_TIMERFUNCTION (3), |
| - | .BR CURLMOPT_SOCKETFUNCTION (3) |
| @@ -0,0 +1,75 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLMOPT_TIMERDATA |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLMOPT_SOCKETFUNCTION (3) |
| + | - CURLMOPT_TIMERFUNCTION (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLMOPT_TIMERDATA - custom pointer to pass to timer callback |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_TIMERDATA, void *pointer); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | A data **pointer** to pass to the timer callback set with the |
| + | CURLMOPT_TIMERFUNCTION(3) option. |
| + | |
| + | This pointer is not touched by libcurl but is only be passed in to the timer |
| + | callbacks's **clientp** argument. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | struct priv { |
| + | void *custom; |
| + | }; |
| + | |
| + | static int timerfunc(CURLM *multi, long timeout_ms, void *clientp) |
| + | { |
| + | struct priv *mydata = clientp; |
| + | printf("our ptr: %p\n", mydata->custom); |
| + | |
| + | if(timeout_ms) { |
| + | /* this is the new single timeout to wait for */ |
| + | } |
| + | else { |
| + | /* delete the timeout, nothing to wait for now */ |
| + | } |
| + | } |
| + | |
| + | int main(void) |
| + | { |
| + | struct priv mydata; |
| + | CURLM *multi = curl_multi_init(); |
| + | curl_multi_setopt(multi, CURLMOPT_TIMERFUNCTION, timerfunc); |
| + | curl_multi_setopt(multi, CURLMOPT_TIMERDATA, &mydata); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.16.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| @@ -1,104 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLMOPT_TIMERFUNCTION 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLMOPT_TIMERFUNCTION \- callback to receive timeout values |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | int timer_callback(CURLM *multi, /* multi handle */ |
| - | long timeout_ms, /* timeout in number of ms */ |
| - | void *clientp); /* private callback pointer */ |
| - | |
| - | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_TIMERFUNCTION, timer_callback); |
| - | .SH DESCRIPTION |
| - | Pass a pointer to your callback function, which should match the prototype |
| - | shown above. |
| - | |
| - | Certain features, such as timeouts and retries, require you to call libcurl |
| - | even when there is no activity on the file descriptors. |
| - | |
| - | Your callback function \fBtimer_callback\fP should install a non-repeating |
| - | timer with an expire time of \fBtimeout_ms\fP milliseconds. When that timer |
| - | fires, call either \fIcurl_multi_socket_action(3)\fP or |
| - | \fIcurl_multi_perform(3)\fP, depending on which interface you use. |
| - | |
| - | A \fBtimeout_ms\fP value of -1 passed to this callback means you should delete |
| - | the timer. All other values are valid expire times in number of milliseconds. |
| - | |
| - | The \fBtimer_callback\fP is called when the timeout expire time is changed. |
| - | |
| - | The \fBclientp\fP pointer is set with \fICURLMOPT_TIMERDATA(3)\fP. |
| - | |
| - | The timer callback should return 0 on success, and -1 on error. If this |
| - | callback returns error, \fBall\fP transfers currently in progress in this |
| - | multi handle are aborted and made to fail. |
| - | |
| - | This callback can be used instead of, or in addition to, |
| - | \fIcurl_multi_timeout(3)\fP. |
| - | |
| - | \fBWARNING:\fP do not call libcurl directly from within the callback itself |
| - | when the \fBtimeout_ms\fP value is zero, since it risks triggering an |
| - | unpleasant recursive behavior that immediately calls another call to the |
| - | callback with a zero timeout... |
| - | .SH DEFAULT |
| - | NULL |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | struct priv { |
| - | void *custom; |
| - | }; |
| - | |
| - | static int timerfunc(CURLM *multi, long timeout_ms, void *clientp) |
| - | { |
| - | struct priv *mydata = clientp; |
| - | printf("our ptr: %p\\n", mydata->custom); |
| - | |
| - | if(timeout_ms) { |
| - | /* this is the new single timeout to wait for */ |
| - | } |
| - | else { |
| - | /* delete the timeout, nothing to wait for now */ |
| - | } |
| - | } |
| - | |
| - | int main(void) |
| - | { |
| - | struct priv mydata; |
| - | CURLM *multi = curl_multi_init(); |
| - | curl_multi_setopt(multi, CURLMOPT_TIMERFUNCTION, timerfunc); |
| - | curl_multi_setopt(multi, CURLMOPT_TIMERDATA, &mydata); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.16.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLMOPT_TIMERDATA (3), |
| - | .BR CURLMOPT_SOCKETFUNCTION (3) |
| @@ -0,0 +1,103 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLMOPT_TIMERFUNCTION |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLMOPT_SOCKETFUNCTION (3) |
| + | - CURLMOPT_TIMERDATA (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLMOPT_TIMERFUNCTION - callback to receive timeout values |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | int timer_callback(CURLM *multi, /* multi handle */ |
| + | long timeout_ms, /* timeout in number of ms */ |
| + | void *clientp); /* private callback pointer */ |
| + | |
| + | CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_TIMERFUNCTION, timer_callback); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to your callback function, which should match the prototype |
| + | shown above. |
| + | |
| + | Certain features, such as timeouts and retries, require you to call libcurl |
| + | even when there is no activity on the file descriptors. |
| + | |
| + | Your callback function **timer_callback** should install a non-repeating |
| + | timer with an expire time of **timeout_ms** milliseconds. When that timer |
| + | fires, call either curl_multi_socket_action(3) or |
| + | curl_multi_perform(3), depending on which interface you use. |
| + | |
| + | A **timeout_ms** value of -1 passed to this callback means you should delete |
| + | the timer. All other values are valid expire times in number of milliseconds. |
| + | |
| + | The **timer_callback** is called when the timeout expire time is changed. |
| + | |
| + | The **clientp** pointer is set with CURLMOPT_TIMERDATA(3). |
| + | |
| + | The timer callback should return 0 on success, and -1 on error. If this |
| + | callback returns error, **all** transfers currently in progress in this |
| + | multi handle are aborted and made to fail. |
| + | |
| + | This callback can be used instead of, or in addition to, |
| + | curl_multi_timeout(3). |
| + | |
| + | **WARNING:** do not call libcurl directly from within the callback itself |
| + | when the **timeout_ms** value is zero, since it risks triggering an |
| + | unpleasant recursive behavior that immediately calls another call to the |
| + | callback with a zero timeout... |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | struct priv { |
| + | void *custom; |
| + | }; |
| + | |
| + | static int timerfunc(CURLM *multi, long timeout_ms, void *clientp) |
| + | { |
| + | struct priv *mydata = clientp; |
| + | printf("our ptr: %p\n", mydata->custom); |
| + | |
| + | if(timeout_ms) { |
| + | /* this is the new single timeout to wait for */ |
| + | } |
| + | else { |
| + | /* delete the timeout, nothing to wait for now */ |
| + | } |
| + | } |
| + | |
| + | int main(void) |
| + | { |
| + | struct priv mydata; |
| + | CURLM *multi = curl_multi_init(); |
| + | curl_multi_setopt(multi, CURLMOPT_TIMERFUNCTION, timerfunc); |
| + | curl_multi_setopt(multi, CURLMOPT_TIMERDATA, &mydata); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.16.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. |
| @@ -1,73 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_ABSTRACT_UNIX_SOCKET 3 "08 Jan 2017" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_ABSTRACT_UNIX_SOCKET \- abstract Unix domain socket |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ABSTRACT_UNIX_SOCKET, |
| - | char *path); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Enables the use of an abstract Unix domain socket instead of establishing a |
| - | TCP connection to a host. The parameter should be a char * to a |
| - | null-terminated string holding the path of the socket. The path is set to |
| - | \fIpath\fP prefixed by a NULL byte. This is the convention for abstract |
| - | sockets, however it should be stressed that the path passed to this function |
| - | should not contain a leading NULL byte. |
| - | |
| - | On non-supporting platforms, the abstract address is interpreted as an empty |
| - | string and fails gracefully, generating a runtime error. |
| - | |
| - | This option shares the same semantics as \fICURLOPT_UNIX_SOCKET_PATH(3)\fP in |
| - | which documentation more details can be found. Internally, these two options |
| - | share the same storage and therefore only one of them can be set per handle. |
| - | .SH DEFAULT |
| - | Default is NULL. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | curl_easy_setopt(curl, CURLOPT_ABSTRACT_UNIX_SOCKET, "/tmp/foo.sock"); |
| - | curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/"); |
| - | |
| - | /* Perform the request */ |
| - | curl_easy_perform(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.53.0. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_UNIX_SOCKET_PATH (3), |
| - | .BR unix (7) |
| @@ -0,0 +1,71 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_ABSTRACT_UNIX_SOCKET |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_UNIX_SOCKET_PATH (3) |
| + | - unix (7) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_ABSTRACT_UNIX_SOCKET - abstract Unix domain socket |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ABSTRACT_UNIX_SOCKET, |
| + | char *path); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Enables the use of an abstract Unix domain socket instead of establishing a |
| + | TCP connection to a host. The parameter should be a char * to a |
| + | null-terminated string holding the path of the socket. The path is set to |
| + | *path* prefixed by a NULL byte. This is the convention for abstract |
| + | sockets, however it should be stressed that the path passed to this function |
| + | should not contain a leading NULL byte. |
| + | |
| + | On non-supporting platforms, the abstract address is interpreted as an empty |
| + | string and fails gracefully, generating a runtime error. |
| + | |
| + | This option shares the same semantics as CURLOPT_UNIX_SOCKET_PATH(3) in |
| + | which documentation more details can be found. Internally, these two options |
| + | share the same storage and therefore only one of them can be set per handle. |
| + | |
| + | # DEFAULT |
| + | |
| + | Default is NULL. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | curl_easy_setopt(curl, CURLOPT_ABSTRACT_UNIX_SOCKET, "/tmp/foo.sock"); |
| + | curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/"); |
| + | |
| + | /* Perform the request */ |
| + | curl_easy_perform(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.53.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,63 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_ACCEPTTIMEOUT_MS 3 "19 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_ACCEPTTIMEOUT_MS \- timeout waiting for FTP server to connect back |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ACCEPTTIMEOUT_MS, long ms); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long telling libcurl the maximum number of milliseconds to wait for a |
| - | server to connect back to libcurl when an active FTP connection is used. |
| - | .SH DEFAULT |
| - | 60000 milliseconds |
| - | .SH PROTOCOLS |
| - | FTP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/path/file"); |
| - | |
| - | /* wait no more than 5 seconds for FTP server responses */ |
| - | curl_easy_setopt(curl, CURLOPT_ACCEPTTIMEOUT_MS, 5000L); |
| - | |
| - | curl_easy_perform(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.24.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_CONNECTTIMEOUT_MS (3), |
| - | .BR CURLOPT_DEBUGFUNCTION (3), |
| - | .BR CURLOPT_STDERR (3) |
| @@ -0,0 +1,61 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_ACCEPTTIMEOUT_MS |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CONNECTTIMEOUT_MS (3) |
| + | - CURLOPT_DEBUGFUNCTION (3) |
| + | - CURLOPT_STDERR (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_ACCEPTTIMEOUT_MS - timeout waiting for FTP server to connect back |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ACCEPTTIMEOUT_MS, long ms); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long telling libcurl the maximum number of milliseconds to wait for a |
| + | server to connect back to libcurl when an active FTP connection is used. |
| + | |
| + | # DEFAULT |
| + | |
| + | 60000 milliseconds |
| + | |
| + | # PROTOCOLS |
| + | |
| + | FTP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/path/file"); |
| + | |
| + | /* wait no more than 5 seconds for FTP server responses */ |
| + | curl_easy_setopt(curl, CURLOPT_ACCEPTTIMEOUT_MS, 5000L); |
| + | |
| + | curl_easy_perform(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.24.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,38 +1,30 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_ACCEPT_ENCODING 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_ACCEPT_ENCODING \- automatic decompression of HTTP downloads |
| - | .SH SYNOPSIS |
| - | .nf |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_ACCEPT_ENCODING |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_HTTPHEADER (3) |
| + | - CURLOPT_HTTP_CONTENT_DECODING (3) |
| + | - CURLOPT_TRANSFER_ENCODING (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_ACCEPT_ENCODING - automatic decompression of HTTP downloads |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ACCEPT_ENCODING, char *enc); | |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a char * argument specifying what encoding you would like. |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a char pointer argument specifying what encoding you would like. |
| Sets the contents of the Accept-Encoding: header sent in an HTTP request, and | |
| enables decoding of a response when a Content-Encoding: header is received. | |
| @@ -46,22 +38,22 @@ set ("") to ask for an Accept-Encoding: header to be used that contains all | |
| built-in supported encodings. | |
| Alternatively, you can specify exactly the encoding or list of encodings you | |
| - | want in the response. The following encodings are supported: \fIidentity\fP, |
| - | meaning non-compressed, \fIdeflate\fP which requests the server to compress |
| - | its response using the zlib algorithm, \fIgzip\fP which requests the gzip |
| - | algorithm, (since curl 7.57.0) \fIbr\fP which is brotli and (since curl |
| - | 7.72.0) \fIzstd\fP which is zstd. Provide them in the string as a |
| - | comma-separated list of accepted encodings, like: \fB"br, gzip, deflate"\fP. |
| - | |
| - | Set \fICURLOPT_ACCEPT_ENCODING(3)\fP to NULL to explicitly disable it, which |
| + | want in the response. The following encodings are supported: *identity*, |
| + | meaning non-compressed, *deflate* which requests the server to compress |
| + | its response using the zlib algorithm, *gzip* which requests the gzip |
| + | algorithm, (since curl 7.57.0) *br* which is brotli and (since curl |
| + | 7.72.0) *zstd* which is zstd. Provide them in the string as a |
| + | comma-separated list of accepted encodings, like: **"br, gzip, deflate"**. |
| + | |
| + | Set CURLOPT_ACCEPT_ENCODING(3) to NULL to explicitly disable it, which |
| makes libcurl not send an Accept-Encoding: header and not decompress received | |
| contents automatically. | |
| You can also opt to just include the Accept-Encoding: header in your request | |
| - | with \fICURLOPT_HTTPHEADER(3)\fP but then there is no automatic decompressing |
| + | with CURLOPT_HTTPHEADER(3) but then there is no automatic decompressing |
| when receiving data. | |
| - | This is a request, not an order; the server may or may not do it. This option |
| + | This is a request, not an order; the server may or may not do it. This option |
| must be set (to any non-NULL value) or else any unsolicited encoding done by | |
| the server is ignored. | |
| @@ -76,12 +68,18 @@ sending the length of the non-compressed content is a common server mistake). | |
| The application does not have to keep the string around after setting this | |
| option. | |
| - | .SH DEFAULT |
| + | |
| + | # DEFAULT |
| + | |
| NULL | |
| - | .SH PROTOCOLS |
| + | |
| + | # PROTOCOLS |
| + | |
| HTTP | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| int main(void) | |
| { | |
| CURL *curl = curl_easy_init(); | |
| @@ -95,18 +93,18 @@ int main(void) | |
| curl_easy_perform(curl); | |
| } | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| This option was called CURLOPT_ENCODING before 7.21.6 | |
| The specific libcurl you are using must have been built with zlib to be able to | |
| decompress gzip and deflate responses, with the brotli library to | |
| decompress brotli responses and with the zstd library to decompress zstd | |
| responses. | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or | |
| CURLE_OUT_OF_MEMORY if there was insufficient heap space. | |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_HTTP_CONTENT_DECODING (3), |
| - | .BR CURLOPT_HTTPHEADER (3), |
| - | .BR CURLOPT_TRANSFER_ENCODING (3) |
| @@ -1,65 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_ADDRESS_SCOPE 3 "19 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_ADDRESS_SCOPE \- scope id for IPv6 addresses |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ADDRESS_SCOPE, long scope); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long specifying the scope id value to use when connecting to IPv6 addresses. |
| - | .SH DEFAULT |
| - | 0 |
| - | .SH PROTOCOLS |
| - | All, when using IPv6 |
| - | .SH EXAMPLE |
| - | .nf |
| - | #include <net/if.h> /* for if_nametoindex() */ |
| - | |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode ret; |
| - | long my_scope_id; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| - | my_scope_id = if_nametoindex("eth0"); |
| - | curl_easy_setopt(curl, CURLOPT_ADDRESS_SCOPE, my_scope_id); |
| - | ret = curl_easy_perform(curl); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.19.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | Returns CURLE_BAD_FUNCTION_ARGUMENT if set to a negative value. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_DEBUGFUNCTION (3), |
| - | .BR CURLOPT_STDERR (3) |
| @@ -0,0 +1,63 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_ADDRESS_SCOPE |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_DEBUGFUNCTION (3) |
| + | - CURLOPT_STDERR (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_ADDRESS_SCOPE - scope id for IPv6 addresses |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ADDRESS_SCOPE, long scope); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long specifying the scope id value to use when connecting to IPv6 addresses. |
| + | |
| + | # DEFAULT |
| + | |
| + | 0 |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All, when using IPv6 |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | #include <net/if.h> /* for if_nametoindex() */ |
| + | |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode ret; |
| + | long my_scope_id; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| + | my_scope_id = if_nametoindex("eth0"); |
| + | curl_easy_setopt(curl, CURLOPT_ADDRESS_SCOPE, my_scope_id); |
| + | ret = curl_easy_perform(curl); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.19.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| + | Returns CURLE_BAD_FUNCTION_ARGUMENT if set to a negative value. |
| @@ -1,94 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_ALTSVC 3 "5 Feb 2019" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_ALTSVC \- alt-svc cache file name |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ALTSVC, char *filename); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass in a pointer to a \fIfilename\fP to instruct libcurl to use that file as |
| - | the Alt-Svc cache to read existing cache contents from and possibly also write |
| - | it back to after a transfer, unless \fBCURLALTSVC_READONLYFILE\fP is set in |
| - | \fICURLOPT_ALTSVC_CTRL(3)\fP. |
| - | |
| - | Specify a blank file name ("") to make libcurl not load from a file at all. |
| - | .SH DEFAULT |
| - | NULL. The alt-svc cache is not read nor written to file. |
| - | .SH PROTOCOLS |
| - | HTTPS |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | curl_easy_setopt(curl, CURLOPT_ALTSVC_CTRL, CURLALTSVC_H1); |
| - | curl_easy_setopt(curl, CURLOPT_ALTSVC, "altsvc-cache.txt"); |
| - | curl_easy_perform(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH "FILE FORMAT" |
| - | A text based file with one line per alt-svc entry and each line consists of |
| - | nine space-separated fields. |
| - | |
| - | An example line could look like |
| - | |
| - | h2 www.example 8443 h3 second.example 443 "20190808 06:18:37" 1 0 |
| - | |
| - | The fields of that line are: |
| - | |
| - | .IP h2 |
| - | ALPN id for the source origin |
| - | .IP www.example |
| - | Host name for the source origin |
| - | .IP 8443 |
| - | Port number for the source origin |
| - | .IP h3 |
| - | ALPN id for the destination host |
| - | .IP second.example |
| - | Host name for the destination host |
| - | .IP 443 |
| - | Port number for the destination host |
| - | .IP 2019* |
| - | Expiration date and time of this entry within double quotes. The date format |
| - | is "YYYYMMDD HH:MM:SS" and the time zone is GMT. |
| - | .IP 1 |
| - | Boolean (1 or 0) if "persist" was set for this entry |
| - | .IP 0 |
| - | Integer priority value (not currently used) |
| - | .SH AVAILABILITY |
| - | Added in 7.64.1 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_ALTSVC_CTRL (3), |
| - | .BR CURLOPT_CONNECT_TO (3), |
| - | .BR CURLOPT_COOKIEFILE (3), |
| - | .BR CURLOPT_RESOLVE (3) |
| @@ -0,0 +1,111 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_ALTSVC |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_ALTSVC_CTRL (3) |
| + | - CURLOPT_CONNECT_TO (3) |
| + | - CURLOPT_COOKIEFILE (3) |
| + | - CURLOPT_RESOLVE (3) |
| + | --- |
| + | <!-- markdown-link-check-disable --> |
| + | # NAME |
| + | |
| + | CURLOPT_ALTSVC - alt-svc cache file name |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ALTSVC, char *filename); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass in a pointer to a *filename* to instruct libcurl to use that file as |
| + | the Alt-Svc cache to read existing cache contents from and possibly also write |
| + | it back to after a transfer, unless **CURLALTSVC_READONLYFILE** is set in |
| + | CURLOPT_ALTSVC_CTRL(3). |
| + | |
| + | Specify a blank file name ("") to make libcurl not load from a file at all. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL. The alt-svc cache is not read nor written to file. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTPS |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | curl_easy_setopt(curl, CURLOPT_ALTSVC_CTRL, CURLALTSVC_H1); |
| + | curl_easy_setopt(curl, CURLOPT_ALTSVC, "altsvc-cache.txt"); |
| + | curl_easy_perform(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # FILE FORMAT |
| + | |
| + | A text based file with one line per alt-svc entry and each line consists of |
| + | nine space-separated fields. |
| + | |
| + | An example line could look like |
| + | |
| + | h2 www.example.com 8443 h3 second.example.com 443 "20190808 06:18:37" 1 0 |
| + | |
| + | The fields of that line are: |
| + | |
| + | ## h2 |
| + | |
| + | ALPN id for the source origin |
| + | |
| + | ## www.example.comp |
| + | |
| + | Host name for the source origin |
| + | |
| + | ## 8443 |
| + | |
| + | Port number for the source origin |
| + | |
| + | ## h3 |
| + | |
| + | ALPN id for the destination host |
| + | |
| + | ## second.example.com |
| + | |
| + | Host name for the destination host |
| + | |
| + | ## 443 |
| + | |
| + | Port number for the destination host |
| + | |
| + | ## 2019* |
| + | |
| + | Expiration date and time of this entry within double quotes. The date format |
| + | is "YYYYMMDD HH:MM:SS" and the time zone is GMT. |
| + | |
| + | ## 1 |
| + | |
| + | Boolean (1 or 0) if "persist" was set for this entry |
| + | |
| + | ## 0 |
| + | |
| + | Integer priority value (not currently used) |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.64.1 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,91 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_ALTSVC_CTRL 3 "5 Feb 2019" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_ALTSVC_CTRL \- control alt-svc behavior |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | #define CURLALTSVC_READONLYFILE (1<<2) |
| - | #define CURLALTSVC_H1 (1<<3) |
| - | #define CURLALTSVC_H2 (1<<4) |
| - | #define CURLALTSVC_H3 (1<<5) |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ALTSVC_CTRL, long bitmask); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Populate the long \fIbitmask\fP with the correct set of features to instruct |
| - | libcurl how to handle Alt-Svc for the transfers using this handle. |
| - | |
| - | libcurl only accepts Alt-Svc headers over a secure transport, meaning |
| - | HTTPS. It also only completes a request to an alternative origin if that |
| - | origin is properly hosted over HTTPS. These requirements are there to make |
| - | sure both the source and the destination are legitimate. |
| - | |
| - | Alternative services are only used when setting up new connections. If there |
| - | exists an existing connection to the host in the connection pool, then that is |
| - | preferred. |
| - | |
| - | Setting any bit enables the alt-svc engine. |
| - | .IP "CURLALTSVC_READONLYFILE" |
| - | Do not write the alt-svc cache back to the file specified with |
| - | \fICURLOPT_ALTSVC(3)\fP even if it gets updated. By default a file specified |
| - | with that option is read and written to as deemed necessary. |
| - | .IP "CURLALTSVC_H1" |
| - | Accept alternative services offered over HTTP/1.1. |
| - | .IP "CURLALTSVC_H2" |
| - | Accept alternative services offered over HTTP/2. This is only used if libcurl |
| - | was also built to actually support HTTP/2, otherwise this bit is ignored. |
| - | .IP "CURLALTSVC_H3" |
| - | Accept alternative services offered over HTTP/3. This is only used if libcurl |
| - | was also built to actually support HTTP/3, otherwise this bit is ignored. |
| - | .SH DEFAULT |
| - | Alt-Svc handling is disabled by default. If \fICURLOPT_ALTSVC(3)\fP is set, |
| - | \fICURLOPT_ALTSVC_CTRL(3)\fP has a default value corresponding to |
| - | CURLALTSVC_H1 | CURLALTSVC_H2 | CURLALTSVC_H3 - the HTTP/2 and HTTP/3 bits are |
| - | only set if libcurl was built with support for those versions. |
| - | .SH PROTOCOLS |
| - | HTTPS |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | curl_easy_setopt(curl, CURLOPT_ALTSVC_CTRL, (long)CURLALTSVC_H1); |
| - | curl_easy_setopt(curl, CURLOPT_ALTSVC, "altsvc-cache.txt"); |
| - | curl_easy_perform(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.64.1 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_ALTSVC (3), |
| - | .BR CURLOPT_CONNECT_TO (3), |
| - | .BR CURLOPT_RESOLVE (3) |
| @@ -0,0 +1,97 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_ALTSVC_CTRL |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_ALTSVC (3) |
| + | - CURLOPT_CONNECT_TO (3) |
| + | - CURLOPT_RESOLVE (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_ALTSVC_CTRL - control alt-svc behavior |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | #define CURLALTSVC_READONLYFILE (1<<2) |
| + | #define CURLALTSVC_H1 (1<<3) |
| + | #define CURLALTSVC_H2 (1<<4) |
| + | #define CURLALTSVC_H3 (1<<5) |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ALTSVC_CTRL, long bitmask); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Populate the long *bitmask* with the correct set of features to instruct |
| + | libcurl how to handle Alt-Svc for the transfers using this handle. |
| + | |
| + | libcurl only accepts Alt-Svc headers over a secure transport, meaning |
| + | HTTPS. It also only completes a request to an alternative origin if that |
| + | origin is properly hosted over HTTPS. These requirements are there to make |
| + | sure both the source and the destination are legitimate. |
| + | |
| + | Alternative services are only used when setting up new connections. If there |
| + | exists an existing connection to the host in the connection pool, then that is |
| + | preferred. |
| + | |
| + | Setting any bit enables the alt-svc engine. |
| + | |
| + | ## CURLALTSVC_READONLYFILE |
| + | |
| + | Do not write the alt-svc cache back to the file specified with |
| + | CURLOPT_ALTSVC(3) even if it gets updated. By default a file specified |
| + | with that option is read and written to as deemed necessary. |
| + | |
| + | ## CURLALTSVC_H1 |
| + | |
| + | Accept alternative services offered over HTTP/1.1. |
| + | |
| + | ## CURLALTSVC_H2 |
| + | |
| + | Accept alternative services offered over HTTP/2. This is only used if libcurl |
| + | was also built to actually support HTTP/2, otherwise this bit is ignored. |
| + | |
| + | ## CURLALTSVC_H3 |
| + | |
| + | Accept alternative services offered over HTTP/3. This is only used if libcurl |
| + | was also built to actually support HTTP/3, otherwise this bit is ignored. |
| + | |
| + | # DEFAULT |
| + | |
| + | Alt-Svc handling is disabled by default. If CURLOPT_ALTSVC(3) is set, |
| + | CURLOPT_ALTSVC_CTRL(3) has a default value corresponding to |
| + | CURLALTSVC_H1 | CURLALTSVC_H2 | CURLALTSVC_H3 - the HTTP/2 and HTTP/3 bits are |
| + | only set if libcurl was built with support for those versions. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTPS |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | curl_easy_setopt(curl, CURLOPT_ALTSVC_CTRL, (long)CURLALTSVC_H1); |
| + | curl_easy_setopt(curl, CURLOPT_ALTSVC, "altsvc-cache.txt"); |
| + | curl_easy_perform(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.64.1 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,63 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_APPEND 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_APPEND \- append to the remote file |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_APPEND, long append); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | A long parameter set to 1 tells the library to append to the remote file |
| - | instead of overwrite it. This is only useful when uploading to an FTP site. |
| - | .SH DEFAULT |
| - | 0 (disabled) |
| - | .SH PROTOCOLS |
| - | FTP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/to/newfile"); |
| - | curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L); |
| - | curl_easy_setopt(curl, CURLOPT_APPEND, 1L); |
| - | |
| - | curl_easy_perform(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This option was known as CURLOPT_FTPAPPEND up to 7.16.4 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_DIRLISTONLY (3), |
| - | .BR CURLOPT_RESUME_FROM (3), |
| - | .BR CURLOPT_UPLOAD (3) |
| @@ -0,0 +1,61 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_APPEND |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_DIRLISTONLY (3) |
| + | - CURLOPT_RESUME_FROM (3) |
| + | - CURLOPT_UPLOAD (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_APPEND - append to the remote file |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_APPEND, long append); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | A long parameter set to 1 tells the library to append to the remote file |
| + | instead of overwrite it. This is only useful when uploading to an FTP site. |
| + | |
| + | # DEFAULT |
| + | |
| + | 0 (disabled) |
| + | |
| + | # PROTOCOLS |
| + | |
| + | FTP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/to/newfile"); |
| + | curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L); |
| + | curl_easy_setopt(curl, CURLOPT_APPEND, 1L); |
| + | |
| + | curl_easy_perform(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This option was known as CURLOPT_FTPAPPEND up to 7.16.4 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,79 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_AUTOREFERER 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_AUTOREFERER \- automatically update the referer header |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_AUTOREFERER, long autorefer); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long parameter set to 1 to enable this. When enabled, libcurl |
| - | automatically sets the Referer: header field in HTTP requests to the full URL |
| - | when it follows a Location: redirect to a new destination. |
| - | |
| - | The automatic referer is set to the full previous URL even when redirects are |
| - | done cross-origin or following redirects to insecure protocols. This is |
| - | considered a minor privacy leak by some. |
| - | |
| - | With \fICURLINFO_REFERER(3)\fP, applications can extract the actually used |
| - | referer header after the transfer. |
| - | .SH DEFAULT |
| - | 0, disabled |
| - | .SH PROTOCOLS |
| - | HTTP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| - | |
| - | /* follow redirects */ |
| - | curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); |
| - | |
| - | /* set Referer: automatically when following redirects */ |
| - | curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1L); |
| - | |
| - | res = curl_easy_perform(curl); |
| - | |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Along with HTTP |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLINFO_EFFECTIVE_URL (3), |
| - | .BR CURLINFO_REDIRECT_URL (3), |
| - | .BR CURLINFO_REFERER (3), |
| - | .BR CURLOPT_FOLLOWLOCATION (3), |
| - | .BR CURLOPT_REFERER (3) |
| @@ -0,0 +1,77 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_AUTOREFERER |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_EFFECTIVE_URL (3) |
| + | - CURLINFO_REDIRECT_URL (3) |
| + | - CURLINFO_REFERER (3) |
| + | - CURLOPT_FOLLOWLOCATION (3) |
| + | - CURLOPT_REFERER (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_AUTOREFERER - automatically update the referer header |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_AUTOREFERER, long autorefer); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long parameter set to 1 to enable this. When enabled, libcurl |
| + | automatically sets the Referer: header field in HTTP requests to the full URL |
| + | when it follows a Location: redirect to a new destination. |
| + | |
| + | The automatic referer is set to the full previous URL even when redirects are |
| + | done cross-origin or following redirects to insecure protocols. This is |
| + | considered a minor privacy leak by some. |
| + | |
| + | With CURLINFO_REFERER(3), applications can extract the actually used |
| + | referer header after the transfer. |
| + | |
| + | # DEFAULT |
| + | |
| + | 0, disabled |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| + | |
| + | /* follow redirects */ |
| + | curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); |
| + | |
| + | /* set Referer: automatically when following redirects */ |
| + | curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1L); |
| + | |
| + | res = curl_easy_perform(curl); |
| + | |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Along with HTTP |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,111 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.haxx.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_AWS_SIGV4 3 "03 Jun 2020" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_AWS_SIGV4 \- V4 signature |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_AWS_SIGV4, char *param); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Provides AWS V4 signature authentication on HTTP(S) header. |
| - | |
| - | Pass a char * that is the collection of specific arguments are used for |
| - | creating outgoing authentication headers. The format of the \fIparam\fP |
| - | option is: |
| - | .IP provider1[:provider2[:region[:service]]] |
| - | .IP "provider1, provider2" |
| - | The providers arguments are used for generating some authentication parameters |
| - | such as "Algorithm", "date", "request type" and "signed headers". |
| - | .IP region |
| - | The argument is a geographic area of a resources collection. |
| - | It is extracted from the host name specified in the URL if omitted. |
| - | .IP service |
| - | The argument is a function provided by a cloud. |
| - | It is extracted from the host name specified in the URL if omitted. |
| - | |
| - | NOTE: This call set \fICURLOPT_HTTPAUTH(3)\fP to CURLAUTH_AWS_SIGV4. |
| - | Calling \fICURLOPT_HTTPAUTH(3)\fP with CURLAUTH_AWS_SIGV4 is the same |
| - | as calling this with \fB"aws:amz"\fP in parameter. |
| - | |
| - | Example with "Test:Try", when curl uses the algorithm, it generates |
| - | \fB"TEST-HMAC-SHA256"\fP for "Algorithm", \fB"x-try-date"\fP and |
| - | \fB"X-Try-Date"\fP for "date", \fB"test4_request"\fP for "request type", |
| - | \fB"SignedHeaders=content-type;host;x-try-date"\fP for "signed headers" |
| - | |
| - | If you use just "test", instead of "test:try", test is used for every |
| - | generated string. |
| - | .SH DEFAULT |
| - | By default, the value of this parameter is NULL. |
| - | Calling \fICURLOPT_HTTPAUTH(3)\fP with CURLAUTH_AWS_SIGV4 is the same |
| - | as calling this with \fB"aws:amz"\fP in parameter. |
| - | .SH PROTOCOLS |
| - | HTTP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | |
| - | if(curl) { |
| - | curl_easy_setopt(curl, CURLOPT_URL, |
| - | "https://service.region.example.com/uri"); |
| - | curl_easy_setopt(curl, CURLOPT_AWS_SIGV4, "provider1:provider2"); |
| - | |
| - | /* service and region can also be set in CURLOPT_AWS_SIGV4 */ |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/uri"); |
| - | curl_easy_setopt(curl, CURLOPT_AWS_SIGV4, |
| - | "provider1:provider2:region:service"); |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_USERPWD, "MY_ACCESS_KEY:MY_SECRET_KEY"); |
| - | curl_easy_perform(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.75.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH NOTES |
| - | This option overrides the other auth types you might have set in |
| - | \fICURLOPT_HTTPAUTH(3)\fP which should be highlighted as this makes this auth |
| - | method special. This method cannot be combined with other auth types. |
| - | |
| - | A sha256 checksum of the request payload is used as input to the signature |
| - | calculation. For POST requests, this is a checksum of the provided |
| - | \fICURLOPT_POSTFIELDS(3)\fP. Otherwise, it's the checksum of an empty buffer. |
| - | For requests like PUT, you can provide your own checksum in an HTTP header named |
| - | \fBx-provider2-content-sha256\fP. |
| - | |
| - | For \fBaws:s3\fP, a \fBx-amz-content-sha256\fP header is added to every request |
| - | if not already present. For s3 requests with unknown payload, this header takes |
| - | the special value "UNSIGNED-PAYLOAD". |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_HEADEROPT (3), |
| - | .BR CURLOPT_HTTPAUTH (3), |
| - | .BR CURLOPT_HTTPHEADER (3), |
| - | .BR CURLOPT_PROXYAUTH (3) |
| @@ -0,0 +1,118 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_AWS_SIGV4 |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_HEADEROPT (3) |
| + | - CURLOPT_HTTPAUTH (3) |
| + | - CURLOPT_HTTPHEADER (3) |
| + | - CURLOPT_PROXYAUTH (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_AWS_SIGV4 - V4 signature |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_AWS_SIGV4, char *param); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Provides AWS V4 signature authentication on HTTP(S) header. |
| + | |
| + | Pass a char pointer that is the collection of specific arguments are used for |
| + | creating outgoing authentication headers. The format of the *param* option |
| + | is: |
| + | |
| + | ## provider1[:provider2[:region[:service]]] |
| + | |
| + | ## provider1, provider2 |
| + | |
| + | The providers arguments are used for generating some authentication parameters |
| + | such as "Algorithm", "date", "request type" and "signed headers". |
| + | |
| + | ## region |
| + | |
| + | The argument is a geographic area of a resources collection. |
| + | It is extracted from the host name specified in the URL if omitted. |
| + | |
| + | ## service |
| + | |
| + | The argument is a function provided by a cloud. |
| + | It is extracted from the host name specified in the URL if omitted. |
| + | |
| + | NOTE: This call set CURLOPT_HTTPAUTH(3) to CURLAUTH_AWS_SIGV4. |
| + | Calling CURLOPT_HTTPAUTH(3) with CURLAUTH_AWS_SIGV4 is the same |
| + | as calling this with **"aws:amz"** in parameter. |
| + | |
| + | Example with "Test:Try", when curl uses the algorithm, it generates |
| + | **"TEST-HMAC-SHA256"** for "Algorithm", **"x-try-date"** and |
| + | **"X-Try-Date"** for "date", **"test4_request"** for "request type", |
| + | **"SignedHeaders=content-type;host;x-try-date"** for "signed headers" |
| + | |
| + | If you use just "test", instead of "test:try", test is used for every |
| + | generated string. |
| + | |
| + | # DEFAULT |
| + | |
| + | By default, the value of this parameter is NULL. |
| + | Calling CURLOPT_HTTPAUTH(3) with CURLAUTH_AWS_SIGV4 is the same |
| + | as calling this with **"aws:amz"** in parameter. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | |
| + | if(curl) { |
| + | curl_easy_setopt(curl, CURLOPT_URL, |
| + | "https://service.region.example.com/uri"); |
| + | curl_easy_setopt(curl, CURLOPT_AWS_SIGV4, "provider1:provider2"); |
| + | |
| + | /* service and region can also be set in CURLOPT_AWS_SIGV4 */ |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/uri"); |
| + | curl_easy_setopt(curl, CURLOPT_AWS_SIGV4, |
| + | "provider1:provider2:region:service"); |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_USERPWD, "MY_ACCESS_KEY:MY_SECRET_KEY"); |
| + | curl_easy_perform(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.75.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| + | |
| + | # NOTES |
| + | |
| + | This option overrides the other auth types you might have set in |
| + | CURLOPT_HTTPAUTH(3) which should be highlighted as this makes this auth |
| + | method special. This method cannot be combined with other auth types. |
| + | |
| + | A sha256 checksum of the request payload is used as input to the signature |
| + | calculation. For POST requests, this is a checksum of the provided |
| + | CURLOPT_POSTFIELDS(3). Otherwise, it's the checksum of an empty buffer. |
| + | For requests like PUT, you can provide your own checksum in an HTTP header named |
| + | **x-provider2-content-sha256**. |
| + | |
| + | For **aws:s3**, a **x-amz-content-sha256** header is added to every request |
| + | if not already present. For s3 requests with unknown payload, this header takes |
| + | the special value "UNSIGNED-PAYLOAD". |
| @@ -1,81 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_BUFFERSIZE 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_BUFFERSIZE \- receive buffer size |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_BUFFERSIZE, long size); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long specifying your preferred \fIsize\fP (in bytes) for the receive |
| - | buffer in libcurl. The main point of this would be that the write callback |
| - | gets called more often and with smaller chunks. Secondly, for some protocols, |
| - | there is a benefit of having a larger buffer for performance. |
| - | |
| - | This is just treated as a request, not an order. You cannot be guaranteed to |
| - | actually get the given size. |
| - | |
| - | This buffer size is by default \fICURL_MAX_WRITE_SIZE\fP (16kB). The maximum |
| - | buffer size allowed to be set is \fICURL_MAX_READ_SIZE\fP (10MB). The minimum |
| - | buffer size allowed to be set is 1024. |
| - | |
| - | DO NOT set this option on a handle that is currently used for an active |
| - | transfer as that may lead to unintended consequences. |
| - | |
| - | The maximum size was 512kB until 7.88.0. |
| - | .SH DEFAULT |
| - | CURL_MAX_WRITE_SIZE (16kB) |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/foo.bin"); |
| - | |
| - | /* ask libcurl to allocate a larger receive buffer */ |
| - | curl_easy_setopt(curl, CURLOPT_BUFFERSIZE, 120000L); |
| - | |
| - | res = curl_easy_perform(curl); |
| - | |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.10. Growing the buffer was added in 7.53.0. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_MAX_RECV_SPEED_LARGE (3), |
| - | .BR CURLOPT_MAXFILESIZE (3), |
| - | .BR CURLOPT_UPLOAD_BUFFERSIZE (3), |
| - | .BR CURLOPT_WRITEFUNCTION (3) |
| @@ -0,0 +1,79 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_BUFFERSIZE |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_MAXFILESIZE (3) |
| + | - CURLOPT_MAX_RECV_SPEED_LARGE (3) |
| + | - CURLOPT_UPLOAD_BUFFERSIZE (3) |
| + | - CURLOPT_WRITEFUNCTION (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_BUFFERSIZE - receive buffer size |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_BUFFERSIZE, long size); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long specifying your preferred *size* (in bytes) for the receive buffer |
| + | in libcurl. The main point of this would be that the write callback gets |
| + | called more often and with smaller chunks. Secondly, for some protocols, there |
| + | is a benefit of having a larger buffer for performance. |
| + | |
| + | This is just treated as a request, not an order. You cannot be guaranteed to |
| + | actually get the given size. |
| + | |
| + | This buffer size is by default *CURL_MAX_WRITE_SIZE* (16kB). The maximum |
| + | buffer size allowed to be set is *CURL_MAX_READ_SIZE* (10MB). The minimum |
| + | buffer size allowed to be set is 1024. |
| + | |
| + | DO NOT set this option on a handle that is currently used for an active |
| + | transfer as that may lead to unintended consequences. |
| + | |
| + | The maximum size was 512kB until 7.88.0. |
| + | |
| + | # DEFAULT |
| + | |
| + | CURL_MAX_WRITE_SIZE (16kB) |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/foo.bin"); |
| + | |
| + | /* ask libcurl to allocate a larger receive buffer */ |
| + | curl_easy_setopt(curl, CURLOPT_BUFFERSIZE, 120000L); |
| + | |
| + | res = curl_easy_perform(curl); |
| + | |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.10. Growing the buffer was added in 7.53.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,89 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CAINFO 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CAINFO \- path to Certificate Authority (CA) bundle |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAINFO, char *path); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a char * to a null-terminated string naming a file holding one or more |
| - | certificates to verify the peer with. |
| - | |
| - | If \fICURLOPT_SSL_VERIFYPEER(3)\fP is zero and you avoid verifying the |
| - | server's certificate, \fICURLOPT_CAINFO(3)\fP need not even indicate an |
| - | accessible file. |
| - | |
| - | This option is by default set to the system path where libcurl's CA |
| - | certificate bundle is assumed to be stored, as established at build time. |
| - | |
| - | (iOS and macOS) When curl uses Secure Transport this option is supported. If |
| - | the option is not set, then curl uses the certificates in the system and user |
| - | Keychain to verify the peer. |
| - | |
| - | (Schannel) This option is supported for Schannel in Windows 7 or later but we |
| - | recommend not using it until Windows 8 since it works better starting then. |
| - | If the option is not set, then curl uses the certificates in the Windows' |
| - | store of root certificates (the default for Schannel). |
| - | |
| - | The application does not have to keep the string around after setting this |
| - | option. |
| - | |
| - | The default value for this can be figured out with \fICURLINFO_CAINFO(3)\fP. |
| - | .SH DEFAULT |
| - | Built-in system specific. When curl is built with Secure Transport or |
| - | Schannel, this option is not set by default. |
| - | .SH PROTOCOLS |
| - | All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| - | curl_easy_setopt(curl, CURLOPT_CAINFO, "/etc/certs/cabundle.pem"); |
| - | curl_easy_perform(curl); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | For the SSL engines that do not support certificate files the |
| - | \fICURLOPT_CAINFO(3)\fP option is ignored. Schannel support added in libcurl |
| - | 7.60. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or |
| - | CURLE_OUT_OF_MEMORY if there was insufficient heap space. |
| - | .SH "SEE ALSO" |
| - | .BR CURLINFO_CAINFO (3), |
| - | .BR CURLOPT_CA_CACHE_TIMEOUT (3), |
| - | .BR CURLOPT_CAINFO_BLOB (3), |
| - | .BR CURLOPT_CAPATH (3), |
| - | .BR CURLOPT_SSL_VERIFYHOST (3), |
| - | .BR CURLOPT_SSL_VERIFYPEER (3) |
| @@ -0,0 +1,87 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CAINFO |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_CAINFO (3) |
| + | - CURLOPT_CAINFO_BLOB (3) |
| + | - CURLOPT_CAPATH (3) |
| + | - CURLOPT_CA_CACHE_TIMEOUT (3) |
| + | - CURLOPT_SSL_VERIFYHOST (3) |
| + | - CURLOPT_SSL_VERIFYPEER (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CAINFO - path to Certificate Authority (CA) bundle |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAINFO, char *path); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a char pointer to a null-terminated string naming a file holding one or |
| + | more certificates to verify the peer with. |
| + | |
| + | If CURLOPT_SSL_VERIFYPEER(3) is zero and you avoid verifying the |
| + | server's certificate, CURLOPT_CAINFO(3) need not even indicate an |
| + | accessible file. |
| + | |
| + | This option is by default set to the system path where libcurl's CA |
| + | certificate bundle is assumed to be stored, as established at build time. |
| + | |
| + | (iOS and macOS) When curl uses Secure Transport this option is supported. If |
| + | the option is not set, then curl uses the certificates in the system and user |
| + | Keychain to verify the peer. |
| + | |
| + | (Schannel) This option is supported for Schannel in Windows 7 or later but we |
| + | recommend not using it until Windows 8 since it works better starting then. |
| + | If the option is not set, then curl uses the certificates in the Windows' |
| + | store of root certificates (the default for Schannel). |
| + | |
| + | The application does not have to keep the string around after setting this |
| + | option. |
| + | |
| + | The default value for this can be figured out with CURLINFO_CAINFO(3). |
| + | |
| + | # DEFAULT |
| + | |
| + | Built-in system specific. When curl is built with Secure Transport or |
| + | Schannel, this option is not set by default. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| + | curl_easy_setopt(curl, CURLOPT_CAINFO, "/etc/certs/cabundle.pem"); |
| + | curl_easy_perform(curl); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | For the SSL engines that do not support certificate files the |
| + | CURLOPT_CAINFO(3) option is ignored. Schannel support added in libcurl |
| + | 7.60. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or |
| + | CURLE_OUT_OF_MEMORY if there was insufficient heap space. |
| @@ -1,85 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CAINFO_BLOB 3 "31 March 2021" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CAINFO_BLOB \- Certificate Authority (CA) bundle in PEM format |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAINFO_BLOB, |
| - | struct curl_blob *stblob); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a curl_blob structure, which contains information (pointer |
| - | and size) about a memory block with binary data of PEM encoded content holding |
| - | one or more certificates to verify the HTTPS server with. |
| - | |
| - | If the blob is initialized with the flags member of struct curl_blob set to |
| - | CURL_BLOB_COPY, the application does not have to keep the buffer around after |
| - | setting this. |
| - | |
| - | If \fICURLOPT_SSL_VERIFYPEER(3)\fP is zero and you avoid verifying the |
| - | server's certificate, \fICURLOPT_CAINFO_BLOB(3)\fP is not needed. |
| - | |
| - | This option overrides \fICURLOPT_CAINFO(3)\fP. |
| - | .SH DEFAULT |
| - | NULL |
| - | .SH PROTOCOLS |
| - | All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. |
| - | .SH EXAMPLE |
| - | .nf |
| - | #include <string.h> |
| - | |
| - | int main(void) |
| - | { |
| - | char *strpem; /* strpem must point to a PEM string */ |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | struct curl_blob blob; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| - | blob.data = strpem; |
| - | blob.len = strlen(strpem); |
| - | blob.flags = CURL_BLOB_COPY; |
| - | curl_easy_setopt(curl, CURLOPT_CAINFO_BLOB, &blob); |
| - | res = curl_easy_perform(curl); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.77.0. |
| - | |
| - | This option is supported by the BearSSL (since 7.79.0), mbedTLS (since 7.81.0), |
| - | rustls (since 7.82.0), wolfSSL (since 8.2.0), OpenSSL, Secure Transport and Schannel backends. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or |
| - | CURLE_OUT_OF_MEMORY if there was insufficient heap space. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_CAINFO (3), |
| - | .BR CURLOPT_CAPATH (3), |
| - | .BR CURLOPT_SSL_VERIFYPEER (3), |
| - | .BR CURLOPT_SSL_VERIFYHOST (3) |
| @@ -0,0 +1,84 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CAINFO_BLOB |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CAINFO (3) |
| + | - CURLOPT_CAPATH (3) |
| + | - CURLOPT_SSL_VERIFYHOST (3) |
| + | - CURLOPT_SSL_VERIFYPEER (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CAINFO_BLOB - Certificate Authority (CA) bundle in PEM format |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAINFO_BLOB, |
| + | struct curl_blob *stblob); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a curl_blob structure, which contains information (pointer |
| + | and size) about a memory block with binary data of PEM encoded content holding |
| + | one or more certificates to verify the HTTPS server with. |
| + | |
| + | If the blob is initialized with the flags member of struct curl_blob set to |
| + | CURL_BLOB_COPY, the application does not have to keep the buffer around after |
| + | setting this. |
| + | |
| + | If CURLOPT_SSL_VERIFYPEER(3) is zero and you avoid verifying the |
| + | server's certificate, CURLOPT_CAINFO_BLOB(3) is not needed. |
| + | |
| + | This option overrides CURLOPT_CAINFO(3). |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | #include <string.h> |
| + | |
| + | int main(void) |
| + | { |
| + | char *strpem; /* strpem must point to a PEM string */ |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | struct curl_blob blob; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| + | blob.data = strpem; |
| + | blob.len = strlen(strpem); |
| + | blob.flags = CURL_BLOB_COPY; |
| + | curl_easy_setopt(curl, CURLOPT_CAINFO_BLOB, &blob); |
| + | res = curl_easy_perform(curl); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.77.0. |
| + | |
| + | This option is supported by the BearSSL (since 7.79.0), mbedTLS (since |
| + | 7.81.0), rustls (since 7.82.0), wolfSSL (since 8.2.0), OpenSSL, Secure |
| + | Transport and Schannel backends. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or |
| + | CURLE_OUT_OF_MEMORY if there was insufficient heap space. |
| @@ -1,81 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CAPATH 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CAPATH \- directory holding CA certificates |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAPATH, char *capath); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a char * to a null-terminated string naming a directory holding multiple |
| - | CA certificates to verify the peer with. If libcurl is built against OpenSSL, |
| - | the certificate directory must be prepared using the OpenSSL c_rehash utility. |
| - | This makes sense only when used in combination with the |
| - | \fICURLOPT_SSL_VERIFYPEER(3)\fP option. |
| - | |
| - | The \fICURLOPT_CAPATH(3)\fP function apparently does not work in Windows due |
| - | to some limitation in OpenSSL. |
| - | |
| - | The application does not have to keep the string around after setting this |
| - | option. |
| - | |
| - | The default value for this can be figured out with \fICURLINFO_CAPATH(3)\fP. |
| - | .SH DEFAULT |
| - | A default path detected at build time. |
| - | .SH PROTOCOLS |
| - | All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| - | curl_easy_setopt(curl, CURLOPT_CAPATH, "/etc/cert-dir"); |
| - | res = curl_easy_perform(curl); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This option is supported by the OpenSSL, GnuTLS and mbedTLS (since 7.56.0) |
| - | backends. |
| - | .SH RETURN VALUE |
| - | CURLE_OK if supported; or an error such as: |
| - | |
| - | CURLE_NOT_BUILT_IN - Not supported by the SSL backend |
| - | |
| - | CURLE_UNKNOWN_OPTION |
| - | |
| - | CURLE_OUT_OF_MEMORY |
| - | .SH "SEE ALSO" |
| - | .BR CURLINFO_CAPATH (3), |
| - | .BR CURLOPT_CAINFO (3), |
| - | .BR CURLOPT_DEBUGFUNCTION (3), |
| - | .BR CURLOPT_STDERR (3) |
| @@ -0,0 +1,79 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CAPATH |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_CAPATH (3) |
| + | - CURLOPT_CAINFO (3) |
| + | - CURLOPT_DEBUGFUNCTION (3) |
| + | - CURLOPT_STDERR (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CAPATH - directory holding CA certificates |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAPATH, char *capath); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a char pointer to a null-terminated string naming a directory holding |
| + | multiple CA certificates to verify the peer with. If libcurl is built against |
| + | OpenSSL, the certificate directory must be prepared using the OpenSSL c_rehash |
| + | utility. This makes sense only when used in combination with the |
| + | CURLOPT_SSL_VERIFYPEER(3) option. |
| + | |
| + | The CURLOPT_CAPATH(3) function apparently does not work in Windows due |
| + | to some limitation in OpenSSL. |
| + | |
| + | The application does not have to keep the string around after setting this |
| + | option. |
| + | |
| + | The default value for this can be figured out with CURLINFO_CAPATH(3). |
| + | |
| + | # DEFAULT |
| + | |
| + | A default path detected at build time. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| + | curl_easy_setopt(curl, CURLOPT_CAPATH, "/etc/cert-dir"); |
| + | res = curl_easy_perform(curl); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This option is supported by the OpenSSL, GnuTLS and mbedTLS (since 7.56.0) |
| + | backends. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLE_OK if supported; or an error such as: |
| + | |
| + | CURLE_NOT_BUILT_IN - Not supported by the SSL backend |
| + | |
| + | CURLE_UNKNOWN_OPTION |
| + | |
| + | CURLE_OUT_OF_MEMORY |
| @@ -1,84 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CA_CACHE_TIMEOUT 3 "21 Dec 2022" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CA_CACHE_TIMEOUT \- life-time for cached certificate stores |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CA_CACHE_TIMEOUT, long age); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long, this sets the timeout in seconds. This tells libcurl the maximum |
| - | time any cached certificate store it has in memory may be kept and reused for |
| - | new connections. Once the timeout has expired, a subsequent fetch requiring a |
| - | certificate has to reload it. |
| - | |
| - | Building a certificate store from a \fICURLOPT_CAINFO(3)\fP file is a slow |
| - | operation so curl may cache the generated certificate store internally to speed |
| - | up future connections. |
| - | |
| - | Set to zero to completely disable caching, or set to -1 to retain the cached |
| - | store remain forever. By default, libcurl caches this info for 24 hours. |
| - | .SH DEFAULT |
| - | 86400 (24 hours) |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| - | |
| - | /* only reuse certificate stores for a short time */ |
| - | curl_easy_setopt(curl, CURLOPT_CA_CACHE_TIMEOUT, 60L); |
| - | |
| - | res = curl_easy_perform(curl); |
| - | |
| - | /* in this second request, the cache is not used if more than |
| - | sixty seconds passed since the previous connection */ |
| - | res = curl_easy_perform(curl); |
| - | |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This option was added in curl 7.87.0. |
| - | |
| - | This option is supported by OpenSSL and its forks (since 7.87.0) and Schannel |
| - | (since 8.5.0). |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_CAINFO (3), |
| - | .BR CURLOPT_CAINFO_BLOB (3), |
| - | .BR CURLOPT_CAPATH (3), |
| - | .BR CURLOPT_SSL_VERIFYPEER (3), |
| - | .BR CURLOPT_SSL_VERIFYHOST (3) |
| @@ -0,0 +1,82 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CA_CACHE_TIMEOUT |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CAINFO (3) |
| + | - CURLOPT_CAINFO_BLOB (3) |
| + | - CURLOPT_CAPATH (3) |
| + | - CURLOPT_SSL_VERIFYHOST (3) |
| + | - CURLOPT_SSL_VERIFYPEER (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CA_CACHE_TIMEOUT - life-time for cached certificate stores |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CA_CACHE_TIMEOUT, long age); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long, this sets the timeout in seconds. This tells libcurl the maximum |
| + | time any cached certificate store it has in memory may be kept and reused for |
| + | new connections. Once the timeout has expired, a subsequent fetch requiring a |
| + | certificate has to reload it. |
| + | |
| + | Building a certificate store from a CURLOPT_CAINFO(3) file is a slow |
| + | operation so curl may cache the generated certificate store internally to speed |
| + | up future connections. |
| + | |
| + | Set to zero to completely disable caching, or set to -1 to retain the cached |
| + | store remain forever. By default, libcurl caches this info for 24 hours. |
| + | |
| + | # DEFAULT |
| + | |
| + | 86400 (24 hours) |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| + | |
| + | /* only reuse certificate stores for a short time */ |
| + | curl_easy_setopt(curl, CURLOPT_CA_CACHE_TIMEOUT, 60L); |
| + | |
| + | res = curl_easy_perform(curl); |
| + | |
| + | /* in this second request, the cache is not used if more than |
| + | sixty seconds passed since the previous connection */ |
| + | res = curl_easy_perform(curl); |
| + | |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This option was added in curl 7.87.0. |
| + | |
| + | This option is supported by OpenSSL and its forks (since 7.87.0) and Schannel |
| + | (since 8.5.0). |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK |
| @@ -1,92 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CERTINFO 3 "19 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CERTINFO \- request SSL certificate information |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CERTINFO, long certinfo); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long set to 1 to enable libcurl's certificate chain info gatherer. With |
| - | this enabled, libcurl extracts lots of information and data about the |
| - | certificates in the certificate chain used in the SSL connection. This data |
| - | may then be retrieved after a transfer using \fIcurl_easy_getinfo(3)\fP and |
| - | its option \fICURLINFO_CERTINFO(3)\fP. |
| - | .SH DEFAULT |
| - | 0 |
| - | .SH PROTOCOLS |
| - | All TLS-based |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/"); |
| - | |
| - | /* connect to any HTTPS site, trusted or not */ |
| - | curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); |
| - | curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_CERTINFO, 1L); |
| - | |
| - | res = curl_easy_perform(curl); |
| - | |
| - | if(!res) { |
| - | struct curl_certinfo *ci; |
| - | res = curl_easy_getinfo(curl, CURLINFO_CERTINFO, &ci); |
| - | |
| - | if(!res) { |
| - | int i; |
| - | printf("%d certs!\\n", ci->num_of_certs); |
| - | |
| - | for(i = 0; i < ci->num_of_certs; i++) { |
| - | struct curl_slist *slist; |
| - | |
| - | for(slist = ci->certinfo[i]; slist; slist = slist->next) |
| - | printf("%s\\n", slist->data); |
| - | } |
| - | } |
| - | } |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This option is supported by the OpenSSL, GnuTLS, Schannel and Secure |
| - | Transport backends. Schannel support added in 7.50.0. Secure Transport support |
| - | added in 7.79.0. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLINFO_CAINFO (3), |
| - | .BR CURLINFO_CAPATH (3), |
| - | .BR CURLINFO_CERTINFO (3), |
| - | .BR CURLOPT_CAINFO (3), |
| - | .BR CURLOPT_SSL_VERIFYPEER (3) |
| @@ -0,0 +1,90 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CERTINFO |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_CAINFO (3) |
| + | - CURLINFO_CAPATH (3) |
| + | - CURLINFO_CERTINFO (3) |
| + | - CURLOPT_CAINFO (3) |
| + | - CURLOPT_SSL_VERIFYPEER (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CERTINFO - request SSL certificate information |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CERTINFO, long certinfo); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long set to 1 to enable libcurl's certificate chain info gatherer. With |
| + | this enabled, libcurl extracts lots of information and data about the |
| + | certificates in the certificate chain used in the SSL connection. This data |
| + | may then be retrieved after a transfer using curl_easy_getinfo(3) and |
| + | its option CURLINFO_CERTINFO(3). |
| + | |
| + | # DEFAULT |
| + | |
| + | 0 |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All TLS-based |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/"); |
| + | |
| + | /* connect to any HTTPS site, trusted or not */ |
| + | curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); |
| + | curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_CERTINFO, 1L); |
| + | |
| + | res = curl_easy_perform(curl); |
| + | |
| + | if(!res) { |
| + | struct curl_certinfo *ci; |
| + | res = curl_easy_getinfo(curl, CURLINFO_CERTINFO, &ci); |
| + | |
| + | if(!res) { |
| + | int i; |
| + | printf("%d certs!\n", ci->num_of_certs); |
| + | |
| + | for(i = 0; i < ci->num_of_certs; i++) { |
| + | struct curl_slist *slist; |
| + | |
| + | for(slist = ci->certinfo[i]; slist; slist = slist->next) |
| + | printf("%s\n", slist->data); |
| + | } |
| + | } |
| + | } |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This option is supported by the OpenSSL, GnuTLS, Schannel and Secure |
| + | Transport backends. Schannel support added in 7.50.0. Secure Transport support |
| + | added in 7.79.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,32 +1,21 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CHUNK_BGN_FUNCTION 3 "19 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CHUNK_BGN_FUNCTION \- callback before a transfer with FTP wildcard match |
| - | .SH SYNOPSIS |
| - | .nf |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CHUNK_BGN_FUNCTION |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CHUNK_END_FUNCTION (3) |
| + | - CURLOPT_WILDCARDMATCH (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CHUNK_BGN_FUNCTION - callback before a transfer with FTP wildcard match |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| struct curl_fileinfo { | |
| @@ -61,35 +50,44 @@ long chunk_bgn_callback(const void *transfer_info, void *ptr, | |
| CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_BGN_FUNCTION, | |
| chunk_bgn_callback); | |
| - | .SH DESCRIPTION |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| Pass a pointer to your callback function, which should match the prototype | |
| shown above. | |
| This callback function gets called by libcurl before a part of the stream is | |
| going to be transferred (if the transfer supports chunks). | |
| - | The \fItransfer_info\fP pointer points to a \fBcurl_fileinfo\fP struct with |
| + | The *transfer_info* pointer points to a **curl_fileinfo** struct with |
| details about the file that is about to get transferred. | |
| - | This callback makes sense only when using the \fICURLOPT_WILDCARDMATCH(3)\fP |
| + | This callback makes sense only when using the CURLOPT_WILDCARDMATCH(3) |
| option for now. | |
| The target of transfer_info parameter is a "feature depended" structure. For | |
| - | the FTP wildcard download, the target is \fBcurl_fileinfo\fP structure (see |
| - | \fIcurl/curl.h\fP). The parameter \fIptr\fP is a pointer given by |
| - | \fICURLOPT_CHUNK_DATA(3)\fP. The parameter remains contains number of chunks |
| + | the FTP wildcard download, the target is **curl_fileinfo** structure (see |
| + | *curl/curl.h*). The parameter *ptr* is a pointer given by |
| + | CURLOPT_CHUNK_DATA(3). The parameter remains contains number of chunks |
| remaining per the transfer. If the feature is not available, the parameter has | |
| zero value. | |
| - | Return \fICURL_CHUNK_BGN_FUNC_OK\fP if everything is fine, |
| - | \fICURL_CHUNK_BGN_FUNC_SKIP\fP if you want to skip the concrete chunk or |
| - | \fICURL_CHUNK_BGN_FUNC_FAIL\fP to tell libcurl to stop if some error occurred. |
| - | .SH DEFAULT |
| + | Return *CURL_CHUNK_BGN_FUNC_OK* if everything is fine, |
| + | *CURL_CHUNK_BGN_FUNC_SKIP* if you want to skip the concrete chunk or |
| + | *CURL_CHUNK_BGN_FUNC_FAIL* to tell libcurl to stop if some error occurred. |
| + | |
| + | # DEFAULT |
| + | |
| NULL | |
| - | .SH PROTOCOLS |
| + | |
| + | # PROTOCOLS |
| + | |
| FTP | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| #include <stdio.h> | |
| struct callback_data { | |
| @@ -106,20 +104,20 @@ static long file_is_coming(struct curl_fileinfo *finfo, | |
| switch(finfo->filetype) { | |
| case CURLFILETYPE_DIRECTORY: | |
| - | printf(" DIR\\n"); |
| + | printf(" DIR\n"); |
| break; | |
| case CURLFILETYPE_FILE: | |
| printf("FILE "); | |
| break; | |
| default: | |
| - | printf("OTHER\\n"); |
| + | printf("OTHER\n"); |
| break; | |
| } | |
| if(finfo->filetype == CURLFILETYPE_FILE) { | |
| /* do not transfer files >= 50B */ | |
| if(finfo->size > 50) { | |
| - | printf("SKIPPED\\n"); |
| + | printf("SKIPPED\n"); |
| return CURL_CHUNK_BGN_FUNC_SKIP; | |
| } | |
| @@ -143,11 +141,12 @@ int main() | |
| curl_easy_setopt(curl, CURLOPT_CHUNK_BGN_FUNCTION, file_is_coming); | |
| curl_easy_setopt(curl, CURLOPT_CHUNK_DATA, &callback_info); | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| This was added in 7.21.0 | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. | |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_CHUNK_END_FUNCTION (3), |
| - | .BR CURLOPT_WILDCARDMATCH (3) |
| @@ -1,104 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CHUNK_DATA 3 "19 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CHUNK_DATA \- pointer passed to the FTP chunk callbacks |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_DATA, void *pointer); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a \fIpointer\fP that is untouched by libcurl and passed as the ptr |
| - | argument to the \fICURLOPT_CHUNK_BGN_FUNCTION(3)\fP and |
| - | \fICURLOPT_CHUNK_END_FUNCTION(3)\fP. |
| - | .SH DEFAULT |
| - | NULL |
| - | .SH PROTOCOLS |
| - | FTP |
| - | .SH EXAMPLE |
| - | .nf |
| - | #include <stdio.h> |
| - | |
| - | struct callback_data { |
| - | FILE *output; |
| - | }; |
| - | |
| - | static long file_is_coming(struct curl_fileinfo *finfo, |
| - | void *ptr, |
| - | int remains) |
| - | { |
| - | struct callback_data *data = ptr; |
| - | printf("%3d %40s %10luB ", remains, finfo->filename, |
| - | (unsigned long)finfo->size); |
| - | |
| - | switch(finfo->filetype) { |
| - | case CURLFILETYPE_DIRECTORY: |
| - | printf(" DIR\\n"); |
| - | break; |
| - | case CURLFILETYPE_FILE: |
| - | printf("FILE "); |
| - | break; |
| - | default: |
| - | printf("OTHER\\n"); |
| - | break; |
| - | } |
| - | |
| - | if(finfo->filetype == CURLFILETYPE_FILE) { |
| - | /* do not transfer files >= 50B */ |
| - | if(finfo->size > 50) { |
| - | printf("SKIPPED\\n"); |
| - | return CURL_CHUNK_BGN_FUNC_SKIP; |
| - | } |
| - | |
| - | data->output = fopen(finfo->filename, "wb"); |
| - | if(!data->output) { |
| - | return CURL_CHUNK_BGN_FUNC_FAIL; |
| - | } |
| - | } |
| - | |
| - | return CURL_CHUNK_BGN_FUNC_OK; |
| - | } |
| - | |
| - | int main() |
| - | { |
| - | /* data for callback */ |
| - | struct callback_data callback_info; |
| - | |
| - | CURL *curl = curl_easy_init(); |
| - | |
| - | /* callback is called before download of concrete file started */ |
| - | curl_easy_setopt(curl, CURLOPT_CHUNK_BGN_FUNCTION, file_is_coming); |
| - | curl_easy_setopt(curl, CURLOPT_CHUNK_DATA, &callback_info); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.21.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_CHUNK_BGN_FUNCTION (3), |
| - | .BR CURLOPT_WILDCARDMATCH (3) |
| @@ -0,0 +1,102 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CHUNK_DATA |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CHUNK_BGN_FUNCTION (3) |
| + | - CURLOPT_WILDCARDMATCH (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CHUNK_DATA - pointer passed to the FTP chunk callbacks |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_DATA, void *pointer); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a *pointer* that is untouched by libcurl and passed as the ptr |
| + | argument to the CURLOPT_CHUNK_BGN_FUNCTION(3) and |
| + | CURLOPT_CHUNK_END_FUNCTION(3). |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL |
| + | |
| + | # PROTOCOLS |
| + | |
| + | FTP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | #include <stdio.h> |
| + | |
| + | struct callback_data { |
| + | FILE *output; |
| + | }; |
| + | |
| + | static long file_is_coming(struct curl_fileinfo *finfo, |
| + | void *ptr, |
| + | int remains) |
| + | { |
| + | struct callback_data *data = ptr; |
| + | printf("%3d %40s %10luB ", remains, finfo->filename, |
| + | (unsigned long)finfo->size); |
| + | |
| + | switch(finfo->filetype) { |
| + | case CURLFILETYPE_DIRECTORY: |
| + | printf(" DIR\n"); |
| + | break; |
| + | case CURLFILETYPE_FILE: |
| + | printf("FILE "); |
| + | break; |
| + | default: |
| + | printf("OTHER\n"); |
| + | break; |
| + | } |
| + | |
| + | if(finfo->filetype == CURLFILETYPE_FILE) { |
| + | /* do not transfer files >= 50B */ |
| + | if(finfo->size > 50) { |
| + | printf("SKIPPED\n"); |
| + | return CURL_CHUNK_BGN_FUNC_SKIP; |
| + | } |
| + | |
| + | data->output = fopen(finfo->filename, "wb"); |
| + | if(!data->output) { |
| + | return CURL_CHUNK_BGN_FUNC_FAIL; |
| + | } |
| + | } |
| + | |
| + | return CURL_CHUNK_BGN_FUNC_OK; |
| + | } |
| + | |
| + | int main() |
| + | { |
| + | /* data for callback */ |
| + | struct callback_data callback_info; |
| + | |
| + | CURL *curl = curl_easy_init(); |
| + | |
| + | /* callback is called before download of concrete file started */ |
| + | curl_easy_setopt(curl, CURLOPT_CHUNK_BGN_FUNCTION, file_is_coming); |
| + | curl_easy_setopt(curl, CURLOPT_CHUNK_DATA, &callback_info); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.21.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,83 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CHUNK_END_FUNCTION 3 "19 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CHUNK_END_FUNCTION \- callback after a transfer with FTP wildcard match |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | long chunk_end_callback(void *ptr); |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_END_FUNCTION, |
| - | chunk_end_callback); |
| - | .SH DESCRIPTION |
| - | Pass a pointer to your callback function, which should match the prototype |
| - | shown above. |
| - | |
| - | This function gets called by libcurl as soon as a part of the stream has been |
| - | transferred (or skipped). |
| - | |
| - | Return \fICURL_CHUNK_END_FUNC_OK\fP if everything is fine or |
| - | \fBCURL_CHUNK_END_FUNC_FAIL\fP to tell the lib to stop if some error occurred. |
| - | .SH DEFAULT |
| - | NULL |
| - | .SH PROTOCOLS |
| - | FTP |
| - | .SH EXAMPLE |
| - | .nf |
| - | #include <stdio.h> |
| - | |
| - | struct callback_data { |
| - | FILE *output; |
| - | }; |
| - | |
| - | static long file_is_downloaded(struct callback_data *data) |
| - | { |
| - | if(data->output) { |
| - | fclose(data->output); |
| - | data->output = 0x0; |
| - | } |
| - | return CURL_CHUNK_END_FUNC_OK; |
| - | } |
| - | |
| - | int main() |
| - | { |
| - | /* data for callback */ |
| - | struct callback_data callback_info; |
| - | |
| - | CURL *curl = curl_easy_init(); |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_CHUNK_END_FUNCTION, file_is_downloaded); |
| - | curl_easy_setopt(curl, CURLOPT_CHUNK_DATA, &callback_info); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.21.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_CHUNK_BGN_FUNCTION (3), |
| - | .BR CURLOPT_WILDCARDMATCH (3) |
| @@ -0,0 +1,82 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CHUNK_END_FUNCTION |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CHUNK_BGN_FUNCTION (3) |
| + | - CURLOPT_WILDCARDMATCH (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CHUNK_END_FUNCTION - callback after a transfer with FTP wildcard match |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | long chunk_end_callback(void *ptr); |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_END_FUNCTION, |
| + | chunk_end_callback); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to your callback function, which should match the prototype |
| + | shown above. |
| + | |
| + | This function gets called by libcurl as soon as a part of the stream has been |
| + | transferred (or skipped). |
| + | |
| + | Return *CURL_CHUNK_END_FUNC_OK* if everything is fine or |
| + | **CURL_CHUNK_END_FUNC_FAIL** to tell the lib to stop if some error occurred. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL |
| + | |
| + | # PROTOCOLS |
| + | |
| + | FTP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | #include <stdio.h> |
| + | |
| + | struct callback_data { |
| + | FILE *output; |
| + | }; |
| + | |
| + | static long file_is_downloaded(struct callback_data *data) |
| + | { |
| + | if(data->output) { |
| + | fclose(data->output); |
| + | data->output = 0x0; |
| + | } |
| + | return CURL_CHUNK_END_FUNC_OK; |
| + | } |
| + | |
| + | int main() |
| + | { |
| + | /* data for callback */ |
| + | struct callback_data callback_info; |
| + | |
| + | CURL *curl = curl_easy_init(); |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_CHUNK_END_FUNCTION, file_is_downloaded); |
| + | curl_easy_setopt(curl, CURLOPT_CHUNK_DATA, &callback_info); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.21.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,77 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CLOSESOCKETDATA 3 "16 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CLOSESOCKETDATA \- pointer passed to the socket close callback |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CLOSESOCKETDATA, |
| - | void *pointer); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a \fIpointer\fP that remains untouched by libcurl and passed as the first |
| - | argument in the closesocket callback set with |
| - | \fICURLOPT_CLOSESOCKETFUNCTION(3)\fP. |
| - | .SH DEFAULT |
| - | The default value of this parameter is NULL. |
| - | .SH PROTOCOLS |
| - | All except file: |
| - | .SH EXAMPLE |
| - | .nf |
| - | struct priv { |
| - | void *custom; |
| - | }; |
| - | |
| - | static int closesocket(void *clientp, curl_socket_t item) |
| - | { |
| - | struct priv *my = clientp; |
| - | printf("our ptr: %p\\n", my->custom); |
| - | |
| - | printf("libcurl wants to close %d now\\n", (int)item); |
| - | return 0; |
| - | } |
| - | |
| - | int main(void) |
| - | { |
| - | struct priv myown; |
| - | CURL *curl = curl_easy_init(); |
| - | |
| - | /* call this function to close sockets */ |
| - | curl_easy_setopt(curl, CURLOPT_CLOSESOCKETFUNCTION, closesocket); |
| - | curl_easy_setopt(curl, CURLOPT_CLOSESOCKETDATA, &myown); |
| - | |
| - | curl_easy_perform(curl); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.21.7 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_CLOSESOCKETFUNCTION (3), |
| - | .BR CURLOPT_OPENSOCKETFUNCTION (3) |
| @@ -0,0 +1,75 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CLOSESOCKETDATA |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CLOSESOCKETFUNCTION (3) |
| + | - CURLOPT_OPENSOCKETFUNCTION (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CLOSESOCKETDATA - pointer passed to the socket close callback |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CLOSESOCKETDATA, |
| + | void *pointer); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a *pointer* that remains untouched by libcurl and passed as the first |
| + | argument in the closesocket callback set with |
| + | CURLOPT_CLOSESOCKETFUNCTION(3). |
| + | |
| + | # DEFAULT |
| + | |
| + | The default value of this parameter is NULL. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All except file: |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | struct priv { |
| + | void *custom; |
| + | }; |
| + | |
| + | static int closesocket(void *clientp, curl_socket_t item) |
| + | { |
| + | struct priv *my = clientp; |
| + | printf("our ptr: %p\n", my->custom); |
| + | |
| + | printf("libcurl wants to close %d now\n", (int)item); |
| + | return 0; |
| + | } |
| + | |
| + | int main(void) |
| + | { |
| + | struct priv myown; |
| + | CURL *curl = curl_easy_init(); |
| + | |
| + | /* call this function to close sockets */ |
| + | curl_easy_setopt(curl, CURLOPT_CLOSESOCKETFUNCTION, closesocket); |
| + | curl_easy_setopt(curl, CURLOPT_CLOSESOCKETDATA, &myown); |
| + | |
| + | curl_easy_perform(curl); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.21.7 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,88 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CLOSESOCKETFUNCTION 3 "16 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CLOSESOCKETFUNCTION \- callback to socket close replacement |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | int closesocket_callback(void *clientp, curl_socket_t item); |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CLOSESOCKETFUNCTION, |
| - | closesocket_callback); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to your callback function, which should match the prototype |
| - | shown above. |
| - | |
| - | This callback function gets called by libcurl instead of the \fIclose(3)\fP or |
| - | \fIclosesocket(3)\fP call when sockets are closed (not for any other file |
| - | descriptors). This is pretty much the reverse to the |
| - | \fICURLOPT_OPENSOCKETFUNCTION(3)\fP option. Return 0 to signal success and 1 |
| - | if there was an error. |
| - | |
| - | The \fIclientp\fP pointer is set with |
| - | \fICURLOPT_CLOSESOCKETDATA(3)\fP. \fIitem\fP is the socket libcurl wants to be |
| - | closed. |
| - | .SH DEFAULT |
| - | By default libcurl uses the standard socket close function. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | struct priv { |
| - | void *custom; |
| - | }; |
| - | |
| - | static int closesocket(void *clientp, curl_socket_t item) |
| - | { |
| - | struct priv *my = clientp; |
| - | printf("our ptr: %p\\n", my->custom); |
| - | |
| - | printf("libcurl wants to close %d now\\n", (int)item); |
| - | return 0; |
| - | } |
| - | |
| - | int main(void) |
| - | { |
| - | struct priv myown; |
| - | CURL *curl = curl_easy_init(); |
| - | |
| - | /* call this function to close sockets */ |
| - | curl_easy_setopt(curl, CURLOPT_CLOSESOCKETFUNCTION, closesocket); |
| - | curl_easy_setopt(curl, CURLOPT_CLOSESOCKETDATA, &myown); |
| - | |
| - | curl_easy_perform(curl); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.21.7 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_CLOSESOCKETDATA (3), |
| - | .BR CURLOPT_OPENSOCKETFUNCTION (3) |
| @@ -0,0 +1,86 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CLOSESOCKETFUNCTION |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CLOSESOCKETDATA (3) |
| + | - CURLOPT_OPENSOCKETFUNCTION (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CLOSESOCKETFUNCTION - callback to socket close replacement |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | int closesocket_callback(void *clientp, curl_socket_t item); |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CLOSESOCKETFUNCTION, |
| + | closesocket_callback); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to your callback function, which should match the prototype |
| + | shown above. |
| + | |
| + | This callback function gets called by libcurl instead of the *close(3)* or |
| + | *closesocket(3)* call when sockets are closed (not for any other file |
| + | descriptors). This is pretty much the reverse to the |
| + | CURLOPT_OPENSOCKETFUNCTION(3) option. Return 0 to signal success and 1 |
| + | if there was an error. |
| + | |
| + | The *clientp* pointer is set with |
| + | CURLOPT_CLOSESOCKETDATA(3). *item* is the socket libcurl wants to be |
| + | closed. |
| + | |
| + | # DEFAULT |
| + | |
| + | By default libcurl uses the standard socket close function. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | struct priv { |
| + | void *custom; |
| + | }; |
| + | |
| + | static int closesocket(void *clientp, curl_socket_t item) |
| + | { |
| + | struct priv *my = clientp; |
| + | printf("our ptr: %p\n", my->custom); |
| + | |
| + | printf("libcurl wants to close %d now\n", (int)item); |
| + | return 0; |
| + | } |
| + | |
| + | int main(void) |
| + | { |
| + | struct priv myown; |
| + | CURL *curl = curl_easy_init(); |
| + | |
| + | /* call this function to close sockets */ |
| + | curl_easy_setopt(curl, CURLOPT_CLOSESOCKETFUNCTION, closesocket); |
| + | curl_easy_setopt(curl, CURLOPT_CLOSESOCKETDATA, &myown); |
| + | |
| + | curl_easy_perform(curl); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.21.7 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,91 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CONNECTTIMEOUT 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CONNECTTIMEOUT \- timeout for the connect phase |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT, long timeout); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long. It should contain the maximum time in seconds that you allow the |
| - | connection phase to the server to take. This timeout only limits the |
| - | connection phase, it has no impact once it has connected. Set to zero to |
| - | switch to the default built-in connection timeout - 300 seconds. See also the |
| - | \fICURLOPT_TIMEOUT(3)\fP option. |
| - | |
| - | \fICURLOPT_CONNECTTIMEOUT_MS(3)\fP is the same function but set in milliseconds. |
| - | |
| - | If both \fICURLOPT_CONNECTTIMEOUT(3)\fP and \fICURLOPT_CONNECTTIMEOUT_MS(3)\fP |
| - | are set, the value set last is used. |
| - | |
| - | The "connection phase" is considered complete when the requested TCP, TLS or |
| - | QUIC handshakes are done. |
| - | |
| - | The connection timeout set with \fICURLOPT_CONNECTTIMEOUT(3)\fP is included in |
| - | the general all-covering \fICURLOPT_TIMEOUT(3)\fP. |
| - | |
| - | With \fICURLOPT_CONNECTTIMEOUT(3)\fP set to 3 and \fICURLOPT_TIMEOUT(3)\fP set |
| - | to 5, the operation can never last longer than 5 seconds, and the connection |
| - | phase cannot last longer than 3 seconds. |
| - | |
| - | With \fICURLOPT_CONNECTTIMEOUT(3)\fP set to 4 and \fICURLOPT_TIMEOUT(3)\fP set |
| - | to 2, the operation can never last longer than 2 seconds. Including the |
| - | connection phase. |
| - | |
| - | This option may cause libcurl to use the SIGALRM signal to timeout system |
| - | calls on builds not using asynch DNS. In unix-like systems, this might cause |
| - | signals to be used unless \fICURLOPT_NOSIGNAL(3)\fP is set. |
| - | .SH DEFAULT |
| - | 300 |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* complete connection within 10 seconds */ |
| - | curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L); |
| - | |
| - | curl_easy_perform(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Always |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK. Returns CURLE_BAD_FUNCTION_ARGUMENT if set to a negative |
| - | value or a value that when converted to milliseconds is too large. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_CONNECTTIMEOUT_MS (3), |
| - | .BR CURLOPT_LOW_SPEED_LIMIT (3), |
| - | .BR CURLOPT_MAX_RECV_SPEED_LARGE (3), |
| - | .BR CURLOPT_TIMEOUT (3) |
| @@ -0,0 +1,89 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CONNECTTIMEOUT |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CONNECTTIMEOUT_MS (3) |
| + | - CURLOPT_LOW_SPEED_LIMIT (3) |
| + | - CURLOPT_MAX_RECV_SPEED_LARGE (3) |
| + | - CURLOPT_TIMEOUT (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CONNECTTIMEOUT - timeout for the connect phase |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT, long timeout); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long. It should contain the maximum time in seconds that you allow the |
| + | connection phase to the server to take. This timeout only limits the |
| + | connection phase, it has no impact once it has connected. Set to zero to |
| + | switch to the default built-in connection timeout - 300 seconds. See also the |
| + | CURLOPT_TIMEOUT(3) option. |
| + | |
| + | CURLOPT_CONNECTTIMEOUT_MS(3) is the same function but set in milliseconds. |
| + | |
| + | If both CURLOPT_CONNECTTIMEOUT(3) and CURLOPT_CONNECTTIMEOUT_MS(3) |
| + | are set, the value set last is used. |
| + | |
| + | The "connection phase" is considered complete when the requested TCP, TLS or |
| + | QUIC handshakes are done. |
| + | |
| + | The connection timeout set with CURLOPT_CONNECTTIMEOUT(3) is included in |
| + | the general all-covering CURLOPT_TIMEOUT(3). |
| + | |
| + | With CURLOPT_CONNECTTIMEOUT(3) set to 3 and CURLOPT_TIMEOUT(3) set |
| + | to 5, the operation can never last longer than 5 seconds, and the connection |
| + | phase cannot last longer than 3 seconds. |
| + | |
| + | With CURLOPT_CONNECTTIMEOUT(3) set to 4 and CURLOPT_TIMEOUT(3) set |
| + | to 2, the operation can never last longer than 2 seconds. Including the |
| + | connection phase. |
| + | |
| + | This option may cause libcurl to use the SIGALRM signal to timeout system |
| + | calls on builds not using asynch DNS. In unix-like systems, this might cause |
| + | signals to be used unless CURLOPT_NOSIGNAL(3) is set. |
| + | |
| + | # DEFAULT |
| + | |
| + | 300 |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* complete connection within 10 seconds */ |
| + | curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L); |
| + | |
| + | curl_easy_perform(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Always |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK. Returns CURLE_BAD_FUNCTION_ARGUMENT if set to a negative |
| + | value or a value that when converted to milliseconds is too large. |
| @@ -1,66 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CONNECTTIMEOUT_MS 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CONNECTTIMEOUT_MS \- timeout for the connect phase |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT_MS, |
| - | long timeout); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long. It should contain the maximum time in milliseconds that you allow |
| - | the connection phase to the server to take. |
| - | |
| - | See \fICURLOPT_CONNECTTIMEOUT(3)\fP for details. |
| - | .SH DEFAULT |
| - | 300000 |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* complete connection within 10000 milliseconds */ |
| - | curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, 10000L); |
| - | |
| - | curl_easy_perform(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Always |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_CONNECTTIMEOUT (3), |
| - | .BR CURLOPT_LOW_SPEED_LIMIT (3), |
| - | .BR CURLOPT_TIMEOUT (3) |
| @@ -0,0 +1,64 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CONNECTTIMEOUT_MS |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CONNECTTIMEOUT (3) |
| + | - CURLOPT_LOW_SPEED_LIMIT (3) |
| + | - CURLOPT_TIMEOUT (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CONNECTTIMEOUT_MS - timeout for the connect phase |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT_MS, |
| + | long timeout); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long. It should contain the maximum time in milliseconds that you allow |
| + | the connection phase to the server to take. |
| + | |
| + | See CURLOPT_CONNECTTIMEOUT(3) for details. |
| + | |
| + | # DEFAULT |
| + | |
| + | 300000 |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* complete connection within 10000 milliseconds */ |
| + | curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, 10000L); |
| + | |
| + | curl_easy_perform(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Always |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK |
| @@ -1,85 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CONNECT_ONLY 3 "19 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CONNECT_ONLY \- stop when connected to target server |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECT_ONLY, long only); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long. If the parameter equals 1, it tells the library to perform all |
| - | the required proxy authentication and connection setup, but no data transfer, |
| - | and then return. |
| - | |
| - | The option can be used to simply test a connection to a server, but is more |
| - | useful when used with the \fICURLINFO_ACTIVESOCKET(3)\fP option to |
| - | \fIcurl_easy_getinfo(3)\fP as the library can set up the connection and then |
| - | the application can obtain the most recently used socket for special data |
| - | transfers. |
| - | |
| - | Since 7.86.0, this option can be set to '2' and if HTTP or WebSocket are used, |
| - | libcurl performs the request and reads all response headers before handing |
| - | over control to the application. |
| - | |
| - | Transfers marked connect only do not reuse any existing connections and |
| - | connections marked connect only are not allowed to get reused. |
| - | |
| - | If the connect only transfer is done using the multi interface, the particular |
| - | easy handle must remain added to the multi handle for as long as the |
| - | application wants to use it. Once it has been removed with |
| - | \fIcurl_multi_remove_handle(3)\fP, \fIcurl_easy_send(3)\fP and |
| - | \fIcurl_easy_recv(3)\fP do not function. |
| - | .SH DEFAULT |
| - | 0 |
| - | .SH PROTOCOLS |
| - | HTTP, SMTP, POP3 and IMAP. For WS and WSS starting in 7.86.0. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode ret; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| - | curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L); |
| - | ret = curl_easy_perform(curl); |
| - | if(ret == CURLE_OK) { |
| - | /* only connected! */ |
| - | } |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.15.2 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_easy_recv (3), |
| - | .BR curl_easy_send (3), |
| - | .BR CURLOPT_HTTPPROXYTUNNEL (3), |
| - | .BR CURLOPT_VERBOSE (3) |
| @@ -0,0 +1,83 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CONNECT_ONLY |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_HTTPPROXYTUNNEL (3) |
| + | - CURLOPT_VERBOSE (3) |
| + | - curl_easy_recv (3) |
| + | - curl_easy_send (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CONNECT_ONLY - stop when connected to target server |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECT_ONLY, long only); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long. If the parameter equals 1, it tells the library to perform all |
| + | the required proxy authentication and connection setup, but no data transfer, |
| + | and then return. |
| + | |
| + | The option can be used to simply test a connection to a server, but is more |
| + | useful when used with the CURLINFO_ACTIVESOCKET(3) option to |
| + | curl_easy_getinfo(3) as the library can set up the connection and then |
| + | the application can obtain the most recently used socket for special data |
| + | transfers. |
| + | |
| + | Since 7.86.0, this option can be set to '2' and if HTTP or WebSocket are used, |
| + | libcurl performs the request and reads all response headers before handing |
| + | over control to the application. |
| + | |
| + | Transfers marked connect only do not reuse any existing connections and |
| + | connections marked connect only are not allowed to get reused. |
| + | |
| + | If the connect only transfer is done using the multi interface, the particular |
| + | easy handle must remain added to the multi handle for as long as the |
| + | application wants to use it. Once it has been removed with |
| + | curl_multi_remove_handle(3), curl_easy_send(3) and |
| + | curl_easy_recv(3) do not function. |
| + | |
| + | # DEFAULT |
| + | |
| + | 0 |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP, SMTP, POP3 and IMAP. For WS and WSS starting in 7.86.0. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode ret; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| + | curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L); |
| + | ret = curl_easy_perform(curl); |
| + | if(ret == CURLE_OK) { |
| + | /* only connected! */ |
| + | } |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.15.2 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,43 +1,36 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CONNECT_TO 3 "10 April 2016" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CONNECT_TO \- connect to a specific host and port instead of the URL's host and port |
| - | .SH SYNOPSIS |
| - | .nf |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CONNECT_TO |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_FOLLOWLOCATION (3) |
| + | - CURLOPT_HTTPPROXYTUNNEL (3) |
| + | - CURLOPT_RESOLVE (3) |
| + | - CURLOPT_URL (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CONNECT_TO - connect to another host and port instead |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECT_TO, | |
| struct curl_slist *connect_to); | |
| - | .fi |
| - | .SH DESCRIPTION |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| Pass a pointer to a linked list of strings with "connect to" information to | |
| use for establishing network connections with this handle. The linked list | |
| - | should be a fully valid list of \fBstruct curl_slist\fP structs properly |
| - | filled in. Use \fIcurl_slist_append(3)\fP to create the list and |
| - | \fIcurl_slist_free_all(3)\fP to clean up an entire list. |
| + | should be a fully valid list of **struct curl_slist** structs properly filled |
| + | in. Use curl_slist_append(3) to create the list and curl_slist_free_all(3) to |
| + | clean up an entire list. |
| Each single string should be written using the format | |
| HOST:PORT:CONNECT-TO-HOST:CONNECT-TO-PORT where HOST is the host of the | |
| @@ -62,10 +55,9 @@ The "connect to" host and port are only used to establish the network | |
| connection. They do NOT affect the host and port that are used for TLS/SSL | |
| (e.g. SNI, certificate verification) or for the application protocols. | |
| - | In contrast to \fICURLOPT_RESOLVE(3)\fP, the option |
| - | \fICURLOPT_CONNECT_TO(3)\fP does not pre-populate the DNS cache and therefore |
| - | it does not affect future transfers of other easy handles that have been added |
| - | to the same multi handle. |
| + | In contrast to CURLOPT_RESOLVE(3), the option CURLOPT_CONNECT_TO(3) does not |
| + | pre-populate the DNS cache and therefore it does not affect future transfers |
| + | of other easy handles that have been added to the same multi handle. |
| The "connect to" host and port are ignored if they are equal to the host and | |
| the port in the request URL, because connecting to the host and the port in | |
| @@ -77,17 +69,21 @@ port, the HTTP proxy is automatically switched to tunnel mode for this | |
| specific request. This is necessary because it is not possible to connect to a | |
| specific host or port in normal (non-tunnel) mode. | |
| - | When this option is passed to \fIcurl_easy_setopt(3)\fP, libcurl does not copy |
| - | the list so you \fBmust\fP keep it around until you no longer use this |
| - | \fIhandle\fP for a transfer before you call \fIcurl_slist_free_all(3)\fP on |
| - | the list. |
| + | When this option is passed to curl_easy_setopt(3), libcurl does not copy the |
| + | list so you **must** keep it around until you no longer use this *handle* for |
| + | a transfer before you call curl_slist_free_all(3) on the list. |
| + | |
| + | # DEFAULT |
| - | .SH DEFAULT |
| NULL | |
| - | .SH PROTOCOLS |
| + | |
| + | # PROTOCOLS |
| + | |
| All | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| int main(void) | |
| { | |
| CURL *curl; | |
| @@ -107,13 +103,12 @@ int main(void) | |
| curl_slist_free_all(connect_to); | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| Added in 7.49.0 | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. | |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_FOLLOWLOCATION (3), |
| - | .BR CURLOPT_HTTPPROXYTUNNEL (3), |
| - | .BR CURLOPT_RESOLVE (3), |
| - | .BR CURLOPT_URL (3) |
| @@ -1,111 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CONV_FROM_NETWORK_FUNCTION 3 "19 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CONV_FROM_NETWORK_FUNCTION \- convert data from network to host encoding |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode conv_callback(char *ptr, size_t length); |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_FROM_NETWORK_FUNCTION, |
| - | conv_callback); |
| - | .SH DESCRIPTION |
| - | Pass a pointer to your callback function, which should match the prototype |
| - | shown above. |
| - | |
| - | Applies to non-ASCII platforms. \fIcurl_version_info(3)\fP returns the |
| - | \fBCURL_VERSION_CONV\fP feature bit set if this option is provided. |
| - | |
| - | The data to be converted is in a buffer pointed to by the \fIptr\fP parameter. |
| - | The amount of data to convert is indicated by the \fIlength\fP parameter. The |
| - | converted data overlays the input data in the buffer pointed to by the ptr |
| - | parameter. \fICURLE_OK\fP must be returned upon successful conversion. A |
| - | CURLcode return value defined by curl.h, such as \fICURLE_CONV_FAILED\fP, |
| - | should be returned if an error was encountered. |
| - | |
| - | \fICURLOPT_CONV_FROM_NETWORK_FUNCTION(3)\fP converts to host encoding from the |
| - | network encoding. It is used when commands or ASCII data are received over |
| - | the network. |
| - | |
| - | If you set a callback pointer to NULL, or do not set it at all, the built-in |
| - | libcurl iconv functions are used. If HAVE_ICONV was not defined when libcurl |
| - | was built, and no callback has been established, the conversion returns the |
| - | \fBCURLE_CONV_REQD\fP error code. |
| - | |
| - | If \fBHAVE_ICONV\fP is defined, \fBCURL_ICONV_CODESET_OF_HOST\fP must also be |
| - | defined. For example: |
| - | |
| - | \&#define CURL_ICONV_CODESET_OF_HOST "IBM-1047" |
| - | |
| - | The iconv code in libcurl defaults the network and UTF8 codeset names as |
| - | follows: |
| - | |
| - | \&#define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1" |
| - | |
| - | \&#define CURL_ICONV_CODESET_FOR_UTF8 "UTF-8" |
| - | |
| - | You need to override these definitions if they are different on your system. |
| - | .SH DEFAULT |
| - | NULL |
| - | .SH PROTOCOLS |
| - | FTP, SMTP, IMAP, POP3 |
| - | .SH EXAMPLE |
| - | .nf |
| - | static CURLcode my_conv_from_ascii_to_ebcdic(char *buffer, size_t length) |
| - | { |
| - | int rc = 0; |
| - | |
| - | /* in-place convert 'buffer' from ASCII to EBCDIC */ |
| - | |
| - | if(rc == 0) { |
| - | /* success */ |
| - | return CURLE_OK; |
| - | } |
| - | else { |
| - | return CURLE_CONV_FAILED; |
| - | } |
| - | } |
| - | |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | |
| - | /* use platform-specific functions for codeset conversions */ |
| - | curl_easy_setopt(curl, CURLOPT_CONV_FROM_NETWORK_FUNCTION, |
| - | my_conv_from_ascii_to_ebcdic); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Not available and deprecated since 7.82.0. |
| - | |
| - | Available only if \fBCURL_DOES_CONVERSIONS\fP was defined when libcurl was |
| - | built. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_CONV_FROM_UTF8_FUNCTION (3), |
| - | .BR CURLOPT_CONV_TO_NETWORK_FUNCTION (3) |
| @@ -0,0 +1,114 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CONV_FROM_NETWORK_FUNCTION |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CONV_FROM_UTF8_FUNCTION (3) |
| + | - CURLOPT_CONV_TO_NETWORK_FUNCTION (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CONV_FROM_NETWORK_FUNCTION - convert data from network to host encoding |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode conv_callback(char *ptr, size_t length); |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_FROM_NETWORK_FUNCTION, |
| + | conv_callback); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to your callback function, which should match the prototype |
| + | shown above. |
| + | |
| + | Applies to non-ASCII platforms. curl_version_info(3) returns the |
| + | **CURL_VERSION_CONV** feature bit set if this option is provided. |
| + | |
| + | The data to be converted is in a buffer pointed to by the *ptr* parameter. |
| + | The amount of data to convert is indicated by the *length* parameter. The |
| + | converted data overlays the input data in the buffer pointed to by the ptr |
| + | parameter. *CURLE_OK* must be returned upon successful conversion. A |
| + | CURLcode return value defined by curl.h, such as *CURLE_CONV_FAILED*, |
| + | should be returned if an error was encountered. |
| + | |
| + | CURLOPT_CONV_FROM_NETWORK_FUNCTION(3) converts to host encoding from the |
| + | network encoding. It is used when commands or ASCII data are received over the |
| + | network. |
| + | |
| + | If you set a callback pointer to NULL, or do not set it at all, the built-in |
| + | libcurl iconv functions are used. If HAVE_ICONV was not defined when libcurl |
| + | was built, and no callback has been established, the conversion returns the |
| + | **CURLE_CONV_REQD** error code. |
| + | |
| + | If **HAVE_ICONV** is defined, **CURL_ICONV_CODESET_OF_HOST** must also be |
| + | defined. For example: |
| + | |
| + | ~~~c |
| + | #define CURL_ICONV_CODESET_OF_HOST "IBM-1047" |
| + | ~~~ |
| + | |
| + | The iconv code in libcurl defaults the network and UTF8 codeset names as |
| + | follows: |
| + | |
| + | ~~~ |
| + | #define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1" |
| + | |
| + | #define CURL_ICONV_CODESET_FOR_UTF8 "UTF-8" |
| + | ~~~ |
| + | |
| + | You need to override these definitions if they are different on your system. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL |
| + | |
| + | # PROTOCOLS |
| + | |
| + | FTP, SMTP, IMAP, POP3 |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | static CURLcode my_conv_from_ascii_to_ebcdic(char *buffer, size_t length) |
| + | { |
| + | int rc = 0; |
| + | |
| + | /* in-place convert 'buffer' from ASCII to EBCDIC */ |
| + | |
| + | if(rc == 0) { |
| + | /* success */ |
| + | return CURLE_OK; |
| + | } |
| + | else { |
| + | return CURLE_CONV_FAILED; |
| + | } |
| + | } |
| + | |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | |
| + | /* use platform-specific functions for codeset conversions */ |
| + | curl_easy_setopt(curl, CURLOPT_CONV_FROM_NETWORK_FUNCTION, |
| + | my_conv_from_ascii_to_ebcdic); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Not available and deprecated since 7.82.0. |
| + | |
| + | Available only if **CURL_DOES_CONVERSIONS** was defined when libcurl was |
| + | built. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,106 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CONV_FROM_UTF8_FUNCTION 3 "19 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CONV_FROM_UTF8_FUNCTION \- convert data from UTF8 to host encoding |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode conv_callback(char *ptr, size_t length); |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_FROM_UTF8_FUNCTION, |
| - | conv_callback); |
| - | .SH DESCRIPTION |
| - | Pass a pointer to your callback function, which should match the prototype |
| - | shown above. |
| - | |
| - | Applies to non-ASCII platforms. \fIcurl_version_info(3)\fP returns the |
| - | CURL_VERSION_CONV feature bit set if this option is provided. |
| - | |
| - | The data to be converted is in a buffer pointed to by the \fIptr\fP parameter. |
| - | The amount of data to convert is indicated by the \fIlength\fP parameter. The |
| - | converted data overlays the input data in the buffer pointed to by the ptr |
| - | parameter. \fICURLE_OK\fP must be returned upon successful conversion. A |
| - | CURLcode return value defined by curl.h, such as \fICURLE_CONV_FAILED\fP, |
| - | should be returned if an error was encountered. |
| - | |
| - | \fICURLOPT_CONV_FROM_UTF8_FUNCTION(3)\fP converts to host encoding from UTF8 |
| - | encoding. It is required only for SSL processing. |
| - | |
| - | If you set a callback pointer to NULL, or do not set it at all, the built-in |
| - | libcurl iconv functions are used. If HAVE_ICONV was not defined when libcurl |
| - | was built, and no callback has been established, the conversion returns the |
| - | CURLE_CONV_REQD error code. |
| - | |
| - | If HAVE_ICONV is defined, CURL_ICONV_CODESET_OF_HOST must also be defined. |
| - | For example: |
| - | |
| - | \&#define CURL_ICONV_CODESET_OF_HOST "IBM-1047" |
| - | |
| - | The iconv code in libcurl defaults the network and UTF8 codeset names as |
| - | follows: |
| - | |
| - | \&#define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1" |
| - | |
| - | \&#define CURL_ICONV_CODESET_FOR_UTF8 "UTF-8" |
| - | |
| - | You need to override these definitions if they are different on your system. |
| - | .SH DEFAULT |
| - | NULL |
| - | .SH PROTOCOLS |
| - | TLS-based protocols. |
| - | .SH EXAMPLE |
| - | .nf |
| - | static CURLcode my_conv_from_utf8_to_ebcdic(char *buffer, size_t length) |
| - | { |
| - | int rc = 0; |
| - | /* in-place convert 'buffer' from UTF-8 to EBCDIC */ |
| - | if(rc == 0) { |
| - | /* success */ |
| - | return CURLE_OK; |
| - | } |
| - | else { |
| - | return CURLE_CONV_FAILED; |
| - | } |
| - | } |
| - | |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | curl_easy_setopt(curl, CURLOPT_CONV_FROM_UTF8_FUNCTION, |
| - | my_conv_from_utf8_to_ebcdic); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Not available and deprecated since 7.82.0. |
| - | |
| - | Available only if \fBCURL_DOES_CONVERSIONS\fP was defined when libcurl was |
| - | built. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_CONV_FROM_NETWORK_FUNCTION (3), |
| - | .BR CURLOPT_CONV_TO_NETWORK_FUNCTION (3) |
| @@ -0,0 +1,107 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CONV_FROM_UTF8_FUNCTION |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CONV_FROM_NETWORK_FUNCTION (3) |
| + | - CURLOPT_CONV_TO_NETWORK_FUNCTION (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CONV_FROM_UTF8_FUNCTION - convert data from UTF8 to host encoding |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode conv_callback(char *ptr, size_t length); |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_FROM_UTF8_FUNCTION, |
| + | conv_callback); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to your callback function, which should match the prototype |
| + | shown above. |
| + | |
| + | Applies to non-ASCII platforms. curl_version_info(3) returns the |
| + | CURL_VERSION_CONV feature bit set if this option is provided. |
| + | |
| + | The data to be converted is in a buffer pointed to by the *ptr* parameter. |
| + | The amount of data to convert is indicated by the *length* parameter. The |
| + | converted data overlays the input data in the buffer pointed to by the ptr |
| + | parameter. *CURLE_OK* must be returned upon successful conversion. A |
| + | CURLcode return value defined by curl.h, such as *CURLE_CONV_FAILED*, |
| + | should be returned if an error was encountered. |
| + | |
| + | CURLOPT_CONV_FROM_UTF8_FUNCTION(3) converts to host encoding from UTF8 |
| + | encoding. It is required only for SSL processing. |
| + | |
| + | If you set a callback pointer to NULL, or do not set it at all, the built-in |
| + | libcurl iconv functions are used. If HAVE_ICONV was not defined when libcurl |
| + | was built, and no callback has been established, the conversion returns the |
| + | CURLE_CONV_REQD error code. |
| + | |
| + | If HAVE_ICONV is defined, CURL_ICONV_CODESET_OF_HOST must also be defined. |
| + | For example: |
| + | ~~~c |
| + | #define CURL_ICONV_CODESET_OF_HOST "IBM-1047" |
| + | ~~~ |
| + | |
| + | The iconv code in libcurl defaults the network and UTF8 codeset names as |
| + | follows: |
| + | ~~~c |
| + | #define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1" |
| + | |
| + | #define CURL_ICONV_CODESET_FOR_UTF8 "UTF-8" |
| + | ~~~ |
| + | |
| + | You need to override these definitions if they are different on your system. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL |
| + | |
| + | # PROTOCOLS |
| + | |
| + | TLS-based protocols. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | static CURLcode my_conv_from_utf8_to_ebcdic(char *buffer, size_t length) |
| + | { |
| + | int rc = 0; |
| + | /* in-place convert 'buffer' from UTF-8 to EBCDIC */ |
| + | if(rc == 0) { |
| + | /* success */ |
| + | return CURLE_OK; |
| + | } |
| + | else { |
| + | return CURLE_CONV_FAILED; |
| + | } |
| + | } |
| + | |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | curl_easy_setopt(curl, CURLOPT_CONV_FROM_UTF8_FUNCTION, |
| + | my_conv_from_utf8_to_ebcdic); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Not available and deprecated since 7.82.0. |
| + | |
| + | Available only if **CURL_DOES_CONVERSIONS** was defined when libcurl was |
| + | built. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,108 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CONV_TO_NETWORK_FUNCTION 3 "19 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CONV_TO_NETWORK_FUNCTION \- convert data to network from host encoding |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode conv_callback(char *ptr, size_t length); |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_TO_NETWORK_FUNCTION, |
| - | conv_callback); |
| - | .SH DESCRIPTION |
| - | Pass a pointer to your callback function, which should match the prototype |
| - | shown above. |
| - | |
| - | Applies to non-ASCII platforms. \fIcurl_version_info(3)\fP returns the |
| - | CURL_VERSION_CONV feature bit set if this option is provided. |
| - | |
| - | The data to be converted is in a buffer pointed to by the \fIptr\fP parameter. |
| - | The amount of data to convert is indicated by the \fIlength\fP parameter. The |
| - | converted data overlays the input data in the buffer pointed to by the ptr |
| - | parameter. \fICURLE_OK\fP must be returned upon successful conversion. A |
| - | CURLcode return value defined by curl.h, such as \fICURLE_CONV_FAILED\fP, |
| - | should be returned if an error was encountered. |
| - | |
| - | \fICURLOPT_CONV_TO_NETWORK_FUNCTION(3)\fP converts from host encoding to the |
| - | network encoding. It is used when commands or ASCII data are sent over the |
| - | network. |
| - | |
| - | If you set a callback pointer to NULL, or do not set it at all, the built-in |
| - | libcurl iconv functions are used. If HAVE_ICONV was not defined when libcurl |
| - | was built, and no callback has been established, the conversion returns the |
| - | CURLE_CONV_REQD error code. |
| - | |
| - | If HAVE_ICONV is defined, CURL_ICONV_CODESET_OF_HOST must also be defined. |
| - | For example: |
| - | |
| - | \&#define CURL_ICONV_CODESET_OF_HOST "IBM-1047" |
| - | |
| - | The iconv code in libcurl defaults the network and UTF8 codeset names as |
| - | follows: |
| - | |
| - | \&#define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1" |
| - | |
| - | \&#define CURL_ICONV_CODESET_FOR_UTF8 "UTF-8" |
| - | |
| - | You need to override these definitions if they are different on your system. |
| - | .SH DEFAULT |
| - | NULL |
| - | .SH PROTOCOLS |
| - | FTP, SMTP, IMAP, POP3 |
| - | .SH EXAMPLE |
| - | .nf |
| - | static CURLcode my_conv_from_ebcdic_to_ascii(char *buffer, size_t length) |
| - | { |
| - | int rc = 0; |
| - | /* in-place convert 'buffer' from EBCDIC to ASCII */ |
| - | if(rc == 0) { |
| - | /* success */ |
| - | return CURLE_OK; |
| - | } |
| - | else { |
| - | return CURLE_CONV_FAILED; |
| - | } |
| - | } |
| - | |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_CONV_TO_NETWORK_FUNCTION, |
| - | my_conv_from_ebcdic_to_ascii); |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Not available and deprecated since 7.82.0. |
| - | |
| - | Available only if \fBCURL_DOES_CONVERSIONS\fP was defined when libcurl was |
| - | built. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_CONV_FROM_NETWORK_FUNCTION (3), |
| - | .BR CURLOPT_CONV_FROM_UTF8_FUNCTION (3) |
| @@ -0,0 +1,110 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CONV_TO_NETWORK_FUNCTION |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CONV_FROM_NETWORK_FUNCTION (3) |
| + | - CURLOPT_CONV_FROM_UTF8_FUNCTION (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CONV_TO_NETWORK_FUNCTION - convert data to network from host encoding |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode conv_callback(char *ptr, size_t length); |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_TO_NETWORK_FUNCTION, |
| + | conv_callback); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to your callback function, which should match the prototype |
| + | shown above. |
| + | |
| + | Applies to non-ASCII platforms. curl_version_info(3) returns the |
| + | CURL_VERSION_CONV feature bit set if this option is provided. |
| + | |
| + | The data to be converted is in a buffer pointed to by the *ptr* parameter. |
| + | The amount of data to convert is indicated by the *length* parameter. The |
| + | converted data overlays the input data in the buffer pointed to by the ptr |
| + | parameter. *CURLE_OK* must be returned upon successful conversion. A CURLcode |
| + | return value defined by curl.h, such as *CURLE_CONV_FAILED*, should be |
| + | returned if an error was encountered. |
| + | |
| + | CURLOPT_CONV_TO_NETWORK_FUNCTION(3) converts from host encoding to the |
| + | network encoding. It is used when commands or ASCII data are sent over the |
| + | network. |
| + | |
| + | If you set a callback pointer to NULL, or do not set it at all, the built-in |
| + | libcurl iconv functions are used. If HAVE_ICONV was not defined when libcurl |
| + | was built, and no callback has been established, the conversion returns the |
| + | CURLE_CONV_REQD error code. |
| + | |
| + | If HAVE_ICONV is defined, CURL_ICONV_CODESET_OF_HOST must also be defined. |
| + | For example: |
| + | ~~~c |
| + | define CURL_ICONV_CODESET_OF_HOST "IBM-1047" |
| + | ~~~ |
| + | |
| + | The iconv code in libcurl defaults the network and UTF8 codeset names as |
| + | follows: |
| + | |
| + | ~~~c |
| + | #define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1" |
| + | |
| + | #define CURL_ICONV_CODESET_FOR_UTF8 "UTF-8" |
| + | ~~~ |
| + | |
| + | You need to override these definitions if they are different on your system. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL |
| + | |
| + | # PROTOCOLS |
| + | |
| + | FTP, SMTP, IMAP, POP3 |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | static CURLcode my_conv_from_ebcdic_to_ascii(char *buffer, size_t length) |
| + | { |
| + | int rc = 0; |
| + | /* in-place convert 'buffer' from EBCDIC to ASCII */ |
| + | if(rc == 0) { |
| + | /* success */ |
| + | return CURLE_OK; |
| + | } |
| + | else { |
| + | return CURLE_CONV_FAILED; |
| + | } |
| + | } |
| + | |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_CONV_TO_NETWORK_FUNCTION, |
| + | my_conv_from_ebcdic_to_ascii); |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Not available and deprecated since 7.82.0. |
| + | |
| + | Available only if **CURL_DOES_CONVERSIONS** was defined when libcurl was |
| + | built. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,37 +1,31 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_COOKIE 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_COOKIE \- HTTP Cookie header |
| - | .SH SYNOPSIS |
| - | .nf |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_COOKIE |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_COOKIELIST (3) |
| + | - CURLOPT_COOKIEFILE (3) |
| + | - CURLOPT_COOKIEJAR (3) |
| + | - CURLOPT_COOKIELIST (3) |
| + | - CURLOPT_HTTPHEADER (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_COOKIE - HTTP Cookie header |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIE, char *cookie); | |
| - | .fi |
| - | .SH DESCRIPTION |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| Pass a pointer to a null-terminated string as parameter. It is used to set one | |
| or more cookies in the HTTP request. The format of the string should be | |
| NAME=CONTENTS, where NAME is the cookie name and CONTENTS is what the cookie | |
| @@ -48,16 +42,16 @@ The cookies set by this option are separate from the internal cookie storage | |
| held by the cookie engine and they are not be modified by it. If you enable | |
| the cookie engine and either you have imported a cookie of the same name | |
| (e.g. 'foo') or the server has set one, it has no effect on the cookies you | |
| - | set here. A request to the server sends both the 'foo' held by the cookie |
| + | set here. A request to the server sends both the 'foo' held by the cookie |
| engine and the 'foo' held by this option. To set a cookie that is instead held | |
| by the cookie engine and can be modified by the server use | |
| - | \fICURLOPT_COOKIELIST(3)\fP. |
| + | CURLOPT_COOKIELIST(3). |
| Using this option multiple times makes the last set string override the | |
| previous ones. | |
| - | This option does not enable the cookie engine. Use \fICURLOPT_COOKIEFILE(3)\fP |
| - | or \fICURLOPT_COOKIEJAR(3)\fP to enable parsing and sending cookies |
| + | This option does not enable the cookie engine. Use CURLOPT_COOKIEFILE(3) |
| + | or CURLOPT_COOKIEJAR(3) to enable parsing and sending cookies |
| automatically. | |
| The application does not have to keep the string around after setting this | |
| @@ -67,13 +61,19 @@ If libcurl is built with PSL (*Public Suffix List*) support, it detects and | |
| discards cookies that are specified for such suffix domains that should not be | |
| allowed to have cookies. If libcurl is *not* built with PSL support, it has no | |
| ability to stop super cookies. PSL support is identified by the | |
| - | \fBCURL_VERSION_PSL\fP feature bit returned by \fIcurl_version_info(3)\fP. |
| - | .SH DEFAULT |
| + | **CURL_VERSION_PSL** feature bit returned by curl_version_info(3). |
| + | |
| + | # DEFAULT |
| + | |
| NULL, no cookies | |
| - | .SH PROTOCOLS |
| + | |
| + | # PROTOCOLS |
| + | |
| HTTP | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| int main(void) | |
| { | |
| CURL *curl = curl_easy_init(); | |
| @@ -85,15 +85,13 @@ int main(void) | |
| curl_easy_perform(curl); | |
| } | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| If HTTP is enabled | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| Returns CURLE_OK if HTTP is enabled, CURLE_UNKNOWN_OPTION if not, or | |
| CURLE_OUT_OF_MEMORY if there was insufficient heap space. | |
| - | .SH "SEE ALSO" |
| - | .BR CURLINFO_COOKIELIST (3), |
| - | .BR CURLOPT_COOKIEFILE (3), |
| - | .BR CURLOPT_COOKIEJAR (3), |
| - | .BR CURLOPT_COOKIELIST (3), |
| - | .BR CURLOPT_HTTPHEADER (3) |
| @@ -1,37 +1,29 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_COOKIEFILE 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_COOKIEFILE \- file name to read cookies from |
| - | .SH SYNOPSIS |
| - | .nf |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_COOKIEFILE |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_COOKIE (3) |
| + | - CURLOPT_COOKIEJAR (3) |
| + | - CURLOPT_COOKIESESSION (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_COOKIEFILE - file name to read cookies from |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIEFILE, char *filename); | |
| - | .fi |
| - | .SH DESCRIPTION |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| Pass a pointer to a null-terminated string as parameter. It should point to | |
| the file name of your file holding cookie data to read. The cookie data can be | |
| in either the old Netscape / Mozilla cookie data format or just regular HTTP | |
| @@ -44,8 +36,8 @@ By passing the empty string ("") to this option, you enable the cookie engine | |
| without reading any initial cookies. If you tell libcurl the file name is "-" | |
| (just a single minus sign), libcurl instead reads from stdin. | |
| - | This option only \fBreads\fP cookies. To make libcurl write cookies to file, |
| - | see \fICURLOPT_COOKIEJAR(3)\fP. |
| + | This option only **reads** cookies. To make libcurl write cookies to file, |
| + | see CURLOPT_COOKIEJAR(3). |
| If you read cookies from a plain HTTP headers file and it does not specify a | |
| domain in the Set-Cookie line, then the cookie is not sent since the cookie | |
| @@ -61,17 +53,25 @@ option. | |
| Setting this option to NULL (since 7.77.0) explicitly disables the cookie | |
| engine and clears the list of files to read cookies from. | |
| - | .SH SECURITY |
| + | |
| + | # SECURITY |
| + | |
| This document previously mentioned how specifying a non-existing file can also | |
| enable the cookie engine. While true, we strongly advise against using that | |
| method as it is too hard to be sure that files that stay that way in the long | |
| run. | |
| - | .SH DEFAULT |
| + | |
| + | # DEFAULT |
| + | |
| NULL | |
| - | .SH PROTOCOLS |
| + | |
| + | # PROTOCOLS |
| + | |
| HTTP | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| int main(void) | |
| { | |
| CURL *curl = curl_easy_init(); | |
| @@ -87,15 +87,17 @@ int main(void) | |
| curl_easy_cleanup(curl); | |
| } | |
| } | |
| - | .fi |
| - | .SH "Cookie file format" |
| + | ~~~ |
| + | |
| + | # Cookie file format |
| + | |
| The cookie file format and general cookie concepts in curl are described | |
| online here: https://curl.se/docs/http-cookies.html | |
| - | .SH AVAILABILITY |
| + | |
| + | # AVAILABILITY |
| + | |
| As long as HTTP is supported | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not. | |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_COOKIE (3), |
| - | .BR CURLOPT_COOKIEJAR (3), |
| - | .BR CURLOPT_COOKIESESSION (3) |
| @@ -1,88 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_COOKIEJAR 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_COOKIEJAR \- file name to store cookies to |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIEJAR, char *filename); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a \fIfilename\fP as a char *, null-terminated. This makes libcurl write |
| - | all internally known cookies to the specified file when |
| - | \fIcurl_easy_cleanup(3)\fP is called. If no cookies are kept in memory at that |
| - | time, no file is created. Specify "-" as filename to instead have the cookies |
| - | written to stdout. Using this option also enables cookies for this session, so |
| - | if you for example follow a redirect it makes matching cookies get sent |
| - | accordingly. |
| - | |
| - | Note that libcurl does not read any cookies from the cookie jar specified with |
| - | this option. To read cookies from a file, use \fICURLOPT_COOKIEFILE(3)\fP. |
| - | |
| - | If the cookie jar file cannot be created or written to (when the |
| - | \fIcurl_easy_cleanup(3)\fP is called), libcurl does not and cannot report an |
| - | error for this. Using \fICURLOPT_VERBOSE(3)\fP or |
| - | \fICURLOPT_DEBUGFUNCTION(3)\fP displays a warning, but that is the only |
| - | visible feedback you get about this possibly lethal situation. |
| - | |
| - | Cookies are imported in the Set-Cookie format without a domain name are not |
| - | exported by this option. |
| - | |
| - | The application does not have to keep the string around after setting this |
| - | option. |
| - | .SH DEFAULT |
| - | NULL |
| - | .SH PROTOCOLS |
| - | HTTP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| - | |
| - | /* export cookies to this file when closing the handle */ |
| - | curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "/tmp/cookies.txt"); |
| - | |
| - | res = curl_easy_perform(curl); |
| - | |
| - | /* close the handle, write the cookies! */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Along with HTTP |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if HTTP is supported, CURLE_UNKNOWN_OPTION if not, or |
| - | CURLE_OUT_OF_MEMORY if there was insufficient heap space. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_COOKIE (3), |
| - | .BR CURLOPT_COOKIEFILE (3), |
| - | .BR CURLOPT_COOKIELIST (3) |
| @@ -0,0 +1,86 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_COOKIEJAR |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_COOKIE (3) |
| + | - CURLOPT_COOKIEFILE (3) |
| + | - CURLOPT_COOKIELIST (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_COOKIEJAR - file name to store cookies to |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIEJAR, char *filename); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a *filename* as a char *, null-terminated. This makes libcurl write |
| + | all internally known cookies to the specified file when |
| + | curl_easy_cleanup(3) is called. If no cookies are kept in memory at that |
| + | time, no file is created. Specify "-" as filename to instead have the cookies |
| + | written to stdout. Using this option also enables cookies for this session, so |
| + | if you for example follow a redirect it makes matching cookies get sent |
| + | accordingly. |
| + | |
| + | Note that libcurl does not read any cookies from the cookie jar specified with |
| + | this option. To read cookies from a file, use CURLOPT_COOKIEFILE(3). |
| + | |
| + | If the cookie jar file cannot be created or written to (when the |
| + | curl_easy_cleanup(3) is called), libcurl does not and cannot report an |
| + | error for this. Using CURLOPT_VERBOSE(3) or |
| + | CURLOPT_DEBUGFUNCTION(3) displays a warning, but that is the only |
| + | visible feedback you get about this possibly lethal situation. |
| + | |
| + | Cookies are imported in the Set-Cookie format without a domain name are not |
| + | exported by this option. |
| + | |
| + | The application does not have to keep the string around after setting this |
| + | option. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| + | |
| + | /* export cookies to this file when closing the handle */ |
| + | curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "/tmp/cookies.txt"); |
| + | |
| + | res = curl_easy_perform(curl); |
| + | |
| + | /* close the handle, write the cookies! */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Along with HTTP |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if HTTP is supported, CURLE_UNKNOWN_OPTION if not, or |
| + | CURLE_OUT_OF_MEMORY if there was insufficient heap space. |
| @@ -1,38 +1,32 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_COOKIELIST 3 "19 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_COOKIELIST \- add to or manipulate cookies held in memory |
| - | .SH SYNOPSIS |
| - | .nf |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_COOKIELIST |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_COOKIELIST (3) |
| + | - CURLOPT_COOKIE (3) |
| + | - CURLOPT_COOKIEFILE (3) |
| + | - CURLOPT_COOKIEJAR (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_COOKIELIST - add to or manipulate cookies held in memory |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIELIST, | |
| char *cookie); | |
| - | .SH DESCRIPTION |
| - | Pass a char * to a \fIcookie\fP string. |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a char pointer to a *cookie* string. |
| Such a cookie can be either a single line in Netscape / Mozilla format or just | |
| regular HTTP-style header (Set-Cookie: ...) format. This option also enables | |
| @@ -52,27 +46,37 @@ much better: use the Netscape file format. | |
| Additionally, there are commands available that perform actions if you pass in | |
| these exact strings: | |
| - | .IP ALL |
| + | |
| + | ## ALL |
| + | |
| erases all cookies held in memory | |
| - | .IP SESS |
| + | ## SESS |
| + | |
| erases all session cookies held in memory | |
| - | .IP FLUSH |
| - | writes all known cookies to the file specified by \fICURLOPT_COOKIEJAR(3)\fP |
| + | ## FLUSH |
| - | .IP RELOAD |
| - | loads all cookies from the files specified by \fICURLOPT_COOKIEFILE(3)\fP |
| + | writes all known cookies to the file specified by CURLOPT_COOKIEJAR(3) |
| + | |
| + | ## RELOAD |
| + | |
| + | loads all cookies from the files specified by CURLOPT_COOKIEFILE(3) |
| + | |
| + | # DEFAULT |
| - | .SH DEFAULT |
| NULL | |
| - | .SH PROTOCOLS |
| + | |
| + | # PROTOCOLS |
| + | |
| HTTP | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| /* an inline import of a cookie in Netscape format. */ | |
| - | #define SEP "\\t" /* Tab separates the fields */ |
| + | #define SEP "\t" /* Tab separates the fields */ |
| int main(void) | |
| { | |
| @@ -109,23 +113,24 @@ int main(void) | |
| curl_easy_cleanup(curl); /* cookies exported to cookies.txt */ | |
| } | |
| } | |
| - | .fi |
| - | .SH "Cookie file format" |
| + | ~~~ |
| + | |
| + | # Cookie file format |
| + | |
| The cookie file format and general cookie concepts in curl are described | |
| online here: https://curl.se/docs/http-cookies.html | |
| - | .SH AVAILABILITY |
| - | \fBALL\fP was added in 7.14.1 |
| - | \fBSESS\fP was added in 7.15.4 |
| + | # AVAILABILITY |
| + | |
| + | **ALL** was added in 7.14.1 |
| + | |
| + | **SESS** was added in 7.15.4 |
| + | |
| + | **FLUSH** was added in 7.17.1 |
| + | |
| + | **RELOAD** was added in 7.39.0 |
| - | \fBFLUSH\fP was added in 7.17.1 |
| + | # RETURN VALUE |
| - | \fBRELOAD\fP was added in 7.39.0 |
| - | .SH RETURN VALUE |
| Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or | |
| CURLE_OUT_OF_MEMORY if there was insufficient heap space. | |
| - | .SH "SEE ALSO" |
| - | .BR CURLINFO_COOKIELIST (3), |
| - | .BR CURLOPT_COOKIE (3), |
| - | .BR CURLOPT_COOKIEFILE (3), |
| - | .BR CURLOPT_COOKIEJAR (3) |
| @@ -1,77 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_COOKIESESSION 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_COOKIESESSION \- start a new cookie session |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIESESSION, long init); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long set to 1 to mark this as a new cookie "session". It forces libcurl |
| - | to ignore all cookies it is about to load that are "session cookies" from the |
| - | previous session. By default, libcurl always loads all cookies, independent if |
| - | they are session cookies or not. Session cookies are cookies without expiry |
| - | date and they are meant to be alive and existing for this "session" only. |
| - | |
| - | A "session" is usually defined in browser land for as long as you have your |
| - | browser up, more or less. libcurl needs the application to use this option to |
| - | tell it when a new session starts, otherwise it assumes everything is still in |
| - | the same session. |
| - | .SH DEFAULT |
| - | 0 |
| - | .SH PROTOCOLS |
| - | HTTP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| - | |
| - | /* new "session", do not load session cookies */ |
| - | curl_easy_setopt(curl, CURLOPT_COOKIESESSION, 1L); |
| - | |
| - | /* get the (non session) cookies from this file */ |
| - | curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookies.txt"); |
| - | |
| - | res = curl_easy_perform(curl); |
| - | |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Along with HTTP |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_COOKIE (3), |
| - | .BR CURLOPT_COOKIEFILE (3), |
| - | .BR CURLOPT_COOKIEJAR (3) |
| @@ -0,0 +1,75 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_COOKIESESSION |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_COOKIE (3) |
| + | - CURLOPT_COOKIEFILE (3) |
| + | - CURLOPT_COOKIEJAR (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_COOKIESESSION - start a new cookie session |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIESESSION, long init); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long set to 1 to mark this as a new cookie "session". It forces libcurl |
| + | to ignore all cookies it is about to load that are "session cookies" from the |
| + | previous session. By default, libcurl always loads all cookies, independent if |
| + | they are session cookies or not. Session cookies are cookies without expiry |
| + | date and they are meant to be alive and existing for this "session" only. |
| + | |
| + | A "session" is usually defined in browser land for as long as you have your |
| + | browser up, more or less. libcurl needs the application to use this option to |
| + | tell it when a new session starts, otherwise it assumes everything is still in |
| + | the same session. |
| + | |
| + | # DEFAULT |
| + | |
| + | 0 |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| + | |
| + | /* new "session", do not load session cookies */ |
| + | curl_easy_setopt(curl, CURLOPT_COOKIESESSION, 1L); |
| + | |
| + | /* get the (non session) cookies from this file */ |
| + | curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookies.txt"); |
| + | |
| + | res = curl_easy_perform(curl); |
| + | |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Along with HTTP |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK |
| @@ -1,80 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_COPYPOSTFIELDS 3 "19 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_COPYPOSTFIELDS \- have libcurl copy data to POST |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COPYPOSTFIELDS, char *data); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a char * as parameter, which should be the full \fIdata\fP to post in a |
| - | HTTP POST operation. It behaves as the \fICURLOPT_POSTFIELDS(3)\fP option, but |
| - | the original data is instead copied by the library, allowing the application |
| - | to overwrite the original data after setting this option. |
| - | |
| - | Because data are copied, care must be taken when using this option in |
| - | conjunction with \fICURLOPT_POSTFIELDSIZE(3)\fP or |
| - | \fICURLOPT_POSTFIELDSIZE_LARGE(3)\fP: If the size has not been set prior to |
| - | \fICURLOPT_COPYPOSTFIELDS(3)\fP, the data is assumed to be a null-terminated |
| - | string; else the stored size informs the library about the byte count to |
| - | copy. In any case, the size must not be changed after |
| - | \fICURLOPT_COPYPOSTFIELDS(3)\fP, unless another \fICURLOPT_POSTFIELDS(3)\fP or |
| - | \fICURLOPT_COPYPOSTFIELDS(3)\fP option is issued. |
| - | .SH DEFAULT |
| - | NULL |
| - | .SH PROTOCOLS |
| - | HTTP(S) |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | char local_buffer[1024]="data to send"; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | /* size of the data to copy from the buffer and send in the request */ |
| - | curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 12L); |
| - | |
| - | /* send data from the local stack */ |
| - | curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, local_buffer); |
| - | |
| - | curl_easy_perform(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.17.1 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or |
| - | CURLE_OUT_OF_MEMORY if there was insufficient heap space. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_MIMEPOST (3), |
| - | .BR CURLOPT_POSTFIELDS (3), |
| - | .BR CURLOPT_POSTFIELDSIZE (3), |
| - | .BR CURLOPT_UPLOAD (3) |
| @@ -0,0 +1,78 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_COPYPOSTFIELDS |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_MIMEPOST (3) |
| + | - CURLOPT_POSTFIELDS (3) |
| + | - CURLOPT_POSTFIELDSIZE (3) |
| + | - CURLOPT_UPLOAD (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_COPYPOSTFIELDS - have libcurl copy data to POST |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COPYPOSTFIELDS, char *data); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a char pointer as parameter, which should be the full *data* to post in a |
| + | HTTP POST operation. It behaves as the CURLOPT_POSTFIELDS(3) option, but the |
| + | original data is instead copied by the library, allowing the application to |
| + | overwrite the original data after setting this option. |
| + | |
| + | Because data are copied, care must be taken when using this option in |
| + | conjunction with CURLOPT_POSTFIELDSIZE(3) or |
| + | CURLOPT_POSTFIELDSIZE_LARGE(3): If the size has not been set prior to |
| + | CURLOPT_COPYPOSTFIELDS(3), the data is assumed to be a null-terminated |
| + | string; else the stored size informs the library about the byte count to |
| + | copy. In any case, the size must not be changed after |
| + | CURLOPT_COPYPOSTFIELDS(3), unless another CURLOPT_POSTFIELDS(3) or |
| + | CURLOPT_COPYPOSTFIELDS(3) option is issued. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP(S) |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | char local_buffer[1024]="data to send"; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | /* size of the data to copy from the buffer and send in the request */ |
| + | curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 12L); |
| + | |
| + | /* send data from the local stack */ |
| + | curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, local_buffer); |
| + | |
| + | curl_easy_perform(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.17.1 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or |
| + | CURLE_OUT_OF_MEMORY if there was insufficient heap space. |
| @@ -1,64 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CRLF 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CRLF \- CRLF conversion |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CRLF, long conv); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long. If the value is set to 1 (one), libcurl converts Unix newlines to |
| - | CRLF newlines on transfers. Disable this option again by setting the value to |
| - | 0 (zero). |
| - | |
| - | This is a legacy option of questionable use. |
| - | .SH DEFAULT |
| - | 0 |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode ret; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/"); |
| - | curl_easy_setopt(curl, CURLOPT_CRLF, 1L); |
| - | ret = curl_easy_perform(curl); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | SMTP since 7.40.0, other protocols since they were introduced |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_CONV_FROM_NETWORK_FUNCTION (3), |
| - | .BR CURLOPT_CONV_TO_NETWORK_FUNCTION (3) |
| @@ -0,0 +1,62 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CRLF |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CONV_FROM_NETWORK_FUNCTION (3) |
| + | - CURLOPT_CONV_TO_NETWORK_FUNCTION (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CRLF - CRLF conversion |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CRLF, long conv); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long. If the value is set to 1 (one), libcurl converts Unix newlines to |
| + | CRLF newlines on transfers. Disable this option again by setting the value to |
| + | 0 (zero). |
| + | |
| + | This is a legacy option of questionable use. |
| + | |
| + | # DEFAULT |
| + | |
| + | 0 |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode ret; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/"); |
| + | curl_easy_setopt(curl, CURLOPT_CRLF, 1L); |
| + | ret = curl_easy_perform(curl); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | SMTP since 7.40.0, other protocols since they were introduced |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK |
| @@ -1,84 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CRLFILE 3 "19 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CRLFILE \- Certificate Revocation List file |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CRLFILE, char *file); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a char * to a null-terminated string naming a \fIfile\fP with the |
| - | concatenation of CRL (in PEM format) to use in the certificate validation that |
| - | occurs during the SSL exchange. |
| - | |
| - | When curl is built to use GnuTLS, there is no way to influence the use of CRL |
| - | passed to help in the verification process. |
| - | |
| - | When libcurl is built with OpenSSL support, X509_V_FLAG_CRL_CHECK and |
| - | X509_V_FLAG_CRL_CHECK_ALL are both set, requiring CRL check against all the |
| - | elements of the certificate chain if a CRL file is passed. Also note that |
| - | \fICURLOPT_CRLFILE(3)\fP implies \fBCURLSSLOPT_NO_PARTIALCHAIN\fP (see |
| - | \fICURLOPT_SSL_OPTIONS(3)\fP) since curl 7.71.0 due to an OpenSSL bug. |
| - | |
| - | This option makes sense only when used in combination with the |
| - | \fICURLOPT_SSL_VERIFYPEER(3)\fP option. |
| - | |
| - | A specific error code (\fICURLE_SSL_CRL_BADFILE\fP) is defined with the |
| - | option. It is returned when the SSL exchange fails because the CRL file cannot |
| - | be loaded. A failure in certificate verification due to a revocation |
| - | information found in the CRL does not trigger this specific error. |
| - | |
| - | The application does not have to keep the string around after setting this |
| - | option. |
| - | .SH DEFAULT |
| - | NULL |
| - | .SH PROTOCOLS |
| - | All TLS-based protocols |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| - | curl_easy_setopt(curl, CURLOPT_CRLFILE, "/etc/certs/crl.pem"); |
| - | res = curl_easy_perform(curl); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.19.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or |
| - | CURLE_OUT_OF_MEMORY if there was insufficient heap space. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_PROXY_CRLFILE (3), |
| - | .BR CURLOPT_SSL_VERIFYHOST (3), |
| - | .BR CURLOPT_SSL_VERIFYPEER (3) |
| @@ -0,0 +1,82 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CRLFILE |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_PROXY_CRLFILE (3) |
| + | - CURLOPT_SSL_VERIFYHOST (3) |
| + | - CURLOPT_SSL_VERIFYPEER (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CRLFILE - Certificate Revocation List file |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CRLFILE, char *file); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a char pointer to a null-terminated string naming a *file* with the |
| + | concatenation of CRL (in PEM format) to use in the certificate validation that |
| + | occurs during the SSL exchange. |
| + | |
| + | When curl is built to use GnuTLS, there is no way to influence the use of CRL |
| + | passed to help in the verification process. |
| + | |
| + | When libcurl is built with OpenSSL support, X509_V_FLAG_CRL_CHECK and |
| + | X509_V_FLAG_CRL_CHECK_ALL are both set, requiring CRL check against all the |
| + | elements of the certificate chain if a CRL file is passed. Also note that |
| + | CURLOPT_CRLFILE(3) implies **CURLSSLOPT_NO_PARTIALCHAIN** (see |
| + | CURLOPT_SSL_OPTIONS(3)) since curl 7.71.0 due to an OpenSSL bug. |
| + | |
| + | This option makes sense only when used in combination with the |
| + | CURLOPT_SSL_VERIFYPEER(3) option. |
| + | |
| + | A specific error code (*CURLE_SSL_CRL_BADFILE*) is defined with the option. It |
| + | is returned when the SSL exchange fails because the CRL file cannot be |
| + | loaded. A failure in certificate verification due to a revocation information |
| + | found in the CRL does not trigger this specific error. |
| + | |
| + | The application does not have to keep the string around after setting this |
| + | option. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All TLS-based protocols |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| + | curl_easy_setopt(curl, CURLOPT_CRLFILE, "/etc/certs/crl.pem"); |
| + | res = curl_easy_perform(curl); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.19.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or |
| + | CURLE_OUT_OF_MEMORY if there was insufficient heap space. |
| @@ -1,81 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CURLU 3 "28 Oct 2018" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CURLU \- URL in URL handle format |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CURLU, CURLU *pointer); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass in a pointer to the \fIURL\fP handle to work with. The parameter should |
| - | be a \fICURLU *\fP. Setting \fICURLOPT_CURLU(3)\fP explicitly overrides |
| - | \fICURLOPT_URL(3)\fP. |
| - | |
| - | \fICURLOPT_URL(3)\fP or \fICURLOPT_CURLU(3)\fP \fBmust\fP be set before a |
| - | transfer is started. |
| - | |
| - | libcurl uses this handle and its contents read-only and does not change its |
| - | contents. An application can update the contents of the URL handle after a |
| - | transfer is done and if the same handle is used in a subsequent request the |
| - | updated contents is used. |
| - | .SH DEFAULT |
| - | The default value of this parameter is NULL. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | CURLU *urlp = curl_url(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | CURLUcode ret; |
| - | ret = curl_url_set(urlp, CURLUPART_URL, "https://example.com", 0); |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_CURLU, urlp); |
| - | |
| - | res = curl_easy_perform(curl); |
| - | |
| - | curl_url_cleanup(urlp); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.63.0. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR curl_url (3), |
| - | .BR curl_url_cleanup (3), |
| - | .BR curl_url_dup (3), |
| - | .BR curl_url_get (3), |
| - | .BR curl_url_set (3), |
| - | .BR curl_url_strerror (3), |
| - | .BR CURLOPT_URL (3) |
| @@ -0,0 +1,79 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CURLU |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_URL (3) |
| + | - curl_url (3) |
| + | - curl_url_cleanup (3) |
| + | - curl_url_dup (3) |
| + | - curl_url_get (3) |
| + | - curl_url_set (3) |
| + | - curl_url_strerror (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CURLU - URL in URL handle format |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CURLU, CURLU *pointer); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass in a pointer to the *URL* handle to work with. The parameter should be a |
| + | *CURLU pointer*. Setting CURLOPT_CURLU(3) explicitly overrides |
| + | CURLOPT_URL(3). |
| + | |
| + | CURLOPT_URL(3) or CURLOPT_CURLU(3) **must** be set before a |
| + | transfer is started. |
| + | |
| + | libcurl uses this handle and its contents read-only and does not change its |
| + | contents. An application can update the contents of the URL handle after a |
| + | transfer is done and if the same handle is used in a subsequent request the |
| + | updated contents is used. |
| + | |
| + | # DEFAULT |
| + | |
| + | The default value of this parameter is NULL. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | CURLU *urlp = curl_url(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | CURLUcode ret; |
| + | ret = curl_url_set(urlp, CURLUPART_URL, "https://example.com", 0); |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_CURLU, urlp); |
| + | |
| + | res = curl_easy_perform(curl); |
| + | |
| + | curl_url_cleanup(urlp); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.63.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,124 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_CUSTOMREQUEST 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_CUSTOMREQUEST \- custom request method |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CUSTOMREQUEST, char *method); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a pointer to a null-terminated string as parameter. |
| - | |
| - | When you change the request \fImethod\fP by setting |
| - | \fICURLOPT_CUSTOMREQUEST(3)\fP to something, you do not actually change how |
| - | libcurl behaves or acts in regards to the particular request method, it only |
| - | changes the actual string sent in the request. |
| - | |
| - | libcurl passes on the verbatim string in its request without any filter or |
| - | other safe guards. That includes white space and control characters. |
| - | |
| - | Restore to the internal default by setting this to NULL. |
| - | |
| - | This option can be used to specify the request: |
| - | .IP HTTP |
| - | Instead of GET or HEAD when performing HTTP based requests. This is |
| - | particularly useful, for example, for performing an HTTP DELETE request. |
| - | |
| - | For example: |
| - | |
| - | When you tell libcurl to do a HEAD request, but then specify a GET though a |
| - | custom request libcurl still acts as if it sent a HEAD. To switch to a proper |
| - | HEAD use \fICURLOPT_NOBODY(3)\fP, to switch to a proper POST use |
| - | \fICURLOPT_POST(3)\fP or \fICURLOPT_POSTFIELDS(3)\fP and to switch to a proper |
| - | GET use \fICURLOPT_HTTPGET(3)\fP. |
| - | |
| - | Many people have wrongly used this option to replace the entire request with |
| - | their own, including multiple headers and POST contents. While that might work |
| - | in many cases, it might cause libcurl to send invalid requests and it could |
| - | possibly confuse the remote server badly. Use \fICURLOPT_POST(3)\fP and |
| - | \fICURLOPT_POSTFIELDS(3)\fP to set POST data. Use \fICURLOPT_HTTPHEADER(3)\fP |
| - | to replace or extend the set of headers sent by libcurl. Use |
| - | \fICURLOPT_HTTP_VERSION(3)\fP to change HTTP version. |
| - | |
| - | .IP FTP |
| - | Instead of LIST and NLST when performing FTP directory listings. |
| - | .IP IMAP |
| - | Instead of LIST when issuing IMAP based requests. |
| - | .IP POP3 |
| - | Instead of LIST and RETR when issuing POP3 based requests. |
| - | |
| - | For example: |
| - | |
| - | When you tell libcurl to use a custom request it behaves like a LIST or RETR |
| - | command was sent where it expects data to be returned by the server. As such |
| - | \fICURLOPT_NOBODY(3)\fP should be used when specifying commands such as |
| - | \fBDELE\fP and \fBNOOP\fP for example. |
| - | .IP SMTP |
| - | Instead of a \fBHELP\fP or \fBVRFY\fP when issuing SMTP based requests. |
| - | |
| - | For example: |
| - | |
| - | Normally a multi line response is returned which can be used, in conjunction |
| - | with \fICURLOPT_MAIL_RCPT(3)\fP, to specify an EXPN request. If the |
| - | \fICURLOPT_NOBODY(3)\fP option is specified then the request can be used to |
| - | issue \fBNOOP\fP and \fBRSET\fP commands. |
| - | |
| - | The application does not have to keep the string around after setting this |
| - | option. |
| - | .SH DEFAULT |
| - | NULL |
| - | .SH PROTOCOLS |
| - | HTTP, FTP, IMAP, POP3 and SMTP |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| - | |
| - | /* DELETE the given path */ |
| - | curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE"); |
| - | |
| - | res = curl_easy_perform(curl); |
| - | |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | IMAP is supported since 7.30.0, POP3 since 7.26.0 and SMTP since 7.34.0. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or |
| - | CURLE_OUT_OF_MEMORY if there was insufficient heap space. |
| - | .SH "SEE ALSO" |
| - | .BR CURLINFO_EFFECTIVE_METHOD (3), |
| - | .BR CURLOPT_HTTPHEADER (3), |
| - | .BR CURLOPT_NOBODY (3), |
| - | .BR CURLOPT_REQUEST_TARGET (3) |
| @@ -0,0 +1,130 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_CUSTOMREQUEST |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_EFFECTIVE_METHOD (3) |
| + | - CURLOPT_HTTPHEADER (3) |
| + | - CURLOPT_NOBODY (3) |
| + | - CURLOPT_REQUEST_TARGET (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_CUSTOMREQUEST - custom request method |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CUSTOMREQUEST, char *method); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a pointer to a null-terminated string as parameter. |
| + | |
| + | When changing the request *method* by setting CURLOPT_CUSTOMREQUEST(3), you |
| + | do not actually change how libcurl behaves or acts: you only change the actual |
| + | string sent in the request. |
| + | |
| + | libcurl passes on the verbatim string in its request without any filter or |
| + | other safe guards. That includes white space and control characters. |
| + | |
| + | Restore to the internal default by setting this to NULL. |
| + | |
| + | This option can be used to specify the request: |
| + | |
| + | ## HTTP |
| + | |
| + | Instead of GET or HEAD when performing HTTP based requests. This is |
| + | particularly useful, for example, for performing an HTTP DELETE request. |
| + | |
| + | For example: |
| + | |
| + | When you tell libcurl to do a HEAD request, but then specify a GET though a |
| + | custom request libcurl still acts as if it sent a HEAD. To switch to a proper |
| + | HEAD use CURLOPT_NOBODY(3), to switch to a proper POST use |
| + | CURLOPT_POST(3) or CURLOPT_POSTFIELDS(3) and to switch to a proper |
| + | GET use CURLOPT_HTTPGET(3). |
| + | |
| + | Many people have wrongly used this option to replace the entire request with |
| + | their own, including multiple headers and POST contents. While that might work |
| + | in many cases, it might cause libcurl to send invalid requests and it could |
| + | possibly confuse the remote server badly. Use CURLOPT_POST(3) and |
| + | CURLOPT_POSTFIELDS(3) to set POST data. Use CURLOPT_HTTPHEADER(3) |
| + | to replace or extend the set of headers sent by libcurl. Use |
| + | CURLOPT_HTTP_VERSION(3) to change HTTP version. |
| + | |
| + | ## FTP |
| + | |
| + | Instead of LIST and NLST when performing FTP directory listings. |
| + | |
| + | ## IMAP |
| + | |
| + | Instead of LIST when issuing IMAP based requests. |
| + | |
| + | ## POP3 |
| + | |
| + | Instead of LIST and RETR when issuing POP3 based requests. |
| + | |
| + | For example: |
| + | |
| + | When you tell libcurl to use a custom request it behaves like a LIST or RETR |
| + | command was sent where it expects data to be returned by the server. As such |
| + | CURLOPT_NOBODY(3) should be used when specifying commands such as |
| + | **DELE** and **NOOP** for example. |
| + | |
| + | ## SMTP |
| + | |
| + | Instead of a **HELP** or **VRFY** when issuing SMTP based requests. |
| + | |
| + | For example: |
| + | |
| + | Normally a multi line response is returned which can be used, in conjunction |
| + | with CURLOPT_MAIL_RCPT(3), to specify an EXPN request. If the |
| + | CURLOPT_NOBODY(3) option is specified then the request can be used to |
| + | issue **NOOP** and **RSET** commands. |
| + | |
| + | The application does not have to keep the string around after setting this |
| + | option. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL |
| + | |
| + | # PROTOCOLS |
| + | |
| + | HTTP, FTP, IMAP, POP3 and SMTP |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| + | |
| + | /* DELETE the given path */ |
| + | curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE"); |
| + | |
| + | res = curl_easy_perform(curl); |
| + | |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | IMAP is supported since 7.30.0, POP3 since 7.26.0 and SMTP since 7.34.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or |
| + | CURLE_OUT_OF_MEMORY if there was insufficient heap space. |
| @@ -1,88 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_DEBUGDATA 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_DEBUGDATA \- pointer passed to the debug callback |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEBUGDATA, void *pointer); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a \fIpointer\fP to whatever you want passed in to your |
| - | \fICURLOPT_DEBUGFUNCTION(3)\fP in the last void * argument. This pointer is |
| - | not used by libcurl, it is only passed to the callback. |
| - | .SH DEFAULT |
| - | NULL |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | struct data { |
| - | void *custom; |
| - | }; |
| - | |
| - | static int my_trace(CURL *handle, curl_infotype type, |
| - | char *data, size_t size, |
| - | void *clientp) |
| - | { |
| - | struct data *mine = clientp; |
| - | printf("our ptr: %p\\n", mine->custom); |
| - | |
| - | /* output debug info */ |
| - | } |
| - | |
| - | int main(void) |
| - | { |
| - | CURL *curl; |
| - | CURLcode res; |
| - | struct data my_tracedata; |
| - | |
| - | curl = curl_easy_init(); |
| - | if(curl) { |
| - | curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace); |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_DEBUGDATA, &my_tracedata); |
| - | |
| - | /* the DEBUGFUNCTION has no effect until we enable VERBOSE */ |
| - | curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| - | res = curl_easy_perform(curl); |
| - | |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | return 0; |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Always |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_DEBUGFUNCTION (3), |
| - | .BR CURLOPT_STDERR (3) |
| @@ -0,0 +1,86 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_DEBUGDATA |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_DEBUGFUNCTION (3) |
| + | - CURLOPT_STDERR (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_DEBUGDATA - pointer passed to the debug callback |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEBUGDATA, void *pointer); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a *pointer* to whatever you want passed in to your |
| + | CURLOPT_DEBUGFUNCTION(3) in the last void * argument. This pointer is |
| + | not used by libcurl, it is only passed to the callback. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | struct data { |
| + | void *custom; |
| + | }; |
| + | |
| + | static int my_trace(CURL *handle, curl_infotype type, |
| + | char *data, size_t size, |
| + | void *clientp) |
| + | { |
| + | struct data *mine = clientp; |
| + | printf("our ptr: %p\n", mine->custom); |
| + | |
| + | /* output debug info */ |
| + | } |
| + | |
| + | int main(void) |
| + | { |
| + | CURL *curl; |
| + | CURLcode res; |
| + | struct data my_tracedata; |
| + | |
| + | curl = curl_easy_init(); |
| + | if(curl) { |
| + | curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace); |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_DEBUGDATA, &my_tracedata); |
| + | |
| + | /* the DEBUGFUNCTION has no effect until we enable VERBOSE */ |
| + | curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| + | res = curl_easy_perform(curl); |
| + | |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | return 0; |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Always |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK |
| @@ -1,32 +1,24 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_DEBUGFUNCTION 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_DEBUGFUNCTION \- debug callback |
| - | .SH SYNOPSIS |
| - | .nf |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_DEBUGFUNCTION |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_CONN_ID (3) |
| + | - CURLINFO_XFER_ID (3) |
| + | - CURLOPT_DEBUGDATA (3) |
| + | - CURLOPT_VERBOSE (3) |
| + | - curl_global_trace (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_DEBUGFUNCTION - debug callback |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| typedef enum { | |
| @@ -48,51 +40,72 @@ int debug_callback(CURL *handle, | |
| CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEBUGFUNCTION, | |
| debug_callback); | |
| - | .SH DESCRIPTION |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| Pass a pointer to your callback function, which should match the prototype | |
| shown above. | |
| - | \fICURLOPT_DEBUGFUNCTION(3)\fP replaces the standard debug function used when |
| - | \fICURLOPT_VERBOSE(3)\fP is in effect. This callback receives debug |
| - | information, as specified in the \fItype\fP argument. This function must |
| - | return 0. The \fIdata\fP pointed to by the char * passed to this function is |
| - | not null-terminated, but is exactly of the \fIsize\fP as told by the |
| - | \fIsize\fP argument. |
| + | CURLOPT_DEBUGFUNCTION(3) replaces the standard debug function used when |
| + | CURLOPT_VERBOSE(3) is in effect. This callback receives debug |
| + | information, as specified in the *type* argument. This function must |
| + | return 0. The *data* pointed to by the char * passed to this function is |
| + | not null-terminated, but is exactly of the *size* as told by the |
| + | *size* argument. |
| + | |
| + | The *clientp* argument is the pointer set with CURLOPT_DEBUGDATA(3). |
| + | |
| + | Available **curl_infotype** values: |
| - | The \fIclientp\fP argument is the pointer set with \fICURLOPT_DEBUGDATA(3)\fP. |
| + | ## CURLINFO_TEXT |
| - | Available \fBcurl_infotype\fP values: |
| - | .RS |
| - | .IP CURLINFO_TEXT |
| The data is informational text. | |
| - | .IP CURLINFO_HEADER_IN |
| + | |
| + | ## CURLINFO_HEADER_IN |
| + | |
| The data is header (or header-like) data received from the peer. | |
| - | .IP CURLINFO_HEADER_OUT |
| + | |
| + | ## CURLINFO_HEADER_OUT |
| + | |
| The data is header (or header-like) data sent to the peer. | |
| - | .IP CURLINFO_DATA_IN |
| + | |
| + | ## CURLINFO_DATA_IN |
| + | |
| The data is the unprocessed protocol data received from the peer. Even if the | |
| data is encoded or compressed, it is not not provided decoded nor decompressed | |
| to this callback. If you need the data in decoded and decompressed form, use | |
| - | \fICURLOPT_WRITEFUNCTION(3)\fP. |
| - | .IP CURLINFO_DATA_OUT |
| + | CURLOPT_WRITEFUNCTION(3). |
| + | |
| + | ## CURLINFO_DATA_OUT |
| + | |
| The data is protocol data sent to the peer. | |
| - | .IP CURLINFO_SSL_DATA_OUT |
| + | |
| + | ## CURLINFO_SSL_DATA_OUT |
| + | |
| The data is SSL/TLS (binary) data sent to the peer. | |
| - | .IP CURLINFO_SSL_DATA_IN |
| + | |
| + | ## CURLINFO_SSL_DATA_IN |
| + | |
| The data is SSL/TLS (binary) data received from the peer. | |
| - | .RE |
| - | WARNING: This callback may be called with the curl \fIhandle\fP set to an |
| + | WARNING: This callback may be called with the curl *handle* set to an |
| internal handle. (Added in 8.4.0) | |
| - | If you need to distinguish your curl \fIhandle\fP from internal handles then |
| - | set \fICURLOPT_PRIVATE(3)\fP on your handle. |
| - | .SH DEFAULT |
| + | If you need to distinguish your curl *handle* from internal handles then |
| + | set CURLOPT_PRIVATE(3) on your handle. |
| + | |
| + | # DEFAULT |
| + | |
| NULL | |
| - | .SH PROTOCOLS |
| + | |
| + | # PROTOCOLS |
| + | |
| All | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| static | |
| void dump(const char *text, | |
| FILE *stream, unsigned char *ptr, size_t size) | |
| @@ -101,7 +114,7 @@ void dump(const char *text, | |
| size_t c; | |
| unsigned int width = 0x10; | |
| - | fprintf(stream, "%s, %10.10ld bytes (0x%8.8lx)\\n", |
| + | fprintf(stream, "%s, %10.10ld bytes (0x%8.8lx)\n", |
| text, (long)size, (long)size); | |
| for(i = 0; i < size; i += width) { | |
| @@ -121,7 +134,7 @@ void dump(const char *text, | |
| fputc(x, stream); | |
| } | |
| - | fputc('\\n', stream); /* newline */ |
| + | fputc('\n', stream); /* newline */ |
| } | |
| } | |
| @@ -184,7 +197,7 @@ int main(void) | |
| res = curl_easy_perform(curl); | |
| /* Check for errors */ | |
| if(res != CURLE_OK) | |
| - | fprintf(stderr, "curl_easy_perform() failed: %s\\n", |
| + | fprintf(stderr, "curl_easy_perform() failed: %s\n", |
| curl_easy_strerror(res)); | |
| /* always cleanup */ | |
| @@ -192,14 +205,12 @@ int main(void) | |
| } | |
| return 0; | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| Always | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| Returns CURLE_OK | |
| - | .SH "SEE ALSO" |
| - | .BR curl_global_trace (3), |
| - | .BR CURLINFO_CONN_ID (3), |
| - | .BR CURLINFO_XFER_ID (3), |
| - | .BR CURLOPT_DEBUGDATA (3), |
| - | .BR CURLOPT_VERBOSE (3) |
| @@ -1,91 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_DEFAULT_PROTOCOL 3 "18 Aug 2015" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_DEFAULT_PROTOCOL \- default protocol to use if the URL is missing a |
| - | scheme name |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEFAULT_PROTOCOL, |
| - | char *protocol); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | This option tells libcurl to use \fIprotocol\fP if the URL is missing a scheme |
| - | name. |
| - | |
| - | Use one of these protocol (scheme) names: |
| - | |
| - | dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3, |
| - | pop3s, rtsp, scp, sftp, smb, smbs, smtp, smtps, telnet, tftp |
| - | |
| - | An unknown or unsupported protocol causes error |
| - | \fICURLE_UNSUPPORTED_PROTOCOL\fP when libcurl parses a URL without a |
| - | scheme. Parsing happens when \fIcurl_easy_perform(3)\fP or |
| - | \fIcurl_multi_perform(3)\fP is called. The protocol set supported by libcurl |
| - | vary depending on how it was built. Use \fIcurl_version_info(3)\fP if you need |
| - | a list of protocol names supported by the build of libcurl that you are using. |
| - | |
| - | This option does not change the default proxy protocol (http). |
| - | |
| - | Without this option libcurl would make a guess based on the host, see |
| - | \fICURLOPT_URL(3)\fP for details. |
| - | |
| - | The application does not have to keep the string around after setting this |
| - | option. |
| - | .SH DEFAULT |
| - | NULL (make a guess based on the host) |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | /* set a URL without a scheme */ |
| - | curl_easy_setopt(curl, CURLOPT_URL, "example.com"); |
| - | |
| - | /* set the default protocol (scheme) for schemeless URLs */ |
| - | curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https"); |
| - | |
| - | /* Perform the request */ |
| - | curl_easy_perform(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.45.0 |
| - | .SH RETURN VALUE |
| - | CURLE_OK if the option is supported. |
| - | |
| - | CURLE_OUT_OF_MEMORY if there was insufficient heap space. |
| - | |
| - | CURLE_UNKNOWN_OPTION if the option is not supported. |
| - | .SH "SEE ALSO" |
| - | .BR CURLINFO_PROTOCOL (3), |
| - | .BR CURLINFO_SCHEME (3), |
| - | .BR CURLOPT_URL (3) |
| @@ -0,0 +1,89 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_DEFAULT_PROTOCOL |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLINFO_PROTOCOL (3) |
| + | - CURLINFO_SCHEME (3) |
| + | - CURLOPT_URL (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_DEFAULT_PROTOCOL - default protocol to use if the URL is missing a |
| + | scheme name |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEFAULT_PROTOCOL, |
| + | char *protocol); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | This option tells libcurl to use *protocol* if the URL is missing a scheme |
| + | name. |
| + | |
| + | Use one of these protocol (scheme) names: |
| + | |
| + | dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3, |
| + | pop3s, rtsp, scp, sftp, smb, smbs, smtp, smtps, telnet, tftp |
| + | |
| + | An unknown or unsupported protocol causes error |
| + | *CURLE_UNSUPPORTED_PROTOCOL* when libcurl parses a URL without a |
| + | scheme. Parsing happens when curl_easy_perform(3) or |
| + | curl_multi_perform(3) is called. The protocol set supported by libcurl |
| + | vary depending on how it was built. Use curl_version_info(3) if you need |
| + | a list of protocol names supported by the build of libcurl that you are using. |
| + | |
| + | This option does not change the default proxy protocol (http). |
| + | |
| + | Without this option libcurl would make a guess based on the host, see |
| + | CURLOPT_URL(3) for details. |
| + | |
| + | The application does not have to keep the string around after setting this |
| + | option. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL (make a guess based on the host) |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | /* set a URL without a scheme */ |
| + | curl_easy_setopt(curl, CURLOPT_URL, "example.com"); |
| + | |
| + | /* set the default protocol (scheme) for schemeless URLs */ |
| + | curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https"); |
| + | |
| + | /* Perform the request */ |
| + | curl_easy_perform(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.45.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLE_OK if the option is supported. |
| + | |
| + | CURLE_OUT_OF_MEMORY if there was insufficient heap space. |
| + | |
| + | CURLE_UNKNOWN_OPTION if the option is not supported. |
| @@ -1,82 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_DIRLISTONLY 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_DIRLISTONLY \- ask for names only in a directory listing |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DIRLISTONLY, long listonly); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | For FTP and SFTP based URLs a parameter set to 1 tells the library to list the |
| - | names of files in a directory, rather than performing a full directory listing |
| - | that would normally include file sizes, dates etc. |
| - | |
| - | For POP3 a parameter of 1 tells the library to list the email message or |
| - | messages on the POP3 server. This can be used to change the default behavior |
| - | of libcurl, when combined with a URL that contains a message ID, to perform a |
| - | "scan listing" which can then be used to determine the size of an email. |
| - | |
| - | Note: For FTP this causes a NLST command to be sent to the FTP server. Beware |
| - | that some FTP servers list only files in their response to NLST; they might not |
| - | include subdirectories and symbolic links. |
| - | |
| - | Setting this option to 1 also implies a directory listing even if the URL |
| - | does not end with a slash, which otherwise is necessary. |
| - | |
| - | Do not use this option if you also use \fICURLOPT_WILDCARDMATCH(3)\fP as it |
| - | effectively breaks that feature. |
| - | .SH DEFAULT |
| - | 0, disabled |
| - | .SH PROTOCOLS |
| - | FTP, SFTP and POP3 |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/"); |
| - | |
| - | /* list only */ |
| - | curl_easy_setopt(curl, CURLOPT_DIRLISTONLY, 1L); |
| - | |
| - | res = curl_easy_perform(curl); |
| - | |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This option was known as CURLOPT_FTPLISTONLY up to 7.16.4. POP3 is supported |
| - | since 7.21.5. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_CUSTOMREQUEST (3), |
| - | .BR CURLOPT_WILDCARDMATCH (3) |
| @@ -0,0 +1,80 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_DIRLISTONLY |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CUSTOMREQUEST (3) |
| + | - CURLOPT_WILDCARDMATCH (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_DIRLISTONLY - ask for names only in a directory listing |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DIRLISTONLY, long listonly); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | For FTP and SFTP based URLs a parameter set to 1 tells the library to list the |
| + | names of files in a directory, rather than performing a full directory listing |
| + | that would normally include file sizes, dates etc. |
| + | |
| + | For POP3 a parameter of 1 tells the library to list the email message or |
| + | messages on the POP3 server. This can be used to change the default behavior |
| + | of libcurl, when combined with a URL that contains a message ID, to perform a |
| + | "scan listing" which can then be used to determine the size of an email. |
| + | |
| + | Note: For FTP this causes a NLST command to be sent to the FTP server. Beware |
| + | that some FTP servers list only files in their response to NLST; they might |
| + | not include subdirectories and symbolic links. |
| + | |
| + | Setting this option to 1 also implies a directory listing even if the URL |
| + | does not end with a slash, which otherwise is necessary. |
| + | |
| + | Do not use this option if you also use CURLOPT_WILDCARDMATCH(3) as it |
| + | effectively breaks that feature. |
| + | |
| + | # DEFAULT |
| + | |
| + | 0, disabled |
| + | |
| + | # PROTOCOLS |
| + | |
| + | FTP, SFTP and POP3 |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/"); |
| + | |
| + | /* list only */ |
| + | curl_easy_setopt(curl, CURLOPT_DIRLISTONLY, 1L); |
| + | |
| + | res = curl_easy_perform(curl); |
| + | |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This option was known as CURLOPT_FTPLISTONLY up to 7.16.4. POP3 is supported |
| + | since 7.21.5. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,70 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_DISALLOW_USERNAME_IN_URL 3 "30 May 2018" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_DISALLOW_USERNAME_IN_URL \- disallow specifying username in the URL |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DISALLOW_USERNAME_IN_URL, |
| - | long disallow); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | A long parameter set to 1 tells the library to not allow URLs that include a |
| - | username. |
| - | |
| - | This is the equivalent to the \fICURLU_DISALLOW_USER\fP flag for the |
| - | \fIcurl_url_set(3)\fP function. |
| - | .SH DEFAULT |
| - | 0 (disabled) - user names are allowed by default. |
| - | .SH PROTOCOLS |
| - | Several |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | curl_easy_setopt(curl, CURLOPT_DISALLOW_USERNAME_IN_URL, 1L); |
| - | |
| - | curl_easy_perform(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.61.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | |
| - | \fIcurl_easy_perform(3)\fP returns CURLE_LOGIN_DENIED if this option is |
| - | enabled and a URL containing a username is specified. |
| - | .SH "SEE ALSO" |
| - | .BR curl_url_set (3), |
| - | .BR CURLOPT_PROTOCOLS (3), |
| - | .BR CURLOPT_URL (3), |
| - | .BR libcurl-security (3) |
| @@ -0,0 +1,68 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_DISALLOW_USERNAME_IN_URL |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_PROTOCOLS (3) |
| + | - CURLOPT_URL (3) |
| + | - curl_url_set (3) |
| + | - libcurl-security (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_DISALLOW_USERNAME_IN_URL - disallow specifying username in the URL |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DISALLOW_USERNAME_IN_URL, |
| + | long disallow); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | A long parameter set to 1 tells the library to not allow URLs that include a |
| + | username. |
| + | |
| + | This is the equivalent to the *CURLU_DISALLOW_USER* flag for the |
| + | curl_url_set(3) function. |
| + | |
| + | # DEFAULT |
| + | |
| + | 0 (disabled) - user names are allowed by default. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | Several |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | curl_easy_setopt(curl, CURLOPT_DISALLOW_USERNAME_IN_URL, 1L); |
| + | |
| + | curl_easy_perform(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.61.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| + | |
| + | curl_easy_perform(3) returns CURLE_LOGIN_DENIED if this option is |
| + | enabled and a URL containing a username is specified. |
| @@ -1,37 +1,31 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_DNS_CACHE_TIMEOUT 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_DNS_CACHE_TIMEOUT \- life-time for DNS cache entries |
| - | .SH SYNOPSIS |
| - | .nf |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_DNS_CACHE_TIMEOUT |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CONNECTTIMEOUT_MS (3) |
| + | - CURLOPT_DNS_SERVERS (3) |
| + | - CURLOPT_DNS_USE_GLOBAL_CACHE (3) |
| + | - CURLOPT_MAXAGE_CONN (3) |
| + | - CURLOPT_RESOLVE (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_DNS_CACHE_TIMEOUT - life-time for DNS cache entries |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| #include <curl/curl.h> | |
| CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_CACHE_TIMEOUT, long age); | |
| - | .fi |
| - | .SH DESCRIPTION |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| Pass a long, this sets the timeout in seconds. Name resolve results are kept | |
| in memory and used for this number of seconds. Set to zero to completely | |
| disable caching, or set to -1 to make the cached entries remain forever. By | |
| @@ -44,7 +38,7 @@ period. | |
| The name resolve functions of various libc implementations do not re-read name | |
| server information unless explicitly told so (for example, by calling | |
| - | \fIres_init(3)\fP). This may cause libcurl to keep using the older server even |
| + | *res_init(3)*). This may cause libcurl to keep using the older server even |
| if DHCP has updated the server info, and this may look like a DNS cache issue | |
| to the casual libcurl-app user. | |
| @@ -54,12 +48,18 @@ for a small amount of time into the future. | |
| Since version 8.1.0, libcurl prunes entries from the DNS cache if it exceeds | |
| 30,000 entries no matter which timeout value is used. | |
| - | .SH DEFAULT |
| + | |
| + | # DEFAULT |
| + | |
| 60 | |
| - | .SH PROTOCOLS |
| + | |
| + | # PROTOCOLS |
| + | |
| All | |
| - | .SH EXAMPLE |
| - | .nf |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| int main(void) | |
| { | |
| CURL *curl = curl_easy_init(); | |
| @@ -79,14 +79,12 @@ int main(void) | |
| curl_easy_cleanup(curl); | |
| } | |
| } | |
| - | .fi |
| - | .SH AVAILABILITY |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| Always | |
| - | .SH RETURN VALUE |
| + | |
| + | # RETURN VALUE |
| + | |
| Returns CURLE_OK | |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_CONNECTTIMEOUT_MS (3), |
| - | .BR CURLOPT_DNS_SERVERS (3), |
| - | .BR CURLOPT_DNS_USE_GLOBAL_CACHE (3), |
| - | .BR CURLOPT_MAXAGE_CONN (3), |
| - | .BR CURLOPT_RESOLVE (3) |
| @@ -1,71 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_DNS_INTERFACE 3 "19 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_DNS_INTERFACE \- interface to speak DNS over |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_INTERFACE, char *ifname); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a char * as parameter. Set the name of the network interface that the DNS |
| - | resolver should bind to. This must be an interface name (not an address). Set |
| - | this option to NULL to use the default setting (do not bind to a specific |
| - | interface). |
| - | |
| - | The application does not have to keep the string around after setting this |
| - | option. |
| - | .SH DEFAULT |
| - | NULL |
| - | .SH PROTOCOLS |
| - | All protocols except file:// - protocols that resolve host names. |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| - | curl_easy_setopt(curl, CURLOPT_DNS_INTERFACE, "eth0"); |
| - | res = curl_easy_perform(curl); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.33.0. This option also requires that libcurl was built with a |
| - | resolver backend that supports this operation. The c-ares backend is the only |
| - | such one. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, |
| - | or CURLE_NOT_BUILT_IN if support was disabled at compile-time. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_DNS_LOCAL_IP4 (3), |
| - | .BR CURLOPT_DNS_LOCAL_IP6 (3), |
| - | .BR CURLOPT_DNS_SERVERS (3), |
| - | .BR CURLOPT_INTERFACE (3) |
| @@ -0,0 +1,69 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_DNS_INTERFACE |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_DNS_LOCAL_IP4 (3) |
| + | - CURLOPT_DNS_LOCAL_IP6 (3) |
| + | - CURLOPT_DNS_SERVERS (3) |
| + | - CURLOPT_INTERFACE (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_DNS_INTERFACE - interface to speak DNS over |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_INTERFACE, char *ifname); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a char pointer as parameter. Set the name of the network interface that |
| + | the DNS resolver should bind to. This must be an interface name (not an |
| + | address). Set this option to NULL to use the default setting (do not bind to a |
| + | specific interface). |
| + | |
| + | The application does not have to keep the string around after setting this |
| + | option. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All protocols except file:// - protocols that resolve host names. |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| + | curl_easy_setopt(curl, CURLOPT_DNS_INTERFACE, "eth0"); |
| + | res = curl_easy_perform(curl); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.33.0. This option also requires that libcurl was built with a |
| + | resolver backend that supports this operation. The c-ares backend is the only |
| + | such one. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, |
| + | or CURLE_NOT_BUILT_IN if support was disabled at compile-time. |
| @@ -1,72 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_DNS_LOCAL_IP4 3 "19 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_DNS_LOCAL_IP4 \- IPv4 address to bind DNS resolves to |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_LOCAL_IP4, char *address); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Set the local IPv4 \fIaddress\fP that the resolver should bind to. The |
| - | argument should be of type char * and contain a single numerical IPv4 address |
| - | as a string. Set this option to NULL to use the default setting (do not bind |
| - | to a specific IP address). |
| - | |
| - | The application does not have to keep the string around after setting this |
| - | option. |
| - | .SH DEFAULT |
| - | NULL |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| - | curl_easy_setopt(curl, CURLOPT_DNS_LOCAL_IP4, "192.168.0.14"); |
| - | res = curl_easy_perform(curl); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This option requires that libcurl was built with a resolver backend that |
| - | supports this operation. The c-ares backend is the only such one. |
| - | |
| - | Added in 7.33.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, |
| - | CURLE_NOT_BUILT_IN if support was disabled at compile-time, or |
| - | CURLE_BAD_FUNCTION_ARGUMENT when given a bad address. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_DNS_INTERFACE (3), |
| - | .BR CURLOPT_DNS_LOCAL_IP6 (3), |
| - | .BR CURLOPT_DNS_SERVERS (3) |
| @@ -0,0 +1,70 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_DNS_LOCAL_IP4 |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_DNS_INTERFACE (3) |
| + | - CURLOPT_DNS_LOCAL_IP6 (3) |
| + | - CURLOPT_DNS_SERVERS (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_DNS_LOCAL_IP4 - IPv4 address to bind DNS resolves to |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_LOCAL_IP4, char *address); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Set the local IPv4 *address* that the resolver should bind to. The argument |
| + | should be of type char * and contain a single numerical IPv4 address as a |
| + | string. Set this option to NULL to use the default setting (do not bind to a |
| + | specific IP address). |
| + | |
| + | The application does not have to keep the string around after setting this |
| + | option. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| + | curl_easy_setopt(curl, CURLOPT_DNS_LOCAL_IP4, "192.168.0.14"); |
| + | res = curl_easy_perform(curl); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This option requires that libcurl was built with a resolver backend that |
| + | supports this operation. The c-ares backend is the only such one. |
| + | |
| + | Added in 7.33.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, |
| + | CURLE_NOT_BUILT_IN if support was disabled at compile-time, or |
| + | CURLE_BAD_FUNCTION_ARGUMENT when given a bad address. |
| @@ -1,72 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_DNS_LOCAL_IP6 3 "19 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_DNS_LOCAL_IP6 \- IPv6 address to bind DNS resolves to |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_LOCAL_IP6, char *address); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Set the local IPv6 \fIaddress\fP that the resolver should bind to. The |
| - | argument should be of type char * and contain a single IPv6 address as a |
| - | string. Set this option to NULL to use the default setting (do not bind to a |
| - | specific IP address). |
| - | |
| - | The application does not have to keep the string around after setting this |
| - | option. |
| - | .SH DEFAULT |
| - | NULL |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| - | curl_easy_setopt(curl, CURLOPT_DNS_LOCAL_IP6, "fe80::a9ff:fe46:b619"); |
| - | res = curl_easy_perform(curl); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This option requires that libcurl was built with a resolver backend that |
| - | supports this operation. The c-ares backend is the only such one. |
| - | |
| - | Added in 7.33.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, |
| - | CURLE_NOT_BUILT_IN if support was disabled at compile-time, or |
| - | CURLE_BAD_FUNCTION_ARGUMENT when given a bad address. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_DNS_INTERFACE (3), |
| - | .BR CURLOPT_DNS_LOCAL_IP4 (3), |
| - | .BR CURLOPT_DNS_SERVERS (3) |
| @@ -0,0 +1,70 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_DNS_LOCAL_IP6 |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_DNS_INTERFACE (3) |
| + | - CURLOPT_DNS_LOCAL_IP4 (3) |
| + | - CURLOPT_DNS_SERVERS (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_DNS_LOCAL_IP6 - IPv6 address to bind DNS resolves to |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_LOCAL_IP6, char *address); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Set the local IPv6 *address* that the resolver should bind to. The argument |
| + | should be of type char * and contain a single IPv6 address as a string. Set |
| + | this option to NULL to use the default setting (do not bind to a specific IP |
| + | address). |
| + | |
| + | The application does not have to keep the string around after setting this |
| + | option. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| + | curl_easy_setopt(curl, CURLOPT_DNS_LOCAL_IP6, "fe80::a9ff:fe46:b619"); |
| + | res = curl_easy_perform(curl); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This option requires that libcurl was built with a resolver backend that |
| + | supports this operation. The c-ares backend is the only such one. |
| + | |
| + | Added in 7.33.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, |
| + | CURLE_NOT_BUILT_IN if support was disabled at compile-time, or |
| + | CURLE_BAD_FUNCTION_ARGUMENT when given a bad address. |
| @@ -1,78 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_DNS_SERVERS 3 "19 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_DNS_SERVERS \- DNS servers to use |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_SERVERS, char *servers); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a char * that is the list of DNS servers to be used instead of the system |
| - | default. The format of the dns servers option is: |
| - | |
| - | host[:port][,host[:port]]... |
| - | |
| - | For example: |
| - | |
| - | 192.168.1.100,192.168.1.101,3.4.5.6 |
| - | |
| - | The application does not have to keep the string around after setting this |
| - | option. |
| - | .SH DEFAULT |
| - | NULL - use system default |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode res; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| - | curl_easy_setopt(curl, CURLOPT_DNS_SERVERS, |
| - | "192.168.1.100:53,192.168.1.101"); |
| - | res = curl_easy_perform(curl); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | This option requires that libcurl was built with a resolver backend that |
| - | supports this operation. The c-ares backend is the only such one. |
| - | |
| - | Added in 7.24.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, |
| - | CURLE_NOT_BUILT_IN if support was disabled at compile-time, |
| - | CURLE_BAD_FUNCTION_ARGUMENT when given an invalid server list, or |
| - | CURLE_OUT_OF_MEMORY if there was insufficient heap space. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_DNS_CACHE_TIMEOUT (3), |
| - | .BR CURLOPT_DNS_LOCAL_IP4 (3), |
| - | .BR CURLOPT_DNS_LOCAL_IP6 (3) |
| @@ -0,0 +1,76 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_DNS_SERVERS |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_DNS_CACHE_TIMEOUT (3) |
| + | - CURLOPT_DNS_LOCAL_IP4 (3) |
| + | - CURLOPT_DNS_LOCAL_IP6 (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_DNS_SERVERS - DNS servers to use |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_SERVERS, char *servers); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a char pointer that is the list of DNS servers to be used instead of the |
| + | system default. The format of the dns servers option is: |
| + | |
| + | host[:port][,host[:port]]... |
| + | |
| + | For example: |
| + | |
| + | 192.168.1.100,192.168.1.101,3.4.5.6 |
| + | |
| + | The application does not have to keep the string around after setting this |
| + | option. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL - use system default |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode res; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin"); |
| + | curl_easy_setopt(curl, CURLOPT_DNS_SERVERS, |
| + | "192.168.1.100:53,192.168.1.101"); |
| + | res = curl_easy_perform(curl); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | This option requires that libcurl was built with a resolver backend that |
| + | supports this operation. The c-ares backend is the only such one. |
| + | |
| + | Added in 7.24.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, |
| + | CURLE_NOT_BUILT_IN if support was disabled at compile-time, |
| + | CURLE_BAD_FUNCTION_ARGUMENT when given an invalid server list, or |
| + | CURLE_OUT_OF_MEMORY if there was insufficient heap space. |
| @@ -1,77 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_DNS_SHUFFLE_ADDRESSES 3 "3 March 2018" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_DNS_SHUFFLE_ADDRESSES \- shuffle IP addresses for hostname |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_SHUFFLE_ADDRESSES, long onoff); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long set to 1 to enable this option. |
| - | |
| - | When a name is resolved and more than one IP address is returned, this |
| - | function shuffles the order of all returned addresses so that they are used in |
| - | a random order. This is similar to the ordering behavior of the legacy |
| - | gethostbyname function which is no longer used on most platforms. |
| - | |
| - | Addresses are not reshuffled if name resolution is completed using the DNS |
| - | cache. \fICURLOPT_DNS_CACHE_TIMEOUT(3)\fP can be used together with this |
| - | option to reduce DNS cache timeout or disable caching entirely if frequent |
| - | reshuffling is needed. |
| - | |
| - | Since the addresses returned are randomly reordered, the order is not in |
| - | accordance with RFC 3484 or any other deterministic order that may be |
| - | generated by the system's name resolution implementation. This may have |
| - | performance impacts and may cause IPv4 to be used before IPv6 or vice versa. |
| - | .SH DEFAULT |
| - | 0 (disabled) |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | curl_easy_setopt(curl, CURLOPT_DNS_SHUFFLE_ADDRESSES, 1L); |
| - | |
| - | curl_easy_perform(curl); |
| - | |
| - | /* always cleanup */ |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.60.0 |
| - | .SH RETURN VALUE |
| - | CURLE_OK or an error such as CURLE_UNKNOWN_OPTION. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_DNS_CACHE_TIMEOUT (3), |
| - | .BR CURLOPT_IPRESOLVE (3) |
| @@ -0,0 +1,75 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_DNS_SHUFFLE_ADDRESSES |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_DNS_CACHE_TIMEOUT (3) |
| + | - CURLOPT_IPRESOLVE (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_DNS_SHUFFLE_ADDRESSES - shuffle IP addresses for hostname |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_SHUFFLE_ADDRESSES, long onoff); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long set to 1 to enable this option. |
| + | |
| + | When a name is resolved and more than one IP address is returned, this |
| + | function shuffles the order of all returned addresses so that they are used in |
| + | a random order. This is similar to the ordering behavior of the legacy |
| + | gethostbyname function which is no longer used on most platforms. |
| + | |
| + | Addresses are not reshuffled if name resolution is completed using the DNS |
| + | cache. CURLOPT_DNS_CACHE_TIMEOUT(3) can be used together with this |
| + | option to reduce DNS cache timeout or disable caching entirely if frequent |
| + | reshuffling is needed. |
| + | |
| + | Since the addresses returned are randomly reordered, the order is not in |
| + | accordance with RFC 3484 or any other deterministic order that may be |
| + | generated by the system's name resolution implementation. This may have |
| + | performance impacts and may cause IPv4 to be used before IPv6 or vice versa. |
| + | |
| + | # DEFAULT |
| + | |
| + | 0 (disabled) |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | curl_easy_setopt(curl, CURLOPT_DNS_SHUFFLE_ADDRESSES, 1L); |
| + | |
| + | curl_easy_perform(curl); |
| + | |
| + | /* always cleanup */ |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.60.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | CURLE_OK or an error such as CURLE_UNKNOWN_OPTION. |
| @@ -1,70 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_DNS_USE_GLOBAL_CACHE 3 "17 Jun 2014" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_DNS_USE_GLOBAL_CACHE \- global DNS cache |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_USE_GLOBAL_CACHE, |
| - | long enable); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Has no function since 7.62.0. Do not use! |
| - | |
| - | Pass a long. If the \fIenable\fP value is 1, it tells curl to use a global DNS |
| - | cache that survives between easy handle creations and deletions. This is not |
| - | thread-safe and this uses a global variable. |
| - | |
| - | See \fICURLOPT_SHARE(3)\fP and \fIcurl_share_init(3)\fP for the correct way to |
| - | share DNS cache between transfers. |
| - | .SH DEFAULT |
| - | 0 |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | CURLcode ret; |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| - | /* switch off the use of a global, thread unsafe, cache */ |
| - | curl_easy_setopt(curl, CURLOPT_DNS_USE_GLOBAL_CACHE, 0L); |
| - | ret = curl_easy_perform(curl); |
| - | curl_easy_cleanup(curl); |
| - | } |
| - | } |
| - | |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Deprecated since 7.11.1. Function removed in 7.62.0. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_DNS_CACHE_TIMEOUT (3), |
| - | .BR CURLOPT_SHARE (3) |
| @@ -0,0 +1,68 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_DNS_USE_GLOBAL_CACHE |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_DNS_CACHE_TIMEOUT (3) |
| + | - CURLOPT_SHARE (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_DNS_USE_GLOBAL_CACHE - global DNS cache |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_USE_GLOBAL_CACHE, |
| + | long enable); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Has no function since 7.62.0. Do not use! |
| + | |
| + | Pass a long. If the *enable* value is 1, it tells curl to use a global DNS |
| + | cache that survives between easy handle creations and deletions. This is not |
| + | thread-safe and this uses a global variable. |
| + | |
| + | See CURLOPT_SHARE(3) and curl_share_init(3) for the correct way to |
| + | share DNS cache between transfers. |
| + | |
| + | # DEFAULT |
| + | |
| + | 0 |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | CURLcode ret; |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); |
| + | /* switch off the use of a global, thread unsafe, cache */ |
| + | curl_easy_setopt(curl, CURLOPT_DNS_USE_GLOBAL_CACHE, 0L); |
| + | ret = curl_easy_perform(curl); |
| + | curl_easy_cleanup(curl); |
| + | } |
| + | } |
| + | |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Deprecated since 7.11.1. Function removed in 7.62.0. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,92 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_DOH_SSL_VERIFYHOST 3 "11 Feb 2021" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_DOH_SSL_VERIFYHOST \- verify the host name in the DoH SSL certificate |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DOH_SSL_VERIFYHOST, |
| - | long verify); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long set to 2L as asking curl to \fIverify\fP the DoH (DNS-over-HTTPS) |
| - | server's certificate name fields against the host name. |
| - | |
| - | This option is the DoH equivalent of \fICURLOPT_SSL_VERIFYHOST(3)\fP and |
| - | only affects requests to the DoH server. |
| - | |
| - | When \fICURLOPT_DOH_SSL_VERIFYHOST(3)\fP is 2, the SSL certificate provided by |
| - | the DoH server must indicate that the server name is the same as the server |
| - | name to which you meant to connect to, or the connection fails. |
| - | |
| - | Curl considers the DoH server the intended one when the Common Name field or a |
| - | Subject Alternate Name field in the certificate matches the host name in the |
| - | DoH URL to which you told Curl to connect. |
| - | |
| - | When the \fIverify\fP value is set to 1L it is treated the same as 2L. However |
| - | for consistency with the other \fIVERIFYHOST\fP options we suggest use 2 and |
| - | not 1. |
| - | |
| - | When the \fIverify\fP value is set to 0L, the connection succeeds regardless of |
| - | the names used in the certificate. Use that ability with caution! |
| - | |
| - | See also \fICURLOPT_DOH_SSL_VERIFYPEER(3)\fP to verify the digital signature |
| - | of the DoH server certificate. |
| - | .SH DEFAULT |
| - | 2 |
| - | .SH PROTOCOLS |
| - | DoH |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_DOH_URL, |
| - | "https://cloudflare-dns.com/dns-query"); |
| - | |
| - | /* Disable host name verification of the DoH server */ |
| - | curl_easy_setopt(curl, CURLOPT_DOH_SSL_VERIFYHOST, 0L); |
| - | |
| - | curl_easy_perform(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.76.0 |
| - | |
| - | If built TLS enabled. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_DOH_SSL_VERIFYPEER (3), |
| - | .BR CURLOPT_PROXY_SSL_VERIFYHOST (3), |
| - | .BR CURLOPT_PROXY_SSL_VERIFYPEER (3), |
| - | .BR CURLOPT_SSL_VERIFYHOST (3), |
| - | .BR CURLOPT_SSL_VERIFYPEER (3) |
| @@ -0,0 +1,90 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_DOH_SSL_VERIFYHOST |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_DOH_SSL_VERIFYPEER (3) |
| + | - CURLOPT_PROXY_SSL_VERIFYHOST (3) |
| + | - CURLOPT_PROXY_SSL_VERIFYPEER (3) |
| + | - CURLOPT_SSL_VERIFYHOST (3) |
| + | - CURLOPT_SSL_VERIFYPEER (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_DOH_SSL_VERIFYHOST - verify the host name in the DoH SSL certificate |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DOH_SSL_VERIFYHOST, |
| + | long verify); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long set to 2L as asking curl to *verify* the DoH (DNS-over-HTTPS) |
| + | server's certificate name fields against the host name. |
| + | |
| + | This option is the DoH equivalent of CURLOPT_SSL_VERIFYHOST(3) and |
| + | only affects requests to the DoH server. |
| + | |
| + | When CURLOPT_DOH_SSL_VERIFYHOST(3) is 2, the SSL certificate provided by |
| + | the DoH server must indicate that the server name is the same as the server |
| + | name to which you meant to connect to, or the connection fails. |
| + | |
| + | Curl considers the DoH server the intended one when the Common Name field or a |
| + | Subject Alternate Name field in the certificate matches the host name in the |
| + | DoH URL to which you told Curl to connect. |
| + | |
| + | When the *verify* value is set to 1L it is treated the same as 2L. However |
| + | for consistency with the other *VERIFYHOST* options we suggest use 2 and |
| + | not 1. |
| + | |
| + | When the *verify* value is set to 0L, the connection succeeds regardless of |
| + | the names used in the certificate. Use that ability with caution! |
| + | |
| + | See also CURLOPT_DOH_SSL_VERIFYPEER(3) to verify the digital signature |
| + | of the DoH server certificate. |
| + | |
| + | # DEFAULT |
| + | |
| + | 2 |
| + | |
| + | # PROTOCOLS |
| + | |
| + | DoH |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_DOH_URL, |
| + | "https://cloudflare-dns.com/dns-query"); |
| + | |
| + | /* Disable host name verification of the DoH server */ |
| + | curl_easy_setopt(curl, CURLOPT_DOH_SSL_VERIFYHOST, 0L); |
| + | |
| + | curl_easy_perform(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.76.0 |
| + | |
| + | If built TLS enabled. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,105 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_DOH_SSL_VERIFYPEER 3 "11 Feb 2021" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_DOH_SSL_VERIFYPEER \- verify the DoH SSL certificate |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DOH_SSL_VERIFYPEER, |
| - | long verify); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long as parameter set to 1L to enable or 0L to disable. |
| - | |
| - | This option tells curl to verify the authenticity of the DoH (DNS-over-HTTPS) |
| - | server's certificate. A value of 1 means curl verifies; 0 (zero) means it |
| - | does not. |
| - | |
| - | This option is the DoH equivalent of \fICURLOPT_SSL_VERIFYPEER(3)\fP and |
| - | only affects requests to the DoH server. |
| - | |
| - | When negotiating a TLS or SSL connection, the server sends a certificate |
| - | indicating its identity. Curl verifies whether the certificate is authentic, |
| - | i.e. that you can trust that the server is who the certificate says it is. |
| - | This trust is based on a chain of digital signatures, rooted in certification |
| - | authority (CA) certificates you supply. curl uses a default bundle of CA |
| - | certificates (the path for that is determined at build time) and you can |
| - | specify alternate certificates with the \fICURLOPT_CAINFO(3)\fP option |
| - | or the \fICURLOPT_CAPATH(3)\fP option. |
| - | |
| - | When \fICURLOPT_DOH_SSL_VERIFYPEER(3)\fP is enabled, and the verification |
| - | fails to prove that the certificate is authentic, the connection fails. When |
| - | the option is zero, the peer certificate verification succeeds regardless. |
| - | |
| - | Authenticating the certificate is not enough to be sure about the server. You |
| - | typically also want to ensure that the server is the server you mean to be |
| - | talking to. Use \fICURLOPT_DOH_SSL_VERIFYHOST(3)\fP for that. The check |
| - | that the host name in the certificate is valid for the host name you are |
| - | connecting to is done independently of the |
| - | \fICURLOPT_DOH_SSL_VERIFYPEER(3)\fP option. |
| - | |
| - | WARNING: disabling verification of the certificate allows bad guys to |
| - | man-in-the-middle the communication without you knowing it. Disabling |
| - | verification makes the communication insecure. Just having encryption on a |
| - | transfer is not enough as you cannot be sure that you are communicating with |
| - | the correct end-point. |
| - | .SH DEFAULT |
| - | 1 |
| - | .SH PROTOCOLS |
| - | DoH |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_DOH_URL, |
| - | "https://cloudflare-dns.com/dns-query"); |
| - | |
| - | /* Disable certificate verification of the DoH server */ |
| - | curl_easy_setopt(curl, CURLOPT_DOH_SSL_VERIFYPEER, 0L); |
| - | |
| - | curl_easy_perform(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.76.0 |
| - | |
| - | If built TLS enabled. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_CAINFO (3), |
| - | .BR CURLOPT_CAPATH (3), |
| - | .BR CURLOPT_DOH_SSL_VERIFYHOST (3), |
| - | .BR CURLOPT_PROXY_SSL_VERIFYHOST (3), |
| - | .BR CURLOPT_PROXY_SSL_VERIFYPEER (3), |
| - | .BR CURLOPT_SSL_VERIFYHOST (3), |
| - | .BR CURLOPT_SSL_VERIFYPEER (3) |
| @@ -0,0 +1,102 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_DOH_SSL_VERIFYPEER |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_CAINFO (3) |
| + | - CURLOPT_CAPATH (3) |
| + | - CURLOPT_DOH_SSL_VERIFYHOST (3) |
| + | - CURLOPT_PROXY_SSL_VERIFYHOST (3) |
| + | - CURLOPT_PROXY_SSL_VERIFYPEER (3) |
| + | - CURLOPT_SSL_VERIFYHOST (3) |
| + | - CURLOPT_SSL_VERIFYPEER (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_DOH_SSL_VERIFYPEER - verify the DoH SSL certificate |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DOH_SSL_VERIFYPEER, |
| + | long verify); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long as parameter set to 1L to enable or 0L to disable. |
| + | |
| + | This option tells curl to verify the authenticity of the DoH (DNS-over-HTTPS) |
| + | server's certificate. A value of 1 means curl verifies; 0 (zero) means it |
| + | does not. |
| + | |
| + | This option is the DoH equivalent of CURLOPT_SSL_VERIFYPEER(3) and |
| + | only affects requests to the DoH server. |
| + | |
| + | When negotiating a TLS or SSL connection, the server sends a certificate |
| + | indicating its identity. Curl verifies whether the certificate is authentic, |
| + | i.e. that you can trust that the server is who the certificate says it is. |
| + | This trust is based on a chain of digital signatures, rooted in certification |
| + | authority (CA) certificates you supply. curl uses a default bundle of CA |
| + | certificates (the path for that is determined at build time) and you can |
| + | specify alternate certificates with the CURLOPT_CAINFO(3) option or the |
| + | CURLOPT_CAPATH(3) option. |
| + | |
| + | When CURLOPT_DOH_SSL_VERIFYPEER(3) is enabled, and the verification fails to |
| + | prove that the certificate is authentic, the connection fails. When the option |
| + | is zero, the peer certificate verification succeeds regardless. |
| + | |
| + | Authenticating the certificate is not enough to be sure about the server. You |
| + | typically also want to ensure that the server is the server you mean to be |
| + | talking to. Use CURLOPT_DOH_SSL_VERIFYHOST(3) for that. The check that the |
| + | host name in the certificate is valid for the host name you are connecting to |
| + | is done independently of the CURLOPT_DOH_SSL_VERIFYPEER(3) option. |
| + | |
| + | WARNING: disabling verification of the certificate allows bad guys to |
| + | man-in-the-middle the communication without you knowing it. Disabling |
| + | verification makes the communication insecure. Just having encryption on a |
| + | transfer is not enough as you cannot be sure that you are communicating with |
| + | the correct end-point. |
| + | |
| + | # DEFAULT |
| + | |
| + | 1 |
| + | |
| + | # PROTOCOLS |
| + | |
| + | DoH |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_DOH_URL, |
| + | "https://cloudflare-dns.com/dns-query"); |
| + | |
| + | /* Disable certificate verification of the DoH server */ |
| + | curl_easy_setopt(curl, CURLOPT_DOH_SSL_VERIFYPEER, 0L); |
| + | |
| + | curl_easy_perform(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.76.0 |
| + | |
| + | If built TLS enabled. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. |
| @@ -1,78 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_DOH_SSL_VERIFYSTATUS 3 "11 Feb 2021" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_DOH_SSL_VERIFYSTATUS \- verify the DoH SSL certificate's status |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DOH_SSL_VERIFYSTATUS, |
| - | long verify); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass a long as parameter set to 1 to enable or 0 to disable. |
| - | |
| - | This option determines whether libcurl verifies the status of the DoH |
| - | (DNS-over-HTTPS) server cert using the "Certificate Status Request" TLS |
| - | extension (aka. OCSP stapling). |
| - | |
| - | This option is the DoH equivalent of \fICURLOPT_SSL_VERIFYSTATUS(3)\fP and |
| - | only affects requests to the DoH server. |
| - | |
| - | If this option is enabled and the server does not support the TLS extension, |
| - | the verification fails. |
| - | .SH DEFAULT |
| - | 0 |
| - | .SH PROTOCOLS |
| - | DoH |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | |
| - | curl_easy_setopt(curl, CURLOPT_DOH_URL, |
| - | "https://cloudflare-dns.com/dns-query"); |
| - | |
| - | /* Ask for OCSP stapling when verifying the DoH server */ |
| - | curl_easy_setopt(curl, CURLOPT_DOH_SSL_VERIFYSTATUS, 1L); |
| - | |
| - | curl_easy_perform(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.76.0. This option is currently only supported by the OpenSSL, and |
| - | GnuTLS TLS backends. |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK if OCSP stapling is supported by the SSL backend, otherwise |
| - | returns CURLE_NOT_BUILT_IN. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_DOH_SSL_VERIFYHOST (3), |
| - | .BR CURLOPT_DOH_SSL_VERIFYPEER (3), |
| - | .BR CURLOPT_SSL_VERIFYSTATUS (3) |
| @@ -0,0 +1,76 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_DOH_SSL_VERIFYSTATUS |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_DOH_SSL_VERIFYHOST (3) |
| + | - CURLOPT_DOH_SSL_VERIFYPEER (3) |
| + | - CURLOPT_SSL_VERIFYSTATUS (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_DOH_SSL_VERIFYSTATUS - verify the DoH SSL certificate's status |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DOH_SSL_VERIFYSTATUS, |
| + | long verify); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass a long as parameter set to 1 to enable or 0 to disable. |
| + | |
| + | This option determines whether libcurl verifies the status of the DoH |
| + | (DNS-over-HTTPS) server cert using the "Certificate Status Request" TLS |
| + | extension (aka. OCSP stapling). |
| + | |
| + | This option is the DoH equivalent of CURLOPT_SSL_VERIFYSTATUS(3) and |
| + | only affects requests to the DoH server. |
| + | |
| + | If this option is enabled and the server does not support the TLS extension, |
| + | the verification fails. |
| + | |
| + | # DEFAULT |
| + | |
| + | 0 |
| + | |
| + | # PROTOCOLS |
| + | |
| + | DoH |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | |
| + | curl_easy_setopt(curl, CURLOPT_DOH_URL, |
| + | "https://cloudflare-dns.com/dns-query"); |
| + | |
| + | /* Ask for OCSP stapling when verifying the DoH server */ |
| + | curl_easy_setopt(curl, CURLOPT_DOH_SSL_VERIFYSTATUS, 1L); |
| + | |
| + | curl_easy_perform(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.76.0. This option is currently only supported by the OpenSSL, and |
| + | GnuTLS TLS backends. |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK if OCSP stapling is supported by the SSL backend, otherwise |
| + | returns CURLE_NOT_BUILT_IN. |
| @@ -1,95 +0,0 @@ | |
| - | .\" ************************************************************************** |
| - | .\" * _ _ ____ _ |
| - | .\" * Project ___| | | | _ \| | |
| - | .\" * / __| | | | |_) | | |
| - | .\" * | (__| |_| | _ <| |___ |
| - | .\" * \___|\___/|_| \_\_____| |
| - | .\" * |
| - | .\" * Copyright (C) Daniel Stenberg, <[email protected]>, et al. |
| - | .\" * |
| - | .\" * This software is licensed as described in the file COPYING, which |
| - | .\" * you should have received as part of this distribution. The terms |
| - | .\" * are also available at https://curl.se/docs/copyright.html. |
| - | .\" * |
| - | .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| - | .\" * copies of the Software, and permit persons to whom the Software is |
| - | .\" * furnished to do so, under the terms of the COPYING file. |
| - | .\" * |
| - | .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| - | .\" * KIND, either express or implied. |
| - | .\" * |
| - | .\" * SPDX-License-Identifier: curl |
| - | .\" * |
| - | .\" ************************************************************************** |
| - | .\" |
| - | .TH CURLOPT_DOH_URL 3 "18 Jun 2018" libcurl libcurl |
| - | .SH NAME |
| - | CURLOPT_DOH_URL \- provide the DNS-over-HTTPS URL |
| - | .SH SYNOPSIS |
| - | .nf |
| - | #include <curl/curl.h> |
| - | |
| - | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DOH_URL, char *URL); |
| - | .fi |
| - | .SH DESCRIPTION |
| - | Pass in a pointer to a \fIURL\fP for the DoH server to use for name |
| - | resolving. The parameter should be a char * to a null-terminated string which |
| - | must be URL-encoded in the following format: "https://host:port/path". It MUST |
| - | specify an HTTPS URL. |
| - | |
| - | libcurl does not validate the syntax or use this variable until the transfer |
| - | is issued. Even if you set a crazy value here, \fIcurl_easy_setopt(3)\fP still |
| - | returns \fICURLE_OK\fP. |
| - | |
| - | curl sends POST requests to the given DNS-over-HTTPS URL. |
| - | |
| - | To find the DoH server itself, which might be specified using a name, libcurl |
| - | uses the default name lookup function. You can bootstrap that by providing the |
| - | address for the DoH server with \fICURLOPT_RESOLVE(3)\fP. |
| - | |
| - | Disable DoH use again by setting this option to NULL. |
| - | .SH "INHERIT OPTIONS" |
| - | DoH lookups use SSL and some SSL settings from your transfer are inherited, |
| - | like \fICURLOPT_SSL_CTX_FUNCTION(3)\fP. |
| - | |
| - | The hostname and peer certificate verification settings are not inherited but |
| - | can be controlled separately via \fICURLOPT_DOH_SSL_VERIFYHOST(3)\fP and |
| - | \fICURLOPT_DOH_SSL_VERIFYPEER(3)\fP. |
| - | |
| - | A set \fICURLOPT_OPENSOCKETFUNCTION(3)\fP callback is not inherited. |
| - | .SH "KNOWN BUGS" |
| - | Even when DoH is set to be used with this option, there are still some name |
| - | resolves that are performed without it, using the default name resolver |
| - | mechanism. This includes name resolves done for \fICURLOPT_INTERFACE(3)\fP, |
| - | \fICURLOPT_FTPPORT(3)\fP, a proxy type set to \fBCURLPROXY_SOCKS4\fP or |
| - | \fBCURLPROXY_SOCKS5\fP and probably some more. |
| - | .SH DEFAULT |
| - | NULL - there is no default DoH URL. If this option is not set, libcurl uses |
| - | the default name resolver. |
| - | .SH PROTOCOLS |
| - | All |
| - | .SH EXAMPLE |
| - | .nf |
| - | int main(void) |
| - | { |
| - | CURL *curl = curl_easy_init(); |
| - | if(curl) { |
| - | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| - | curl_easy_setopt(curl, CURLOPT_DOH_URL, "https://dns.example.com"); |
| - | curl_easy_perform(curl); |
| - | } |
| - | } |
| - | .fi |
| - | .SH AVAILABILITY |
| - | Added in 7.62.0 |
| - | .SH RETURN VALUE |
| - | Returns CURLE_OK on success or CURLE_OUT_OF_MEMORY if there was insufficient |
| - | heap space. |
| - | |
| - | Note that \fIcurl_easy_setopt(3)\fP does immediately parse the given string so |
| - | when given a bad DoH URL, libcurl might not detect the problem until it later |
| - | tries to resolve a name with it. |
| - | .SH "SEE ALSO" |
| - | .BR CURLOPT_DNS_CACHE_TIMEOUT (3), |
| - | .BR CURLOPT_RESOLVE (3), |
| - | .BR CURLOPT_VERBOSE (3) |
| @@ -0,0 +1,96 @@ | |
| + | --- |
| + | c: Copyright (C) Daniel Stenberg, <daniel.se>, et al. |
| + | SPDX-License-Identifier: curl |
| + | Title: CURLOPT_DOH_URL |
| + | Section: 3 |
| + | Source: libcurl |
| + | See-also: |
| + | - CURLOPT_DNS_CACHE_TIMEOUT (3) |
| + | - CURLOPT_RESOLVE (3) |
| + | - CURLOPT_VERBOSE (3) |
| + | --- |
| + | |
| + | # NAME |
| + | |
| + | CURLOPT_DOH_URL - provide the DNS-over-HTTPS URL |
| + | |
| + | # SYNOPSIS |
| + | |
| + | ~~~c |
| + | #include <curl/curl.h> |
| + | |
| + | CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DOH_URL, char *URL); |
| + | ~~~ |
| + | |
| + | # DESCRIPTION |
| + | |
| + | Pass in a pointer to a *URL* for the DoH server to use for name resolving. The |
| + | parameter should be a char pointer to a null-terminated string which must be a |
| + | valid and correct HTTPS URL. |
| + | |
| + | libcurl does not validate the syntax or use this variable until the transfer |
| + | is issued. Even if you set a crazy value here, curl_easy_setopt(3) still |
| + | returns *CURLE_OK*. |
| + | |
| + | curl sends POST requests to the given DNS-over-HTTPS URL. |
| + | |
| + | To find the DoH server itself, which might be specified using a name, libcurl |
| + | uses the default name lookup function. You can bootstrap that by providing the |
| + | address for the DoH server with CURLOPT_RESOLVE(3). |
| + | |
| + | Disable DoH use again by setting this option to NULL. |
| + | |
| + | # INHERIT OPTIONS |
| + | |
| + | DoH lookups use SSL and some SSL settings from your transfer are inherited, |
| + | like CURLOPT_SSL_CTX_FUNCTION(3). |
| + | |
| + | The hostname and peer certificate verification settings are not inherited but |
| + | can be controlled separately via CURLOPT_DOH_SSL_VERIFYHOST(3) and |
| + | CURLOPT_DOH_SSL_VERIFYPEER(3). |
| + | |
| + | A set CURLOPT_OPENSOCKETFUNCTION(3) callback is not inherited. |
| + | |
| + | # KNOWN BUGS |
| + | |
| + | Even when DoH is set to be used with this option, there are still some name |
| + | resolves that are performed without it, using the default name resolver |
| + | mechanism. This includes name resolves done for CURLOPT_INTERFACE(3), |
| + | CURLOPT_FTPPORT(3), a proxy type set to **CURLPROXY_SOCKS4** or |
| + | **CURLPROXY_SOCKS5** and probably some more. |
| + | |
| + | # DEFAULT |
| + | |
| + | NULL - there is no default DoH URL. If this option is not set, libcurl uses |
| + | the default name resolver. |
| + | |
| + | # PROTOCOLS |
| + | |
| + | All |
| + | |
| + | # EXAMPLE |
| + | |
| + | ~~~c |
| + | int main(void) |
| + | { |
| + | CURL *curl = curl_easy_init(); |
| + | if(curl) { |
| + | curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); |
| + | curl_easy_setopt(curl, CURLOPT_DOH_URL, "https://dns.example.com"); |
| + | curl_easy_perform(curl); |
| + | } |
| + | } |
| + | ~~~ |
| + | |
| + | # AVAILABILITY |
| + | |
| + | Added in 7.62.0 |
| + | |
| + | # RETURN VALUE |
| + | |
| + | Returns CURLE_OK on success or CURLE_OUT_OF_MEMORY if there was insufficient |
(diff çok büyük olduğu için kısaltıldı, tam hali için GitHub linkine bakın)