#include <DiffServ_Network_Priority_Hook.h>


Public Member Functions | |
| virtual | ~TAO_DiffServ_Network_Priority_Hook (void) |
| void | update_network_priority (TAO_Root_POA &poa, TAO_POA_Policy_Set &poa_policy_set) |
| void | set_dscp_codepoint (TAO_ServerRequest &req, TAO_Root_POA &poa) |
Definition at line 30 of file DiffServ_Network_Priority_Hook.h.
| TAO_DiffServ_Network_Priority_Hook::~TAO_DiffServ_Network_Priority_Hook | ( | void | ) | [virtual] |
Definition at line 23 of file DiffServ_Network_Priority_Hook.cpp.
{
}
| void TAO_DiffServ_Network_Priority_Hook::set_dscp_codepoint | ( | TAO_ServerRequest & | req, | |
| TAO_Root_POA & | poa | |||
| ) | [virtual] |
This function is a hook, that is used by the POA's servant dispatcher when it tries to assign DiffServ codepoints on the replies.
Reimplemented from TAO_Network_Priority_Hook.
Definition at line 65 of file DiffServ_Network_Priority_Hook.cpp.
{
CORBA::Long dscp_codepoint = 0;
TAO_Service_Context &request_service_context =
req.request_service_context ();
TAO_Network_Priority_Protocols_Hooks *nph =
poa.orb_core ().get_network_priority_protocols_hooks ();
TAO::Portable_Server::Cached_Policies::NetworkPriorityModel npm =
poa.cached_policies ().network_priority_model ();
if (npm == TAO::Portable_Server::Cached_Policies::
CLIENT_PROPAGATED_NETWORK_PRIORITY)
{
if (nph != 0)
{
dscp_codepoint = nph->get_dscp_codepoint (request_service_context);
}
}
else if (npm == TAO::Portable_Server::Cached_Policies::
SERVER_DECLARED_NETWORK_PRIORITY)
{
dscp_codepoint = poa.cached_policies ().reply_diffserv_codepoint ();
}
TAO_Connection_Handler *connection_handler =
req.transport ()->connection_handler ();
connection_handler->set_dscp_codepoint (dscp_codepoint);
}
| void TAO_DiffServ_Network_Priority_Hook::update_network_priority | ( | TAO_Root_POA & | poa, | |
| TAO_POA_Policy_Set & | poa_policy_set | |||
| ) | [virtual] |
This function is a hook, that is called from the Root_POA's constructor. It allows the POA to cache the server side network priority policy, so that it can be used for sending replies with the policy-specified DiffServ codepoint.
Reimplemented from TAO_Network_Priority_Hook.
Definition at line 28 of file DiffServ_Network_Priority_Hook.cpp.
{
for (CORBA::ULong i = 0; i < policy_set.num_policies (); i++)
{
CORBA::Policy_var policy = policy_set.get_policy_by_index (i);
if (policy->policy_type () == TAO::NETWORK_PRIORITY_TYPE)
{
::TAO::NetworkPriorityPolicy_var npp =
::TAO::NetworkPriorityPolicy::_narrow (policy.in ());
if (!CORBA::is_nil (npp.in ()))
{
TAO::NetworkPriorityModel network_priority_model =
npp->network_priority_model ();
poa.cached_policies ().network_priority_model (
TAO::Portable_Server::Cached_Policies::NetworkPriorityModel (
network_priority_model));
TAO::DiffservCodepoint request_diffserv_codepoint =
npp->request_diffserv_codepoint ();
TAO::DiffservCodepoint reply_diffserv_codepoint =
npp->reply_diffserv_codepoint ();
poa.cached_policies ().request_diffserv_codepoint (
request_diffserv_codepoint);
poa.cached_policies ().reply_diffserv_codepoint (
reply_diffserv_codepoint);
}
}
}
}
1.7.0