summaryrefslogtreecommitdiff
path: root/daemon/gvfsafpserver.c
diff options
context:
space:
mode:
authorCarl-Anton Ingmarsson <ca.ingmarsson@gmail.com>2012-03-12 17:27:13 +0100
committerCarl-Anton Ingmarsson <ca.ingmarsson@gmail.com>2012-08-09 21:06:05 +0200
commitef8d81602b01cecf0c9cab8b54c0f9e65486dc57 (patch)
treefaa74c39882e57459a923320b546b8dc01ed6d68 /daemon/gvfsafpserver.c
parentc1b3b8a3e3d979a4857587b57026d91f56ff1627 (diff)
downloadgvfs-ef8d81602b01cecf0c9cab8b54c0f9e65486dc57.tar.gz
afp: logout from server on unmount
Diffstat (limited to 'daemon/gvfsafpserver.c')
-rw-r--r--daemon/gvfsafpserver.c38
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