IOP::TaggedProfile * TAO_ClientRequestInfo::effective_profile (void) { 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 (); }
IOP::TaggedComponentSeq * TAO_ClientRequestInfo::get_effective_components (IOP::ComponentId id) { 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::TaggedComponent * TAO_ClientRequestInfo::get_effective_component (IOP::ComponentId id) { 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); }