Public Member Functions | Private Member Functions | Private Attributes

TAO_ClientRequestInfo Class Reference

Implementation of the PortableInterceptor::ClientRequestInfo interface. More...

#include <ClientRequestInfo.h>

Inheritance diagram for TAO_ClientRequestInfo:
Inheritance graph
[legend]
Collaboration diagram for TAO_ClientRequestInfo:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 TAO_ClientRequestInfo (TAO::Invocation_Base *invocation)
virtual CORBA::ULong request_id (void)
virtual char * operation (void)
 Return the operation name for the current request.
virtual Dynamic::ParameterList * arguments (void)
 Return the list of arguments passed to the current operation.
virtual Dynamic::ExceptionList * exceptions (void)
virtual Dynamic::ContextListcontexts (void)
virtual Dynamic::RequestContextoperation_context (void)
virtual CORBA::Anyresult (void)
virtual CORBA::Boolean response_expected (void)
 Returns true for a two-way operation, and false otherwise.
virtual Messaging::SyncScope sync_scope (void)
virtual
PortableInterceptor::ReplyStatus 
reply_status (void)
 Return the reply status for the current request.
virtual CORBA::Object_ptr forward_reference (void)
virtual CORBA::Anyget_slot (PortableInterceptor::SlotId id)
virtual IOP::ServiceContext * get_request_service_context (IOP::ServiceId id)
virtual IOP::ServiceContext * get_reply_service_context (IOP::ServiceId id)
virtual CORBA::Object_ptr target (void)
virtual CORBA::Object_ptr effective_target (void)
virtual IOP::TaggedProfile * effective_profile (void)
virtual CORBA::Anyreceived_exception (void)
virtual char * received_exception_id (void)
 Return the repository ID for the received exception.
virtual IOP::TaggedComponent * get_effective_component (IOP::ComponentId id)
virtual IOP::TaggedComponentSeq * get_effective_components (IOP::ComponentId id)
virtual CORBA::Policy_ptr get_request_policy (CORBA::PolicyType type)
virtual void add_request_service_context (const IOP::ServiceContext &service_context, CORBA::Boolean replace)
void tao_ft_expiration_time (TimeBase::TimeT time)
 Set the absolute FT expiration time for this request.
TimeBase::TimeT tao_ft_expiration_time (void) const
 Get the absolute FT expiration time for this request.
void tao_ft_retention_id (CORBA::Long request_id)
 Set the FT request retention ID for this request.
CORBA::Long tao_ft_retention_id (void) const
 Get the FT request retention ID for this request.

Private Member Functions

bool parameter_list (Dynamic::ParameterList &param_list)
bool exception_list (Dynamic::ExceptionList &exception_list)
bool result (CORBA::Any *any)
void check_validity (void)
void setup_picurrent (void)
IOP::ServiceContext * get_service_context_i (TAO_Service_Context &service_context_list, IOP::ServiceId id)
 Helper method to get the request and response service contexts.

Private Attributes

TAO::Invocation_Base * invocation_
 Pointer to the invocation object.
TAO::PICurrent_Impl rs_pi_current_

Detailed Description

Implementation of the PortableInterceptor::ClientRequestInfo interface.

Definition at line 71 of file ClientRequestInfo.h.


Constructor & Destructor Documentation

TAO_ClientRequestInfo::TAO_ClientRequestInfo ( TAO::Invocation_Base *  invocation  ) 

Definition at line 32 of file ClientRequestInfo.cpp.

  : invocation_ (inv),
    rs_pi_current_ ()
{
  this->setup_picurrent ();
}


Member Function Documentation

void TAO_ClientRequestInfo::add_request_service_context ( const IOP::ServiceContext &  service_context,
CORBA::Boolean  replace 
) [virtual]

Add the IOP::ServiceContext to the request (outgoing) IOP::ServiceContextList.

Definition at line 302 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  // Get the service context from the list
  TAO_Service_Context &service_context_list =
    this->invocation_->request_service_context ();

  if (service_context_list.set_context (service_context, replace) == 0)
    {
      throw ::CORBA::BAD_INV_ORDER (CORBA::OMGVMCID | 15, CORBA::COMPLETED_NO);
    }
}

Dynamic::ParameterList * TAO_ClientRequestInfo::arguments ( void   )  [virtual]

Return the list of arguments passed to the current operation.

