summaryrefslogtreecommitdiff
path: root/TAO/tao/tao_internals.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/tao_internals.cpp')
-rw-r--r--TAO/tao/tao_internals.cpp93
1 files changed, 93 insertions, 0 deletions
diff --git a/TAO/tao/tao_internals.cpp b/TAO/tao/tao_internals.cpp
new file mode 100644
index 00000000000..a65f0c203cb
--- /dev/null
+++ b/TAO/tao/tao_internals.cpp
@@ -0,0 +1,93 @@
+// $Id$
+
+#include "tao/tao_internals.h"
+
+#include "ace/Service_Config.h"
+#include "ace/Service_Repository.h"
+#include "ace/Object_Manager.h"
+#include "tao/default_server.h"
+#include "tao/default_client.h"
+
+int TAO_Internal::service_open_count_ = 0;
+
+int
+TAO_Internal::fake_service_entries_i (void)
+{
+#if defined (TAO_PLATFORM_SVC_CONF_FILE_NOTSUP)
+#define FAKE_SVC_ENTRY(svcname, svctype, argc, argv) \
+ do \
+ { \
+ ACE_Service_Object *obj = _make_##svctype (); \
+ obj->init (argc, argv); \
+ ACE_Service_Repository::instance()->insert \
+ (new ACE_Service_Type (svcname,\
+ new ACE_Service_Object_Type\
+ (obj, svcname, \
+ (ACE_Service_Type::DELETE_OBJ \
+ | ACE_Service_Type::DELETE_THIS)), \
+ 0, 1));\
+ }\
+ while (0) //;
+
+ // char *rfactory_args[] = { "-ORBresources", "global" };
+ char *rfactory_args[] = { "-ORBresources", "tss" };
+ FAKE_SVC_ENTRY ("Resource_Factory",
+ TAO_Resource_Factory,
+ sizeof rfactory_args / sizeof rfactory_args[0],
+ rfactory_args);
+
+ char *client_args[] = { 0 };
+ FAKE_SVC_ENTRY ("Client_Strategy_Factory",
+ TAO_Default_Client_Strategy_Factory,
+ 0,
+ client_args);
+
+ char* server_args[] = {
+ "-ORBconcurrency", "reactive",
+ "-ORBdemuxstrategy", "dynamic", "-ORBtablesize", "128" };
+ FAKE_SVC_ENTRY ("Server_Strategy_Factory",
+ TAO_Default_Server_Strategy_Factory,
+ sizeof server_args / sizeof server_args[0],
+ server_args);
+#endif /* TAO_PLATFORM_SVC_CONF_FILE_NOTSUP */
+
+ return 0;
+}
+
+int
+TAO_Internal::open_services (int& argc, char** argv)
+{
+ ACE_MT (ACE_GUARD_RETURN (ACE_SYNCH_RECURSIVE_MUTEX, guard, *ACE_Static_Object_Lock::instance (), -1));
+
+ if (TAO_Internal::service_open_count_++ == 0)
+ {
+#if defined (TAO_PLATFORM_SVC_CONF_FILE_NOTSUP)
+ ACE_UNUSED_ARG (argc);
+ ACE_UNUSED_ARG (argv);
+ return fake_service_entries_i ();
+#else
+ return ACE_Service_Config::open (argc, argv);
+#endif /* TAO_PLATFORM_SVC_CONF_FILE_NOTSUP */
+ }
+ else
+ return 0;
+}
+
+TAO_Internal::TAO_Internal (void)
+{
+}
+
+int
+TAO_Internal::close_services (void)
+{
+ ACE_MT (ACE_GUARD_RETURN (ACE_SYNCH_RECURSIVE_MUTEX, guard,
+ *ACE_Static_Object_Lock::instance (), -1));
+
+ if (service_open_count_ == 0)
+ return -1;
+
+// if (--service_open_count_ == 0)
+// return ACE_Service_Config::close ();
+
+ return 0;
+}