Go to the documentation of this file.00001
00002
00003 #include "AMH_DSI_Response_Handler.h"
00004 #include "Request.h"
00005 #include "ExceptionList.h"
00006 #include "DII_Invocation.h"
00007 #include "Server_Request.h"
00008
00009 #include "tao/ORB_Core.h"
00010 #include "tao/GIOP_Utils.h"
00011 #include "tao/PortableServer/Root_POA.h"
00012 #include "tao/Valuetype/ValueFactory.h"
00013 #include "tao/Object.h"
00014 #include "tao/Pluggable_Messaging_Utils.h"
00015 #include "tao/AnyTypeCode/Any_Impl.h"
00016
00017 ACE_RCSID (DynamicInterface, AMH_DSI_Response_Handler,
00018 "$Id: AMH_DSI_Response_Handler.cpp 87936 2009-12-04 23:21:00Z dai_y $")
00019
00020 #if !defined (__ACE_INLINE__)
00021 # include "AMH_DSI_Response_Handler.inl"
00022 #endif
00023
00024 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00025
00026 const char*
00027 TAO_AMH_DSI_Exception_Holder::_tao_obv_static_repository_id ()
00028 {
00029 return "IDL:TAO_AMH_DSI_Exception_Holder:1.0";
00030 }
00031
00032 TAO_AMH_DSI_Exception_Holder::TAO_AMH_DSI_Exception_Holder (CORBA::Exception *ex)
00033 : exception_ (ex)
00034 {
00035 }
00036
00037 TAO_AMH_DSI_Exception_Holder::~TAO_AMH_DSI_Exception_Holder ()
00038 {
00039 }
00040
00041 void
00042 tao_TAO_AMH_DSI_Exception_Holder_add_ref (TAO_AMH_DSI_Exception_Holder * p)
00043 {
00044 CORBA::add_ref (p);
00045 }
00046
00047 void
00048 tao_TAO_AMH_DSI_Exception_Holder_remove_ref (TAO_AMH_DSI_Exception_Holder * p)
00049 {
00050 CORBA::remove_ref (p);
00051 }
00052
00053
00054 TAO_AMH_DSI_Exception_Holder_var::TAO_AMH_DSI_Exception_Holder_var (void)
00055 : ptr_ (0)
00056 {
00057 }
00058
00059 TAO_AMH_DSI_Exception_Holder_var::TAO_AMH_DSI_Exception_Holder_var (
00060 TAO_AMH_DSI_Exception_Holder * p)
00061 : ptr_ (p)
00062 {
00063 }
00064
00065 TAO_AMH_DSI_Exception_Holder_var::TAO_AMH_DSI_Exception_Holder_var (
00066 const TAO_AMH_DSI_Exception_Holder * p)
00067 : ptr_ (const_cast<TAO_AMH_DSI_Exception_Holder *> (p))
00068 {
00069 }
00070
00071 TAO_AMH_DSI_Exception_Holder *
00072 TAO_AMH_DSI_Exception_Holder_var::ptr (void) const
00073 {
00074 return this->ptr_;
00075 }
00076
00077 TAO_AMH_DSI_Exception_Holder_var::TAO_AMH_DSI_Exception_Holder_var (
00078 const TAO_AMH_DSI_Exception_Holder_var & p)
00079 {
00080 CORBA::add_ref (p.ptr ());
00081 this->ptr_ = p.ptr ();
00082 }
00083
00084 TAO_AMH_DSI_Exception_Holder_var::~TAO_AMH_DSI_Exception_Holder_var (void)
00085 {
00086 CORBA::remove_ref (this->ptr_);
00087 }
00088
00089 TAO_AMH_DSI_Exception_Holder_var &
00090 TAO_AMH_DSI_Exception_Holder_var::operator= (TAO_AMH_DSI_Exception_Holder *p)
00091 {
00092 CORBA::remove_ref (this->ptr_);
00093 this->ptr_ = p;
00094 return *this;
00095 }
00096
00097 TAO_AMH_DSI_Exception_Holder_var &
00098 TAO_AMH_DSI_Exception_Holder_var::operator= (
00099 const TAO_AMH_DSI_Exception_Holder_var & p)
00100 {
00101 if (this != &p)
00102 {
00103 CORBA::remove_ref (this->ptr_);
00104 TAO_AMH_DSI_Exception_Holder *tmp = p.ptr ();
00105 CORBA::add_ref (tmp);
00106 this->ptr_ = tmp;
00107 }
00108
00109 return *this;
00110 }
00111
00112 TAO_AMH_DSI_Exception_Holder_var::operator const TAO_AMH_DSI_Exception_Holder* (
00113 ) const
00114 {
00115 return this->ptr_;
00116 }
00117
00118 TAO_AMH_DSI_Exception_Holder_var::operator TAO_AMH_DSI_Exception_Holder*& ()
00119 {
00120 return this->ptr_;
00121 }
00122
00123 TAO_AMH_DSI_Exception_Holder *
00124 TAO_AMH_DSI_Exception_Holder_var::operator-> (void) const
00125 {
00126 return this->ptr_;
00127 }
00128
00129 TAO_AMH_DSI_Exception_Holder *
00130 TAO_AMH_DSI_Exception_Holder_var::in (void) const
00131 {
00132 return this->ptr_;
00133 }
00134
00135 TAO_AMH_DSI_Exception_Holder *&
00136 TAO_AMH_DSI_Exception_Holder_var::inout (void)
00137 {
00138 return this->ptr_;
00139 }
00140
00141 TAO_AMH_DSI_Exception_Holder *&
00142 TAO_AMH_DSI_Exception_Holder_var::out (void)
00143 {
00144 CORBA::remove_ref (this->ptr_);
00145 this->ptr_ = 0;
00146 return this->ptr_;
00147 }
00148
00149 TAO_AMH_DSI_Exception_Holder *
00150 TAO_AMH_DSI_Exception_Holder_var::_retn (void)
00151 {
00152
00153 TAO_AMH_DSI_Exception_Holder* tmp = this->ptr_;
00154 this->ptr_ = 0;
00155 return tmp;
00156 }
00157
00158 void
00159 TAO_AMH_DSI_Exception_Holder_var::tao_add_ref (TAO_AMH_DSI_Exception_Holder *p)
00160 {
00161 CORBA::add_ref (p);
00162 }
00163
00164 void
00165 TAO_AMH_DSI_Exception_Holder_var::tao_remove_ref (
00166 TAO_AMH_DSI_Exception_Holder *p)
00167 {
00168 CORBA::remove_ref (p);
00169 }
00170
00171 TAO_AMH_DSI_Exception_Holder_out::TAO_AMH_DSI_Exception_Holder_out (
00172 TAO_AMH_DSI_Exception_Holder * &p)
00173 : ptr_ (p)
00174 {
00175 this->ptr_ = 0;
00176 }
00177
00178 TAO_AMH_DSI_Exception_Holder_out::TAO_AMH_DSI_Exception_Holder_out (
00179 TAO_AMH_DSI_Exception_Holder_var & p)
00180 : ptr_ (p.out ())
00181 {
00182 CORBA::remove_ref (this->ptr_);
00183 this->ptr_ = 0;
00184 }
00185
00186 TAO_AMH_DSI_Exception_Holder_out::TAO_AMH_DSI_Exception_Holder_out (
00187 const TAO_AMH_DSI_Exception_Holder_out &p)
00188 : ptr_ (const_cast<TAO_AMH_DSI_Exception_Holder_out&> (p).ptr_)
00189 {}
00190
00191 TAO_AMH_DSI_Exception_Holder_out &
00192 TAO_AMH_DSI_Exception_Holder_out::operator= (
00193 const TAO_AMH_DSI_Exception_Holder_out &p)
00194 {
00195 this->ptr_ = const_cast<TAO_AMH_DSI_Exception_Holder_out &> (p).ptr_;
00196 return *this;
00197 }
00198
00199 TAO_AMH_DSI_Exception_Holder_out &
00200 TAO_AMH_DSI_Exception_Holder_out::operator= (
00201 const TAO_AMH_DSI_Exception_Holder_var &p)
00202 {
00203 TAO_AMH_DSI_Exception_Holder *tmp = p.ptr ();
00204 CORBA::add_ref (tmp);
00205 this->ptr_ = tmp;
00206 return *this;
00207 }
00208
00209 TAO_AMH_DSI_Exception_Holder_out &
00210 TAO_AMH_DSI_Exception_Holder_out::operator= (TAO_AMH_DSI_Exception_Holder *p)
00211 {
00212 this->ptr_ = p;
00213 return *this;
00214 }
00215
00216 TAO_AMH_DSI_Exception_Holder_out::operator TAO_AMH_DSI_Exception_Holder*& ()
00217 {
00218 return this->ptr_;
00219 }
00220
00221 TAO_AMH_DSI_Exception_Holder *&
00222 TAO_AMH_DSI_Exception_Holder_out::ptr (void)
00223 {
00224 return this->ptr_;
00225 }
00226
00227 TAO_AMH_DSI_Exception_Holder *
00228 TAO_AMH_DSI_Exception_Holder_out::operator-> (void)
00229 {
00230 return this->ptr_;
00231 }
00232
00233 TAO_AMH_DSI_Exception_Holder *
00234 TAO_AMH_DSI_Exception_Holder::_downcast (CORBA::ValueBase * v)
00235 {
00236 return dynamic_cast < TAO_AMH_DSI_Exception_Holder * >(v);
00237 }
00238
00239 const char *
00240 TAO_AMH_DSI_Exception_Holder::_tao_obv_repository_id (void) const
00241 {
00242 return this->_tao_obv_static_repository_id ();
00243 }
00244
00245 void
00246 TAO_AMH_DSI_Exception_Holder::_tao_any_destructor (void *_tao_void_pointer)
00247 {
00248 TAO_AMH_DSI_Exception_Holder *tmp =
00249 static_cast<TAO_AMH_DSI_Exception_Holder *> (_tao_void_pointer);
00250 delete tmp;
00251 }
00252
00253 CORBA::Boolean
00254 TAO_AMH_DSI_Exception_Holder::_tao_unmarshal (
00255 TAO_InputCDR &strm,
00256 TAO_AMH_DSI_Exception_Holder *&new_object)
00257 {
00258 ::CORBA::ValueBase *base = 0;
00259 ::CORBA::Boolean is_indirected = 0;
00260 ::CORBA::Boolean is_null_object = 0;
00261 ::CORBA::Boolean const retval =
00262 ::CORBA::ValueBase::_tao_unmarshal_pre (
00263 strm,
00264 base,
00265 TAO_AMH_DSI_Exception_Holder::_tao_obv_static_repository_id (),
00266 is_null_object,
00267 is_indirected
00268 );
00269
00270 ::CORBA::ValueBase_var owner (base);
00271
00272 if (!retval)
00273 return 0;
00274
00275 if (is_null_object)
00276 return 1;
00277
00278 if (!is_indirected && base != 0 && ! base->_tao_unmarshal_v (strm))
00279 return 0;
00280
00281
00282
00283
00284 new_object = TAO_AMH_DSI_Exception_Holder::_downcast (base);
00285 if (is_indirected)
00286 new_object->_add_ref ();
00287
00288 owner._retn ();
00289 return 1;
00290 }
00291
00292 void
00293 TAO_AMH_DSI_Exception_Holder::raise_invoke ()
00294 {
00295 this->exception_->_raise ();
00296 }
00297
00298
00299 TAO_AMH_DSI_Response_Handler_ptr
00300 TAO_AMH_DSI_Response_Handler::_nil (void)
00301 {
00302 return (TAO_AMH_DSI_Response_Handler_ptr) 0;
00303 }
00304
00305
00306 TAO_AMH_DSI_Response_Handler::TAO_AMH_DSI_Response_Handler (
00307 TAO_ServerRequest & sr)
00308 : TAO_AMH_Response_Handler (),
00309 orb_core_ (sr.orb_core ())
00310 {
00311 }
00312
00313 TAO_AMH_DSI_Response_Handler::~TAO_AMH_DSI_Response_Handler (void)
00314 {
00315 }
00316
00317 void
00318 TAO_AMH_DSI_Response_Handler::invoke_reply (CORBA::NVList_ptr args,
00319 CORBA::NamedValue_ptr result)
00320 {
00321 try
00322 {
00323 this->_tao_rh_init_reply ();
00324
00325
00326 if (result != 0 && result->value () != 0)
00327 {
00328 result->value ()->impl ()->marshal_value (this->_tao_out);
00329 }
00330
00331
00332 if (args != 0)
00333 {
00334 args->_tao_encode (this->_tao_out, CORBA::ARG_INOUT | CORBA::ARG_OUT);
00335 }
00336 this->_tao_rh_send_reply ();
00337 }
00338 catch (const CORBA::Exception &)
00339 {
00340
00341 }
00342 }
00343
00344 void
00345 TAO_AMH_DSI_Response_Handler::invoke_excep (TAO_AMH_DSI_Exception_Holder * h)
00346 {
00347 try
00348 {
00349 h->raise_invoke ();
00350 }
00351 catch (const CORBA::Exception & ex)
00352 {
00353 this->_tao_rh_send_exception (ex);
00354 }
00355 }
00356
00357 void
00358 TAO_AMH_DSI_Response_Handler::invoke_location_forward (CORBA::Object_ptr fwd,
00359 CORBA::Boolean is_perm)
00360 {
00361 this->_tao_rh_send_location_forward (fwd,is_perm);
00362 }
00363
00364 void
00365 TAO_AMH_DSI_Response_Handler::gateway_exception_reply (
00366 CORBA::ULong reply_status,
00367 TAO_OutputCDR & encap)
00368 {
00369
00370
00371 this->_tao_out.reset_byte_order (encap.byte_order ());
00372
00373 switch (reply_status)
00374 {
00375 case TAO_AMI_REPLY_USER_EXCEPTION:
00376 this->reply_status_ = GIOP::USER_EXCEPTION;
00377 break;
00378 case TAO_AMI_REPLY_SYSTEM_EXCEPTION:
00379 this->reply_status_ = GIOP::SYSTEM_EXCEPTION;
00380 break;
00381
00382
00383
00384
00385
00386
00387
00388 }
00389 try
00390 {
00391 this->_tao_rh_init_reply ();
00392
00393
00394
00395
00396 this->_tao_out.write_char_array (encap.buffer (), encap.length ());
00397
00398
00399 this->_tao_rh_send_reply ();
00400 }
00401 catch (const CORBA::Exception &)
00402 {
00403
00404 }
00405
00406 }
00407
00408 void
00409 TAO_AMH_DSI_Response_Handler::gateway_exception_reply (
00410 CORBA::ULong reply_status,
00411 TAO_InputCDR &encap)
00412 {
00413
00414
00415 this->_tao_out.reset_byte_order(encap.byte_order());
00416
00417 switch (reply_status)
00418 {
00419
00420 case TAO_AMI_REPLY_USER_EXCEPTION:
00421 this->reply_status_ = GIOP::USER_EXCEPTION;
00422 break;
00423 case TAO_AMI_REPLY_SYSTEM_EXCEPTION:
00424 this->reply_status_ = GIOP::SYSTEM_EXCEPTION;
00425 break;
00426
00427
00428
00429
00430
00431
00432
00433 }
00434 try
00435 {
00436 this->_tao_rh_init_reply ();
00437
00438
00439
00440
00441 this->_tao_out.write_octet_array_mb (encap.start());
00442
00443
00444 this->_tao_rh_send_reply ();
00445 }
00446 catch (const CORBA::Exception &)
00447 {
00448
00449 }
00450
00451 }
00452
00453 void *
00454 TAO_AMH_DSI_Response_Handler::_downcast (const char *)
00455 {
00456 return this;
00457 }
00458
00459 TAO_AMH_DSI_Response_Handler_ptr
00460 TAO_AMH_DSI_Response_Handler::_narrow (CORBA::Object_ptr obj)
00461 {
00462 return TAO_AMH_DSI_Response_Handler::_unchecked_narrow (obj);
00463 }
00464
00465 TAO_AMH_DSI_Response_Handler_ptr
00466 TAO_AMH_DSI_Response_Handler::_unchecked_narrow (CORBA::Object_ptr obj)
00467 {
00468 if (CORBA::is_nil (obj))
00469 return TAO_AMH_DSI_Response_Handler::_nil ();
00470
00471 return dynamic_cast < TAO_AMH_DSI_Response_Handler_ptr > (obj);
00472 }
00473
00474 const char*
00475 TAO_AMH_DSI_Response_Handler::_interface_repository_id (void) const
00476 {
00477 return 0;
00478 }
00479
00480 CORBA::TypeCode_ptr
00481 TAO_AMH_DSI_Exception_Holder::_tao_type (void) const
00482 {
00483 return 0;
00484 }
00485
00486 void
00487 TAO_AMH_DSI_Exception_Holder::_tao_obv_truncatable_repo_ids (
00488 Repository_Id_List &) const
00489 {
00490 }
00491
00492 CORBA::Boolean
00493 TAO_AMH_DSI_Exception_Holder::_tao_match_formal_type (ptrdiff_t ) const
00494 {
00495 return false;
00496 }
00497
00498 CORBA::Boolean
00499 TAO_AMH_DSI_Exception_Holder::_tao_marshal_v (TAO_OutputCDR &) const
00500 {
00501 return true;
00502 }
00503
00504 CORBA::Boolean
00505 TAO_AMH_DSI_Exception_Holder::_tao_unmarshal_v (TAO_InputCDR &)
00506 {
00507 return true;
00508 }
00509
00510 CORBA::Boolean
00511 TAO_AMH_DSI_Exception_Holder::_tao_marshal__Test_TAO_AMH_DSI_Exception_Holder (
00512 TAO_OutputCDR &)
00513 {
00514 return true;
00515 }
00516
00517 CORBA::Boolean
00518 TAO_AMH_DSI_Exception_Holder::_tao_unmarshal__Test_TAO_AMH_DSI_Exception_Holder (
00519 TAO_InputCDR &)
00520 {
00521 return true;
00522 }
00523
00524 TAO_END_VERSIONED_NAMESPACE_DECL