Line data Source code
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 0 : TALER_EXCHANGE_setup (enum TALER_EXCHANGE_GlobalOptions go)
36 : {
37 0 : unsigned int ago = TALER_AUDITOR_GO_NONE;
38 :
39 0 : eglobal_options = go;
40 0 : if (0 != (TALER_EXCHANGE_GO_FORCE_HTTP1_1 & go))
41 0 : ago |= TALER_AUDITOR_GO_FORCE_HTTP1_1;
42 0 : if (0 != (TALER_EXCHANGE_GO_ENABLE_HTTP3 & go))
43 0 : 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 0 : TALER_AUDITOR_setup ((enum TALER_AUDITOR_GlobalOptions) ago);
47 0 : }
48 :
49 :
50 : CURL *
51 680 : TALER_EXCHANGE_curl_easy_get_ (const char *url)
52 : {
53 : CURL *eh;
54 :
55 680 : eh = curl_easy_init ();
56 680 : if (NULL == eh)
57 : {
58 0 : GNUNET_break (0);
59 0 : return NULL;
60 : }
61 680 : GNUNET_assert (CURLE_OK ==
62 : curl_easy_setopt (eh,
63 : CURLOPT_URL,
64 : url));
65 680 : 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 680 : GNUNET_break (CURLE_OK ==
70 : curl_easy_setopt (eh,
71 : CURLOPT_ACCEPT_ENCODING,
72 : ""));
73 680 : GNUNET_assert (CURLE_OK ==
74 : curl_easy_setopt (eh,
75 : CURLOPT_TCP_FASTOPEN,
76 : 1L));
77 680 : TALER_curl_set_http_version (
78 : eh,
79 680 : (0 != (TALER_EXCHANGE_GO_ENABLE_HTTP3 & eglobal_options)) &&
80 680 : (0 == (TALER_EXCHANGE_GO_FORCE_HTTP1_1 & eglobal_options)));
81 680 : return eh;
82 : }
|