#include <RT_Stub.h>


This class represent a stub with extended functionality, which are needed for RTCORBA.
Definition at line 48 of file RT_Stub.h.
| TAO_RT_Stub::TAO_RT_Stub | ( | const char * | repository_id, | |
| const TAO_MProfile & | profiles, | |||
| TAO_ORB_Core * | orb_core | |||
| ) |
Definition at line 20 of file RT_Stub.cpp.
: TAO_Stub (repository_id, profiles, orb_core), priority_model_policy_ (0), priority_banded_connection_policy_ (0), client_protocol_policy_ (0), are_policies_parsed_ (false) { }
| TAO_RT_Stub::~TAO_RT_Stub | ( | void | ) | [virtual] |
Definition at line 33 of file RT_Stub.cpp.
{
if (this->priority_model_policy_.in ())
this->priority_model_policy_->destroy ();
if (this->priority_banded_connection_policy_.in ())
this->priority_banded_connection_policy_->destroy ();
if (this->client_protocol_policy_.in ())
this->client_protocol_policy_->destroy ();
}
| TAO_RT_Stub::TAO_RT_Stub | ( | const TAO_RT_Stub & | ) | [private] |
| CORBA::Policy_ptr TAO_RT_Stub::effective_client_protocol | ( | void | ) | [private] |
Definition at line 254 of file RT_Stub.cpp.
{
// Get effective override.
CORBA::Policy_var override =
this->TAO_Stub::get_cached_policy (TAO_CACHED_POLICY_RT_CLIENT_PROTOCOL);
// Get the value from the ior.
CORBA::Policy_var exposed =
this->exposed_client_protocol ();
// Reconcile client-exposed and locally set values.
if (CORBA::is_nil (exposed.in ()))
return override._retn ();
if (CORBA::is_nil (override.in ()))
return exposed._retn ();
RTCORBA::ClientProtocolPolicy_var override_policy_var =
RTCORBA::ClientProtocolPolicy::_narrow (override.in ());
TAO_ClientProtocolPolicy *override_policy =
dynamic_cast<TAO_ClientProtocolPolicy *> (override_policy_var.in ());
RTCORBA::ClientProtocolPolicy_var exposed_policy_var =
RTCORBA::ClientProtocolPolicy::_narrow (exposed.in ());
TAO_ClientProtocolPolicy *exposed_policy =
dynamic_cast<TAO_ClientProtocolPolicy *> (exposed_policy_var.in ());
if (!override_policy || !exposed_policy)
{
throw ::CORBA::INV_POLICY ();
}
// Both override and exposed have been set.
// See if either of them has empty priority bands.
RTCORBA::ProtocolList &protocols_rep_var =
exposed_policy->protocols_rep ();
if (protocols_rep_var.length () == 0)
return override._retn ();
if (override_policy->protocols_rep ().length () == 0)
return exposed._retn ();
// Both override and exposed have been set and neither has empty
// protocols. This is illegal (ptc/99-05-03, sec. 4.15.4).
throw ::CORBA::INV_POLICY ();
}
| CORBA::Policy_ptr TAO_RT_Stub::effective_priority_banded_connection | ( | void | ) | [private] |
Definition at line 206 of file RT_Stub.cpp.
{
// Get effective override.
CORBA::Policy_var override =
this->TAO_Stub::get_cached_policy (
TAO_CACHED_POLICY_RT_PRIORITY_BANDED_CONNECTION);
// Get the value from the ior.
CORBA::Policy_var exposed = this->exposed_priority_banded_connection ();
// Reconcile client-exposed and locally set values.
if (CORBA::is_nil (exposed.in ()))
return override._retn ();
if (CORBA::is_nil (override.in ()))
return exposed._retn ();
RTCORBA::PriorityBandedConnectionPolicy_var override_policy_var =
RTCORBA::PriorityBandedConnectionPolicy::_narrow (override.in ());
TAO_PriorityBandedConnectionPolicy *override_policy =
dynamic_cast<TAO_PriorityBandedConnectionPolicy *> (override_policy_var.in ());
RTCORBA::PriorityBandedConnectionPolicy_var exposed_policy_var =
RTCORBA::PriorityBandedConnectionPolicy::_narrow (exposed.in ());
TAO_PriorityBandedConnectionPolicy *exposed_policy =
dynamic_cast<TAO_PriorityBandedConnectionPolicy *> (exposed_policy_var.in ());
if (!override_policy || !exposed_policy)
{
throw ::CORBA::INV_POLICY ();
}
// Both override and exposed have been set.
// See if either of them has empty priority bands.
if (exposed_policy->priority_bands_rep ().length () == 0)
return override._retn ();
if (override_policy->priority_bands_rep ().length () == 0)
return exposed._retn ();
// Both override and exposed have been set and neither has empty
// priority bands. This is illegal (ptc/99-05-03, sec. 4.12.1).
throw ::CORBA::INV_POLICY ();
}
| void TAO_RT_Stub::exposed_client_protocol | ( | CORBA::Policy_ptr | policy | ) | [private] |
Definition at line 124 of file RT_Stub.cpp.
{
this->client_protocol_policy_ = CORBA::Policy::_duplicate (policy);
}
| CORBA::Policy * TAO_RT_Stub::exposed_client_protocol | ( | void | ) | [private] |
Returns the CORBA::Policy (which will be narrowed and used as RTCORBA::ClientProtocolPolicy) exported in object's IOR.
Definition at line 113 of file RT_Stub.cpp.
{
if (!this->are_policies_parsed_)
{
this->parse_policies ();
}
return CORBA::Policy::_duplicate (this->client_protocol_policy_.in ());
}
| CORBA::Policy * TAO_RT_Stub::exposed_priority_banded_connection | ( | void | ) | [private] |
Returns the CORBA::Policy (which will be narrowed and used as RTCORBA::PriorityBandedConnectionPolicy) exported in object's IOR.
Definition at line 96 of file RT_Stub.cpp.
{
if (!this->are_policies_parsed_)
{
this->parse_policies ();
}
return CORBA::Policy::_duplicate (this->priority_banded_connection_policy_.in ());
}
| void TAO_RT_Stub::exposed_priority_banded_connection | ( | CORBA::Policy_ptr | policy | ) | [private] |
Definition at line 107 of file RT_Stub.cpp.
{
this->priority_banded_connection_policy_ = CORBA::Policy::_duplicate (policy);
}
| CORBA::Policy * TAO_RT_Stub::exposed_priority_model | ( | void | ) | [private] |
Returns the CORBA::Policy (which will be narrowed to be used as RTCORBA::PriorityModelPolicy) exported in object's IOR.
Definition at line 79 of file RT_Stub.cpp.
{
if (!this->are_policies_parsed_)
{
this->parse_policies ();
}
return CORBA::Policy::_duplicate (this->priority_model_policy_.in ());
}
| void TAO_RT_Stub::exposed_priority_model | ( | CORBA::Policy_ptr | policy | ) | [private] |
Definition at line 90 of file RT_Stub.cpp.
{
this->priority_model_policy_ = CORBA::Policy::_duplicate (policy);
}
| CORBA::Policy_ptr TAO_RT_Stub::get_cached_policy | ( | TAO_Cached_Policy_Type | type | ) | [virtual] |
Reimplemented from TAO_Stub.
Definition at line 154 of file RT_Stub.cpp.
{
// If we are dealing with a client exposed policy, check if any
// value came in the IOR/reconcile IOR value and overrides.
switch (type)
{
case TAO_CACHED_POLICY_PRIORITY_MODEL:
{
return this->exposed_priority_model ();
}
case TAO_CACHED_POLICY_RT_PRIORITY_BANDED_CONNECTION :
{
return this->effective_priority_banded_connection ();
}
case TAO_CACHED_POLICY_RT_CLIENT_PROTOCOL :
{
return this->effective_client_protocol ();
}
default:
break;
}
return this->TAO_Stub::get_cached_policy (type);
}
| CORBA::Policy_ptr TAO_RT_Stub::get_policy | ( | CORBA::PolicyType | type | ) | [virtual] |
Returns the effective policy if type is a known client-exposed policy type. Returns the effective override for all other policy types.
Reimplemented from TAO_Stub.
Definition at line 130 of file RT_Stub.cpp.
{
// If we are dealing with a client exposed policy, check if any
// value came in the IOR/reconcile IOR value and overrides.
switch (type)
{
case RTCORBA::PRIORITY_MODEL_POLICY_TYPE:
{
return this->exposed_priority_model ();
}
case RTCORBA::PRIORITY_BANDED_CONNECTION_POLICY_TYPE :
{
return this->effective_priority_banded_connection ();
}
case RTCORBA::CLIENT_PROTOCOL_POLICY_TYPE :
{
return this->effective_client_protocol ();
}
}
return this->TAO_Stub::get_policy (type);
}
| TAO_RT_Stub& TAO_RT_Stub::operator= | ( | const TAO_RT_Stub & | ) | [private] |
| void TAO_RT_Stub::parse_policies | ( | void | ) | [private] |
Helper method used to parse the policies.
Definition at line 46 of file RT_Stub.cpp.
{
CORBA::PolicyList_var policy_list
= this->base_profiles_.policy_list ();
CORBA::ULong const length = policy_list->length ();
// Cache away the policies that we'll need later.
for (CORBA::ULong i = 0; i < length; ++i)
{
switch (policy_list[i]->policy_type ())
{
case RTCORBA::PRIORITY_MODEL_POLICY_TYPE:
{
this->exposed_priority_model (policy_list[i]); }
break;
case RTCORBA::PRIORITY_BANDED_CONNECTION_POLICY_TYPE :
{
this->exposed_priority_banded_connection (policy_list[i]);
}
break;
case RTCORBA::CLIENT_PROTOCOL_POLICY_TYPE :
{
this->exposed_client_protocol (policy_list[i]);
}
break;
}
}
this->are_policies_parsed_ = true;
}
| TAO_Stub * TAO_RT_Stub::set_policy_overrides | ( | const CORBA::PolicyList & | policies, | |
| CORBA::SetOverrideType | set_add | |||
| ) | [virtual] |
Reimplemented from TAO_Stub.
Definition at line 181 of file RT_Stub.cpp.
{
// Validity check. Make sure requested policies are allowed to be
// set at this scope.
for (CORBA::ULong i = 0; i < policies.length (); ++i)
{
CORBA::Policy_ptr policy = policies[i];
if (!CORBA::is_nil (policy))
{
CORBA::PolicyType const type = policy->policy_type ();
if (type == RTCORBA::PRIORITY_MODEL_POLICY_TYPE ||
type == RTCORBA::THREADPOOL_POLICY_TYPE ||
type == RTCORBA::SERVER_PROTOCOL_POLICY_TYPE)
throw ::CORBA::NO_PERMISSION ();
}
}
// We are not required to check for consistency of <policies> with
// overrides at other levels or with policies exported in the IOR.
return this->TAO_Stub::set_policy_overrides(policies, set_add);
}
bool TAO_RT_Stub::are_policies_parsed_ [private] |
1.7.0