summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/SSLIOP/SSLIOP_Connector.h
blob: 0666438f85cb76faf0ee5939dabf5f476e59d945 (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
// -*- C++ -*-

//=============================================================================
/**
 *  @file     SSLIOP_Connector.h
 *
 *  $Id$
 *
 *  SSLIOP specific connector processing
 *
 *  @author Carlos O'Ryan
 *  @author Ossama Othman
 */
//=============================================================================


#ifndef TAO_SSLIOP_CONNECTOR_H
#define TAO_SSLIOP_CONNECTOR_H

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

#include "ace/config-all.h"

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

#include "orbsvcs/SSLIOP/IIOP_SSL_Connector.h"
#include "orbsvcs/SSLIOP/SSLIOP_Connection_Handler.h"

#include "ace/SSL/SSL_SOCK_Connector.h"

TAO_BEGIN_VERSIONED_NAMESPACE_DECL

/// Forward declarations.
class TAO_Base_Transport_Property;

class TAO_SSLIOP_Endpoint;

namespace TAO
{
  namespace SSLIOP
  {
    class OwnCredentials;

    /**
     * @class Connector
     *
     * @brief SSLIOP-specific Connector bridge for pluggable protocols.
     *
     * Concrete instance of the TAO_Connector class.  Responsible
     * for establishing a connection with a server and is called from
     * the Connector_Registry.
     */
    class Connector : public TAO::IIOP_SSL_Connector
    {
    public:

      /// Constructor.
      Connector (::Security::QOP qop);

      /**
       * @name The TAO_Connector methods
       *
       * Please check the documentation in Transport_Connector.h
       */
      //@{
      virtual int open (TAO_ORB_Core *orb_core);
      virtual int close (void);
      virtual TAO_Transport *connect (TAO::Profile_Transport_Resolver *r,
                                      TAO_Transport_Descriptor_Interface *desc,
                                      ACE_Time_Value *timeout);

      virtual TAO_Profile *create_profile (TAO_InputCDR& cdr);
      virtual int check_prefix (const char *endpoint);
      virtual TAO_Profile * corbaloc_scan (const char *ior,
                                           size_t &len);

      //@}

    protected:

      /**
       * @name @c TAO_Connector Methods
       *
       * Methods required by the @c TAO_Connector base class.
       *
       * @see @c TAO_Connector
       */
      //@{
      virtual TAO_Profile * make_profile (void);
      virtual int cancel_svc_handler (TAO_Connection_Handler * svc_handler);
      //@}

      /// SSL-specific profile
      TAO_Profile * make_secure_profile (void);

      /// IIOP-specific connection establishment.
      /**
       * @note The IIOP endpoint is extracted from the SSLIOP endpoint.
       */
      TAO_Transport* iiop_connect (TAO_SSLIOP_Endpoint *ssliop_endpoint,
                                   TAO::Profile_Transport_Resolver *r,
                                   ACE_Time_Value *timeout);

      /// SSLIOP-specific connection establishment.
      TAO_Transport* ssliop_connect (TAO_SSLIOP_Endpoint *ssliop_endpoint,
                                     ::Security::QOP qop,
                                     const ::Security::EstablishTrust &trust,
                                     TAO::Profile_Transport_Resolver *r,
                                     TAO_Transport_Descriptor_Interface *desc,
                                     ACE_Time_Value *timeout);

      /// Retrieve SSLIOP credentials from the policy overrides list
      /// and set up the underlying SSL connection to use the X.509
      /// certificates stored within them.
      TAO::SSLIOP::OwnCredentials * retrieve_credentials (TAO_Stub *stub,
                                                          SSL *ssl);

    public:

      typedef TAO_Connect_Concurrency_Strategy<Connection_Handler>
          CONNECT_CONCURRENCY_STRATEGY;

      typedef TAO_Connect_Creation_Strategy<Connection_Handler>
          CONNECT_CREATION_STRATEGY;

      typedef ACE_Connect_Strategy<Connection_Handler,
                                   ACE_SSL_SOCK_CONNECTOR>
          CONNECT_STRATEGY;

      typedef ACE_Strategy_Connector<Connection_Handler,
                                     ACE_SSL_SOCK_CONNECTOR>
          BASE_CONNECTOR;

    private:

      /// If zero, connect to IIOP over SSL port by default.
      /// Otherwise, connect to the insecure IIOP port.
      ::Security::QOP qop_;

      /// Our connect strategy
      CONNECT_STRATEGY connect_strategy_;

      /// The connector initiating connection requests for IIOP.
      BASE_CONNECTOR base_connector_;

    };

  }  // End SSLIOP namespace.
}  // End TAO namespace.

TAO_END_VERSIONED_NAMESPACE_DECL

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

#endif  /* TAO_SSLIOP_CONNECTOR_H */