summaryrefslogtreecommitdiff
path: root/extras/dispatch/src/dispatch.c
diff options
context:
space:
mode:
Diffstat (limited to 'extras/dispatch/src/dispatch.c')
-rw-r--r--extras/dispatch/src/dispatch.c70
1 files changed, 58 insertions, 12 deletions
diff --git a/extras/dispatch/src/dispatch.c b/extras/dispatch/src/dispatch.c
index 3c8fa9ba83..23199c7c99 100644
--- a/extras/dispatch/src/dispatch.c
+++ b/extras/dispatch/src/dispatch.c
@@ -19,10 +19,11 @@
#include "python_embedded.h"
#include <qpid/dispatch.h>
+#include <qpid/dispatch/server.h>
+#include <qpid/dispatch/ctools.h>
#include "dispatch_private.h"
#include "alloc_private.h"
#include "log_private.h"
-#include "config_private.h"
/**
* Private Function Prototypes
@@ -42,9 +43,24 @@ void dx_agent_free(dx_agent_t *agent);
static const char *CONF_CONTAINER = "container";
static const char *CONF_ROUTER = "router";
+static const char *CONF_LISTENER = "listener";
-dx_dispatch_t *dx_dispatch()
+typedef struct dx_config_listener_t {
+ DEQ_LINKS(struct dx_config_listener_t);
+ dx_server_config_t configuration;
+ dx_listener_t *listener;
+} dx_config_listener_t;
+
+
+ALLOC_DECLARE(dx_config_listener_t);
+ALLOC_DEFINE(dx_config_listener_t);
+DEQ_DECLARE(dx_config_listener_t, listener_list_t);
+
+listener_list_t listeners;
+
+
+dx_dispatch_t *dx_dispatch(const char *config_path)
{
dx_dispatch_t *dx = NEW(dx_dispatch_t);
@@ -57,20 +73,22 @@ dx_dispatch_t *dx_dispatch()
dx_log_initialize();
dx_alloc_initialize();
+ DEQ_INIT(listeners);
+
dx_config_initialize();
- dx_config_t *config = dx_config("../etc/qpid-dispatch.conf");
+ dx->config = dx_config(config_path);
- if (config) {
- int count = dx_config_item_count(config, CONF_CONTAINER);
+ if (dx->config) {
+ int count = dx_config_item_count(dx->config, CONF_CONTAINER);
if (count == 1) {
- thread_count = dx_config_item_value_int(config, CONF_CONTAINER, 0, "worker-threads");
- container_name = dx_config_item_value_string(config, CONF_CONTAINER, 0, "container-name");
+ thread_count = dx_config_item_value_int(dx->config, CONF_CONTAINER, 0, "worker-threads");
+ container_name = dx_config_item_value_string(dx->config, CONF_CONTAINER, 0, "container-name");
}
- count = dx_config_item_count(config, CONF_ROUTER);
+ count = dx_config_item_count(dx->config, CONF_ROUTER);
if (count == 1) {
- router_area = dx_config_item_value_string(config, CONF_ROUTER, 0, "area");
- router_id = dx_config_item_value_string(config, CONF_ROUTER, 0, "router-id");
+ router_area = dx_config_item_value_string(dx->config, CONF_ROUTER, 0, "area");
+ router_id = dx_config_item_value_string(dx->config, CONF_ROUTER, 0, "router-id");
}
}
@@ -95,14 +113,13 @@ dx_dispatch_t *dx_dispatch()
dx_container_setup_agent(dx);
dx_router_setup_agent(dx);
- dx_config_free(config);
-
return dx;
}
void dx_dispatch_free(dx_dispatch_t *dx)
{
+ dx_config_free(dx->config);
dx_config_finalize();
dx_agent_free(dx->agent);
dx_router_free(dx->router);
@@ -112,3 +129,32 @@ void dx_dispatch_free(dx_dispatch_t *dx)
dx_python_finalize();
}
+
+static void configure_connections(dx_dispatch_t *dx)
+{
+ int count;
+
+ if (!dx->config)
+ return;
+
+ count = dx_config_item_count(dx->config, CONF_LISTENER);
+ for (int i = 0; i < count; i++) {
+ dx_config_listener_t *l = new_dx_config_listener_t();
+ memset(l, 0, sizeof(dx_config_listener_t));
+
+ l->configuration.host = dx_config_item_value_string(dx->config, CONF_LISTENER, i, "addr");
+ l->configuration.port = dx_config_item_value_string(dx->config, CONF_LISTENER, i, "port");
+ l->configuration.sasl_mechanisms =
+ dx_config_item_value_string(dx->config, CONF_LISTENER, i, "sasl-mechansism");
+ l->configuration.ssl_enabled = 0;
+
+ l->listener = dx_server_listen(dx, &l->configuration, l);
+ }
+}
+
+
+void dx_dispatch_configure(dx_dispatch_t *dx)
+{
+ configure_connections(dx);
+}
+