summaryrefslogtreecommitdiff
path: root/trunk/TAO/tao/Strategies/SHMIOP_Acceptor.h
blob: d48b2ec0326856652b88c6329fc5f249fdf19941 (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
// -*- C++ -*-
// $Id$

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

#ifndef TAO_SHMIOP_ACCEPTOR_H
#define TAO_SHMIOP_ACCEPTOR_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 "tao/Transport_Acceptor.h"
#include "tao/Strategies/SHMIOP_Connection_Handler.h"
#include "tao/Acceptor_Impl.h"
#include "ace/Acceptor.h"
#include "ace/MEM_Acceptor.h"
#include "tao/GIOP_Message_Version.h"
// TAO SHMIOP_Acceptor concrete call definitions

TAO_BEGIN_VERSIONED_NAMESPACE_DECL

/**
 * @class TAO_SHMIOP_Acceptor
 *
 * @brief The SHMIOP-specific bridge class for the concrete acceptor.
 *
 */
class TAO_Strategies_Export TAO_SHMIOP_Acceptor : public TAO_Acceptor
{
public:
  /// Constructor.
  TAO_SHMIOP_Acceptor (CORBA::Boolean flag = false);

  /// Destructor.
  ~TAO_SHMIOP_Acceptor (void);

  typedef ACE_Strategy_Acceptor<TAO_SHMIOP_Connection_Handler, ACE_MEM_ACCEPTOR> TAO_SHMIOP_BASE_ACCEPTOR;
  typedef TAO_Creation_Strategy<TAO_SHMIOP_Connection_Handler> TAO_SHMIOP_CREATION_STRATEGY;
  typedef TAO_Concurrency_Strategy<TAO_SHMIOP_Connection_Handler> TAO_SHMIOP_CONCURRENCY_STRATEGY;
  typedef TAO_Accept_Strategy<TAO_SHMIOP_Connection_Handler, ACE_MEM_ACCEPTOR> TAO_SHMIOP_ACCEPT_STRATEGY;

  /**
   * @name The TAO_Acceptor Methods
   *
   * Please check the documentation in Transport_Acceptor.h for details.
   */
  //@{
  virtual int open (TAO_ORB_Core *orb_core,
                    ACE_Reactor *reactor,
                    int version_major,
                    int version_minor,
                    const char *port,
                    const char *options = 0);
  virtual int open_default (TAO_ORB_Core *orb_core,
                            ACE_Reactor *reactor,
                            int version_major,
                            int version_minor,
                            const char *options = 0);
  virtual int close (void);
  virtual int create_profile (const TAO::ObjectKey &object_key,
                              TAO_MProfile &mprofile,
                              CORBA::Short priority);

  virtual int is_collocated (const TAO_Endpoint* endpoint);
  virtual CORBA::ULong endpoint_count (void);

  virtual int object_key (IOP::TaggedProfile &profile,
                          TAO::ObjectKey &key);
  //@}

  /// Set the MMAP options the MEM_Stream this acceptor creates will
  /// use.
  int set_mmap_options (const ACE_TCHAR *prefix,
                        ACE_OFF_T size);

private:
  /// Implement the common part of the open*() methods.
  int open_i (TAO_ORB_Core* orb_core,
              ACE_Reactor *reactor);

  /// Parse protocol specific options.
  virtual int parse_options (const char *options);

  /// Create a SHMIOP profile representing this acceptor.
  int create_new_profile (const TAO::ObjectKey &object_key,
                          TAO_MProfile &mprofile,
                          CORBA::Short priority);

  /// Add the endpoints on this acceptor to a shared profile.
  int create_shared_profile (const TAO::ObjectKey &object_key,
                             TAO_MProfile &mprofile,
                             CORBA::Short priority);

protected:
  /// Cache the information about the endpoint serviced by this
  /// acceptor.
  /// @todo There may in fact be multiple hostnames for this endpoint.
  ///    For example it the IP address is INADDR_ANY
  ///    (0.0.0.0) then there will be possibly a different hostname for
  ///    each interface.
  ACE_CString host_;

  /// A local endpoint.
  ACE_MEM_Addr address_;

  /// The GIOP version for this endpoint
  TAO_GIOP_Message_Version version_;

  /// ORB Core.
  TAO_ORB_Core *orb_core_;

private:
  /// The concrete acceptor, as a pointer to it's base class.
  TAO_SHMIOP_BASE_ACCEPTOR base_acceptor_;

  /// Acceptor strategies.
  TAO_SHMIOP_CREATION_STRATEGY *creation_strategy_;
  TAO_SHMIOP_CONCURRENCY_STRATEGY *concurrency_strategy_;
  TAO_SHMIOP_ACCEPT_STRATEGY *accept_strategy_;

  /// Determine the prefix (include path name) of the mmap file.
  const ACE_TCHAR *mmap_file_prefix_;

  /// Determine the minimum size of mmap file.  This dictate the
  /// maximum size of a CORBA method invocation.
  ACE_OFF_T mmap_size_;

  /// Should we use GIOP lite??
  CORBA::Boolean lite_flag_;
};

TAO_END_VERSIONED_NAMESPACE_DECL

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

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

#endif  /* TAO_SHMIOP_ACCEPTOR_H */