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

//=============================================================================
/**
 *  @file    SHMIOP_Connector.h
 *
 *  $Id$
 *
 *  SHMIOP specific connector processing
 *
 *
 *  @author Nanbor Wang <nanbor@cs.wustl.edu>
 */
//=============================================================================


#ifndef TAO_SHMIOP_CONNECTOR_H
#define TAO_SHMIOP_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_SHMIOP) && (TAO_HAS_SHMIOP != 0)

#include "ace/MEM_Connector.h"
#include "ace/Connector.h"
#include "tao/Transport_Connector.h"
#include "SHMIOP_Connection_Handler.h"
#include "tao/Resource_Factory.h"
#include "tao/Connector_Impl.h"

class TAO_SHMIOP_Endpoint;

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

/**
 * @class TAO_SHMIOP_Connector
 *
 * @brief SHMIOP-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_Strategies_Export TAO_SHMIOP_Connector : public TAO_Connector
{
public:
  /// Constructor.
  TAO_SHMIOP_Connector (CORBA::Boolean flag = 0);

  /// Default destructor
  ~TAO_SHMIOP_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;
  //@}

public:

  typedef TAO_Connect_Concurrency_Strategy<TAO_SHMIOP_Connection_Handler>
          TAO_SHMIOP_CONNECT_CONCURRENCY_STRATEGY;

  typedef TAO_Connect_Creation_Strategy<TAO_SHMIOP_Connection_Handler>
          TAO_SHMIOP_CONNECT_CREATION_STRATEGY;

  typedef ACE_Connect_Strategy<TAO_SHMIOP_Connection_Handler,
                               ACE_MEM_CONNECTOR>
          TAO_SHMIOP_CONNECT_STRATEGY ;

  typedef ACE_Strategy_Connector<TAO_SHMIOP_Connection_Handler,
                                 ACE_MEM_CONNECTOR>
          TAO_SHMIOP_BASE_CONNECTOR;

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

private:

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

private:

  /// Local address.
  ACE_MEM_Addr address_;

  /// Our connect strategy.
  TAO_SHMIOP_CONNECT_STRATEGY connect_strategy_;

  /// The connector initiating connection requests for SHMIOP.
  TAO_SHMIOP_BASE_CONNECTOR base_connector_;

  /// Are we using GIOP lite?
  CORBA::Boolean lite_flag_;
};

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

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

#endif  /* TAO_SHMIOP_CONNECTOR_H */