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

//=============================================================================
/**
 *  @file    UIOP_Acceptor.h
 *
 *  $Id$
 *
 *  Unix Domain Socket (UIOP) specific acceptor processing
 *
 *  @author Fred Kuhns <fredk@cs.wustl.edu>
 *  @author Ossama Othman <ossama@dre.vanderbilt.edu>
 */
//=============================================================================


#ifndef TAO_UIOP_ACCEPTOR_H
#define TAO_UIOP_ACCEPTOR_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 "UIOP_Connection_Handler.h"

#include "tao/Transport_Acceptor.h"
#include "tao/Acceptor_Impl.h"
#include "tao/GIOP_Message_Version.h"

#include "ace/Acceptor.h"
#include "ace/LSOCK_Acceptor.h"

/**
 * @class TAO_UIOP_Acceptor
 *
 * @brief The UIOP-specific bridge class for the concrete acceptor.
 */
class TAO_Strategies_Export TAO_UIOP_Acceptor : public TAO_Acceptor
{
public:
  // TAO_UIOP_Acceptor (ACE_UNIX_Addr &addr);
  // Create Acceptor object using addr.

  /// Create Acceptor object using addr.
  TAO_UIOP_Acceptor (CORBA::Boolean flag = 0);

  /// Destructor
  virtual ~TAO_UIOP_Acceptor (void);

  typedef ACE_Strategy_Acceptor<TAO_UIOP_Connection_Handler, ACE_LSOCK_ACCEPTOR> TAO_UIOP_BASE_ACCEPTOR;
  typedef TAO_Creation_Strategy<TAO_UIOP_Connection_Handler> TAO_UIOP_CREATION_STRATEGY;
  typedef TAO_Concurrency_Strategy<TAO_UIOP_Connection_Handler> TAO_UIOP_CONCURRENCY_STRATEGY;
  typedef TAO_Accept_Strategy<TAO_UIOP_Connection_Handler, ACE_LSOCK_ACCEPTOR> TAO_UIOP_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 *address,
                    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);
  //@}

private:
  /// Implement the common part of the open*() methods
  int open_i (const char *rendezvous,
              ACE_Reactor *reactor);

  /// Set the rendezvous point and verify that it is
  /// valid (e.g. wasn't truncated because it was too long).
  void rendezvous_point (ACE_UNIX_Addr &, const char *rendezvous);

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

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

  /// Create a UIOP 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);

private:
  /// The concrete acceptor, as a pointer to its base class.
  TAO_UIOP_BASE_ACCEPTOR base_acceptor_;

  // Acceptor strategies.
  TAO_UIOP_CREATION_STRATEGY *creation_strategy_;
  TAO_UIOP_CONCURRENCY_STRATEGY *concurrency_strategy_;
  TAO_UIOP_ACCEPT_STRATEGY *accept_strategy_;

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

  /// ORB Core.
  TAO_ORB_Core *orb_core_;

  /// Flag that determines whether or not the rendezvous point should
  /// be unlinked on close.  This is really only used when an error
  /// occurs.
  bool unlink_on_close_;

  /// Should we use GIOP lite??
  const bool lite_flag_;

  /// Properties for all connections accepted by this acceptor.
  TAO_UIOP_Properties uiop_properties_;
};

# endif /* TAO_HAS_UIOP == 1 */

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

#endif  /* TAO_UIOP_ACCEPTOR_H */