6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync/* $Id$ */
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync/** @file
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync * VBoxManageGuestCtrl.h - Definitions for guest control.
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync */
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync/*
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync * Copyright (C) 2013 Oracle Corporation
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync *
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync * available from http://www.virtualbox.org. This file is free software;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync * you can redistribute it and/or modify it under the terms of the GNU
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync * General Public License (GPL) as published by the Free Software
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync */
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync#ifndef ___H_VBOXMANAGE_GUESTCTRL
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync#define ___H_VBOXMANAGE_GUESTCTRL
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync#ifndef VBOX_ONLY_DOCS
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync#include <VBox/com/com.h>
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync#include <VBox/com/listeners.h>
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync#include <VBox/com/VirtualBox.h>
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync#include <iprt/time.h>
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync#include <map>
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncconst char *ctrlFileStatusToText(FileStatus_T enmStatus);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncconst char *ctrlProcessStatusToText(ProcessStatus_T enmStatus);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncconst char *ctrlSessionStatusToText(GuestSessionStatus_T enmStatus);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncusing namespace com;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncclass GuestFileEventListener;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsynctypedef ListenerImpl<GuestFileEventListener> GuestFileEventListenerImpl;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncclass GuestProcessEventListener;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsynctypedef ListenerImpl<GuestProcessEventListener> GuestProcessEventListenerImpl;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncclass GuestSessionEventListener;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsynctypedef ListenerImpl<GuestSessionEventListener> GuestSessionEventListenerImpl;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncclass GuestEventListener;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsynctypedef ListenerImpl<GuestEventListener> GuestEventListenerImpl;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync/** Simple statistics class for binding locally
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync * held data to a specific guest object. */
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncclass GuestEventStats
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync{
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncpublic:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync GuestEventStats(void)
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync : uLastUpdatedMS(RTTimeMilliTS())
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync {
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync }
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync /** @todo Make this more a class than a structure. */
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncpublic:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync uint64_t uLastUpdatedMS;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync};
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncclass GuestFileStats : public GuestEventStats
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync{
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncpublic:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync GuestFileStats(void) { }
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync GuestFileStats(ComObjPtr<GuestFileEventListenerImpl> pListenerImpl)
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync : mListener(pListenerImpl)
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync {
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync }
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncpublic: /** @todo */
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync ComObjPtr<GuestFileEventListenerImpl> mListener;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync};
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncclass GuestProcStats : public GuestEventStats
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync{
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncpublic:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync GuestProcStats(void) { }
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync GuestProcStats(ComObjPtr<GuestProcessEventListenerImpl> pListenerImpl)
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync : mListener(pListenerImpl)
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync {
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync }
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncpublic: /** @todo */
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync ComObjPtr<GuestProcessEventListenerImpl> mListener;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync};
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncclass GuestSessionStats : public GuestEventStats
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync{
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncpublic:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync GuestSessionStats(void) { }
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync GuestSessionStats(ComObjPtr<GuestSessionEventListenerImpl> pListenerImpl)
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync : mListener(pListenerImpl)
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync {
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync }
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncpublic: /** @todo */
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync ComObjPtr<GuestSessionEventListenerImpl> mListener;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync};
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync/** Map containing all watched guest files. */
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsynctypedef std::map< ComPtr<IGuestFile>, GuestFileStats > GuestEventFiles;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync/** Map containing all watched guest processes. */
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsynctypedef std::map< ComPtr<IGuestProcess>, GuestProcStats > GuestEventProcs;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync/** Map containing all watched guest sessions. */
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsynctypedef std::map< ComPtr<IGuestSession>, GuestSessionStats > GuestEventSessions;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncclass GuestListenerBase
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync{
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncpublic:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync GuestListenerBase(void);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync virtual ~GuestListenerBase(void);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncpublic:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync HRESULT init(bool fVerbose = false);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncprotected:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync /** Verbose flag. */
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync bool mfVerbose;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync};
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync/**
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync * Handler for guest process events.
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync */
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncclass GuestFileEventListener : public GuestListenerBase
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync{
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncpublic:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync GuestFileEventListener(void);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync virtual ~GuestFileEventListener(void);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncpublic:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync void uninit(void);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync STDMETHOD(HandleEvent)(VBoxEventType_T aType, IEvent *aEvent);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncprotected:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync};
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync/**
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync * Handler for guest process events.
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync */
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncclass GuestProcessEventListener : public GuestListenerBase
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync{
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncpublic:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync GuestProcessEventListener(void);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync virtual ~GuestProcessEventListener(void);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncpublic:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync void uninit(void);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync STDMETHOD(HandleEvent)(VBoxEventType_T aType, IEvent *aEvent);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncprotected:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync};
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync/**
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync * Handler for guest session events.
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync */
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncclass GuestSessionEventListener : public GuestListenerBase
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync{
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncpublic:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync GuestSessionEventListener(void);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync virtual ~GuestSessionEventListener(void);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncpublic:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync void uninit(void);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync STDMETHOD(HandleEvent)(VBoxEventType_T aType, IEvent *aEvent);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncprotected:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync GuestEventFiles mFiles;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync GuestEventProcs mProcs;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync};
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync/**
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync * Handler for guest events.
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync */
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncclass GuestEventListener : public GuestListenerBase
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync{
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncpublic:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync GuestEventListener(void);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync virtual ~GuestEventListener(void);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncpublic:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync void uninit(void);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync STDMETHOD(HandleEvent)(VBoxEventType_T aType, IEvent *aEvent);
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsyncprotected:
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync GuestEventSessions mSessions;
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync};
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync#endif /* !VBOX_ONLY_DOCS */
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync#endif /* !___H_VBOXMANAGE_GUESTCTRL */
6a8248a13343c9d396578bf8b0aef0e3312bfcbdvboxsync