static void handle_logout (DMAPConnection * connection, guint status, GNode * structure, gpointer user_data) { connection_disconnected (connection); /* is there any point handling errors here? */ dmap_connection_state_done (connection, TRUE); }
void soup_session_connection_failed (SoupSession *session, SoupConnection *conn, guint status) { SoupSessionPrivate *priv = SOUP_SESSION_GET_PRIVATE (session); SoupSessionHost *host; SoupMessageQueueItem *item; SoupMessage *msg; g_mutex_lock (priv->host_lock); host = g_hash_table_lookup (priv->conns, conn); g_mutex_unlock (priv->host_lock); if (!host) return; connection_disconnected (conn, session); if (host->connections) { /* Something went wrong this time, but we have at * least one open connection to this host. So just * leave the message in the queue so it can use that * connection once it's free. */ return; } /* Assume that there's something wrong with the host, and * cancel any other messages waiting for a connection to it, * since they're out of luck. */ g_object_ref (session); for (item = soup_message_queue_first (priv->queue); item; item = soup_message_queue_next (priv->queue, item)) { msg = item->msg; if (get_host_for_message (session, msg) == host) soup_session_cancel_message (session, msg, status); } g_object_unref (session); }