diff options
author | Benjamin Otte <otte@gnome.org> | 2009-06-15 22:02:34 +0200 |
---|---|---|
committer | Benjamin Otte <otte@gnome.org> | 2009-06-15 23:06:57 +0200 |
commit | 7f2ac23d150aa779310a37534fc8564bbfc93b86 (patch) | |
tree | ffdffc655e1eb6bc9e79254a6c01d64b4a88a0c2 /daemon/gvfsftptask.c | |
parent | 53f29945c6f8473324ea354fb38db8d90f2fe8cc (diff) | |
download | gvfs-7f2ac23d150aa779310a37534fc8564bbfc93b86.tar.gz |
[FTP] prepare the code for active FTP support
adds a bunch of new APIs necessary for supporting active FTP. These APIs
don't do anything yet, as active FTP is still unsupported, it's just
refactoring of code.
Diffstat (limited to 'daemon/gvfsftptask.c')
-rw-r--r-- | daemon/gvfsftptask.c | 47 |
1 files changed, 33 insertions, 14 deletions
diff --git a/daemon/gvfsftptask.c b/daemon/gvfsftptask.c index 118f80da..37f2b59b 100644 --- a/daemon/gvfsftptask.c +++ b/daemon/gvfsftptask.c @@ -747,7 +747,7 @@ g_vfs_ftp_task_create_remote_address (GVfsFtpTask *task, guint port) } static GVfsFtpMethod -g_vfs_ftp_task_open_data_connection_epsv (GVfsFtpTask *task, GVfsFtpMethod method) +g_vfs_ftp_task_setup_data_connection_epsv (GVfsFtpTask *task, GVfsFtpMethod method) { const char *s; char **reply; @@ -790,7 +790,7 @@ fail: } static GVfsFtpMethod -g_vfs_ftp_task_open_data_connection_pasv (GVfsFtpTask *task, GVfsFtpMethod method) +g_vfs_ftp_task_setup_data_connection_pasv (GVfsFtpTask *task, GVfsFtpMethod method) { guint ip1, ip2, ip3, ip4, port1, port2; char **reply; @@ -875,14 +875,14 @@ g_vfs_ftp_task_open_data_connection_pasv (GVfsFtpTask *task, GVfsFtpMethod metho typedef GVfsFtpMethod (* GVfsFtpOpenDataConnectionFunc) (GVfsFtpTask *task, GVfsFtpMethod method); static GVfsFtpMethod -g_vfs_ftp_task_open_data_connection_any (GVfsFtpTask *task, GVfsFtpMethod unused) +g_vfs_ftp_task_setup_data_connection_any (GVfsFtpTask *task, GVfsFtpMethod unused) { static const struct { GVfsFtpFeature required_feature; GVfsFtpOpenDataConnectionFunc func; } funcs_ordered[] = { - { G_VFS_FTP_FEATURE_EPSV, g_vfs_ftp_task_open_data_connection_epsv }, - { 0, g_vfs_ftp_task_open_data_connection_pasv } + { G_VFS_FTP_FEATURE_EPSV, g_vfs_ftp_task_setup_data_connection_epsv }, + { 0, g_vfs_ftp_task_setup_data_connection_pasv } }; GVfsFtpMethod method; guint i; @@ -918,20 +918,23 @@ g_vfs_ftp_task_open_data_connection_any (GVfsFtpTask *task, GVfsFtpMethod unused } /** - * g_vfs_ftp_task_open_data_connection: + * g_vfs_ftp_task_setup_data_connection: * @task: a task not having an open data connection * - * Tries to open a data connection to the ftp server. If the operation fails, - * @task will be set into an error state. + * Sets up a data connection to the ftp server with using the best method for + * this task. If the operation fails, @task will be set into an error state. + * You must call g_vfs_ftp_task_open_data_connection() to finish setup and + * ensure the data connection actually gets opened. Usually, this requires + * sending an FTP command down the stream. **/ void -g_vfs_ftp_task_open_data_connection (GVfsFtpTask *task) +g_vfs_ftp_task_setup_data_connection (GVfsFtpTask *task) { static const GVfsFtpOpenDataConnectionFunc connect_funcs[] = { - [G_VFS_FTP_METHOD_ANY] = g_vfs_ftp_task_open_data_connection_any, - [G_VFS_FTP_METHOD_EPSV] = g_vfs_ftp_task_open_data_connection_epsv, - [G_VFS_FTP_METHOD_PASV] = g_vfs_ftp_task_open_data_connection_pasv, - [G_VFS_FTP_METHOD_PASV_ADDR] = g_vfs_ftp_task_open_data_connection_pasv, + [G_VFS_FTP_METHOD_ANY] = g_vfs_ftp_task_setup_data_connection_any, + [G_VFS_FTP_METHOD_EPSV] = g_vfs_ftp_task_setup_data_connection_epsv, + [G_VFS_FTP_METHOD_PASV] = g_vfs_ftp_task_setup_data_connection_pasv, + [G_VFS_FTP_METHOD_PASV_ADDR] = g_vfs_ftp_task_setup_data_connection_pasv, [G_VFS_FTP_METHOD_EPRT] = NULL, [G_VFS_FTP_METHOD_PORT] = NULL }; @@ -953,7 +956,7 @@ g_vfs_ftp_task_open_data_connection (GVfsFtpTask *task) if (result == G_VFS_FTP_METHOD_ANY && method != G_VFS_FTP_METHOD_ANY && !g_vfs_ftp_task_is_in_error (task)) - result = g_vfs_ftp_task_open_data_connection_any (task, G_VFS_FTP_METHOD_ANY); + result = g_vfs_ftp_task_setup_data_connection_any (task, G_VFS_FTP_METHOD_ANY); g_assert (result < G_N_ELEMENTS (connect_funcs) && connect_funcs[result]); if (result != method) @@ -972,3 +975,19 @@ g_vfs_ftp_task_open_data_connection (GVfsFtpTask *task) } } +/** + * g_vfs_ftp_task_open_data_connection: + * @task: a task + * + * Tries to open a data connection to the ftp server. If the operation fails, + * @task will be set into an error state. + **/ +void +g_vfs_ftp_task_open_data_connection (GVfsFtpTask *task) +{ + g_return_if_fail (task != NULL); + + if (g_vfs_ftp_task_is_in_error (task)) + return; +} + |