--- plug-ins/file-uri/uri-backend-libcurl.c.orig 2011-09-01 09:06:13.307741499 -0500 +++ plug-ins/file-uri/uri-backend-libcurl.c 2011-09-01 09:09:09.066152187 -0500 @@ -62,7 +62,7 @@ vinfo = curl_version_info (CURLVERSION_NOW); - protocols = g_string_new ("http:,ftp:"); + protocols = g_string_new ("http:,ftp:,gopher:"); if (vinfo->features & CURL_VERSION_SSL) { @@ -153,6 +153,11 @@ CURL *curl_handle; CURLcode result; gint response_code; + gchar *eff_url = NULL; + gchar *proto = NULL; + gboolean is_http = FALSE; + gboolean is_ftp = FALSE; + gboolean is_gopher = FALSE; gimp_progress_init (_("Connecting to server")); @@ -194,13 +199,52 @@ curl_easy_getinfo (curl_handle, CURLINFO_RESPONSE_CODE, &response_code); - if (response_code != 200) + /* protocol could be not specified in provided uri + get complete url guessed by curl */ + curl_easy_getinfo (curl_handle, CURLINFO_EFFECTIVE_URL, &eff_url); + + /* detect uri protocol */ + if (! g_ascii_strncasecmp (eff_url, "http://", 7)) + { + is_http = TRUE; + proto = "HTTP"; + } + else + if (! g_ascii_strncasecmp (eff_url, "https://", 8)) + { + is_http = TRUE; + proto = "HTTPS"; + } + else + if (! g_ascii_strncasecmp (eff_url, "ftp://", 6)) + { + is_ftp = TRUE; + proto = "FTP"; + } + else + if (! g_ascii_strncasecmp (eff_url, "ftps://", 7)) + { + is_ftp = TRUE; + proto = "FTPS"; + } + else + if (! g_ascii_strncasecmp (eff_url ,"gopher://", 9)) + { + is_gopher = TRUE; + proto = "GOPHER"; + } + else + { + proto = "UNKNOWN"; + } + + if (! ((is_http && response_code == 200) || (is_ftp && response_code == 226) || (is_gopher))) { fclose (out_file); g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, - _("Opening '%s' for reading resulted in HTTP " + _("Opening '%s' for reading resulted in %s " "response code: %d"), - uri, response_code); + uri, proto, response_code); curl_easy_cleanup (curl_handle); return FALSE; }