summaryrefslogtreecommitdiff
path: root/ACE/apps/Gateway/Peer/Options.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/apps/Gateway/Peer/Options.cpp')
-rw-r--r--ACE/apps/Gateway/Peer/Options.cpp201
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 */
+ }
+ }
+}
+