exchange_api_curl_defaults.c (2641B)
1 /* 2 This file is part of TALER 3 Copyright (C) 2014-2018, 2021 Taler Systems SA 4 5 TALER is free software; you can redistribute it and/or modify it under the 6 terms of the GNU General Public License as published by the Free Software 7 Foundation; either version 3, or (at your option) any later version. 8 9 TALER is distributed in the hope that it will be useful, but WITHOUT ANY 10 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR 11 A PARTICULAR PURPOSE. See the GNU General Public License for more details. 12 13 You should have received a copy of the GNU General Public License along with 14 TALER; see the file COPYING. If not, see 15 <http://www.gnu.org/licenses/> 16 */ 17 /** 18 * @file lib/exchange_api_curl_defaults.c 19 * @brief curl easy handle defaults 20 * @author Florian Dold 21 */ 22 #include "taler/taler_curl_lib.h" 23 #include "exchange_api_curl_defaults.h" 24 #include "taler/taler_auditor_service.h" 25 #include "taler/exchange/common.h" 26 27 28 /** 29 * Global options for HTTP requests. 30 */ 31 static enum TALER_EXCHANGE_GlobalOptions eglobal_options; 32 33 34 void 35 TALER_EXCHANGE_setup (enum TALER_EXCHANGE_GlobalOptions go) 36 { 37 unsigned int ago = TALER_AUDITOR_GO_NONE; 38 39 eglobal_options = go; 40 if (0 != (TALER_EXCHANGE_GO_FORCE_HTTP1_1 & go)) 41 ago |= TALER_AUDITOR_GO_FORCE_HTTP1_1; 42 if (0 != (TALER_EXCHANGE_GO_ENABLE_HTTP3 & go)) 43 ago |= TALER_AUDITOR_GO_ENABLE_HTTP3; 44 /* libtalerexchange also makes connections via libtalerauditor 45 to the auditor, so apply the equivalent options there as well. */ 46 TALER_AUDITOR_setup ((enum TALER_AUDITOR_GlobalOptions) ago); 47 } 48 49 50 CURL * 51 TALER_EXCHANGE_curl_easy_get_ (const char *url) 52 { 53 CURL *eh; 54 55 eh = curl_easy_init (); 56 if (NULL == eh) 57 { 58 GNUNET_break (0); 59 return NULL; 60 } 61 GNUNET_assert (CURLE_OK == 62 curl_easy_setopt (eh, 63 CURLOPT_URL, 64 url)); 65 TALER_curl_set_secure_redirect_policy (eh, 66 url); 67 /* Enable compression (using whatever curl likes), see 68 https://curl.se/libcurl/c/CURLOPT_ACCEPT_ENCODING.html */ 69 GNUNET_break (CURLE_OK == 70 curl_easy_setopt (eh, 71 CURLOPT_ACCEPT_ENCODING, 72 "")); 73 GNUNET_assert (CURLE_OK == 74 curl_easy_setopt (eh, 75 CURLOPT_TCP_FASTOPEN, 76 1L)); 77 TALER_curl_set_http_version ( 78 eh, 79 (0 != (TALER_EXCHANGE_GO_ENABLE_HTTP3 & eglobal_options)) && 80 (0 == (TALER_EXCHANGE_GO_FORCE_HTTP1_1 & eglobal_options))); 81 return eh; 82 }