FS-9716: [mod_amqp] Command profile expand params
Expand command profile params "exchange-name, queue-name, binding_key" This allows dynamic binding based on fs core-uuid (ie, ${core-uuid} ).
This commit is contained in:
parent
1cb8adecb7
commit
f4321a2826
|
@ -80,12 +80,30 @@ switch_status_t mod_amqp_command_destroy(mod_amqp_command_profile_t **prof)
|
||||||
return SWITCH_STATUS_SUCCESS;
|
return SWITCH_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static char *mod_amqp_expand_header(switch_memory_pool_t *pool, switch_event_t *event, char *val)
|
||||||
|
{
|
||||||
|
char *expanded;
|
||||||
|
char *dup = NULL;
|
||||||
|
|
||||||
|
expanded = switch_event_expand_headers(event, val);
|
||||||
|
dup = switch_core_strdup(pool, expanded);
|
||||||
|
|
||||||
|
if (expanded != val) {
|
||||||
|
free(expanded);
|
||||||
|
}
|
||||||
|
|
||||||
|
return dup;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
switch_status_t mod_amqp_command_create(char *name, switch_xml_t cfg)
|
switch_status_t mod_amqp_command_create(char *name, switch_xml_t cfg)
|
||||||
{
|
{
|
||||||
mod_amqp_command_profile_t *profile = NULL;
|
mod_amqp_command_profile_t *profile = NULL;
|
||||||
switch_xml_t params, param, connections, connection;
|
switch_xml_t params, param, connections, connection;
|
||||||
switch_threadattr_t *thd_attr = NULL;
|
switch_threadattr_t *thd_attr = NULL;
|
||||||
switch_memory_pool_t *pool;
|
switch_memory_pool_t *pool;
|
||||||
|
switch_event_t *event;
|
||||||
char *exchange = NULL, *binding_key = NULL, *queue = NULL;
|
char *exchange = NULL, *binding_key = NULL, *queue = NULL;
|
||||||
|
|
||||||
if (switch_core_new_memory_pool(&pool) != SWITCH_STATUS_SUCCESS) {
|
if (switch_core_new_memory_pool(&pool) != SWITCH_STATUS_SUCCESS) {
|
||||||
|
@ -99,6 +117,10 @@ switch_status_t mod_amqp_command_create(char *name, switch_xml_t cfg)
|
||||||
profile->running = 1;
|
profile->running = 1;
|
||||||
profile->reconnect_interval_ms = 1000;
|
profile->reconnect_interval_ms = 1000;
|
||||||
|
|
||||||
|
if (switch_event_create(&event, SWITCH_EVENT_GENERAL) != SWITCH_STATUS_SUCCESS) {
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
if ((params = switch_xml_child(cfg, "params")) != NULL) {
|
if ((params = switch_xml_child(cfg, "params")) != NULL) {
|
||||||
for (param = switch_xml_child(params, "param"); param; param = param->next) {
|
for (param = switch_xml_child(params, "param"); param; param = param->next) {
|
||||||
char *var = (char *) switch_xml_attr_soft(param, "name");
|
char *var = (char *) switch_xml_attr_soft(param, "name");
|
||||||
|
@ -120,15 +142,17 @@ switch_status_t mod_amqp_command_create(char *name, switch_xml_t cfg)
|
||||||
profile->reconnect_interval_ms = interval;
|
profile->reconnect_interval_ms = interval;
|
||||||
}
|
}
|
||||||
} else if (!strncmp(var, "exchange-name", 13)) {
|
} else if (!strncmp(var, "exchange-name", 13)) {
|
||||||
exchange = switch_core_strdup(profile->pool, val);
|
exchange = mod_amqp_expand_header(profile->pool, event, val);
|
||||||
} else if (!strncmp(var, "queue-name", 10)) {
|
} else if (!strncmp(var, "queue-name", 10)) {
|
||||||
queue = switch_core_strdup(profile->pool, val);
|
queue = mod_amqp_expand_header(profile->pool, event, val);
|
||||||
} else if (!strncmp(var, "binding_key", 11)) {
|
} else if (!strncmp(var, "binding_key", 11)) {
|
||||||
binding_key = switch_core_strdup(profile->pool, val);
|
binding_key = mod_amqp_expand_header(profile->pool, event, val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch_event_destroy(&event);
|
||||||
|
|
||||||
/* Handle defaults of string types */
|
/* Handle defaults of string types */
|
||||||
profile->exchange = exchange ? exchange : switch_core_strdup(profile->pool, "TAP.Commands");
|
profile->exchange = exchange ? exchange : switch_core_strdup(profile->pool, "TAP.Commands");
|
||||||
profile->queue = queue ? queue : NULL;
|
profile->queue = queue ? queue : NULL;
|
||||||
|
|
Loading…
Reference in New Issue