proposal & patch: --listen_address to set the address to listen on
Forum » Ongoing Development / Applied patches » proposal & patch: --listen_address to set the address to listen on
started by: esteveesteve
on: 1201193032|%e %b %Y, %H:%M %Z|agohover
number of posts: 2
rss icon RSS: new posts
summary:
This patch against OpenAMQ-1.2c4 adds a new option (--listen_address) to the OpenAMQ broker for specifying the address to listen on. Right now, OpenAMQ (1.2c4) listens on 0.0.0.0 (all interfaces), being able to listen on a specific IP is desirable as it prevents an OpenAMQ server from becoming available to the entire Internet if deployed in a publicly available server, for example.
proposal & patch: --listen_address to set the address to listen on
esteveesteve 1201193032|%e %b %Y, %H:%M %Z|agohover
Copyright (c) 2008 Esteve Fernandez <esteve.fernandez@gmail.com>

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
=== modified file 'OpenAMQ-1.2c4/server/amq_server_agent.c'
--- OpenAMQ-1.2c4.old/OpenAMQ-1.2c4/server/amq_server_agent.c    2008-01-22 14:19:18 +0000
+++ OpenAMQ-1.2c4/OpenAMQ-1.2c4/server/amq_server_agent.c    2008-01-22 17:47:18 +0000
@@ -20723,7 +20723,8 @@
         else {
             apr_pool_create (&pool, icl_global_pool);
             apr_pool_tag (pool, "amq_server_initialise_server)");
-            apr_gethostname (buffer, ICL_SHORTSTR_MAX, pool);
+            icl_shortstr_cpy(buffer, amq_server_config_listen_address (amq_server_config));
+
             apr_sockaddr_info_get (&sockaddr, buffer, APR_UNSPEC, 0, 0, pool);

             while (sockaddr) {
@@ -20780,7 +20781,7 @@
                 }

                 //  Start listening for connections on socket
-                rc = smt_socket_passive (tcb->socket, thread, port, NULL, 500);
+                rc = smt_socket_passive (tcb->socket, thread, port, buffer, 500);
             }
             if (!tcb->socket || (rc != SMT_OK)) {
                 smt_log_print (amq_broker->alert_log,

=== modified file 'OpenAMQ-1.2c4/server/amq_server_config.c'
--- OpenAMQ-1.2c4.old/OpenAMQ-1.2c4/server/amq_server_config.c    2008-01-22 14:19:18 +0000
+++ OpenAMQ-1.2c4/OpenAMQ-1.2c4/server/amq_server_config.c    2008-01-22 17:47:18 +0000
@@ -37,6 +37,8 @@
 #define self_cmdline_help   amq_server_config_cmdline_help
 #define self_cmdline_parse  amq_server_config_cmdline_parse
 #define self_options_help   amq_server_config_options_help
+#define self_set_listen_address  amq_server_config_set_listen_address
+#define self_listen_address  amq_server_config_listen_address
 #define self_set_port       amq_server_config_set_port
 #define self_port           amq_server_config_port
 #define self_set_queue_timeout  amq_server_config_set_queue_timeout
@@ -142,6 +144,12 @@
 #if (defined (BASE_STATS)  ||  defined (BASE_STATS_AMQ_SERVER_CONFIG)  ||  defined (BASE_STATS_AMQ_SERVER_CONFIG_OPTIONS_HELP))
 static icl_stats_t *s_amq_server_config_options_help_stats = NULL;
 #endif
+#if (defined (BASE_STATS)  ||  defined (BASE_STATS_AMQ_SERVER_CONFIG)  ||  defined (BASE_STATS_AMQ_SERVER_CONFIG_SET_LISTEN_ADDRESS))
+static icl_stats_t *s_amq_server_config_set_listen_address_stats = NULL;
+#endif
+#if (defined (BASE_STATS)  ||  defined (BASE_STATS_AMQ_SERVER_CONFIG)  ||  defined (BASE_STATS_AMQ_SERVER_CONFIG_LISTEN_ADDRESS))
+static icl_stats_t *s_amq_server_config_listen_address_stats = NULL;
+#endif
 #if (defined (BASE_STATS)  ||  defined (BASE_STATS_AMQ_SERVER_CONFIG)  ||  defined (BASE_STATS_AMQ_SERVER_CONFIG_SET_PORT))
 static icl_stats_t *s_amq_server_config_set_port_stats = NULL;
 #endif
@@ -462,6 +470,13 @@
     //  All properties on server path
     ipr_config_locate (self->config, "/config/server", NULL);

+    //  Get listen_address property from config file or built-in defaults
+    value = ipr_config_get (self->config, "listen_address", NULL);
+    if (value)
+        icl_shortstr_cpy (self->listen_address, value);
+    else
+        icl_shortstr_cpy (self->listen_address, "0.0.0.0");
+
     //  Get port property from config file or built-in defaults
     value = ipr_config_get (self->config, "port", NULL);
     if (value)
@@ -1114,6 +1129,7 @@
 #endif

 printf ("Options that override config values; these take an argument:\n");
+printf ("  --listen_address  Server address to listen on\n");
 printf ("  --port           Server port for clients\n");
 printf ("  --queue_timeout  Timeout for auto-deleted queues\n");
 printf ("  --max_memory_mb  Maximum allowed memory, MBytes\n");
@@ -1236,6 +1252,9 @@
             argn++;

             //  Set property
+            if (streq (arg_name, "--listen_address"))
+                self_set_listen_address (self, arg_value);
+            else
             if (streq (arg_name, "--port"))
                 self_set_port (self, arg_value);
             else
@@ -1423,6 +1442,12 @@

 printf ("\nThese are the configured options for %s\n\n", name);

+printf ("/config/server/listen_address - Server address to listen on\n");
+printf ("    From command-line: --listen_address newvalue\n");
+printf ("    Specifies the address on which the server should listen for incoming connections.\n");
+printf ("    Current value is '%s'. Default value is '0.0.0.0'\n", self->listen_address);
+printf ("\n");
+
 printf ("/config/server/port - Server port for clients\n");
 printf ("    From command-line: --port newvalue\n");
 printf ("    Specifies the port on which the server should open its connections.\n");
@@ -1717,6 +1742,159 @@
     return (rc);
 }
 /*  -------------------------------------------------------------------------
+    amq_server_config_set_listen_address
+
+    Type: Component method
+    Accepts a amq_server_config_t reference and returns zero in case of success,
+    1 in case of errors.
+    -------------------------------------------------------------------------
+ */
+
+int
+    amq_server_config_set_listen_address (
+    amq_server_config_t * self,         //  Reference to object
+    char * listen_address               //  Not documented
+)
+{
+#if (defined (BASE_THREADSAFE))
+    icl_rwlock_t
+        *rwlock;
+#endif
+
+    int
+        rc = 0;                         //  Return code
+
+#if (defined (BASE_ANIMATE)  ||  defined (BASE_ANIMATE_AMQ_SERVER_CONFIG)  ||  defined (BASE_ANIMATE_AMQ_SERVER_CONFIG_SET_LISTEN_ADDRESS))
+    if (amq_server_config_animating)
+        icl_console_print ("<amq_server_config_set_listen_address_start"
+#if (defined (BASE_THREADSAFE))
+" thread=\"%pp\""
+#endif
+" self=\"%pp\""
+" listen_address=\"%s\""
+"/>"
+#if (defined (BASE_THREADSAFE))
+, apr_os_thread_current ()
+#endif
+, self, listen_address);
+#endif
+
+#if (defined (BASE_TRACE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_LISTEN_ADDRESS))
+    icl_trace_record (NULL, amq_server_config_dump, 91);
+#endif
+
+#if (defined (BASE_STATS)  ||  defined (BASE_STATS_AMQ_SERVER_CONFIG)  ||  defined (BASE_STATS_AMQ_SERVER_CONFIG_SET_LISTEN_ADDRESS))
+    icl_stats_inc ("amq_server_config_set_listen_address", &s_amq_server_config_set_listen_address_stats);
+#endif
+
+#if (defined (BASE_THREADSAFE))
+    rwlock = self ? self->rwlock : NULL;
+    if (rwlock)
+        icl_rwlock_write_lock (rwlock);
+#endif
+
+AMQ_SERVER_CONFIG_ASSERT_SANE (self);
+
+ipr_config_putp (self->config, "/config/server", "listen_address", listen_address);
+listen_address = ipr_config_getp (self->config, "/config/server", "listen_address", NULL);
+assert (listen_address);
+icl_shortstr_cpy (self->listen_address, listen_address);
+
+#if (defined (BASE_THREADSAFE))
+    if (rwlock)
+        icl_rwlock_unlock (rwlock);
+#endif
+
+#if (defined (BASE_TRACE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_LISTEN_ADDRESS))
+    icl_trace_record (NULL, amq_server_config_dump, 0x10000 + 91);
+#endif
+
+#if (defined (BASE_ANIMATE)   || defined (BASE_ANIMATE_AMQ_SERVER_CONFIG)   || defined (BASE_ANIMATE_AMQ_SERVER_CONFIG_SET_LISTEN_ADDRESS))
+    if (amq_server_config_animating)
+        icl_console_print ("<amq_server_config_set_listen_address_finish"
+#if (defined (BASE_THREADSAFE))
+" thread=\"%pp\""
+#endif
+" self=\"%pp\""
+" listen_address=\"%s\""
+" rc=\"%i\""
+"/>"
+#if (defined (BASE_THREADSAFE))
+, apr_os_thread_current ()
+#endif
+, self, listen_address, rc);
+#endif
+
+
+    return (rc);
+}
+/*  -------------------------------------------------------------------------
+    amq_server_config_listen_address
+
+    Type: Component method
+    -------------------------------------------------------------------------
+ */
+
+char *
+    amq_server_config_listen_address (
+    amq_server_config_t * self          //  Reference to self
+)
+{
+    char *
+        listen_address;                 //  Not documented
+
+#if (defined (BASE_ANIMATE)  ||  defined (BASE_ANIMATE_AMQ_SERVER_CONFIG)  ||  defined (BASE_ANIMATE_AMQ_SERVER_CONFIG_LISTEN_ADDRESS))
+    if (amq_server_config_animating)
+        icl_console_print ("<amq_server_config_listen_address_start"
+#if (defined (BASE_THREADSAFE))
+" thread=\"%pp\""
+#endif
+" self=\"%pp\""
+"/>"
+#if (defined (BASE_THREADSAFE))
+, apr_os_thread_current ()
+#endif
+, self);
+#endif
+
+#if (defined (BASE_TRACE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_LISTEN_ADDRESS))
+    icl_trace_record (NULL, amq_server_config_dump, 92);
+#endif
+
+#if (defined (BASE_STATS)  ||  defined (BASE_STATS_AMQ_SERVER_CONFIG)  ||  defined (BASE_STATS_AMQ_SERVER_CONFIG_LISTEN_ADDRESS))
+    icl_stats_inc ("amq_server_config_listen_address", &s_amq_server_config_listen_address_stats);
+#endif
+
+//
+if (self)
+    listen_address = self->listen_address;
+else
+    listen_address = "0.0.0.0";
+#if (defined (BASE_TRACE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_LISTEN_ADDRESS))
+    icl_trace_record (NULL, amq_server_config_dump, 0x10000 + 92);
+#endif
+
+#if (defined (BASE_ANIMATE)   || defined (BASE_ANIMATE_AMQ_SERVER_CONFIG)   || defined (BASE_ANIMATE_AMQ_SERVER_CONFIG_LISTEN_ADDRESS))
+    if (amq_server_config_animating)
+        icl_console_print ("<amq_server_config_listen_address_finish"
+#if (defined (BASE_THREADSAFE))
+" thread=\"%pp\""
+#endif
+" self=\"%pp\""
+" listen_address=\"%s\""
+"/>"
+#if (defined (BASE_THREADSAFE))
+, apr_os_thread_current ()
+#endif
+, self, listen_address);
+#endif
+
+
+    return (listen_address);
+}
+
+
+/*  -------------------------------------------------------------------------
     amq_server_config_set_port

     Type: Component method
@@ -6947,6 +7125,7 @@
 AMQ_SERVER_CONFIG_ASSERT_SANE (self);

 smt_log_print (logfile, "*******************  Configuration Settings  ********************");
+smt_log_print (logfile, "listen_address=%s", self->listen_address);
 smt_log_print (logfile, "port=%s", self->port);
 smt_log_print (logfile, "queue_timeout=%i", self->queue_timeout);
 smt_log_print (logfile, "max_memory_mb=%zu", self->max_memory_mb);
@@ -7905,7 +8084,7 @@
 #endif

 }
-#if (defined (BASE_TRACE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_NEW)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DESTROY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_COMMIT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ROLLBACK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CMDLINE_HELP)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CMDLINE_PARSE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_OPTIONS_HELP)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_PORT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_PORT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_QUEUE_TIMEOUT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_QUEUE_TIMEOUT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_MAX_MEMORY_MB)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_MAX_MEMORY_MB)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_PER_CLIENT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_PER_CLIENT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_MONITOR)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_MONITOR)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DUMP_STATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DUMP_STATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_RECORD_STATS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_RECORD_STATS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_LOG_PATH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_LOG_PATH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_KEEP_LOGS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_KEEP_LOGS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_ARCHIVE_PATH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ARCHIVE_PATH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_ARCHIVE_CMD)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ARCHIVE_CMD)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_ALERT_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ALERT_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DAILY_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DAILY_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_ROUTE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_ROUTE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_QUEUE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_QUEUE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_PEERING)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_PEERING)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_CONSOLE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_CONSOLE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_TRACE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TRACE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_HEARTBEAT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_HEARTBEAT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_POLLING_THREADS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_POLLING_THREADS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_WORKING_THREADS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_WORKING_THREADS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_TCP_NODELAY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TCP_NODELAY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_TCP_RCVBUF)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TCP_RCVBUF)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_TCP_SNDBUF)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TCP_SNDBUF)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_FRAME_MAX)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_FRAME_MAX)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_CLUSTER_VHOST)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CLUSTER_VHOST)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_IS_PRIMARY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_IS_PRIMARY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_IS_BACKUP)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_IS_BACKUP)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_PRIMARY_PEER)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_PRIMARY_PEER)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_BACKUP_PEER)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_BACKUP_PEER)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_AUTO_CRASH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_AUTO_CRASH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_AUTO_BLOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_AUTO_BLOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_KERNEL_LIMIT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_KERNEL_LIMIT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DUMP_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SELFTEST)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TERMINATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SHOW)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DESTROY_PUBLIC)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ALLOC)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_FREE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_READ_LOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_WRITE_LOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_UNLOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CACHE_INITIALISE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CACHE_PURGE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CACHE_TERMINATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ANIMATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_NEW_IN_SCOPE) )
+#if (defined (BASE_TRACE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_NEW)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DESTROY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_COMMIT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ROLLBACK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CMDLINE_HELP)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CMDLINE_PARSE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_OPTIONS_HELP)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_LISTEN_ADDRESS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_LISTEN_ADDRESS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_PORT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_PORT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_QUEUE_TIMEOUT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_QUEUE_TIMEOUT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_MAX_MEMORY_MB)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_MAX_MEMORY_MB)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_PER_CLIENT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_PER_CLIENT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_MONITOR)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_MONITOR)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DUMP_STATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DUMP_STATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_RECORD_STATS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_RECORD_STATS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_LOG_PATH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_LOG_PATH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_KEEP_LOGS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_KEEP_LOGS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_ARCHIVE_PATH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ARCHIVE_PATH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_ARCHIVE_CMD)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ARCHIVE_CMD)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_ALERT_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ALERT_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DAILY_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DAILY_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_ROUTE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_ROUTE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_QUEUE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_QUEUE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_PEERING)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_PEERING)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_CONSOLE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_CONSOLE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_TRACE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TRACE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_HEARTBEAT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_HEARTBEAT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_POLLING_THREADS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_POLLING_THREADS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_WORKING_THREADS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_WORKING_THREADS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_TCP_NODELAY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TCP_NODELAY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_TCP_RCVBUF)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TCP_RCVBUF)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_TCP_SNDBUF)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TCP_SNDBUF)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_FRAME_MAX)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_FRAME_MAX)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_CLUSTER_VHOST)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CLUSTER_VHOST)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_IS_PRIMARY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_IS_PRIMARY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_IS_BACKUP)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_IS_BACKUP)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_PRIMARY_PEER)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_PRIMARY_PEER)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_BACKUP_PEER)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_BACKUP_PEER)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_AUTO_CRASH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_AUTO_CRASH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_AUTO_BLOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_AUTO_BLOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_KERNEL_LIMIT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_KERNEL_LIMIT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DUMP_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SELFTEST)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TERMINATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SHOW)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DESTROY_PUBLIC)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ALLOC)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_FREE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_READ_LOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_WRITE_LOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_UNLOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CACHE_INITIALISE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CACHE_PURGE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CACHE_TERMINATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ANIMATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_NEW_IN_SCOPE) )
 void
 amq_server_config_dump (icl_os_thread_t thread, apr_time_t time, qbyte info)
 {
@@ -8005,6 +8184,8 @@
         case 88: method_name = "cache terminate"; break;
         case 89: method_name = "animate"; break;
         case 90: method_name = "new in scope"; break;
+        case 91: method_name = "set listen_address"; break;
+        case 92: method_name = "listen_address"; break;
     }
     icl_console_print_thread_time (thread, time,
                                    "amq_server_config %s%s",

=== modified file 'OpenAMQ-1.2c4/server/amq_server_config.h'
--- OpenAMQ-1.2c4.old/OpenAMQ-1.2c4/server/amq_server_config.h    2008-01-22 14:19:18 +0000
+++ OpenAMQ-1.2c4/OpenAMQ-1.2c4/server/amq_server_config.h    2008-01-22 15:13:33 +0000
@@ -114,6 +114,8 @@
 icl_shortstr_t
     filename;                       //  Configuration file name            
 icl_shortstr_t
+    listen_address;                 //  Server address to listen on
+icl_shortstr_t
     port;                           //  Server port for clients
 int
     queue_timeout;                  //  Timeout for auto-deleted queues
@@ -230,6 +232,17 @@
 );

 int
+    amq_server_config_set_listen_address (
+amq_server_config_t * self,             //  Reference to object
+char * listen_address                   //  Not documented
+);
+
+char *
+    amq_server_config_listen_address (
+amq_server_config_t * self              //  Reference to self
+);
+
+int
     amq_server_config_set_port (
 amq_server_config_t * self,             //  Reference to object
 char * port                             //  Not documented
@@ -691,7 +704,7 @@
 extern "C" {
 #   endif

-#if (defined (BASE_TRACE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_NEW)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DESTROY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_COMMIT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ROLLBACK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CMDLINE_HELP)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CMDLINE_PARSE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_OPTIONS_HELP)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_PORT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_PORT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_QUEUE_TIMEOUT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_QUEUE_TIMEOUT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_MAX_MEMORY_MB)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_MAX_MEMORY_MB)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_PER_CLIENT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_PER_CLIENT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_MONITOR)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_MONITOR)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DUMP_STATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DUMP_STATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_RECORD_STATS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_RECORD_STATS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_LOG_PATH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_LOG_PATH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_KEEP_LOGS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_KEEP_LOGS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_ARCHIVE_PATH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ARCHIVE_PATH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_ARCHIVE_CMD)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ARCHIVE_CMD)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_ALERT_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ALERT_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DAILY_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DAILY_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_ROUTE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_ROUTE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_QUEUE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_QUEUE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_PEERING)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_PEERING)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_CONSOLE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_CONSOLE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_TRACE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TRACE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_HEARTBEAT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_HEARTBEAT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_POLLING_THREADS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_POLLING_THREADS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_WORKING_THREADS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_WORKING_THREADS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_TCP_NODELAY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TCP_NODELAY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_TCP_RCVBUF)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TCP_RCVBUF)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_TCP_SNDBUF)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TCP_SNDBUF)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_FRAME_MAX)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_FRAME_MAX)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_CLUSTER_VHOST)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CLUSTER_VHOST)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_IS_PRIMARY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_IS_PRIMARY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_IS_BACKUP)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_IS_BACKUP)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_PRIMARY_PEER)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_PRIMARY_PEER)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_BACKUP_PEER)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_BACKUP_PEER)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_AUTO_CRASH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_AUTO_CRASH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_AUTO_BLOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_AUTO_BLOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_KERNEL_LIMIT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_KERNEL_LIMIT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DUMP_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SELFTEST)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TERMINATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SHOW)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DESTROY_PUBLIC)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ALLOC)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_FREE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_READ_LOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_WRITE_LOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_UNLOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CACHE_INITIALISE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CACHE_PURGE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CACHE_TERMINATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ANIMATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_NEW_IN_SCOPE) )
+#if (defined (BASE_TRACE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_NEW)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DESTROY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_COMMIT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ROLLBACK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CMDLINE_HELP)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CMDLINE_PARSE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_OPTIONS_HELP)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_LISTEN_ADDRESS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_LISTEN_ADDRESS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_PORT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_PORT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_QUEUE_TIMEOUT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_QUEUE_TIMEOUT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_MAX_MEMORY_MB)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_MAX_MEMORY_MB)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_PER_CLIENT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_PER_CLIENT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_MONITOR)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_MONITOR)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DUMP_STATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DUMP_STATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_RECORD_STATS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_RECORD_STATS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_LOG_PATH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_LOG_PATH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_KEEP_LOGS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_KEEP_LOGS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_ARCHIVE_PATH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ARCHIVE_PATH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_ARCHIVE_CMD)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ARCHIVE_CMD)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_ALERT_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ALERT_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DAILY_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DAILY_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_ROUTE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_ROUTE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_QUEUE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_QUEUE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_PEERING)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_PEERING)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_DEBUG_CONSOLE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DEBUG_CONSOLE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_TRACE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TRACE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_HEARTBEAT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_HEARTBEAT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_POLLING_THREADS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_POLLING_THREADS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_WORKING_THREADS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_WORKING_THREADS)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_TCP_NODELAY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TCP_NODELAY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_TCP_RCVBUF)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TCP_RCVBUF)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_TCP_SNDBUF)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TCP_SNDBUF)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_FRAME_MAX)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_FRAME_MAX)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_CLUSTER_VHOST)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CLUSTER_VHOST)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_IS_PRIMARY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_IS_PRIMARY)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_IS_BACKUP)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_IS_BACKUP)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_PRIMARY_PEER)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_PRIMARY_PEER)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_BACKUP_PEER)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_BACKUP_PEER)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_AUTO_CRASH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_AUTO_CRASH)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_AUTO_BLOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_AUTO_BLOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SET_KERNEL_LIMIT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_KERNEL_LIMIT)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DUMP_LOG)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SELFTEST)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_TERMINATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_SHOW)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_DESTROY_PUBLIC)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ALLOC)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_FREE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_READ_LOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_WRITE_LOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_UNLOCK)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CACHE_INITIALISE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CACHE_PURGE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_CACHE_TERMINATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_ANIMATE)   || defined (BASE_TRACE_AMQ_SERVER_CONFIG_NEW_IN_SCOPE) )
 void
     amq_server_config_dump (icl_os_thread_t thread, apr_time_t time, qbyte info);
 #endif
Re: proposal & patch: --listen_address to set the address to listen on
pieterhpieterh 1203175749|%e %b %Y, %H:%M %Z|agohover

I've applied this patch to the trunk code, using "listen" instead 'of "listen-address" and "*" instead of "0.0.0.0". The svn diff on the source code (not the generated code) is quite short. There are two changes, one to base2/asl:

Index: asl_server_agent.gsl
===================================================================
--- asl_server_agent.gsl        (revision 10891)
+++ asl_server_agent.gsl        (working copy)
@@ -415,19 +415,29 @@
         else {
             apr_pool_create (&pool, icl_global_pool);
             apr_pool_tag (pool, "$(basename)_initialise_server)");
-            apr_gethostname (buffer, ICL_SHORTSTR_MAX, pool);
-            apr_sockaddr_info_get (&sockaddr, buffer, APR_UNSPEC, 0, 0, pool);

-            while (sockaddr) {
+            //  Report hostname and all visible network interfaces
+            if (apr_gethostname (buffer, ICL_SHORTSTR_MAX, pool) == APR_SUCCESS) {
+                apr_sockaddr_info_get (&sockaddr, buffer, APR_UNSPEC, 0, 0, pool);
                 apr_sockaddr_ip_get (&address, sockaddr);
                 smt_log_print ($(protocol.name)_broker->alert_log,
-                    "I: server binding to %s:%s", address, port);
-                if (strnull ($(protocol.name)_broker->host))
-                    icl_shortstr_fmt ($(protocol.name)_broker->host, "%s:%s", 
-                        address, port);
+                    "I: hostname is %s (%s)", buffer, address);
+            }
+            //  Report which interfaces server is going to listen to
+            icl_shortstr_cpy (buffer, $(basename)_config_listen ($(basename)_config));
+            if (streq (buffer, "*")) {
+                smt_log_print ($(protocol.name)_broker->alert_log,
+                    "I: listening on port %s, all network interfaces", port);
+                icl_shortstr_cpy (buffer, APR_ANYADDR);
+            }
+            else
+                smt_log_print ($(protocol.name)_broker->alert_log,
+                    "I: listening on port %s, interface %s", port, buffer);

-                sockaddr = sockaddr->next;
-            }
+            apr_sockaddr_info_get (&sockaddr, buffer, APR_UNSPEC, 0, 0, pool);
+            apr_sockaddr_ip_get (&address, sockaddr);
+            icl_shortstr_fmt ($(protocol.name)_broker->host, "%s:%s", address, port);
+
             apr_pool_destroy (pool);
             tcb->socket = smt_socket_new ();
             if (tcb->socket) {
@@ -470,9 +480,8 @@
                                 old_size, new_size);
                     }
                 }
-                
                 //  Start listening for connections on socket
-                rc = smt_socket_passive (tcb->socket, thread, port, NULL, 500);
+                rc = smt_socket_passive (tcb->socket, thread, port, buffer, 500);
             }
             if (!tcb->socket || (rc != SMT_OK)) {
                 smt_log_print ($(protocol.name)_broker->alert_log,
Index: demo_server_config.opf
===================================================================
--- demo_server_config.opf      (revision 10891)
+++ demo_server_config.opf      (working copy)
@@ -46,6 +46,16 @@
     Specifies the port on which the server should open its connections.
     </doc>
     </property>
+
+    <property name = "listen" type = "char *" default = "*">
+    Address (local network interface) to listen on
+    <doc>
+    Specifies the network interface on which the server should listen for 
+    connections.  By default this is *, meaning all interfaces.  You would 
+    choose to set an address when you use OpenAMQ on a server with multiple 
+    network interfaces, e.g. routing between two networks.
+    </doc>
+    </property>
 </path>

 <path name = "resources">

And a similar change to the OpenAMQ server code:

Index: amq_server_config.opf
===================================================================
--- amq_server_config.opf       (revision 10957)
+++ amq_server_config.opf       (working copy)
@@ -45,6 +45,16 @@
     </doc>
     </property>

+    <property name = "listen" type = "char *" default = "*">
+    Address (local network interface) to listen on
+    <doc>
+    Specifies the network interface on which the server should listen for 
+    connections.  By default this is *, meaning all interfaces.  You would 
+    choose to set an address when you use OpenAMQ on a server with multiple 
+    network interfaces, e.g. routing between two networks.
+    </doc>
+    </property>
+
     <property name = "queue timeout" type = "int" default = "0" dynamic = "1">
     Timeout for auto-deleted queues
     <doc>
last edited on 1203254957|%e %b %Y, %H:%M %Z|agohover by pieterh + show more
new post