diff options
Diffstat (limited to 'tests/Bug_3926_Regression/server.cpp')
-rw-r--r-- | tests/Bug_3926_Regression/server.cpp | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/tests/Bug_3926_Regression/server.cpp b/tests/Bug_3926_Regression/server.cpp new file mode 100644 index 00000000000..99a2277b57c --- /dev/null +++ b/tests/Bug_3926_Regression/server.cpp @@ -0,0 +1,109 @@ +// -*- C++ -*- +// $Id$ + +#include "test_i.h" + +#include "ace/Get_Opt.h" +#include "ace/OS_NS_stdio.h" + +const ACE_TCHAR *ior_file = 0; + +int +parse_args (int argc, ACE_TCHAR *argv[]) +{ + ACE_Get_Opt get_opts (argc, argv, ACE_TEXT("o:")); + int c; + + while ((c = get_opts ()) != -1) + switch (c) + { + case 'o': + ior_file = get_opts.opt_arg (); + break; + default: + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("Usage: %s ") + ACE_TEXT ("-o IOR\n"), + argv[0]), + -1); + } + + return 0; +} + +int +ACE_TMAIN(int argc, ACE_TCHAR *argv[]) +{ + try + { + CORBA::ORB_var orb = + CORBA::ORB_init (argc, argv); + + CORBA::Object_var poa_object = + orb->resolve_initial_references ("RootPOA"); + + if (CORBA::is_nil (poa_object.in ())) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("SERVER: Unable to initialize the POA.\n")), + 1); + + PortableServer::POA_var root_poa = + PortableServer::POA::_narrow (poa_object.in ()); + + PortableServer::POAManager_var poa_manager = + root_poa->the_POAManager (); + + if (::parse_args (argc, argv) != 0) + return -1; + + // Servant + test_i *servant = 0; + ACE_NEW_RETURN (servant, + test_i (0, orb.in ()), + -1); + PortableServer::ServantBase_var safe (servant); + + PortableServer::ObjectId_var oid = + root_poa->activate_object (servant); + + CORBA::Object_var obj = + root_poa->servant_to_reference (servant); + + CORBA::String_var ior = + orb->object_to_string (obj.in ()); + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("SERVER: test_i servant: <%C>\n"), + ior.in ())); + + poa_manager->activate (); + + // IOR + FILE *output_file= ACE_OS::fopen (ior_file, "w"); + if (output_file == 0) + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("SERVER: Cannot open output file <%s> ") + ACE_TEXT ("for writting IOR: %C"), + ior_file, + ior.in ()), + 1); + ACE_OS::fprintf (output_file, "%s", ior.in ()); + ACE_OS::fclose (output_file); + + // Run the ORB event loop. + orb->run (); + + root_poa->destroy (1, 1); + + orb->destroy (); + + ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("SERVER: Event loop finished.\n"))); + } + catch (const CORBA::Exception& ex) + { + ex._tao_print_exception ("Caught exception:"); + return -1; + } + + return 0; +} |