summaryrefslogtreecommitdiff
path: root/TAO/tests/DiffServ/client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tests/DiffServ/client.cpp')
-rw-r--r--TAO/tests/DiffServ/client.cpp164
1 files changed, 164 insertions, 0 deletions
diff --git a/TAO/tests/DiffServ/client.cpp b/TAO/tests/DiffServ/client.cpp
new file mode 100644
index 00000000000..a6d9c9f8ca3
--- /dev/null
+++ b/TAO/tests/DiffServ/client.cpp
@@ -0,0 +1,164 @@
+// $Id$
+
+#include "testC.h"
+#include "ace/Get_Opt.h"
+#include "tao/Policy_Manager.h"
+#include "tao/DiffServPolicy/DiffServPolicy.h"
+#include "tao/DiffServPolicy/Client_Network_Priority_Policy.h"
+#include "tao/DiffServPolicy/Server_Network_Priority_Policy.h"
+
+static const char *ior = "file://simple_servant.ior";
+static int iterations = 1;
+
+#define IPDSFIELD_DSCP_DEFAULT 0x00
+#define IPDSFIELD_DSCP_CS1 0x08
+#define IPDSFIELD_DSCP_CS2 0x10
+#define IPDSFIELD_DSCP_CS3 0x18
+#define IPDSFIELD_DSCP_CS4 0x20
+#define IPDSFIELD_DSCP_CS5 0x28
+#define IPDSFIELD_DSCP_CS6 0x30
+#define IPDSFIELD_DSCP_CS7 0x38
+#define IPDSFIELD_DSCP_AF11 0x0A
+#define IPDSFIELD_DSCP_AF12 0x0C
+#define IPDSFIELD_DSCP_AF13 0x0E
+#define IPDSFIELD_DSCP_AF21 0x12
+#define IPDSFIELD_DSCP_AF22 0x14
+#define IPDSFIELD_DSCP_AF23 0x16
+#define IPDSFIELD_DSCP_AF31 0x1A
+#define IPDSFIELD_DSCP_AF32 0x1C
+#define IPDSFIELD_DSCP_AF33 0x1E
+#define IPDSFIELD_DSCP_AF41 0x22
+#define IPDSFIELD_DSCP_AF42 0x24
+#define IPDSFIELD_DSCP_AF43 0x26
+#define IPDSFIELD_ECT_MASK 0x02
+#define IPDSFIELD_CE_MASK 0x01
+#define IPDSFIELD_DSCP_EF 0x2E
+
+static int const dscp[] =
+{
+ IPDSFIELD_DSCP_DEFAULT ,
+ IPDSFIELD_DSCP_CS1 ,
+ IPDSFIELD_DSCP_CS2 ,
+ IPDSFIELD_DSCP_CS3 ,
+ IPDSFIELD_DSCP_CS4 ,
+ IPDSFIELD_DSCP_CS5 ,
+ IPDSFIELD_DSCP_CS6 ,
+ IPDSFIELD_DSCP_CS7 ,
+ IPDSFIELD_DSCP_AF11 ,
+ IPDSFIELD_DSCP_AF12 ,
+ IPDSFIELD_DSCP_AF13 ,
+ IPDSFIELD_DSCP_AF21 ,
+ IPDSFIELD_DSCP_AF22 ,
+ IPDSFIELD_DSCP_AF23 ,
+ IPDSFIELD_DSCP_AF31 ,
+ IPDSFIELD_DSCP_AF32 ,
+ IPDSFIELD_DSCP_AF33 ,
+ IPDSFIELD_DSCP_AF41 ,
+ IPDSFIELD_DSCP_AF42 ,
+ IPDSFIELD_DSCP_AF43 ,
+ IPDSFIELD_DSCP_EF
+};
+
+int
+parse_args (int argc, char *argv[])
+{
+ ACE_Get_Opt get_opts (argc, argv, "k:n:x:");
+ int c;
+
+ while ((c = get_opts ()) != -1)
+ switch (c)
+ {
+ case 'k':
+ ior = get_opts.opt_arg ();
+ break;
+
+ // number of itarations
+ case 'n':
+ iterations = ACE_OS::atoi (get_opts.opt_arg ());
+ break;
+
+ default:
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "usage: %s\n"
+ "\t-k <ior> [default is %s]\n"
+ "\t-n <number of invocations> [defaults to %d]\n"
+ "\n",
+ argv [0],
+ ior,
+ iterations),
+ -1);
+ }
+
+ return 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ try
+ {
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc, argv, "");
+
+ if (parse_args (argc, argv) != 0)
+ return -1;
+
+ // Initialize and obtain reference to the Test object.
+ CORBA::Object_var client_object =
+ orb->string_to_object (ior);
+
+ Test_var server =
+ Test::_narrow (client_object.in ());
+
+ TAO::DiffservCodepoint request_dscp;
+ TAO::DiffservCodepoint reply_dscp;
+ int request_array_slot = 12;
+ int reply_array_slot = 13;
+ long request_dscp_codepoint = dscp[request_array_slot];
+ long reply_dscp_codepoint = dscp[reply_array_slot];
+ request_dscp = request_dscp_codepoint;
+ reply_dscp = reply_dscp_codepoint;
+
+ CORBA::PolicyList policy_list;
+ policy_list.length (1);
+
+ CORBA::Policy_var client_network_policy =
+ orb->_create_policy (TAO::CLIENT_NETWORK_PRIORITY_TYPE);
+
+ TAO::NetworkPriorityPolicy_var nw_priority =
+ TAO::NetworkPriorityPolicy::_narrow (client_network_policy.in ());
+
+ nw_priority->request_diffserv_codepoint (
+ request_dscp);
+
+ nw_priority->reply_diffserv_codepoint (
+ reply_dscp);
+
+ nw_priority->network_priority_model (
+ TAO::CLIENT_PROPAGATED_NETWORK_PRIORITY);
+
+ policy_list[0] = TAO::NetworkPriorityPolicy::_duplicate (nw_priority.in ());
+
+ CORBA::Object_var over_ridden_object = server->_set_policy_overrides (
+ policy_list, CORBA::SET_OVERRIDE);
+
+ policy_list[0]->destroy ();
+
+ server = Test::_narrow (over_ridden_object.in ());
+
+ // Make several invocation,
+ for (int i = 0; i < iterations; ++i)
+ {
+ server->test_method ();
+ }
+
+ server->shutdown ();
+ }
+ catch (const CORBA::Exception& ex)
+ {
+ ex._tao_print_exception ("Caught exception:");
+ return -1;
+ }
+
+ return 0;
+}