summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Security/SL3_SecurityCurrent.h
blob: 2cc6f6650f1c7d2eab9aa6ffcb59103e1c852057 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
// -*- C++ -*-

//=============================================================================
/**
 * @file SL3_SecurityCurrent.h
 *
 * $Id$
 *
 * @author Ossama Othman <ossama@dre.vanderbilt.edu>
 */
//=============================================================================


#ifndef TAO_SL3_SECURITY_CURRENT_H
#define TAO_SL3_SECURITY_CURRENT_H

#include /**/ "ace/pre.h"

#include "orbsvcs/Security/security_export.h"

#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */

#include "SL3_SecurityCurrent_Impl.h"

#include "orbsvcs/SecurityLevel3C.h"

#include "tao/LocalObject.h"

#if defined(_MSC_VER)
#if (_MSC_VER >= 1200)
#pragma warning(push)
#endif /* _MSC_VER >= 1200 */
#pragma warning(disable:4250)
#endif /* _MSC_VER */


class TAO_ORB_Core;

namespace TAO
{
  namespace SL3
  {
    /**
     * @class SecurityCurrent
     *
     * @brief SecurityLevel3::SecurityCurrent implementation.
     *
     * Thread-specific information may be retrieved from the target
     * security service through this object.
     *
     * @note This SecurityCurrent implementation basically a variant
     *       of the bridge design pattern.  All operations are
     *       delegated on to concrete implementations.
     */
    class TAO_Security_Export SecurityCurrent
      : public virtual SecurityLevel3::SecurityCurrent,
        public virtual TAO_Local_RefCounted_Object
    {
    public:

      /// Constructor
      SecurityCurrent (size_t tss_slot, TAO_ORB_Core * oc);

      /**
       * @name SecurityLevel3::SecurityCurrent Methods
       *
       * Methods required by the SecurityLevel3::SecurityCurrent
       * interface.
       */
      //@{
      virtual SecurityLevel3::ClientCredentials_ptr client_credentials (
          ACE_ENV_SINGLE_ARG_DECL)
        ACE_THROW_SPEC ((CORBA::SystemException));

      virtual CORBA::Boolean request_is_local (ACE_ENV_SINGLE_ARG_DECL)
        ACE_THROW_SPEC ((CORBA::SystemException));
      //@}

      /// Return the TSS slot ID assigned to the "SecurityCurrent"
      /// object.
      /**
       * The concrete thread-specific storage SecurityCurrent
       * implementations will each use this slot ID.
       */
      size_t tss_slot (void) const;

    protected:

      /// Destructor
      /**
       * Protected destructor to enforce proper memory management
       * through the reference counting mechanism.
       */
      ~SecurityCurrent (void);

    private:

      /// Set the thread-specific storage
      /// SecurityLevel3::SecurityCurrent implementation.
      /**
       * The pointer is actually one to a concrete implementation provided
       * by the underlying security mechanism.  For example, SSLIOP
       * implements its own SSLIOP-specific operations corresponding
       * to the ones exposed by the SecurityCurrent interface.
       * Similarly, SECIOP would do the same.
       * @par
       * There is no function that places the implementation pointer
       * in TSS.  The underlying security mechanism does that.
       */
      SecurityCurrent_Impl * implementation (void);

    private:

      /**
       * @name Retricted Copying and Assignment
       *
       * Prevent copying through the copy constructor and the
       * assignment operator.
       */
      //@{
      SecurityCurrent (const SecurityCurrent &);
      void operator= (const SecurityCurrent &);
      //@}

    private:

      /// Thread-specific storage slot assigned to this object.
      const size_t tss_slot_;

      /// Pointer to the ORB Core corresponding to the ORB with which
      /// this object is registered.
      TAO_ORB_Core *orb_core_;

    };

  } // End SL3 namespace
}  // End TAO namespace


#if defined (__ACE_INLINE__)
# include "SL3_SecurityCurrent.inl"
#endif /* __ACE_INLINE__ */

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
#pragma warning(pop)
#endif /* _MSC_VER */

#include /**/ "ace/post.h"

#endif  /* TAO_SL3_SECURITY_CURRENT_H */