summaryrefslogtreecommitdiff
path: root/TAO/tao/Acceptor_Registry.h
blob: 3f5937de903f95fc09c84d9347f95f14a44f2988 (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
// This may look like C, but it's really -*- C++ -*-
// $Id$

// ============================================================================
//
// = LIBRARY
//     TAO
//
// = FILENAME
//     Acceptor_Registry.h
//
// = DESCRIPTION
//     Interface for the TAO pluggable protocol framework.
//
// = AUTHOR
//     Fred Kuhns <fredk@cs.wustl.edu>
//     Ossama Othman <ossama@uci.edu>
//
// ============================================================================

#ifndef TAO_ACCEPTOR_REGISTRY_H
#define TAO_ACCEPTOR_REGISTRY_H
#include "ace/pre.h"

#include "tao/Pluggable.h"

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

#include "ace/SString.h"
#include "tao/corbafwd.h"
#include "tao/Resource_Factory.h"

// Forward declarations.
class ACE_Addr;
class ACE_Reactor;
class TAO_ORB_Core;
class TAO_POA;

class TAO_Stub;
class TAO_Profile;
class TAO_MProfile;


typedef TAO_Acceptor** TAO_AcceptorSetIterator;

class TAO_Export TAO_Acceptor_Registry
{
  // = TITLE
  //   Acceptor Registry and Generic Acceptor interface definitions.
  //   All loaded ESIOP or GIOP acceptor bridges must register with
  //   this object.
  //
  // = DESCRIPTION
  //   This class maintains a list os acceptor factories
  //   for all loaded ORB protocols.
  //   There is one Acceptor_Registry per ORB_Core.
public:
  // = Initialization and termination methods.
  TAO_Acceptor_Registry (void);
  //  Default constructor.

  ~TAO_Acceptor_Registry (void);
  //  Default destructor.

  int open (TAO_ORB_Core *orb_core,
            CORBA::Environment &ACE_TRY_ENV)
    ACE_THROW_SPEC ((CORBA::SystemException));
  // Initialize all registered acceptors.  Return -1 on error.

  int close_all (void);
  // Close all open acceptors.

  size_t endpoint_count (void);
  // Returns the total number of endpoints, i.e., the number of
  // profiles that have been created.

  int make_mprofile (const TAO_ObjectKey& object_key,
                     TAO_MProfile &mprofile,
                     TAO_POA *poa);
  // Add profiles to the <mprofile> object for all open endpoints.
  // <poa> parameter is passed because the POA may contain some
  // information affecting how/which profiles get created.
  // Currently, this information is the ServerProtocolPolicy in
  // RTCORBA.
  // @@ With forthcoming RTCORBA threadpool changes, this parameter
  // may become unnecessary if each acceptor registry is associated
  // with a poa.

  int is_collocated (const TAO_MProfile& mprofile);
  // Check if there is at least one profile in <mprofile> that
  // corresponds to a collocated object.

  TAO_Acceptor *get_acceptor (CORBA::ULong tag);
  // Return the acceptor bridges

  // = Iterator.
  TAO_AcceptorSetIterator begin (void);
  TAO_AcceptorSetIterator end (void);

private:

  int open_default (TAO_ORB_Core *orb_core,
                    const char *options);
  // Create a default acceptor for all loaded protocols.

  int open_default (TAO_ORB_Core *orb_core,
                    int major,
                    int minor,
                    TAO_ProtocolFactorySetItor &factory,
                    const char *options);
  // Create a default acceptor using the specified protocol factory.

  void extract_endpoint_options (ACE_CString &addrs,
                                 ACE_CString &options,
                                 TAO_Protocol_Factory *factory);
  // Extract endpoint-specific options from the endpoint string.

  void extract_endpoint_version (ACE_CString &address,
                                 int &major,
                                 int &minor);
  // Extract endpoint/address specific version from the endpoint
  // string.

  int open_i (TAO_ORB_Core *orb_core,
              ACE_CString &address,
              TAO_ProtocolFactorySetItor &factory,
              CORBA::Environment &ACE_TRY_ENV);
  // Iterator through addrs in the string <iop>, and create an
  // acceptor for each one.

private:
  // The acceptor registry should not be copied.
  ACE_UNIMPLEMENTED_FUNC (TAO_Acceptor_Registry (const TAO_Acceptor_Registry&))
  ACE_UNIMPLEMENTED_FUNC (void operator= (const TAO_Acceptor_Registry&))

private:
  TAO_Acceptor **acceptors_;
  // List of acceptors that are currently open.

  size_t size_;
  // Number of acceptors that are currently open.
};

#if defined(__ACE_INLINE__)
#include "tao/Acceptor_Registry.i"
#endif /* __ACE_INLINE__ */

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