From 62214af028810961ecba9c7ef96dc6513857057c Mon Sep 17 00:00:00 2001 From: "F. Duncanh" Date: Mon, 17 Nov 2025 10:02:23 -0500 Subject: [PATCH] fix storage of uri_prefix --- lib/airplay_video.c | 9 ++++----- lib/airplay_video.h | 6 +++--- lib/http_handlers.h | 9 ++++++--- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/airplay_video.c b/lib/airplay_video.c index e5a2bd9..f6e07e8 100644 --- a/lib/airplay_video.c +++ b/lib/airplay_video.c @@ -144,15 +144,14 @@ const char *get_playback_uuid(airplay_video_t *airplay_video) { return (const char *) airplay_video->playback_uuid; } -void set_uri_prefix(airplay_video_t *airplay_video, char *uri_prefix, int uri_prefix_len) { +void set_uri_prefix(airplay_video_t *airplay_video, char *uri_prefix) { if (airplay_video->uri_prefix) { free (airplay_video->uri_prefix); } - airplay_video->uri_prefix = (char *) calloc(uri_prefix_len + 1, sizeof(char)); - memcpy(airplay_video->uri_prefix, uri_prefix, uri_prefix_len); + airplay_video->uri_prefix = uri_prefix; } -char *get_uri_prefix(airplay_video_t *airplay_video) { +const char *get_uri_prefix(airplay_video_t *airplay_video) { return airplay_video->uri_prefix; } @@ -509,7 +508,7 @@ int create_media_uri_table(const char *url_prefix, const char *master_playlist_d /* Adjust uri prefixes in the Master Playlist, for sending to the Media Player */ char *adjust_master_playlist (char *fcup_response_data, int fcup_response_datalen, - char *uri_prefix, char *uri_local_prefix) { + const char *uri_prefix, char *uri_local_prefix) { size_t uri_prefix_len = strlen(uri_prefix); size_t uri_local_prefix_len = strlen(uri_local_prefix); int counter = 0; diff --git a/lib/airplay_video.h b/lib/airplay_video.h index 6e0ab2e..864bbff 100644 --- a/lib/airplay_video.h +++ b/lib/airplay_video.h @@ -33,8 +33,8 @@ float get_start_position_seconds(airplay_video_t *airplay_video); float get_resume_position_seconds(airplay_video_t *airplay_video); void set_playback_uuid(airplay_video_t *airplay_video, const char *playback_uuid); const char *get_playback_uuid(airplay_video_t *airplay_video); -void set_uri_prefix(airplay_video_t *airplay_video, char *uri_prefix, int uri_prefix_len); -char *get_uri_prefix(airplay_video_t *airplay_video); +void set_uri_prefix(airplay_video_t *airplay_video, char *uri_prefix); +const char *get_uri_prefix(airplay_video_t *airplay_video); char *get_uri_local_prefix(airplay_video_t *airplay_video); int get_next_FCUP_RequestID(airplay_video_t *airplay_video); @@ -67,7 +67,7 @@ void media_data_store_destroy(void *media_data_store); // called by the POST /action handler: char *process_media_data(void *media_data_store, const char *url, const char *data, int datalen); char *adjust_master_playlist (char *fcup_response_data, int fcup_response_datalen, - char *uri_prefix, char *uri_local_prefix); + const char *uri_prefix, char *uri_local_prefix); char *adjust_yt_condensed_playlist(const char *media_playlist); //called by the POST /play handler diff --git a/lib/http_handlers.h b/lib/http_handlers.h index 8615b0d..e470b19 100644 --- a/lib/http_handlers.h +++ b/lib/http_handlers.h @@ -575,7 +575,7 @@ http_handler_action(raop_conn_t *conn, http_request_t *request, http_response_t char *ptr = strstr(fcup_response_url, "/master.m3u8"); if (ptr) { /* this is a master playlist */ - char *uri_prefix = get_uri_prefix(airplay_video); + const char *uri_prefix = get_uri_prefix(airplay_video); char ** uri_list = NULL; int num_uri = 0; char *uri_local_prefix = get_uri_local_prefix(airplay_video); @@ -741,9 +741,12 @@ http_handler_play(raop_conn_t *conn, http_request_t *request, http_response_t *r if (!ptr) { logger_log(conn->raop->logger, LOGGER_ERR, "Content-Location has unsupported form:\n%s\n", playback_location); goto play_error; + } else { + int prefix_len = (int) (ptr - playback_location); + char *uri_prefix = (char *) calloc(prefix_len + 1, sizeof(char)); + memcpy(uri_prefix, playback_location, prefix_len); + set_uri_prefix(airplay_video, uri_prefix); } - int prefix_len = (int) (ptr - playback_location); - set_uri_prefix(airplay_video, playback_location, prefix_len); set_next_media_uri_id(airplay_video, 0); fcup_request((void *) conn, playback_location, apple_session_id, get_next_FCUP_RequestID(airplay_video));