case CURL_RTSPREQ_OPTIONS:
rtspreq = RTSPREQ_OPTIONS;
break;
-
case CURL_RTSPREQ_DESCRIBE:
rtspreq = RTSPREQ_DESCRIBE;
break;
-
case CURL_RTSPREQ_ANNOUNCE:
rtspreq = RTSPREQ_ANNOUNCE;
break;
-
case CURL_RTSPREQ_SETUP:
rtspreq = RTSPREQ_SETUP;
break;
-
case CURL_RTSPREQ_PLAY:
rtspreq = RTSPREQ_PLAY;
break;
-
case CURL_RTSPREQ_PAUSE:
rtspreq = RTSPREQ_PAUSE;
break;
-
case CURL_RTSPREQ_TEARDOWN:
rtspreq = RTSPREQ_TEARDOWN;
break;
-
case CURL_RTSPREQ_GET_PARAMETER:
rtspreq = RTSPREQ_GET_PARAMETER;
break;
-
case CURL_RTSPREQ_SET_PARAMETER:
rtspreq = RTSPREQ_SET_PARAMETER;
break;
-
case CURL_RTSPREQ_RECORD:
rtspreq = RTSPREQ_RECORD;
break;
-
case CURL_RTSPREQ_RECEIVE:
rtspreq = RTSPREQ_RECEIVE;
break;
}
#endif
-static CURLcode setopt_bool(struct Curl_easy *data, CURLoption option,
- long arg, bool *set)
+static CURLcode setopt_long_bool(struct Curl_easy *data, CURLoption option,
+ long arg)
{
bool enabled = !!arg;
int ok = 1;
*/
s->http_auto_referer = enabled;
break;
-
case CURLOPT_TRANSFER_ENCODING:
s->http_transfer_encoding = enabled;
break;
*/
s->allow_auth_to_other_hosts = enabled;
break;
-
case CURLOPT_HTTP_TRANSFER_DECODING:
/*
* disable libcurl transfer encoding is used
*/
s->http_te_skip = !enabled; /* reversed */
break;
-
case CURLOPT_HTTP_CONTENT_DECODING:
/*
* raw data passed to the application when content encoding is used
*/
s->http_ce_skip = !enabled; /* reversed */
break;
-
case CURLOPT_HTTPGET:
/*
* Set to force us do HTTP GET
case CURLOPT_FTP_USE_EPRT:
s->ftp_use_eprt = enabled;
break;
-
case CURLOPT_FTP_USE_EPSV:
s->ftp_use_epsv = enabled;
break;
-
case CURLOPT_FTP_USE_PRET:
s->ftp_use_pret = enabled;
break;
*/
s->crlf = enabled;
break;
-
#ifndef CURL_DISABLE_TFTP
case CURLOPT_TFTP_NO_OPTIONS:
/*
*/
s->tcp_nodelay = enabled;
break;
-
case CURLOPT_IGNORE_CONTENT_LENGTH:
s->ignorecl = enabled;
break;
s->quick_exit = enabled;
break;
default:
- return CURLE_OK;
+ return CURLE_UNKNOWN_OPTION;
}
if((arg > ok) || (arg < 0))
/* reserve other values for future use */
infof(data, "boolean setopt(%d) got unsupported argument %ld,"
" treated as %d", option, arg, enabled);
- *set = TRUE;
return CURLE_OK;
}
return CURLE_OK;
}
-static CURLcode setopt_long(struct Curl_easy *data, CURLoption option,
- long arg)
+static CURLcode setopt_long_net(struct Curl_easy *data, CURLoption option,
+ long arg)
{
-#if !defined(CURL_DISABLE_PROXY) || \
- !defined(CURL_DISABLE_HTTP) || \
- defined(HAVE_GSSAPI) || \
- defined(USE_IPV6)
- unsigned long uarg = (unsigned long)arg;
-#endif
- bool set = FALSE;
- CURLcode result = setopt_bool(data, option, arg, &set);
+ CURLcode result = CURLE_OK;
struct UserDefined *s = &data->set;
- if(set || result)
- return result;
switch(option) {
case CURLOPT_DNS_CACHE_TIMEOUT:
return setopt_set_timeout_sec(&s->dns_cache_timeout_ms, arg);
s->dns_cache_timeout_ms = -1;
break;
-
- case CURLOPT_CA_CACHE_TIMEOUT:
- if(Curl_ssl_supports(data, SSLSUPP_CA_CACHE)) {
- result = value_range(&arg, -1, -1, INT_MAX);
- if(result)
- return result;
-
- s->general_ssl.ca_cache_timeout = (int)arg;
- }
- else
- return CURLE_NOT_BUILT_IN;
- break;
case CURLOPT_MAXCONNECTS:
result = value_range(&arg, 1, 1, UINT_MAX);
- if(result)
- return result;
- s->maxconnects = (unsigned int)arg;
+ if(!result)
+ s->maxconnects = (unsigned int)arg;
break;
case CURLOPT_SERVER_RESPONSE_TIMEOUT:
return setopt_set_timeout_sec(&s->server_response_timeout, arg);
-
case CURLOPT_SERVER_RESPONSE_TIMEOUT_MS:
return setopt_set_timeout_ms(&s->server_response_timeout, arg);
-
-#ifndef CURL_DISABLE_TFTP
- case CURLOPT_TFTP_BLKSIZE:
- result = value_range(&arg, 0, TFTP_BLKSIZE_MIN, TFTP_BLKSIZE_MAX);
- if(result)
- return result;
- s->tftp_blksize = (unsigned short)arg;
- break;
-#endif
-#ifndef CURL_DISABLE_NETRC
- case CURLOPT_NETRC:
- if((arg < CURL_NETRC_IGNORED) || (arg >= CURL_NETRC_LAST))
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->use_netrc = (unsigned char)arg;
- break;
-#endif
- case CURLOPT_TIMECONDITION:
- if((arg < CURL_TIMECOND_NONE) || (arg >= CURL_TIMECOND_LAST))
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->timecondition = (unsigned char)arg;
- break;
- case CURLOPT_TIMEVALUE:
- s->timevalue = (time_t)arg;
- break;
- case CURLOPT_SSLVERSION:
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXY_SSLVERSION:
-#endif
- return Curl_setopt_SSLVERSION(data, option, arg);
-
- case CURLOPT_POSTFIELDSIZE:
- if(arg < -1)
- return CURLE_BAD_FUNCTION_ARGUMENT;
-
- if(s->postfieldsize < arg &&
- s->postfields == s->str[STRING_COPYPOSTFIELDS]) {
- /* Previous CURLOPT_COPYPOSTFIELDS is no longer valid. */
- Curl_safefree(s->str[STRING_COPYPOSTFIELDS]);
- s->postfields = NULL;
- }
-
- s->postfieldsize = arg;
- break;
-#ifndef CURL_DISABLE_HTTP
- case CURLOPT_FOLLOWLOCATION:
- if(uarg > 3)
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->http_follow_mode = (unsigned char)uarg;
- break;
-
- case CURLOPT_MAXREDIRS:
- result = value_range(&arg, -1, -1, 0x7fff);
- if(result)
- return result;
- s->maxredirs = (short)arg;
- break;
-
- case CURLOPT_POSTREDIR:
- if(arg < CURL_REDIR_GET_ALL)
- /* no return error on too high numbers since the bitmask could be
- extended in a future */
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->post301 = !!(arg & CURL_REDIR_POST_301);
- s->post302 = !!(arg & CURL_REDIR_POST_302);
- s->post303 = !!(arg & CURL_REDIR_POST_303);
- break;
-
- case CURLOPT_HEADEROPT:
- s->sep_headers = !!(arg & CURLHEADER_SEPARATE);
- break;
- case CURLOPT_HTTPAUTH:
- return httpauth(data, FALSE, uarg);
-
- case CURLOPT_HTTP_VERSION:
- return setopt_HTTP_VERSION(data, arg);
-
- case CURLOPT_EXPECT_100_TIMEOUT_MS:
- result = value_range(&arg, 0, 0, 0xffff);
- if(result)
- return result;
- s->expect_100_timeout = (unsigned short)arg;
- break;
-
-#endif /* !CURL_DISABLE_HTTP */
-
-#ifndef CURL_DISABLE_MIME
- case CURLOPT_MIME_OPTIONS:
- s->mime_formescape = !!(arg & CURLMIMEOPT_FORMESCAPE);
- break;
-#endif
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXYPORT:
- if((arg < 0) || (arg > UINT16_MAX))
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->proxyport = (uint16_t)arg;
- break;
-
- case CURLOPT_PROXYAUTH:
- return httpauth(data, TRUE, uarg);
-
- case CURLOPT_PROXYTYPE:
- if((arg < CURLPROXY_HTTP) || (arg > CURLPROXY_SOCKS5_HOSTNAME))
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->proxytype = (unsigned char)arg;
- break;
-
- case CURLOPT_SOCKS5_AUTH:
- if(uarg & ~(CURLAUTH_BASIC | CURLAUTH_GSSAPI))
- return CURLE_NOT_BUILT_IN;
- s->socks5auth = (unsigned char)uarg;
- break;
-#endif /* !CURL_DISABLE_PROXY */
-
-#ifndef CURL_DISABLE_FTP
- case CURLOPT_FTP_FILEMETHOD:
- if((arg < CURLFTPMETHOD_DEFAULT) || (arg >= CURLFTPMETHOD_LAST))
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->ftp_filemethod = (unsigned char)arg;
- break;
- case CURLOPT_FTP_SSL_CCC:
- if((arg < CURLFTPSSL_CCC_NONE) || (arg >= CURLFTPSSL_CCC_LAST))
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->ftp_ccc = (unsigned char)arg;
- break;
-
- case CURLOPT_FTPSSLAUTH:
- if((arg < CURLFTPAUTH_DEFAULT) || (arg >= CURLFTPAUTH_LAST))
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->ftpsslauth = (unsigned char)arg;
- break;
- case CURLOPT_ACCEPTTIMEOUT_MS:
- return setopt_set_timeout_ms(&s->accepttimeout, arg);
-#endif /* !CURL_DISABLE_FTP */
-#if !defined(CURL_DISABLE_FTP) || defined(USE_SSH)
- case CURLOPT_FTP_CREATE_MISSING_DIRS:
- if((arg < CURLFTP_CREATE_DIR_NONE) || (arg > CURLFTP_CREATE_DIR_RETRY))
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->ftp_create_missing_dirs = (unsigned char)arg;
- break;
-#endif /* !CURL_DISABLE_FTP || USE_SSH */
- case CURLOPT_INFILESIZE:
- if(arg < -1)
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->filesize = arg;
- break;
case CURLOPT_LOW_SPEED_LIMIT:
if(arg < 0)
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->low_speed_limit = arg;
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
+ else
+ s->low_speed_limit = arg;
break;
case CURLOPT_LOW_SPEED_TIME:
result = value_range(&arg, 0, 0, USHRT_MAX);
- if(result)
- return result;
- s->low_speed_time = (uint16_t)arg;
+ if(!result)
+ s->low_speed_time = (uint16_t)arg;
break;
case CURLOPT_PORT:
if((arg < 0) || (arg > 65535))
break;
case CURLOPT_TIMEOUT:
return setopt_set_timeout_sec(&s->timeout, arg);
-
case CURLOPT_TIMEOUT_MS:
return setopt_set_timeout_ms(&s->timeout, arg);
-
case CURLOPT_CONNECTTIMEOUT:
return setopt_set_timeout_sec(&s->connecttimeout, arg);
-
case CURLOPT_CONNECTTIMEOUT_MS:
return setopt_set_timeout_ms(&s->connecttimeout, arg);
-
- case CURLOPT_RESUME_FROM:
- if(arg < -1)
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->set_resume_from = arg;
- break;
-
#ifndef CURL_DISABLE_BINDLOCAL
case CURLOPT_LOCALPORT:
if((arg < 0) || (arg > 65535))
s->localportrange = curlx_sltous(arg);
break;
#endif
-
-#ifdef HAVE_GSSAPI
- case CURLOPT_GSSAPI_DELEGATION:
- s->gssapi_delegation = (unsigned char)uarg &
- (CURLGSSAPI_DELEGATION_POLICY_FLAG | CURLGSSAPI_DELEGATION_FLAG);
- break;
-#endif
-
- case CURLOPT_SSL_FALSESTART:
- return CURLE_NOT_BUILT_IN;
case CURLOPT_BUFFERSIZE:
result = value_range(&arg, 0, READBUFFER_MIN, READBUFFER_MAX);
- if(result)
- return result;
- s->buffer_size = (unsigned int)arg;
+ if(!result)
+ s->buffer_size = (unsigned int)arg;
break;
-
case CURLOPT_UPLOAD_BUFFERSIZE:
result = value_range(&arg, 0, UPLOADBUFFER_MIN, UPLOADBUFFER_MAX);
- if(result)
- return result;
- s->upload_buffer_size = (unsigned int)arg;
+ if(!result)
+ s->upload_buffer_size = (unsigned int)arg;
break;
-
case CURLOPT_MAXFILESIZE:
if(arg < 0)
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->max_filesize = arg;
- break;
-
-#ifdef USE_SSL
- case CURLOPT_USE_SSL:
- if((arg < CURLUSESSL_NONE) || (arg >= CURLUSESSL_LAST))
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->use_ssl = (unsigned char)arg;
- break;
- case CURLOPT_SSL_OPTIONS:
- set_ssl_options(&s->ssl, &s->ssl.primary, arg);
- break;
-
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXY_SSL_OPTIONS:
- set_ssl_options(&s->proxy_ssl, &s->proxy_ssl.primary, arg);
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
+ else
+ s->max_filesize = arg;
break;
-#endif
-
-#endif /* USE_SSL */
case CURLOPT_IPRESOLVE:
if((arg < CURL_IPRESOLVE_WHATEVER) || (arg > CURL_IPRESOLVE_V6))
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->ipver = (unsigned char)arg;
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
+ else
+ s->ipver = (unsigned char)arg;
break;
-
case CURLOPT_CONNECT_ONLY:
if(arg < 0 || arg > 2)
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->connect_only = !!arg;
- s->connect_only_ws = (arg == 2);
- break;
-
-#ifdef USE_SSH
- case CURLOPT_SSH_AUTH_TYPES:
- s->ssh_auth_types = (int)arg;
- break;
-#endif
-
-#if !defined(CURL_DISABLE_FTP) || defined(USE_SSH)
- case CURLOPT_NEW_FILE_PERMS:
- if((arg < 0) || (arg > 0777))
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->new_file_perms = (unsigned int)arg;
- break;
-#endif
-#ifdef USE_SSH
- case CURLOPT_NEW_DIRECTORY_PERMS:
- if((arg < 0) || (arg > 0777))
- return CURLE_BAD_FUNCTION_ARGUMENT;
- s->new_directory_perms = (unsigned int)arg;
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
+ else {
+ s->connect_only = !!arg;
+ s->connect_only_ws = (arg == 2);
+ }
break;
-#endif
#ifdef USE_IPV6
case CURLOPT_ADDRESS_SCOPE:
#if SIZEOF_LONG > 4
- if(uarg > UINT_MAX)
- return CURLE_BAD_FUNCTION_ARGUMENT;
+ if((unsigned long)arg > UINT_MAX)
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
+ else
#endif
- s->scope_id = (unsigned int)uarg;
+ s->scope_id = (unsigned int)arg;
break;
#endif
- case CURLOPT_PROTOCOLS:
- s->allowed_protocols = (curl_prot_t)arg;
- break;
-
- case CURLOPT_REDIR_PROTOCOLS:
- s->redir_protocols = (curl_prot_t)arg;
+ case CURLOPT_TCP_KEEPIDLE:
+ result = value_range(&arg, 0, 0, INT_MAX);
+ if(!result)
+ s->tcp_keepidle = (int)arg;
break;
-
-#ifndef CURL_DISABLE_RTSP
- case CURLOPT_RTSP_REQUEST:
- return setopt_RTSP_REQUEST(data, arg);
- case CURLOPT_RTSP_CLIENT_CSEQ:
+ case CURLOPT_TCP_KEEPINTVL:
result = value_range(&arg, 0, 0, INT_MAX);
- if(result)
- return result;
- data->state.rtsp_next_client_CSeq = (uint32_t)arg;
+ if(!result)
+ s->tcp_keepintvl = (int)arg;
break;
-
- case CURLOPT_RTSP_SERVER_CSEQ:
+ case CURLOPT_TCP_KEEPCNT:
result = value_range(&arg, 0, 0, INT_MAX);
- if(result)
- return result;
- data->state.rtsp_next_server_CSeq = (uint32_t)arg;
+ if(!result)
+ s->tcp_keepcnt = (int)arg;
break;
+ case CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS:
+ return setopt_set_timeout_ms(&s->happy_eyeballs_timeout, arg);
+ case CURLOPT_UPKEEP_INTERVAL_MS:
+ return setopt_set_timeout_ms(&s->upkeep_interval_ms, arg);
+ case CURLOPT_MAXAGE_CONN:
+ return setopt_set_timeout_sec(&s->conn_max_idle_ms, arg);
+ case CURLOPT_MAXLIFETIME_CONN:
+ return setopt_set_timeout_sec(&s->conn_max_age_ms, arg);
+ case CURLOPT_DNS_USE_GLOBAL_CACHE:
+ /* deprecated */
+ break;
+ default:
+ return CURLE_UNKNOWN_OPTION;
+ }
+ return result;
+}
-#endif /* !CURL_DISABLE_RTSP */
-
- case CURLOPT_TCP_KEEPIDLE:
- result = value_range(&arg, 0, 0, INT_MAX);
- if(result)
- return result;
- s->tcp_keepidle = (int)arg;
+static CURLcode setopt_long_ssl(struct Curl_easy *data, CURLoption option,
+ long arg)
+{
+#ifdef USE_SSL
+ CURLcode result = CURLE_OK;
+ struct UserDefined *s = &data->set;
+ switch(option) {
+ case CURLOPT_CA_CACHE_TIMEOUT:
+ if(Curl_ssl_supports(data, SSLSUPP_CA_CACHE)) {
+ result = value_range(&arg, -1, -1, INT_MAX);
+ if(!result)
+ s->general_ssl.ca_cache_timeout = (int)arg;
+ }
+ else
+ result = CURLE_NOT_BUILT_IN;
break;
- case CURLOPT_TCP_KEEPINTVL:
- result = value_range(&arg, 0, 0, INT_MAX);
- if(result)
- return result;
- s->tcp_keepintvl = (int)arg;
+ case CURLOPT_SSLVERSION:
+#ifndef CURL_DISABLE_PROXY
+ case CURLOPT_PROXY_SSLVERSION:
+#endif
+ return Curl_setopt_SSLVERSION(data, option, arg);
+ case CURLOPT_SSL_FALSESTART:
+ result = CURLE_NOT_BUILT_IN;
break;
- case CURLOPT_TCP_KEEPCNT:
- result = value_range(&arg, 0, 0, INT_MAX);
- if(result)
- return result;
- s->tcp_keepcnt = (int)arg;
+ case CURLOPT_USE_SSL:
+ if((arg < CURLUSESSL_NONE) || (arg >= CURLUSESSL_LAST))
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
+ else
+ s->use_ssl = (unsigned char)arg;
break;
+ case CURLOPT_SSL_OPTIONS:
+ set_ssl_options(&s->ssl, &s->ssl.primary, arg);
+ break;
+#ifndef CURL_DISABLE_PROXY
+ case CURLOPT_PROXY_SSL_OPTIONS:
+ set_ssl_options(&s->proxy_ssl, &s->proxy_ssl.primary, arg);
+ break;
+#endif
case CURLOPT_SSL_ENABLE_NPN:
break;
+ case CURLOPT_SSLENGINE_DEFAULT:
+ Curl_safefree(s->str[STRING_SSL_ENGINE]);
+ result = Curl_ssl_set_engine_default(data);
+ break;
+ default:
+ return CURLE_UNKNOWN_OPTION;
+ }
+ return result;
+#else /* USE_SSL */
+ (void)data;
+ (void)option;
+ (void)arg;
+ return CURLE_UNKNOWN_OPTION;
+#endif /* !USE_SSL */
+}
+
+static CURLcode setopt_long_proxy(struct Curl_easy *data, CURLoption option,
+ long arg)
+{
+#ifndef CURL_DISABLE_PROXY
+ struct UserDefined *s = &data->set;
+
+ switch(option) {
+ case CURLOPT_PROXYPORT:
+ if((arg < 0) || (arg > UINT16_MAX))
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+ s->proxyport = (uint16_t)arg;
+ break;
+ case CURLOPT_PROXYAUTH:
+ return httpauth(data, TRUE, (unsigned long)arg);
+ case CURLOPT_PROXYTYPE:
+ if((arg < CURLPROXY_HTTP) || (arg > CURLPROXY_SOCKS5_HOSTNAME))
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+ s->proxytype = (unsigned char)arg;
+ break;
+ case CURLOPT_SOCKS5_AUTH:
+ if(arg & ~(CURLAUTH_BASIC | CURLAUTH_GSSAPI))
+ return CURLE_NOT_BUILT_IN;
+ s->socks5auth = (unsigned char)arg;
+ break;
+ default:
+ return CURLE_UNKNOWN_OPTION;
+ }
+ return CURLE_OK;
+#else
+ (void)data;
+ (void)option;
+ (void)arg;
+ return CURLE_UNKNOWN_OPTION;
+#endif
+}
+
+static CURLcode setopt_long_http(struct Curl_easy *data, CURLoption option,
+ long arg)
+{
+#ifndef CURL_DISABLE_HTTP
+ CURLcode result = CURLE_OK;
+ struct UserDefined *s = &data->set;
+
+ switch(option) {
+ case CURLOPT_FOLLOWLOCATION:
+ if((unsigned long)arg > 3)
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
+ else
+ s->http_follow_mode = (unsigned char)arg;
+ break;
+ case CURLOPT_MAXREDIRS:
+ result = value_range(&arg, -1, -1, 0x7fff);
+ if(!result)
+ s->maxredirs = (short)arg;
+ break;
+ case CURLOPT_POSTREDIR:
+ if(arg < CURL_REDIR_GET_ALL)
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
+ else {
+ s->post301 = !!(arg & CURL_REDIR_POST_301);
+ s->post302 = !!(arg & CURL_REDIR_POST_302);
+ s->post303 = !!(arg & CURL_REDIR_POST_303);
+ }
+ break;
+ case CURLOPT_HEADEROPT:
+ s->sep_headers = !!(arg & CURLHEADER_SEPARATE);
+ break;
+ case CURLOPT_HTTPAUTH:
+ return httpauth(data, FALSE, (unsigned long)arg);
+ case CURLOPT_HTTP_VERSION:
+ return setopt_HTTP_VERSION(data, arg);
+ case CURLOPT_EXPECT_100_TIMEOUT_MS:
+ result = value_range(&arg, 0, 0, 0xffff);
+ if(!result)
+ s->expect_100_timeout = (unsigned short)arg;
+ break;
case CURLOPT_STREAM_WEIGHT:
#if defined(USE_HTTP2) || defined(USE_HTTP3)
if((arg >= 1) && (arg <= 256))
s->priority.weight = (int)arg;
break;
#else
- return CURLE_NOT_BUILT_IN;
+ result = CURLE_NOT_BUILT_IN;
+ break;
#endif
- case CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS:
- return setopt_set_timeout_ms(&s->happy_eyeballs_timeout, arg);
+ default:
+ return CURLE_UNKNOWN_OPTION;
+ }
+ return result;
+#else
+ (void)data;
+ (void)option;
+ (void)arg;
+ return CURLE_UNKNOWN_OPTION;
+#endif
+}
- case CURLOPT_UPKEEP_INTERVAL_MS:
- return setopt_set_timeout_ms(&s->upkeep_interval_ms, arg);
+static CURLcode setopt_long_proto(struct Curl_easy *data, CURLoption option,
+ long arg)
+{
+ CURLcode result = CURLE_OK;
+ struct UserDefined *s = &data->set;
+
+ switch(option) {
+#ifndef CURL_DISABLE_TFTP
+ case CURLOPT_TFTP_BLKSIZE:
+ result = value_range(&arg, 0, TFTP_BLKSIZE_MIN, TFTP_BLKSIZE_MAX);
+ if(!result)
+ s->tftp_blksize = (unsigned short)arg;
break;
- case CURLOPT_MAXAGE_CONN:
- return setopt_set_timeout_sec(&s->conn_max_idle_ms, arg);
+#endif
+#ifndef CURL_DISABLE_NETRC
+ case CURLOPT_NETRC:
+ if((arg < CURL_NETRC_IGNORED) || (arg >= CURL_NETRC_LAST))
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
+ else
+ s->use_netrc = (unsigned char)arg;
+ break;
+#endif
+#ifndef CURL_DISABLE_FTP
+ case CURLOPT_FTP_FILEMETHOD:
+ if((arg < CURLFTPMETHOD_DEFAULT) || (arg >= CURLFTPMETHOD_LAST))
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
+ else
+ s->ftp_filemethod = (unsigned char)arg;
+ break;
+ case CURLOPT_FTP_SSL_CCC:
+ if((arg < CURLFTPSSL_CCC_NONE) || (arg >= CURLFTPSSL_CCC_LAST))
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
+ else
+ s->ftp_ccc = (unsigned char)arg;
+ break;
+ case CURLOPT_FTPSSLAUTH:
+ if((arg < CURLFTPAUTH_DEFAULT) || (arg >= CURLFTPAUTH_LAST))
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
+ else
+ s->ftpsslauth = (unsigned char)arg;
+ break;
+ case CURLOPT_ACCEPTTIMEOUT_MS:
+ return setopt_set_timeout_ms(&s->accepttimeout, arg);
+#endif
+#if !defined(CURL_DISABLE_FTP) || defined(USE_SSH)
+ case CURLOPT_FTP_CREATE_MISSING_DIRS:
+ if((arg < CURLFTP_CREATE_DIR_NONE) || (arg > CURLFTP_CREATE_DIR_RETRY))
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
+ else
+ s->ftp_create_missing_dirs = (unsigned char)arg;
+ break;
+ case CURLOPT_NEW_FILE_PERMS:
+ if((arg < 0) || (arg > 0777))
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
+ else
+ s->new_file_perms = (unsigned int)arg;
+ break;
+#endif
+#ifndef CURL_DISABLE_RTSP
+ case CURLOPT_RTSP_REQUEST:
+ return setopt_RTSP_REQUEST(data, arg);
+ case CURLOPT_RTSP_CLIENT_CSEQ:
+ result = value_range(&arg, 0, 0, INT_MAX);
+ if(!result)
+ data->state.rtsp_next_client_CSeq = (uint32_t)arg;
+ break;
+ case CURLOPT_RTSP_SERVER_CSEQ:
+ result = value_range(&arg, 0, 0, INT_MAX);
+ if(!result)
+ data->state.rtsp_next_server_CSeq = (uint32_t)arg;
+ break;
+#endif
+#ifdef USE_SSH
+ case CURLOPT_SSH_AUTH_TYPES:
+ s->ssh_auth_types = (int)arg;
+ break;
+ case CURLOPT_NEW_DIRECTORY_PERMS:
+ if((arg < 0) || (arg > 0777))
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
+ else
+ s->new_directory_perms = (unsigned int)arg;
+ break;
+#endif
+ case CURLOPT_PROTOCOLS:
+ s->allowed_protocols = (curl_prot_t)arg;
+ break;
+ case CURLOPT_REDIR_PROTOCOLS:
+ s->redir_protocols = (curl_prot_t)arg;
+ break;
+#ifndef CURL_DISABLE_WEBSOCKETS
+ case CURLOPT_WS_OPTIONS:
+ s->ws_raw_mode = (bool)(arg & CURLWS_RAW_MODE);
+ s->ws_no_auto_pong = (bool)(arg & CURLWS_NOAUTOPONG);
+ break;
+#endif
+ default:
+ return CURLE_UNKNOWN_OPTION;
+ }
+ return result;
+}
- case CURLOPT_MAXLIFETIME_CONN:
- return setopt_set_timeout_sec(&s->conn_max_age_ms, arg);
+static CURLcode setopt_long_misc(struct Curl_easy *data, CURLoption option,
+ long arg)
+{
+ struct UserDefined *s = &data->set;
+ switch(option) {
+ case CURLOPT_TIMECONDITION:
+ if((arg < CURL_TIMECOND_NONE) || (arg >= CURL_TIMECOND_LAST))
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+ s->timecondition = (unsigned char)arg;
+ break;
+ case CURLOPT_TIMEVALUE:
+ s->timevalue = (time_t)arg;
+ break;
+ case CURLOPT_POSTFIELDSIZE:
+ if(arg < -1)
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+ if(s->postfieldsize < arg &&
+ s->postfields == s->str[STRING_COPYPOSTFIELDS]) {
+ Curl_safefree(s->str[STRING_COPYPOSTFIELDS]);
+ s->postfields = NULL;
+ }
+ s->postfieldsize = arg;
+ break;
+ case CURLOPT_INFILESIZE:
+ if(arg < -1)
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+ s->filesize = arg;
+ break;
+ case CURLOPT_RESUME_FROM:
+ if(arg < -1)
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+ s->set_resume_from = arg;
+ break;
+ case CURLOPT_UPLOAD_FLAGS:
+ s->upload_flags = (unsigned char)arg;
+ break;
+#ifndef CURL_DISABLE_MIME
+ case CURLOPT_MIME_OPTIONS:
+ s->mime_formescape = !!(arg & CURLMIMEOPT_FORMESCAPE);
+ break;
+#endif
#ifndef CURL_DISABLE_HSTS
case CURLOPT_HSTS_CTRL:
if(arg & CURLHSTS_ENABLE) {
else
Curl_hsts_cleanup(&data->hsts);
break;
-#endif /* !CURL_DISABLE_HSTS */
+#endif
#ifndef CURL_DISABLE_ALTSVC
case CURLOPT_ALTSVC_CTRL:
return Curl_altsvc_ctrl(data, arg);
-#endif /* !CURL_DISABLE_ALTSVC */
-#ifndef CURL_DISABLE_WEBSOCKETS
- case CURLOPT_WS_OPTIONS:
- s->ws_raw_mode = (bool)(arg & CURLWS_RAW_MODE);
- s->ws_no_auto_pong = (bool)(arg & CURLWS_NOAUTOPONG);
- break;
#endif
- case CURLOPT_DNS_USE_GLOBAL_CACHE:
- /* deprecated */
- break;
- case CURLOPT_SSLENGINE_DEFAULT:
- Curl_safefree(s->str[STRING_SSL_ENGINE]);
- return Curl_ssl_set_engine_default(data);
- case CURLOPT_UPLOAD_FLAGS:
- s->upload_flags = (unsigned char)arg;
+#ifdef HAVE_GSSAPI
+ case CURLOPT_GSSAPI_DELEGATION:
+ s->gssapi_delegation = (unsigned char)arg &
+ (CURLGSSAPI_DELEGATION_POLICY_FLAG | CURLGSSAPI_DELEGATION_FLAG);
break;
+#endif
default:
return CURLE_UNKNOWN_OPTION;
}
return CURLE_OK;
}
+static CURLcode setopt_long(struct Curl_easy *data, CURLoption option,
+ long arg)
+{
+ typedef CURLcode (*setoptfunc)(struct Curl_easy *data,
+ CURLoption option, long arg);
+ static const setoptfunc setopt_call[] = {
+ setopt_long_bool,
+ setopt_long_net,
+ setopt_long_http,
+ setopt_long_proxy,
+ setopt_long_ssl,
+ setopt_long_proto,
+ setopt_long_misc
+ };
+ size_t i;
+
+ for(i = 0; i < CURL_ARRAYSIZE(setopt_call); i++) {
+ CURLcode result = setopt_call[i](data, option, arg);
+ if(result != CURLE_UNKNOWN_OPTION)
+ return result;
+ }
+ return CURLE_UNKNOWN_OPTION;
+}
+
static CURLcode setopt_slist(struct Curl_easy *data, CURLoption option,
struct curl_slist *slist)
{
break;
}
#endif
-
+
+ default:
+ return CURLE_UNKNOWN_OPTION;
+ }
+ return result;
+}
+
+#ifndef CURL_DISABLE_COOKIES
+static CURLcode cookielist(struct Curl_easy *data, const char *ptr)
+{
+ CURLcode result = CURLE_OK;
+ if(!ptr)
+ return CURLE_OK;
+
+ if(curl_strequal(ptr, "ALL")) {
+ /* clear all cookies */
+ Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
+ Curl_cookie_clearall(data->cookies);
+ Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
+ }
+ else if(curl_strequal(ptr, "SESS")) {
+ /* clear session cookies */
+ Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
+ Curl_cookie_clearsess(data->cookies);
+ Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
+ }
+ else if(curl_strequal(ptr, "FLUSH")) {
+ /* flush cookies to file, takes care of the locking */
+ Curl_flush_cookies(data, FALSE);
+ }
+ else if(curl_strequal(ptr, "RELOAD")) {
+ /* reload cookies from file */
+ return Curl_cookie_loadfiles(data);
+ }
+ else {
+ if(!data->cookies) {
+ /* if cookie engine was not running, activate it */
+ data->cookies = Curl_cookie_init();
+ if(!data->cookies)
+ return CURLE_OUT_OF_MEMORY;
+ data->state.cookie_engine = TRUE;
+ }
+
+ /* general protection against mistakes and abuse */
+ if(strlen(ptr) > CURL_MAX_INPUT_LENGTH)
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+
+ Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
+ if(checkprefix("Set-Cookie:", ptr))
+ /* HTTP Header format line */
+ result = Curl_cookie_add(data, data->cookies, TRUE, FALSE, ptr + 11,
+ NULL, NULL, TRUE);
+ else
+ /* Netscape format line */
+ result = Curl_cookie_add(data, data->cookies, FALSE, FALSE, ptr, NULL,
+ NULL, TRUE);
+ Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
+ }
+ return result;
+}
+
+static CURLcode cookiefile(struct Curl_easy *data, const char *ptr)
+{
+ /*
+ * Set cookie file to read and parse. Can be used multiple times.
+ */
+ if(ptr) {
+ struct curl_slist *cl;
+ /* general protection against mistakes and abuse */
+ if(strlen(ptr) > CURL_MAX_INPUT_LENGTH)
+ return CURLE_BAD_FUNCTION_ARGUMENT;
+ /* append the cookie filename to the list of filenames, and deal with
+ them later */
+ cl = curl_slist_append(data->state.cookielist, ptr);
+ if(!cl) {
+ curl_slist_free_all(data->state.cookielist);
+ data->state.cookielist = NULL;
+ return CURLE_OUT_OF_MEMORY;
+ }
+ data->state.cookielist = cl; /* store the list for later use */
+ }
+ else {
+ /* clear the list of cookie files */
+ curl_slist_free_all(data->state.cookielist);
+ data->state.cookielist = NULL;
+
+ if(!data->share || !data->share->cookies) {
+ /* throw away all existing cookies if this is not a shared cookie
+ container */
+ Curl_cookie_clearall(data->cookies);
+ Curl_cookie_cleanup(data->cookies);
+ }
+ /* disable the cookie engine */
+ data->cookies = NULL;
+ }
+ return CURLE_OK;
+}
+#endif
+
+#ifndef CURL_DISABLE_PROXY
+static CURLcode setopt_cptr_proxy(struct Curl_easy *data, CURLoption option,
+ char *ptr)
+{
+ CURLcode result = CURLE_OK;
+ struct UserDefined *s = &data->set;
+ switch(option) {
+ case CURLOPT_PROXYUSERPWD: {
+ /*
+ * user:password needed to use the proxy
+ */
+ char *u = NULL;
+ char *p = NULL;
+ result = setstropt_userpwd(ptr, &u, &p);
+
+ /* URL decode the components */
+ if(!result && u) {
+ Curl_safefree(s->str[STRING_PROXYUSERNAME]);
+ result = Curl_urldecode(u, 0, &s->str[STRING_PROXYUSERNAME], NULL,
+ REJECT_ZERO);
+ }
+ if(!result && p) {
+ Curl_safefree(s->str[STRING_PROXYPASSWORD]);
+ result = Curl_urldecode(p, 0, &s->str[STRING_PROXYPASSWORD], NULL,
+ REJECT_ZERO);
+ }
+ curlx_free(u);
+ curlx_free(p);
+ break;
+ }
+ case CURLOPT_PROXYUSERNAME:
+ /*
+ * authentication username to use in the operation
+ */
+ return Curl_setstropt(&s->str[STRING_PROXYUSERNAME], ptr);
+
+ case CURLOPT_PROXYPASSWORD:
+ /*
+ * authentication password to use in the operation
+ */
+ return Curl_setstropt(&s->str[STRING_PROXYPASSWORD], ptr);
+
+ case CURLOPT_NOPROXY:
+ /*
+ * proxy exception list
+ */
+ return Curl_setstropt(&s->str[STRING_NOPROXY], ptr);
+ case CURLOPT_PROXY_SSLCERT:
+ /*
+ * String that holds filename of the SSL certificate to use for proxy
+ */
+ return Curl_setstropt(&s->str[STRING_CERT_PROXY], ptr);
+ case CURLOPT_PROXY_SSLCERTTYPE:
+ /*
+ * String that holds file type of the SSL certificate to use for proxy
+ */
+ return Curl_setstropt(&s->str[STRING_CERT_TYPE_PROXY], ptr);
+ case CURLOPT_PROXY_SSLKEY:
+ /*
+ * String that holds filename of the SSL key to use for proxy
+ */
+ return Curl_setstropt(&s->str[STRING_KEY_PROXY], ptr);
+ case CURLOPT_PROXY_KEYPASSWD:
+ /*
+ * String that holds the SSL private key password for proxy.
+ */
+ return Curl_setstropt(&s->str[STRING_KEY_PASSWD_PROXY], ptr);
+ case CURLOPT_PROXY_SSLKEYTYPE:
+ /*
+ * String that holds file type of the SSL key to use for proxy
+ */
+ return Curl_setstropt(&s->str[STRING_KEY_TYPE_PROXY], ptr);
+ case CURLOPT_PROXY_SSL_CIPHER_LIST:
+ if(Curl_ssl_supports(data, SSLSUPP_CIPHER_LIST)) {
+ /* set a list of cipher we want to use in the SSL connection for proxy */
+ return Curl_setstropt(&s->str[STRING_SSL_CIPHER_LIST_PROXY], ptr);
+ }
+ else
+ return CURLE_NOT_BUILT_IN;
+ case CURLOPT_PROXY_TLS13_CIPHERS:
+ if(Curl_ssl_supports(data, SSLSUPP_TLS13_CIPHERSUITES))
+ /* set preferred list of TLS 1.3 cipher suites for proxy */
+ return Curl_setstropt(&s->str[STRING_SSL_CIPHER13_LIST_PROXY], ptr);
+ else
+ return CURLE_NOT_BUILT_IN;
+ case CURLOPT_PROXY:
+ /*
+ * Set proxy server:port to use as proxy.
+ *
+ * If the proxy is set to "" (and CURLOPT_SOCKS_PROXY is set to "" or NULL)
+ * we explicitly say that we do not want to use a proxy
+ * (even though there might be environment variables saying so).
+ *
+ * Setting it to NULL, means no proxy but allows the environment variables
+ * to decide for us (if CURLOPT_SOCKS_PROXY setting it to NULL).
+ */
+ return Curl_setstropt(&s->str[STRING_PROXY], ptr);
+ case CURLOPT_PRE_PROXY:
+ /*
+ * Set proxy server:port to use as SOCKS proxy.
+ *
+ * If the proxy is set to "" or NULL we explicitly say that we do not want
+ * to use the socks proxy.
+ */
+ return Curl_setstropt(&s->str[STRING_PRE_PROXY], ptr);
+ case CURLOPT_SOCKS5_GSSAPI_SERVICE:
+ case CURLOPT_PROXY_SERVICE_NAME:
+ /*
+ * Set proxy authentication service name for Kerberos 5 and SPNEGO
+ */
+ return Curl_setstropt(&s->str[STRING_PROXY_SERVICE_NAME], ptr);
+ case CURLOPT_PROXY_PINNEDPUBLICKEY:
+ /*
+ * Set pinned public key for SSL connection.
+ * Specify filename of the public key in DER format.
+ */
+#ifdef USE_SSL
+ if(Curl_ssl_supports(data, SSLSUPP_PINNEDPUBKEY))
+ return Curl_setstropt(&s->str[STRING_SSL_PINNEDPUBLICKEY_PROXY], ptr);
+#endif
+ return CURLE_NOT_BUILT_IN;
+
+ case CURLOPT_HAPROXY_CLIENT_IP:
+ /*
+ * Set the client IP to send through HAProxy PROXY protocol
+ */
+ result = Curl_setstropt(&s->str[STRING_HAPROXY_CLIENT_IP], ptr);
+
+ /* enable the HAProxy protocol if an IP is provided */
+ s->haproxyprotocol = !!s->str[STRING_HAPROXY_CLIENT_IP];
+ break;
+ case CURLOPT_PROXY_CAINFO:
+ /*
+ * Set CA info SSL connection for proxy. Specify filename of the
+ * CA certificate
+ */
+ s->proxy_ssl.custom_cafile = TRUE;
+ return Curl_setstropt(&s->str[STRING_SSL_CAFILE_PROXY], ptr);
+ case CURLOPT_PROXY_CRLFILE:
+ /*
+ * Set CRL file info for SSL connection for proxy. Specify filename of the
+ * CRL to check certificates revocation
+ */
+ return Curl_setstropt(&s->str[STRING_SSL_CRLFILE_PROXY], ptr);
+ case CURLOPT_PROXY_ISSUERCERT:
+ /*
+ * Set Issuer certificate file
+ * to check certificates issuer
+ */
+ return Curl_setstropt(&s->str[STRING_SSL_ISSUERCERT_PROXY], ptr);
+ case CURLOPT_PROXY_CAPATH:
+ /*
+ * Set CA path info for SSL connection proxy. Specify directory name of the
+ * CA certificates which have been prepared using openssl c_rehash utility.
+ */
+#ifdef USE_SSL
+ if(Curl_ssl_supports(data, SSLSUPP_CA_PATH)) {
+ /* This does not work on Windows. */
+ s->proxy_ssl.custom_capath = TRUE;
+ return Curl_setstropt(&s->str[STRING_SSL_CAPATH_PROXY], ptr);
+ }
+#endif
+ return CURLE_NOT_BUILT_IN;
default:
return CURLE_UNKNOWN_OPTION;
}
return result;
}
-
-#ifndef CURL_DISABLE_COOKIES
-static CURLcode cookielist(struct Curl_easy *data, const char *ptr)
-{
- CURLcode result = CURLE_OK;
- if(!ptr)
- return CURLE_OK;
-
- if(curl_strequal(ptr, "ALL")) {
- /* clear all cookies */
- Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
- Curl_cookie_clearall(data->cookies);
- Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
- }
- else if(curl_strequal(ptr, "SESS")) {
- /* clear session cookies */
- Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
- Curl_cookie_clearsess(data->cookies);
- Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
- }
- else if(curl_strequal(ptr, "FLUSH")) {
- /* flush cookies to file, takes care of the locking */
- Curl_flush_cookies(data, FALSE);
- }
- else if(curl_strequal(ptr, "RELOAD")) {
- /* reload cookies from file */
- return Curl_cookie_loadfiles(data);
- }
- else {
- if(!data->cookies) {
- /* if cookie engine was not running, activate it */
- data->cookies = Curl_cookie_init();
- if(!data->cookies)
- return CURLE_OUT_OF_MEMORY;
- data->state.cookie_engine = TRUE;
- }
-
- /* general protection against mistakes and abuse */
- if(strlen(ptr) > CURL_MAX_INPUT_LENGTH)
- return CURLE_BAD_FUNCTION_ARGUMENT;
-
- Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
- if(checkprefix("Set-Cookie:", ptr))
- /* HTTP Header format line */
- result = Curl_cookie_add(data, data->cookies, TRUE, FALSE, ptr + 11,
- NULL, NULL, TRUE);
- else
- /* Netscape format line */
- result = Curl_cookie_add(data, data->cookies, FALSE, FALSE, ptr, NULL,
- NULL, TRUE);
- Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
- }
- return result;
-}
-
-static CURLcode cookiefile(struct Curl_easy *data, const char *ptr)
-{
- /*
- * Set cookie file to read and parse. Can be used multiple times.
- */
- if(ptr) {
- struct curl_slist *cl;
- /* general protection against mistakes and abuse */
- if(strlen(ptr) > CURL_MAX_INPUT_LENGTH)
- return CURLE_BAD_FUNCTION_ARGUMENT;
- /* append the cookie filename to the list of filenames, and deal with
- them later */
- cl = curl_slist_append(data->state.cookielist, ptr);
- if(!cl) {
- curl_slist_free_all(data->state.cookielist);
- data->state.cookielist = NULL;
- return CURLE_OUT_OF_MEMORY;
- }
- data->state.cookielist = cl; /* store the list for later use */
- }
- else {
- /* clear the list of cookie files */
- curl_slist_free_all(data->state.cookielist);
- data->state.cookielist = NULL;
-
- if(!data->share || !data->share->cookies) {
- /* throw away all existing cookies if this is not a shared cookie
- container */
- Curl_cookie_clearall(data->cookies);
- Curl_cookie_cleanup(data->cookies);
- }
- /* disable the cookie engine */
- data->cookies = NULL;
- }
- return CURLE_OK;
-}
#endif
static CURLcode setopt_cptr(struct Curl_easy *data, CURLoption option,
char *ptr)
{
- CURLcode result = CURLE_OK;
+ CURLcode result;
struct UserDefined *s = &data->set;
+#ifndef CURL_DISABLE_PROXY
+ result = setopt_cptr_proxy(data, option, ptr);
+ if(result != CURLE_UNKNOWN_OPTION)
+ return result;
+#endif
+ result = CURLE_OK;
+
switch(option) {
+ case CURLOPT_CAINFO:
+ /*
+ * Set CA info for SSL connection. Specify filename of the CA certificate
+ */
+ s->ssl.custom_cafile = TRUE;
+ return Curl_setstropt(&s->str[STRING_SSL_CAFILE], ptr);
+ case CURLOPT_CAPATH:
+ /*
+ * Set CA path info for SSL connection. Specify directory name of the CA
+ * certificates which have been prepared using openssl c_rehash utility.
+ */
+#ifdef USE_SSL
+ if(Curl_ssl_supports(data, SSLSUPP_CA_PATH)) {
+ /* This does not work on Windows. */
+ s->ssl.custom_capath = TRUE;
+ return Curl_setstropt(&s->str[STRING_SSL_CAPATH], ptr);
+ }
+#endif
+ return CURLE_NOT_BUILT_IN;
+ case CURLOPT_CRLFILE:
+ /*
+ * Set CRL file info for SSL connection. Specify filename of the CRL
+ * to check certificates revocation
+ */
+ return Curl_setstropt(&s->str[STRING_SSL_CRLFILE], ptr);
case CURLOPT_SSL_CIPHER_LIST:
if(Curl_ssl_supports(data, SSLSUPP_CIPHER_LIST))
/* set a list of cipher we want to use in the SSL connection */
return Curl_setstropt(&s->str[STRING_SSL_CIPHER_LIST], ptr);
else
return CURLE_NOT_BUILT_IN;
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXY_SSL_CIPHER_LIST:
- if(Curl_ssl_supports(data, SSLSUPP_CIPHER_LIST)) {
- /* set a list of cipher we want to use in the SSL connection for proxy */
- return Curl_setstropt(&s->str[STRING_SSL_CIPHER_LIST_PROXY], ptr);
- }
- else
- return CURLE_NOT_BUILT_IN;
-#endif
case CURLOPT_TLS13_CIPHERS:
if(Curl_ssl_supports(data, SSLSUPP_TLS13_CIPHERSUITES)) {
/* set preferred list of TLS 1.3 cipher suites */
}
else
return CURLE_NOT_BUILT_IN;
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXY_TLS13_CIPHERS:
- if(Curl_ssl_supports(data, SSLSUPP_TLS13_CIPHERSUITES))
- /* set preferred list of TLS 1.3 cipher suites for proxy */
- return Curl_setstropt(&s->str[STRING_SSL_CIPHER13_LIST_PROXY], ptr);
- else
- return CURLE_NOT_BUILT_IN;
-#endif
case CURLOPT_RANDOM_FILE:
break;
case CURLOPT_EGDSOCKET:
#endif /* !CURL_DISABLE_HTTP || !CURL_DISABLE_MQTT */
#ifndef CURL_DISABLE_HTTP
+ case CURLOPT_TRAILERDATA:
+ s->trailer_data = ptr;
+ break;
case CURLOPT_ACCEPT_ENCODING:
/*
* String to use at the value of Accept-Encoding header.
s->method = HTTPREQ_CUSTOM;
here, we continue as if we were using the already set type
and this just changes the actual request keyword */
-
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXY:
- /*
- * Set proxy server:port to use as proxy.
- *
- * If the proxy is set to "" (and CURLOPT_SOCKS_PROXY is set to "" or NULL)
- * we explicitly say that we do not want to use a proxy
- * (even though there might be environment variables saying so).
- *
- * Setting it to NULL, means no proxy but allows the environment variables
- * to decide for us (if CURLOPT_SOCKS_PROXY setting it to NULL).
- */
- return Curl_setstropt(&s->str[STRING_PROXY], ptr);
-
- case CURLOPT_PRE_PROXY:
- /*
- * Set proxy server:port to use as SOCKS proxy.
- *
- * If the proxy is set to "" or NULL we explicitly say that we do not want
- * to use the socks proxy.
- */
- return Curl_setstropt(&s->str[STRING_PRE_PROXY], ptr);
-#endif /* CURL_DISABLE_PROXY */
-
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_SOCKS5_GSSAPI_SERVICE:
- case CURLOPT_PROXY_SERVICE_NAME:
- /*
- * Set proxy authentication service name for Kerberos 5 and SPNEGO
- */
- return Curl_setstropt(&s->str[STRING_PROXY_SERVICE_NAME], ptr);
-#endif
case CURLOPT_SERVICE_NAME:
/*
* Set authentication service name for DIGEST-MD5, Kerberos 5 and SPNEGO
*/
s->closesocket_client = ptr;
break;
- case CURLOPT_TRAILERDATA:
-#ifndef CURL_DISABLE_HTTP
- s->trailer_data = ptr;
-#endif
- break;
case CURLOPT_PREREQDATA:
s->prereq_userp = ptr;
break;
-
case CURLOPT_ERRORBUFFER:
/*
* Error buffer provided by the caller to get the human readable error
case CURLOPT_KRBLEVEL:
return CURLE_NOT_BUILT_IN; /* removed in 8.17.0 */
+ case CURLOPT_CHUNK_DATA:
+ s->wildcardptr = ptr;
+ break;
+ case CURLOPT_FNMATCH_DATA:
+ s->fnmatch_data = ptr;
+ break;
#endif
case CURLOPT_URL:
/*
Curl_bufref_set(&data->state.url, s->str[STRING_SET_URL], 0, NULL);
break;
- case CURLOPT_USERPWD:
- /*
- * user:password to use in the operation
- */
- return setstropt_userpwd(ptr, &s->str[STRING_USERNAME],
- &s->str[STRING_PASSWORD]);
-
- case CURLOPT_USERNAME:
- /*
- * authentication username to use in the operation
- */
- return Curl_setstropt(&s->str[STRING_USERNAME], ptr);
-
- case CURLOPT_PASSWORD:
- /*
- * authentication password to use in the operation
- */
- return Curl_setstropt(&s->str[STRING_PASSWORD], ptr);
-
- case CURLOPT_LOGIN_OPTIONS:
- /*
- * authentication options to use in the operation
- */
- return Curl_setstropt(&s->str[STRING_OPTIONS], ptr);
-
- case CURLOPT_XOAUTH2_BEARER:
- /*
- * OAuth 2.0 bearer token to use in the operation
- */
- return Curl_setstropt(&s->str[STRING_BEARER], ptr);
-
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXYUSERPWD: {
- /*
- * user:password needed to use the proxy
- */
- char *u = NULL;
- char *p = NULL;
- result = setstropt_userpwd(ptr, &u, &p);
-
- /* URL decode the components */
- if(!result && u) {
- Curl_safefree(s->str[STRING_PROXYUSERNAME]);
- result = Curl_urldecode(u, 0, &s->str[STRING_PROXYUSERNAME], NULL,
- REJECT_ZERO);
- }
- if(!result && p) {
- Curl_safefree(s->str[STRING_PROXYPASSWORD]);
- result = Curl_urldecode(p, 0, &s->str[STRING_PROXYPASSWORD], NULL,
- REJECT_ZERO);
- }
- curlx_free(u);
- curlx_free(p);
- break;
- }
- case CURLOPT_PROXYUSERNAME:
+ case CURLOPT_USERPWD:
+ /*
+ * user:password to use in the operation
+ */
+ return setstropt_userpwd(ptr, &s->str[STRING_USERNAME],
+ &s->str[STRING_PASSWORD]);
+
+ case CURLOPT_USERNAME:
/*
* authentication username to use in the operation
*/
- return Curl_setstropt(&s->str[STRING_PROXYUSERNAME], ptr);
+ return Curl_setstropt(&s->str[STRING_USERNAME], ptr);
- case CURLOPT_PROXYPASSWORD:
+ case CURLOPT_PASSWORD:
/*
* authentication password to use in the operation
*/
- return Curl_setstropt(&s->str[STRING_PROXYPASSWORD], ptr);
+ return Curl_setstropt(&s->str[STRING_PASSWORD], ptr);
- case CURLOPT_NOPROXY:
+ case CURLOPT_LOGIN_OPTIONS:
/*
- * proxy exception list
+ * authentication options to use in the operation
*/
- return Curl_setstropt(&s->str[STRING_NOPROXY], ptr);
-#endif /* !CURL_DISABLE_PROXY */
+ return Curl_setstropt(&s->str[STRING_OPTIONS], ptr);
+ case CURLOPT_XOAUTH2_BEARER:
+ /*
+ * OAuth 2.0 bearer token to use in the operation
+ */
+ return Curl_setstropt(&s->str[STRING_BEARER], ptr);
case CURLOPT_RANGE:
/*
* What range of the file you want to transfer
*/
return Curl_setstropt(&s->str[STRING_SET_RANGE], ptr);
-
case CURLOPT_CURLU:
/*
* pass CURLU to set URL
* String that holds filename of the SSL certificate to use
*/
return Curl_setstropt(&s->str[STRING_CERT], ptr);
-
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXY_SSLCERT:
- /*
- * String that holds filename of the SSL certificate to use for proxy
- */
- return Curl_setstropt(&s->str[STRING_CERT_PROXY], ptr);
-
-#endif
case CURLOPT_SSLCERTTYPE:
/*
* String that holds file type of the SSL certificate to use
*/
return Curl_setstropt(&s->str[STRING_CERT_TYPE], ptr);
-
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXY_SSLCERTTYPE:
- /*
- * String that holds file type of the SSL certificate to use for proxy
- */
- return Curl_setstropt(&s->str[STRING_CERT_TYPE_PROXY], ptr);
-
-#endif
case CURLOPT_SSLKEY:
/*
* String that holds filename of the SSL key to use
*/
return Curl_setstropt(&s->str[STRING_KEY], ptr);
-
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXY_SSLKEY:
- /*
- * String that holds filename of the SSL key to use for proxy
- */
- return Curl_setstropt(&s->str[STRING_KEY_PROXY], ptr);
-
-#endif
case CURLOPT_SSLKEYTYPE:
/*
* String that holds file type of the SSL key to use
*/
return Curl_setstropt(&s->str[STRING_KEY_TYPE], ptr);
-
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXY_SSLKEYTYPE:
- /*
- * String that holds file type of the SSL key to use for proxy
- */
- return Curl_setstropt(&s->str[STRING_KEY_TYPE_PROXY], ptr);
-
-#endif
case CURLOPT_KEYPASSWD:
/*
* String that holds the SSL or SSH private key password.
*/
return Curl_setstropt(&s->str[STRING_KEY_PASSWD], ptr);
-
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXY_KEYPASSWD:
- /*
- * String that holds the SSL private key password for proxy.
- */
- return Curl_setstropt(&s->str[STRING_KEY_PASSWD_PROXY], ptr);
-
-#endif
case CURLOPT_SSLENGINE:
/*
* String that holds the SSL crypto engine.
}
}
break;
-
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_HAPROXY_CLIENT_IP:
- /*
- * Set the client IP to send through HAProxy PROXY protocol
- */
- result = Curl_setstropt(&s->str[STRING_HAPROXY_CLIENT_IP], ptr);
-
- /* enable the HAProxy protocol if an IP is provided */
- s->haproxyprotocol = !!s->str[STRING_HAPROXY_CLIENT_IP];
- break;
-
-#endif
case CURLOPT_INTERFACE:
/*
* Set what interface or address/hostname to bind the socket to when
&s->str[STRING_DEVICE],
&s->str[STRING_INTERFACE],
&s->str[STRING_BINDHOST]);
-
- case CURLOPT_PINNEDPUBLICKEY:
- /*
- * Set pinned public key for SSL connection.
- * Specify filename of the public key in DER format.
- */
-#ifdef USE_SSL
- if(Curl_ssl_supports(data, SSLSUPP_PINNEDPUBKEY))
- return Curl_setstropt(&s->str[STRING_SSL_PINNEDPUBLICKEY], ptr);
-#endif
- return CURLE_NOT_BUILT_IN;
-
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXY_PINNEDPUBLICKEY:
- /*
- * Set pinned public key for SSL connection.
- * Specify filename of the public key in DER format.
- */
-#ifdef USE_SSL
- if(Curl_ssl_supports(data, SSLSUPP_PINNEDPUBKEY))
- return Curl_setstropt(&s->str[STRING_SSL_PINNEDPUBLICKEY_PROXY], ptr);
-#endif
- return CURLE_NOT_BUILT_IN;
-#endif
- case CURLOPT_CAINFO:
- /*
- * Set CA info for SSL connection. Specify filename of the CA certificate
- */
- s->ssl.custom_cafile = TRUE;
- return Curl_setstropt(&s->str[STRING_SSL_CAFILE], ptr);
-
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXY_CAINFO:
- /*
- * Set CA info SSL connection for proxy. Specify filename of the
- * CA certificate
- */
- s->proxy_ssl.custom_cafile = TRUE;
- return Curl_setstropt(&s->str[STRING_SSL_CAFILE_PROXY], ptr);
-
-#endif
- case CURLOPT_CAPATH:
- /*
- * Set CA path info for SSL connection. Specify directory name of the CA
- * certificates which have been prepared using openssl c_rehash utility.
- */
-#ifdef USE_SSL
- if(Curl_ssl_supports(data, SSLSUPP_CA_PATH)) {
- /* This does not work on Windows. */
- s->ssl.custom_capath = TRUE;
- return Curl_setstropt(&s->str[STRING_SSL_CAPATH], ptr);
- }
-#endif
- return CURLE_NOT_BUILT_IN;
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXY_CAPATH:
- /*
- * Set CA path info for SSL connection proxy. Specify directory name of the
- * CA certificates which have been prepared using openssl c_rehash utility.
- */
-#ifdef USE_SSL
- if(Curl_ssl_supports(data, SSLSUPP_CA_PATH)) {
- /* This does not work on Windows. */
- s->proxy_ssl.custom_capath = TRUE;
- return Curl_setstropt(&s->str[STRING_SSL_CAPATH_PROXY], ptr);
- }
-#endif
- return CURLE_NOT_BUILT_IN;
-#endif
- case CURLOPT_CRLFILE:
- /*
- * Set CRL file info for SSL connection. Specify filename of the CRL
- * to check certificates revocation
- */
- return Curl_setstropt(&s->str[STRING_SSL_CRLFILE], ptr);
-
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXY_CRLFILE:
- /*
- * Set CRL file info for SSL connection for proxy. Specify filename of the
- * CRL to check certificates revocation
- */
- return Curl_setstropt(&s->str[STRING_SSL_CRLFILE_PROXY], ptr);
-
-#endif
case CURLOPT_ISSUERCERT:
/*
* Set Issuer certificate file
* to check certificates issuer
*/
return Curl_setstropt(&s->str[STRING_SSL_ISSUERCERT], ptr);
-
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXY_ISSUERCERT:
- /*
- * Set Issuer certificate file
- * to check certificates issuer
- */
- return Curl_setstropt(&s->str[STRING_SSL_ISSUERCERT_PROXY], ptr);
-
-#endif
case CURLOPT_PRIVATE:
/*
* Set private data pointer.
*/
s->private_data = ptr;
break;
-
#ifdef USE_SSL
case CURLOPT_SSL_EC_CURVES:
/*
* Specify colon-delimited list of curve algorithm names.
*/
return Curl_setstropt(&s->str[STRING_SSL_EC_CURVES], ptr);
-
case CURLOPT_SSL_SIGNATURE_ALGORITHMS:
/*
* Set accepted signature algorithms.
if(Curl_ssl_supports(data, SSLSUPP_SIGNATURE_ALGORITHMS))
return Curl_setstropt(&s->str[STRING_SSL_SIGNATURE_ALGORITHMS], ptr);
return CURLE_NOT_BUILT_IN;
+ case CURLOPT_PINNEDPUBLICKEY:
+ /*
+ * Set pinned public key for SSL connection.
+ * Specify filename of the public key in DER format.
+ */
+ if(Curl_ssl_supports(data, SSLSUPP_PINNEDPUBKEY))
+ return Curl_setstropt(&s->str[STRING_SSL_PINNEDPUBLICKEY], ptr);
+ return CURLE_NOT_BUILT_IN;
#endif
#ifdef USE_SSH
case CURLOPT_SSH_PUBLIC_KEYFILE:
* Use this file instead of the $HOME/.ssh/id_dsa.pub file
*/
return Curl_setstropt(&s->str[STRING_SSH_PUBLIC_KEY], ptr);
-
case CURLOPT_SSH_PRIVATE_KEYFILE:
/*
* Use this file instead of the $HOME/.ssh/id_dsa file
*/
return Curl_setstropt(&s->str[STRING_SSH_PRIVATE_KEY], ptr);
-
+ case CURLOPT_SSH_KEYDATA:
+ /*
+ * Custom client data to pass to the SSH keyfunc callback
+ */
+ s->ssh_keyfunc_userp = ptr;
+ break;
#if defined(USE_LIBSSH2) || defined(USE_LIBSSH)
case CURLOPT_SSH_HOST_PUBLIC_KEY_MD5:
/*
* for validation purposes.
*/
return Curl_setstropt(&s->str[STRING_SSH_HOST_PUBLIC_KEY_MD5], ptr);
-
case CURLOPT_SSH_KNOWNHOSTS:
/*
* Store the filename to read known hosts from.
*/
return Curl_setstropt(&s->str[STRING_SSH_KNOWNHOSTS], ptr);
#endif
- case CURLOPT_SSH_KEYDATA:
- /*
- * Custom client data to pass to the SSH keyfunc callback
- */
- s->ssh_keyfunc_userp = ptr;
- break;
#ifdef USE_LIBSSH2
case CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256:
/*
* for validation purposes.
*/
return Curl_setstropt(&s->str[STRING_SSH_HOST_PUBLIC_KEY_SHA256], ptr);
-
case CURLOPT_SSH_HOSTKEYDATA:
/*
* Custom client data to pass to the SSH keyfunc callback
/* make a NULL argument reset to default */
s->allowed_protocols = (curl_prot_t)CURLPROTO_ALL;
break;
-
case CURLOPT_REDIR_PROTOCOLS_STR:
if(ptr) {
curl_prot_t protos;
/* make a NULL argument reset to default */
s->redir_protocols = (curl_prot_t)CURLPROTO_REDIR;
break;
-
case CURLOPT_DEFAULT_PROTOCOL:
/* Set the protocol to use when the URL does not include any protocol */
return Curl_setstropt(&s->str[STRING_DEFAULT_PROTOCOL], ptr);
-
#ifndef CURL_DISABLE_SMTP
case CURLOPT_MAIL_FROM:
/* Set the SMTP mail originator */
return Curl_setstropt(&s->str[STRING_MAIL_FROM], ptr);
-
case CURLOPT_MAIL_AUTH:
/* Set the SMTP auth originator */
return Curl_setstropt(&s->str[STRING_MAIL_AUTH], ptr);
case CURLOPT_SASL_AUTHZID:
/* Authorization identity (identity to act as) */
return Curl_setstropt(&s->str[STRING_SASL_AUTHZID], ptr);
-
#ifndef CURL_DISABLE_RTSP
case CURLOPT_RTSP_SESSION_ID:
/*
* resuming a previously established RTSP session
*/
return Curl_setstropt(&s->str[STRING_RTSP_SESSION_ID], ptr);
-
case CURLOPT_RTSP_STREAM_URI:
/*
* Set the Stream URI for the RTSP request. Unless the request is
* for generic server options, the application will need to set this.
*/
return Curl_setstropt(&s->str[STRING_RTSP_STREAM_URI], ptr);
-
case CURLOPT_RTSP_TRANSPORT:
/*
* The content of the Transport: header for the RTSP request
*/
return Curl_setstropt(&s->str[STRING_RTSP_TRANSPORT], ptr);
-
case CURLOPT_INTERLEAVEDATA:
s->rtp_out = ptr;
break;
#endif /* !CURL_DISABLE_RTSP */
-#ifndef CURL_DISABLE_FTP
- case CURLOPT_CHUNK_DATA:
- s->wildcardptr = ptr;
- break;
- case CURLOPT_FNMATCH_DATA:
- s->fnmatch_data = ptr;
- break;
-#endif
#ifdef USE_TLS_SRP
case CURLOPT_TLSAUTH_USERNAME:
return Curl_setstropt(&s->str[STRING_TLSAUTH_USERNAME], ptr);
-
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXY_TLSAUTH_USERNAME:
- return Curl_setstropt(&s->str[STRING_TLSAUTH_USERNAME_PROXY], ptr);
-
-#endif
case CURLOPT_TLSAUTH_PASSWORD:
return Curl_setstropt(&s->str[STRING_TLSAUTH_PASSWORD], ptr);
-
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXY_TLSAUTH_PASSWORD:
- return Curl_setstropt(&s->str[STRING_TLSAUTH_PASSWORD_PROXY], ptr);
-#endif
case CURLOPT_TLSAUTH_TYPE:
if(ptr && !curl_strequal(ptr, "SRP"))
- return CURLE_BAD_FUNCTION_ARGUMENT;
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
break;
#ifndef CURL_DISABLE_PROXY
+ case CURLOPT_PROXY_TLSAUTH_USERNAME:
+ return Curl_setstropt(&s->str[STRING_TLSAUTH_USERNAME_PROXY], ptr);
+ case CURLOPT_PROXY_TLSAUTH_PASSWORD:
+ return Curl_setstropt(&s->str[STRING_TLSAUTH_PASSWORD_PROXY], ptr);
case CURLOPT_PROXY_TLSAUTH_TYPE:
if(ptr && !curl_strequal(ptr, "SRP"))
- return CURLE_BAD_FUNCTION_ARGUMENT;
+ result = CURLE_BAD_FUNCTION_ARGUMENT;
break;
#endif
#endif
case CURLOPT_DNS_SERVERS:
result = Curl_setstropt(&s->str[STRING_DNS_SERVERS], ptr);
if(result)
- return result;
+ break;
return Curl_async_ares_set_dns_servers(data);
case CURLOPT_DNS_INTERFACE:
result = Curl_setstropt(&s->str[STRING_DNS_INTERFACE], ptr);
if(result)
- return result;
+ break;
return Curl_async_ares_set_dns_interface(data);
case CURLOPT_DNS_LOCAL_IP4:
result = Curl_setstropt(&s->str[STRING_DNS_LOCAL_IP4], ptr);
if(result)
- return result;
+ break;
return Curl_async_ares_set_dns_local_ip4(data);
case CURLOPT_DNS_LOCAL_IP6:
result = Curl_setstropt(&s->str[STRING_DNS_LOCAL_IP6], ptr);
if(result)
- return result;
+ break;
return Curl_async_ares_set_dns_local_ip6(data);
#endif
}
result = Curl_setstropt(&s->str[STRING_ALTSVC], ptr);
if(result)
- return result;
+ break;
if(ptr)
return Curl_altsvc_load(data->asi, ptr);
break;
if(!ptr) {
s->tls_ech = CURLECH_DISABLE;
- return CURLE_OK;
+ break;
}
plen = strlen(ptr);
if(plen > CURL_MAX_INPUT_LENGTH) {
s->tls_ech = (s->tls_ech & CURLECH_CLA_CFG) | CURLECH_HARD;
else if(plen > 5 && !strncmp(ptr, "ecl:", 4)) {
result = Curl_setstropt(&s->str[STRING_ECH_CONFIG], ptr + 4);
- if(result)
- return result;
- s->tls_ech |= CURLECH_CLA_CFG;
+ if(!result)
+ s->tls_ech |= CURLECH_CLA_CFG;
}
- else if(plen > 4 && !strncmp(ptr, "pn:", 3)) {
+ else if(plen > 4 && !strncmp(ptr, "pn:", 3))
result = Curl_setstropt(&s->str[STRING_ECH_PUBLIC], ptr + 3);
- if(result)
- return result;
- }
break;
}
#endif