Public Member Functions | Private Attributes | Friends

TAO::DII_Invocation Class Reference

#include <DII_Invocation.h>

Inheritance diagram for TAO::DII_Invocation:
Inheritance graph
[legend]
Collaboration diagram for TAO::DII_Invocation:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 DII_Invocation (CORBA::Object_ptr otarget, Profile_Transport_Resolver &resolver, TAO_Operation_Details &detail, CORBA::ExceptionList *excp, CORBA::Request_ptr req, bool response_expected=true)
virtual Dynamic::ParameterList * arguments (void)
Invocation_Status remote_invocation (ACE_Time_Value *max_wait_time)
virtual Invocation_Status handle_user_exception (TAO_InputCDR &cdr)

Private Attributes

CORBA::ExceptionListexcp_list_
CORBA::Request_ptr host_
 Back pointer to the DII request that created us.

Friends

class DII_Invocation_Adapter

Detailed Description

Definition at line 43 of file DII_Invocation.h.


Constructor & Destructor Documentation

TAO::DII_Invocation::DII_Invocation ( CORBA::Object_ptr  otarget,
Profile_Transport_Resolver resolver,
TAO_Operation_Details detail,
CORBA::ExceptionList excp,
CORBA::Request_ptr  req,
bool  response_expected = true 
)

Definition at line 26 of file DII_Invocation.cpp.

               : DII_Invocation.cpp 84443 2009-02-12 20:26:35Z johnnyw $")

TAO_BEGIN_VERSIONED_NAMESPACE_DECL

namespace TAO
{
  DII_Invocation::DII_Invocation (CORBA::Object_ptr otarget,
                                  Profile_Transport_Resolver &resolver,
                                  TAO_Operation_Details &detail,
                                  CORBA::ExceptionList *excp,
                                  CORBA::Request_ptr req,


Member Function Documentation

Dynamic::ParameterList * TAO::DII_Invocation::arguments ( void   )  [virtual]

Definition at line 43 of file DII_Invocation.cpp.

  {
  }

#if TAO_HAS_INTERCEPTORS == 1
  Dynamic::ParameterList *
  DII_Invocation::arguments (void)
  {
    Dynamic::ParameterList_var safe_parameter_list;

    TAO::Argument ** const args = this->details_.args ();

    if (this->details_.args_num () > 1)
      {
        // Take the second argument since the first is a return value.
        TAO::NVList_Argument * const tmp_arg =
          dynamic_cast <TAO::NVList_Argument*> (args[1]);

        if (tmp_arg)
          {
            // Generate the argument list on demand.
            Dynamic::ParameterList * const parameter_list =
              TAO_RequestInfo_Util::make_parameter_list ();

Invocation_Status TAO::DII_Invocation::handle_user_exception ( TAO_InputCDR cdr  )  [virtual]

This method is selectively made virtual, so that inherited classes can overload the user exception handling type. For example the DII needs a totally different method of user exception exception handling

Reimplemented from TAO::Synch_Twoway_Invocation.

Definition at line 78 of file DII_Invocation.cpp.

  {
    return Synch_Twoway_Invocation::remote_twoway (max_wait_time);
  }

  Invocation_Status
  DII_Invocation::handle_user_exception (TAO_InputCDR &cdr)
  {
    Reply_Guard mon (this, TAO_INVOKE_FAILURE);

    if (TAO_debug_level > 3)
      {
        ACE_DEBUG ((LM_DEBUG,
                    "TAO (%P|%t) - DII_Invocation::"
                    "handle_user_exception\n"));
      }

    // Match the exception interface repository id with the
    // exception in the exception list.
    // This is important to decode the exception.
    CORBA::String_var buf;

    TAO_InputCDR tmp_stream (cdr,
                             cdr.start ()->length (),
                             0);

    // Pull the exception ID out of the marshaling buffer.
    if (tmp_stream.read_string (buf.inout ()) == 0)
      {
        throw ::CORBA::MARSHAL (TAO::VMCID, CORBA::COMPLETED_YES);
      }

    for (CORBA::ULong i = 0;
         this->excp_list_ != 0 && i < this->excp_list_->count ();
         i++)
      {
          CORBA::TypeCode_var tc = this->excp_list_->item (i);

          const char *xid = tc->id ();

          if (ACE_OS::strcmp (buf.in (), xid) != 0)
            {
              continue;
            }

          CORBA::Any any;
          TAO::Unknown_IDL_Type *unk = 0;
          ACE_NEW_RETURN (unk,
                          TAO::Unknown_IDL_Type (
                              tc.in (),
                              cdr
                            ),
                          TAO_INVOKE_FAILURE);

          any.replace (unk);

          mon.set_status (TAO_INVOKE_USER_EXCEPTION);

          throw ::CORBA::UnknownUserException (any);
        }

    // If we couldn't find the right exception, report it as
    // CORBA::UNKNOWN.

    // But first, save the user exception in case we
    // are being used in a TAO gateway.
    this->host_->raw_user_exception (cdr);

Invocation_Status TAO::DII_Invocation::remote_invocation ( ACE_Time_Value max_wait_time  ) 

Definition at line 72 of file DII_Invocation.cpp.


Friends And Related Function Documentation

friend class DII_Invocation_Adapter [friend]

Definition at line 47 of file DII_Invocation.h.


Member Data Documentation

CORBA::ExceptionList* TAO::DII_Invocation::excp_list_ [private]

Definition at line 65 of file DII_Invocation.h.

CORBA::Request_ptr TAO::DII_Invocation::host_ [private]

Back pointer to the DII request that created us.

Definition at line 68 of file DII_Invocation.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines