whitespace cleanup

This commit is contained in:
F. Duncanh
2025-08-08 15:42:07 -04:00
parent c8ce350226
commit 32d5de23c8
6 changed files with 103 additions and 107 deletions

View File

@@ -58,7 +58,7 @@ int airplay_video_service_init(raop_t *raop, unsigned short http_port,
airplay_video_t *airplay_video = deregister_airplay_video(raop); airplay_video_t *airplay_video = deregister_airplay_video(raop);
if (airplay_video) { if (airplay_video) {
airplay_video_service_destroy(airplay_video); airplay_video_service_destroy(airplay_video);
} }
/* calloc guarantees that the 36-character strings apple_session_id and /* calloc guarantees that the 36-character strings apple_session_id and
@@ -74,11 +74,11 @@ int airplay_video_service_init(raop_t *raop, unsigned short http_port,
snprintf(ptr, 6, "%-5u", http_port); snprintf(ptr, 6, "%-5u", http_port);
ptr = strstr(airplay_video->local_uri_prefix, " "); ptr = strstr(airplay_video->local_uri_prefix, " ");
if (ptr) { if (ptr) {
*ptr = '\0'; *ptr = '\0';
} }
if (!register_airplay_video(raop, airplay_video)) { if (!register_airplay_video(raop, airplay_video)) {
return -2; return -2;
} }
//printf(" %p %p\n", airplay_video, get_airplay_video(raop)); //printf(" %p %p\n", airplay_video, get_airplay_video(raop));
@@ -118,7 +118,6 @@ airplay_video_service_destroy(airplay_video_t *airplay_video)
free (airplay_video->master_playlist); free (airplay_video->master_playlist);
} }
free (airplay_video); free (airplay_video);
} }
@@ -146,19 +145,19 @@ 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) { void set_uri_prefix(airplay_video_t *airplay_video, char *uri_prefix, int uri_prefix_len) {
if (airplay_video->uri_prefix) { if (airplay_video->uri_prefix) {
free (airplay_video->uri_prefix); free (airplay_video->uri_prefix);
} }
airplay_video->uri_prefix = (char *) calloc(uri_prefix_len + 1, sizeof(char)); airplay_video->uri_prefix = (char *) calloc(uri_prefix_len + 1, sizeof(char));
memcpy(airplay_video->uri_prefix, uri_prefix, uri_prefix_len); memcpy(airplay_video->uri_prefix, uri_prefix, uri_prefix_len);
} }
char *get_uri_prefix(airplay_video_t *airplay_video) { char *get_uri_prefix(airplay_video_t *airplay_video) {
return airplay_video->uri_prefix; return airplay_video->uri_prefix;
} }
char *get_uri_local_prefix(airplay_video_t *airplay_video) { char *get_uri_local_prefix(airplay_video_t *airplay_video) {
return airplay_video->local_uri_prefix; return airplay_video->local_uri_prefix;
} }
char *get_master_uri(airplay_video_t *airplay_video) { char *get_master_uri(airplay_video_t *airplay_video) {
@@ -198,7 +197,7 @@ void destroy_media_data_store(airplay_video_t *airplay_video) {
media_item_t *media_data_store = airplay_video->media_data_store; media_item_t *media_data_store = airplay_video->media_data_store;
if (media_data_store) { if (media_data_store) {
for (int i = 0; i < airplay_video->num_uri ; i ++ ) { for (int i = 0; i < airplay_video->num_uri ; i ++ ) {
if (media_data_store[i].uri) { if (media_data_store[i].uri) {
free (media_data_store[i].uri); free (media_data_store[i].uri);
} }
if (media_data_store[i].playlist) { if (media_data_store[i].playlist) {
@@ -336,7 +335,7 @@ char *adjust_master_playlist (char *fcup_response_data, int fcup_response_datale
while (ptr != NULL) { while (ptr != NULL) {
counter++; counter++;
ptr++; ptr++;
ptr = strstr(ptr, uri_prefix); ptr = strstr(ptr, uri_prefix);
} }
size_t len = uri_local_prefix_len - uri_prefix_len; size_t len = uri_local_prefix_len - uri_prefix_len;

View File

@@ -310,16 +310,16 @@ dnssd_register_raop(dnssd_t *dnssd, unsigned short port)
case 2: case 2:
case 3: case 3:
dnssd->TXTRecordSetValue(&dnssd->raop_record, "pw", strlen("true"), "true"); dnssd->TXTRecordSetValue(&dnssd->raop_record, "pw", strlen("true"), "true");
dnssd->TXTRecordSetValue(&dnssd->raop_record, "sf", 4, "0x84"); dnssd->TXTRecordSetValue(&dnssd->raop_record, "sf", 4, "0x84");
break; break;
case 1: case 1:
dnssd->TXTRecordSetValue(&dnssd->raop_record, "pw", strlen("true"), "true"); dnssd->TXTRecordSetValue(&dnssd->raop_record, "pw", strlen("true"), "true");
dnssd->TXTRecordSetValue(&dnssd->raop_record, "sf", 3, "0x8c"); dnssd->TXTRecordSetValue(&dnssd->raop_record, "sf", 3, "0x8c");
break; break;
default: default:
dnssd->TXTRecordSetValue(&dnssd->raop_record, "pw", strlen("false"), "false"); dnssd->TXTRecordSetValue(&dnssd->raop_record, "pw", strlen("false"), "false");
dnssd->TXTRecordSetValue(&dnssd->raop_record, "sf", strlen(RAOP_SF), RAOP_SF); dnssd->TXTRecordSetValue(&dnssd->raop_record, "sf", strlen(RAOP_SF), RAOP_SF);
break; break;
} }
dnssd->TXTRecordSetValue(&dnssd->raop_record, "sr", strlen(RAOP_SR), RAOP_SR); dnssd->TXTRecordSetValue(&dnssd->raop_record, "sr", strlen(RAOP_SR), RAOP_SR);
dnssd->TXTRecordSetValue(&dnssd->raop_record, "ss", strlen(RAOP_SS), RAOP_SS); dnssd->TXTRecordSetValue(&dnssd->raop_record, "ss", strlen(RAOP_SS), RAOP_SS);
@@ -382,8 +382,8 @@ dnssd_register_airplay(dnssd_t *dnssd, unsigned short port)
switch (dnssd->pin_pw) { switch (dnssd->pin_pw) {
case 1: // display onscreen pin case 1: // display onscreen pin
dnssd->TXTRecordSetValue(&dnssd->airplay_record, "pw", strlen("true"), "true"); dnssd->TXTRecordSetValue(&dnssd->airplay_record, "pw", strlen("true"), "true");
dnssd->TXTRecordSetValue(&dnssd->airplay_record, "flags", 3, "0x4"); dnssd->TXTRecordSetValue(&dnssd->airplay_record, "flags", 3, "0x4");
break; break;
case 2: // require password case 2: // require password
case 3: case 3:
dnssd->TXTRecordSetValue(&dnssd->airplay_record, "pw", strlen("true"), "true"); dnssd->TXTRecordSetValue(&dnssd->airplay_record, "pw", strlen("true"), "true");
@@ -476,13 +476,13 @@ dnssd_unregister_airplay(dnssd_t *dnssd)
} }
uint64_t dnssd_get_airplay_features(dnssd_t *dnssd) { uint64_t dnssd_get_airplay_features(dnssd_t *dnssd) {
uint64_t features = ((uint64_t) dnssd->features2) << 32; uint64_t features = ((uint64_t) dnssd->features2) << 32;
features += (uint64_t) dnssd->features1; features += (uint64_t) dnssd->features1;
return features; return features;
} }
void dnssd_set_pk(dnssd_t *dnssd, char * pk_str) { void dnssd_set_pk(dnssd_t *dnssd, char * pk_str) {
dnssd->pk = pk_str; dnssd->pk = pk_str;
} }
void dnssd_set_airplay_features(dnssd_t *dnssd, int bit, int val) { void dnssd_set_airplay_features(dnssd_t *dnssd, int bit, int val) {
@@ -498,8 +498,8 @@ void dnssd_set_airplay_features(dnssd_t *dnssd, int bit, int val) {
features = &(dnssd->features1); features = &(dnssd->features1);
} }
if (val) { if (val) {
*features = *features | mask; *features = *features | mask;
} else { } else {
*features = *features & ~mask; *features = *features & ~mask;
} }
} }

View File

@@ -124,7 +124,7 @@ http_handler_rate(raop_conn_t *conn, http_request_t *request, http_response_t *r
if (end && end != rate) { if (end && end != rate) {
rate_value = value; rate_value = value;
logger_log(conn->raop->logger, LOGGER_DEBUG, "http_handler_rate: got rate = %.6f", rate_value); logger_log(conn->raop->logger, LOGGER_DEBUG, "http_handler_rate: got rate = %.6f", rate_value);
} }
} }
conn->raop->callbacks.on_video_rate(conn->raop->callbacks.cls, rate_value); conn->raop->callbacks.on_video_rate(conn->raop->callbacks.cls, rate_value);
} }
@@ -142,7 +142,7 @@ http_handler_stop(raop_conn_t *conn, http_request_t *request, http_response_t *r
static void static void
http_handler_set_property(raop_conn_t *conn, http_handler_set_property(raop_conn_t *conn,
http_request_t *request, http_response_t *response, http_request_t *request, http_response_t *response,
char **response_data, int *response_datalen) { char **response_data, int *response_datalen) {
const char *url = http_request_get_url(request); const char *url = http_request_get_url(request);
const char *property = url + strlen("/setProperty?"); const char *property = url + strlen("/setProperty?");
@@ -247,12 +247,12 @@ int create_playback_info_plist_xml(playback_info_t *playback_info, char **plist_
plist_t loaded_time_ranges_node = plist_new_array(); plist_t loaded_time_ranges_node = plist_new_array();
time_range_to_plist(playback_info->loadedTimeRanges, playback_info->num_loaded_time_ranges, time_range_to_plist(playback_info->loadedTimeRanges, playback_info->num_loaded_time_ranges,
loaded_time_ranges_node); loaded_time_ranges_node);
plist_dict_set_item(res_root_node, "loadedTimeRanges", loaded_time_ranges_node); plist_dict_set_item(res_root_node, "loadedTimeRanges", loaded_time_ranges_node);
plist_t seekable_time_ranges_node = plist_new_array(); plist_t seekable_time_ranges_node = plist_new_array();
time_range_to_plist(playback_info->seekableTimeRanges, playback_info->num_seekable_time_ranges, time_range_to_plist(playback_info->seekableTimeRanges, playback_info->num_seekable_time_ranges,
seekable_time_ranges_node); seekable_time_ranges_node);
plist_dict_set_item(res_root_node, "seekableTimeRanges", seekable_time_ranges_node); plist_dict_set_item(res_root_node, "seekableTimeRanges", seekable_time_ranges_node);
int len; int len;
@@ -264,7 +264,6 @@ int create_playback_info_plist_xml(playback_info_t *playback_info, char **plist_
return len; return len;
} }
/* this handles requests from the Client for "Playback information" while the Media is playing on the /* this handles requests from the Client for "Playback information" while the Media is playing on the
Media Player. (The Server gets this information by monitoring the Media Player). The Client could use Media Player. (The Server gets this information by monitoring the Media Player). The Client could use
the information to e.g. update the slider it shows with progress to the player (0%-100%). the information to e.g. update the slider it shows with progress to the player (0%-100%).
@@ -287,11 +286,11 @@ http_handler_playback_info(raop_conn_t *conn, http_request_t *request, http_resp
conn->raop->callbacks.on_video_acquire_playback_info(conn->raop->callbacks.cls, &playback_info); conn->raop->callbacks.on_video_acquire_playback_info(conn->raop->callbacks.cls, &playback_info);
if (playback_info.duration == -1.0) { if (playback_info.duration == -1.0) {
/* video has finished, reset */ /* video has finished, reset */
logger_log(conn->raop->logger, LOGGER_DEBUG, "playback_info not available (finishing)"); logger_log(conn->raop->logger, LOGGER_DEBUG, "playback_info not available (finishing)");
//httpd_remove_known_connections(conn->raop->httpd); //httpd_remove_known_connections(conn->raop->httpd);
http_response_set_disconnect(response,1); http_response_set_disconnect(response,1);
conn->raop->callbacks.video_reset(conn->raop->callbacks.cls); conn->raop->callbacks.video_reset(conn->raop->callbacks.cls);
return; return;
} else if (playback_info.position == -1.0) { } else if (playback_info.position == -1.0) {
logger_log(conn->raop->logger, LOGGER_DEBUG, "playback_info not available"); logger_log(conn->raop->logger, LOGGER_DEBUG, "playback_info not available");
return; return;
@@ -345,9 +344,8 @@ http_handler_reverse(raop_conn_t *conn, http_request_t *request, http_response_t
if (type_PTTH == 1) { if (type_PTTH == 1) {
logger_log(conn->raop->logger, LOGGER_DEBUG, "will use socket %d for %s connections", socket_fd, purpose); logger_log(conn->raop->logger, LOGGER_DEBUG, "will use socket %d for %s connections", socket_fd, purpose);
http_response_init(response, "HTTP/1.1", 101, "Switching Protocols"); http_response_init(response, "HTTP/1.1", 101, "Switching Protocols");
http_response_add_header(response, "Connection", "Upgrade"); http_response_add_header(response, "Connection", "Upgrade");
http_response_add_header(response, "Upgrade", "PTTH/1.0"); http_response_add_header(response, "Upgrade", "PTTH/1.0");
} else { } else {
logger_log(conn->raop->logger, LOGGER_ERR, "multiple TPPH connections (%d) are forbidden", type_PTTH ); logger_log(conn->raop->logger, LOGGER_ERR, "multiple TPPH connections (%d) are forbidden", type_PTTH );
} }
@@ -368,7 +366,6 @@ http_handler_action(raop_conn_t *conn, http_request_t *request, http_response_t
int request_id = 0; int request_id = 0;
int fcup_response_statuscode = 0; int fcup_response_statuscode = 0;
bool logger_debug = (logger_get_level(conn->raop->logger) >= LOGGER_DEBUG); bool logger_debug = (logger_get_level(conn->raop->logger) >= LOGGER_DEBUG);
const char* session_id = http_request_get_header(request, "X-Apple-Session-ID"); const char* session_id = http_request_get_header(request, "X-Apple-Session-ID");
if (!session_id) { if (!session_id) {
@@ -405,7 +402,7 @@ http_handler_action(raop_conn_t *conn, http_request_t *request, http_response_t
/* determine type of data */ /* determine type of data */
plist_t req_type_node = plist_dict_get_item(req_root_node, "type"); plist_t req_type_node = plist_dict_get_item(req_root_node, "type");
if (!PLIST_IS_STRING(req_type_node)) { if (!PLIST_IS_STRING(req_type_node)) {
goto post_action_error; goto post_action_error;
} }
plist_t req_params_node = NULL; plist_t req_params_node = NULL;
@@ -431,15 +428,15 @@ http_handler_action(raop_conn_t *conn, http_request_t *request, http_response_t
} }
plist_t req_params_item_uuid_node = plist_dict_get_item(req_params_item_node, "uuid"); plist_t req_params_item_uuid_node = plist_dict_get_item(req_params_item_node, "uuid");
char* remove_uuid = NULL; char* remove_uuid = NULL;
plist_get_string_val(req_params_item_uuid_node, &remove_uuid); plist_get_string_val(req_params_item_uuid_node, &remove_uuid);
const char *playback_uuid = get_playback_uuid(conn->raop->airplay_video); const char *playback_uuid = get_playback_uuid(conn->raop->airplay_video);
if (strcmp(remove_uuid, playback_uuid)) { if (strcmp(remove_uuid, playback_uuid)) {
logger_log(conn->raop->logger, LOGGER_ERR, "uuid of playlist removal action request did not match current playlist:\n" logger_log(conn->raop->logger, LOGGER_ERR, "uuid of playlist removal action request did not match current playlist:\n"
" current: %s\n remove: %s", playback_uuid, remove_uuid); " current: %s\n remove: %s", playback_uuid, remove_uuid);
} else { } else {
logger_log(conn->raop->logger, LOGGER_DEBUG, "removal_uuid matches playback_uuid\n"); logger_log(conn->raop->logger, LOGGER_DEBUG, "removal_uuid matches playback_uuid\n");
} }
free (remove_uuid); free (remove_uuid);
} }
logger_log(conn->raop->logger, LOGGER_ERR, "FIXME: playlist removal not yet implemented"); logger_log(conn->raop->logger, LOGGER_ERR, "FIXME: playlist removal not yet implemented");
goto finish; goto finish;
@@ -531,11 +528,11 @@ http_handler_action(raop_conn_t *conn, http_request_t *request, http_response_t
if (logger_debug) { if (logger_debug) {
logger_log(conn->raop->logger, LOGGER_DEBUG, "FCUP_Response datalen = %d", fcup_response_datalen); logger_log(conn->raop->logger, LOGGER_DEBUG, "FCUP_Response datalen = %d", fcup_response_datalen);
char *data = malloc(fcup_response_datalen + 1); char *data = malloc(fcup_response_datalen + 1);
memcpy(data, fcup_response_data, fcup_response_datalen); memcpy(data, fcup_response_data, fcup_response_datalen);
data[fcup_response_datalen] = '\0'; data[fcup_response_datalen] = '\0';
logger_log(conn->raop->logger, LOGGER_DEBUG, "begin FCUP Response data:\n%s\nend FCUP Response data",data); logger_log(conn->raop->logger, LOGGER_DEBUG, "begin FCUP Response data:\n%s\nend FCUP Response data",data);
free (data); free (data);
} }
@@ -543,24 +540,24 @@ http_handler_action(raop_conn_t *conn, http_request_t *request, http_response_t
if (ptr) { if (ptr) {
/* this is a master playlist */ /* this is a master playlist */
char *uri_prefix = get_uri_prefix(conn->raop->airplay_video); char *uri_prefix = get_uri_prefix(conn->raop->airplay_video);
char ** media_data_store = NULL; char ** media_data_store = NULL;
int num_uri = 0; int num_uri = 0;
char *uri_local_prefix = get_uri_local_prefix(conn->raop->airplay_video); char *uri_local_prefix = get_uri_local_prefix(conn->raop->airplay_video);
char *new_master = adjust_master_playlist (fcup_response_data, fcup_response_datalen, uri_prefix, uri_local_prefix); char *new_master = adjust_master_playlist (fcup_response_data, fcup_response_datalen, uri_prefix, uri_local_prefix);
store_master_playlist(conn->raop->airplay_video, new_master); store_master_playlist(conn->raop->airplay_video, new_master);
create_media_uri_table(uri_prefix, fcup_response_data, fcup_response_datalen, &media_data_store, &num_uri); create_media_uri_table(uri_prefix, fcup_response_data, fcup_response_datalen, &media_data_store, &num_uri);
create_media_data_store(conn->raop->airplay_video, media_data_store, num_uri); create_media_data_store(conn->raop->airplay_video, media_data_store, num_uri);
num_uri = get_num_media_uri(conn->raop->airplay_video); num_uri = get_num_media_uri(conn->raop->airplay_video);
set_next_media_uri_id(conn->raop->airplay_video, 0); set_next_media_uri_id(conn->raop->airplay_video, 0);
} else { } else {
/* this is a media playlist */ /* this is a media playlist */
assert(fcup_response_data); assert(fcup_response_data);
char *playlist = (char *) calloc(fcup_response_datalen + 1, sizeof(char)); char *playlist = (char *) calloc(fcup_response_datalen + 1, sizeof(char));
memcpy(playlist, fcup_response_data, fcup_response_datalen); memcpy(playlist, fcup_response_data, fcup_response_datalen);
int uri_num = get_next_media_uri_id(conn->raop->airplay_video); int uri_num = get_next_media_uri_id(conn->raop->airplay_video);
--uri_num; // (next num is current num + 1) --uri_num; // (next num is current num + 1)
store_media_playlist(conn->raop->airplay_video, playlist, uri_num); store_media_playlist(conn->raop->airplay_video, playlist, uri_num);
float duration = 0.0f; float duration = 0.0f;
int count = analyze_media_playlist(playlist, &duration); int count = analyze_media_playlist(playlist, &duration);
if (count) { if (count) {
@@ -583,7 +580,7 @@ http_handler_action(raop_conn_t *conn, http_request_t *request, http_response_t
fcup_request((void *) conn, get_media_uri_by_num(conn->raop->airplay_video, uri_num), fcup_request((void *) conn, get_media_uri_by_num(conn->raop->airplay_video, uri_num),
apple_session_id, apple_session_id,
get_next_FCUP_RequestID(conn->raop->airplay_video)); get_next_FCUP_RequestID(conn->raop->airplay_video));
set_next_media_uri_id(conn->raop->airplay_video, ++uri_num); set_next_media_uri_id(conn->raop->airplay_video, ++uri_num);
} else { } else {
char * uri_local_prefix = get_uri_local_prefix(conn->raop->airplay_video); char * uri_local_prefix = get_uri_local_prefix(conn->raop->airplay_video);
conn->raop->callbacks.on_video_play(conn->raop->callbacks.cls, conn->raop->callbacks.on_video_play(conn->raop->callbacks.cls,
@@ -599,7 +596,7 @@ http_handler_action(raop_conn_t *conn, http_request_t *request, http_response_t
http_response_init(response, "HTTP/1.1", 400, "Bad Request"); http_response_init(response, "HTTP/1.1", 400, "Bad Request");
if (req_root_node) { if (req_root_node) {
plist_free(req_root_node); plist_free(req_root_node);
} }
} }
@@ -643,23 +640,23 @@ http_handler_play(raop_conn_t *conn, http_request_t *request, http_response_t *r
char *header_str = NULL; char *header_str = NULL;
http_request_get_header_string(request, &header_str); http_request_get_header_string(request, &header_str);
logger_log(conn->raop->logger, LOGGER_DEBUG, "request header:\n%s", header_str); logger_log(conn->raop->logger, LOGGER_DEBUG, "request header:\n%s", header_str);
data_is_binary_plist = (strstr(header_str, "x-apple-binary-plist") != NULL); data_is_binary_plist = (strstr(header_str, "x-apple-binary-plist") != NULL);
data_is_text = (strstr(header_str, "text/parameters") != NULL); data_is_text = (strstr(header_str, "text/parameters") != NULL);
data_is_octet = (strstr(header_str, "octet-stream") != NULL); data_is_octet = (strstr(header_str, "octet-stream") != NULL);
free (header_str); free (header_str);
} }
if (!data_is_text && !data_is_octet && !data_is_binary_plist) { if (!data_is_text && !data_is_octet && !data_is_binary_plist) {
goto play_error; goto play_error;
} }
if (data_is_text) { if (data_is_text) {
logger_log(conn->raop->logger, LOGGER_ERR, "Play request Content is text (unsupported)"); logger_log(conn->raop->logger, LOGGER_ERR, "Play request Content is text (unsupported)");
goto play_error; goto play_error;
} }
if (data_is_octet) { if (data_is_octet) {
logger_log(conn->raop->logger, LOGGER_ERR, "Play request Content is octet-stream (unsupported)"); logger_log(conn->raop->logger, LOGGER_ERR, "Play request Content is octet-stream (unsupported)");
goto play_error; goto play_error;
} }
if (data_is_binary_plist) { if (data_is_binary_plist) {
@@ -671,9 +668,9 @@ http_handler_play(raop_conn_t *conn, http_request_t *request, http_response_t *r
} else { } else {
char* playback_uuid = NULL; char* playback_uuid = NULL;
plist_get_string_val(req_uuid_node, &playback_uuid); plist_get_string_val(req_uuid_node, &playback_uuid);
set_playback_uuid(conn->raop->airplay_video, playback_uuid); set_playback_uuid(conn->raop->airplay_video, playback_uuid);
free (playback_uuid); free (playback_uuid);
} }
plist_t req_content_location_node = plist_dict_get_item(req_root_node, "Content-Location"); plist_t req_content_location_node = plist_dict_get_item(req_root_node, "Content-Location");
if (!req_content_location_node) { if (!req_content_location_node) {
@@ -696,18 +693,18 @@ http_handler_play(raop_conn_t *conn, http_request_t *request, http_response_t *r
plist_t req_start_position_seconds_node = plist_dict_get_item(req_root_node, "Start-Position-Seconds"); plist_t req_start_position_seconds_node = plist_dict_get_item(req_root_node, "Start-Position-Seconds");
if (!req_start_position_seconds_node) { if (!req_start_position_seconds_node) {
logger_log(conn->raop->logger, LOGGER_INFO, "No Start-Position-Seconds in Play request"); logger_log(conn->raop->logger, LOGGER_INFO, "No Start-Position-Seconds in Play request");
} else { } else {
double start_position = 0.0; double start_position = 0.0;
plist_get_real_val(req_start_position_seconds_node, &start_position); plist_get_real_val(req_start_position_seconds_node, &start_position);
start_position_seconds = (float) start_position; start_position_seconds = (float) start_position;
} }
set_start_position_seconds(conn->raop->airplay_video, (float) start_position_seconds); set_start_position_seconds(conn->raop->airplay_video, (float) start_position_seconds);
} }
char *ptr = strstr(playback_location, "/master.m3u8"); char *ptr = strstr(playback_location, "/master.m3u8");
if (!ptr) { if (!ptr) {
logger_log(conn->raop->logger, LOGGER_ERR, "Content-Location has unsupported form:\n%s\n", playback_location); logger_log(conn->raop->logger, LOGGER_ERR, "Content-Location has unsupported form:\n%s\n", playback_location);
goto play_error; goto play_error;
} }
int prefix_len = (int) (ptr - playback_location); int prefix_len = (int) (ptr - playback_location);
set_uri_prefix(conn->raop->airplay_video, playback_location, prefix_len); set_uri_prefix(conn->raop->airplay_video, playback_location, prefix_len);
@@ -760,7 +757,7 @@ http_handler_hls(raop_conn_t *conn, http_request_t *request, http_response_t *r
if (!strcmp(url, "/master.m3u8")){ if (!strcmp(url, "/master.m3u8")){
char * master_playlist = get_master_playlist(conn->raop->airplay_video); char * master_playlist = get_master_playlist(conn->raop->airplay_video);
if (master_playlist) { if (master_playlist) {
size_t len = strlen(master_playlist); size_t len = strlen(master_playlist);
char * data = (char *) malloc(len + 1); char * data = (char *) malloc(len + 1);
memcpy(data, master_playlist, len); memcpy(data, master_playlist, len);

View File

@@ -81,11 +81,11 @@ on_header_field(llhttp_t *parser, const char *at, size_t length)
/* Allocate space in the current header string */ /* Allocate space in the current header string */
if (request->headers[request->headers_index] == NULL) { if (request->headers[request->headers_index] == NULL) {
request->headers[request->headers_index] = calloc(1, length+1); request->headers[request->headers_index] = calloc(1, length + 1);
} else { } else {
request->headers[request->headers_index] = realloc( request->headers[request->headers_index] = realloc(
request->headers[request->headers_index], request->headers[request->headers_index],
strlen(request->headers[request->headers_index])+length+1 strlen(request->headers[request->headers_index]) + length + 1
); );
} }
assert(request->headers[request->headers_index]); assert(request->headers[request->headers_index]);
@@ -106,11 +106,11 @@ on_header_value(llhttp_t *parser, const char *at, size_t length)
/* Allocate space in the current header string */ /* Allocate space in the current header string */
if (request->headers[request->headers_index] == NULL) { if (request->headers[request->headers_index] == NULL) {
request->headers[request->headers_index] = calloc(1, length+1); request->headers[request->headers_index] = calloc(1, length + 1);
} else { } else {
request->headers[request->headers_index] = realloc( request->headers[request->headers_index] = realloc(
request->headers[request->headers_index], request->headers[request->headers_index],
strlen(request->headers[request->headers_index])+length+1 strlen(request->headers[request->headers_index]) + length + 1
); );
} }
assert(request->headers[request->headers_index]); assert(request->headers[request->headers_index]);
@@ -124,7 +124,7 @@ on_body(llhttp_t *parser, const char *at, size_t length)
{ {
http_request_t *request = parser->data; http_request_t *request = parser->data;
request->data = realloc(request->data, request->datalen+length); request->data = realloc(request->data, request->datalen + length);
assert(request->data); assert(request->data);
memcpy(request->data+request->datalen, at, length); memcpy(request->data+request->datalen, at, length);
@@ -172,7 +172,7 @@ http_request_destroy(http_request_t *request)
if (request) { if (request) {
free(request->url); free(request->url);
for (i=0; i<request->headers_size; i++) { for (i = 0; i < request->headers_size; i++) {
free(request->headers[i]); free(request->headers[i]);
} }
free(request->headers); free(request->headers);
@@ -273,7 +273,7 @@ http_request_get_header(http_request_t *request, const char *name)
return NULL; return NULL;
} }
for (i=0; i<request->headers_size; i+=2) { for (i = 0; i < request->headers_size; i += 2) {
if (!strcmp(request->headers[i], name)) { if (!strcmp(request->headers[i], name)) {
return request->headers[i+1]; return request->headers[i+1];
} }
@@ -305,7 +305,7 @@ http_request_get_header_string(http_request_t *request, char **header_str)
int len = 0; int len = 0;
for (int i = 0; i < request->headers_size; i++) { for (int i = 0; i < request->headers_size; i++) {
len += strlen(request->headers[i]); len += strlen(request->headers[i]);
if (i%2 == 0) { if (i % 2 == 0) {
len += 2; len += 2;
} else { } else {
len++; len++;
@@ -321,12 +321,12 @@ http_request_get_header_string(http_request_t *request, char **header_str)
snprintf(p, n, "%s", request->headers[i]); snprintf(p, n, "%s", request->headers[i]);
n -= hlen; n -= hlen;
p += hlen; p += hlen;
if (i%2 == 0) { if (i % 2 == 0) {
snprintf(p, n, ": "); snprintf(p, n, ": ");
n -= 2; n -= 2;
p += 2; p += 2;
} else { } else {
snprintf(p, n, "\n"); snprintf(p, n, "\n");
n--; n--;
p++; p++;
} }

View File

@@ -225,8 +225,8 @@ conn_request(void *ptr, http_request_t *request, http_response_t **response) {
logger_log(conn->raop->logger, LOGGER_INFO, "\"nohold\" feature: switch to new connection request from %s", ipaddr); logger_log(conn->raop->logger, LOGGER_INFO, "\"nohold\" feature: switch to new connection request from %s", ipaddr);
if (conn->raop->callbacks.video_reset) { if (conn->raop->callbacks.video_reset) {
conn->raop->callbacks.video_reset(conn->raop->callbacks.cls); conn->raop->callbacks.video_reset(conn->raop->callbacks.cls);
} }
httpd_remove_known_connections(conn->raop->httpd); httpd_remove_known_connections(conn->raop->httpd);
} else { } else {
logger_log(conn->raop->logger, LOGGER_WARNING, "rejecting new connection request from %s", ipaddr); logger_log(conn->raop->logger, LOGGER_WARNING, "rejecting new connection request from %s", ipaddr);
*response = http_response_create(); *response = http_response_create();
@@ -245,7 +245,7 @@ conn_request(void *ptr, http_request_t *request, http_response_t **response) {
conn->client_session_id = (char *) malloc(len); conn->client_session_id = (char *) malloc(len);
strncpy(conn->client_session_id, client_session_id, len); strncpy(conn->client_session_id, client_session_id, len);
/* airplay video has been requested: shut down any running RAOP udp services */ /* airplay video has been requested: shut down any running RAOP udp services */
raop_conn_t *raop_conn = (raop_conn_t *) httpd_get_connection_by_type(conn->raop->httpd, CONNECTION_TYPE_RAOP, 1); raop_conn_t *raop_conn = (raop_conn_t *) httpd_get_connection_by_type(conn->raop->httpd, CONNECTION_TYPE_RAOP, 1);
if (raop_conn) { if (raop_conn) {
raop_rtp_mirror_t *raop_rtp_mirror = raop_conn->raop_rtp_mirror; raop_rtp_mirror_t *raop_rtp_mirror = raop_conn->raop_rtp_mirror;
if (raop_rtp_mirror) { if (raop_rtp_mirror) {
@@ -273,7 +273,7 @@ conn_request(void *ptr, http_request_t *request, http_response_t **response) {
httpd_set_connection_type(conn->raop->httpd, ptr, CONNECTION_TYPE_HLS); httpd_set_connection_type(conn->raop->httpd, ptr, CONNECTION_TYPE_HLS);
conn->connection_type = CONNECTION_TYPE_HLS; conn->connection_type = CONNECTION_TYPE_HLS;
} else { } else {
logger_log(conn->raop->logger, LOGGER_WARNING, "connection from unknown connection type"); logger_log(conn->raop->logger, LOGGER_WARNING, "connection from unknown connection type");
} }
} }
@@ -310,9 +310,9 @@ conn_request(void *ptr, http_request_t *request, http_response_t **response) {
if (request_data && logger_debug) { if (request_data && logger_debug) {
if (request_datalen > 0) { if (request_datalen > 0) {
/* logger has a buffer limit of 4096 */ /* logger has a buffer limit of 4096 */
if (data_is_plist) { if (data_is_plist) {
plist_t req_root_node = NULL; plist_t req_root_node = NULL;
plist_from_bin(request_data, request_datalen, &req_root_node); plist_from_bin(request_data, request_datalen, &req_root_node);
char * plist_xml = NULL; char * plist_xml = NULL;
char * stripped_xml = NULL; char * stripped_xml = NULL;
uint32_t plist_len; uint32_t plist_len;
@@ -353,7 +353,7 @@ conn_request(void *ptr, http_request_t *request, http_response_t **response) {
if (!strcmp(method, "POST")) { if (!strcmp(method, "POST")) {
if (!strcmp(url, "/feedback")) { if (!strcmp(url, "/feedback")) {
handler = &raop_handler_feedback; handler = &raop_handler_feedback;
} else if (!strcmp(url, "/pair-pin-start")) { } else if (!strcmp(url, "/pair-pin-start")) {
handler = &raop_handler_pairpinstart; handler = &raop_handler_pairpinstart;
} else if (!strcmp(url, "/pair-setup-pin")) { } else if (!strcmp(url, "/pair-setup-pin")) {
handler = &raop_handler_pairsetup_pin; handler = &raop_handler_pairsetup_pin;
@@ -388,7 +388,7 @@ conn_request(void *ptr, http_request_t *request, http_response_t **response) {
handler = &raop_handler_teardown; handler = &raop_handler_teardown;
} else { } else {
http_response_init(*response, protocol, 501, "Not Implemented"); http_response_init(*response, protocol, 501, "Not Implemented");
} }
} else if (!hls_request && !strcmp(protocol, "HTTP/1.1")) { } else if (!hls_request && !strcmp(protocol, "HTTP/1.1")) {
if (!strcmp(method, "POST")) { if (!strcmp(method, "POST")) {
if (!strcmp(url, "/reverse")) { if (!strcmp(url, "/reverse")) {
@@ -415,9 +415,9 @@ conn_request(void *ptr, http_request_t *request, http_response_t **response) {
handler = &http_handler_playback_info; handler = &http_handler_playback_info;
} }
} else if (!strcmp(method, "PUT")) { } else if (!strcmp(method, "PUT")) {
if (!strncmp (url, "/setProperty?", strlen("/setProperty?"))) { if (!strncmp (url, "/setProperty?", strlen("/setProperty?"))) {
handler = &http_handler_set_property; handler = &http_handler_set_property;
} }
} }
} else if (hls_request) { } else if (hls_request) {
handler = &http_handler_hls; handler = &http_handler_hls;
@@ -426,8 +426,8 @@ conn_request(void *ptr, http_request_t *request, http_response_t **response) {
if (handler != NULL) { if (handler != NULL) {
handler(conn, request, *response, &response_data, &response_datalen); handler(conn, request, *response, &response_data, &response_datalen);
} else { } else {
logger_log(conn->raop->logger, LOGGER_INFO, logger_log(conn->raop->logger, LOGGER_INFO,
"Unhandled Client Request: %s %s %s", method, url, protocol); "Unhandled Client Request: %s %s %s", method, url, protocol);
} }
finish:; finish:;
@@ -435,7 +435,7 @@ conn_request(void *ptr, http_request_t *request, http_response_t **response) {
http_response_add_header(*response, "Server", "AirTunes/"GLOBAL_VERSION); http_response_add_header(*response, "Server", "AirTunes/"GLOBAL_VERSION);
if (cseq) { if (cseq) {
http_response_add_header(*response, "CSeq", cseq); http_response_add_header(*response, "CSeq", cseq);
} }
} }
http_response_finish(*response, response_data, response_datalen); http_response_finish(*response, response_data, response_datalen);
@@ -488,7 +488,7 @@ conn_request(void *ptr, http_request_t *request, http_response_t **response) {
} }
if (response_data) { if (response_data) {
free(response_data); free(response_data);
} }
} }
} }
@@ -646,10 +646,10 @@ raop_destroy(raop_t *raop) {
pairing_destroy(raop->pairing); pairing_destroy(raop->pairing);
httpd_destroy(raop->httpd); httpd_destroy(raop->httpd);
logger_destroy(raop->logger); logger_destroy(raop->logger);
if (raop->nonce) { if (raop->nonce) {
free(raop->nonce); free(raop->nonce);
} }
if (raop->random_pw) { if (raop->random_pw) {
free(raop->random_pw); free(raop->random_pw);
} }

View File

@@ -312,20 +312,20 @@ char *utils_strip_data_from_plist_xml(char *plist_xml) {
nchars = eol + 1 - ptr1; nchars = eol + 1 - ptr1;
memcpy(ptr2, ptr1, nchars); memcpy(ptr2, ptr1, nchars);
ptr2 += nchars; ptr2 += nchars;
ptr1 += nchars; ptr1 += nchars;
end = strstr(ptr1, "</data>"); end = strstr(ptr1, "</data>");
assert(end); assert(end);
count = 0; count = 0;
do { do {
eol_data = eol; eol_data = eol;
eol = strchr(eol + 1, '\n'); eol = strchr(eol + 1, '\n');
count++; count++;
} while (eol < end); } while (eol < end);
count--; // last '\n' counted ends the first non-data line (contains "</data>") count--; // last '\n' counted ends the first non-data line (contains "</data>")
if (count > 1) { if (count > 1) {
snprintf(line, sizeof(line), " (%d lines data omitted, 64 chars/line)\n", count); snprintf(line, sizeof(line), " (%d lines data omitted, 64 chars/line)\n", count);
nchars = strlen(line); nchars = strlen(line);
memcpy(ptr2, line, nchars); memcpy(ptr2, line, nchars);
ptr2 += nchars; ptr2 += nchars;
ptr1 = eol_data + 1; ptr1 = eol_data + 1;
} else { } else {