diff options
author | Carl-Anton Ingmarsson <ca.ingmarsson@gmail.com> | 2012-03-12 17:27:13 +0100 |
---|---|---|
committer | Carl-Anton Ingmarsson <ca.ingmarsson@gmail.com> | 2012-08-09 21:06:05 +0200 |
commit | ef8d81602b01cecf0c9cab8b54c0f9e65486dc57 (patch) | |
tree | faa74c39882e57459a923320b546b8dc01ed6d68 /daemon/gvfsafpserver.c | |
parent | c1b3b8a3e3d979a4857587b57026d91f56ff1627 (diff) | |
download | gvfs-ef8d81602b01cecf0c9cab8b54c0f9e65486dc57.tar.gz |
afp: logout from server on unmount
Diffstat (limited to 'daemon/gvfsafpserver.c')
-rw-r--r-- | daemon/gvfsafpserver.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/daemon/gvfsafpserver.c b/daemon/gvfsafpserver.c index 9acc2b18..9631f9ae 100644 --- a/daemon/gvfsafpserver.c +++ b/daemon/gvfsafpserver.c @@ -67,6 +67,9 @@ g_vfs_afp_server_finalize (GObject *object) { GVfsAfpServer *afp_serv = G_VFS_AFP_SERVER (object); + g_clear_object (&afp_serv->addr); + g_clear_object (&afp_serv->conn); + g_free (afp_serv->machine_type); g_free (afp_serv->server_name); g_free (afp_serv->utf8_server_name); @@ -1073,6 +1076,41 @@ error: } /* + * g_vfs_afp_server_logout_sync: + * + * Terminates and closes the connection to the server + */ +gboolean +g_vfs_afp_server_logout_sync (GVfsAfpServer *server, + GCancellable *cancellable, + GError **error) +{ + GVfsAfpCommand *comm; + GVfsAfpReply *reply; + gint32 res_code; + + comm = g_vfs_afp_command_new (AFP_COMMAND_LOGOUT); + /* pad byte */ + g_vfs_afp_command_put_byte (comm, 0); + + reply = g_vfs_afp_connection_send_command_sync (server->conn, comm, cancellable, error); + if (!reply) { + g_vfs_afp_connection_close_sync (server->conn, cancellable, NULL); + return FALSE; + } + + res_code = g_vfs_afp_reply_get_result_code (reply); + g_object_unref (reply); + if (res_code != AFP_RESULT_NO_ERROR) { + g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Failed to logout from server")); + g_vfs_afp_connection_close_sync (server->conn, cancellable, NULL); + return FALSE; + } + + return g_vfs_afp_connection_close_sync (server->conn, cancellable, error); +} + +/* * g_vfs_server_time_to_local_time: * * @server: a #GVfsAfpServer |