Definition at line 411 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

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

  Dynamic::ParameterList_var safe_parameter_list = parameter_list;

  if (this->parameter_list (*parameter_list) == false)
    throw ::CORBA::MARSHAL ();

  return safe_parameter_list._retn ();
}

void TAO_ClientRequestInfo::check_validity ( void   )  [private]

Check if this ClientRequestInfo object is called within the context of a request.

Definition at line 616 of file ClientRequestInfo.cpp.

{
  if (this->invocation_ == 0)
    throw ::CORBA::BAD_INV_ORDER (CORBA::OMGVMCID | 14, CORBA::COMPLETED_NO);
}

Dynamic::ContextList * TAO_ClientRequestInfo::contexts ( void   )  [virtual]

Definition at line 491 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  throw ::CORBA::BAD_INV_ORDER (CORBA::OMGVMCID | 14, CORBA::COMPLETED_NO);
}

IOP::TaggedProfile * TAO_ClientRequestInfo::effective_profile ( void   )  [virtual]

Definition at line 100 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  IOP::TaggedProfile *tagged_profile = 0;
  ACE_NEW_THROW_EX (tagged_profile,
                    IOP::TaggedProfile,
                    CORBA::NO_MEMORY (
                      CORBA::SystemException::_tao_minor_code (
                        TAO::VMCID,
                        ENOMEM),
                      CORBA::COMPLETED_NO));

  IOP::TaggedProfile_var safe_tagged_profile = tagged_profile;

  TAO_Stub *stub =
    this->invocation_->effective_target ()->_stubobj ();

  IOP::TaggedProfile *ep =
    stub->profile_in_use ()->create_tagged_profile ();

  if (ep == 0)
    {
      throw ::CORBA::BAD_PARAM (CORBA::OMGVMCID | 28, CORBA::COMPLETED_NO);
    }

  // @@BAD_PARAM exception
  tagged_profile->tag = ep->tag;
  tagged_profile->profile_data = ep->profile_data;  // Deep copy

  return safe_tagged_profile._retn ();
}

CORBA::Object_ptr TAO_ClientRequestInfo::effective_target ( void   )  [virtual]

Return the object reference for the current target. The target may change in the even of a location forward.

Definition at line 92 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  return CORBA::Object::_duplicate (this->invocation_->effective_target ());
}

bool TAO_ClientRequestInfo::exception_list ( Dynamic::ExceptionList &  exception_list  )  [private]

Definition at line 469 of file ClientRequestInfo.cpp.

{
  if (this->invocation_->operation_details ().ex_count ())
    {
      exception_list.length (this->invocation_->operation_details ().ex_count ());

      for (CORBA::ULong i = 0;
           i != this->invocation_->operation_details ().ex_count ();
           ++i)
        {
          CORBA::TypeCode_ptr tcp =
            this->invocation_->operation_details ().ex_data ()[i].tc_ptr;
          if (!CORBA::is_nil (tcp))
            {
              exception_list[i] = tcp;
            }
        }
    }
  return true;
}

Dynamic::ExceptionList * TAO_ClientRequestInfo::exceptions ( void   )  [virtual]

Return the list of exceptions the current operation is capable of throwing.

Definition at line 453 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  Dynamic::ExceptionList *exception_list =
    TAO_RequestInfo_Util::make_exception_list ();

  Dynamic::ExceptionList_var safe_exception_list = exception_list;

  if (this->exception_list (*exception_list) == false)
    throw ::CORBA::MARSHAL ();

  return safe_exception_list._retn ();
}

CORBA::Object_ptr TAO_ClientRequestInfo::forward_reference ( void   )  [virtual]

If the reply status is PortableInterceptor::LOCATION_FORWARD or return the object reference to which the request was forwarded.

Definition at line 568 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  if (this->invocation_->pi_reply_status() != PortableInterceptor::LOCATION_FORWARD)
    {
      throw ::CORBA::BAD_INV_ORDER (CORBA::OMGVMCID | 14, CORBA::COMPLETED_NO);
    }

  // TAO::Invocation_Base::forward_reference() already duplicates the
  // reference before returning it so there is no need to duplicate it
  // here.
  return this->invocation_->forwarded_reference ();
}

IOP::TaggedComponent * TAO_ClientRequestInfo::get_effective_component ( IOP::ComponentId  id  )  [virtual]

Return the first IOP::TaggedComponent that matches the given IOP::ComponentId in the object reference for the current target.

Definition at line 188 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  TAO_Stub *stub = this->invocation_->effective_target ()->_stubobj ();

  TAO_Tagged_Components &ecs = stub->profile_in_use ()->tagged_components ();

  IOP::MultipleComponentProfile &components = ecs.components ();

  CORBA::ULong const len = components.length ();
  for (CORBA::ULong i = 0; i < len; ++i)
    {
      if (components[i].tag == id)
        {
          IOP::TaggedComponent *tagged_component = 0;

          // Only allocate a sequence if we have a tagged component
          // that matches the given IOP::ComponentId.
          ACE_NEW_THROW_EX (tagged_component,
                            IOP::TaggedComponent,
                            CORBA::NO_MEMORY (
                              CORBA::SystemException::_tao_minor_code (
                                TAO::VMCID,
                                ENOMEM),
                              CORBA::COMPLETED_NO));

          IOP::TaggedComponent_var safe_tagged_component =
            tagged_component;

          (*tagged_component) = components[i];  // Deep copy

          return safe_tagged_component._retn ();
        }
    }

  // No tagged component was found that matched the given
  // IOP::ComponentId.
  throw ::CORBA::BAD_PARAM (CORBA::OMGVMCID | 28, CORBA::COMPLETED_NO);
}

IOP::TaggedComponentSeq * TAO_ClientRequestInfo::get_effective_components ( IOP::ComponentId  id  )  [virtual]

Return all IOP::TaggedComponent(s) that match the given IOP::ComponentId in the object reference for the current target.

Definition at line 230 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  TAO_Stub *stub = this->invocation_->target ()->_stubobj ();

  TAO_Tagged_Components &ecs = stub->profile_in_use ()->tagged_components ();

  IOP::MultipleComponentProfile &components = ecs.components ();

  IOP::TaggedComponentSeq *tagged_components = 0;
  IOP::TaggedComponentSeq_var safe_tagged_components;

  const CORBA::ULong len = components.length ();
  for (CORBA::ULong i = 0; i < len; ++i)
    {
      if (components[i].tag == id)
        {
          if (tagged_components == 0)
            {
              // Only allocate a sequence if we have tagged components
              // to place into the sequence.
              ACE_NEW_THROW_EX (tagged_components,
                                IOP::TaggedComponentSeq,
                                CORBA::NO_MEMORY (
                                  CORBA::SystemException::_tao_minor_code (
                                    TAO::VMCID,
                                    ENOMEM),
                                  CORBA::COMPLETED_NO));

              safe_tagged_components = tagged_components;
            }

          const CORBA::ULong old_len = safe_tagged_components->length ();
          safe_tagged_components->length (old_len + 1);

          safe_tagged_components[old_len] = components[i];  // Deep copy
        }
    }

  if (tagged_components == 0)
    {
      // No tagged component sequence was allocated, meaning no tagged
      // components were found that matched the given
      // IOP::ComponentId.
      throw ::CORBA::BAD_PARAM (CORBA::OMGVMCID | 28, CORBA::COMPLETED_NO);
    }

  return safe_tagged_components._retn ();
}

IOP::ServiceContext * TAO_ClientRequestInfo::get_reply_service_context ( IOP::ServiceId  id  )  [virtual]

Return the IOP::ServiceContext with the given IOP::ServiceId from the reply service context list.

Definition at line 604 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  // Get the service context from the list
  TAO_Service_Context &service_context_list =
    this->invocation_->reply_service_context ();

  return this->get_service_context_i (service_context_list, id);
}

CORBA::Policy_ptr TAO_ClientRequestInfo::get_request_policy ( CORBA::PolicyType  type  )  [virtual]

Return the policy of the given type in effect for the current request.

Definition at line 282 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  // @@ Do we need to look anywhere else for the request policies?

#if TAO_HAS_CORBA_MESSAGING == 1
  return this->invocation_->target ()->_get_policy (type);
#else
  ACE_UNUSED_ARG (type);

  throw ::CORBA::NO_IMPLEMENT (
    CORBA::SystemException::_tao_minor_code (
      TAO::VMCID,
      ENOTSUP),
    CORBA::COMPLETED_NO);
#endif  /* TAO_HAS_CORBA_MESSAGING == 1 */
}

IOP::ServiceContext * TAO_ClientRequestInfo::get_request_service_context ( IOP::ServiceId  id  )  [virtual]

Return the IOP::ServiceContext with the given IOP::ServiceId from the request service context list.

Definition at line 592 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  // Get the service context from the list
  TAO_Service_Context &service_context_list =
    this->invocation_->request_service_context ();

  return this->get_service_context_i (service_context_list, id);
}

IOP::ServiceContext * TAO_ClientRequestInfo::get_service_context_i ( TAO_Service_Context service_context_list,
IOP::ServiceId  id 
) [private]

Helper method to get the request and response service contexts.

Definition at line 65 of file ClientRequestInfo.cpp.

{
  IOP::ServiceContext_var service_context;

  if (service_context_list.get_context (id, service_context.out ()) != 0)
    {
      // Found.
      return service_context._retn ();
    }
  else
    {
      // Not found.
      throw ::CORBA::BAD_PARAM (CORBA::OMGVMCID | 26, CORBA::COMPLETED_NO);
    }
}

CORBA::Any * TAO_ClientRequestInfo::get_slot ( PortableInterceptor::SlotId  id  )  [virtual]

Definition at line 584 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  return this->rs_pi_current_.get_slot (id);
}

char * TAO_ClientRequestInfo::operation ( void   )  [virtual]

Return the operation name for the current request.

Definition at line 403 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  return CORBA::string_dup (this->invocation_->operation_details ().opname  ());
}

Dynamic::RequestContext * TAO_ClientRequestInfo::operation_context ( void   )  [virtual]

Definition at line 499 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  throw ::CORBA::BAD_INV_ORDER (CORBA::OMGVMCID | 14, CORBA::COMPLETED_NO);
}

bool TAO_ClientRequestInfo::parameter_list ( Dynamic::ParameterList &  param_list  )  [private]

Definition at line 428 of file ClientRequestInfo.cpp.

{
  // Account for the return type that is in the argument list.
  param_list.length (this->invocation_->operation_details ().args_num () - 1);

  for (CORBA::ULong i = 1; i != this->invocation_->operation_details ().args_num (); ++i)
    {
      TAO::Argument *argument =
        this->invocation_->operation_details ().args ()[i];
      Dynamic::Parameter &p = param_list[i - 1];
      p.mode = argument->mode ();
      // When we are in send_request and have an out argument, then
      // don't copy it, just let the any be empty with typecode tk_null
      if ((this->invocation_->invoke_status () != TAO::TAO_INVOKE_START) ||
          (this->invocation_->invoke_status () == TAO::TAO_INVOKE_START &&
           argument->mode () != CORBA::PARAM_OUT))
        {
          argument->interceptor_value (&p.argument);
        }
    }

  return true;
}

CORBA::Any * TAO_ClientRequestInfo::received_exception ( void   )  [virtual]

Return an Any containing the received exception, if any. Otherwise, throw a CORBA::BAD_INV_ORDER exception.

Note:
There is no trivial way to extract the exception from an Any.

Definition at line 137 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  if (this->invocation_->pi_reply_status () != PortableInterceptor::SYSTEM_EXCEPTION
      && this->invocation_->pi_reply_status () != PortableInterceptor::USER_EXCEPTION)
    {
      throw ::CORBA::BAD_INV_ORDER (CORBA::OMGVMCID | 14, CORBA::COMPLETED_NO);
    }

  // The spec says that if it is a user exception which can't be
  // inserted then the UNKNOWN exception needs to be thrown with minor
  // code 1.

  CORBA::Any * temp = 0;

  ACE_NEW_THROW_EX (temp,
                    CORBA::Any,
                    CORBA::NO_MEMORY (
                      CORBA::SystemException::_tao_minor_code (
                        TAO::VMCID,
                        ENOMEM),
                      CORBA::COMPLETED_NO));

  CORBA::Any_var caught_exception_var = temp;

  CORBA::Exception *caught_exception =
    invocation_->caught_exception ();

  if (caught_exception != 0)
    *temp <<= *(caught_exception);

  return caught_exception_var._retn ();
}

char * TAO_ClientRequestInfo::received_exception_id ( void   )  [virtual]

Return the repository ID for the received exception.

Definition at line 173 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  CORBA::Exception *caught_exception = invocation_->caught_exception ();

  if (caught_exception == 0)
    {
      throw ::CORBA::BAD_INV_ORDER (CORBA::OMGVMCID | 14, CORBA::COMPLETED_NO);
    }

  return CORBA::string_dup (caught_exception->_rep_id ());
}

