8d43244aa3d322f7807a4b0488f1038dd2595dc1vboxsync/* $Id$ */
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync/** @file
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync * VBoxControl - Guest Additions Command Line Management Interface, test case
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync */
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync/*
faf0941c69d5b901d3fa4b67fe6d5d7fb5c28368vboxsync * Copyright (C) 2007-2013 Oracle Corporation
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync * available from http://www.virtualbox.org. This file is free software;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync * you can redistribute it and/or modify it under the terms of the GNU
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync * General Public License (GPL) as published by the Free Software
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync */
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync/*******************************************************************************
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync* Header Files *
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync*******************************************************************************/
b8f36a8f77f0140f48170d5b3cd9ee9ea1c14294vboxsync#include <iprt/cpp/autores.h>
682a27d94b9116c719038882487b99053985f91avboxsync#include <iprt/initterm.h>
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync#include <iprt/mem.h>
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync#include <iprt/path.h>
682a27d94b9116c719038882487b99053985f91avboxsync#include <iprt/stream.h>
682a27d94b9116c719038882487b99053985f91avboxsync#include <iprt/string.h>
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync#include <VBox/log.h>
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync#include <VBox/version.h>
682a27d94b9116c719038882487b99053985f91avboxsync#include <VBox/VBoxGuestLib.h>
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync#ifdef VBOX_WITH_GUEST_PROPS
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync# include <VBox/HostServices/GuestPropertySvc.h>
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync#endif
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsyncVBGLR3DECL(int) VbglR3Init(void)
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync{
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync RTPrintf("Initialising guest library...\n");
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync return VINF_SUCCESS;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync}
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsyncVBGLR3DECL(int) VbglR3GuestPropConnect(uint32_t *pu32ClientId)
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync{
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync AssertPtrReturn(pu32ClientId, VERR_INVALID_POINTER);
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync RTPrintf("Connect to guest property service...\n");
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *pu32ClientId = 1;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync return VINF_SUCCESS;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync}
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsyncVBGLR3DECL(int) VbglR3GuestPropDisconnect(uint32_t u32ClientId)
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync{
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync RTPrintf("Disconnect client %d from guest property service...\n", u32ClientId);
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync return VINF_SUCCESS;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync}
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsyncVBGLR3DECL(int) VbglR3GuestPropWrite(uint32_t u32ClientId,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync const char *pszName,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync const char *pszValue,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync const char *pszFlags)
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync{
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync RTPrintf("Called SET_PROP, client %d, name %s, value %s, flags %s...\n",
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync u32ClientId, pszName, pszValue, pszFlags);
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync return VINF_SUCCESS;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync}
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsyncVBGLR3DECL(int) VbglR3GuestPropWriteValue(uint32_t u32ClientId,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync const char *pszName,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync const char *pszValue)
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync{
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync RTPrintf("Called SET_PROP_VALUE, client %d, name %s, value %s...\n",
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync u32ClientId, pszName, pszValue);
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync return VINF_SUCCESS;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync}
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync
f450e6365ee42333841dd494583809428b504e37vboxsync#ifdef VBOX_WITH_GUEST_PROPS
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsyncVBGLR3DECL(int) VbglR3GuestPropRead(uint32_t u32ClientId,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync const char *pszName,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync void *pvBuf,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync uint32_t cbBuf,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync char **ppszValue,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync uint64_t *pu64Timestamp,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync char **ppszFlags,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync uint32_t *pcbBufActual)
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync{
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync RTPrintf("Called GET_PROP, client %d, name %s...\n",
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync u32ClientId, pszName);
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync static char szValue[] = "Value";
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync static char szFlags[] = "TRANSIENT";
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync if (VALID_PTR(ppszValue))
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *ppszValue = szValue;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync if (VALID_PTR(pu64Timestamp))
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *pu64Timestamp = 12345;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync if (VALID_PTR(ppszFlags))
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *ppszFlags = szFlags;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync if (VALID_PTR(pcbBufActual))
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *pcbBufActual = 256;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync return VINF_SUCCESS;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync}
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync
faf0941c69d5b901d3fa4b67fe6d5d7fb5c28368vboxsyncVBGLR3DECL(int) VbglR3GuestPropDelete(uint32_t u32ClientId,
faf0941c69d5b901d3fa4b67fe6d5d7fb5c28368vboxsync const char *pszName)
faf0941c69d5b901d3fa4b67fe6d5d7fb5c28368vboxsync{
faf0941c69d5b901d3fa4b67fe6d5d7fb5c28368vboxsync RTPrintf("Called DEL_PROP, client %d, name %s...\n",
faf0941c69d5b901d3fa4b67fe6d5d7fb5c28368vboxsync u32ClientId, pszName);
faf0941c69d5b901d3fa4b67fe6d5d7fb5c28368vboxsync return VINF_SUCCESS;
faf0941c69d5b901d3fa4b67fe6d5d7fb5c28368vboxsync}
faf0941c69d5b901d3fa4b67fe6d5d7fb5c28368vboxsync
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsyncstruct VBGLR3GUESTPROPENUM
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync{
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync uint32_t u32;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync};
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsyncVBGLR3DECL(int) VbglR3GuestPropEnum(uint32_t u32ClientId,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync char const * const *ppaszPatterns,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync uint32_t cPatterns,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync PVBGLR3GUESTPROPENUM *ppHandle,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync char const **ppszName,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync char const **ppszValue,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync uint64_t *pu64Timestamp,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync char const **ppszFlags)
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync{
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync RTPrintf("Called ENUM_PROPS, client %d...\n", u32ClientId);
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync AssertPtrReturn(ppHandle, VERR_INVALID_POINTER);
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync static VBGLR3GUESTPROPENUM Handle = { 0 };
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync static char szName[] = "Name";
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync static char szValue[] = "Value";
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync static char szFlags[] = "TRANSIENT";
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *ppHandle = &Handle;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync if (VALID_PTR(ppszName))
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *ppszName = szName;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync if (VALID_PTR(ppszValue))
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *ppszValue = szValue;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync if (VALID_PTR(pu64Timestamp))
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *pu64Timestamp = 12345;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync if (VALID_PTR(ppszFlags))
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *ppszFlags = szFlags;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync return VINF_SUCCESS;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync}
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsyncVBGLR3DECL(int) VbglR3GuestPropEnumNext(PVBGLR3GUESTPROPENUM pHandle,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync char const **ppszName,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync char const **ppszValue,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync uint64_t *pu64Timestamp,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync char const **ppszFlags)
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync{
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync RTPrintf("Called enumerate next...\n");
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync AssertReturn(VALID_PTR(ppszName) || VALID_PTR(ppszValue) || VALID_PTR(ppszFlags),
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync VERR_INVALID_POINTER);
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync if (VALID_PTR(ppszName))
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *ppszName = NULL;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync if (VALID_PTR(ppszValue))
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *ppszValue = NULL;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync if (VALID_PTR(pu64Timestamp))
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *pu64Timestamp = 0;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync if (VALID_PTR(ppszFlags))
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *ppszFlags = NULL;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync return VINF_SUCCESS;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync}
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsyncVBGLR3DECL(void) VbglR3GuestPropEnumFree(PVBGLR3GUESTPROPENUM pHandle)
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync{
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync RTPrintf("Called enumerate free...\n");
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync}
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsyncVBGLR3DECL(int) VbglR3GuestPropWait(uint32_t u32ClientId,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync const char *pszPatterns,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync void *pvBuf,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync uint32_t cbBuf,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync uint64_t u64Timestamp,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync uint32_t u32Timeout,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync char ** ppszName,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync char **ppszValue,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync uint64_t *pu64Timestamp,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync char **ppszFlags,
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync uint32_t *pcbBufActual)
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync{
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync if (u32Timeout == RT_INDEFINITE_WAIT)
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync RTPrintf("Called GET_NOTIFICATION, client %d, patterns %s, timestamp %llu,\n"
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync " timeout RT_INDEFINITE_WAIT...\n",
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync u32ClientId, pszPatterns, u64Timestamp);
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync else
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync RTPrintf("Called GET_NOTIFICATION, client %d, patterns %s, timestamp %llu,\n"
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync " timeout %u...\n",
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync u32ClientId, pszPatterns, u64Timestamp, u32Timeout);
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync static char szName[] = "Name";
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync static char szValue[] = "Value";
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync static char szFlags[] = "TRANSIENT";
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync if (VALID_PTR(ppszName))
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *ppszName = szName;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync if (VALID_PTR(ppszValue))
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *ppszValue = szValue;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync if (VALID_PTR(pu64Timestamp))
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *pu64Timestamp = 12345;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync if (VALID_PTR(ppszFlags))
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *ppszFlags = szFlags;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync if (VALID_PTR(pcbBufActual))
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync *pcbBufActual = 256;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync return VINF_SUCCESS;
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync}
771e550bb18d9cadd6ee1bb067d6c5d360720248vboxsync
f450e6365ee42333841dd494583809428b504e37vboxsync#endif
6b0577f7fc626b475f5177a9049817b5eea6c7f6vboxsync
6b0577f7fc626b475f5177a9049817b5eea6c7f6vboxsyncVBGLR3DECL(int) VbglR3WriteLog(const char *pch, size_t cch)
6b0577f7fc626b475f5177a9049817b5eea6c7f6vboxsync{
6b0577f7fc626b475f5177a9049817b5eea6c7f6vboxsync NOREF(pch); NOREF(cch);
6b0577f7fc626b475f5177a9049817b5eea6c7f6vboxsync return VINF_SUCCESS;
6b0577f7fc626b475f5177a9049817b5eea6c7f6vboxsync}
6b0577f7fc626b475f5177a9049817b5eea6c7f6vboxsync