evolution-data-server r10195 - in trunk/calendar: . backends/caldav



Author: mcrha
Date: Tue Mar 31 13:55:24 2009
New Revision: 10195
URL: http://svn.gnome.org/viewvc/evolution-data-server?rev=10195&view=rev

Log:
2009-03-31  Milan Crha  <mcrha redhat com>

	** Fix for bug #573880

	* backends/caldav/e-cal-backend-caldav.c: (initialize_backend):
	Properly encode given uri before using it.

	* backends/caldav/e-cal-backend-caldav.c: (synchronize_object),
	(caldav_server_get_object): Print more detailed information
	on error and do not duplicate error messages.



Modified:
   trunk/calendar/ChangeLog
   trunk/calendar/backends/caldav/e-cal-backend-caldav.c

Modified: trunk/calendar/backends/caldav/e-cal-backend-caldav.c
==============================================================================
--- trunk/calendar/backends/caldav/e-cal-backend-caldav.c	(original)
+++ trunk/calendar/backends/caldav/e-cal-backend-caldav.c	Tue Mar 31 13:55:24 2009
@@ -1167,20 +1167,23 @@
 
 	uri = caldav_generate_uri (cbdav, object->href);
 	message = soup_message_new (SOUP_METHOD_GET, uri);
-	g_free (uri);
-	if (message == NULL)
+	if (message == NULL) {
+		g_free (uri);
 		return GNOME_Evolution_Calendar_NoSuchCal;
+	}
 
 	soup_message_headers_append (message->request_headers,
 				     "User-Agent", "Evolution/" VERSION);
 
 	send_and_handle_redirection (priv->session, message, NULL);
 
-	if (! SOUP_STATUS_IS_SUCCESSFUL (message->status_code)) {
-		result = status_code_to_result (message->status_code, priv);
+	if (!SOUP_STATUS_IS_SUCCESSFUL (message->status_code)) {
+		guint status_code = message->status_code;
 		g_object_unref (message);
-		g_warning ("Could not fetch object from server\n");
-		return result;
+
+		g_warning ("Could not fetch object '%s' from server, status:%d (%s)", uri, status_code, soup_status_get_phrase (status_code) ? soup_status_get_phrase (status_code) : "Unknown code");
+		g_free (uri);
+		return status_code_to_result (status_code, priv);
 	}
 
 	hdr = soup_message_headers_get (message->response_headers, "Content-Type");
@@ -1188,7 +1191,8 @@
 	if (hdr == NULL || g_ascii_strncasecmp (hdr, "text/calendar", 13)) {
 		result = GNOME_Evolution_Calendar_InvalidObject;
 		g_object_unref (message);
-		g_warning ("Object to fetch not of type text/calendar");
+		g_warning ("Object to fetch '%s' not of type text/calendar", uri);
+		g_free (uri);
 		return result;
 	}
 
@@ -1198,8 +1202,9 @@
 		g_free (object->etag);
 		object->etag = quote_etag (hdr);
 	} else if (!object->etag) {
-		g_warning ("UUHH no ETag, now that's bad!");
+		g_warning ("UUHH no ETag, now that's bad! (at '%s')", uri);
 	}
+	g_free (uri);
 
 	g_free (object->cdata);
 	object->cdata = g_strdup (message->response_body->data);
@@ -1351,10 +1356,8 @@
 	res  = TRUE;
 	result  = caldav_server_get_object (cbdav, object);
 
-	if (result != GNOME_Evolution_Calendar_Success) {
-		g_warning ("Could not fetch object from server");
+	if (result != GNOME_Evolution_Calendar_Success)
 		return FALSE;
-	}
 
 	priv = E_CAL_BACKEND_CALDAV_GET_PRIVATE (cbdav);
 
@@ -1720,6 +1723,28 @@
 		priv->uri = g_strdup (uri);
 	}
 
+	if (priv->uri) {
+		char *p = strstr (priv->uri, "://");
+		char *tmp, *old = priv->uri;
+
+		/* properly encode uri */
+		tmp = soup_uri_encode (p ? p + 3 : priv->uri, NULL);
+
+		priv->uri = soup_uri_normalize (tmp, "/");
+		g_free (tmp);
+
+		if (p) {
+			/* prepend protocol */
+			tmp = priv->uri;
+			p [3] = 0;
+
+			priv->uri = g_strconcat (old, tmp, NULL);
+			g_free (tmp);
+		}
+
+		g_free (old);
+	}
+
 	/* remove trailing slashes... */
 	len = strlen (priv->uri);
 	while (len--) {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]