status = soup_status_proxify (status);
data->callback (data->conn, status, data->callback_data);
}
- if (!SOUP_STATUS_IS_SUCCESSFUL (status) && status != SOUP_STATUS_TRY_AGAIN)
- soup_connection_disconnect (data->conn);
g_object_unref (data->conn);
if (data->cancellable)
g_object_unref (data->cancellable);
SOUP_SOCKET_CLEAN_DISPOSE, TRUE,
NULL);
g_object_unref (remote_addr);
+
event_id = g_signal_connect (priv->socket, "event",
G_CALLBACK (proxy_socket_event), conn);
status = soup_socket_connect_sync (priv->socket, cancellable);
soup_connection_set_state (conn, SOUP_CONNECTION_IN_USE);
priv->unused_timeout = time (NULL) + SOUP_CONNECTION_UNUSED_TIMEOUT;
start_idle_timer (conn);
- } else if (status != SOUP_STATUS_TRY_AGAIN) {
- fail:
- if (priv->socket) {
- soup_socket_disconnect (priv->socket);
- g_object_unref (priv->socket);
- priv->socket = NULL;
- }
-
- soup_connection_disconnect (conn);
}
+ fail:
if (priv->socket && event_id)
g_signal_handler_disconnect (priv->socket, event_id);
if (!soup_socket_start_proxy_ssl (priv->socket,
priv->remote_uri->host,
- cancellable)) {
- soup_connection_disconnect (conn);
+ cancellable))
return SOUP_STATUS_SSL_FAILED;
- }
soup_connection_event (conn, G_SOCKET_CLIENT_TLS_HANDSHAKING, NULL);
status = soup_socket_handshake_sync (priv->socket, cancellable);
status = SOUP_STATUS_TRY_AGAIN;
}
- if (!SOUP_STATUS_IS_SUCCESSFUL (status) && status != SOUP_STATUS_TRY_AGAIN)
- soup_connection_disconnect (conn);
-
return status;
}
}
data->callback (data->conn, status, data->callback_data);
- if (!SOUP_STATUS_IS_SUCCESSFUL (status) && status != SOUP_STATUS_TRY_AGAIN)
- soup_connection_disconnect (data->conn);
g_object_unref (data->conn);
g_slice_free (SoupConnectionAsyncConnectData, data);
}
soup_message_set_https_status (item->msg, item->conn);
if (!SOUP_STATUS_IS_SUCCESSFUL (status)) {
+ soup_connection_disconnect (conn);
soup_session_set_item_connection (session, item, NULL);
soup_session_set_item_status (session, item, status);
}
SoupSession *session = item->session;
if (status != SOUP_STATUS_OK) {
+ soup_connection_disconnect (conn);
if (item->state == SOUP_MESSAGE_CONNECTING) {
soup_session_set_item_status (session, item, status);
soup_session_set_item_connection (session, item, NULL);