aboutsummaryrefslogtreecommitdiffstats
path: root/funcs/func_curl.c
diff options
context:
space:
mode:
Diffstat (limited to 'funcs/func_curl.c')
-rw-r--r--funcs/func_curl.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/funcs/func_curl.c b/funcs/func_curl.c
index fc5ad79cb..f6091d025 100644
--- a/funcs/func_curl.c
+++ b/funcs/func_curl.c
@@ -57,6 +57,7 @@ struct MemoryStruct {
size_t size;
};
+
static void *myrealloc(void *ptr, size_t size)
{
/* There might be a realloc() out there that doesn't like reallocing
@@ -85,13 +86,16 @@ static int curl_internal(struct MemoryStruct *chunk, char *url, char *post)
{
CURL *curl;
- curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if (!curl) {
return -1;
}
+ curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
+ curl_easy_setopt(curl, CURLOPT_TIMEOUT, 180);
+ curl_easy_setopt(curl, CURLOPT_FRESH_CONNECT, 1);
+ curl_easy_setopt(curl, CURLOPT_FORBID_REUSE, 1);
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)chunk);
@@ -126,7 +130,7 @@ static int acf_curl_exec(struct ast_channel *chan, char *cmd, char *info, char *
u = ast_module_user_add(chan);
AST_STANDARD_APP_ARGS(args, info);
-
+
if (!curl_internal(&chunk, args.url, args.postdata)) {
if (chunk.memory) {
chunk.memory[chunk.size] = '\0';
@@ -162,6 +166,8 @@ static int unload_module(void)
res = ast_custom_function_unregister(&acf_curl);
ast_module_user_hangup_all();
+
+ curl_global_cleanup();
return res;
}
@@ -170,6 +176,11 @@ static int load_module(void)
{
int res;
+ if (curl_global_init(CURL_GLOBAL_ALL)) {
+ ast_log(LOG_ERROR, "Unable to initialize the CURL library. Cannot load func_curl\n");
+ return AST_MODULE_LOAD_DECLINE;
+ }
+
res = ast_custom_function_register(&acf_curl);
return res;