Logo Search packages:      
Sourcecode: virtualbox-ose version File versions  Download package

GuestControlSvc.h

Go to the documentation of this file.
/** @file
 * Guest control service:
 * Common header for host service and guest clients.
 */

/*
 * Copyright (C) 2010 Oracle Corporation
 *
 * This file is part of VirtualBox Open Source Edition (OSE), as
 * available from http://www.virtualbox.org. This file is free software;
 * you can redistribute it and/or modify it under the terms of the GNU
 * General Public License (GPL) as published by the Free Software
 * Foundation, in version 2 as it comes in the "COPYING" file of the
 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 *
 * The contents of this file may alternatively be used under the terms
 * of the Common Development and Distribution License Version 1.0
 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
 * VirtualBox OSE distribution, in which case the provisions of the
 * CDDL are applicable instead of those of the GPL.
 *
 * You may elect to license modified versions of this file under the
 * terms and conditions of either the GPL or the CDDL or both.
 */

#ifndef ___VBox_HostService_GuestControlService_h
#define ___VBox_HostService_GuestControlService_h

#include <VBox/types.h>
#include <VBox/VMMDev.h>
#include <VBox/VBoxGuest2.h>
#include <VBox/hgcmsvc.h>
#include <VBox/log.h>
#include <iprt/assert.h>
#include <iprt/string.h>

