[libsoup] Put the hostname into the reason_phrase with network errors



commit f30609cb754812a77b124a2a770dd1c521c70a6b
Author: Dan Winship <danw gnome org>
Date:   Fri Jul 30 14:50:36 2010 +0200

    Put the hostname into the reason_phrase with network errors
    
    eg, "Cannot resolve hostname (sadfasdfasdfasdf.com)"
    
    This can be useful for debugging.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=623274

 libsoup/soup-session-async.c   |    4 ++--
 libsoup/soup-session-private.h |    3 +++
 libsoup/soup-session-sync.c    |    8 ++++----
 libsoup/soup-session.c         |   36 ++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+), 6 deletions(-)
---
diff --git a/libsoup/soup-session-async.c b/libsoup/soup-session-async.c
index eb2f98e..34d6405 100644
--- a/libsoup/soup-session-async.c
+++ b/libsoup/soup-session-async.c
@@ -132,7 +132,7 @@ item_failed (SoupMessageQueueItem *item, guint status)
 	if (!SOUP_STATUS_IS_SUCCESSFUL (status)) {
 		item->state = SOUP_MESSAGE_FINISHING;
 		if (!item->msg->status_code)
-			soup_message_set_status (item->msg, status);
+			soup_session_set_item_status (item->session, item, status);
 		do_idle_run_queue (item->session);
 		soup_message_queue_item_unref (item);
 		return TRUE;
@@ -296,7 +296,7 @@ got_connection (SoupConnection *conn, guint status, gpointer user_data)
 	}
 
 	if (status != SOUP_STATUS_OK) {
-		soup_message_set_status (item->msg, status);
+		soup_session_set_item_status (session, item, status);
 		item->state = SOUP_MESSAGE_FINISHING;
 
 		soup_connection_disconnect (conn);
diff --git a/libsoup/soup-session-private.h b/libsoup/soup-session-private.h
index e493886..7462c61 100644
--- a/libsoup/soup-session-private.h
+++ b/libsoup/soup-session-private.h
@@ -27,6 +27,9 @@ void                  soup_session_send_queue_item      (SoupSession          *s
 							 SoupMessageCompletionFn completion_cb);
 void                  soup_session_unqueue_item         (SoupSession          *session,
 							 SoupMessageQueueItem *item);
+void                  soup_session_set_item_status      (SoupSession          *session,
+							 SoupMessageQueueItem *item,
+							 guint                 status_code);
 
 G_END_DECLS
 
diff --git a/libsoup/soup-session-sync.c b/libsoup/soup-session-sync.c
index 077173a..1b64e9a 100644
--- a/libsoup/soup-session-sync.c
+++ b/libsoup/soup-session-sync.c
@@ -203,7 +203,7 @@ try_again:
 
 	if (!SOUP_STATUS_IS_SUCCESSFUL (status)) {
 		if (!msg->status_code)
-			soup_message_set_status (msg, status);
+			soup_session_set_item_status (session, item, status);
 		item->state = SOUP_MESSAGE_FINISHING;
 		soup_connection_disconnect (item->conn);
 		g_object_unref (item->conn);
@@ -219,7 +219,7 @@ try_again:
 			item->conn = NULL;
 			if (status == SOUP_STATUS_TRY_AGAIN)
 				goto try_again;
-			soup_message_set_status (item->msg, status);
+			soup_session_set_item_status (session, item, status);
 			item->state = SOUP_MESSAGE_FINISHING;
 			return;
 		}
@@ -251,7 +251,7 @@ process_queue_item (SoupMessageQueueItem *item)
 				proxy_resolver, soup_message_get_uri (msg),
 				item->cancellable, &item->proxy_uri);
 			if (!SOUP_STATUS_IS_SUCCESSFUL (status)) {
-				soup_message_set_status (msg, status);
+				soup_session_set_item_status (session, item, status);
 				item->state = SOUP_MESSAGE_FINISHING;
 				break;
 			}
@@ -267,7 +267,7 @@ process_queue_item (SoupMessageQueueItem *item)
 			if (SOUP_STATUS_IS_SUCCESSFUL (status))
 				item->state = SOUP_MESSAGE_AWAITING_CONNECTION;
 			else {
-				soup_message_set_status (msg, status);
+				soup_session_set_item_status (session, item, status);
 				item->state = SOUP_MESSAGE_FINISHING;
 			}
 			break;
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c
index 56ead69..5916771 100644
--- a/libsoup/soup-session.c
+++ b/libsoup/soup-session.c
@@ -1424,6 +1424,42 @@ soup_session_unqueue_item (SoupSession          *session,
 	soup_message_queue_item_unref (item);
 }
 
+void
+soup_session_set_item_status (SoupSession          *session,
+			      SoupMessageQueueItem *item,
+			      guint                 status_code)
+{
+	SoupURI *uri;
+	char *msg;
+
+	switch (status_code) {
+	case SOUP_STATUS_CANT_RESOLVE:
+	case SOUP_STATUS_CANT_CONNECT:
+		uri = soup_message_get_uri (item->msg);
+		msg = g_strdup_printf ("%s (%s)",
+				       soup_status_get_phrase (status_code),
+				       uri->host);
+		soup_message_set_status_full (item->msg, status_code, msg);
+		g_free (msg);
+		break;
+
+	case SOUP_STATUS_CANT_RESOLVE_PROXY:
+	case SOUP_STATUS_CANT_CONNECT_PROXY:
+		if (item->proxy_uri && item->proxy_uri->host) {
+			msg = g_strdup_printf ("%s (%s)",
+					       soup_status_get_phrase (status_code),
+					       item->proxy_uri->host);
+			soup_message_set_status_full (item->msg, status_code, msg);
+			g_free (msg);
+			break;
+		}
+		/* else fall through */
+
+	default:
+		soup_message_set_status (item->msg, status_code);
+	}
+}
+
 static void
 queue_message (SoupSession *session, SoupMessage *msg,
 	       SoupSessionCallback callback, gpointer user_data)



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