Public Member Functions

TAO_DiffServ_Network_Priority_Hook Class Reference

#include <DiffServ_Network_Priority_Hook.h>

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

List of all members.

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)

Detailed Description

Definition at line 30 of file DiffServ_Network_Priority_Hook.h.


Constructor & Destructor Documentation

TAO_DiffServ_Network_Priority_Hook::~TAO_DiffServ_Network_Priority_Hook ( void   )  [virtual]

Definition at line 23 of file DiffServ_Network_Priority_Hook.cpp.

{
}


Member Function Documentation

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);
            }
        }
    }
}


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