1*6236dae4SAndroid Build Coastguard Worker /***************************************************************************
2*6236dae4SAndroid Build Coastguard Worker * _ _ ____ _
3*6236dae4SAndroid Build Coastguard Worker * Project ___| | | | _ \| |
4*6236dae4SAndroid Build Coastguard Worker * / __| | | | |_) | |
5*6236dae4SAndroid Build Coastguard Worker * | (__| |_| | _ <| |___
6*6236dae4SAndroid Build Coastguard Worker * \___|\___/|_| \_\_____|
7*6236dae4SAndroid Build Coastguard Worker *
8*6236dae4SAndroid Build Coastguard Worker * Copyright (C) Daniel Stenberg, <[email protected]>, et al.
9*6236dae4SAndroid Build Coastguard Worker *
10*6236dae4SAndroid Build Coastguard Worker * This software is licensed as described in the file COPYING, which
11*6236dae4SAndroid Build Coastguard Worker * you should have received as part of this distribution. The terms
12*6236dae4SAndroid Build Coastguard Worker * are also available at https://curl.se/docs/copyright.html.
13*6236dae4SAndroid Build Coastguard Worker *
14*6236dae4SAndroid Build Coastguard Worker * You may opt to use, copy, modify, merge, publish, distribute and/or sell
15*6236dae4SAndroid Build Coastguard Worker * copies of the Software, and permit persons to whom the Software is
16*6236dae4SAndroid Build Coastguard Worker * furnished to do so, under the terms of the COPYING file.
17*6236dae4SAndroid Build Coastguard Worker *
18*6236dae4SAndroid Build Coastguard Worker * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19*6236dae4SAndroid Build Coastguard Worker * KIND, either express or implied.
20*6236dae4SAndroid Build Coastguard Worker *
21*6236dae4SAndroid Build Coastguard Worker * SPDX-License-Identifier: curl
22*6236dae4SAndroid Build Coastguard Worker *
23*6236dae4SAndroid Build Coastguard Worker ***************************************************************************/
24*6236dae4SAndroid Build Coastguard Worker
25*6236dae4SAndroid Build Coastguard Worker #include "curl_setup.h"
26*6236dae4SAndroid Build Coastguard Worker
27*6236dae4SAndroid Build Coastguard Worker #include <limits.h>
28*6236dae4SAndroid Build Coastguard Worker
29*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_NETINET_IN_H
30*6236dae4SAndroid Build Coastguard Worker #include <netinet/in.h>
31*6236dae4SAndroid Build Coastguard Worker #endif
32*6236dae4SAndroid Build Coastguard Worker
33*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_LINUX_TCP_H
34*6236dae4SAndroid Build Coastguard Worker #include <linux/tcp.h>
35*6236dae4SAndroid Build Coastguard Worker #elif defined(HAVE_NETINET_TCP_H)
36*6236dae4SAndroid Build Coastguard Worker #include <netinet/tcp.h>
37*6236dae4SAndroid Build Coastguard Worker #endif
38*6236dae4SAndroid Build Coastguard Worker
39*6236dae4SAndroid Build Coastguard Worker #include "urldata.h"
40*6236dae4SAndroid Build Coastguard Worker #include "url.h"
41*6236dae4SAndroid Build Coastguard Worker #include "progress.h"
42*6236dae4SAndroid Build Coastguard Worker #include "content_encoding.h"
43*6236dae4SAndroid Build Coastguard Worker #include "strcase.h"
44*6236dae4SAndroid Build Coastguard Worker #include "share.h"
45*6236dae4SAndroid Build Coastguard Worker #include "vtls/vtls.h"
46*6236dae4SAndroid Build Coastguard Worker #include "warnless.h"
47*6236dae4SAndroid Build Coastguard Worker #include "sendf.h"
48*6236dae4SAndroid Build Coastguard Worker #include "http2.h"
49*6236dae4SAndroid Build Coastguard Worker #include "setopt.h"
50*6236dae4SAndroid Build Coastguard Worker #include "multiif.h"
51*6236dae4SAndroid Build Coastguard Worker #include "altsvc.h"
52*6236dae4SAndroid Build Coastguard Worker #include "hsts.h"
53*6236dae4SAndroid Build Coastguard Worker #include "tftp.h"
54*6236dae4SAndroid Build Coastguard Worker #include "strdup.h"
55*6236dae4SAndroid Build Coastguard Worker #include "escape.h"
56*6236dae4SAndroid Build Coastguard Worker
57*6236dae4SAndroid Build Coastguard Worker /* The last 3 #include files should be in this order */
58*6236dae4SAndroid Build Coastguard Worker #include "curl_printf.h"
59*6236dae4SAndroid Build Coastguard Worker #include "curl_memory.h"
60*6236dae4SAndroid Build Coastguard Worker #include "memdebug.h"
61*6236dae4SAndroid Build Coastguard Worker
Curl_setstropt(char ** charp,const char * s)62*6236dae4SAndroid Build Coastguard Worker CURLcode Curl_setstropt(char **charp, const char *s)
63*6236dae4SAndroid Build Coastguard Worker {
64*6236dae4SAndroid Build Coastguard Worker /* Release the previous storage at `charp' and replace by a dynamic storage
65*6236dae4SAndroid Build Coastguard Worker copy of `s'. Return CURLE_OK or CURLE_OUT_OF_MEMORY. */
66*6236dae4SAndroid Build Coastguard Worker
67*6236dae4SAndroid Build Coastguard Worker Curl_safefree(*charp);
68*6236dae4SAndroid Build Coastguard Worker
69*6236dae4SAndroid Build Coastguard Worker if(s) {
70*6236dae4SAndroid Build Coastguard Worker if(strlen(s) > CURL_MAX_INPUT_LENGTH)
71*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
72*6236dae4SAndroid Build Coastguard Worker
73*6236dae4SAndroid Build Coastguard Worker *charp = strdup(s);
74*6236dae4SAndroid Build Coastguard Worker if(!*charp)
75*6236dae4SAndroid Build Coastguard Worker return CURLE_OUT_OF_MEMORY;
76*6236dae4SAndroid Build Coastguard Worker }
77*6236dae4SAndroid Build Coastguard Worker
78*6236dae4SAndroid Build Coastguard Worker return CURLE_OK;
79*6236dae4SAndroid Build Coastguard Worker }
80*6236dae4SAndroid Build Coastguard Worker
Curl_setblobopt(struct curl_blob ** blobp,const struct curl_blob * blob)81*6236dae4SAndroid Build Coastguard Worker CURLcode Curl_setblobopt(struct curl_blob **blobp,
82*6236dae4SAndroid Build Coastguard Worker const struct curl_blob *blob)
83*6236dae4SAndroid Build Coastguard Worker {
84*6236dae4SAndroid Build Coastguard Worker /* free the previous storage at `blobp' and replace by a dynamic storage
85*6236dae4SAndroid Build Coastguard Worker copy of blob. If CURL_BLOB_COPY is set, the data is copied. */
86*6236dae4SAndroid Build Coastguard Worker
87*6236dae4SAndroid Build Coastguard Worker Curl_safefree(*blobp);
88*6236dae4SAndroid Build Coastguard Worker
89*6236dae4SAndroid Build Coastguard Worker if(blob) {
90*6236dae4SAndroid Build Coastguard Worker struct curl_blob *nblob;
91*6236dae4SAndroid Build Coastguard Worker if(blob->len > CURL_MAX_INPUT_LENGTH)
92*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
93*6236dae4SAndroid Build Coastguard Worker nblob = (struct curl_blob *)
94*6236dae4SAndroid Build Coastguard Worker malloc(sizeof(struct curl_blob) +
95*6236dae4SAndroid Build Coastguard Worker ((blob->flags & CURL_BLOB_COPY) ? blob->len : 0));
96*6236dae4SAndroid Build Coastguard Worker if(!nblob)
97*6236dae4SAndroid Build Coastguard Worker return CURLE_OUT_OF_MEMORY;
98*6236dae4SAndroid Build Coastguard Worker *nblob = *blob;
99*6236dae4SAndroid Build Coastguard Worker if(blob->flags & CURL_BLOB_COPY) {
100*6236dae4SAndroid Build Coastguard Worker /* put the data after the blob struct in memory */
101*6236dae4SAndroid Build Coastguard Worker nblob->data = (char *)nblob + sizeof(struct curl_blob);
102*6236dae4SAndroid Build Coastguard Worker memcpy(nblob->data, blob->data, blob->len);
103*6236dae4SAndroid Build Coastguard Worker }
104*6236dae4SAndroid Build Coastguard Worker
105*6236dae4SAndroid Build Coastguard Worker *blobp = nblob;
106*6236dae4SAndroid Build Coastguard Worker return CURLE_OK;
107*6236dae4SAndroid Build Coastguard Worker }
108*6236dae4SAndroid Build Coastguard Worker
109*6236dae4SAndroid Build Coastguard Worker return CURLE_OK;
110*6236dae4SAndroid Build Coastguard Worker }
111*6236dae4SAndroid Build Coastguard Worker
setstropt_userpwd(char * option,char ** userp,char ** passwdp)112*6236dae4SAndroid Build Coastguard Worker static CURLcode setstropt_userpwd(char *option, char **userp, char **passwdp)
113*6236dae4SAndroid Build Coastguard Worker {
114*6236dae4SAndroid Build Coastguard Worker char *user = NULL;
115*6236dae4SAndroid Build Coastguard Worker char *passwd = NULL;
116*6236dae4SAndroid Build Coastguard Worker
117*6236dae4SAndroid Build Coastguard Worker DEBUGASSERT(userp);
118*6236dae4SAndroid Build Coastguard Worker DEBUGASSERT(passwdp);
119*6236dae4SAndroid Build Coastguard Worker
120*6236dae4SAndroid Build Coastguard Worker /* Parse the login details if specified. It not then we treat NULL as a hint
121*6236dae4SAndroid Build Coastguard Worker to clear the existing data */
122*6236dae4SAndroid Build Coastguard Worker if(option) {
123*6236dae4SAndroid Build Coastguard Worker size_t len = strlen(option);
124*6236dae4SAndroid Build Coastguard Worker CURLcode result;
125*6236dae4SAndroid Build Coastguard Worker if(len > CURL_MAX_INPUT_LENGTH)
126*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
127*6236dae4SAndroid Build Coastguard Worker
128*6236dae4SAndroid Build Coastguard Worker result = Curl_parse_login_details(option, len, &user, &passwd, NULL);
129*6236dae4SAndroid Build Coastguard Worker if(result)
130*6236dae4SAndroid Build Coastguard Worker return result;
131*6236dae4SAndroid Build Coastguard Worker }
132*6236dae4SAndroid Build Coastguard Worker
133*6236dae4SAndroid Build Coastguard Worker free(*userp);
134*6236dae4SAndroid Build Coastguard Worker *userp = user;
135*6236dae4SAndroid Build Coastguard Worker
136*6236dae4SAndroid Build Coastguard Worker free(*passwdp);
137*6236dae4SAndroid Build Coastguard Worker *passwdp = passwd;
138*6236dae4SAndroid Build Coastguard Worker
139*6236dae4SAndroid Build Coastguard Worker return CURLE_OK;
140*6236dae4SAndroid Build Coastguard Worker }
141*6236dae4SAndroid Build Coastguard Worker
setstropt_interface(char * option,char ** devp,char ** ifacep,char ** hostp)142*6236dae4SAndroid Build Coastguard Worker static CURLcode setstropt_interface(char *option, char **devp,
143*6236dae4SAndroid Build Coastguard Worker char **ifacep, char **hostp)
144*6236dae4SAndroid Build Coastguard Worker {
145*6236dae4SAndroid Build Coastguard Worker char *dev = NULL;
146*6236dae4SAndroid Build Coastguard Worker char *iface = NULL;
147*6236dae4SAndroid Build Coastguard Worker char *host = NULL;
148*6236dae4SAndroid Build Coastguard Worker CURLcode result;
149*6236dae4SAndroid Build Coastguard Worker
150*6236dae4SAndroid Build Coastguard Worker DEBUGASSERT(devp);
151*6236dae4SAndroid Build Coastguard Worker DEBUGASSERT(ifacep);
152*6236dae4SAndroid Build Coastguard Worker DEBUGASSERT(hostp);
153*6236dae4SAndroid Build Coastguard Worker
154*6236dae4SAndroid Build Coastguard Worker if(option) {
155*6236dae4SAndroid Build Coastguard Worker /* Parse the interface details if set, otherwise clear them all */
156*6236dae4SAndroid Build Coastguard Worker result = Curl_parse_interface(option, &dev, &iface, &host);
157*6236dae4SAndroid Build Coastguard Worker if(result)
158*6236dae4SAndroid Build Coastguard Worker return result;
159*6236dae4SAndroid Build Coastguard Worker }
160*6236dae4SAndroid Build Coastguard Worker free(*devp);
161*6236dae4SAndroid Build Coastguard Worker *devp = dev;
162*6236dae4SAndroid Build Coastguard Worker
163*6236dae4SAndroid Build Coastguard Worker free(*ifacep);
164*6236dae4SAndroid Build Coastguard Worker *ifacep = iface;
165*6236dae4SAndroid Build Coastguard Worker
166*6236dae4SAndroid Build Coastguard Worker free(*hostp);
167*6236dae4SAndroid Build Coastguard Worker *hostp = host;
168*6236dae4SAndroid Build Coastguard Worker
169*6236dae4SAndroid Build Coastguard Worker return CURLE_OK;
170*6236dae4SAndroid Build Coastguard Worker }
171*6236dae4SAndroid Build Coastguard Worker
172*6236dae4SAndroid Build Coastguard Worker #define C_SSLVERSION_VALUE(x) (x & 0xffff)
173*6236dae4SAndroid Build Coastguard Worker #define C_SSLVERSION_MAX_VALUE(x) ((unsigned long)x & 0xffff0000)
174*6236dae4SAndroid Build Coastguard Worker
protocol2num(const char * str,curl_prot_t * val)175*6236dae4SAndroid Build Coastguard Worker static CURLcode protocol2num(const char *str, curl_prot_t *val)
176*6236dae4SAndroid Build Coastguard Worker {
177*6236dae4SAndroid Build Coastguard Worker /*
178*6236dae4SAndroid Build Coastguard Worker * We are asked to cherry-pick protocols, so play it safe and disallow all
179*6236dae4SAndroid Build Coastguard Worker * protocols to start with, and re-add the wanted ones back in.
180*6236dae4SAndroid Build Coastguard Worker */
181*6236dae4SAndroid Build Coastguard Worker *val = 0;
182*6236dae4SAndroid Build Coastguard Worker
183*6236dae4SAndroid Build Coastguard Worker if(!str)
184*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
185*6236dae4SAndroid Build Coastguard Worker
186*6236dae4SAndroid Build Coastguard Worker if(curl_strequal(str, "all")) {
187*6236dae4SAndroid Build Coastguard Worker *val = ~(curl_prot_t) 0;
188*6236dae4SAndroid Build Coastguard Worker return CURLE_OK;
189*6236dae4SAndroid Build Coastguard Worker }
190*6236dae4SAndroid Build Coastguard Worker
191*6236dae4SAndroid Build Coastguard Worker do {
192*6236dae4SAndroid Build Coastguard Worker const char *token = str;
193*6236dae4SAndroid Build Coastguard Worker size_t tlen;
194*6236dae4SAndroid Build Coastguard Worker
195*6236dae4SAndroid Build Coastguard Worker str = strchr(str, ',');
196*6236dae4SAndroid Build Coastguard Worker tlen = str ? (size_t) (str - token) : strlen(token);
197*6236dae4SAndroid Build Coastguard Worker if(tlen) {
198*6236dae4SAndroid Build Coastguard Worker const struct Curl_handler *h = Curl_getn_scheme_handler(token, tlen);
199*6236dae4SAndroid Build Coastguard Worker
200*6236dae4SAndroid Build Coastguard Worker if(!h)
201*6236dae4SAndroid Build Coastguard Worker return CURLE_UNSUPPORTED_PROTOCOL;
202*6236dae4SAndroid Build Coastguard Worker
203*6236dae4SAndroid Build Coastguard Worker *val |= h->protocol;
204*6236dae4SAndroid Build Coastguard Worker }
205*6236dae4SAndroid Build Coastguard Worker } while(str && str++);
206*6236dae4SAndroid Build Coastguard Worker
207*6236dae4SAndroid Build Coastguard Worker if(!*val)
208*6236dae4SAndroid Build Coastguard Worker /* no protocol listed */
209*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
210*6236dae4SAndroid Build Coastguard Worker return CURLE_OK;
211*6236dae4SAndroid Build Coastguard Worker }
212*6236dae4SAndroid Build Coastguard Worker
httpauth(struct Curl_easy * data,bool proxy,unsigned long auth)213*6236dae4SAndroid Build Coastguard Worker static CURLcode httpauth(struct Curl_easy *data, bool proxy,
214*6236dae4SAndroid Build Coastguard Worker unsigned long auth)
215*6236dae4SAndroid Build Coastguard Worker {
216*6236dae4SAndroid Build Coastguard Worker if(auth != CURLAUTH_NONE) {
217*6236dae4SAndroid Build Coastguard Worker int bitcheck = 0;
218*6236dae4SAndroid Build Coastguard Worker bool authbits = FALSE;
219*6236dae4SAndroid Build Coastguard Worker /* the DIGEST_IE bit is only used to set a special marker, for all the
220*6236dae4SAndroid Build Coastguard Worker rest we need to handle it as normal DIGEST */
221*6236dae4SAndroid Build Coastguard Worker bool iestyle = !!(auth & CURLAUTH_DIGEST_IE);
222*6236dae4SAndroid Build Coastguard Worker if(proxy)
223*6236dae4SAndroid Build Coastguard Worker data->state.authproxy.iestyle = iestyle;
224*6236dae4SAndroid Build Coastguard Worker else
225*6236dae4SAndroid Build Coastguard Worker data->state.authhost.iestyle = iestyle;
226*6236dae4SAndroid Build Coastguard Worker
227*6236dae4SAndroid Build Coastguard Worker if(auth & CURLAUTH_DIGEST_IE) {
228*6236dae4SAndroid Build Coastguard Worker auth |= CURLAUTH_DIGEST; /* set standard digest bit */
229*6236dae4SAndroid Build Coastguard Worker auth &= ~CURLAUTH_DIGEST_IE; /* unset ie digest bit */
230*6236dae4SAndroid Build Coastguard Worker }
231*6236dae4SAndroid Build Coastguard Worker
232*6236dae4SAndroid Build Coastguard Worker /* switch off bits we cannot support */
233*6236dae4SAndroid Build Coastguard Worker #ifndef USE_NTLM
234*6236dae4SAndroid Build Coastguard Worker auth &= ~CURLAUTH_NTLM; /* no NTLM support */
235*6236dae4SAndroid Build Coastguard Worker #endif
236*6236dae4SAndroid Build Coastguard Worker #ifndef USE_SPNEGO
237*6236dae4SAndroid Build Coastguard Worker auth &= ~CURLAUTH_NEGOTIATE; /* no Negotiate (SPNEGO) auth without GSS-API
238*6236dae4SAndroid Build Coastguard Worker or SSPI */
239*6236dae4SAndroid Build Coastguard Worker #endif
240*6236dae4SAndroid Build Coastguard Worker
241*6236dae4SAndroid Build Coastguard Worker /* check if any auth bit lower than CURLAUTH_ONLY is still set */
242*6236dae4SAndroid Build Coastguard Worker while(bitcheck < 31) {
243*6236dae4SAndroid Build Coastguard Worker if(auth & (1UL << bitcheck++)) {
244*6236dae4SAndroid Build Coastguard Worker authbits = TRUE;
245*6236dae4SAndroid Build Coastguard Worker break;
246*6236dae4SAndroid Build Coastguard Worker }
247*6236dae4SAndroid Build Coastguard Worker }
248*6236dae4SAndroid Build Coastguard Worker if(!authbits)
249*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN; /* no supported types left! */
250*6236dae4SAndroid Build Coastguard Worker }
251*6236dae4SAndroid Build Coastguard Worker if(proxy)
252*6236dae4SAndroid Build Coastguard Worker data->set.proxyauth = auth;
253*6236dae4SAndroid Build Coastguard Worker else
254*6236dae4SAndroid Build Coastguard Worker data->set.httpauth = auth;
255*6236dae4SAndroid Build Coastguard Worker return CURLE_OK;
256*6236dae4SAndroid Build Coastguard Worker }
257*6236dae4SAndroid Build Coastguard Worker
setopt_long(struct Curl_easy * data,CURLoption option,long arg)258*6236dae4SAndroid Build Coastguard Worker static CURLcode setopt_long(struct Curl_easy *data, CURLoption option,
259*6236dae4SAndroid Build Coastguard Worker long arg)
260*6236dae4SAndroid Build Coastguard Worker {
261*6236dae4SAndroid Build Coastguard Worker bool enabled = (0 != arg);
262*6236dae4SAndroid Build Coastguard Worker unsigned long uarg = (unsigned long)arg;
263*6236dae4SAndroid Build Coastguard Worker switch(option) {
264*6236dae4SAndroid Build Coastguard Worker case CURLOPT_DNS_CACHE_TIMEOUT:
265*6236dae4SAndroid Build Coastguard Worker if(arg < -1)
266*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
267*6236dae4SAndroid Build Coastguard Worker else if(arg > INT_MAX)
268*6236dae4SAndroid Build Coastguard Worker arg = INT_MAX;
269*6236dae4SAndroid Build Coastguard Worker
270*6236dae4SAndroid Build Coastguard Worker data->set.dns_cache_timeout = (int)arg;
271*6236dae4SAndroid Build Coastguard Worker break;
272*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CA_CACHE_TIMEOUT:
273*6236dae4SAndroid Build Coastguard Worker if(Curl_ssl_supports(data, SSLSUPP_CA_CACHE)) {
274*6236dae4SAndroid Build Coastguard Worker if(arg < -1)
275*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
276*6236dae4SAndroid Build Coastguard Worker else if(arg > INT_MAX)
277*6236dae4SAndroid Build Coastguard Worker arg = INT_MAX;
278*6236dae4SAndroid Build Coastguard Worker
279*6236dae4SAndroid Build Coastguard Worker data->set.general_ssl.ca_cache_timeout = (int)arg;
280*6236dae4SAndroid Build Coastguard Worker }
281*6236dae4SAndroid Build Coastguard Worker else
282*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
283*6236dae4SAndroid Build Coastguard Worker break;
284*6236dae4SAndroid Build Coastguard Worker case CURLOPT_MAXCONNECTS:
285*6236dae4SAndroid Build Coastguard Worker /*
286*6236dae4SAndroid Build Coastguard Worker * Set the absolute number of maximum simultaneous alive connection that
287*6236dae4SAndroid Build Coastguard Worker * libcurl is allowed to have.
288*6236dae4SAndroid Build Coastguard Worker */
289*6236dae4SAndroid Build Coastguard Worker if(uarg > UINT_MAX)
290*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
291*6236dae4SAndroid Build Coastguard Worker data->set.maxconnects = (unsigned int)uarg;
292*6236dae4SAndroid Build Coastguard Worker break;
293*6236dae4SAndroid Build Coastguard Worker case CURLOPT_FORBID_REUSE:
294*6236dae4SAndroid Build Coastguard Worker /*
295*6236dae4SAndroid Build Coastguard Worker * When this transfer is done, it must not be left to be reused by a
296*6236dae4SAndroid Build Coastguard Worker * subsequent transfer but shall be closed immediately.
297*6236dae4SAndroid Build Coastguard Worker */
298*6236dae4SAndroid Build Coastguard Worker data->set.reuse_forbid = enabled;
299*6236dae4SAndroid Build Coastguard Worker break;
300*6236dae4SAndroid Build Coastguard Worker case CURLOPT_FRESH_CONNECT:
301*6236dae4SAndroid Build Coastguard Worker /*
302*6236dae4SAndroid Build Coastguard Worker * This transfer shall not use a previously cached connection but
303*6236dae4SAndroid Build Coastguard Worker * should be made with a fresh new connect!
304*6236dae4SAndroid Build Coastguard Worker */
305*6236dae4SAndroid Build Coastguard Worker data->set.reuse_fresh = enabled;
306*6236dae4SAndroid Build Coastguard Worker break;
307*6236dae4SAndroid Build Coastguard Worker case CURLOPT_VERBOSE:
308*6236dae4SAndroid Build Coastguard Worker /*
309*6236dae4SAndroid Build Coastguard Worker * Verbose means infof() calls that give a lot of information about
310*6236dae4SAndroid Build Coastguard Worker * the connection and transfer procedures as well as internal choices.
311*6236dae4SAndroid Build Coastguard Worker */
312*6236dae4SAndroid Build Coastguard Worker data->set.verbose = enabled;
313*6236dae4SAndroid Build Coastguard Worker break;
314*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HEADER:
315*6236dae4SAndroid Build Coastguard Worker /*
316*6236dae4SAndroid Build Coastguard Worker * Set to include the header in the general data output stream.
317*6236dae4SAndroid Build Coastguard Worker */
318*6236dae4SAndroid Build Coastguard Worker data->set.include_header = enabled;
319*6236dae4SAndroid Build Coastguard Worker break;
320*6236dae4SAndroid Build Coastguard Worker case CURLOPT_NOPROGRESS:
321*6236dae4SAndroid Build Coastguard Worker /*
322*6236dae4SAndroid Build Coastguard Worker * Shut off the internal supported progress meter
323*6236dae4SAndroid Build Coastguard Worker */
324*6236dae4SAndroid Build Coastguard Worker data->set.hide_progress = enabled;
325*6236dae4SAndroid Build Coastguard Worker if(data->set.hide_progress)
326*6236dae4SAndroid Build Coastguard Worker data->progress.flags |= PGRS_HIDE;
327*6236dae4SAndroid Build Coastguard Worker else
328*6236dae4SAndroid Build Coastguard Worker data->progress.flags &= ~PGRS_HIDE;
329*6236dae4SAndroid Build Coastguard Worker break;
330*6236dae4SAndroid Build Coastguard Worker case CURLOPT_NOBODY:
331*6236dae4SAndroid Build Coastguard Worker /*
332*6236dae4SAndroid Build Coastguard Worker * Do not include the body part in the output data stream.
333*6236dae4SAndroid Build Coastguard Worker */
334*6236dae4SAndroid Build Coastguard Worker data->set.opt_no_body = enabled;
335*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_HTTP
336*6236dae4SAndroid Build Coastguard Worker if(data->set.opt_no_body)
337*6236dae4SAndroid Build Coastguard Worker /* in HTTP lingo, no body means using the HEAD request... */
338*6236dae4SAndroid Build Coastguard Worker data->set.method = HTTPREQ_HEAD;
339*6236dae4SAndroid Build Coastguard Worker else if(data->set.method == HTTPREQ_HEAD)
340*6236dae4SAndroid Build Coastguard Worker data->set.method = HTTPREQ_GET;
341*6236dae4SAndroid Build Coastguard Worker #endif
342*6236dae4SAndroid Build Coastguard Worker break;
343*6236dae4SAndroid Build Coastguard Worker case CURLOPT_FAILONERROR:
344*6236dae4SAndroid Build Coastguard Worker /*
345*6236dae4SAndroid Build Coastguard Worker * Do not output the >=400 error code HTML-page, but instead only
346*6236dae4SAndroid Build Coastguard Worker * return error.
347*6236dae4SAndroid Build Coastguard Worker */
348*6236dae4SAndroid Build Coastguard Worker data->set.http_fail_on_error = enabled;
349*6236dae4SAndroid Build Coastguard Worker break;
350*6236dae4SAndroid Build Coastguard Worker case CURLOPT_KEEP_SENDING_ON_ERROR:
351*6236dae4SAndroid Build Coastguard Worker data->set.http_keep_sending_on_error = enabled;
352*6236dae4SAndroid Build Coastguard Worker break;
353*6236dae4SAndroid Build Coastguard Worker case CURLOPT_UPLOAD:
354*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PUT:
355*6236dae4SAndroid Build Coastguard Worker /*
356*6236dae4SAndroid Build Coastguard Worker * We want to sent data to the remote host. If this is HTTP, that equals
357*6236dae4SAndroid Build Coastguard Worker * using the PUT request.
358*6236dae4SAndroid Build Coastguard Worker */
359*6236dae4SAndroid Build Coastguard Worker if(arg) {
360*6236dae4SAndroid Build Coastguard Worker /* If this is HTTP, PUT is what's needed to "upload" */
361*6236dae4SAndroid Build Coastguard Worker data->set.method = HTTPREQ_PUT;
362*6236dae4SAndroid Build Coastguard Worker data->set.opt_no_body = FALSE; /* this is implied */
363*6236dae4SAndroid Build Coastguard Worker }
364*6236dae4SAndroid Build Coastguard Worker else
365*6236dae4SAndroid Build Coastguard Worker /* In HTTP, the opposite of upload is GET (unless NOBODY is true as
366*6236dae4SAndroid Build Coastguard Worker then this can be changed to HEAD later on) */
367*6236dae4SAndroid Build Coastguard Worker data->set.method = HTTPREQ_GET;
368*6236dae4SAndroid Build Coastguard Worker break;
369*6236dae4SAndroid Build Coastguard Worker case CURLOPT_FILETIME:
370*6236dae4SAndroid Build Coastguard Worker /*
371*6236dae4SAndroid Build Coastguard Worker * Try to get the file time of the remote document. The time will
372*6236dae4SAndroid Build Coastguard Worker * later (possibly) become available using curl_easy_getinfo().
373*6236dae4SAndroid Build Coastguard Worker */
374*6236dae4SAndroid Build Coastguard Worker data->set.get_filetime = enabled;
375*6236dae4SAndroid Build Coastguard Worker break;
376*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SERVER_RESPONSE_TIMEOUT:
377*6236dae4SAndroid Build Coastguard Worker /*
378*6236dae4SAndroid Build Coastguard Worker * Option that specifies how quickly a server response must be obtained
379*6236dae4SAndroid Build Coastguard Worker * before it is considered failure. For pingpong protocols.
380*6236dae4SAndroid Build Coastguard Worker */
381*6236dae4SAndroid Build Coastguard Worker if((arg >= 0) && (arg <= (INT_MAX/1000)))
382*6236dae4SAndroid Build Coastguard Worker data->set.server_response_timeout = (unsigned int)arg * 1000;
383*6236dae4SAndroid Build Coastguard Worker else
384*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
385*6236dae4SAndroid Build Coastguard Worker break;
386*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SERVER_RESPONSE_TIMEOUT_MS:
387*6236dae4SAndroid Build Coastguard Worker /*
388*6236dae4SAndroid Build Coastguard Worker * Option that specifies how quickly a server response must be obtained
389*6236dae4SAndroid Build Coastguard Worker * before it is considered failure. For pingpong protocols.
390*6236dae4SAndroid Build Coastguard Worker */
391*6236dae4SAndroid Build Coastguard Worker if((arg >= 0) && (arg <= INT_MAX))
392*6236dae4SAndroid Build Coastguard Worker data->set.server_response_timeout = (unsigned int)arg;
393*6236dae4SAndroid Build Coastguard Worker else
394*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
395*6236dae4SAndroid Build Coastguard Worker break;
396*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_TFTP
397*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TFTP_NO_OPTIONS:
398*6236dae4SAndroid Build Coastguard Worker /*
399*6236dae4SAndroid Build Coastguard Worker * Option that prevents libcurl from sending TFTP option requests to the
400*6236dae4SAndroid Build Coastguard Worker * server.
401*6236dae4SAndroid Build Coastguard Worker */
402*6236dae4SAndroid Build Coastguard Worker data->set.tftp_no_options = enabled;
403*6236dae4SAndroid Build Coastguard Worker break;
404*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TFTP_BLKSIZE:
405*6236dae4SAndroid Build Coastguard Worker /*
406*6236dae4SAndroid Build Coastguard Worker * TFTP option that specifies the block size to use for data transmission.
407*6236dae4SAndroid Build Coastguard Worker */
408*6236dae4SAndroid Build Coastguard Worker if(arg < TFTP_BLKSIZE_MIN)
409*6236dae4SAndroid Build Coastguard Worker arg = 512;
410*6236dae4SAndroid Build Coastguard Worker else if(arg > TFTP_BLKSIZE_MAX)
411*6236dae4SAndroid Build Coastguard Worker arg = TFTP_BLKSIZE_MAX;
412*6236dae4SAndroid Build Coastguard Worker data->set.tftp_blksize = arg;
413*6236dae4SAndroid Build Coastguard Worker break;
414*6236dae4SAndroid Build Coastguard Worker #endif
415*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_NETRC
416*6236dae4SAndroid Build Coastguard Worker case CURLOPT_NETRC:
417*6236dae4SAndroid Build Coastguard Worker /*
418*6236dae4SAndroid Build Coastguard Worker * Parse the $HOME/.netrc file
419*6236dae4SAndroid Build Coastguard Worker */
420*6236dae4SAndroid Build Coastguard Worker if((arg < CURL_NETRC_IGNORED) || (arg >= CURL_NETRC_LAST))
421*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
422*6236dae4SAndroid Build Coastguard Worker data->set.use_netrc = (unsigned char)arg;
423*6236dae4SAndroid Build Coastguard Worker break;
424*6236dae4SAndroid Build Coastguard Worker #endif
425*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TRANSFERTEXT:
426*6236dae4SAndroid Build Coastguard Worker /*
427*6236dae4SAndroid Build Coastguard Worker * This option was previously named 'FTPASCII'. Renamed to work with
428*6236dae4SAndroid Build Coastguard Worker * more protocols than merely FTP.
429*6236dae4SAndroid Build Coastguard Worker *
430*6236dae4SAndroid Build Coastguard Worker * Transfer using ASCII (instead of BINARY).
431*6236dae4SAndroid Build Coastguard Worker */
432*6236dae4SAndroid Build Coastguard Worker data->set.prefer_ascii = enabled;
433*6236dae4SAndroid Build Coastguard Worker break;
434*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TIMECONDITION:
435*6236dae4SAndroid Build Coastguard Worker /*
436*6236dae4SAndroid Build Coastguard Worker * Set HTTP time condition. This must be one of the defines in the
437*6236dae4SAndroid Build Coastguard Worker * curl/curl.h header file.
438*6236dae4SAndroid Build Coastguard Worker */
439*6236dae4SAndroid Build Coastguard Worker if((arg < CURL_TIMECOND_NONE) || (arg >= CURL_TIMECOND_LAST))
440*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
441*6236dae4SAndroid Build Coastguard Worker data->set.timecondition = (unsigned char)(curl_TimeCond)arg;
442*6236dae4SAndroid Build Coastguard Worker break;
443*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TIMEVALUE:
444*6236dae4SAndroid Build Coastguard Worker /*
445*6236dae4SAndroid Build Coastguard Worker * This is the value to compare with the remote document with the
446*6236dae4SAndroid Build Coastguard Worker * method set with CURLOPT_TIMECONDITION
447*6236dae4SAndroid Build Coastguard Worker */
448*6236dae4SAndroid Build Coastguard Worker data->set.timevalue = (time_t)arg;
449*6236dae4SAndroid Build Coastguard Worker break;
450*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSLVERSION:
451*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
452*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_SSLVERSION:
453*6236dae4SAndroid Build Coastguard Worker #endif
454*6236dae4SAndroid Build Coastguard Worker /*
455*6236dae4SAndroid Build Coastguard Worker * Set explicit SSL version to try to connect with, as some SSL
456*6236dae4SAndroid Build Coastguard Worker * implementations are lame.
457*6236dae4SAndroid Build Coastguard Worker */
458*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSL
459*6236dae4SAndroid Build Coastguard Worker {
460*6236dae4SAndroid Build Coastguard Worker long version, version_max;
461*6236dae4SAndroid Build Coastguard Worker struct ssl_primary_config *primary = &data->set.ssl.primary;
462*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
463*6236dae4SAndroid Build Coastguard Worker if(option != CURLOPT_SSLVERSION)
464*6236dae4SAndroid Build Coastguard Worker primary = &data->set.proxy_ssl.primary;
465*6236dae4SAndroid Build Coastguard Worker #endif
466*6236dae4SAndroid Build Coastguard Worker version = C_SSLVERSION_VALUE(arg);
467*6236dae4SAndroid Build Coastguard Worker version_max = (long)C_SSLVERSION_MAX_VALUE(arg);
468*6236dae4SAndroid Build Coastguard Worker
469*6236dae4SAndroid Build Coastguard Worker if(version < CURL_SSLVERSION_DEFAULT ||
470*6236dae4SAndroid Build Coastguard Worker version == CURL_SSLVERSION_SSLv2 ||
471*6236dae4SAndroid Build Coastguard Worker version == CURL_SSLVERSION_SSLv3 ||
472*6236dae4SAndroid Build Coastguard Worker version >= CURL_SSLVERSION_LAST ||
473*6236dae4SAndroid Build Coastguard Worker version_max < CURL_SSLVERSION_MAX_NONE ||
474*6236dae4SAndroid Build Coastguard Worker version_max >= CURL_SSLVERSION_MAX_LAST)
475*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
476*6236dae4SAndroid Build Coastguard Worker
477*6236dae4SAndroid Build Coastguard Worker primary->version = (unsigned char)version;
478*6236dae4SAndroid Build Coastguard Worker primary->version_max = (unsigned int)version_max;
479*6236dae4SAndroid Build Coastguard Worker }
480*6236dae4SAndroid Build Coastguard Worker #else
481*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
482*6236dae4SAndroid Build Coastguard Worker #endif
483*6236dae4SAndroid Build Coastguard Worker break;
484*6236dae4SAndroid Build Coastguard Worker case CURLOPT_POSTFIELDSIZE:
485*6236dae4SAndroid Build Coastguard Worker /*
486*6236dae4SAndroid Build Coastguard Worker * The size of the POSTFIELD data to prevent libcurl to do strlen() to
487*6236dae4SAndroid Build Coastguard Worker * figure it out. Enables binary posts.
488*6236dae4SAndroid Build Coastguard Worker */
489*6236dae4SAndroid Build Coastguard Worker if(arg < -1)
490*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
491*6236dae4SAndroid Build Coastguard Worker
492*6236dae4SAndroid Build Coastguard Worker if(data->set.postfieldsize < arg &&
493*6236dae4SAndroid Build Coastguard Worker data->set.postfields == data->set.str[STRING_COPYPOSTFIELDS]) {
494*6236dae4SAndroid Build Coastguard Worker /* Previous CURLOPT_COPYPOSTFIELDS is no longer valid. */
495*6236dae4SAndroid Build Coastguard Worker Curl_safefree(data->set.str[STRING_COPYPOSTFIELDS]);
496*6236dae4SAndroid Build Coastguard Worker data->set.postfields = NULL;
497*6236dae4SAndroid Build Coastguard Worker }
498*6236dae4SAndroid Build Coastguard Worker
499*6236dae4SAndroid Build Coastguard Worker data->set.postfieldsize = arg;
500*6236dae4SAndroid Build Coastguard Worker break;
501*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_HTTP
502*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_DISABLE_COOKIES)
503*6236dae4SAndroid Build Coastguard Worker case CURLOPT_COOKIESESSION:
504*6236dae4SAndroid Build Coastguard Worker /*
505*6236dae4SAndroid Build Coastguard Worker * Set this option to TRUE to start a new "cookie session". It will
506*6236dae4SAndroid Build Coastguard Worker * prevent the forthcoming read-cookies-from-file actions to accept
507*6236dae4SAndroid Build Coastguard Worker * cookies that are marked as being session cookies, as they belong to a
508*6236dae4SAndroid Build Coastguard Worker * previous session.
509*6236dae4SAndroid Build Coastguard Worker */
510*6236dae4SAndroid Build Coastguard Worker data->set.cookiesession = enabled;
511*6236dae4SAndroid Build Coastguard Worker break;
512*6236dae4SAndroid Build Coastguard Worker #endif
513*6236dae4SAndroid Build Coastguard Worker case CURLOPT_AUTOREFERER:
514*6236dae4SAndroid Build Coastguard Worker /*
515*6236dae4SAndroid Build Coastguard Worker * Switch on automatic referer that gets set if curl follows locations.
516*6236dae4SAndroid Build Coastguard Worker */
517*6236dae4SAndroid Build Coastguard Worker data->set.http_auto_referer = enabled;
518*6236dae4SAndroid Build Coastguard Worker break;
519*6236dae4SAndroid Build Coastguard Worker
520*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TRANSFER_ENCODING:
521*6236dae4SAndroid Build Coastguard Worker data->set.http_transfer_encoding = enabled;
522*6236dae4SAndroid Build Coastguard Worker break;
523*6236dae4SAndroid Build Coastguard Worker
524*6236dae4SAndroid Build Coastguard Worker case CURLOPT_FOLLOWLOCATION:
525*6236dae4SAndroid Build Coastguard Worker /*
526*6236dae4SAndroid Build Coastguard Worker * Follow Location: header hints on an HTTP-server.
527*6236dae4SAndroid Build Coastguard Worker */
528*6236dae4SAndroid Build Coastguard Worker data->set.http_follow_location = enabled;
529*6236dae4SAndroid Build Coastguard Worker break;
530*6236dae4SAndroid Build Coastguard Worker
531*6236dae4SAndroid Build Coastguard Worker case CURLOPT_UNRESTRICTED_AUTH:
532*6236dae4SAndroid Build Coastguard Worker /*
533*6236dae4SAndroid Build Coastguard Worker * Send authentication (user+password) when following locations, even when
534*6236dae4SAndroid Build Coastguard Worker * hostname changed.
535*6236dae4SAndroid Build Coastguard Worker */
536*6236dae4SAndroid Build Coastguard Worker data->set.allow_auth_to_other_hosts = enabled;
537*6236dae4SAndroid Build Coastguard Worker break;
538*6236dae4SAndroid Build Coastguard Worker
539*6236dae4SAndroid Build Coastguard Worker case CURLOPT_MAXREDIRS:
540*6236dae4SAndroid Build Coastguard Worker /*
541*6236dae4SAndroid Build Coastguard Worker * The maximum amount of hops you allow curl to follow Location:
542*6236dae4SAndroid Build Coastguard Worker * headers. This should mostly be used to detect never-ending loops.
543*6236dae4SAndroid Build Coastguard Worker */
544*6236dae4SAndroid Build Coastguard Worker if(arg < -1)
545*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
546*6236dae4SAndroid Build Coastguard Worker data->set.maxredirs = arg;
547*6236dae4SAndroid Build Coastguard Worker break;
548*6236dae4SAndroid Build Coastguard Worker
549*6236dae4SAndroid Build Coastguard Worker case CURLOPT_POSTREDIR:
550*6236dae4SAndroid Build Coastguard Worker /*
551*6236dae4SAndroid Build Coastguard Worker * Set the behavior of POST when redirecting
552*6236dae4SAndroid Build Coastguard Worker * CURL_REDIR_GET_ALL - POST is changed to GET after 301 and 302
553*6236dae4SAndroid Build Coastguard Worker * CURL_REDIR_POST_301 - POST is kept as POST after 301
554*6236dae4SAndroid Build Coastguard Worker * CURL_REDIR_POST_302 - POST is kept as POST after 302
555*6236dae4SAndroid Build Coastguard Worker * CURL_REDIR_POST_303 - POST is kept as POST after 303
556*6236dae4SAndroid Build Coastguard Worker * CURL_REDIR_POST_ALL - POST is kept as POST after 301, 302 and 303
557*6236dae4SAndroid Build Coastguard Worker * other - POST is kept as POST after 301 and 302
558*6236dae4SAndroid Build Coastguard Worker */
559*6236dae4SAndroid Build Coastguard Worker if(arg < CURL_REDIR_GET_ALL)
560*6236dae4SAndroid Build Coastguard Worker /* no return error on too high numbers since the bitmask could be
561*6236dae4SAndroid Build Coastguard Worker extended in a future */
562*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
563*6236dae4SAndroid Build Coastguard Worker data->set.keep_post = arg & CURL_REDIR_POST_ALL;
564*6236dae4SAndroid Build Coastguard Worker break;
565*6236dae4SAndroid Build Coastguard Worker
566*6236dae4SAndroid Build Coastguard Worker case CURLOPT_POST:
567*6236dae4SAndroid Build Coastguard Worker /* Does this option serve a purpose anymore? Yes it does, when
568*6236dae4SAndroid Build Coastguard Worker CURLOPT_POSTFIELDS is not used and the POST data is read off the
569*6236dae4SAndroid Build Coastguard Worker callback! */
570*6236dae4SAndroid Build Coastguard Worker if(arg) {
571*6236dae4SAndroid Build Coastguard Worker data->set.method = HTTPREQ_POST;
572*6236dae4SAndroid Build Coastguard Worker data->set.opt_no_body = FALSE; /* this is implied */
573*6236dae4SAndroid Build Coastguard Worker }
574*6236dae4SAndroid Build Coastguard Worker else
575*6236dae4SAndroid Build Coastguard Worker data->set.method = HTTPREQ_GET;
576*6236dae4SAndroid Build Coastguard Worker break;
577*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HEADEROPT:
578*6236dae4SAndroid Build Coastguard Worker /*
579*6236dae4SAndroid Build Coastguard Worker * Set header option.
580*6236dae4SAndroid Build Coastguard Worker */
581*6236dae4SAndroid Build Coastguard Worker data->set.sep_headers = !!(arg & CURLHEADER_SEPARATE);
582*6236dae4SAndroid Build Coastguard Worker break;
583*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HTTPAUTH:
584*6236dae4SAndroid Build Coastguard Worker return httpauth(data, FALSE, uarg);
585*6236dae4SAndroid Build Coastguard Worker
586*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HTTPGET:
587*6236dae4SAndroid Build Coastguard Worker /*
588*6236dae4SAndroid Build Coastguard Worker * Set to force us do HTTP GET
589*6236dae4SAndroid Build Coastguard Worker */
590*6236dae4SAndroid Build Coastguard Worker if(enabled) {
591*6236dae4SAndroid Build Coastguard Worker data->set.method = HTTPREQ_GET;
592*6236dae4SAndroid Build Coastguard Worker data->set.opt_no_body = FALSE; /* this is implied */
593*6236dae4SAndroid Build Coastguard Worker }
594*6236dae4SAndroid Build Coastguard Worker break;
595*6236dae4SAndroid Build Coastguard Worker
596*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HTTP_VERSION:
597*6236dae4SAndroid Build Coastguard Worker /*
598*6236dae4SAndroid Build Coastguard Worker * This sets a requested HTTP version to be used. The value is one of
599*6236dae4SAndroid Build Coastguard Worker * the listed enums in curl/curl.h.
600*6236dae4SAndroid Build Coastguard Worker */
601*6236dae4SAndroid Build Coastguard Worker switch(arg) {
602*6236dae4SAndroid Build Coastguard Worker case CURL_HTTP_VERSION_NONE:
603*6236dae4SAndroid Build Coastguard Worker #ifdef USE_HTTP2
604*6236dae4SAndroid Build Coastguard Worker /* TODO: this seems an undesirable quirk to force a behaviour on
605*6236dae4SAndroid Build Coastguard Worker * lower implementations that they should recognize independently? */
606*6236dae4SAndroid Build Coastguard Worker arg = CURL_HTTP_VERSION_2TLS;
607*6236dae4SAndroid Build Coastguard Worker #endif
608*6236dae4SAndroid Build Coastguard Worker /* accepted */
609*6236dae4SAndroid Build Coastguard Worker break;
610*6236dae4SAndroid Build Coastguard Worker case CURL_HTTP_VERSION_1_0:
611*6236dae4SAndroid Build Coastguard Worker case CURL_HTTP_VERSION_1_1:
612*6236dae4SAndroid Build Coastguard Worker /* accepted */
613*6236dae4SAndroid Build Coastguard Worker break;
614*6236dae4SAndroid Build Coastguard Worker #ifdef USE_HTTP2
615*6236dae4SAndroid Build Coastguard Worker case CURL_HTTP_VERSION_2_0:
616*6236dae4SAndroid Build Coastguard Worker case CURL_HTTP_VERSION_2TLS:
617*6236dae4SAndroid Build Coastguard Worker case CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE:
618*6236dae4SAndroid Build Coastguard Worker /* accepted */
619*6236dae4SAndroid Build Coastguard Worker break;
620*6236dae4SAndroid Build Coastguard Worker #endif
621*6236dae4SAndroid Build Coastguard Worker #ifdef USE_HTTP3
622*6236dae4SAndroid Build Coastguard Worker case CURL_HTTP_VERSION_3:
623*6236dae4SAndroid Build Coastguard Worker case CURL_HTTP_VERSION_3ONLY:
624*6236dae4SAndroid Build Coastguard Worker /* accepted */
625*6236dae4SAndroid Build Coastguard Worker break;
626*6236dae4SAndroid Build Coastguard Worker #endif
627*6236dae4SAndroid Build Coastguard Worker default:
628*6236dae4SAndroid Build Coastguard Worker /* not accepted */
629*6236dae4SAndroid Build Coastguard Worker if(arg < CURL_HTTP_VERSION_NONE)
630*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
631*6236dae4SAndroid Build Coastguard Worker return CURLE_UNSUPPORTED_PROTOCOL;
632*6236dae4SAndroid Build Coastguard Worker }
633*6236dae4SAndroid Build Coastguard Worker data->set.httpwant = (unsigned char)arg;
634*6236dae4SAndroid Build Coastguard Worker break;
635*6236dae4SAndroid Build Coastguard Worker
636*6236dae4SAndroid Build Coastguard Worker case CURLOPT_EXPECT_100_TIMEOUT_MS:
637*6236dae4SAndroid Build Coastguard Worker /*
638*6236dae4SAndroid Build Coastguard Worker * Time to wait for a response to an HTTP request containing an
639*6236dae4SAndroid Build Coastguard Worker * Expect: 100-continue header before sending the data anyway.
640*6236dae4SAndroid Build Coastguard Worker */
641*6236dae4SAndroid Build Coastguard Worker if(arg < 0)
642*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
643*6236dae4SAndroid Build Coastguard Worker data->set.expect_100_timeout = arg;
644*6236dae4SAndroid Build Coastguard Worker break;
645*6236dae4SAndroid Build Coastguard Worker
646*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HTTP09_ALLOWED:
647*6236dae4SAndroid Build Coastguard Worker #ifdef USE_HYPER
648*6236dae4SAndroid Build Coastguard Worker /* Hyper does not support HTTP/0.9 */
649*6236dae4SAndroid Build Coastguard Worker if(enabled)
650*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
651*6236dae4SAndroid Build Coastguard Worker #else
652*6236dae4SAndroid Build Coastguard Worker data->set.http09_allowed = enabled;
653*6236dae4SAndroid Build Coastguard Worker #endif
654*6236dae4SAndroid Build Coastguard Worker break;
655*6236dae4SAndroid Build Coastguard Worker #endif /* ! CURL_DISABLE_HTTP */
656*6236dae4SAndroid Build Coastguard Worker
657*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_MIME
658*6236dae4SAndroid Build Coastguard Worker case CURLOPT_MIME_OPTIONS:
659*6236dae4SAndroid Build Coastguard Worker data->set.mime_formescape = !!(arg & CURLMIMEOPT_FORMESCAPE);
660*6236dae4SAndroid Build Coastguard Worker break;
661*6236dae4SAndroid Build Coastguard Worker #endif
662*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
663*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HTTPPROXYTUNNEL:
664*6236dae4SAndroid Build Coastguard Worker /*
665*6236dae4SAndroid Build Coastguard Worker * Tunnel operations through the proxy instead of normal proxy use
666*6236dae4SAndroid Build Coastguard Worker */
667*6236dae4SAndroid Build Coastguard Worker data->set.tunnel_thru_httpproxy = enabled;
668*6236dae4SAndroid Build Coastguard Worker break;
669*6236dae4SAndroid Build Coastguard Worker
670*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXYPORT:
671*6236dae4SAndroid Build Coastguard Worker /*
672*6236dae4SAndroid Build Coastguard Worker * Explicitly set HTTP proxy port number.
673*6236dae4SAndroid Build Coastguard Worker */
674*6236dae4SAndroid Build Coastguard Worker if((arg < 0) || (arg > 65535))
675*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
676*6236dae4SAndroid Build Coastguard Worker data->set.proxyport = (unsigned short)arg;
677*6236dae4SAndroid Build Coastguard Worker break;
678*6236dae4SAndroid Build Coastguard Worker
679*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXYAUTH:
680*6236dae4SAndroid Build Coastguard Worker return httpauth(data, TRUE, uarg);
681*6236dae4SAndroid Build Coastguard Worker
682*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXYTYPE:
683*6236dae4SAndroid Build Coastguard Worker /*
684*6236dae4SAndroid Build Coastguard Worker * Set proxy type.
685*6236dae4SAndroid Build Coastguard Worker */
686*6236dae4SAndroid Build Coastguard Worker if((arg < CURLPROXY_HTTP) || (arg > CURLPROXY_SOCKS5_HOSTNAME))
687*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
688*6236dae4SAndroid Build Coastguard Worker data->set.proxytype = (unsigned char)(curl_proxytype)arg;
689*6236dae4SAndroid Build Coastguard Worker break;
690*6236dae4SAndroid Build Coastguard Worker
691*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_TRANSFER_MODE:
692*6236dae4SAndroid Build Coastguard Worker /*
693*6236dae4SAndroid Build Coastguard Worker * set transfer mode (;type=<a|i>) when doing FTP via an HTTP proxy
694*6236dae4SAndroid Build Coastguard Worker */
695*6236dae4SAndroid Build Coastguard Worker if(uarg > 1)
696*6236dae4SAndroid Build Coastguard Worker /* reserve other values for future use */
697*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
698*6236dae4SAndroid Build Coastguard Worker data->set.proxy_transfer_mode = (bool)uarg;
699*6236dae4SAndroid Build Coastguard Worker break;
700*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SOCKS5_AUTH:
701*6236dae4SAndroid Build Coastguard Worker if(data->set.socks5auth & ~(CURLAUTH_BASIC | CURLAUTH_GSSAPI))
702*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
703*6236dae4SAndroid Build Coastguard Worker data->set.socks5auth = (unsigned char)uarg;
704*6236dae4SAndroid Build Coastguard Worker break;
705*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HAPROXYPROTOCOL:
706*6236dae4SAndroid Build Coastguard Worker /*
707*6236dae4SAndroid Build Coastguard Worker * Set to send the HAProxy Proxy Protocol header
708*6236dae4SAndroid Build Coastguard Worker */
709*6236dae4SAndroid Build Coastguard Worker data->set.haproxyprotocol = enabled;
710*6236dae4SAndroid Build Coastguard Worker break;
711*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_SSL_VERIFYPEER:
712*6236dae4SAndroid Build Coastguard Worker /*
713*6236dae4SAndroid Build Coastguard Worker * Enable peer SSL verifying for proxy.
714*6236dae4SAndroid Build Coastguard Worker */
715*6236dae4SAndroid Build Coastguard Worker data->set.proxy_ssl.primary.verifypeer = enabled;
716*6236dae4SAndroid Build Coastguard Worker
717*6236dae4SAndroid Build Coastguard Worker /* Update the current connection proxy_ssl_config. */
718*6236dae4SAndroid Build Coastguard Worker Curl_ssl_conn_config_update(data, TRUE);
719*6236dae4SAndroid Build Coastguard Worker break;
720*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_SSL_VERIFYHOST:
721*6236dae4SAndroid Build Coastguard Worker /*
722*6236dae4SAndroid Build Coastguard Worker * Enable verification of the hostname in the peer certificate for proxy
723*6236dae4SAndroid Build Coastguard Worker */
724*6236dae4SAndroid Build Coastguard Worker data->set.proxy_ssl.primary.verifyhost = enabled;
725*6236dae4SAndroid Build Coastguard Worker
726*6236dae4SAndroid Build Coastguard Worker /* Update the current connection proxy_ssl_config. */
727*6236dae4SAndroid Build Coastguard Worker Curl_ssl_conn_config_update(data, TRUE);
728*6236dae4SAndroid Build Coastguard Worker break;
729*6236dae4SAndroid Build Coastguard Worker #endif /* ! CURL_DISABLE_PROXY */
730*6236dae4SAndroid Build Coastguard Worker
731*6236dae4SAndroid Build Coastguard Worker #if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
732*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SOCKS5_GSSAPI_NEC:
733*6236dae4SAndroid Build Coastguard Worker /*
734*6236dae4SAndroid Build Coastguard Worker * Set flag for NEC SOCK5 support
735*6236dae4SAndroid Build Coastguard Worker */
736*6236dae4SAndroid Build Coastguard Worker data->set.socks5_gssapi_nec = enabled;
737*6236dae4SAndroid Build Coastguard Worker break;
738*6236dae4SAndroid Build Coastguard Worker #endif
739*6236dae4SAndroid Build Coastguard Worker #ifdef CURL_LIST_ONLY_PROTOCOL
740*6236dae4SAndroid Build Coastguard Worker case CURLOPT_DIRLISTONLY:
741*6236dae4SAndroid Build Coastguard Worker /*
742*6236dae4SAndroid Build Coastguard Worker * An option that changes the command to one that asks for a list only, no
743*6236dae4SAndroid Build Coastguard Worker * file info details. Used for FTP, POP3 and SFTP.
744*6236dae4SAndroid Build Coastguard Worker */
745*6236dae4SAndroid Build Coastguard Worker data->set.list_only = enabled;
746*6236dae4SAndroid Build Coastguard Worker break;
747*6236dae4SAndroid Build Coastguard Worker #endif
748*6236dae4SAndroid Build Coastguard Worker case CURLOPT_APPEND:
749*6236dae4SAndroid Build Coastguard Worker /*
750*6236dae4SAndroid Build Coastguard Worker * We want to upload and append to an existing file. Used for FTP and
751*6236dae4SAndroid Build Coastguard Worker * SFTP.
752*6236dae4SAndroid Build Coastguard Worker */
753*6236dae4SAndroid Build Coastguard Worker data->set.remote_append = enabled;
754*6236dae4SAndroid Build Coastguard Worker break;
755*6236dae4SAndroid Build Coastguard Worker
756*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_FTP
757*6236dae4SAndroid Build Coastguard Worker case CURLOPT_FTP_FILEMETHOD:
758*6236dae4SAndroid Build Coastguard Worker /*
759*6236dae4SAndroid Build Coastguard Worker * How do access files over FTP.
760*6236dae4SAndroid Build Coastguard Worker */
761*6236dae4SAndroid Build Coastguard Worker if((arg < CURLFTPMETHOD_DEFAULT) || (arg >= CURLFTPMETHOD_LAST))
762*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
763*6236dae4SAndroid Build Coastguard Worker data->set.ftp_filemethod = (unsigned char)arg;
764*6236dae4SAndroid Build Coastguard Worker break;
765*6236dae4SAndroid Build Coastguard Worker case CURLOPT_FTP_USE_EPRT:
766*6236dae4SAndroid Build Coastguard Worker data->set.ftp_use_eprt = enabled;
767*6236dae4SAndroid Build Coastguard Worker break;
768*6236dae4SAndroid Build Coastguard Worker
769*6236dae4SAndroid Build Coastguard Worker case CURLOPT_FTP_USE_EPSV:
770*6236dae4SAndroid Build Coastguard Worker data->set.ftp_use_epsv = enabled;
771*6236dae4SAndroid Build Coastguard Worker break;
772*6236dae4SAndroid Build Coastguard Worker
773*6236dae4SAndroid Build Coastguard Worker case CURLOPT_FTP_USE_PRET:
774*6236dae4SAndroid Build Coastguard Worker data->set.ftp_use_pret = enabled;
775*6236dae4SAndroid Build Coastguard Worker break;
776*6236dae4SAndroid Build Coastguard Worker
777*6236dae4SAndroid Build Coastguard Worker case CURLOPT_FTP_SSL_CCC:
778*6236dae4SAndroid Build Coastguard Worker if((arg < CURLFTPSSL_CCC_NONE) || (arg >= CURLFTPSSL_CCC_LAST))
779*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
780*6236dae4SAndroid Build Coastguard Worker data->set.ftp_ccc = (unsigned char)arg;
781*6236dae4SAndroid Build Coastguard Worker break;
782*6236dae4SAndroid Build Coastguard Worker
783*6236dae4SAndroid Build Coastguard Worker case CURLOPT_FTP_SKIP_PASV_IP:
784*6236dae4SAndroid Build Coastguard Worker /*
785*6236dae4SAndroid Build Coastguard Worker * Enable or disable FTP_SKIP_PASV_IP, which will disable/enable the
786*6236dae4SAndroid Build Coastguard Worker * bypass of the IP address in PASV responses.
787*6236dae4SAndroid Build Coastguard Worker */
788*6236dae4SAndroid Build Coastguard Worker data->set.ftp_skip_ip = enabled;
789*6236dae4SAndroid Build Coastguard Worker break;
790*6236dae4SAndroid Build Coastguard Worker
791*6236dae4SAndroid Build Coastguard Worker case CURLOPT_FTPSSLAUTH:
792*6236dae4SAndroid Build Coastguard Worker /*
793*6236dae4SAndroid Build Coastguard Worker * Set a specific auth for FTP-SSL transfers.
794*6236dae4SAndroid Build Coastguard Worker */
795*6236dae4SAndroid Build Coastguard Worker if((arg < CURLFTPAUTH_DEFAULT) || (arg >= CURLFTPAUTH_LAST))
796*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
797*6236dae4SAndroid Build Coastguard Worker data->set.ftpsslauth = (unsigned char)(curl_ftpauth)arg;
798*6236dae4SAndroid Build Coastguard Worker break;
799*6236dae4SAndroid Build Coastguard Worker case CURLOPT_ACCEPTTIMEOUT_MS:
800*6236dae4SAndroid Build Coastguard Worker /*
801*6236dae4SAndroid Build Coastguard Worker * The maximum time for curl to wait for FTP server connect
802*6236dae4SAndroid Build Coastguard Worker */
803*6236dae4SAndroid Build Coastguard Worker if(uarg > UINT_MAX)
804*6236dae4SAndroid Build Coastguard Worker uarg = UINT_MAX;
805*6236dae4SAndroid Build Coastguard Worker data->set.accepttimeout = (unsigned int)uarg;
806*6236dae4SAndroid Build Coastguard Worker break;
807*6236dae4SAndroid Build Coastguard Worker case CURLOPT_WILDCARDMATCH:
808*6236dae4SAndroid Build Coastguard Worker data->set.wildcard_enabled = enabled;
809*6236dae4SAndroid Build Coastguard Worker break;
810*6236dae4SAndroid Build Coastguard Worker #endif /* ! CURL_DISABLE_FTP */
811*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_DISABLE_FTP) || defined(USE_SSH)
812*6236dae4SAndroid Build Coastguard Worker case CURLOPT_FTP_CREATE_MISSING_DIRS:
813*6236dae4SAndroid Build Coastguard Worker /*
814*6236dae4SAndroid Build Coastguard Worker * An FTP/SFTP option that modifies an upload to create missing
815*6236dae4SAndroid Build Coastguard Worker * directories on the server.
816*6236dae4SAndroid Build Coastguard Worker */
817*6236dae4SAndroid Build Coastguard Worker /* reserve other values for future use */
818*6236dae4SAndroid Build Coastguard Worker if((arg < CURLFTP_CREATE_DIR_NONE) || (arg > CURLFTP_CREATE_DIR_RETRY))
819*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
820*6236dae4SAndroid Build Coastguard Worker data->set.ftp_create_missing_dirs = (unsigned char)arg;
821*6236dae4SAndroid Build Coastguard Worker break;
822*6236dae4SAndroid Build Coastguard Worker #endif /* ! CURL_DISABLE_FTP || USE_SSH */
823*6236dae4SAndroid Build Coastguard Worker case CURLOPT_INFILESIZE:
824*6236dae4SAndroid Build Coastguard Worker /*
825*6236dae4SAndroid Build Coastguard Worker * If known, this should inform curl about the file size of the
826*6236dae4SAndroid Build Coastguard Worker * to-be-uploaded file.
827*6236dae4SAndroid Build Coastguard Worker */
828*6236dae4SAndroid Build Coastguard Worker if(arg < -1)
829*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
830*6236dae4SAndroid Build Coastguard Worker data->set.filesize = arg;
831*6236dae4SAndroid Build Coastguard Worker break;
832*6236dae4SAndroid Build Coastguard Worker case CURLOPT_LOW_SPEED_LIMIT:
833*6236dae4SAndroid Build Coastguard Worker /*
834*6236dae4SAndroid Build Coastguard Worker * The low speed limit that if transfers are below this for
835*6236dae4SAndroid Build Coastguard Worker * CURLOPT_LOW_SPEED_TIME, the transfer is aborted.
836*6236dae4SAndroid Build Coastguard Worker */
837*6236dae4SAndroid Build Coastguard Worker if(arg < 0)
838*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
839*6236dae4SAndroid Build Coastguard Worker data->set.low_speed_limit = arg;
840*6236dae4SAndroid Build Coastguard Worker break;
841*6236dae4SAndroid Build Coastguard Worker case CURLOPT_LOW_SPEED_TIME:
842*6236dae4SAndroid Build Coastguard Worker /*
843*6236dae4SAndroid Build Coastguard Worker * The low speed time that if transfers are below the set
844*6236dae4SAndroid Build Coastguard Worker * CURLOPT_LOW_SPEED_LIMIT during this time, the transfer is aborted.
845*6236dae4SAndroid Build Coastguard Worker */
846*6236dae4SAndroid Build Coastguard Worker if(arg < 0)
847*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
848*6236dae4SAndroid Build Coastguard Worker data->set.low_speed_time = arg;
849*6236dae4SAndroid Build Coastguard Worker break;
850*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PORT:
851*6236dae4SAndroid Build Coastguard Worker /*
852*6236dae4SAndroid Build Coastguard Worker * The port number to use when getting the URL. 0 disables it.
853*6236dae4SAndroid Build Coastguard Worker */
854*6236dae4SAndroid Build Coastguard Worker if((arg < 0) || (arg > 65535))
855*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
856*6236dae4SAndroid Build Coastguard Worker data->set.use_port = (unsigned short)arg;
857*6236dae4SAndroid Build Coastguard Worker break;
858*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TIMEOUT:
859*6236dae4SAndroid Build Coastguard Worker /*
860*6236dae4SAndroid Build Coastguard Worker * The maximum time you allow curl to use for a single transfer
861*6236dae4SAndroid Build Coastguard Worker * operation.
862*6236dae4SAndroid Build Coastguard Worker */
863*6236dae4SAndroid Build Coastguard Worker if((arg >= 0) && (arg <= (INT_MAX/1000)))
864*6236dae4SAndroid Build Coastguard Worker data->set.timeout = (unsigned int)arg * 1000;
865*6236dae4SAndroid Build Coastguard Worker else
866*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
867*6236dae4SAndroid Build Coastguard Worker break;
868*6236dae4SAndroid Build Coastguard Worker
869*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TIMEOUT_MS:
870*6236dae4SAndroid Build Coastguard Worker if(uarg > UINT_MAX)
871*6236dae4SAndroid Build Coastguard Worker uarg = UINT_MAX;
872*6236dae4SAndroid Build Coastguard Worker data->set.timeout = (unsigned int)uarg;
873*6236dae4SAndroid Build Coastguard Worker break;
874*6236dae4SAndroid Build Coastguard Worker
875*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CONNECTTIMEOUT:
876*6236dae4SAndroid Build Coastguard Worker /*
877*6236dae4SAndroid Build Coastguard Worker * The maximum time you allow curl to use to connect.
878*6236dae4SAndroid Build Coastguard Worker */
879*6236dae4SAndroid Build Coastguard Worker if((arg >= 0) && (arg <= (INT_MAX/1000)))
880*6236dae4SAndroid Build Coastguard Worker data->set.connecttimeout = (unsigned int)arg * 1000;
881*6236dae4SAndroid Build Coastguard Worker else
882*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
883*6236dae4SAndroid Build Coastguard Worker break;
884*6236dae4SAndroid Build Coastguard Worker
885*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CONNECTTIMEOUT_MS:
886*6236dae4SAndroid Build Coastguard Worker if(uarg > UINT_MAX)
887*6236dae4SAndroid Build Coastguard Worker uarg = UINT_MAX;
888*6236dae4SAndroid Build Coastguard Worker data->set.connecttimeout = (unsigned int)uarg;
889*6236dae4SAndroid Build Coastguard Worker break;
890*6236dae4SAndroid Build Coastguard Worker
891*6236dae4SAndroid Build Coastguard Worker case CURLOPT_RESUME_FROM:
892*6236dae4SAndroid Build Coastguard Worker /*
893*6236dae4SAndroid Build Coastguard Worker * Resume transfer at the given file position
894*6236dae4SAndroid Build Coastguard Worker */
895*6236dae4SAndroid Build Coastguard Worker if(arg < -1)
896*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
897*6236dae4SAndroid Build Coastguard Worker data->set.set_resume_from = arg;
898*6236dae4SAndroid Build Coastguard Worker break;
899*6236dae4SAndroid Build Coastguard Worker
900*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CRLF:
901*6236dae4SAndroid Build Coastguard Worker /*
902*6236dae4SAndroid Build Coastguard Worker * Kludgy option to enable CRLF conversions. Subject for removal.
903*6236dae4SAndroid Build Coastguard Worker */
904*6236dae4SAndroid Build Coastguard Worker data->set.crlf = enabled;
905*6236dae4SAndroid Build Coastguard Worker break;
906*6236dae4SAndroid Build Coastguard Worker
907*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_BINDLOCAL
908*6236dae4SAndroid Build Coastguard Worker case CURLOPT_LOCALPORT:
909*6236dae4SAndroid Build Coastguard Worker /*
910*6236dae4SAndroid Build Coastguard Worker * Set what local port to bind the socket to when performing an operation.
911*6236dae4SAndroid Build Coastguard Worker */
912*6236dae4SAndroid Build Coastguard Worker if((arg < 0) || (arg > 65535))
913*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
914*6236dae4SAndroid Build Coastguard Worker data->set.localport = curlx_sltous(arg);
915*6236dae4SAndroid Build Coastguard Worker break;
916*6236dae4SAndroid Build Coastguard Worker case CURLOPT_LOCALPORTRANGE:
917*6236dae4SAndroid Build Coastguard Worker /*
918*6236dae4SAndroid Build Coastguard Worker * Set number of local ports to try, starting with CURLOPT_LOCALPORT.
919*6236dae4SAndroid Build Coastguard Worker */
920*6236dae4SAndroid Build Coastguard Worker if((arg < 0) || (arg > 65535))
921*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
922*6236dae4SAndroid Build Coastguard Worker data->set.localportrange = curlx_sltous(arg);
923*6236dae4SAndroid Build Coastguard Worker break;
924*6236dae4SAndroid Build Coastguard Worker #endif
925*6236dae4SAndroid Build Coastguard Worker
926*6236dae4SAndroid Build Coastguard Worker case CURLOPT_GSSAPI_DELEGATION:
927*6236dae4SAndroid Build Coastguard Worker /*
928*6236dae4SAndroid Build Coastguard Worker * GSS-API credential delegation bitmask
929*6236dae4SAndroid Build Coastguard Worker */
930*6236dae4SAndroid Build Coastguard Worker data->set.gssapi_delegation = (unsigned char)uarg&
931*6236dae4SAndroid Build Coastguard Worker (CURLGSSAPI_DELEGATION_POLICY_FLAG|CURLGSSAPI_DELEGATION_FLAG);
932*6236dae4SAndroid Build Coastguard Worker break;
933*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSL_VERIFYPEER:
934*6236dae4SAndroid Build Coastguard Worker /*
935*6236dae4SAndroid Build Coastguard Worker * Enable peer SSL verifying.
936*6236dae4SAndroid Build Coastguard Worker */
937*6236dae4SAndroid Build Coastguard Worker data->set.ssl.primary.verifypeer = enabled;
938*6236dae4SAndroid Build Coastguard Worker
939*6236dae4SAndroid Build Coastguard Worker /* Update the current connection ssl_config. */
940*6236dae4SAndroid Build Coastguard Worker Curl_ssl_conn_config_update(data, FALSE);
941*6236dae4SAndroid Build Coastguard Worker break;
942*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_DOH
943*6236dae4SAndroid Build Coastguard Worker case CURLOPT_DOH_SSL_VERIFYPEER:
944*6236dae4SAndroid Build Coastguard Worker /*
945*6236dae4SAndroid Build Coastguard Worker * Enable peer SSL verifying for DoH.
946*6236dae4SAndroid Build Coastguard Worker */
947*6236dae4SAndroid Build Coastguard Worker data->set.doh_verifypeer = enabled;
948*6236dae4SAndroid Build Coastguard Worker break;
949*6236dae4SAndroid Build Coastguard Worker case CURLOPT_DOH_SSL_VERIFYHOST:
950*6236dae4SAndroid Build Coastguard Worker /*
951*6236dae4SAndroid Build Coastguard Worker * Enable verification of the hostname in the peer certificate for DoH
952*6236dae4SAndroid Build Coastguard Worker */
953*6236dae4SAndroid Build Coastguard Worker data->set.doh_verifyhost = enabled;
954*6236dae4SAndroid Build Coastguard Worker break;
955*6236dae4SAndroid Build Coastguard Worker case CURLOPT_DOH_SSL_VERIFYSTATUS:
956*6236dae4SAndroid Build Coastguard Worker /*
957*6236dae4SAndroid Build Coastguard Worker * Enable certificate status verifying for DoH.
958*6236dae4SAndroid Build Coastguard Worker */
959*6236dae4SAndroid Build Coastguard Worker if(!Curl_ssl_cert_status_request())
960*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
961*6236dae4SAndroid Build Coastguard Worker
962*6236dae4SAndroid Build Coastguard Worker data->set.doh_verifystatus = enabled;
963*6236dae4SAndroid Build Coastguard Worker break;
964*6236dae4SAndroid Build Coastguard Worker #endif /* ! CURL_DISABLE_DOH */
965*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSL_VERIFYHOST:
966*6236dae4SAndroid Build Coastguard Worker /*
967*6236dae4SAndroid Build Coastguard Worker * Enable verification of the hostname in the peer certificate
968*6236dae4SAndroid Build Coastguard Worker */
969*6236dae4SAndroid Build Coastguard Worker
970*6236dae4SAndroid Build Coastguard Worker /* Obviously people are not reading documentation and too many thought
971*6236dae4SAndroid Build Coastguard Worker this argument took a boolean when it was not and misused it.
972*6236dae4SAndroid Build Coastguard Worker Treat 1 and 2 the same */
973*6236dae4SAndroid Build Coastguard Worker data->set.ssl.primary.verifyhost = enabled;
974*6236dae4SAndroid Build Coastguard Worker
975*6236dae4SAndroid Build Coastguard Worker /* Update the current connection ssl_config. */
976*6236dae4SAndroid Build Coastguard Worker Curl_ssl_conn_config_update(data, FALSE);
977*6236dae4SAndroid Build Coastguard Worker break;
978*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSL_VERIFYSTATUS:
979*6236dae4SAndroid Build Coastguard Worker /*
980*6236dae4SAndroid Build Coastguard Worker * Enable certificate status verifying.
981*6236dae4SAndroid Build Coastguard Worker */
982*6236dae4SAndroid Build Coastguard Worker if(!Curl_ssl_cert_status_request())
983*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
984*6236dae4SAndroid Build Coastguard Worker
985*6236dae4SAndroid Build Coastguard Worker data->set.ssl.primary.verifystatus = enabled;
986*6236dae4SAndroid Build Coastguard Worker
987*6236dae4SAndroid Build Coastguard Worker /* Update the current connection ssl_config. */
988*6236dae4SAndroid Build Coastguard Worker Curl_ssl_conn_config_update(data, FALSE);
989*6236dae4SAndroid Build Coastguard Worker break;
990*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSL_FALSESTART:
991*6236dae4SAndroid Build Coastguard Worker /*
992*6236dae4SAndroid Build Coastguard Worker * Enable TLS false start.
993*6236dae4SAndroid Build Coastguard Worker */
994*6236dae4SAndroid Build Coastguard Worker if(!Curl_ssl_false_start(data))
995*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
996*6236dae4SAndroid Build Coastguard Worker
997*6236dae4SAndroid Build Coastguard Worker data->set.ssl.falsestart = enabled;
998*6236dae4SAndroid Build Coastguard Worker break;
999*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CERTINFO:
1000*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSL
1001*6236dae4SAndroid Build Coastguard Worker if(Curl_ssl_supports(data, SSLSUPP_CERTINFO))
1002*6236dae4SAndroid Build Coastguard Worker data->set.ssl.certinfo = enabled;
1003*6236dae4SAndroid Build Coastguard Worker else
1004*6236dae4SAndroid Build Coastguard Worker #endif
1005*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
1006*6236dae4SAndroid Build Coastguard Worker break;
1007*6236dae4SAndroid Build Coastguard Worker case CURLOPT_BUFFERSIZE:
1008*6236dae4SAndroid Build Coastguard Worker /*
1009*6236dae4SAndroid Build Coastguard Worker * The application kindly asks for a differently sized receive buffer.
1010*6236dae4SAndroid Build Coastguard Worker * If it seems reasonable, we will use it.
1011*6236dae4SAndroid Build Coastguard Worker */
1012*6236dae4SAndroid Build Coastguard Worker if(arg > READBUFFER_MAX)
1013*6236dae4SAndroid Build Coastguard Worker arg = READBUFFER_MAX;
1014*6236dae4SAndroid Build Coastguard Worker else if(arg < 1)
1015*6236dae4SAndroid Build Coastguard Worker arg = READBUFFER_SIZE;
1016*6236dae4SAndroid Build Coastguard Worker else if(arg < READBUFFER_MIN)
1017*6236dae4SAndroid Build Coastguard Worker arg = READBUFFER_MIN;
1018*6236dae4SAndroid Build Coastguard Worker
1019*6236dae4SAndroid Build Coastguard Worker data->set.buffer_size = (unsigned int)arg;
1020*6236dae4SAndroid Build Coastguard Worker break;
1021*6236dae4SAndroid Build Coastguard Worker
1022*6236dae4SAndroid Build Coastguard Worker case CURLOPT_UPLOAD_BUFFERSIZE:
1023*6236dae4SAndroid Build Coastguard Worker /*
1024*6236dae4SAndroid Build Coastguard Worker * The application kindly asks for a differently sized upload buffer.
1025*6236dae4SAndroid Build Coastguard Worker * Cap it to sensible.
1026*6236dae4SAndroid Build Coastguard Worker */
1027*6236dae4SAndroid Build Coastguard Worker if(arg > UPLOADBUFFER_MAX)
1028*6236dae4SAndroid Build Coastguard Worker arg = UPLOADBUFFER_MAX;
1029*6236dae4SAndroid Build Coastguard Worker else if(arg < UPLOADBUFFER_MIN)
1030*6236dae4SAndroid Build Coastguard Worker arg = UPLOADBUFFER_MIN;
1031*6236dae4SAndroid Build Coastguard Worker
1032*6236dae4SAndroid Build Coastguard Worker data->set.upload_buffer_size = (unsigned int)arg;
1033*6236dae4SAndroid Build Coastguard Worker break;
1034*6236dae4SAndroid Build Coastguard Worker
1035*6236dae4SAndroid Build Coastguard Worker case CURLOPT_NOSIGNAL:
1036*6236dae4SAndroid Build Coastguard Worker /*
1037*6236dae4SAndroid Build Coastguard Worker * The application asks not to set any signal() or alarm() handlers,
1038*6236dae4SAndroid Build Coastguard Worker * even when using a timeout.
1039*6236dae4SAndroid Build Coastguard Worker */
1040*6236dae4SAndroid Build Coastguard Worker data->set.no_signal = enabled;
1041*6236dae4SAndroid Build Coastguard Worker break;
1042*6236dae4SAndroid Build Coastguard Worker case CURLOPT_MAXFILESIZE:
1043*6236dae4SAndroid Build Coastguard Worker /*
1044*6236dae4SAndroid Build Coastguard Worker * Set the maximum size of a file to download.
1045*6236dae4SAndroid Build Coastguard Worker */
1046*6236dae4SAndroid Build Coastguard Worker if(arg < 0)
1047*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
1048*6236dae4SAndroid Build Coastguard Worker data->set.max_filesize = arg;
1049*6236dae4SAndroid Build Coastguard Worker break;
1050*6236dae4SAndroid Build Coastguard Worker
1051*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSL
1052*6236dae4SAndroid Build Coastguard Worker case CURLOPT_USE_SSL:
1053*6236dae4SAndroid Build Coastguard Worker /*
1054*6236dae4SAndroid Build Coastguard Worker * Make transfers attempt to use SSL/TLS.
1055*6236dae4SAndroid Build Coastguard Worker */
1056*6236dae4SAndroid Build Coastguard Worker if((arg < CURLUSESSL_NONE) || (arg >= CURLUSESSL_LAST))
1057*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
1058*6236dae4SAndroid Build Coastguard Worker data->set.use_ssl = (unsigned char)arg;
1059*6236dae4SAndroid Build Coastguard Worker break;
1060*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSL_OPTIONS:
1061*6236dae4SAndroid Build Coastguard Worker data->set.ssl.primary.ssl_options = (unsigned char)(arg & 0xff);
1062*6236dae4SAndroid Build Coastguard Worker data->set.ssl.enable_beast = !!(arg & CURLSSLOPT_ALLOW_BEAST);
1063*6236dae4SAndroid Build Coastguard Worker data->set.ssl.no_revoke = !!(arg & CURLSSLOPT_NO_REVOKE);
1064*6236dae4SAndroid Build Coastguard Worker data->set.ssl.no_partialchain = !!(arg & CURLSSLOPT_NO_PARTIALCHAIN);
1065*6236dae4SAndroid Build Coastguard Worker data->set.ssl.revoke_best_effort = !!(arg & CURLSSLOPT_REVOKE_BEST_EFFORT);
1066*6236dae4SAndroid Build Coastguard Worker data->set.ssl.native_ca_store = !!(arg & CURLSSLOPT_NATIVE_CA);
1067*6236dae4SAndroid Build Coastguard Worker data->set.ssl.auto_client_cert = !!(arg & CURLSSLOPT_AUTO_CLIENT_CERT);
1068*6236dae4SAndroid Build Coastguard Worker data->set.ssl.earlydata = !!(arg & CURLSSLOPT_EARLYDATA);
1069*6236dae4SAndroid Build Coastguard Worker /* If a setting is added here it should also be added in dohprobe()
1070*6236dae4SAndroid Build Coastguard Worker which sets its own CURLOPT_SSL_OPTIONS based on these settings. */
1071*6236dae4SAndroid Build Coastguard Worker break;
1072*6236dae4SAndroid Build Coastguard Worker
1073*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
1074*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_SSL_OPTIONS:
1075*6236dae4SAndroid Build Coastguard Worker data->set.proxy_ssl.primary.ssl_options = (unsigned char)(arg & 0xff);
1076*6236dae4SAndroid Build Coastguard Worker data->set.proxy_ssl.enable_beast = !!(arg & CURLSSLOPT_ALLOW_BEAST);
1077*6236dae4SAndroid Build Coastguard Worker data->set.proxy_ssl.no_revoke = !!(arg & CURLSSLOPT_NO_REVOKE);
1078*6236dae4SAndroid Build Coastguard Worker data->set.proxy_ssl.no_partialchain = !!(arg & CURLSSLOPT_NO_PARTIALCHAIN);
1079*6236dae4SAndroid Build Coastguard Worker data->set.proxy_ssl.revoke_best_effort =
1080*6236dae4SAndroid Build Coastguard Worker !!(arg & CURLSSLOPT_REVOKE_BEST_EFFORT);
1081*6236dae4SAndroid Build Coastguard Worker data->set.proxy_ssl.native_ca_store = !!(arg & CURLSSLOPT_NATIVE_CA);
1082*6236dae4SAndroid Build Coastguard Worker data->set.proxy_ssl.auto_client_cert =
1083*6236dae4SAndroid Build Coastguard Worker !!(arg & CURLSSLOPT_AUTO_CLIENT_CERT);
1084*6236dae4SAndroid Build Coastguard Worker break;
1085*6236dae4SAndroid Build Coastguard Worker #endif
1086*6236dae4SAndroid Build Coastguard Worker
1087*6236dae4SAndroid Build Coastguard Worker #endif /* USE_SSL */
1088*6236dae4SAndroid Build Coastguard Worker case CURLOPT_IPRESOLVE:
1089*6236dae4SAndroid Build Coastguard Worker if((arg < CURL_IPRESOLVE_WHATEVER) || (arg > CURL_IPRESOLVE_V6))
1090*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
1091*6236dae4SAndroid Build Coastguard Worker data->set.ipver = (unsigned char) arg;
1092*6236dae4SAndroid Build Coastguard Worker break;
1093*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TCP_NODELAY:
1094*6236dae4SAndroid Build Coastguard Worker /*
1095*6236dae4SAndroid Build Coastguard Worker * Enable or disable TCP_NODELAY, which will disable/enable the Nagle
1096*6236dae4SAndroid Build Coastguard Worker * algorithm
1097*6236dae4SAndroid Build Coastguard Worker */
1098*6236dae4SAndroid Build Coastguard Worker data->set.tcp_nodelay = enabled;
1099*6236dae4SAndroid Build Coastguard Worker break;
1100*6236dae4SAndroid Build Coastguard Worker
1101*6236dae4SAndroid Build Coastguard Worker case CURLOPT_IGNORE_CONTENT_LENGTH:
1102*6236dae4SAndroid Build Coastguard Worker data->set.ignorecl = enabled;
1103*6236dae4SAndroid Build Coastguard Worker break;
1104*6236dae4SAndroid Build Coastguard Worker
1105*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CONNECT_ONLY:
1106*6236dae4SAndroid Build Coastguard Worker /*
1107*6236dae4SAndroid Build Coastguard Worker * No data transfer.
1108*6236dae4SAndroid Build Coastguard Worker * (1) - only do connection
1109*6236dae4SAndroid Build Coastguard Worker * (2) - do first get request but get no content
1110*6236dae4SAndroid Build Coastguard Worker */
1111*6236dae4SAndroid Build Coastguard Worker if(arg > 2)
1112*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
1113*6236dae4SAndroid Build Coastguard Worker data->set.connect_only = (unsigned char)arg;
1114*6236dae4SAndroid Build Coastguard Worker break;
1115*6236dae4SAndroid Build Coastguard Worker
1116*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSL_SESSIONID_CACHE:
1117*6236dae4SAndroid Build Coastguard Worker data->set.ssl.primary.cache_session = enabled;
1118*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
1119*6236dae4SAndroid Build Coastguard Worker data->set.proxy_ssl.primary.cache_session =
1120*6236dae4SAndroid Build Coastguard Worker data->set.ssl.primary.cache_session;
1121*6236dae4SAndroid Build Coastguard Worker #endif
1122*6236dae4SAndroid Build Coastguard Worker break;
1123*6236dae4SAndroid Build Coastguard Worker
1124*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSH
1125*6236dae4SAndroid Build Coastguard Worker /* we only include SSH options if explicitly built to support SSH */
1126*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSH_AUTH_TYPES:
1127*6236dae4SAndroid Build Coastguard Worker data->set.ssh_auth_types = (int)arg;
1128*6236dae4SAndroid Build Coastguard Worker break;
1129*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSH_COMPRESSION:
1130*6236dae4SAndroid Build Coastguard Worker data->set.ssh_compression = enabled;
1131*6236dae4SAndroid Build Coastguard Worker break;
1132*6236dae4SAndroid Build Coastguard Worker #endif
1133*6236dae4SAndroid Build Coastguard Worker
1134*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HTTP_TRANSFER_DECODING:
1135*6236dae4SAndroid Build Coastguard Worker /*
1136*6236dae4SAndroid Build Coastguard Worker * disable libcurl transfer encoding is used
1137*6236dae4SAndroid Build Coastguard Worker */
1138*6236dae4SAndroid Build Coastguard Worker #ifndef USE_HYPER
1139*6236dae4SAndroid Build Coastguard Worker data->set.http_te_skip = !enabled; /* reversed */
1140*6236dae4SAndroid Build Coastguard Worker break;
1141*6236dae4SAndroid Build Coastguard Worker #else
1142*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN; /* hyper does not support */
1143*6236dae4SAndroid Build Coastguard Worker #endif
1144*6236dae4SAndroid Build Coastguard Worker
1145*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HTTP_CONTENT_DECODING:
1146*6236dae4SAndroid Build Coastguard Worker /*
1147*6236dae4SAndroid Build Coastguard Worker * raw data passed to the application when content encoding is used
1148*6236dae4SAndroid Build Coastguard Worker */
1149*6236dae4SAndroid Build Coastguard Worker data->set.http_ce_skip = enabled;
1150*6236dae4SAndroid Build Coastguard Worker break;
1151*6236dae4SAndroid Build Coastguard Worker
1152*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_DISABLE_FTP) || defined(USE_SSH)
1153*6236dae4SAndroid Build Coastguard Worker case CURLOPT_NEW_FILE_PERMS:
1154*6236dae4SAndroid Build Coastguard Worker /*
1155*6236dae4SAndroid Build Coastguard Worker * Uses these permissions instead of 0644
1156*6236dae4SAndroid Build Coastguard Worker */
1157*6236dae4SAndroid Build Coastguard Worker if((arg < 0) || (arg > 0777))
1158*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
1159*6236dae4SAndroid Build Coastguard Worker data->set.new_file_perms = (unsigned int)arg;
1160*6236dae4SAndroid Build Coastguard Worker break;
1161*6236dae4SAndroid Build Coastguard Worker #endif
1162*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSH
1163*6236dae4SAndroid Build Coastguard Worker case CURLOPT_NEW_DIRECTORY_PERMS:
1164*6236dae4SAndroid Build Coastguard Worker /*
1165*6236dae4SAndroid Build Coastguard Worker * Uses these permissions instead of 0755
1166*6236dae4SAndroid Build Coastguard Worker */
1167*6236dae4SAndroid Build Coastguard Worker if((arg < 0) || (arg > 0777))
1168*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
1169*6236dae4SAndroid Build Coastguard Worker data->set.new_directory_perms = (unsigned int)arg;
1170*6236dae4SAndroid Build Coastguard Worker break;
1171*6236dae4SAndroid Build Coastguard Worker #endif
1172*6236dae4SAndroid Build Coastguard Worker #ifdef USE_IPV6
1173*6236dae4SAndroid Build Coastguard Worker case CURLOPT_ADDRESS_SCOPE:
1174*6236dae4SAndroid Build Coastguard Worker /*
1175*6236dae4SAndroid Build Coastguard Worker * Use this scope id when using IPv6
1176*6236dae4SAndroid Build Coastguard Worker * We always get longs when passed plain numericals so we should check
1177*6236dae4SAndroid Build Coastguard Worker * that the value fits into an unsigned 32-bit integer.
1178*6236dae4SAndroid Build Coastguard Worker */
1179*6236dae4SAndroid Build Coastguard Worker #if SIZEOF_LONG > 4
1180*6236dae4SAndroid Build Coastguard Worker if(uarg > UINT_MAX)
1181*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
1182*6236dae4SAndroid Build Coastguard Worker #endif
1183*6236dae4SAndroid Build Coastguard Worker data->set.scope_id = (unsigned int)uarg;
1184*6236dae4SAndroid Build Coastguard Worker break;
1185*6236dae4SAndroid Build Coastguard Worker #endif
1186*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROTOCOLS:
1187*6236dae4SAndroid Build Coastguard Worker /* set the bitmask for the protocols that are allowed to be used for the
1188*6236dae4SAndroid Build Coastguard Worker transfer, which thus helps the app which takes URLs from users or other
1189*6236dae4SAndroid Build Coastguard Worker external inputs and want to restrict what protocol(s) to deal with.
1190*6236dae4SAndroid Build Coastguard Worker Defaults to CURLPROTO_ALL. */
1191*6236dae4SAndroid Build Coastguard Worker data->set.allowed_protocols = (curl_prot_t)arg;
1192*6236dae4SAndroid Build Coastguard Worker break;
1193*6236dae4SAndroid Build Coastguard Worker
1194*6236dae4SAndroid Build Coastguard Worker case CURLOPT_REDIR_PROTOCOLS:
1195*6236dae4SAndroid Build Coastguard Worker /* set the bitmask for the protocols that libcurl is allowed to follow to,
1196*6236dae4SAndroid Build Coastguard Worker as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol
1197*6236dae4SAndroid Build Coastguard Worker needs to be set in both bitmasks to be allowed to get redirected to. */
1198*6236dae4SAndroid Build Coastguard Worker data->set.redir_protocols = (curl_prot_t)arg;
1199*6236dae4SAndroid Build Coastguard Worker break;
1200*6236dae4SAndroid Build Coastguard Worker
1201*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_SMTP
1202*6236dae4SAndroid Build Coastguard Worker case CURLOPT_MAIL_RCPT_ALLOWFAILS:
1203*6236dae4SAndroid Build Coastguard Worker /* allow RCPT TO command to fail for some recipients */
1204*6236dae4SAndroid Build Coastguard Worker data->set.mail_rcpt_allowfails = enabled;
1205*6236dae4SAndroid Build Coastguard Worker break;
1206*6236dae4SAndroid Build Coastguard Worker #endif /* !CURL_DISABLE_SMTP */
1207*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SASL_IR:
1208*6236dae4SAndroid Build Coastguard Worker /* Enable/disable SASL initial response */
1209*6236dae4SAndroid Build Coastguard Worker data->set.sasl_ir = enabled;
1210*6236dae4SAndroid Build Coastguard Worker break;
1211*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_RTSP
1212*6236dae4SAndroid Build Coastguard Worker case CURLOPT_RTSP_REQUEST:
1213*6236dae4SAndroid Build Coastguard Worker {
1214*6236dae4SAndroid Build Coastguard Worker /*
1215*6236dae4SAndroid Build Coastguard Worker * Set the RTSP request method (OPTIONS, SETUP, PLAY, etc...)
1216*6236dae4SAndroid Build Coastguard Worker * Would this be better if the RTSPREQ_* were just moved into here?
1217*6236dae4SAndroid Build Coastguard Worker */
1218*6236dae4SAndroid Build Coastguard Worker Curl_RtspReq rtspreq = RTSPREQ_NONE;
1219*6236dae4SAndroid Build Coastguard Worker switch(arg) {
1220*6236dae4SAndroid Build Coastguard Worker case CURL_RTSPREQ_OPTIONS:
1221*6236dae4SAndroid Build Coastguard Worker rtspreq = RTSPREQ_OPTIONS;
1222*6236dae4SAndroid Build Coastguard Worker break;
1223*6236dae4SAndroid Build Coastguard Worker
1224*6236dae4SAndroid Build Coastguard Worker case CURL_RTSPREQ_DESCRIBE:
1225*6236dae4SAndroid Build Coastguard Worker rtspreq = RTSPREQ_DESCRIBE;
1226*6236dae4SAndroid Build Coastguard Worker break;
1227*6236dae4SAndroid Build Coastguard Worker
1228*6236dae4SAndroid Build Coastguard Worker case CURL_RTSPREQ_ANNOUNCE:
1229*6236dae4SAndroid Build Coastguard Worker rtspreq = RTSPREQ_ANNOUNCE;
1230*6236dae4SAndroid Build Coastguard Worker break;
1231*6236dae4SAndroid Build Coastguard Worker
1232*6236dae4SAndroid Build Coastguard Worker case CURL_RTSPREQ_SETUP:
1233*6236dae4SAndroid Build Coastguard Worker rtspreq = RTSPREQ_SETUP;
1234*6236dae4SAndroid Build Coastguard Worker break;
1235*6236dae4SAndroid Build Coastguard Worker
1236*6236dae4SAndroid Build Coastguard Worker case CURL_RTSPREQ_PLAY:
1237*6236dae4SAndroid Build Coastguard Worker rtspreq = RTSPREQ_PLAY;
1238*6236dae4SAndroid Build Coastguard Worker break;
1239*6236dae4SAndroid Build Coastguard Worker
1240*6236dae4SAndroid Build Coastguard Worker case CURL_RTSPREQ_PAUSE:
1241*6236dae4SAndroid Build Coastguard Worker rtspreq = RTSPREQ_PAUSE;
1242*6236dae4SAndroid Build Coastguard Worker break;
1243*6236dae4SAndroid Build Coastguard Worker
1244*6236dae4SAndroid Build Coastguard Worker case CURL_RTSPREQ_TEARDOWN:
1245*6236dae4SAndroid Build Coastguard Worker rtspreq = RTSPREQ_TEARDOWN;
1246*6236dae4SAndroid Build Coastguard Worker break;
1247*6236dae4SAndroid Build Coastguard Worker
1248*6236dae4SAndroid Build Coastguard Worker case CURL_RTSPREQ_GET_PARAMETER:
1249*6236dae4SAndroid Build Coastguard Worker rtspreq = RTSPREQ_GET_PARAMETER;
1250*6236dae4SAndroid Build Coastguard Worker break;
1251*6236dae4SAndroid Build Coastguard Worker
1252*6236dae4SAndroid Build Coastguard Worker case CURL_RTSPREQ_SET_PARAMETER:
1253*6236dae4SAndroid Build Coastguard Worker rtspreq = RTSPREQ_SET_PARAMETER;
1254*6236dae4SAndroid Build Coastguard Worker break;
1255*6236dae4SAndroid Build Coastguard Worker
1256*6236dae4SAndroid Build Coastguard Worker case CURL_RTSPREQ_RECORD:
1257*6236dae4SAndroid Build Coastguard Worker rtspreq = RTSPREQ_RECORD;
1258*6236dae4SAndroid Build Coastguard Worker break;
1259*6236dae4SAndroid Build Coastguard Worker
1260*6236dae4SAndroid Build Coastguard Worker case CURL_RTSPREQ_RECEIVE:
1261*6236dae4SAndroid Build Coastguard Worker rtspreq = RTSPREQ_RECEIVE;
1262*6236dae4SAndroid Build Coastguard Worker break;
1263*6236dae4SAndroid Build Coastguard Worker default:
1264*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
1265*6236dae4SAndroid Build Coastguard Worker }
1266*6236dae4SAndroid Build Coastguard Worker
1267*6236dae4SAndroid Build Coastguard Worker data->set.rtspreq = rtspreq;
1268*6236dae4SAndroid Build Coastguard Worker break;
1269*6236dae4SAndroid Build Coastguard Worker }
1270*6236dae4SAndroid Build Coastguard Worker case CURLOPT_RTSP_CLIENT_CSEQ:
1271*6236dae4SAndroid Build Coastguard Worker /*
1272*6236dae4SAndroid Build Coastguard Worker * Set the CSEQ number to issue for the next RTSP request. Useful if the
1273*6236dae4SAndroid Build Coastguard Worker * application is resuming a previously broken connection. The CSEQ
1274*6236dae4SAndroid Build Coastguard Worker * will increment from this new number henceforth.
1275*6236dae4SAndroid Build Coastguard Worker */
1276*6236dae4SAndroid Build Coastguard Worker data->state.rtsp_next_client_CSeq = arg;
1277*6236dae4SAndroid Build Coastguard Worker break;
1278*6236dae4SAndroid Build Coastguard Worker
1279*6236dae4SAndroid Build Coastguard Worker case CURLOPT_RTSP_SERVER_CSEQ:
1280*6236dae4SAndroid Build Coastguard Worker /* Same as the above, but for server-initiated requests */
1281*6236dae4SAndroid Build Coastguard Worker data->state.rtsp_next_server_CSeq = arg;
1282*6236dae4SAndroid Build Coastguard Worker break;
1283*6236dae4SAndroid Build Coastguard Worker
1284*6236dae4SAndroid Build Coastguard Worker #endif /* ! CURL_DISABLE_RTSP */
1285*6236dae4SAndroid Build Coastguard Worker
1286*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TCP_KEEPALIVE:
1287*6236dae4SAndroid Build Coastguard Worker data->set.tcp_keepalive = enabled;
1288*6236dae4SAndroid Build Coastguard Worker break;
1289*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TCP_KEEPIDLE:
1290*6236dae4SAndroid Build Coastguard Worker if(arg < 0)
1291*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
1292*6236dae4SAndroid Build Coastguard Worker else if(arg > INT_MAX)
1293*6236dae4SAndroid Build Coastguard Worker arg = INT_MAX;
1294*6236dae4SAndroid Build Coastguard Worker data->set.tcp_keepidle = (int)arg;
1295*6236dae4SAndroid Build Coastguard Worker break;
1296*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TCP_KEEPINTVL:
1297*6236dae4SAndroid Build Coastguard Worker if(arg < 0)
1298*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
1299*6236dae4SAndroid Build Coastguard Worker else if(arg > INT_MAX)
1300*6236dae4SAndroid Build Coastguard Worker arg = INT_MAX;
1301*6236dae4SAndroid Build Coastguard Worker data->set.tcp_keepintvl = (int)arg;
1302*6236dae4SAndroid Build Coastguard Worker break;
1303*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TCP_KEEPCNT:
1304*6236dae4SAndroid Build Coastguard Worker if(arg < 0)
1305*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
1306*6236dae4SAndroid Build Coastguard Worker else if(arg > INT_MAX)
1307*6236dae4SAndroid Build Coastguard Worker arg = INT_MAX;
1308*6236dae4SAndroid Build Coastguard Worker data->set.tcp_keepcnt = (int)arg;
1309*6236dae4SAndroid Build Coastguard Worker break;
1310*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TCP_FASTOPEN:
1311*6236dae4SAndroid Build Coastguard Worker #if defined(CONNECT_DATA_IDEMPOTENT) || defined(MSG_FASTOPEN) || \
1312*6236dae4SAndroid Build Coastguard Worker defined(TCP_FASTOPEN_CONNECT)
1313*6236dae4SAndroid Build Coastguard Worker data->set.tcp_fastopen = enabled;
1314*6236dae4SAndroid Build Coastguard Worker #else
1315*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
1316*6236dae4SAndroid Build Coastguard Worker #endif
1317*6236dae4SAndroid Build Coastguard Worker break;
1318*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSL_ENABLE_NPN:
1319*6236dae4SAndroid Build Coastguard Worker break;
1320*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSL_ENABLE_ALPN:
1321*6236dae4SAndroid Build Coastguard Worker data->set.ssl_enable_alpn = enabled;
1322*6236dae4SAndroid Build Coastguard Worker break;
1323*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PATH_AS_IS:
1324*6236dae4SAndroid Build Coastguard Worker data->set.path_as_is = enabled;
1325*6236dae4SAndroid Build Coastguard Worker break;
1326*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PIPEWAIT:
1327*6236dae4SAndroid Build Coastguard Worker data->set.pipewait = enabled;
1328*6236dae4SAndroid Build Coastguard Worker break;
1329*6236dae4SAndroid Build Coastguard Worker case CURLOPT_STREAM_WEIGHT:
1330*6236dae4SAndroid Build Coastguard Worker #if defined(USE_HTTP2) || defined(USE_HTTP3)
1331*6236dae4SAndroid Build Coastguard Worker if((arg >= 1) && (arg <= 256))
1332*6236dae4SAndroid Build Coastguard Worker data->set.priority.weight = (int)arg;
1333*6236dae4SAndroid Build Coastguard Worker break;
1334*6236dae4SAndroid Build Coastguard Worker #else
1335*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
1336*6236dae4SAndroid Build Coastguard Worker #endif
1337*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SUPPRESS_CONNECT_HEADERS:
1338*6236dae4SAndroid Build Coastguard Worker data->set.suppress_connect_headers = enabled;
1339*6236dae4SAndroid Build Coastguard Worker break;
1340*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS:
1341*6236dae4SAndroid Build Coastguard Worker if(uarg > UINT_MAX)
1342*6236dae4SAndroid Build Coastguard Worker uarg = UINT_MAX;
1343*6236dae4SAndroid Build Coastguard Worker data->set.happy_eyeballs_timeout = (unsigned int)uarg;
1344*6236dae4SAndroid Build Coastguard Worker break;
1345*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_SHUFFLE_DNS
1346*6236dae4SAndroid Build Coastguard Worker case CURLOPT_DNS_SHUFFLE_ADDRESSES:
1347*6236dae4SAndroid Build Coastguard Worker data->set.dns_shuffle_addresses = enabled;
1348*6236dae4SAndroid Build Coastguard Worker break;
1349*6236dae4SAndroid Build Coastguard Worker #endif
1350*6236dae4SAndroid Build Coastguard Worker case CURLOPT_DISALLOW_USERNAME_IN_URL:
1351*6236dae4SAndroid Build Coastguard Worker data->set.disallow_username_in_url = enabled;
1352*6236dae4SAndroid Build Coastguard Worker break;
1353*6236dae4SAndroid Build Coastguard Worker
1354*6236dae4SAndroid Build Coastguard Worker case CURLOPT_UPKEEP_INTERVAL_MS:
1355*6236dae4SAndroid Build Coastguard Worker if(arg < 0)
1356*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
1357*6236dae4SAndroid Build Coastguard Worker data->set.upkeep_interval_ms = arg;
1358*6236dae4SAndroid Build Coastguard Worker break;
1359*6236dae4SAndroid Build Coastguard Worker case CURLOPT_MAXAGE_CONN:
1360*6236dae4SAndroid Build Coastguard Worker if(arg < 0)
1361*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
1362*6236dae4SAndroid Build Coastguard Worker data->set.maxage_conn = arg;
1363*6236dae4SAndroid Build Coastguard Worker break;
1364*6236dae4SAndroid Build Coastguard Worker case CURLOPT_MAXLIFETIME_CONN:
1365*6236dae4SAndroid Build Coastguard Worker if(arg < 0)
1366*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
1367*6236dae4SAndroid Build Coastguard Worker data->set.maxlifetime_conn = arg;
1368*6236dae4SAndroid Build Coastguard Worker break;
1369*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_HSTS
1370*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HSTS_CTRL:
1371*6236dae4SAndroid Build Coastguard Worker if(arg & CURLHSTS_ENABLE) {
1372*6236dae4SAndroid Build Coastguard Worker if(!data->hsts) {
1373*6236dae4SAndroid Build Coastguard Worker data->hsts = Curl_hsts_init();
1374*6236dae4SAndroid Build Coastguard Worker if(!data->hsts)
1375*6236dae4SAndroid Build Coastguard Worker return CURLE_OUT_OF_MEMORY;
1376*6236dae4SAndroid Build Coastguard Worker }
1377*6236dae4SAndroid Build Coastguard Worker }
1378*6236dae4SAndroid Build Coastguard Worker else
1379*6236dae4SAndroid Build Coastguard Worker Curl_hsts_cleanup(&data->hsts);
1380*6236dae4SAndroid Build Coastguard Worker break;
1381*6236dae4SAndroid Build Coastguard Worker #endif /* ! CURL_DISABLE_HSTS */
1382*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_ALTSVC
1383*6236dae4SAndroid Build Coastguard Worker case CURLOPT_ALTSVC_CTRL:
1384*6236dae4SAndroid Build Coastguard Worker if(!arg) {
1385*6236dae4SAndroid Build Coastguard Worker DEBUGF(infof(data, "bad CURLOPT_ALTSVC_CTRL input"));
1386*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
1387*6236dae4SAndroid Build Coastguard Worker }
1388*6236dae4SAndroid Build Coastguard Worker if(!data->asi) {
1389*6236dae4SAndroid Build Coastguard Worker data->asi = Curl_altsvc_init();
1390*6236dae4SAndroid Build Coastguard Worker if(!data->asi)
1391*6236dae4SAndroid Build Coastguard Worker return CURLE_OUT_OF_MEMORY;
1392*6236dae4SAndroid Build Coastguard Worker }
1393*6236dae4SAndroid Build Coastguard Worker return Curl_altsvc_ctrl(data->asi, arg);
1394*6236dae4SAndroid Build Coastguard Worker #endif /* ! CURL_DISABLE_ALTSVC */
1395*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_WEBSOCKETS
1396*6236dae4SAndroid Build Coastguard Worker case CURLOPT_WS_OPTIONS:
1397*6236dae4SAndroid Build Coastguard Worker data->set.ws_raw_mode = (bool)(arg & CURLWS_RAW_MODE);
1398*6236dae4SAndroid Build Coastguard Worker break;
1399*6236dae4SAndroid Build Coastguard Worker #endif
1400*6236dae4SAndroid Build Coastguard Worker case CURLOPT_QUICK_EXIT:
1401*6236dae4SAndroid Build Coastguard Worker data->set.quick_exit = enabled;
1402*6236dae4SAndroid Build Coastguard Worker break;
1403*6236dae4SAndroid Build Coastguard Worker case CURLOPT_DNS_USE_GLOBAL_CACHE:
1404*6236dae4SAndroid Build Coastguard Worker /* deprecated */
1405*6236dae4SAndroid Build Coastguard Worker break;
1406*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSLENGINE_DEFAULT:
1407*6236dae4SAndroid Build Coastguard Worker /*
1408*6236dae4SAndroid Build Coastguard Worker * flag to set engine as default.
1409*6236dae4SAndroid Build Coastguard Worker */
1410*6236dae4SAndroid Build Coastguard Worker Curl_safefree(data->set.str[STRING_SSL_ENGINE]);
1411*6236dae4SAndroid Build Coastguard Worker return Curl_ssl_set_engine_default(data);
1412*6236dae4SAndroid Build Coastguard Worker
1413*6236dae4SAndroid Build Coastguard Worker default:
1414*6236dae4SAndroid Build Coastguard Worker /* unknown option */
1415*6236dae4SAndroid Build Coastguard Worker return CURLE_UNKNOWN_OPTION;
1416*6236dae4SAndroid Build Coastguard Worker }
1417*6236dae4SAndroid Build Coastguard Worker return CURLE_OK;
1418*6236dae4SAndroid Build Coastguard Worker }
1419*6236dae4SAndroid Build Coastguard Worker
setopt_slist(struct Curl_easy * data,CURLoption option,struct curl_slist * slist)1420*6236dae4SAndroid Build Coastguard Worker static CURLcode setopt_slist(struct Curl_easy *data, CURLoption option,
1421*6236dae4SAndroid Build Coastguard Worker struct curl_slist *slist)
1422*6236dae4SAndroid Build Coastguard Worker {
1423*6236dae4SAndroid Build Coastguard Worker CURLcode result = CURLE_OK;
1424*6236dae4SAndroid Build Coastguard Worker switch(option) {
1425*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
1426*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXYHEADER:
1427*6236dae4SAndroid Build Coastguard Worker /*
1428*6236dae4SAndroid Build Coastguard Worker * Set a list with proxy headers to use (or replace internals with)
1429*6236dae4SAndroid Build Coastguard Worker *
1430*6236dae4SAndroid Build Coastguard Worker * Since CURLOPT_HTTPHEADER was the only way to set HTTP headers for a
1431*6236dae4SAndroid Build Coastguard Worker * long time we remain doing it this way until CURLOPT_PROXYHEADER is
1432*6236dae4SAndroid Build Coastguard Worker * used. As soon as this option has been used, if set to anything but
1433*6236dae4SAndroid Build Coastguard Worker * NULL, custom headers for proxies are only picked from this list.
1434*6236dae4SAndroid Build Coastguard Worker *
1435*6236dae4SAndroid Build Coastguard Worker * Set this option to NULL to restore the previous behavior.
1436*6236dae4SAndroid Build Coastguard Worker */
1437*6236dae4SAndroid Build Coastguard Worker data->set.proxyheaders = slist;
1438*6236dae4SAndroid Build Coastguard Worker break;
1439*6236dae4SAndroid Build Coastguard Worker #endif
1440*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_HTTP
1441*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HTTP200ALIASES:
1442*6236dae4SAndroid Build Coastguard Worker /*
1443*6236dae4SAndroid Build Coastguard Worker * Set a list of aliases for HTTP 200 in response header
1444*6236dae4SAndroid Build Coastguard Worker */
1445*6236dae4SAndroid Build Coastguard Worker data->set.http200aliases = slist;
1446*6236dae4SAndroid Build Coastguard Worker break;
1447*6236dae4SAndroid Build Coastguard Worker #endif
1448*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_DISABLE_FTP) || defined(USE_SSH)
1449*6236dae4SAndroid Build Coastguard Worker case CURLOPT_POSTQUOTE:
1450*6236dae4SAndroid Build Coastguard Worker /*
1451*6236dae4SAndroid Build Coastguard Worker * List of RAW FTP commands to use after a transfer
1452*6236dae4SAndroid Build Coastguard Worker */
1453*6236dae4SAndroid Build Coastguard Worker data->set.postquote = slist;
1454*6236dae4SAndroid Build Coastguard Worker break;
1455*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PREQUOTE:
1456*6236dae4SAndroid Build Coastguard Worker /*
1457*6236dae4SAndroid Build Coastguard Worker * List of RAW FTP commands to use prior to RETR (Wesley Laxton)
1458*6236dae4SAndroid Build Coastguard Worker */
1459*6236dae4SAndroid Build Coastguard Worker data->set.prequote = slist;
1460*6236dae4SAndroid Build Coastguard Worker break;
1461*6236dae4SAndroid Build Coastguard Worker case CURLOPT_QUOTE:
1462*6236dae4SAndroid Build Coastguard Worker /*
1463*6236dae4SAndroid Build Coastguard Worker * List of RAW FTP commands to use before a transfer
1464*6236dae4SAndroid Build Coastguard Worker */
1465*6236dae4SAndroid Build Coastguard Worker data->set.quote = slist;
1466*6236dae4SAndroid Build Coastguard Worker break;
1467*6236dae4SAndroid Build Coastguard Worker #endif
1468*6236dae4SAndroid Build Coastguard Worker case CURLOPT_RESOLVE:
1469*6236dae4SAndroid Build Coastguard Worker /*
1470*6236dae4SAndroid Build Coastguard Worker * List of HOST:PORT:[addresses] strings to populate the DNS cache with
1471*6236dae4SAndroid Build Coastguard Worker * Entries added this way will remain in the cache until explicitly
1472*6236dae4SAndroid Build Coastguard Worker * removed or the handle is cleaned up.
1473*6236dae4SAndroid Build Coastguard Worker *
1474*6236dae4SAndroid Build Coastguard Worker * Prefix the HOST with plus sign (+) to have the entry expire just like
1475*6236dae4SAndroid Build Coastguard Worker * automatically added entries.
1476*6236dae4SAndroid Build Coastguard Worker *
1477*6236dae4SAndroid Build Coastguard Worker * Prefix the HOST with dash (-) to _remove_ the entry from the cache.
1478*6236dae4SAndroid Build Coastguard Worker *
1479*6236dae4SAndroid Build Coastguard Worker * This API can remove any entry from the DNS cache, but only entries
1480*6236dae4SAndroid Build Coastguard Worker * that are not actually in use right now will be pruned immediately.
1481*6236dae4SAndroid Build Coastguard Worker */
1482*6236dae4SAndroid Build Coastguard Worker data->set.resolve = slist;
1483*6236dae4SAndroid Build Coastguard Worker data->state.resolve = data->set.resolve;
1484*6236dae4SAndroid Build Coastguard Worker break;
1485*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_MIME)
1486*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HTTPHEADER:
1487*6236dae4SAndroid Build Coastguard Worker /*
1488*6236dae4SAndroid Build Coastguard Worker * Set a list with HTTP headers to use (or replace internals with)
1489*6236dae4SAndroid Build Coastguard Worker */
1490*6236dae4SAndroid Build Coastguard Worker data->set.headers = slist;
1491*6236dae4SAndroid Build Coastguard Worker break;
1492*6236dae4SAndroid Build Coastguard Worker #endif
1493*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_TELNET
1494*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TELNETOPTIONS:
1495*6236dae4SAndroid Build Coastguard Worker /*
1496*6236dae4SAndroid Build Coastguard Worker * Set a linked list of telnet options
1497*6236dae4SAndroid Build Coastguard Worker */
1498*6236dae4SAndroid Build Coastguard Worker data->set.telnet_options = slist;
1499*6236dae4SAndroid Build Coastguard Worker break;
1500*6236dae4SAndroid Build Coastguard Worker #endif
1501*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_SMTP
1502*6236dae4SAndroid Build Coastguard Worker case CURLOPT_MAIL_RCPT:
1503*6236dae4SAndroid Build Coastguard Worker /* Set the list of mail recipients */
1504*6236dae4SAndroid Build Coastguard Worker data->set.mail_rcpt = slist;
1505*6236dae4SAndroid Build Coastguard Worker break;
1506*6236dae4SAndroid Build Coastguard Worker #endif
1507*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CONNECT_TO:
1508*6236dae4SAndroid Build Coastguard Worker data->set.connect_to = slist;
1509*6236dae4SAndroid Build Coastguard Worker break;
1510*6236dae4SAndroid Build Coastguard Worker default:
1511*6236dae4SAndroid Build Coastguard Worker return CURLE_UNKNOWN_OPTION;
1512*6236dae4SAndroid Build Coastguard Worker }
1513*6236dae4SAndroid Build Coastguard Worker return result;
1514*6236dae4SAndroid Build Coastguard Worker }
1515*6236dae4SAndroid Build Coastguard Worker
1516*6236dae4SAndroid Build Coastguard Worker /* assorted pointer type arguments */
setopt_pointers(struct Curl_easy * data,CURLoption option,va_list param)1517*6236dae4SAndroid Build Coastguard Worker static CURLcode setopt_pointers(struct Curl_easy *data, CURLoption option,
1518*6236dae4SAndroid Build Coastguard Worker va_list param)
1519*6236dae4SAndroid Build Coastguard Worker {
1520*6236dae4SAndroid Build Coastguard Worker CURLcode result = CURLE_OK;
1521*6236dae4SAndroid Build Coastguard Worker switch(option) {
1522*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_HTTP
1523*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_FORM_API
1524*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HTTPPOST:
1525*6236dae4SAndroid Build Coastguard Worker /*
1526*6236dae4SAndroid Build Coastguard Worker * Set to make us do HTTP POST. Legacy API-style.
1527*6236dae4SAndroid Build Coastguard Worker */
1528*6236dae4SAndroid Build Coastguard Worker data->set.httppost = va_arg(param, struct curl_httppost *);
1529*6236dae4SAndroid Build Coastguard Worker data->set.method = HTTPREQ_POST_FORM;
1530*6236dae4SAndroid Build Coastguard Worker data->set.opt_no_body = FALSE; /* this is implied */
1531*6236dae4SAndroid Build Coastguard Worker Curl_mime_cleanpart(data->state.formp);
1532*6236dae4SAndroid Build Coastguard Worker Curl_safefree(data->state.formp);
1533*6236dae4SAndroid Build Coastguard Worker data->state.mimepost = NULL;
1534*6236dae4SAndroid Build Coastguard Worker break;
1535*6236dae4SAndroid Build Coastguard Worker #endif /* ! CURL_DISABLE_FORM_API */
1536*6236dae4SAndroid Build Coastguard Worker #endif /* ! CURL_DISABLE_HTTP */
1537*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_SMTP) || \
1538*6236dae4SAndroid Build Coastguard Worker !defined(CURL_DISABLE_IMAP)
1539*6236dae4SAndroid Build Coastguard Worker # ifndef CURL_DISABLE_MIME
1540*6236dae4SAndroid Build Coastguard Worker case CURLOPT_MIMEPOST:
1541*6236dae4SAndroid Build Coastguard Worker /*
1542*6236dae4SAndroid Build Coastguard Worker * Set to make us do MIME POST
1543*6236dae4SAndroid Build Coastguard Worker */
1544*6236dae4SAndroid Build Coastguard Worker result = Curl_mime_set_subparts(&data->set.mimepost,
1545*6236dae4SAndroid Build Coastguard Worker va_arg(param, curl_mime *),
1546*6236dae4SAndroid Build Coastguard Worker FALSE);
1547*6236dae4SAndroid Build Coastguard Worker if(!result) {
1548*6236dae4SAndroid Build Coastguard Worker data->set.method = HTTPREQ_POST_MIME;
1549*6236dae4SAndroid Build Coastguard Worker data->set.opt_no_body = FALSE; /* this is implied */
1550*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_FORM_API
1551*6236dae4SAndroid Build Coastguard Worker Curl_mime_cleanpart(data->state.formp);
1552*6236dae4SAndroid Build Coastguard Worker Curl_safefree(data->state.formp);
1553*6236dae4SAndroid Build Coastguard Worker data->state.mimepost = NULL;
1554*6236dae4SAndroid Build Coastguard Worker #endif
1555*6236dae4SAndroid Build Coastguard Worker }
1556*6236dae4SAndroid Build Coastguard Worker break;
1557*6236dae4SAndroid Build Coastguard Worker #endif /* ! CURL_DISABLE_MIME */
1558*6236dae4SAndroid Build Coastguard Worker #endif /* ! disabled HTTP, SMTP or IMAP */
1559*6236dae4SAndroid Build Coastguard Worker case CURLOPT_STDERR:
1560*6236dae4SAndroid Build Coastguard Worker /*
1561*6236dae4SAndroid Build Coastguard Worker * Set to a FILE * that should receive all error writes. This
1562*6236dae4SAndroid Build Coastguard Worker * defaults to stderr for normal operations.
1563*6236dae4SAndroid Build Coastguard Worker */
1564*6236dae4SAndroid Build Coastguard Worker data->set.err = va_arg(param, FILE *);
1565*6236dae4SAndroid Build Coastguard Worker if(!data->set.err)
1566*6236dae4SAndroid Build Coastguard Worker data->set.err = stderr;
1567*6236dae4SAndroid Build Coastguard Worker break;
1568*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SHARE:
1569*6236dae4SAndroid Build Coastguard Worker {
1570*6236dae4SAndroid Build Coastguard Worker struct Curl_share *set = va_arg(param, struct Curl_share *);
1571*6236dae4SAndroid Build Coastguard Worker
1572*6236dae4SAndroid Build Coastguard Worker /* disconnect from old share, if any */
1573*6236dae4SAndroid Build Coastguard Worker if(data->share) {
1574*6236dae4SAndroid Build Coastguard Worker Curl_share_lock(data, CURL_LOCK_DATA_SHARE, CURL_LOCK_ACCESS_SINGLE);
1575*6236dae4SAndroid Build Coastguard Worker
1576*6236dae4SAndroid Build Coastguard Worker if(data->dns.hostcachetype == HCACHE_SHARED) {
1577*6236dae4SAndroid Build Coastguard Worker data->dns.hostcache = NULL;
1578*6236dae4SAndroid Build Coastguard Worker data->dns.hostcachetype = HCACHE_NONE;
1579*6236dae4SAndroid Build Coastguard Worker }
1580*6236dae4SAndroid Build Coastguard Worker
1581*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
1582*6236dae4SAndroid Build Coastguard Worker if(data->share->cookies == data->cookies)
1583*6236dae4SAndroid Build Coastguard Worker data->cookies = NULL;
1584*6236dae4SAndroid Build Coastguard Worker #endif
1585*6236dae4SAndroid Build Coastguard Worker
1586*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_HSTS
1587*6236dae4SAndroid Build Coastguard Worker if(data->share->hsts == data->hsts)
1588*6236dae4SAndroid Build Coastguard Worker data->hsts = NULL;
1589*6236dae4SAndroid Build Coastguard Worker #endif
1590*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSL
1591*6236dae4SAndroid Build Coastguard Worker if(data->share->sslsession == data->state.session)
1592*6236dae4SAndroid Build Coastguard Worker data->state.session = NULL;
1593*6236dae4SAndroid Build Coastguard Worker #endif
1594*6236dae4SAndroid Build Coastguard Worker #ifdef USE_LIBPSL
1595*6236dae4SAndroid Build Coastguard Worker if(data->psl == &data->share->psl)
1596*6236dae4SAndroid Build Coastguard Worker data->psl = data->multi ? &data->multi->psl : NULL;
1597*6236dae4SAndroid Build Coastguard Worker #endif
1598*6236dae4SAndroid Build Coastguard Worker
1599*6236dae4SAndroid Build Coastguard Worker data->share->dirty--;
1600*6236dae4SAndroid Build Coastguard Worker
1601*6236dae4SAndroid Build Coastguard Worker Curl_share_unlock(data, CURL_LOCK_DATA_SHARE);
1602*6236dae4SAndroid Build Coastguard Worker data->share = NULL;
1603*6236dae4SAndroid Build Coastguard Worker }
1604*6236dae4SAndroid Build Coastguard Worker
1605*6236dae4SAndroid Build Coastguard Worker if(GOOD_SHARE_HANDLE(set))
1606*6236dae4SAndroid Build Coastguard Worker /* use new share if it set */
1607*6236dae4SAndroid Build Coastguard Worker data->share = set;
1608*6236dae4SAndroid Build Coastguard Worker if(data->share) {
1609*6236dae4SAndroid Build Coastguard Worker
1610*6236dae4SAndroid Build Coastguard Worker Curl_share_lock(data, CURL_LOCK_DATA_SHARE, CURL_LOCK_ACCESS_SINGLE);
1611*6236dae4SAndroid Build Coastguard Worker
1612*6236dae4SAndroid Build Coastguard Worker data->share->dirty++;
1613*6236dae4SAndroid Build Coastguard Worker
1614*6236dae4SAndroid Build Coastguard Worker if(data->share->specifier & (1 << CURL_LOCK_DATA_DNS)) {
1615*6236dae4SAndroid Build Coastguard Worker /* use shared host cache */
1616*6236dae4SAndroid Build Coastguard Worker data->dns.hostcache = &data->share->hostcache;
1617*6236dae4SAndroid Build Coastguard Worker data->dns.hostcachetype = HCACHE_SHARED;
1618*6236dae4SAndroid Build Coastguard Worker }
1619*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
1620*6236dae4SAndroid Build Coastguard Worker if(data->share->cookies) {
1621*6236dae4SAndroid Build Coastguard Worker /* use shared cookie list, first free own one if any */
1622*6236dae4SAndroid Build Coastguard Worker Curl_cookie_cleanup(data->cookies);
1623*6236dae4SAndroid Build Coastguard Worker /* enable cookies since we now use a share that uses cookies! */
1624*6236dae4SAndroid Build Coastguard Worker data->cookies = data->share->cookies;
1625*6236dae4SAndroid Build Coastguard Worker }
1626*6236dae4SAndroid Build Coastguard Worker #endif /* CURL_DISABLE_HTTP */
1627*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_HSTS
1628*6236dae4SAndroid Build Coastguard Worker if(data->share->hsts) {
1629*6236dae4SAndroid Build Coastguard Worker /* first free the private one if any */
1630*6236dae4SAndroid Build Coastguard Worker Curl_hsts_cleanup(&data->hsts);
1631*6236dae4SAndroid Build Coastguard Worker data->hsts = data->share->hsts;
1632*6236dae4SAndroid Build Coastguard Worker }
1633*6236dae4SAndroid Build Coastguard Worker #endif
1634*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSL
1635*6236dae4SAndroid Build Coastguard Worker if(data->share->sslsession) {
1636*6236dae4SAndroid Build Coastguard Worker data->set.general_ssl.max_ssl_sessions = data->share->max_ssl_sessions;
1637*6236dae4SAndroid Build Coastguard Worker data->state.session = data->share->sslsession;
1638*6236dae4SAndroid Build Coastguard Worker }
1639*6236dae4SAndroid Build Coastguard Worker #endif
1640*6236dae4SAndroid Build Coastguard Worker #ifdef USE_LIBPSL
1641*6236dae4SAndroid Build Coastguard Worker if(data->share->specifier & (1 << CURL_LOCK_DATA_PSL))
1642*6236dae4SAndroid Build Coastguard Worker data->psl = &data->share->psl;
1643*6236dae4SAndroid Build Coastguard Worker #endif
1644*6236dae4SAndroid Build Coastguard Worker
1645*6236dae4SAndroid Build Coastguard Worker Curl_share_unlock(data, CURL_LOCK_DATA_SHARE);
1646*6236dae4SAndroid Build Coastguard Worker }
1647*6236dae4SAndroid Build Coastguard Worker /* check for host cache not needed,
1648*6236dae4SAndroid Build Coastguard Worker * it will be done by curl_easy_perform */
1649*6236dae4SAndroid Build Coastguard Worker }
1650*6236dae4SAndroid Build Coastguard Worker break;
1651*6236dae4SAndroid Build Coastguard Worker
1652*6236dae4SAndroid Build Coastguard Worker #ifdef USE_HTTP2
1653*6236dae4SAndroid Build Coastguard Worker case CURLOPT_STREAM_DEPENDS:
1654*6236dae4SAndroid Build Coastguard Worker case CURLOPT_STREAM_DEPENDS_E: {
1655*6236dae4SAndroid Build Coastguard Worker struct Curl_easy *dep = va_arg(param, struct Curl_easy *);
1656*6236dae4SAndroid Build Coastguard Worker if(!dep || GOOD_EASY_HANDLE(dep))
1657*6236dae4SAndroid Build Coastguard Worker return Curl_data_priority_add_child(dep, data,
1658*6236dae4SAndroid Build Coastguard Worker option == CURLOPT_STREAM_DEPENDS_E);
1659*6236dae4SAndroid Build Coastguard Worker break;
1660*6236dae4SAndroid Build Coastguard Worker }
1661*6236dae4SAndroid Build Coastguard Worker #endif
1662*6236dae4SAndroid Build Coastguard Worker
1663*6236dae4SAndroid Build Coastguard Worker default:
1664*6236dae4SAndroid Build Coastguard Worker return CURLE_UNKNOWN_OPTION;
1665*6236dae4SAndroid Build Coastguard Worker }
1666*6236dae4SAndroid Build Coastguard Worker return result;
1667*6236dae4SAndroid Build Coastguard Worker }
1668*6236dae4SAndroid Build Coastguard Worker
setopt_cptr(struct Curl_easy * data,CURLoption option,char * ptr)1669*6236dae4SAndroid Build Coastguard Worker static CURLcode setopt_cptr(struct Curl_easy *data, CURLoption option,
1670*6236dae4SAndroid Build Coastguard Worker char *ptr)
1671*6236dae4SAndroid Build Coastguard Worker {
1672*6236dae4SAndroid Build Coastguard Worker CURLcode result = CURLE_OK;
1673*6236dae4SAndroid Build Coastguard Worker switch(option) {
1674*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSL_CIPHER_LIST:
1675*6236dae4SAndroid Build Coastguard Worker if(Curl_ssl_supports(data, SSLSUPP_CIPHER_LIST))
1676*6236dae4SAndroid Build Coastguard Worker /* set a list of cipher we want to use in the SSL connection */
1677*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSL_CIPHER_LIST], ptr);
1678*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
1679*6236dae4SAndroid Build Coastguard Worker break;
1680*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
1681*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_SSL_CIPHER_LIST:
1682*6236dae4SAndroid Build Coastguard Worker if(Curl_ssl_supports(data, SSLSUPP_CIPHER_LIST)) {
1683*6236dae4SAndroid Build Coastguard Worker /* set a list of cipher we want to use in the SSL connection for proxy */
1684*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSL_CIPHER_LIST_PROXY],
1685*6236dae4SAndroid Build Coastguard Worker ptr);
1686*6236dae4SAndroid Build Coastguard Worker }
1687*6236dae4SAndroid Build Coastguard Worker else
1688*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
1689*6236dae4SAndroid Build Coastguard Worker break;
1690*6236dae4SAndroid Build Coastguard Worker #endif
1691*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TLS13_CIPHERS:
1692*6236dae4SAndroid Build Coastguard Worker if(Curl_ssl_supports(data, SSLSUPP_TLS13_CIPHERSUITES)) {
1693*6236dae4SAndroid Build Coastguard Worker /* set preferred list of TLS 1.3 cipher suites */
1694*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSL_CIPHER13_LIST], ptr);
1695*6236dae4SAndroid Build Coastguard Worker }
1696*6236dae4SAndroid Build Coastguard Worker else
1697*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
1698*6236dae4SAndroid Build Coastguard Worker break;
1699*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
1700*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_TLS13_CIPHERS:
1701*6236dae4SAndroid Build Coastguard Worker if(Curl_ssl_supports(data, SSLSUPP_TLS13_CIPHERSUITES))
1702*6236dae4SAndroid Build Coastguard Worker /* set preferred list of TLS 1.3 cipher suites for proxy */
1703*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSL_CIPHER13_LIST_PROXY],
1704*6236dae4SAndroid Build Coastguard Worker ptr);
1705*6236dae4SAndroid Build Coastguard Worker else
1706*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
1707*6236dae4SAndroid Build Coastguard Worker break;
1708*6236dae4SAndroid Build Coastguard Worker #endif
1709*6236dae4SAndroid Build Coastguard Worker case CURLOPT_RANDOM_FILE:
1710*6236dae4SAndroid Build Coastguard Worker break;
1711*6236dae4SAndroid Build Coastguard Worker case CURLOPT_EGDSOCKET:
1712*6236dae4SAndroid Build Coastguard Worker break;
1713*6236dae4SAndroid Build Coastguard Worker case CURLOPT_REQUEST_TARGET:
1714*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_TARGET], ptr);
1715*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_NETRC
1716*6236dae4SAndroid Build Coastguard Worker case CURLOPT_NETRC_FILE:
1717*6236dae4SAndroid Build Coastguard Worker /*
1718*6236dae4SAndroid Build Coastguard Worker * Use this file instead of the $HOME/.netrc file
1719*6236dae4SAndroid Build Coastguard Worker */
1720*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_NETRC_FILE], ptr);
1721*6236dae4SAndroid Build Coastguard Worker #endif
1722*6236dae4SAndroid Build Coastguard Worker
1723*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_MQTT)
1724*6236dae4SAndroid Build Coastguard Worker case CURLOPT_COPYPOSTFIELDS:
1725*6236dae4SAndroid Build Coastguard Worker /*
1726*6236dae4SAndroid Build Coastguard Worker * A string with POST data. Makes curl HTTP POST. Even if it is NULL.
1727*6236dae4SAndroid Build Coastguard Worker * If needed, CURLOPT_POSTFIELDSIZE must have been set prior to
1728*6236dae4SAndroid Build Coastguard Worker * CURLOPT_COPYPOSTFIELDS and not altered later.
1729*6236dae4SAndroid Build Coastguard Worker */
1730*6236dae4SAndroid Build Coastguard Worker if(!ptr || data->set.postfieldsize == -1)
1731*6236dae4SAndroid Build Coastguard Worker result = Curl_setstropt(&data->set.str[STRING_COPYPOSTFIELDS], ptr);
1732*6236dae4SAndroid Build Coastguard Worker else {
1733*6236dae4SAndroid Build Coastguard Worker if(data->set.postfieldsize < 0)
1734*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
1735*6236dae4SAndroid Build Coastguard Worker #if SIZEOF_CURL_OFF_T > SIZEOF_SIZE_T
1736*6236dae4SAndroid Build Coastguard Worker /*
1737*6236dae4SAndroid Build Coastguard Worker * Check that requested length does not overflow the size_t type.
1738*6236dae4SAndroid Build Coastguard Worker */
1739*6236dae4SAndroid Build Coastguard Worker else if(data->set.postfieldsize > SIZE_T_MAX)
1740*6236dae4SAndroid Build Coastguard Worker return CURLE_OUT_OF_MEMORY;
1741*6236dae4SAndroid Build Coastguard Worker #endif
1742*6236dae4SAndroid Build Coastguard Worker else {
1743*6236dae4SAndroid Build Coastguard Worker /* Allocate even when size == 0. This satisfies the need of possible
1744*6236dae4SAndroid Build Coastguard Worker later address compare to detect the COPYPOSTFIELDS mode, and to
1745*6236dae4SAndroid Build Coastguard Worker mark that postfields is used rather than read function or form
1746*6236dae4SAndroid Build Coastguard Worker data.
1747*6236dae4SAndroid Build Coastguard Worker */
1748*6236dae4SAndroid Build Coastguard Worker char *p = Curl_memdup0(ptr, (size_t)data->set.postfieldsize);
1749*6236dae4SAndroid Build Coastguard Worker if(!p)
1750*6236dae4SAndroid Build Coastguard Worker return CURLE_OUT_OF_MEMORY;
1751*6236dae4SAndroid Build Coastguard Worker else {
1752*6236dae4SAndroid Build Coastguard Worker free(data->set.str[STRING_COPYPOSTFIELDS]);
1753*6236dae4SAndroid Build Coastguard Worker data->set.str[STRING_COPYPOSTFIELDS] = p;
1754*6236dae4SAndroid Build Coastguard Worker }
1755*6236dae4SAndroid Build Coastguard Worker }
1756*6236dae4SAndroid Build Coastguard Worker }
1757*6236dae4SAndroid Build Coastguard Worker
1758*6236dae4SAndroid Build Coastguard Worker data->set.postfields = data->set.str[STRING_COPYPOSTFIELDS];
1759*6236dae4SAndroid Build Coastguard Worker data->set.method = HTTPREQ_POST;
1760*6236dae4SAndroid Build Coastguard Worker break;
1761*6236dae4SAndroid Build Coastguard Worker
1762*6236dae4SAndroid Build Coastguard Worker case CURLOPT_POSTFIELDS:
1763*6236dae4SAndroid Build Coastguard Worker /*
1764*6236dae4SAndroid Build Coastguard Worker * Like above, but use static data instead of copying it.
1765*6236dae4SAndroid Build Coastguard Worker */
1766*6236dae4SAndroid Build Coastguard Worker data->set.postfields = ptr;
1767*6236dae4SAndroid Build Coastguard Worker /* Release old copied data. */
1768*6236dae4SAndroid Build Coastguard Worker Curl_safefree(data->set.str[STRING_COPYPOSTFIELDS]);
1769*6236dae4SAndroid Build Coastguard Worker data->set.method = HTTPREQ_POST;
1770*6236dae4SAndroid Build Coastguard Worker break;
1771*6236dae4SAndroid Build Coastguard Worker
1772*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_HTTP
1773*6236dae4SAndroid Build Coastguard Worker case CURLOPT_ACCEPT_ENCODING:
1774*6236dae4SAndroid Build Coastguard Worker /*
1775*6236dae4SAndroid Build Coastguard Worker * String to use at the value of Accept-Encoding header.
1776*6236dae4SAndroid Build Coastguard Worker *
1777*6236dae4SAndroid Build Coastguard Worker * If the encoding is set to "" we use an Accept-Encoding header that
1778*6236dae4SAndroid Build Coastguard Worker * encompasses all the encodings we support.
1779*6236dae4SAndroid Build Coastguard Worker * If the encoding is set to NULL we do not send an Accept-Encoding header
1780*6236dae4SAndroid Build Coastguard Worker * and ignore an received Content-Encoding header.
1781*6236dae4SAndroid Build Coastguard Worker *
1782*6236dae4SAndroid Build Coastguard Worker */
1783*6236dae4SAndroid Build Coastguard Worker if(ptr && !*ptr) {
1784*6236dae4SAndroid Build Coastguard Worker char all[256];
1785*6236dae4SAndroid Build Coastguard Worker Curl_all_content_encodings(all, sizeof(all));
1786*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_ENCODING], all);
1787*6236dae4SAndroid Build Coastguard Worker }
1788*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_ENCODING], ptr);
1789*6236dae4SAndroid Build Coastguard Worker
1790*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_DISABLE_AWS)
1791*6236dae4SAndroid Build Coastguard Worker case CURLOPT_AWS_SIGV4:
1792*6236dae4SAndroid Build Coastguard Worker /*
1793*6236dae4SAndroid Build Coastguard Worker * String that is merged to some authentication
1794*6236dae4SAndroid Build Coastguard Worker * parameters are used by the algorithm.
1795*6236dae4SAndroid Build Coastguard Worker */
1796*6236dae4SAndroid Build Coastguard Worker result = Curl_setstropt(&data->set.str[STRING_AWS_SIGV4], ptr);
1797*6236dae4SAndroid Build Coastguard Worker /*
1798*6236dae4SAndroid Build Coastguard Worker * Basic been set by default it need to be unset here
1799*6236dae4SAndroid Build Coastguard Worker */
1800*6236dae4SAndroid Build Coastguard Worker if(data->set.str[STRING_AWS_SIGV4])
1801*6236dae4SAndroid Build Coastguard Worker data->set.httpauth = CURLAUTH_AWS_SIGV4;
1802*6236dae4SAndroid Build Coastguard Worker break;
1803*6236dae4SAndroid Build Coastguard Worker #endif
1804*6236dae4SAndroid Build Coastguard Worker case CURLOPT_REFERER:
1805*6236dae4SAndroid Build Coastguard Worker /*
1806*6236dae4SAndroid Build Coastguard Worker * String to set in the HTTP Referer: field.
1807*6236dae4SAndroid Build Coastguard Worker */
1808*6236dae4SAndroid Build Coastguard Worker if(data->state.referer_alloc) {
1809*6236dae4SAndroid Build Coastguard Worker Curl_safefree(data->state.referer);
1810*6236dae4SAndroid Build Coastguard Worker data->state.referer_alloc = FALSE;
1811*6236dae4SAndroid Build Coastguard Worker }
1812*6236dae4SAndroid Build Coastguard Worker result = Curl_setstropt(&data->set.str[STRING_SET_REFERER], ptr);
1813*6236dae4SAndroid Build Coastguard Worker data->state.referer = data->set.str[STRING_SET_REFERER];
1814*6236dae4SAndroid Build Coastguard Worker break;
1815*6236dae4SAndroid Build Coastguard Worker
1816*6236dae4SAndroid Build Coastguard Worker case CURLOPT_USERAGENT:
1817*6236dae4SAndroid Build Coastguard Worker /*
1818*6236dae4SAndroid Build Coastguard Worker * String to use in the HTTP User-Agent field
1819*6236dae4SAndroid Build Coastguard Worker */
1820*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_USERAGENT], ptr);
1821*6236dae4SAndroid Build Coastguard Worker
1822*6236dae4SAndroid Build Coastguard Worker #if !defined(CURL_DISABLE_COOKIES)
1823*6236dae4SAndroid Build Coastguard Worker case CURLOPT_COOKIE:
1824*6236dae4SAndroid Build Coastguard Worker /*
1825*6236dae4SAndroid Build Coastguard Worker * Cookie string to send to the remote server in the request.
1826*6236dae4SAndroid Build Coastguard Worker */
1827*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_COOKIE], ptr);
1828*6236dae4SAndroid Build Coastguard Worker
1829*6236dae4SAndroid Build Coastguard Worker case CURLOPT_COOKIEFILE:
1830*6236dae4SAndroid Build Coastguard Worker /*
1831*6236dae4SAndroid Build Coastguard Worker * Set cookie file to read and parse. Can be used multiple times.
1832*6236dae4SAndroid Build Coastguard Worker */
1833*6236dae4SAndroid Build Coastguard Worker if(ptr) {
1834*6236dae4SAndroid Build Coastguard Worker struct curl_slist *cl;
1835*6236dae4SAndroid Build Coastguard Worker /* general protection against mistakes and abuse */
1836*6236dae4SAndroid Build Coastguard Worker if(strlen(ptr) > CURL_MAX_INPUT_LENGTH)
1837*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
1838*6236dae4SAndroid Build Coastguard Worker /* append the cookie filename to the list of filenames, and deal with
1839*6236dae4SAndroid Build Coastguard Worker them later */
1840*6236dae4SAndroid Build Coastguard Worker cl = curl_slist_append(data->state.cookielist, ptr);
1841*6236dae4SAndroid Build Coastguard Worker if(!cl) {
1842*6236dae4SAndroid Build Coastguard Worker curl_slist_free_all(data->state.cookielist);
1843*6236dae4SAndroid Build Coastguard Worker data->state.cookielist = NULL;
1844*6236dae4SAndroid Build Coastguard Worker return CURLE_OUT_OF_MEMORY;
1845*6236dae4SAndroid Build Coastguard Worker }
1846*6236dae4SAndroid Build Coastguard Worker data->state.cookielist = cl; /* store the list for later use */
1847*6236dae4SAndroid Build Coastguard Worker }
1848*6236dae4SAndroid Build Coastguard Worker else {
1849*6236dae4SAndroid Build Coastguard Worker /* clear the list of cookie files */
1850*6236dae4SAndroid Build Coastguard Worker curl_slist_free_all(data->state.cookielist);
1851*6236dae4SAndroid Build Coastguard Worker data->state.cookielist = NULL;
1852*6236dae4SAndroid Build Coastguard Worker
1853*6236dae4SAndroid Build Coastguard Worker if(!data->share || !data->share->cookies) {
1854*6236dae4SAndroid Build Coastguard Worker /* throw away all existing cookies if this is not a shared cookie
1855*6236dae4SAndroid Build Coastguard Worker container */
1856*6236dae4SAndroid Build Coastguard Worker Curl_cookie_clearall(data->cookies);
1857*6236dae4SAndroid Build Coastguard Worker Curl_cookie_cleanup(data->cookies);
1858*6236dae4SAndroid Build Coastguard Worker }
1859*6236dae4SAndroid Build Coastguard Worker /* disable the cookie engine */
1860*6236dae4SAndroid Build Coastguard Worker data->cookies = NULL;
1861*6236dae4SAndroid Build Coastguard Worker }
1862*6236dae4SAndroid Build Coastguard Worker break;
1863*6236dae4SAndroid Build Coastguard Worker
1864*6236dae4SAndroid Build Coastguard Worker case CURLOPT_COOKIEJAR:
1865*6236dae4SAndroid Build Coastguard Worker /*
1866*6236dae4SAndroid Build Coastguard Worker * Set cookie filename to dump all cookies to when we are done.
1867*6236dae4SAndroid Build Coastguard Worker */
1868*6236dae4SAndroid Build Coastguard Worker result = Curl_setstropt(&data->set.str[STRING_COOKIEJAR], ptr);
1869*6236dae4SAndroid Build Coastguard Worker if(!result) {
1870*6236dae4SAndroid Build Coastguard Worker /*
1871*6236dae4SAndroid Build Coastguard Worker * Activate the cookie parser. This may or may not already
1872*6236dae4SAndroid Build Coastguard Worker * have been made.
1873*6236dae4SAndroid Build Coastguard Worker */
1874*6236dae4SAndroid Build Coastguard Worker struct CookieInfo *newcookies =
1875*6236dae4SAndroid Build Coastguard Worker Curl_cookie_init(data, NULL, data->cookies, data->set.cookiesession);
1876*6236dae4SAndroid Build Coastguard Worker if(!newcookies)
1877*6236dae4SAndroid Build Coastguard Worker result = CURLE_OUT_OF_MEMORY;
1878*6236dae4SAndroid Build Coastguard Worker data->cookies = newcookies;
1879*6236dae4SAndroid Build Coastguard Worker }
1880*6236dae4SAndroid Build Coastguard Worker break;
1881*6236dae4SAndroid Build Coastguard Worker
1882*6236dae4SAndroid Build Coastguard Worker case CURLOPT_COOKIELIST:
1883*6236dae4SAndroid Build Coastguard Worker if(!ptr)
1884*6236dae4SAndroid Build Coastguard Worker break;
1885*6236dae4SAndroid Build Coastguard Worker
1886*6236dae4SAndroid Build Coastguard Worker if(strcasecompare(ptr, "ALL")) {
1887*6236dae4SAndroid Build Coastguard Worker /* clear all cookies */
1888*6236dae4SAndroid Build Coastguard Worker Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
1889*6236dae4SAndroid Build Coastguard Worker Curl_cookie_clearall(data->cookies);
1890*6236dae4SAndroid Build Coastguard Worker Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
1891*6236dae4SAndroid Build Coastguard Worker }
1892*6236dae4SAndroid Build Coastguard Worker else if(strcasecompare(ptr, "SESS")) {
1893*6236dae4SAndroid Build Coastguard Worker /* clear session cookies */
1894*6236dae4SAndroid Build Coastguard Worker Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
1895*6236dae4SAndroid Build Coastguard Worker Curl_cookie_clearsess(data->cookies);
1896*6236dae4SAndroid Build Coastguard Worker Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
1897*6236dae4SAndroid Build Coastguard Worker }
1898*6236dae4SAndroid Build Coastguard Worker else if(strcasecompare(ptr, "FLUSH")) {
1899*6236dae4SAndroid Build Coastguard Worker /* flush cookies to file, takes care of the locking */
1900*6236dae4SAndroid Build Coastguard Worker Curl_flush_cookies(data, FALSE);
1901*6236dae4SAndroid Build Coastguard Worker }
1902*6236dae4SAndroid Build Coastguard Worker else if(strcasecompare(ptr, "RELOAD")) {
1903*6236dae4SAndroid Build Coastguard Worker /* reload cookies from file */
1904*6236dae4SAndroid Build Coastguard Worker Curl_cookie_loadfiles(data);
1905*6236dae4SAndroid Build Coastguard Worker break;
1906*6236dae4SAndroid Build Coastguard Worker }
1907*6236dae4SAndroid Build Coastguard Worker else {
1908*6236dae4SAndroid Build Coastguard Worker if(!data->cookies) {
1909*6236dae4SAndroid Build Coastguard Worker /* if cookie engine was not running, activate it */
1910*6236dae4SAndroid Build Coastguard Worker data->cookies = Curl_cookie_init(data, NULL, NULL, TRUE);
1911*6236dae4SAndroid Build Coastguard Worker if(!data->cookies)
1912*6236dae4SAndroid Build Coastguard Worker return CURLE_OUT_OF_MEMORY;
1913*6236dae4SAndroid Build Coastguard Worker }
1914*6236dae4SAndroid Build Coastguard Worker
1915*6236dae4SAndroid Build Coastguard Worker /* general protection against mistakes and abuse */
1916*6236dae4SAndroid Build Coastguard Worker if(strlen(ptr) > CURL_MAX_INPUT_LENGTH)
1917*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
1918*6236dae4SAndroid Build Coastguard Worker
1919*6236dae4SAndroid Build Coastguard Worker Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
1920*6236dae4SAndroid Build Coastguard Worker if(checkprefix("Set-Cookie:", ptr))
1921*6236dae4SAndroid Build Coastguard Worker /* HTTP Header format line */
1922*6236dae4SAndroid Build Coastguard Worker Curl_cookie_add(data, data->cookies, TRUE, FALSE, ptr + 11, NULL,
1923*6236dae4SAndroid Build Coastguard Worker NULL, TRUE);
1924*6236dae4SAndroid Build Coastguard Worker else
1925*6236dae4SAndroid Build Coastguard Worker /* Netscape format line */
1926*6236dae4SAndroid Build Coastguard Worker Curl_cookie_add(data, data->cookies, FALSE, FALSE, ptr, NULL,
1927*6236dae4SAndroid Build Coastguard Worker NULL, TRUE);
1928*6236dae4SAndroid Build Coastguard Worker Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
1929*6236dae4SAndroid Build Coastguard Worker }
1930*6236dae4SAndroid Build Coastguard Worker break;
1931*6236dae4SAndroid Build Coastguard Worker #endif /* !CURL_DISABLE_COOKIES */
1932*6236dae4SAndroid Build Coastguard Worker
1933*6236dae4SAndroid Build Coastguard Worker #endif /* ! CURL_DISABLE_HTTP */
1934*6236dae4SAndroid Build Coastguard Worker
1935*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CUSTOMREQUEST:
1936*6236dae4SAndroid Build Coastguard Worker /*
1937*6236dae4SAndroid Build Coastguard Worker * Set a custom string to use as request
1938*6236dae4SAndroid Build Coastguard Worker */
1939*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_CUSTOMREQUEST], ptr);
1940*6236dae4SAndroid Build Coastguard Worker
1941*6236dae4SAndroid Build Coastguard Worker /* we do not set
1942*6236dae4SAndroid Build Coastguard Worker data->set.method = HTTPREQ_CUSTOM;
1943*6236dae4SAndroid Build Coastguard Worker here, we continue as if we were using the already set type
1944*6236dae4SAndroid Build Coastguard Worker and this just changes the actual request keyword */
1945*6236dae4SAndroid Build Coastguard Worker
1946*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
1947*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY:
1948*6236dae4SAndroid Build Coastguard Worker /*
1949*6236dae4SAndroid Build Coastguard Worker * Set proxy server:port to use as proxy.
1950*6236dae4SAndroid Build Coastguard Worker *
1951*6236dae4SAndroid Build Coastguard Worker * If the proxy is set to "" (and CURLOPT_SOCKS_PROXY is set to "" or NULL)
1952*6236dae4SAndroid Build Coastguard Worker * we explicitly say that we do not want to use a proxy
1953*6236dae4SAndroid Build Coastguard Worker * (even though there might be environment variables saying so).
1954*6236dae4SAndroid Build Coastguard Worker *
1955*6236dae4SAndroid Build Coastguard Worker * Setting it to NULL, means no proxy but allows the environment variables
1956*6236dae4SAndroid Build Coastguard Worker * to decide for us (if CURLOPT_SOCKS_PROXY setting it to NULL).
1957*6236dae4SAndroid Build Coastguard Worker */
1958*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_PROXY], ptr);
1959*6236dae4SAndroid Build Coastguard Worker break;
1960*6236dae4SAndroid Build Coastguard Worker
1961*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PRE_PROXY:
1962*6236dae4SAndroid Build Coastguard Worker /*
1963*6236dae4SAndroid Build Coastguard Worker * Set proxy server:port to use as SOCKS proxy.
1964*6236dae4SAndroid Build Coastguard Worker *
1965*6236dae4SAndroid Build Coastguard Worker * If the proxy is set to "" or NULL we explicitly say that we do not want
1966*6236dae4SAndroid Build Coastguard Worker * to use the socks proxy.
1967*6236dae4SAndroid Build Coastguard Worker */
1968*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_PRE_PROXY], ptr);
1969*6236dae4SAndroid Build Coastguard Worker #endif /* CURL_DISABLE_PROXY */
1970*6236dae4SAndroid Build Coastguard Worker
1971*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
1972*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SOCKS5_GSSAPI_SERVICE:
1973*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_SERVICE_NAME:
1974*6236dae4SAndroid Build Coastguard Worker /*
1975*6236dae4SAndroid Build Coastguard Worker * Set proxy authentication service name for Kerberos 5 and SPNEGO
1976*6236dae4SAndroid Build Coastguard Worker */
1977*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_PROXY_SERVICE_NAME], ptr);
1978*6236dae4SAndroid Build Coastguard Worker #endif
1979*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SERVICE_NAME:
1980*6236dae4SAndroid Build Coastguard Worker /*
1981*6236dae4SAndroid Build Coastguard Worker * Set authentication service name for DIGEST-MD5, Kerberos 5 and SPNEGO
1982*6236dae4SAndroid Build Coastguard Worker */
1983*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SERVICE_NAME], ptr);
1984*6236dae4SAndroid Build Coastguard Worker break;
1985*6236dae4SAndroid Build Coastguard Worker
1986*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HEADERDATA:
1987*6236dae4SAndroid Build Coastguard Worker /*
1988*6236dae4SAndroid Build Coastguard Worker * Custom pointer to pass the header write callback function
1989*6236dae4SAndroid Build Coastguard Worker */
1990*6236dae4SAndroid Build Coastguard Worker data->set.writeheader = (void *)ptr;
1991*6236dae4SAndroid Build Coastguard Worker break;
1992*6236dae4SAndroid Build Coastguard Worker case CURLOPT_READDATA:
1993*6236dae4SAndroid Build Coastguard Worker /*
1994*6236dae4SAndroid Build Coastguard Worker * FILE pointer to read the file to be uploaded from. Or possibly used as
1995*6236dae4SAndroid Build Coastguard Worker * argument to the read callback.
1996*6236dae4SAndroid Build Coastguard Worker */
1997*6236dae4SAndroid Build Coastguard Worker data->set.in_set = (void *)ptr;
1998*6236dae4SAndroid Build Coastguard Worker break;
1999*6236dae4SAndroid Build Coastguard Worker case CURLOPT_WRITEDATA:
2000*6236dae4SAndroid Build Coastguard Worker /*
2001*6236dae4SAndroid Build Coastguard Worker * FILE pointer to write to. Or possibly used as argument to the write
2002*6236dae4SAndroid Build Coastguard Worker * callback.
2003*6236dae4SAndroid Build Coastguard Worker */
2004*6236dae4SAndroid Build Coastguard Worker data->set.out = (void *)ptr;
2005*6236dae4SAndroid Build Coastguard Worker break;
2006*6236dae4SAndroid Build Coastguard Worker case CURLOPT_DEBUGDATA:
2007*6236dae4SAndroid Build Coastguard Worker /*
2008*6236dae4SAndroid Build Coastguard Worker * Set to a void * that should receive all error writes. This
2009*6236dae4SAndroid Build Coastguard Worker * defaults to CURLOPT_STDERR for normal operations.
2010*6236dae4SAndroid Build Coastguard Worker */
2011*6236dae4SAndroid Build Coastguard Worker data->set.debugdata = (void *)ptr;
2012*6236dae4SAndroid Build Coastguard Worker break;
2013*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROGRESSDATA:
2014*6236dae4SAndroid Build Coastguard Worker /*
2015*6236dae4SAndroid Build Coastguard Worker * Custom client data to pass to the progress callback
2016*6236dae4SAndroid Build Coastguard Worker */
2017*6236dae4SAndroid Build Coastguard Worker data->set.progress_client = (void *)ptr;
2018*6236dae4SAndroid Build Coastguard Worker break;
2019*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SEEKDATA:
2020*6236dae4SAndroid Build Coastguard Worker /*
2021*6236dae4SAndroid Build Coastguard Worker * Seek control callback. Might be NULL.
2022*6236dae4SAndroid Build Coastguard Worker */
2023*6236dae4SAndroid Build Coastguard Worker data->set.seek_client = (void *)ptr;
2024*6236dae4SAndroid Build Coastguard Worker break;
2025*6236dae4SAndroid Build Coastguard Worker case CURLOPT_IOCTLDATA:
2026*6236dae4SAndroid Build Coastguard Worker /*
2027*6236dae4SAndroid Build Coastguard Worker * I/O control data pointer. Might be NULL.
2028*6236dae4SAndroid Build Coastguard Worker */
2029*6236dae4SAndroid Build Coastguard Worker data->set.ioctl_client = (void *)ptr;
2030*6236dae4SAndroid Build Coastguard Worker break;
2031*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSL_CTX_DATA:
2032*6236dae4SAndroid Build Coastguard Worker /*
2033*6236dae4SAndroid Build Coastguard Worker * Set a SSL_CTX callback parameter pointer
2034*6236dae4SAndroid Build Coastguard Worker */
2035*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSL
2036*6236dae4SAndroid Build Coastguard Worker if(Curl_ssl_supports(data, SSLSUPP_SSL_CTX))
2037*6236dae4SAndroid Build Coastguard Worker data->set.ssl.fsslctxp = (void *)ptr;
2038*6236dae4SAndroid Build Coastguard Worker else
2039*6236dae4SAndroid Build Coastguard Worker #endif
2040*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
2041*6236dae4SAndroid Build Coastguard Worker break;
2042*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SOCKOPTDATA:
2043*6236dae4SAndroid Build Coastguard Worker /*
2044*6236dae4SAndroid Build Coastguard Worker * socket callback data pointer. Might be NULL.
2045*6236dae4SAndroid Build Coastguard Worker */
2046*6236dae4SAndroid Build Coastguard Worker data->set.sockopt_client = (void *)ptr;
2047*6236dae4SAndroid Build Coastguard Worker break;
2048*6236dae4SAndroid Build Coastguard Worker case CURLOPT_OPENSOCKETDATA:
2049*6236dae4SAndroid Build Coastguard Worker /*
2050*6236dae4SAndroid Build Coastguard Worker * socket callback data pointer. Might be NULL.
2051*6236dae4SAndroid Build Coastguard Worker */
2052*6236dae4SAndroid Build Coastguard Worker data->set.opensocket_client = (void *)ptr;
2053*6236dae4SAndroid Build Coastguard Worker break;
2054*6236dae4SAndroid Build Coastguard Worker case CURLOPT_RESOLVER_START_DATA:
2055*6236dae4SAndroid Build Coastguard Worker /*
2056*6236dae4SAndroid Build Coastguard Worker * resolver start callback data pointer. Might be NULL.
2057*6236dae4SAndroid Build Coastguard Worker */
2058*6236dae4SAndroid Build Coastguard Worker data->set.resolver_start_client = (void *)ptr;
2059*6236dae4SAndroid Build Coastguard Worker break;
2060*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CLOSESOCKETDATA:
2061*6236dae4SAndroid Build Coastguard Worker /*
2062*6236dae4SAndroid Build Coastguard Worker * socket callback data pointer. Might be NULL.
2063*6236dae4SAndroid Build Coastguard Worker */
2064*6236dae4SAndroid Build Coastguard Worker data->set.closesocket_client = (void *)ptr;
2065*6236dae4SAndroid Build Coastguard Worker break;
2066*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TRAILERDATA:
2067*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_HTTP
2068*6236dae4SAndroid Build Coastguard Worker data->set.trailer_data = (void *)ptr;
2069*6236dae4SAndroid Build Coastguard Worker #endif
2070*6236dae4SAndroid Build Coastguard Worker break;
2071*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PREREQDATA:
2072*6236dae4SAndroid Build Coastguard Worker data->set.prereq_userp = (void *)ptr;
2073*6236dae4SAndroid Build Coastguard Worker break;
2074*6236dae4SAndroid Build Coastguard Worker
2075*6236dae4SAndroid Build Coastguard Worker case CURLOPT_ERRORBUFFER:
2076*6236dae4SAndroid Build Coastguard Worker /*
2077*6236dae4SAndroid Build Coastguard Worker * Error buffer provided by the caller to get the human readable error
2078*6236dae4SAndroid Build Coastguard Worker * string in.
2079*6236dae4SAndroid Build Coastguard Worker */
2080*6236dae4SAndroid Build Coastguard Worker data->set.errorbuffer = ptr;
2081*6236dae4SAndroid Build Coastguard Worker break;
2082*6236dae4SAndroid Build Coastguard Worker
2083*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_FTP
2084*6236dae4SAndroid Build Coastguard Worker case CURLOPT_FTPPORT:
2085*6236dae4SAndroid Build Coastguard Worker /*
2086*6236dae4SAndroid Build Coastguard Worker * Use FTP PORT, this also specifies which IP address to use
2087*6236dae4SAndroid Build Coastguard Worker */
2088*6236dae4SAndroid Build Coastguard Worker result = Curl_setstropt(&data->set.str[STRING_FTPPORT], ptr);
2089*6236dae4SAndroid Build Coastguard Worker data->set.ftp_use_port = !!(data->set.str[STRING_FTPPORT]);
2090*6236dae4SAndroid Build Coastguard Worker break;
2091*6236dae4SAndroid Build Coastguard Worker
2092*6236dae4SAndroid Build Coastguard Worker case CURLOPT_FTP_ACCOUNT:
2093*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_FTP_ACCOUNT], ptr);
2094*6236dae4SAndroid Build Coastguard Worker
2095*6236dae4SAndroid Build Coastguard Worker case CURLOPT_FTP_ALTERNATIVE_TO_USER:
2096*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_FTP_ALTERNATIVE_TO_USER], ptr);
2097*6236dae4SAndroid Build Coastguard Worker
2098*6236dae4SAndroid Build Coastguard Worker #ifdef HAVE_GSSAPI
2099*6236dae4SAndroid Build Coastguard Worker case CURLOPT_KRBLEVEL:
2100*6236dae4SAndroid Build Coastguard Worker /*
2101*6236dae4SAndroid Build Coastguard Worker * A string that defines the kerberos security level.
2102*6236dae4SAndroid Build Coastguard Worker */
2103*6236dae4SAndroid Build Coastguard Worker result = Curl_setstropt(&data->set.str[STRING_KRB_LEVEL], ptr);
2104*6236dae4SAndroid Build Coastguard Worker data->set.krb = !!(data->set.str[STRING_KRB_LEVEL]);
2105*6236dae4SAndroid Build Coastguard Worker break;
2106*6236dae4SAndroid Build Coastguard Worker #endif
2107*6236dae4SAndroid Build Coastguard Worker #endif
2108*6236dae4SAndroid Build Coastguard Worker case CURLOPT_URL:
2109*6236dae4SAndroid Build Coastguard Worker /*
2110*6236dae4SAndroid Build Coastguard Worker * The URL to fetch.
2111*6236dae4SAndroid Build Coastguard Worker */
2112*6236dae4SAndroid Build Coastguard Worker if(data->state.url_alloc) {
2113*6236dae4SAndroid Build Coastguard Worker /* the already set URL is allocated, free it first! */
2114*6236dae4SAndroid Build Coastguard Worker Curl_safefree(data->state.url);
2115*6236dae4SAndroid Build Coastguard Worker data->state.url_alloc = FALSE;
2116*6236dae4SAndroid Build Coastguard Worker }
2117*6236dae4SAndroid Build Coastguard Worker result = Curl_setstropt(&data->set.str[STRING_SET_URL], ptr);
2118*6236dae4SAndroid Build Coastguard Worker data->state.url = data->set.str[STRING_SET_URL];
2119*6236dae4SAndroid Build Coastguard Worker break;
2120*6236dae4SAndroid Build Coastguard Worker
2121*6236dae4SAndroid Build Coastguard Worker case CURLOPT_USERPWD:
2122*6236dae4SAndroid Build Coastguard Worker /*
2123*6236dae4SAndroid Build Coastguard Worker * user:password to use in the operation
2124*6236dae4SAndroid Build Coastguard Worker */
2125*6236dae4SAndroid Build Coastguard Worker return setstropt_userpwd(ptr, &data->set.str[STRING_USERNAME],
2126*6236dae4SAndroid Build Coastguard Worker &data->set.str[STRING_PASSWORD]);
2127*6236dae4SAndroid Build Coastguard Worker
2128*6236dae4SAndroid Build Coastguard Worker case CURLOPT_USERNAME:
2129*6236dae4SAndroid Build Coastguard Worker /*
2130*6236dae4SAndroid Build Coastguard Worker * authentication username to use in the operation
2131*6236dae4SAndroid Build Coastguard Worker */
2132*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_USERNAME], ptr);
2133*6236dae4SAndroid Build Coastguard Worker
2134*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PASSWORD:
2135*6236dae4SAndroid Build Coastguard Worker /*
2136*6236dae4SAndroid Build Coastguard Worker * authentication password to use in the operation
2137*6236dae4SAndroid Build Coastguard Worker */
2138*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_PASSWORD], ptr);
2139*6236dae4SAndroid Build Coastguard Worker
2140*6236dae4SAndroid Build Coastguard Worker case CURLOPT_LOGIN_OPTIONS:
2141*6236dae4SAndroid Build Coastguard Worker /*
2142*6236dae4SAndroid Build Coastguard Worker * authentication options to use in the operation
2143*6236dae4SAndroid Build Coastguard Worker */
2144*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_OPTIONS], ptr);
2145*6236dae4SAndroid Build Coastguard Worker
2146*6236dae4SAndroid Build Coastguard Worker case CURLOPT_XOAUTH2_BEARER:
2147*6236dae4SAndroid Build Coastguard Worker /*
2148*6236dae4SAndroid Build Coastguard Worker * OAuth 2.0 bearer token to use in the operation
2149*6236dae4SAndroid Build Coastguard Worker */
2150*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_BEARER], ptr);
2151*6236dae4SAndroid Build Coastguard Worker
2152*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
2153*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXYUSERPWD: {
2154*6236dae4SAndroid Build Coastguard Worker /*
2155*6236dae4SAndroid Build Coastguard Worker * user:password needed to use the proxy
2156*6236dae4SAndroid Build Coastguard Worker */
2157*6236dae4SAndroid Build Coastguard Worker char *u = NULL;
2158*6236dae4SAndroid Build Coastguard Worker char *p = NULL;
2159*6236dae4SAndroid Build Coastguard Worker result = setstropt_userpwd(ptr, &u, &p);
2160*6236dae4SAndroid Build Coastguard Worker
2161*6236dae4SAndroid Build Coastguard Worker /* URL decode the components */
2162*6236dae4SAndroid Build Coastguard Worker if(!result && u)
2163*6236dae4SAndroid Build Coastguard Worker result = Curl_urldecode(u, 0, &data->set.str[STRING_PROXYUSERNAME], NULL,
2164*6236dae4SAndroid Build Coastguard Worker REJECT_ZERO);
2165*6236dae4SAndroid Build Coastguard Worker if(!result && p)
2166*6236dae4SAndroid Build Coastguard Worker result = Curl_urldecode(p, 0, &data->set.str[STRING_PROXYPASSWORD], NULL,
2167*6236dae4SAndroid Build Coastguard Worker REJECT_ZERO);
2168*6236dae4SAndroid Build Coastguard Worker free(u);
2169*6236dae4SAndroid Build Coastguard Worker free(p);
2170*6236dae4SAndroid Build Coastguard Worker }
2171*6236dae4SAndroid Build Coastguard Worker break;
2172*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXYUSERNAME:
2173*6236dae4SAndroid Build Coastguard Worker /*
2174*6236dae4SAndroid Build Coastguard Worker * authentication username to use in the operation
2175*6236dae4SAndroid Build Coastguard Worker */
2176*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_PROXYUSERNAME], ptr);
2177*6236dae4SAndroid Build Coastguard Worker
2178*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXYPASSWORD:
2179*6236dae4SAndroid Build Coastguard Worker /*
2180*6236dae4SAndroid Build Coastguard Worker * authentication password to use in the operation
2181*6236dae4SAndroid Build Coastguard Worker */
2182*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_PROXYPASSWORD], ptr);
2183*6236dae4SAndroid Build Coastguard Worker
2184*6236dae4SAndroid Build Coastguard Worker case CURLOPT_NOPROXY:
2185*6236dae4SAndroid Build Coastguard Worker /*
2186*6236dae4SAndroid Build Coastguard Worker * proxy exception list
2187*6236dae4SAndroid Build Coastguard Worker */
2188*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_NOPROXY], ptr);
2189*6236dae4SAndroid Build Coastguard Worker #endif
2190*6236dae4SAndroid Build Coastguard Worker
2191*6236dae4SAndroid Build Coastguard Worker case CURLOPT_RANGE:
2192*6236dae4SAndroid Build Coastguard Worker /*
2193*6236dae4SAndroid Build Coastguard Worker * What range of the file you want to transfer
2194*6236dae4SAndroid Build Coastguard Worker */
2195*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SET_RANGE], ptr);
2196*6236dae4SAndroid Build Coastguard Worker
2197*6236dae4SAndroid Build Coastguard Worker #endif /* ! CURL_DISABLE_PROXY */
2198*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CURLU:
2199*6236dae4SAndroid Build Coastguard Worker /*
2200*6236dae4SAndroid Build Coastguard Worker * pass CURLU to set URL
2201*6236dae4SAndroid Build Coastguard Worker */
2202*6236dae4SAndroid Build Coastguard Worker data->set.uh = (CURLU *)ptr;
2203*6236dae4SAndroid Build Coastguard Worker break;
2204*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSLCERT:
2205*6236dae4SAndroid Build Coastguard Worker /*
2206*6236dae4SAndroid Build Coastguard Worker * String that holds filename of the SSL certificate to use
2207*6236dae4SAndroid Build Coastguard Worker */
2208*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_CERT], ptr);
2209*6236dae4SAndroid Build Coastguard Worker
2210*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
2211*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_SSLCERT:
2212*6236dae4SAndroid Build Coastguard Worker /*
2213*6236dae4SAndroid Build Coastguard Worker * String that holds filename of the SSL certificate to use for proxy
2214*6236dae4SAndroid Build Coastguard Worker */
2215*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_CERT_PROXY], ptr);
2216*6236dae4SAndroid Build Coastguard Worker
2217*6236dae4SAndroid Build Coastguard Worker #endif
2218*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSLCERTTYPE:
2219*6236dae4SAndroid Build Coastguard Worker /*
2220*6236dae4SAndroid Build Coastguard Worker * String that holds file type of the SSL certificate to use
2221*6236dae4SAndroid Build Coastguard Worker */
2222*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_CERT_TYPE], ptr);
2223*6236dae4SAndroid Build Coastguard Worker
2224*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
2225*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_SSLCERTTYPE:
2226*6236dae4SAndroid Build Coastguard Worker /*
2227*6236dae4SAndroid Build Coastguard Worker * String that holds file type of the SSL certificate to use for proxy
2228*6236dae4SAndroid Build Coastguard Worker */
2229*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_CERT_TYPE_PROXY], ptr);
2230*6236dae4SAndroid Build Coastguard Worker #endif
2231*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSLKEY:
2232*6236dae4SAndroid Build Coastguard Worker /*
2233*6236dae4SAndroid Build Coastguard Worker * String that holds filename of the SSL key to use
2234*6236dae4SAndroid Build Coastguard Worker */
2235*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_KEY], ptr);
2236*6236dae4SAndroid Build Coastguard Worker
2237*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
2238*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_SSLKEY:
2239*6236dae4SAndroid Build Coastguard Worker /*
2240*6236dae4SAndroid Build Coastguard Worker * String that holds filename of the SSL key to use for proxy
2241*6236dae4SAndroid Build Coastguard Worker */
2242*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_KEY_PROXY], ptr);
2243*6236dae4SAndroid Build Coastguard Worker
2244*6236dae4SAndroid Build Coastguard Worker #endif
2245*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSLKEYTYPE:
2246*6236dae4SAndroid Build Coastguard Worker /*
2247*6236dae4SAndroid Build Coastguard Worker * String that holds file type of the SSL key to use
2248*6236dae4SAndroid Build Coastguard Worker */
2249*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_KEY_TYPE], ptr);
2250*6236dae4SAndroid Build Coastguard Worker break;
2251*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
2252*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_SSLKEYTYPE:
2253*6236dae4SAndroid Build Coastguard Worker /*
2254*6236dae4SAndroid Build Coastguard Worker * String that holds file type of the SSL key to use for proxy
2255*6236dae4SAndroid Build Coastguard Worker */
2256*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_KEY_TYPE_PROXY], ptr);
2257*6236dae4SAndroid Build Coastguard Worker
2258*6236dae4SAndroid Build Coastguard Worker #endif
2259*6236dae4SAndroid Build Coastguard Worker case CURLOPT_KEYPASSWD:
2260*6236dae4SAndroid Build Coastguard Worker /*
2261*6236dae4SAndroid Build Coastguard Worker * String that holds the SSL or SSH private key password.
2262*6236dae4SAndroid Build Coastguard Worker */
2263*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_KEY_PASSWD], ptr);
2264*6236dae4SAndroid Build Coastguard Worker
2265*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
2266*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_KEYPASSWD:
2267*6236dae4SAndroid Build Coastguard Worker /*
2268*6236dae4SAndroid Build Coastguard Worker * String that holds the SSL private key password for proxy.
2269*6236dae4SAndroid Build Coastguard Worker */
2270*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_KEY_PASSWD_PROXY], ptr);
2271*6236dae4SAndroid Build Coastguard Worker #endif
2272*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSLENGINE:
2273*6236dae4SAndroid Build Coastguard Worker /*
2274*6236dae4SAndroid Build Coastguard Worker * String that holds the SSL crypto engine.
2275*6236dae4SAndroid Build Coastguard Worker */
2276*6236dae4SAndroid Build Coastguard Worker if(ptr && ptr[0]) {
2277*6236dae4SAndroid Build Coastguard Worker result = Curl_setstropt(&data->set.str[STRING_SSL_ENGINE], ptr);
2278*6236dae4SAndroid Build Coastguard Worker if(!result) {
2279*6236dae4SAndroid Build Coastguard Worker result = Curl_ssl_set_engine(data, ptr);
2280*6236dae4SAndroid Build Coastguard Worker }
2281*6236dae4SAndroid Build Coastguard Worker }
2282*6236dae4SAndroid Build Coastguard Worker break;
2283*6236dae4SAndroid Build Coastguard Worker
2284*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
2285*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HAPROXY_CLIENT_IP:
2286*6236dae4SAndroid Build Coastguard Worker /*
2287*6236dae4SAndroid Build Coastguard Worker * Set the client IP to send through HAProxy PROXY protocol
2288*6236dae4SAndroid Build Coastguard Worker */
2289*6236dae4SAndroid Build Coastguard Worker result = Curl_setstropt(&data->set.str[STRING_HAPROXY_CLIENT_IP], ptr);
2290*6236dae4SAndroid Build Coastguard Worker /* enable the HAProxy protocol */
2291*6236dae4SAndroid Build Coastguard Worker data->set.haproxyprotocol = TRUE;
2292*6236dae4SAndroid Build Coastguard Worker break;
2293*6236dae4SAndroid Build Coastguard Worker #endif
2294*6236dae4SAndroid Build Coastguard Worker case CURLOPT_INTERFACE:
2295*6236dae4SAndroid Build Coastguard Worker /*
2296*6236dae4SAndroid Build Coastguard Worker * Set what interface or address/hostname to bind the socket to when
2297*6236dae4SAndroid Build Coastguard Worker * performing an operation and thus what from-IP your connection will use.
2298*6236dae4SAndroid Build Coastguard Worker */
2299*6236dae4SAndroid Build Coastguard Worker return setstropt_interface(ptr,
2300*6236dae4SAndroid Build Coastguard Worker &data->set.str[STRING_DEVICE],
2301*6236dae4SAndroid Build Coastguard Worker &data->set.str[STRING_INTERFACE],
2302*6236dae4SAndroid Build Coastguard Worker &data->set.str[STRING_BINDHOST]);
2303*6236dae4SAndroid Build Coastguard Worker
2304*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PINNEDPUBLICKEY:
2305*6236dae4SAndroid Build Coastguard Worker /*
2306*6236dae4SAndroid Build Coastguard Worker * Set pinned public key for SSL connection.
2307*6236dae4SAndroid Build Coastguard Worker * Specify filename of the public key in DER format.
2308*6236dae4SAndroid Build Coastguard Worker */
2309*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSL
2310*6236dae4SAndroid Build Coastguard Worker if(Curl_ssl_supports(data, SSLSUPP_PINNEDPUBKEY))
2311*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSL_PINNEDPUBLICKEY], ptr);
2312*6236dae4SAndroid Build Coastguard Worker #endif
2313*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
2314*6236dae4SAndroid Build Coastguard Worker
2315*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
2316*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_PINNEDPUBLICKEY:
2317*6236dae4SAndroid Build Coastguard Worker /*
2318*6236dae4SAndroid Build Coastguard Worker * Set pinned public key for SSL connection.
2319*6236dae4SAndroid Build Coastguard Worker * Specify filename of the public key in DER format.
2320*6236dae4SAndroid Build Coastguard Worker */
2321*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSL
2322*6236dae4SAndroid Build Coastguard Worker if(Curl_ssl_supports(data, SSLSUPP_PINNEDPUBKEY))
2323*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY],
2324*6236dae4SAndroid Build Coastguard Worker ptr);
2325*6236dae4SAndroid Build Coastguard Worker #endif
2326*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
2327*6236dae4SAndroid Build Coastguard Worker #endif
2328*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CAINFO:
2329*6236dae4SAndroid Build Coastguard Worker /*
2330*6236dae4SAndroid Build Coastguard Worker * Set CA info for SSL connection. Specify filename of the CA certificate
2331*6236dae4SAndroid Build Coastguard Worker */
2332*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSL_CAFILE], ptr);
2333*6236dae4SAndroid Build Coastguard Worker
2334*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
2335*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_CAINFO:
2336*6236dae4SAndroid Build Coastguard Worker /*
2337*6236dae4SAndroid Build Coastguard Worker * Set CA info SSL connection for proxy. Specify filename of the
2338*6236dae4SAndroid Build Coastguard Worker * CA certificate
2339*6236dae4SAndroid Build Coastguard Worker */
2340*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSL_CAFILE_PROXY], ptr);
2341*6236dae4SAndroid Build Coastguard Worker #endif
2342*6236dae4SAndroid Build Coastguard Worker
2343*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CAPATH:
2344*6236dae4SAndroid Build Coastguard Worker /*
2345*6236dae4SAndroid Build Coastguard Worker * Set CA path info for SSL connection. Specify directory name of the CA
2346*6236dae4SAndroid Build Coastguard Worker * certificates which have been prepared using openssl c_rehash utility.
2347*6236dae4SAndroid Build Coastguard Worker */
2348*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSL
2349*6236dae4SAndroid Build Coastguard Worker if(Curl_ssl_supports(data, SSLSUPP_CA_PATH))
2350*6236dae4SAndroid Build Coastguard Worker /* This does not work on Windows. */
2351*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSL_CAPATH], ptr);
2352*6236dae4SAndroid Build Coastguard Worker #endif
2353*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
2354*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
2355*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_CAPATH:
2356*6236dae4SAndroid Build Coastguard Worker /*
2357*6236dae4SAndroid Build Coastguard Worker * Set CA path info for SSL connection proxy. Specify directory name of the
2358*6236dae4SAndroid Build Coastguard Worker * CA certificates which have been prepared using openssl c_rehash utility.
2359*6236dae4SAndroid Build Coastguard Worker */
2360*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSL
2361*6236dae4SAndroid Build Coastguard Worker if(Curl_ssl_supports(data, SSLSUPP_CA_PATH))
2362*6236dae4SAndroid Build Coastguard Worker /* This does not work on Windows. */
2363*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSL_CAPATH_PROXY], ptr);
2364*6236dae4SAndroid Build Coastguard Worker #endif
2365*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
2366*6236dae4SAndroid Build Coastguard Worker #endif
2367*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CRLFILE:
2368*6236dae4SAndroid Build Coastguard Worker /*
2369*6236dae4SAndroid Build Coastguard Worker * Set CRL file info for SSL connection. Specify filename of the CRL
2370*6236dae4SAndroid Build Coastguard Worker * to check certificates revocation
2371*6236dae4SAndroid Build Coastguard Worker */
2372*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSL_CRLFILE], ptr);
2373*6236dae4SAndroid Build Coastguard Worker
2374*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
2375*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_CRLFILE:
2376*6236dae4SAndroid Build Coastguard Worker /*
2377*6236dae4SAndroid Build Coastguard Worker * Set CRL file info for SSL connection for proxy. Specify filename of the
2378*6236dae4SAndroid Build Coastguard Worker * CRL to check certificates revocation
2379*6236dae4SAndroid Build Coastguard Worker */
2380*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSL_CRLFILE_PROXY], ptr);
2381*6236dae4SAndroid Build Coastguard Worker #endif
2382*6236dae4SAndroid Build Coastguard Worker case CURLOPT_ISSUERCERT:
2383*6236dae4SAndroid Build Coastguard Worker /*
2384*6236dae4SAndroid Build Coastguard Worker * Set Issuer certificate file
2385*6236dae4SAndroid Build Coastguard Worker * to check certificates issuer
2386*6236dae4SAndroid Build Coastguard Worker */
2387*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSL_ISSUERCERT], ptr);
2388*6236dae4SAndroid Build Coastguard Worker
2389*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
2390*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_ISSUERCERT:
2391*6236dae4SAndroid Build Coastguard Worker /*
2392*6236dae4SAndroid Build Coastguard Worker * Set Issuer certificate file
2393*6236dae4SAndroid Build Coastguard Worker * to check certificates issuer
2394*6236dae4SAndroid Build Coastguard Worker */
2395*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSL_ISSUERCERT_PROXY], ptr);
2396*6236dae4SAndroid Build Coastguard Worker
2397*6236dae4SAndroid Build Coastguard Worker #endif
2398*6236dae4SAndroid Build Coastguard Worker
2399*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PRIVATE:
2400*6236dae4SAndroid Build Coastguard Worker /*
2401*6236dae4SAndroid Build Coastguard Worker * Set private data pointer.
2402*6236dae4SAndroid Build Coastguard Worker */
2403*6236dae4SAndroid Build Coastguard Worker data->set.private_data = (void *)ptr;
2404*6236dae4SAndroid Build Coastguard Worker break;
2405*6236dae4SAndroid Build Coastguard Worker
2406*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSL
2407*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSL_EC_CURVES:
2408*6236dae4SAndroid Build Coastguard Worker /*
2409*6236dae4SAndroid Build Coastguard Worker * Set accepted curves in SSL connection setup.
2410*6236dae4SAndroid Build Coastguard Worker * Specify colon-delimited list of curve algorithm names.
2411*6236dae4SAndroid Build Coastguard Worker */
2412*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSL_EC_CURVES], ptr);
2413*6236dae4SAndroid Build Coastguard Worker #endif
2414*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSH
2415*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSH_PUBLIC_KEYFILE:
2416*6236dae4SAndroid Build Coastguard Worker /*
2417*6236dae4SAndroid Build Coastguard Worker * Use this file instead of the $HOME/.ssh/id_dsa.pub file
2418*6236dae4SAndroid Build Coastguard Worker */
2419*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSH_PUBLIC_KEY], ptr);
2420*6236dae4SAndroid Build Coastguard Worker
2421*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSH_PRIVATE_KEYFILE:
2422*6236dae4SAndroid Build Coastguard Worker /*
2423*6236dae4SAndroid Build Coastguard Worker * Use this file instead of the $HOME/.ssh/id_dsa file
2424*6236dae4SAndroid Build Coastguard Worker */
2425*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSH_PRIVATE_KEY], ptr);
2426*6236dae4SAndroid Build Coastguard Worker
2427*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSH_HOST_PUBLIC_KEY_MD5:
2428*6236dae4SAndroid Build Coastguard Worker /*
2429*6236dae4SAndroid Build Coastguard Worker * Option to allow for the MD5 of the host public key to be checked
2430*6236dae4SAndroid Build Coastguard Worker * for validation purposes.
2431*6236dae4SAndroid Build Coastguard Worker */
2432*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSH_HOST_PUBLIC_KEY_MD5], ptr);
2433*6236dae4SAndroid Build Coastguard Worker
2434*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSH_KNOWNHOSTS:
2435*6236dae4SAndroid Build Coastguard Worker /*
2436*6236dae4SAndroid Build Coastguard Worker * Store the filename to read known hosts from.
2437*6236dae4SAndroid Build Coastguard Worker */
2438*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSH_KNOWNHOSTS], ptr);
2439*6236dae4SAndroid Build Coastguard Worker
2440*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSH_KEYDATA:
2441*6236dae4SAndroid Build Coastguard Worker /*
2442*6236dae4SAndroid Build Coastguard Worker * Custom client data to pass to the SSH keyfunc callback
2443*6236dae4SAndroid Build Coastguard Worker */
2444*6236dae4SAndroid Build Coastguard Worker data->set.ssh_keyfunc_userp = (void *)ptr;
2445*6236dae4SAndroid Build Coastguard Worker break;
2446*6236dae4SAndroid Build Coastguard Worker #ifdef USE_LIBSSH2
2447*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256:
2448*6236dae4SAndroid Build Coastguard Worker /*
2449*6236dae4SAndroid Build Coastguard Worker * Option to allow for the SHA256 of the host public key to be checked
2450*6236dae4SAndroid Build Coastguard Worker * for validation purposes.
2451*6236dae4SAndroid Build Coastguard Worker */
2452*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SSH_HOST_PUBLIC_KEY_SHA256],
2453*6236dae4SAndroid Build Coastguard Worker ptr);
2454*6236dae4SAndroid Build Coastguard Worker
2455*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSH_HOSTKEYDATA:
2456*6236dae4SAndroid Build Coastguard Worker /*
2457*6236dae4SAndroid Build Coastguard Worker * Custom client data to pass to the SSH keyfunc callback
2458*6236dae4SAndroid Build Coastguard Worker */
2459*6236dae4SAndroid Build Coastguard Worker data->set.ssh_hostkeyfunc_userp = (void *)ptr;
2460*6236dae4SAndroid Build Coastguard Worker break;
2461*6236dae4SAndroid Build Coastguard Worker #endif /* USE_LIBSSH2 */
2462*6236dae4SAndroid Build Coastguard Worker #endif /* USE_SSH */
2463*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROTOCOLS_STR:
2464*6236dae4SAndroid Build Coastguard Worker if(ptr)
2465*6236dae4SAndroid Build Coastguard Worker return protocol2num(ptr, &data->set.allowed_protocols);
2466*6236dae4SAndroid Build Coastguard Worker /* make a NULL argument reset to default */
2467*6236dae4SAndroid Build Coastguard Worker data->set.allowed_protocols = (curl_prot_t) CURLPROTO_ALL;
2468*6236dae4SAndroid Build Coastguard Worker break;
2469*6236dae4SAndroid Build Coastguard Worker
2470*6236dae4SAndroid Build Coastguard Worker case CURLOPT_REDIR_PROTOCOLS_STR:
2471*6236dae4SAndroid Build Coastguard Worker if(ptr)
2472*6236dae4SAndroid Build Coastguard Worker return protocol2num(ptr, &data->set.redir_protocols);
2473*6236dae4SAndroid Build Coastguard Worker /* make a NULL argument reset to default */
2474*6236dae4SAndroid Build Coastguard Worker data->set.redir_protocols = (curl_prot_t) CURLPROTO_REDIR;
2475*6236dae4SAndroid Build Coastguard Worker break;
2476*6236dae4SAndroid Build Coastguard Worker
2477*6236dae4SAndroid Build Coastguard Worker case CURLOPT_DEFAULT_PROTOCOL:
2478*6236dae4SAndroid Build Coastguard Worker /* Set the protocol to use when the URL does not include any protocol */
2479*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_DEFAULT_PROTOCOL], ptr);
2480*6236dae4SAndroid Build Coastguard Worker
2481*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_SMTP
2482*6236dae4SAndroid Build Coastguard Worker case CURLOPT_MAIL_FROM:
2483*6236dae4SAndroid Build Coastguard Worker /* Set the SMTP mail originator */
2484*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_MAIL_FROM], ptr);
2485*6236dae4SAndroid Build Coastguard Worker
2486*6236dae4SAndroid Build Coastguard Worker case CURLOPT_MAIL_AUTH:
2487*6236dae4SAndroid Build Coastguard Worker /* Set the SMTP auth originator */
2488*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_MAIL_AUTH], ptr);
2489*6236dae4SAndroid Build Coastguard Worker #endif
2490*6236dae4SAndroid Build Coastguard Worker
2491*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SASL_AUTHZID:
2492*6236dae4SAndroid Build Coastguard Worker /* Authorization identity (identity to act as) */
2493*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_SASL_AUTHZID], ptr);
2494*6236dae4SAndroid Build Coastguard Worker
2495*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_RTSP
2496*6236dae4SAndroid Build Coastguard Worker case CURLOPT_RTSP_SESSION_ID:
2497*6236dae4SAndroid Build Coastguard Worker /*
2498*6236dae4SAndroid Build Coastguard Worker * Set the RTSP Session ID manually. Useful if the application is
2499*6236dae4SAndroid Build Coastguard Worker * resuming a previously established RTSP session
2500*6236dae4SAndroid Build Coastguard Worker */
2501*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_RTSP_SESSION_ID], ptr);
2502*6236dae4SAndroid Build Coastguard Worker
2503*6236dae4SAndroid Build Coastguard Worker case CURLOPT_RTSP_STREAM_URI:
2504*6236dae4SAndroid Build Coastguard Worker /*
2505*6236dae4SAndroid Build Coastguard Worker * Set the Stream URI for the RTSP request. Unless the request is
2506*6236dae4SAndroid Build Coastguard Worker * for generic server options, the application will need to set this.
2507*6236dae4SAndroid Build Coastguard Worker */
2508*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_RTSP_STREAM_URI], ptr);
2509*6236dae4SAndroid Build Coastguard Worker break;
2510*6236dae4SAndroid Build Coastguard Worker
2511*6236dae4SAndroid Build Coastguard Worker case CURLOPT_RTSP_TRANSPORT:
2512*6236dae4SAndroid Build Coastguard Worker /*
2513*6236dae4SAndroid Build Coastguard Worker * The content of the Transport: header for the RTSP request
2514*6236dae4SAndroid Build Coastguard Worker */
2515*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_RTSP_TRANSPORT], ptr);
2516*6236dae4SAndroid Build Coastguard Worker
2517*6236dae4SAndroid Build Coastguard Worker case CURLOPT_INTERLEAVEDATA:
2518*6236dae4SAndroid Build Coastguard Worker data->set.rtp_out = (void *)ptr;
2519*6236dae4SAndroid Build Coastguard Worker break;
2520*6236dae4SAndroid Build Coastguard Worker #endif /* ! CURL_DISABLE_RTSP */
2521*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_FTP
2522*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CHUNK_DATA:
2523*6236dae4SAndroid Build Coastguard Worker data->set.wildcardptr = (void *)ptr;
2524*6236dae4SAndroid Build Coastguard Worker break;
2525*6236dae4SAndroid Build Coastguard Worker case CURLOPT_FNMATCH_DATA:
2526*6236dae4SAndroid Build Coastguard Worker data->set.fnmatch_data = (void *)ptr;
2527*6236dae4SAndroid Build Coastguard Worker break;
2528*6236dae4SAndroid Build Coastguard Worker #endif
2529*6236dae4SAndroid Build Coastguard Worker #ifdef USE_TLS_SRP
2530*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TLSAUTH_USERNAME:
2531*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_TLSAUTH_USERNAME], ptr);
2532*6236dae4SAndroid Build Coastguard Worker
2533*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
2534*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_TLSAUTH_USERNAME:
2535*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_TLSAUTH_USERNAME_PROXY], ptr);
2536*6236dae4SAndroid Build Coastguard Worker
2537*6236dae4SAndroid Build Coastguard Worker #endif
2538*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TLSAUTH_PASSWORD:
2539*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_TLSAUTH_PASSWORD], ptr);
2540*6236dae4SAndroid Build Coastguard Worker
2541*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
2542*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_TLSAUTH_PASSWORD:
2543*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_TLSAUTH_PASSWORD_PROXY], ptr);
2544*6236dae4SAndroid Build Coastguard Worker #endif
2545*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TLSAUTH_TYPE:
2546*6236dae4SAndroid Build Coastguard Worker if(ptr && !strcasecompare(ptr, "SRP"))
2547*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
2548*6236dae4SAndroid Build Coastguard Worker break;
2549*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
2550*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_TLSAUTH_TYPE:
2551*6236dae4SAndroid Build Coastguard Worker if(ptr && !strcasecompare(ptr, "SRP"))
2552*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
2553*6236dae4SAndroid Build Coastguard Worker break;
2554*6236dae4SAndroid Build Coastguard Worker #endif
2555*6236dae4SAndroid Build Coastguard Worker #endif
2556*6236dae4SAndroid Build Coastguard Worker #ifdef USE_ARES
2557*6236dae4SAndroid Build Coastguard Worker case CURLOPT_DNS_SERVERS:
2558*6236dae4SAndroid Build Coastguard Worker result = Curl_setstropt(&data->set.str[STRING_DNS_SERVERS], ptr);
2559*6236dae4SAndroid Build Coastguard Worker if(result)
2560*6236dae4SAndroid Build Coastguard Worker return result;
2561*6236dae4SAndroid Build Coastguard Worker return Curl_set_dns_servers(data, data->set.str[STRING_DNS_SERVERS]);
2562*6236dae4SAndroid Build Coastguard Worker
2563*6236dae4SAndroid Build Coastguard Worker case CURLOPT_DNS_INTERFACE:
2564*6236dae4SAndroid Build Coastguard Worker result = Curl_setstropt(&data->set.str[STRING_DNS_INTERFACE], ptr);
2565*6236dae4SAndroid Build Coastguard Worker if(result)
2566*6236dae4SAndroid Build Coastguard Worker return result;
2567*6236dae4SAndroid Build Coastguard Worker return Curl_set_dns_interface(data, data->set.str[STRING_DNS_INTERFACE]);
2568*6236dae4SAndroid Build Coastguard Worker
2569*6236dae4SAndroid Build Coastguard Worker case CURLOPT_DNS_LOCAL_IP4:
2570*6236dae4SAndroid Build Coastguard Worker result = Curl_setstropt(&data->set.str[STRING_DNS_LOCAL_IP4], ptr);
2571*6236dae4SAndroid Build Coastguard Worker if(result)
2572*6236dae4SAndroid Build Coastguard Worker return result;
2573*6236dae4SAndroid Build Coastguard Worker return Curl_set_dns_local_ip4(data, data->set.str[STRING_DNS_LOCAL_IP4]);
2574*6236dae4SAndroid Build Coastguard Worker
2575*6236dae4SAndroid Build Coastguard Worker case CURLOPT_DNS_LOCAL_IP6:
2576*6236dae4SAndroid Build Coastguard Worker result = Curl_setstropt(&data->set.str[STRING_DNS_LOCAL_IP6], ptr);
2577*6236dae4SAndroid Build Coastguard Worker if(result)
2578*6236dae4SAndroid Build Coastguard Worker return result;
2579*6236dae4SAndroid Build Coastguard Worker return Curl_set_dns_local_ip6(data, data->set.str[STRING_DNS_LOCAL_IP6]);
2580*6236dae4SAndroid Build Coastguard Worker
2581*6236dae4SAndroid Build Coastguard Worker #endif
2582*6236dae4SAndroid Build Coastguard Worker #ifdef USE_UNIX_SOCKETS
2583*6236dae4SAndroid Build Coastguard Worker case CURLOPT_UNIX_SOCKET_PATH:
2584*6236dae4SAndroid Build Coastguard Worker data->set.abstract_unix_socket = FALSE;
2585*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_UNIX_SOCKET_PATH], ptr);
2586*6236dae4SAndroid Build Coastguard Worker
2587*6236dae4SAndroid Build Coastguard Worker case CURLOPT_ABSTRACT_UNIX_SOCKET:
2588*6236dae4SAndroid Build Coastguard Worker data->set.abstract_unix_socket = TRUE;
2589*6236dae4SAndroid Build Coastguard Worker return Curl_setstropt(&data->set.str[STRING_UNIX_SOCKET_PATH], ptr);
2590*6236dae4SAndroid Build Coastguard Worker
2591*6236dae4SAndroid Build Coastguard Worker #endif
2592*6236dae4SAndroid Build Coastguard Worker
2593*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_DOH
2594*6236dae4SAndroid Build Coastguard Worker case CURLOPT_DOH_URL:
2595*6236dae4SAndroid Build Coastguard Worker result = Curl_setstropt(&data->set.str[STRING_DOH], ptr);
2596*6236dae4SAndroid Build Coastguard Worker data->set.doh = !!(data->set.str[STRING_DOH]);
2597*6236dae4SAndroid Build Coastguard Worker break;
2598*6236dae4SAndroid Build Coastguard Worker #endif
2599*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_HSTS
2600*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HSTSREADDATA:
2601*6236dae4SAndroid Build Coastguard Worker data->set.hsts_read_userp = (void *)ptr;
2602*6236dae4SAndroid Build Coastguard Worker break;
2603*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HSTSWRITEDATA:
2604*6236dae4SAndroid Build Coastguard Worker data->set.hsts_write_userp = (void *)ptr;
2605*6236dae4SAndroid Build Coastguard Worker break;
2606*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HSTS: {
2607*6236dae4SAndroid Build Coastguard Worker struct curl_slist *h;
2608*6236dae4SAndroid Build Coastguard Worker if(!data->hsts) {
2609*6236dae4SAndroid Build Coastguard Worker data->hsts = Curl_hsts_init();
2610*6236dae4SAndroid Build Coastguard Worker if(!data->hsts)
2611*6236dae4SAndroid Build Coastguard Worker return CURLE_OUT_OF_MEMORY;
2612*6236dae4SAndroid Build Coastguard Worker }
2613*6236dae4SAndroid Build Coastguard Worker if(ptr) {
2614*6236dae4SAndroid Build Coastguard Worker result = Curl_setstropt(&data->set.str[STRING_HSTS], ptr);
2615*6236dae4SAndroid Build Coastguard Worker if(result)
2616*6236dae4SAndroid Build Coastguard Worker return result;
2617*6236dae4SAndroid Build Coastguard Worker /* this needs to build a list of filenames to read from, so that it can
2618*6236dae4SAndroid Build Coastguard Worker read them later, as we might get a shared HSTS handle to load them
2619*6236dae4SAndroid Build Coastguard Worker into */
2620*6236dae4SAndroid Build Coastguard Worker h = curl_slist_append(data->state.hstslist, ptr);
2621*6236dae4SAndroid Build Coastguard Worker if(!h) {
2622*6236dae4SAndroid Build Coastguard Worker curl_slist_free_all(data->state.hstslist);
2623*6236dae4SAndroid Build Coastguard Worker data->state.hstslist = NULL;
2624*6236dae4SAndroid Build Coastguard Worker return CURLE_OUT_OF_MEMORY;
2625*6236dae4SAndroid Build Coastguard Worker }
2626*6236dae4SAndroid Build Coastguard Worker data->state.hstslist = h; /* store the list for later use */
2627*6236dae4SAndroid Build Coastguard Worker }
2628*6236dae4SAndroid Build Coastguard Worker else {
2629*6236dae4SAndroid Build Coastguard Worker /* clear the list of HSTS files */
2630*6236dae4SAndroid Build Coastguard Worker curl_slist_free_all(data->state.hstslist);
2631*6236dae4SAndroid Build Coastguard Worker data->state.hstslist = NULL;
2632*6236dae4SAndroid Build Coastguard Worker if(!data->share || !data->share->hsts)
2633*6236dae4SAndroid Build Coastguard Worker /* throw away the HSTS cache unless shared */
2634*6236dae4SAndroid Build Coastguard Worker Curl_hsts_cleanup(&data->hsts);
2635*6236dae4SAndroid Build Coastguard Worker }
2636*6236dae4SAndroid Build Coastguard Worker break;
2637*6236dae4SAndroid Build Coastguard Worker }
2638*6236dae4SAndroid Build Coastguard Worker #endif /* ! CURL_DISABLE_HSTS */
2639*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_ALTSVC
2640*6236dae4SAndroid Build Coastguard Worker case CURLOPT_ALTSVC:
2641*6236dae4SAndroid Build Coastguard Worker if(!data->asi) {
2642*6236dae4SAndroid Build Coastguard Worker data->asi = Curl_altsvc_init();
2643*6236dae4SAndroid Build Coastguard Worker if(!data->asi)
2644*6236dae4SAndroid Build Coastguard Worker return CURLE_OUT_OF_MEMORY;
2645*6236dae4SAndroid Build Coastguard Worker }
2646*6236dae4SAndroid Build Coastguard Worker result = Curl_setstropt(&data->set.str[STRING_ALTSVC], ptr);
2647*6236dae4SAndroid Build Coastguard Worker if(result)
2648*6236dae4SAndroid Build Coastguard Worker return result;
2649*6236dae4SAndroid Build Coastguard Worker if(ptr)
2650*6236dae4SAndroid Build Coastguard Worker (void)Curl_altsvc_load(data->asi, ptr);
2651*6236dae4SAndroid Build Coastguard Worker break;
2652*6236dae4SAndroid Build Coastguard Worker #endif /* ! CURL_DISABLE_ALTSVC */
2653*6236dae4SAndroid Build Coastguard Worker #ifdef USE_ECH
2654*6236dae4SAndroid Build Coastguard Worker case CURLOPT_ECH: {
2655*6236dae4SAndroid Build Coastguard Worker size_t plen = 0;
2656*6236dae4SAndroid Build Coastguard Worker
2657*6236dae4SAndroid Build Coastguard Worker if(!ptr) {
2658*6236dae4SAndroid Build Coastguard Worker data->set.tls_ech = CURLECH_DISABLE;
2659*6236dae4SAndroid Build Coastguard Worker return CURLE_OK;
2660*6236dae4SAndroid Build Coastguard Worker }
2661*6236dae4SAndroid Build Coastguard Worker plen = strlen(ptr);
2662*6236dae4SAndroid Build Coastguard Worker if(plen > CURL_MAX_INPUT_LENGTH) {
2663*6236dae4SAndroid Build Coastguard Worker data->set.tls_ech = CURLECH_DISABLE;
2664*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
2665*6236dae4SAndroid Build Coastguard Worker }
2666*6236dae4SAndroid Build Coastguard Worker /* set tls_ech flag value, preserving CLA_CFG bit */
2667*6236dae4SAndroid Build Coastguard Worker if(!strcmp(ptr, "false"))
2668*6236dae4SAndroid Build Coastguard Worker data->set.tls_ech = CURLECH_DISABLE |
2669*6236dae4SAndroid Build Coastguard Worker (data->set.tls_ech & CURLECH_CLA_CFG);
2670*6236dae4SAndroid Build Coastguard Worker else if(!strcmp(ptr, "grease"))
2671*6236dae4SAndroid Build Coastguard Worker data->set.tls_ech = CURLECH_GREASE |
2672*6236dae4SAndroid Build Coastguard Worker (data->set.tls_ech & CURLECH_CLA_CFG);
2673*6236dae4SAndroid Build Coastguard Worker else if(!strcmp(ptr, "true"))
2674*6236dae4SAndroid Build Coastguard Worker data->set.tls_ech = CURLECH_ENABLE |
2675*6236dae4SAndroid Build Coastguard Worker (data->set.tls_ech & CURLECH_CLA_CFG);
2676*6236dae4SAndroid Build Coastguard Worker else if(!strcmp(ptr, "hard"))
2677*6236dae4SAndroid Build Coastguard Worker data->set.tls_ech = CURLECH_HARD |
2678*6236dae4SAndroid Build Coastguard Worker (data->set.tls_ech & CURLECH_CLA_CFG);
2679*6236dae4SAndroid Build Coastguard Worker else if(plen > 5 && !strncmp(ptr, "ecl:", 4)) {
2680*6236dae4SAndroid Build Coastguard Worker result = Curl_setstropt(&data->set.str[STRING_ECH_CONFIG], ptr + 4);
2681*6236dae4SAndroid Build Coastguard Worker if(result)
2682*6236dae4SAndroid Build Coastguard Worker return result;
2683*6236dae4SAndroid Build Coastguard Worker data->set.tls_ech |= CURLECH_CLA_CFG;
2684*6236dae4SAndroid Build Coastguard Worker }
2685*6236dae4SAndroid Build Coastguard Worker else if(plen > 4 && !strncmp(ptr, "pn:", 3)) {
2686*6236dae4SAndroid Build Coastguard Worker result = Curl_setstropt(&data->set.str[STRING_ECH_PUBLIC], ptr + 3);
2687*6236dae4SAndroid Build Coastguard Worker if(result)
2688*6236dae4SAndroid Build Coastguard Worker return result;
2689*6236dae4SAndroid Build Coastguard Worker }
2690*6236dae4SAndroid Build Coastguard Worker break;
2691*6236dae4SAndroid Build Coastguard Worker }
2692*6236dae4SAndroid Build Coastguard Worker #endif
2693*6236dae4SAndroid Build Coastguard Worker default:
2694*6236dae4SAndroid Build Coastguard Worker return CURLE_UNKNOWN_OPTION;
2695*6236dae4SAndroid Build Coastguard Worker }
2696*6236dae4SAndroid Build Coastguard Worker return result;
2697*6236dae4SAndroid Build Coastguard Worker }
2698*6236dae4SAndroid Build Coastguard Worker
setopt_func(struct Curl_easy * data,CURLoption option,va_list param)2699*6236dae4SAndroid Build Coastguard Worker static CURLcode setopt_func(struct Curl_easy *data, CURLoption option,
2700*6236dae4SAndroid Build Coastguard Worker va_list param)
2701*6236dae4SAndroid Build Coastguard Worker {
2702*6236dae4SAndroid Build Coastguard Worker switch(option) {
2703*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROGRESSFUNCTION:
2704*6236dae4SAndroid Build Coastguard Worker /*
2705*6236dae4SAndroid Build Coastguard Worker * Progress callback function
2706*6236dae4SAndroid Build Coastguard Worker */
2707*6236dae4SAndroid Build Coastguard Worker data->set.fprogress = va_arg(param, curl_progress_callback);
2708*6236dae4SAndroid Build Coastguard Worker if(data->set.fprogress)
2709*6236dae4SAndroid Build Coastguard Worker data->progress.callback = TRUE; /* no longer internal */
2710*6236dae4SAndroid Build Coastguard Worker else
2711*6236dae4SAndroid Build Coastguard Worker data->progress.callback = FALSE; /* NULL enforces internal */
2712*6236dae4SAndroid Build Coastguard Worker break;
2713*6236dae4SAndroid Build Coastguard Worker
2714*6236dae4SAndroid Build Coastguard Worker case CURLOPT_XFERINFOFUNCTION:
2715*6236dae4SAndroid Build Coastguard Worker /*
2716*6236dae4SAndroid Build Coastguard Worker * Transfer info callback function
2717*6236dae4SAndroid Build Coastguard Worker */
2718*6236dae4SAndroid Build Coastguard Worker data->set.fxferinfo = va_arg(param, curl_xferinfo_callback);
2719*6236dae4SAndroid Build Coastguard Worker if(data->set.fxferinfo)
2720*6236dae4SAndroid Build Coastguard Worker data->progress.callback = TRUE; /* no longer internal */
2721*6236dae4SAndroid Build Coastguard Worker else
2722*6236dae4SAndroid Build Coastguard Worker data->progress.callback = FALSE; /* NULL enforces internal */
2723*6236dae4SAndroid Build Coastguard Worker
2724*6236dae4SAndroid Build Coastguard Worker break;
2725*6236dae4SAndroid Build Coastguard Worker case CURLOPT_DEBUGFUNCTION:
2726*6236dae4SAndroid Build Coastguard Worker /*
2727*6236dae4SAndroid Build Coastguard Worker * stderr write callback.
2728*6236dae4SAndroid Build Coastguard Worker */
2729*6236dae4SAndroid Build Coastguard Worker data->set.fdebug = va_arg(param, curl_debug_callback);
2730*6236dae4SAndroid Build Coastguard Worker /*
2731*6236dae4SAndroid Build Coastguard Worker * if the callback provided is NULL, it will use the default callback
2732*6236dae4SAndroid Build Coastguard Worker */
2733*6236dae4SAndroid Build Coastguard Worker break;
2734*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HEADERFUNCTION:
2735*6236dae4SAndroid Build Coastguard Worker /*
2736*6236dae4SAndroid Build Coastguard Worker * Set header write callback
2737*6236dae4SAndroid Build Coastguard Worker */
2738*6236dae4SAndroid Build Coastguard Worker data->set.fwrite_header = va_arg(param, curl_write_callback);
2739*6236dae4SAndroid Build Coastguard Worker break;
2740*6236dae4SAndroid Build Coastguard Worker case CURLOPT_WRITEFUNCTION:
2741*6236dae4SAndroid Build Coastguard Worker /*
2742*6236dae4SAndroid Build Coastguard Worker * Set data write callback
2743*6236dae4SAndroid Build Coastguard Worker */
2744*6236dae4SAndroid Build Coastguard Worker data->set.fwrite_func = va_arg(param, curl_write_callback);
2745*6236dae4SAndroid Build Coastguard Worker if(!data->set.fwrite_func)
2746*6236dae4SAndroid Build Coastguard Worker /* When set to NULL, reset to our internal default function */
2747*6236dae4SAndroid Build Coastguard Worker data->set.fwrite_func = (curl_write_callback)fwrite;
2748*6236dae4SAndroid Build Coastguard Worker break;
2749*6236dae4SAndroid Build Coastguard Worker case CURLOPT_READFUNCTION:
2750*6236dae4SAndroid Build Coastguard Worker /*
2751*6236dae4SAndroid Build Coastguard Worker * Read data callback
2752*6236dae4SAndroid Build Coastguard Worker */
2753*6236dae4SAndroid Build Coastguard Worker data->set.fread_func_set = va_arg(param, curl_read_callback);
2754*6236dae4SAndroid Build Coastguard Worker if(!data->set.fread_func_set) {
2755*6236dae4SAndroid Build Coastguard Worker data->set.is_fread_set = 0;
2756*6236dae4SAndroid Build Coastguard Worker /* When set to NULL, reset to our internal default function */
2757*6236dae4SAndroid Build Coastguard Worker data->set.fread_func_set = (curl_read_callback)fread;
2758*6236dae4SAndroid Build Coastguard Worker }
2759*6236dae4SAndroid Build Coastguard Worker else
2760*6236dae4SAndroid Build Coastguard Worker data->set.is_fread_set = 1;
2761*6236dae4SAndroid Build Coastguard Worker break;
2762*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SEEKFUNCTION:
2763*6236dae4SAndroid Build Coastguard Worker /*
2764*6236dae4SAndroid Build Coastguard Worker * Seek callback. Might be NULL.
2765*6236dae4SAndroid Build Coastguard Worker */
2766*6236dae4SAndroid Build Coastguard Worker data->set.seek_func = va_arg(param, curl_seek_callback);
2767*6236dae4SAndroid Build Coastguard Worker break;
2768*6236dae4SAndroid Build Coastguard Worker case CURLOPT_IOCTLFUNCTION:
2769*6236dae4SAndroid Build Coastguard Worker /*
2770*6236dae4SAndroid Build Coastguard Worker * I/O control callback. Might be NULL.
2771*6236dae4SAndroid Build Coastguard Worker */
2772*6236dae4SAndroid Build Coastguard Worker data->set.ioctl_func = va_arg(param, curl_ioctl_callback);
2773*6236dae4SAndroid Build Coastguard Worker break;
2774*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSL_CTX_FUNCTION:
2775*6236dae4SAndroid Build Coastguard Worker /*
2776*6236dae4SAndroid Build Coastguard Worker * Set a SSL_CTX callback
2777*6236dae4SAndroid Build Coastguard Worker */
2778*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSL
2779*6236dae4SAndroid Build Coastguard Worker if(Curl_ssl_supports(data, SSLSUPP_SSL_CTX))
2780*6236dae4SAndroid Build Coastguard Worker data->set.ssl.fsslctx = va_arg(param, curl_ssl_ctx_callback);
2781*6236dae4SAndroid Build Coastguard Worker else
2782*6236dae4SAndroid Build Coastguard Worker #endif
2783*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
2784*6236dae4SAndroid Build Coastguard Worker break;
2785*6236dae4SAndroid Build Coastguard Worker
2786*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SOCKOPTFUNCTION:
2787*6236dae4SAndroid Build Coastguard Worker /*
2788*6236dae4SAndroid Build Coastguard Worker * socket callback function: called after socket() but before connect()
2789*6236dae4SAndroid Build Coastguard Worker */
2790*6236dae4SAndroid Build Coastguard Worker data->set.fsockopt = va_arg(param, curl_sockopt_callback);
2791*6236dae4SAndroid Build Coastguard Worker break;
2792*6236dae4SAndroid Build Coastguard Worker
2793*6236dae4SAndroid Build Coastguard Worker case CURLOPT_OPENSOCKETFUNCTION:
2794*6236dae4SAndroid Build Coastguard Worker /*
2795*6236dae4SAndroid Build Coastguard Worker * open/create socket callback function: called instead of socket(),
2796*6236dae4SAndroid Build Coastguard Worker * before connect()
2797*6236dae4SAndroid Build Coastguard Worker */
2798*6236dae4SAndroid Build Coastguard Worker data->set.fopensocket = va_arg(param, curl_opensocket_callback);
2799*6236dae4SAndroid Build Coastguard Worker break;
2800*6236dae4SAndroid Build Coastguard Worker
2801*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CLOSESOCKETFUNCTION:
2802*6236dae4SAndroid Build Coastguard Worker /*
2803*6236dae4SAndroid Build Coastguard Worker * close socket callback function: called instead of close()
2804*6236dae4SAndroid Build Coastguard Worker * when shutting down a connection
2805*6236dae4SAndroid Build Coastguard Worker */
2806*6236dae4SAndroid Build Coastguard Worker data->set.fclosesocket = va_arg(param, curl_closesocket_callback);
2807*6236dae4SAndroid Build Coastguard Worker break;
2808*6236dae4SAndroid Build Coastguard Worker
2809*6236dae4SAndroid Build Coastguard Worker case CURLOPT_RESOLVER_START_FUNCTION:
2810*6236dae4SAndroid Build Coastguard Worker /*
2811*6236dae4SAndroid Build Coastguard Worker * resolver start callback function: called before a new resolver request
2812*6236dae4SAndroid Build Coastguard Worker * is started
2813*6236dae4SAndroid Build Coastguard Worker */
2814*6236dae4SAndroid Build Coastguard Worker data->set.resolver_start = va_arg(param, curl_resolver_start_callback);
2815*6236dae4SAndroid Build Coastguard Worker break;
2816*6236dae4SAndroid Build Coastguard Worker
2817*6236dae4SAndroid Build Coastguard Worker
2818*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSH
2819*6236dae4SAndroid Build Coastguard Worker #ifdef USE_LIBSSH2
2820*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSH_HOSTKEYFUNCTION:
2821*6236dae4SAndroid Build Coastguard Worker /* the callback to check the hostkey without the knownhost file */
2822*6236dae4SAndroid Build Coastguard Worker data->set.ssh_hostkeyfunc = va_arg(param, curl_sshhostkeycallback);
2823*6236dae4SAndroid Build Coastguard Worker break;
2824*6236dae4SAndroid Build Coastguard Worker #endif
2825*6236dae4SAndroid Build Coastguard Worker
2826*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSH_KEYFUNCTION:
2827*6236dae4SAndroid Build Coastguard Worker /* setting to NULL is fine since the ssh.c functions themselves will
2828*6236dae4SAndroid Build Coastguard Worker then revert to use the internal default */
2829*6236dae4SAndroid Build Coastguard Worker data->set.ssh_keyfunc = va_arg(param, curl_sshkeycallback);
2830*6236dae4SAndroid Build Coastguard Worker break;
2831*6236dae4SAndroid Build Coastguard Worker
2832*6236dae4SAndroid Build Coastguard Worker #endif /* USE_SSH */
2833*6236dae4SAndroid Build Coastguard Worker
2834*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_RTSP
2835*6236dae4SAndroid Build Coastguard Worker case CURLOPT_INTERLEAVEFUNCTION:
2836*6236dae4SAndroid Build Coastguard Worker /* Set the user defined RTP write function */
2837*6236dae4SAndroid Build Coastguard Worker data->set.fwrite_rtp = va_arg(param, curl_write_callback);
2838*6236dae4SAndroid Build Coastguard Worker break;
2839*6236dae4SAndroid Build Coastguard Worker #endif
2840*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_FTP
2841*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CHUNK_BGN_FUNCTION:
2842*6236dae4SAndroid Build Coastguard Worker data->set.chunk_bgn = va_arg(param, curl_chunk_bgn_callback);
2843*6236dae4SAndroid Build Coastguard Worker break;
2844*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CHUNK_END_FUNCTION:
2845*6236dae4SAndroid Build Coastguard Worker data->set.chunk_end = va_arg(param, curl_chunk_end_callback);
2846*6236dae4SAndroid Build Coastguard Worker break;
2847*6236dae4SAndroid Build Coastguard Worker case CURLOPT_FNMATCH_FUNCTION:
2848*6236dae4SAndroid Build Coastguard Worker data->set.fnmatch = va_arg(param, curl_fnmatch_callback);
2849*6236dae4SAndroid Build Coastguard Worker break;
2850*6236dae4SAndroid Build Coastguard Worker #endif
2851*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_HTTP
2852*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TRAILERFUNCTION:
2853*6236dae4SAndroid Build Coastguard Worker data->set.trailer_callback = va_arg(param, curl_trailer_callback);
2854*6236dae4SAndroid Build Coastguard Worker break;
2855*6236dae4SAndroid Build Coastguard Worker #endif
2856*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_HSTS
2857*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HSTSREADFUNCTION:
2858*6236dae4SAndroid Build Coastguard Worker data->set.hsts_read = va_arg(param, curl_hstsread_callback);
2859*6236dae4SAndroid Build Coastguard Worker break;
2860*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HSTSWRITEFUNCTION:
2861*6236dae4SAndroid Build Coastguard Worker data->set.hsts_write = va_arg(param, curl_hstswrite_callback);
2862*6236dae4SAndroid Build Coastguard Worker break;
2863*6236dae4SAndroid Build Coastguard Worker #endif
2864*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PREREQFUNCTION:
2865*6236dae4SAndroid Build Coastguard Worker data->set.fprereq = va_arg(param, curl_prereq_callback);
2866*6236dae4SAndroid Build Coastguard Worker break;
2867*6236dae4SAndroid Build Coastguard Worker default:
2868*6236dae4SAndroid Build Coastguard Worker return CURLE_UNKNOWN_OPTION;
2869*6236dae4SAndroid Build Coastguard Worker }
2870*6236dae4SAndroid Build Coastguard Worker return CURLE_OK;
2871*6236dae4SAndroid Build Coastguard Worker }
2872*6236dae4SAndroid Build Coastguard Worker
setopt_offt(struct Curl_easy * data,CURLoption option,curl_off_t offt)2873*6236dae4SAndroid Build Coastguard Worker static CURLcode setopt_offt(struct Curl_easy *data, CURLoption option,
2874*6236dae4SAndroid Build Coastguard Worker curl_off_t offt)
2875*6236dae4SAndroid Build Coastguard Worker {
2876*6236dae4SAndroid Build Coastguard Worker switch(option) {
2877*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TIMEVALUE_LARGE:
2878*6236dae4SAndroid Build Coastguard Worker /*
2879*6236dae4SAndroid Build Coastguard Worker * This is the value to compare with the remote document with the
2880*6236dae4SAndroid Build Coastguard Worker * method set with CURLOPT_TIMECONDITION
2881*6236dae4SAndroid Build Coastguard Worker */
2882*6236dae4SAndroid Build Coastguard Worker data->set.timevalue = (time_t)offt;
2883*6236dae4SAndroid Build Coastguard Worker break;
2884*6236dae4SAndroid Build Coastguard Worker
2885*6236dae4SAndroid Build Coastguard Worker /* MQTT "borrows" some of the HTTP options */
2886*6236dae4SAndroid Build Coastguard Worker case CURLOPT_POSTFIELDSIZE_LARGE:
2887*6236dae4SAndroid Build Coastguard Worker /*
2888*6236dae4SAndroid Build Coastguard Worker * The size of the POSTFIELD data to prevent libcurl to do strlen() to
2889*6236dae4SAndroid Build Coastguard Worker * figure it out. Enables binary posts.
2890*6236dae4SAndroid Build Coastguard Worker */
2891*6236dae4SAndroid Build Coastguard Worker if(offt < -1)
2892*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
2893*6236dae4SAndroid Build Coastguard Worker
2894*6236dae4SAndroid Build Coastguard Worker if(data->set.postfieldsize < offt &&
2895*6236dae4SAndroid Build Coastguard Worker data->set.postfields == data->set.str[STRING_COPYPOSTFIELDS]) {
2896*6236dae4SAndroid Build Coastguard Worker /* Previous CURLOPT_COPYPOSTFIELDS is no longer valid. */
2897*6236dae4SAndroid Build Coastguard Worker Curl_safefree(data->set.str[STRING_COPYPOSTFIELDS]);
2898*6236dae4SAndroid Build Coastguard Worker data->set.postfields = NULL;
2899*6236dae4SAndroid Build Coastguard Worker }
2900*6236dae4SAndroid Build Coastguard Worker data->set.postfieldsize = offt;
2901*6236dae4SAndroid Build Coastguard Worker break;
2902*6236dae4SAndroid Build Coastguard Worker case CURLOPT_INFILESIZE_LARGE:
2903*6236dae4SAndroid Build Coastguard Worker /*
2904*6236dae4SAndroid Build Coastguard Worker * If known, this should inform curl about the file size of the
2905*6236dae4SAndroid Build Coastguard Worker * to-be-uploaded file.
2906*6236dae4SAndroid Build Coastguard Worker */
2907*6236dae4SAndroid Build Coastguard Worker if(offt < -1)
2908*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
2909*6236dae4SAndroid Build Coastguard Worker data->set.filesize = offt;
2910*6236dae4SAndroid Build Coastguard Worker break;
2911*6236dae4SAndroid Build Coastguard Worker case CURLOPT_MAX_SEND_SPEED_LARGE:
2912*6236dae4SAndroid Build Coastguard Worker /*
2913*6236dae4SAndroid Build Coastguard Worker * When transfer uploads are faster then CURLOPT_MAX_SEND_SPEED_LARGE
2914*6236dae4SAndroid Build Coastguard Worker * bytes per second the transfer is throttled..
2915*6236dae4SAndroid Build Coastguard Worker */
2916*6236dae4SAndroid Build Coastguard Worker if(offt < 0)
2917*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
2918*6236dae4SAndroid Build Coastguard Worker data->set.max_send_speed = offt;
2919*6236dae4SAndroid Build Coastguard Worker break;
2920*6236dae4SAndroid Build Coastguard Worker case CURLOPT_MAX_RECV_SPEED_LARGE:
2921*6236dae4SAndroid Build Coastguard Worker /*
2922*6236dae4SAndroid Build Coastguard Worker * When receiving data faster than CURLOPT_MAX_RECV_SPEED_LARGE bytes per
2923*6236dae4SAndroid Build Coastguard Worker * second the transfer is throttled..
2924*6236dae4SAndroid Build Coastguard Worker */
2925*6236dae4SAndroid Build Coastguard Worker if(offt < 0)
2926*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
2927*6236dae4SAndroid Build Coastguard Worker data->set.max_recv_speed = offt;
2928*6236dae4SAndroid Build Coastguard Worker break;
2929*6236dae4SAndroid Build Coastguard Worker case CURLOPT_RESUME_FROM_LARGE:
2930*6236dae4SAndroid Build Coastguard Worker /*
2931*6236dae4SAndroid Build Coastguard Worker * Resume transfer at the given file position
2932*6236dae4SAndroid Build Coastguard Worker */
2933*6236dae4SAndroid Build Coastguard Worker if(offt < -1)
2934*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
2935*6236dae4SAndroid Build Coastguard Worker data->set.set_resume_from = offt;
2936*6236dae4SAndroid Build Coastguard Worker break;
2937*6236dae4SAndroid Build Coastguard Worker case CURLOPT_MAXFILESIZE_LARGE:
2938*6236dae4SAndroid Build Coastguard Worker /*
2939*6236dae4SAndroid Build Coastguard Worker * Set the maximum size of a file to download.
2940*6236dae4SAndroid Build Coastguard Worker */
2941*6236dae4SAndroid Build Coastguard Worker if(offt < 0)
2942*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
2943*6236dae4SAndroid Build Coastguard Worker data->set.max_filesize = offt;
2944*6236dae4SAndroid Build Coastguard Worker break;
2945*6236dae4SAndroid Build Coastguard Worker
2946*6236dae4SAndroid Build Coastguard Worker default:
2947*6236dae4SAndroid Build Coastguard Worker return CURLE_UNKNOWN_OPTION;
2948*6236dae4SAndroid Build Coastguard Worker }
2949*6236dae4SAndroid Build Coastguard Worker return CURLE_OK;
2950*6236dae4SAndroid Build Coastguard Worker }
2951*6236dae4SAndroid Build Coastguard Worker
setopt_blob(struct Curl_easy * data,CURLoption option,struct curl_blob * blob)2952*6236dae4SAndroid Build Coastguard Worker static CURLcode setopt_blob(struct Curl_easy *data, CURLoption option,
2953*6236dae4SAndroid Build Coastguard Worker struct curl_blob *blob)
2954*6236dae4SAndroid Build Coastguard Worker {
2955*6236dae4SAndroid Build Coastguard Worker switch(option) {
2956*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSLCERT_BLOB:
2957*6236dae4SAndroid Build Coastguard Worker /*
2958*6236dae4SAndroid Build Coastguard Worker * Blob that holds file content of the SSL certificate to use
2959*6236dae4SAndroid Build Coastguard Worker */
2960*6236dae4SAndroid Build Coastguard Worker return Curl_setblobopt(&data->set.blobs[BLOB_CERT], blob);
2961*6236dae4SAndroid Build Coastguard Worker #ifndef CURL_DISABLE_PROXY
2962*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_SSLCERT_BLOB:
2963*6236dae4SAndroid Build Coastguard Worker /*
2964*6236dae4SAndroid Build Coastguard Worker * Blob that holds file content of the SSL certificate to use for proxy
2965*6236dae4SAndroid Build Coastguard Worker */
2966*6236dae4SAndroid Build Coastguard Worker return Curl_setblobopt(&data->set.blobs[BLOB_CERT_PROXY], blob);
2967*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_SSLKEY_BLOB:
2968*6236dae4SAndroid Build Coastguard Worker /*
2969*6236dae4SAndroid Build Coastguard Worker * Blob that holds file content of the SSL key to use for proxy
2970*6236dae4SAndroid Build Coastguard Worker */
2971*6236dae4SAndroid Build Coastguard Worker return Curl_setblobopt(&data->set.blobs[BLOB_KEY_PROXY], blob);
2972*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_CAINFO_BLOB:
2973*6236dae4SAndroid Build Coastguard Worker /*
2974*6236dae4SAndroid Build Coastguard Worker * Blob that holds CA info for SSL connection proxy.
2975*6236dae4SAndroid Build Coastguard Worker * Specify entire PEM of the CA certificate
2976*6236dae4SAndroid Build Coastguard Worker */
2977*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSL
2978*6236dae4SAndroid Build Coastguard Worker if(Curl_ssl_supports(data, SSLSUPP_CAINFO_BLOB))
2979*6236dae4SAndroid Build Coastguard Worker return Curl_setblobopt(&data->set.blobs[BLOB_CAINFO_PROXY], blob);
2980*6236dae4SAndroid Build Coastguard Worker #endif
2981*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
2982*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXY_ISSUERCERT_BLOB:
2983*6236dae4SAndroid Build Coastguard Worker /*
2984*6236dae4SAndroid Build Coastguard Worker * Blob that holds Issuer certificate to check certificates issuer
2985*6236dae4SAndroid Build Coastguard Worker */
2986*6236dae4SAndroid Build Coastguard Worker return Curl_setblobopt(&data->set.blobs[BLOB_SSL_ISSUERCERT_PROXY],
2987*6236dae4SAndroid Build Coastguard Worker blob);
2988*6236dae4SAndroid Build Coastguard Worker #endif
2989*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SSLKEY_BLOB:
2990*6236dae4SAndroid Build Coastguard Worker /*
2991*6236dae4SAndroid Build Coastguard Worker * Blob that holds file content of the SSL key to use
2992*6236dae4SAndroid Build Coastguard Worker */
2993*6236dae4SAndroid Build Coastguard Worker return Curl_setblobopt(&data->set.blobs[BLOB_KEY], blob);
2994*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CAINFO_BLOB:
2995*6236dae4SAndroid Build Coastguard Worker /*
2996*6236dae4SAndroid Build Coastguard Worker * Blob that holds CA info for SSL connection.
2997*6236dae4SAndroid Build Coastguard Worker * Specify entire PEM of the CA certificate
2998*6236dae4SAndroid Build Coastguard Worker */
2999*6236dae4SAndroid Build Coastguard Worker #ifdef USE_SSL
3000*6236dae4SAndroid Build Coastguard Worker if(Curl_ssl_supports(data, SSLSUPP_CAINFO_BLOB))
3001*6236dae4SAndroid Build Coastguard Worker return Curl_setblobopt(&data->set.blobs[BLOB_CAINFO], blob);
3002*6236dae4SAndroid Build Coastguard Worker #endif
3003*6236dae4SAndroid Build Coastguard Worker return CURLE_NOT_BUILT_IN;
3004*6236dae4SAndroid Build Coastguard Worker case CURLOPT_ISSUERCERT_BLOB:
3005*6236dae4SAndroid Build Coastguard Worker /*
3006*6236dae4SAndroid Build Coastguard Worker * Blob that holds Issuer certificate to check certificates issuer
3007*6236dae4SAndroid Build Coastguard Worker */
3008*6236dae4SAndroid Build Coastguard Worker return Curl_setblobopt(&data->set.blobs[BLOB_SSL_ISSUERCERT], blob);
3009*6236dae4SAndroid Build Coastguard Worker
3010*6236dae4SAndroid Build Coastguard Worker default:
3011*6236dae4SAndroid Build Coastguard Worker return CURLE_UNKNOWN_OPTION;
3012*6236dae4SAndroid Build Coastguard Worker }
3013*6236dae4SAndroid Build Coastguard Worker /* unreachable */
3014*6236dae4SAndroid Build Coastguard Worker }
3015*6236dae4SAndroid Build Coastguard Worker
3016*6236dae4SAndroid Build Coastguard Worker /*
3017*6236dae4SAndroid Build Coastguard Worker * Do not make Curl_vsetopt() static: it is called from
3018*6236dae4SAndroid Build Coastguard Worker * packages/OS400/ccsidcurl.c.
3019*6236dae4SAndroid Build Coastguard Worker */
Curl_vsetopt(struct Curl_easy * data,CURLoption option,va_list param)3020*6236dae4SAndroid Build Coastguard Worker CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
3021*6236dae4SAndroid Build Coastguard Worker {
3022*6236dae4SAndroid Build Coastguard Worker if(option < CURLOPTTYPE_OBJECTPOINT)
3023*6236dae4SAndroid Build Coastguard Worker return setopt_long(data, option, va_arg(param, long));
3024*6236dae4SAndroid Build Coastguard Worker else if(option < CURLOPTTYPE_FUNCTIONPOINT) {
3025*6236dae4SAndroid Build Coastguard Worker /* unfortunately, different pointer types cannot be identified any other
3026*6236dae4SAndroid Build Coastguard Worker way than being listed explicitly */
3027*6236dae4SAndroid Build Coastguard Worker switch(option) {
3028*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HTTPHEADER:
3029*6236dae4SAndroid Build Coastguard Worker case CURLOPT_QUOTE:
3030*6236dae4SAndroid Build Coastguard Worker case CURLOPT_POSTQUOTE:
3031*6236dae4SAndroid Build Coastguard Worker case CURLOPT_TELNETOPTIONS:
3032*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PREQUOTE:
3033*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HTTP200ALIASES:
3034*6236dae4SAndroid Build Coastguard Worker case CURLOPT_MAIL_RCPT:
3035*6236dae4SAndroid Build Coastguard Worker case CURLOPT_RESOLVE:
3036*6236dae4SAndroid Build Coastguard Worker case CURLOPT_PROXYHEADER:
3037*6236dae4SAndroid Build Coastguard Worker case CURLOPT_CONNECT_TO:
3038*6236dae4SAndroid Build Coastguard Worker return setopt_slist(data, option, va_arg(param, struct curl_slist *));
3039*6236dae4SAndroid Build Coastguard Worker case CURLOPT_HTTPPOST: /* curl_httppost * */
3040*6236dae4SAndroid Build Coastguard Worker case CURLOPT_MIMEPOST: /* curl_mime * */
3041*6236dae4SAndroid Build Coastguard Worker case CURLOPT_STDERR: /* FILE * */
3042*6236dae4SAndroid Build Coastguard Worker case CURLOPT_SHARE: /* CURLSH * */
3043*6236dae4SAndroid Build Coastguard Worker case CURLOPT_STREAM_DEPENDS: /* CURL * */
3044*6236dae4SAndroid Build Coastguard Worker case CURLOPT_STREAM_DEPENDS_E: /* CURL * */
3045*6236dae4SAndroid Build Coastguard Worker return setopt_pointers(data, option, param);
3046*6236dae4SAndroid Build Coastguard Worker default:
3047*6236dae4SAndroid Build Coastguard Worker break;
3048*6236dae4SAndroid Build Coastguard Worker }
3049*6236dae4SAndroid Build Coastguard Worker /* the char pointer options */
3050*6236dae4SAndroid Build Coastguard Worker return setopt_cptr(data, option, va_arg(param, char *));
3051*6236dae4SAndroid Build Coastguard Worker }
3052*6236dae4SAndroid Build Coastguard Worker else if(option < CURLOPTTYPE_OFF_T)
3053*6236dae4SAndroid Build Coastguard Worker return setopt_func(data, option, param);
3054*6236dae4SAndroid Build Coastguard Worker else if(option < CURLOPTTYPE_BLOB)
3055*6236dae4SAndroid Build Coastguard Worker return setopt_offt(data, option, va_arg(param, curl_off_t));
3056*6236dae4SAndroid Build Coastguard Worker return setopt_blob(data, option, va_arg(param, struct curl_blob *));
3057*6236dae4SAndroid Build Coastguard Worker }
3058*6236dae4SAndroid Build Coastguard Worker
3059*6236dae4SAndroid Build Coastguard Worker /*
3060*6236dae4SAndroid Build Coastguard Worker * curl_easy_setopt() is the external interface for setting options on an
3061*6236dae4SAndroid Build Coastguard Worker * easy handle.
3062*6236dae4SAndroid Build Coastguard Worker *
3063*6236dae4SAndroid Build Coastguard Worker * NOTE: This is one of few API functions that are allowed to be called from
3064*6236dae4SAndroid Build Coastguard Worker * within a callback.
3065*6236dae4SAndroid Build Coastguard Worker */
3066*6236dae4SAndroid Build Coastguard Worker
3067*6236dae4SAndroid Build Coastguard Worker #undef curl_easy_setopt
curl_easy_setopt(CURL * d,CURLoption tag,...)3068*6236dae4SAndroid Build Coastguard Worker CURLcode curl_easy_setopt(CURL *d, CURLoption tag, ...)
3069*6236dae4SAndroid Build Coastguard Worker {
3070*6236dae4SAndroid Build Coastguard Worker va_list arg;
3071*6236dae4SAndroid Build Coastguard Worker CURLcode result;
3072*6236dae4SAndroid Build Coastguard Worker struct Curl_easy *data = d;
3073*6236dae4SAndroid Build Coastguard Worker
3074*6236dae4SAndroid Build Coastguard Worker if(!data)
3075*6236dae4SAndroid Build Coastguard Worker return CURLE_BAD_FUNCTION_ARGUMENT;
3076*6236dae4SAndroid Build Coastguard Worker
3077*6236dae4SAndroid Build Coastguard Worker va_start(arg, tag);
3078*6236dae4SAndroid Build Coastguard Worker
3079*6236dae4SAndroid Build Coastguard Worker result = Curl_vsetopt(data, tag, arg);
3080*6236dae4SAndroid Build Coastguard Worker
3081*6236dae4SAndroid Build Coastguard Worker va_end(arg);
3082*6236dae4SAndroid Build Coastguard Worker #ifdef DEBUGBUILD
3083*6236dae4SAndroid Build Coastguard Worker if(result == CURLE_BAD_FUNCTION_ARGUMENT)
3084*6236dae4SAndroid Build Coastguard Worker infof(data, "setopt arg 0x%x returned CURLE_BAD_FUNCTION_ARGUMENT", tag);
3085*6236dae4SAndroid Build Coastguard Worker #endif
3086*6236dae4SAndroid Build Coastguard Worker return result;
3087*6236dae4SAndroid Build Coastguard Worker }
3088