From 0c2bf1664c0ce47e68e09846fa7bddcfcfa91e22 Mon Sep 17 00:00:00 2001 From: Sean Bright <sean.bright@gmail.com> Date: Fri, 10 Jan 2020 14:30:20 -0500 Subject: [PATCH] func_curl: Add 'followlocation' option to CURLOPT() We allow for 'maxredirs' to be set, but this value is ignored when followlocation is not enabled which, by default, it is not. ASTERISK-17491 #close Reported by: candrews Change-Id: I96a4ab0142f2fb7d2e96ff976f6cf7b2982c761a --- doc/CHANGES-staging/func_curl.txt | 5 +++++ funcs/func_curl.c | 11 ++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 doc/CHANGES-staging/func_curl.txt diff --git a/doc/CHANGES-staging/func_curl.txt b/doc/CHANGES-staging/func_curl.txt new file mode 100644 index 0000000000..fa9ad97462 --- /dev/null +++ b/doc/CHANGES-staging/func_curl.txt @@ -0,0 +1,5 @@ +Subject: func_curl + +A new option, followlocation, can now be enabled with the CURLOPT() +dialplan function. Setting this will instruct cURL to follow 3xx +redirects, which it does not by default. diff --git a/funcs/func_curl.c b/funcs/func_curl.c index af54f7d0fc..fcc626a3a6 100644 --- a/funcs/func_curl.c +++ b/funcs/func_curl.c @@ -110,6 +110,9 @@ <enum name="dnstimeout"> <para>Number of seconds to wait for DNS to be resolved</para> </enum> + <enum name="followlocation"> + <para>Whether or not to follow HTTP 3xx redirects (boolean)</para> + </enum> <enum name="ftptext"> <para>For FTP URIs, force a text transfer (boolean)</para> </enum> @@ -131,7 +134,9 @@ server response</para> </enum> <enum name="maxredirs"> - <para>Maximum number of redirects to follow</para> + <para>Maximum number of redirects to follow. The default is -1, + which allows for unlimited redirects. This only makes sense when + followlocation is also set.</para> </enum> <enum name="proxy"> <para>Hostname or IP address to use as a proxy server</para> @@ -269,6 +274,9 @@ static int parse_curlopt_key(const char *name, CURLoption *key, enum optiontype } else if (!strcasecmp(name, "proxyuserpwd")) { *key = CURLOPT_PROXYUSERPWD; *ot = OT_STRING; + } else if (!strcasecmp(name, "followlocation")) { + *key = CURLOPT_FOLLOWLOCATION; + *ot = OT_BOOLEAN; } else if (!strcasecmp(name, "maxredirs")) { *key = CURLOPT_MAXREDIRS; *ot = OT_INTEGER; @@ -858,6 +866,7 @@ static struct ast_custom_function acf_curlopt = { " cookie - Send cookie with request [none]\n" " conntimeout - Number of seconds to wait for connection\n" " dnstimeout - Number of seconds to wait for DNS response\n" +" followlocation - Follow HTTP 3xx redirects (boolean)\n" " ftptext - For FTP, force a text transfer (boolean)\n" " ftptimeout - For FTP, the server response timeout\n" " header - Retrieve header information (boolean)\n" -- GitLab