[Spice-devel] [PATCH spice-vdagent v2] file-xfer: Send more detailed error messages

Jakub Janků janku.jakub.jj at gmail.com
Mon May 29 14:25:29 UTC 2017


Send VD_AGENT_FILE_XFER_STATUS_AGENT_NOT_CONNECTED,
VD_AGENT_FILE_XFER_STATUS_SESSION_LOCKED or
VD_AGENT_FILE_XFER_STATUS_DISABLED instead of general error, when the
given error occurs.

send_file_xfer_status() ensures, these errors are sent only to clients with
VD_AGENT_CAP_FILE_XFER_DETAILED_ERRORS capability.
---
 src/vdagent/file-xfers.c | 4 ++--
 src/vdagent/file-xfers.h | 2 +-
 src/vdagent/vdagent.c    | 6 +++---
 src/vdagentd/vdagentd.c  | 8 ++++++--
 4 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/vdagent/file-xfers.c b/src/vdagent/file-xfers.c
index 51fccd7..344db6b 100644
--- a/src/vdagent/file-xfers.c
+++ b/src/vdagent/file-xfers.c
@@ -356,10 +356,10 @@ void vdagent_file_xfers_data(struct vdagent_file_xfers *xfers,
     }
 }
 
-void vdagent_file_xfers_error(struct udscs_connection *vdagentd, uint32_t msg_id)
+void vdagent_file_xfers_error_disabled(struct udscs_connection *vdagentd, uint32_t msg_id)
 {
     g_return_if_fail(vdagentd != NULL);
 
     udscs_write(vdagentd, VDAGENTD_FILE_XFER_STATUS,
-                msg_id, VD_AGENT_FILE_XFER_STATUS_ERROR, NULL, 0);
+                msg_id, VD_AGENT_FILE_XFER_STATUS_DISABLED, NULL, 0);
 }
diff --git a/src/vdagent/file-xfers.h b/src/vdagent/file-xfers.h
index 28a71fd..3e2ed1d 100644
--- a/src/vdagent/file-xfers.h
+++ b/src/vdagent/file-xfers.h
@@ -37,7 +37,7 @@ void vdagent_file_xfers_status(struct vdagent_file_xfers *xfers,
     VDAgentFileXferStatusMessage *msg);
 void vdagent_file_xfers_data(struct vdagent_file_xfers *xfers,
     VDAgentFileXferDataMessage *msg);
-void vdagent_file_xfers_error(struct udscs_connection *vdagentd,
+void vdagent_file_xfers_error_disabled(struct udscs_connection *vdagentd,
     uint32_t msg_id);
 
 #endif
diff --git a/src/vdagent/vdagent.c b/src/vdagent/vdagent.c
index 6f025e8..e034234 100644
--- a/src/vdagent/vdagent.c
+++ b/src/vdagent/vdagent.c
@@ -89,7 +89,7 @@ static void daemon_read_complete(struct udscs_connection **connp,
             vdagent_file_xfers_start(vdagent_file_xfers,
                                      (VDAgentFileXferStartMessage *)data);
         } else {
-            vdagent_file_xfers_error(*connp,
+            vdagent_file_xfers_error_disabled(*connp,
                                      ((VDAgentFileXferStartMessage *)data)->id);
         }
         break;
@@ -98,7 +98,7 @@ static void daemon_read_complete(struct udscs_connection **connp,
             vdagent_file_xfers_status(vdagent_file_xfers,
                                       (VDAgentFileXferStatusMessage *)data);
         } else {
-            vdagent_file_xfers_error(*connp,
+            vdagent_file_xfers_error_disabled(*connp,
                                      ((VDAgentFileXferStatusMessage *)data)->id);
         }
         break;
@@ -125,7 +125,7 @@ static void daemon_read_complete(struct udscs_connection **connp,
             vdagent_file_xfers_data(vdagent_file_xfers,
                                     (VDAgentFileXferDataMessage *)data);
         } else {
-            vdagent_file_xfers_error(*connp,
+            vdagent_file_xfers_error_disabled(*connp,
                                      ((VDAgentFileXferDataMessage *)data)->id);
         }
         break;
diff --git a/src/vdagentd/vdagentd.c b/src/vdagentd/vdagentd.c
index 73b892f..a48f535 100644
--- a/src/vdagentd/vdagentd.c
+++ b/src/vdagentd/vdagentd.c
@@ -349,14 +349,14 @@ static void do_client_file_xfer(struct vdagent_virtio_port *vport,
             send_file_xfer_status(vport,
                "Could not find an agent connection belonging to the "
                "active session, cancelling file-xfer",
-               s->id, VD_AGENT_FILE_XFER_STATUS_CANCELLED, NULL, 0);
+               s->id, VD_AGENT_FILE_XFER_STATUS_AGENT_NOT_CONNECTED, NULL, 0);
             return;
         } else if (session_info_session_is_locked(session_info)) {
             syslog(LOG_DEBUG, "Session is locked, skipping file-xfer-start");
             send_file_xfer_status(vport,
                "User's session is locked and cannot start file transfer. "
                "Cancelling file-xfer",
-               s->id, VD_AGENT_FILE_XFER_STATUS_ERROR, NULL, 0);
+               s->id, VD_AGENT_FILE_XFER_STATUS_SESSION_LOCKED, NULL, 0);
             return;
         }
         udscs_write(active_session_conn, VDAGENTD_FILE_XFER_START, 0, 0,
@@ -927,6 +927,10 @@ static void agent_read_complete(struct udscs_connection **connp,
                 send_file_xfer_status(virtio_port, "Not enough free space. Cancelling file-xfer",
                                       header->arg1, header->arg2, data, sizeof(uint64_t));
                 break;
+            case VD_AGENT_FILE_XFER_STATUS_DISABLED:
+                send_file_xfer_status(virtio_port, "File-xfer is disabled, cancelling",
+                                      header->arg1, header->arg2, NULL, 0);
+                break;
             default:
                 send_file_xfer_status(virtio_port, NULL, header->arg1, header->arg2, NULL, 0);
         }
-- 
2.13.0



More information about the Spice-devel mailing list