/** Everything defined in this file lives in this namespace. */
00039 namespace guestControl {

/******************************************************************************
* Typedefs, constants and inlines                                             *
******************************************************************************/

/**
 * Process status when executed in the guest.
 */
00048 enum eProcessStatus
{
    /** Process is in an undefined state. */
00051     PROC_STS_UNDEFINED = 0,
    /** Process has been started. */
00053     PROC_STS_STARTED = 1,
    /** Process terminated normally. */
00055     PROC_STS_TEN = 2,
    /** Process terminated via signal. */
00057     PROC_STS_TES = 3,
    /** Process terminated abnormally. */
00059     PROC_STS_TEA = 4,
    /** Process timed out and was killed. */
00061     PROC_STS_TOK = 5,
    /** Process timed out and was not killed successfully. */
00063     PROC_STS_TOA = 6,
    /** Service is stopping, process was killed. */
00065     PROC_STS_DWN = 7,
    /** Something went wrong (error code in flags). */
00067     PROC_STS_ERROR = 8
};

00070 typedef struct _VBoxGuestCtrlCallbackHeader
{
    /** Magic number to identify the structure. */
00073     uint32_t u32Magic;
    /** Context ID to identify callback data. */
00075     uint32_t u32ContextID;
} CALLBACKHEADER, *PCALLBACKHEADER;

/**
 * Data structure to pass to the service extension callback.  We use this to
 * notify the host of changes to properties.
 */
00082 typedef struct _VBoxGuestCtrlCallbackDataExecStatus
{
    /** Callback data header. */
00085     CALLBACKHEADER hdr;
    /** The process ID (PID). */
00087     uint32_t u32PID;
    /* The process status. */
    uint32_t u32Status;
    /** Optional flags (not used atm). */
00091     uint32_t u32Flags;
    /** Optional data buffer (not used atm). */
00093     void *pvData;
    /** Size of optional data buffer (not used atm). */
00095     uint32_t cbData;
} CALLBACKDATAEXECSTATUS, *PCALLBACKDATAEXECSTATUS;

00098 typedef struct _VBoxGuestCtrlCallbackDataExecOut
{
    /** Callback data header. */
00101     CALLBACKHEADER hdr;
    /** The process ID (PID). */
00103     uint32_t u32PID;
    /* The handle ID (stdout/stderr). */
    uint32_t u32HandleId;
    /** Optional flags (not used atm). */
00107     uint32_t u32Flags;
    /** Optional data buffer. */
00109     void *pvData;
    /** Size of optional data buffer. */
00111     uint32_t cbData;
} CALLBACKDATAEXECOUT, *PCALLBACKDATAEXECOUT;

00114 typedef struct _VBoxGuestCtrlCallbackDataClientDisconnected
{
    /** Callback data header. */
00117     CALLBACKHEADER hdr;
} CALLBACKDATACLIENTDISCONNECTED, *PCALLBACKDATACLIENTDISCONNECTED;

enum
{
    /** Magic number for sanity checking the CALLBACKDATACLIENTDISCONNECTED structure. */
00123     CALLBACKDATAMAGICCLIENTDISCONNECTED = 0x08041984,
    /** Magic number for sanity checking the CALLBACKDATAEXECSTATUS structure. */
00125     CALLBACKDATAMAGICEXECSTATUS = 0x26011982,
    /** Magic number for sanity checking the CALLBACKDATAEXECOUT structure. */
00127     CALLBACKDATAMAGICEXECOUT = 0x11061949
};

enum eVBoxGuestCtrlCallbackType
{
    VBOXGUESTCTRLCALLBACKTYPE_UNKNOWN = 0,
    VBOXGUESTCTRLCALLBACKTYPE_EXEC_START = 1,
    VBOXGUESTCTRLCALLBACKTYPE_EXEC_OUTPUT = 2
};

/**
 * The service functions which are callable by host.
 */
00140 enum eHostFn
{
    /**
     * The host wants to execute something in the guest. This can be a command line
     * or starting a program.
     */
00146     HOST_EXEC_CMD = 100,
    /**
     * Sends input data for stdin to a running process executed by HOST_EXEC_CMD.
     */
00150     HOST_EXEC_SET_INPUT = 101,
    /**
     * Gets the current status of a running process, e.g.
     * new data on stdout/stderr, process terminated etc.
     */
00155     HOST_EXEC_GET_OUTPUT = 102
};

/**
 * The service functions which are called by guest.  The numbers may not change,
 * so we hardcode them.
 */
00162 enum eGuestFn
{
    /**
     * Guest waits for a new message the host wants to process on the guest side.
     * This is a blocking call and can be deferred.
     */
00168     GUEST_GET_HOST_MSG = 1,
    /**
     * Guest asks the host to cancel all pending waits the guest itself waits on.
     * This becomes necessary when the guest wants to quit but still waits for
     * commands from the host.
     */
00174     GUEST_CANCEL_PENDING_WAITS = 2,
    /**
     * Guest disconnected (terminated normally or due to a crash HGCM
     * detected when calling service::clientDisconnect().
     */
00179     GUEST_DISCONNECTED = 3,
    /**
     * TODO
     */
00183     GUEST_EXEC_SEND_OUTPUT = 100,
    /**
     * TODO
     */
00187     GUEST_EXEC_SEND_STATUS = 101
};

/**
 * Sub host commands.  These commands are stored as first (=0) parameter in a GUEST_GET_HOST_MSG
 * so that the guest can react dynamically to requests from the host.
 */
00194 enum eGetHostMsgFn
{
    /**
     * Hosts wants the guest to stop waiting for new messages.
     */
00199     GETHOSTMSG_EXEC_HOST_CANCEL_WAIT = 0,
    /**
     * The host wants to execute something in the guest. This can be a command line
     * or starting a program.
     */
00204     GETHOSTMSG_EXEC_START_PROCESS = 100,
    /**
     * Sends input data for stdin to a running process executed by HOST_EXEC_CMD.
     */
00208     GETHOSTMSG_EXEC_SEND_INPUT = 101,
    /**
     * Host requests the so far collected stdout/stderr output
     * from a running process executed by HOST_EXEC_CMD.
     */
00213     GETHOSTMSG_EXEC_GET_OUTPUT = 102
};

/*
 * HGCM parameter structures.
 */
#pragma pack (1)
00220 typedef struct _VBoxGuestCtrlHGCMMsgType
{
    VBoxGuestHGCMCallInfo hdr;

    /**
     * The returned command the host wants to
     * run on the guest.
     */
00228     HGCMFunctionParameter msg;       /* OUT uint32_t */
    /** Number of parameters the message needs. */
00230     HGCMFunctionParameter num_parms; /* OUT uint32_t */

} VBoxGuestCtrlHGCMMsgType;

00234 typedef struct _VBoxGuestCtrlHGCMMsgCancelPendingWaits
{
    VBoxGuestHGCMCallInfo hdr;
} VBoxGuestCtrlHGCMMsgCancelPendingWaits;

00239 typedef struct _VBoxGuestCtrlHGCMMsgExecCmd
{
    VBoxGuestHGCMCallInfo hdr;

    HGCMFunctionParameter context;

    HGCMFunctionParameter cmd;

    HGCMFunctionParameter flags;

    HGCMFunctionParameter num_args;

    HGCMFunctionParameter args;

    HGCMFunctionParameter num_env;
    /** Size (in bytes) of environment block, including terminating zeros. */
00255     HGCMFunctionParameter cb_env;

    HGCMFunctionParameter env;

    HGCMFunctionParameter username;

    HGCMFunctionParameter password;

    HGCMFunctionParameter timeout;

} VBoxGuestCtrlHGCMMsgExecCmd;

00267 typedef struct _VBoxGuestCtrlHGCMMsgExecOut
{
    VBoxGuestHGCMCallInfo hdr;
    /** Context ID. */
00271     HGCMFunctionParameter context;
    /** The process ID (PID). */
00273     HGCMFunctionParameter pid;
    /** The pipe handle ID. */
00275     HGCMFunctionParameter handle;
    /** Optional flags. */
00277     HGCMFunctionParameter flags;
    /** Data buffer. */
00279     HGCMFunctionParameter data;

} VBoxGuestCtrlHGCMMsgExecOut;

00283 typedef struct _VBoxGuestCtrlHGCMMsgExecStatus
{
    VBoxGuestHGCMCallInfo hdr;
    /** Context ID. */
00287     HGCMFunctionParameter context;
    /** The process ID (PID). */
00289     HGCMFunctionParameter pid;
    /** The process status. */
00291     HGCMFunctionParameter status;
    /** Optional flags (based on status). */
00293     HGCMFunctionParameter flags;
    /** Optional data buffer (not used atm). */
00295     HGCMFunctionParameter data;

} VBoxGuestCtrlHGCMMsgExecStatus;
#pragma pack ()

/* Structure for buffering execution requests in the host service. */
00301 typedef struct _VBoxGuestCtrlParamBuffer
{
    uint32_t uMsg;
    uint32_t uParmCount;
    VBOXHGCMSVCPARM *pParms;
} VBOXGUESTCTRPARAMBUFFER, *PVBOXGUESTCTRPARAMBUFFER;

} /* namespace guestControl */

#endif  /* ___VBox_HostService_GuestControlService_h defined */

Generated by  Doxygen 1.6.0   Back to index