summaryrefslogtreecommitdiff
path: root/TAO/tao/Strategies/UIOP_Connector.h
blob: ba23060bd9d0502987fe207df1716d40e320cdb8 (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
// -*- C++ -*-

//=============================================================================
/**
 *  @file    UIOP_Connector.h
 *
 *  $Id$
 *
 *  UIOP specific connector processing
 *
 *
 *  @author Fred Kuhns <fredk@cs.wustl.edu>
 *  @author Ossama Othman <ossama@uci.edu>
 */
//=============================================================================


#ifndef TAO_UIOP_CONNECTOR_H
#define TAO_UIOP_CONNECTOR_H

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

#include "tao/orbconf.h"

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

# if TAO_HAS_UIOP == 1

#include "ace/LSOCK_Connector.h"
#include "ace/Connector.h"
#include "tao/Transport_Connector.h"
#include "UIOP_Connection_Handler.h"
#include "tao/Resource_Factory.h"
#include "tao/Connector_Impl.h"


class TAO_UIOP_Endpoint;
class TAO_Endpoint;

/**
 * @class TAO_UIOP_Connector
 *
 * @brief UIOP-specific Connector bridge for pluggable protocols.
 *
 */
class TAO_Strategies_Export TAO_UIOP_Connector : public TAO_Connector
{
public:

  /**
   * Constructor.
   * @@ Do we want to pass in the tag here or should it be statically
   * defined?
   */
  TAO_UIOP_Connector (CORBA::Boolean flag = 0);

  /// Destructor
  ~TAO_UIOP_Connector (void);

  /**
   * @name The TAO_Connector Methods
   *
   * Please check the documentation in Transport_Connector.h for details.
   */
  //@{
  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;

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

public:

  typedef TAO_Connect_Concurrency_Strategy<TAO_UIOP_Connection_Handler>
          TAO_UIOP_CONNECT_CONCURRENCY_STRATEGY;

  typedef TAO_Connect_Creation_Strategy<TAO_UIOP_Connection_Handler>
          TAO_UIOP_CONNECT_CREATION_STRATEGY;

  typedef ACE_Connect_Strategy<TAO_UIOP_Connection_Handler,
                               ACE_LSOCK_CONNECTOR>
          TAO_UIOP_CONNECT_STRATEGY ;

  typedef ACE_Strategy_Connector<TAO_UIOP_Connection_Handler,
                                 ACE_LSOCK_CONNECTOR>
          TAO_UIOP_BASE_CONNECTOR;

protected:

  /**
   * @name More TAO_Connector methods
   *
   * Please check the documentation in Transport_Connector.h.
   */
  //@{
  int set_validate_endpoint (TAO_Endpoint *endpoint);

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

  virtual TAO_Profile *make_profile (ACE_ENV_SINGLE_ARG_DECL);

  /// Obtains uiop properties that must be used by this connector, i.e.,
  /// initializes <uiop_properties_>.
  int init_uiop_properties (void);
  //@}

private:

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

private:

  /// Our connect strategy
  TAO_UIOP_CONNECT_STRATEGY connect_strategy_;

  /// The connector initiating connection requests for UIOP.
  TAO_UIOP_BASE_CONNECTOR base_connector_;

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

  /// UIOP configuration properties for all connections established by
  /// this connector.
  TAO_UIOP_Properties uiop_properties_;
};

# endif  /* TAO_HAS_UIOP == 1 */

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

#endif  /* TAO_UIOP_CONNECTOR_H */