diff --git a/common.h b/common.h index e85e72d..ab7c248 100644 --- a/common.h +++ b/common.h @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: common.h,v 1.5 2007/10/07 20:08:44 rahrenbe Exp $ + * $Id: common.h,v 1.6 2007/10/07 22:54:09 rahrenbe Exp $ */ #ifndef __IPTV_COMMON_H @@ -22,13 +22,15 @@ uint8_t payload(const uint8_t *tsp); #define error(x...) esyslog("IPTV: " x); #endif -#define IPTV_STATS_UNIT_IN_BYTES 0 -#define IPTV_STATS_UNIT_IN_KBYTES 1 -#define IPTV_STATS_UNIT_IN_BITS 2 -#define IPTV_STATS_UNIT_IN_KBITS 3 -#define IPTV_STATS_UNIT_COUNT 4 +#define IPTV_STATS_UNIT_IN_BYTES 0 +#define IPTV_STATS_UNIT_IN_KBYTES 1 +#define IPTV_STATS_UNIT_IN_BITS 2 +#define IPTV_STATS_UNIT_IN_KBITS 3 +#define IPTV_STATS_UNIT_COUNT 4 -#define SECTION_FILTER_TABLE_SIZE 7 +#define IPTV_STATS_ACTIVE_PIDS_COUNT 10 + +#define SECTION_FILTER_TABLE_SIZE 7 typedef struct _section_filter_table_type { const char *description; diff --git a/device.c b/device.c index 79211b6..594b22d 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.56 2007/10/07 19:06:33 ajhseppa Exp $ + * $Id: device.c,v 1.57 2007/10/07 22:54:09 rahrenbe Exp $ */ #include "common.h" @@ -98,9 +98,20 @@ cIptvDevice *cIptvDevice::GetIptvDevice(int CardIndex) cString cIptvDevice::GetInformation() { - return cString::sprintf("Device:\n%s\nStreamer:\n%s\nSection Filter 0:\n%s", *GetStatistic(), + // loop through active section filters + cString filterInfo("\n"); + for (unsigned int i = 0; i < eMaxSecFilterCount; ++i) { + if (secfilters[i]) + filterInfo = cString::sprintf("%sSec %d: %s%c", *filterInfo, i, + *secfilters[i]->GetStatistic(), + ((i + 1) % 2) ? '\t' : '\n'); + } + // generate information string + return cString::sprintf("IPTV device #%d (CardIndex: %d)\nSource: %s\n%s\n%s%s", + deviceIndex, CardIndex(), pIptvStreamer ? + *pIptvStreamer->GetInformation() : "", *GetStatistic(), pIptvStreamer ? *pIptvStreamer->GetStatistic() : "", - secfilters[0] ? *secfilters[0]->GetStatistic() : ""); + *filterInfo); } cString cIptvDevice::GetChannelSettings(const char *Param, int *IpPort, cIptvProtocolIf* *Protocol) diff --git a/protocolfile.c b/protocolfile.c index d99b039..236bb80 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.9 2007/09/29 18:15:31 rahrenbe Exp $ + * $Id: protocolfile.c,v 1.10 2007/10/07 22:54:09 rahrenbe Exp $ */ #include @@ -119,3 +119,9 @@ bool cIptvProtocolFile::Set(const char* Address, const int Port) } return true; } + +cString cIptvProtocolFile::GetInformation(void) +{ + //debug("cIptvProtocolFile::GetInformation()"); + return cString::sprintf("file://%s:%d", streamAddr, streamPort); +} diff --git a/protocolfile.h b/protocolfile.h index 02d557a..be780cc 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.4 2007/09/28 16:44:59 rahrenbe Exp $ + * $Id: protocolfile.h,v 1.5 2007/10/07 22:54:09 rahrenbe Exp $ */ #ifndef __IPTV_PROTOCOLFILE_H @@ -32,6 +32,7 @@ public: virtual bool Set(const char* Address, const int Port); virtual bool Open(void); virtual bool Close(void); + virtual cString GetInformation(void); }; #endif // __IPTV_PROTOCOLFILE_H diff --git a/protocolhttp.c b/protocolhttp.c index 3841bc6..78e8990 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.9 2007/09/29 16:21:05 rahrenbe Exp $ + * $Id: protocolhttp.c,v 1.10 2007/10/07 22:54:09 rahrenbe Exp $ */ #include @@ -365,9 +365,15 @@ bool cIptvProtocolHttp::Set(const char* Address, const int Port) else streamPath = strcpyrealloc(streamPath, "/"); streamPort = Port; - debug("iptv://%s:%d%s\n", streamAddr, streamPort, streamPath); + debug("http://%s:%d%s\n", streamAddr, streamPort, streamPath); // Re-connect the socket Connect(); } return true; } + +cString cIptvProtocolHttp::GetInformation(void) +{ + //debug("cIptvProtocolHttp::GetInformation()"); + return cString::sprintf("http://%s:%d%s", streamAddr, streamPort, streamPath); +} diff --git a/protocolhttp.h b/protocolhttp.h index c8ac542..b190970 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.6 2007/09/29 10:55:14 ajhseppa Exp $ + * $Id: protocolhttp.h,v 1.7 2007/10/07 22:54:09 rahrenbe Exp $ */ #ifndef __IPTV_PROTOCOLHTTP_H @@ -39,6 +39,7 @@ public: virtual bool Set(const char* Address, const int Port); virtual bool Open(void); virtual bool Close(void); + virtual cString GetInformation(void); }; #endif // __IPTV_PROTOCOLHTTP_H diff --git a/protocolif.h b/protocolif.h index fd4d2e7..bb63d2d 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.4 2007/09/29 16:21:05 rahrenbe Exp $ + * $Id: protocolif.h,v 1.5 2007/10/07 22:54:09 rahrenbe Exp $ */ #ifndef __IPTV_PROTOCOLIF_H @@ -17,6 +17,7 @@ public: virtual bool Set(const char* Address, const int Port) = 0; virtual bool Open(void) = 0; virtual bool Close(void) = 0; + virtual cString GetInformation(void) = 0; private: cIptvProtocolIf(const cIptvProtocolIf&); diff --git a/protocoludp.c b/protocoludp.c index c52e0b2..2d726cb 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.10 2007/09/29 16:21:05 rahrenbe Exp $ + * $Id: protocoludp.c,v 1.11 2007/10/07 22:54:09 rahrenbe Exp $ */ #include @@ -246,3 +246,9 @@ bool cIptvProtocolUdp::Set(const char* Address, const int Port) } return true; } + +cString cIptvProtocolUdp::GetInformation(void) +{ + //debug("cIptvProtocolUdp::GetInformation()"); + return cString::sprintf("udp://%s:%d", streamAddr, streamPort); +} diff --git a/protocoludp.h b/protocoludp.h index 75c604e..39d5c8a 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.7 2007/09/29 16:21:05 rahrenbe Exp $ + * $Id: protocoludp.h,v 1.8 2007/10/07 22:54:09 rahrenbe Exp $ */ #ifndef __IPTV_PROTOCOLUDP_H @@ -35,6 +35,7 @@ public: virtual bool Set(const char* Address, const int Port); virtual bool Open(void); virtual bool Close(void); + virtual cString GetInformation(void); }; #endif // __IPTV_PROTOCOLUDP_H diff --git a/statistics.c b/statistics.c index 5df789c..247d6e6 100644 --- a/statistics.c +++ b/statistics.c @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: statistics.c,v 1.9 2007/10/07 20:08:45 rahrenbe Exp $ + * $Id: statistics.c,v 1.10 2007/10/07 22:54:09 rahrenbe Exp $ */ #include @@ -28,11 +28,9 @@ cIptvSectionStatistics::~cIptvSectionStatistics() cString cIptvSectionStatistics::GetStatistic() { - debug("cIptvSectionStatistics::GetStatistic()\n"); + //debug("cIptvSectionStatistics::GetStatistic()\n"); uint64_t elapsed = timer.Elapsed(); timer.Set(); - // Prevent a divide-by-zero error - elapsed ? : elapsed = 1; float divider = elapsed / 1000; char unit[] = { ' ', 'B', '/', 's', '\0' }; if (IptvConfig.IsStatsUnitInKilos()) { @@ -43,10 +41,10 @@ cString cIptvSectionStatistics::GetStatistic() divider /= sizeof(unsigned short) * 8; unit[1] = 'b'; } - long tmpFilteredData = filteredData; - long tmpNumberOfCalls = numberOfCalls; + cString info = cString::sprintf("%4ld (%4ld %s)", numberOfCalls, divider ? + (long)(filteredData / divider) : 0L, unit); filteredData = numberOfCalls = 0; - return cString::sprintf("Filtered data: %ld %s\nData packets passed: %ld\n", (long)(tmpFilteredData / divider), unit, tmpNumberOfCalls); + return info; } // --- cIptvDeviceStatistics ------------------------------------------------- @@ -67,13 +65,10 @@ cIptvDeviceStatistics::~cIptvDeviceStatistics() cString cIptvDeviceStatistics::GetStatistic() { - debug("cIptvDeviceStatistics::GetStatistic()\n"); - pidStruct tmpMostActivePids[10]; + //debug("cIptvDeviceStatistics::GetStatistic()\n"); long tmpDataBytes = dataBytes; uint64_t elapsed = timer.Elapsed(); timer.Set(); - // Prevent a divide-by-zero error - elapsed ? : elapsed = 1; float divider = elapsed / 1000; char unit[] = { ' ', 'B', '/', 's', '\0' }; if (IptvConfig.IsStatsUnitInKilos()) { @@ -84,24 +79,21 @@ cString cIptvDeviceStatistics::GetStatistic() divider /= sizeof(unsigned short) * 8; unit[1] = 'b'; } + cString info = cString::sprintf("Bitrate: %ld %s\n", divider ? + (long)(tmpDataBytes / divider) : 0L, unit); + for (unsigned int i = 0; i < IPTV_STATS_ACTIVE_PIDS_COUNT; ++i) { + if (mostActivePids[i].pid) + info = cString::sprintf("%sPid %d: %4d (%4ld %s)%c", *info, i, + mostActivePids[i].pid, + (long)(mostActivePids[i].DataAmount / divider), + unit, ((i + 1) % 2) ? '\t' : '\n'); + } dataBytes = 0; - memcpy(&tmpMostActivePids, &mostActivePids, sizeof(tmpMostActivePids)); memset(&mostActivePids, '\0', sizeof(mostActivePids)); - return cString::sprintf("Stream data bytes: %ld %s\n" - " 1. Active Pid: %d %ld %s\n" - " 2. Active Pid: %d %ld %s\n" - " 3. Active Pid: %d %ld %s\n" - " 4. Active Pid: %d %ld %s\n" - " 5. Active Pid: %d %ld %s\n", - (long)(tmpDataBytes / divider), unit, - tmpMostActivePids[0].pid, (long)(tmpMostActivePids[0].DataAmount / divider), unit, - tmpMostActivePids[1].pid, (long)(tmpMostActivePids[1].DataAmount / divider), unit, - tmpMostActivePids[2].pid, (long)(tmpMostActivePids[2].DataAmount / divider), unit, - tmpMostActivePids[3].pid, (long)(tmpMostActivePids[3].DataAmount / divider), unit, - tmpMostActivePids[4].pid, (long)(tmpMostActivePids[4].DataAmount / divider), unit); + return info; } -int SortFunc(const void* data1, const void* data2) +static int SortFunc(const void* data1, const void* data2) { //debug("cIptvDeviceStatistics::SortFunc()\n"); pidStruct *comp1 = (pidStruct*)data1; @@ -153,11 +145,9 @@ cIptvStreamerStatistics::~cIptvStreamerStatistics() cString cIptvStreamerStatistics::GetStatistic() { - debug("cIptvStreamerStatistics::GetStatistic()\n"); + //debug("cIptvStreamerStatistics::GetStatistic()\n"); uint64_t elapsed = timer.Elapsed(); timer.Set(); - // Prevent a divide-by-zero error - elapsed ? : elapsed = 1; float divider = elapsed / 1000; char unit[] = { ' ', 'B', '/', 's', '\0' }; if (IptvConfig.IsStatsUnitInKilos()) { @@ -168,7 +158,7 @@ cString cIptvStreamerStatistics::GetStatistic() divider /= sizeof(unsigned short) * 8; unit[1] = 'b'; } - long tmpDataBytes = (long)(dataBytes / divider); + long tmpDataBytes = divider ? (long)(dataBytes / divider) : 0L; dataBytes = 0; - return cString::sprintf("Stream data bytes: %ld %s\n", tmpDataBytes, unit); + return cString::sprintf("Streamer: %ld %s", tmpDataBytes, unit); } diff --git a/statistics.h b/statistics.h index e36df0f..a647397 100644 --- a/statistics.h +++ b/statistics.h @@ -3,7 +3,7 @@ * * See the README file for copyright information and how to reach the author. * - * $Id: statistics.h,v 1.4 2007/10/07 19:06:33 ajhseppa Exp $ + * $Id: statistics.h,v 1.5 2007/10/07 22:54:09 rahrenbe Exp $ */ #ifndef __IPTV_STATISTICS_H @@ -47,7 +47,7 @@ protected: void UpdateActivePids(u_short pid, long payload); private: - pidStruct mostActivePids[10]; + pidStruct mostActivePids[IPTV_STATS_ACTIVE_PIDS_COUNT]; cTimeMs timer; }; diff --git a/streamer.c b/streamer.c index 72679d5..47cbbcc 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.17 2007/10/05 19:00:44 ajhseppa Exp $ + * $Id: streamer.c,v 1.18 2007/10/07 22:54:09 rahrenbe Exp $ */ #include @@ -96,3 +96,10 @@ bool cIptvStreamer::Set(const char* Address, const int Port, cIptvProtocolIf* Pr return true; } +cString cIptvStreamer::GetInformation(void) +{ + //debug("cIptvStreamer::GetInformation()"); + if (protocol) + return protocol->GetInformation(); + return NULL; +} diff --git a/streamer.h b/streamer.h index b75e524..a2f8cad 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.8 2007/10/05 19:00:44 ajhseppa Exp $ + * $Id: streamer.h,v 1.9 2007/10/07 22:54:09 rahrenbe Exp $ */ #ifndef __IPTV_STREAMER_H @@ -32,6 +32,7 @@ public: bool Set(const char* Address, const int Port, cIptvProtocolIf* Protocol); bool Open(void); bool Close(void); + cString GetInformation(void); }; #endif // __IPTV_STREAMER_H