diff options
author | Frediano Ziglio <fziglio@redhat.com> | 2020-03-18 21:16:07 +0000 |
---|---|---|
committer | Frediano Ziglio <freddy77@gmail.com> | 2020-04-28 16:50:13 +0100 |
commit | 9de14924464503b0fec7934997a5ff1858b45dfc (patch) | |
tree | 564e813a88abc74ceeb83dac8dc813744e7d4f52 | |
parent | dd05463f9ba00a1071a2f51a252c0f968e574f96 (diff) |
vdagent: Reuse agent_check_message
That function does also more checks on the message.
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Jakub Janků <jjanku@redhat.com>
-rw-r--r-- | vdagent/vdagent.cpp | 66 |
1 files changed, 15 insertions, 51 deletions
diff --git a/vdagent/vdagent.cpp b/vdagent/vdagent.cpp index b1f7edf..3e100f8 100644 --- a/vdagent/vdagent.cpp +++ b/vdagent/vdagent.cpp @@ -921,11 +921,6 @@ bool VDAgent::handle_display_config(const VDAgentDisplayConfig* display_config, bool VDAgent::handle_max_clipboard(const VDAgentMaxClipboard *msg, uint32_t size) { - if (size != sizeof(VDAgentMaxClipboard)) { - vd_printf("VDAgentMaxClipboard: unexpected msg size %u (expected %lu)", - size, (unsigned long)sizeof(VDAgentMaxClipboard)); - return false; - } vd_printf("Set max clipboard size: %d", msg->max); _max_clipboard = msg->max; return true; @@ -1257,57 +1252,26 @@ void VDAgent::dispatch_message(VDAgentMessage* msg, uint32_t port) { bool res = true; - // check minimal message size - int min_size = -1; - switch (msg->type) { - case VD_AGENT_MOUSE_STATE: - min_size = sizeof(VDAgentMouseState); - break; - case VD_AGENT_MONITORS_CONFIG: - min_size = sizeof(VDAgentMonitorsConfig); - break; - case VD_AGENT_CLIPBOARD: - min_size = sizeof(VDAgentClipboard); - break; - case VD_AGENT_CLIPBOARD_GRAB: - min_size = sizeof(VDAgentClipboardGrab); - break; - case VD_AGENT_CLIPBOARD_REQUEST: - min_size = sizeof(VDAgentClipboardRequest); - break; - case VD_AGENT_CLIPBOARD_RELEASE: - min_size = sizeof(VDAgentClipboardRelease); - break; - case VD_AGENT_DISPLAY_CONFIG: - min_size = sizeof(VDAgentDisplayConfig); - break; - case VD_AGENT_ANNOUNCE_CAPABILITIES: - min_size = sizeof(VDAgentAnnounceCapabilities); - break; - case VD_AGENT_FILE_XFER_START: - min_size = sizeof(VDAgentFileXferStatusMessage); - break; - case VD_AGENT_FILE_XFER_STATUS: - min_size = sizeof(VDAgentFileXferStatusMessage); - break; - case VD_AGENT_FILE_XFER_DATA: - min_size = sizeof(VDAgentFileXferDataMessage); - break; - case VD_AGENT_CLIENT_DISCONNECTED: - min_size = 0; - break; - case VD_AGENT_MAX_CLIPBOARD: - min_size = sizeof(VDAgentMaxClipboard); - break; - } - if (min_size < 0) { + // check message + switch (agent_check_message(msg, msg->data, _client_caps.data(), _client_caps.size())) { + case AGENT_CHECK_WRONG_PROTOCOL_VERSION: + vd_printf("Invalid protocol %u", msg->protocol); + _running = false; + return; + case AGENT_CHECK_UNKNOWN_MESSAGE: vd_printf("Unsupported message type %u size %u, ignoring", msg->type, msg->size); return; - } - if (msg->size < (unsigned) min_size) { + case AGENT_CHECK_INVALID_SIZE: vd_printf("Unexpected msg size %u for message type %u", msg->size, msg->type); _running = false; return; + case AGENT_CHECK_TRUNCATED: + case AGENT_CHECK_INVALID_DATA: + vd_printf("Received malformed message, size %u type %u", msg->size, msg->type); + _running = false; + return; + case AGENT_CHECK_NO_ERROR: + break; } switch (msg->type) { |