From 345ecb9d22590eafe574d070c92c658e32afc89f Mon Sep 17 00:00:00 2001 From: Justin Maggard Date: Wed, 23 Nov 2011 22:41:42 +0000 Subject: [PATCH] * Fix SRT caption support with the latest Samsung Series D firmware. --- upnphttp.c | 5 +++-- upnpsoap.c | 22 ++++++++++++++++++---- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/upnphttp.c b/upnphttp.c index aee1333..ba7f5b5 100644 --- a/upnphttp.c +++ b/upnphttp.c @@ -286,6 +286,7 @@ intervening space) by either an integer or the keyword "infinite". */ } else if(strncasecmp(line, "User-Agent", 10)==0) { + char *s; /* Skip client detection if we already detected it. */ if( h->req_client ) goto next_header; @@ -304,13 +305,13 @@ intervening space) by either an integer or the keyword "infinite". */ h->reqflags |= FLAG_DLNA; h->reqflags |= FLAG_MIME_AVI_DIVX; } - else if(strstrc(p, "SEC_HHP_", '\r')) + else if((s=strstrc(p, "SEC_HHP_", '\r'))) { h->req_client = ESamsungSeriesC; h->reqflags |= FLAG_SAMSUNG; h->reqflags |= FLAG_DLNA; h->reqflags |= FLAG_NO_RESIZE; - if(strstrc(p, "SEC_HHP_TV", '\r')) + if(strstrc(s+8, "TV", '\r')) h->reqflags |= FLAG_SAMSUNG_TV; } else if(strncmp(p, "SamsungWiselinkPro", 18)==0) diff --git a/upnpsoap.c b/upnpsoap.c index 1daefc9..687f752 100644 --- a/upnpsoap.c +++ b/upnpsoap.c @@ -488,7 +488,7 @@ set_filter_flags(char * filter, struct upnphttp *h) } char * -parse_sort_criteria(char * sortCriteria, int * error) +parse_sort_criteria(char *sortCriteria, int *error) { char *order = NULL; char *item, *saveptr; @@ -929,6 +929,15 @@ callback(void *args, int argc, char **argv, char **azColName) lan_addr[passed_args->iface].str, runtime_vars.port, detailID); } break; + case ESamsungSeriesC: + if( sql_get_int_field(db, "SELECT ID from CAPTIONS where ID = '%s'", detailID) > 0 ) + { + ret = strcatf(str, "<sec:CaptionInfoEx sec:type=\"srt\">" + "http://%s:%d/Captions/%s.srt" + "</sec:CaptionInfoEx>", + lan_addr[passed_args->iface].str, runtime_vars.port, detailID); + } + break; default: break; } @@ -1119,16 +1128,21 @@ BrowseContentDirectory(struct upnphttp * h, const char * action) if( strncmp(ObjectID, MUSIC_PLIST_ID, strlen(MUSIC_PLIST_ID)) == 0 ) { if( strcmp(ObjectID, MUSIC_PLIST_ID) == 0 ) - asprintf(&orderBy, "order by d.TITLE"); + ret = asprintf(&orderBy, "order by d.TITLE"); else - asprintf(&orderBy, "order by length(OBJECT_ID), OBJECT_ID"); + ret = asprintf(&orderBy, "order by length(OBJECT_ID), OBJECT_ID"); } else if( args.client == ERokuSoundBridge ) { #ifdef __sparc__ if( totalMatches < 10000 ) #endif - asprintf(&orderBy, "order by o.CLASS, d.DISC, d.TRACK, d.TITLE"); + ret = asprintf(&orderBy, "order by o.CLASS, d.DISC, d.TRACK, d.TITLE"); + } + if( ret == -1 ) + { + orderBy = NULL; + ret = 0; } } /* If it's a DLNA client, return an error for bad sort criteria */