/* \brief Comparison function for pvt cause code frames */ static int pvt_cause_cmp_fn(void *obj, void *vstr, int flags) { struct ast_control_pvt_cause_code *pc = obj; char *str = ast_tech_to_upper(ast_strdupa(vstr)); char *pc_str = ast_tech_to_upper(ast_strdupa(pc->chan_name)); return !strcmp(pc_str, str) ? CMP_MATCH | CMP_STOP : 0; }
struct ast_endpoint_snapshot *ast_endpoint_latest_snapshot(const char *tech, const char *name) { RAII_VAR(char *, id, NULL, ast_free); RAII_VAR(struct stasis_message *, msg, NULL, ao2_cleanup); struct ast_endpoint_snapshot *snapshot; if (ast_strlen_zero(name)) { ast_asprintf(&id, "%s", tech); } else { ast_asprintf(&id, "%s/%s", tech, name); } if (!id) { return NULL; } ast_tech_to_upper(id); msg = stasis_cache_get(ast_endpoint_cache(), ast_endpoint_snapshot_type(), id); if (!msg) { return NULL; } snapshot = stasis_message_data(msg); ast_assert(snapshot != NULL); ao2_ref(snapshot, +1); return snapshot; }
/* \brief Hash function for pvt cause code frames */ static int pvt_cause_hash_fn(const void *vpc, const int flags) { const struct ast_control_pvt_cause_code *pc = vpc; return ast_str_hash(ast_tech_to_upper(ast_strdupa(pc->chan_name))); }