Revision
15107
Author
anthm
Date
2009-10-07 09:44:25 -0500 (Wed, 07 Oct 2009)

Log Message

XML-12

Modified Paths

Diff

Modified: freeswitch/trunk/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c (15106 => 15107)


--- freeswitch/trunk/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c	2009-10-07 04:56:32 UTC (rev 15106)
+++ freeswitch/trunk/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c	2009-10-07 14:44:25 UTC (rev 15107)
@@ -55,6 +55,7 @@
 	char *cookie_file;
 	switch_hash_t *vars_map;
 	int use_dynamic_url;
+	int auth_scheme;
 };
 
 static int keep_files_around = 0;
@@ -217,7 +218,7 @@
 
 	if ((config_data.fd = open(filename, O_CREAT | O_RDWR | O_TRUNC, S_IRUSR | S_IWUSR)) > -1) {
 		if (!switch_strlen_zero(binding->cred)) {
-			curl_easy_setopt(curl_handle, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
+			curl_easy_setopt(curl_handle, CURLOPT_HTTPAUTH, binding->auth_scheme);
 			curl_easy_setopt(curl_handle, CURLOPT_USERPWD, binding->cred);
 		}
 		curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, headers);
@@ -355,7 +356,9 @@
 		hash_node_t* hash_node;
 		need_vars_map = 0;
 		vars_map = NULL;
+		int auth_scheme = CURLAUTH_BASIC;
 
+
 		for (param = switch_xml_child(binding_tag, "param"); param; param = param->next) {
 			char *var = (char *) switch_xml_attr_soft(param, "name");
 			char *val = (char *) switch_xml_attr_soft(param, "value");
@@ -366,6 +369,23 @@
 				}
 			} else if (!strcasecmp(var, "gateway-credentials")) {
 				bind_cred = val;
+			} else if (!strcasecmp(var, "auth-scheme")) {
+				if (*val == '=') {
+					auth_scheme = 0;
+					val++;
+				}
+
+				if (!strcasecmp(val, "basic")) {
+					auth_scheme |= CURLAUTH_BASIC;
+				} else if (!strcasecmp(val, "digest")) {
+					auth_scheme = CURLAUTH_DIGEST;
+				} else if (!strcasecmp(val, "NTLM")) {
+					auth_scheme = CURLAUTH_NTLM;
+				} else if (!strcasecmp(val, "GSS-NEGOTIATE")) {
+					auth_scheme = CURLAUTH_GSSNEGOTIATE;
+				} else if (!strcasecmp(val, "any")) {
+					auth_scheme = CURLAUTH_ANY;
+				}
 			} else if (!strcasecmp(var, "disable-100-continue") && switch_true(val)) {
 				disable100continue = 1;
 			} else if (!strcasecmp(var, "method")) {
@@ -419,6 +439,8 @@
 		}
 		memset(binding, 0, sizeof(*binding));
 
+		binding->auth_scheme = auth_scheme;
+		
 		binding->url = strdup(url);
 		switch_assert(binding->url);