diff --git a/README b/README index 1384968..67e2d73 100644 --- a/README +++ b/README @@ -101,8 +101,8 @@ Configuration: TV1;IPTV:1:IPTV|UDP|127.0.0.1|1234:P:0:512:650:2321:0:1:0:0:0 ^ ^ ^ ^ ^ ^ | | | | | Source type ("P") - | | | | IP Port Number or File delay (ms) - | | | IP Address or File Location + | | | | IP Port Number, File delay (ms), Script parameter + | | | IP Address, File location, Script location | | Protocol ("UDP", "HTTP", "FILE", "EXT") | Plugin ID ("IPTV") Unique enumeration diff --git a/device.c b/device.c index ee6d6fd..19fa558 100644 --- a/device.c +++ b/device.c @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: device.c,v 1.69 2007/10/15 20:06:38 ajhseppa Exp $ + * $Id: device.c,v 1.70 2007/10/19 21:36:27 rahrenbe Exp $ */ #include "config.h" @@ -155,26 +155,26 @@ cString cIptvDevice::GetInformation(unsigned int Page) return info; } -cString cIptvDevice::GetChannelSettings(const char *Param, int *IpPort, cIptvProtocolIf* *Protocol) +cString cIptvDevice::GetChannelSettings(const char *IptvParam, int *Parameter, cIptvProtocolIf* *Protocol) { debug("cIptvDevice::GetChannelSettings(%d)\n", deviceIndex); char *loc = NULL; - if (sscanf(Param, "IPTV|UDP|%a[^|]|%u", &loc, IpPort) == 2) { + if (sscanf(IptvParam, "IPTV|UDP|%a[^|]|%u", &loc, Parameter) == 2) { cString addr(loc, true); *Protocol = pUdpProtocol; return addr; } - else if (sscanf(Param, "IPTV|HTTP|%a[^|]|%u", &loc, IpPort) == 2) { + else if (sscanf(IptvParam, "IPTV|HTTP|%a[^|]|%u", &loc, Parameter) == 2) { cString addr(loc, true); *Protocol = pHttpProtocol; return addr; } - else if (sscanf(Param, "IPTV|FILE|%a[^|]|%u", &loc, IpPort) == 2) { + else if (sscanf(IptvParam, "IPTV|FILE|%a[^|]|%u", &loc, Parameter) == 2) { cString addr(loc, true); *Protocol = pFileProtocol; return addr; } - else if (sscanf(Param, "IPTV|EXT|%a[^|]|%u", &loc, IpPort) == 2) { + else if (sscanf(IptvParam, "IPTV|EXT|%a[^|]|%u", &loc, Parameter) == 2) { cString addr(loc, true); *Protocol = pExtProtocol; return addr; @@ -215,17 +215,17 @@ bool cIptvDevice::ProvidesChannel(const cChannel *Channel, int Priority, bool *N bool cIptvDevice::SetChannelDevice(const cChannel *Channel, bool LiveView) { - int port; - cString addr; + int parameter; + cString location; cIptvProtocolIf *protocol; debug("cIptvDevice::SetChannelDevice(%d)\n", deviceIndex); - addr = GetChannelSettings(Channel->PluginParam(), &port, &protocol); - if (isempty(addr)) { + location = GetChannelSettings(Channel->PluginParam(), ¶meter, &protocol); + if (isempty(location)) { error("ERROR: Unrecognized IPTV channel settings: %s", Channel->PluginParam()); return false; } - pIptvStreamer->Set(addr, port, protocol); + pIptvStreamer->Set(location, parameter, protocol); if (pSidScanner && IptvConfig.GetSectionFiltering() && IptvConfig.GetSidScanning()) pSidScanner->SetChannel(Channel); return true; diff --git a/device.h b/device.h index be89aa8..3fbfa33 100644 --- a/device.h +++ b/device.h @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: device.h,v 1.33 2007/10/15 21:03:45 rahrenbe Exp $ + * $Id: device.h,v 1.34 2007/10/19 21:36:28 rahrenbe Exp $ */ #ifndef __IPTV_DEVICE_H @@ -61,7 +61,7 @@ private: // for channel parsing & buffering private: - cString GetChannelSettings(const char *Param, int *IpPort, cIptvProtocolIf* *Protocol); + cString GetChannelSettings(const char *IptvParam, int *Parameter, cIptvProtocolIf* *Protocol); bool ProvidesIptv(const char *Param) const; void ResetBuffering(void); bool IsBuffering(void); diff --git a/iptv/iptvstream.sh b/iptv/iptvstream.sh index 4f141d4..6ffc938 100755 --- a/iptv/iptvstream.sh +++ b/iptv/iptvstream.sh @@ -1,5 +1,17 @@ #!/bin/sh +if [ $# -ne 2 ]; then + logger "$0: error: Invalid parameter count '$#' $*" + exit 1; +fi + +# Channels.conf parameter +PARAMETER=${1} + +# Iptv plugin listens this port +PORT=${2} + +# Define stream address URL="" if [ -z "${URL}" ]; then @@ -7,9 +19,5 @@ if [ -z "${URL}" ]; then exit 1; fi -if [ $# -ne 1 ]; then - logger "$0: error: Invalid parameter count '$#' $*" - exit 1; -fi - -exec vlc "${URL}" --sout "#transcode{vcodec=mp2v,acodec=mpga,vb=800,ab=192}:standard{access=udp,mux=ts,dst=127.0.0.1:${1}}" --intf dummy +# Use 'exec' for capturing script pid +exec vlc "${URL}" --sout "#transcode{vcodec=mp2v,acodec=mpga,vb=800,ab=192}:standard{access=udp,mux=ts,dst=127.0.0.1:${PORT}}" --intf dummy diff --git a/po/fi_FI.po b/po/fi_FI.po index 2cf8e62..857fd3a 100644 --- a/po/fi_FI.po +++ b/po/fi_FI.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: VDR 1.5.7\n" "Report-Msgid-Bugs-To: Rolf Ahrenberg\n" -"POT-Creation-Date: 2007-10-17 00:19+0300\n" +"POT-Creation-Date: 2007-10-19 23:10+0300\n" "PO-Revision-Date: 2007-08-12 23:22+0300\n" "Last-Translator: Rolf Ahrenberg\n" "Language-Team: \n" @@ -57,12 +57,18 @@ msgstr "Protokolla" msgid "Delay (ms)" msgstr "Viive (ms)" -msgid "Port" -msgstr "Portti" +msgid "Script" +msgstr "Skripti" + +msgid "Parameter" +msgstr "Parametri" msgid "Address" msgstr "Osoite" +msgid "Port" +msgstr "Portti" + msgid "Nid" msgstr "Verkko-ID" diff --git a/protocolext.c b/protocolext.c index 65ebeb0..d6a2c6c 100644 --- a/protocolext.c +++ b/protocolext.c @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: protocolext.c,v 1.6 2007/10/19 18:26:27 ajhseppa Exp $ + * $Id: protocolext.c,v 1.7 2007/10/19 21:36:28 rahrenbe Exp $ */ #include @@ -23,12 +23,12 @@ cIptvProtocolExt::cIptvProtocolExt() : pid(-1), listenPort(4321), + scriptParameter(0), socketDesc(-1), - readBufferLen(TS_SIZE * IptvConfig.GetReadBufferTsCount()), - isActive(false) + readBufferLen(TS_SIZE * IptvConfig.GetReadBufferTsCount()) { debug("cIptvProtocolExt::cIptvProtocolExt()\n"); - streamAddr = strdup(""); + scriptFile = strdup(""); listenAddr = strdup("127.0.0.1"); // Allocate receive buffer readBuffer = MALLOC(unsigned char, readBufferLen); @@ -42,7 +42,7 @@ cIptvProtocolExt::~cIptvProtocolExt() // Drop the multicast group and close the socket Close(); // Free allocated memory - free(streamAddr); + free(scriptFile); free(listenAddr); free(readBuffer); } @@ -104,13 +104,17 @@ void cIptvProtocolExt::CloseSocket(void) void cIptvProtocolExt::ExecuteCommand(void) { debug("cIptvProtocolExt::ExecuteCommand()\n"); + // Check if already executing + if (pid > 0) { + error("ERROR: Cannot execute command!"); + return; + } // Let's fork if ((pid = fork()) == -1) { char tmp[64]; error("ERROR: fork(): %s", strerror_r(errno, tmp, sizeof(tmp))); return; } - // Check if child process if (pid == 0) { // Close all dup'ed filedescriptors @@ -119,18 +123,17 @@ void cIptvProtocolExt::ExecuteCommand(void) close(i); // Execute the external script char* cmd = NULL; - asprintf(&cmd, "%s %d", streamAddr, listenPort); + asprintf(&cmd, "%s %d %d", scriptFile, scriptParameter, listenPort); debug("cIptvProtocolExt::ExecuteCommand(child): %s\n", cmd); if (execl("/bin/sh", "sh", "-c", cmd, NULL) == -1) { + error("ERROR: Command failed: %s", cmd); free(cmd); - error("ERROR: Command failed: %s", streamAddr); _exit(-1); } free(cmd); _exit(0); } else { - isActive = true; debug("cIptvProtocolExt::ExecuteCommand(): pid=%d\n", pid); } } @@ -150,18 +153,17 @@ void cIptvProtocolExt::TerminateCommand(void) error("ERROR: kill(): %s", strerror_r(errno, tmp, sizeof(tmp))); waitOver = true; } - while (!waitOver) { retval = 0; waitms += timeoutms; if ((waitms % 2000) == 0) { - error("ERROR: Script '%s' won't terminate - killing it", streamAddr); + error("ERROR: Script '%s' won't terminate - killing it!", scriptFile); kill(pid, SIGKILL); } // Clear wait status to make sure child exit status is accessible memset(&waitStatus, '\0', sizeof(waitStatus)); // Wait for child termination - retval = waitid(P_PID, pid, &waitStatus, WNOHANG | WEXITED); + retval = waitid(P_PID, pid, &waitStatus, (WNOHANG | WEXITED)); if (retval < 0) { char tmp[64]; error("ERROR: waitid(): %s", strerror_r(errno, tmp, sizeof(tmp))); @@ -169,20 +171,16 @@ void cIptvProtocolExt::TerminateCommand(void) } // These are the acceptable conditions under which child exit is // regarded as successful - if (!retval && waitStatus.si_pid && waitStatus.si_pid == pid - && (waitStatus.si_code == CLD_EXITED - || waitStatus.si_code == CLD_KILLED)) { + if (!retval && waitStatus.si_pid && (waitStatus.si_pid == pid) && + ((waitStatus.si_code == CLD_EXITED) || (waitStatus.si_code == CLD_KILLED))) { debug("Child (%d) exited as expected\n", pid); waitOver = true; } - // Unsuccessful wait, avoid busy looping if (!waitOver) cCondWait::SleepMs(timeoutms); - } - + } pid = -1; - isActive = false; } } @@ -250,34 +248,34 @@ int cIptvProtocolExt::Read(unsigned char* *BufferAddr) bool cIptvProtocolExt::Open(void) { - debug("cIptvProtocolExt::Open(): streamAddr=%s listenPort=%d\n", streamAddr, listenPort); - // Reject completely empty stream addresses - if (!strlen(streamAddr)) + debug("cIptvProtocolExt::Open()\n"); + // Reject empty script files + if (!strlen(scriptFile)) return false; // Create the listening socket OpenSocket(); - if (!isActive) - ExecuteCommand(); - return isActive; + // Execute the external command + ExecuteCommand(); + return true; } bool cIptvProtocolExt::Close(void) { - debug("cIptvProtocolExt::Close(): streamAddr=%s\n", streamAddr); + debug("cIptvProtocolExt::Close()\n"); // Close the socket CloseSocket(); - if (isActive) - TerminateCommand(); - return !isActive; + // Terminate the external script + TerminateCommand(); + return true; } -bool cIptvProtocolExt::Set(const char* Address, const int Port) +bool cIptvProtocolExt::Set(const char* Location, const int Parameter) { - debug("cIptvProtocolExt::Set(): %s:%d\n", Address, Port); - if (!isempty(Address)) { + debug("cIptvProtocolExt::Set(): Location=%s Parameter=%d\n", Location, Parameter); + if (!isempty(Location)) { // Update stream address and port - streamAddr = strcpyrealloc(streamAddr, Address); - listenPort = Port; + scriptFile = strcpyrealloc(scriptFile, Location); + scriptParameter = Parameter; } return true; } @@ -285,5 +283,5 @@ bool cIptvProtocolExt::Set(const char* Address, const int Port) cString cIptvProtocolExt::GetInformation(void) { //debug("cIptvProtocolExt::GetInformation()"); - return cString::sprintf("ext://%s:%d", streamAddr, listenPort); + return cString::sprintf("ext://%s:%d", scriptFile, scriptParameter); } diff --git a/protocolext.h b/protocolext.h index 40e340b..accde45 100644 --- a/protocolext.h +++ b/protocolext.h @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: protocolext.h,v 1.3 2007/10/18 19:33:15 rahrenbe Exp $ + * $Id: protocolext.h,v 1.4 2007/10/19 21:36:28 rahrenbe Exp $ */ #ifndef __IPTV_PROTOCOLEXT_H @@ -17,7 +17,8 @@ private: int pid; char* listenAddr; int listenPort; - char* streamAddr; + char* scriptFile; + int scriptParameter; int socketDesc; unsigned char* readBuffer; unsigned int readBufferLen; @@ -34,7 +35,7 @@ public: cIptvProtocolExt(); virtual ~cIptvProtocolExt(); virtual int Read(unsigned char* *BufferAddr); - virtual bool Set(const char* Address, const int Port); + virtual bool Set(const char* Location, const int Parameter); virtual bool Open(void); virtual bool Close(void); virtual cString GetInformation(void); diff --git a/protocolfile.c b/protocolfile.c index 236bb80..77f380a 100644 --- a/protocolfile.c +++ b/protocolfile.c @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: protocolfile.c,v 1.10 2007/10/07 22:54:09 rahrenbe Exp $ + * $Id: protocolfile.c,v 1.11 2007/10/19 21:36:28 rahrenbe Exp $ */ #include @@ -16,11 +16,12 @@ #include "protocolfile.h" cIptvProtocolFile::cIptvProtocolFile() -: readBufferLen(TS_SIZE * IptvConfig.GetReadBufferTsCount()), +: fileDelay(0), + readBufferLen(TS_SIZE * IptvConfig.GetReadBufferTsCount()), isActive(false) { debug("cIptvProtocolFile::cIptvProtocolFile()\n"); - streamAddr = strdup(""); + fileLocation = strdup(""); // Allocate receive buffer readBuffer = MALLOC(unsigned char, readBufferLen); if (!readBuffer) @@ -33,7 +34,7 @@ cIptvProtocolFile::~cIptvProtocolFile() // Drop open handles Close(); // Free allocated memory - free(streamAddr); + free(fileLocation); free(readBuffer); } @@ -41,8 +42,8 @@ bool cIptvProtocolFile::OpenFile(void) { debug("cIptvProtocolFile::OpenFile()\n"); // Check that stream address is valid - if (!isActive && !isempty(streamAddr)) { - fileStream = fopen(streamAddr, "rb"); + if (!isActive && !isempty(fileLocation)) { + fileStream = fopen(fileLocation, "rb"); if (ferror(fileStream) || !fileStream) { char tmp[64]; error("ERROR: fopen(): %s", strerror_r(errno, tmp, sizeof(tmp))); @@ -58,7 +59,7 @@ void cIptvProtocolFile::CloseFile(void) { debug("cIptvProtocolFile::CloseFile()\n"); // Check that file stream is valid - if (isActive && !isempty(streamAddr)) { + if (isActive && !isempty(fileLocation)) { fclose(fileStream); // Update active flag isActive = false; @@ -79,8 +80,8 @@ int cIptvProtocolFile::Read(unsigned char* *BufferAddr) rewind(fileStream); // Sleep before reading the file stream to prevent aggressive busy looping // and prevent transfer ringbuffer overflows - if (streamPort) - cCondWait::SleepMs(streamPort); + if (fileDelay) + cCondWait::SleepMs(fileDelay); // This check is to prevent a race condition where file may be switched off // during the sleep and buffers are disposed. Check here that the plugin is // still active before accessing the buffers @@ -91,7 +92,7 @@ int cIptvProtocolFile::Read(unsigned char* *BufferAddr) bool cIptvProtocolFile::Open(void) { - debug("cIptvProtocolFile::Open(): streamAddr=%s\n", streamAddr); + debug("cIptvProtocolFile::Open()\n"); // Open the file stream OpenFile(); return true; @@ -99,21 +100,21 @@ bool cIptvProtocolFile::Open(void) bool cIptvProtocolFile::Close(void) { - debug("cIptvProtocolFile::Close(): streamAddr=%s\n", streamAddr); + debug("cIptvProtocolFile::Close()\n"); // Close the file stream CloseFile(); return true; } -bool cIptvProtocolFile::Set(const char* Address, const int Port) +bool cIptvProtocolFile::Set(const char* Location, const int Parameter) { - debug("cIptvProtocolFile::Set(): %s:%d\n", Address, Port); - if (!isempty(Address)) { + debug("cIptvProtocolFile::Set(): Location=%s Parameter=%d\n", Location, Parameter); + if (!isempty(Location)) { // Close the file stream CloseFile(); // Update stream address and port - streamAddr = strcpyrealloc(streamAddr, Address); - streamPort = Port; + fileLocation = strcpyrealloc(fileLocation, Location); + fileDelay = Parameter; // Open the file for input OpenFile(); } @@ -123,5 +124,5 @@ bool cIptvProtocolFile::Set(const char* Address, const int Port) cString cIptvProtocolFile::GetInformation(void) { //debug("cIptvProtocolFile::GetInformation()"); - return cString::sprintf("file://%s:%d", streamAddr, streamPort); + return cString::sprintf("file://%s:%d", fileLocation, fileDelay); } diff --git a/protocolfile.h b/protocolfile.h index be780cc..56a05ae 100644 --- a/protocolfile.h +++ b/protocolfile.h @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: protocolfile.h,v 1.5 2007/10/07 22:54:09 rahrenbe Exp $ + * $Id: protocolfile.h,v 1.6 2007/10/19 21:36:28 rahrenbe Exp $ */ #ifndef __IPTV_PROTOCOLFILE_H @@ -14,8 +14,8 @@ class cIptvProtocolFile : public cIptvProtocolIf { private: - char* streamAddr; - int streamPort; + char* fileLocation; + int fileDelay; FILE* fileStream; unsigned char* readBuffer; unsigned int readBufferLen; @@ -29,7 +29,7 @@ public: cIptvProtocolFile(); virtual ~cIptvProtocolFile(); virtual int Read(unsigned char* *BufferAddr); - virtual bool Set(const char* Address, const int Port); + virtual bool Set(const char* Location, const int Parameter); virtual bool Open(void); virtual bool Close(void); virtual cString GetInformation(void); diff --git a/protocolhttp.c b/protocolhttp.c index 78e8990..0561b73 100644 --- a/protocolhttp.c +++ b/protocolhttp.c @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: protocolhttp.c,v 1.10 2007/10/07 22:54:09 rahrenbe Exp $ + * $Id: protocolhttp.c,v 1.11 2007/10/19 21:36:28 rahrenbe Exp $ */ #include @@ -336,27 +336,27 @@ int cIptvProtocolHttp::Read(unsigned char* *BufferAddr) bool cIptvProtocolHttp::Open(void) { - debug("cIptvProtocolHttp::Open(): streamAddr=%s\n", streamAddr); + debug("cIptvProtocolHttp::Open()\n"); // Connect the socket return Connect(); } bool cIptvProtocolHttp::Close(void) { - debug("cIptvProtocolHttp::Close(): streamAddr=%s\n", streamAddr); + debug("cIptvProtocolHttp::Close()\n"); // Disconnect the current stream Disconnect(); return true; } -bool cIptvProtocolHttp::Set(const char* Address, const int Port) +bool cIptvProtocolHttp::Set(const char* Location, const int Parameter) { - debug("cIptvProtocolHttp::Set(): %s:%d\n", Address, Port); - if (!isempty(Address)) { + debug("cIptvProtocolHttp::Set(): Location=%s Parameter=%d\n", Location, Parameter); + if (!isempty(Location)) { // Disconnect the current socket Disconnect(); // Update stream address, path and port - streamAddr = strcpyrealloc(streamAddr, Address); + streamAddr = strcpyrealloc(streamAddr, Location); char *path = strstr(streamAddr, "/"); if (path) { streamPath = strcpyrealloc(streamPath, path); @@ -364,7 +364,7 @@ bool cIptvProtocolHttp::Set(const char* Address, const int Port) } else streamPath = strcpyrealloc(streamPath, "/"); - streamPort = Port; + streamPort = Parameter; debug("http://%s:%d%s\n", streamAddr, streamPort, streamPath); // Re-connect the socket Connect(); diff --git a/protocolhttp.h b/protocolhttp.h index b190970..70c4abc 100644 --- a/protocolhttp.h +++ b/protocolhttp.h @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: protocolhttp.h,v 1.7 2007/10/07 22:54:09 rahrenbe Exp $ + * $Id: protocolhttp.h,v 1.8 2007/10/19 21:36:28 rahrenbe Exp $ */ #ifndef __IPTV_PROTOCOLHTTP_H @@ -36,7 +36,7 @@ public: cIptvProtocolHttp(); virtual ~cIptvProtocolHttp(); virtual int Read(unsigned char* *BufferAddr); - virtual bool Set(const char* Address, const int Port); + virtual bool Set(const char* Location, const int Parameter); virtual bool Open(void); virtual bool Close(void); virtual cString GetInformation(void); diff --git a/protocolif.h b/protocolif.h index bb63d2d..0e49555 100644 --- a/protocolif.h +++ b/protocolif.h @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: protocolif.h,v 1.5 2007/10/07 22:54:09 rahrenbe Exp $ + * $Id: protocolif.h,v 1.6 2007/10/19 21:36:28 rahrenbe Exp $ */ #ifndef __IPTV_PROTOCOLIF_H @@ -14,7 +14,7 @@ public: cIptvProtocolIf() {} virtual ~cIptvProtocolIf() {} virtual int Read(unsigned char* *BufferAddr) = 0; - virtual bool Set(const char* Address, const int Port) = 0; + virtual bool Set(const char* Location, const int Parameter) = 0; virtual bool Open(void) = 0; virtual bool Close(void) = 0; virtual cString GetInformation(void) = 0; diff --git a/protocoludp.c b/protocoludp.c index 2d726cb..3ed1cf1 100644 --- a/protocoludp.c +++ b/protocoludp.c @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: protocoludp.c,v 1.11 2007/10/07 22:54:09 rahrenbe Exp $ + * $Id: protocoludp.c,v 1.12 2007/10/19 21:36:28 rahrenbe Exp $ */ #include @@ -216,7 +216,7 @@ int cIptvProtocolUdp::Read(unsigned char* *BufferAddr) bool cIptvProtocolUdp::Open(void) { - debug("cIptvProtocolUdp::Open(): streamAddr=%s\n", streamAddr); + debug("cIptvProtocolUdp::Open()\n"); // Join a new multicast group JoinMulticast(); return true; @@ -224,7 +224,7 @@ bool cIptvProtocolUdp::Open(void) bool cIptvProtocolUdp::Close(void) { - debug("cIptvProtocolUdp::Close(): streamAddr=%s\n", streamAddr); + debug("cIptvProtocolUdp::Close()\n"); // Drop the multicast group DropMulticast(); // Close the socket @@ -232,15 +232,15 @@ bool cIptvProtocolUdp::Close(void) return true; } -bool cIptvProtocolUdp::Set(const char* Address, const int Port) +bool cIptvProtocolUdp::Set(const char* Location, const int Parameter) { - debug("cIptvProtocolUdp::Set(): %s:%d\n", Address, Port); - if (!isempty(Address)) { + debug("cIptvProtocolUdp::Set(): Location=%s Parameter=%d\n", Location, Parameter); + if (!isempty(Location)) { // Drop the multicast group DropMulticast(); // Update stream address and port - streamAddr = strcpyrealloc(streamAddr, Address); - streamPort = Port; + streamAddr = strcpyrealloc(streamAddr, Location); + streamPort = Parameter; // Join a new multicast group JoinMulticast(); } diff --git a/protocoludp.h b/protocoludp.h index 39d5c8a..6b3cc6c 100644 --- a/protocoludp.h +++ b/protocoludp.h @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: protocoludp.h,v 1.8 2007/10/07 22:54:09 rahrenbe Exp $ + * $Id: protocoludp.h,v 1.9 2007/10/19 21:36:28 rahrenbe Exp $ */ #ifndef __IPTV_PROTOCOLUDP_H @@ -32,7 +32,7 @@ public: cIptvProtocolUdp(); virtual ~cIptvProtocolUdp(); virtual int Read(unsigned char* *BufferAddr); - virtual bool Set(const char* Address, const int Port); + virtual bool Set(const char* Location, const int Parameter); virtual bool Open(void); virtual bool Close(void); virtual cString GetInformation(void); diff --git a/setup.c b/setup.c index 93d2162..d495656 100644 --- a/setup.c +++ b/setup.c @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: setup.c,v 1.37 2007/10/19 17:49:35 rahrenbe Exp $ + * $Id: setup.c,v 1.38 2007/10/19 21:36:28 rahrenbe Exp $ */ #include @@ -34,14 +34,14 @@ private: eProtocolCount }; struct tIptvChannel { - int frequency, source, protocol, port, vpid, ppid, tpid, sid, nid, tid, rid; + int frequency, source, protocol, parameter, vpid, ppid, tpid, sid, nid, tid, rid; int apid[MAXAPIDS + 1], dpid[MAXDPIDS + 1], spid[MAXSPIDS + 1], caids[MAXCAIDS + 1]; char name[256], location[256]; } data; cChannel *channel; const char *protocols[eProtocolCount]; void Setup(void); - cString GetIptvSettings(const char *Param, int *Port, int *Protocol); + cString GetIptvSettings(const char *Param, int *Parameter, int *Protocol); void GetChannelData(cChannel *Channel); void SetChannelData(cChannel *Channel); @@ -68,25 +68,25 @@ cIptvMenuEditChannel::cIptvMenuEditChannel(cChannel *Channel, bool New) Setup(); } -cString cIptvMenuEditChannel::GetIptvSettings(const char *Param, int *Port, int *Protocol) +cString cIptvMenuEditChannel::GetIptvSettings(const char *Param, int *Parameter, int *Protocol) { char *loc = NULL; - if (sscanf(Param, "IPTV|UDP|%a[^|]|%u", &loc, Port) == 2) { + if (sscanf(Param, "IPTV|UDP|%a[^|]|%u", &loc, Parameter) == 2) { cString addr(loc, true); *Protocol = eProtocolUDP; return addr; } - else if (sscanf(Param, "IPTV|HTTP|%a[^|]|%u", &loc, Port) == 2) { + else if (sscanf(Param, "IPTV|HTTP|%a[^|]|%u", &loc, Parameter) == 2) { cString addr(loc, true); *Protocol = eProtocolHTTP; return addr; } - else if (sscanf(Param, "IPTV|FILE|%a[^|]|%u", &loc, Port) == 2) { + else if (sscanf(Param, "IPTV|FILE|%a[^|]|%u", &loc, Parameter) == 2) { cString addr(loc, true); *Protocol = eProtocolFILE; return addr; } - else if (sscanf(Param, "IPTV|EXT|%a[^|]|%u", &loc, Port) == 2) { + else if (sscanf(Param, "IPTV|EXT|%a[^|]|%u", &loc, Parameter) == 2) { cString addr(loc, true); *Protocol = eProtocolEXT; return addr; @@ -97,7 +97,7 @@ cString cIptvMenuEditChannel::GetIptvSettings(const char *Param, int *Port, int void cIptvMenuEditChannel::GetChannelData(cChannel *Channel) { if (Channel) { - int port, protocol; + int parameter, protocol; data.frequency = Channel->Frequency(); data.source = Channel->Source(); data.vpid = Channel->Vpid(); @@ -116,9 +116,9 @@ void cIptvMenuEditChannel::GetChannelData(cChannel *Channel) data.tid = Channel->Tid(); data.rid = Channel->Rid(); strn0cpy(data.name, Channel->Name(), sizeof(data.name)); - strn0cpy(data.location, *GetIptvSettings(Channel->PluginParam(), &port, &protocol), sizeof(data.location)); + strn0cpy(data.location, *GetIptvSettings(Channel->PluginParam(), ¶meter, &protocol), sizeof(data.location)); data.protocol = protocol; - data.port = port; + data.parameter = parameter; } else { data.frequency = 1; @@ -141,7 +141,7 @@ void cIptvMenuEditChannel::GetChannelData(cChannel *Channel) strn0cpy(data.name, "IPTV", sizeof(data.name)); strn0cpy(data.location, "127.0.0.1", sizeof(data.location)); data.protocol = eProtocolUDP; - data.port = 1234; + data.parameter = 1234; } } @@ -154,17 +154,17 @@ void cIptvMenuEditChannel::SetChannelData(cChannel *Channel) char slangs[MAXSPIDS][MAXLANGCODE2] = { "" }; switch (data.protocol) { case eProtocolEXT: - param = cString::sprintf("IPTV|EXT|%s|%d", data.location, data.port); + param = cString::sprintf("IPTV|EXT|%s|%d", data.location, data.parameter); break; case eProtocolFILE: - param = cString::sprintf("IPTV|FILE|%s|%d", data.location, data.port); + param = cString::sprintf("IPTV|FILE|%s|%d", data.location, data.parameter); break; case eProtocolHTTP: - param = cString::sprintf("IPTV|HTTP|%s|%d", data.location, data.port); + param = cString::sprintf("IPTV|HTTP|%s|%d", data.location, data.parameter); break; default: case eProtocolUDP: - param = cString::sprintf("IPTV|UDP|%s|%d", data.location, data.port); + param = cString::sprintf("IPTV|UDP|%s|%d", data.location, data.parameter); break; } Channel->SetPids(data.vpid, data.ppid, data.apid, alangs, data.dpid, dlangs, data.spid, slangs, data.tpid); @@ -185,17 +185,17 @@ void cIptvMenuEditChannel::Setup(void) switch (data.protocol) { case eProtocolFILE: Add(new cMenuEditStrItem(trVDR("File"), data.location, sizeof(data.location), trVDR(FileNameChars))); - Add(new cMenuEditIntItem(tr("Delay (ms)"), &data.port, 0, 0xFFFF)); + Add(new cMenuEditIntItem(tr("Delay (ms)"), &data.parameter, 0, 0xFFFF)); break; case eProtocolEXT: - Add(new cMenuEditStrItem(trVDR("File"), data.location, sizeof(data.location), trVDR(FileNameChars))); - Add(new cMenuEditIntItem(tr("Port"), &data.port, 0, 0xFFFF)); + Add(new cMenuEditStrItem(tr("Script"), data.location, sizeof(data.location), trVDR(FileNameChars))); + Add(new cMenuEditIntItem(tr("Parameter"), &data.parameter, 0, 0xFFFF)); break; case eProtocolHTTP: case eProtocolUDP: default: Add(new cMenuEditStrItem(tr("Address"), data.location, sizeof(data.location), trVDR(FileNameChars))); - Add(new cMenuEditIntItem(tr("Port"), &data.port, 0, 0xFFFF)); + Add(new cMenuEditIntItem(tr("Port"), &data.parameter, 0, 0xFFFF)); break; } // Normal settings @@ -295,20 +295,20 @@ eOSState cIptvMenuEditChannel::ProcessKey(eKeys Key) switch (data.protocol) { case eProtocolEXT: strn0cpy(data.location, "/video/iptvstream.sh", sizeof(data.location)); - data.port = 0; + data.parameter = 0; break; case eProtocolFILE: strn0cpy(data.location, "/tmp/video.ts", sizeof(data.location)); - data.port = 0; + data.parameter = 0; break; case eProtocolHTTP: strn0cpy(data.location, "127.0.0.1/TS/1", sizeof(data.location)); - data.port = 3000; + data.parameter = 3000; break; default: case eProtocolUDP: strn0cpy(data.location, "127.0.0.1", sizeof(data.location)); - data.port = 1234; + data.parameter = 1234; break; } Setup(); diff --git a/streamer.c b/streamer.c index dab6fb8..8d2c753 100644 --- a/streamer.c +++ b/streamer.c @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: streamer.c,v 1.23 2007/10/11 23:06:49 rahrenbe Exp $ + * $Id: streamer.c,v 1.24 2007/10/19 21:36:28 rahrenbe Exp $ */ #include @@ -77,10 +77,10 @@ bool cIptvStreamer::Close(void) return true; } -bool cIptvStreamer::Set(const char* Address, const int Port, cIptvProtocolIf* Protocol) +bool cIptvStreamer::Set(const char* Location, const int Parameter, cIptvProtocolIf* Protocol) { - debug("cIptvStreamer::Set(): %s:%d\n", Address, Port); - if (!isempty(Address)) { + debug("cIptvStreamer::Set(): %s:%d\n", Location, Parameter); + if (!isempty(Location)) { // Update protocol; Close the existing one if changed if (protocol != Protocol) { if (protocol) @@ -89,9 +89,9 @@ bool cIptvStreamer::Set(const char* Address, const int Port, cIptvProtocolIf* Pr if (protocol) protocol->Open(); } - // Set protocol address and port + // Set protocol location and parameter if (protocol) - protocol->Set(Address, Port); + protocol->Set(Location, Parameter); } return true; } diff --git a/streamer.h b/streamer.h index 73ce546..e4dd8a6 100644 --- a/streamer.h +++ b/streamer.h @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: streamer.h,v 1.11 2007/10/09 22:12:17 rahrenbe Exp $ + * $Id: streamer.h,v 1.12 2007/10/19 21:36:28 rahrenbe Exp $ */ #ifndef __IPTV_STREAMER_H @@ -29,7 +29,7 @@ public: cIptvStreamer(cRingBufferLinear* RingBuffer, cMutex* Mutex); virtual ~cIptvStreamer(); virtual void Action(void); - bool Set(const char* Address, const int Port, cIptvProtocolIf* Protocol); + bool Set(const char* Location, const int Parameter, cIptvProtocolIf* Protocol); bool Open(void); bool Close(void); cString GetInformation(void);