summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2010-07-30 14:50:36 +0200
committerDan Winship <danw@gnome.org>2010-07-30 16:29:15 +0200
commitf30609cb754812a77b124a2a770dd1c521c70a6b (patch)
treed3f68230d55262fc47da6a4ae065d8730d2dd1ef
parentb42a8768893acc9b5d2c6d329d8cfa3b2de1fe40 (diff)
downloadlibsoup-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.c4
-rw-r--r--libsoup/soup-session-private.h3
-rw-r--r--libsoup/soup-session-sync.c8
-rw-r--r--libsoup/soup-session.c36
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)