VirtualBox

source: vbox/trunk/src/VBox/Main/include/ClientTokenHolder.h@ 51498

Last change on this file since 51498 was 48431, checked in by vboxsync, 11 years ago

Main/Machine+Session: New generic client session watcher implementation based on token objects, works on all platforms and is used for now on XPCOM. Additionally a better error message when several API clients are racing for a lock, previously it could be quite confusing.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.5 KB
Line 
1/* $Id: ClientTokenHolder.h 48431 2013-09-11 14:08:36Z vboxsync $ */
2
3/** @file
4 *
5 * VirtualBox API client session token holder (in the client process)
6 */
7
8/*
9 * Copyright (C) 2013 Oracle Corporation
10 *
11 * This file is part of VirtualBox Open Source Edition (OSE), as
12 * available from http://www.virtualbox.org. This file is free software;
13 * you can redistribute it and/or modify it under the terms of the GNU
14 * General Public License (GPL) as published by the Free Software
15 * Foundation, in version 2 as it comes in the "COPYING" file of the
16 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
17 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
18 */
19
20#ifndef ____H_CLIENTTOKENHOLDER
21#define ____H_CLIENTTOKENHOLDER
22
23#include "SessionImpl.h"
24
25#if defined(RT_OS_WINDOWS)
26# define CTHSEMARG NULL
27# define CTHSEMTYPE HANDLE
28/* this second semaphore is only used on Windows */
29# define CTHTHREADSEMARG NULL
30# define CTHTHREADSEMTYPE HANDLE
31#elif defined(RT_OS_OS2)
32# define CTHSEMARG NIL_RTSEMEVENT
33# define CTHSEMTYPE RTSEMEVENT
34#elif defined(VBOX_WITH_SYS_V_IPC_SESSION_WATCHER)
35# define CTHSEMARG -1
36# define CTHSEMTYPE int
37#elif defined(VBOX_WITH_GENERIC_SESSION_WATCHER)
38/* the token object based implementation needs no semaphores */
39#else
40# error "Port me!"
41#endif
42
43
44/**
45 * Class which holds a client token.
46 */
47class Session::ClientTokenHolder
48{
49public:
50#ifndef VBOX_WITH_GENERIC_SESSION_WATCHER
51 /**
52 * Constructor which creates a usable instance
53 *
54 * @param strTokenId String with identifier of the token
55 */
56 ClientTokenHolder(const Utf8Str &strTokenId);
57#else /* VBOX_WITH_GENERIC_SESSION_WATCHER */
58 /**
59 * Constructor which creates a usable instance
60 *
61 * @param aToken Reference to token object
62 */
63 ClientTokenHolder(IToken *aToken);
64#endif /* VBOX_WITH_GENERIC_SESSION_WATCHER */
65
66 /**
67 * Default destructor. Cleans everything up.
68 */
69 ~ClientTokenHolder();
70
71 /**
72 * Check if object contains a usable token.
73 */
74 bool isReady();
75
76private:
77 /**
78 * Default constructor. Don't use, will not create a sensible instance.
79 */
80 ClientTokenHolder();
81
82#ifndef VBOX_WITH_GENERIC_SESSION_WATCHER
83 Utf8Str mClientTokenId;
84#else /* VBOX_WITH_GENERIC_SESSION_WATCHER */
85 ComPtr<IToken> mToken;
86#endif /* VBOX_WITH_GENERIC_SESSION_WATCHER */
87#ifdef CTHSEMTYPE
88 CTHSEMTYPE mSem;
89#endif
90#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
91 RTTHREAD mThread;
92#endif
93#ifdef RT_OS_WINDOWS
94 CTHTHREADSEMTYPE mThreadSem;
95#endif
96};
97
98#endif /* !____H_CLIENTTOKENHOLDER */
99/* vi: set tabstop=4 shiftwidth=4 expandtab: */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette