diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2017-08-02 19:50:39 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2017-08-02 19:54:59 +0100 |
commit | a58cb9f959cea8f99b225b70476599e8da52ac08 (patch) | |
tree | f8448f9acfb6f9f39cc552337b052c0a9d5dd2e1 /p2pvr/daemon | |
parent | debuginstall should target a subfolder of bin (diff) | |
download | p2pvr-a58cb9f959cea8f99b225b70476599e8da52ac08.tar.bz2 p2pvr-a58cb9f959cea8f99b225b70476599e8da52ac08.tar.xz p2pvr-a58cb9f959cea8f99b225b70476599e8da52ac08.zip |
Tidy and shuffle some bits
Diffstat (limited to 'p2pvr/daemon')
-rw-r--r-- | p2pvr/daemon/muxedFileSink.cpp | 128 | ||||
-rw-r--r-- | p2pvr/daemon/muxedFileSink.h | 32 | ||||
-rw-r--r-- | p2pvr/daemon/sql/schedules/pendingRecord.sql | 13 |
3 files changed, 0 insertions, 173 deletions
diff --git a/p2pvr/daemon/muxedFileSink.cpp b/p2pvr/daemon/muxedFileSink.cpp deleted file mode 100644 index ff431bc..0000000 --- a/p2pvr/daemon/muxedFileSink.cpp +++ /dev/null @@ -1,128 +0,0 @@ -#include "muxedFileSink.h" -#include <logger.h> -#include <poll.h> -#include <sys/wait.h> -#include <fcntl.h> -#include <boost/algorithm/string/split.hpp> -#include <boost/algorithm/string/classification.hpp> - -namespace P2PVR { -class MuxerFailure : public P2PVR::DataHandlingException { }; - -MuxedFileSink::MuxedFileSink(const boost::filesystem::path & t, const std::string & cmd) : - logger(LOGMANAGER()->getLogger<MuxedFileSink>()) -{ - std::vector<std::string> params; - boost::algorithm::split(params, cmd, isspace, boost::algorithm::token_compress_on); - for (auto & c : params) { - if (c == "${TARGET}") { - c = t.string(); - } - } - fds = ProcessPipesPtr(new AdHoc::System::ProcessPipes(params, true, true, true)); - fcntl(fds->fdIn(), F_SETFL, O_NONBLOCK); - logger->messagebf(LOG::INFO, "Muxer::%p started with command '%s' for %s", this, cmd, t); -} - -MuxedFileSink::~MuxedFileSink() -{ - close(fds->fdIn()); - int status; - while (waitpid(fds->pid(), &status, WNOHANG) == 0) { - ReadMuxer(5); - } - logger->messagebf(LOG::INFO, "Muxer::%p finished with status %d", this, status); -} - -bool -MuxedFileSink::NewData(const P2PVR::Data & data, const Ice::Current &) -{ - std::lock_guard<std::mutex> g(lock); - for (size_t off = 0; off < data.size(); ) { - // Read output until input wouldn't block - if (ReadWaiting()) - return true; - // Send some input - auto w = write(fds->fdIn(), &data[off], data.size() - off); - if (w == -1 && errno != EAGAIN && errno != EWOULDBLOCK) { - logger->messagebf(LOG::ERR, "Muxer::%p write failed (%d:%s)", this, errno, strerror(errno)); - throw MuxerFailure(); - } - off += w; - } - // Read anything that's come out - return ReadAvailable(); -} - -bool -MuxedFileSink::ReadWaiting() const -{ - pollfd fd = { fds->fdIn(), POLLOUT, 0 }; - while (true) { - auto p = poll(&fd, 1, 0); - if (p < 0) { - // error - throw MuxerFailure(); - } - else if (p == 0) { - // write would block - if (ReadMuxer(1)) return true; - } - else { - // write would not block - if (ReadMuxer(0)) return true; - break; - } - } - return false; -} - -bool -MuxedFileSink::ReadAvailable() const -{ - return ReadMuxer(0); -} - -bool -MuxedFileSink::ReadMuxer(int waitTime) const -{ - pollfd fd[2] = { { fds->fdOut(), POLLIN | POLLHUP, 0 }, { fds->fdError(), POLLIN | POLLHUP, 0 } }; - while (true) { - auto p = poll(fd, 2, waitTime); - if (p < 0) { - // error - throw MuxerFailure(); - } - else if (p == 0) { - // all ok - return false; - } - else { - bool closed = false; - for (int i = 0; i < 2; ++i) { - if (fd[i].revents & (POLLIN | POLLHUP)) { - P2PVR::Data buf(BUFSIZ); - auto len = read(fd[i].fd, &buf.front(), buf.size()); - if (len == 0) { - // ok, proc exit - closed = true; - } - if (len < 0) { - // error - throw MuxerFailure(); - } - buf.resize(len); - std::vector<std::string> lines; - boost::algorithm::split(lines, buf, boost::algorithm::is_any_of("\r\n\f"), boost::algorithm::token_compress_on); - for (const auto & line : lines) { - if (line.empty()) continue; - logger->messagebf(LOG::INFO, "Muxer::%p > %s", this, line); - } - } - } - if (closed) return true; - } - } -} -} - diff --git a/p2pvr/daemon/muxedFileSink.h b/p2pvr/daemon/muxedFileSink.h deleted file mode 100644 index d91e106..0000000 --- a/p2pvr/daemon/muxedFileSink.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef MUXEDFILESINK_H -#define MUXEDFILESINK_H - -#include <dvb.h> -#include <mutex> -#include <boost/filesystem/path.hpp> -#include <boost/shared_ptr.hpp> -#include <processPipes.h> -#include <logger.h> - -namespace P2PVR { -class MuxedFileSink : public P2PVR::RawDataClient { - public: - MuxedFileSink(const boost::filesystem::path & target, const std::string & cmd); - ~MuxedFileSink(); - - bool NewData(const P2PVR::Data &, const Ice::Current &); - - private: - bool ReadWaiting() const; - bool ReadAvailable() const; - bool ReadMuxer(int wait) const; - typedef boost::shared_ptr<AdHoc::System::ProcessPipes> ProcessPipesPtr; - ProcessPipesPtr fds; - mutable std::mutex lock; - - IceTray::Logging::LoggerPtr logger; -}; -} - -#endif - diff --git a/p2pvr/daemon/sql/schedules/pendingRecord.sql b/p2pvr/daemon/sql/schedules/pendingRecord.sql deleted file mode 100644 index ba4d7d8..0000000 --- a/p2pvr/daemon/sql/schedules/pendingRecord.sql +++ /dev/null @@ -1,13 +0,0 @@ -select * -from record r, events e, schedules s -where r.serviceid = e.serviceid -and r.eventid = e.eventid -and /*r.scheduleid*/ 161 = s.scheduleid -and r.recordstatus = 1 -and r.recordingstatus = 0 -and e.starttime - s.early - interval '3minutes' < now() -order by e.starttime - s.early - -; -select * -from schedules
\ No newline at end of file |