diff options
Diffstat (limited to 'ACE/apps/Gateway/Peer/Options.cpp')
-rw-r--r-- | ACE/apps/Gateway/Peer/Options.cpp | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/ACE/apps/Gateway/Peer/Options.cpp b/ACE/apps/Gateway/Peer/Options.cpp new file mode 100644 index 00000000000..0b33552e629 --- /dev/null +++ b/ACE/apps/Gateway/Peer/Options.cpp @@ -0,0 +1,201 @@ +// $Id$ + +#define ACE_BUILD_SVC_DLL + +#include "ace/Get_Opt.h" +#include "ace/Log_Msg.h" +#include "ace/OS_NS_stdlib.h" +#include "ace/OS_NS_strings.h" +#include "ace/OS_NS_string.h" +#include "ace/OS_Memory.h" +#include "Options.h" + +ACE_RCSID(Peer, Options, "$Id$") + +// Static initialization. +Options *Options::instance_ = 0; + +void +Options::print_usage_and_die (void) +{ + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("%n [-a {C|S}:acceptor-port] [-c {C|S}:connector-port] [-C connection-id] [-h gateway-host] [-q max-queue-size] [-t timeout] [-v]\n"))); + ACE_OS::exit (1); +} + +Options::Options (void) + : options_ (0), + supplier_acceptor_port_ (DEFAULT_PEER_SUPPLIER_PORT), + consumer_acceptor_port_ (DEFAULT_PEER_CONSUMER_PORT), + supplier_connector_port_ (DEFAULT_GATEWAY_SUPPLIER_PORT), + consumer_connector_port_ (DEFAULT_GATEWAY_CONSUMER_PORT), + connector_host_ (ACE_DEFAULT_SERVER_HOST), + timeout_ (0), + max_queue_size_ (MAX_QUEUE_SIZE), + connection_id_ (0) +{ + char *timeout = ACE_OS::getenv ("TIMEOUT"); + + if (timeout == 0) + this->timeout_ = Options::DEFAULT_TIMEOUT; + else + this->timeout_ = ACE_OS::atoi (timeout); +} + +Options * +Options::instance (void) +{ + if (Options::instance_ == 0) + ACE_NEW_RETURN (Options::instance_, Options, 0); + + return Options::instance_; +} + +long +Options::timeout (void) const +{ + return this->timeout_; +} + +CONNECTION_ID & +Options::connection_id (void) +{ + return this->connection_id_; +} + +long +Options::max_queue_size (void) const +{ + return this->max_queue_size_; +} + +u_short +Options::consumer_acceptor_port (void) const +{ + return this->consumer_acceptor_port_; +} + +u_short +Options::supplier_acceptor_port (void) const +{ + return this->supplier_acceptor_port_; +} + +u_short +Options::consumer_connector_port (void) const +{ + return this->consumer_connector_port_; +} + +u_short +Options::supplier_connector_port (void) const +{ + return this->supplier_connector_port_; +} + +const ACE_TCHAR * +Options::connector_host (void) const +{ + return this->connector_host_; +} + +int +Options::enabled (int option) const +{ + return ACE_BIT_ENABLED (this->options_, option); +} + +void +Options::parse_args (int argc, ACE_TCHAR *argv[]) +{ + ACE_Get_Opt get_opt (argc, argv, ACE_TEXT ("a:c:C:h:m:t:v"), 0); + + for (int c; (c = get_opt ()) != -1; ) + { + switch (c) + { + case 'a': + { + // Become an Acceptor. + + for (ACE_TCHAR *flag = ACE_OS::strtok (get_opt.opt_arg (), + ACE_TEXT ("|")); + flag != 0; + flag = ACE_OS::strtok (0, ACE_TEXT ("|"))) + if (ACE_OS::strncasecmp (flag, ACE_TEXT ("C"), 1) == 0) + { + ACE_SET_BITS (this->options_, + Options::CONSUMER_ACCEPTOR); + if (ACE_OS::strlen (flag) > 1) + // Set the Consumer Acceptor port number. + this->consumer_acceptor_port_ = ACE_OS::atoi (flag + 2); + } + else if (ACE_OS::strncasecmp (flag, ACE_TEXT ("S"), 1) == 0) + { + ACE_SET_BITS (this->options_, + Options::SUPPLIER_ACCEPTOR); + if (ACE_OS::strlen (flag) > 1) + // Set the Supplier Acceptor port number. + this->supplier_acceptor_port_ = ACE_OS::atoi (flag + 2); + } + } + break; + /* NOTREACHED */ + case 'c': + { + // Become a Connector. + + for (ACE_TCHAR *flag = ACE_OS::strtok (get_opt.opt_arg (), + ACE_TEXT ("|")); + flag != 0; + flag = ACE_OS::strtok (0, ACE_TEXT ("|"))) + if (ACE_OS::strncasecmp (flag, ACE_TEXT ("C"), 1) == 0) + { + ACE_SET_BITS (this->options_, + Options::CONSUMER_CONNECTOR); + if (ACE_OS::strlen (flag) > 1) + // Set the Consumer Connector port number. + this->consumer_connector_port_ = ACE_OS::atoi (flag + 2); + } + else if (ACE_OS::strncasecmp (flag, ACE_TEXT ("S"), 1) == 0) + { + ACE_SET_BITS (this->options_, + Options::SUPPLIER_CONNECTOR); + if (ACE_OS::strlen (flag) > 1) + // Set the Supplier Connector port number. + this->supplier_connector_port_ = ACE_OS::atoi (flag + 2); + } + } + break; + /* NOTREACHED */ + case 'C': + this->connection_id_ = ACE_OS::atoi (get_opt.opt_arg ()); + break; + /* NOTREACHED */ + case 'h': + // connector host + this->connector_host_ = get_opt.opt_arg (); + break; + /* NOTREACHED */ + case 'm': + // max queue size. + this->max_queue_size_ = ACE_OS::atoi (get_opt.opt_arg ()); + break; + /* NOTREACHED */ + case 't': + // Timeout + this->timeout_ = ACE_OS::atoi (get_opt.opt_arg ()); + break; + /* NOTREACHED */ + case 'v': + // Verbose mode. + ACE_SET_BITS (this->options_, Options::VERBOSE); + break; + /* NOTREACHED */ + default: + this->print_usage_and_die (); + /* NOTREACHED */ + } + } +} + |