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

//=============================================================================
/**
 *  @file     SSLIOP_Connector.h
 *
 *  $Id$
 *
 *  SSLIOP specific connector processing
 *
 *  @author Carlos O'Ryan <coryan@uci.edu>
 *  @author Ossama Othman <ossama@uci.edu>
 */
//=============================================================================


#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 "ace/SSL/SSL_SOCK_Connector.h"
#include "IIOP_SSL_Connector.h"
#include "SSLIOP_Connection_Handler.h"

/// 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 TAO_SSLIOP_Export 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
                                      ACE_ENV_ARG_DECL);

      virtual TAO_Profile *create_profile (TAO_InputCDR& cdr);
      //@}

    protected:

      /**
       * @name More TAO_Connector methods
       *
       * Please check the documentation in Pluggable.h.
       */
      virtual TAO_Profile * make_profile (ACE_ENV_SINGLE_ARG_DECL);

      /// Cancel the passed cvs handler from the connector
      virtual int cancel_svc_handler (TAO_Connection_Handler * svc_handler);

      /// 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
                                   ACE_ENV_ARG_DECL);

      /// 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
                                     ACE_ENV_ARG_DECL);

      /// 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
                                                          ACE_ENV_ARG_DECL);

    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_;

      /// State that will be passed to each SSLIOP connection handler upon
      /// creation.
      Connection_Handler_State handler_state_;

    };

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

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

#endif  /* TAO_SSLIOP_CONNECTOR_H */