int ast_ari_bridges_record_parse_body( struct ast_json *body, struct ast_ari_bridges_record_args *args) { struct ast_json *field; /* Parse query parameters out of it */ field = ast_json_object_get(body, "name"); if (field) { args->name = ast_json_string_get(field); } field = ast_json_object_get(body, "format"); if (field) { args->format = ast_json_string_get(field); } field = ast_json_object_get(body, "maxDurationSeconds"); if (field) { args->max_duration_seconds = ast_json_integer_get(field); } field = ast_json_object_get(body, "maxSilenceSeconds"); if (field) { args->max_silence_seconds = ast_json_integer_get(field); } field = ast_json_object_get(body, "ifExists"); if (field) { args->if_exists = ast_json_string_get(field); } field = ast_json_object_get(body, "beep"); if (field) { args->beep = ast_json_is_true(field); } field = ast_json_object_get(body, "terminateOn"); if (field) { args->terminate_on = ast_json_string_get(field); } return 0; }
static struct ast_manager_event_blob *local_message_to_ami(struct stasis_message *message) { struct ast_multi_channel_blob *obj = stasis_message_data(message); struct ast_json *blob = ast_multi_channel_blob_get_json(obj); struct ast_channel_snapshot *local_snapshot_one; struct ast_channel_snapshot *local_snapshot_two; RAII_VAR(struct ast_str *, local_channel_one, NULL, ast_free); RAII_VAR(struct ast_str *, local_channel_two, NULL, ast_free); RAII_VAR(struct ast_str *, event_buffer, NULL, ast_free); const char *event; local_snapshot_one = ast_multi_channel_blob_get_channel(obj, "1"); local_snapshot_two = ast_multi_channel_blob_get_channel(obj, "2"); if (!local_snapshot_one || !local_snapshot_two) { return NULL; } event_buffer = ast_str_create(1024); local_channel_one = ast_manager_build_channel_state_string_prefix(local_snapshot_one, "LocalOne"); local_channel_two = ast_manager_build_channel_state_string_prefix(local_snapshot_two, "LocalTwo"); if (!event_buffer || !local_channel_one || !local_channel_two) { return NULL; } if (stasis_message_type(message) == ast_local_optimization_begin_type()) { struct ast_channel_snapshot *source_snapshot; RAII_VAR(struct ast_str *, source_str, NULL, ast_free); const char *dest_uniqueid; source_snapshot = ast_multi_channel_blob_get_channel(obj, "source"); if (source_snapshot) { source_str = ast_manager_build_channel_state_string_prefix(source_snapshot, "Source"); if (!source_str) { return NULL; } } dest_uniqueid = ast_json_object_get(blob, "dest") == AST_UNREAL_OWNER ? local_snapshot_one->uniqueid : local_snapshot_two->uniqueid; event = "LocalOptimizationBegin"; if (source_str) { ast_str_append(&event_buffer, 0, "%s", ast_str_buffer(source_str)); } ast_str_append(&event_buffer, 0, "DestUniqueId: %s\r\n", dest_uniqueid); ast_str_append(&event_buffer, 0, "Id: %u\r\n", (unsigned int) ast_json_integer_get(ast_json_object_get(blob, "id"))); } else if (stasis_message_type(message) == ast_local_optimization_end_type()) { event = "LocalOptimizationEnd"; ast_str_append(&event_buffer, 0, "Success: %s\r\n", ast_json_integer_get(ast_json_object_get(blob, "success")) ? "Yes" : "No"); ast_str_append(&event_buffer, 0, "Id: %u\r\n", (unsigned int) ast_json_integer_get(ast_json_object_get(blob, "id"))); } else if (stasis_message_type(message) == ast_local_bridge_type()) { event = "LocalBridge"; ast_str_append(&event_buffer, 0, "Context: %s\r\n", ast_json_string_get(ast_json_object_get(blob, "context"))); ast_str_append(&event_buffer, 0, "Exten: %s\r\n", ast_json_string_get(ast_json_object_get(blob, "exten"))); ast_str_append(&event_buffer, 0, "LocalOptimization: %s\r\n", ast_json_is_true(ast_json_object_get(blob, "can_optimize")) ? "Yes" : "No"); } else { return NULL; } return ast_manager_event_blob_create(EVENT_FLAG_CALL, event, "%s" "%s" "%s", ast_str_buffer(local_channel_one), ast_str_buffer(local_channel_two), ast_str_buffer(event_buffer)); }