diff options
-rw-r--r-- | src/input/input_http.c | 19 | ||||
-rw-r--r-- | src/input/input_plugin.h | 5 |
2 files changed, 20 insertions, 4 deletions
diff --git a/src/input/input_http.c b/src/input/input_http.c index cbc2e8140..169a0d384 100644 --- a/src/input/input_http.c +++ b/src/input/input_http.c @@ -82,6 +82,8 @@ typedef struct { char auth[BUFSIZE]; char proxyauth[BUFSIZE]; + + char *mime_type; char *proto; char *user; @@ -592,17 +594,20 @@ static const char* http_plugin_get_mrl (input_plugin_t *this_gen) { } static int http_plugin_get_optional_data (input_plugin_t *this_gen, - void *data, int data_type) { + void *const data, int data_type) { + void **const ptr = (void **const) data; http_input_plugin_t *this = (http_input_plugin_t *) this_gen; switch (data_type) { case INPUT_OPTIONAL_DATA_PREVIEW: - memcpy (data, this->preview, this->preview_size); return this->preview_size; - break; + case INPUT_OPTIONAL_DATA_MIME_TYPE: + *ptr = this->mime_type; + case INPUT_OPTIONAL_DATA_DEMUX_MIME_TYPE: + return *this->mime_type ? INPUT_OPTIONAL_SUCCESS : INPUT_OPTIONAL_UNSUPPORTED; } return INPUT_OPTIONAL_UNSUPPORTED; @@ -627,6 +632,7 @@ static void http_plugin_dispose (input_plugin_t *this_gen ) { if (this->user) free(this->user); if (this->password) free(this->password); if (this->uri) free(this->uri); + if (this->mime_type) free(this->mime_type); free (this); } @@ -655,7 +661,9 @@ static int http_plugin_open (input_plugin_t *this_gen ) { int use_proxy; int proxyport; int mpegurl_redirect = 0; - + char mime_type[256]; + + mime_type[0] = 0; use_proxy = this_class->proxyhost && strlen(this_class->proxyhost); if (use_proxy) { @@ -922,6 +930,7 @@ static int http_plugin_open (input_plugin_t *this_gen ) { const char *type = this->buf + sizeof (TAG_CONTENT_TYPE) - 1; while (isspace (*type)) ++type; + sprintf (mime_type, "%.255s", type); if (!strncasecmp (type, "video/nsv", 9)) { lprintf("shoutcast nsv detected\n"); this->is_nsv = 1; @@ -993,6 +1002,8 @@ static int http_plugin_open (input_plugin_t *this_gen ) { lprintf("preview_size=%"PRId64"\n", this->preview_size); this->curpos = 0; + if (*mime_type) + this->mime_type = strdup (mime_type); return 1; } diff --git a/src/input/input_plugin.h b/src/input/input_plugin.h index 4790164d5..ff4c75b29 100644 --- a/src/input/input_plugin.h +++ b/src/input/input_plugin.h @@ -307,6 +307,11 @@ struct input_plugin_s { #define INPUT_OPTIONAL_DATA_SPULANG 3 #define INPUT_OPTIONAL_DATA_PREVIEW 7 +/* buffer is a const char **; the string is freed by the input plugin. */ +#define INPUT_OPTIONAL_DATA_MIME_TYPE 8 +/* buffer is unused; true if the demuxer should be determined by the MIME type */ +#define INPUT_OPTIONAL_DATA_DEMUX_MIME_TYPE 9 + #define MAX_MRL_ENTRIES 255 #define MAX_PREVIEW_SIZE 4096 |