X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fgsocks4aproxy.c;h=d54a8162d6d00884adc082d177c00279d7f9c372;hb=66fc112c742f56f85fc34b458325e87df4cd78d0;hp=91ca29d2b1748b2b44569c4069ec4be3ee77ba6b;hpb=d8ca6404229e5b64d2bf2e1a3660ad9fe7feefdd;p=platform%2Fupstream%2Fglib.git diff --git a/gio/gsocks4aproxy.c b/gio/gsocks4aproxy.c index 91ca29d..d54a816 100644 --- a/gio/gsocks4aproxy.c +++ b/gio/gsocks4aproxy.c @@ -13,9 +13,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. + * Public License along with this library; if not, see . * * Author: Nicolas Dufresne */ @@ -26,7 +24,6 @@ #include -#include "gasyncresult.h" #include "giomodule.h" #include "giomodule-priv.h" #include "giostream.h" @@ -36,7 +33,7 @@ #include "goutputstream.h" #include "gproxy.h" #include "gproxyaddress.h" -#include "gsimpleasyncresult.h" +#include "gtask.h" #define SOCKS4_VERSION 4 @@ -135,9 +132,8 @@ set_connect_msg (guint8 *msg, if (user_len > SOCKS4_MAX_LEN) { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_PROXY_FAILED, - _("SOCKSv4 implementation limits username to %i characters"), - SOCKS4_MAX_LEN); + g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_PROXY_FAILED, + _("Username is too long for SOCKSv4 protocol")); return -1; } @@ -154,8 +150,8 @@ set_connect_msg (guint8 *msg, if (host_len > SOCKS4_MAX_LEN) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_PROXY_FAILED, - _("SOCKSv4a implementation limits hostname to %i characters"), - SOCKS4_MAX_LEN); + _("Hostname '%s' is too long for SOCKSv4 protocol"), + hostname); return -1; } @@ -250,10 +246,7 @@ error: typedef struct { - GSimpleAsyncResult *simple; GIOStream *io_stream; - GProxyAddress *proxy_address; - GCancellable *cancellable; /* For connecting */ guint8 *buffer; @@ -272,50 +265,34 @@ static void connect_reply_read_cb (GObject *source, static void free_connect_data (ConnectAsyncData *data) { - if (data->io_stream) - g_object_unref (data->io_stream); - - if (data->proxy_address) - g_object_unref (data->proxy_address); - - if (data->cancellable) - g_object_unref (data->cancellable); - + g_object_unref (data->io_stream); g_slice_free (ConnectAsyncData, data); } static void -complete_async_from_error (ConnectAsyncData *data, GError *error) -{ - GSimpleAsyncResult *simple = data->simple; - g_simple_async_result_take_error (data->simple, error); - g_simple_async_result_set_op_res_gpointer (simple, NULL, NULL); - g_simple_async_result_complete (simple); - g_object_unref (simple); -} - -static void -do_read (GAsyncReadyCallback callback, ConnectAsyncData *data) +do_read (GAsyncReadyCallback callback, GTask *task, ConnectAsyncData *data) { GInputStream *in; in = g_io_stream_get_input_stream (data->io_stream); g_input_stream_read_async (in, data->buffer + data->offset, data->length - data->offset, - G_PRIORITY_DEFAULT, data->cancellable, - callback, data); + g_task_get_priority (task), + g_task_get_cancellable (task), + callback, task); } static void -do_write (GAsyncReadyCallback callback, ConnectAsyncData *data) +do_write (GAsyncReadyCallback callback, GTask *task, ConnectAsyncData *data) { GOutputStream *out; out = g_io_stream_get_output_stream (data->io_stream); g_output_stream_write_async (out, data->buffer + data->offset, data->length - data->offset, - G_PRIORITY_DEFAULT, data->cancellable, - callback, data); + g_task_get_priority (task), + g_task_get_cancellable (task), + callback, task); } @@ -329,26 +306,17 @@ g_socks4a_proxy_connect_async (GProxy *proxy, gpointer user_data) { GError *error = NULL; - GSimpleAsyncResult *simple; + GTask *task; ConnectAsyncData *data; const gchar *hostname; guint16 port; const gchar *username; - simple = g_simple_async_result_new (G_OBJECT (proxy), - callback, user_data, - g_socks4a_proxy_connect_async); - data = g_slice_new0 (ConnectAsyncData); - - data->simple = simple; data->io_stream = g_object_ref (io_stream); - if (cancellable) - data->cancellable = g_object_ref (cancellable); - - g_simple_async_result_set_op_res_gpointer (simple, data, - (GDestroyNotify) free_connect_data); + task = g_task_new (proxy, cancellable, callback, user_data); + g_task_set_task_data (task, data, (GDestroyNotify) free_connect_data); hostname = g_proxy_address_get_destination_hostname (proxy_address); port = g_proxy_address_get_destination_port (proxy_address); @@ -362,14 +330,12 @@ g_socks4a_proxy_connect_async (GProxy *proxy, if (data->length < 0) { - g_simple_async_result_take_error (data->simple, error); - g_simple_async_result_set_op_res_gpointer (simple, NULL, NULL); - g_simple_async_result_complete_in_idle (simple); - g_object_unref (simple); + g_task_return_error (task, error); + g_object_unref (task); } else { - do_write (connect_msg_write_cb, data); + do_write (connect_msg_write_cb, task, data); } } @@ -378,8 +344,9 @@ connect_msg_write_cb (GObject *source, GAsyncResult *result, gpointer user_data) { + GTask *task = user_data; + ConnectAsyncData *data = g_task_get_task_data (task); GError *error = NULL; - ConnectAsyncData *data = user_data; gssize written; written = g_output_stream_write_finish (G_OUTPUT_STREAM (source), @@ -387,7 +354,8 @@ connect_msg_write_cb (GObject *source, if (written < 0) { - complete_async_from_error (data, error); + g_task_return_error (task, error); + g_object_unref (task); return; } @@ -401,11 +369,11 @@ connect_msg_write_cb (GObject *source, data->length = SOCKS4_CONN_REP_LEN; data->offset = 0; - do_read (connect_reply_read_cb, data); + do_read (connect_reply_read_cb, task, data); } else { - do_write (connect_msg_write_cb, data); + do_write (connect_msg_write_cb, task, data); } } @@ -414,8 +382,9 @@ connect_reply_read_cb (GObject *source, GAsyncResult *result, gpointer user_data) { + GTask *task = user_data; + ConnectAsyncData *data = g_task_get_task_data (task); GError *error = NULL; - ConnectAsyncData *data = user_data; gssize read; read = g_input_stream_read_finish (G_INPUT_STREAM (source), @@ -423,7 +392,8 @@ connect_reply_read_cb (GObject *source, if (read < 0) { - complete_async_from_error (data, error); + g_task_return_error (task, error); + g_object_unref (task); return; } @@ -433,18 +403,20 @@ connect_reply_read_cb (GObject *source, { if (!parse_connect_reply (data->buffer, &error)) { - complete_async_from_error (data, error); + g_task_return_error (task, error); + g_object_unref (task); + return; } else { - GSimpleAsyncResult *simple = data->simple; - g_simple_async_result_complete (simple); - g_object_unref (simple); + g_task_return_pointer (task, g_object_ref (data->io_stream), g_object_unref); + g_object_unref (task); + return; } } else { - do_read (connect_reply_read_cb, data); + do_read (connect_reply_read_cb, task, data); } } @@ -457,13 +429,7 @@ g_socks4a_proxy_connect_finish (GProxy *proxy, GAsyncResult *result, GError **error) { - GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result); - ConnectAsyncData *data = g_simple_async_result_get_op_res_gpointer (simple); - - if (g_simple_async_result_propagate_error (simple, error)) - return NULL; - - return g_object_ref (data->io_stream); + return g_task_propagate_pointer (G_TASK (result), error); } static gboolean