X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fgsocks5proxy.c;h=d093c81a9e68b91c67cb77e2114eb4a1b18caf81;hb=4482977238ae80f64c2fe318d1500f4662c73980;hp=c0a4bf936bde9eb127263b0a8eae65fd3b79b628;hpb=d85b722734a6fcfe94032f6113de9e5c190fd7c3;p=platform%2Fupstream%2Fglib.git diff --git a/gio/gsocks5proxy.c b/gio/gsocks5proxy.c index c0a4bf9..d093c81 100644 --- a/gio/gsocks5proxy.c +++ b/gio/gsocks5proxy.c @@ -14,9 +14,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: Youness Alaoui io_stream) - g_object_unref (data->io_stream); + g_object_unref (data->io_stream); g_free (data->hostname); g_free (data->username); g_free (data->password); g_free (data->buffer); - - if (data->cancellable) - g_object_unref (data->cancellable); 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); } static void @@ -635,20 +619,14 @@ g_socks5_proxy_connect_async (GProxy *proxy, GAsyncReadyCallback callback, gpointer user_data) { - GSimpleAsyncResult *simple; + GTask *task; ConnectAsyncData *data; - simple = g_simple_async_result_new (G_OBJECT (proxy), - callback, user_data, - g_socks5_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); + task = g_task_new (proxy, cancellable, callback, user_data); + g_task_set_task_data (task, data, (GDestroyNotify) free_connect_data); g_object_get (G_OBJECT (proxy_address), "destination-hostname", &data->hostname, @@ -657,15 +635,12 @@ g_socks5_proxy_connect_async (GProxy *proxy, "password", &data->password, NULL); - g_simple_async_result_set_op_res_gpointer (simple, data, - (GDestroyNotify) free_connect_data); - data->buffer = g_malloc0 (SOCKS5_NEGO_MSG_LEN); data->length = set_nego_msg (data->buffer, data->username || data->password); data->offset = 0; - do_write (nego_msg_write_cb, data); + do_write (nego_msg_write_cb, task, data); } @@ -674,8 +649,9 @@ nego_msg_write_cb (GObject *source, GAsyncResult *res, 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), @@ -683,7 +659,8 @@ nego_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; } @@ -697,11 +674,11 @@ nego_msg_write_cb (GObject *source, data->length = SOCKS5_NEGO_REP_LEN; data->offset = 0; - do_read (nego_reply_read_cb, data); + do_read (nego_reply_read_cb, task, data); } else { - do_write (nego_msg_write_cb, data); + do_write (nego_msg_write_cb, task, data); } } @@ -710,8 +687,9 @@ nego_reply_read_cb (GObject *source, GAsyncResult *res, 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), @@ -719,7 +697,8 @@ nego_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; } @@ -727,13 +706,14 @@ nego_reply_read_cb (GObject *source, if (data->offset == data->length) { - GError *error; + GError *error = NULL; gboolean must_auth = FALSE; gboolean has_auth = data->username || data->password; if (!parse_nego_reply (data->buffer, has_auth, &must_auth, &error)) { - complete_async_from_error (data, error); + g_task_return_error (task, error); + g_object_unref (task); return; } @@ -750,20 +730,21 @@ nego_reply_read_cb (GObject *source, if (data->length < 0) { - complete_async_from_error (data, error); + g_task_return_error (task, error); + g_object_unref (task); return; } - do_write (auth_msg_write_cb, data); + do_write (auth_msg_write_cb, task, data); } else { - send_connect_msg (data); + send_connect_msg (task); } } else { - do_read (nego_reply_read_cb, data); + do_read (nego_reply_read_cb, task, data); } } @@ -772,8 +753,9 @@ auth_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), @@ -781,7 +763,8 @@ auth_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; } @@ -795,11 +778,11 @@ auth_msg_write_cb (GObject *source, data->length = SOCKS5_NEGO_REP_LEN; data->offset = 0; - do_read (auth_reply_read_cb, data); + do_read (auth_reply_read_cb, task, data); } else { - do_write (auth_msg_write_cb, data); + do_write (auth_msg_write_cb, task, data); } } @@ -808,8 +791,9 @@ auth_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), @@ -817,7 +801,8 @@ auth_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; } @@ -827,21 +812,23 @@ auth_reply_read_cb (GObject *source, { if (!check_auth_status (data->buffer, &error)) { - complete_async_from_error (data, error); + g_task_return_error (task, error); + g_object_unref (task); return; } - send_connect_msg (data); + send_connect_msg (task); } else { - do_read (auth_reply_read_cb, data); + do_read (auth_reply_read_cb, task, data); } } static void -send_connect_msg (ConnectAsyncData *data) +send_connect_msg (GTask *task) { + ConnectAsyncData *data = g_task_get_task_data (task); GError *error = NULL; g_free (data->buffer); @@ -855,11 +842,12 @@ send_connect_msg (ConnectAsyncData *data) if (data->length < 0) { - complete_async_from_error (data, error); + g_task_return_error (task, error); + g_object_unref (task); return; } - do_write (connect_msg_write_cb, data); + do_write (connect_msg_write_cb, task, data); } static void @@ -867,8 +855,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), @@ -876,7 +865,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; } @@ -890,11 +880,11 @@ connect_msg_write_cb (GObject *source, data->length = 4; 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); } } @@ -903,8 +893,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), @@ -912,7 +903,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; } @@ -924,7 +916,8 @@ connect_reply_read_cb (GObject *source, if (!parse_connect_reply (data->buffer, &atype, &error)) { - complete_async_from_error (data, error); + g_task_return_error (task, error); + g_object_unref (task); return; } @@ -933,25 +926,25 @@ connect_reply_read_cb (GObject *source, case SOCKS5_ATYP_IPV4: data->length = 6; data->offset = 0; - do_read (connect_addr_read_cb, data); + do_read (connect_addr_read_cb, task, data); break; case SOCKS5_ATYP_IPV6: data->length = 18; data->offset = 0; - do_read (connect_addr_read_cb, data); + do_read (connect_addr_read_cb, task, data); break; case SOCKS5_ATYP_DOMAINNAME: data->length = 1; data->offset = 0; - do_read (connect_addr_len_read_cb, data); + do_read (connect_addr_len_read_cb, task, data); break; } } else { - do_read (connect_reply_read_cb, data); + do_read (connect_reply_read_cb, task, data); } } @@ -960,8 +953,9 @@ connect_addr_len_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), @@ -969,14 +963,15 @@ connect_addr_len_read_cb (GObject *source, if (read < 0) { - complete_async_from_error (data, error); + g_task_return_error (task, error); + g_object_unref (task); return; } data->length = data->buffer[0] + 2; data->offset = 0; - do_read (connect_addr_read_cb, data); + do_read (connect_addr_read_cb, task, data); } static void @@ -984,8 +979,9 @@ connect_addr_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), @@ -993,7 +989,8 @@ connect_addr_read_cb (GObject *source, if (read < 0) { - complete_async_from_error (data, error); + g_task_return_error (task, error); + g_object_unref (task); return; } @@ -1001,13 +998,13 @@ connect_addr_read_cb (GObject *source, if (data->offset == data->length) { - 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); } } @@ -1016,13 +1013,7 @@ g_socks5_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