diff --git a/common/include/common/KVMFR.h b/common/include/common/KVMFR.h index 7c006a1d..5cbb62c8 100644 --- a/common/include/common/KVMFR.h +++ b/common/include/common/KVMFR.h @@ -85,14 +85,15 @@ enum KVMFR_RECORD_OSINFO }; -enum +typedef enum { KVMFR_OS_LINUX, KVMFR_OS_BSD, KVMFR_OS_OSX, KVMFR_OS_WINDOWS, KVMFR_OS_OTHER -}; +} +KVMFROS; typedef struct KVMFRRecord_VMInfo { diff --git a/host/include/interface/platform.h b/host/include/interface/platform.h index d74255f6..c529a9b5 100644 --- a/host/include/interface/platform.h +++ b/host/include/interface/platform.h @@ -21,6 +21,7 @@ #pragma once #include +#include "common/KVMFR.h" // exit code for user opted to exit looking-glass-host #define LG_HOST_EXIT_USER 0x10 @@ -46,3 +47,13 @@ void os_showMessage(const char * caption, const char * msg); bool os_blockScreensaver(); bool os_hasSetCursorPos(void); void os_setCursorPos(int x, int y); + +// return the KVMFR OS type +KVMFROS os_getKVMFRType(void); + +// returns the OS name & version if possible +const char * os_getOSName(void); + +// returns the UUID that was given to the VM, this can be obtained from the +// SMBIOS. Must return exactly 16 bytes or NULL. +const uint8_t * os_getUUID(void); diff --git a/host/platform/Linux/src/platform.c b/host/platform/Linux/src/platform.c index d5f13e35..2f493bb7 100644 --- a/host/platform/Linux/src/platform.c +++ b/host/platform/Linux/src/platform.c @@ -95,3 +95,20 @@ bool os_hasSetCursorPos(void) void os_setCursorPos(int x, int y) { } + +KVMFROS os_getKVMFRType(void) +{ + return KVMFR_OS_LINUX; +} + +const char * os_getOSName(void) +{ + //TODO + return NULL; +} + +const uint8_t * os_getUUID(void) +{ + //TODO + return NULL; +} diff --git a/host/platform/Windows/src/platform.c b/host/platform/Windows/src/platform.c index c5ca6862..afbd9399 100644 --- a/host/platform/Windows/src/platform.c +++ b/host/platform/Windows/src/platform.c @@ -589,3 +589,20 @@ void os_setCursorPos(int x, int y) { SetCursorPos(x, y); } + +KVMFROS os_getKVMFRType(void) +{ + return KVMFR_OS_WINDOWS; +} + +const char * os_getOSName(void) +{ + //TODO + return NULL; +} + +const uint8_t * os_getUUID(void) +{ + //TODO + return NULL; +} diff --git a/host/src/app.c b/host/src/app.c index 39fb035f..79d21996 100644 --- a/host/src/app.c +++ b/host/src/app.c @@ -604,6 +604,10 @@ static bool newKVMFRData(KVMFRUserData * dst) strncpy(vmInfo->capture, app.iface->shortName, sizeof(vmInfo->capture) - 1); + const uint8_t * uuid = os_getUUID(); + if (uuid) + memcpy(vmInfo->uuid, uuid, 16); + char * model = allocUserData(dst, 1024, false); if (!model) return false; @@ -630,8 +634,12 @@ static bool newKVMFRData(KVMFRUserData * dst) record->type = KVMFR_RECORD_OSINFO; record->size = sizeof(*osInfo); - osInfo->os = KVMFR_OS_OTHER; - if (!appendBuffer(dst, record, "Unknown", 8)) + osInfo->os = os_getKVMFRType(); + const char * osName = os_getOSName(); + if (!osName) + osName = ""; + + if (!appendBuffer(dst, record, osName, strlen(osName) + 1)) return false; }