diff options
author | Dan Winship <danw@gnome.org> | 2010-07-30 14:50:36 +0200 |
---|---|---|
committer | Dan Winship <danw@gnome.org> | 2010-07-30 16:29:15 +0200 |
commit | f30609cb754812a77b124a2a770dd1c521c70a6b (patch) | |
tree | d3f68230d55262fc47da6a4ae065d8730d2dd1ef | |
parent | b42a8768893acc9b5d2c6d329d8cfa3b2de1fe40 (diff) | |
download | libsoup-f30609cb754812a77b124a2a770dd1c521c70a6b.tar.gz |
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
-rw-r--r-- | libsoup/soup-session-async.c | 4 | ||||
-rw-r--r-- | libsoup/soup-session-private.h | 3 | ||||
-rw-r--r-- | libsoup/soup-session-sync.c | 8 | ||||
-rw-r--r-- | 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 eb2f98e6..34d6405c 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 e4938860..7462c618 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 077173aa..1b64e9a7 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 56ead69c..59167716 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) |