summaryrefslogtreecommitdiff
path: root/TAO/utils/nslist/nsadd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/utils/nslist/nsadd.cpp')
-rw-r--r--TAO/utils/nslist/nsadd.cpp129
1 files changed, 129 insertions, 0 deletions
diff --git a/TAO/utils/nslist/nsadd.cpp b/TAO/utils/nslist/nsadd.cpp
new file mode 100644
index 00000000000..24a9abbffcb
--- /dev/null
+++ b/TAO/utils/nslist/nsadd.cpp
@@ -0,0 +1,129 @@
+// $Id$
+
+// ================================================================
+//
+// = LIBRARY
+// utils
+//
+// = FILENAME
+// nsadd.cpp
+//
+// = DESCRIPTION
+// Naming Service add utility
+//
+// = AUTHOR
+// Carlos O'Ryan
+//
+// ================================================================
+
+#include "orbsvcs/CosNamingC.h"
+
+CORBA::ORB_var orb;
+int showIOR = 0;
+int showNSonly = 0;
+
+int
+main (int argc, char *argv[])
+{
+ ACE_DECLARE_NEW_CORBA_ENV;
+ ACE_TRY
+ {
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc, argv, "", ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ char *pname = argv[0];
+
+ const char * ior = 0;
+ const char * name = 0;
+ int rebind = 0;
+ while (argc > 0)
+ {
+ if (strcmp(*argv, "--ior") == 0)
+ {
+ if (argc == 1)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Error: --ior requires an argument\n"));
+ return 1;
+ }
+ argc--;
+ argv++;
+ ior = *argv;
+ }
+ else if (strcmp(*argv, "--name") == 0)
+ {
+ if (argc == 1)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Error: --name requires an argument\n"));
+ return 1;
+ }
+ argc--;
+ argv++;
+ name = *argv;
+ }
+ else if (strcmp(*argv, "--rebind") == 0)
+ {
+ rebind = 1;
+ }
+ else if (strncmp(*argv, "--", 2) == 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Usage: %s --name <name> "
+ "--ior <ior> [ --rebind ] \n", pname));
+ return 1;
+ }
+ argc--;
+ argv++;
+ }
+ if (ior == 0 || name == 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Usage: %s --name <name> "
+ "--ior <ior> [ --rebind ] \n", pname));
+ return 1;
+ }
+
+ CORBA::Object_var obj =
+ orb->string_to_object (ior, ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ CORBA::Object_var nc_obj =
+ orb->resolve_initial_references ("NameService", ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+
+ CosNaming::NamingContext_var root_nc =
+ CosNaming::NamingContext::_narrow (nc_obj.in (), ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ if (CORBA::is_nil (root_nc.in ()))
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Error: nil naming context\n"));
+ return 1;
+ }
+
+ CosNaming::Name the_name (1);
+ the_name.length (1);
+ the_name[0].id = CORBA::string_dup (name);
+ if (rebind)
+ {
+ root_nc->rebind (the_name, obj, ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ }
+ else
+ {
+ root_nc->bind (the_name, obj, ACE_TRY_ENV);
+ ACE_TRY_CHECK;
+ }
+ }
+ ACE_CATCHANY
+ {
+ ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION,
+ "Exception in nsadd");
+ return 1;
+ }
+ ACE_ENDTRY;
+
+ return 0;
+}