diff --git a/modules/dispatcher/dispatcher.c b/modules/dispatcher/dispatcher.c index 35ce88e282a..30e5dce59c1 100644 --- a/modules/dispatcher/dispatcher.c +++ b/modules/dispatcher/dispatcher.c @@ -333,7 +333,9 @@ static mi_export_t mi_cmds[] = { }, { "ds_list", 0, 0, 0, { {w_ds_mi_list, {0}}, + {w_ds_mi_list, {"partition", 0}}, {w_ds_mi_list_1, {"full", 0}}, + {w_ds_mi_list_1, {"full", "partition", 0}}, {EMPTY_MI_RECIPE}} }, { "ds_reload", 0, 0, mi_child_init, { @@ -1281,22 +1283,36 @@ mi_response_t *ds_mi_set(const mi_params_t *params, return init_mi_result_ok(); } -mi_response_t *ds_mi_list(int full) +mi_response_t *ds_mi_list(const mi_params_t *params, int full) { + str partition_name; mi_response_t *resp; mi_item_t *resp_obj; mi_item_t *parts_arr, *part_item; - ds_partition_t *part_it; + ds_partition_t *partition=NULL, *part_it; resp = init_mi_result_object(&resp_obj); if (!resp) return 0; + if (try_get_mi_string_param(params, "partition", &partition_name.s, &partition_name.len) == 0) { + if (partition_name.s==NULL) + return init_mi_error(500, MI_SSTR("partition param not found")); + + partition = find_partition_by_name(&partition_name); + + if (partition == NULL) + return init_mi_error(500, MI_SSTR(MI_UNK_PARTITION)); + } + parts_arr = add_mi_array(resp_obj, MI_SSTR("PARTITIONS")); if (!parts_arr) goto error; for (part_it = partitions; part_it; part_it = part_it->next) { + if (partition!=NULL && partition!=part_it) + continue; + part_item = add_mi_object(parts_arr, NULL, 0); if (!part_item) goto error; @@ -1319,7 +1335,7 @@ mi_response_t *ds_mi_list(int full) mi_response_t *w_ds_mi_list(const mi_params_t *params, struct mi_handler *async_hdl) { - return ds_mi_list(0); + return ds_mi_list(params, 0); } mi_response_t *w_ds_mi_list_1(const mi_params_t *params, @@ -1330,7 +1346,7 @@ mi_response_t *w_ds_mi_list_1(const mi_params_t *params, if (get_mi_int_param(params, "full", &full) < 0) return init_mi_param_error(); - return ds_mi_list(full); + return ds_mi_list(params, full); } mi_response_t *ds_mi_reload(const mi_params_t *params, diff --git a/modules/dispatcher/doc/dispatcher_admin.xml b/modules/dispatcher/doc/dispatcher_admin.xml index 99130cc4556..81a5b4c00ea 100644 --- a/modules/dispatcher/doc/dispatcher_admin.xml +++ b/modules/dispatcher/doc/dispatcher_admin.xml @@ -1652,6 +1652,10 @@ opensips-cli -x mi ds_set_state a 2 sip:10.0.0.202 full (optional) - adds the weight, priority and description fields to the listing + + partition (optional) - return only + destinations and sets in the provided partition. + MI FIFO Command Format: