summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Current.h
blob: 1921057cfc4ed79ca675fa7e107eb428ed357f67 (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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
// -*- C++ -*-

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

#ifndef TAO_SSLIOP_CURRENT_H
#define TAO_SSLIOP_CURRENT_H

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

#include "SSLIOP_Export.h"

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

#include "SSLIOP_Current_Impl.h"

#include "orbsvcs/SSLIOPC.h"
#include "tao/ORB_Core.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 */


namespace TAO
{
  namespace SSLIOP
  {
    class Current;
    typedef Current * Current_ptr;
    typedef TAO_Pseudo_Var_T<Current> Current_var;

    /**
     * @class Current
     *
     * @brief Implementation of the TAO SSLIOP::Current extension.
     *
     * This object can be used to obtain SSL session related
     * information about the current execution context.  For example,
     * SSL peer certificate chains for the current request can be
     * obtained from this object.
     */
    class TAO_SSLIOP_Export Current
      : public ::SSLIOP::Current,
        public TAO_Local_RefCounted_Object
    {
    public:

      /// Constructor.
      Current (TAO_ORB_Core *orb_core);

      /// Return the peer certificate associated with the current
      /// request.
      virtual ::SSLIOP::ASN_1_Cert * get_peer_certificate (
          ACE_ENV_SINGLE_ARG_DECL)
        ACE_THROW_SPEC ((CORBA::SystemException,
                         ::SSLIOP::Current::NoContext));

      /**
       * Return the certificate chain associated with the current
       * execution context.  If no SSL session is being used for the
       * request or upcall, then the NoContext exception is raised.
       * On the client side, the chain does include the peer (server)
       * certficate.  However, the certificate chain on the server
       * side does NOT contain the peer (client) certificate.
       */
      virtual ::SSLIOP::SSL_Cert * get_peer_certificate_chain (
          ACE_ENV_SINGLE_ARG_DECL)
        ACE_THROW_SPEC ((CORBA::SystemException,
                         ::SSLIOP::Current::NoContext));

      /**
       * This method is mostly useful as an inexpensive means of
       * determining whether or not SSL session state is available.
       *
       * @return @c true if the current execution context is not
       *         within a SSL session.
       */
      virtual CORBA::Boolean no_context (ACE_ENV_SINGLE_ARG_DECL)
        ACE_THROW_SPEC ((CORBA::SystemException));

      /// Set the TSS slot ID assigned to this object.
      void tss_slot (size_t slot);

      /// Setup the Current.
      void setup (Current_Impl *& prev_impl,
                  Current_Impl * new_impl,
                  bool &setup_done);

      /// Teardown the Current for this request.
      void teardown (Current_Impl *prev_impl,
                     bool &setup_done);

      /**
       * @name Downcast and Reference Counting Methods
       *
       * These are basically the same methods generated by the IDL
       * compiler for all IDL interfaces.
       */
      //@{
      // The static operations.
      static Current_ptr _duplicate (Current_ptr obj);

      static Current_ptr _narrow (CORBA::Object_ptr obj
                                  ACE_ENV_ARG_DECL);

      static Current_ptr _nil (void)
      {
        return (Current_ptr)0;
      }

      virtual const char* _interface_repository_id (void) const;
      //@}

    protected:

      /// Destructor
      ~Current (void);

      /// Set the TSS SSLIOP::Current implementation.
      int implementation (Current_Impl *impl);

      /// Return the TSS SSLIOP::Current implementation.
      Current_Impl *implementation (void);

    private:

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

        private:

      /// TSS slot assigned to this object.
      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 SSLIOP namespace.
}  // End TAO namespace.

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

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

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

#endif  /* TAO_SSLIOP_CURRENT_H */