mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-14 00:04:13 +09:00
cleanup (?) of writing to airplay_video struct
This commit is contained in:
@@ -126,15 +126,62 @@ airplay_video_destroy(airplay_video_t *airplay_video) {
|
||||
airplay_video = NULL;
|
||||
}
|
||||
|
||||
void set_apple_session_id(airplay_video_t *airplay_video, const char * apple_session_id) {
|
||||
void set_apple_session_id(airplay_video_t *airplay_video, const char * apple_session_id, size_t len) {
|
||||
assert(apple_session_id && len == 36);
|
||||
char *str = (char *) calloc(len + 1, sizeof(char));
|
||||
strncpy(str, apple_session_id, len);
|
||||
if (airplay_video->apple_session_id) {
|
||||
free (airplay_video->apple_session_id);
|
||||
free(airplay_video->apple_session_id);
|
||||
}
|
||||
assert(apple_session_id && strlen(apple_session_id) == 36);
|
||||
airplay_video->apple_session_id = (char *) calloc(strlen(apple_session_id) + 1, sizeof(char));
|
||||
memcpy(airplay_video->apple_session_id, apple_session_id, strlen(apple_session_id));
|
||||
airplay_video->apple_session_id = str;
|
||||
str = NULL;
|
||||
}
|
||||
|
||||
void set_playback_uuid(airplay_video_t *airplay_video, const char *playback_uuid, size_t len) {
|
||||
assert(playback_uuid && len == 36);
|
||||
char *str = (char *) calloc(len + 1, sizeof(char));
|
||||
strncpy(str, playback_uuid, len);
|
||||
if (airplay_video->playback_uuid) {
|
||||
free(airplay_video->playback_uuid);
|
||||
}
|
||||
airplay_video->playback_uuid = str;
|
||||
str = NULL;
|
||||
}
|
||||
|
||||
void set_uri_prefix(airplay_video_t *airplay_video, const char *uri_prefix, size_t len) {
|
||||
assert(uri_prefix && len );
|
||||
char *str = (char *) calloc(len + 1, sizeof(char));
|
||||
strncpy(str, uri_prefix, len);
|
||||
if (airplay_video->uri_prefix) {
|
||||
free(airplay_video->uri_prefix);
|
||||
}
|
||||
airplay_video->uri_prefix = str;
|
||||
str = NULL;
|
||||
}
|
||||
|
||||
void set_language_name(airplay_video_t *airplay_video, const char *language_name, size_t len) {
|
||||
assert(language_name && len );
|
||||
char *str = (char *) calloc(len + 1, sizeof(char));
|
||||
strncpy(str, language_name, len);
|
||||
if (airplay_video->language_name) {
|
||||
free(airplay_video->language_name);
|
||||
}
|
||||
airplay_video->language_name = str;
|
||||
str = NULL;
|
||||
}
|
||||
|
||||
void set_language_code(airplay_video_t *airplay_video, const char *language_code, size_t len) {
|
||||
assert(language_code && len );
|
||||
char *str = (char *) calloc(len + 1, sizeof(char));
|
||||
strncpy(str, language_code, len);
|
||||
if (airplay_video->language_code) {
|
||||
free(airplay_video->language_code);
|
||||
}
|
||||
airplay_video->language_code = str;
|
||||
str = NULL;
|
||||
}
|
||||
|
||||
|
||||
const char *get_apple_session_id(airplay_video_t *airplay_video) {
|
||||
if (!airplay_video || !airplay_video->apple_session_id) {
|
||||
return NULL;
|
||||
@@ -165,48 +212,18 @@ void set_resume_position_seconds(airplay_video_t *airplay_video, float resume_po
|
||||
airplay_video->resume_position_seconds = resume_position_seconds;
|
||||
}
|
||||
|
||||
void set_playback_uuid(airplay_video_t *airplay_video, const char *playback_uuid) {
|
||||
if (airplay_video->playback_uuid) {
|
||||
free (airplay_video->playback_uuid);
|
||||
}
|
||||
assert(playback_uuid && strlen(playback_uuid) == 36);
|
||||
airplay_video->playback_uuid = (char *) calloc(strlen(playback_uuid) + 1, sizeof(char));
|
||||
memcpy(airplay_video->playback_uuid, playback_uuid, strlen(playback_uuid));
|
||||
}
|
||||
|
||||
const char *get_playback_uuid(airplay_video_t *airplay_video) {
|
||||
return (const char *) (!airplay_video ? NULL : airplay_video->playback_uuid);
|
||||
}
|
||||
|
||||
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 = uri_prefix;
|
||||
}
|
||||
|
||||
const char *get_uri_prefix(airplay_video_t *airplay_video) {
|
||||
return (const char *) airplay_video->uri_prefix;
|
||||
}
|
||||
|
||||
void set_language_name(airplay_video_t *airplay_video, char *language_name) {
|
||||
if (airplay_video->language_name) {
|
||||
free (airplay_video->language_name);
|
||||
}
|
||||
airplay_video->language_name = language_name;
|
||||
}
|
||||
|
||||
const char *get_language_name(airplay_video_t *airplay_video) {
|
||||
return (const char *)airplay_video->language_name;
|
||||
}
|
||||
|
||||
void set_language_code(airplay_video_t *airplay_video, char *language_code) {;
|
||||
if (airplay_video->language_code) {
|
||||
free (airplay_video->language_code);
|
||||
}
|
||||
airplay_video->language_code = language_code;
|
||||
}
|
||||
|
||||
const char *get_language_code(airplay_video_t *airplay_video) {
|
||||
return (const char *) airplay_video->language_code;
|
||||
}
|
||||
@@ -418,14 +435,14 @@ char * select_master_playlist_language(airplay_video_t *airplay_video, char *mas
|
||||
|
||||
/* update stored language code, name if changed */
|
||||
if (name != language_name) { /* compare addresses */
|
||||
int len = strlen(name);
|
||||
size_t len = strlen(name);
|
||||
char *new_language_name = (char *) calloc(len + 1, sizeof(char));
|
||||
memcpy(new_language_name, name, len);
|
||||
set_language_name(airplay_video, new_language_name);
|
||||
set_language_name(airplay_video, new_language_name, len);
|
||||
len = strlen(code);
|
||||
char *new_language_code = (char *) calloc(len + 1, sizeof(char));
|
||||
memcpy(new_language_code, code, len);
|
||||
set_language_code(airplay_video, new_language_code);
|
||||
set_language_code(airplay_video, new_language_code, len);
|
||||
}
|
||||
|
||||
int len = 0;
|
||||
|
||||
@@ -17,30 +17,31 @@
|
||||
#ifndef AIRPLAY_VIDEO_H
|
||||
#define AIRPLAY_VIDEO_H
|
||||
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "raop.h"
|
||||
#include "logger.h"
|
||||
|
||||
|
||||
typedef struct airplay_video_s airplay_video_t;
|
||||
typedef struct media_item_s media_item_t;
|
||||
|
||||
void set_apple_session_id(airplay_video_t *airplay_video, const char *apple_session_id);
|
||||
void set_apple_session_id(airplay_video_t *airplay_video, const char *apple_session_id, size_t len);
|
||||
const char *get_apple_session_id(airplay_video_t *airplay_video);
|
||||
void set_start_position_seconds(airplay_video_t *airplay_video, float start_position_seconds);
|
||||
void set_resume_position_seconds(airplay_video_t *airplay_video, float resume_position_seconds);
|
||||
float get_duration(airplay_video_t *airplay_video);
|
||||
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);
|
||||
void set_playback_uuid(airplay_video_t *airplay_video, const char *playback_uuid, size_t len);
|
||||
const char *get_playback_uuid(airplay_video_t *airplay_video);
|
||||
void set_uri_prefix(airplay_video_t *airplay_video, char *uri_prefix);
|
||||
void set_uri_prefix(airplay_video_t *airplay_video, const char *uri_prefix, size_t len);
|
||||
const char *get_uri_prefix(airplay_video_t *airplay_video);
|
||||
char *get_uri_local_prefix(airplay_video_t *airplay_video);
|
||||
void set_language_code(airplay_video_t *airplay_video, char *language_code);
|
||||
void set_language_code(airplay_video_t *airplay_video, const char *language_code, size_t len);
|
||||
const char *get_language_code(airplay_video_t *airplay_video);
|
||||
void set_language_name(airplay_video_t *airplay_video, char *language_name);
|
||||
void set_language_name(airplay_video_t *airplay_video, const char *language_name, size_t len);
|
||||
const char *get_language_name(airplay_video_t *airplay_video);
|
||||
|
||||
int get_next_FCUP_RequestID(airplay_video_t *airplay_video);
|
||||
|
||||
@@ -214,16 +214,14 @@ http_handler_set_property(raop_conn_t *conn,
|
||||
}
|
||||
}
|
||||
plist_free (req_root_node);
|
||||
const char *lname = NULL, *lcode = NULL;
|
||||
if (language_code) {
|
||||
set_language_code(airplay_video, language_code);
|
||||
lcode = get_language_code(airplay_video);
|
||||
if (language_code && language_name) {
|
||||
set_language_code(airplay_video, language_code, strlen(language_code));
|
||||
set_language_name(airplay_video, language_name, strlen(language_name));
|
||||
logger_log(conn->raop->logger, LOGGER_INFO, "stored language from MediaSelectionOptions: %s \"%s\"",
|
||||
get_language_code(airplay_video), get_language_name(airplay_video));
|
||||
}
|
||||
if (language_name) {
|
||||
set_language_name(airplay_video, language_name);
|
||||
lname = get_language_name(airplay_video);
|
||||
}
|
||||
logger_log(conn->raop->logger, LOGGER_INFO, "stored language from MediaSelectionOptions: %s \"%s\"", lcode, lname);
|
||||
plist_mem_free(language_name);
|
||||
plist_mem_free(language_code);
|
||||
} else if (!strcmp(property, "reverseEndTime") ||
|
||||
!strcmp(property, "forwardEndTime") ||
|
||||
!strcmp(property, "actionAtItemEnd")) {
|
||||
@@ -745,7 +743,7 @@ http_handler_play(raop_conn_t *conn, http_request_t *request, http_response_t *r
|
||||
printf("use: airplay_video[%d] %p %s %s\n", id, airplay_video, playback_uuid, get_playback_uuid(airplay_video));
|
||||
airplay_video = conn->raop->airplay_video[id];
|
||||
assert(airplay_video);
|
||||
set_apple_session_id(airplay_video, apple_session_id);
|
||||
set_apple_session_id(airplay_video, apple_session_id, strlen(apple_session_id));
|
||||
char * uri_local_prefix = get_uri_local_prefix(airplay_video);
|
||||
conn->raop->callbacks.on_video_play(conn->raop->callbacks.cls,
|
||||
strcat(uri_local_prefix, "/master.m3u8"),
|
||||
@@ -789,7 +787,7 @@ http_handler_play(raop_conn_t *conn, http_request_t *request, http_response_t *r
|
||||
|
||||
airplay_video = airplay_video_init(conn->raop, conn->raop->port, conn->raop->lang);
|
||||
if (airplay_video) {
|
||||
set_playback_uuid(airplay_video, playback_uuid);
|
||||
set_playback_uuid(airplay_video, playback_uuid, strlen(playback_uuid));
|
||||
plist_mem_free (playback_uuid);
|
||||
conn->raop->current_video = id;
|
||||
conn->raop->airplay_video[id] = airplay_video;
|
||||
@@ -818,7 +816,7 @@ http_handler_play(raop_conn_t *conn, http_request_t *request, http_response_t *r
|
||||
get_duration(conn->raop->airplay_video[i]));
|
||||
}
|
||||
#endif
|
||||
set_apple_session_id(airplay_video, apple_session_id);
|
||||
set_apple_session_id(airplay_video, apple_session_id, strlen(apple_session_id));
|
||||
|
||||
plist_t req_content_location_node = plist_dict_get_item(req_root_node, "Content-Location");
|
||||
if (!req_content_location_node) {
|
||||
@@ -849,15 +847,16 @@ http_handler_play(raop_conn_t *conn, http_request_t *request, http_response_t *r
|
||||
}
|
||||
set_start_position_seconds(airplay_video, (float) start_position_seconds);
|
||||
|
||||
char *ptr = strstr(playback_location, "/master.m3u8");
|
||||
if (!ptr) {
|
||||
if (!strstr(playback_location, "/master.m3u8")) {
|
||||
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);
|
||||
char *uri_prefix = (char *) calloc(strlen(playback_location) + 1, sizeof(char));
|
||||
strncpy(uri_prefix, playback_location, strlen(playback_location));
|
||||
char *ptr = strstr(uri_prefix, "/master.m3u8");
|
||||
*ptr = '\0';
|
||||
set_uri_prefix(airplay_video, uri_prefix, strlen(uri_prefix));
|
||||
free (uri_prefix);
|
||||
}
|
||||
set_next_media_uri_id(airplay_video, 0);
|
||||
printf("FCUP REQUEST\n");
|
||||
|
||||
Reference in New Issue
Block a user