ClientToken.h revision 8157dba118de0fdf8d1a2c7664edd82cc69dcf4f
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync/* $Id$ */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync/** @file
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync *
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync * VirtualBox API client session token abstraction
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync/*
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * Copyright (C) 2013 Oracle Corporation
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync *
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * available from http://www.virtualbox.org. This file is free software;
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * you can redistribute it and/or modify it under the terms of the GNU
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * General Public License (GPL) as published by the Free Software
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#ifndef ____H_CLIENTTOKEN
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#define ____H_CLIENTTOKEN
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#include <VBox/com/ptr.h>
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#include <VBox/com/AutoLock.h>
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#include "MachineImpl.h"
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync#ifdef VBOX_WITH_GENERIC_SESSION_WATCHER
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync# include "TokenImpl.h"
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync#endif /* VBOX_WITH_GENERIC_SESSION_WATCHER */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#if defined(RT_OS_WINDOWS)
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync# define CTTOKENARG NULL
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync# define CTTOKENTYPE HANDLE
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#elif defined(RT_OS_OS2)
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync# define CTTOKENARG NULLHANDLE
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync# define CTTOKENTYPE HMTX
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#elif defined(VBOX_WITH_SYS_V_IPC_SESSION_WATCHER)
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync# define CTTOKENARG -1
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync# define CTTOKENTYPE int
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync#elif defined(VBOX_WITH_GENERIC_SESSION_WATCHER)
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync# define CTTOKENARG NULL
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync# define CTTOKENTYPE MachineToken *
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#else
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync# error "Port me!"
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#endif
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync/**
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * Class which represents a token which can be used to check for client
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * crashes and similar purposes.
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsyncclass Machine::ClientToken
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync{
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsyncpublic:
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync /**
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * Constructor which creates a usable instance
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync *
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync * @param pMachine Reference to Machine object
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync * @param pSessionMachine Reference to corresponding SessionMachine object
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync */
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync ClientToken(const ComObjPtr<Machine> &pMachine, SessionMachine *pSessionMachine);
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync /**
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * Default destructor. Cleans everything up.
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync ~ClientToken();
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync /**
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * Check if object contains a usable token.
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync bool isReady();
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync /**
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * Query token ID, which is a unique string value for this token. Do not
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * assume any specific content/format, it is opaque information.
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync void getId(Utf8Str &strId);
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync /**
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * Query token, which is platform dependent.
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync CTTOKENTYPE getToken();
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync#ifndef VBOX_WITH_GENERIC_SESSION_WATCHER
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync /**
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * Release token now. Returns information if the client has terminated.
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync bool release();
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync#endif /* !VBOX_WITH_GENERIC_SESSION_WATCHER */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsyncprivate:
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync /**
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * Default constructor. Don't use, will not create a sensible instance.
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync ClientToken();
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync Machine *mMachine;
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync CTTOKENTYPE mClientToken;
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync Utf8Str mClientTokenId;
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync#ifdef VBOX_WITH_GENERIC_SESSION_WATCHER
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync bool mClientTokenPassed;
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync#endif
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync};
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#endif /* !____H_CLIENTTOKEN */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync/* vi: set tabstop=4 shiftwidth=4 expandtab: */