diff options
author | Frank Schmirler <vdr@schmirler.de> | 2013-10-01 23:52:03 +0200 |
---|---|---|
committer | Frank Schmirler <vdr@schmirler.de> | 2013-10-01 23:52:03 +0200 |
commit | e1ba17ca21266cdf2e853d49c8457e21c1f188ad (patch) | |
tree | 618da1c055a01c0479e28c8621d7ea2bb5806114 /server | |
parent | d3df5d07a13cb18be498db4f25b77265ee307d35 (diff) | |
download | vdr-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.c | 19 |
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 |