Skip to content
Snippets Groups Projects
Commit f1b43be4 authored by BJ Weschke's avatar BJ Weschke
Browse files

Some changes/fixes for func_curl. curl_global_init is only supposed to be...

 Some changes/fixes for func_curl. curl_global_init is only supposed to be called once, and if it returns non-zero, we need to give up on further executions with that instance. Additionally, let's set absolute timeout values for the CURL connections to try and prevent possible Zap (and possibly other channel tech) channel lockouts.



git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@41900 65c4cc65-6c06-0410-ace0-fbb531ad65f3
parent 06b98dcc
Branches
Tags
No related merge requests found
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment