summaryrefslogtreecommitdiff
path: root/TAO/tao/IIOP_Connector.h
blob: c1026010a0975352f7320913836d596c6de80eab (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    IIOP_Connector.h
 *
 *  $Id$
 *
 *  IIOP specific connector processing
 *
 *
 *  @author Fred Kuhns <fredk@cs.wustl.edu>
 *  @author Ossama Othman <ossama@uci.edu>
 *  @author Balachandran Natarajan <bala@cs.wustl.edu>
 */
//=============================================================================

#ifndef TAO_IIOP_CONNECTOR_H
#define TAO_IIOP_CONNECTOR_H

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

#include "tao/orbconf.h"

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

#if defined (TAO_HAS_IIOP) && (TAO_HAS_IIOP != 0)

#include "tao/Transport_Connector.h"
#include "tao/Connector_Impl.h"
#include "tao/IIOP_Connection_Handler.h"

#include "ace/SOCK_Connector.h"
#include "ace/Connector.h"

TAO_BEGIN_VERSIONED_NAMESPACE_DECL

class TAO_IIOP_Endpoint;

// ****************************************************************

/**
 * @class TAO_IIOP_Connector
 *
 * @brief IIOP-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_Registory.
 */
class TAO_Export TAO_IIOP_Connector : public TAO_Connector
{
public:
  // = Initialization and termination methods.
  /// Constructor.
  TAO_IIOP_Connector (CORBA::Boolean flag = 0);

  /// Destructor.
  ~TAO_IIOP_Connector (void);

  // = The TAO_Connector methods, please check the documentation on
  // Transport_Connector.h
  int open (TAO_ORB_Core *orb_core);
  int close (void);
  TAO_Profile *create_profile (TAO_InputCDR& cdr);

  virtual int check_prefix (const char *endpoint);

  virtual char object_key_delimiter (void) const;

public:

  //@@ TAO_CONNECTOR_SPL_PUBLIC_METHODS_COPY_HOOK_START

  typedef TAO_Connect_Concurrency_Strategy<TAO_IIOP_Connection_Handler>
          TAO_IIOP_CONNECT_CONCURRENCY_STRATEGY;

  typedef TAO_Connect_Creation_Strategy<TAO_IIOP_Connection_Handler>
          TAO_IIOP_CONNECT_CREATION_STRATEGY;

  typedef ACE_Connect_Strategy<TAO_IIOP_Connection_Handler,
                               ACE_SOCK_CONNECTOR>
          TAO_IIOP_CONNECT_STRATEGY ;

  typedef ACE_Strategy_Connector<TAO_IIOP_Connection_Handler,
                                 ACE_SOCK_CONNECTOR>
          TAO_IIOP_BASE_CONNECTOR;
  //@@ TAO_CONNECTOR_SPL_PUBLIC_METHODS_COPY_HOOK_END

protected:
  /// A flag indicating the actual connector supports parallel
  /// connection attempts. The base implementation always returns
  /// 0. Override to return non-zero if parallel connection attempts
  /// may be tried.
  virtual int supports_parallel_connects (void) const;

  // = The TAO_Connector methods, please check the documentation on
  // Transport_Connector.h
  int set_validate_endpoint (TAO_Endpoint *ep);

  virtual TAO_Transport *make_connection (
      TAO::Profile_Transport_Resolver *r,
      TAO_Transport_Descriptor_Interface &desc,
      ACE_Time_Value *timeout = 0);

  virtual TAO_Transport *make_parallel_connection (
      TAO::Profile_Transport_Resolver *r,
                                  TAO_Transport_Descriptor_Interface &desc,
                                  ACE_Time_Value *timeout = 0);

  /// More TAO_Connector methods, please check the documentation on
  /// Transport_Connector.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);

/*
 * Hook to copy over the protected and private data from this class to
 * base Connector class.
 */
//@@ TAO_CONNECTOR_SPL_COPY_HOOK_START

protected:

  /// Do we need to use a GIOP_Lite for sending messages?
  const bool lite_flag_;

private:
  /// This is the first half of making a connection. Both make_connection
  /// and make_parallel_connection will start out using begin_connection.
  int begin_connection (TAO_IIOP_Connection_Handler *&svc_handler,
                        TAO::Profile_Transport_Resolver *r,
                        TAO_IIOP_Endpoint *endpoint,
                        ACE_Time_Value *timeout = 0);

  /// This is the second half of making a connection when several endpoints
  /// are involved. This works with modified wait strategies to wait for one
  /// of many transports, and when once completes it will cancel the rest.
  /// The winning transport is returned.
  TAO_Transport *complete_connection (int result,
                                      TAO_IIOP_Connection_Handler **&sh_list,
                                      TAO_IIOP_Endpoint **ep_list,
                                      unsigned count,
                                      TAO::Profile_Transport_Resolver *r,
                                      TAO_LF_Multi_Event *mev,
                                      ACE_Time_Value *timeout = 0);



  /// Return the remote endpoint, a helper function
  TAO_IIOP_Endpoint *remote_endpoint (TAO_Endpoint *ep);

private:

  /// Our connect strategy
  TAO_IIOP_CONNECT_STRATEGY connect_strategy_;

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

//@@ TAO_CONNECTOR_SPL_COPY_HOOK_END

};

TAO_END_VERSIONED_NAMESPACE_DECL

#endif /* TAO_HAS_IIOP && TAO_HAS_IIOP != 0 */

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