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
|
// This may look like C, but it's really -*- C++ -*-
// $Id$
// ============================================================================
//
// = LIBRARY
// TAO
//
// = FILENAME
// UIOP_Acceptor.h
//
// = DESCRIPTION
// Unix Domain Socket (UIOP) specific acceptor processing
//
// = AUTHOR
// Fred Kuhns <fredk@cs.wustl.edu>
// Ossama Othman <othman@cs.wustl.edu>
//
// ============================================================================
#ifndef TAO_UIOP_ACCEPTOR_H
#define TAO_UIOP_ACCEPTOR_H
#include "ace/pre.h"
#include "tao/Pluggable.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
# if TAO_HAS_UIOP == 1
#include "ace/Acceptor.h"
#include "ace/LSOCK_Acceptor.h"
#include "tao/UIOP_Connect.h"
#include "tao/Acceptor_Impl.h"
// TAO UIOP_Acceptor concrete call defination
class TAO_Export TAO_UIOP_Acceptor : public TAO_Acceptor
{
// = TITLE
// The UIOP-specific bridge class for the concrete acceptor.
//
// = DESCRIPTION
//
public:
// TAO_UIOP_Acceptor (ACE_UNIX_Addr &addr);
// Create Acceptor object using addr.
TAO_UIOP_Acceptor (CORBA::Boolean flag = 0);
// Create Acceptor object using addr.
virtual ~TAO_UIOP_Acceptor (void);
// Destructor
typedef ACE_Strategy_Acceptor<TAO_UIOP_Server_Connection_Handler, ACE_LSOCK_ACCEPTOR> TAO_UIOP_BASE_ACCEPTOR;
typedef TAO_Creation_Strategy<TAO_UIOP_Server_Connection_Handler> TAO_UIOP_CREATION_STRATEGY;
typedef TAO_Concurrency_Strategy<TAO_UIOP_Server_Connection_Handler> TAO_UIOP_CONCURRENCY_STRATEGY;
typedef TAO_Accept_Strategy<TAO_UIOP_Server_Connection_Handler, ACE_LSOCK_ACCEPTOR> TAO_UIOP_ACCEPT_STRATEGY;
// = The TAO_Acceptor methods, check the documentation in
// Pluggable.h for details.
virtual int open (TAO_ORB_Core *orb_core,
int version_major,
int version_minor,
const char *address,
const char *options = 0);
virtual int open_default (TAO_ORB_Core *orb_core,
int version_major,
int version_minor,
const char *options = 0);
virtual int close (void);
virtual int create_mprofile (const TAO_ObjectKey &object_key,
TAO_MProfile &mprofile);
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:
int open_i (const char *rendezvous);
// Implement the common part of the open*() methods
void rendezvous_point (ACE_UNIX_Addr &, const char *rendezvous);
// Set the rendezvous point and verify that it is
// valid (e.g. wasn't truncated because it was too long).
int parse_options (const char *options);
// Parse protocol specific options.
int init_uiop_properties (void);
// Obtains uiop properties that must be used by this acceptor, i.e.,
// initializes <uiop_properties_>.
int create_rt_mprofile (const TAO_ObjectKey &object_key,
TAO_MProfile &mprofile);
// Rather than creating a separate profile for each endpoint, this
// version of <create_mprofile> method adds all endpoints to a
// single UIOP profile, i.e., <mprofile> will not contain more than
// one UIOP_Profile, no matter how many acceptors there are.
int create_profile (const TAO_ObjectKey &object_key,
TAO_MProfile &mprofile);
// Create a UIOP profile representing this acceptor. This method
// factors out common functionality of <create_mprofile> and
// <create_rt_mprofile>.
private:
TAO_UIOP_BASE_ACCEPTOR base_acceptor_;
// the concrete acceptor, as a pointer to its base class.
TAO_UIOP_CREATION_STRATEGY *creation_strategy_;
TAO_UIOP_CONCURRENCY_STRATEGY *concurrency_strategy_;
TAO_UIOP_ACCEPT_STRATEGY *accept_strategy_;
// Acceptor strategies.
TAO_GIOP_Version version_;
// The GIOP version for this endpoint
TAO_ORB_Core *orb_core_;
// ORB Core.
int unlink_on_close_;
// Flag that determines whether or not the rendezvous point should
// be unlinked on close. This is really only used when an error
// occurs.
CORBA::Boolean lite_flag_;
// Should we use GIOP lite??
TAO_UIOP_Properties uiop_properties_;
// Properties for all connections accepted by this acceptor.
};
# endif /* TAO_HAS_UIOP == 1 */
#include "ace/post.h"
#endif /* TAO_UIOP_ACCEPTOR_H */
|