Home | History | Annotate | Download | only in src
      1 #ifndef HEADER_CURL_TOOL_SETOPT_H
      2 #define HEADER_CURL_TOOL_SETOPT_H
      3 /***************************************************************************
      4  *                                  _   _ ____  _
      5  *  Project                     ___| | | |  _ \| |
      6  *                             / __| | | | |_) | |
      7  *                            | (__| |_| |  _ <| |___
      8  *                             \___|\___/|_| \_\_____|
      9  *
     10  * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel (at) haxx.se>, et al.
     11  *
     12  * This software is licensed as described in the file COPYING, which
     13  * you should have received as part of this distribution. The terms
     14  * are also available at https://curl.haxx.se/docs/copyright.html.
     15  *
     16  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
     17  * copies of the Software, and permit persons to whom the Software is
     18  * furnished to do so, under the terms of the COPYING file.
     19  *
     20  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
     21  * KIND, either express or implied.
     22  *
     23  ***************************************************************************/
     24 #include "tool_setup.h"
     25 
     26 /*
     27  * Macros used in operate()
     28  */
     29 
     30 #define SETOPT_CHECK(v) do { \
     31   result = (v); \
     32   if(result) \
     33     goto show_error; \
     34 } WHILE_FALSE
     35 
     36 #ifndef CURL_DISABLE_LIBCURL_OPTION
     37 
     38 /* Associate symbolic names with option values */
     39 typedef struct {
     40   const char *name;
     41   long value;
     42 } NameValue;
     43 
     44 typedef struct {
     45   const char *name;
     46   unsigned long value;
     47 } NameValueUnsigned;
     48 
     49 extern const NameValue setopt_nv_CURLPROXY[];
     50 extern const NameValue setopt_nv_CURL_HTTP_VERSION[];
     51 extern const NameValue setopt_nv_CURL_SSLVERSION[];
     52 extern const NameValue setopt_nv_CURL_TIMECOND[];
     53 extern const NameValue setopt_nv_CURLFTPSSL_CCC[];
     54 extern const NameValue setopt_nv_CURLUSESSL[];
     55 extern const NameValueUnsigned setopt_nv_CURLSSLOPT[];
     56 extern const NameValue setopt_nv_CURL_NETRC[];
     57 extern const NameValue setopt_nv_CURLPROTO[];
     58 extern const NameValueUnsigned setopt_nv_CURLAUTH[];
     59 
     60 /* Map options to NameValue sets */
     61 #define setopt_nv_CURLOPT_HTTP_VERSION setopt_nv_CURL_HTTP_VERSION
     62 #define setopt_nv_CURLOPT_HTTPAUTH setopt_nv_CURLAUTH
     63 #define setopt_nv_CURLOPT_SSLVERSION setopt_nv_CURL_SSLVERSION
     64 #define setopt_nv_CURLOPT_TIMECONDITION setopt_nv_CURL_TIMECOND
     65 #define setopt_nv_CURLOPT_FTP_SSL_CCC setopt_nv_CURLFTPSSL_CCC
     66 #define setopt_nv_CURLOPT_USE_SSL setopt_nv_CURLUSESSL
     67 #define setopt_nv_CURLOPT_SSL_OPTIONS setopt_nv_CURLSSLOPT
     68 #define setopt_nv_CURLOPT_NETRC setopt_nv_CURL_NETRC
     69 #define setopt_nv_CURLOPT_PROTOCOLS setopt_nv_CURLPROTO
     70 #define setopt_nv_CURLOPT_REDIR_PROTOCOLS setopt_nv_CURLPROTO
     71 #define setopt_nv_CURLOPT_PROXYTYPE setopt_nv_CURLPROXY
     72 #define setopt_nv_CURLOPT_PROXYAUTH setopt_nv_CURLAUTH
     73 
     74 /* Intercept setopt calls for --libcurl */
     75 
     76 CURLcode tool_setopt_enum(CURL *curl, struct GlobalConfig *config,
     77                           const char *name, CURLoption tag,
     78                           const NameValue *nv, long lval);
     79 CURLcode tool_setopt_flags(CURL *curl, struct GlobalConfig *config,
     80                            const char *name, CURLoption tag,
     81                            const NameValue *nv, long lval);
     82 CURLcode tool_setopt_bitmask(CURL *curl, struct GlobalConfig *config,
     83                              const char *name, CURLoption tag,
     84                              const NameValueUnsigned *nv, long lval);
     85 CURLcode tool_setopt_httppost(CURL *curl, struct GlobalConfig *config,
     86                               const char *name, CURLoption tag,
     87                               struct curl_httppost *httppost);
     88 CURLcode tool_setopt_slist(CURL *curl, struct GlobalConfig *config,
     89                            const char *name, CURLoption tag,
     90                            struct curl_slist *list);
     91 CURLcode tool_setopt(CURL *curl, bool str, struct GlobalConfig *config,
     92                      const char *name, CURLoption tag, ...);
     93 
     94 #define my_setopt(x,y,z) \
     95   SETOPT_CHECK(tool_setopt(x, FALSE, global, #y, y, z))
     96 
     97 #define my_setopt_str(x,y,z) \
     98   SETOPT_CHECK(tool_setopt(x, TRUE, global, #y, y, z))
     99 
    100 #define my_setopt_enum(x,y,z) \
    101   SETOPT_CHECK(tool_setopt_enum(x, global, #y, y, setopt_nv_ ## y, z))
    102 
    103 #define my_setopt_flags(x,y,z) \
    104   SETOPT_CHECK(tool_setopt_flags(x, global, #y, y, setopt_nv_ ## y, z))
    105 
    106 #define my_setopt_bitmask(x,y,z) \
    107   SETOPT_CHECK(tool_setopt_bitmask(x, global, #y, y, setopt_nv_ ## y, z))
    108 
    109 #define my_setopt_httppost(x,y,z) \
    110   SETOPT_CHECK(tool_setopt_httppost(x, global, #y, y, z))
    111 
    112 #define my_setopt_slist(x,y,z) \
    113   SETOPT_CHECK(tool_setopt_slist(x, global, #y, y, z))
    114 
    115 #define res_setopt(x,y,z) tool_setopt(x, FALSE, global, #y, y, z)
    116 
    117 #define res_setopt_str(x,y,z) tool_setopt(x, TRUE, global, #y, y, z)
    118 
    119 #else /* CURL_DISABLE_LIBCURL_OPTION */
    120 
    121 /* No --libcurl, so pass options directly to library */
    122 
    123 #define my_setopt(x,y,z) \
    124   SETOPT_CHECK(curl_easy_setopt(x, y, z))
    125 
    126 #define my_setopt_str(x,y,z) \
    127   SETOPT_CHECK(curl_easy_setopt(x, y, z))
    128 
    129 #define my_setopt_enum(x,y,z) \
    130   SETOPT_CHECK(curl_easy_setopt(x, y, z))
    131 
    132 #define my_setopt_flags(x,y,z) \
    133   SETOPT_CHECK(curl_easy_setopt(x, y, z))
    134 
    135 #define my_setopt_bitmask(x,y,z) \
    136   SETOPT_CHECK(curl_easy_setopt(x, y, z))
    137 
    138 #define my_setopt_httppost(x,y,z) \
    139   SETOPT_CHECK(curl_easy_setopt(x, y, z))
    140 
    141 #define my_setopt_slist(x,y,z) \
    142   SETOPT_CHECK(curl_easy_setopt(x, y, z))
    143 
    144 #define res_setopt(x,y,z) curl_easy_setopt(x,y,z)
    145 
    146 #define res_setopt_str(x,y,z) curl_easy_setopt(x,y,z)
    147 
    148 #endif /* CURL_DISABLE_LIBCURL_OPTION */
    149 
    150 #endif /* HEADER_CURL_TOOL_SETOPT_H */
    151