static void message_finished (SoupMessage *msg, gpointer user_data) { SoupMessageQueueItem *item = user_data; SoupSession *session = item->session; SoupSessionPrivate *priv = SOUP_SESSION_GET_PRIVATE (session); if (item->conn) { g_object_unref (item->conn); item->conn = NULL; } if (!SOUP_MESSAGE_IS_STARTING (msg)) { soup_message_queue_remove (priv->queue, item); g_signal_handlers_disconnect_by_func (msg, message_finished, item); /* g_signal_handlers_disconnect_by_func doesn't work if you * have a metamarshal, meaning it doesn't work with * soup_message_add_header_handler() */ g_signal_handlers_disconnect_matched (msg, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, session); g_signal_emit (session, signals[REQUEST_UNQUEUED], 0, msg); soup_message_queue_item_unref (item); } }
static void tunnel_connected (SoupMessage *msg, gpointer user_data) { SoupSessionAsyncTunnelData *data = user_data; if (SOUP_MESSAGE_IS_STARTING (msg)) { soup_session_send_queue_item (data->session, data->item, data->conn); return; } if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) { soup_session_connection_failed (data->session, data->conn, msg->status_code); goto done; } if (!soup_connection_start_ssl (data->conn)) { soup_session_connection_failed (data->session, data->conn, SOUP_STATUS_SSL_FAILED); goto done; } g_signal_connect (data->conn, "disconnected", G_CALLBACK (connection_closed), data->session); soup_connection_set_state (data->conn, SOUP_CONNECTION_IDLE); do_idle_run_queue (data->session); done: soup_message_queue_item_unref (data->item); g_slice_free (SoupSessionAsyncTunnelData, data); }
static void soup_message_io_finished (SoupMessage *msg) { g_object_ref (msg); soup_message_io_cleanup (msg); if (SOUP_MESSAGE_IS_STARTING (msg)) soup_message_restarted (msg); else soup_message_finished (msg); g_object_unref (msg); }
static void final_finished (SoupMessage *req, gpointer user_data) { SoupMessageQueueItem *item = user_data; SoupSession *session = item->session; g_object_ref (session); if (!SOUP_MESSAGE_IS_STARTING (req)) { g_signal_handlers_disconnect_by_func (req, final_finished, item); g_signal_handlers_disconnect_by_func (req, request_restarted, item); if (item->callback) item->callback (session, req, item->callback_data); g_object_unref (req); soup_message_queue_item_unref (item); } do_idle_run_queue (session); g_object_unref (session); }