summaryrefslogtreecommitdiff
path: root/TAO/tao/Dynamic_TP/DTP_Config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/Dynamic_TP/DTP_Config.cpp')
-rw-r--r--TAO/tao/Dynamic_TP/DTP_Config.cpp327
1 files changed, 327 insertions, 0 deletions
diff --git a/TAO/tao/Dynamic_TP/DTP_Config.cpp b/TAO/tao/Dynamic_TP/DTP_Config.cpp
new file mode 100644
index 00000000000..47768ce0b99
--- /dev/null
+++ b/TAO/tao/Dynamic_TP/DTP_Config.cpp
@@ -0,0 +1,327 @@
+// $Id$
+
+#include "tao/Dynamic_TP/DTP_Config.h"
+
+#if defined (TAO_HAS_CORBA_MESSAGING) && TAO_HAS_CORBA_MESSAGING != 0
+
+#include "tao/Dynamic_TP/DTP_ORBInitializer.h"
+
+#include "tao/debug.h"
+#include "ace/Dynamic_Service.h"
+#include "ace/OS_NS_strings.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO_DTP_Config_Registry_Installer::TAO_DTP_Config_Registry_Installer (void)
+{
+ ACE_Service_Config::process_directive (ace_svc_desc_TAO_DTP_Config_Registry);
+}
+
+
+TAO_DTP_Config_Registry::TAO_DTP_Config_Registry (void)
+{
+}
+
+TAO_DTP_Config_Registry::~TAO_DTP_Config_Registry (void)
+{
+}
+
+int
+TAO_DTP_Config_Registry::init (int , ACE_TCHAR* [] )
+{
+ return 0;
+}
+
+bool
+TAO_DTP_Config_Registry::find (const ACE_CString& name,
+ TAO_DTP_Definition &entry)
+{
+ return registry_.find (name, entry) == 0;
+}
+
+int
+TAO_DTP_Config_Registry::bind (const ACE_CString& name,
+ TAO_DTP_Definition &entry)
+{
+ return registry_.bind (name, entry);
+}
+
+int
+TAO_DTP_Config_Registry::rebind (const ACE_CString& name,
+ TAO_DTP_Definition &entry)
+{
+ return registry_.rebind (name, entry);
+}
+
+//-------------------------------------------------------------------------
+
+TAO_DTP_Config::TAO_DTP_Config (void)
+{
+}
+
+TAO_DTP_Config::~TAO_DTP_Config (void)
+{
+}
+
+int
+TAO_DTP_Config::init (int argc, ACE_TCHAR* argv[])
+{
+ TAO_DTP_Definition entry;
+
+ ACE_TCHAR *name = 0;
+ bool overwrite = false;
+
+ int curarg = 0;
+ int r = 0;
+
+ for (curarg = 0; curarg < argc; ++curarg)
+ {
+ long val = 0;
+ if ((r = this->parse_string (curarg,
+ argc,
+ argv,
+ ACE_TEXT("-DTPName"),name )) != 0)
+ {
+ if (r < 0)
+ {
+ return -1;
+ }
+ }
+ else if ((r = this->parse_bool (curarg,
+ argc,
+ argv,
+ ACE_TEXT("-DTPOverwrite"),
+ overwrite )) != 0)
+ {
+ if (r < 0)
+ {
+ return -1;
+ }
+ }
+ else if ((r = this->parse_long (curarg,
+ argc,
+ argv,
+ ACE_TEXT("-DTPMin"),
+ val )) != 0)
+ {
+ if (r < 0)
+ {
+ return -1;
+ }
+ entry.min_threads_ = val;
+ }
+ else if ((r = this->parse_long (curarg,
+ argc,
+ argv,
+ ACE_TEXT("-DTPInit"),
+ val )) != 0)
+ {
+ if (r < 0)
+ {
+ return -1;
+ }
+ entry.init_threads_ = val;
+ }
+ else if ((r = this->parse_long (curarg,
+ argc,
+ argv,
+ ACE_TEXT("-DTPMax"),
+ val )) != 0)
+ {
+ if (r < 0)
+ {
+ return -1;
+ }
+ entry.max_threads_ = val;
+ }
+ else if ((r = this->parse_long (curarg,
+ argc,
+ argv,
+ ACE_TEXT("-DTPStack"),
+ val )) != 0)
+ {
+ if (r < 0)
+ {
+ return -1;
+ }
+ entry.stack_size_ = val;
+ }
+ else if ((r = this->parse_long (curarg,
+ argc,
+ argv,
+ ACE_TEXT("-DTPTImeout"),
+ val )) != 0)
+ {
+ if (r < 0)
+ {
+ return -1;
+ }
+ entry.timeout_ = val;
+ }
+ else if ((r = this->parse_long (curarg,
+ argc,
+ argv,
+ ACE_TEXT("-DTPQueue"),
+ val )) != 0)
+ {
+ if (r < 0)
+ {
+ return -1;
+ }
+ entry.queue_depth_ = val;
+ }
+ else
+ {
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) - DTP_Config - ")
+ ACE_TEXT ("Unrecognized argv[%d], %C\n"),
+ curarg, argv[curarg]));
+ }
+ return -1;
+ }
+ }
+
+ if ((entry.max_threads_ != -1 && entry.max_threads_ < entry.init_threads_) ||
+ (entry.min_threads_ > entry.init_threads_))
+ {
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) - DTP_Config - ")
+ ACE_TEXT ("thread count constraint ")
+ ACE_TEXT ("violated, min: %d <= init: %d <= max: ")
+ ACE_TEXT ("%d or max = -1\n"),
+ entry.min_threads_,
+ entry.init_threads_,
+ entry.max_threads_));
+ }
+ return 0;
+ }
+
+ ACE_CString name_str = name;
+ ACE_Service_Gestalt *current = ACE_Service_Config::current();
+ TAO_DTP_Config_Registry* registry =
+ ACE_Dynamic_Service<TAO_DTP_Config_Registry>::instance
+ (current, "DTP_Config_Registry", true);
+
+ if (registry == 0)
+ {
+ current->process_directive (ace_svc_desc_TAO_DTP_Config_Registry);
+ registry = ACE_Dynamic_Service<TAO_DTP_Config_Registry>::instance
+ (current, "DTP_Config_Registry", true);
+ if (registry == 0)
+ {
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) - DTP_Config - ")
+ ACE_TEXT ("cannot initialize registry\n")));
+ }
+ return -1;
+ }
+ }
+
+ if (!overwrite)
+ {
+ return registry->bind(name_str, entry);
+ }
+ else
+ {
+ return registry->rebind(name_str, entry);
+ }
+ return 0;
+}
+
+int
+TAO_DTP_Config::parse_long (int &curarg,
+ int argc, ACE_TCHAR *argv[],
+ const ACE_TCHAR *match, long &value)
+{
+ ACE_TCHAR *str;
+ int result = this->parse_string (curarg, argc, argv, match, str);
+ if (result < 1)
+ return result;
+
+ ACE_TCHAR *err = 0;
+ value = ACE_OS::strtol (str, &err, 10);
+ if (err && *err != 0)
+ {
+ this->report_option_value_error (match, str);
+ return -1;
+ }
+ return 1;
+}
+
+int
+TAO_DTP_Config::parse_bool (int &curarg,
+ int argc, ACE_TCHAR *argv[],
+ const ACE_TCHAR *match, bool &value)
+{
+ long num;
+ int result = this->parse_long (curarg, argc, argv, match, num);
+ if (result < 1)
+ return result;
+
+ value = num != 0;
+
+ return 1;
+}
+
+int
+TAO_DTP_Config::parse_string (int &curarg,
+ int argc, ACE_TCHAR *argv[],
+ const ACE_TCHAR *match, ACE_TCHAR *&value)
+{
+ if (ACE_OS::strcasecmp (argv[curarg], match) != 0)
+ return 0;
+
+ ++curarg;
+ if (curarg >= argc)
+ {
+ this->report_option_value_error (match, ACE_TEXT("<missing>"));
+ return -1;
+ }
+
+ value = argv[curarg];
+ return 1;
+}
+
+
+void
+TAO_DTP_Config::report_option_value_error (const ACE_TCHAR* option_name,
+ const ACE_TCHAR* option_value)
+{
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG((LM_DEBUG,
+ ACE_TEXT ("TAO (%P|%t) - DTP_Config - unknown ")
+ ACE_TEXT ("argument <%s> for <%s>\n"),
+ option_value, option_name));
+ }
+}
+
+
+/////////////////////////////////////////////////////////////////////
+
+ACE_FACTORY_DEFINE (TAO_Dynamic_TP, TAO_DTP_Config_Registry)
+ACE_STATIC_SVC_DEFINE (TAO_DTP_Config_Registry,
+ ACE_TEXT ("DTP_Config_Registry"),
+ ACE_SVC_OBJ_T,
+ &ACE_SVC_NAME (TAO_DTP_Config_Registry),
+ ACE_Service_Type::DELETE_THIS
+ | ACE_Service_Type::DELETE_OBJ,
+ 0)
+ACE_FACTORY_DEFINE (TAO_Dynamic_TP, TAO_DTP_Config)
+ACE_STATIC_SVC_DEFINE (TAO_DTP_Config,
+ ACE_TEXT ("DTP_Config"),
+ ACE_SVC_OBJ_T,
+ &ACE_SVC_NAME (TAO_DTP_Config),
+ ACE_Service_Type::DELETE_THIS
+ | ACE_Service_Type::DELETE_OBJ,
+ 0)
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#endif /* (TAO_HAS_CORBA_MESSAGING) && TAO_HAS_CORBA_MESSAGING != 0 */
+