summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorFrank Schmirler <vdr@schmirler.de>2013-10-01 23:52:03 +0200
committerFrank Schmirler <vdr@schmirler.de>2013-10-01 23:52:03 +0200
commite1ba17ca21266cdf2e853d49c8457e21c1f188ad (patch)
tree618da1c055a01c0479e28c8621d7ea2bb5806114 /server
parentd3df5d07a13cb18be498db4f25b77265ee307d35 (diff)
downloadvdr-plugin-streamdev-e1ba17ca21266cdf2e853d49c8457e21c1f188ad.tar.gz
vdr-plugin-streamdev-e1ba17ca21266cdf2e853d49c8457e21c1f188ad.tar.bz2
Ignore dummy file extensions (.ts, .vob, .vdr) when parsing HTTP URIs
Diffstat (limited to 'server')
-rw-r--r--server/connectionHTTP.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/server/connectionHTTP.c b/server/connectionHTTP.c
index 02e5170..26f6d1c 100644
--- a/server/connectionHTTP.c
+++ b/server/connectionHTTP.c
@@ -556,11 +556,24 @@ bool cConnectionHTTP::ProcessURI(const std::string& PathInfo)
if (file_pos != std::string::npos) {
size_t ext_pos = PathInfo.rfind('.');
- // file basename with leading / stripped off
- filespec = PathInfo.substr(file_pos + 1, ext_pos - file_pos - 1);
- if (ext_pos != std::string::npos)
+ if (ext_pos != std::string::npos) {
// file extension including leading .
fileext = PathInfo.substr(ext_pos);
+ const char *ext = fileext.c_str();
+ // ignore dummy file extensions
+ if (strcasecmp(ext, ".ts") == 0 ||
+ strcasecmp(ext, ".vdr") == 0 ||
+ strcasecmp(ext, ".vob") == 0) {
+ size_t ext_end = ext_pos;
+ if (ext_pos > 0)
+ ext_pos = PathInfo.rfind('.', ext_pos - 1);
+ if (ext_pos == std::string::npos)
+ ext_pos = ext_end;
+ fileext = PathInfo.substr(ext_pos, ext_end - ext_pos);
+ }
+ }
+ // file basename with leading / stripped off
+ filespec = PathInfo.substr(file_pos + 1, ext_pos - file_pos - 1);
}
if (fileext.length() > 5) {
//probably not an extension