diff --git a/doc/UPGRADE-staging/http-media-cache-lookup-order.txt b/doc/UPGRADE-staging/http-media-cache-lookup-order.txt new file mode 100644 index 0000000000..83c31dcbcb --- /dev/null +++ b/doc/UPGRADE-staging/http-media-cache-lookup-order.txt @@ -0,0 +1,9 @@ +Subject: res_http_media_cache + +When fetching a file for playback from a URL, Asterisk will now first +use the value of the Content-Type header in the HTTP response to +determine the format of the audio data, and only if it is unable to do +that will it attempt to parse the URL and extract the extension from +the path portion. Previously Asterisk would first look at the end of +the URL, which may have included query string parameters or a URL +fragment, which was error prone. diff --git a/res/res_http_media_cache.c b/res/res_http_media_cache.c index 54105662a4..9f560c7c81 100644 --- a/res/res_http_media_cache.c +++ b/res/res_http_media_cache.c @@ -171,11 +171,6 @@ static char *file_extension_from_string(const char *str, char *buffer, size_t ca return NULL; } -static char *file_extension_from_url(struct ast_bucket_file *bucket_file, char *buffer, size_t capacity) -{ - return file_extension_from_string(ast_sorcery_object_get_id(bucket_file), buffer, capacity); -} - /*! * \internal * \brief Normalize the value of a Content-Type header @@ -249,18 +244,13 @@ static char *file_extension_from_url_path(struct ast_bucket_file *bucket_file, c static void bucket_file_set_extension(struct ast_bucket_file *bucket_file) { - /* We will attempt to determine an extension in the following order for backwards - * compatibility: - * - * 1. Look at tail end of URL for extension - * 2. Use the Content-Type header if present - * 3. Parse the URL (assuming we can) and look at the tail of the path - */ + /* Using Content-Type first allows for the most flexibility for whomever + * is serving up the audio file. If that doesn't turn up anything useful + * we'll try to parse the URL and use the extension */ char buffer[64]; - if (file_extension_from_url(bucket_file, buffer, sizeof(buffer)) - || file_extension_from_content_type(bucket_file, buffer, sizeof(buffer)) + if (file_extension_from_content_type(bucket_file, buffer, sizeof(buffer)) || file_extension_from_url_path(bucket_file, buffer, sizeof(buffer))) { ast_bucket_file_metadata_set(bucket_file, "ext", buffer); }