From 21da96308d73458deaa121e1b7a1ce712273c82a Mon Sep 17 00:00:00 2001 From: schmirl Date: Thu, 13 Mar 2008 16:01:17 +0000 Subject: [PATCH] Make sure that a FilterStreamer is only started if client supports it (#261) Modified Files: client/socket.c server/connectionVTP.c server/connectionVTP.h --- client/socket.c | 12 +++++++++--- server/connectionVTP.c | 18 ++++++++++++------ server/connectionVTP.h | 1 + 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/client/socket.c b/client/socket.c index 5db6efe..f349e71 100644 --- a/client/socket.c +++ b/client/socket.c @@ -1,5 +1,5 @@ /* - * $Id: socket.c,v 1.8 2007/04/24 10:57:34 schmirl Exp $ + * $Id: socket.c,v 1.9 2008/03/13 16:01:17 schmirl Exp $ */ #include @@ -140,8 +140,14 @@ bool cClientSocket::CheckConnection(void) { return false; } - isyslog("Streamdev: Connected to server %s:%d using capabilities TSPIDS", - RemoteIp().c_str(), RemotePort()); + const char *Filters = ""; +#if VDRVERSNUM >= 10300 + if(Command("CAPS FILTERS", 220)) + Filters = ",FILTERS"; +#endif + + isyslog("Streamdev: Connected to server %s:%d using capabilities TSPIDS%s", + RemoteIp().c_str(), RemotePort(), Filters); return true; } diff --git a/server/connectionVTP.c b/server/connectionVTP.c index 60237ea..2829c13 100644 --- a/server/connectionVTP.c +++ b/server/connectionVTP.c @@ -1,5 +1,5 @@ /* - * $Id: connectionVTP.c,v 1.16 2008/03/12 09:36:27 schmirl Exp $ + * $Id: connectionVTP.c,v 1.17 2008/03/13 16:01:18 schmirl Exp $ */ #include "server/connectionVTP.h" @@ -478,6 +478,7 @@ cConnectionVTP::cConnectionVTP(void): m_FilterStreamer(NULL), m_LastCommand(NULL), m_StreamType(stTSPIDS), + m_FiltersSupport(false), m_LSTEHandler(NULL), m_LSTCHandler(NULL), m_LSTTHandler(NULL) @@ -608,8 +609,10 @@ bool cConnectionVTP::CmdCAPS(char *Opts) // // Deliver section filters data in separate, channel-independent data stream // - if (strcasecmp(Opts, "FILTERS") == 0) + if (strcasecmp(Opts, "FILTERS") == 0) { + m_FiltersSupport = true; return Respond(220, "Capability \"%s\" accepted", Opts); + } #endif return Respond(561, "Capability \"%s\" not known", Opts); @@ -680,6 +683,7 @@ bool cConnectionVTP::CmdPORT(char *Opts) #if VDRVERSNUM >= 10300 if (id == siLiveFilter) { + m_FiltersSupport = true; if(m_FilterStreamer) m_FilterStreamer->Stop(); delete m_FilterSocket; @@ -743,10 +747,12 @@ bool cConnectionVTP::CmdTUNE(char *Opts) m_LiveStreamer->Start(m_LiveSocket); #if VDRVERSNUM >= 10300 - if(!m_FilterStreamer) - m_FilterStreamer = new cStreamdevFilterStreamer; - m_FilterStreamer->SetDevice(dev); - //m_FilterStreamer->SetChannel(chan); + if(m_FiltersSupport) { + if(!m_FilterStreamer) + m_FilterStreamer = new cStreamdevFilterStreamer; + m_FilterStreamer->SetDevice(dev); + //m_FilterStreamer->SetChannel(chan); + } #endif return Respond(220, "Channel tuned"); diff --git a/server/connectionVTP.h b/server/connectionVTP.h index aa9a90f..3acb1a2 100644 --- a/server/connectionVTP.h +++ b/server/connectionVTP.h @@ -24,6 +24,7 @@ private: char *m_LastCommand; eStreamType m_StreamType; + bool m_FiltersSupport; // Members adopted for SVDRP cRecordings Recordings;