diff options
author | bala <balanatarajan@users.noreply.github.com> | 2003-08-28 15:37:30 +0000 |
---|---|---|
committer | bala <balanatarajan@users.noreply.github.com> | 2003-08-28 15:37:30 +0000 |
commit | c9714eb80fb88c79ab8a3ac89f45cd644be9b6ba (patch) | |
tree | 274cc94d43d0002398cb54ea9369e306e2007ce4 | |
parent | 5c70a04b17e19fdca8872a5753b04c506293932f (diff) | |
download | ATCD-c9714eb80fb88c79ab8a3ac89f45cd644be9b6ba.tar.gz |
ChangeLogTag:Thu Aug 28 10:19:58 2003 Balachandran Natarajan <bala@dre.vanderbilt.edu>
-rw-r--r-- | TAO/ChangeLog_ref | 45 | ||||
-rw-r--r-- | TAO/tao/Invocation_Endpoint_Selectors.cpp | 4 | ||||
-rw-r--r-- | TAO/tao/Profile_Transport_Resolver.cpp | 28 | ||||
-rw-r--r-- | TAO/tao/Profile_Transport_Resolver.h | 32 | ||||
-rw-r--r-- | TAO/tao/Profile_Transport_Resolver.inl | 6 | ||||
-rw-r--r-- | TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.cpp | 6 | ||||
-rw-r--r-- | TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.h | 8 | ||||
-rw-r--r-- | TAO/tao/RTCORBA/RT_Endpoint_Utils.cpp | 85 | ||||
-rw-r--r-- | TAO/tao/RTCORBA/RT_Endpoint_Utils.h | 11 | ||||
-rw-r--r-- | TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.cpp | 352 | ||||
-rw-r--r-- | TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.h | 15 | ||||
-rw-r--r-- | TAO/tao/RTPortableServer/RTPortableServerC.h | 63 | ||||
-rw-r--r-- | TAO/tao/RTScheduling/RTSchedulerC.h | 463 | ||||
-rw-r--r-- | TAO/tao/Remote_Invocation.cpp | 16 | ||||
-rw-r--r-- | TAO/tao/Synch_Invocation.cpp | 2 | ||||
-rw-r--r-- | TAO/tao/TODO | 3 | ||||
-rw-r--r-- | TAO/tao/Transport_Connector.cpp | 11 | ||||
-rw-r--r-- | TAO/tao/Transport_Connector.h | 2 |
18 files changed, 858 insertions, 294 deletions
diff --git a/TAO/ChangeLog_ref b/TAO/ChangeLog_ref index 187c3f8de44..c6e1422f7d5 100644 --- a/TAO/ChangeLog_ref +++ b/TAO/ChangeLog_ref @@ -1,3 +1,48 @@ +Thu Aug 28 10:19:58 2003 Balachandran Natarajan <bala@dre.vanderbilt.edu> + + * tao/Profile_Transport_Resolver.cpp: + * tao/Profile_Transport_Resolver.h: + * tao/Profile_Transport_Resolver.inl: This class will now store a + pointer to a list of inconsistent policies. This is used by + _validate_connection () in RTCORBA. Provided an accessor and a + initialization method for the policy list. + + Please see the documentation for more details about this. + + Changed the try_connect () call to take a transport descriptor + instead of anedpoint. + + * tao/Invocation_Endpoint_Selectors.cpp (select_endpoint): Create + a transport property descriptor to pass to try_connect () call. + + * tao/Remote_Invocation.cpp (target_spec_init): Call the hooks + registered with the orb_core. This is used by the external + services like RTCORBA to add service contexts tothe outgoing + message. + + * tao/Synch_Invocation.cpp: Cosmetic fix. + + * tao/Transport_Connector.cpp: + * tao/Transport_Connector.h: The connect () call now takes in a + transport decsriptor instead of an endpoint. + + * tao/RTCORBA/RT_Endpoint_Selector_Factory.cpp: + * tao/RTCORBA/RT_Endpoint_Selector_Factory.h: + * tao/RTCORBA/RT_Endpoint_Utils.cpp: + * tao/RTCORBA/RT_Endpoint_Utils.h: + * tao/RTCORBA/RT_Invocation_Endpoint_Selectors.cpp: + * tao/RTCORBA/RT_Invocation_Endpoint_Selectors.h: + Changes necessiated by the changes that have been done so + far. Almost all the methods that take TAO_GIOP_Invocation as one + of its arguments, has an overloaded method in the same class + that takes in TAO::Profile_Transport_Resolver. This is necessary + for us to retire the Invocation classes. + + * tao/RTScheduling/RTSchedulerC.h: + * tao/RTPortableServer/RTPortableServerC.h: Fixed compile errors + that were caused by changes in the number of template arguments + for TAO_Objref_Var_T and TAO_Objref_Out_T. + Wed Aug 27 15:34:16 2003 Jeff Parsons <j.parsons@vanderbilt.edu> * TAO_IDL/be/be_attribute.cpp: diff --git a/TAO/tao/Invocation_Endpoint_Selectors.cpp b/TAO/tao/Invocation_Endpoint_Selectors.cpp index 18b5ed2dc75..5812dff6d60 100644 --- a/TAO/tao/Invocation_Endpoint_Selectors.cpp +++ b/TAO/tao/Invocation_Endpoint_Selectors.cpp @@ -79,8 +79,10 @@ TAO_Default_Endpoint_Selector::select_endpoint ( for (size_t i = 0; i < endpoint_count; ++i) { + TAO_Base_Transport_Property desc (ep); + bool retval = - r->try_connect (ep, + r->try_connect (&desc, max_wait_time ACE_ENV_ARG_PARAMETER); ACE_CHECK; diff --git a/TAO/tao/Profile_Transport_Resolver.cpp b/TAO/tao/Profile_Transport_Resolver.cpp index 1eef8a653e3..73494991aa3 100644 --- a/TAO/tao/Profile_Transport_Resolver.cpp +++ b/TAO/tao/Profile_Transport_Resolver.cpp @@ -29,6 +29,7 @@ namespace TAO , transport_ (0) , profile_ (0) , is_released_ (false) + , inconsistent_policies_ (0) { } @@ -44,6 +45,9 @@ namespace TAO if (this->is_released_ == false) this->transport_->make_idle (); } + + if (this->inconsistent_policies_) + delete this->inconsistent_policies_; } void @@ -105,7 +109,7 @@ namespace TAO } bool - Profile_Transport_Resolver::try_connect (TAO_Endpoint *ep, + Profile_Transport_Resolver::try_connect (TAO_Transport_Descriptor_Interface *desc, ACE_Time_Value *max_time_value ACE_ENV_ARG_DECL) { @@ -138,10 +142,11 @@ namespace TAO // Obtain a connection. this->transport_ = - conn_reg->get_connector (ep)->connect (this, - ep, - max_wait_time - ACE_ENV_ARG_PARAMETER); + conn_reg->get_connector (desc->endpoint ())->connect ( + this, + desc, + max_wait_time + ACE_ENV_ARG_PARAMETER); ACE_CHECK_RETURN (false); // A timeout error occurred @@ -176,4 +181,17 @@ namespace TAO return is_conn_timeout; } + + void + Profile_Transport_Resolver::init_inconsistent_policies (ACE_ENV_SINGLE_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)) + { + ACE_NEW_THROW_EX (this->inconsistent_policies_, + CORBA::PolicyList (0), + CORBA::NO_MEMORY ( + CORBA::SystemException::_tao_minor_code ( + TAO_DEFAULT_MINOR_CODE, + ENOMEM), + CORBA::COMPLETED_NO)); + } } diff --git a/TAO/tao/Profile_Transport_Resolver.h b/TAO/tao/Profile_Transport_Resolver.h index 7e1fde2c694..79ee4951eb6 100644 --- a/TAO/tao/Profile_Transport_Resolver.h +++ b/TAO/tao/Profile_Transport_Resolver.h @@ -29,13 +29,16 @@ class TAO_Profile; class TAO_Transport; class TAO_Endpoint; class ACE_Time_Value; +class TAO_Transport_Descriptor_Interface; namespace CORBA { class SystemException; class Environment; class Object; + class PolicyList; } + namespace TAO { class Synch_Twoway_Invocation; @@ -100,10 +103,17 @@ namespace TAO /// This is a callback method used by the endpoint selectors, to /// delegate the responsibility of reserving a transport from the /// connection cache for this invocation. - bool try_connect (TAO_Endpoint *, + bool try_connect (TAO_Transport_Descriptor_Interface *desc, ACE_Time_Value *val ACE_ENV_ARG_DECL); + /// Intialize the inconsistent policy list that this object has + /// cached. + void init_inconsistent_policies (ACE_ENV_SINGLE_ARG_DECL) + ACE_THROW_SPEC ((CORBA::SystemException)); + + CORBA::PolicyList *inconsistent_policies (void) const; + private: /// Helper method to access get the connection timeout from the @@ -126,6 +136,26 @@ namespace TAO /// Has the transport been idled? mutable bool is_released_; + + /// List of inconsistent policies + /** + * If current effective policies cause the invocation to raise + * CORBA::INV_POLICY exception, the conflicting/problematic policies + * are stored in this list. This is used by \param + * Object::_validate_connection method to inform clients about + * causes of invocation failure. + * @par + * Conflicting policies are only stored in this list if \param + * init_inconsistent_policies method has been called prior to the + * beginning of invocation. This saves extra work of conflicting + * policies 'logging' when it's not needed. + * + * @NOTE: We don't use _var with a reason. Using _var would + * involve including the header file for atleast + * Policy_ForwardC.h, and that is what we precisely want to + * avoid. + */ + CORBA::PolicyList *inconsistent_policies_; }; } // TAO namespace end diff --git a/TAO/tao/Profile_Transport_Resolver.inl b/TAO/tao/Profile_Transport_Resolver.inl index 8d653e1adce..b5461a23800 100644 --- a/TAO/tao/Profile_Transport_Resolver.inl +++ b/TAO/tao/Profile_Transport_Resolver.inl @@ -31,4 +31,10 @@ namespace TAO { this->is_released_ = true; } + + ACE_INLINE CORBA::PolicyList * + Profile_Transport_Resolver::inconsistent_policies (void) const + { + return this->inconsistent_policies_; + } } diff --git a/TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.cpp b/TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.cpp index db5f2d78949..8d01561c8f5 100644 --- a/TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.cpp +++ b/TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.cpp @@ -33,6 +33,12 @@ RT_Endpoint_Selector_Factory::get_selector (TAO_GIOP_Invocation * return this->rt_invocation_endpoint_selector_; } +TAO_Invocation_Endpoint_Selector * +RT_Endpoint_Selector_Factory::get_selector (ACE_ENV_SINGLE_ARG_DECL_NOT_USED) +{ + return this->rt_invocation_endpoint_selector_; +} + // **************************************************************** ACE_STATIC_SVC_DEFINE (RT_Endpoint_Selector_Factory, diff --git a/TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.h b/TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.h index 5a680d9f451..581596dde62 100644 --- a/TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.h +++ b/TAO/tao/RTCORBA/RT_Endpoint_Selector_Factory.h @@ -59,8 +59,12 @@ public: /// Get an Invocation's endpoint selection strategy and /// initialize the endpoint selection state instance. - virtual TAO_Invocation_Endpoint_Selector *get_selector (TAO_GIOP_Invocation *invocation - ACE_ENV_ARG_DECL); + virtual TAO_Invocation_Endpoint_Selector *get_selector ( + TAO_GIOP_Invocation *invocation + ACE_ENV_ARG_DECL); + + virtual TAO_Invocation_Endpoint_Selector *get_selector ( + ACE_ENV_SINGLE_ARG_DECL); private: TAO_RT_Invocation_Endpoint_Selector *rt_invocation_endpoint_selector_; diff --git a/TAO/tao/RTCORBA/RT_Endpoint_Utils.cpp b/TAO/tao/RTCORBA/RT_Endpoint_Utils.cpp index 349dc21255e..216606c262a 100644 --- a/TAO/tao/RTCORBA/RT_Endpoint_Utils.cpp +++ b/TAO/tao/RTCORBA/RT_Endpoint_Utils.cpp @@ -1,4 +1,5 @@ #include "RT_Endpoint_Utils.h" +#include "tao/Profile_Transport_Resolver.h" #if defined (TAO_HAS_CORBA_MESSAGING) && TAO_HAS_CORBA_MESSAGING != 0 @@ -43,17 +44,56 @@ TAO_RT_Endpoint_Utils::priority_bands_policy (TAO_GIOP_Invocation *invocation } CORBA::Policy * +TAO_RT_Endpoint_Utils::priority_bands_policy (TAO::Profile_Transport_Resolver &r + ACE_ENV_ARG_DECL) +{ + CORBA::Policy *bands_policy = + CORBA::Policy::_nil (); + + TAO_RT_Stub *rt_stub = + dynamic_cast <TAO_RT_Stub *> (r.stub ()); + + ACE_TRY + { + bands_policy = + rt_stub->effective_priority_banded_connection (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_TRY_CHECK; + } + ACE_CATCH (CORBA::INV_POLICY, ex) + { + if (r.inconsistent_policies ()) + { + CORBA::PolicyList *p = + r.inconsistent_policies (); + p->length (1); + (*p)[0u] = + rt_stub->priority_banded_connection (); + } + ACE_RE_THROW; + } + ACE_ENDTRY; + ACE_CHECK_RETURN (CORBA::Policy::_nil ()); + + return bands_policy; +} + +/*static*/ CORBA::Policy * TAO_RT_Endpoint_Utils::client_protocol_policy (TAO_GIOP_Invocation *invocation ACE_ENV_ARG_DECL) { + CORBA::Policy *retval = 0; + TAO_RT_Stub *rt_stub = - ACE_dynamic_cast (TAO_RT_Stub *, invocation->stub ()); + dynamic_cast <TAO_RT_Stub *> (invocation->stub ()); + + if (rt_stub == 0) + return 0; - CORBA::Policy *retval = 0; ACE_TRY { - retval = rt_stub->effective_client_protocol (ACE_ENV_SINGLE_ARG_PARAMETER); - ACE_TRY_CHECK; + retval = + rt_stub->effective_client_protocol (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; } ACE_CATCH (CORBA::INV_POLICY, ex) { @@ -71,4 +111,41 @@ TAO_RT_Endpoint_Utils::client_protocol_policy (TAO_GIOP_Invocation *invocation return retval; } +/*static*/ CORBA::Policy * +TAO_RT_Endpoint_Utils::client_protocol_policy ( + TAO::Profile_Transport_Resolver &r + ACE_ENV_ARG_DECL) +{ + CORBA::Policy *retval = 0; + + TAO_RT_Stub *rt_stub = + dynamic_cast <TAO_RT_Stub *> (r.stub ()); + + if (rt_stub == 0) + return 0; + + ACE_TRY + { + retval = + rt_stub->effective_client_protocol (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK; + } + ACE_CATCH (CORBA::INV_POLICY, ex) + { + if (r.inconsistent_policies ()) + { + CORBA::PolicyList *p = + r.inconsistent_policies (); + p->length (1); + (*p)[0u] = + rt_stub->client_protocol (); + } + ACE_RE_THROW; + } + ACE_ENDTRY; + ACE_CHECK_RETURN (CORBA::Policy::_nil ()); + + return retval; +} + #endif /* TAO_HAS_CORBA_MESSAGING && TAO_HAS_CORBA_MESSAGING != 0 */ diff --git a/TAO/tao/RTCORBA/RT_Endpoint_Utils.h b/TAO/tao/RTCORBA/RT_Endpoint_Utils.h index 1e8965df3eb..1b02d707897 100644 --- a/TAO/tao/RTCORBA/RT_Endpoint_Utils.h +++ b/TAO/tao/RTCORBA/RT_Endpoint_Utils.h @@ -29,6 +29,11 @@ class TAO_GIOP_Invocation; +namespace TAO +{ + class Profile_Transport_Resolver; +}; + /** * @class RT_Endpoint_Utils * @@ -41,9 +46,15 @@ public: static CORBA::Policy *priority_bands_policy (TAO_GIOP_Invocation *invocation ACE_ENV_ARG_DECL); + static CORBA::Policy *priority_bands_policy (TAO::Profile_Transport_Resolver &r + ACE_ENV_ARG_DECL); + static CORBA::Policy *client_protocol_policy (TAO_GIOP_Invocation *invocation ACE_ENV_ARG_DECL); + static CORBA::Policy *client_protocol_policy (TAO::Profile_Transport_Resolver &r + ACE_ENV_ARG_DECL); + private: /// ctor. TAO_RT_Endpoint_Utils (); diff --git a/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.cpp b/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.cpp index 0c478241fd1..c7d36ca4e1e 100644 --- a/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.cpp +++ b/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.cpp @@ -4,17 +4,19 @@ #include "RT_Invocation_Endpoint_Selectors.i" #endif /* __ACE_INLINE__ */ -#include "tao/Invocation.h" + #include "RT_Policy_i.h" -#include "tao/Stub.h" -#include "tao/Profile.h" -#include "tao/Endpoint.h" #include "RT_Stub.h" #include "RT_Transport_Descriptor.h" #include "RT_Transport_Descriptor_Property.h" #include "RT_Endpoint_Utils.h" #include "RT_Protocols_Hooks.h" #include "tao/debug.h" +#include "tao/Profile.h" +#include "tao/Endpoint.h" +#include "tao/Invocation.h" +#include "tao/Profile_Transport_Resolver.h" +#include "tao/ORB_Core.h" ACE_RCSID (RTCORBA, @@ -66,6 +68,55 @@ TAO_RT_Invocation_Endpoint_Selector::select_endpoint ( } void +TAO_RT_Invocation_Endpoint_Selector::select_endpoint ( + TAO::Profile_Transport_Resolver *r, + ACE_Time_Value *val + ACE_ENV_ARG_DECL) +{ + if (r == 0) + ACE_THROW (CORBA::INTERNAL ()); + + CORBA::Policy_var client_protocol_policy_base = + TAO_RT_Endpoint_Utils::client_protocol_policy (*r + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + if (client_protocol_policy_base.ptr () == 0) + { + this->TAO_Default_Endpoint_Selector::select_endpoint ( + r, + val + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + } + else + { + RTCORBA::ClientProtocolPolicy_var client_protocol_policy = + RTCORBA::ClientProtocolPolicy::_narrow ( + client_protocol_policy_base.in () + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + /// Cast to TAO_ClientProtocolPolicy + TAO_ClientProtocolPolicy *tao_client_protocol_policy = + ACE_static_cast (TAO_ClientProtocolPolicy *, + client_protocol_policy.in ()); + + /// Get the ProtocolList + RTCORBA::ProtocolList &client_protocols = + tao_client_protocol_policy->protocols_rep (); + + this->select_endpoint_based_on_client_protocol_policy ( + *r, + client_protocol_policy.in (), + client_protocols, + val + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + } +} + +void TAO_RT_Invocation_Endpoint_Selector::select_endpoint_based_on_client_protocol_policy ( TAO_GIOP_Invocation *invocation, RTCORBA::ClientProtocolPolicy_ptr client_protocol_policy, @@ -134,6 +185,79 @@ TAO_RT_Invocation_Endpoint_Selector::select_endpoint_based_on_client_protocol_po } +void +TAO_RT_Invocation_Endpoint_Selector::select_endpoint_based_on_client_protocol_policy ( + TAO::Profile_Transport_Resolver &r, + RTCORBA::ClientProtocolPolicy_ptr client_protocol_policy, + RTCORBA::ProtocolList &client_protocols, + ACE_Time_Value *val + ACE_ENV_ARG_DECL) +{ + CORBA::Boolean valid_profile_found = 0; + + // Even though cycling through all the protocols is the correct + // things to do to find a match, starting from the start of the + // profile list is not. In addition, this code is also ignoring the + // forwarded reference (if it exists). This behavior is caused by + // problems with the profile management in TAO which are documented + // in bugzilla bugs 1237, 1238, and 1239. Once the above problems + // are fixed, this behavior should be fixed to do the right thing. + for (CORBA::ULong protocol_index = 0; + protocol_index < client_protocols.length (); + ++protocol_index) + { + // Find the profiles that match the current protocol. + TAO_Profile *profile = 0; + TAO_MProfile &mprofile = r.stub ()->base_profiles (); + + for (TAO_PHandle i = 0; + i < mprofile.profile_count (); + ++i) + { + profile = mprofile.get_profile (i); + + if (profile->tag () == client_protocols[protocol_index].protocol_type) + { + valid_profile_found = 1; + + r.profile (profile); + + int status = + this->endpoint_from_profile (r, + val + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + + if (status == 1) + return; + // @@ Else we should check for potential forwarding here. + } + } + } + + // We have tried all the profiles specified in the client protocol + // policy with no success. Throw exception. + if (!valid_profile_found) + { + if (r.inconsistent_policies ()) + { + CORBA::PolicyList *p = + r.inconsistent_policies (); + + p->length (1); + (*p)[0u] = + CORBA::Policy::_duplicate (client_protocol_policy); + } + ACE_THROW (CORBA::INV_POLICY ()); + } + + // If we get here, we found at least one pertinent profile, but no + // usable endpoints. + ACE_THROW (CORBA::TRANSIENT (CORBA::OMGVMCID | 2, + CORBA::COMPLETED_NO)); + +} + int TAO_RT_Invocation_Endpoint_Selector::endpoint_from_profile ( TAO_GIOP_Invocation *invocation @@ -341,3 +465,223 @@ TAO_RT_Invocation_Endpoint_Selector::endpoint_from_profile ( return 0; } + +int +TAO_RT_Invocation_Endpoint_Selector::endpoint_from_profile ( + TAO::Profile_Transport_Resolver &r, + ACE_Time_Value *val + ACE_ENV_ARG_DECL) +{ + // Narrow to the RT Stub. + TAO_RT_Stub *rt_stub = + dynamic_cast <TAO_RT_Stub *> (r.stub ()); + + if (rt_stub == 0) + { + ACE_DEBUG ((LM_DEBUG, "Unexpected error narrowing stub to TAO_RT_Stub")); + + ACE_THROW_RETURN (CORBA::INTERNAL ( + CORBA::SystemException::_tao_minor_code ( + TAO_DEFAULT_MINOR_CODE, + EINVAL), + CORBA::COMPLETED_NO), + 0); + } + + // Get the priority model policy. + CORBA::Policy_var priority_model_policy = + rt_stub->exposed_priority_model (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (0); + + // Get the bands policy. + CORBA::Policy_var bands_policy = + TAO_RT_Endpoint_Utils::priority_bands_policy (r + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (0); + + int all_endpoints_are_valid = 0; + int match_priority = 0; + int match_bands = 0; + CORBA::Short client_thread_priority = 0; + CORBA::Short min_priority = 0; + CORBA::Short max_priority = 0; + + // If the priority model policy is not set. + if (priority_model_policy.ptr () == 0) + { + // Bands without priority model do not make sense. + if (bands_policy.ptr () != 0) + { + if (r.inconsistent_policies ()) + { + CORBA::PolicyList *p = + r.inconsistent_policies (); + + p->length (1); + (*p)[0u] = + CORBA::Policy::_duplicate (bands_policy.in ()); + } + // Indicate error. + ACE_THROW_RETURN (CORBA::INV_POLICY (), 0); + } + + // No priority model policy (and no bands policy): all endpoints + // are fair game. + all_endpoints_are_valid = 1; + } + // If the priority model policy is set. + else + { + // Get the protocol hooks. + TAO_Protocols_Hooks *protocol_hooks = + r.stub ()->orb_core ()->get_protocols_hooks (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (0); + + CORBA::Short server_priority = 0; + CORBA::Boolean is_client_propagated = 0; + + // Check the priority model policy to see if it is client + // propagated. + protocol_hooks->get_selector_hook (priority_model_policy.in (), + is_client_propagated, + server_priority); + + if (!is_client_propagated) + { + // Server declared: all endpoints are fair game. + all_endpoints_are_valid = 1; + } + // Client propagated. + else + { + // Get client thread priority. + int status = + protocol_hooks->get_thread_CORBA_priority ( + client_thread_priority // side effect + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (0); + if (status == -1) + { + ACE_THROW_RETURN (CORBA::DATA_CONVERSION (CORBA::OMGVMCID | 1, + CORBA::COMPLETED_NO), + 0); + } + + // If there are no bands. + if (bands_policy.ptr () == 0) + { + // Match the priority of the client thread with the + // endpoint. + match_priority = 1; + } + // There are bands. + else + { + // Check which band range we fall in. + int in_range = 0; + protocol_hooks->get_selector_bands_policy_hook ( + bands_policy.in (), + client_thread_priority, + min_priority, + max_priority, + in_range); + + // If priority doesn't fall into any of the bands. + if (!in_range) + { + if (r.inconsistent_policies ()) + { + CORBA::PolicyList *p = + r.inconsistent_policies (); + p->length (2); + (*p)[0u] = + CORBA::Policy::_duplicate (bands_policy.in ()); + (*p)[1u] = + CORBA::Policy::_duplicate ( + priority_model_policy.in ()); + } + + // Indicate error. + ACE_THROW_RETURN (CORBA::INV_POLICY (), + 0); + } + + // Match the priority of the band with the endpoint. + match_bands = 1; + } + } + } + + TAO_Endpoint *ep = + r.profile ()->endpoint (); + + while (ep != 0) + { + // Get the priority of the endpoint. + CORBA::Short endpoint_priority = + ep->priority (); + + // If <all_endpoints_are_valid> or match the priority of the + // client thread or match the priority of the band or + // profile contains just one endpoint. This happens when: + // a) we are talking to a nonTAO server (which doesn't have + // the concept of multiple endpoints per profile) + // or + // b) we have TAO server with a non-lane threadpool, in which + // case there is only one acceptor + // In both cases we should use the endpoint regardless of its priority. + + if (all_endpoints_are_valid || + (match_priority && + client_thread_priority == endpoint_priority) || + (match_bands && + endpoint_priority <= max_priority && + endpoint_priority >= min_priority) || + r.profile ()->endpoint_count () == 1 && + endpoint_priority == TAO_INVALID_PRIORITY) + { + TAO_RT_Transport_Descriptor_Private_Connection_Property + private_connection_descriptor_property; + + TAO_RT_Transport_Descriptor_Banded_Connection_Property + banded_connection_descriptor_property; + + TAO_RT_Transport_Descriptor + rt_transport_descriptor (ep); + + if (rt_stub->private_connection ()) + { + private_connection_descriptor_property.init + (ACE_static_cast (long, + ACE_reinterpret_cast (ptrdiff_t, + r.stub ()))); + rt_transport_descriptor.insert + (&private_connection_descriptor_property); + } + + if (match_bands) + { + banded_connection_descriptor_property.init + (min_priority, max_priority); + + rt_transport_descriptor.insert + (&banded_connection_descriptor_property); + } + + bool status = + r.try_connect (&rt_transport_descriptor, + val + ACE_ENV_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + + // Check if the invocation has completed. + if (status == true) + return 1; + } + + // Go to the next endpoint in this profile. + ep = r.profile ()->endpoint ()->next(); + } + + return 0; +} diff --git a/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.h b/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.h index a3e8ea2b307..ddbad4d6d28 100644 --- a/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.h +++ b/TAO/tao/RTCORBA/RT_Invocation_Endpoint_Selectors.h @@ -51,6 +51,11 @@ public: void select_endpoint (TAO_GIOP_Invocation *invocation ACE_ENV_ARG_DECL); + void select_endpoint (TAO::Profile_Transport_Resolver *r, + ACE_Time_Value *val + ACE_ENV_ARG_DECL); + +protected: void select_endpoint_based_on_client_protocol_policy (TAO_GIOP_Invocation *invocation, RTCORBA::ClientProtocolPolicy_ptr client_protocol_policy, RTCORBA::ProtocolList &protocols @@ -58,6 +63,16 @@ public: int endpoint_from_profile (TAO_GIOP_Invocation *invocation ACE_ENV_ARG_DECL); + + void select_endpoint_based_on_client_protocol_policy (TAO::Profile_Transport_Resolver &r, + RTCORBA::ClientProtocolPolicy_ptr client_protocol_policy, + RTCORBA::ProtocolList &protocols, + ACE_Time_Value *v + ACE_ENV_ARG_DECL); + + int endpoint_from_profile (TAO::Profile_Transport_Resolver &r, + ACE_Time_Value *v + ACE_ENV_ARG_DECL); }; #if defined (__ACE_INLINE__) diff --git a/TAO/tao/RTPortableServer/RTPortableServerC.h b/TAO/tao/RTPortableServer/RTPortableServerC.h index 21b62d7bab8..49374a20a10 100644 --- a/TAO/tao/RTPortableServer/RTPortableServerC.h +++ b/TAO/tao/RTPortableServer/RTPortableServerC.h @@ -68,31 +68,29 @@ TAO_NAMESPACE RTPortableServer { - + // TAO_IDL - Generated from // W:\ACE_wrappers\TAO\TAO_IDL\be\be_interface.cpp:567 #if !defined (_RTPORTABLESERVER_POA__ODDS_N_ENDS_CH_) #define _RTPORTABLESERVER_POA__ODDS_N_ENDS_CH_ - + class POA; typedef POA *POA_ptr; struct tao_POA_life; - + typedef TAO_Objref_Var_T< - POA, - tao_POA_life + POA > POA_var; - + typedef TAO_Objref_Out_T< - POA, - tao_POA_life + POA > POA_out; - + struct TAO_RTPortableServer_Export tao_POA_life { static POA_ptr tao_duplicate (POA_ptr); @@ -103,7 +101,7 @@ TAO_NAMESPACE RTPortableServer TAO_OutputCDR & ); }; - + struct TAO_RTPortableServer_Export tao_POA_cast { static POA_ptr tao_narrow ( @@ -114,13 +112,13 @@ TAO_NAMESPACE RTPortableServer }; #endif /* end #if !defined */ - + // TAO_IDL - Generated from // W:\ACE_wrappers\TAO\TAO_IDL\be\be_visitor_interface/interface_ch.cpp:54 #if !defined (_RTPORTABLESERVER_POA_CH_) #define _RTPORTABLESERVER_POA_CH_ - + class TAO_RTPortableServer_Export POA : public virtual PortableServer::POA { @@ -128,30 +126,30 @@ TAO_NAMESPACE RTPortableServer typedef POA_ptr _ptr_type; typedef POA_var _var_type; static int _tao_class_id; - + // The static operations. static POA_ptr _duplicate (POA_ptr obj); - + static POA_ptr _narrow ( CORBA::Object_ptr obj ACE_ENV_ARG_DECL_WITH_DEFAULTS ); - + static POA_ptr _unchecked_narrow ( CORBA::Object_ptr obj ACE_ENV_ARG_DECL_WITH_DEFAULTS ); - + static POA_ptr _nil (void) { return (POA_ptr)0; } - + static void _tao_any_destructor (void *); - + // TAO_IDL - Generated from // W:\ACE_wrappers\TAO\TAO_IDL\be\be_visitor_operation/operation_ch.cpp:46 - + virtual CORBA::Object_ptr create_reference_with_priority ( const char * intf, RTCORBA::Priority priority @@ -161,10 +159,10 @@ TAO_NAMESPACE RTPortableServer CORBA::SystemException , PortableServer::POA::WrongPolicy )) = 0; - + // TAO_IDL - Generated from // W:\ACE_wrappers\TAO\TAO_IDL\be\be_visitor_operation/operation_ch.cpp:46 - + virtual CORBA::Object_ptr create_reference_with_id_and_priority ( const PortableServer::ObjectId & oid, const char * intf, @@ -175,10 +173,10 @@ TAO_NAMESPACE RTPortableServer CORBA::SystemException , PortableServer::POA::WrongPolicy )) = 0; - + // TAO_IDL - Generated from // W:\ACE_wrappers\TAO\TAO_IDL\be\be_visitor_operation/operation_ch.cpp:46 - + virtual ::PortableServer::ObjectId * activate_object_with_priority ( PortableServer::Servant p_servant, RTCORBA::Priority priority @@ -189,10 +187,10 @@ TAO_NAMESPACE RTPortableServer , PortableServer::POA::ServantAlreadyActive , PortableServer::POA::WrongPolicy )) = 0; - + // TAO_IDL - Generated from // W:\ACE_wrappers\TAO\TAO_IDL\be\be_visitor_operation/operation_ch.cpp:46 - + virtual void activate_object_with_id_and_priority ( const PortableServer::ObjectId & oid, PortableServer::Servant p_servant, @@ -205,29 +203,29 @@ TAO_NAMESPACE RTPortableServer , PortableServer::POA::ObjectAlreadyActive , PortableServer::POA::WrongPolicy )) = 0; - + // TAO_IDL - Generated from // W:\ACE_wrappers\TAO\TAO_IDL\be\be_visitor_interface/interface_ch.cpp:211 - + virtual void *_tao_QueryInterface (ptrdiff_t type); - + virtual const char* _interface_repository_id (void) const; virtual CORBA::Boolean marshal (TAO_OutputCDR &cdr); - + protected: POA (void); virtual ~POA (void); - + private: POA (const POA &); void operator= (const POA &); }; #endif /* end #if !defined */ - + // TAO_IDL - Generated from // W:\ACE_wrappers\TAO\TAO_IDL\be\be_visitor_typecode/typecode_decl.cpp:44 - + TAO_NAMESPACE_STORAGE_CLASS ::CORBA::TypeCode_ptr _tc_POA; // TAO_IDL - Generated from @@ -272,4 +270,3 @@ TAO_RTPortableServer_Export CORBA::Boolean operator>>= (const CORBA::Any &, RTPo #include /**/ "ace/post.h" #endif /* ifndef */ - diff --git a/TAO/tao/RTScheduling/RTSchedulerC.h b/TAO/tao/RTScheduling/RTSchedulerC.h index 8ad7e0c1741..cda6997860e 100644 --- a/TAO/tao/RTScheduling/RTSchedulerC.h +++ b/TAO/tao/RTScheduling/RTSchedulerC.h @@ -92,31 +92,29 @@ TAO_NAMESPACE_CLOSE // module CORBA TAO_NAMESPACE RTScheduling { - + // TAO_IDL - Generated from // be/be_interface.cpp:570 #if !defined (_RTSCHEDULING_THREADACTION__ODDS_N_ENDS_CH_) #define _RTSCHEDULING_THREADACTION__ODDS_N_ENDS_CH_ - + class ThreadAction; typedef ThreadAction *ThreadAction_ptr; struct tao_ThreadAction_life; - + typedef TAO_Objref_Var_T< - ThreadAction, - tao_ThreadAction_life + ThreadAction > ThreadAction_var; - + typedef TAO_Objref_Out_T< - ThreadAction, - tao_ThreadAction_life + ThreadAction > ThreadAction_out; - + struct TAO_RTScheduler_Export tao_ThreadAction_life { static ThreadAction_ptr tao_duplicate (ThreadAction_ptr); @@ -127,7 +125,7 @@ TAO_NAMESPACE RTScheduling TAO_OutputCDR & ); }; - + struct TAO_RTScheduler_Export tao_ThreadAction_cast { static ThreadAction_ptr tao_narrow ( @@ -138,13 +136,13 @@ TAO_NAMESPACE RTScheduling }; #endif /* end #if !defined */ - + // TAO_IDL - Generated from // be/be_visitor_interface/interface_ch.cpp:50 #if !defined (_RTSCHEDULING_THREADACTION_CH_) #define _RTSCHEDULING_THREADACTION_CH_ - + class TAO_RTScheduler_Export ThreadAction : public virtual CORBA::Object { @@ -152,30 +150,30 @@ TAO_NAMESPACE RTScheduling typedef ThreadAction_ptr _ptr_type; typedef ThreadAction_var _var_type; static int _tao_class_id; - + // The static operations. static ThreadAction_ptr _duplicate (ThreadAction_ptr obj); - + static ThreadAction_ptr _narrow ( CORBA::Object_ptr obj ACE_ENV_ARG_DECL_WITH_DEFAULTS ); - + static ThreadAction_ptr _unchecked_narrow ( CORBA::Object_ptr obj ACE_ENV_ARG_DECL_WITH_DEFAULTS ); - + static ThreadAction_ptr _nil (void) { return (ThreadAction_ptr)0; } - + static void _tao_any_destructor (void *); - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void _cxx_do ( CORBA::VoidData data ACE_ENV_ARG_DECL_WITH_DEFAULTS @@ -183,55 +181,53 @@ TAO_NAMESPACE RTScheduling ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_interface/interface_ch.cpp:207 - + virtual void *_tao_QueryInterface (ptrdiff_t type); - + virtual const char* _interface_repository_id (void) const; virtual CORBA::Boolean marshal (TAO_OutputCDR &cdr); - + protected: ThreadAction (void); virtual ~ThreadAction (void); - + private: ThreadAction (const ThreadAction &); void operator= (const ThreadAction &); }; #endif /* end #if !defined */ - + // TAO_IDL - Generated from // be/be_visitor_typecode/typecode_decl.cpp:44 - + TAO_NAMESPACE_STORAGE_CLASS ::CORBA::TypeCode_ptr _tc_ThreadAction; - + // TAO_IDL - Generated from // be/be_interface.cpp:570 #if !defined (_RTSCHEDULING_DISTRIBUTABLETHREAD__ODDS_N_ENDS_CH_) #define _RTSCHEDULING_DISTRIBUTABLETHREAD__ODDS_N_ENDS_CH_ - + class DistributableThread; typedef DistributableThread *DistributableThread_ptr; struct tao_DistributableThread_life; - + typedef TAO_Objref_Var_T< - DistributableThread, - tao_DistributableThread_life + DistributableThread > DistributableThread_var; - + typedef TAO_Objref_Out_T< - DistributableThread, - tao_DistributableThread_life + DistributableThread > DistributableThread_out; - + struct TAO_RTScheduler_Export tao_DistributableThread_life { static DistributableThread_ptr tao_duplicate (DistributableThread_ptr); @@ -242,7 +238,7 @@ TAO_NAMESPACE RTScheduling TAO_OutputCDR & ); }; - + struct TAO_RTScheduler_Export tao_DistributableThread_cast { static DistributableThread_ptr tao_narrow ( @@ -253,13 +249,13 @@ TAO_NAMESPACE RTScheduling }; #endif /* end #if !defined */ - + // TAO_IDL - Generated from // be/be_visitor_interface/interface_ch.cpp:50 #if !defined (_RTSCHEDULING_DISTRIBUTABLETHREAD_CH_) #define _RTSCHEDULING_DISTRIBUTABLETHREAD_CH_ - + class TAO_RTScheduler_Export DistributableThread : public virtual CORBA::Object { @@ -267,111 +263,109 @@ TAO_NAMESPACE RTScheduling typedef DistributableThread_ptr _ptr_type; typedef DistributableThread_var _var_type; static int _tao_class_id; - + // The static operations. static DistributableThread_ptr _duplicate (DistributableThread_ptr obj); - + static DistributableThread_ptr _narrow ( CORBA::Object_ptr obj ACE_ENV_ARG_DECL_WITH_DEFAULTS ); - + static DistributableThread_ptr _unchecked_narrow ( CORBA::Object_ptr obj ACE_ENV_ARG_DECL_WITH_DEFAULTS ); - + static DistributableThread_ptr _nil (void) { return (DistributableThread_ptr)0; } - + static void _tao_any_destructor (void *); - + // TAO_IDL - Generated from // be/be_visitor_enum/enum_ch.cpp:57 - + enum DT_State { ACTIVE, CANCELLED }; - + typedef DT_State &DT_State_out; - + // TAO_IDL - Generated from // be/be_visitor_typecode/typecode_decl.cpp:44 - + static ::CORBA::TypeCode_ptr _tc_DT_State; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void cancel ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS ) ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual ::RTScheduling::DistributableThread::DT_State state ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS ) ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_interface/interface_ch.cpp:207 - + virtual void *_tao_QueryInterface (ptrdiff_t type); - + virtual const char* _interface_repository_id (void) const; virtual CORBA::Boolean marshal (TAO_OutputCDR &cdr); - + protected: DistributableThread (void); virtual ~DistributableThread (void); - + private: DistributableThread (const DistributableThread &); void operator= (const DistributableThread &); }; #endif /* end #if !defined */ - + // TAO_IDL - Generated from // be/be_visitor_typecode/typecode_decl.cpp:44 - + TAO_NAMESPACE_STORAGE_CLASS ::CORBA::TypeCode_ptr _tc_DistributableThread; - + // TAO_IDL - Generated from // be/be_interface.cpp:570 #if !defined (_RTSCHEDULING_CURRENT__ODDS_N_ENDS_CH_) #define _RTSCHEDULING_CURRENT__ODDS_N_ENDS_CH_ - + class Current; typedef Current *Current_ptr; struct tao_Current_life; - + typedef TAO_Objref_Var_T< - Current, - tao_Current_life + Current > Current_var; - + typedef TAO_Objref_Out_T< - Current, - tao_Current_life + Current > Current_out; - + struct TAO_RTScheduler_Export tao_Current_life { static Current_ptr tao_duplicate (Current_ptr); @@ -382,7 +376,7 @@ TAO_NAMESPACE RTScheduling TAO_OutputCDR & ); }; - + struct TAO_RTScheduler_Export tao_Current_cast { static Current_ptr tao_narrow ( @@ -393,7 +387,7 @@ TAO_NAMESPACE RTScheduling }; #endif /* end #if !defined */ - + // TAO_IDL - Generated from // be/be_visitor_interface/interface_ch.cpp:50 @@ -403,29 +397,29 @@ TAO_NAMESPACE RTScheduling // TAO_IDL - Generated from // C:\ACE_wrappers\TAO\TAO_IDL\be\be_interface.cpp:571 - + class TAO_RTScheduler_Export Current_var : public TAO_Base_var { public: Current_var (void); // default constructor - Current_var (Current_ptr p) : ptr_ (p) {} + Current_var (Current_ptr p) : ptr_ (p) {} Current_var (const Current_var &); // copy constructor ~Current_var (void); // destructor - + Current_var &operator= (Current_ptr); Current_var &operator= (const Current_var &); Current_ptr operator-> (void) const; - + operator const Current_ptr &() const; operator Current_ptr &(); - // in, inout, out, _retn + // in, inout, out, _retn Current_ptr in (void) const; Current_ptr &inout (void); Current_ptr &out (void); Current_ptr _retn (void); Current_ptr ptr (void) const; - + // Hooks used by template sequence and object manager classes // for non-defined forward declared interfaces. static Current_ptr tao_duplicate (Current_ptr); @@ -436,7 +430,7 @@ TAO_NAMESPACE RTScheduling ACE_ENV_ARG_DECL_NOT_USED ); static CORBA::Object * tao_upcast (void *); - + private: Current_ptr ptr_; // Unimplemented - prevents widening assignment. @@ -448,7 +442,7 @@ TAO_NAMESPACE RTScheduling #if !defined (_RTSCHEDULING_CURRENT_CH_) #define _RTSCHEDULING_CURRENT_CH_ - + class TAO_RTScheduler_Export Current : public virtual RTCORBA::Current { @@ -456,30 +450,30 @@ TAO_NAMESPACE RTScheduling typedef Current_ptr _ptr_type; typedef Current_var _var_type; static int _tao_class_id; - + // The static operations. static Current_ptr _duplicate (Current_ptr obj); - + static Current_ptr _narrow ( CORBA::Object_ptr obj ACE_ENV_ARG_DECL_WITH_DEFAULTS ); - + static Current_ptr _unchecked_narrow ( CORBA::Object_ptr obj ACE_ENV_ARG_DECL_WITH_DEFAULTS ); - + static Current_ptr _nil (void) { return (Current_ptr)0; } - + static void _tao_any_destructor (void *); - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual ::RTScheduling::DistributableThread_ptr spawn ( RTScheduling::ThreadAction_ptr start, CORBA::VoidData data, @@ -493,25 +487,25 @@ TAO_NAMESPACE RTScheduling ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_exception/exception_ch.cpp:51 #if !defined (_RTSCHEDULING_CURRENT_UNSUPPORTED_SCHEDULING_DISCIPLINE_CH_) #define _RTSCHEDULING_CURRENT_UNSUPPORTED_SCHEDULING_DISCIPLINE_CH_ - + class TAO_RTScheduler_Export UNSUPPORTED_SCHEDULING_DISCIPLINE : public CORBA::UserException { public: - + UNSUPPORTED_SCHEDULING_DISCIPLINE (void); UNSUPPORTED_SCHEDULING_DISCIPLINE (const UNSUPPORTED_SCHEDULING_DISCIPLINE &); ~UNSUPPORTED_SCHEDULING_DISCIPLINE (void); UNSUPPORTED_SCHEDULING_DISCIPLINE &operator= (const UNSUPPORTED_SCHEDULING_DISCIPLINE &); - + static void _tao_any_destructor (void *); - + static UNSUPPORTED_SCHEDULING_DISCIPLINE *_downcast (CORBA::Exception *); static CORBA::Exception *_alloc (void); @@ -523,28 +517,28 @@ TAO_NAMESPACE RTScheduling TAO_OutputCDR & ACE_ENV_ARG_DECL_NOT_USED ) const; - + virtual void _tao_decode ( TAO_InputCDR & ACE_ENV_ARG_DECL_NOT_USED ); - + // TAO_IDL - Generated from // be/be_visitor_exception/exception_ch.cpp:125 - + virtual CORBA::TypeCode_ptr _type (void) const; }; - + // TAO_IDL - Generated from // be/be_visitor_typecode/typecode_decl.cpp:44 - + static ::CORBA::TypeCode_ptr _tc_UNSUPPORTED_SCHEDULING_DISCIPLINE; #endif /* end #if !defined */ - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void begin_scheduling_segment ( const char * name, CORBA::Policy_ptr sched_param, @@ -555,10 +549,10 @@ TAO_NAMESPACE RTScheduling CORBA::SystemException , RTScheduling::Current::UNSUPPORTED_SCHEDULING_DISCIPLINE )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void update_scheduling_segment ( const char * name, CORBA::Policy_ptr sched_param, @@ -569,10 +563,10 @@ TAO_NAMESPACE RTScheduling CORBA::SystemException , RTScheduling::Current::UNSUPPORTED_SCHEDULING_DISCIPLINE )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void end_scheduling_segment ( const char * name ACE_ENV_ARG_DECL_WITH_DEFAULTS @@ -580,22 +574,22 @@ TAO_NAMESPACE RTScheduling ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_sequence/sequence_ch.cpp:91 #if !defined (_RTSCHEDULING_CURRENT_IDTYPE_CH_) #define _RTSCHEDULING_CURRENT_IDTYPE_CH_ - + class IdType; - + typedef TAO_FixedSeq_Var_T< IdType, CORBA::Octet > IdType_var; - + typedef TAO_Seq_Out_T< IdType, @@ -603,7 +597,7 @@ TAO_NAMESPACE RTScheduling CORBA::Octet > IdType_out; - + class TAO_RTScheduler_Export IdType : public TAO_Unbounded_Sequence< @@ -616,14 +610,14 @@ TAO_NAMESPACE RTScheduling IdType ( CORBA::ULong max, CORBA::ULong length, - CORBA::Octet* buffer, + CORBA::Octet* buffer, CORBA::Boolean release = 0 ); IdType (const IdType &); ~IdType (void); - + static void _tao_any_destructor (void *); - + typedef IdType_var _var_type; #if (TAO_NO_COPY_OCTET_SEQUENCES == 1) @@ -636,25 +630,25 @@ TAO_NAMESPACE RTScheduling }; #endif /* end #if !defined */ - + // TAO_IDL - Generated from // be/be_visitor_typecode/typecode_decl.cpp:44 - + static ::CORBA::TypeCode_ptr _tc_IdType; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual ::RTScheduling::Current::IdType * id ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS ) ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual ::RTScheduling::DistributableThread_ptr lookup ( const RTScheduling::Current::IdType & id ACE_ENV_ARG_DECL_WITH_DEFAULTS @@ -662,42 +656,42 @@ TAO_NAMESPACE RTScheduling ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual ::CORBA::Policy_ptr scheduling_parameter ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS ) ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual ::CORBA::Policy_ptr implicit_scheduling_parameter ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS ) ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_sequence/sequence_ch.cpp:91 #if !defined (_RTSCHEDULING_CURRENT_NAMELIST_CH_) #define _RTSCHEDULING_CURRENT_NAMELIST_CH_ - + class NameList; - + typedef TAO_MngSeq_Var_T< NameList, TAO_SeqElem_String_Manager > NameList_var; - + typedef TAO_MngSeq_Out_T< NameList, @@ -705,7 +699,7 @@ TAO_NAMESPACE RTScheduling TAO_SeqElem_String_Manager > NameList_out; - + class TAO_RTScheduler_Export NameList : public TAO_Unbounded_String_Sequence @@ -716,82 +710,80 @@ TAO_NAMESPACE RTScheduling NameList ( CORBA::ULong max, CORBA::ULong length, - char ** buffer, + char ** buffer, CORBA::Boolean release = 0 ); NameList (const NameList &); ~NameList (void); - + static void _tao_any_destructor (void *); - + typedef NameList_var _var_type; }; #endif /* end #if !defined */ - + // TAO_IDL - Generated from // be/be_visitor_typecode/typecode_decl.cpp:44 - + static ::CORBA::TypeCode_ptr _tc_NameList; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual ::RTScheduling::Current::NameList * current_scheduling_segment_names ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS ) ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_interface/interface_ch.cpp:207 - + virtual void *_tao_QueryInterface (ptrdiff_t type); - + virtual const char* _interface_repository_id (void) const; virtual CORBA::Boolean marshal (TAO_OutputCDR &cdr); - + protected: Current (void); virtual ~Current (void); - + private: Current (const Current &); void operator= (const Current &); }; #endif /* end #if !defined */ - + // TAO_IDL - Generated from // be/be_visitor_typecode/typecode_decl.cpp:44 - + TAO_NAMESPACE_STORAGE_CLASS ::CORBA::TypeCode_ptr _tc_Current; - + // TAO_IDL - Generated from // be/be_interface.cpp:570 #if !defined (_RTSCHEDULING_RESOURCEMANAGER__ODDS_N_ENDS_CH_) #define _RTSCHEDULING_RESOURCEMANAGER__ODDS_N_ENDS_CH_ - + class ResourceManager; typedef ResourceManager *ResourceManager_ptr; struct tao_ResourceManager_life; - + typedef TAO_Objref_Var_T< - ResourceManager, - tao_ResourceManager_life + ResourceManager > ResourceManager_var; - + typedef TAO_Objref_Out_T< - ResourceManager, - tao_ResourceManager_life + ResourceManager > ResourceManager_out; - + struct TAO_RTScheduler_Export tao_ResourceManager_life { static ResourceManager_ptr tao_duplicate (ResourceManager_ptr); @@ -802,7 +794,7 @@ TAO_NAMESPACE RTScheduling TAO_OutputCDR & ); }; - + struct TAO_RTScheduler_Export tao_ResourceManager_cast { static ResourceManager_ptr tao_narrow ( @@ -813,13 +805,13 @@ TAO_NAMESPACE RTScheduling }; #endif /* end #if !defined */ - + // TAO_IDL - Generated from // be/be_visitor_interface/interface_ch.cpp:50 #if !defined (_RTSCHEDULING_RESOURCEMANAGER_CH_) #define _RTSCHEDULING_RESOURCEMANAGER_CH_ - + class TAO_RTScheduler_Export ResourceManager : public virtual RTCORBA::Mutex { @@ -827,75 +819,73 @@ TAO_NAMESPACE RTScheduling typedef ResourceManager_ptr _ptr_type; typedef ResourceManager_var _var_type; static int _tao_class_id; - + // The static operations. static ResourceManager_ptr _duplicate (ResourceManager_ptr obj); - + static ResourceManager_ptr _narrow ( CORBA::Object_ptr obj ACE_ENV_ARG_DECL_WITH_DEFAULTS ); - + static ResourceManager_ptr _unchecked_narrow ( CORBA::Object_ptr obj ACE_ENV_ARG_DECL_WITH_DEFAULTS ); - + static ResourceManager_ptr _nil (void) { return (ResourceManager_ptr)0; } - + static void _tao_any_destructor (void *); - + // TAO_IDL - Generated from // be/be_visitor_interface/interface_ch.cpp:207 - + virtual void *_tao_QueryInterface (ptrdiff_t type); - + virtual const char* _interface_repository_id (void) const; virtual CORBA::Boolean marshal (TAO_OutputCDR &cdr); - + protected: ResourceManager (void); virtual ~ResourceManager (void); - + private: ResourceManager (const ResourceManager &); void operator= (const ResourceManager &); }; #endif /* end #if !defined */ - + // TAO_IDL - Generated from // be/be_visitor_typecode/typecode_decl.cpp:44 - + TAO_NAMESPACE_STORAGE_CLASS ::CORBA::TypeCode_ptr _tc_ResourceManager; - + // TAO_IDL - Generated from // be/be_interface.cpp:570 #if !defined (_RTSCHEDULING_SCHEDULER__ODDS_N_ENDS_CH_) #define _RTSCHEDULING_SCHEDULER__ODDS_N_ENDS_CH_ - + class Scheduler; typedef Scheduler *Scheduler_ptr; struct tao_Scheduler_life; - + typedef TAO_Objref_Var_T< - Scheduler, - tao_Scheduler_life + Scheduler > Scheduler_var; - + typedef TAO_Objref_Out_T< - Scheduler, - tao_Scheduler_life + Scheduler > Scheduler_out; - + struct TAO_RTScheduler_Export tao_Scheduler_life { static Scheduler_ptr tao_duplicate (Scheduler_ptr); @@ -906,7 +896,7 @@ TAO_NAMESPACE RTScheduling TAO_OutputCDR & ); }; - + struct TAO_RTScheduler_Export tao_Scheduler_cast { static Scheduler_ptr tao_narrow ( @@ -917,13 +907,13 @@ TAO_NAMESPACE RTScheduling }; #endif /* end #if !defined */ - + // TAO_IDL - Generated from // be/be_visitor_interface/interface_ch.cpp:50 #if !defined (_RTSCHEDULING_SCHEDULER_CH_) #define _RTSCHEDULING_SCHEDULER_CH_ - + class TAO_RTScheduler_Export Scheduler : public virtual CORBA::Object { @@ -931,45 +921,45 @@ TAO_NAMESPACE RTScheduling typedef Scheduler_ptr _ptr_type; typedef Scheduler_var _var_type; static int _tao_class_id; - + // The static operations. static Scheduler_ptr _duplicate (Scheduler_ptr obj); - + static Scheduler_ptr _narrow ( CORBA::Object_ptr obj ACE_ENV_ARG_DECL_WITH_DEFAULTS ); - + static Scheduler_ptr _unchecked_narrow ( CORBA::Object_ptr obj ACE_ENV_ARG_DECL_WITH_DEFAULTS ); - + static Scheduler_ptr _nil (void) { return (Scheduler_ptr)0; } - + static void _tao_any_destructor (void *); - + // TAO_IDL - Generated from // be/be_visitor_exception/exception_ch.cpp:51 #if !defined (_RTSCHEDULING_SCHEDULER_INCOMPATIBLE_SCHEDULING_DISCIPLINES_CH_) #define _RTSCHEDULING_SCHEDULER_INCOMPATIBLE_SCHEDULING_DISCIPLINES_CH_ - + class TAO_RTScheduler_Export INCOMPATIBLE_SCHEDULING_DISCIPLINES : public CORBA::UserException { public: - + INCOMPATIBLE_SCHEDULING_DISCIPLINES (void); INCOMPATIBLE_SCHEDULING_DISCIPLINES (const INCOMPATIBLE_SCHEDULING_DISCIPLINES &); ~INCOMPATIBLE_SCHEDULING_DISCIPLINES (void); INCOMPATIBLE_SCHEDULING_DISCIPLINES &operator= (const INCOMPATIBLE_SCHEDULING_DISCIPLINES &); - + static void _tao_any_destructor (void *); - + static INCOMPATIBLE_SCHEDULING_DISCIPLINES *_downcast (CORBA::Exception *); static CORBA::Exception *_alloc (void); @@ -981,38 +971,38 @@ TAO_NAMESPACE RTScheduling TAO_OutputCDR & ACE_ENV_ARG_DECL_NOT_USED ) const; - + virtual void _tao_decode ( TAO_InputCDR & ACE_ENV_ARG_DECL_NOT_USED ); - + // TAO_IDL - Generated from // be/be_visitor_exception/exception_ch.cpp:125 - + virtual CORBA::TypeCode_ptr _type (void) const; }; - + // TAO_IDL - Generated from // be/be_visitor_typecode/typecode_decl.cpp:44 - + static ::CORBA::TypeCode_ptr _tc_INCOMPATIBLE_SCHEDULING_DISCIPLINES; #endif /* end #if !defined */ - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual ::CORBA::PolicyList * scheduling_policies ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS ) ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void scheduling_policies ( const CORBA::PolicyList & scheduling_policies ACE_ENV_ARG_DECL_WITH_DEFAULTS @@ -1020,30 +1010,30 @@ TAO_NAMESPACE RTScheduling ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual ::CORBA::PolicyList * poa_policies ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS ) ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual char * scheduling_discipline_name ( ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS ) ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual ::RTScheduling::ResourceManager_ptr create_resource_manager ( const char * name, CORBA::Policy_ptr scheduling_parameter @@ -1052,10 +1042,10 @@ TAO_NAMESPACE RTScheduling ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void set_scheduling_parameter ( PortableServer::Servant & resource, const char * name, @@ -1065,10 +1055,10 @@ TAO_NAMESPACE RTScheduling ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void begin_new_scheduling_segment ( const RTScheduling::Current::IdType & guid, const char * name, @@ -1080,10 +1070,10 @@ TAO_NAMESPACE RTScheduling CORBA::SystemException , RTScheduling::Current::UNSUPPORTED_SCHEDULING_DISCIPLINE )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void begin_nested_scheduling_segment ( const RTScheduling::Current::IdType & guid, const char * name, @@ -1095,10 +1085,10 @@ TAO_NAMESPACE RTScheduling CORBA::SystemException , RTScheduling::Current::UNSUPPORTED_SCHEDULING_DISCIPLINE )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void update_scheduling_segment ( const RTScheduling::Current::IdType & guid, const char * name, @@ -1110,10 +1100,10 @@ TAO_NAMESPACE RTScheduling CORBA::SystemException , RTScheduling::Current::UNSUPPORTED_SCHEDULING_DISCIPLINE )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void end_scheduling_segment ( const RTScheduling::Current::IdType & guid, const char * name @@ -1122,10 +1112,10 @@ TAO_NAMESPACE RTScheduling ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void end_nested_scheduling_segment ( const RTScheduling::Current::IdType & guid, const char * name, @@ -1135,10 +1125,10 @@ TAO_NAMESPACE RTScheduling ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void send_request ( PortableInterceptor::ClientRequestInfo_ptr ri ACE_ENV_ARG_DECL_WITH_DEFAULTS @@ -1147,10 +1137,10 @@ TAO_NAMESPACE RTScheduling CORBA::SystemException , PortableInterceptor::ForwardRequest )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void receive_request ( PortableInterceptor::ServerRequestInfo_ptr ri, RTScheduling::Current::IdType_out guid, @@ -1163,10 +1153,10 @@ TAO_NAMESPACE RTScheduling CORBA::SystemException , PortableInterceptor::ForwardRequest )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void send_reply ( PortableInterceptor::ServerRequestInfo_ptr ri ACE_ENV_ARG_DECL_WITH_DEFAULTS @@ -1174,10 +1164,10 @@ TAO_NAMESPACE RTScheduling ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void send_exception ( PortableInterceptor::ServerRequestInfo_ptr ri ACE_ENV_ARG_DECL_WITH_DEFAULTS @@ -1186,10 +1176,10 @@ TAO_NAMESPACE RTScheduling CORBA::SystemException , PortableInterceptor::ForwardRequest )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void send_other ( PortableInterceptor::ServerRequestInfo_ptr ri ACE_ENV_ARG_DECL_WITH_DEFAULTS @@ -1198,10 +1188,10 @@ TAO_NAMESPACE RTScheduling CORBA::SystemException , PortableInterceptor::ForwardRequest )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void receive_reply ( PortableInterceptor::ClientRequestInfo_ptr ri ACE_ENV_ARG_DECL_WITH_DEFAULTS @@ -1209,10 +1199,10 @@ TAO_NAMESPACE RTScheduling ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void receive_exception ( PortableInterceptor::ClientRequestInfo_ptr ri ACE_ENV_ARG_DECL_WITH_DEFAULTS @@ -1221,10 +1211,10 @@ TAO_NAMESPACE RTScheduling CORBA::SystemException , PortableInterceptor::ForwardRequest )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void receive_other ( PortableInterceptor::ClientRequestInfo_ptr ri ACE_ENV_ARG_DECL_WITH_DEFAULTS @@ -1233,10 +1223,10 @@ TAO_NAMESPACE RTScheduling CORBA::SystemException , PortableInterceptor::ForwardRequest )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_operation/operation_ch.cpp:46 - + virtual void cancel ( const RTScheduling::Current::IdType & guid ACE_ENV_ARG_DECL_WITH_DEFAULTS @@ -1244,29 +1234,29 @@ TAO_NAMESPACE RTScheduling ACE_THROW_SPEC (( CORBA::SystemException )) = 0; - + // TAO_IDL - Generated from // be/be_visitor_interface/interface_ch.cpp:207 - + virtual void *_tao_QueryInterface (ptrdiff_t type); - + virtual const char* _interface_repository_id (void) const; virtual CORBA::Boolean marshal (TAO_OutputCDR &cdr); - + protected: Scheduler (void); virtual ~Scheduler (void); - + private: Scheduler (const Scheduler &); void operator= (const Scheduler &); }; #endif /* end #if !defined */ - + // TAO_IDL - Generated from // be/be_visitor_typecode/typecode_decl.cpp:44 - + TAO_NAMESPACE_STORAGE_CLASS ::CORBA::TypeCode_ptr _tc_Scheduler; // TAO_IDL - Generated from @@ -1375,4 +1365,3 @@ TAO_RTScheduler_Export CORBA::Boolean operator>>= (const CORBA::Any &, const RTS #include /**/ "ace/post.h" #endif /* ifndef */ - diff --git a/TAO/tao/Remote_Invocation.cpp b/TAO/tao/Remote_Invocation.cpp index 2fdb2e46130..ac51813b8c0 100644 --- a/TAO/tao/Remote_Invocation.cpp +++ b/TAO/tao/Remote_Invocation.cpp @@ -30,6 +30,22 @@ namespace TAO Remote_Invocation::init_target_spec (TAO_Target_Specification &target_spec ACE_ENV_ARG_DECL) { + + /** + * Mega hack for RTCORBA start. I don't think that + * PortableInterceptor would work here esp. for RTCORBA. PI needs + * to be improved to help our cause. + */ + this->resolver_.stub ()->orb_core ()->service_context_list ( + this->resolver_.stub (), + this->details_.request_service_context (), + 0 + ACE_ENV_ARG_PARAMETER); + ACE_CHECK; + /** + * Mega hack for RTCORBA END + */ + TAO_Profile *pfile = this->resolver_.profile (); diff --git a/TAO/tao/Synch_Invocation.cpp b/TAO/tao/Synch_Invocation.cpp index ff3a8b1a3c7..38242303394 100644 --- a/TAO/tao/Synch_Invocation.cpp +++ b/TAO/tao/Synch_Invocation.cpp @@ -58,6 +58,8 @@ namespace TAO } + + TAO_Target_Specification tspec; this->init_target_spec (tspec ACE_ENV_ARG_PARAMETER); ACE_CHECK_RETURN (TAO_INVOKE_FAILURE); diff --git a/TAO/tao/TODO b/TAO/tao/TODO index a57556e2a8f..6afaff79a4f 100644 --- a/TAO/tao/TODO +++ b/TAO/tao/TODO @@ -55,4 +55,7 @@ . Complete documentation +. Add the BAD_PARAM exception for bounded strings + +. Different versions of GIOP diff --git a/TAO/tao/Transport_Connector.cpp b/TAO/tao/Transport_Connector.cpp index 8d118dbb0c2..07111771506 100644 --- a/TAO/tao/Transport_Connector.cpp +++ b/TAO/tao/Transport_Connector.cpp @@ -267,15 +267,14 @@ TAO_Connector::connect (TAO_GIOP_Invocation *invocation, TAO_Transport* TAO_Connector::connect (TAO::Profile_Transport_Resolver *r, - TAO_Endpoint *ep, + TAO_Transport_Descriptor_Interface *desc, ACE_Time_Value *timeout ACE_ENV_ARG_DECL_NOT_USED) { - if (this->set_validate_endpoint (ep) == -1) + if ((this->set_validate_endpoint (desc->endpoint ()) == -1) || + desc == 0) return 0; - TAO_Base_Transport_Property desc (ep); - TAO_Transport *base_transport = 0; // Check the Cache first for connections @@ -283,7 +282,7 @@ TAO_Connector::connect (TAO::Profile_Transport_Resolver *r, // @@todo: We need to send the timeout value to the cache registry // too. That should be the next step! if (this->orb_core ()->lane_resources ().transport_cache ().find_transport ( - &desc, + desc, base_transport) == 0) { if (TAO_debug_level > 2) @@ -302,7 +301,7 @@ TAO_Connector::connect (TAO::Profile_Transport_Resolver *r, this->orb_core_->lane_resources ().transport_cache ().purge (); return this->make_connection (r, - desc, + *desc, timeout); } diff --git a/TAO/tao/Transport_Connector.h b/TAO/tao/Transport_Connector.h index f53e51fabe0..0da20ecb238 100644 --- a/TAO/tao/Transport_Connector.h +++ b/TAO/tao/Transport_Connector.h @@ -101,7 +101,7 @@ public: * Call is very similar to the previous one but with a timeout. */ virtual TAO_Transport* connect (TAO::Profile_Transport_Resolver *r, - TAO_Endpoint *ep, + TAO_Transport_Descriptor_Interface *desc, ACE_Time_Value *timeout ACE_ENV_ARG_DECL); |