mirror of
https://github.com/curl/curl.git
synced 2025-01-18 14:04:30 +08:00
lib: make more protocol specific struct fields #ifdefed
... so that they don't take up space if the protocols are disabled in the build. Closes #8944
This commit is contained in:
parent
bb130871c0
commit
45de940ceb
@ -796,6 +796,7 @@ int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf,
|
||||
|
||||
#if defined(USE_NGTCP2) || defined(USE_QUICHE) || defined(USE_MSH3)
|
||||
#define ENABLE_QUIC
|
||||
#define USE_HTTP3
|
||||
#endif
|
||||
|
||||
#if defined(USE_UNIX_SOCKETS) && defined(WIN32)
|
||||
|
@ -7,7 +7,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2021, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2022, 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
|
||||
@ -306,6 +306,14 @@ struct timeval {
|
||||
# define HAVE_BOOL_T
|
||||
#endif
|
||||
|
||||
/* the type we use for storing a single boolean bit */
|
||||
#ifdef _MSC_VER
|
||||
typedef bool bit;
|
||||
#define BIT(x) bool x
|
||||
#else
|
||||
typedef unsigned int bit;
|
||||
#define BIT(x) bit x:1
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Redefine TRUE and FALSE too, to catch current use. With this
|
||||
|
@ -783,8 +783,9 @@ static CURLcode ftp_state_user(struct Curl_easy *data,
|
||||
&conn->proto.ftpc.pp, "USER %s",
|
||||
conn->user?conn->user:"");
|
||||
if(!result) {
|
||||
struct ftp_conn *ftpc = &conn->proto.ftpc;
|
||||
ftpc->ftp_trying_alternative = FALSE;
|
||||
state(data, FTP_USER);
|
||||
data->state.ftp_trying_alternative = FALSE;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -2622,13 +2623,13 @@ static CURLcode ftp_state_user_resp(struct Curl_easy *data,
|
||||
(the server denies to log the specified user) */
|
||||
|
||||
if(data->set.str[STRING_FTP_ALTERNATIVE_TO_USER] &&
|
||||
!data->state.ftp_trying_alternative) {
|
||||
!ftpc->ftp_trying_alternative) {
|
||||
/* Ok, USER failed. Let's try the supplied command. */
|
||||
result =
|
||||
Curl_pp_sendf(data, &ftpc->pp, "%s",
|
||||
data->set.str[STRING_FTP_ALTERNATIVE_TO_USER]);
|
||||
if(!result) {
|
||||
data->state.ftp_trying_alternative = TRUE;
|
||||
ftpc->ftp_trying_alternative = TRUE;
|
||||
state(data, FTP_USER);
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,7 @@
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
* Copyright (C) 1998 - 2021, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
* Copyright (C) 1998 - 2022, 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
|
||||
@ -22,6 +22,8 @@
|
||||
*
|
||||
***************************************************************************/
|
||||
|
||||
#include "curl_setup.h"
|
||||
|
||||
#include "pingpong.h"
|
||||
|
||||
#ifndef CURL_DISABLE_FTP
|
||||
@ -149,6 +151,7 @@ struct ftp_conn {
|
||||
curl_off_t known_filesize; /* file size is different from -1, if wildcard
|
||||
LIST parsing was done and wc_statemach set
|
||||
it */
|
||||
BIT(ftp_trying_alternative);
|
||||
};
|
||||
|
||||
#define DEFAULT_ACCEPT_TIMEOUT 60000 /* milliseconds == one minute */
|
||||
|
@ -299,6 +299,7 @@ static CURLcode getinfo_long(struct Curl_easy *data, CURLINFO info,
|
||||
/* return if the condition prevented the document to get transferred */
|
||||
*param_longp = data->info.timecond ? 1L : 0L;
|
||||
break;
|
||||
#ifndef CURL_DISABLE_RTSP
|
||||
case CURLINFO_RTSP_CLIENT_CSEQ:
|
||||
*param_longp = data->state.rtsp_next_client_CSeq;
|
||||
break;
|
||||
@ -308,6 +309,7 @@ static CURLcode getinfo_long(struct Curl_easy *data, CURLINFO info,
|
||||
case CURLINFO_RTSP_CSEQ_RECV:
|
||||
*param_longp = data->state.rtsp_CSeq_recv;
|
||||
break;
|
||||
#endif
|
||||
case CURLINFO_HTTP_VERSION:
|
||||
switch(data->info.httpversion) {
|
||||
case 10:
|
||||
|
19
lib/sendf.c
19
lib/sendf.c
@ -52,7 +52,7 @@
|
||||
#include "curl_memory.h"
|
||||
#include "memdebug.h"
|
||||
|
||||
#ifdef CURL_DO_LINEEND_CONV
|
||||
#if defined(CURL_DO_LINEEND_CONV) && !defined(CURL_DISABLE_FTP)
|
||||
/*
|
||||
* convert_lineends() changes CRLF (\r\n) end-of-line markers to a single LF
|
||||
* (\n), with special processing for CRLF sequences that are split between two
|
||||
@ -132,7 +132,7 @@ static size_t convert_lineends(struct Curl_easy *data,
|
||||
}
|
||||
return size;
|
||||
}
|
||||
#endif /* CURL_DO_LINEEND_CONV */
|
||||
#endif /* CURL_DO_LINEEND_CONV && !CURL_DISABLE_FTP */
|
||||
|
||||
#ifdef USE_RECV_BEFORE_SEND_WORKAROUND
|
||||
bool Curl_recv_has_postponed_data(struct connectdata *conn, int sockindex)
|
||||
@ -631,22 +631,15 @@ CURLcode Curl_client_write(struct Curl_easy *data,
|
||||
char *ptr,
|
||||
size_t len)
|
||||
{
|
||||
struct connectdata *conn = data->conn;
|
||||
|
||||
if(!len)
|
||||
return CURLE_OK;
|
||||
|
||||
#if !defined(CURL_DISABLE_FTP) && defined(CURL_DO_LINEEND_CONV)
|
||||
/* FTP data may need conversion. */
|
||||
if((type & CLIENTWRITE_BODY) &&
|
||||
(conn->handler->protocol & PROTO_FAMILY_FTP) &&
|
||||
conn->proto.ftpc.transfertype == 'A') {
|
||||
|
||||
#ifdef CURL_DO_LINEEND_CONV
|
||||
(data->conn->handler->protocol & PROTO_FAMILY_FTP) &&
|
||||
data->conn->proto.ftpc.transfertype == 'A') {
|
||||
/* convert end-of-line markers */
|
||||
len = convert_lineends(data, ptr, len);
|
||||
#endif /* CURL_DO_LINEEND_CONV */
|
||||
}
|
||||
|
||||
#endif
|
||||
return chop_write(data, type, ptr, len);
|
||||
}
|
||||
|
||||
|
@ -307,7 +307,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
|
||||
break;
|
||||
case CURLOPT_SERVER_RESPONSE_TIMEOUT:
|
||||
/*
|
||||
* Option that specifies how quickly an server response must be obtained
|
||||
* Option that specifies how quickly a server response must be obtained
|
||||
* before it is considered failure. For pingpong protocols.
|
||||
*/
|
||||
arg = va_arg(param, long);
|
||||
@ -1104,13 +1104,14 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
|
||||
break;
|
||||
}
|
||||
break;
|
||||
#endif /* CURL_DISABLE_PROXY */
|
||||
|
||||
case CURLOPT_SOCKS5_AUTH:
|
||||
data->set.socks5auth = va_arg(param, unsigned long);
|
||||
if(data->set.socks5auth & ~(CURLAUTH_BASIC | CURLAUTH_GSSAPI))
|
||||
result = CURLE_NOT_BUILT_IN;
|
||||
break;
|
||||
#endif /* CURL_DISABLE_PROXY */
|
||||
|
||||
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
|
||||
case CURLOPT_SOCKS5_GSSAPI_NEC:
|
||||
/*
|
||||
@ -1393,15 +1394,17 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
|
||||
data->set.connecttimeout = arg;
|
||||
break;
|
||||
|
||||
#ifndef CURL_DISABLE_FTP
|
||||
case CURLOPT_ACCEPTTIMEOUT_MS:
|
||||
/*
|
||||
* The maximum time you allow curl to wait for server connect
|
||||
* The maximum time for curl to wait for FTP server connect
|
||||
*/
|
||||
arg = va_arg(param, long);
|
||||
if(arg < 0)
|
||||
return CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
data->set.accepttimeout = arg;
|
||||
break;
|
||||
#endif
|
||||
|
||||
case CURLOPT_USERPWD:
|
||||
/*
|
||||
|
@ -202,6 +202,7 @@ CURLcode Curl_fillreadbuffer(struct Curl_easy *data, size_t bytes,
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef CURL_DISABLE_HTTP
|
||||
/* if we are transmitting trailing data, we don't need to write
|
||||
a chunk size so we skip this */
|
||||
if(data->req.upload_chunky &&
|
||||
@ -211,7 +212,6 @@ CURLcode Curl_fillreadbuffer(struct Curl_easy *data, size_t bytes,
|
||||
data->req.upload_fromhere += (8 + 2); /* 32bit hex + CRLF */
|
||||
}
|
||||
|
||||
#ifndef CURL_DISABLE_HTTP
|
||||
if(data->state.trailers_state == TRAILERS_SENDING) {
|
||||
/* if we're here then that means that we already sent the last empty chunk
|
||||
but we didn't send a final CR LF, so we sent 0 CR LF. We then start
|
||||
@ -267,6 +267,7 @@ CURLcode Curl_fillreadbuffer(struct Curl_easy *data, size_t bytes,
|
||||
return CURLE_READ_ERROR;
|
||||
}
|
||||
|
||||
#ifndef CURL_DISABLE_HTTP
|
||||
if(!data->req.forbidchunk && data->req.upload_chunky) {
|
||||
/* if chunked Transfer-Encoding
|
||||
* build chunk:
|
||||
@ -317,15 +318,12 @@ CURLcode Curl_fillreadbuffer(struct Curl_easy *data, size_t bytes,
|
||||
|
||||
/* always append ASCII CRLF to the data unless
|
||||
we have a valid trailer callback */
|
||||
#ifndef CURL_DISABLE_HTTP
|
||||
if((nread-hexlen) == 0 &&
|
||||
data->set.trailer_callback != NULL &&
|
||||
data->state.trailers_state == TRAILERS_NONE) {
|
||||
data->state.trailers_state = TRAILERS_INITIALIZED;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
else {
|
||||
memcpy(data->req.upload_fromhere + nread,
|
||||
endofline_network,
|
||||
strlen(endofline_network));
|
||||
@ -333,7 +331,6 @@ CURLcode Curl_fillreadbuffer(struct Curl_easy *data, size_t bytes,
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef CURL_DISABLE_HTTP
|
||||
if(data->state.trailers_state == TRAILERS_SENDING &&
|
||||
!trailers_left(data)) {
|
||||
Curl_dyn_free(&data->state.trailers_buf);
|
||||
@ -345,7 +342,6 @@ CURLcode Curl_fillreadbuffer(struct Curl_easy *data, size_t bytes,
|
||||
infof(data, "Signaling end of chunked upload after trailers.");
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if((nread - hexlen) == 0 &&
|
||||
data->state.trailers_state != TRAILERS_INITIALIZED) {
|
||||
/* mark this as done once this chunk is transferred */
|
||||
@ -357,6 +353,7 @@ CURLcode Curl_fillreadbuffer(struct Curl_easy *data, size_t bytes,
|
||||
if(added_crlf)
|
||||
nread += strlen(endofline_network); /* for the added end of line */
|
||||
}
|
||||
#endif
|
||||
|
||||
*nreadp = nread;
|
||||
|
||||
@ -1153,10 +1150,12 @@ CURLcode Curl_readwrite(struct connectdata *conn,
|
||||
else
|
||||
fd_write = CURL_SOCKET_BAD;
|
||||
|
||||
#if defined(USE_HTTP2) || defined(USE_HTTP3)
|
||||
if(data->state.drain) {
|
||||
select_res |= CURL_CSELECT_IN;
|
||||
DEBUGF(infof(data, "Curl_readwrite: forcibly told to drain data"));
|
||||
}
|
||||
#endif
|
||||
|
||||
if(!select_res) /* Call for select()/poll() only, if read/write/error
|
||||
status is not known. */
|
||||
@ -1402,7 +1401,6 @@ CURLcode Curl_pretransfer(struct Curl_easy *data)
|
||||
if(result)
|
||||
return result;
|
||||
|
||||
data->state.wildcardmatch = data->set.wildcard_enabled;
|
||||
data->state.followlocation = 0; /* reset the location-follow counter */
|
||||
data->state.this_is_a_follow = FALSE; /* reset this */
|
||||
data->state.errorbuf = FALSE; /* no error has occurred */
|
||||
@ -1457,6 +1455,7 @@ CURLcode Curl_pretransfer(struct Curl_easy *data)
|
||||
data->state.authproxy.picked &= data->state.authproxy.want;
|
||||
|
||||
#ifndef CURL_DISABLE_FTP
|
||||
data->state.wildcardmatch = data->set.wildcard_enabled;
|
||||
if(data->state.wildcardmatch) {
|
||||
struct WildcardData *wc = &data->wildcard;
|
||||
if(wc->state < CURLWC_INIT) {
|
||||
@ -1821,10 +1820,12 @@ CURLcode Curl_retry_request(struct Curl_easy *data, char **url)
|
||||
return CURLE_OK;
|
||||
|
||||
if((data->req.bytecount + data->req.headerbytecount == 0) &&
|
||||
conn->bits.reuse &&
|
||||
(!data->set.opt_no_body
|
||||
|| (conn->handler->protocol & PROTO_FAMILY_HTTP)) &&
|
||||
(data->set.rtspreq != RTSPREQ_RECEIVE))
|
||||
conn->bits.reuse &&
|
||||
(!data->set.opt_no_body || (conn->handler->protocol & PROTO_FAMILY_HTTP))
|
||||
#ifndef CURL_DISABLE_RTSP
|
||||
&& (data->set.rtspreq != RTSPREQ_RECEIVE)
|
||||
#endif
|
||||
)
|
||||
/* We got no data, we attempted to re-use a connection. For HTTP this
|
||||
can be a retry so we try again regardless if we expected a body.
|
||||
For other protocols we only try again only if we expected a body.
|
||||
|
15
lib/url.c
15
lib/url.c
@ -508,7 +508,9 @@ CURLcode Curl_init_userdefined(struct Curl_easy *data)
|
||||
set->maxredirs = -1; /* allow any amount by default */
|
||||
|
||||
set->method = HTTPREQ_GET; /* Default HTTP request */
|
||||
#ifndef CURL_DISABLE_RTSP
|
||||
set->rtspreq = RTSPREQ_OPTIONS; /* Default RTSP request */
|
||||
#endif
|
||||
#ifndef CURL_DISABLE_FTP
|
||||
set->ftp_use_epsv = TRUE; /* FTP defaults to EPSV operations */
|
||||
set->ftp_use_eprt = TRUE; /* FTP defaults to EPRT operations */
|
||||
@ -524,10 +526,12 @@ CURLcode Curl_init_userdefined(struct Curl_easy *data)
|
||||
set->proxyport = 0;
|
||||
set->proxytype = CURLPROXY_HTTP; /* defaults to HTTP proxy */
|
||||
set->httpauth = CURLAUTH_BASIC; /* defaults to basic */
|
||||
set->proxyauth = CURLAUTH_BASIC; /* defaults to basic */
|
||||
|
||||
#ifndef CURL_DISABLE_PROXY
|
||||
set->proxyauth = CURLAUTH_BASIC; /* defaults to basic */
|
||||
/* SOCKS5 proxy auth defaults to username/password + GSS-API */
|
||||
set->socks5auth = CURLAUTH_BASIC | CURLAUTH_GSSAPI;
|
||||
#endif
|
||||
|
||||
/* make libcurl quiet by default: */
|
||||
set->hide_progress = TRUE; /* CURLOPT_NOPROGRESS changes these */
|
||||
@ -601,9 +605,12 @@ CURLcode Curl_init_userdefined(struct Curl_easy *data)
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef CURL_DISABLE_FTP
|
||||
set->wildcard_enabled = FALSE;
|
||||
set->chunk_bgn = ZERO_NULL;
|
||||
set->chunk_end = ZERO_NULL;
|
||||
set->fnmatch = ZERO_NULL;
|
||||
#endif
|
||||
set->tcp_keepalive = FALSE;
|
||||
set->tcp_keepintvl = 60;
|
||||
set->tcp_keepidle = 60;
|
||||
@ -616,7 +623,6 @@ CURLcode Curl_init_userdefined(struct Curl_easy *data)
|
||||
set->buffer_size = READBUFFER_SIZE;
|
||||
set->upload_buffer_size = UPLOADBUFFER_DEFAULT;
|
||||
set->happy_eyeballs_timeout = CURL_HET_DEFAULT;
|
||||
set->fnmatch = ZERO_NULL;
|
||||
set->upkeep_interval_ms = CURL_UPKEEP_INTERVAL_DEFAULT;
|
||||
set->maxconnects = DEFAULT_CONNCACHE_SIZE; /* for easy handles */
|
||||
set->maxage_conn = 118;
|
||||
@ -1103,12 +1109,17 @@ static void prune_dead_connections(struct Curl_easy *data)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef USE_SSH
|
||||
static bool ssh_config_matches(struct connectdata *one,
|
||||
struct connectdata *two)
|
||||
{
|
||||
return (Curl_safecmp(one->proto.sshc.rsa, two->proto.sshc.rsa) &&
|
||||
Curl_safecmp(one->proto.sshc.rsa_pub, two->proto.sshc.rsa_pub));
|
||||
}
|
||||
#else
|
||||
#define ssh_config_matches(x,y) FALSE
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Given one filled in connection struct (named needle), this function should
|
||||
* detect if there already is one that has all the significant details
|
||||
|
@ -180,15 +180,6 @@ typedef CURLcode (*Curl_datastream)(struct Curl_easy *data,
|
||||
#define GOOD_EASY_HANDLE(x) \
|
||||
((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER))
|
||||
|
||||
/* the type we use for storing a single boolean bit */
|
||||
#ifdef _MSC_VER
|
||||
typedef bool bit;
|
||||
#define BIT(x) bool x
|
||||
#else
|
||||
typedef unsigned int bit;
|
||||
#define BIT(x) bit x:1
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_GSSAPI
|
||||
/* Types needed for krb5-ftp connections */
|
||||
struct krb5buffer {
|
||||
@ -1089,18 +1080,38 @@ struct connectdata {
|
||||
struct dynbuf trailer;
|
||||
|
||||
union {
|
||||
#ifndef CURL_DISABLE_FTP
|
||||
struct ftp_conn ftpc;
|
||||
#endif
|
||||
#ifndef CURL_DISABLE_HTTP
|
||||
struct http_conn httpc;
|
||||
#endif
|
||||
#ifdef USE_SSH
|
||||
struct ssh_conn sshc;
|
||||
#endif
|
||||
#ifndef CURL_DISABLE_TFTP
|
||||
struct tftp_state_data *tftpc;
|
||||
#endif
|
||||
#ifndef CURL_DISABLE_IMAP
|
||||
struct imap_conn imapc;
|
||||
#endif
|
||||
#ifndef CURL_DISABLE_POP3
|
||||
struct pop3_conn pop3c;
|
||||
#endif
|
||||
#ifndef CURL_DISABLE_SMTP
|
||||
struct smtp_conn smtpc;
|
||||
#endif
|
||||
#ifndef CURL_DISABLE_RTSP
|
||||
struct rtsp_conn rtspc;
|
||||
#endif
|
||||
#ifndef CURL_DISABLE_SMB
|
||||
struct smb_conn smbc;
|
||||
#endif
|
||||
void *rtmp;
|
||||
struct ldapconninfo *ldapc;
|
||||
#ifndef CURL_DISABLE_MQTT
|
||||
struct mqtt_conn mqtt;
|
||||
#endif
|
||||
} proto;
|
||||
|
||||
struct http_connect_state *connect_state; /* for HTTP CONNECT */
|
||||
@ -1354,9 +1365,10 @@ struct UrlState {
|
||||
/* storage for the previous bag^H^H^HSIGPIPE signal handler :-) */
|
||||
void (*prev_signal)(int sig);
|
||||
#endif
|
||||
#ifndef CURL_DISABLE_CRYPTO_AUTH
|
||||
struct digestdata digest; /* state data for host Digest auth */
|
||||
struct digestdata proxydigest; /* state data for proxy Digest auth */
|
||||
|
||||
#endif
|
||||
struct auth authhost; /* auth details for host */
|
||||
struct auth authproxy; /* auth details for proxy */
|
||||
#ifdef USE_CURL_ASYNC
|
||||
@ -1372,7 +1384,7 @@ struct UrlState {
|
||||
struct Curl_llist timeoutlist; /* list of pending timeouts */
|
||||
struct time_node expires[EXPIRE_LAST]; /* nodes for each expire type */
|
||||
|
||||
/* a place to store the most recently set FTP entrypath */
|
||||
/* a place to store the most recently set (S)FTP entrypath */
|
||||
char *most_recent_ftp_entrypath;
|
||||
unsigned char httpwant; /* when non-zero, a specific HTTP version requested
|
||||
to be used in the library's request(s) */
|
||||
@ -1391,30 +1403,36 @@ struct UrlState {
|
||||
this syntax. */
|
||||
curl_off_t resume_from; /* continue [ftp] transfer from here */
|
||||
|
||||
#ifndef CURL_DISABLE_RTSP
|
||||
/* This RTSP state information survives requests and connections */
|
||||
long rtsp_next_client_CSeq; /* the session's next client CSeq */
|
||||
long rtsp_next_server_CSeq; /* the session's next server CSeq */
|
||||
long rtsp_CSeq_recv; /* most recent CSeq received */
|
||||
#endif
|
||||
|
||||
curl_off_t infilesize; /* size of file to upload, -1 means unknown.
|
||||
Copied from set.filesize at start of operation */
|
||||
|
||||
#if defined(USE_HTTP2) || defined(USE_HTTP3)
|
||||
size_t drain; /* Increased when this stream has data to read, even if its
|
||||
socket is not necessarily is readable. Decreased when
|
||||
checked. */
|
||||
#endif
|
||||
|
||||
curl_read_callback fread_func; /* read callback/function */
|
||||
void *in; /* CURLOPT_READDATA */
|
||||
|
||||
#ifdef USE_HTTP2
|
||||
struct Curl_easy *stream_depends_on;
|
||||
int stream_weight;
|
||||
#endif
|
||||
CURLU *uh; /* URL handle for the current parsed URL */
|
||||
struct urlpieces up;
|
||||
Curl_HttpReq httpreq; /* what kind of HTTP request (if any) is this */
|
||||
char *url; /* work URL, copied from UserDefined */
|
||||
char *referer; /* referer string */
|
||||
#ifndef CURL_DISABLE_COOKIES
|
||||
struct curl_slist *cookielist; /* list of cookie files set by
|
||||
curl_easy_setopt(COOKIEFILE) calls */
|
||||
#endif
|
||||
struct curl_slist *resolve; /* set to point to the set.resolve list when
|
||||
this should be dealt with in pretransfer */
|
||||
#ifndef CURL_DISABLE_HTTP
|
||||
@ -1424,9 +1442,9 @@ struct UrlState {
|
||||
struct Curl_llist httphdrs; /* received headers */
|
||||
struct curl_header headerout; /* for external purposes */
|
||||
struct Curl_header_store *prevhead; /* the latest added header */
|
||||
#endif
|
||||
trailers_state trailers_state; /* whether we are sending trailers
|
||||
and what stage are we at */
|
||||
and what stage are we at */
|
||||
#endif
|
||||
#ifdef USE_HYPER
|
||||
bool hconnect; /* set if a CONNECT request */
|
||||
CURLcode hresult; /* used to pass return codes back from hyper callbacks */
|
||||
@ -1470,7 +1488,6 @@ struct UrlState {
|
||||
is always set TRUE when curl_easy_perform() is called. */
|
||||
BIT(authproblem); /* TRUE if there's some problem authenticating */
|
||||
/* set after initial USER failure, to prevent an authentication loop */
|
||||
BIT(ftp_trying_alternative);
|
||||
BIT(wildcardmatch); /* enable wildcard matching */
|
||||
BIT(expect100header); /* TRUE if we added Expect: 100-continue */
|
||||
BIT(disableexpect); /* TRUE if Expect: is disabled due to a previous
|
||||
@ -1629,11 +1646,12 @@ struct UserDefined {
|
||||
void *out; /* CURLOPT_WRITEDATA */
|
||||
void *in_set; /* CURLOPT_READDATA */
|
||||
void *writeheader; /* write the header to this if non-NULL */
|
||||
void *rtp_out; /* write RTP to this if non-NULL */
|
||||
long use_port; /* which port to use (when not using default) */
|
||||
unsigned long httpauth; /* kind of HTTP authentication to use (bitmask) */
|
||||
unsigned long proxyauth; /* kind of proxy authentication to use (bitmask) */
|
||||
#ifndef CURL_DISABLE_PROXY
|
||||
unsigned long socks5auth;/* kind of SOCKS5 authentication to use (bitmask) */
|
||||
#endif
|
||||
long maxredirs; /* maximum no. of http(s) redirects to follow, set to -1
|
||||
for infinity */
|
||||
|
||||
@ -1676,14 +1694,15 @@ struct UserDefined {
|
||||
void *ioctl_client; /* pointer to pass to the ioctl callback */
|
||||
long timeout; /* in milliseconds, 0 means no timeout */
|
||||
long connecttimeout; /* in milliseconds, 0 means no timeout */
|
||||
long accepttimeout; /* in milliseconds, 0 means no timeout */
|
||||
long happy_eyeballs_timeout; /* in milliseconds, 0 is a valid value */
|
||||
long server_response_timeout; /* in milliseconds, 0 means no timeout */
|
||||
long maxage_conn; /* in seconds, max idle time to allow a connection that
|
||||
is to be reused */
|
||||
long maxlifetime_conn; /* in seconds, max time since creation to allow a
|
||||
connection that is to be reused */
|
||||
#ifndef CURL_DISABLE_TFTP
|
||||
long tftp_blksize; /* in bytes, 0 means use default */
|
||||
#endif
|
||||
curl_off_t filesize; /* size of file to upload, -1 means unknown */
|
||||
long low_speed_limit; /* bytes/second */
|
||||
long low_speed_time; /* number of seconds */
|
||||
@ -1703,7 +1722,9 @@ struct UserDefined {
|
||||
the transfer on source host */
|
||||
struct curl_slist *source_postquote; /* in 3rd party transfer mode - after
|
||||
the transfer on source host */
|
||||
#ifndef CURL_DISABLE_TELNET
|
||||
struct curl_slist *telnet_options; /* linked list of telnet options */
|
||||
#endif
|
||||
struct curl_slist *resolve; /* list of names to add/remove from
|
||||
DNS cache */
|
||||
struct curl_slist *connect_to; /* list of host:port mappings to override
|
||||
@ -1732,6 +1753,7 @@ struct UserDefined {
|
||||
curl_ftpfile ftp_filemethod; /* how to get to a file when FTP is used */
|
||||
curl_ftpauth ftpsslauth; /* what AUTH XXX to be attempted */
|
||||
curl_ftpccc ftp_ccc; /* FTP CCC options */
|
||||
long accepttimeout; /* in milliseconds, 0 means no timeout */
|
||||
#endif
|
||||
int ftp_create_missing_dirs; /* 1 - create directories that don't exist
|
||||
2 - the same but also allow MKD to fail once
|
||||
@ -1755,10 +1777,14 @@ struct UserDefined {
|
||||
unsigned int allowed_protocols;
|
||||
unsigned int redir_protocols;
|
||||
unsigned int mime_options; /* Mime option flags. */
|
||||
struct curl_slist *mail_rcpt; /* linked list of mail recipients */
|
||||
|
||||
#ifndef CURL_DISABLE_RTSP
|
||||
void *rtp_out; /* write RTP to this if non-NULL */
|
||||
/* Common RTSP header options */
|
||||
Curl_RtspReq rtspreq; /* RTSP request type */
|
||||
long rtspversion; /* like httpversion, for RTSP */
|
||||
#endif
|
||||
#ifndef CURL_DISABLE_FTP
|
||||
curl_chunk_bgn_callback chunk_bgn; /* called before part of transfer
|
||||
starts */
|
||||
curl_chunk_end_callback chunk_end; /* called after part transferring
|
||||
@ -1766,7 +1792,7 @@ struct UserDefined {
|
||||
curl_fnmatch_callback fnmatch; /* callback to decide which file corresponds
|
||||
to pattern (e.g. if WILDCARDMATCH is on) */
|
||||
void *fnmatch_data;
|
||||
|
||||
#endif
|
||||
long gssapi_delegation; /* GSS-API credential delegation, see the
|
||||
documentation of CURLOPT_GSSAPI_DELEGATION */
|
||||
|
||||
@ -1776,21 +1802,29 @@ struct UserDefined {
|
||||
size_t maxconnects; /* Max idle connections in the connection cache */
|
||||
|
||||
long expect_100_timeout; /* in milliseconds */
|
||||
#ifdef USE_HTTP2
|
||||
struct Curl_easy *stream_depends_on;
|
||||
int stream_weight;
|
||||
struct Curl_http2_dep *stream_dependents;
|
||||
|
||||
#endif
|
||||
curl_resolver_start_callback resolver_start; /* optional callback called
|
||||
before resolver start */
|
||||
void *resolver_start_client; /* pointer to pass to resolver start callback */
|
||||
long upkeep_interval_ms; /* Time between calls for connection upkeep. */
|
||||
multidone_func fmultidone;
|
||||
#ifndef CURL_DISABLE_DOH
|
||||
struct Curl_easy *dohfor; /* this is a DoH request for that transfer */
|
||||
#endif
|
||||
CURLU *uh; /* URL handle for the current parsed URL */
|
||||
void *trailer_data; /* pointer to pass to trailer data callback */
|
||||
curl_trailer_callback trailer_callback; /* trailing data callback */
|
||||
char keep_post; /* keep POSTs as POSTs after a 30x request; each
|
||||
bit represents a request, from 301 to 303 */
|
||||
#ifndef CURL_DISABLE_SMTP
|
||||
struct curl_slist *mail_rcpt; /* linked list of mail recipients */
|
||||
BIT(mail_rcpt_allowfails); /* allow RCPT TO command to fail for some
|
||||
recipients */
|
||||
#endif
|
||||
BIT(is_fread_set); /* has read callback been set to non-NULL? */
|
||||
#ifndef CURL_DISABLE_TFTP
|
||||
BIT(tftp_no_options); /* do not send TFTP options requests */
|
||||
@ -1815,6 +1849,7 @@ struct UserDefined {
|
||||
BIT(ftp_use_pret); /* if PRET is to be used before PASV or not */
|
||||
BIT(ftp_skip_ip); /* skip the IP address the FTP server passes on to
|
||||
us */
|
||||
BIT(wildcard_enabled); /* enable wildcard matching */
|
||||
#endif
|
||||
BIT(hide_progress); /* don't use the progress meter */
|
||||
BIT(http_fail_on_error); /* fail on HTTP error codes >= 400 */
|
||||
@ -1846,7 +1881,6 @@ struct UserDefined {
|
||||
BIT(socks5_gssapi_nec); /* Flag to support NEC SOCKS5 server */
|
||||
#endif
|
||||
BIT(sasl_ir); /* Enable/disable SASL initial response */
|
||||
BIT(wildcard_enabled); /* enable wildcard matching */
|
||||
BIT(tcp_keepalive); /* use TCP keepalives */
|
||||
BIT(tcp_fastopen); /* use TCP Fast Open */
|
||||
BIT(ssl_enable_npn); /* TLS NPN extension? */
|
||||
@ -1869,8 +1903,6 @@ struct UserDefined {
|
||||
BIT(doh_verifystatus); /* DoH certificate status verification */
|
||||
#endif
|
||||
BIT(http09_allowed); /* allow HTTP/0.9 responses */
|
||||
BIT(mail_rcpt_allowfails); /* allow RCPT TO command to fail for some
|
||||
recipients */
|
||||
};
|
||||
|
||||
struct Names {
|
||||
@ -1932,10 +1964,12 @@ struct Curl_easy {
|
||||
#endif
|
||||
struct SingleRequest req; /* Request-specific data */
|
||||
struct UserDefined set; /* values set by the libcurl user */
|
||||
#ifndef CURL_DISABLE_COOKIES
|
||||
struct CookieInfo *cookies; /* the cookies, read from files and servers.
|
||||
NOTE that the 'cookie' field in the
|
||||
UserDefined struct defines if the "engine"
|
||||
is to be used or not. */
|
||||
#endif
|
||||
#ifndef CURL_DISABLE_HSTS
|
||||
struct hsts *hsts;
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user