return cmp;
}
-static char *complete_bridge(const char *word, int state)
+struct bridge_complete {
+ /*! Nth match to return. */
+ int state;
+ /*! Which match currently on. */
+ int which;
+};
+
+static int complete_bridge_live_search(void *obj, void *arg, void *data, int flags)
+{
+ struct bridge_complete *search = data;
+
+ if (++search->which > search->state) {
+ return CMP_MATCH;
+ }
+ return 0;
+}
+
+static char *complete_bridge_live(const char *word, int state)
+{
+ char *ret;
+ struct ast_bridge *bridge;
+ struct bridge_complete search = {
+ .state = state,
+ };
+
+ bridge = ao2_callback_data(bridges, ast_strlen_zero(word) ? 0 : OBJ_PARTIAL_KEY,
+ complete_bridge_live_search, (char *) word, &search);
+ if (!bridge) {
+ return NULL;
+ }
+ ret = ast_strdup(bridge->uniqueid);
+ ao2_ref(bridge, -1);
+ return ret;
+}
+
+static char *complete_bridge_stasis(const char *word, int state)
{
char *ret = NULL;
int wordlen = strlen(word), which = 0;
struct ao2_iterator iter;
struct stasis_message *msg;
- if (!(cached_bridges = stasis_cache_dump(ast_bridge_cache(), ast_bridge_snapshot_type()))) {
+ cached_bridges = stasis_cache_dump(ast_bridge_cache(), ast_bridge_snapshot_type());
+ if (!cached_bridges) {
return NULL;
}
return NULL;
}
- if (!(cached_bridges = stasis_cache_dump(ast_bridge_cache(), ast_bridge_snapshot_type()))) {
+ cached_bridges = stasis_cache_dump(ast_bridge_cache(), ast_bridge_snapshot_type());
+ if (!cached_bridges) {
ast_cli(a->fd, "Failed to retrieve cached bridges\n");
return CLI_SUCCESS;
}
RAII_VAR(struct stasis_message *, msg, NULL, ao2_cleanup);
struct ast_channel_snapshot *snapshot;
- if (!(msg = stasis_cache_get(ast_channel_cache(), ast_channel_snapshot_type(), uniqueid))) {
+ msg = stasis_cache_get(ast_channel_cache(), ast_channel_snapshot_type(), uniqueid);
+ if (!msg) {
return 0;
}
snapshot = stasis_message_data(msg);
return NULL;
case CLI_GENERATE:
if (a->pos == 2) {
- return complete_bridge(a->word, a->n);
+ return complete_bridge_stasis(a->word, a->n);
}
return NULL;
}
return NULL;
case CLI_GENERATE:
if (a->pos == 2) {
- return complete_bridge(a->word, a->n);
+ return complete_bridge_live(a->word, a->n);
}
return NULL;
}
return NULL;
case CLI_GENERATE:
if (a->pos == 2) {
- return complete_bridge(a->word, a->n);
+ return complete_bridge_live(a->word, a->n);
}
if (a->pos == 3) {
return complete_bridge_participant(a->argv[2], a->line, a->word, a->pos, a->n);