summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitar Petrovski <dimeptr@gmail.com>2011-05-15 01:51:54 +0200
committerDimitar Petrovski <dimeptr@gmail.com>2011-05-15 01:51:54 +0200
commitd202a909ef2601729f81e8f4720a3d384092652a (patch)
treed5d12c02989b1a06353587a5ec0a5739e3dfac83
parent7c6b0d167cdccd79c51d69ce6c938f1128fe7cda (diff)
downloadvdr-plugin-eepg-d202a909ef2601729f81e8f4720a3d384092652a.tar.gz
vdr-plugin-eepg-d202a909ef2601729f81e8f4720a3d384092652a.tar.bz2
Changed loging so that in can be modified (decorated) in the future
Removed warnings Refactored some code fixed MHW1 so all summaries that are present are included
-rw-r--r--Makefile3
-rw-r--r--eepg.c817
-rw-r--r--eepg.h3
3 files changed, 358 insertions, 465 deletions
diff --git a/Makefile b/Makefile
index d5a15f4..4d28ef7 100644
--- a/Makefile
+++ b/Makefile
@@ -31,7 +31,7 @@ VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).c | awk '{ pri
### The C++ compiler and options:
CXX ?= g++
-CXXFLAGS ?= -O2 -fPIC -Wall -Woverloaded-virtual -Wno-unused-result
+CXXFLAGS ?= -O2 -fPIC -Wall -Woverloaded-virtual
### The directory environment:
@@ -42,6 +42,7 @@ TMPDIR = /tmp
### Allow user defined options to overwrite defaults:
-include $(VDRDIR)/Make.config
+-include Make.config
### The version number of VDR (taken from VDR's "config.h"):
diff --git a/eepg.c b/eepg.c
index b8e1ca7..2a59665 100644
--- a/eepg.c
+++ b/eepg.c
@@ -39,6 +39,7 @@
#include "eepg.h"
#include <map>
+#include <string>
#define VERBOSE 1
/* 0 = only print errors, 1 = print channels and themes, 2 = print channels, themes, titles, summaries 3 = debug mode */
@@ -71,6 +72,8 @@
static const char *VERSION = "0.0.6pre";
static const char *DESCRIPTION = trNOOP ("Parses Extended EPG data");
+using namespace std;
+
// --- cSetupEEPG -------------------------------------------------------
const char *optPats[] = {
@@ -105,6 +108,10 @@ public:
int RatingInfo;
int FixEpg;
int DisplayMessage;
+#ifdef DEBUG
+ int LogLevel;
+#endif
+
public:
cSetupEEPG (void);
};
@@ -118,6 +125,10 @@ cSetupEEPG::cSetupEEPG (void)
RatingInfo = 1;
FixEpg = 0;
DisplayMessage = 1;
+#ifdef DEBUG
+ LogLevel = 0;
+#endif
+
}
// --- cMenuSetupPremiereEpg ------------------------------------------------------------
@@ -148,6 +159,9 @@ cMenuSetupPremiereEpg::cMenuSetupPremiereEpg (void)
Add (new cMenuEditBoolItem (tr ("Show rating information"), &data.RatingInfo));
Add (new cMenuEditBoolItem (tr ("Fix EPG data"), &data.FixEpg));
Add (new cMenuEditBoolItem (tr ("Display summary message"), &data.DisplayMessage));
+#ifdef DEBUG
+ Add (new cMenuEditIntItem (tr ("Level of logging verbosity"), &data.LogLevel, 0, 5));
+#endif
}
void cMenuSetupPremiereEpg::Store (void)
@@ -158,8 +172,69 @@ void cMenuSetupPremiereEpg::Store (void)
SetupStore ("RatingInfo", SetupPE.RatingInfo);
SetupStore ("FixEpg", SetupPE.FixEpg);
SetupStore ("DisplayMessage", SetupPE.DisplayMessage);
+#ifdef DEBUG
+ SetupStore ("LogLevel", SetupPE.LogLevel);
+#endif
}
+bool CheckLevel(int level)
+{
+#ifdef DEBUG
+ if (SetupPE.LogLevel >= level)
+#else
+ if (VERBOSE >= level)
+#endif
+ {
+ return true;
+ }
+ return false;
+}
+
+const char* PrepareLog(string message)
+{
+ message = "EEPG: " + message;
+ return message.c_str();
+}
+
+#define MAXSYSLOGBUF 256
+
+//void LogVsyslog(int errLevel, const char * message, ...)
+void LogVsyslog(int errLevel, int const& lineNum, const char * function, const char * message, ...)
+{
+ va_list ap;
+ char fmt[MAXSYSLOGBUF];
+ if (errLevel == LOG_DEBUG) {
+ snprintf(fmt, sizeof(fmt), "[%d] %s:%d %s", cThread::ThreadId(), function, lineNum, message);
+ } else {
+ snprintf(fmt, sizeof(fmt), "[%d] %s", cThread::ThreadId(), message);
+ }
+ va_start(ap,message);
+ vsyslog ( errLevel, fmt, ap );
+ va_end(ap);
+}
+
+#define LogI(a, b...) void( CheckLevel(a) ? LogVsyslog ( LOG_INFO, __LINE__, __FUNCTION__, b ) : void() )
+#define LogE(a, b...) void( CheckLevel(a) ? LogVsyslog ( LOG_ERR, __LINE__, __FUNCTION__, b ) : void() )
+#define LogD(a, b...) void( CheckLevel(a) ? LogVsyslog ( LOG_DEBUG, __LINE__, __FUNCTION__, b ) : void() )
+//#define LogE(a, b...) void( CheckLevel(a) ? esyslog ( b ) : void() )
+//#define LogD(a, b...) void( CheckLevel(a) ? dsyslog ( b ) : void() )
+#define prep(s) PrepareLog(s)
+#define prep2(s) s
+
+//void LogF(int level, const char * message, ...) __attribute__ ((format (printf,2,3)));
+
+//void LogF(int level, const char * message, ...)
+//{
+// if (CheckLevel(level)) {
+// va_list ap;
+// va_start(ap,message);
+// vsyslog (LOG_ERR, PrepareLog(message), ap );
+// va_end(ap);
+// }
+//}
+
+#define Asprintf(a, b, c...) void( asprintf(a, b, c) < 0 ? esyslog("memory allocation error - %s", b) : void() )
+
// --- CRC16 -------------------------------------------------------------------
#define POLY 0xA001 // CRC16
@@ -260,8 +335,7 @@ cFilterEEPG::cFilterEEPG (void)
void cFilterEEPG::Trigger (void)
{
- if (VERBOSE >= 3)
- isyslog ("trigger\n");
+ LogI(3, prep("trigger\n"));
pmtpid = 0;
pmtidx = 0;
pmtnext = 0;
@@ -269,7 +343,7 @@ void cFilterEEPG::Trigger (void)
void cFilterEEPG::SetStatus (bool On)
{
- isyslog ("setstatus %d\n", On);
+ LogI(0, prep("setstatus %d\n"), On);
if (!On) {
FreeSummaries ();
FreeTitles ();
@@ -291,8 +365,7 @@ void cFilterEEPG::NextPmt (void)
Del (pmtpid, 0x02);
pmtpid = 0;
pmtidx++;
- if (VERBOSE >= 3)
- esyslog ("PMT next\n");
+ LogE(3, prep("PMT next\n"));
}
//TODO next routine is also in cEIT2, make this simpler
@@ -409,7 +482,7 @@ static unsigned long decode_binary (char *binary)
* \param tableid - Table id that should be loaded
* \param filename - Filename to load
*/
-static void load_file (int tableid, char *filename)
+static void load_file (int tableid, const char *filename)
{
char buf[1024];
char *from, *to, *binary;
@@ -417,7 +490,7 @@ static void load_file (int tableid, char *filename)
tableid--;
if ((fp = fopen (filename, "r")) != NULL) {
- isyslog ("Loading table %d Filename <%s>", tableid + 1, filename);
+ LogI(0, prep("Loading table %d Filename <%s>"), tableid + 1, filename);
while (fgets (buf, sizeof (buf), fp) != NULL) {
from = binary = to = NULL;
@@ -441,7 +514,7 @@ static void load_file (int tableid, char *filename)
}
fclose (fp);
} else {
- isyslog ("EEPG: Cannot load <%s> for table %d", filename, tableid + 1);
+ LogE(0, prep("Cannot load <%s> for table %d"), filename, tableid + 1);
}
}
@@ -530,7 +603,7 @@ char *freesat_huffman_decode (const unsigned char *src, size_t size)
bit++;
}
} else {
- isyslog ("Missing table %d entry: <%s>", tableid + 1, uncompressed);
+ LogE (0, prep("Missing table %d entry: <%s>"), tableid + 1, uncompressed);
// Entry missing in table.
return uncompressed;
}
@@ -635,41 +708,24 @@ void CleanString (unsigned char *String)
}
}
-// int aSprintF (char **strp, const char *fmt, const char *str1, const char *str2) {
- // int ret = asprintf (&FileName, "%s/%s", ConfDir, "sky_uk.themes");
- // if (ret < 0) {
- // esyslog ("EEPG: Error, not enough memory to create string %s ...", str1);
- // }
- // return ret;
-// }
-
-bool cFilterEEPG::GetThemesSKYBOX (void) //TODO can't we read this from the DVB stream?
+bool cFilterEEPG::GetThemesSKYBOX (void) //TODO can't we read this from the DVB stream?
{
- char *FileName;
+ string FileName = ConfDir;
FILE *FileThemes;
char *Line;
char Buffer[256];
- const char *themeFilename;
-
if (Format == SKY_IT)
- themeFilename = "sky_it.themes";
+ FileName += "/sky_it.themes";
else if (Format == SKY_UK)
- themeFilename = "sky_uk.themes";
+ FileName += "/sky_uk.themes";
else {
- esyslog ("EEPG: Error, wrong format detected in GetThemesSKYBOX. Format = %i.", Format);
+ LogE (0, prep("Error, wrong format detected in GetThemesSKYBOX. Format = %i."), Format);
return false;
}
-
- if (asprintf (&FileName, "%s/%s", ConfDir, themeFilename) < 0) {
- esyslog ("EEPG: Error, not enough memory to create filename");
- return false;
- }
-
//asprintf( &FileName, "%s/%s", ConfDir, ( lProviders + CurrentProvider )->Parm3 );
- FileThemes = fopen (FileName, "r");
+ FileThemes = fopen (FileName.c_str(), "r");
if (FileThemes == NULL) {
- esyslog ("EEPG: Error opening file '%s'. %s", FileName, strerror (errno));
- free (FileName);
+ LogE (0, prep("Error opening file '%s'. %s"), FileName.c_str(), strerror (errno));
return false;
} else {
//int id = 0;
@@ -693,38 +749,36 @@ bool cFilterEEPG::GetThemesSKYBOX (void) //TODO can't we read this from the DV
}
fclose (FileThemes);
}
- free (FileName);
return true;
}
bool cFilterEEPG::ReadFileDictionary (void)
{
- char *FileName;
+ string FileName = ConfDir;
FILE *FileDict;
char *Line;
char Buffer[256];
switch (Format) {
case SKY_IT:
- asprintf (&FileName, "%s/%s", ConfDir, "sky_it.dict");
+ FileName += "/sky_it.dict";
break;
case SKY_UK:
- asprintf (&FileName, "%s/%s", ConfDir, "sky_uk.dict");
+ FileName += "/sky_uk.dict";
break;
case FREEVIEW:
- asprintf (&FileName, "%s/%s", ConfDir, "freesat.t1");
- load_file (1, FileName);
- asprintf (&FileName, "%s/%s", ConfDir, "freesat.t2");
- load_file (2, FileName);
+ FileName += "/freesat.t1";
+ load_file (1, FileName.c_str());
+ FileName += "/freesat.t2";
+ load_file (2, FileName.c_str());
break;
default:
- esyslog ("EEPG: Error, wrong format detected in ReadFileDictionary. Format = %i.", Format);
+ LogE (0 ,prep("Error, wrong format detected in ReadFileDictionary. Format = %i."), Format);
return false;
}
if ((Format == SKY_IT) || (Format == SKY_UK)) { //SKY
- FileDict = fopen (FileName, "r");
+ FileDict = fopen (FileName.c_str(), "r");
if (FileDict == NULL) {
- esyslog ("EEPG: Error opening file '%s'. %s", FileName, strerror (errno));
- free (FileName);
+ LogE (0, prep("Error opening file '%s'. %s"), FileName.c_str(), strerror (errno));
return false;
} else {
int i;
@@ -752,13 +806,13 @@ bool cFilterEEPG::ReadFileDictionary (void)
nH->P0 = NULL;
nH->P1 = NULL;
if ((LenPrefix - 1) == i) {
- asprintf (&nH->Value, "%s", string1);
+ Asprintf (&nH->Value, "%s", string1);
}
} else {
nH = nH->P0;
if (nH->Value != NULL || (LenPrefix - 1) == i) {
- esyslog ("EEPG: Error, huffman prefix code already exists for \"%s\"=%s with '%s'", string1,
- string2, nH->Value);
+ LogE (0 ,prep("Error, huffman prefix code already exists for \"%s\"=%s with '%s'"), string1,
+ string2, nH->Value);
}
}
break;
@@ -770,13 +824,13 @@ bool cFilterEEPG::ReadFileDictionary (void)
nH->P0 = NULL;
nH->P1 = NULL;
if ((LenPrefix - 1) == i) {
- asprintf (&nH->Value, "%s", string1);
+ Asprintf (&nH->Value, "%s", string1);
}
} else {
nH = nH->P1;
if (nH->Value != NULL || (LenPrefix - 1) == i) {
- esyslog ("EEPG: Error, huffman prefix code already exists for \"%s\"=%s with '%s'", string1,
- string2, nH->Value);
+ LogE (0, prep("Error, huffman prefix code already exists for \"%s\"=%s with '%s'"), string1,
+ string2, nH->Value);
}
}
break;
@@ -791,7 +845,7 @@ bool cFilterEEPG::ReadFileDictionary (void)
}
// check tree huffman nodes
- FileDict = fopen (FileName, "r");
+ FileDict = fopen (FileName.c_str(), "r");
if (FileDict) {
int i;
int LenPrefix;
@@ -823,10 +877,10 @@ bool cFilterEEPG::ReadFileDictionary (void)
}
if (nH->Value != NULL) {
if (memcmp (nH->Value, string1, strlen (nH->Value)) != 0) {
- esyslog ("EEPG: Error, huffman prefix value '%s' not equal to '%s'", nH->Value, string1);
+ LogE (0, prep("Error, huffman prefix value '%s' not equal to '%s'"), nH->Value, string1);
}
} else {
- esyslog ("EEPG: Error, huffman prefix value is not exists for \"%s\"=%s", string1, string2);
+ LogE (0, prep("Error, huffman prefix value is not exists for \"%s\"=%s"), string1, string2);
}
}
}
@@ -834,11 +888,9 @@ bool cFilterEEPG::ReadFileDictionary (void)
fclose (FileDict);
}
} //if Format == 3 || Format == 4
- free (FileName);
return true;
}
-
int DecodeHuffmanCode (const u_char * Data, int Length, unsigned char *DecodeText)
{
int i;
@@ -938,9 +990,9 @@ void decodeText2 (const unsigned char *from, int len, char *buffer, int buffsize
SI::CharArray charArray;
charArray.assign(from, len);
convStr.setData(charArray, len);
- //isyslog("decodeText2 from %s - length %d", from, len);
+ //LogE(5, prep("decodeText2 from %s - length %d"), from, len);
convStr.getText(buffer, buffsize);
- //isyslog("decodeText2 buffer %s - buffsize %d", buffer, buffsize);
+ //LogE(5, prep("decodeText2 buffer %s - buffsize %d"), buffer, buffsize);
}
void cFilterEEPG::LoadEquivalentChannels (void)
@@ -948,10 +1000,9 @@ void cFilterEEPG::LoadEquivalentChannels (void)
char Buffer[1024];
char *Line;
FILE *File;
- char *FileName;
+ string FileName = string(ConfDir) + "/" + EEPG_FILE_EQUIV;
- asprintf (&FileName, "%s/%s", ConfDir, EEPG_FILE_EQUIV);
- File = fopen (FileName, "r");
+ File = fopen (FileName.c_str(), "r");
if (File) {
memset (Buffer, 0, sizeof (Buffer));
char string1[256];
@@ -981,21 +1032,19 @@ void cFilterEEPG::LoadEquivalentChannels (void)
sChannel *C = NULL;
while (i < nChannels && (!found)) {
C = &sChannels[i];
- if (C->Src[0] == cSource::FromString (string3) && C->Nid[0] == int1
+ if (C->Src[0] == (unsigned int)cSource::FromString (string3) && C->Nid[0] == int1
&& C->Tid[0] == int2 && C->Sid[0] == int3)
found = true;
else
i++;
}
if (!found) {
- if (VERBOSE >= 2)
- isyslog
- ("EEPG Warning: in equivalence file, cannot find original channel %s. Perhaps you are tuned to another transponder right now.",
- string1);
+ LogI(2, prep("Warning: in equivalence file, cannot find original channel %s. Perhaps you are tuned to another transponder right now."),
+ string1);
} else {
cChannel *OriginalChannel = Channels.GetByChannelID (OriginalChID, false);
- if (!OriginalChannel && (VERBOSE >= 2))
- isyslog ("EEPG: warning, not found epg channel \'%s\' in channels.conf. Equivalency is assumed to be valid, but perhaps you should check the entry in the equivalents file", string1); //TODO: skip this warning?
+ if (!OriginalChannel)
+ LogI(2, prep("Warning, not found epg channel \'%s\' in channels.conf. Equivalency is assumed to be valid, but perhaps you should check the entry in the equivalents file"), string1); //TODO: skip this ing?
if (sscanf (string2, "%[^-]-%i -%i -%i ", string3, &int1, &int2, &int3) == 4) {
if (sscanf (string2, "%[^-]-%i -%i -%i -%i ", string3, &int1, &int2, &int3, &int4)
!= 5) {
@@ -1011,18 +1060,15 @@ void cFilterEEPG::LoadEquivalentChannels (void)
C->Sid[C->NumberOfEquivalences] = EquivChannel->Sid ();
C->NumberOfEquivalences++;
nEquivChannels++;
- if (VERBOSE >= 3)
- isyslog
- ("EEPG: Added equivalent nr %i with Channel Id %s-%i-%i-%i to channel with id %i.",
- C->NumberOfEquivalences, *cSource::ToString (C->Src[C->NumberOfEquivalences - 1]),
- C->Nid[C->NumberOfEquivalences - 1], C->Tid[C->NumberOfEquivalences - 1],
- C->Sid[C->NumberOfEquivalences - 1], i);
+ LogI(3, prep("Added equivalent nr %i with Channel Id %s-%i-%i-%i to channel with id %i."),
+ C->NumberOfEquivalences, *cSource::ToString (C->Src[C->NumberOfEquivalences - 1]),
+ C->Nid[C->NumberOfEquivalences - 1], C->Tid[C->NumberOfEquivalences - 1],
+ C->Sid[C->NumberOfEquivalences - 1], i);
} else
- esyslog
- ("EEPG: Error, channel with id %i has more than %i equivalences. Increase MAX_EQUIVALENCES.",
- i, MAX_EQUIVALENCES);
+ LogE(0, prep("Error, channel with id %i has more than %i equivalences. Increase MAX_EQUIVALENCES."),
+ i, MAX_EQUIVALENCES);
} else
- isyslog ("EEPG: warning, not found equivalent channel \'%s\' in channels.conf", string2);
+ LogI(0, prep("Warning, not found equivalent channel \'%s\' in channels.conf"), string2);
}
} //else !found
} //if scanf string1
@@ -1032,10 +1078,9 @@ void cFilterEEPG::LoadEquivalentChannels (void)
} //while
fclose (File);
} //if file
- free (FileName);
} //end of loadequiv
-int cFilterEEPG::GetChannelsMHW (const u_char * Data, int Length, int MHW) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
+int cFilterEEPG::GetChannelsMHW (const u_char * Data, int Length, int MHW) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
{
if ((MHW == 1) || (nChannels == 0)) { //prevents MHW2 from reading channels twice while waiting for themes on same filter
sChannelMHW1 *Channel;
@@ -1050,7 +1095,7 @@ int cFilterEEPG::GetChannelsMHW (const u_char * Data, int Length, int MHW) //r
if (Length > 120)
nChannels = Data[120];
else {
- esyslog ("EEPG: Error, channels packet too short for MHW2.");
+ LogE(0, prep("Error, channels packet too short for MHW2."));
return 0;
}
int pName = ((nChannels * 8) + 121);
@@ -1059,20 +1104,18 @@ int cFilterEEPG::GetChannelsMHW (const u_char * Data, int Length, int MHW) //r
Size -= 14; //MHW2 is 14 bytes shorter
Off = 121; //and offset differs
} else {
- esyslog ("EEPG: Error, channels length does not match pname.");
+ LogE(0, prep("Error, channels length does not match pname."));
return 0;
}
}
if (nChannels > MAX_CHANNELS) {
- esyslog ("EEPG: Error, channels found more than %i", MAX_CHANNELS);
+ LogE(0, prep("EEPG: Error, %i channels found more than %i"), nChannels, MAX_CHANNELS);
return 0;
} else {
- if (VERBOSE >= 1) {
- isyslog ("| ID | %-26.26s | %-22.22s | FND | %-8.8s |\n", "Channel ID", "Channel Name", "Sky Num.");
- isyslog ("|------|-%-26.26s-|-%-22.22s-|-----|-%-8.8s-|\n", "------------------------------",
- "-----------------------------", "--------------------");
- }
+ LogI(1, "| ID | %-26.26s | %-22.22s | FND | %-8.8s |\n", "Channel ID", "Channel Name", "Sky Num.");
+ LogI(1, "|------|-%-26.26s-|-%-22.22s-|-----|-%-8.8s-|\n", "------------------------------",
+ "-----------------------------", "--------------------");
int pName = ((nChannels * 8) + 121); //TODO double ...
for (int i = 0; i < nChannels; i++) {
Channel = (sChannelMHW1 *) (Data + Off);
@@ -1112,18 +1155,10 @@ int cFilterEEPG::GetChannelsMHW (const u_char * Data, int Length, int MHW) //r
}
CleanString (C->Name);
- if (VERBOSE >= 1) {
- char *ChID;
- asprintf (&ChID, "%s-%i-%i-%i-0", *cSource::ToString (C->Src[0]), C->Nid[0], C->Tid[0], C->Sid[0]);
- char *IsF;
- if (IsFound)
- asprintf (&IsF, " %-3.3s |", "YES");
- else
- asprintf (&IsF, " %-3.3s |", "NO");
- isyslog ("|% 5d | %-26.26s | %-22.22s |%s % 6d |\n", C->ChannelId, ChID, C->Name, IsF, C->SkyNumber);
- free (ChID);
- free (IsF);
- }
+ LogI(1, "|% 5d | %-26.26s | %-22.22s | %-3.3s | % 6d |\n", C->ChannelId
+ , *tChannelID (C->Src[0], C->Nid[0], C->Tid[0], C->Sid[0]).ToString()
+ , C->Name, IsFound ? "YES" : "NO", C->SkyNumber);
+
Off += Size;
} //for loop
} //else nChannels > MAX_CHANNELS
@@ -1131,7 +1166,7 @@ int cFilterEEPG::GetChannelsMHW (const u_char * Data, int Length, int MHW) //r
GetLocalTimeOffset (); //reread timing variables, only used for MHW
return 2; //obviously, when you get here, channels are read succesfully, but since all channels are sent at once, you can stop now
} //if nChannels == 0
- esyslog ("EEPG Warning: Trying to read Channels more than once!");
+ LogE (0, prep("Warning: Trying to read Channels more than once!"));
//you will only get here when GetChannelsMHW is called, and nChannels !=0, e.g. when multiple citpids cause channels to be read multiple times. Second time, do nothing, give error so that the rest of the chain is not restarted also.
return 0;
}
@@ -1142,11 +1177,10 @@ int cFilterEEPG::GetThemesMHW1 (const u_char * Data, int Length) //return code 0
sThemeMHW1 *Theme = (sThemeMHW1 *) (Data + 19);
nThemes = (Length - 19) / 15;
if (nThemes > MAX_THEMES) {
- esyslog ("EEPG: Error, themes found more than %i", MAX_THEMES);
+ LogE(1, prep("Error, %i themes found more than %i"), nThemes, MAX_THEMES);
return 0;
} else {
- if (VERBOSE >= 1)
- isyslog ("-------------THEMES FOUND--------------");
+ LogI(1, "-------------THEMES FOUND--------------");
int ThemeId = 0;
int Offset = 0;
const u_char *ThemesIndex = (Data + 3);
@@ -1158,13 +1192,12 @@ int cFilterEEPG::GetThemesMHW1 (const u_char * Data, int Length) //return code 0
memcpy (&Themes[Offset][0], &Theme->Name, 15);
Themes[Offset][15] = NULL; //trailing null
CleanString (Themes[Offset]);
- if (VERBOSE >= 1)
- isyslog ("%.15s", Themes[Offset]);
+ LogI(1, prep("%.15s"), Themes[Offset]);
Offset++;
Theme++;
}
if ((nThemes * 15) + 19 != Length) {
- esyslog ("EEPG: Themes error: buffer is smaller or bigger than sum of entries.");
+ LogE(0, "Themes error: buffer is smaller or bigger than sum of entries.");
return 0;
} else
return 2;
@@ -1173,7 +1206,7 @@ int cFilterEEPG::GetThemesMHW1 (const u_char * Data, int Length) //return code 0
return 1;
}
-int cFilterEEPG::GetThemesMHW2 (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
+int cFilterEEPG::GetThemesMHW2 (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
{
if (!EndThemes) { //only proces if not processed
int p1;
@@ -1184,8 +1217,7 @@ int cFilterEEPG::GetThemesMHW2 (const u_char * Data, int Length) //return code
int lenSubThemeName = 0;
int pThemeId = 0;
if (Length > 4) {
- if (VERBOSE >= 1)
- isyslog ("-------------THEMES FOUND--------------");
+ LogI(1, "-------------THEMES FOUND--------------");
for (int i = 0; i < Data[4]; i++) {
p1 = ((Data[5 + i * 2] << 8) | Data[6 + i * 2]) + 3;
if (Length > p1) {
@@ -1203,7 +1235,7 @@ int cFilterEEPG::GetThemesMHW2 (const u_char * Data, int Length) //return code
if (Length >= (pThemeName + lenThemeName)) {
pThemeId = ((i & 0x3f) << 6) | (ii & 0x3f);
if (pThemeId > MAX_THEMES) {
- esyslog ("EEPG: Error, something wrong with themes id calculation MaxThemes: %i pThemeID:%d", MAX_THEMES, pThemeId);
+ LogE(1, prep("Error, something wrong with themes id calculation MaxThemes: %i pThemeID:%d"), MAX_THEMES, pThemeId);
return 0; //fatal error
}
if ((lenThemeName + 2) < 256) {
@@ -1217,12 +1249,11 @@ int cFilterEEPG::GetThemesMHW2 (const u_char * Data, int Length) //return code
//memcpy (&Themes[pThemeId][lenThemeName + 1], &Data[pSubThemeName], lenSubThemeName);
}
CleanString (Themes[pThemeId]);
- if (VERBOSE >= 1)
- isyslog ("%.*s", lenThemeName + 1 + lenSubThemeName, Themes[pThemeId]);
+ LogI(1, prep("%.*s"), lenThemeName + 1 + lenSubThemeName, Themes[pThemeId]);
//isyslog ("%.15s", (lThemes + pThemeId)->Name);
nThemes++;
if (nThemes > MAX_THEMES) {
- esyslog ("EEPG: Error, themes found more than %i", MAX_THEMES);
+ LogE(1, prep("Error, %i themes found more than %i"), nThemes, MAX_THEMES);
return 0; //fatal error
}
}
@@ -1249,12 +1280,12 @@ char *cFilterEEPG::GetSummaryTextNagra (const u_char * DataStart, long int Offse
sSummaryDataNagraGuide *SD = (sSummaryDataNagraGuide *) p;
if (TitleEventId != HILO32 (SD->EventId)) {
- esyslog ("EEPG: ERROR, Title has EventId %08x and points to Summary with EventId %08x.", TitleEventId,
- HILO32 (SD->EventId));
+ LogI(0, prep("ERROR, Title has EventId %08x and points to Summary with EventId %08x."), TitleEventId,
+ HILO32 (SD->EventId));
return 0; //return empty string
}
- if (VERBOSE >= 3) {
+ if (CheckLevel(3)) {
if (SD->AlwaysZero1 != 0)
isyslog ("EEPGDEBUG: SummAlwaysZero1 is NOT ZERO:%x.", SD->AlwaysZero1);
if (SD->AlwaysZero2 != 0)
@@ -1303,19 +1334,18 @@ char *cFilterEEPG::GetSummaryTextNagra (const u_char * DataStart, long int Offse
do { //for all text parts
sSummaryTextNagraGuide *ST = (sSummaryTextNagraGuide *) p2;
p2 += 8; //skip fixed block
- if (VERBOSE >= 3)
- if (ST->AlwaysZero1 != 0)
- isyslog ("EEPGDEBUG: ST AlwaysZero1 is NOT ZERO:%x.", ST->AlwaysZero1);
+ if (ST->AlwaysZero1 != 0)
+ LogD(3, prep("DEBUG: ST AlwaysZero1 is NOT ZERO:%x."), ST->AlwaysZero1);
if (ST->Always0x4e != 0x4e) {
- isyslog ("EEPGDEBUG: ST Always0x4e is NOT 0x4e:%x.", ST->AlwaysZero1);
+ LogI(0, prep("DEBUG: ST Always0x4e is NOT 0x4e:%x."), ST->AlwaysZero1);
return 0; //fatal error, empty text
}
- //esyslog ("EEPGDEBUG: Textnr %i, Lasttxt %i.", ST->TextNr, ST->LastTextNr);
+ LogI(5, prep("DEBUG: Textnr %i, Lasttxt %i."), ST->TextNr, ST->LastTextNr);
int SummaryLength = ST->Textlength;
Text = (unsigned char *) realloc (Text, SummaryLength + TotLength);
if (Text == NULL) {
- esyslog ("EEPG: Summaries memory allocation error.");
+ LogI(0, prep("Summaries memory allocation error."));
return 0; //empty text
}
memcpy (Text + TotLength, p2, SummaryLength); //append new textpart
@@ -1326,7 +1356,7 @@ char *cFilterEEPG::GetSummaryTextNagra (const u_char * DataStart, long int Offse
} while (!LastTextBlock);
Text = (unsigned char *) realloc (Text, 1 + TotLength); //allocate 1 extra byte
Text[TotLength] = NULL; //terminate string by NULL char
-// isyslog ("EEPGDEBUG: Full Text:%s.", Text);
+ LogD(5, prep("DEBUG: Full Text:%s."), Text);
break;
} //prevents compiler from complaining
@@ -1335,7 +1365,7 @@ char *cFilterEEPG::GetSummaryTextNagra (const u_char * DataStart, long int Offse
sSummaryGBRNagraGuide *GBR = (sSummaryGBRNagraGuide *) p2;
p2 += 16; //skip fixed part, point to byte after Nextlength
- if (VERBOSE >= 3) {
+ if (CheckLevel(3)) {
if (GBR->AlwaysZero1 != 0)
isyslog ("EEPGDEBUG: GBR AlwaysZero1 is NOT ZERO:%x.", GBR->AlwaysZero1);
if (GBR->AlwaysZero2 != 0)
@@ -1353,10 +1383,9 @@ char *cFilterEEPG::GetSummaryTextNagra (const u_char * DataStart, long int Offse
} //prevents compiler from complaining
break;
default:
- esyslog
- ("EEPG: ERROR *p2 has strange value: EventId %08x NumberOfBlocks %02x BlockId %08x SummTxtOffset %08x *p2: %02x Unkn1:%02x, Unkn2:%02x.",
- HILO32 (SD->EventId), SD->NumberOfBlocks, HILO32 (SD->BlockId), HILO32 (SD->SummTxtOffset), *p2,
- SD->Unknown1, SD->Unknown2);
+ LogE(0, prep("ERROR *p2 has strange value: EventId %08x NumberOfBlocks %02x BlockId %08x SummTxtOffset %08x *p2: %02x Unkn1:%02x, Unkn2:%02x."),
+ HILO32 (SD->EventId), SD->NumberOfBlocks, HILO32 (SD->BlockId), HILO32 (SD->SummTxtOffset), *p2,
+ SD->Unknown1, SD->Unknown2);
break;
} //end of switch
} //NrOfBlocks > 1
@@ -1368,14 +1397,13 @@ char *cFilterEEPG::GetSummaryTextNagra (const u_char * DataStart, long int Offse
if (SD->NumberOfBlocks == 1)
p -= 4; //in this case there is NO summarytext AND no GBR??!!
for (int i = 1; i < (SD->NumberOfBlocks - 1); i++) {
- if (VERBOSE >= 3)
- isyslog ("EEPGDEBUG: Extra Blockinfo: %02x %02x %02x %02x.", *p, *(p + 1), *(p + 2), *(p + 3));
+ LogD(3, prep("DEBUG: Extra Blockinfo: %02x %02x %02x %02x."), *p, *(p + 1), *(p + 2), *(p + 3));
p += 4; //skip this extra blockinfo
}
return (char *) Text;
}
-void cFilterEEPG::PrepareToWriteToSchedule (sChannel * C, cSchedules * s, cSchedule * ps[MAX_EQUIVALENCES]) //gets a channel and returns an array of schedules that WriteToSchedule can write to. Call this routine before a batch of titles with the same ChannelId will be WriteToScheduled; batchsize can be 1
+void cFilterEEPG::PrepareToWriteToSchedule (sChannel * C, cSchedules * s, cSchedule * ps[MAX_EQUIVALENCES]) //gets a channel and returns an array of schedules that WriteToSchedule can write to. Call this routine before a batch of titles with the same ChannelId will be WriteToScheduled; batchsize can be 1
{
for (int eq = 0; eq < C->NumberOfEquivalences; eq++) {
tChannelID channelID = tChannelID (C->Src[eq], C->Nid[eq], C->Tid[eq], C->Sid[eq]);
@@ -1387,10 +1415,8 @@ void cFilterEEPG::PrepareToWriteToSchedule (sChannel * C, cSchedules * s, cSched
ps[eq] = s->AddSchedule (channelID); //open a a schedule for each equivalent channel
else {
ps[eq] = NULL;
- if (VERBOSE >= 5)
- esyslog
- ("EEPG ERROR: Titleblock has invalid (equivalent) channel ID: Equivalence: %i, Source:%x, C->Nid:%x,C->Tid:%x,C->Sid:%x.",
- eq, C->Src[eq], C->Nid[eq], C->Tid[eq], C->Sid[eq]);
+ LogE(5, prep("ERROR: Titleblock has invalid (equivalent) channel ID: Equivalence: %i, Source:%x, C->Nid:%x,C->Tid:%x,C->Sid:%x."),
+ eq, C->Src[eq], C->Nid[eq], C->Tid[eq], C->Sid[eq]);
}
}
}
@@ -1417,7 +1443,7 @@ void cFilterEEPG::WriteToSchedule (cSchedule * ps[MAX_EQUIVALENCES], unsigned sh
bool TableIdMatches = false;
if (Event)
TableIdMatches = (Event->TableID() == TableId);
- if (!Event || !TableIdMatches) //if EventId does not match, or it matched with wrong TableId, then try with StartTime
+ if (!Event || !TableIdMatches || abs(Event->StartTime() - (time_t) StartTime) > Duration * 60) //if EventId does not match, or it matched with wrong TableId, then try with StartTime
Event = (cEvent *) ps[eq]->GetEvent (EventId, StartTime);
cEvent *newEvent = NULL;
@@ -1446,7 +1472,7 @@ void cFilterEEPG::WriteToSchedule (cSchedule * ps[MAX_EQUIVALENCES], unsigned sh
CleanString ((uchar *) Text);
Event->SetTitle (Text);
}
- asprintf (&tmp, "%s - %d\'", Themes[ThemeId], Duration);
+ Asprintf (&tmp, "%s - %d\'", Themes[ThemeId], Duration);
Event->SetShortText (tmp);
//strreplace(t, '|', '\n');
if (SummText != 0x00) {
@@ -1460,8 +1486,8 @@ void cFilterEEPG::WriteToSchedule (cSchedule * ps[MAX_EQUIVALENCES], unsigned sh
//newEvent->FixEpgBugs (); causes segfault
}
/* else
- esyslog ("EEPG: ERROR, somehow not able to add/update event.");*///at this moment only reports RejectTableId events
- if (VERBOSE >= 4) {
+ esyslog ("EEPG: ERROR, somehow not able to add/update event.");*///at this moment only reports RejectTableId events
+ if (CheckLevel(4)) {
isyslog ("EEPG: Title:%i, Summary:%i I would put into schedule:", TitleCounter, SummaryCounter);
//isyslog ("C %s-%i-%i-%i\n", *cSource::ToString (C->Src[eq]), C->Nid[eq], C->Tid[eq], C->Sid[eq]);
isyslog ("E %u %u %u 01 FF\n", EventId, StartTime, Duration * 60);
@@ -1501,13 +1527,12 @@ void cFilterEEPG::GetTitlesNagra (const u_char * Data, int Length, unsigned shor
int Blocklength = HILO16 (TB->Blocklength);
long int NumberOfTitles = HILO32 (TB->NumberOfTitles);
- if (VERBOSE >= 3)
- isyslog ("EEPGDEBUG: ChannelId %04x, Blocklength %04x, NumberOfTitles %lu.", ChannelId, Blocklength,
- NumberOfTitles);
+ LogD(3, prep("DEBUG: ChannelId %04x, Blocklength %04x, NumberOfTitles %lu."), ChannelId, Blocklength,
+ NumberOfTitles);
p += 4; //skip ChannelId and Blocklength
next_p = p + Blocklength;
if (next_p > DataEnd) { //only process if block is complete
- esyslog ("EEPG: ERROR, Block exceeds end of Data. p:%p, Blocklength:%x,DataEnd:%p.", p, Blocklength, DataEnd);
+ LogE(0, prep("ERROR, Block exceeds end of Data. p:%p, Blocklength:%x,DataEnd:%p."), p, Blocklength, DataEnd);
return; //fatal error, this should never happen
}
p += 4; //skip Titlenumber
@@ -1542,10 +1567,10 @@ void cFilterEEPG::GetTitlesNagra (const u_char * Data, int Length, unsigned shor
u_char *t = (u_char *) Data + HILO32 (Title->OffsetToText);
//u_char *t2 = (u_char *) Data + HILO32 (Title->OffsetToText2);
if (t >= DataEnd)
- esyslog ("EEPG: ERROR, Title Text out of range: t:%p, DataEnd:%p, Data:%p, Length:%i.", t, DataEnd, Data,
- Length);
+ LogE(0, prep("ERROR, Title Text out of range: t:%p, DataEnd:%p, Data:%p, Length:%i."), t, DataEnd, Data,
+ Length);
else {
- asprintf (&Text, "%.*s", *t, t + 1); //FIXME second text string is not processed right now
+ Asprintf (&Text, "%.*s", *t, t + 1); //FIXME second text string is not processed right now
//asprintf (&Text, "%.*s %.*s", *t, t + 1, *t2, t2 + 1);
//now get summary texts
@@ -1553,16 +1578,14 @@ void cFilterEEPG::GetTitlesNagra (const u_char * Data, int Length, unsigned shor
unsigned int DataLengthSummaries = bufsize[TableIdExtension] - 4;
char *SummText = NULL;
if (HILO32 (Title->SumDataOffset) >= DataLengthSummaries)
- esyslog ("EEPG: ERROR, SumDataOffset out of range: Title->SumDataOffset:%i, DataLengthSummaries:%i.", HILO32 (Title->SumDataOffset),DataLengthSummaries);
+ LogE(0, prep("ERROR, SumDataOffset out of range: Title->SumDataOffset:%i, DataLengthSummaries:%i."), HILO32 (Title->SumDataOffset),DataLengthSummaries);
else
SummText = GetSummaryTextNagra (DataStartSummaries, HILO32 (Title->SumDataOffset), EventId);
- if (VERBOSE >= 3)
- isyslog
- ("EEPGDEBUG: Eventid: %08x ChannelId:%x, Starttime %02i:%02i, Duration %i, OffsetToText:%08x, OffsetToText2:%08x, SumDataOffset:%08x ThemeId:%x Title:%s \n SummaryText:%s",
- EventId, ChannelId, Hours, Minutes,
- Title->Duration, HILO32 (Title->OffsetToText), HILO32 (Title->OffsetToText2),
- HILO32 (Title->SumDataOffset), Title->ThemeId, Text, SummText);
+ LogD(3, prep("DEBUG: Eventid: %08x ChannelId:%x, Starttime %02i:%02i, Duration %i, OffsetToText:%08x, OffsetToText2:%08x, SumDataOffset:%08x ThemeId:%x Title:%s \n SummaryText:%s"),
+ EventId, ChannelId, Hours, Minutes, Title->Duration,
+ HILO32 (Title->OffsetToText), HILO32 (Title->OffsetToText2),
+ HILO32 (Title->SumDataOffset), Title->ThemeId, Text, SummText);
if (Themes[Title->ThemeId][0] == 0x00) //if detailed themeid is not known, get global themeid
Title->ThemeId &= 0xf0;
@@ -1577,7 +1600,7 @@ void cFilterEEPG::GetTitlesNagra (const u_char * Data, int Length, unsigned shor
SummText = NULL;
}
- if (VERBOSE >= 3) {
+ if (CheckLevel(3)) {
if (Title->AlwaysZero16 != 0)
isyslog ("EEPGDEBUG: TitleAlwaysZero16 (3bits) is NOT ZERO:%x.", Title->AlwaysZero16);
if (Title->AlwaysZero17 != 0)
@@ -1609,7 +1632,7 @@ void cFilterEEPG::GetTitlesNagra (const u_char * Data, int Length, unsigned shor
} while (p < DataEnd); //end of TitleBlock
}
-int cFilterEEPG::GetThemesNagra (const u_char * Data, int Length, unsigned short TableIdExtension) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
+int cFilterEEPG::GetThemesNagra (const u_char * Data, int Length, unsigned short TableIdExtension) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
{
u_char *DataStart = (u_char *) Data;
u_char *p = DataStart; //TODO Language code terminated by 0 is ignored
@@ -1617,8 +1640,7 @@ int cFilterEEPG::GetThemesNagra (const u_char * Data, int Length, unsigned short
u_char *DataStartTitles = buffer[TableIdExtension] + 4;
u_char *DataEndTitles = DataStartTitles + bufsize[TableIdExtension] - 4;
if (Length == 0) {
- if (VERBOSE >= 1)
- isyslog ("EEPG: NO THEMES FOUND");
+ LogI(1, prep("NO THEMES FOUND"));
return 2;
}
@@ -1626,8 +1648,8 @@ int cFilterEEPG::GetThemesNagra (const u_char * Data, int Length, unsigned short
p += 4; //skip number of themes block
//isyslog ("EEPG: found %i themes.", NumberOfThemes);
- if ((VERBOSE >= 1) && (nThemes == 0))
- isyslog ("-------------THEMES FOUND--------------");
+ if ((nThemes == 0))
+ LogI(1, "-------------THEMES FOUND--------------");
for (int i = 0; i < NumberOfThemes; i++) {
int Textlength = *p;
@@ -1645,8 +1667,8 @@ int cFilterEEPG::GetThemesNagra (const u_char * Data, int Length, unsigned short
p2 += 8; //skip block
u_char *NewThemeId = DataStartTitles + HILO32 (TT->TitleOffset) + 28;
if (NewThemeId >= DataEndTitles)
- esyslog ("EEPG: ERROR, ThemeId out of range: NewThemeId:%p, DataEndTitles:%p, DataStartTitles:%p.", NewThemeId,
- DataEndTitles, DataStartTitles);
+ LogE(0, prep("ERROR, ThemeId out of range: NewThemeId:%p, DataEndTitles:%p, DataStartTitles:%p."), NewThemeId,
+ DataEndTitles, DataStartTitles);
else {
//esyslog("EEPGDEBUG: NewThemeId:%02x, Text:%s.",*NewThemeId, Text);
if (Themes[*NewThemeId][0] != 0x00) { //theme is already filled, break off
@@ -1657,17 +1679,15 @@ int cFilterEEPG::GetThemesNagra (const u_char * Data, int Length, unsigned short
ThemeId = *NewThemeId;
else if (ThemeId != *NewThemeId) { //different theme ids in block
if ((ThemeId & 0xf0) != (*NewThemeId & 0xf0)) { //major nible of themeid does not correspond
- if (VERBOSE >= 3)
- esyslog
- ("EEPG: ERROR, Theme has multiple indices which differ in major nibble, old index = %x, new index = %x. Ignoring both indices.",
- ThemeId, *NewThemeId);
+ LogE(3, prep("ERROR, Theme has multiple indices which differ in major nibble, old index = %x, new index = %x. Ignoring both indices."),
+ ThemeId, *NewThemeId);
AnyDoubt = true;
break;
} else if ((ThemeId & 0x0f) != 0) //ThemeId is like 1a, 2a, not like 10,20. So it is minor in tree-structure, and it should be labeled in major part of tree
ThemeId = *NewThemeId; //lets hope new themeid is major, if not, it has not worsened....
}
} //else NewThemeId >= DataEndTitles
- if (VERBOSE >= 3) {
+ if (CheckLevel(3)) {
if (TT->Always1 != 1)
isyslog ("EEPGDEBUG: TT Always1 is NOT 1:%x.", TT->Always1);
if (TT->AlwaysZero1 != 0)
@@ -1681,27 +1701,25 @@ int cFilterEEPG::GetThemesNagra (const u_char * Data, int Length, unsigned short
if (Textlength > 63)
Textlength = 63; //leave room for trailing NULL
if (Themes[ThemeId][0] != 0) {
- esyslog
- ("EEPG: Trying to add new theme, but Id already exists. ThemeId = %x, Old theme with this Id:%s, new theme: %s.",
- ThemeId, Themes[ThemeId], Text);
+ LogE(0, prep("Trying to add new theme, but Id already exists. ThemeId = %x, Old theme with this Id:%s, new theme: %s."),
+ ThemeId, Themes[ThemeId], Text);
continue;
}
memcpy (&Themes[ThemeId], Text, Textlength);
Themes[ThemeId][Textlength] = NULL; //trailing NULL
CleanString (Themes[ThemeId]);
nThemes++;
- if (VERBOSE >= 1)
- isyslog ("%02x %s", ThemeId, Themes[ThemeId]);
+ LogI(1, prep("%02x %s"), ThemeId, Themes[ThemeId]);
}
} //for NumberOfThemes
if (p != DataEnd) {
- esyslog ("EEPG: Themes error: buffer is smaller or bigger than sum of entries. p:%p,DataEnd:%p", p, DataEnd);
+ LogE(0, prep("Themes error: buffer is smaller or bigger than sum of entries. p:%p,DataEnd:%p"), p, DataEnd);
return 0;
} else
return 2;
}
-int cFilterEEPG::GetChannelsNagra (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
+int cFilterEEPG::GetChannelsNagra (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
{
u_char *DataStart = (u_char *) Data;
u_char *p = DataStart;
@@ -1709,7 +1727,7 @@ int cFilterEEPG::GetChannelsNagra (const u_char * Data, int Length) //return c
nChannels = (*p << 24) | *(p + 1) << 16 | *(p + 2) << 8 | *(p + 3);
p += 4; //skip numberofchannels
- if (VERBOSE >= 1) {
+ if (CheckLevel(1)) {
isyslog ("| ID | %-26.26s | %-22.22s | FND | %-8.8s |\n", "Channel ID", "Channel Name", "Sky Num.");
isyslog ("|------|-%-26.26s-|-%-22.22s-|-----|-%-8.8s-|\n", "------------------------------",
"-----------------------------", "--------------------");
@@ -1747,41 +1765,29 @@ int cFilterEEPG::GetChannelsNagra (const u_char * Data, int Length) //return c
C->Name[0] = NULL; //empty string
CleanString (C->Name);
- if (VERBOSE >= 1) {
- char *ChID;
- asprintf (&ChID, "%s-%i-%i-%i-0", *cSource::ToString (C->Src[0]), C->Nid[0], C->Tid[0], C->Sid[0]);
- char *IsF;
- if (IsFound)
- asprintf (&IsF, " %-3.3s |", "YES");
- else
- asprintf (&IsF, " %-3.3s |", "NO");
- isyslog ("|% 5d | %-26.26s | %-22.22s |%s % 6d |\n", C->ChannelId, ChID, C->Name, IsF, C->SkyNumber);
- free (ChID);
- free (IsF);
- }
- if (VERBOSE >= 4)
- isyslog ("EEPGDEBUG: start : %s", cs_hexdump (0, p, 9));
+ LogI(1, "|% 5d | %-26.26s | %-22.22s | %-3.3s | % 6d |\n", C->ChannelId
+ , *channelID.ToString(), C->Name, IsFound ? "YES" : "NO", C->SkyNumber);
+
+ LogD(4, prep("DEBUG: start : %s"), cs_hexdump (0, p, 9));
p += 8; //skip to first 0x8c if non-FTA, or 0x00 if FTA
for (int i = 0; i < Channel->Nr8cBlocks; i++) {
if (*p != 0x8c) {
- esyslog ("EEPGDEBUG: ERROR in Channel Table, expected value of 0x8c is %02x", *p);
+ LogD(0, prep("DEBUG: ERROR in Channel Table, expected value of 0x8c is %02x"), *p);
return 0; //fatal error
}
p++; //skip 8c byte
- if (VERBOSE >= 4)
- isyslog ("EEPGDEBUG: 8c string: %s", cs_hexdump (0, p + 1, *p));
+ LogD(4, prep("DEBUG: 8c string: %s"), cs_hexdump (0, p + 1, *p));
p += *p; //skip 8c block
p++; //forgot to skip length byte
}
//start last non 8c block here
if (*p != 0x00) {
- esyslog ("EEPGDEBUG: ERROR in Channel Table, expected value of 0x00 is %02x", *p);
+ LogE(0, prep("ERROR in Channel Table, expected value of 0x00 is %02x"), *p);
return 0; //fatal error
}
p++; //skip 0x00 byte
- if (VERBOSE >= 4)
- isyslog ("EEPGDEBUG: endstring: %s", cs_hexdump (0, p + 1, *p * 4));
+ LogD(4, prep("DEBUG: endstring: %s"), cs_hexdump (0, p + 1, *p * 4));
p += (*p * 4); //p points to nrofblocks, each block is 4 bytes
p++; //forgot to skip nrofblocks byte
@@ -1810,28 +1816,27 @@ int cFilterEEPG::GetChannelsNagra (const u_char * Data, int Length) //return c
}
if (p != DataEnd)
- esyslog ("EEPG: Warning, possible problem at end of channel table; p = %p, DataEnd = %p", p, DataEnd);
+ LogE(0, prep("Warning, possible problem at end of channel table; p = %p, DataEnd = %p"), p, DataEnd);
LoadEquivalentChannels ();
return 2; //obviously, when you get here, channels are read succesfully, but since all channels are sent at once, you can stop now
}
-int cFilterEEPG::GetNagra (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
+int cFilterEEPG::GetNagra (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
{
sTitleBlockHeaderNagraGuide *TBH = (sTitleBlockHeaderNagraGuide *) Data;
if (InitialTitle[0] == 0x00) { //InitialTitle is empty, so we are waiting for the start marker
if (TBH->TableIdExtensionHigh == 0x00 && TBH->TableIdExtensionLow == 0x00) { //this is the start of the data
if (TBH->VersionNumber == LastVersionNagra) {
- isyslog ("EEPG: Nagra EEPG already up-to-date with version %i", LastVersionNagra);
+ LogI(0, prep("Nagra EEPG already up-to-date with version %i"), LastVersionNagra);
return 2;
}
Version = TBH->VersionNumber;
- isyslog ("EEPG: initialized Nagraguide, version %i", Version);
+ LogI(0, prep("initialized Nagraguide, version %i"), Version);
//u_char *p = (u_char *) Data + 11;
u_char *p = (u_char *) Data + 8;
if (*p != 0x01) {
- esyslog
- ("EEPG: Error, Nagra first byte in table_id_extension 0x0000 is not 0x01 but %02x. Format unknown, exiting.",
- *p);
+ LogE(0, prep("Error, Nagra first byte in table_id_extension 0x00 is not 0x01 but %02x. Format unknown, exiting."),
+ *p);
return 0; //fatal error
}
p++; //skip 0x01 byte
@@ -1841,9 +1846,8 @@ int cFilterEEPG::GetNagra (const u_char * Data, int Length) //return code 0 =
while (p < p_end) {
sSection0000BlockNagraGuide *S = (sSection0000BlockNagraGuide *) p;
int TTT = ((S->TableIdExtensionHigh << 10) | (S->TableIdExtensionLow << 3) | (S->TIE200 << 9));
- if (VERBOSE >= 4)
- isyslog ("EEPGDEBUG: TableIdExtension %04x, Unknown1 %02x Version %02x Always 0xd6 %02x DayCounter %02x",
- TTT, S->Unknown1, S->VersionNumber, S->Always0xd6, S->DayCounter);
+ LogD(4, prep("DEBUG: TableIdExtension %04x, Unknown1 %02x Version %02x Always 0xd6 %02x DayCounter %02x"),
+ TTT, S->Unknown1, S->VersionNumber, S->Always0xd6, S->DayCounter);
if ((TTT > 0x0400) && (TTT < 0x0600)) //take high byte and compare with summarie tables in 0x0400 and 0x0500 range;
NagraTIE[NagraCounter++] = TTT; //only store TIEs of titlessummaries, all others can be derived; they are stored in the order of the 0x0000 index table,
//lets hope first entry corresponds with today, next with tomorrow etc.
@@ -1900,8 +1904,7 @@ int cFilterEEPG::GetNagra (const u_char * Data, int Length) //return code 0 =
memcpy (buffer[TableIdExtension] + bufsize[TableIdExtension], Data + 8, SectionLength - 9); //append new section
bufsize[TableIdExtension] += SectionLength - 9;
if (TBH->SectionNumber >= TBH->LastSectionNumber) {
- if (VERBOSE >= 1)
- isyslog ("EEPG: found %04x lastsection nr:%i.", TableIdExtension, TBH->SectionNumber);
+ LogI(1, prep("found %04x lastsection nr:%i."), TableIdExtension, TBH->SectionNumber);
// if (TBH->TableIdExtensionHigh == 0x04 || TBH->TableIdExtensionHigh == 0x05) {
if (TableIdExtension == 0x0400) {
int Result = GetChannelsNagra (buffer[TableIdExtension] + 4, bufsize[TableIdExtension] - 4); //TODO language code terminated by 0 is ignored
@@ -1923,8 +1926,7 @@ void cFilterEEPG::ProcessNagra ()
for (int i = 0; i < NagraCounter; i++) { //first prcoess all themes, since they all use the same codes
unsigned short int TableIdExtension = NagraTIE[i];
int TIE = TableIdExtension + 0x0200; //from 0x0400 to 0x0600 -> themes
- if (VERBOSE >= 3)
- isyslog ("EEPG: Processing Theme with TableIdExtension:%04x", TIE);
+ LogI(3, prep("Processing Theme with TableIdExtension:%04x"), TIE);
GetThemesNagra (buffer[TIE] + 4, bufsize[TIE] - 4, TableIdExtension - 0x0200); //assume theme is completed //TODO Language code terminatd by 0 is ignored
free (buffer[TIE]);
buffer[TIE] = NULL;
@@ -1934,7 +1936,7 @@ void cFilterEEPG::ProcessNagra ()
for (int i = 0; i < NagraCounter; i++) { //first prcoess all themes, since they all use the same codes
unsigned short int TableIdExtension = NagraTIE[i];
int TIE = TableIdExtension - 0x0200; //from 0x0400 to 0x0200 -> titles
- isyslog ("EEPG: Processing TableIdExtension:%04x", TableIdExtension);
+ LogI(0, prep("Processing TableIdExtension:%04x"), TableIdExtension);
GetTitlesNagra (buffer[TIE] + 4, bufsize[TIE] - 4, TableIdExtension); //assume title-reading is completed //TODO Language code terminatd by 0 is ignored
free (buffer[TIE]);
buffer[TIE] = NULL;
@@ -1945,17 +1947,19 @@ void cFilterEEPG::ProcessNagra ()
NumberOfTables--;
}
if (NumberOfTables != 0)
- esyslog ("EEPG: ERROR, Not all tables processed and stream is already repeating. NumberOfTables = %i.",
- NumberOfTables);
+ LogE(0, prep("ERROR, Not all tables processed and stream is already repeating. NumberOfTables = %i."),
+ NumberOfTables);
}
-int cFilterEEPG::GetTitlesMHW1 (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
+int cFilterEEPG::GetTitlesMHW1 (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
{
if (Length >= 42) {
sTitleMHW1 *Title = (sTitleMHW1 *) Data;
if (Title->ChannelId == 0xff) { //FF is separator packet
- if (memcmp (InitialTitle, Data, 46) == 0) //data is the same as initial title //TODO use easier notation
+ if (memcmp (InitialTitle, Data, 46) == 0) { //data is the same as initial title //TODO use easier notation
+ LogD(1, prep("End procesing titles"));
return 2;
+ }
if (nTitles == 0)
memcpy (InitialTitle, Data, 46); //copy data into initial title
int Day = Title->Day;
@@ -1976,8 +1980,7 @@ int cFilterEEPG::GetTitlesMHW1 (const u_char * Data, int Length) //return code
Day = 7;
//Day = 8;
MHWStartTime = (Day * 86400) + (Hours * 3600) + YesterdayEpochUTC;
- if (VERBOSE >= 3)
- isyslog ("EEPG Titles: FF PACKET, seqnr:%02x.", Data[5]);
+ LogI(3, prep("Titles: FF PACKET, seqnr:%02x."), Data[5]);
} else if (InitialTitle[0] != 0x00) { //if initialized this should always be 0x90 = tableid!
if (nTitles < MAX_TITLES) {
Title_t *T;
@@ -1987,39 +1990,40 @@ int cFilterEEPG::GetTitlesMHW1 (const u_char * Data, int Length) //return code
int StartTime = MHWStartTime + (Minutes * 60);
T->ChannelId = Title->ChannelId - 1;
T->ThemeId = Title->ThemeId;
+ T->TableId = Title->TableId;
T->MjdTime = 0; //only used at MHW2 and SKY
T->EventId = HILO32 (Title->ProgramId);
T->StartTime = LocalTime2UTC (StartTime); //here also Daylight Savings correction is done
T->Duration = HILO16 (Title->Duration) * 60;
T->SummaryAvailable = Title->SummaryAvailable;
- T->Text = (unsigned char *) malloc (23 + 1);
+ T->Text = (unsigned char *) malloc (47);
if (T->Text == NULL) {
- esyslog ("EEPG: Titles memory allocation error.");
+ LogE(0, prep("Titles memory allocation error."));
return 0;
}
- T->Text[23] = NULL; //end string with NULL character
- memcpy (T->Text, &Title->Title, 23);
+ T->Text[46] = NULL; //end string with NULL character
+ //memcpy (T->Text, &Title->Title, 23);
+ decodeText2((unsigned char *)&Title->Title, 23, (char*)T->Text, 47);
CleanString (T->Text);
- if (VERBOSE >= 3)
- isyslog ("EEPG: EventId:%08x,ChannelId:%x, Titlenr:%d:, StartTime(epoch):%i, SummAv:%x,Name:%s.", T->EventId,
- T->ChannelId, nTitles, T->StartTime, T->SummaryAvailable, T->Text);
+ LogI(3, prep("EvId:%08x,ChanId:%x, Titlenr:%d:, StartTime(epoch):%i, SummAv:%x,Name:%s."), T->EventId,
+ T->ChannelId, nTitles, T->StartTime, T->SummaryAvailable, T->Text);
nTitles++;
} //nTitles < MaxTitles
else {
- esyslog ("EEPG: Error, titles found more than %i", MAX_TITLES);
+ LogE(0, prep("Error, %i titles found more than %i"), nTitles, MAX_TITLES);
return 0;
}
} //else if InitialTitle
} //Length==46
else {
- esyslog ("EEPG: Error, length of title package < 42.");
+ LogE(0, prep("Error, length of title package < 42."));
return 1; //non fatal
}
return 1;
}
-int cFilterEEPG::GetTitlesMHW2 (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
+int cFilterEEPG::GetTitlesMHW2 (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
{
if (Length > 18) {
int Pos = 18;
@@ -2070,7 +2074,7 @@ int cFilterEEPG::GetTitlesMHW2 (const u_char * Data, int Length) //return code
//isyslog ("EEPGDebug: Len:%d", Len);
T->Text = (unsigned char *) malloc (Len + 2);
if (T->Text == NULL) {
- esyslog ("EEPG: Titles memory allocation error.");
+ LogE(0, prep("Titles memory allocation error."));
return 0; //fatal error
}
T->Text[Len] = NULL; //end string with NULL character
@@ -2081,13 +2085,12 @@ int cFilterEEPG::GetTitlesMHW2 (const u_char * Data, int Length) //return code
T->ThemeId = ((Data[7] & 0x3f) << 6) | (Data[Pos] & 0x3f);
T->EventId = (Data[Pos + 1] << 8) | Data[Pos + 2];
T->SummaryAvailable = (T->EventId != 0xFFFF);
- if (VERBOSE >= 3)
- isyslog ("EEPG: EventId %04x Titlenr %d:SummAv:%x,Name:%s.", T->EventId, nTitles,
- T->SummaryAvailable, T->Text);
+ LogI(3, prep("EventId %04x Titlenr %d:SummAv:%x,Name:%s."), T->EventId,
+ nTitles, T->SummaryAvailable, T->Text);
Pos += 3;
nTitles++;
if (nTitles > MAX_TITLES) {
- esyslog ("EEPG: Error, titles found more than %i", MAX_TITLES);
+ LogE(0, prep("Error, %i titles found more than %i"), nTitles, MAX_TITLES);
return 0; //fatal error
}
}
@@ -2097,7 +2100,7 @@ int cFilterEEPG::GetTitlesMHW2 (const u_char * Data, int Length) //return code
return 1; //non fatal error
}
-int cFilterEEPG::GetSummariesMHW1 (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
+int cFilterEEPG::GetSummariesMHW1 (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
{
sSummaryMHW1 *Summary = (sSummaryMHW1 *) Data;
if (Length >= 11) {
@@ -2113,11 +2116,11 @@ int cFilterEEPG::GetSummariesMHW1 (const u_char * Data, int Length) //return c
int SummaryLength = Length - SummaryOffset;
unsigned char *Text = (unsigned char *) malloc (2*SummaryLength + 1);
if (Text == NULL) {
- esyslog ("EEPG: Summaries memory allocation error.");
+ LogE(0, prep("Summaries memory allocation error."));
return 0;
}
Text[SummaryLength+1] = NULL; //end string with NULL character
- memcpy (Text, &Data[SummaryOffset], SummaryLength);
+ //memcpy (Text, &Data[SummaryOffset], SummaryLength);
decodeText2(&Data[SummaryOffset], SummaryLength, (char*)Text, 2*SummaryLength + 1);
// CleanString (Text);
// if (Summary->NumReplays != 0)
@@ -2145,6 +2148,10 @@ int cFilterEEPG::GetSummariesMHW1 (const u_char * Data, int Length) //return c
unsigned short int Minute = Data[ReplayOffset++];
unsigned short int Sec = Data[ReplayOffset++];
ReplayOffset++; //makes total of 7 bytes
+
+ LogI(4, prep("EvId:%08x ChanId:%x, ChanName %s, Time: %02d:%02d:%02d."),
+ S->EventId, S->Replays[i].ChannelId,
+ sChannels[ChannelSeq[S->Replays[i].ChannelId]].Name, Hour, Minute, Sec);
S->Replays[i].StartTime = MjdToEpochTime (Date) + (((((Hour & 0xf0) >> 4) * 10) + (Hour & 0x0f)) * 3600)
+ (((((Minute & 0xf0) >> 4) * 10) + (Minute & 0x0f)) * 60)
@@ -2155,38 +2162,38 @@ int cFilterEEPG::GetSummariesMHW1 (const u_char * Data, int Length) //return c
i++;
} while (i < Summary->NumReplays);
//} while (Replays-- >= 0);
- if (VERBOSE >= 3)
- isyslog ("EEPG: Eventid:%08x Channelid:%x, Summnr %d:%.30s.", S->EventId, S->Replays[0].ChannelId, //TODO log channel id above
- nSummaries, S->Text);
+ LogI(3, prep("EvId:%08x ChanId:%x, Replays:%d, Summnr %d:%.35s."), S->EventId,
+ S->Replays[0].ChannelId, S->NumReplays, nSummaries, S->Text);
nSummaries++;
} else {
- esyslog ("EEPG: Error, summaries found more than %i", MAX_TITLES);
+ LogE(0, prep("Error, %i summaries found more than %i"), nSummaries, MAX_TITLES);
return 0;
}
} //0xff
else {
- esyslog ("EEPG: Warning, Summary bytes not as expected.");
+ LogE(0, prep("Warning, Summary bytes not as expected."));
return 1; //it is not a success, but error is not fatal
}
} //numreplays length
else {
- esyslog ("EEPG: Warning, number of replays is not conforming to length.");
+ LogE(0, prep("Warning, number of replays is not conforming to length."));
return 1; //nonfatal error
}
} //numreplays <10
else {
- esyslog ("EEPG: Warning, number of replays %d > 10, cannot process.", Summary->NumReplays);
+ LogE(0, prep("Warning, number of replays %d > 10, cannot process."),
+ Summary->NumReplays);
return 1; //nonfatal error
}
} //length >11
else {
- esyslog ("EEPG: Summary length too small:%s", cs_hexdump (0, Data, Length));
+ LogE(0, prep("Summary length too small:%s"), cs_hexdump (0, Data, Length));
return 1; //nonfatal error
}
return 1; //success
}
-int cFilterEEPG::GetSummariesMHW2 (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
+int cFilterEEPG::GetSummariesMHW2 (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
{
if (Length > (Data[14] + 17)) {
if (memcmp (InitialSummary, Data, 16) == 0) //data is equal to initial buffer
@@ -2233,17 +2240,16 @@ int cFilterEEPG::GetSummariesMHW2 (const u_char * Data, int Length) //return c
S->Text = (unsigned char *) malloc (SummaryLength + 2);
S->Text[SummaryLength] = NULL; //end string with NULL character
if (S->Text == NULL) {
- esyslog ("EEPG: Summaries memory allocation error.");
+ LogE(0, prep("Summaries memory allocation error."));
return 0; //fatal error
}
//memcpy (S->Text, tmp, SummaryLength);
decodeText2(tmp,SummaryLength,(char*)S->Text,SummaryLength + 1);
CleanString (S->Text);
- if (VERBOSE >= 3)
- isyslog ("EEPG: EventId %08x Summnr %d:%.30s.", S->EventId, nSummaries, S->Text);
+ LogI(3, prep("EventId %08x Summnr %d:%.30s."), S->EventId, nSummaries, S->Text);
nSummaries++;
} else {
- esyslog ("EEPG: Error, summaries found more than %i", MAX_TITLES);
+ LogE(0, prep("Error, %i summaries found more than %i"), nSummaries, MAX_TITLES);
return 0; //fatal error
}
} //else
@@ -2251,7 +2257,7 @@ int cFilterEEPG::GetSummariesMHW2 (const u_char * Data, int Length) //return c
return 1; //succes or nonfatal error
}
-int cFilterEEPG::GetChannelsSKYBOX (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
+int cFilterEEPG::GetChannelsSKYBOX (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
{
if (memcmp (InitialChannel, Data, 8) == 0) { //data is the same as initial title
@@ -2260,10 +2266,10 @@ int cFilterEEPG::GetChannelsSKYBOX (const u_char * Data, int Length) //return
} else {
if (nChannels == 0)
memcpy (InitialChannel, Data, 8); //copy data into initial title
- if (VERBOSE >= 1 && nChannels == 0) {
- isyslog ("| ID | %-26.26s | %-22.22s | FND | %-8.8s |\n", "Channel ID", "Channel Name", "Sky Num.");
- isyslog ("|------|-%-26.26s-|-%-22.22s-|-----|-%-8.8s-|\n", "------------------------------",
- "-----------------------------", "--------------------");
+ if (nChannels == 0) {
+ LogI(1, "| ID | %-26.26s | %-22.22s | FND | %-8.8s |\n", "Channel ID", "Channel Name", "Sky Num.");
+ LogI(1, "|------|-%-26.26s-|-%-22.22s-|-----|-%-8.8s-|\n", "------------------------------",
+ "-----------------------------", "--------------------");
}
// unsigned short int BouquetId = (Data[3] << 8) | Data[4];
int BouquetDescriptorsLength = ((Data[8] & 0x0f) << 8) | Data[9];
@@ -2316,23 +2322,13 @@ int cFilterEEPG::GetChannelsSKYBOX (const u_char * Data, int Length) //return
else
C->Name[0] = NULL; //empty string
- if (VERBOSE >= 1) {
- char *ChID;
- asprintf (&ChID, " %s-%i-%i-%i-0", *cSource::ToString (C->Src[0]), C->Nid[0], C->Tid[0], C->Sid[0]);
- char *IsF;
- if (IsFound)
- asprintf (&IsF, " %-3.3s |", "YES");
- else
- asprintf (&IsF, " %-3.3s |", "NO");
- isyslog ("|% 5d | %-26.26s | %-22.22s |%s % 6d |\n", C->ChannelId, ChID, C->Name, IsF,
- C->SkyNumber);
- free (ChID);
- free (IsF);
- }
+ LogI(1, "|% 5d | %-26.26s | %-22.22s | %-3.3s | % 6d |\n", C->ChannelId
+ , *channelID.ToString(), C->Name, IsFound ? "YES" : "NO", C->SkyNumber);
+
ChannelSeq[C->ChannelId] = nChannels; //fill lookup table to go from channel-id to sequence nr in table
nChannels++;
if (nChannels >= MAX_CHANNELS) {
- esyslog ("EEPG: Error, channels found more than %i", MAX_CHANNELS);
+ LogE(0, prep("Error, %i channels found more than %i"), nChannels, MAX_CHANNELS);
return 0;
}
}
@@ -2351,7 +2347,7 @@ int cFilterEEPG::GetChannelsSKYBOX (const u_char * Data, int Length) //return
} //else part of memcmp
}
-int cFilterEEPG::GetTitlesSKYBOX (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
+int cFilterEEPG::GetTitlesSKYBOX (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
{
int p;
unsigned short int ChannelId;
@@ -2380,15 +2376,11 @@ int cFilterEEPG::GetTitlesSKYBOX (const u_char * Data, int Length) //return co
T->EventId = (Data[p] << 8) | Data[p + 1];
Len1 = ((Data[p + 2] & 0x0f) << 8) | Data[p + 3];
if (Data[p + 4] != 0xb5) {
- if (DEBUG) {
- esyslog ("EEPG: Data error signature for title");
- }
+ LogD(5, prep("Data error signature for title - Data[p + 4] != 0xb5"));
break;
}
if (Len1 > Length) {
- if (DEBUG) {
- esyslog ("EEPG: Data error length for title");
- }
+ LogD(5, prep("Data error signature for title - Len1 > Length"));
break;
}
p += 4;
@@ -2396,7 +2388,8 @@ int cFilterEEPG::GetTitlesSKYBOX (const u_char * Data, int Length) //return co
T->StartTime = ((MjdTime - 40587) * 86400) + ((Data[p + 2] << 9) | (Data[p + 3] << 1));
T->Duration = ((Data[p + 4] << 9) | (Data[p + 5] << 1));
T->ThemeId = Data[p + 6];
- int quality = Data[p + 7];
+ //TODO Data[p + 7] is Quality value add it to description
+ //int quality = Data[p + 7];
switch (Data[p + 8] & 0x0F) {
case 0x01:
T->Rating = 0x00; //"U"
@@ -2423,12 +2416,12 @@ int cFilterEEPG::GetTitlesSKYBOX (const u_char * Data, int Length) //return co
unsigned char tmp[4096]; //TODO smarter
Len2 = DecodeHuffmanCode (&Data[p + 9], Len2, tmp);
if (Len2 == 0) {
- esyslog ("EEPG: Warning, could not huffman-decode title-text, skipping title.");
+ LogE(0, prep("Warning, could not huffman-decode title-text, skipping title."));
return 1; //non-fatal error
}
T->Text = (unsigned char *) malloc (Len2 + 1);
if (T->Text == NULL) {
- esyslog ("EEPG: Titles memory allocation error.");
+ LogE(0, prep("Titles memory allocation error."));
return 0;
}
T->Text[Len2] = NULL; //end string with NULL character
@@ -2436,13 +2429,13 @@ int cFilterEEPG::GetTitlesSKYBOX (const u_char * Data, int Length) //return co
CleanString (T->Text);
T->SummaryAvailable = 1; //TODO I assume this is true?
- if (VERBOSE >= 3)
- isyslog ("EEPG: EventId %08x Titlenr %d,Unknown1:%x,Unknown2:%x,Un3:%x,Name:%s.", T->EventId,
- nTitles, T->Unknown1, T->Unknown2, T->Unknown3, T->Text);
+ LogI(3, prep("EventId %08x Titlenr %d,Unknown1:%x,Unknown2:%x,Un3:%x,Name:%s."),
+ T->EventId, nTitles, T->Unknown1, T->Unknown2, T->Unknown3, T->Text);
+
p += Len1;
nTitles++;
if (nTitles >= MAX_TITLES) {
- esyslog ("EEPG: Error, titles found more than %i", MAX_TITLES);
+ LogE(0, prep("Error, %i titles found more than %i"), nTitles, MAX_TITLES);
return 0; //fatal error
}
} while (p < Length);
@@ -2452,7 +2445,7 @@ int cFilterEEPG::GetTitlesSKYBOX (const u_char * Data, int Length) //return co
return 1; //success
}
-int cFilterEEPG::GetSummariesSKYBOX (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
+int cFilterEEPG::GetSummariesSKYBOX (const u_char * Data, int Length) //return code 0 = fatal error, code 1 = sucess, code 2 = last item processed
{
int p;
unsigned short int ChannelId;
@@ -2484,15 +2477,11 @@ int cFilterEEPG::GetSummariesSKYBOX (const u_char * Data, int Length) //return
S->EventId = (Data[p] << 8) | Data[p + 1];
Len1 = ((Data[p + 2] & 0x0f) << 8) | Data[p + 3];
if (Data[p + 4] != 0xb9) {
- if (DEBUG) {
- esyslog ("EEPG: Data error signature for summary");
- }
+ LogD(5, prep("Data error signature for title - Data[p + 4] != 0xb5"));
break;
}
if (Len1 > Length) {
- if (DEBUG) {
- esyslog ("EEPG: Data error length for summary");
- }
+ LogD(5, prep("Data error signature for title - Len1 > Length"));
break;
}
p += 4;
@@ -2500,23 +2489,22 @@ int cFilterEEPG::GetSummariesSKYBOX (const u_char * Data, int Length) //return
unsigned char tmp[4096]; //TODO can this be done better?
Len2 = DecodeHuffmanCode (&Data[p + 2], Len2, tmp);
if (Len2 == 0) {
- esyslog ("EEPG: Warning, could not huffman-decode text, skipping summary.");
+ LogE(0, prep("Warning, could not huffman-decode text, skipping summary."));
return 1; //non-fatal error
}
S->Text = (unsigned char *) malloc (Len2 + 1);
if (S->Text == NULL) {
- esyslog ("EEPG: Summaries memory allocation error.");
+ LogE(0, prep("Summaries memory allocation error."));
return 0;
}
memcpy (S->Text, tmp, Len2);
S->Text[Len2] = NULL; //end string with NULL character
CleanString (S->Text);
- if (VERBOSE >= 3)
- isyslog ("EEPG: EventId %08x Summnr %d:%.30s.", S->EventId, nSummaries, S->Text);
+ LogI(3, prep("EventId %08x Summnr %d:%.30s."), S->EventId, nSummaries, S->Text);
p += Len1;
nSummaries++;
if (nSummaries >= MAX_TITLES) {
- esyslog ("EEPG: Error, summaries found more than %i", MAX_TITLES);
+ LogI(0, prep("Error, %i summaries found more than %i"), nSummaries, MAX_TITLES);
return 0;
}
} while (p < Length);
@@ -2626,9 +2614,13 @@ void cFilterEEPG::LoadIntoSchedule (void)
if ((Format == SKY_IT || Format == SKY_UK) && T->Rating) { //TODO only works on OTV for now
rating = T->Rating;
}
+ unsigned short int TableId = DEFAULT_TABLE_ID;
+ if (T->TableId) {
+ TableId = TableId;
+ }
WriteToSchedule (p, C->NumberOfEquivalences, T->EventId, StartTime, T->Duration / 60, (char *) T->Text,
- (char *) S->Text, T->ThemeId, DEFAULT_TABLE_ID, 0, rating);
+ (char *) S->Text, T->ThemeId, TableId, 0, rating);
FinishWriteToSchedule (C, s, p);
//Replays--;
@@ -2697,10 +2689,9 @@ void cFilterEEPG::LoadIntoSchedule (void)
isyslog ("EEPG: found %i summaries", nSummaries);
if (SummariesNotFound != 0)
esyslog ("EEPG: %i summaries not found", SummariesNotFound);
- else if (VERBOSE >= 1)
- isyslog ("EEPG: %i summaries not found", SummariesNotFound);
if (NotMatching > nSummaries)
- isyslog ("EEPG Warning: lost sync %i times, summary did not match %i times.", LostSync, NotMatching);
+ LogI (0, prep("Warning: lost sync %i times, summary did not match %i times."),
+ LostSync, NotMatching);
FreeSummaries (); //do NOT free channels, themes and bouquets here because they will be reused in SKY!
FreeTitles ();
@@ -2713,7 +2704,7 @@ void cFilterEEPG::AddFilter (u_short Pid, u_char Tid)
{
if (!Matches (Pid, Tid)) {
Add (Pid, Tid);
- esyslog ("Filter Pid:%x,Tid:%x added.", Pid, Tid);
+ esyslog (prep("Filter Pid:%x,Tid:%x added."), Pid, Tid);
}
}
@@ -2721,7 +2712,7 @@ void cFilterEEPG::AddFilter (u_short Pid, u_char Tid, unsigned char Mask)
{
if (!Matches (Pid, Tid)) {
Add (Pid, Tid, Mask);
- esyslog ("Filter Pid:%x,Tid:%x,Mask:%x added.", Pid, Tid, Mask);
+ esyslog (prep("Filter Pid:%x,Tid:%x,Mask:%x added."), Pid, Tid, Mask);
}
}
@@ -3227,10 +3218,11 @@ void cFilterEEPG::ProcessNextFormat (bool FirstTime = false)
//Send message when finished
if (SetupPE.DisplayMessage) {
char *mesg;
- asprintf(&mesg, "EEPG: written %i summaries", SummaryCounter);
+ Asprintf(&mesg, "EEPG: written %i summaries", SummaryCounter);
Skins.QueueMessage(mtInfo, mesg, 2);
free(mesg);
}
+
TitleCounter = 0;
SummaryCounter = 0;
/*if (SummariesNotFound != 0)
@@ -3312,6 +3304,7 @@ void cFilterEEPG::ProcessNextFormat (bool FirstTime = false)
void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Length)
{
int now = time (0);
+ //LogD(5, prep("PMT pid now 0x%04x pid now 0x%04x"), Pid, Tid);
if (Pid == 0 && Tid == SI::TableIdPAT) {
if (!pmtnext || now > pmtnext) {
if (pmtpid)
@@ -3329,8 +3322,7 @@ void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Len
pmtsid = assoc.getServiceId ();
Add (pmtpid, 0x02);
pmtnext = now + PMT_SCAN_TIMEOUT;
- if (VERBOSE >= 3)
- esyslog ("PMT pid now 0x%04x (idx=%d)\n", pmtpid, pmtidx);
+ LogI(3, prep("PMT pid now 0x%04x (idx=%d)\n"), pmtpid, pmtidx);
break;
}
}
@@ -3338,8 +3330,7 @@ void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Len
if (!pmtpid) {
pmtidx = 0;
pmtnext = now + PMT_SCAN_IDLE;
- if (VERBOSE >= 1)
- esyslog ("PMT scan idle\n");
+ LogI(1, prep("PMT scan idle\n"));
Del (0, 0); //this effectively kills the PMT_SCAN_IDLE functionality
@@ -3640,28 +3631,24 @@ void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Len
crc[1] = isOpt ? optCount : 0;
crc[2] = StartTime / STARTTIME_BIAS;
tEventID EventId = ((('P' << 8) | 'W') << 16) | crc16 (0, (unsigned char *) crc, sizeof (crc));
- if (VERBOSE >= 2)
- isyslog ("%s R%d %04x/%.4x %d %d/%d %s +%d ", *channelID.ToString (), runningStatus,
- EventId & 0xFFFF, cit.getContentId (), index, isOpt, optCount,
- stripspace (ctime (&StartTime)), (int) cit.getDuration () / 60);
+ LogI(2, "%s R%d %04x/%.4x %d %d/%d %s +%d ", *channelID.ToString (), runningStatus,
+ EventId & 0xFFFF, cit.getContentId (), index, isOpt, optCount,
+ stripspace (ctime (&StartTime)), (int) cit.getDuration () / 60);
if (EndTime + Setup.EPGLinger * 60 < now) {
- if (VERBOSE >= 2)
- isyslog ("(old)\n");
+ LogI(2, "(old)\n");
continue;
}
bool newEvent = false;
cEvent *pEvent = (cEvent *) pSchedule->GetEvent (EventId, -1);
if (!pEvent) {
- if (VERBOSE >= 2)
- isyslog ("(new)\n");
+ LogI(2, "(new)\n");
pEvent = new cEvent (EventId);
if (!pEvent)
continue;
newEvent = true;
} else {
- if (VERBOSE >= 2)
- isyslog ("(upd)\n");
+ LogI(2, "(upd)\n");
pEvent->SetSeen ();
if (pEvent->TableID () == 0x00 || pEvent->Version () == cit.getVersionNumber ()) {
if (pEvent->RunningStatus () != runningStatus)
@@ -3684,8 +3671,7 @@ void cFilterEEPG::Process (u_short Pid, u_char Tid, const u_char * Data, int Len
pEvent->SetTitle (buffer2);
} else
pEvent->SetTitle (buffer);
- if (VERBOSE >= 2)
- isyslog ("title: %s\n", pEvent->Title ());
+ LogI(2, "title: %s\n", pEvent->Title ());
pEvent->SetShortText (ShortEventDescriptor->text.getText (buffer, sizeof (buffer)));
}
if (ExtendedEventDescriptors) {
@@ -3978,6 +3964,9 @@ private:
cFilterEEPG *filter;
cDevice *device;
} epg[MAXDVBDEVICES];
+
+ void CheckCreateFile(const char* Name, const char *fileContent[]);
+
public:
cPluginEEPG (void);
virtual const char *Version (void) {
@@ -3997,6 +3986,30 @@ cPluginEEPG::cPluginEEPG (void)
memset (epg, 0, sizeof (epg));
}
+void cPluginEEPG::CheckCreateFile(const char* Name, const char *fileContent[])
+{
+ FILE *File;
+ string FileName = string(ConfDir) + "/" + Name;
+ File = fopen(FileName.c_str(), "r");
+ if (File == NULL) {
+ LogE (0, prep("Error opening file '%s', %s"), FileName.c_str(), strerror (errno));
+ File = fopen (FileName.c_str(), "w");
+ if (File == NULL) {
+ LogE (0, prep("Error creating file '%s', %s"), FileName.c_str(), strerror (errno));
+ } else {
+ int i = 0;
+ while (fileContent[i] != NULL) {
+ fprintf (File, "%s\n", fileContent[i]);
+ i++;
+ }
+ LogI (0, prep("Success creating file '%s'"), FileName.c_str());
+ fclose (File);
+ }
+ } else {
+ fclose (File);
+ }
+}
+
bool cPluginEEPG::Start (void)
{
#if APIVERSNUM < 10507
@@ -4012,11 +4025,9 @@ bool cPluginEEPG::Start (void)
}
ConfDir = NULL;
// Initialize any background activities the plugin shall perform.
- char *FileName;
DIR *ConfigDir;
- FILE *File;
if (ConfDir == NULL) {
- asprintf (&ConfDir, "%s/eepg", cPlugin::ConfigDirectory ());
+ Asprintf (&ConfDir, "%s/eepg", cPlugin::ConfigDirectory ());
}
ConfigDir = opendir (ConfDir);
if (ConfigDir == NULL) {
@@ -4027,150 +4038,14 @@ bool cPluginEEPG::Start (void)
isyslog ("EEPG: Success creating directory '%s'", ConfDir);
}
}
- asprintf (&FileName, "%s/%s", ConfDir, EEPG_FILE_EQUIV);
- File = fopen (FileName, "r");
- if (File == NULL) {
- esyslog ("EEPG: Error opening file '%s', %s", FileName, strerror (errno));
- File = fopen (FileName, "w");
- if (File == NULL) {
- esyslog ("EEPG: Error creating file '%s', %s", FileName, strerror (errno));
- } else {
- int i = 0;
- while (FileEquivalences[i] != NULL) {
- fprintf (File, "%s\n", FileEquivalences[i]);
- i++;
- }
- isyslog ("EEPG: Success creating file '%s'", FileName);
- fclose (File);
- }
- } else {
- fclose (File);
- }
- free (FileName);
- asprintf (&FileName, "%s/%s", ConfDir, "sky_it.dict");
- File = fopen (FileName, "r");
- if (File == NULL) {
- esyslog ("EEPG: Error opening file '%s', %s", FileName, strerror (errno));
- File = fopen (FileName, "w");
- if (File == NULL) {
- esyslog ("EEPG: Error creating file '%s', %s", FileName, strerror (errno));
- } else {
- int i = 0;
- while (SkyItDictionary[i] != NULL) {
- fprintf (File, "%s\n", SkyItDictionary[i]);
- i++;
- }
- isyslog ("EEPG: Success creating file '%s'", FileName);
- fclose (File);
- }
- } else {
- fclose (File);
- }
- free (FileName);
- asprintf (&FileName, "%s/%s", ConfDir, "sky_uk.dict");
- File = fopen (FileName, "r");
- if (File == NULL) {
- esyslog ("EEPG: Error opening file '%s', %s", FileName, strerror (errno));
- File = fopen (FileName, "w");
- if (File == NULL) {
- esyslog ("EEPG: Error creating file '%s', %s", FileName, strerror (errno));
- } else {
- int i = 0;
- while (SkyUkDictionary[i] != NULL) {
- fprintf (File, "%s\n", SkyUkDictionary[i]);
- i++;
- }
- isyslog ("EEPG: Success creating file '%s'", FileName);
- fclose (File);
- }
- } else {
- fclose (File);
- }
- free (FileName);
- asprintf (&FileName, "%s/%s", ConfDir, "sky_it.themes");
- File = fopen (FileName, "r");
- if (File == NULL) {
- esyslog ("EEPG: Error opening file '%s', %s", FileName, strerror (errno));
- File = fopen (FileName, "w");
- if (File == NULL) {
- esyslog ("EEPG: Error creating file '%s', %s", FileName, strerror (errno));
- } else {
- for (int i = 0; i < 256; i++) {
- if (SkyItThemes[i]) {
- fprintf (File, "0x%02x=%s\n", i, SkyItThemes[i]);
- } else {
- fprintf (File, "0x%02x=\n", i);
- }
- }
- isyslog ("EEPG: Success creating file '%s'", FileName);
- fclose (File);
- }
- } else {
- fclose (File);
- }
- free (FileName);
- asprintf (&FileName, "%s/%s", ConfDir, "sky_uk.themes");
- File = fopen (FileName, "r");
- if (File == NULL) {
- esyslog ("EEPG: Error opening file '%s', %s", FileName, strerror (errno));
- File = fopen (FileName, "w");
- if (File == NULL) {
- esyslog ("EEPG: Error creating file '%s', %s", FileName, strerror (errno));
- } else {
- for (int i = 0; i < 256; i++) {
- if (SkyUkThemes[i]) {
- fprintf (File, "0x%02x=%s\n", i, SkyUkThemes[i]);
- } else {
- fprintf (File, "0x%02x=\n", i);
- }
- }
- isyslog ("EEPG: Success creating file '%s'", FileName);
- fclose (File);
- }
- } else {
- fclose (File);
- }
- free (FileName);
- asprintf (&FileName, "%s/%s", ConfDir, "freesat.t1");
- File = fopen (FileName, "r");
- if (File == NULL) {
- esyslog ("EEPG: Error opening file '%s', %s", FileName, strerror (errno));
- File = fopen (FileName, "w");
- if (File == NULL) {
- esyslog ("EEPG: Error creating file '%s', %s", FileName, strerror (errno));
- } else {
- int i = 0;
- while (FreesatT1[i] != NULL) {
- fprintf (File, "%s\n", FreesatT1[i]);
- i++;
- }
- isyslog ("EEPG: Success creating file '%s'", FileName);
- fclose (File);
- }
- } else {
- fclose (File);
- }
- free (FileName);
- asprintf (&FileName, "%s/%s", ConfDir, "freesat.t2");
- File = fopen (FileName, "r");
- if (File == NULL) {
- esyslog ("EEPG: Error opening file '%s', %s", FileName, strerror (errno));
- File = fopen (FileName, "w");
- if (File == NULL) {
- esyslog ("EEPG: Error creating file '%s', %s", FileName, strerror (errno));
- } else {
- int i = 0;
- while (FreesatT2[i] != NULL) {
- fprintf (File, "%s\n", FreesatT2[i]);
- i++;
- }
- isyslog ("EEPG: Success creating file '%s'", FileName);
- fclose (File);
- }
- } else {
- fclose (File);
- }
- free (FileName);
+ CheckCreateFile(EEPG_FILE_EQUIV, FileEquivalences);
+ CheckCreateFile("sky_it.dict", SkyItDictionary);
+ CheckCreateFile("sky_uk.dict", SkyUkDictionary);
+ CheckCreateFile("sky_it.themes", SkyItThemes);
+ CheckCreateFile("sky_uk.themes", SkyUkThemes);
+ CheckCreateFile("freesat.t1", FreesatT1);
+ CheckCreateFile("freesat.t2", FreesatT2);
+ CheckCreateFile("sky_uk.themes", SkyUkThemes);
//store all available sources, so when a channel is not found on current satellite, we can look for alternate sat positions.
//perhaps this can be done smarter through existing VDR function???
@@ -4183,7 +4058,7 @@ bool cPluginEEPG::Start (void)
AvailableSources[NumberOfAvailableSources++] = Channel->Source ();
}
}
- if (VERBOSE >= 3)
+ if (CheckLevel(3))
for (int i = 0; i < NumberOfAvailableSources; i++)
isyslog ("EEPG: Available sources:%s.", *cSource::ToString (AvailableSources[i]));
@@ -4214,6 +4089,18 @@ cMenuSetupPage *cPluginEEPG::SetupMenu (void)
bool cPluginEEPG::SetupParse (const char *Name, const char *Value)
{
+// LogF(0, "!!!! Dime test LogF");
+// LogF(0, "!!!! Dime test LogF %d", 2);
+// LogI(0, "!!!! Dime test LogI");
+// LogI(0, "!!!! Dime test LogI %d", 2);
+// LogI(0, prep2("!!!! Dime test prep"));
+// LogI(0, prep2("!!!! Dime test prep %d"), 2);
+// LogD(0, "!!!! Dime test LogD");
+// LogD(0, "!!!! Dime test LogD %d", 2);
+// LogE(0, "!!!! Dime test LogE");
+// LogE(0, "!!!! Dime test LogE %d", 2);
+
+
if (!strcasecmp (Name, "OptionPattern"))
SetupPE.OptPat = atoi (Value);
else if (!strcasecmp (Name, "OrderInfo"))
@@ -4224,6 +4111,10 @@ bool cPluginEEPG::SetupParse (const char *Name, const char *Value)
SetupPE.FixEpg = atoi (Value);
else if (!strcasecmp (Name, "DisplayMessage"))
SetupPE.DisplayMessage = atoi (Value);
+#ifdef DEBUG
+ else if (!strcasecmp (Name, "LogLevel"))
+ SetupPE.LogLevel = atoi (Value);
+#endif
else
return false;
return true;
diff --git a/eepg.h b/eepg.h
index 3581ad9..01fa877 100644
--- a/eepg.h
+++ b/eepg.h
@@ -1,4 +1,4 @@
-#define DEBUG false
+//#define DEBUG false
//#define DEBUG_STARTTIME false
#define EEPG_FILE_EQUIV "eepg.equiv"
@@ -60,6 +60,7 @@ typedef struct {
unsigned char Unknown2;//FIXME
unsigned char Unknown3;//FIXME
unsigned char Rating;
+ unsigned short int TableId;
} Title_t;
typedef struct {