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