00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef TAO_OPERATION_DETAILS_H
00013 #define TAO_OPERATION_DETAILS_H
00014
00015 #include "ace/pre.h"
00016
00017 #include "tao/Service_Context.h"
00018
00019 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00020 # pragma once
00021 #endif
00022
00023 #include "tao/TimeBaseC.h"
00024 #include "tao/target_specification.h"
00025
00026 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00027
00028
00029 namespace Dynamic
00030 {
00031 class ParameterList;
00032 class ExceptionList;
00033 }
00034
00035 namespace TAO
00036 {
00037 class Argument;
00038 class Collocated_Arguments_Converter;
00039 struct Exception_Data;
00040 }
00041
00042 namespace TAO
00043 {
00044 namespace CSD
00045 {
00046 class FW_Server_Request_Wrapper;
00047 }
00048 }
00049
00050 class TAO_Reply_Dispatcher;
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064 class TAO_Export TAO_Operation_Details
00065 {
00066 public:
00067
00068
00069
00070
00071 friend class TAO::CSD::FW_Server_Request_Wrapper;
00072
00073
00074 TAO_Operation_Details (const char *name,
00075 CORBA::ULong len,
00076 TAO::Argument **args = 0,
00077 CORBA::ULong num_args = 0,
00078 TAO::Exception_Data *ex_data = 0,
00079 CORBA::ULong ex_count = 0);
00080
00081
00082 const char* opname (void) const;
00083
00084
00085 CORBA::ULong opname_len (void) const;
00086
00087
00088
00089 CORBA::Boolean argument_flag (void) const;
00090
00091
00092 void response_flags (CORBA::Octet flags);
00093
00094
00095 CORBA::Octet response_flags (void) const;
00096
00097
00098 IOP::ServiceContextList &request_service_info (void);
00099 const IOP::ServiceContextList &request_service_info (void) const;
00100 IOP::ServiceContextList &reply_service_info (void);
00101 const IOP::ServiceContextList &reply_service_info (void) const;
00102
00103
00104 TAO_Service_Context &request_service_context (void);
00105 const TAO_Service_Context &request_service_context (void) const;
00106 TAO_Service_Context &reply_service_context (void);
00107 const TAO_Service_Context &reply_service_context (void) const;
00108
00109
00110 void reset_request_service_info (void);
00111 void reset_reply_service_info (void);
00112
00113
00114 void request_id (CORBA::ULong id);
00115
00116
00117 CORBA::ULong request_id (void) const;
00118
00119
00120 TAO_Target_Specification::TAO_Target_Address addressing_mode (void) const;
00121
00122
00123 void addressing_mode (CORBA::Short addr);
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134 CORBA::Exception *corba_exception (const char *ex) const;
00135
00136
00137 bool has_exception (::CORBA::Exception& ex) const;
00138
00139
00140
00141
00142
00143
00144
00145 bool marshal_args (TAO_OutputCDR &cdr);
00146
00147
00148 bool demarshal_args (TAO_InputCDR &cdr);
00149
00150
00151 TAO::Argument ** args (void) const;
00152 CORBA::ULong args_num (void) const ;
00153
00154
00155 CORBA::ULong ex_count (void) const;
00156
00157 TAO::Exception_Data const * ex_data (void) const;
00158
00159 CORBA::Boolean use_stub_args (void) const;
00160 void use_stub_args (CORBA::Boolean use_stub_arguments);
00161
00162 #if TAO_HAS_INTERCEPTORS == 1
00163 void ft_expiration_time (TimeBase::TimeT time);
00164 TimeBase::TimeT ft_expiration_time (void) const;
00165
00166 void ft_retention_id (CORBA::Long request_id);
00167 CORBA::Long ft_retention_id (void) const;
00168 #endif
00169
00170
00171 TAO::Collocated_Arguments_Converter *cac (void) const;
00172 void cac (TAO::Collocated_Arguments_Converter *cac);
00173
00174 TAO_Reply_Dispatcher *reply_dispatcher (void) const;
00175 void reply_dispatcher (TAO_Reply_Dispatcher *rd);
00176
00177 private:
00178
00179
00180 const char *opname_;
00181
00182
00183 CORBA::ULong opname_len_;
00184
00185
00186 CORBA::ULong request_id_;
00187
00188
00189 CORBA::Octet response_flags_;
00190
00191
00192
00193 TAO_Service_Context request_service_info_;
00194
00195
00196
00197 TAO_Service_Context reply_service_info_;
00198
00199
00200 TAO_Target_Specification::TAO_Target_Address addressing_mode_;
00201
00202
00203
00204
00205
00206 TAO::Argument **args_;
00207
00208
00209 CORBA::ULong num_args_;
00210
00211
00212 TAO::Exception_Data *ex_data_;
00213
00214
00215 CORBA::ULong ex_count_;
00216
00217
00218
00219 CORBA::Boolean use_stub_args_;
00220
00221 #if TAO_HAS_INTERCEPTORS == 1
00222
00223 TimeBase::TimeT ft_expiration_time_;
00224
00225
00226 CORBA::Long ft_retention_id_;
00227 #endif
00228
00229
00230 TAO::Collocated_Arguments_Converter *cac_;
00231
00232
00233 TAO_Reply_Dispatcher *reply_dispatcher_;
00234 };
00235
00236 TAO_END_VERSIONED_NAMESPACE_DECL
00237
00238 #if defined (__ACE_INLINE__)
00239 # include "tao/operation_details.inl"
00240 #endif
00241
00242 #include "ace/post.h"
00243
00244 #endif