static int sorcery_astdb_delete(const struct ast_sorcery *sorcery, void *data, void *object) { const char *prefix = data; char family[strlen(prefix) + strlen(ast_sorcery_object_get_type(object)) + 2]; char value[2]; snprintf(family, sizeof(family), "%s/%s", prefix, ast_sorcery_object_get_type(object)); if (ast_db_get(family, ast_sorcery_object_get_id(object), value, sizeof(value))) { return -1; } return ast_db_del(family, ast_sorcery_object_get_id(object)); }
static int sorcery_astdb_update(const struct ast_sorcery *sorcery, void *data, void *object) { const char *prefix = data; char family[strlen(prefix) + strlen(ast_sorcery_object_get_type(object)) + 2], value[2]; snprintf(family, sizeof(family), "%s/%s", prefix, ast_sorcery_object_get_type(object)); /* It is okay for the value to be truncated, we are only checking that it exists */ if (ast_db_get(family, ast_sorcery_object_get_id(object), value, sizeof(value))) { return -1; } /* The only difference between update and create is that for update the object must already exist */ return sorcery_astdb_create(sorcery, data, object); }
static int sorcery_astdb_create(const struct ast_sorcery *sorcery, void *data, void *object) { RAII_VAR(struct ast_json *, objset, ast_sorcery_objectset_json_create(sorcery, object), ast_json_unref); RAII_VAR(char *, value, NULL, ast_json_free); const char *prefix = data; char family[strlen(prefix) + strlen(ast_sorcery_object_get_type(object)) + 2]; if (!objset || !(value = ast_json_dump_string(objset))) { return -1; } snprintf(family, sizeof(family), "%s/%s", prefix, ast_sorcery_object_get_type(object)); return ast_db_put(family, ast_sorcery_object_get_id(object), value); }
static int sip_aor_to_ami(const struct ast_sip_aor *aor, struct ast_str **buf) { RAII_VAR(struct ast_variable *, objset, ast_sorcery_objectset_create2( ast_sip_get_sorcery(), aor, AST_HANDLER_ONLY_STRING), ast_variables_destroy); struct ast_variable *i; if (!objset) { return -1; } ast_str_append(buf, 0, "ObjectType: %s\r\n", ast_sorcery_object_get_type(aor)); ast_str_append(buf, 0, "ObjectName: %s\r\n", ast_sorcery_object_get_id(aor)); for (i = objset; i; i = i->next) { char *camel = ast_to_camel_case(i->name); if (strcmp(camel, "Contact") == 0) { ast_free(camel); camel = NULL; } ast_str_append(buf, 0, "%s: %s\r\n", S_OR(camel, "Contacts"), i->value); ast_free(camel); } return 0; }