PortableInterceptor::ReplyStatus TAO_ClientRequestInfo::reply_status ( void   )  [virtual]

Return the reply status for the current request.

Statuses can be PortableInterceptor::SUCCESSFUL, SYSTEM_EXCEPTION, USER_EXCEPTION, LOCATION_FORWARD, TRANSPORT_RETRY, UNKNOWN.

Definition at line 552 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  PortableInterceptor::ReplyStatus const status =
    this->invocation_->pi_reply_status();
  if (status == -1 || status == PortableInterceptor::UNKNOWN)
    {
      // A reply hasn't been received yet.
      throw ::CORBA::BAD_INV_ORDER (CORBA::OMGVMCID | 14, CORBA::COMPLETED_NO);
    }

  return status;
}

CORBA::ULong TAO_ClientRequestInfo::request_id ( void   )  [virtual]

Return an ID unique to the current request. This request ID may or may not be the same as the GIOP request ID.

Definition at line 319 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  // @todo We may have to worry about AMI once we support interceptors
  //       in AMI requests since the Invocation object no longer
  //       exists once an AMI request has been made.  In that case,
  //       the reply dispatcher address should be used.

  // The request ID must be unique across all outstanding requests.
  // To avoid synchronization overhead, the address of this Invocation
  // object is used as the request ID.  This guarantees that the
  // request ID is unique without being forced to acquire a lock.
  //
  // For 64-bit platforms, we right shift 8 bits and then use the
  // lower 32 bits of that shifted value.  Rather than losing the
  // upper 32 bits of significant digits by taking the lower 32 bits,
  // we only lose the upper 24 by doing the shift.  Basically, the
  // resulting request ID will comprised of bits 8 through 39.  This is
  // made possible by the fact that this Invocation object is large
  // enough to increase the likelihood that those bits (0 through 39)
  // are unique.  In particular, this->buffer_ is 512 bytes
  // (ACE_CDR::DEFAULT_BUFSIZE) long by default; implying that
  // dropping the lower 8 bits of the this Invocation object's 64 bit
  // address (i.e. 256 bytes) is not a problem.

  CORBA::ULong id = 0;

  // Note that we reinterpret_cast to an "unsigned long" instead of
  // CORBA::ULong since we need to first cast to an integer large
  // enough to hold an address to avoid compile-time warnings on some
  // 64-bit platforms.

  // 32 bit address
  if (sizeof (this) == 4)
    id =
      static_cast<CORBA::ULong> (
        reinterpret_cast<ptrdiff_t> (this->invocation_));

  // 64 bit address -- bits 8 through 39  (see notes above!)
  // In this case, we make sure this object is large enough to safely
  // do the right shift.  This is necessary since the size of the
  // buffer that makes this object is configurable.
  else if (sizeof (this) == 8
           && sizeof (*(this->invocation_)) > 256 /* 2 << 8 */)
    id =
      (static_cast<CORBA::ULong> (
         reinterpret_cast<ptrdiff_t> (this->invocation_)) >> 8) & 0xFFFFFFFFu;

  // 64 bit address -- lower 32 bits
  else if (sizeof (this) == 8)
    id =
      static_cast<CORBA::ULong> (
        reinterpret_cast<ptrdiff_t> (this->invocation_)) & 0xFFFFFFFFu;

  // @@ The following request ID generator prevents the
  //    PortableInterceptor::ClientRequestInterceptor::send_request()
  //    interception point from occuring before the call to connect,
  //    thus preventing us from adding an optimization that itself
  //    prevents a connection from being unnecessarily performed.
  //    Thus, the ClientRequestInfo object is forced to have its own
  //    request ID generator in order to make it possible to implement
  //    the above optimization.
  //
  //    Ideally, this request ID generator should go away, especially
  //    since it adds a lock to the critical path.
  //   else    // Fallback
  //     id = this->invocation_->request_id ();

  else
    {
      if (TAO_debug_level > 0)
        ACE_ERROR ((LM_ERROR,
                    "(%P|%t) ClientRequestInfo::request_id() failed\n"
                    "(%P|%t) since its request ID generator is not\n"
                    "(%P|%t) supported on this platform.\n"));

      throw ::CORBA::INTERNAL ();
    }

  return id;
}

CORBA::Boolean TAO_ClientRequestInfo::response_expected ( void   )  [virtual]

Returns true for a two-way operation, and false otherwise.

Definition at line 536 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  return this->invocation_->response_expected ();
}

CORBA::Any * TAO_ClientRequestInfo::result ( void   )  [virtual]

Return the result of the current request. If there is no return value then an Any with tk_void TypeCode is returned. This is method is not valid for oneway operations.

Definition at line 507 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  // Generate the result on demand.
  static const CORBA::Boolean tk_void_any = 0;
  CORBA::Any *result_any =
    TAO_RequestInfo_Util::make_any (tk_void_any);

  CORBA::Any_var safe_result_any = result_any;

  if (this->result (result_any) == false)
    throw ::CORBA::MARSHAL ();

  return safe_result_any._retn ();
}

bool TAO_ClientRequestInfo::result ( CORBA::Any any  )  [private]

Definition at line 525 of file ClientRequestInfo.cpp.

{
  // Result is always first element in TAO::Argument array.
  TAO::Argument * const r = this->invocation_->operation_details ().args ()[0];

  r->interceptor_value (any);

  return true;
}

void TAO_ClientRequestInfo::setup_picurrent ( void   )  [private]

Setup thread scope and request scope PortableInterceptor::Current objects.

Definition at line 40 of file ClientRequestInfo.cpp.

{
  // Retrieve the thread scope current (no TSS access incurred yet).
  CORBA::Object_ptr pi_current_obj =
    this->invocation_->stub ()->orb_core ()->pi_current ();

  TAO::PICurrent *pi_current =
    dynamic_cast <TAO::PICurrent*> (pi_current_obj);

  // If the slot count is zero, then there is nothing to copy.
  // Prevent any copying (and hence TSS accesses) from occurring.
  if (pi_current != 0 && pi_current->slot_count () != 0)
    {
      // Retrieve the thread scope current.
      TAO::PICurrent_Impl *tsc = pi_current->tsc ();

      if (tsc != 0)
        {
          // Logically copy the TSC's slot table to the RSC.
          this->rs_pi_current_.take_lazy_copy (tsc);
       }
    }
}

Messaging::SyncScope TAO_ClientRequestInfo::sync_scope ( void   )  [virtual]

Return the sync_scope policy value for the current one-way operation. If the operation is not a one-way, a CORBA::BAD_INV_ORDER exception is thrown.

Definition at line 544 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  return this->invocation_->operation_details ().response_flags ();
}

void TAO_ClientRequestInfo::tao_ft_expiration_time ( TimeBase::TimeT  time  ) 

Set the absolute FT expiration time for this request.

Definition at line 623 of file ClientRequestInfo.cpp.

{
  this->invocation_->operation_details ().ft_expiration_time (time);
}

TimeBase::TimeT TAO_ClientRequestInfo::tao_ft_expiration_time ( void   )  const

Get the absolute FT expiration time for this request.

Definition at line 629 of file ClientRequestInfo.cpp.

{
  return this->invocation_->operation_details ().ft_expiration_time ();
}

CORBA::Long TAO_ClientRequestInfo::tao_ft_retention_id ( void   )  const

Get the FT request retention ID for this request.

Definition at line 641 of file ClientRequestInfo.cpp.

{
  return this->invocation_->operation_details ().ft_retention_id ();
}

void TAO_ClientRequestInfo::tao_ft_retention_id ( CORBA::Long  request_id  ) 

Set the FT request retention ID for this request.

Definition at line 635 of file ClientRequestInfo.cpp.

{
  this->invocation_->operation_details ().ft_retention_id (request_id) ;
}

CORBA::Object_ptr TAO_ClientRequestInfo::target ( void   )  [virtual]

Return the (initial, non-forwarded, or permanently forwarded) object reference of the target.

Definition at line 84 of file ClientRequestInfo.cpp.

{
  this->check_validity ();

  return CORBA::Object::_duplicate (this->invocation_->target ());
}


Member Data Documentation

TAO::Invocation_Base* TAO_ClientRequestInfo::invocation_ [private]

Pointer to the invocation object.

Definition at line 216 of file ClientRequestInfo.h.

TAO::PICurrent_Impl TAO_ClientRequestInfo::rs_pi_current_ [private]

The "Request Scope Current" (RSC) object, as required by Portable Interceptors.

Definition at line 220 of file ClientRequestInfo.h.


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