X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fgsocks4aproxy.c;h=d54a8162d6d00884adc082d177c00279d7f9c372;hb=7fd6f07d498063470903a886b4805a13bd333908;hp=097b534655c2c9dca74f7cd9f1de503fdbf2d928;hpb=63adeda0861a26b38ec0adc76255666554c18951;p=platform%2Fupstream%2Fglib.git diff --git a/gio/gsocks4aproxy.c b/gio/gsocks4aproxy.c index 097b534..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,52 +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_set_from_error (data->simple, - error); - g_error_free (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); } @@ -331,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); @@ -364,16 +330,12 @@ g_socks4a_proxy_connect_async (GProxy *proxy, if (data->length < 0) { - g_simple_async_result_set_from_error (data->simple, - error); - g_error_free (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); } } @@ -382,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), @@ -391,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; } @@ -405,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); } } @@ -418,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), @@ -427,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; } @@ -437,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); } } @@ -461,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