5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync/* $Id$ */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync/** @file
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync *
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync * VirtualBox API client session token holder (in the client process)
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_CLIENTTOKENHOLDER
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#define ____H_CLIENTTOKENHOLDER
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#include "SessionImpl.h"
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#if defined(RT_OS_WINDOWS)
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync# define CTHSEMARG NULL
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync# define CTHSEMTYPE HANDLE
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync/* this second semaphore is only used on Windows */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync# define CTHTHREADSEMARG NULL
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync# define CTHTHREADSEMTYPE HANDLE
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#elif defined(RT_OS_OS2)
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync# define CTHSEMARG NIL_RTSEMEVENT
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync# define CTHSEMTYPE RTSEMEVENT
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#elif defined(VBOX_WITH_SYS_V_IPC_SESSION_WATCHER)
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync# define CTHSEMARG -1
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync# define CTHSEMTYPE int
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync#elif defined(VBOX_WITH_GENERIC_SESSION_WATCHER)
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync/* the token object based implementation needs no semaphores */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#else
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync# error "Port me!"
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#endif
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync/**
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * Class which holds a client token.
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsyncclass Session::ClientTokenHolder
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync{
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsyncpublic:
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync#ifndef VBOX_WITH_GENERIC_SESSION_WATCHER
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync /**
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * Constructor which creates a usable instance
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync *
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * @param strTokenId String with identifier of the token
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync ClientTokenHolder(const Utf8Str &strTokenId);
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync#else /* VBOX_WITH_GENERIC_SESSION_WATCHER */
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync /**
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync * Constructor which creates a usable instance
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync *
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync * @param aToken Reference to token object
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync */
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync ClientTokenHolder(IToken *aToken);
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync#endif /* VBOX_WITH_GENERIC_SESSION_WATCHER */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync /**
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * Default destructor. Cleans everything up.
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync ~ClientTokenHolder();
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync /**
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * Check if object contains a usable token.
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync bool isReady();
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsyncprivate:
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync /**
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync * Default constructor. Don't use, will not create a sensible instance.
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync ClientTokenHolder();
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync#ifndef VBOX_WITH_GENERIC_SESSION_WATCHER
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync Utf8Str mClientTokenId;
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync#else /* VBOX_WITH_GENERIC_SESSION_WATCHER */
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync ComPtr<IToken> mToken;
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync#endif /* VBOX_WITH_GENERIC_SESSION_WATCHER */
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync#ifdef CTHSEMTYPE
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync CTHSEMTYPE mSem;
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync#endif
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync RTTHREAD mThread;
8157dba118de0fdf8d1a2c7664edd82cc69dcf4fvboxsync#endif
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#ifdef RT_OS_WINDOWS
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync CTHTHREADSEMTYPE mThreadSem;
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#endif
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync};
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync#endif /* !____H_CLIENTTOKENHOLDER */
5637660ed0c2a4a3a114e6d2d4c8294f2fd5f18fvboxsync/* vi: set tabstop=4 shiftwidth=4 expandtab: */