summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Security/Security_Current.h
blob: c1be7b22e7864fa7c9145ad6025f0710b048e868 (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
// -*- C++ -*-

// ===================================================================
/**
 *  @file   Security_Current.h
 *
 *  $Id$
 *
 *  @author Ossama Othman <ossama@uci.edu>
 */
// ===================================================================

#ifndef TAO_SECURITY_CURRENT_H
#define TAO_SECURITY_CURRENT_H

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

#include "security_export.h"

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

#include "orbsvcs/orbsvcs/SecurityLevel2C.h"
#include "tao/ORB_Core.h"
#include "tao/LocalObject.h"

#include "Security_Current_Impl.h"

// This is to remove "inherits via dominance" warnings from MSVC.
// MSVC is being a little too paranoid.
#if defined(_MSC_VER)
#if (_MSC_VER >= 1200)
#pragma warning(push)
#endif /* _MSC_VER >= 1200 */
#pragma warning(disable:4250)
#endif /* _MSC_VER */

/**
 * @class TAO_Security_Current
 *
 * @brief Implementation of the SecurityLevel2::Current interface.
 *
 * This object can be used to obtain session related security
 * information about the current execution context.
 */
class TAO_Security_Export TAO_Security_Current
  : public SecurityLevel2::Current,
    public TAO_Local_RefCounted_Object
{
public:

  /// Constructor.
  TAO_Security_Current (size_t tss_slot, const char *orb_id);

  /**
   * @name SecurityLevel1::Current Methods
   *
   * These methods are founds in the SecurityLevel1::Current
   * interface.
   */
  //@{
  /// Return the security attributes corresponding to the types in the
  /// given attribute type list associated with the current request.
  virtual Security::AttributeList * get_attributes (
      const Security::AttributeTypeList & attributes
      ACE_ENV_ARG_DECL_WITH_DEFAULTS)
    ACE_THROW_SPEC ((CORBA::SystemException));
  //@}

  /**
   * @name SecurityLevel2::Current Methods
   *
   * These methods are founds in the SecurityLevel2::Current
   * interface.
   */
  //@{
  /// Return the Credentials received from the client associate with
  /// the current request.
  virtual SecurityLevel2::ReceivedCredentials_ptr received_credentials (
      ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
    ACE_THROW_SPEC ((CORBA::SystemException));
  //@}

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

protected:

  /// Destructor
  /// Protected to force allocation on the heap.
  ~TAO_Security_Current (void);

  /// Fully initialize this object.  This method is used predominantly
  /// to set the ORB core pointer.
  int init (void);

  /// Set the TSS Security::Current implementation.
  /**
   * The pointer is actually one to a concrete implementation provided
   * by the underlying security mechanism.  For example, SSLIOP
   * implements the SecurityLevel2::Current interface.  Similarly,
   * SECIOP would do the same.
   *
   * There is no function that places the implementation pointer in
   * TSS.  The underlying security mechanism does that.
   */
  TAO::Security::Current_Impl *implementation (void);

private:

  /// Prevent copying through the copy constructor and the assignment
  /// operator.
  //@{
  ACE_UNIMPLEMENTED_FUNC (
    TAO_Security_Current (const TAO_Security_Current &))
  ACE_UNIMPLEMENTED_FUNC (void operator= (const TAO_Security_Current &))
  //@}

private:

  /// TSS slot assigned to this object.
  size_t tss_slot_;

  /// The ORBid of the ORB with which this object is registered.
  CORBA::String_var orb_id_;

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

};

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

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

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

#endif  /* TAO_SECURITY_CURRENT_H */