summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--daemon/gvfsafpconnection.c127
-rw-r--r--daemon/gvfsafpconnection.h14
-rw-r--r--daemon/gvfsafpserver.c50
-rw-r--r--daemon/gvfsbackendafp.c32
4 files changed, 95 insertions, 128 deletions
diff --git a/daemon/gvfsafpconnection.c b/daemon/gvfsafpconnection.c
index b725f545..1551d82e 100644
--- a/daemon/gvfsafpconnection.c
+++ b/daemon/gvfsafpconnection.c
@@ -1281,6 +1281,76 @@ g_vfs_afp_connection_send_command_finish (GVfsAfpConnection *afp_connection,
return g_object_ref (g_simple_async_result_get_op_res_gpointer (simple));
}
+typedef struct {
+
+ /* For sync calls */
+ GMutex *mutex;
+ GCond *cond;
+
+ /* results: */
+ GAsyncResult *result;
+} SyncData;
+
+static void
+init_sync_data (SyncData *data)
+{
+ data->mutex = g_mutex_new ();
+ data->cond = g_cond_new ();
+}
+
+static void
+clear_sync_data (SyncData *data)
+{
+ g_mutex_free (data->mutex);
+ g_cond_free (data->cond);
+ g_object_unref (data->result);
+}
+
+static void
+sync_data_wait (SyncData *data)
+{
+ g_mutex_lock (data->mutex);
+ g_cond_wait (data->cond, data->mutex);
+ g_mutex_unlock (data->mutex);
+}
+
+static void
+reply_sync (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ SyncData *data;
+
+ data = (SyncData *) user_data;
+
+ data->result = g_object_ref (res);
+
+ /* Wake up sync call thread */
+ g_mutex_lock (data->mutex);
+ g_cond_signal (data->cond);
+ g_mutex_unlock (data->mutex);
+}
+
+GVfsAfpReply *
+g_vfs_afp_connection_send_command_sync (GVfsAfpConnection *afp_connection,
+ GVfsAfpCommand *command,
+ GCancellable *cancellable,
+ GError **error)
+{
+ SyncData data;
+ GVfsAfpReply *reply;
+
+ init_sync_data (&data);
+ g_vfs_afp_connection_send_command (afp_connection, command, NULL, reply_sync,
+ cancellable, &data);
+ sync_data_wait (&data);
+
+ reply = g_vfs_afp_connection_send_command_finish (afp_connection, data.result,
+ error);
+ clear_sync_data (&data);
+ return reply;
+}
+
static gboolean
read_reply_sync (GInputStream *input,
DSIHeader *dsi_header,
@@ -1336,25 +1406,6 @@ read_reply_sync (GInputStream *input,
return TRUE;
}
-GVfsAfpReply *
-g_vfs_afp_connection_read_reply_sync (GVfsAfpConnection *afp_connection,
- GCancellable *cancellable,
- GError **error)
-{
- GVfsAfpConnectionPrivate *priv = afp_connection->priv;
-
- gboolean res;
- char *data;
- DSIHeader dsi_header;
-
- res = read_reply_sync (g_io_stream_get_input_stream (priv->conn), &dsi_header,
- &data, cancellable, error);
- if (!res)
- return NULL;
-
- return g_vfs_afp_reply_new (dsi_header.errorCode, data, dsi_header.totalDataLength, TRUE);
-}
-
static gboolean
send_request_sync (GOutputStream *output,
DsiCommand command,
@@ -1395,44 +1446,6 @@ send_request_sync (GOutputStream *output,
}
gboolean
-g_vfs_afp_connection_send_command_sync (GVfsAfpConnection *afp_connection,
- GVfsAfpCommand *afp_command,
- GCancellable *cancellable,
- GError **error)
-{
- GVfsAfpConnectionPrivate *priv = afp_connection->priv;
-
- DsiCommand dsi_command;
- guint16 req_id;
- guint32 writeOffset;
-
- /* set dsi_command */
- switch (afp_command->type)
- {
- case AFP_COMMAND_WRITE:
- writeOffset = 8;
- dsi_command = DSI_WRITE;
- break;
- case AFP_COMMAND_WRITE_EXT:
- writeOffset = 20;
- dsi_command = DSI_WRITE;
- break;
-
- default:
- writeOffset = 0;
- dsi_command = DSI_COMMAND;
- break;
- }
-
- req_id = get_request_id (afp_connection);
- return send_request_sync (g_io_stream_get_output_stream (priv->conn),
- dsi_command, req_id, writeOffset,
- g_vfs_afp_command_get_size (afp_command),
- g_vfs_afp_command_get_data (afp_command),
- cancellable, error);
-}
-
-gboolean
g_vfs_afp_connection_close (GVfsAfpConnection *afp_connection,
GCancellable *cancellable,
GError **error)
diff --git a/daemon/gvfsafpconnection.h b/daemon/gvfsafpconnection.h
index f5cde133..57badd2b 100644
--- a/daemon/gvfsafpconnection.h
+++ b/daemon/gvfsafpconnection.h
@@ -400,15 +400,6 @@ gboolean g_vfs_afp_connection_close (GVfsAfpConnection *af
GCancellable *cancellable,
GError **error);
-gboolean g_vfs_afp_connection_send_command_sync (GVfsAfpConnection *afp_connection,
- GVfsAfpCommand *afp_command,
- GCancellable *cancellable,
- GError **error);
-
-GVfsAfpReply* g_vfs_afp_connection_read_reply_sync (GVfsAfpConnection *afp_connection,
- GCancellable *cancellable,
- GError **error);
-
GVfsAfpReply* g_vfs_afp_connection_send_command_finish (GVfsAfpConnection *afp_connnection,
GAsyncResult *res,
GError **error);
@@ -419,6 +410,11 @@ void g_vfs_afp_connection_send_command (GVfsAfpConnection *a
GAsyncReadyCallback callback,
GCancellable *cancellable,
gpointer user_data);
+
+GVfsAfpReply * g_vfs_afp_connection_send_command_sync (GVfsAfpConnection *afp_connection,
+ GVfsAfpCommand *command,
+ GCancellable *cancellable,
+ GError **error);
G_END_DECLS
#endif /* _GVFSAFPCONNECTION_H_ */
diff --git a/daemon/gvfsafpserver.c b/daemon/gvfsafpserver.c
index ca1ff202..c2ec489f 100644
--- a/daemon/gvfsafpserver.c
+++ b/daemon/gvfsafpserver.c
@@ -208,13 +208,9 @@ dhx2_login (GVfsAfpServer *afp_serv,
g_vfs_afp_command_put_pascal (comm, username);
g_vfs_afp_command_pad_to_even (comm);
- res = g_vfs_afp_connection_send_command_sync (afp_serv->conn, comm,
- cancellable, error);
+ reply = g_vfs_afp_connection_send_command_sync (afp_serv->conn, comm,
+ cancellable, error);
g_object_unref (comm);
- if (!res)
- goto error;
-
- reply = g_vfs_afp_connection_read_reply_sync (afp_serv->conn, cancellable, error);
if (!reply)
goto error;
@@ -316,14 +312,9 @@ dhx2_login (GVfsAfpServer *afp_serv,
/* clientNonce */
g_output_stream_write_all (G_OUTPUT_STREAM (comm), clientNonce_buf, 16, NULL, NULL, NULL);
- res = g_vfs_afp_connection_send_command_sync (afp_serv->conn, comm,
- cancellable, error);
+ reply = g_vfs_afp_connection_send_command_sync (afp_serv->conn, comm,
+ cancellable, error);
g_object_unref (comm);
- if (!res)
- goto error;
-
-
- reply = g_vfs_afp_connection_read_reply_sync (afp_serv->conn, cancellable, error);
if (!reply)
goto error;
@@ -387,13 +378,9 @@ dhx2_login (GVfsAfpServer *afp_serv,
G_N_ELEMENTS (answer_buf), NULL, NULL, NULL);
- res = g_vfs_afp_connection_send_command_sync (afp_serv->conn, comm,
- cancellable, error);
+ reply = g_vfs_afp_connection_send_command_sync (afp_serv->conn, comm,
+ cancellable, error);
g_object_unref (comm);
- if (!res)
- goto error;
-
- reply = g_vfs_afp_connection_read_reply_sync (afp_serv->conn, cancellable, error);
if (!reply)
goto error;
@@ -522,13 +509,9 @@ dhx_login (GVfsAfpServer *afp_serv,
g_output_stream_write_all (G_OUTPUT_STREAM(comm), ma_buf, G_N_ELEMENTS (ma_buf),
NULL, NULL, NULL);
- res = g_vfs_afp_connection_send_command_sync (afp_serv->conn, comm,
- cancellable, error);
+ reply = g_vfs_afp_connection_send_command_sync (afp_serv->conn, comm,
+ cancellable, error);
g_object_unref (comm);
- if (!res)
- goto done;
-
- reply = g_vfs_afp_connection_read_reply_sync (afp_serv->conn, cancellable, error);
if (!reply)
goto error;
@@ -616,13 +599,9 @@ dhx_login (GVfsAfpServer *afp_serv,
G_N_ELEMENTS (answer_buf), NULL, NULL, NULL);
- res = g_vfs_afp_connection_send_command_sync (afp_serv->conn, comm,
- cancellable, error);
+ reply = g_vfs_afp_connection_send_command_sync (afp_serv->conn, comm,
+ cancellable, error);
g_object_unref (comm);
- if (!res)
- goto done;
-
- reply = g_vfs_afp_connection_read_reply_sync (afp_serv->conn, cancellable, error);
if (!reply)
goto error;
@@ -673,7 +652,6 @@ do_login (GVfsAfpServer *afp_serv,
if (anonymous)
{
GVfsAfpCommand *comm;
- gboolean res;
GVfsAfpReply *reply;
AfpResultCode res_code;
@@ -689,13 +667,9 @@ do_login (GVfsAfpServer *afp_serv,
g_vfs_afp_command_put_pascal (comm, afp_version_to_string (afp_serv->version));
g_vfs_afp_command_put_pascal (comm, AFP_UAM_NO_USER);
- res = g_vfs_afp_connection_send_command_sync (afp_serv->conn, comm,
- cancellable, error);
+ reply = g_vfs_afp_connection_send_command_sync (afp_serv->conn, comm,
+ cancellable, error);
g_object_unref (comm);
- if (!res)
- return FALSE;
-
- reply = g_vfs_afp_connection_read_reply_sync (afp_serv->conn, cancellable, error);
if (!reply)
return FALSE;
diff --git a/daemon/gvfsbackendafp.c b/daemon/gvfsbackendafp.c
index 26175bba..fdea031d 100644
--- a/daemon/gvfsbackendafp.c
+++ b/daemon/gvfsbackendafp.c
@@ -4017,7 +4017,6 @@ get_userinfo (GVfsBackendAfp *afp_backend,
{
GVfsAfpCommand *comm;
guint16 bitmap;
- gboolean res;
GVfsAfpReply *reply;
AfpResultCode res_code;
@@ -4031,14 +4030,9 @@ get_userinfo (GVfsBackendAfp *afp_backend,
bitmap = AFP_GET_USER_INFO_BITMAP_GET_UID_BIT | AFP_GET_USER_INFO_BITMAP_GET_GID_BIT;
g_vfs_afp_command_put_uint16 (comm, bitmap);
- res = g_vfs_afp_connection_send_command_sync (afp_backend->server->conn,
- comm, cancellable, error);
+ reply = g_vfs_afp_connection_send_command_sync (afp_backend->server->conn,
+ comm, cancellable, error);
g_object_unref (comm);
- if (!res)
- return FALSE;
-
- reply = g_vfs_afp_connection_read_reply_sync (afp_backend->server->conn,
- cancellable, error);
if (!reply)
return FALSE;
@@ -4128,15 +4122,10 @@ do_mount (GVfsBackend *backend,
/* pad byte */
g_vfs_afp_command_put_byte (comm, 0);
- res = g_vfs_afp_connection_send_command_sync (afp_backend->server->conn,
- comm, G_VFS_JOB (job)->cancellable,
- &err);
+ reply = g_vfs_afp_connection_send_command_sync (afp_backend->server->conn,
+ comm, G_VFS_JOB (job)->cancellable,
+ &err);
g_object_unref (comm);
- if (!res)
- goto error;
-
- reply = g_vfs_afp_connection_read_reply_sync (afp_backend->server->conn,
- G_VFS_JOB (job)->cancellable, &err);
if (!reply)
goto error;
@@ -4170,15 +4159,10 @@ do_mount (GVfsBackend *backend,
/* TODO: password? */
- res = g_vfs_afp_connection_send_command_sync (afp_backend->server->conn,
- comm, G_VFS_JOB (job)->cancellable,
- &err);
+ reply = g_vfs_afp_connection_send_command_sync (afp_backend->server->conn,
+ comm, G_VFS_JOB (job)->cancellable,
+ &err);
g_object_unref (comm);
- if (!res)
- goto error;
-
- reply = g_vfs_afp_connection_read_reply_sync (afp_backend->server->conn,
- G_VFS_JOB (job)->cancellable, &err);
if (!reply)
goto error;