diff options
Diffstat (limited to 'TAO/tao/Messaging/ExceptionHolder_i.cpp')
-rw-r--r-- | TAO/tao/Messaging/ExceptionHolder_i.cpp | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/TAO/tao/Messaging/ExceptionHolder_i.cpp b/TAO/tao/Messaging/ExceptionHolder_i.cpp new file mode 100644 index 00000000000..76e4c7695b5 --- /dev/null +++ b/TAO/tao/Messaging/ExceptionHolder_i.cpp @@ -0,0 +1,95 @@ +// -*- C++ -*- +// $Id$ + +#include "tao/Messaging/ExceptionHolder_i.h" + +ACE_RCSID (Messaging, + ExceptionHolder_i, + "$Id$") + +#include "tao/Messaging/Messaging.h" + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +namespace TAO +{ + ExceptionHolder::ExceptionHolder (void) : + data_ (0), + count_ (0) + { + } + + ExceptionHolder::ExceptionHolder ( + ::CORBA::Boolean is_system_exception, + ::CORBA::Boolean byte_order, + const ::CORBA::OctetSeq &marshaled_exception, + ::TAO::Exception_Data* data, + ::CORBA::ULong exceptions_count) : + ::OBV_Messaging::ExceptionHolder (is_system_exception, byte_order, marshaled_exception), + data_ (data), + count_ (exceptions_count) + { + } + + ExceptionHolder::~ExceptionHolder () + { + } + + void + ExceptionHolder::set_exception_data (::TAO::Exception_Data* data, + ::CORBA::ULong exceptions_count) + { + this->data_ = data; + this->count_ = exceptions_count; + } + + void ExceptionHolder::raise_exception (void) + { + TAO_Messaging_Helper::exception_holder_raise ( + this->data_, + this->count_, + this->marshaled_exception ().get_buffer (), + this->marshaled_exception ().length (), + this->byte_order (), + this->is_system_exception ()); + } + + void ExceptionHolder::raise_exception_with_list ( + const ::Dynamic::ExceptionList &) + { + // todo convert exceptionlist to something we can really use. + this->raise_exception (); + } + + CORBA::ValueBase* + ExceptionHolder::_copy_value (void) + { + TAO::ExceptionHolder* ret_val = 0; + ACE_NEW_THROW_EX (ret_val, + ExceptionHolder, + CORBA::NO_MEMORY ()); + + // @todo According to the latest corba spec we should be able to + // pass this to the ExceptionHolder constructor but the TAO_IDL + // compiler doesn't seem to generate this. + ret_val->is_system_exception (this->is_system_exception ()); + ret_val->byte_order (this->byte_order ()); + ret_val->marshaled_exception (this->marshaled_exception ()); + + return ret_val; + } + + CORBA::ValueBase * + ExceptionHolderFactory::create_for_unmarshal (void) + { + TAO::ExceptionHolder* ret_val = 0; + ACE_NEW_THROW_EX (ret_val, + ExceptionHolder, + CORBA::NO_MEMORY ()); + return ret_val; + } + +} + +TAO_END_VERSIONED_NAMESPACE_DECL + |