diff options
Diffstat (limited to 'qpid/extras/dispatch/src/dispatch.c')
| -rw-r--r-- | qpid/extras/dispatch/src/dispatch.c | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/qpid/extras/dispatch/src/dispatch.c b/qpid/extras/dispatch/src/dispatch.c index 0176d3189e..3c8fa9ba83 100644 --- a/qpid/extras/dispatch/src/dispatch.c +++ b/qpid/extras/dispatch/src/dispatch.c @@ -17,10 +17,12 @@ * under the License. */ +#include "python_embedded.h" #include <qpid/dispatch.h> #include "dispatch_private.h" #include "alloc_private.h" #include "log_private.h" +#include "config_private.h" /** * Private Function Prototypes @@ -38,14 +40,43 @@ dx_agent_t *dx_agent(dx_dispatch_t *dx); void dx_agent_free(dx_agent_t *agent); -dx_dispatch_t *dx_dispatch(int thread_count, const char *container_name, - const char *router_area, const char *router_id) +static const char *CONF_CONTAINER = "container"; +static const char *CONF_ROUTER = "router"; + + +dx_dispatch_t *dx_dispatch() { dx_dispatch_t *dx = NEW(dx_dispatch_t); + int thread_count = 0; + const char *container_name = 0; + const char *router_area = 0; + const char *router_id = 0; + + dx_python_initialize(); dx_log_initialize(); dx_alloc_initialize(); + dx_config_initialize(); + dx_config_t *config = dx_config("../etc/qpid-dispatch.conf"); + + if (config) { + int count = dx_config_item_count(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"); + } + + count = dx_config_item_count(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"); + } + } + + if (thread_count == 0) + thread_count = 1; + if (!container_name) container_name = "00000000-0000-0000-0000-000000000000"; // TODO - gen a real uuid @@ -64,16 +95,20 @@ dx_dispatch_t *dx_dispatch(int thread_count, const char *container_name, 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_finalize(); dx_agent_free(dx->agent); dx_router_free(dx->router); dx_container_free(dx->container); dx_server_free(dx->server); dx_log_finalize(); + dx_python_finalize(); } |
