/usr/include/tao/Invocation_Adapter.h is in libtao-dev 6.0.1-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 | // -*- C++ -*-
//=============================================================================
/**
* @file Invocation_Adapter.h
*
* $Id: Invocation_Adapter.h 92070 2010-09-28 12:15:24Z johnnyw $
*
* @author Balachandran Natarajan <bala@dre.vanderbilt.edu>
*/
//=============================================================================
#ifndef TAO_INVOCATION_ADAPTER_H
#define TAO_INVOCATION_ADAPTER_H
#include /**/ "ace/pre.h"
#include "ace/Global_Macros.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
#include /**/ "tao/TAO_Export.h"
#include "tao/Invocation_Utils.h"
#include "tao/Collocation_Strategy.h"
#include "tao/CORBA_methods.h"
#include "tao/Pseudo_VarOut_T.h"
ACE_BEGIN_VERSIONED_NAMESPACE_DECL
class ACE_Time_Value;
ACE_END_VERSIONED_NAMESPACE_DECL
TAO_BEGIN_VERSIONED_NAMESPACE_DECL
class TAO_Operation_Details;
class TAO_Stub;
namespace CORBA
{
class Object;
typedef Object *Object_ptr;
typedef TAO_Pseudo_Var_T<Object> Object_var;
}
namespace TAO
{
class Argument;
struct Exception_Data;
class Collocation_Proxy_Broker;
class Profile_Transport_Resolver;
/**
* @class Invocation_Adapter
*
* @brief Generic interface for the invocation object visible to the
* IDL compiler.
*
* The main objective of this class is to adapt the type and
* invocation specific information declared in the IDL by the
* application and convert them as CORBA invocations to the target
* object. Implementation of this class knows how to make
* invocations on a collocated or a remote object.
*
* This adapter class serves as the base class for various types of
* invocations like AMI, DII, DSI etc. Adapter classes for AMI, DII,
* DSI inherit from this class and their local behavioral
* information before kicking off an invocation.
*
* @@ More info..
* Wafer thin inclusions
* All stuff created on stack
* Only handles starts and restarts
*
*/
class TAO_Export Invocation_Adapter
{
public:
/// The only constructor used by the IDL compiler, and only way to
/// create this adapter.
/**
* @param target Points to the object on which this invocation is
* being invoked.
*
* @param args Array of pointers to the argument list in the
* operation declaration. This includes the return, inout and out
* arguments.
*
* @param arg_number Number of arguments in the above array. This
* is the number of elements in the above array.
*
* @param operation The name of the operation being invoked.
*
* @param op_len Number of characters in the operation name. This
* is an optimization which helps us to avoid calling strlen ()
* while creating a message format.
*
* @param cpb The collocation proxy broker for the target if one
* exists. This is useful especially to route the call to the
* collocated target.
*
* @param type The operation type which could be a oneway or two
* way operation. This information is available in the IDL file.
*
* @param mode Invocation mode. This information is also available
* in the IDL file and in the generated code.
*/
Invocation_Adapter (CORBA::Object_ptr target,
Argument **args,
int arg_number,
const char *operation,
size_t op_len,
Collocation_Proxy_Broker *cpb,
TAO::Invocation_Type type = TAO_TWOWAY_INVOCATION,
TAO::Invocation_Mode mode = TAO_SYNCHRONOUS_INVOCATION);
virtual ~Invocation_Adapter (void);
/// Invoke the target, and used by the generated code.
/**
* The implementation decides whether the target is remote or
* collocated and takes the right decision.
*
* @param ex Array of exception data declared by the application
* in their IDL.
*
* @param ex_count Number of elements in the array.
*/
virtual void invoke (TAO::Exception_Data *ex, unsigned long ex_count);
protected:
/**
* The stub pointer passed to this call has all the details about
* the object to which the invocation needs to be routed to. The
* implementation of this method looks if we are collocated or not
* and takes care of reinvoking the target if it receives
* forwarding information or if the first invocation fails
* for some reason, like a loss of connection during send () etc.
*/
virtual void invoke_i (TAO_Stub *stub, TAO_Operation_Details &details);
/**
* @name Helper methods for making different types of invocations.
*
* These methods useful for various types of invocations like
* SII, AMI, DII and DSI. All the subclasses implement these
* methods to get the right behavior at their level.
*/
//@{
/// Helper method that prepares the necessary stuff for a remote
/// invocation.
/*
* This method does the following essential activities needed for
* a remote invocation.
*
* - Extracts the roundtrip timeout policies set in the ORB or
* Object or at the thread level
* - Uses the target information to pick a profile and a transport
* object on which the invocation needs to be sent
*
* - Checks whether the operation is a oneway or twoway and
* delegates the call.
*/
virtual Invocation_Status invoke_remote_i (
TAO_Stub *stub,
TAO_Operation_Details &details,
CORBA::Object_var &effective_target,
ACE_Time_Value *&max_wait_time);
/// Make a collocated call.
/**
* This method creates an object that takes care of making collocated
* invocations and calls invoke () on it. If the invoke ()
* returns with a location forwarded reply we return a restart
*
* @param stub The stub object on which the invocation is made.
*
* @param details The operations details of the operation that is being
* invoked.
*/
virtual Invocation_Status invoke_collocated_i (
TAO_Stub *stub,
TAO_Operation_Details &details,
CORBA::Object_var &effective_target,
Collocation_Strategy strat);
/// Helper method to make a two way invocation.
/**
* This method creates a synchronous twoway invocation object to
* which the actual task of request handling is delegated. Once
* the invocation returns this method checks whether the request
* is forwarded to a new location.
*/
virtual Invocation_Status invoke_twoway (
TAO_Operation_Details &details,
CORBA::Object_var &effective_target,
Profile_Transport_Resolver &r,
ACE_Time_Value *&max_wait_time);
/// Helper method to make a one way invocation.
/**
* This method creates a synchronous oneway invocation object to
* which the actual task of request handling is delegated. Once
* the invocation returns this method checks whether the request
* is forwarded to a new location to take appropriate action.
*/
virtual Invocation_Status invoke_oneway (
TAO_Operation_Details &details,
CORBA::Object_var &effective_target,
Profile_Transport_Resolver &r,
ACE_Time_Value *&max_wait_time);
//@}
/// Helper function that extracts the roundtrip timeout policies
/// set in the ORB.
bool get_timeout (TAO_Stub *stub, ACE_Time_Value &val);
/// Helper method that extracts TAO_Stub from the target object.
TAO_Stub *get_stub (void) const;
/// Helper method that takes care of setting the profiles within
/// the stub object if the target gets forwarded
void object_forwarded (CORBA::Object_var &effective_target,
TAO_Stub *stub,
CORBA::Boolean permanent_forward);
/// Helper method to set the response flags within @a details
void set_response_flags (TAO_Stub *stub,
TAO_Operation_Details &details);
private:
/// Don't allow default initializations
Invocation_Adapter (void);
// Prevent copying
Invocation_Adapter (Invocation_Adapter const &);
Invocation_Adapter & operator= (const Invocation_Adapter &);
protected:
/// The target object on which this invocation is carried out.
CORBA::Object_ptr target_;
/// Array of arguments for this operation
Argument ** const args_;
/// Number of arguments for this operation.
/**
* This includes the return values too
*/
int const number_args_;
/// Name of the operation.
char const * operation_;
/// String length of the operation name.
size_t const op_len_;
/// Collocation proxy broker for this operation.
Collocation_Proxy_Broker * const cpb_;
/// The invocation type
Invocation_Type const type_;
/// The invocation mode
Invocation_Mode const mode_;
};
} // End namespace TAO
TAO_END_VERSIONED_NAMESPACE_DECL
#if defined (__ACE_INLINE__)
# include "tao/Invocation_Adapter.inl"
#endif /* __ACE_INLINE__ */
#include /**/ "ace/post.h"
#endif /*TAO_INVOCATION_ADAPTER_H*/
|