From 417202343b64947e80dbe14b4ab456cc6442e88c Mon Sep 17 00:00:00 2001 From: thlo Date: Sun, 1 Sep 2013 21:09:15 +0200 Subject: New enable flag for RecCmds and new Port parameter in smarttvweb.conf. Bug fixes. --- responsememblk.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'responsememblk.c') diff --git a/responsememblk.c b/responsememblk.c index f77f950..292dabb 100755 --- a/responsememblk.c +++ b/responsememblk.c @@ -1172,7 +1172,6 @@ void cResponseMemBlk::sendRecCmds() { void cResponseMemBlk::receiveExecRecCmdReq() { vector avps; - mRequest->parseQueryLine(&avps); string guid; string cmd_str; uint cmdid; @@ -1180,6 +1179,14 @@ void cResponseMemBlk::receiveExecRecCmdReq() { if (isHeadRequest()) return; + if (! mRequest->mFactory->getConfig()->getRecCmds()) { + sendError(400, "Bad Request", NULL, "017 execreccmd disabled."); + return; + + } + mRequest->parseQueryLine(&avps); + + if (mRequest->getQueryAttributeValue(&avps, "guid", guid) != OKAY){ sendError(400, "Bad Request", NULL, "002 No guid in query line"); return; -- cgit v1.2.3 From 9010746b5691cbab96fc9558751177b9287166f6 Mon Sep 17 00:00:00 2001 From: thlo Date: Mon, 2 Sep 2013 18:53:27 +0200 Subject: Provide correct MIME types for media.xml --- responsememblk.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'responsememblk.c') diff --git a/responsememblk.c b/responsememblk.c index 292dabb..563167f 100755 --- a/responsememblk.c +++ b/responsememblk.c @@ -1275,7 +1275,7 @@ uint64_t cResponseMemBlk::getVdrFileSize() { // common for all create xml file modules -int cResponseMemBlk::writeXmlItem(string name, string link, string programme, string desc, string guid, int no, time_t start, int dur, double fps, int is_pes, int is_new) { +int cResponseMemBlk::writeXmlItem(string name, string link, string programme, string desc, string guid, int no, time_t start, int dur, double fps, int is_pes, int is_new, string mime) { string hdr = ""; char f[400]; @@ -1283,7 +1283,8 @@ int cResponseMemBlk::writeXmlItem(string name, string link, string programme, st // snprintf(f, sizeof(f), "%s - %s", ); hdr += "" + name +"\n"; hdr += "" +link + "\n"; - hdr += "\n"; + // hdr += "\n"; + hdr += "\n"; hdr += "" + guid + "\n"; @@ -1478,7 +1479,7 @@ int cResponseMemBlk::parseFiles(vector *entries, string prefix, stri << " Vdr Folder Found: " << pathbuf << " start= " << start << endl; #endif - entries->push_back(sFileEntry(dir_name, pathbuf, start)); + entries->push_back(sFileEntry(dir_name, pathbuf, start, "video/mpeg")); } else { // regular file @@ -1486,8 +1487,9 @@ int cResponseMemBlk::parseFiles(vector *entries, string prefix, stri } } else { - if ((de->d_name)[0] != '.' ) - entries->push_back(sFileEntry(prefix+de->d_name, pathbuf, 1)); + if ((de->d_name)[0] != '.' ) { + entries->push_back(sFileEntry(prefix+de->d_name, pathbuf, 1, getMimeType(de->d_name))); + } } } closedir(dir); @@ -1538,7 +1540,7 @@ int cResponseMemBlk::sendMediaXml (struct stat *statbuf) { snprintf(pathbuf, sizeof(pathbuf), "http://%s:%d%s", own_ip.c_str(), mRequest->mServerPort, cUrlEncode::doUrlSaveEncode(entries[i].sPath).c_str()); if (writeXmlItem(cUrlEncode::doXmlSaveEncode(entries[i].sName), pathbuf, "NA", "NA", "-", - -1, entries[i].sStart, -1, -1, -1, -1) == ERROR) + -1, entries[i].sStart, -1, -1, -1, -1, entries[i].sMime) == ERROR) return ERROR; } @@ -1872,7 +1874,7 @@ int cResponseMemBlk::sendChannelsXml (struct stat *statbuf) { string c_name = (group_sep != "") ? (group_sep + "~" + cUrlEncode::doXmlSaveEncode(channel->Name())) : cUrlEncode::doXmlSaveEncode(channel->Name()); // if (writeXmlItem(channel->Name(), link, title, desc, *(channel->GetChannelID()).ToString(), start_time, duration) == ERROR) - if (writeXmlItem(c_name, link, title, desc, *(channel->GetChannelID()).ToString(), channel->Number(), start_time, duration, -1, -1, -1) == ERROR) + if (writeXmlItem(c_name, link, title, desc, *(channel->GetChannelID()).ToString(), channel->Number(), start_time, duration, -1, -1, -1, "video/mpeg") == ERROR) return ERROR; } @@ -2244,7 +2246,7 @@ int cResponseMemBlk::sendRecordingsXml(struct stat *statbuf) { cUrlEncode::doUrlSaveEncode(recording->FileName()).c_str(), -1, recording->Start(), rec_dur, recording->FramesPerSecond(), - (recording->IsPesRecording() ? 0: 1), (recording->IsNew() ? 0: 1)) == ERROR) { + (recording->IsPesRecording() ? 0: 1), (recording->IsNew() ? 0: 1), "video/mpeg") == ERROR) { *mResponseMessage = ""; sendError(500, "Internal Server Error", NULL, "005 writeXMLItem returned an error"); return OKAY; -- cgit v1.2.3 From 60bfd8aad9a4ab7d810d6a6bf82fe71f64d56263 Mon Sep 17 00:00:00 2001 From: thlo Date: Wed, 4 Sep 2013 08:40:04 +0200 Subject: New /deleteFile API. Bug Fixes. --- responsememblk.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-) (limited to 'responsememblk.c') diff --git a/responsememblk.c b/responsememblk.c index 563167f..d53fdc1 100755 --- a/responsememblk.c +++ b/responsememblk.c @@ -26,6 +26,7 @@ #include "smarttvfactory.h" #include +#include #ifndef STANDALONE #include @@ -44,7 +45,6 @@ //#include //#include #include - #endif @@ -1060,6 +1060,58 @@ void cResponseMemBlk::receiveDelTimerReq() { } } +void cResponseMemBlk::receiveDelFileReq() { + if (isHeadRequest()) + return ; + + *(mLog->log()) << DEBUGPREFIX << " cResponseMemBlk::receiveDelFileReq" << endl; + + vector avps; + mRequest->parseQueryLine(&avps); + + //guid= + string guid = ""; + + if (mRequest->getQueryAttributeValue(&avps, "guid", guid) == OKAY) { + guid = cUrlEncode::doUrlSaveDecode(guid); + *(mLog->log()) << DEBUGPREFIX + << " guid= " << guid << endl; + } + + if (guid.size() == 0) { + sendError(404, "Not Found", NULL, "003 File not found."); + return; + } + if (guid.compare(0, (mRequest->mFactory->getConfig()->getMediaFolder()).size(), mRequest->mFactory->getConfig()->getMediaFolder()) != 0) { + sendError(404, "Not Found", NULL, "003 File not found."); + return; + } + + *(mLog->log()) << DEBUGPREFIX + << " Trying to delete file " << guid << endl; + + if( remove( guid.c_str() ) != 0 ) { + *(mLog->log()) << DEBUGPREFIX + << " Deletion Failed. Errno= " << errno << endl; + switch (errno) { + case 2: // No such file or directory + sendError(400, "Bad Request", NULL, "018 No such file or directory. "); + break; + case 13: // Permission denied + sendError(400, "Bad Request", NULL, "019 Permission Denied. "); + break; + case 21: // Is a directory + sendError(400, "Bad Request", NULL, "020 Is a directory. "); + break; + default: // default + sendError(400, "Bad Request", NULL, "021 Deletion failed. "); + break; + } + } + else + sendHeaders(200, "OK", NULL, NULL, 0, -1); +} + void cResponseMemBlk::sendTimersXml() { char f[200]; @@ -1079,7 +1131,9 @@ void cResponseMemBlk::sendTimersXml() { // s_timers.push_back(t); s_timers.Append(t); } +#if VDRVERSNUM > 10721 s_timers.Sort(timerCompare); +#endif #else cSortedTimers s_timers; #endif @@ -1539,7 +1593,8 @@ int cResponseMemBlk::sendMediaXml (struct stat *statbuf) { snprintf(pathbuf, sizeof(pathbuf), "http://%s:%d%s", own_ip.c_str(), mRequest->mServerPort, cUrlEncode::doUrlSaveEncode(entries[i].sPath).c_str()); - if (writeXmlItem(cUrlEncode::doXmlSaveEncode(entries[i].sName), pathbuf, "NA", "NA", "-", + if (writeXmlItem(cUrlEncode::doXmlSaveEncode(entries[i].sName), pathbuf, "NA", "NA", + cUrlEncode::doUrlSaveEncode(entries[i].sPath).c_str(), -1, entries[i].sStart, -1, -1, -1, -1, entries[i].sMime) == ERROR) return ERROR; -- cgit v1.2.3