[asterisk-commits] bweschke: trunk r41900 - /trunk/funcs/func_curl.c

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Sun Sep 3 12:07:59 MST 2006


Author: bweschke
Date: Sun Sep  3 14:07:58 2006
New Revision: 41900

URL: http://svn.digium.com/view/asterisk?rev=41900&view=rev
Log:
 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.


Modified:
    trunk/funcs/func_curl.c

Modified: trunk/funcs/func_curl.c
URL: http://svn.digium.com/view/asterisk/trunk/funcs/func_curl.c?rev=41900&r1=41899&r2=41900&view=diff
==============================================================================
--- trunk/funcs/func_curl.c (original)
+++ trunk/funcs/func_curl.c Sun Sep  3 14:07:58 2006
@@ -57,6 +57,7 @@
 	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 @@
 {
 	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 @@
 	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 @@
 	res = ast_custom_function_unregister(&acf_curl);
 
 	ast_module_user_hangup_all();
+
+	curl_global_cleanup();
 	
 	return res;
 }
@@ -170,6 +176,11 @@
 {
 	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;



More information about the asterisk-commits mailing list